From f47ca29098846c155977974276ddac1b2e442717 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 11:23:50 +0200 Subject: [PATCH 01/50] chore: drop Windows/Linux builds, focus on the native macOS app --- .github/workflows/cmake.yml | 72 - .github/workflows/xcodebuild.yml | 10 +- .gitignore | 4 - .gitmodules | 3 - Client/CMakeLists.txt | 112 - Client/CMakeSettings.json | 26 - Client/CascadiaCodeFont.cpp | 100 - Client/CascadiaCodeFont.h | 6 - Client/Constants.h | 11 - Client/CrossPlatformGUI.cpp | 673 -- Client/CrossPlatformGUI.h | 109 - Client/Fonts/CascadiaCode.ttf | Bin 358448 -> 0 bytes Client/Fonts/FontLicense.txt | 94 - Client/Fonts/encodeFont.py | 20 - Client/Headphones.h | 1 - Client/IBluetoothConnector.h | 2 +- Client/SingleInstanceFuture.h | 54 - Client/TimedMessageQueue.cpp | 40 - Client/TimedMessageQueue.h | 48 - Client/imgui | 1 - Client/linux/DBusHelper.cpp | 335 - Client/linux/DBusHelper.h | 16 - Client/linux/FindDBus.cmake | 59 - Client/linux/LinuxBluetoothConnector.cpp | 151 - Client/linux/LinuxBluetoothConnector.h | 25 - Client/linux/LinuxGUI.cpp | 88 - Client/linux/LinuxGUI.h | 5 - Client/linux/main.cpp | 22 - .../project.pbxproj | 8 - Client/resources/devices/linkbuds-s.png | Bin 72807 -> 0 bytes Client/resources/devices/mdr-xb950bt.png | Bin 107133 -> 0 bytes Client/resources/devices/wf-1000xm4.png | Bin 63054 -> 0 bytes Client/resources/devices/wf-1000xm5.png | Bin 63455 -> 0 bytes Client/resources/devices/wf-c700n.png | Bin 65464 -> 0 bytes Client/resources/devices/wh-1000xm2.png | Bin 120624 -> 0 bytes Client/resources/devices/wh-1000xm3.png | Bin 69683 -> 0 bytes Client/resources/devices/wh-1000xm4.png | Bin 77456 -> 0 bytes Client/resources/devices/wh-1000xm5.png | Bin 76768 -> 0 bytes Client/resources/devices/wh-1000xm6.png | Bin 112001 -> 0 bytes Client/resources/devices/wh-ch520.png | Bin 68700 -> 0 bytes Client/resources/devices/wh-ch720n.png | Bin 122300 -> 0 bytes Client/resources/devices/wh-xb900n.png | Bin 72622 -> 0 bytes Client/resources/devices/wh-xb910n.png | Bin 77342 -> 0 bytes Client/stb_image.h | 7988 ----------------- Client/windows/WindowsBluetoothConnector.cpp | 238 - Client/windows/WindowsBluetoothConnector.h | 41 - Client/windows/WindowsGUI.cpp | 197 - Client/windows/WindowsGUI.h | 38 - Client/windows/main.cpp | 23 - README.md | 53 +- docs/banner.svg | 4 - docs/index.html | 27 +- 52 files changed, 19 insertions(+), 10685 deletions(-) delete mode 100644 .github/workflows/cmake.yml delete mode 100644 .gitmodules delete mode 100644 Client/CMakeLists.txt delete mode 100644 Client/CMakeSettings.json delete mode 100644 Client/CascadiaCodeFont.cpp delete mode 100644 Client/CascadiaCodeFont.h delete mode 100644 Client/CrossPlatformGUI.cpp delete mode 100644 Client/CrossPlatformGUI.h delete mode 100644 Client/Fonts/CascadiaCode.ttf delete mode 100644 Client/Fonts/FontLicense.txt delete mode 100644 Client/Fonts/encodeFont.py delete mode 100644 Client/SingleInstanceFuture.h delete mode 100644 Client/TimedMessageQueue.cpp delete mode 100644 Client/TimedMessageQueue.h delete mode 160000 Client/imgui delete mode 100644 Client/linux/DBusHelper.cpp delete mode 100644 Client/linux/DBusHelper.h delete mode 100644 Client/linux/FindDBus.cmake delete mode 100644 Client/linux/LinuxBluetoothConnector.cpp delete mode 100644 Client/linux/LinuxBluetoothConnector.h delete mode 100644 Client/linux/LinuxGUI.cpp delete mode 100644 Client/linux/LinuxGUI.h delete mode 100644 Client/linux/main.cpp delete mode 100644 Client/resources/devices/linkbuds-s.png delete mode 100644 Client/resources/devices/mdr-xb950bt.png delete mode 100644 Client/resources/devices/wf-1000xm4.png delete mode 100644 Client/resources/devices/wf-1000xm5.png delete mode 100644 Client/resources/devices/wf-c700n.png delete mode 100644 Client/resources/devices/wh-1000xm2.png delete mode 100644 Client/resources/devices/wh-1000xm3.png delete mode 100644 Client/resources/devices/wh-1000xm4.png delete mode 100644 Client/resources/devices/wh-1000xm5.png delete mode 100644 Client/resources/devices/wh-1000xm6.png delete mode 100644 Client/resources/devices/wh-ch520.png delete mode 100644 Client/resources/devices/wh-ch720n.png delete mode 100644 Client/resources/devices/wh-xb900n.png delete mode 100644 Client/resources/devices/wh-xb910n.png delete mode 100644 Client/stb_image.h delete mode 100644 Client/windows/WindowsBluetoothConnector.cpp delete mode 100644 Client/windows/WindowsBluetoothConnector.h delete mode 100644 Client/windows/WindowsGUI.cpp delete mode 100644 Client/windows/WindowsGUI.h delete mode 100644 Client/windows/main.cpp diff --git a/.github/workflows/cmake.yml b/.github/workflows/cmake.yml deleted file mode 100644 index 37a3a53a..00000000 --- a/.github/workflows/cmake.yml +++ /dev/null @@ -1,72 +0,0 @@ -name: Linux & Windows - -on: - push: - branches: - - main - - master - - 'feature/**' - pull_request: - branches: - - main - - master - workflow_dispatch: - -env: - # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.) - BUILD_TYPE: Release - -jobs: - build: - strategy: - matrix: - os: ["ubuntu-latest", "windows-latest"] - include: - - os: ubuntu-latest - binary_path: Client/build/SonyHeadphonesClient - artifact_name: "SonyHeadphonesClient-linux-x64" - script: "sudo apt-get update && sudo apt-get install libbluetooth-dev libglew-dev libglfw3-dev libdbus-1-dev" - - os: windows-latest - binary_path: Client/build/Release/SonyHeadphonesClient.exe - artifact_name: "SonyHeadphonesClient-win-x64.exe" - script: "" - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v4 - with: - submodules: true - - - name: Download Packages - run: ${{ matrix.script }} - - - name: Create Build Environment - # Some projects don't allow in-source building, so create a separate build directory - # We'll use this as our working directory for all subsequent commands - run: cmake -E make_directory ${{github.workspace}}/Client/build - - - name: Configure CMake - # Use a bash shell so we can use the same syntax for environment variable - # access regardless of the host operating system - shell: bash - working-directory: ${{github.workspace}}/Client/build - # Note the current convention is to use the -S and -B options here to specify source - # and build directories, but this is only available with CMake 3.13 and higher. - # The CMake binaries on the Github Actions machines are (as of this writing) 3.12 - run: cmake .. -DCMAKE_BUILD_TYPE=$BUILD_TYPE - - - name: Build - working-directory: ${{github.workspace}}/Client/build - shell: bash - # Execute the build. You can specify a specific target with "--target " - run: cmake --build . --config $BUILD_TYPE - - name: Upload a Build Artifact - uses: actions/upload-artifact@v4 - with: - # Artifact name - name: ${{ matrix.artifact_name }} - # A file, directory or wildcard pattern that describes what to upload - path: ${{github.workspace}}/${{matrix.binary_path}} - # The desired behavior if no files are found using the provided path. - - diff --git a/.github/workflows/xcodebuild.yml b/.github/workflows/xcodebuild.yml index 2d3193e3..97ddde40 100644 --- a/.github/workflows/xcodebuild.yml +++ b/.github/workflows/xcodebuild.yml @@ -3,10 +3,10 @@ name: macOS on: push: branches: - - master + - main pull_request: branches: - - master + - main jobs: build: @@ -20,9 +20,7 @@ jobs: runs-on: ${{ matrix.os }} steps: - - uses: actions/checkout@v3 - with: - submodules: true + - uses: actions/checkout@v4 - name: Create build directory working-directory: ${{github.workspace}}/Client @@ -44,7 +42,7 @@ jobs: run: zip -r SonyHeadphonesClient.zip SonyHeadphonesClient.app - name: Upload the zipped application - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: # Artifact name name: ${{ matrix.artifact_name }} diff --git a/.gitignore b/.gitignore index 32ccd080..954cfbca 100644 --- a/.gitignore +++ b/.gitignore @@ -523,10 +523,6 @@ MigrationBackup/ .ionide/ # End of https://www.toptal.com/developers/gitignore/api/c++,visualstudio,python -Client/imgui.ini # vscode .vscode/ - -# linux build -Client/linux/sonyheadphonesclient.build/ diff --git a/.gitmodules b/.gitmodules deleted file mode 100644 index a739d319..00000000 --- a/.gitmodules +++ /dev/null @@ -1,3 +0,0 @@ -[submodule "Client/imgui"] - path = Client/imgui - url = https://github.com/ocornut/imgui.git diff --git a/Client/CMakeLists.txt b/Client/CMakeLists.txt deleted file mode 100644 index 9695cef9..00000000 --- a/Client/CMakeLists.txt +++ /dev/null @@ -1,112 +0,0 @@ -cmake_minimum_required(VERSION 3.5) -project(SonyHeadphonesClient) - -set(CMAKE_CXX_STANDARD 20) - -find_package(Threads REQUIRED) - -add_executable(SonyHeadphonesClient) - -add_definitions(-D__HEADPHONES_APP_VERSION__="0.4.0-beta2") - -target_sources(SonyHeadphonesClient - PRIVATE BluetoothWrapper.cpp - ByteMagic.cpp - CommandSerializer.cpp - TimedMessageQueue.cpp - CrossPlatformGUI.cpp "Headphones.cpp") - -target_include_directories (SonyHeadphonesClient - PRIVATE ${CMAKE_SOURCE_DIR} -) - -if(UNIX AND NOT APPLE) - set(LINUX TRUE) -endif() - -if (WIN32 OR LINUX) - set (DEAR_IMGUI TRUE) -endif() - -if (DEAR_IMGUI) - target_sources(SonyHeadphonesClient - PRIVATE CrossPlatformGUI.cpp - imgui/imgui.cpp - imgui/imgui_draw.cpp - imgui/imgui_tables.cpp - imgui/imgui_widgets.cpp - CascadiaCodeFont.cpp - ) - - target_include_directories (SonyHeadphonesClient - PRIVATE ${CMAKE_SOURCE_DIR}/imgui - ) -endif () - -if (LINUX) - target_sources(SonyHeadphonesClient - PRIVATE linux/DBusHelper.cpp - linux/LinuxBluetoothConnector.cpp - linux/LinuxGUI.cpp - linux/main.cpp - imgui/backends/imgui_impl_glfw.cpp - imgui/backends/imgui_impl_opengl3.cpp - ) - - set (CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/linux) - - set (OpenGL_GL_PREFERENCE GLVND) - - find_package(DBus REQUIRED) - - find_package(glfw3 REQUIRED) - - find_package(OpenGL REQUIRED) - - if ((NOT DBUS_FOUND) OR (NOT glfw3_FOUND) OR (NOT OPENGL_FOUND)) - message ( FATAL_ERROR - "Didn't find one of the packages. For Debian based systems, use:" - "sudo apt install libbluetooth-dev libglfw3-dev libdbus-1-dev" ) - endif () - - target_include_directories(SonyHeadphonesClient - PRIVATE ${DBUS_INCLUDE_DIRS} - ${OPENGL_INCLUDE_DIRS} - ) - - target_link_libraries(SonyHeadphonesClient - PRIVATE ${DBUS_LIBRARIES} - glfw - bluetooth - OpenGL::GL - ) - -endif () - -if (WIN32) - ADD_DEFINITIONS(-DUNICODE) - - target_sources(SonyHeadphonesClient - PRIVATE windows/WindowsGUI.cpp - windows/main.cpp - windows/WindowsBluetoothConnector.cpp - imgui/backends/imgui_impl_dx11.cpp - imgui/backends/imgui_impl_win32.cpp - ) - - target_link_libraries(SonyHeadphonesClient - PRIVATE d3d11 - ) -endif () - -target_link_libraries(SonyHeadphonesClient - PRIVATE Threads::Threads -) - -if (WIN32 OR LINUX) - add_custom_command(TARGET SonyHeadphonesClient POST_BUILD - COMMAND ${CMAKE_COMMAND} -E copy_directory - "${CMAKE_CURRENT_SOURCE_DIR}/resources/devices" - "$/resources/devices" - COMMENT "Copying device hero images next to the binary") -endif() diff --git a/Client/CMakeSettings.json b/Client/CMakeSettings.json deleted file mode 100644 index 4c880308..00000000 --- a/Client/CMakeSettings.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "configurations": [ - { - "name": "x64-Debug", - "generator": "Ninja", - "configurationType": "Debug", - "inheritEnvironments": [ "msvc_x64_x64" ], - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "" - }, - { - "name": "x64-Release", - "generator": "Ninja", - "configurationType": "Release", - "buildRoot": "${projectDir}\\build\\${name}", - "installRoot": "${projectDir}\\out\\install\\${name}", - "cmakeCommandArgs": "", - "buildCommandArgs": "", - "ctestCommandArgs": "", - "inheritEnvironments": [ "msvc_x64_x64" ] - } - ] -} \ No newline at end of file diff --git a/Client/CascadiaCodeFont.cpp b/Client/CascadiaCodeFont.cpp deleted file mode 100644 index 621453a7..00000000 --- a/Client/CascadiaCodeFont.cpp +++ /dev/null @@ -1,100 +0,0 @@ -#include "CascadiaCodeFont.h" - -/* -Copyright (c) 2019 - Present, Microsoft Corporation, -with Reserved Font Name Cascadia Code. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. -*/ - -unsigned char CascadiaCodeTTF[358448] = {0,1,0,0,0,23,1,0,0,4,0,112,71,68,69,70,81,102,150,3,0,0,1,124,0,0,2,64,71,80,79,83,159,158,209,172,0,0,3,188,0,0,24,82,71,83,85,66,109,248,194,236,0,0,28,16,0,0,84,90,72,86,65,82,6,104,0,51,0,0,112,108,0,0,0,54,79,83,47,50,107,254,128,250,0,0,112,164,0,0,0,96,83,84,65,84,133,190,111,53,0,0,113,4,0,0,0,116,97,118,97,114,224,9,250,172,0,0,113,120,0,0,0,34,99,109,97,112,255,232,237,9,0,0,113,156,0,0,13,236,99,118,97,114,98,64,72,163,0,0,127,136,0,0,0,38,99,118,116,32,91,102,60,18,0,0,127,176,0,0,1,54,102,112,103,109,87,139,15,16,0,0,128,232,0,0,15,131,102,118,97,114,140,158,105,146,0,0,144,108,0,0,0,84,103,97,115,112,0,59,0,38,0,0,144,192,0,0,0,16,103,108,121,102,20,79,161,34,0,0,144,208,0,2,44,240,103,118,97,114,150,216,133,215,0,2,189,192,0,1,229,40,104,101,97,100,19,45,98,193,0,4,162,232,0,0,0,54,104,104,101,97,255,183,4,214,0,4,163,32,0,0,0,36,104,109,116,120,235,186,84,243,0,4,163,68,0,0,25,84,108,111,99,97,6,51,105,60,0,4,188,152,0,0,25,100,109,97,120,112,10,65,16,163,0,4,213,252,0,0,0,32,110,97,109,101,208,92,112,138,0,4,214,28,0,0,27,9,112,111,115,116,0,27,136,175,0,4,241,40,0,0,132,7,112,114,101,112,95,40,173,248,0,5,117,48,0,0,3,0,0,1,0,3,0,18,0,0,0,0,0,0,1,216,0,0,1,252,0,2,0,75,0,1,0,54,0,1,0,57,0,57,0,1,0,59,0,70,0,1,0,72,0,122,0,1,0,124,0,140,0,1,0,143,0,167,0,1,0,169,0,187,0,1,0,189,0,193,0,1,0,195,0,228,0,1,0,231,0,249,0,1,0,251,0,252,0,1,0,254,1,17,0,1,1,19,1,21,0,1,1,23,1,26,0,1,1,28,1,39,0,1,1,42,1,64,0,1,1,66,1,70,0,1,1,72,1,82,0,1,1,84,1,89,0,1,1,91,1,110,0,1,1,112,1,130,0,1,1,133,1,137,0,1,1,141,1,141,0,1,1,143,1,143,0,1,1,145,1,145,0,1,1,150,1,152,0,1,1,155,1,157,0,1,1,161,1,163,0,1,1,165,1,169,0,1,1,171,1,171,0,1,1,182,1,187,0,1,1,195,1,198,0,1,1,201,1,201,0,1,1,203,1,205,0,1,1,209,1,209,0,1,1,212,1,213,0,1,1,216,1,218,0,1,1,221,1,225,0,1,1,229,1,229,0,1,1,231,1,232,0,1,1,234,1,235,0,1,1,237,1,237,0,1,1,248,1,252,0,1,2,2,2,2,0,1,2,4,2,4,0,1,2,8,2,8,0,1,2,10,2,15,0,1,2,18,2,18,0,1,2,21,2,23,0,1,2,26,2,27,0,1,2,35,2,36,0,1,2,39,2,44,0,1,2,46,2,47,0,1,2,49,2,49,0,1,2,51,2,51,0,1,2,53,2,54,0,1,2,56,2,56,0,1,2,59,2,59,0,1,2,66,2,67,0,1,2,73,2,73,0,1,2,75,2,75,0,1,2,77,2,77,0,1,2,83,2,83,0,1,2,89,2,89,0,1,2,93,2,101,0,1,2,103,2,104,0,1,3,29,3,32,0,1,3,34,3,35,0,1,3,39,3,40,0,1,3,42,3,42,0,1,3,47,3,50,0,1,3,56,3,58,0,1,6,27,6,46,0,3,6,60,6,75,0,3,6,79,6,80,0,3,0,1,0,1,0,0,0,8,0,2,0,4,6,27,6,39,0,0,6,45,6,46,0,13,6,60,6,71,0,15,6,73,6,75,0,27,0,1,0,0,0,16,0,2,0,0,0,32,0,0,0,50,0,1,0,2,192,0,192,0,0,0,0,0,64,0,64,0,0,10,0,0,0,1,0,0,158,215,221,230,233,246,3,5,20,35,0,4,0,0,0,2,0,0,0,1,0,236,0,20,4,248,10,60,0,1,0,0,0,10,0,94,0,120,0,3,68,70,76,84,0,20,99,121,114,108,0,24,108,97,116,110,0,40,0,54,0,0,0,50,0,2,66,71,82,32,0,50,83,82,66,32,0,50,0,34,0,5,67,65,84,32,0,34,77,79,76,32,0,34,78,76,68,32,0,34,80,76,75,32,0,34,82,79,77,32,0,34,0,0,255,255,0,2,0,0,0,1,0,2,109,97,114,107,0,14,109,107,109,107,0,20,0,0,0,1,0,0,0,0,0,1,0,1,0,2,0,6,21,218,0,4,0,0,0,1,0,8,0,1,0,12,0,28,0,4,1,208,2,110,0,2,0,2,6,27,6,46,0,0,6,60,6,75,0,20,0,2,0,72,0,1,0,54,0,0,0,57,0,57,0,54,0,59,0,70,0,55,0,72,0,122,0,67,0,124,0,140,0,118,0,143,0,167,0,135,0,169,0,187,0,160,0,189,0,193,0,179,0,195,0,228,0,184,0,231,0,249,0,218,0,251,0,252,0,237,0,254,1,17,0,239,1,19,1,21,1,3,1,23,1,26,1,6,1,28,1,39,1,10,1,42,1,64,1,22,1,66,1,70,1,45,1,72,1,82,1,50,1,84,1,89,1,61,1,91,1,110,1,67,1,112,1,130,1,87,1,133,1,137,1,106,1,141,1,141,1,111,1,143,1,143,1,112,1,145,1,145,1,113,1,150,1,152,1,114,1,155,1,157,1,117,1,161,1,163,1,120,1,165,1,168,1,123,1,171,1,171,1,127,1,182,1,187,1,128,1,195,1,198,1,134,1,201,1,201,1,138,1,203,1,205,1,139,1,209,1,209,1,142,1,212,1,213,1,143,1,216,1,218,1,145,1,221,1,225,1,148,1,229,1,229,1,153,1,231,1,232,1,154,1,234,1,235,1,156,1,237,1,237,1,158,1,248,1,252,1,159,2,2,2,2,1,164,2,4,2,4,1,165,2,8,2,8,1,166,2,10,2,15,1,167,2,18,2,18,1,173,2,21,2,23,1,174,2,26,2,27,1,177,2,35,2,36,1,179,2,39,2,44,1,181,2,46,2,47,1,187,2,49,2,49,1,189,2,51,2,51,1,190,2,53,2,54,1,191,2,56,2,56,1,193,2,59,2,59,1,194,2,66,2,67,1,195,2,73,2,73,1,197,2,75,2,75,1,198,2,77,2,77,1,199,2,83,2,83,1,200,2,89,2,89,1,201,2,93,2,101,1,202,2,103,2,104,1,211,3,29,3,32,1,213,3,34,3,35,1,217,3,39,3,40,1,219,3,42,3,42,1,221,3,47,3,50,1,222,3,56,3,58,1,226,0,36,0,0,20,202,0,0,20,208,0,0,20,242,0,0,21,8,0,0,20,214,0,0,20,230,0,0,20,230,0,0,20,230,0,0,20,230,0,0,20,220,0,0,20,230,0,0,20,236,0,0,21,20,0,1,0,146,0,2,19,246,0,2,19,246,0,2,19,168,0,3,0,152,0,0,20,242,0,0,21,8,0,0,21,14,0,0,21,14,0,0,21,14,0,0,21,14,0,0,21,14,0,0,20,248,0,0,21,14,0,0,21,14,0,0,21,14,0,0,21,2,0,0,21,14,0,0,21,14,0,1,18,208,0,0,21,8,0,0,21,14,0,0,21,20,0,1,2,228,4,36,0,1,2,203,0,10,1,229,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,21,52,0,0,19,88,18,206,21,52,0,0,19,88,18,206,21,52,0,0,19,88,18,206,21,52,0,0,19,88,18,206,21,52,0,0,19,88,18,206,21,52,0,0,19,88,18,206,21,46,0,0,19,88,18,206,15,212,0,0,19,88,18,206,15,212,0,0,19,88,18,206,15,212,0,0,19,88,18,206,15,212,0,0,19,88,18,206,15,212,0,0,19,88,18,206,15,212,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,21,58,0,0,19,88,18,206,21,58,0,0,19,88,18,206,20,112,0,0,19,88,18,206,15,184,0,0,19,64,15,42,15,184,0,0,19,64,18,206,19,70,0,0,19,76,0,0,19,4,0,0,19,10,0,0,19,4,0,0,19,10,0,0,15,58,0,0,19,10,0,0,19,4,0,0,19,10,0,0,15,64,0,0,19,10,0,0,15,70,0,0,19,10,0,0,15,82,0,0,18,116,0,0,15,82,0,0,18,116,0,0,15,76,0,0,18,116,0,0,15,82,0,0,18,116,0,0,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,15,88,0,0,18,194,18,206,15,94,0,0,18,194,18,206,15,100,0,0,18,194,18,206,15,100,0,0,18,194,18,206,15,100,0,0,18,194,18,206,15,100,0,0,18,194,18,206,15,100,0,0,18,194,18,206,15,100,0,0,18,194,18,206,18,188,0,0,18,194,18,206,15,106,0,0,18,194,18,206,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,19,40,0,0,19,46,0,0,19,52,0,0,19,58,0,0,15,112,0,0,19,58,0,0,15,118,0,0,19,58,0,0,15,124,0,0,19,58,0,0,19,52,0,0,19,58,0,0,15,130,0,0,19,58,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,21,46,0,0,19,88,0,0,15,212,0,0,19,88,0,0,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,21,52,0,0,19,88,18,206,15,212,0,0,19,88,18,206,20,112,0,0,19,88,18,206,21,18,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,15,136,0,0,19,88,0,0,15,146,0,0,19,88,0,0,20,112,0,0,19,64,0,0,20,112,0,0,19,64,0,0,15,162,18,200,15,168,0,0,15,162,18,200,15,168,0,0,15,162,18,200,15,168,0,0,15,162,18,200,15,168,0,0,15,162,18,200,15,168,0,0,15,162,18,200,15,168,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,21,46,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,18,200,15,174,18,206,20,112,18,200,19,88,18,206,21,52,18,200,19,88,18,206,15,212,18,200,19,88,18,206,15,212,18,200,19,88,18,206,15,212,18,200,19,88,18,206,15,212,18,200,19,88,18,206,15,212,18,200,19,88,18,206,15,212,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,15,184,0,0,19,64,0,0,19,70,0,0,19,76,0,0,19,70,0,0,19,76,0,0,20,112,18,200,19,88,18,206,19,70,0,0,19,16,0,0,19,70,0,0,19,16,0,0,15,190,0,0,19,16,0,0,19,70,0,0,19,16,0,0,15,196,0,0,19,16,0,0,20,112,0,0,19,16,0,0,21,46,0,0,19,16,0,0,20,112,0,0,19,16,0,0,15,212,0,0,19,16,0,0,20,112,0,0,19,16,0,0,20,112,0,0,19,82,0,0,20,112,0,0,19,82,0,0,21,46,0,0,19,82,0,0,20,112,0,0,19,82,0,0,20,112,0,0,19,82,0,0,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,21,52,18,200,19,88,18,206,15,212,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,18,200,19,88,18,206,21,58,18,200,19,88,18,206,20,112,18,200,19,88,18,206,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,15,212,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,15,212,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,15,218,0,0,15,228,0,0,20,112,0,0,19,88,0,0,21,46,0,0,19,88,0,0,21,18,0,0,19,88,0,0,19,4,0,0,19,10,0,0,20,112,0,0,19,88,0,0,20,112,18,200,19,88,18,206,20,112,0,0,19,16,0,0,20,112,0,0,19,88,0,0,20,78,0,0,19,88,16,74,15,244,0,0,19,88,18,206,16,148,0,0,19,88,18,206,15,250,0,0,19,88,18,206,16,148,0,0,19,88,18,206,16,0,0,0,19,88,18,206,16,148,0,0,19,88,18,206,16,148,0,0,19,88,18,206,16,154,0,0,19,88,18,206,16,160,0,0,19,88,18,206,16,6,0,0,19,88,18,206,16,160,0,0,19,88,18,206,16,12,0,0,19,88,18,206,16,160,0,0,19,88,18,206,16,160,0,0,19,88,18,206,16,18,0,0,19,88,18,206,20,78,0,0,19,88,18,206,16,154,0,0,19,88,18,206,20,78,0,0,19,88,18,206,16,24,0,0,19,88,18,206,20,78,0,0,19,88,18,206,16,30,0,0,19,88,18,206,16,36,0,0,19,88,18,206,20,78,0,0,19,88,18,206,20,72,0,0,19,88,0,0,18,2,0,0,19,88,0,0,16,42,0,0,19,64,0,0,18,248,0,0,18,254,0,0,16,210,0,0,18,254,0,0,16,228,0,0,18,254,0,0,18,248,0,0,18,254,0,0,16,222,0,0,18,254,0,0,16,48,0,0,18,254,0,0,16,54,16,64,19,34,0,0,19,22,19,28,19,34,0,0,17,90,0,0,18,194,16,74,16,84,0,0,18,194,18,206,16,90,0,0,18,194,18,206,18,80,0,0,18,194,18,206,16,108,0,0,18,194,18,206,16,96,0,0,18,194,18,206,16,108,0,0,18,194,18,206,16,102,0,0,18,194,18,206,16,108,0,0,18,194,18,206,16,108,0,0,18,194,18,206,18,86,0,0,18,194,18,206,16,114,0,0,18,194,18,206,18,74,0,0,18,194,18,206,18,80,0,0,18,194,18,206,18,74,0,0,18,194,18,206,16,120,0,0,18,194,18,206,18,74,0,0,18,194,18,206,18,242,0,0,0,0,0,0,18,74,0,0,18,194,18,206,20,106,0,0,16,126,0,0,17,146,0,0,16,142,0,0,20,78,0,0,18,164,0,0,16,148,0,0,18,164,0,0,16,154,0,0,18,164,0,0,16,160,0,0,18,164,0,0,20,78,0,0,18,164,0,0,16,166,0,0,18,164,0,0,16,172,0,0,19,88,0,0,18,128,0,0,19,88,0,0,16,182,0,0,19,88,0,0,16,188,0,0,19,88,0,0,0,0,0,0,18,134,0,0,18,248,0,0,18,134,16,204,16,210,0,0,18,134,18,206,16,216,0,0,18,134,18,206,16,222,0,0,18,134,18,206,18,122,0,0,18,134,18,206,0,0,0,0,18,134,0,0,16,228,0,0,18,134,18,206,18,248,0,0,18,134,18,206,16,234,0,0,18,134,18,206,0,0,0,0,18,134,0,0,18,248,0,0,18,134,18,206,16,240,0,0,17,10,0,0,16,250,0,0,17,10,0,0,17,16,0,0,17,38,0,0,17,32,0,0,17,38,0,0,17,44,17,50,18,134,0,0,17,44,17,50,18,134,0,0,17,44,17,50,18,134,0,0,17,44,17,50,18,134,0,0,17,44,17,50,18,134,0,0,17,44,17,50,18,134,0,0,20,72,0,0,19,88,0,0,20,118,0,0,19,88,0,0,18,92,0,0,19,88,0,0,20,118,0,0,19,88,0,0,18,170,0,0,19,88,0,0,20,118,0,0,19,88,0,0,20,118,0,0,19,88,0,0,20,72,17,56,19,88,18,236,18,2,18,230,19,88,18,236,20,206,18,230,19,88,18,236,20,194,18,230,19,88,18,236,17,72,18,230,19,88,18,236,20,194,18,230,19,88,18,236,17,78,18,230,19,88,18,236,20,194,18,230,19,88,18,236,20,194,18,230,19,88,18,236,18,224,18,230,19,88,18,236,20,72,18,230,19,88,18,236,20,200,18,230,19,88,18,236,20,72,18,230,19,88,18,236,20,72,18,230,19,88,18,236,18,2,18,230,19,88,18,236,20,72,18,230,19,88,18,236,20,200,18,230,19,88,18,236,20,72,18,230,19,88,18,236,20,72,18,230,19,88,18,236,17,84,18,230,19,88,18,236,18,146,18,230,19,88,18,236,20,72,18,230,19,88,18,236,20,72,18,230,19,88,18,236,18,2,18,230,19,88,18,236,20,72,18,230,19,88,18,236,17,90,0,0,19,16,0,0,18,248,0,0,18,254,0,0,17,96,0,0,17,106,0,0,20,72,0,0,17,122,0,0,18,2,0,0,17,122,0,0,20,200,0,0,17,122,0,0,20,72,0,0,17,122,0,0,18,104,0,0,19,16,0,0,17,128,0,0,19,16,0,0,17,134,0,0,19,16,0,0,18,104,0,0,19,16,0,0,17,140,0,0,19,16,0,0,18,104,0,0,19,16,0,0,17,146,0,0,17,152,0,0,17,168,17,174,17,180,0,0,17,168,17,174,17,180,0,0,17,168,17,174,17,180,0,0,17,168,17,174,17,180,0,0,17,168,17,174,17,180,0,0,20,118,18,176,18,182,18,206,18,92,18,176,18,182,18,206,17,186,18,176,18,182,18,206,17,222,18,176,18,182,18,206,17,228,18,176,18,182,18,206,20,118,18,176,18,182,18,206,18,170,18,176,18,182,18,206,20,118,18,176,18,182,18,206,20,118,18,176,18,182,18,206,18,92,18,176,18,182,18,206,20,118,18,176,18,182,18,206,18,170,18,176,18,182,18,206,20,118,18,176,18,182,18,206,20,118,18,176,18,182,18,206,17,192,18,176,18,182,18,206,17,198,18,176,18,182,18,206,20,118,18,176,18,182,18,206,17,204,18,176,18,182,18,206,20,118,18,176,18,182,18,206,17,210,0,0,17,216,0,0,20,118,0,0,18,140,0,0,18,92,0,0,18,140,0,0,17,222,0,0,18,140,0,0,17,228,0,0,18,140,0,0,18,170,0,0,18,140,0,0,20,72,0,0,19,88,0,0,18,98,0,0,18,158,0,0,17,234,0,0,18,158,0,0,17,240,0,0,18,158,0,0,17,246,0,0,18,158,0,0,18,98,0,0,18,158,0,0,17,252,0,0,18,158,0,0,18,98,0,0,18,158,0,0,18,152,0,0,18,158,0,0,18,98,0,0,18,158,0,0,20,72,0,0,19,88,0,0,18,2,0,0,19,88,0,0,20,200,0,0,19,88,0,0,18,8,0,0,19,88,0,0,18,14,0,0,18,254,0,0,18,20,0,0,19,88,0,0,18,32,18,230,19,88,18,236,18,26,0,0,19,16,0,0,18,32,0,0,19,88,0,0,0,0,0,0,0,0,18,38,20,112,0,0,19,88,18,206,19,70,0,0,19,76,0,0,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,18,188,0,0,18,194,18,206,20,112,0,0,19,88,0,0,0,0,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,18,200,19,88,18,206,19,70,0,0,19,76,0,0,19,4,0,0,19,10,0,0,20,112,0,0,19,82,0,0,18,56,0,0,0,0,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,16,0,0,19,4,0,0,19,10,0,0,18,44,0,0,19,76,0,0,20,112,0,0,19,88,18,206,20,112,0,0,19,88,18,206,18,50,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,18,206,20,112,0,0,19,88,0,0,20,112,18,200,19,88,18,206,18,56,0,0,0,0,0,0,20,78,0,0,19,88,18,206,18,62,0,0,0,0,0,0,18,68,0,0,0,0,0,0,18,74,0,0,18,194,18,206,18,80,0,0,18,194,18,206,18,86,0,0,18,194,18,206,20,72,0,0,0,0,0,0,20,72,0,0,0,0,0,0,20,200,0,0,0,0,0,0,20,118,0,0,0,0,0,0,18,92,0,0,0,0,0,0,20,72,18,230,19,88,18,236,18,248,0,0,18,254,0,0,18,248,0,0,18,254,0,0,18,98,0,0,18,158,0,0,18,98,0,0,18,158,0,0,20,72,0,0,19,88,0,0,18,104,0,0,19,16,0,0,18,248,0,0,18,254,0,0,18,110,0,0,18,116,0,0,0,0,0,0,18,134,0,0,18,122,0,0,18,134,18,206,18,242,0,0,0,0,0,0,20,118,0,0,0,0,0,0,20,72,0,0,19,88,0,0,18,128,0,0,19,88,0,0,18,248,0,0,18,134,18,206,20,106,0,0,18,140,0,0,18,146,0,0,0,0,0,0,20,72,18,230,19,88,18,236,18,152,0,0,18,158,0,0,20,78,0,0,18,164,0,0,20,118,18,176,18,182,18,206,20,118,18,176,18,182,18,206,18,170,18,176,18,182,18,206,20,118,0,0,19,88,0,0,20,72,0,0,19,88,0,0,20,112,0,0,19,88,18,206,19,70,0,0,19,76,0,0,18,188,0,0,18,194,18,206,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,18,200,19,88,18,206,20,112,0,0,19,88,18,206,20,112,0,0,19,64,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,18,200,19,88,18,206,19,70,0,0,19,76,0,0,20,112,0,0,19,82,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,20,112,0,0,0,0,0,0,20,112,0,0,19,88,18,206,20,112,0,0,19,88,0,0,18,242,0,0,0,0,0,0,20,118,0,0,0,0,0,0,18,218,0,0,0,0,0,0,20,72,18,230,19,88,18,236,20,72,0,0,0,0,0,0,20,72,0,0,19,88,0,0,18,218,0,0,0,0,0,0,18,212,0,0,0,0,0,0,18,218,0,0,0,0,0,0,20,72,0,0,0,0,0,0,18,224,0,0,0,0,0,0,20,72,0,0,0,0,0,0,20,72,18,230,19,88,18,236,20,72,0,0,19,88,0,0,18,242,0,0,0,0,0,0,20,118,0,0,0,0,0,0,19,70,0,0,19,76,0,0,19,4,0,0,19,10,0,0,18,248,0,0,18,254,0,0,19,4,0,0,19,10,0,0,20,112,0,0,19,16,0,0,19,22,19,28,19,34,0,0,19,40,0,0,19,46,0,0,19,52,0,0,19,58,0,0,20,112,0,0,19,64,0,0,20,112,0,0,19,88,0,0,19,70,0,0,19,76,0,0,19,70,0,0,19,76,0,0,19,70,0,0,19,76,0,0,20,112,0,0,19,82,0,0,20,112,0,0,19,88,0,0,20,112,0,0,19,88,0,0,0,3,4,56,0,10,0,10,0,0,0,0,0,3,128,0,0,1,2,193,7,48,0,1,2,193,6,212,0,1,2,193,7,56,0,1,2,38,7,48,0,1,2,38,5,140,0,1,2,118,6,206,0,1,2,118,7,48,0,1,2,118,6,212,0,1,2,118,7,56,0,1,2,183,6,206,0,1,2,183,7,48,0,1,2,183,6,212,0,1,2,183,7,56,0,3,3,12,5,140,0,20,0,0,0,3,3,12,6,212,0,10,0,0,0,1,0,3,128,0,0,1,1,4,5,140,0,1,2,108,0,0,0,3,2,88,0,0,0,0,0,32,0,1,2,128,5,140,0,1,2,48,7,48,0,3,2,108,5,140,0,10,0,0,0,1,0,0,128,0,0,1,2,88,6,212,0,3,2,88,5,140,0,20,0,0,0,3,2,88,0,0,0,10,0,0,0,0,0,8,128,0,0,1,2,68,6,82,0,1,2,68,7,219,0,1,2,68,7,229,0,1,3,169,7,166,0,1,3,168,7,176,0,1,2,70,5,226,0,1,2,68,5,156,0,1,2,68,6,94,0,1,2,68,7,106,0,1,1,24,6,32,0,1,2,136,5,226,0,3,3,158,6,32,1,12,0,0,0,3,4,156,4,36,1,2,0,0,0,3,4,56,0,10,0,248,0,0,0,1,2,108,6,82,0,1,2,108,5,173,0,1,3,209,7,166,0,1,3,208,7,176,0,1,2,108,5,238,0,1,2,106,5,226,0,1,2,108,5,156,0,3,2,78,0,0,0,10,0,0,0,0,0,5,128,0,0,1,1,252,0,0,0,1,2,68,5,173,0,1,2,68,6,92,0,1,2,68,5,238,0,1,2,66,5,226,0,3,1,18,5,220,0,26,0,0,0,1,1,18,7,128,0,3,1,18,7,36,0,10,0,0,0,0,0,2,128,0,0,1,2,219,0,10,0,1,2,138,6,82,0,1,2,138,5,173,0,1,2,138,5,238,0,1,2,138,6,92,0,1,2,138,5,156,0,3,3,14,4,36,0,20,0,0,0,3,3,14,5,238,0,10,0,0,0,0,0,9,128,0,0,1,3,12,254,32,0,3,1,10,6,32,0,10,0,0,0,0,0,1,128,0,0,1,1,10,6,32,0,1,2,68,0,0,0,1,1,250,5,220,0,1,3,192,5,220,0,3,4,16,4,36,0,10,0,0,0,0,0,4,128,0,0,1,3,189,7,166,0,1,3,188,7,176,0,1,2,168,6,92,0,1,2,98,4,36,0,3,2,36,4,36,0,20,0,0,0,3,2,36,0,0,0,10,0,0,0,1,0,2,128,0,0,1,1,174,0,0,0,1,2,118,6,82,0,1,2,118,6,92,0,1,2,118,5,238,0,1,2,228,6,32,0,3,1,252,0,0,0,10,0,0,0,1,0,1,128,0,0,1,2,88,5,100,0,1,4,46,4,36,0,1,2,143,0,0,0,1,2,78,5,173,0,1,2,158,6,92,0,1,2,78,5,156,0,1,2,78,6,94,0,1,2,93,4,36,0,1,2,93,0,0,0,1,2,78,5,238,0,1,2,80,5,226,0,1,2,103,6,82,0,1,2,103,5,238,0,1,2,105,5,226,0,1,2,103,6,92,0,1,2,88,6,82,0,1,2,86,5,226,0,1,2,138,6,112,0,1,2,78,6,112,0,1,2,118,6,112,0,1,2,88,6,112,0,1,1,44,0,5,0,1,2,18,5,140,0,1,3,12,5,140,0,1,2,138,5,140,0,1,2,178,4,36,0,1,2,128,6,82,0,1,2,108,4,36,0,1,2,108,6,92,0,1,2,110,5,226,0,1,2,78,6,82,0,1,2,103,4,36,0,1,2,118,4,36,0,1,2,38,4,36,0,1,2,38,0,0,0,1,2,140,5,226,0,1,1,18,5,220,0,1,2,158,0,0,0,1,2,78,0,0,0,1,2,88,5,156,0,1,2,103,5,156,0,1,3,177,0,0,0,1,2,28,254,32,0,1,2,78,6,92,0,1,4,96,4,36,0,1,2,58,0,0,0,1,2,118,5,140,0,1,2,118,0,0,0,1,4,156,5,140,0,1,4,56,0,10,0,1,2,26,5,226,0,1,2,24,4,36,0,1,2,90,5,226,0,1,4,16,4,36,0,1,2,88,0,10,0,1,2,128,4,36,0,1,2,138,4,36,0,1,2,138,0,0,0,1,2,193,5,140,0,1,2,163,0,0,0,1,2,98,0,0,0,1,3,158,6,32,0,1,4,156,4,36,0,1,2,28,0,0,0,1,2,148,5,140,0,1,2,148,0,0,0,1,2,183,5,140,0,1,2,203,0,0,0,1,2,128,0,0,0,1,2,48,5,140,0,1,2,48,0,0,0,1,2,83,0,0,0,1,2,88,0,0,0,6,0,16,0,1,0,10,0,0,0,1,0,12,0,40,0,1,0,74,1,20,0,2,0,4,6,27,6,39,0,0,6,45,6,46,0,13,6,60,6,71,0,15,6,73,6,75,0,27,0,2,0,5,6,27,6,39,0,0,6,45,6,46,0,13,6,61,6,71,0,15,6,73,6,73,0,26,6,75,6,75,0,27,0,30,0,0,0,122,0,0,0,128,0,0,0,162,0,0,0,184,0,0,0,134,0,0,0,150,0,0,0,150,0,0,0,150,0,0,0,150,0,0,0,140,0,0,0,150,0,0,0,156,0,0,0,196,0,0,0,162,0,0,0,184,0,0,0,190,0,0,0,190,0,0,0,190,0,0,0,190,0,0,0,190,0,0,0,168,0,0,0,190,0,0,0,190,0,0,0,190,0,0,0,178,0,0,0,190,0,0,0,190,0,0,0,184,0,0,0,190,0,0,0,196,0,1,2,86,4,36,0,1,2,90,4,36,0,1,2,18,4,36,0,3,2,78,4,36,0,166,0,0,0,1,2,88,4,36,0,1,2,68,4,36,0,1,2,43,4,36,0,3,2,88,5,140,0,206,0,0,0,1,2,78,5,140,0,1,2,58,4,36,0,1,2,88,5,140,0,1,2,78,4,36,0,28,0,58,0,58,0,138,0,144,0,64,0,70,0,76,0,82,0,88,0,94,0,110,0,126,0,132,0,138,0,144,0,150,0,156,0,156,0,156,0,162,0,178,0,184,0,190,0,196,0,202,0,208,0,214,0,220,0,1,2,88,5,226,0,1,2,98,6,92,0,1,2,88,5,238,0,1,2,88,6,92,0,1,2,88,5,173,0,1,2,88,6,94,0,3,2,78,5,226,0,10,0,0,0,0,0,6,128,0,0,3,2,88,5,156,0,0,0,10,0,0,0,0,128,0,0,1,2,78,6,62,0,1,2,78,5,218,0,1,2,43,6,92,0,1,2,58,6,82,0,1,2,88,7,56,0,1,2,88,6,231,0,3,2,88,6,212,0,10,0,0,0,0,0,7,128,0,0,1,2,88,7,48,0,1,2,88,6,206,0,1,2,88,7,108,0,1,2,88,6,241,0,1,2,88,6,201,0,1,2,88,6,251,0,1,2,58,6,112,0,1,2,78,6,70,0,0,0,1,0,1,0,14,1,110,3,138,0,0,84,42,0,3,68,70,76,84,0,20,99,121,114,108,0,24,108,97,116,110,0,120,1,38,0,0,1,34,0,2,66,71,82,32,0,16,83,82,66,32,0,56,0,0,255,255,0,17,0,0,0,1,0,2,0,3,0,4,0,5,0,6,0,12,0,13,0,14,0,16,0,17,0,18,0,19,0,20,0,21,0,15,0,0,255,255,0,17,0,0,0,1,0,2,0,3,0,4,0,5,0,11,0,12,0,13,0,14,0,16,0,17,0,18,0,19,0,20,0,21,0,15,0,194,0,5,67,65,84,32,0,34,77,79,76,32,0,74,78,76,68,32,0,114,80,76,75,32,0,154,82,79,77,32,0,194,0,0,255,255,0,17,0,0,0,1,0,2,0,3,0,4,0,5,0,7,0,12,0,13,0,14,0,16,0,17,0,18,0,19,0,20,0,21,0,15,0,0,255,255,0,17,0,0,0,1,0,2,0,3,0,4,0,5,0,8,0,12,0,13,0,14,0,16,0,17,0,18,0,19,0,20,0,21,0,15,0,0,255,255,0,17,0,0,0,1,0,2,0,3,0,4,0,5,0,9,0,12,0,13,0,14,0,16,0,17,0,18,0,19,0,20,0,21,0,15,0,0,255,255,0,17,0,0,0,1,0,2,0,3,0,4,0,5,0,10,0,12,0,13,0,14,0,16,0,17,0,18,0,19,0,20,0,21,0,15,0,0,255,255,0,16,0,0,0,1,0,2,0,3,0,4,0,5,0,12,0,13,0,14,0,16,0,17,0,18,0,19,0,20,0,21,0,15,0,22,97,97,108,116,0,134,99,97,108,116,0,142,99,97,115,101,1,158,99,99,109,112,1,164,100,110,111,109,1,172,102,114,97,99,1,178,108,111,99,108,1,188,108,111,99,108,1,194,108,111,99,108,1,200,108,111,99,108,1,206,108,111,99,108,1,212,108,111,99,108,1,218,110,117,109,114,1,224,111,114,100,110,1,230,114,99,108,116,1,238,114,118,114,110,1,244,115,105,110,102,1,248,115,115,48,50,1,254,115,115,49,57,2,4,115,117,98,115,2,10,115,117,112,115,2,16,122,101,114,111,2,22,0,0,0,2,0,0,0,1,0,0,0,134,0,2,0,6,0,10,0,13,0,16,0,21,0,24,0,28,0,31,0,34,0,38,0,41,0,44,0,47,0,51,0,54,0,57,0,60,0,63,0,66,0,69,0,72,0,75,0,78,0,82,0,85,0,88,0,91,0,94,0,98,0,101,0,104,0,106,0,108,0,111,0,113,0,115,0,118,0,120,0,123,0,125,0,128,0,131,0,134,0,137,0,141,0,143,0,145,0,149,0,151,0,154,0,158,0,162,0,165,0,169,0,172,0,176,0,179,0,181,0,184,0,186,0,188,0,190,0,192,0,195,0,197,0,199,0,202,0,204,0,206,0,208,0,210,0,212,0,214,0,216,0,218,0,221,0,223,0,225,0,227,0,229,0,232,0,234,0,236,0,239,0,241,0,243,0,246,0,248,0,250,0,252,0,254,1,1,1,3,1,5,1,7,1,9,1,11,1,13,1,15,1,17,1,19,1,22,1,24,1,26,1,28,1,30,1,32,1,34,1,36,1,39,1,41,1,43,1,45,1,48,1,50,1,52,1,55,1,57,1,59,1,62,1,64,1,66,1,68,1,71,1,74,1,76,1,78,1,80,1,83,1,86,1,88,1,90,1,93,0,0,0,1,1,124,0,0,0,2,1,96,1,100,0,0,0,1,1,115,0,0,0,3,1,116,1,117,1,118,0,0,0,1,1,109,0,0,0,1,1,106,0,0,0,1,1,103,0,0,0,1,1,105,0,0,0,1,1,104,0,0,0,1,1,110,0,0,0,1,1,114,0,0,0,2,1,121,1,123,0,0,0,1,1,128,0,0,0,0,0,0,0,1,1,112,0,0,0,1,1,125,0,0,0,1,1,127,0,0,0,1,1,111,0,0,0,1,1,113,0,0,0,1,1,126,1,130,3,6,4,180,7,44,7,190,44,56,44,56,7,208,8,98,44,56,44,56,8,116,9,30,50,254,9,50,9,220,56,112,9,250,10,140,64,108,64,108,64,108,10,154,11,10,40,150,11,28,11,180,42,214,42,214,11,194,12,50,44,56,12,68,12,200,44,56,12,218,13,96,48,120,48,120,13,110,13,244,48,120,14,6,14,118,72,242,14,144,15,46,50,254,15,64,15,222,50,254,50,254,15,236,16,138,50,254,16,156,17,58,50,254,17,76,17,234,54,72,17,252,18,154,60,248,18,172,19,74,50,254,19,92,19,250,50,254,20,12,20,170,52,186,20,196,21,52,54,72,21,70,21,182,54,72,21,200,22,116,54,72,54,72,22,130,22,242,54,72,23,4,23,116,54,72,23,134,23,246,54,72,24,8,24,120,56,112,24,138,24,250,56,112,56,112,25,8,25,120,60,248,25,138,25,250,40,150,26,12,26,124,26,154,26,226,27,0,27,132,44,56,27,150,28,6,28,36,28,108,28,138,29,16,50,254,29,34,29,168,29,198,30,76,60,248,30,94,30,206,30,236,31,92,56,112,31,110,31,222,60,248,31,240,32,96,60,248,32,114,32,226,60,248,32,244,33,160,60,248,60,248,33,174,33,246,34,20,34,132,34,162,35,18,64,108,64,108,35,32,35,144,35,174,36,30,67,118,36,56,36,168,67,118,67,118,36,182,37,38,68,180,68,180,37,52,37,164,50,254,37,182,38,38,72,242,72,242,38,52,38,164,73,96,38,190,39,46,39,60,39,60,39,80,39,162,39,176,39,196,40,28,40,54,40,136,40,150,40,164,40,252,41,22,41,104,41,130,41,212,41,238,42,64,42,82,42,200,42,214,42,228,43,54,43,80,43,198,43,216,44,42,44,56,44,70,44,170,44,196,45,40,45,66,45,148,45,174,46,0,46,26,46,126,46,144,46,250,47,20,47,120,47,146,47,234,48,4,48,106,48,120,48,134,48,236,49,6,49,126,49,144,49,246,50,8,50,90,50,116,50,240,50,254,51,12,51,136,51,154,52,22,52,48,52,172,52,186,52,200,53,26,53,52,53,152,53,178,54,58,54,72,54,86,54,168,54,186,55,12,55,38,55,138,55,164,55,246,56,16,56,98,56,112,56,126,56,208,56,226,57,52,57,78,57,160,57,186,58,18,58,44,58,126,58,152,58,234,59,4,59,106,59,132,59,214,59,240,60,66,60,92,60,234,60,248,61,6,61,88,61,114,61,196,61,222,62,54,62,80,62,168,62,194,63,20,63,46,63,128,63,154,63,242,64,12,64,94,64,108,64,122,64,204,64,230,65,56,65,82,65,170,65,196,66,22,66,36,66,56,66,138,66,164,66,252,67,22,67,104,67,118,67,132,67,214,67,232,68,58,68,84,68,166,68,180,68,200,69,50,69,76,69,176,69,202,70,34,70,60,70,142,70,156,70,176,71,2,71,16,71,36,71,154,71,180,72,12,72,38,72,120,72,146,72,228,72,242,73,0,73,82,73,96,73,116,73,204,73,230,74,68,74,94,74,182,74,196,74,216,75,176,75,206,75,226,76,170,76,142,76,170,77,0,79,242,79,242,77,68,77,102,77,164,77,210,78,10,78,42,78,74,78,176,78,196,78,196,78,210,79,2,78,224,78,238,79,2,79,16,79,78,79,78,79,102,79,174,79,208,79,242,80,58,80,78,80,78,80,98,80,122,0,1,0,0,0,1,0,8,0,2,0,212,0,103,1,140,0,189,0,190,1,141,0,191,0,192,0,140,0,147,0,193,1,140,1,133,1,131,1,134,1,141,1,135,1,136,1,82,1,89,1,138,1,137,1,206,1,207,1,208,2,34,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,2,127,2,128,2,129,2,130,2,131,2,132,2,133,2,134,2,135,2,136,2,252,4,207,6,82,4,111,4,112,4,113,4,114,4,115,4,116,4,117,4,118,4,119,4,120,4,121,4,122,4,123,4,124,4,125,4,126,4,127,4,128,4,129,4,130,4,131,4,132,4,133,4,134,4,135,4,136,4,137,4,138,4,139,4,140,4,141,4,142,5,13,2,246,6,60,6,61,6,62,6,64,6,65,6,66,6,67,6,68,6,69,6,70,6,71,6,72,6,77,6,80,0,1,0,103,0,1,0,29,0,95,0,101,0,102,0,136,0,138,0,146,0,185,0,195,0,223,0,230,1,36,1,43,1,44,1,78,1,80,1,88,1,117,1,128,1,149,1,160,1,170,1,210,1,211,1,212,1,215,1,219,1,220,1,221,1,222,1,223,1,224,1,226,1,230,1,233,1,239,1,240,1,241,1,243,1,244,1,255,2,137,2,138,2,139,2,140,2,141,2,142,2,143,2,144,2,145,2,146,2,184,2,186,3,81,3,106,3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,114,3,115,3,116,3,117,3,118,3,119,3,120,3,121,3,122,3,123,3,124,3,125,3,126,3,127,3,128,3,129,3,130,3,131,3,132,3,133,3,134,3,135,3,136,3,137,4,155,5,14,6,27,6,28,6,29,6,31,6,32,6,33,6,34,6,35,6,36,6,37,6,38,6,40,6,76,6,79,0,3,0,0,0,1,0,8,0,1,2,36,0,36,0,78,0,84,0,96,0,106,0,116,0,126,0,136,0,146,0,156,0,166,0,176,0,186,0,198,0,214,0,220,0,228,0,238,0,252,1,8,1,24,1,30,1,38,1,44,1,50,1,56,1,82,1,92,1,98,1,108,1,158,1,222,1,244,2,0,2,6,2,12,2,30,0,2,1,139,6,82,0,5,2,116,2,117,2,127,2,137,2,147,0,4,2,118,2,128,2,138,2,148,0,4,2,119,2,129,2,139,2,149,0,4,2,120,2,130,2,140,2,150,0,4,2,121,2,131,2,141,2,151,0,4,2,122,2,132,2,142,2,152,0,4,2,123,2,133,2,143,2,153,0,4,2,124,2,134,2,144,2,154,0,4,2,125,2,135,2,145,2,155,0,4,2,126,2,136,2,146,2,156,0,5,2,230,2,231,2,245,2,248,6,82,0,7,2,236,2,237,2,249,3,4,4,230,4,241,6,82,0,2,2,243,6,82,0,3,2,244,3,5,6,82,0,4,2,234,2,250,3,6,6,82,0,6,2,224,2,253,2,254,3,13,4,243,6,82,0,5,2,228,3,7,3,8,3,9,6,82,0,7,2,157,2,242,3,0,3,17,3,18,5,10,6,82,0,2,3,19,6,82,0,3,3,1,3,12,6,82,0,2,3,2,6,82,0,2,3,3,6,82,0,2,4,208,6,82,0,12,2,215,2,216,2,229,4,206,4,228,4,234,4,237,4,238,4,242,5,4,5,12,6,82,0,4,3,11,3,20,3,21,6,82,0,2,4,249,6,82,0,4,4,216,4,217,4,251,6,82,0,24,2,235,2,238,2,239,2,246,2,247,2,251,3,10,3,14,3,15,4,211,4,213,4,219,4,220,4,221,4,222,4,227,4,231,4,235,4,253,4,254,5,5,5,14,5,18,6,82,0,31,2,217,2,219,2,220,2,240,2,255,3,16,4,210,4,212,4,214,4,215,4,218,4,223,4,224,4,225,4,229,4,232,4,233,4,236,4,239,4,244,4,248,4,250,4,252,4,255,5,0,5,2,5,8,5,11,5,15,5,17,6,82,0,10,2,221,2,222,2,233,2,241,4,226,4,240,5,1,5,3,5,6,6,82,0,5,2,223,5,7,5,9,5,16,6,82,0,2,5,19,6,82,0,2,4,205,6,82,0,8,2,218,2,225,2,227,4,209,4,245,4,246,4,247,6,82,0,2,6,63,6,73,0,1,0,36,1,112,2,106,2,107,2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115,2,165,2,167,2,168,2,170,2,172,2,176,2,178,2,181,2,182,2,183,2,185,2,187,2,188,2,193,2,200,3,34,3,67,3,71,3,73,3,74,3,79,3,93,4,156,4,167,6,30,0,6,0,0,0,6,0,18,0,38,0,58,0,80,0,102,0,124,0,3,0,1,50,206,0,1,50,206,0,3,50,206,50,206,67,200,0,0,0,3,0,0,0,1,50,186,0,4,50,186,50,186,67,180,67,180,0,0,0,3,0,3,67,56,67,56,67,56,0,1,67,160,0,0,0,1,0,0,0,3,0,3,0,2,67,34,67,34,0,1,50,144,0,1,67,138,0,1,0,0,0,3,0,3,0,1,67,12,0,1,50,122,0,2,50,122,67,116,0,1,0,0,0,4,0,3,0,0,0,1,50,100,0,3,50,100,50,100,67,94,0,1,0,0,0,5,0,1,0,0,0,1,0,8,0,2,38,76,0,2,4,210,6,82,0,6,0,0,0,6,0,18,0,38,0,58,0,80,0,102,0,124,0,3,0,1,67,24,0,1,67,24,0,3,50,42,50,42,50,42,0,0,0,3,0,0,0,1,67,4,0,4,50,22,50,22,50,22,50,22,0,0,0,3,0,3,66,148,66,148,66,148,0,1,50,2,0,0,0,1,0,0,0,7,0,3,0,2,66,126,66,126,0,1,49,236,0,1,49,236,0,1,0,0,0,8,0,3,0,1,66,104,0,1,49,214,0,2,49,214,49,214,0,1,0,0,0,9,0,3,0,0,0,1,66,174,0,3,49,192,49,192,49,192,0,1,0,0,0,7,0,1,0,0,0,1,0,8,0,2,49,186,0,2,6,82,4,247,0,6,0,0,0,7,0,20,0,40,0,60,0,82,0,104,0,126,0,148,0,3,0,1,66,114,0,1,66,114,0,3,63,126,63,126,66,126,0,0,0,3,0,0,0,1,66,94,0,4,63,106,63,106,66,106,66,106,0,0,0,3,0,2,61,250,65,22,0,1,66,74,0,3,63,86,63,86,66,86,0,0,0,3,0,3,65,216,65,216,65,216,0,1,66,64,0,0,0,1,0,0,0,11,0,3,0,2,65,194,65,194,0,1,63,42,0,1,66,42,0,1,0,0,0,11,0,3,0,1,65,172,0,1,63,20,0,2,63,20,66,20,0,1,0,0,0,12,0,3,0,0,0,1,65,242,0,3,62,254,62,254,65,254,0,1,0,0,0,11,0,1,0,0,0,1,0,8,0,2,20,150,0,3,6,82,4,255,6,82,0,6,0,0,0,7,0,20,0,40,0,60,0,82,0,104,0,126,0,148,0,3,0,1,65,180,0,1,65,180,0,3,54,166,57,176,57,176,0,0,0,3,0,0,0,1,65,160,0,4,54,146,57,156,57,156,57,156,0,0,0,3,0,2,61,60,64,88,0,1,65,140,0,3,54,126,57,136,57,136,0,0,0,3,0,3,65,26,65,26,65,26,0,1,57,114,0,0,0,1,0,0,0,14,0,3,0,2,65,4,65,4,0,1,57,92,0,1,57,92,0,1,0,0,0,15,0,3,0,1,64,238,0,1,54,60,0,2,57,70,57,70,0,1,0,0,0,14,0,3,0,0,0,1,65,52,0,3,54,38,57,48,57,48,0,1,0,0,0,14,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,4,242,6,82,0,1,0,3,2,170,2,193,3,74,0,6,0,0,0,6,0,18,0,38,0,58,0,80,0,102,0,124,0,3,0,1,55,152,0,1,55,152,0,3,55,152,55,152,55,152,0,0,0,3,0,0,0,1,55,132,0,4,55,132,55,132,55,132,55,132,0,0,0,3,0,3,64,106,64,106,64,106,0,1,55,112,0,0,0,1,0,0,0,17,0,3,0,2,64,84,64,84,0,1,55,90,0,1,55,90,0,1,0,0,0,18,0,3,0,1,64,62,0,1,55,68,0,2,55,68,55,68,0,1,0,0,0,19,0,3,0,0,0,1,55,46,0,3,55,46,55,46,55,46,0,1,0,0,0,20,0,1,0,0,0,1,0,8,0,1,55,16,0,87,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,64,86,0,1,64,86,0,2,64,86,64,92,0,0,0,3,0,0,0,1,64,68,0,3,64,68,64,74,64,74,0,0,0,3,0,2,63,208,63,208,0,1,64,56,0,0,0,1,0,0,0,22,0,3,0,1,63,188,0,1,64,30,0,1,64,36,0,1,0,0,0,22,0,3,0,0,0,1,64,10,0,2,64,10,64,16,0,1,0,0,0,23,0,1,0,0,0,1,0,8,0,2,30,212,0,2,5,17,6,82,0,6,0,0,0,7,0,20,0,38,0,56,0,74,0,92,0,112,0,132,0,3,0,1,63,8,0,1,63,8,0,2,63,8,63,8,0,0,0,3,0,0,0,1,62,246,0,3,62,246,62,246,62,246,0,0,0,3,0,1,67,168,0,1,62,228,0,2,62,228,62,228,0,0,0,3,0,0,0,1,62,210,0,3,62,210,62,210,67,150,0,0,0,3,0,2,63,38,63,38,0,1,62,192,0,0,0,1,0,0,0,25,0,3,0,1,63,18,0,1,62,172,0,1,62,172,0,1,0,0,0,26,0,3,0,0,0,1,62,152,0,2,62,152,62,152,0,1,0,0,0,27,0,1,0,0,0,1,0,8,0,1,62,124,0,78,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,46,58,0,1,46,58,0,2,46,58,60,52,0,0,0,3,0,0,0,1,46,40,0,3,46,40,60,34,60,34,0,0,0,3,0,2,62,168,62,168,0,1,60,16,0,0,0,1,0,0,0,29,0,3,0,1,62,148,0,1,46,2,0,1,59,252,0,1,0,0,0,29,0,3,0,0,0,1,45,238,0,2,45,238,59,232,0,1,0,0,0,30,0,1,0,0,0,1,0,8,0,2,33,108,0,2,4,211,6,82,0,6,0,0,0,6,0,18,0,36,0,54,0,72,0,92,0,112,0,3,0,1,45,182,0,1,45,182,0,2,45,182,62,176,0,0,0,3,0,0,0,1,45,164,0,3,45,164,62,158,62,158,0,0,0,3,0,1,62,128,0,1,45,146,0,2,45,146,62,140,0,0,0,3,0,2,62,18,62,18,0,1,62,122,0,0,0,1,0,0,0,32,0,3,0,1,61,254,0,1,45,108,0,1,62,102,0,1,0,0,0,32,0,3,0,0,0,1,45,88,0,2,45,88,62,82,0,1,0,0,0,33,0,1,0,0,0,1,0,8,0,2,33,66,0,2,4,212,6,82,0,6,0,0,0,6,0,18,0,36,0,54,0,74,0,94,0,114,0,3,0,1,56,64,0,1,56,64,0,2,56,64,56,64,0,0,0,3,0,0,0,1,56,46,0,3,56,46,56,46,56,46,0,0,0,3,0,2,57,154,60,182,0,1,56,28,0,2,56,28,56,28,0,0,0,3,0,2,61,122,61,122,0,1,56,8,0,0,0,1,0,0,0,35,0,3,0,1,61,102,0,1,55,244,0,1,55,244,0,1,0,0,0,36,0,3,0,0,0,1,55,224,0,2,55,224,55,224,0,1,0,0,0,37,0,1,0,0,0,1,0,8,0,1,55,196,0,70,0,6,0,0,0,6,0,18,0,36,0,54,0,74,0,94,0,114,0,3,0,1,55,172,0,1,55,172,0,2,55,172,58,134,0,0,0,3,0,0,0,1,55,154,0,3,55,154,58,116,58,116,0,0,0,3,0,2,57,6,60,34,0,1,55,136,0,2,55,136,58,98,0,0,0,3,0,2,60,230,60,230,0,1,58,78,0,0,0,1,0,0,0,39,0,3,0,1,60,210,0,1,55,96,0,1,58,58,0,1,0,0,0,39,0,3,0,0,0,1,55,76,0,2,55,76,58,38,0,1,0,0,0,40,0,1,0,0,0,1,0,8,0,2,35,2,0,2,6,82,2,238,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,55,22,0,1,55,22,0,2,64,230,64,230,0,0,0,3,0,0,0,1,55,4,0,3,64,212,64,212,64,212,0,0,0,3,0,2,60,100,60,100,0,1,64,194,0,0,0,1,0,0,0,42,0,3,0,1,60,80,0,1,64,174,0,1,64,174,0,1,0,0,0,43,0,3,0,0,0,1,54,202,0,2,64,154,64,154,0,1,0,0,0,42,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,242,0,1,0,2,2,167,2,181,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,57,98,0,1,57,98,0,2,54,136,57,98,0,0,0,3,0,0,0,1,57,80,0,3,54,118,57,80,57,80,0,0,0,3,0,2,55,226,58,254,0,1,57,62,0,2,54,100,57,62,0,0,0,3,0,3,60,30,55,206,58,234,0,1,57,42,0,2,54,80,57,42,0,0,0,3,0,2,59,172,59,172,0,1,57,20,0,0,0,1,0,0,0,45,0,3,0,1,59,152,0,1,54,38,0,1,57,0,0,1,0,0,0,45,0,3,0,0,0,1,56,236,0,2,54,18,56,236,0,1,0,0,0,46,0,1,0,0,0,1,0,8,0,2,33,200,0,2,6,82,4,219,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,56,178,0,1,56,178,0,2,56,178,56,178,0,0,0,3,0,0,0,1,56,160,0,3,56,160,56,160,56,160,0,0,0,3,0,2,55,50,58,78,0,1,56,142,0,2,56,142,56,142,0,0,0,3,0,3,59,110,55,30,58,58,0,1,56,122,0,2,56,122,56,122,0,0,0,3,0,2,58,252,58,252,0,1,56,100,0,0,0,1,0,0,0,48,0,3,0,1,58,232,0,1,56,80,0,1,56,80,0,1,0,0,0,49,0,3,0,0,0,1,56,60,0,2,56,60,56,60,0,1,0,0,0,50,0,1,0,0,0,1,0,8,0,1,56,32,1,151,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,56,6,0,1,56,6,0,2,56,6,59,6,0,0,0,3,0,0,0,1,55,244,0,3,55,244,58,244,58,244,0,0,0,3,0,2,54,134,57,162,0,1,55,226,0,2,55,226,58,226,0,0,0,3,0,3,58,194,54,114,57,142,0,1,55,206,0,2,55,206,58,206,0,0,0,3,0,2,58,80,58,80,0,1,58,184,0,0,0,1,0,0,0,52,0,3,0,1,58,60,0,1,55,164,0,1,58,164,0,1,0,0,0,52,0,3,0,0,0,1,55,144,0,2,55,144,58,144,0,1,0,0,0,53,0,1,0,0,0,1,0,8,0,2,37,24,0,2,6,82,4,223,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,55,86,0,1,55,86,0,2,47,60,55,86,0,0,0,3,0,0,0,1,55,68,0,3,47,42,55,68,55,68,0,0,0,3,0,2,53,214,56,242,0,1,55,50,0,2,47,24,55,50,0,0,0,3,0,3,58,18,53,194,56,222,0,1,55,30,0,2,47,4,55,30,0,0,0,3,0,2,57,160,57,160,0,1,55,8,0,0,0,1,0,0,0,55,0,3,0,1,57,140,0,1,46,218,0,1,54,244,0,1,0,0,0,55,0,3,0,0,0,1,54,224,0,2,46,198,54,224,0,1,0,0,0,56,0,1,0,0,0,1,0,8,0,2,34,230,0,2,6,82,4,220,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,54,166,0,1,54,166,0,2,57,166,57,166,0,0,0,3,0,0,0,1,54,148,0,3,57,148,57,148,57,148,0,0,0,3,0,2,53,38,56,66,0,1,54,130,0,2,57,130,57,130,0,0,0,3,0,3,57,98,53,18,56,46,0,1,54,110,0,2,57,110,57,110,0,0,0,3,0,2,56,240,56,240,0,1,57,88,0,0,0,1,0,0,0,58,0,3,0,1,56,220,0,1,57,68,0,1,57,68,0,1,0,0,0,59,0,3,0,0,0,1,54,48,0,2,57,48,57,48,0,1,0,0,0,58,0,1,0,0,0,1,0,8,0,2,35,184,0,2,6,82,4,225,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,53,246,0,1,53,246,0,2,56,234,56,234,0,0,0,3,0,0,0,1,53,228,0,3,56,216,56,216,56,216,0,0,0,3,0,2,52,118,55,146,0,1,53,210,0,2,56,198,56,198,0,0,0,3,0,3,56,178,52,98,55,126,0,1,53,190,0,2,56,178,56,178,0,0,0,3,0,2,56,64,56,64,0,1,56,156,0,0,0,1,0,0,0,61,0,3,0,1,56,44,0,1,56,136,0,1,56,136,0,1,0,0,0,62,0,3,0,0,0,1,53,128,0,2,56,116,56,116,0,1,0,0,0,61,0,1,0,0,0,1,0,8,0,2,40,218,0,2,6,82,4,226,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,53,70,0,1,53,70,0,2,60,60,53,70,0,0,0,3,0,0,0,1,53,52,0,3,60,42,53,52,53,52,0,0,0,3,0,2,51,198,54,226,0,1,53,34,0,2,60,24,53,34,0,0,0,3,0,3,56,2,51,178,54,206,0,1,53,14,0,2,60,4,53,14,0,0,0,3,0,2,55,144,55,144,0,1,52,248,0,0,0,1,0,0,0,64,0,3,0,1,55,124,0,1,59,218,0,1,52,228,0,1,0,0,0,64,0,3,0,0,0,1,52,208,0,2,59,198,52,208,0,1,0,0,0,65,0,1,0,0,0,1,0,8,0,2,52,204,0,2,6,82,4,227,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,44,124,0,1,44,124,0,2,52,150,52,150,0,0,0,3,0,0,0,1,44,106,0,3,52,132,52,132,52,132,0,0,0,3,0,2,51,22,54,50,0,1,44,88,0,2,52,114,52,114,0,0,0,3,0,3,55,82,51,2,54,30,0,1,44,68,0,2,52,94,52,94,0,0,0,3,0,2,54,224,54,224,0,1,52,72,0,0,0,1,0,0,0,67,0,3,0,1,54,204,0,1,52,52,0,1,52,52,0,1,0,0,0,68,0,3,0,0,0,1,44,6,0,2,52,32,52,32,0,1,0,0,0,67,0,1,0,0,0,1,0,8,0,2,32,38,0,2,6,82,2,247,0,6,0,0,0,7,0,20,0,38,0,56,0,76,0,98,0,118,0,138,0,3,0,1,43,204,0,1,43,204,0,2,43,204,49,252,0,0,0,3,0,0,0,1,43,186,0,3,43,186,49,234,49,234,0,0,0,3,0,2,50,102,53,130,0,1,43,168,0,2,43,168,49,216,0,0,0,3,0,3,54,162,50,82,53,110,0,1,43,148,0,2,43,148,49,196,0,0,0,3,0,2,54,48,54,48,0,1,49,174,0,0,0,1,0,0,0,70,0,3,0,1,54,28,0,1,43,106,0,1,49,154,0,1,0,0,0,70,0,3,0,0,0,1,43,86,0,2,43,86,49,134,0,1,0,0,0,71,0,1,0,0,0,1,0,8,0,2,0,10,0,2,2,245,6,82,0,1,0,2,2,165,2,170,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,54,50,0,1,54,50,0,2,51,50,54,50,0,0,0,3,0,0,0,1,54,32,0,3,51,32,54,32,54,32,0,0,0,3,0,2,53,166,53,166,0,1,54,14,0,0,0,1,0,0,0,73,0,3,0,1,53,146,0,1,50,250,0,1,53,250,0,1,0,0,0,73,0,3,0,0,0,1,53,230,0,2,50,230,53,230,0,1,0,0,0,74,0,1,0,0,0,1,0,8,0,2,32,110,0,2,6,82,4,232,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,53,176,0,1,53,176,0,2,53,176,50,176,0,0,0,3,0,0,0,1,53,158,0,3,53,158,50,158,50,158,0,0,0,3,0,2,53,36,53,36,0,1,50,140,0,0,0,1,0,0,0,76,0,3,0,1,53,16,0,1,53,120,0,1,50,120,0,1,0,0,0,76,0,3,0,0,0,1,53,100,0,2,53,100,50,100,0,1,0,0,0,77,0,1,0,0,0,1,0,8,0,2,31,236,0,2,4,235,6,82,0,6,0,0,0,8,0,22,0,40,0,58,0,76,0,94,0,112,0,132,0,152,0,3,0,1,53,40,0,1,53,40,0,2,53,40,53,40,0,0,0,3,0,0,0,1,53,22,0,3,53,22,53,22,53,22,0,0,0,3,0,1,52,54,0,1,53,4,0,2,53,4,53,4,0,0,0,3,0,1,46,174,0,1,52,242,0,2,52,242,52,242,0,0,0,3,0,1,38,154,0,1,52,224,0,2,52,224,52,224,0,0,0,3,0,2,52,102,52,102,0,1,52,206,0,0,0,1,0,0,0,79,0,3,0,1,52,82,0,1,52,186,0,1,52,186,0,1,0,0,0,80,0,3,0,0,0,1,52,166,0,2,52,166,52,166,0,1,0,0,0,81,0,1,0,0,0,1,0,8,0,1,52,138,1,163,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,52,116,0,1,52,116,0,2,52,116,44,100,0,0,0,3,0,0,0,1,52,98,0,3,52,98,44,82,44,82,0,0,0,3,0,2,51,232,51,232,0,1,44,64,0,0,0,1,0,0,0,83,0,3,0,1,51,212,0,1,52,60,0,1,44,44,0,1,0,0,0,83,0,3,0,0,0,1,52,40,0,2,52,40,44,24,0,1,0,0,0,84,0,1,0,0,0,1,0,8,0,2,33,14,0,2,4,234,6,82,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,51,242,0,1,51,242,0,2,43,226,51,242,0,0,0,3,0,0,0,1,51,224,0,3,43,208,51,224,51,224,0,0,0,3,0,2,51,102,51,102,0,1,51,206,0,0,0,1,0,0,0,86,0,3,0,1,51,82,0,1,43,170,0,1,51,186,0,1,0,0,0,86,0,3,0,0,0,1,51,166,0,2,43,150,51,166,0,1,0,0,0,87,0,1,0,0,0,1,0,8,0,2,32,140,0,2,6,82,4,229,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,43,96,0,1,43,96,0,2,51,112,51,112,0,0,0,3,0,0,0,1,43,78,0,3,51,94,51,94,51,94,0,0,0,3,0,2,50,228,50,228,0,1,51,76,0,0,0,1,0,0,0,89,0,3,0,1,50,208,0,1,51,56,0,1,51,56,0,1,0,0,0,90,0,3,0,0,0,1,43,20,0,2,51,36,51,36,0,1,0,0,0,89,0,1,0,0,0,1,0,8,0,2,32,10,0,2,6,82,2,220,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,42,222,0,1,42,222,0,2,42,222,50,238,0,0,0,3,0,0,0,1,42,204,0,3,42,204,50,220,50,220,0,0,0,3,0,2,50,98,50,98,0,1,50,202,0,0,0,1,0,0,0,92,0,3,0,1,50,78,0,1,42,166,0,1,50,182,0,1,0,0,0,92,0,3,0,0,0,1,42,146,0,2,42,146,50,162,0,1,0,0,0,93,0,1,0,0,0,1,0,8,0,2,31,136,0,2,6,82,2,217,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,42,92,0,1,42,92,0,2,42,92,42,92,0,0,0,3,0,0,0,1,42,74,0,3,42,74,42,74,42,74,0,0,0,3,0,2,49,224,49,224,0,1,42,56,0,0,0,1,0,0,0,95,0,3,0,1,49,204,0,1,42,36,0,1,42,36,0,1,0,0,0,96,0,3,0,0,0,1,42,16,0,2,42,16,42,16,0,1,0,0,0,97,0,1,0,0,0,1,0,8,0,1,41,244,0,23,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,41,222,0,1,41,222,0,2,49,226,49,226,0,0,0,3,0,0,0,1,41,204,0,3,49,208,49,208,49,208,0,0,0,3,0,2,49,98,49,98,0,1,49,190,0,0,0,1,0,0,0,99,0,3,0,1,49,78,0,1,49,170,0,1,49,170,0,1,0,0,0,100,0,3,0,0,0,1,41,146,0,2,49,150,49,150,0,1,0,0,0,99,0,1,0,0,0,1,0,8,0,2,34,212,0,2,6,82,2,222,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,49,96,0,1,49,96,0,2,49,102,49,102,0,0,0,3,0,0,0,1,49,78,0,3,49,84,49,84,49,84,0,0,0,3,0,2,48,224,48,224,0,1,49,66,0,0,0,1,0,0,0,102,0,3,0,1,48,204,0,1,49,46,0,1,49,46,0,1,0,0,0,103,0,3,0,0,0,1,49,20,0,2,49,26,49,26,0,1,0,0,0,102,0,1,0,0,0,1,0,8,0,2,31,68,0,2,6,82,5,9,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,48,222,0,1,48,222,0,2,48,228,48,234,0,0,0,3,0,0,0,1,48,204,0,3,48,210,48,216,48,216,0,0,0,3,0,2,48,94,48,94,0,1,48,198,0,0,0,1,0,0,0,105,0,3,0,1,48,74,0,1,48,172,0,1,48,178,0,1,0,0,0,105,0,3,0,0,0,1,48,146,0,2,48,152,48,158,0,1,0,0,0,105,0,1,0,0,0,1,0,8,0,2,0,12,0,3,5,8,6,82,6,82,0,1,0,3,3,73,3,74,3,79,0,6,0,0,0,3,0,12,0,32,0,52,0,3,0,2,47,248,47,248,0,1,48,96,0,0,0,1,0,0,0,107,0,3,0,1,47,228,0,1,47,126,0,1,48,76,0,1,0,0,0,107,0,3,0,0,0,1,48,44,0,2,47,106,48,56,0,1,0,0,0,107,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,4,244,6,82,0,1,0,3,2,176,3,73,3,74,0,6,0,0,0,6,0,18,0,36,0,54,0,72,0,92,0,112,0,3,0,1,47,232,0,1,47,232,0,2,30,250,30,250,0,0,0,3,0,0,0,1,47,214,0,3,30,232,30,232,30,232,0,0,0,3,0,0,0,1,47,196,0,3,30,214,30,214,47,208,0,0,0,3,0,2,47,86,47,86,0,1,30,196,0,0,0,1,0,0,0,109,0,3,0,1,47,66,0,1,30,176,0,1,30,176,0,1,0,0,0,110,0,3,0,0,0,1,47,138,0,2,30,156,30,156,0,1,0,0,0,109,0,1,0,0,0,1,0,8,0,2,30,152,0,2,6,82,4,246,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,47,84,0,1,47,84,0,2,30,102,47,96,0,0,0,3,0,0,0,1,47,66,0,3,30,84,47,78,47,78,0,0,0,3,0,2,46,212,46,212,0,1,47,60,0,0,0,1,0,0,0,112,0,3,0,1,46,192,0,1,30,46,0,1,47,40,0,1,0,0,0,112,0,3,0,0,0,1,47,8,0,2,30,26,47,20,0,1,0,0,0,112,0,1,0,0,0,1,0,8,0,2,0,12,0,3,4,248,6,82,6,82,0,1,0,3,3,73,3,74,4,167,0,6,0,0,0,3,0,12,0,32,0,52,0,3,0,2,46,110,46,110,0,1,46,214,0,0,0,1,0,0,0,114,0,3,0,1,46,90,0,1,32,124,0,1,46,194,0,1,0,0,0,114,0,3,0,0,0,1,46,162,0,2,32,104,46,174,0,1,0,0,0,114,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,4,250,6,82,0,1,0,3,3,34,3,73,3,74,0,6,0,0,0,6,0,18,0,36,0,54,0,74,0,94,0,114,0,3,0,1,46,94,0,1,46,94,0,2,43,106,43,106,0,0,0,3,0,0,0,1,46,76,0,3,43,88,43,88,43,88,0,0,0,3,0,2,41,234,45,6,0,1,46,58,0,2,43,70,43,70,0,0,0,3,0,2,45,202,45,202,0,1,43,50,0,0,0,1,0,0,0,116,0,3,0,1,45,182,0,1,43,30,0,1,43,30,0,1,0,0,0,117,0,3,0,0,0,1,45,254,0,2,43,10,43,10,0,1,0,0,0,116,0,1,0,0,0,1,0,8,0,2,30,100,0,2,4,254,6,82,0,6,0,0,0,6,0,18,0,36,0,54,0,74,0,94,0,114,0,3,0,1,45,198,0,1,45,198,0,2,42,210,45,210,0,0,0,3,0,0,0,1,45,180,0,3,42,192,45,192,45,192,0,0,0,3,0,2,41,82,44,110,0,1,45,162,0,2,42,174,45,174,0,0,0,3,0,2,45,50,45,50,0,1,45,154,0,0,0,1,0,0,0,119,0,3,0,1,45,30,0,1,42,134,0,1,45,134,0,1,0,0,0,119,0,3,0,0,0,1,45,102,0,2,42,114,45,114,0,1,0,0,0,119,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,5,0,6,82,0,1,0,3,3,71,3,73,3,74,0,6,0,0,0,6,0,18,0,36,0,54,0,74,0,94,0,114,0,3,0,1,45,34,0,1,45,34,0,2,42,46,45,34,0,0,0,3,0,0,0,1,45,16,0,3,42,28,45,16,45,16,0,0,0,3,0,2,40,174,43,202,0,1,44,254,0,2,42,10,44,254,0,0,0,3,0,2,44,142,44,142,0,1,44,234,0,0,0,1,0,0,0,121,0,3,0,1,44,122,0,1,41,226,0,1,44,214,0,1,0,0,0,121,0,3,0,0,0,1,44,194,0,2,41,206,44,194,0,1,0,0,0,122,0,1,0,0,0,1,0,8,0,2,29,40,0,2,6,82,5,1,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,44,140,0,1,44,140,0,2,36,136,44,152,0,0,0,3,0,0,0,1,44,122,0,3,36,118,44,134,44,134,0,0,0,3,0,2,44,12,44,12,0,1,44,116,0,0,0,1,0,0,0,124,0,3,0,1,43,248,0,1,36,80,0,1,44,96,0,1,0,0,0,124,0,3,0,0,0,1,44,64,0,2,36,60,44,76,0,1,0,0,0,124,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,4,239,6,82,0,1,0,3,2,193,3,73,3,74,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,43,254,0,1,43,254,0,2,35,250,35,250,0,0,0,3,0,0,0,1,43,236,0,3,35,232,35,232,35,232,0,0,0,3,0,2,43,126,43,126,0,1,35,214,0,0,0,1,0,0,0,126,0,3,0,1,43,106,0,1,35,194,0,1,35,194,0,1,0,0,0,127,0,3,0,0,0,1,43,178,0,2,35,174,35,174,0,1,0,0,0,126,0,1,0,0,0,1,0,8,0,2,28,240,0,2,4,238,6,82,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,43,124,0,1,43,124,0,2,35,120,43,124,0,0,0,3,0,0,0,1,43,106,0,3,35,102,43,106,43,106,0,0,0,3,0,2,42,252,42,252,0,1,43,88,0,0,0,1,0,0,0,129,0,3,0,1,42,232,0,1,35,64,0,1,43,68,0,1,0,0,0,129,0,3,0,0,0,1,43,48,0,2,35,44,43,48,0,1,0,0,0,130,0,1,0,0,0,1,0,8,0,2,28,110,0,2,6,82,4,240,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,42,250,0,1,42,250,0,2,42,250,40,6,0,0,0,3,0,0,0,1,42,232,0,3,42,232,39,244,39,244,0,0,0,3,0,2,42,122,42,122,0,1,39,226,0,0,0,1,0,0,0,132,0,3,0,1,42,102,0,1,42,194,0,1,39,206,0,1,0,0,0,132,0,3,0,0,0,1,42,174,0,2,42,174,39,186,0,1,0,0,0,133,0,1,0,0,0,1,0,8,0,2,27,20,0,2,5,5,6,82,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,42,120,0,1,42,120,0,2,42,120,34,116,0,0,0,3,0,0,0,1,42,102,0,3,42,102,34,98,34,98,0,0,0,3,0,2,41,248,41,248,0,1,34,80,0,0,0,1,0,0,0,135,0,3,0,1,41,228,0,1,42,64,0,1,34,60,0,1,0,0,0,135,0,3,0,0,0,1,42,44,0,2,42,44,34,40,0,1,0,0,0,136,0,1,0,0,0,1,0,8,0,2,27,106,0,2,5,4,6,82,0,6,0,0,0,8,0,22,0,40,0,58,0,76,0,94,0,112,0,132,0,152,0,3,0,1,41,240,0,1,41,240,0,2,41,240,41,240,0,0,0,3,0,0,0,1,41,222,0,3,41,222,41,222,41,222,0,0,0,3,0,0,0,1,41,204,0,3,41,204,41,204,41,10,0,0,0,3,0,0,0,1,41,186,0,3,41,186,41,186,35,130,0,0,0,3,0,0,0,1,41,168,0,3,41,168,41,168,27,110,0,0,0,3,0,2,41,58,41,58,0,1,41,150,0,0,0,1,0,0,0,138,0,3,0,1,41,38,0,1,41,130,0,1,41,130,0,1,0,0,0,139,0,3,0,0,0,1,41,110,0,2,41,110,41,110,0,1,0,0,0,140,0,1,0,0,0,1,0,8,0,1,41,82,1,188,0,6,0,0,0,3,0,12,0,32,0,52,0,3,0,2,40,228,40,228,0,1,41,76,0,0,0,1,0,0,0,142,0,3,0,1,40,208,0,1,34,244,0,1,41,56,0,1,0,0,0,142,0,3,0,0,0,1,41,24,0,2,34,224,41,36,0,1,0,0,0,142,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,4,252,6,82,0,1,0,3,3,67,3,73,3,74,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,40,214,0,1,40,214,0,2,44,216,40,226,0,0,0,3,0,0,0,1,40,196,0,3,44,198,40,208,40,208,0,0,0,3,0,2,40,86,40,86,0,1,40,190,0,0,0,1,0,0,0,144,0,3,0,1,40,66,0,1,44,160,0,1,40,170,0,1,0,0,0,144,0,3,0,0,0,1,40,138,0,2,44,140,40,150,0,1,0,0,0,144,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,5,11,6,82,0,1,0,3,2,181,3,73,3,74,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,30,242,0,1,30,242,0,2,30,242,30,242,0,0,0,3,0,0,0,1,30,224,0,3,30,224,30,224,30,224,0,0,0,3,0,2,39,200,39,200,0,1,30,206,0,0,0,1,0,0,0,146,0,3,0,1,39,180,0,1,30,186,0,1,30,186,0,1,0,0,0,147,0,3,0,0,0,1,30,166,0,2,30,166,30,166,0,1,0,0,0,148,0,1,0,0,0,1,0,8,0,1,30,138,0,86,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,30,116,0,1,30,116,0,2,38,62,38,150,0,0,0,3,0,0,0,1,30,98,0,3,38,44,38,132,38,132,0,0,0,3,0,2,39,74,39,74,0,1,38,114,0,0,0,1,0,0,0,150,0,3,0,1,39,54,0,1,38,6,0,1,38,94,0,1,0,0,0,150,0,3,0,0,0,1,30,40,0,2,37,242,38,74,0,1,0,0,0,150,0,1,0,0,0,1,0,8,0,2,0,12,0,3,6,82,3,12,6,82,0,1,0,3,2,178,2,183,2,200,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,34,94,0,1,34,94,0,2,34,94,39,60,0,0,0,3,0,0,0,1,34,76,0,3,34,76,39,42,39,42,0,0,0,3,0,2,38,188,38,188,0,1,39,24,0,0,0,1,0,0,0,152,0,3,0,1,38,168,0,1,34,38,0,1,39,4,0,1,0,0,0,152,0,3,0,0,0,1,34,18,0,2,34,18,38,240,0,1,0,0,0,153,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,233,0,1,0,2,2,165,3,74,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,33,212,0,1,33,212,0,2,33,212,33,212,0,0,0,3,0,0,0,1,33,194,0,3,33,194,33,194,33,194,0,0,0,3,0,2,38,50,38,50,0,1,33,176,0,0,0,1,0,0,0,155,0,3,0,1,38,30,0,1,33,156,0,1,33,156,0,1,0,0,0,156,0,3,0,0,0,1,33,136,0,2,33,136,33,136,0,1,0,0,0,157,0,1,0,0,0,1,0,8,0,1,33,108,0,66,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,31,252,0,1,31,252,0,2,31,252,31,252,0,0,0,3,0,0,0,1,31,234,0,3,31,234,31,234,31,234,0,0,0,3,0,2,37,180,37,180,0,1,31,216,0,0,0,1,0,0,0,159,0,3,0,1,37,160,0,1,31,196,0,1,31,196,0,1,0,0,0,160,0,3,0,0,0,1,31,176,0,2,31,176,31,176,0,1,0,0,0,161,0,1,0,0,0,1,0,8,0,1,31,148,1,150,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,41,184,0,1,41,184,0,2,34,194,34,194,0,0,0,3,0,0,0,1,41,166,0,3,34,176,34,176,34,176,0,0,0,3,0,2,37,54,37,54,0,1,34,158,0,0,0,1,0,0,0,163,0,3,0,1,37,34,0,1,34,138,0,1,34,138,0,1,0,0,0,164,0,3,0,0,0,1,41,108,0,2,34,118,34,118,0,1,0,0,0,163,0,1,0,0,0,1,0,8,0,2,34,114,0,2,6,82,3,15,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,41,54,0,1,41,54,0,2,41,54,41,54,0,0,0,3,0,0,0,1,41,36,0,3,41,36,41,36,41,36,0,0,0,3,0,2,36,180,36,180,0,1,41,18,0,0,0,1,0,0,0,166,0,3,0,1,36,160,0,1,40,254,0,1,40,254,0,1,0,0,0,167,0,3,0,0,0,1,40,234,0,2,40,234,40,234,0,1,0,0,0,168,0,1,0,0,0,1,0,8,0,1,40,206,0,93,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,35,42,0,1,35,42,0,2,19,200,35,42,0,0,0,3,0,0,0,1,35,24,0,3,19,182,35,24,35,24,0,0,0,3,0,2,36,54,36,54,0,1,35,6,0,0,0,1,0,0,0,170,0,3,0,1,36,34,0,1,19,144,0,1,34,242,0,1,0,0,0,170,0,3,0,0,0,1,34,222,0,2,19,124,34,222,0,1,0,0,0,171,0,1,0,0,0,1,0,8,0,2,0,10,0,2,3,20,6,82,0,1,0,2,2,200,4,167,0,6,0,0,0,5,0,16,0,34,0,52,0,72,0,92,0,3,0,1,0,124,0,1,0,124,0,2,0,124,0,124,0,0,0,3,0,0,0,1,0,106,0,3,0,106,0,106,0,106,0,0,0,3,0,2,35,172,35,172,0,1,0,88,0,0,0,1,0,0,0,173,0,3,0,1,35,152,0,1,0,68,0,1,0,68,0,1,0,0,0,174,0,3,0,0,0,1,0,48,0,2,0,48,0,48,0,1,0,0,0,175,0,1,0,0,0,1,0,8,0,1,0,20,0,27,0,1,0,0,0,1,0,8,0,1,0,6,4,226,0,1,0,1,1,112,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,96,0,1,0,96,0,1,0,96,0,0,0,3,0,0,0,1,0,80,0,2,0,80,0,80,0,0,0,3,0,1,35,32,0,1,0,64,0,0,0,1,0,0,0,177,0,3,0,0,0,1,0,46,0,1,0,46,0,1,0,0,0,178,0,1,0,0,0,1,0,8,0,1,0,20,0,49,0,1,0,0,0,1,0,8,0,1,0,6,1,182,0,1,0,1,4,156,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,68,0,1,0,68,0,1,32,52,0,0,0,3,0,0,0,1,0,52,0,2,32,36,32,36,0,0,0,3,0,1,34,172,0,1,32,20,0,0,0,1,0,0,0,180,0,3,0,0,0,1,0,18,0,1,32,2,0,1,0,0,0,180,0,1,0,1,3,81,0,1,0,0,0,1,0,8,0,2,0,10,0,2,5,18,6,82,0,1,0,2,3,71,3,81,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,34,188,0,1,34,188,0,1,34,188,0,0,0,3,0,0,0,1,34,172,0,2,34,172,34,172,0,0,0,3,0,1,34,58,0,1,34,156,0,0,0,1,0,0,0,182,0,3,0,0,0,1,34,138,0,1,34,138,0,1,0,0,0,183,0,1,0,0,0,1,0,8,0,1,34,112,1,193,0,1,0,0,0,1,0,8,0,1,34,98,3,3,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,34,78,0,1,34,78,0,1,0,68,0,0,0,3,0,0,0,1,34,62,0,2,0,52,0,52,0,0,0,3,0,1,33,204,0,1,0,36,0,0,0,1,0,0,0,185,0,3,0,0,0,1,34,28,0,1,0,18,0,1,0,0,0,185,0,1,0,1,4,155,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,5,13,0,1,0,2,3,79,4,155,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,33,220,0,1,33,220,0,1,30,226,0,0,0,3,0,0,0,1,33,204,0,2,30,210,30,210,0,0,0,3,0,1,33,90,0,1,30,194,0,0,0,1,0,0,0,187,0,3,0,0,0,1,33,170,0,1,30,176,0,1,0,0,0,187,0,1,0,0,0,1,0,8,0,2,0,10,0,2,5,14,6,82,0,1,0,2,3,71,3,79,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,33,112,0,1,33,112,0,1,33,118,0,0,0,3,0,0,0,1,33,96,0,2,33,102,33,102,0,0,0,3,0,1,32,238,0,1,33,86,0,0,0,1,0,0,0,189,0,3,0,0,0,1,33,62,0,1,33,68,0,1,0,0,0,189,0,1,0,0,0,1,0,8,0,2,0,10,0,2,5,15,6,82,0,1,0,2,3,73,3,79,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,33,4,0,1,33,4,0,1,24,250,0,0,0,3,0,0,0,1,32,244,0,2,24,234,24,234,0,0,0,3,0,1,32,130,0,1,24,218,0,0,0,1,0,0,0,191,0,3,0,0,0,1,32,210,0,1,24,200,0,1,0,0,0,191,0,1,0,0,0,1,0,8,0,2,12,214,0,2,5,12,6,82,0,6,0,0,0,6,0,18,0,34,0,50,0,66,0,82,0,100,0,3,0,1,31,212,0,1,31,212,0,1,31,212,0,0,0,3,0,0,0,1,31,196,0,2,31,196,31,196,0,0,0,3,0,1,36,120,0,1,31,180,0,1,31,180,0,0,0,3,0,0,0,1,31,164,0,2,31,164,36,104,0,0,0,3,0,1,31,250,0,1,31,148,0,0,0,1,0,0,0,193,0,3,0,0,0,1,31,130,0,1,31,130,0,1,0,0,0,194,0,1,0,0,0,1,0,8,0,1,31,104,0,77,0,1,0,0,0,1,0,8,0,1,31,90,3,162,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,31,70,0,1,31,70,0,1,32,20,0,0,0,3,0,0,0,1,31,54,0,2,32,4,32,4,0,0,0,3,0,1,31,140,0,1,31,244,0,0,0,1,0,0,0,196,0,3,0,0,0,1,31,20,0,1,31,226,0,1,0,0,0,196,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,255,0,1,0,2,2,176,3,73,0,6,0,0,0,6,0,18,0,34,0,50,0,66,0,82,0,100,0,3,0,1,30,214,0,1,30,214,0,1,35,154,0,0,0,3,0,0,0,1,30,198,0,2,35,138,35,138,0,0,0,3,0,1,35,122,0,1,30,182,0,1,35,122,0,0,0,3,0,0,0,1,30,166,0,2,35,106,30,166,0,0,0,3,0,1,30,252,0,1,35,90,0,0,0,1,0,0,0,198,0,3,0,0,0,1,30,132,0,1,35,72,0,1,0,0,0,198,0,1,0,0,0,1,0,8,0,2,27,222,0,2,6,82,3,0,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,14,38,0,1,14,38,0,1,14,38,0,0,0,3,0,0,0,1,14,22,0,2,14,22,14,22,0,0,0,3,0,1,30,152,0,1,14,6,0,0,0,1,0,0,0,200,0,3,0,0,0,1,13,244,0,1,13,244,0,1,0,0,0,201,0,1,0,0,0,1,0,8,0,1,13,218,0,42,0,1,0,0,0,1,0,8,0,1,13,204,1,171,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,13,182,0,1,13,182,0,1,2,122,0,0,0,3,0,0,0,1,13,166,0,2,2,106,2,106,0,0,0,3,0,1,17,186,0,1,13,150,0,1,2,90,0,0,0,3,0,1,30,24,0,1,2,74,0,0,0,1,0,0,0,203,0,3,0,0,0,1,13,116,0,1,2,56,0,1,0,0,0,203,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,207,6,82,0,1,0,2,2,186,4,167,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,13,56,0,1,13,56,0,1,3,16,0,0,0,3,0,0,0,1,13,40,0,2,3,0,3,0,0,0,0,3,0,1,17,174,0,1,13,24,0,1,2,240,0,0,0,3,0,1,29,154,0,1,2,224,0,0,0,1,0,0,0,205,0,3,0,0,0,1,12,246,0,1,2,206,0,1,0,0,0,205,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,208,6,82,0,1,0,2,2,188,4,167,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,12,188,0,1,12,188,0,1,26,182,0,0,0,3,0,0,0,1,12,172,0,2,26,166,26,166,0,0,0,3,0,1,29,46,0,1,26,150,0,0,0,1,0,0,0,207,0,3,0,0,0,1,12,138,0,1,26,132,0,1,0,0,0,207,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,213,6,82,0,1,0,2,3,71,4,167,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,12,80,0,1,12,80,0,1,29,74,0,0,0,3,0,0,0,1,12,64,0,2,29,58,29,58,0,0,0,3,0,1,28,194,0,1,29,42,0,0,0,1,0,0,0,209,0,3,0,0,0,1,12,30,0,1,29,24,0,1,0,0,0,209,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,214,6,82,0,1,0,2,3,73,4,167,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,11,226,0,1,11,226,0,1,20,204,0,0,0,3,0,0,0,1,11,210,0,2,20,188,20,188,0,0,0,3,0,0,0,1,11,194,0,2,20,172,11,194,0,0,0,3,0,1,28,68,0,1,20,156,0,0,0,1,0,0,0,211,0,3,0,0,0,1,11,160,0,1,20,138,0,1,0,0,0,211,0,1,0,0,0,1,0,8,0,2,9,22,0,2,4,206,6,82,0,6,0,0,0,5,0,16,0,32,0,48,0,70,0,88,0,3,0,1,15,144,0,1,15,144,0,1,11,108,0,0,0,3,0,0,0,1,15,128,0,2,11,92,11,92,0,0,0,3,0,0,0,1,15,112,0,2,11,76,0,16,0,0,0,1,0,1,2,186,0,3,0,1,27,200,0,1,11,54,0,0,0,1,0,0,0,213,0,3,0,0,0,1,15,72,0,1,11,36,0,1,0,0,0,213,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,225,0,1,0,2,2,185,4,167,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,15,126,0,1,15,126,0,1,10,232,0,0,0,3,0,0,0,1,15,110,0,2,10,216,10,216,0,0,0,3,0,0,0,1,15,94,0,2,10,200,0,160,0,0,0,3,0,1,27,74,0,1,10,184,0,0,0,1,0,0,0,215,0,3,0,0,0,1,15,60,0,1,10,166,0,1,0,0,0,215,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,227,0,1,0,2,2,187,4,167,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,68,0,1,0,68,0,1,18,4,0,0,0,3,0,0,0,1,0,52,0,2,17,244,17,244,0,0,0,3,0,1,26,222,0,1,17,228,0,0,0,1,0,0,0,217,0,3,0,0,0,1,0,18,0,1,17,210,0,1,0,0,0,217,0,1,0,1,2,188,0,1,0,0,0,1,0,8,0,2,0,10,0,2,2,228,6,82,0,1,0,2,2,178,2,188,0,6,0,0,0,5,0,16,0,32,0,48,0,66,0,84,0,3,0,1,21,24,0,1,21,24,0,1,21,24,0,0,0,3,0,0,0,1,21,8,0,2,21,8,21,8,0,0,0,3,0,2,22,118,25,146,0,1,20,248,0,1,20,248,0,0,0,3,0,1,26,88,0,1,20,230,0,0,0,1,0,0,0,219,0,3,0,0,0,1,20,212,0,1,20,212,0,1,0,0,0,220,0,1,0,0,0,1,0,8,0,1,20,186,0,69,0,1,0,0,0,1,0,8,0,1,20,172,3,171,0,6,0,0,0,5,0,16,0,32,0,48,0,66,0,84,0,3,0,1,20,150,0,1,20,150,0,1,23,112,0,0,0,3,0,0,0,1,20,134,0,2,23,96,23,96,0,0,0,3,0,2,21,244,25,16,0,1,20,118,0,1,23,80,0,0,0,3,0,1,25,214,0,1,23,62,0,0,0,1,0,0,0,222,0,3,0,0,0,1,20,82,0,1,23,44,0,1,0,0,0,222,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,239,0,1,0,2,2,167,3,71,0,6,0,0,0,6,0,18,0,34,0,50,0,68,0,84,0,102,0,3,0,1,20,20,0,1,20,20,0,1,25,238,0,0,0,3,0,0,0,1,20,4,0,2,25,222,25,222,0,0,0,3,0,2,21,114,24,142,0,1,19,244,0,1,25,206,0,0,0,3,0,0,0,1,19,226,0,2,25,188,22,188,0,0,0,3,0,1,25,68,0,1,25,172,0,0,0,1,0,0,0,224,0,3,0,0,0,1,19,192,0,1,25,154,0,1,0,0,0,224,0,1,0,0,0,1,0,8,0,2,3,166,0,2,6,82,2,240,0,6,0,0,0,5,0,16,0,32,0,48,0,66,0,84,0,3,0,1,19,140,0,1,19,140,0,1,25,90,0,0,0,3,0,0,0,1,19,124,0,2,25,74,25,74,0,0,0,3,0,2,20,234,24,6,0,1,19,108,0,1,25,58,0,0,0,3,0,1,24,204,0,1,25,40,0,0,0,1,0,0,0,226,0,3,0,0,0,1,19,72,0,1,25,22,0,1,0,0,0,226,0,1,0,0,0,1,0,8,0,2,8,146,0,2,6,82,2,241,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,10,170,0,1,10,170,0,1,24,240,0,0,0,3,0,0,0,1,10,154,0,2,24,224,24,224,0,0,0,3,0,1,24,104,0,1,24,208,0,0,0,1,0,0,0,228,0,3,0,0,0,1,10,120,0,1,24,190,0,1,0,0,0,228,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,4,215,0,1,0,2,3,34,3,73,0,6,0,0,0,6,0,18,0,34,0,50,0,68,0,88,0,106,0,3,0,1,21,128,0,1,21,128,0,1,21,128,0,0,0,3,0,0,0,1,21,112,0,2,21,112,21,112,0,0,0,3,0,2,20,4,23,32,0,1,21,96,0,1,21,96,0,0,0,3,0,3,24,66,19,242,23,14,0,1,21,78,0,1,21,78,0,0,0,3,0,1,23,210,0,1,21,58,0,0,0,1,0,0,0,230,0,3,0,0,0,1,21,40,0,1,21,40,0,1,0,0,0,231,0,1,0,0,0,1,0,8,0,1,21,14,1,150,0,1,0,0,0,1,0,8,0,1,21,0,3,11,0,6,0,0,0,6,0,18,0,34,0,50,0,68,0,88,0,106,0,3,0,1,20,232,0,1,20,232,0,1,23,232,0,0,0,3,0,0,0,1,20,216,0,2,23,216,23,216,0,0,0,3,0,2,19,108,22,136,0,1,20,200,0,1,23,200,0,0,0,3,0,3,23,170,19,90,22,118,0,1,20,182,0,1,23,182,0,0,0,3,0,1,23,58,0,1,23,162,0,0,0,1,0,0,0,233,0,3,0,0,0,1,20,144,0,1,23,144,0,1,0,0,0,233,0,1,0,0,0,1,0,8,0,2,2,26,0,2,6,82,4,224,0,6,0,0,0,6,0,18,0,34,0,50,0,68,0,88,0,106,0,3,0,1,12,64,0,1,12,64,0,1,20,90,0,0,0,3,0,0,0,1,12,48,0,2,20,74,20,74,0,0,0,3,0,2,18,222,21,250,0,1,12,32,0,1,20,58,0,0,0,3,0,3,23,28,18,204,21,232,0,1,12,14,0,1,20,40,0,0,0,3,0,1,22,172,0,1,20,20,0,0,0,1,0,0,0,235,0,3,0,0,0,1,11,232,0,1,20,2,0,1,0,0,0,235,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,246,0,1,0,2,2,170,3,71,0,6,0,0,0,6,0,18,0,34,0,50,0,68,0,88,0,106,0,3,0,1,11,170,0,1,11,170,0,1,11,170,0,0,0,3,0,0,0,1,11,154,0,2,11,154,11,154,0,0,0,3,0,2,18,72,21,100,0,1,11,138,0,1,11,138,0,0,0,3,0,3,22,134,18,54,21,82,0,1,11,120,0,1,11,120,0,0,0,3,0,1,22,22,0,1,11,100,0,0,0,1,0,0,0,237,0,3,0,0,0,1,11,82,0,1,11,82,0,1,0,0,0,238,0,1,0,0,0,1,0,8,0,1,11,56,0,74,0,1,0,0,0,1,0,8,0,1,11,42,3,168,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,22,48,0,1,22,48,0,1,16,86,0,0,0,3,0,0,0,1,22,32,0,2,16,70,16,70,0,0,0,3,0,1,21,168,0,1,16,54,0,0,0,1,0,0,0,240,0,3,0,0,0,1,21,254,0,1,16,36,0,1,0,0,0,240,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,230,6,82,0,1,0,2,2,167,3,73,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,21,194,0,1,21,194,0,1,18,194,0,0,0,3,0,0,0,1,21,178,0,2,18,178,18,178,0,0,0,3,0,0,0,1,21,162,0,2,18,162,21,150,0,0,0,3,0,1,21,42,0,1,18,146,0,0,0,1,0,0,0,242,0,3,0,0,0,1,21,128,0,1,18,128,0,1,0,0,0,242,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,231,6,82,0,1,0,2,3,71,3,73,0,6,0,0,0,7,0,20,0,36,0,52,0,68,0,84,0,100,0,118,0,3,0,1,21,64,0,1,21,64,0,1,21,64,0,0,0,3,0,0,0,1,21,48,0,2,21,48,21,48,0,0,0,3,0,1,20,82,0,1,21,32,0,1,21,32,0,0,0,3,0,1,14,204,0,1,21,16,0,1,21,16,0,0,0,3,0,1,6,186,0,1,21,0,0,1,21,0,0,0,0,3,0,1,20,136,0,1,20,240,0,0,0,1,0,0,0,244,0,3,0,0,0,1,20,222,0,1,20,222,0,1,0,0,0,245,0,1,0,0,0,1,0,8,0,1,20,196,1,160,0,1,0,0,0,1,0,8,0,1,20,182,3,9,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,20,162,0,1,20,162,0,1,12,146,0,0,0,3,0,0,0,1,20,146,0,2,12,130,12,130,0,0,0,3,0,1,20,26,0,1,12,114,0,0,0,1,0,0,0,247,0,3,0,0,0,1,20,112,0,1,12,96,0,1,0,0,0,247,0,1,0,0,0,1,0,8,0,2,1,88,0,2,4,228,6,82,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,12,46,0,1,12,46,0,1,20,56,0,0,0,3,0,0,0,1,12,30,0,2,20,40,20,40,0,0,0,3,0,1,19,182,0,1,20,24,0,0,0,1,0,0,0,249,0,3,0,0,0,1,11,252,0,1,20,6,0,1,0,0,0,249,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,223,0,1,0,2,2,193,3,79,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,11,192,0,1,11,192,0,1,2,214,0,0,0,3,0,0,0,1,11,176,0,2,2,198,2,198,0,0,0,3,0,1,2,182,0,1,11,160,0,1,2,182,0,0,0,3,0,1,19,56,0,1,2,166,0,0,0,1,0,0,0,251,0,3,0,0,0,1,11,126,0,1,2,148,0,1,0,0,0,251,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,218,0,1,0,2,2,193,4,167,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,11,68,0,1,11,68,0,1,19,84,0,0,0,3,0,0,0,1,11,52,0,2,19,68,19,68,0,0,0,3,0,1,18,204,0,1,19,52,0,0,0,1,0,0,0,253,0,3,0,0,0,1,11,18,0,1,19,34,0,1,0,0,0,253,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,219,0,1,0,2,2,193,3,73,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,10,216,0,1,10,216,0,1,10,216,0,0,0,3,0,0,0,1,10,200,0,2,10,200,10,200,0,0,0,3,0,1,18,96,0,1,10,184,0,0,0,1,0,0,0,255,0,3,0,0,0,1,10,166,0,1,10,166,0,1,0,0,1,0,0,1,0,0,0,1,0,8,0,1,10,140,0,22,0,1,0,0,0,1,0,8,0,1,10,126,3,145,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,10,106,0,1,10,106,0,1,18,110,0,0,0,3,0,0,0,1,10,90,0,2,18,94,18,94,0,0,0,3,0,1,17,242,0,1,18,78,0,0,0,1,0,0,1,2,0,3,0,0,0,1,10,56,0,1,18,60,0,1,0,0,1,2,0,1,0,0,0,1,0,8,0,2,3,124,0,2,6,82,2,221,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,18,10,0,1,18,10,0,1,18,16,0,0,0,3,0,0,0,1,17,250,0,2,18,0,18,0,0,0,0,3,0,1,17,142,0,1,17,240,0,0,0,1,0,0,1,4,0,3,0,0,0,1,17,216,0,1,17,222,0,1,0,0,1,4,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,5,7,0,1,0,2,3,74,3,79,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,17,158,0,1,17,158,0,1,16,220,0,0,0,3,0,0,0,1,17,142,0,2,16,204,16,204,0,0,0,3,0,1,17,34,0,1,16,188,0,0,0,1,0,0,1,6,0,3,0,0,0,1,17,108,0,1,16,170,0,1,0,0,1,6,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,243,6,82,0,1,0,2,2,176,3,74,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,17,50,0,1,17,50,0,1,0,68,0,0,0,3,0,0,0,1,17,34,0,2,0,52,0,52,0,0,0,3,0,1,16,182,0,1,0,36,0,0,0,1,0,0,1,8,0,3,0,0,0,1,17,0,0,1,0,18,0,1,0,0,1,8,0,1,0,1,4,167,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,4,245,0,1,0,2,3,74,4,167,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,16,192,0,1,16,192,0,1,10,242,0,0,0,3,0,0,0,1,16,176,0,2,10,226,10,226,0,0,0,3,0,1,16,68,0,1,10,210,0,0,0,1,0,0,1,10,0,3,0,0,0,1,16,142,0,1,10,192,0,1,0,0,1,10,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,241,6,82,0,1,0,2,2,167,3,74,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,16,84,0,1,16,84,0,1,2,26,0,0,0,3,0,0,0,1,16,68,0,2,2,10,2,10,0,0,0,3,0,1,15,216,0,1,1,250,0,0,0,1,0,0,1,12,0,3,0,0,0,1,16,34,0,1,1,232,0,1,0,0,1,12,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,249,6,82,0,1,0,2,3,34,3,74,0,6,0,0,0,5,0,16,0,32,0,48,0,66,0,84,0,3,0,1,15,230,0,1,15,230,0,1,12,242,0,0,0,3,0,0,0,1,15,214,0,2,12,226,12,226,0,0,0,3,0,2,11,118,14,146,0,1,15,198,0,1,12,210,0,0,0,3,0,1,15,88,0,1,12,192,0,0,0,1,0,0,1,14,0,3,0,0,0,1,15,162,0,1,12,174,0,1,0,0,1,14,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,253,6,82,0,1,0,2,3,71,3,74,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,15,104,0,1,15,104,0,1,15,116,0,0,0,3,0,0,0,1,15,88,0,2,15,100,15,100,0,0,0,3,0,1,14,236,0,1,15,84,0,0,0,1,0,0,1,16,0,3,0,0,0,1,15,54,0,1,15,66,0,1,0,0,1,16,0,1,0,0,0,1,0,8,0,2,0,10,0,2,5,2,6,82,0,1,0,2,3,73,3,74,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,14,252,0,1,14,252,0,1,6,248,0,0,0,3,0,0,0,1,14,236,0,2,6,232,6,232,0,0,0,3,0,1,14,128,0,1,6,216,0,0,0,1,0,0,1,18,0,3,0,0,0,1,14,202,0,1,6,198,0,1,0,0,1,18,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,237,6,82,0,1,0,2,2,193,3,74,0,6,0,0,0,7,0,20,0,36,0,52,0,68,0,84,0,106,0,124,0,3,0,1,14,138,0,1,14,138,0,1,14,138,0,0,0,3,0,0,0,1,14,122,0,2,14,122,14,122,0,0,0,3,0,0,0,1,14,106,0,2,14,106,13,168,0,0,0,3,0,0,0,1,14,90,0,2,14,90,8,34,0,0,0,3,0,0,0,1,14,74,0,2,14,74,0,16,0,0,0,1,0,1,3,34,0,3,0,1,13,216,0,1,14,52,0,0,0,1,0,0,1,20,0,3,0,0,0,1,14,34,0,1,14,34,0,1,0,0,1,21,0,1,0,0,0,1,0,8,0,1,14,8,1,185,0,1,0,0,0,1,0,8,0,1,13,250,3,8,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,13,230,0,1,13,230,0,1,7,174,0,0,0,3,0,0,0,1,13,214,0,2,7,158,7,158,0,0,0,3,0,1,13,106,0,1,7,142,0,0,0,1,0,0,1,23,0,3,0,0,0,1,13,180,0,1,7,124,0,1,0,0,1,23,0,1,0,0,0,1,0,8,0,2,0,10,0,2,4,251,6,82,0,1,0,2,3,67,3,74,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,13,122,0,1,13,122,0,1,17,124,0,0,0,3,0,0,0,1,13,106,0,2,17,108,17,108,0,0,0,3,0,1,12,254,0,1,17,92,0,0,0,1,0,0,1,25,0,3,0,0,0,1,13,72,0,1,17,74,0,1,0,0,1,25,0,1,0,0,0,1,0,8,0,2,0,10,0,2,5,10,6,82,0,1,0,2,2,181,3,74,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,3,184,0,1,3,184,0,1,0,68,0,0,0,3,0,0,0,1,3,168,0,2,0,52,0,52,0,0,0,3,0,1,12,146,0,1,0,36,0,0,0,1,0,0,1,27,0,3,0,0,0,1,3,134,0,1,0,18,0,1,0,0,1,27,0,1,0,1,2,185,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,3,2,0,1,0,2,2,178,2,185,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,3,70,0,1,3,70,0,1,0,68,0,0,0,3,0,0,0,1,3,54,0,2,0,52,0,52,0,0,0,3,0,1,12,32,0,1,0,36,0,0,0,1,0,0,1,29,0,3,0,0,0,1,3,20,0,1,0,18,0,1,0,0,1,29,0,1,0,1,2,187,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,3,3,0,1,0,2,2,178,2,187,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,2,212,0,1,2,212,0,1,6,92,0,0,0,3,0,0,0,1,2,196,0,2,6,76,6,76,0,0,0,3,0,1,11,174,0,1,6,60,0,0,0,1,0,0,1,31,0,3,0,0,0,1,2,162,0,1,6,42,0,1,0,0,1,31,0,1,0,0,0,1,0,8,0,2,0,10,0,2,3,4,6,82,0,1,0,2,2,167,2,178,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,2,104,0,1,2,104,0,1,8,202,0,0,0,3,0,0,0,1,2,88,0,2,8,186,8,186,0,0,0,3,0,1,11,66,0,1,8,170,0,0,0,1,0,0,1,33,0,3,0,0,0,1,2,54,0,1,8,152,0,1,0,0,1,33,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,3,10,0,1,0,2,2,178,3,71,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,1,252,0,1,1,252,0,1,0,68,0,0,0,3,0,0,0,1,1,236,0,2,0,52,0,52,0,0,0,3,0,1,10,214,0,1,0,36,0,0,0,1,0,0,1,35,0,3,0,0,0,1,1,202,0,1,0,18,0,1,0,0,1,35,0,1,0,1,2,170,0,1,0,0,0,1,0,8,0,2,0,10,0,2,3,5,6,82,0,1,0,2,2,170,2,178,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,1,138,0,1,1,138,0,1,1,138,0,0,0,3,0,0,0,1,1,122,0,2,1,122,1,122,0,0,0,3,0,1,10,100,0,1,1,106,0,0,0,1,0,0,1,37,0,3,0,0,0,1,1,88,0,1,1,88,0,1,0,0,1,38,0,1,0,0,0,1,0,8,0,1,1,62,0,85,0,1,0,0,0,1,0,8,0,1,1,48,3,160,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,1,28,0,1,1,28,0,1,9,62,0,0,0,3,0,0,0,1,1,12,0,2,9,46,9,46,0,0,0,3,0,1,9,246,0,1,9,30,0,0,0,1,0,0,1,40,0,3,0,0,0,1,0,234,0,1,9,12,0,1,0,0,1,40,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,3,1,0,1,0,2,2,178,2,183,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,176,0,1,0,176,0,1,5,182,0,0,0,3,0,0,0,1,0,160,0,2,5,166,5,166,0,0,0,3,0,1,9,138,0,1,5,150,0,0,0,1,0,0,1,42,0,3,0,0,0,1,0,126,0,1,5,132,0,1,0,0,1,42,0,1,0,0,0,1,0,8,0,2,0,10,0,2,3,6,6,82,0,1,0,2,2,172,2,178,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,68,0,1,0,68,0,1,8,14,0,0,0,3,0,0,0,1,0,52,0,2,7,254,7,254,0,0,0,3,0,1,9,30,0,1,7,238,0,0,0,1,0,0,1,44,0,3,0,0,0,1,0,18,0,1,7,220,0,1,0,0,1,44,0,1,0,1,2,178,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,3,11,0,1,0,2,2,178,2,200,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,96,0,1,0,96,0,1,0,96,0,0,0,3,0,0,0,1,0,80,0,2,0,80,0,80,0,0,0,3,0,1,8,172,0,1,0,64,0,0,0,1,0,0,1,46,0,3,0,0,0,1,0,46,0,1,0,46,0,1,0,0,1,47,0,1,0,0,0,1,0,8,0,1,0,20,1,182,0,1,0,0,0,1,0,8,0,1,0,6,2,245,0,1,0,1,3,93,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,3,214,0,1,3,214,0,1,5,192,0,0,0,3,0,0,0,1,3,198,0,2,5,176,5,176,0,0,0,3,0,1,8,56,0,1,5,160,0,0,0,1,0,0,1,49,0,3,0,0,0,1,3,164,0,1,5,142,0,1,0,0,1,49,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,235,0,1,0,2,2,165,3,71,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,3,106,0,1,3,106,0,1,0,68,0,0,0,3,0,0,0,1,3,90,0,2,0,52,0,52,0,0,0,3,0,1,7,204,0,1,0,36,0,0,0,1,0,0,1,51,0,3,0,0,0,1,3,56,0,1,0,18,0,1,0,0,1,51,0,1,0,1,2,193,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,229,0,1,0,2,2,165,2,193,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,2,248,0,1,2,248,0,1,2,248,0,0,0,3,0,0,0,1,2,232,0,2,2,232,2,232,0,0,0,3,0,1,7,90,0,1,2,216,0,0,0,1,0,0,1,53,0,3,0,0,0,1,2,198,0,1,2,198,0,1,0,0,1,54,0,1,0,0,0,1,0,8,0,1,2,172,0,65,0,1,0,0,0,1,0,8,0,1,2,158,3,173,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,2,138,0,1,2,138,0,1,3,24,0,0,0,3,0,0,0,1,2,122,0,2,3,8,3,8,0,0,0,3,0,1,6,236,0,1,2,248,0,0,0,1,0,0,1,56,0,3,0,0,0,1,2,88,0,1,2,230,0,1,0,0,1,56,0,1,0,0,0,1,0,8,0,2,2,86,0,2,6,82,2,234,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,204,0,1,0,204,0,1,7,16,0,0,0,3,0,0,0,1,0,188,0,2,7,0,7,0,0,0,0,3,0,1,6,136,0,1,6,240,0,0,0,1,0,0,1,58,0,3,0,0,0,1,0,154,0,1,6,222,0,1,0,0,1,58,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,4,218,0,1,0,2,3,67,3,73,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,96,0,1,0,96,0,1,0,96,0,0,0,3,0,0,0,1,0,80,0,2,0,80,0,80,0,0,0,3,0,1,6,28,0,1,0,64,0,0,0,1,0,0,1,60,0,3,0,0,0,1,0,46,0,1,0,46,0,1,0,0,1,61,0,1,0,0,0,1,0,8,0,1,0,20,1,149,0,1,0,0,0,1,0,8,0,1,0,6,3,15,0,1,0,1,3,67,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,1,210,0,1,1,210,0,1,0,84,0,0,0,3,0,0,0,1,1,194,0,2,0,68,0,68,0,0,0,3,0,1,4,206,0,1,1,178,0,1,0,52,0,0,0,3,0,1,5,150,0,1,0,36,0,0,0,1,0,0,1,63,0,3,0,0,0,1,1,144,0,1,0,18,0,1,0,0,1,63,0,1,0,1,2,167,0,1,0,0,0,1,0,8,0,2,0,10,0,2,2,249,6,82,0,1,0,2,2,167,2,172,0,6,0,0,0,5,0,16,0,32,0,48,0,64,0,82,0,3,0,1,1,78,0,1,1,78,0,1,2,170,0,0,0,3,0,0,0,1,1,62,0,2,2,154,2,154,0,0,0,3,0,1,4,74,0,1,1,46,0,1,2,138,0,0,0,3,0,1,5,18,0,1,2,122,0,0,0,1,0,0,1,65,0,3,0,0,0,1,1,12,0,1,2,104,0,1,0,0,1,65,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,251,0,1,0,2,2,172,3,71,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,210,0,1,0,210,0,1,0,68,0,0,0,3,0,0,0,1,0,194,0,2,0,52,0,52,0,0,0,3,0,1,4,166,0,1,0,36,0,0,0,1,0,0,1,67,0,3,0,0,0,1,0,160,0,1,0,18,0,1,0,0,1,67,0,1,0,1,2,165,0,1,0,0,0,1,0,8,0,2,0,10,0,2,2,248,6,82,0,1,0,2,2,165,2,172,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,96,0,1,0,96,0,1,0,96,0,0,0,3,0,0,0,1,0,80,0,2,0,80,0,80,0,0,0,3,0,1,4,52,0,1,0,64,0,0,0,1,0,0,1,69,0,3,0,0,0,1,0,46,0,1,0,46,0,1,0,0,1,70,0,1,0,0,0,1,0,8,0,1,0,20,0,78,0,1,0,0,0,1,0,8,0,1,0,6,3,166,0,1,0,1,2,172,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,96,0,1,0,96,0,1,0,96,0,0,0,3,0,0,0,1,0,80,0,2,0,80,0,80,0,0,0,3,0,1,3,192,0,1,0,64,0,0,0,1,0,0,1,72,0,3,0,0,0,1,0,46,0,1,0,46,0,1,0,0,1,73,0,1,0,0,0,1,0,8,0,1,0,20,0,75,0,1,0,0,0,1,0,8,0,1,0,6,3,170,0,1,0,1,2,168,0,6,0,0,0,6,0,18,0,34,0,50,0,66,0,82,0,100,0,3,0,1,7,198,0,1,7,198,0,1,3,2,0,0,0,3,0,0,0,1,7,182,0,2,2,242,2,242,0,0,0,3,0,0,0,1,7,166,0,2,2,226,7,166,0,0,0,3,0,1,2,210,0,1,7,150,0,1,2,210,0,0,0,3,0,1,3,40,0,1,2,194,0,0,0,1,0,0,1,75,0,3,0,0,0,1,7,116,0,1,2,176,0,1,0,0,1,75,0,1,0,0,0,1,0,8,0,2,0,10,0,2,3,13,6,82,0,1,0,2,2,176,2,181,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,7,58,0,1,7,58,0,1,0,68,0,0,0,3,0,0,0,1,7,42,0,2,0,52,0,52,0,0,0,3,0,1,2,188,0,1,0,36,0,0,0,1,0,0,1,77,0,3,0,0,0,1,7,8,0,1,0,18,0,1,0,0,1,77,0,1,0,1,3,71,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,3,14,0,1,0,2,2,181,3,71,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,6,200,0,1,6,200,0,1,2,210,0,0,0,3,0,0,0,1,6,184,0,2,2,194,2,194,0,0,0,3,0,1,2,74,0,1,2,178,0,0,0,1,0,0,1,79,0,3,0,0,0,1,6,150,0,1,2,160,0,1,0,0,1,79,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,3,16,0,1,0,2,2,181,3,73,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,6,92,0,1,6,92,0,1,6,92,0,0,0,3,0,0,0,1,6,76,0,2,6,76,6,76,0,0,0,3,0,1,1,222,0,1,6,60,0,0,0,1,0,0,1,81,0,3,0,0,0,1,6,42,0,1,6,42,0,1,0,0,1,82,0,1,0,0,0,1,0,8,0,1,6,16,0,92,0,1,0,0,0,1,0,8,0,1,6,2,3,157,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,96,0,1,0,96,0,1,0,96,0,0,0,3,0,0,0,1,0,80,0,2,0,80,0,80,0,0,0,3,0,1,1,112,0,1,0,64,0,0,0,1,0,0,1,84,0,3,0,0,0,1,0,46,0,1,0,46,0,1,0,0,1,85,0,1,0,0,0,1,0,8,0,1,0,20,0,77,0,1,0,0,0,1,0,8,0,1,0,6,3,138,0,1,0,1,2,200,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,68,0,1,0,68,0,1,0,182,0,0,0,3,0,0,0,1,0,52,0,2,0,166,0,166,0,0,0,3,0,1,0,252,0,1,0,150,0,0,0,1,0,0,1,87,0,3,0,0,0,1,0,18,0,1,0,132,0,1,0,0,1,87,0,1,0,1,2,183,0,1,0,0,0,1,0,8,0,2,0,10,0,2,2,224,6,82,0,1,0,2,2,176,2,183,0,6,0,0,0,4,0,14,0,30,0,46,0,64,0,3,0,1,0,68,0,1,0,68,0,1,0,74,0,0,0,3,0,0,0,1,0,52,0,2,0,58,0,58,0,0,0,3,0,1,0,138,0,1,0,42,0,0,0,1,0,0,1,89,0,3,0,0,0,1,0,18,0,1,0,24,0,1,0,0,1,89,0,1,0,1,2,176,0,1,0,1,2,184,0,1,0,0,0,1,0,8,0,2,0,10,0,2,6,82,2,252,0,1,0,2,2,176,2,184,0,6,0,0,0,4,0,14,0,30,0,46,0,70,0,3,0,1,0,102,0,1,0,102,0,1,0,102,0,0,0,3,0,0,0,1,0,86,0,2,0,86,0,86,0,0,0,3,0,1,0,18,0,1,0,70,0,0,0,1,0,0,1,91,0,1,0,1,6,82,0,3,0,0,0,1,0,46,0,1,0,46,0,1,0,0,1,92,0,1,0,0,0,1,0,8,0,1,0,20,0,93,0,1,0,0,0,1,0,8,0,1,0,6,3,156,0,1,0,1,2,182,0,6,0,0,0,4,0,14,0,52,0,128,0,196,0,3,0,1,0,20,0,1,0,26,0,1,0,32,0,1,0,0,1,94,0,1,0,1,3,74,0,1,0,1,3,79,0,1,0,1,3,73,0,3,0,0,0,1,0,18,0,1,0,24,0,1,0,0,1,94,0,1,0,1,0,230,0,2,0,8,0,1,0,193,0,0,0,221,0,221,0,193,1,5,1,6,0,194,1,8,1,8,0,196,1,25,1,26,0,197,1,28,1,33,0,199,1,143,1,208,0,205,2,35,2,68,1,15,0,3,0,1,5,4,0,1,0,132,0,1,0,20,0,1,0,0,1,94,0,1,0,22,0,1,0,27,0,28,0,34,0,38,0,59,0,195,0,221,0,222,0,228,0,232,0,254,2,106,2,107,2,108,2,109,2,110,2,111,2,112,2,113,2,114,2,115,0,3,0,1,4,0,0,1,0,64,0,1,4,0,0,1,0,0,1,95,0,1,0,0,0,1,0,8,0,2,0,12,0,3,1,131,1,138,5,16,0,1,0,3,0,230,1,117,3,79,0,1,0,0,0,1,0,8,0,1,0,6,0,21,0,1,0,1,1,117,0,6,0,0,0,5,0,16,0,34,0,52,0,114,0,132,0,3,0,0,0,1,0,56,0,1,0,76,0,1,0,0,1,97,0,3,0,0,0,1,0,154,0,1,0,58,0,1,0,0,1,98,0,3,0,0,0,1,0,20,0,2,0,28,0,40,0,1,0,0,1,99,0,1,0,2,1,9,1,22,0,1,0,4,6,40,6,41,6,43,6,44,0,2,0,3,6,27,6,39,0,0,6,45,6,46,0,13,6,75,6,75,0,15,0,3,0,1,3,202,0,1,3,202,0,0,0,1,0,0,1,97,0,3,0,1,0,18,0,1,3,184,0,0,0,1,0,0,1,99,0,2,0,3,0,1,0,193,0,0,1,143,1,208,0,193,2,35,2,68,1,3,0,2,0,0,0,1,0,8,0,1,0,8,0,1,0,14,0,1,0,1,1,20,0,2,1,10,6,44,0,1,0,0,0,1,0,8,0,2,0,40,0,17,1,10,1,23,6,60,6,61,6,62,6,63,6,64,6,65,6,66,6,67,6,68,6,69,6,70,6,71,6,72,6,77,6,80,0,1,0,17,1,9,1,22,6,27,6,28,6,29,6,30,6,31,6,32,6,33,6,34,6,35,6,36,6,37,6,38,6,40,6,76,6,79,0,6,0,0,0,2,0,10,0,28,0,3,0,0,0,1,3,20,0,1,0,36,0,1,0,0,1,101,0,3,0,1,0,18,0,1,3,2,0,0,0,1,0,0,1,102,0,2,0,3,6,60,6,72,0,0,6,77,6,77,0,13,6,80,6,80,0,14,0,1,0,0,0,1,0,8,0,2,0,14,0,4,0,140,0,147,1,82,1,89,0,1,0,4,0,138,0,146,1,80,1,88,0,1,0,0,0,1,0,8,0,2,0,28,0,11,0,189,0,190,0,191,0,192,0,193,1,133,1,134,1,135,1,136,1,137,6,73,0,1,0,11,0,29,0,95,0,102,0,136,0,185,0,223,1,36,1,44,1,78,1,128,6,30,0,4,0,0,0,1,0,8,0,1,0,30,0,2,0,10,0,20,0,1,0,4,0,188,0,2,0,83,0,1,0,4,1,132,0,2,1,22,0,1,0,2,0,72,1,11,0,6,0,0,0,2,0,10,0,30,0,3,0,0,0,2,0,62,0,40,0,1,0,62,0,1,0,0,1,107,0,3,0,0,0,2,0,74,0,20,0,1,0,74,0,1,0,0,1,108,0,1,0,1,2,174,0,4,0,0,0,1,0,8,0,1,0,8,0,1,0,14,0,1,0,1,1,28,0,1,0,4,1,32,0,2,2,174,0,4,0,0,0,1,0,8,0,1,0,8,0,1,0,14,0,1,0,1,0,87,0,1,0,4,0,91,0,2,2,174,0,1,0,0,0,1,0,8,0,2,0,48,0,21,1,206,1,207,1,208,2,16,2,17,2,18,2,19,2,20,2,21,2,22,2,23,2,24,2,25,2,26,2,27,2,28,2,29,2,30,2,31,2,32,2,33,0,1,0,21,1,149,1,160,1,170,1,211,1,212,1,215,1,219,1,220,1,221,1,222,1,223,1,224,1,226,1,230,1,233,1,239,1,240,1,241,1,243,1,244,1,255,0,1,0,0,0,1,0,8,0,1,0,6,0,80,0,1,0,1,1,210,0,1,0,0,0,1,0,8,0,1,0,208,0,11,0,1,0,0,0,1,0,8,0,1,0,194,0,41,0,1,0,0,0,1,0,8,0,1,0,180,0,21,0,1,0,0,0,1,0,8,0,1,0,6,255,232,0,1,0,1,2,181,0,1,0,0,0,1,0,8,0,1,0,146,0,31,0,6,0,0,0,2,0,10,0,34,0,3,0,1,0,18,0,1,0,66,0,0,0,1,0,0,1,119,0,1,0,1,2,157,0,3,0,1,0,18,0,1,0,42,0,0,0,1,0,0,1,120,0,2,0,1,2,127,2,136,0,0,0,1,0,0,0,1,0,8,0,1,0,6,255,246,0,2,0,1,2,137,2,146,0,0,0,6,0,0,0,2,0,10,0,36,0,3,0,1,0,44,0,1,0,18,0,0,0,1,0,0,1,122,0,1,0,2,0,1,0,195,0,3,0,1,0,18,0,1,0,28,0,0,0,1,0,0,1,122,0,2,0,1,2,106,2,115,0,0,0,1,0,2,0,101,1,43,0,1,0,0,0,1,0,8,0,2,0,14,0,4,1,140,1,141,1,140,1,141,0,1,0,4,0,1,0,101,0,195,1,43,0,4,0,0,0,1,0,8,0,1,0,20,0,1,0,8,0,1,0,4,4,172,0,3,1,43,2,165,0,1,0,1,0,94,0,1,0,0,0,1,0,8,0,2,0,36,0,15,6,60,6,61,6,62,6,63,6,64,6,65,6,66,6,67,6,68,6,69,6,70,6,71,6,72,6,77,6,80,0,2,0,4,6,27,6,38,0,0,6,40,6,40,0,12,6,76,6,76,0,13,6,79,6,79,0,14,0,1,0,0,0,1,0,8,0,1,0,6,253,232,0,1,0,1,5,14,0,1,0,0,0,1,0,8,0,1,0,6,0,10,0,1,0,1,2,106,0,1,0,0,0,1,0,8,0,1,0,6,1,5,0,2,0,1,3,106,3,137,0,0,0,1,0,0,0,1,0,8,0,2,0,16,0,5,6,83,6,84,6,85,6,86,6,87,0,1,0,5,3,29,3,34,4,215,4,249,4,250,0,1,0,0,0,0,0,1,0,0,0,16,0,0,0,30,0,1,0,0,0,6,0,1,0,0,32,0,64,0,0,1,0,0,0,1,0,15,0,0,0,12,0,0,0,1,1,129,0,0,0,1,0,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,12,0,1,0,0,0,28,0,1,0,2,192,0,192,0,0,0,0,0,64,0,64,0,6,88,0,0,0,0,0,0,0,4,4,176,1,144,0,5,0,0,5,51,4,205,0,0,0,154,5,51,4,205,0,0,2,205,0,50,2,124,0,0,2,11,6,9,2,0,0,2,0,4,161,0,2,255,0,0,248,251,0,4,0,0,0,0,0,0,83,65,74,65,0,192,0,9,43,203,7,108,254,32,0,0,8,178,1,224,96,0,1,159,223,215,0,0,4,36,5,140,0,0,0,32,0,5,0,1,0,1,0,8,0,1,0,0,0,20,0,6,0,0,0,28,0,2,119,103,104,116,1,0,0,0,0,12,0,24,0,36,0,48,0,64,0,76,0,1,0,0,0,0,1,1,0,200,0,0,0,1,0,0,0,0,1,2,1,44,0,0,0,1,0,0,0,0,1,3,1,94,0,0,0,3,0,0,0,2,1,4,1,144,0,0,2,188,0,0,0,1,0,0,0,0,1,5,2,88,0,0,0,1,0,0,0,0,1,6,2,188,0,0,0,1,0,0,0,0,0,1,0,6,192,0,192,0,224,0,213,85,240,0,234,171,0,0,0,0,42,171,32,0,64,0,64,0,0,0,0,0,0,2,0,0,0,3,0,0,0,20,0,3,0,1,0,0,0,20,0,4,13,216,0,0,1,36,1,0,0,7,0,36,0,9,0,13,0,47,0,57,0,126,1,127,1,134,1,144,1,146,1,157,1,161,1,169,1,176,1,183,1,206,1,231,1,235,1,255,2,27,2,31,2,51,2,55,2,69,2,84,2,89,2,91,2,106,2,114,2,131,2,140,2,146,2,167,2,188,2,199,2,201,2,221,3,4,3,12,3,18,3,27,3,35,3,40,3,66,3,117,3,126,3,138,3,140,3,144,3,161,3,169,3,176,3,201,3,207,3,215,4,26,4,35,4,58,4,67,4,95,4,147,4,151,4,155,4,163,4,179,4,183,4,187,4,192,4,207,4,217,4,227,4,233,4,239,14,63,30,133,30,158,30,249,32,8,32,17,32,21,32,30,32,34,32,36,32,38,32,40,32,48,32,51,32,58,32,60,32,62,32,68,32,112,32,121,32,127,32,137,32,161,32,164,32,174,32,178,32,181,32,186,32,190,33,5,33,19,33,23,33,34,33,38,33,46,33,94,33,149,33,168,33,225,33,227,34,2,34,6,34,15,34,18,34,21,34,26,34,31,34,41,34,43,34,72,34,101,35,16,35,33,35,175,37,148,37,159,37,255,38,25,38,60,38,64,38,66,38,96,38,99,38,102,38,107,39,19,39,103,39,111,40,255,42,47,43,47,43,200,43,203,255,255,0,0,0,9,0,13,0,32,0,48,0,58,0,160,1,134,1,143,1,146,1,157,1,160,1,169,1,175,1,183,1,205,1,230,1,234,1,250,2,24,2,30,2,50,2,55,2,69,2,84,2,89,2,91,2,106,2,114,2,131,2,140,2,146,2,167,2,187,2,198,2,201,2,216,3,0,3,6,3,18,3,27,3,35,3,38,3,64,3,116,3,126,3,132,3,140,3,142,3,145,3,163,3,170,3,177,3,202,3,215,4,0,4,27,4,36,4,59,4,68,4,144,4,150,4,154,4,162,4,174,4,182,4,186,4,192,4,207,4,216,4,226,4,232,4,238,14,63,30,128,30,158,30,160,32,8,32,16,32,19,32,23,32,32,32,36,32,38,32,40,32,48,32,50,32,57,32,60,32,62,32,68,32,112,32,116,32,127,32,128,32,160,32,163,32,166,32,177,32,180,32,184,32,188,33,5,33,19,33,22,33,34,33,38,33,46,33,91,33,144,33,168,33,225,33,227,34,2,34,6,34,15,34,17,34,21,34,25,34,30,34,41,34,43,34,72,34,96,35,16,35,32,35,175,37,0,37,149,37,160,38,25,38,58,38,64,38,66,38,96,38,99,38,101,38,106,39,19,39,103,39,108,40,0,42,47,43,18,43,197,43,202,255,255,6,72,3,14,0,0,2,58,0,0,0,0,254,245,0,0,1,148,254,198,0,0,254,143,0,0,254,131,0,0,0,0,0,0,0,0,0,0,0,0,0,0,254,224,254,99,254,237,254,163,254,158,254,88,254,183,254,119,254,227,254,107,254,179,0,0,3,110,3,81,0,0,0,0,0,0,3,21,3,13,3,6,3,4,0,0,2,162,255,153,0,0,254,179,0,0,254,146,254,145,0,0,254,148,0,0,254,146,0,0,253,133,0,0,253,167,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,253,9,253,60,0,0,0,0,0,0,0,0,244,222,0,0,225,239,0,0,227,16,226,182,226,176,0,0,0,0,226,143,226,131,226,244,227,46,228,115,226,154,226,117,226,118,226,89,226,35,226,35,225,15,225,245,0,0,0,0,0,0,0,0,0,0,0,0,0,0,227,158,227,151,0,0,227,128,226,47,227,127,225,70,0,0,225,191,225,135,225,134,225,89,225,80,225,72,0,0,225,39,0,0,0,0,225,42,225,41,225,6,0,0,224,49,0,0,223,143,0,0,221,231,0,0,222,118,222,86,222,83,222,82,222,53,222,51,222,50,222,170,221,134,221,51,0,0,0,0,217,49,0,0,0,0,0,0,0,1,0,0,0,0,1,32,0,0,1,60,1,196,0,0,3,128,0,0,0,0,3,126,0,0,3,126,0,0,3,126,3,128,3,130,3,132,3,142,3,148,3,150,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,3,130,0,0,0,0,3,128,3,138,3,146,0,0,0,0,0,0,0,0,3,150,0,0,0,0,3,150,0,0,3,160,0,0,0,0,3,160,0,0,3,170,0,0,3,178,0,0,3,228,0,0,4,14,4,68,4,74,4,76,4,78,4,80,4,90,4,92,0,0,0,0,4,90,4,92,4,94,4,96,0,0,4,96,0,0,4,104,0,0,0,0,0,0,5,20,5,34,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,5,12,5,14,5,16,5,32,5,34,5,36,5,40,0,0,0,0,5,40,0,0,0,0,0,0,0,0,5,34,0,0,0,0,0,0,0,0,0,0,0,0,5,32,0,0,5,32,5,34,0,0,0,0,0,0,5,30,0,0,5,38,0,0,5,38,0,0,6,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,246,6,252,0,0,8,248,9,50,9,56,0,0,3,25,2,170,2,213,2,178,3,34,3,93,4,156,2,214,2,183,2,184,2,176,3,67,2,166,2,193,2,165,2,181,2,167,2,168,3,74,3,71,3,73,2,172,4,155,0,1,0,27,0,28,0,34,0,38,0,59,0,60,0,66,0,70,0,83,0,85,0,87,0,93,0,94,0,101,0,128,0,130,0,131,0,135,0,143,0,148,0,167,0,169,0,174,0,175,0,184,2,187,2,182,2,188,3,81,2,200,6,49,0,195,0,221,0,222,0,228,0,232,0,254,0,255,1,5,1,9,1,22,1,25,1,28,1,34,1,35,1,43,1,70,1,72,1,73,1,77,1,85,1,91,1,110,1,112,1,117,1,118,1,127,2,185,4,167,2,186,3,79,3,26,2,171,3,31,3,54,3,33,3,58,4,168,4,158,6,47,4,159,1,140,2,209,3,80,2,194,4,160,6,57,4,164,3,77,2,149,2,150,6,50,3,90,4,157,2,174,6,58,2,148,1,141,2,210,2,159,2,158,2,160,2,173,0,18,0,2,0,10,0,24,0,16,0,22,0,25,0,31,0,51,0,39,0,42,0,48,0,78,0,72,0,74,0,75,0,35,0,100,0,112,0,102,0,104,0,126,0,110,3,69,0,124,0,154,0,149,0,151,0,152,0,176,0,129,1,83,0,212,0,196,0,204,0,218,0,210,0,216,0,219,0,225,0,245,0,233,0,236,0,242,1,16,1,11,1,13,1,14,0,229,1,42,1,54,1,44,1,46,1,68,1,52,3,70,1,66,1,97,1,92,1,94,1,95,1,119,1,71,1,121,0,20,0,214,0,3,0,197,0,21,0,215,0,29,0,223,0,32,0,226,0,33,0,227,0,30,0,224,0,36,0,230,0,37,0,231,0,53,0,247,0,40,0,234,0,49,0,243,0,54,0,248,0,41,0,235,0,63,1,2,0,61,1,0,0,65,1,4,0,64,1,3,0,69,1,8,0,67,1,6,0,82,1,21,0,80,1,19,0,73,1,12,0,81,1,20,0,76,1,10,0,71,1,18,0,84,1,24,0,86,1,26,1,27,0,88,1,29,0,90,1,31,0,89,1,30,0,91,1,32,0,92,1,33,0,95,1,36,0,97,1,39,0,96,1,38,1,37,0,98,1,40,0,121,1,63,0,103,1,45,0,120,1,62,0,127,1,69,0,132,1,74,0,134,1,76,0,133,1,75,0,136,1,78,0,139,1,81,0,138,1,80,0,137,1,79,0,146,1,88,0,145,1,87,0,144,1,86,0,166,1,109,0,163,1,106,0,150,1,93,0,165,1,108,0,162,1,105,0,164,1,107,0,171,1,114,0,177,1,120,0,178,0,185,1,128,0,187,1,130,0,186,1,129,1,84,0,142,0,55,0,114,1,56,0,156,1,99,0,9,0,203,0,62,1,1,0,122,1,64,0,23,0,217,0,26,0,220,0,125,1,67,0,140,1,82,0,147,1,89,0,68,1,7,0,182,1,125,6,25,6,24,6,54,6,48,6,55,6,59,6,56,6,51,6,29,6,30,6,32,6,36,6,37,6,34,6,28,6,27,6,38,6,35,6,31,6,33,6,45,6,46,6,75,6,76,6,78,2,59,3,22,2,60,2,61,2,62,2,64,2,65,2,96,2,66,2,67,2,102,2,103,2,104,2,94,2,99,2,95,2,98,2,100,2,97,2,101,2,68,1,151,1,152,1,191,1,147,1,183,1,182,1,185,1,186,1,187,1,180,1,181,1,188,1,159,1,157,1,169,1,176,1,143,1,144,1,145,1,146,1,149,1,150,1,153,1,154,1,155,1,156,1,158,1,170,1,171,1,173,1,172,1,174,1,175,1,178,1,179,1,177,1,184,1,189,1,190,1,209,1,210,1,211,1,212,1,215,1,216,1,219,1,220,1,221,1,222,1,224,1,236,1,237,1,239,1,238,1,240,1,241,1,244,1,245,1,243,1,250,1,255,2,0,1,217,1,218,2,1,1,213,1,249,1,248,1,251,1,252,1,253,1,246,1,247,1,254,1,225,1,223,1,235,1,242,1,148,1,214,1,192,2,2,1,193,2,3,1,194,2,4,1,195,2,5,1,196,2,6,1,197,2,7,1,198,2,8,1,199,2,9,1,200,2,10,1,202,2,12,1,203,2,13,1,204,2,14,1,205,2,15,0,173,1,116,0,170,1,113,0,172,1,115,0,17,0,211,0,19,0,213,0,11,0,205,0,13,0,207,0,14,0,208,0,15,0,209,0,12,0,206,0,4,0,198,0,6,0,200,0,7,0,201,0,8,0,202,0,5,0,199,0,50,0,244,0,52,0,246,0,57,0,251,0,43,0,237,0,45,0,239,0,46,0,240,0,47,0,241,0,44,0,238,0,79,1,17,0,77,1,15,0,111,1,53,0,113,1,55,0,105,1,47,0,107,1,49,0,108,1,50,0,109,1,51,0,106,1,48,0,115,1,57,0,117,1,59,0,118,1,60,0,119,1,61,0,116,1,58,0,153,1,96,0,155,1,98,0,157,1,100,0,159,1,102,0,160,1,103,0,161,1,104,0,158,1,101,0,180,1,123,0,179,1,122,0,181,1,124,0,183,1,126,2,201,2,206,2,207,2,202,2,208,2,204,2,205,2,203,4,169,4,171,2,175,3,37,3,32,3,39,3,44,3,47,3,48,3,51,3,57,3,53,3,35,3,36,3,42,3,56,3,49,3,40,3,41,3,30,3,55,3,52,3,45,3,46,3,50,3,43,4,172,4,161,3,100,3,97,3,98,3,99,3,101,3,102,3,88,3,68,3,59,3,89,3,82,3,92,3,72,3,61,3,66,3,95,3,76,3,75,3,64,3,63,4,56,4,18,4,69,4,31,4,62,4,24,4,63,4,25,4,59,4,21,4,60,4,22,4,55,4,6,4,0,4,17,4,54,4,4,3,254,4,16,4,68,4,95,4,89,4,30,4,67,4,93,4,87,4,28,4,72,4,107,4,88,4,1,4,104,4,7,4,94,4,34,4,71,4,106,4,86,3,255,4,103,4,5,4,92,4,33,4,53,4,36,4,74,4,3,3,253,4,77,4,39,4,15,4,66,4,37,4,75,4,91,4,85,4,78,4,40,4,27,4,70,4,38,4,76,4,105,4,84,4,2,4,102,4,42,4,80,4,35,4,73,4,8,4,90,4,79,4,41,4,32,4,50,4,12,4,51,4,13,3,242,3,246,4,11,3,252,3,241,4,10,3,251,3,240,4,98,4,83,3,245,4,97,4,82,3,244,4,110,4,101,3,249,4,109,4,100,3,248,4,9,3,250,3,239,4,96,4,81,3,243,4,108,4,99,3,247,4,44,4,43,4,45,4,46,4,49,4,48,4,47,4,57,4,64,4,61,4,52,4,19,4,26,4,23,4,14,4,58,4,65,4,20,4,29,3,114,3,106,3,107,3,108,3,109,3,110,3,111,3,112,3,113,3,122,3,121,3,120,3,119,3,118,3,117,3,116,3,123,3,135,3,136,3,137,3,115,3,182,3,183,3,184,3,185,3,187,3,188,3,189,3,190,3,191,3,192,3,193,3,194,3,179,3,180,3,178,3,181,3,176,3,177,3,208,3,212,3,223,3,227,3,209,3,213,3,224,3,228,3,219,3,221,3,210,3,214,3,225,3,229,3,211,3,215,3,226,3,230,3,220,3,222,3,168,3,169,3,174,3,155,3,175,3,139,3,154,3,153,3,156,3,138,3,141,3,142,3,143,3,144,3,147,3,148,3,145,3,146,3,158,3,159,3,160,3,161,3,164,3,165,3,166,3,167,3,162,3,163,3,232,3,233,3,234,3,231,3,157,3,195,3,196,3,197,3,198,3,199,3,216,3,217,3,218,3,140,3,200,3,201,3,202,3,203,3,149,3,150,3,151,3,152,3,238,3,235,3,237,3,204,3,205,3,206,3,207,3,236,2,191,2,192,2,189,2,190,5,22,5,23,5,151,5,24,5,215,5,88,5,152,5,25,5,247,5,120,5,184,5,57,5,216,5,89,5,153,5,26,6,7,5,136,5,200,5,73,5,232,5,105,5,169,5,42,5,248,5,121,5,185,5,58,5,217,5,90,5,154,5,27,6,15,5,144,5,208,5,81,5,240,5,113,5,177,5,50,6,0,5,129,5,193,5,66,5,225,5,98,5,162,5,35,6,8,5,137,5,201,5,74,5,233,5,106,5,170,5,43,5,249,5,122,5,186,5,59,5,218,5,91,5,155,5,28,6,19,5,148,5,212,5,85,5,244,5,117,5,181,5,54,6,4,5,133,5,197,5,70,5,229,5,102,5,166,5,39,6,12,5,141,5,205,5,78,5,237,5,110,5,174,5,47,5,253,5,126,5,190,5,63,5,222,5,95,5,159,5,32,6,16,5,145,5,209,5,82,5,241,5,114,5,178,5,51,6,1,5,130,5,194,5,67,5,226,5,99,5,163,5,36,6,9,5,138,5,202,5,75,5,234,5,107,5,171,5,44,5,250,5,123,5,187,5,60,5,219,5,92,5,156,5,29,6,21,5,150,5,214,5,87,5,246,5,119,5,183,5,56,6,6,5,135,5,199,5,72,5,231,5,104,5,168,5,41,6,14,5,143,5,207,5,80,5,239,5,112,5,176,5,49,5,255,5,128,5,192,5,65,5,224,5,97,5,161,5,34,6,18,5,147,5,211,5,84,5,243,5,116,5,180,5,53,6,3,5,132,5,196,5,69,5,228,5,101,5,165,5,38,6,11,5,140,5,204,5,77,5,236,5,109,5,173,5,46,5,252,5,125,5,189,5,62,5,221,5,94,5,158,5,31,6,20,5,149,5,213,5,86,5,245,5,118,5,182,5,55,6,5,5,134,5,198,5,71,5,230,5,103,5,167,5,40,6,13,5,142,5,206,5,79,5,238,5,111,5,175,5,48,5,254,5,127,5,191,5,64,5,223,5,96,5,160,5,33,6,17,5,146,5,210,5,83,5,242,5,115,5,179,5,52,6,2,5,131,5,195,5,68,5,227,5,100,5,164,5,37,6,10,5,139,5,203,5,76,5,235,5,108,5,172,5,45,5,251,5,124,5,188,5,61,5,220,5,93,5,157,5,30,4,191,4,194,4,192,4,195,3,170,3,171,3,172,3,173,3,186,4,177,4,198,4,188,4,204,4,184,4,201,4,196,4,174,4,190,4,176,4,178,4,199,4,181,4,200,4,185,4,186,4,202,4,175,4,197,4,187,4,203,4,183,4,179,4,180,4,182,4,193,4,189,0,1,0,0,0,2,0,20,0,9,160,0,192,0,0,9,160,0,64,0,3,2,147,1,3,2,208,208,211,3,2,147,1,3,2,34,40,40,0,0,5,220,0,20,5,140,0,20,5,140,0,20,4,36,0,20,0,0,255,236,0,0,255,236,0,0,255,236,254,52,255,238,5,140,0,20,0,0,255,236,0,0,0,206,0,199,0,190,0,190,0,212,0,176,0,176,0,13,0,200,0,10,0,188,0,95,255,252,1,84,0,142,0,204,0,192,0,195,0,12,0,213,0,176,0,80,0,182,255,248,0,190,0,117,0,190,0,177,0,213,0,213,0,149,1,78,0,18,0,184,0,154,0,205,0,192,0,3,0,214,0,197,0,181,0,172,0,183,0,163,0,189,1,124,0,184,0,168,0,192,0,203,0,230,0,12,0,30,0,192,0,200,0,211,0,95,0,183,0,190,1,84,0,122,0,142,0,165,0,176,0,187,0,196,0,208,0,216,0,12,0,160,0,176,0,192,0,200,0,212,0,220,0,80,0,140,0,161,0,173,0,180,0,191,0,226,0,117,0,171,0,177,0,185,0,190,0,199,0,204,0,208,0,213,0,138,0,154,0,172,0,202,0,206,0,214,0,220,0,252,1,78,0,18,0,176,0,184,0,190,0,149,0,158,0,192,0,207,0,3,0,171,0,181,0,192,0,201,0,216,0,163,0,170,0,180,0,188,0,201,1,124,0,159,0,168,0,182,0,193,0,204,0,230,3,34,4,28,6,194,4,152,3,42,6,74,6,98,6,84,0,0,64,74,153,152,151,150,135,134,133,132,131,130,129,128,127,126,125,124,123,122,121,120,119,118,117,116,115,114,113,112,111,110,109,108,107,106,105,104,103,102,101,100,99,98,97,96,95,94,93,92,91,90,89,88,87,86,85,84,83,81,80,79,78,77,76,75,74,73,72,71,70,40,31,16,10,9,44,1,177,11,10,67,35,67,101,10,45,44,0,177,10,11,67,35,67,11,45,44,1,176,6,67,176,7,67,101,10,45,44,176,79,43,32,176,64,81,88,33,75,82,88,69,68,27,33,33,89,27,35,33,176,64,176,4,37,69,176,4,37,69,97,100,138,99,82,88,69,68,27,33,33,89,89,45,44,0,176,7,67,176,6,67,11,45,44,75,83,35,75,81,90,88,32,69,138,96,68,27,33,33,89,45,44,75,84,88,32,69,138,96,68,27,33,33,89,45,44,75,83,35,75,81,90,88,56,27,33,33,89,45,44,75,84,88,56,27,33,33,89,45,44,176,2,67,84,88,176,70,43,27,33,33,33,33,89,45,44,176,2,67,84,88,176,71,43,27,33,33,33,89,45,44,176,2,67,84,88,176,72,43,27,33,33,33,33,89,45,44,176,2,67,84,88,176,73,43,27,33,33,33,89,45,44,35,32,176,0,80,138,138,100,177,0,3,37,84,88,176,64,27,177,1,3,37,84,88,176,5,67,139,89,176,79,43,89,35,176,98,43,35,33,35,88,101,89,45,44,177,8,0,12,33,84,96,67,45,44,177,12,0,12,33,84,96,67,45,44,1,32,71,176,2,67,32,184,16,0,98,184,16,0,99,87,35,184,1,0,98,184,16,0,99,87,90,88,176,32,96,102,89,72,45,44,177,0,2,37,176,2,37,176,2,37,83,184,0,53,35,120,176,2,37,176,2,37,96,176,32,99,32,32,176,6,37,35,98,80,88,138,33,176,1,96,35,27,32,32,176,6,37,35,98,82,88,35,33,176,1,97,27,138,33,35,33,32,89,89,184,255,193,28,96,176,32,99,35,33,45,44,177,2,0,66,177,35,1,136,81,177,64,1,136,83,90,88,185,16,0,0,32,136,84,88,178,2,1,2,67,96,66,89,177,36,1,136,81,88,185,32,0,0,64,136,84,88,178,2,2,2,67,96,66,177,36,1,136,84,88,178,2,32,2,67,96,66,0,75,1,75,82,88,178,2,8,2,67,96,66,89,27,185,64,0,0,128,136,84,88,178,2,4,2,67,96,66,89,185,64,0,0,128,99,184,1,0,136,84,88,178,2,8,2,67,96,66,89,185,64,0,1,0,99,184,2,0,136,84,88,178,2,16,2,67,96,66,89,177,38,1,136,81,88,185,64,0,2,0,99,184,4,0,136,84,88,178,2,64,2,67,96,66,89,185,64,0,4,0,99,184,8,0,136,84,88,178,2,128,2,67,96,66,89,177,40,1,136,81,88,185,64,0,8,0,99,184,16,0,136,84,88,186,0,2,1,0,0,2,67,96,66,89,89,89,89,89,89,89,177,0,2,67,84,88,64,10,5,64,8,64,9,64,12,2,13,2,27,177,1,2,67,84,88,178,5,64,8,186,1,0,0,9,1,0,179,12,1,13,1,27,177,128,2,67,82,88,178,5,64,8,184,1,128,177,9,64,27,185,1,0,0,2,67,82,88,178,5,64,8,186,1,128,0,9,1,64,27,185,1,128,0,2,67,82,88,178,5,64,8,184,2,0,177,9,64,27,178,5,64,8,186,1,0,0,9,1,0,89,89,89,185,64,0,0,128,136,85,185,64,0,2,0,99,184,4,0,136,85,90,88,179,12,0,13,1,27,179,12,0,13,1,89,89,89,66,66,66,66,66,45,44,69,177,2,78,43,35,176,79,43,32,176,64,81,88,33,75,81,88,176,2,37,69,177,1,78,43,96,89,27,35,75,81,88,176,3,37,69,32,100,138,99,176,64,83,88,177,2,78,43,96,27,33,89,27,33,89,89,68,45,44,32,176,0,80,32,88,35,101,27,35,89,177,20,20,138,112,69,177,16,16,67,75,138,67,81,90,88,176,64,27,176,79,43,89,35,177,97,6,38,96,43,138,88,176,5,67,139,89,35,88,101,89,35,16,58,45,44,176,3,37,73,99,35,70,96,176,79,43,35,176,4,37,176,4,37,73,176,3,37,99,86,32,96,176,98,96,43,176,3,37,32,16,70,138,70,96,176,32,99,97,58,45,44,176,0,22,177,2,3,37,177,1,4,37,1,62,0,62,177,1,2,6,12,176,10,35,101,66,176,11,35,66,177,2,3,37,177,1,4,37,1,63,0,63,177,1,2,6,12,176,6,35,101,66,176,7,35,66,176,1,22,177,0,2,67,84,88,69,35,69,32,24,105,138,99,35,98,32,32,176,64,80,88,103,27,102,89,97,176,32,99,176,64,35,97,176,4,35,66,27,177,4,0,66,33,33,89,24,1,45,44,32,69,177,0,78,43,68,45,44,75,81,177,64,79,43,80,91,88,32,69,177,1,78,43,32,138,138,68,32,177,64,4,38,97,99,97,177,1,78,43,68,33,27,35,33,138,69,177,1,78,43,32,138,35,68,68,89,45,44,75,81,177,64,79,43,80,91,88,69,32,138,176,64,97,99,96,27,35,33,69,89,177,1,78,43,68,45,44,35,69,32,138,69,35,97,32,100,176,64,81,176,4,37,32,176,0,83,35,176,64,81,90,90,177,64,79,43,84,90,88,138,12,100,35,100,35,83,88,177,64,64,138,97,32,99,97,27,32,99,89,27,138,89,99,177,2,78,43,96,68,45,44,1,45,44,0,45,44,5,177,11,10,67,35,67,101,10,45,44,177,10,11,67,35,67,11,2,45,44,176,2,37,99,102,176,2,37,184,32,0,98,96,35,98,45,44,176,2,37,99,176,32,96,102,176,2,37,184,32,0,98,96,35,98,45,44,176,2,37,99,103,176,2,37,184,32,0,98,96,35,98,45,44,176,2,37,99,102,176,32,96,176,2,37,184,32,0,98,96,35,98,45,44,35,74,177,2,78,43,45,44,35,74,177,1,78,43,45,44,35,138,74,35,69,100,176,2,37,100,176,2,37,97,100,176,3,67,82,88,33,32,100,89,177,2,78,43,35,176,0,80,88,101,89,45,44,35,138,74,35,69,100,176,2,37,100,176,2,37,97,100,176,3,67,82,88,33,32,100,89,177,1,78,43,35,176,0,80,88,101,89,45,44,32,176,3,37,74,177,2,78,43,138,16,59,45,44,32,176,3,37,74,177,1,78,43,138,16,59,45,44,176,3,37,176,3,37,138,176,103,43,138,16,59,45,44,176,3,37,176,3,37,138,176,104,43,138,16,59,45,44,176,3,37,70,176,3,37,70,96,176,4,37,46,176,4,37,176,4,37,176,4,38,32,176,0,80,88,33,176,106,27,176,108,89,43,176,3,37,70,176,3,37,70,96,97,176,128,98,32,138,32,16,35,58,35,32,16,35,58,45,44,176,3,37,71,176,3,37,71,96,176,5,37,71,176,128,99,97,176,2,37,176,6,37,73,99,35,176,5,37,74,176,128,99,32,88,98,27,33,89,176,4,38,70,96,138,70,138,70,96,176,32,99,97,45,44,176,4,38,176,4,37,176,4,37,176,4,38,176,110,43,32,138,32,16,35,58,35,32,16,35,58,45,44,35,32,176,1,84,88,33,176,2,37,177,2,78,43,176,128,80,32,96,89,32,96,96,32,176,1,81,88,33,33,27,32,176,5,81,88,33,32,102,97,176,64,35,97,177,0,3,37,80,176,3,37,176,3,37,80,90,88,32,176,3,37,97,138,83,88,33,176,0,89,27,33,89,27,176,7,84,88,32,102,97,101,35,33,27,33,33,176,0,89,89,89,177,2,78,43,45,44,176,2,37,176,4,37,74,176,0,83,88,176,0,27,138,138,35,138,176,1,89,176,4,37,70,32,102,97,32,176,5,38,176,6,38,73,176,5,38,176,5,38,176,112,43,35,97,101,176,32,96,32,102,97,176,32,97,101,45,44,176,2,37,70,32,138,32,176,0,80,88,33,177,2,78,43,27,69,35,33,89,97,101,176,2,37,16,59,45,44,176,4,38,32,184,2,0,98,32,184,2,0,99,138,35,97,32,176,93,96,43,176,5,37,17,138,18,138,32,57,138,88,186,0,93,16,0,0,4,38,99,86,96,43,35,33,32,16,32,70,32,177,2,78,43,35,97,27,35,33,32,138,32,16,73,177,2,78,43,89,59,45,44,186,0,93,16,0,0,9,37,99,86,96,43,176,5,37,176,5,37,176,5,38,176,109,43,177,93,7,37,96,43,176,5,37,176,5,37,176,5,37,176,5,37,176,111,43,186,0,93,16,0,0,8,38,99,86,96,43,32,176,0,82,88,176,80,43,176,5,37,176,5,37,176,7,37,176,7,37,176,5,37,176,113,43,176,2,23,56,176,0,82,176,2,37,176,1,82,90,88,176,4,37,176,6,37,73,176,3,37,176,5,37,73,96,32,176,64,82,88,33,27,176,0,82,88,32,176,2,84,88,176,4,37,176,4,37,176,7,37,176,7,37,73,176,2,23,56,27,176,4,37,176,4,37,176,4,37,176,6,37,73,176,2,23,56,89,89,89,89,89,33,33,33,33,33,45,44,186,0,93,16,0,0,11,37,99,86,96,43,176,7,37,176,7,37,176,6,37,176,6,37,176,12,37,176,12,37,176,9,37,176,8,37,176,110,43,176,4,23,56,176,7,37,176,7,37,176,7,38,176,109,43,176,4,37,176,4,37,176,4,38,176,109,43,176,80,43,176,6,37,176,6,37,176,3,37,176,113,43,176,5,37,176,5,37,176,3,37,176,2,23,56,32,176,6,37,176,6,37,176,5,37,176,113,43,96,176,6,37,176,6,37,176,4,37,101,176,2,23,56,176,2,37,176,2,37,96,32,176,64,83,88,33,176,64,97,35,176,64,97,35,27,184,255,192,80,88,176,64,96,35,176,64,96,35,89,89,176,8,37,176,8,37,176,4,38,176,2,23,56,176,5,37,176,5,37,138,176,2,23,56,32,176,0,82,88,176,6,37,176,8,37,73,176,3,37,176,5,37,73,96,32,176,64,82,88,33,27,176,0,82,88,176,6,37,176,6,37,176,6,37,176,6,37,176,11,37,176,11,37,73,176,4,23,56,176,6,37,176,6,37,176,6,37,176,6,37,176,10,37,176,10,37,176,7,37,176,113,43,176,4,23,56,176,4,37,176,4,37,176,5,37,176,7,37,176,5,37,176,113,43,176,2,23,56,27,176,4,37,176,4,37,185,255,192,0,2,23,56,89,89,89,33,33,33,33,33,33,33,33,45,44,176,4,37,176,3,37,135,176,3,37,176,3,37,138,32,176,0,80,88,33,176,101,27,176,104,89,43,100,176,4,37,176,4,37,6,176,4,37,176,4,37,73,32,32,99,176,3,37,32,99,81,177,0,3,37,84,91,88,33,33,35,33,7,27,32,99,176,2,37,32,99,97,32,176,83,43,138,99,176,5,37,176,5,37,135,176,4,37,176,4,38,74,176,0,80,88,101,89,176,4,38,32,1,70,35,0,70,176,5,38,32,1,70,35,0,70,176,0,22,0,176,0,35,72,1,176,0,35,72,0,32,176,1,35,72,176,2,35,72,1,32,176,1,35,72,176,2,35,72,35,178,2,0,1,8,35,56,178,2,0,1,9,35,56,177,2,1,7,176,1,22,89,45,44,35,16,13,12,138,99,35,138,99,96,100,185,64,0,4,0,99,80,88,176,0,56,27,60,89,45,44,176,6,37,176,9,37,176,9,37,176,7,38,176,118,43,35,176,0,84,88,5,27,4,89,176,4,37,176,6,38,176,119,43,176,5,37,176,5,38,176,5,37,176,5,38,176,118,43,176,0,84,88,5,27,4,89,176,119,43,45,44,176,7,37,176,10,37,176,10,37,176,8,38,176,118,43,138,176,0,84,88,5,27,4,89,176,5,37,176,7,38,176,119,43,176,6,37,176,6,38,176,6,37,176,6,38,176,118,43,8,176,119,43,45,44,176,7,37,176,10,37,176,10,37,176,8,38,176,118,43,138,138,8,176,4,37,176,6,38,176,119,43,176,5,37,176,5,38,176,5,37,176,5,38,176,118,43,176,0,84,88,5,27,4,89,176,119,43,45,44,176,8,37,176,11,37,176,11,37,176,9,38,176,118,43,176,4,38,176,4,38,8,176,5,37,176,7,38,176,119,43,176,6,37,176,6,38,176,6,37,176,6,38,176,118,43,8,176,119,43,45,44,3,176,3,37,176,3,37,74,176,4,37,176,3,37,74,2,176,5,37,176,5,38,74,176,5,38,176,5,38,74,176,4,38,99,138,138,99,97,45,44,177,93,14,37,96,43,176,12,38,17,176,5,38,18,176,10,37,57,176,7,37,57,176,10,37,176,10,37,176,9,37,176,124,43,176,0,80,176,11,37,176,8,37,176,10,37,176,124,43,176,0,80,84,88,176,7,37,176,11,37,135,176,4,37,176,4,37,11,176,10,37,16,176,9,37,193,176,2,37,176,2,37,11,176,7,37,16,176,6,37,193,27,176,7,37,176,11,37,176,11,37,185,255,255,0,118,43,176,4,37,176,4,37,11,176,7,37,176,10,37,176,119,43,176,10,37,176,8,37,176,8,37,185,255,255,0,118,43,176,2,37,176,2,37,11,176,10,37,176,7,37,176,119,43,89,176,10,37,70,176,10,37,70,96,176,8,37,70,176,8,37,70,96,176,6,37,176,6,37,11,176,12,37,176,12,37,176,12,38,32,176,0,80,88,33,176,106,27,176,108,89,43,176,4,37,176,4,37,11,176,9,37,176,9,37,176,9,38,32,176,0,80,88,33,176,106,27,176,108,89,43,35,176,10,37,70,176,10,37,70,96,97,176,32,99,35,176,8,37,70,176,8,37,70,96,97,176,32,99,177,1,12,37,84,88,4,27,5,89,176,10,38,32,16,176,3,37,58,176,6,38,176,6,38,11,176,7,38,32,16,138,58,177,1,7,38,84,88,4,27,5,89,176,5,38,32,16,176,2,37,58,138,138,11,35,32,16,35,58,45,44,35,176,1,84,88,185,0,0,64,0,27,185,64,0,0,0,89,138,176,1,84,88,185,0,0,64,0,27,185,64,0,0,0,89,176,125,43,45,44,138,138,8,13,138,176,1,84,88,185,0,0,64,0,27,185,64,0,0,0,89,176,125,43,45,44,8,176,1,84,88,185,0,0,64,0,27,185,64,0,0,0,89,13,176,125,43,45,44,176,4,38,176,4,38,8,13,176,4,38,176,4,38,8,13,176,125,43,45,44,32,1,70,35,0,70,176,10,67,176,11,67,138,99,35,98,97,45,44,176,9,43,176,6,37,46,176,5,37,125,197,176,6,37,176,5,37,176,4,37,32,176,0,80,88,33,176,106,27,176,108,89,43,176,5,37,176,4,37,176,3,37,32,176,0,80,88,33,176,106,27,176,108,89,43,24,176,8,37,176,7,37,176,6,37,176,10,37,176,111,43,176,6,37,176,5,37,176,4,38,32,176,0,80,88,33,176,102,27,176,104,89,43,176,5,37,176,4,37,176,4,38,32,176,0,80,88,33,176,102,27,176,104,89,43,84,88,125,176,4,37,16,176,3,37,197,176,2,37,16,176,1,37,197,176,5,38,33,176,5,38,33,27,176,6,38,176,4,37,176,3,37,176,8,38,176,111,43,89,177,0,2,67,84,88,125,176,2,37,176,130,43,176,5,37,176,130,43,32,32,105,97,176,4,67,1,35,97,176,96,96,32,105,97,176,32,97,32,176,8,38,176,8,38,138,176,2,23,56,138,138,97,32,105,97,97,176,2,23,56,27,33,33,33,33,89,24,45,44,75,82,177,1,2,67,83,90,88,35,16,32,1,60,0,60,27,33,33,89,45,44,35,176,2,37,176,2,37,83,88,32,176,4,37,88,60,27,57,89,176,1,96,184,255,233,28,89,33,33,33,45,44,176,2,37,71,176,2,37,71,84,138,32,32,16,17,176,1,96,138,32,18,176,1,97,176,133,43,45,44,176,4,37,71,176,2,37,71,84,35,32,18,176,1,97,35,32,176,6,38,32,32,16,17,176,1,96,176,6,38,176,133,43,138,138,176,133,43,45,44,176,2,67,84,88,12,2,138,75,83,176,4,38,75,81,90,88,10,56,27,10,33,33,89,27,33,33,33,33,89,45,44,176,152,43,88,12,2,138,75,83,176,4,38,75,81,90,88,10,56,27,10,33,33,89,27,33,33,33,33,89,45,44,32,176,2,67,84,176,1,35,176,95,35,120,33,177,0,2,67,176,86,35,121,33,176,2,67,35,176,32,32,92,88,33,33,33,177,0,71,28,89,138,138,32,138,32,138,35,184,16,0,99,86,88,184,16,0,99,86,88,33,33,33,177,1,44,28,89,27,33,89,176,128,98,32,92,88,33,33,33,177,0,27,28,89,35,176,128,98,32,92,88,33,33,33,177,0,12,28,89,138,176,1,97,184,255,179,28,35,33,45,44,32,176,2,67,84,176,1,35,176,123,35,120,33,177,0,2,67,176,114,35,121,33,177,0,2,67,138,176,32,32,92,88,33,33,33,176,99,28,89,138,138,32,138,32,138,35,184,16,0,99,86,88,184,16,0,99,86,88,176,4,38,176,1,91,176,4,38,176,4,38,176,4,38,27,33,33,33,33,177,54,0,35,28,89,27,33,89,176,4,38,35,176,128,98,32,92,88,138,92,138,90,35,33,35,33,176,29,28,89,138,176,128,98,32,92,88,33,33,35,33,176,14,28,89,176,4,38,176,1,97,184,255,152,28,35,33,45,0,0,1,0,0,0,16,0,2,0,1,0,20,0,6,0,8,119,103,104,116,0,200,0,0,1,144,0,0,2,188,0,0,0,0,1,0,1,1,0,0,0,200,0,0,1,2,0,0,1,44,0,0,1,3,0,0,1,94,0,0,1,4,0,0,1,144,0,0,1,5,0,0,2,88,0,0,1,6,0,0,2,188,0,0,0,1,0,3,0,9,0,10,0,50,0,15,255,255,0,10,0,4,0,128,0,0,4,48,5,140,0,3,0,7,0,11,0,15,0,29,64,16,13,12,106,13,4,5,106,4,9,1,2,114,8,0,8,114,0,43,50,43,50,47,43,47,43,48,49,33,17,51,17,33,53,33,21,33,17,51,17,3,53,33,21,3,92,212,252,80,3,176,252,80,212,212,3,176,5,140,250,116,190,190,5,140,250,116,4,206,190,190,0,2,0,45,0,0,4,131,5,140,0,7,0,11,0,29,64,15,8,9,106,8,8,0,5,4,1,2,114,4,0,8,114,0,43,50,43,18,57,18,57,47,43,48,49,51,1,33,1,35,1,35,1,3,53,33,21,45,1,154,1,34,1,154,210,254,176,18,254,176,20,2,208,5,140,250,116,4,224,251,32,1,90,190,190,0,255,255,0,45,0,0,4,131,7,38,2,38,0,1,0,0,1,6,6,63,0,0,0,11,182,2,12,1,1,1,160,86,0,43,52,0,255,255,0,45,0,0,4,131,7,68,2,38,0,1,0,0,1,6,6,67,0,0,0,11,182,2,12,1,1,1,150,86,0,43,52,0,255,255,0,45,0,0,4,131,8,104,2,38,0,1,0,0,0,38,6,67,0,0,1,7,6,63,0,0,1,66,0,21,64,14,3,26,15,1,1,42,86,2,12,1,1,1,150,86,0,43,52,43,52,0,255,255,0,45,254,92,4,131,7,68,2,38,0,1,0,0,0,38,6,41,0,0,1,6,6,67,0,0,0,24,64,12,3,24,1,1,1,150,86,2,18,4,1,1,185,255,104,0,86,0,43,52,43,52,255,255,0,45,0,0,4,131,8,104,2,38,0,1,0,0,0,38,6,67,0,0,1,7,6,62,0,0,1,66,0,21,64,14,3,26,15,1,1,42,86,2,12,1,1,1,150,86,0,43,52,43,52,0,255,255,0,45,0,0,4,131,8,178,2,38,0,1,0,0,0,38,6,67,0,0,1,7,6,71,0,0,1,66,0,23,180,3,26,22,1,0,184,255,247,183,86,2,12,1,1,1,150,86,0,43,52,43,52,0,255,255,0,45,0,0,4,131,8,164,2,38,0,1,0,0,0,38,6,67,0,0,1,7,6,69,0,10,1,66,0,21,64,14,3,26,15,1,0,28,86,2,12,1,1,1,150,86,0,43,52,43,52,0,255,255,0,45,0,0,4,131,7,48,2,38,0,1,0,0,1,6,6,66,0,0,0,11,182,2,12,1,1,1,160,86,0,43,52,0,255,255,0,45,0,0,4,131,7,48,2,38,0,1,0,0,1,6,6,65,0,0,0,11,182,2,16,1,1,1,160,86,0,43,52,0,255,255,0,45,0,0,5,42,8,30,2,38,0,1,0,0,0,38,6,65,0,0,1,7,6,63,1,95,0,248,0,21,64,14,3,20,17,1,0,43,86,2,16,1,1,1,160,86,0,43,52,43,52,0,255,255,0,45,254,92,4,131,7,48,2,38,0,1,0,0,0,38,6,41,0,0,1,6,6,65,0,0,0,24,64,12,3,28,1,1,1,160,86,2,18,4,1,1,185,255,104,0,86,0,43,52,43,52,255,255,0,45,0,0,4,131,8,30,2,38,0,1,0,0,0,38,6,65,0,0,1,7,6,62,1,95,0,248,0,21,64,14,3,20,17,1,0,43,86,2,16,1,1,1,160,86,0,43,52,43,52,0,255,255,0,45,0,0,4,162,8,104,2,38,0,1,0,0,0,38,6,65,0,0,1,7,6,71,1,95,0,248,0,23,180,3,20,17,1,0,184,255,248,183,86,2,16,1,1,1,160,86,0,43,52,43,52,0,255,255,0,45,0,0,4,131,8,170,2,38,0,1,0,0,0,38,6,65,0,0,1,7,6,69,0,10,1,72,0,21,64,14,3,20,13,1,1,54,86,2,16,1,1,1,160,86,0,43,52,43,52,0,255,255,0,45,0,0,4,131,7,56,2,38,0,1,0,0,1,6,6,60,0,0,0,13,183,3,2,12,1,1,1,160,86,0,43,52,52,0,255,255,0,45,254,92,4,131,5,140,2,38,0,1,0,0,1,6,6,41,0,0,0,14,180,2,18,4,1,1,185,255,104,0,86,0,43,52,255,255,0,45,0,0,4,131,7,38,2,38,0,1,0,0,1,6,6,62,0,0,0,11,182,2,12,1,1,1,160,86,0,43,52,0,255,255,0,45,0,0,4,131,7,112,2,38,0,1,0,0,1,6,6,71,0,0,0,11,182,2,12,1,1,1,109,86,0,43,52,0,255,255,0,45,0,0,4,131,6,232,2,38,0,1,0,0,1,6,6,70,0,0,0,11,182,2,12,1,1,1,160,86,0,43,52,0,0,3,0,45,254,88,4,131,5,140,0,19,0,27,0,31,0,47,64,26,9,6,28,29,106,28,28,24,26,20,21,2,114,24,6,6,20,0,14,106,20,0,105,20,8,114,0,43,43,43,17,51,17,51,43,17,57,17,57,47,43,17,51,48,49,1,34,38,53,52,54,55,55,23,23,34,6,21,20,51,50,55,7,6,6,1,1,33,1,35,1,35,1,3,53,33,21,3,250,115,125,88,79,17,170,20,106,118,116,35,47,18,23,47,252,31,1,154,1,34,1,154,210,254,176,18,254,176,20,2,208,254,88,111,101,81,111,20,50,18,32,82,76,98,11,170,4,5,1,168,5,140,250,116,4,224,251,32,1,90,190,190,255,255,0,45,0,0,4,131,7,108,2,38,0,1,0,0,1,6,6,68,0,0,0,13,183,3,2,12,1,1,1,68,86,0,43,52,52,0,255,255,0,45,0,0,4,131,8,22,0,39,6,63,0,0,0,240,3,6,0,22,0,0,0,14,180,0,0,22,0,0,185,255,176,0,86,0,43,52,255,255,0,45,0,0,4,131,7,98,2,38,0,1,0,0,1,6,6,69,10,0,0,11,182,2,12,1,1,1,146,86,0,43,52,0,0,6,0,42,0,0,4,76,5,140,0,5,0,9,0,13,0,17,0,21,0,25,0,53,64,31,23,22,105,23,4,106,23,1,7,6,106,18,19,106,7,18,7,18,0,15,1,2,114,10,11,106,10,14,0,8,114,0,43,50,50,43,43,50,17,57,57,47,47,43,43,17,51,43,43,48,49,51,1,33,21,35,1,53,53,33,21,7,53,33,21,33,17,51,17,3,53,33,21,1,53,33,21,42,1,144,1,19,134,254,161,1,214,102,1,244,254,12,180,180,1,184,254,72,1,244,5,140,172,251,32,246,165,165,246,180,180,5,140,250,116,2,109,180,180,2,107,180,180,0,255,255,0,42,0,0,4,76,7,38,2,38,0,25,0,0,1,6,6,63,40,0,0,11,182,6,26,1,1,1,160,86,0,43,52,0,0,4,0,160,0,0,4,110,5,140,0,17,0,21,0,25,0,43,0,45,64,26,36,35,106,36,19,26,10,22,3,9,27,105,23,9,9,18,19,2,114,0,1,106,0,18,8,114,0,43,50,43,43,17,57,47,57,43,23,57,17,51,43,48,49,33,53,33,50,54,53,52,38,35,33,39,33,50,22,21,20,6,35,33,17,51,17,3,53,33,21,37,53,51,50,54,53,52,38,35,35,39,33,50,22,21,20,6,35,1,90,1,44,132,146,152,140,254,230,24,1,100,216,236,224,206,253,224,200,82,1,160,254,164,240,113,125,131,121,222,24,1,0,216,236,224,206,190,121,109,112,123,91,186,170,186,204,5,140,250,116,2,186,98,98,56,91,101,94,92,98,190,187,173,147,159,0,1,0,96,255,236,4,125,5,160,0,21,0,27,64,15,8,9,0,5,12,106,5,3,114,0,17,106,0,9,114,0,43,43,43,43,18,57,57,48,49,5,32,17,16,0,33,50,22,23,7,38,38,35,34,2,17,16,33,50,55,23,6,2,246,253,106,1,78,1,48,147,218,50,148,45,139,81,193,233,1,226,145,141,46,174,20,2,220,1,91,1,125,93,86,147,68,74,254,234,255,0,253,210,60,176,68,0,255,255,0,96,255,236,4,125,7,38,2,38,0,28,0,0,1,6,6,63,105,0,0,11,182,1,22,5,1,1,140,86,0,43,52,0,255,255,0,96,255,236,4,125,7,48,2,38,0,28,0,0,1,6,6,66,105,0,0,11,182,1,22,5,1,1,140,86,0,43,52,0,255,255,0,96,254,32,4,125,5,160,2,38,0,28,0,0,1,6,6,43,0,0,0,11,182,1,31,0,0,0,15,86,0,43,52,0,255,255,0,96,255,236,4,125,7,48,2,38,0,28,0,0,1,6,6,65,105,0,0,11,182,1,26,5,1,1,140,86,0,43,52,0,255,255,0,96,255,236,4,125,7,56,2,38,0,28,0,0,1,6,6,61,105,0,0,11,182,1,22,5,1,1,140,86,0,43,52,0,0,2,0,160,0,0,4,130,5,140,0,15,0,19,0,27,64,15,0,1,106,0,16,10,9,106,10,17,2,114,16,8,114,0,43,43,50,43,17,51,43,48,49,33,53,51,50,54,53,16,2,35,35,39,51,32,17,16,33,33,17,51,17,1,90,158,219,221,221,219,154,24,178,2,138,253,118,254,168,200,190,250,250,1,15,1,13,190,253,38,253,78,5,140,250,116,0,3,0,42,0,0,4,130,5,140,0,3,0,19,0,23,0,39,64,22,4,5,106,4,20,0,1,106,0,0,20,21,14,13,106,14,21,2,114,20,8,114,0,43,43,50,43,17,18,57,47,43,17,51,43,48,49,19,53,33,21,1,53,51,50,54,53,16,2,35,35,39,51,32,17,16,33,33,17,51,17,42,2,127,254,177,158,219,221,221,219,154,24,178,2,138,253,118,254,168,200,2,100,190,190,253,156,190,250,250,1,15,1,13,190,253,38,253,78,5,140,250,116,0,255,255,0,160,0,0,4,130,7,48,2,38,0,34,0,0,1,6,6,66,206,0,0,11,182,2,20,10,1,1,160,86,0,43,52,0,255,255,0,42,0,0,4,130,5,140,2,6,0,35,0,0,0,4,0,160,0,0,4,76,5,140,0,3,0,7,0,11,0,15,0,39,64,22,4,5,106,4,0,8,9,106,8,8,0,1,13,12,106,13,1,2,114,0,8,114,0,43,43,50,43,17,18,57,47,43,17,51,43,48,49,51,17,51,17,35,53,33,21,1,53,33,21,1,53,33,21,160,200,200,3,172,252,84,2,248,253,8,3,172,5,140,250,116,190,190,2,104,190,190,2,102,190,190,255,255,0,160,0,0,4,76,7,38,2,38,0,38,0,0,1,6,6,63,30,0,0,11,182,4,16,1,1,1,160,86,0,43,52,0,255,255,0,160,0,0,4,76,7,68,2,38,0,38,0,0,1,6,6,67,30,0,0,11,182,4,16,1,1,1,150,86,0,43,52,0,255,255,0,160,0,0,4,76,7,48,2,38,0,38,0,0,1,6,6,66,30,0,0,11,182,4,16,1,1,1,160,86,0,43,52,0,255,255,0,160,0,0,4,76,7,48,2,38,0,38,0,0,1,6,6,65,30,0,0,11,182,4,20,1,1,1,160,86,0,43,52,0,255,255,0,160,0,0,5,72,8,30,2,38,0,38,0,0,0,38,6,65,30,0,1,7,6,63,1,125,0,248,0,21,64,14,5,24,21,1,0,43,86,4,20,1,1,1,160,86,0,43,52,43,52,0,255,255,0,160,254,92,4,76,7,48,2,38,0,38,0,0,0,38,6,41,30,0,1,6,6,65,30,0,0,24,64,12,5,32,1,1,1,160,86,4,22,4,1,1,185,255,104,0,86,0,43,52,43,52,255,255,0,160,0,0,4,98,8,30,2,38,0,38,0,0,0,38,6,65,30,0,1,7,6,62,1,125,0,248,0,21,64,14,5,24,21,1,0,43,86,4,20,1,1,1,160,86,0,43,52,43,52,0,255,255,0,160,0,0,4,192,8,104,2,38,0,38,0,0,0,38,6,65,30,0,1,7,6,71,1,125,0,248,0,23,180,5,24,21,1,0,184,255,248,183,86,4,20,1,1,1,160,86,0,43,52,43,52,0,255,255,0,160,0,0,4,76,8,170,2,38,0,38,0,0,0,38,6,65,30,0,1,7,6,69,0,40,1,72,0,21,64,14,5,24,17,1,1,54,86,4,20,1,1,1,160,86,0,43,52,43,52,0,255,255,0,160,0,0,4,76,7,56,2,38,0,38,0,0,1,6,6,60,30,0,0,13,183,5,4,16,1,1,1,160,86,0,43,52,52,0,255,255,0,160,0,0,4,76,7,56,2,38,0,38,0,0,1,6,6,61,30,0,0,11,182,4,16,1,1,1,160,86,0,43,52,0,255,255,0,160,254,92,4,76,5,140,2,38,0,38,0,0,1,6,6,41,30,0,0,14,180,4,22,4,1,1,185,255,104,0,86,0,43,52,255,255,0,160,0,0,4,76,7,38,2,38,0,38,0,0,1,6,6,62,30,0,0,11,182,4,16,1,1,1,160,86,0,43,52,0,255,255,0,160,0,0,4,76,7,112,2,38,0,38,0,0,1,6,6,71,30,0,0,11,182,4,16,1,1,1,109,86,0,43,52,0,255,255,0,160,0,0,4,76,6,232,2,38,0,38,0,0,1,6,6,70,30,0,0,11,182,4,16,1,1,1,160,86,0,43,52,0,0,5,0,160,254,88,4,76,5,140,0,20,0,24,0,28,0,32,0,36,0,53,64,31,30,30,22,7,26,9,21,30,29,106,34,33,106,34,22,2,114,25,26,106,25,21,0,15,106,21,0,105,21,8,114,0,43,43,43,17,51,43,43,50,43,43,17,51,18,57,18,57,47,48,49,1,34,38,53,52,54,55,53,55,23,34,6,21,20,22,51,50,55,7,6,6,1,17,51,17,35,53,33,21,1,53,33,21,1,53,33,21,3,198,115,125,59,55,240,20,106,118,61,55,35,47,18,23,47,252,198,200,200,3,172,252,84,2,248,253,8,3,172,254,88,111,101,74,100,18,50,2,32,88,80,42,46,11,170,4,5,1,168,5,140,250,116,190,190,2,104,190,190,2,102,190,190,0,0,1,0,128,255,236,4,101,5,160,0,46,0,39,64,22,41,38,15,13,106,4,3,15,15,0,30,21,106,30,9,114,0,7,106,0,3,114,0,43,43,43,43,18,57,47,57,57,43,57,57,48,49,1,50,22,23,7,38,38,35,34,6,21,20,22,23,7,35,34,6,21,20,22,51,50,54,54,55,23,14,2,35,34,38,38,53,52,54,54,55,7,53,23,38,38,53,52,54,2,178,163,220,52,148,44,148,94,162,141,208,242,22,150,148,182,177,156,82,118,113,72,46,64,120,143,99,168,245,133,118,191,109,17,17,193,169,238,5,160,93,86,147,70,72,114,84,106,104,8,188,123,114,118,133,10,25,23,174,26,30,12,102,187,125,117,160,83,2,54,117,56,27,176,127,155,192,0,255,255,0,150,0,0,4,46,5,140,2,6,2,52,0,0,255,255,0,160,0,0,4,76,7,98,2,38,0,38,0,0,1,6,6,69,40,0,0,11,182,4,16,1,1,1,146,86,0,43,52,0,0,1,0,64,255,236,4,48,5,140,0,29,0,37,64,21,16,21,19,18,106,15,22,14,23,106,14,0,19,3,114,0,7,106,0,9,114,0,43,43,43,18,57,43,57,57,43,50,57,48,49,5,32,39,55,30,2,51,50,54,53,52,38,35,35,39,1,7,33,53,33,21,1,53,22,4,21,20,6,6,2,34,254,216,186,144,59,103,110,71,147,166,209,191,135,20,2,10,1,253,91,3,85,254,50,252,1,20,128,236,20,171,141,46,56,26,128,113,128,139,124,1,243,61,186,201,254,76,43,4,218,195,130,193,106,0,0,3,0,160,0,0,4,76,5,140,0,3,0,7,0,11,0,31,64,17,4,5,106,4,4,0,1,9,8,106,9,1,2,114,0,8,114,0,43,43,50,43,17,18,57,47,43,48,49,51,17,51,17,3,53,33,21,1,53,33,21,160,200,200,2,248,253,8,3,172,5,140,250,116,2,44,190,190,2,162,190,190,0,3,0,96,255,236,4,126,5,160,0,25,0,29,0,33,0,39,64,22,27,30,31,106,10,6,30,30,0,6,13,106,6,3,114,26,0,19,106,0,9,114,0,43,43,57,43,43,18,57,47,18,57,43,50,48,49,5,32,0,17,16,0,33,50,22,23,7,38,38,35,34,2,21,16,18,51,50,54,55,23,6,6,55,17,51,17,1,53,33,21,2,220,254,194,254,194,1,74,1,42,149,224,53,149,46,139,80,202,224,224,222,95,145,46,78,42,211,63,190,254,32,1,218,20,1,110,1,110,1,91,1,125,93,85,148,68,74,254,233,255,254,233,254,233,37,13,174,13,47,60,2,158,253,98,1,224,190,190,0,255,255,0,96,255,236,4,126,7,68,2,38,0,60,0,0,1,6,6,67,95,0,0,11,182,3,34,6,1,1,130,86,0,43,52,0,255,255,0,96,255,236,4,126,7,48,2,38,0,60,0,0,1,6,6,66,95,0,0,11,182,3,34,6,1,1,140,86,0,43,52,0,255,255,0,96,255,236,4,126,7,48,2,38,0,60,0,0,1,6,6,65,95,0,0,11,182,3,38,6,1,1,140,86,0,43,52,0,255,255,0,96,254,32,4,126,5,160,2,38,0,60,0,0,1,6,6,42,115,0,0,14,180,3,35,0,1,1,185,255,136,0,86,0,43,52,255,255,0,96,255,236,4,126,7,56,2,38,0,60,0,0,1,6,6,61,95,0,0,11,182,3,34,6,1,1,140,86,0,43,52,0,0,3,0,140,0,0,4,36,5,140,0,3,0,7,0,11,0,31,64,16,0,4,1,5,8,9,106,8,8,4,5,2,114,4,8,114,0,43,43,17,57,47,43,17,51,17,51,48,49,33,17,51,17,33,17,51,17,3,53,33,21,3,92,200,252,104,200,158,3,73,5,140,250,116,5,140,250,116,2,100,190,190,0,4,0,62,0,0,4,114,5,140,0,3,0,7,0,11,0,15,0,35,64,20,0,1,106,13,0,105,12,13,106,12,12,8,5,9,2,114,4,8,8,114,0,43,50,43,50,17,57,47,43,43,43,48,49,19,53,33,21,1,17,51,17,33,17,51,17,3,53,33,21,62,4,52,254,234,200,252,104,200,158,3,73,3,234,190,190,252,22,5,140,250,116,5,140,250,116,2,100,190,190,0,255,255,0,140,0,0,4,36,7,48,2,38,0,66,0,0,1,6,6,66,0,0,0,11,182,3,12,1,1,1,160,86,0,43,52,0,255,255,0,140,0,0,4,36,7,48,2,38,0,66,0,0,1,6,6,65,0,0,0,11,182,3,16,1,1,1,160,86,0,43,52,0,0,3,0,168,0,0,4,8,5,140,0,3,0,7,0,11,0,29,64,16,0,4,1,9,4,5,106,9,8,106,9,2,114,4,8,114,0,43,43,43,43,17,51,17,51,48,49,33,17,51,17,33,53,33,21,1,53,33,21,1,243,200,253,237,3,96,252,160,3,96,5,140,250,116,190,190,4,206,190,190,0,5,0,45,0,0,4,48,5,140,0,15,0,19,0,23,0,27,0,31,0,47,64,27,11,29,29,25,20,16,17,106,3,16,105,3,3,0,25,24,106,21,25,2,114,0,7,106,0,8,114,0,43,43,43,50,43,18,57,47,43,43,51,17,51,17,51,48,49,33,34,38,53,51,20,22,51,50,54,53,17,51,17,20,6,1,53,33,21,33,17,51,17,1,53,33,21,51,53,33,21,2,112,205,203,200,107,106,122,121,200,223,252,220,2,32,254,144,190,254,146,2,12,111,1,30,188,188,98,98,137,139,3,196,252,60,229,227,2,5,190,190,3,135,252,121,2,201,190,190,190,190,255,255,0,168,0,0,4,8,7,38,2,38,0,70,0,0,1,6,6,63,0,0,0,11,182,3,12,1,1,1,160,86,0,43,52,0,255,255,0,168,0,0,4,8,7,68,2,38,0,70,0,0,1,6,6,67,0,0,0,11,182,3,12,1,1,1,150,86,0,43,52,0,255,255,0,168,0,0,4,8,7,48,2,38,0,70,0,0,1,6,6,65,0,0,0,11,182,3,16,1,1,1,160,86,0,43,52,0,255,255,0,168,0,0,4,8,7,56,2,38,0,70,0,0,1,6,6,60,0,0,0,13,183,4,3,12,1,1,1,160,86,0,43,52,52,0,255,255,0,168,0,0,4,8,7,56,2,38,0,70,0,0,1,6,6,61,0,0,0,11,182,3,12,1,1,1,160,86,0,43,52,0,255,255,0,168,254,92,4,8,5,140,2,38,0,70,0,0,1,6,6,41,0,0,0,14,180,3,18,0,1,1,185,255,104,0,86,0,43,52,255,255,0,168,0,0,4,8,7,38,2,38,0,70,0,0,1,6,6,62,0,0,0,11,182,3,12,1,1,1,160,86,0,43,52,0,255,255,0,168,0,0,4,8,7,112,2,38,0,70,0,0,1,6,6,71,0,0,0,11,182,3,12,1,1,1,109,86,0,43,52,0,255,255,0,168,0,0,4,8,6,232,2,38,0,70,0,0,1,6,6,70,0,0,0,11,182,3,12,9,1,1,160,86,0,43,52,0,0,4,0,168,254,88,4,8,5,140,0,20,0,24,0,28,0,32,0,41,64,24,30,29,106,22,30,2,114,7,25,26,106,6,25,0,15,106,25,0,105,21,9,25,8,114,0,43,50,50,43,43,18,57,43,57,43,50,43,48,49,1,34,38,53,52,54,55,53,55,23,34,6,21,20,22,51,50,55,7,6,6,3,17,51,17,33,53,33,21,1,53,33,21,2,124,115,125,59,55,240,20,106,118,61,55,35,47,18,23,47,157,200,253,237,3,96,252,160,3,96,254,88,111,101,74,100,18,50,2,32,88,80,42,46,11,170,4,5,1,168,5,140,250,116,190,190,4,206,190,190,0,255,255,0,168,0,0,4,8,7,98,2,38,0,70,0,0,1,6,6,69,10,0,0,11,182,3,12,9,1,1,146,86,0,43,52,0,0,2,0,96,255,236,4,48,5,140,0,15,0,19,0,29,64,16,4,4,0,17,16,106,12,17,2,114,0,7,106,0,9,114,0,43,43,43,50,43,18,57,47,48,49,5,34,2,53,51,20,22,51,50,54,53,17,51,17,20,0,1,53,33,21,2,72,234,254,200,153,140,136,147,200,254,254,254,198,1,210,20,1,5,235,150,166,165,151,3,176,252,80,236,254,252,4,226,190,190,255,255,0,96,255,236,4,107,7,48,2,38,0,83,0,0,1,7,6,65,0,180,0,0,0,11,182,2,24,11,1,1,160,86,0,43,52,0,0,3,0,160,0,0,4,148,5,140,0,11,0,15,0,19,0,33,64,17,0,1,106,18,17,13,0,0,12,6,13,2,114,16,12,8,114,0,43,50,43,50,18,57,47,18,57,57,43,48,49,1,55,50,54,54,18,53,51,20,2,2,4,1,17,51,17,33,1,55,1,1,30,18,154,224,145,71,206,110,210,254,208,254,192,200,2,58,254,152,180,1,166,1,196,198,129,219,1,19,147,189,254,164,254,239,158,254,60,5,140,250,116,2,180,102,252,230,255,255,0,160,254,32,4,148,5,140,2,38,0,85,0,0,1,6,6,42,40,0,0,14,180,3,21,12,1,1,185,255,116,0,86,0,43,52,0,2,0,160,0,0,4,76,5,140,0,3,0,7,0,21,64,11,4,5,106,4,0,1,2,114,0,8,114,0,43,43,17,51,43,48,49,51,17,51,17,35,53,33,21,160,200,200,3,172,5,140,250,116,190,190,255,255,0,129,0,0,4,76,7,38,2,38,0,87,0,0,1,7,6,63,254,172,0,0,0,11,182,2,8,1,1,1,160,86,0,43,52,0,0,3,0,160,0,0,4,76,6,32,0,3,0,7,0,11,0,27,64,16,1,0,106,5,1,105,5,2,114,8,9,106,8,4,8,114,0,43,50,43,43,43,43,48,49,1,19,51,3,1,17,51,17,35,53,33,21,2,250,50,212,90,252,250,200,200,3,172,4,164,1,124,254,132,251,92,5,140,250,116,190,190,255,255,0,160,254,32,4,76,5,140,2,38,0,87,0,0,1,6,6,42,20,0,0,14,180,2,9,4,1,1,185,255,116,0,86,0,43,52,255,255,0,160,0,0,4,76,5,140,2,38,0,87,0,0,1,7,2,174,0,200,1,64,0,14,180,2,14,1,2,0,185,255,14,0,86,0,43,52,0,3,0,58,0,0,4,76,5,140,0,3,0,7,0,11,0,33,64,19,0,1,106,2,3,106,0,2,11,9,2,114,11,4,5,106,4,8,114,0,43,43,51,43,17,57,57,43,43,48,49,19,53,1,21,1,53,33,21,33,17,51,17,58,3,38,253,164,3,72,252,184,200,1,199,185,1,164,185,252,149,190,190,5,140,250,116,0,0,4,0,128,0,0,4,48,5,140,0,7,0,11,0,19,0,23,0,41,64,22,5,9,14,106,17,12,1,106,0,12,12,20,21,15,3,9,2,114,20,8,8,114,0,43,50,43,50,50,50,17,57,47,51,43,50,43,50,48,49,1,55,51,19,51,21,35,3,1,17,51,17,19,3,35,53,51,19,51,23,1,17,51,17,2,54,30,12,162,142,58,162,253,204,192,188,162,58,142,162,8,20,1,4,192,2,68,230,2,98,252,253,180,253,188,5,140,250,116,2,68,2,76,252,253,158,230,253,188,5,140,250,116,0,3,0,148,0,0,4,28,5,140,0,7,0,11,0,15,0,27,64,13,2,5,8,13,4,9,2,114,12,7,8,8,114,0,43,50,50,43,50,50,18,57,57,48,49,33,1,35,17,51,1,51,17,33,17,51,17,33,17,51,17,3,32,254,72,92,132,1,184,50,253,26,192,2,8,192,4,56,1,84,251,200,254,172,5,140,250,116,5,140,250,116,255,255,0,148,0,0,4,28,7,38,2,38,0,94,0,0,1,6,6,63,0,0,0,11,182,3,16,9,1,1,160,86,0,43,52,0,255,255,0,148,0,0,4,28,7,48,2,38,0,94,0,0,1,6,6,66,0,0,0,11,182,3,16,13,1,1,160,86,0,43,52,0,255,255,0,148,254,32,4,28,5,140,2,38,0,94,0,0,1,6,6,42,0,0,0,14,180,3,17,8,1,1,185,255,116,0,86,0,43,52,0,4,0,148,254,32,4,28,5,140,0,12,0,20,0,24,0,28,0,47,64,27,6,21,18,26,17,22,15,106,22,2,114,25,13,13,21,0,1,106,21,0,105,21,18,105,21,8,114,0,43,43,43,43,17,51,17,51,43,43,51,51,17,18,57,48,49,1,39,55,54,54,53,17,51,17,20,6,6,7,19,1,35,17,51,1,51,17,33,17,51,17,33,17,51,17,2,81,10,120,78,78,193,77,147,105,77,254,72,92,132,1,184,50,253,26,192,2,8,192,254,32,168,18,12,100,94,1,16,254,232,108,160,94,10,1,212,4,56,1,84,251,200,254,172,5,140,250,116,5,140,250,116,0,0,4,255,128,254,32,4,28,5,140,0,12,0,20,0,24,0,28,0,37,64,22,7,28,18,105,0,1,106,28,0,105,24,13,28,8,114,22,15,106,22,26,2,114,0,43,50,43,43,50,50,43,43,43,57,48,49,3,39,55,54,54,53,17,51,17,20,6,6,7,1,1,35,17,51,1,51,17,33,17,51,17,33,17,51,17,118,10,120,78,78,193,77,147,105,3,20,254,72,92,132,1,184,50,253,26,192,2,8,192,254,32,168,18,9,103,94,1,16,254,232,110,161,93,8,1,212,4,56,1,84,251,200,254,172,5,140,250,116,5,140,250,116,0,255,255,0,148,0,0,4,28,7,98,2,38,0,94,0,0,1,6,6,69,10,0,0,11,182,3,16,9,1,1,146,86,0,43,52,0,0,2,0,76,255,236,4,100,5,160,0,7,0,15,0,21,64,12,0,8,106,4,12,106,4,3,114,0,9,114,0,43,43,43,43,48,49,5,32,17,16,33,32,17,16,37,32,17,16,33,32,17,16,2,88,253,244,2,12,2,12,253,244,1,58,254,198,254,198,20,2,208,2,228,253,28,253,48,184,2,24,2,44,253,212,253,232,0,255,255,0,76,255,236,4,100,7,38,2,38,0,101,0,0,1,6,6,63,0,0,0,11,182,2,16,4,1,1,140,86,0,43,52,0,255,255,0,76,255,236,4,100,7,68,2,38,0,101,0,0,1,6,6,67,0,0,0,11,182,2,16,4,1,1,130,86,0,43,52,0,255,255,0,76,255,236,4,100,7,48,2,38,0,101,0,0,1,6,6,65,0,0,0,11,182,2,20,4,1,1,140,86,0,43,52,0,255,255,0,76,255,236,5,42,8,30,2,38,0,101,0,0,0,38,6,65,0,0,1,7,6,63,1,95,0,248,0,21,64,14,3,24,21,1,0,43,86,2,20,4,1,1,140,86,0,43,52,43,52,0,255,255,0,76,254,92,4,100,7,48,2,38,0,101,0,0,0,38,6,41,0,0,1,6,6,65,0,0,0,24,64,12,3,32,4,1,1,140,86,2,22,0,1,1,185,255,124,0,86,0,43,52,43,52,255,255,0,76,255,236,4,100,8,30,2,38,0,101,0,0,0,38,6,65,0,0,1,7,6,62,1,95,0,248,0,21,64,14,3,24,21,1,0,43,86,2,20,4,1,1,140,86,0,43,52,43,52,0,255,255,0,76,255,236,4,162,8,104,2,38,0,101,0,0,0,38,6,65,0,0,1,7,6,71,1,95,0,248,0,23,180,3,24,21,1,0,184,255,248,183,86,2,20,4,1,1,140,86,0,43,52,43,52,0,255,255,0,76,255,236,4,100,8,170,2,38,0,101,0,0,0,38,6,65,0,0,1,7,6,69,0,10,1,72,0,21,64,14,3,24,17,1,1,54,86,2,20,4,1,1,140,86,0,43,52,43,52,0,255,255,0,76,255,236,4,100,7,56,2,38,0,101,0,0,1,6,6,60,0,0,0,13,183,3,2,16,4,1,1,140,86,0,43,52,52,0,255,255,0,76,254,92,4,100,5,160,2,38,0,101,0,0,1,6,6,41,0,0,0,14,180,2,22,0,1,1,185,255,124,0,86,0,43,52,255,255,0,76,255,236,4,100,7,38,2,38,0,101,0,0,1,6,6,62,0,0,0,11,182,2,16,4,1,1,140,86,0,43,52,0,255,255,0,76,255,236,4,100,7,112,2,38,0,101,0,0,1,6,6,71,0,0,0,11,182,2,16,4,1,1,89,86,0,43,52,0,255,255,0,76,255,236,4,224,6,117,2,38,0,101,0,0,1,7,6,72,1,144,0,0,0,11,182,2,21,4,0,0,213,86,0,43,52,0,255,255,0,76,255,236,4,224,7,38,2,38,0,114,0,0,1,6,6,63,0,0,0,11,182,3,26,4,1,1,140,86,0,43,52,0,255,255,0,76,254,92,4,224,6,117,2,38,0,114,0,0,1,6,6,41,0,0,0,14,180,3,32,0,1,1,185,255,124,0,86,0,43,52,255,255,0,76,255,236,4,224,7,38,2,38,0,114,0,0,1,6,6,62,0,0,0,11,182,3,26,4,1,1,140,86,0,43,52,0,255,255,0,76,255,236,4,224,7,112,2,38,0,114,0,0,1,6,6,71,0,0,0,11,182,3,26,4,1,1,89,86,0,43,52,0,255,255,0,76,255,236,4,224,7,98,2,38,0,114,0,0,1,6,6,69,10,0,0,11,182,3,26,4,1,1,126,86,0,43,52,0,255,255,0,76,255,236,4,100,7,38,2,38,0,101,0,0,1,6,6,64,0,0,0,13,183,3,2,16,4,1,1,140,86,0,43,52,52,0,255,255,0,76,255,236,4,100,6,232,2,38,0,101,0,0,1,6,6,70,0,0,0,11,182,2,16,4,1,1,140,86,0,43,52,0,0,3,0,76,254,88,4,100,5,160,0,20,0,28,0,36,0,39,64,24,25,33,106,25,3,114,7,6,8,3,21,29,105,5,21,0,15,106,21,0,105,21,9,114,0,43,43,43,18,57,43,23,57,43,43,48,49,1,34,38,53,52,55,53,55,23,14,2,21,20,22,51,50,55,7,6,6,3,32,17,16,33,32,17,16,37,32,17,16,33,32,17,16,2,146,115,125,114,210,44,49,101,68,46,70,37,45,18,25,45,78,253,244,2,12,2,12,253,244,1,58,254,198,254,198,254,88,101,91,154,38,70,10,32,17,38,65,56,26,62,11,170,4,5,1,148,2,208,2,228,253,28,253,48,184,2,24,2,44,253,212,253,232,0,0,1,0,17,255,236,4,80,5,160,0,24,0,27,64,15,4,3,0,19,14,106,19,3,114,0,8,106,0,9,114,0,43,43,43,43,18,57,57,48,49,5,34,38,39,55,30,2,51,50,18,53,16,2,35,34,7,39,54,51,32,0,17,16,0,1,220,135,235,89,144,59,99,103,65,194,216,240,236,148,141,46,174,195,1,64,1,73,254,198,20,86,85,141,49,56,23,1,32,253,1,7,1,32,60,176,68,254,138,254,159,254,169,254,122,0,0,3,0,66,255,122,4,100,5,252,0,3,0,11,0,19,0,35,64,19,3,1,0,2,8,8,16,106,8,3,114,0,4,4,12,106,4,9,114,0,43,43,16,206,43,43,16,206,17,57,57,48,49,23,39,1,23,1,32,17,16,33,32,17,16,37,32,17,16,33,32,17,16,201,135,3,145,135,253,254,253,244,2,12,2,12,253,244,1,58,254,198,254,198,134,75,6,55,75,250,59,2,208,2,228,253,28,253,48,184,2,24,2,44,253,212,253,232,255,255,0,66,255,122,4,100,7,38,2,38,0,124,0,0,1,6,6,63,0,0,0,11,182,3,20,8,1,1,140,86,0,43,52,0,255,255,0,76,255,236,4,100,7,98,2,38,0,101,0,0,1,6,6,69,10,0,0,11,182,2,16,4,1,1,126,86,0,43,52,0,0,5,0,76,255,236,4,76,5,160,0,14,0,18,0,29,0,33,0,37,0,51,64,32,35,34,106,10,35,2,114,15,16,106,12,15,8,114,30,31,106,30,30,0,6,24,106,6,3,114,0,19,106,0,9,114,0,43,43,43,43,18,57,47,43,43,50,43,43,50,43,48,49,5,34,2,17,16,18,51,50,22,51,51,17,35,34,6,55,53,33,21,37,50,55,17,38,35,34,2,17,16,18,1,53,33,21,1,53,33,21,2,8,211,233,233,211,54,80,46,80,80,35,89,74,1,194,253,198,40,30,35,45,112,122,128,1,0,1,114,254,112,1,204,20,1,121,1,87,1,97,1,131,20,250,116,20,20,180,180,164,6,4,40,22,254,221,254,247,255,0,254,232,1,201,180,180,2,107,180,180,0,0,2,0,160,0,0,4,96,5,140,0,17,0,21,0,31,64,17,0,1,106,0,0,18,19,10,9,106,10,19,2,114,18,8,114,0,43,43,50,43,17,18,57,47,43,48,49,1,53,51,50,54,53,52,38,35,35,53,51,32,0,21,20,0,33,1,17,51,17,1,80,242,158,174,174,158,238,238,1,3,1,27,254,229,254,253,254,94,200,1,184,190,158,142,143,157,190,254,255,233,234,255,0,254,72,5,140,250,116,0,0,2,0,160,0,0,4,96,5,140,0,17,0,21,0,35,64,19,0,1,106,0,0,18,19,10,9,106,10,10,18,19,2,114,18,8,114,0,43,43,17,57,47,43,17,18,57,47,43,48,49,37,53,51,50,54,53,52,38,35,35,53,51,32,0,21,20,0,33,5,17,51,17,1,80,242,158,174,174,158,238,238,1,2,1,28,254,228,254,254,254,94,200,220,190,158,142,144,156,190,255,0,234,234,255,0,220,5,140,250,116,0,0,3,0,76,254,52,4,100,5,160,0,11,0,19,0,27,0,31,64,19,16,24,106,16,3,114,5,12,20,105,0,9,106,12,0,105,12,9,114,0,43,43,43,43,57,43,43,48,49,1,34,38,53,53,51,21,20,22,51,51,7,1,32,17,16,33,32,17,16,37,32,17,16,33,32,17,16,3,162,216,218,198,118,118,102,20,254,100,253,244,2,12,2,12,253,244,1,58,254,198,254,198,254,52,220,220,82,84,129,129,180,1,184,2,208,2,228,253,28,253,48,184,2,24,2,44,253,212,253,232,0,3,0,140,0,0,4,118,5,140,0,17,0,21,0,25,0,35,64,19,10,9,106,10,19,23,0,1,106,0,0,18,19,2,114,22,18,8,114,0,43,50,43,17,57,47,43,57,17,51,43,48,49,1,53,33,50,54,53,52,38,35,33,39,33,50,22,21,20,6,35,1,17,51,17,33,1,51,1,1,70,1,46,119,133,133,119,254,214,24,1,66,221,241,241,221,254,24,200,2,50,254,194,220,1,82,2,28,190,126,114,125,135,190,224,206,214,236,253,228,5,140,250,116,2,156,253,100,255,255,0,140,0,0,4,118,7,38,2,38,0,131,0,0,1,6,6,63,216,0,0,11,182,3,26,10,1,1,160,86,0,43,52,0,255,255,0,140,0,0,4,118,7,48,2,38,0,131,0,0,1,6,6,66,216,0,0,11,182,3,26,10,1,1,160,86,0,43,52,0,255,255,0,140,254,32,4,118,5,140,2,38,0,131,0,0,1,6,6,42,10,0,0,14,180,3,27,18,1,1,185,255,116,0,86,0,43,52,0,1,0,129,255,236,4,37,5,160,0,39,0,36,64,24,10,37,13,14,34,33,17,30,24,23,10,0,20,27,106,20,3,114,0,7,106,0,9,114,0,43,43,43,43,18,23,57,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,39,39,38,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,23,23,22,22,21,20,6,2,39,121,211,90,26,110,205,97,140,136,67,63,246,145,155,224,205,143,220,102,140,88,153,83,103,113,74,72,208,158,164,251,20,39,39,202,47,49,98,100,66,92,28,112,66,186,138,186,204,84,95,142,72,65,99,97,69,87,34,98,74,186,146,193,193,255,255,0,129,255,236,4,37,7,38,2,38,0,135,0,0,1,6,6,63,20,0,0,11,182,1,40,20,1,1,140,86,0,43,52,0,255,255,0,129,255,236,4,37,7,48,2,38,0,135,0,0,1,6,6,66,20,0,0,11,182,1,40,20,1,1,140,86,0,43,52,0,255,255,0,129,254,32,4,37,5,160,2,38,0,135,0,0,1,6,6,43,191,0,0,11,182,1,49,0,0,0,15,86,0,43,52,0,255,255,0,129,255,236,4,37,7,48,2,38,0,135,0,0,1,6,6,65,20,0,0,11,182,1,44,20,1,1,140,86,0,43,52,0,255,255,0,129,254,32,4,37,5,160,2,38,0,135,0,0,1,6,6,42,10,0,0,14,180,1,41,0,1,1,185,255,136,0,86,0,43,52,0,2,0,140,255,236,4,133,5,160,0,15,0,38,0,40,64,25,32,33,29,106,33,8,31,7,4,4,16,22,106,16,9,114,15,8,114,4,11,106,4,3,114,0,43,43,43,43,43,18,23,57,43,57,48,49,51,17,16,54,33,50,22,23,7,38,38,35,38,6,21,17,5,34,39,55,22,22,51,50,54,53,52,38,39,39,1,51,1,39,22,22,21,20,4,140,245,1,15,128,223,97,171,70,137,70,166,150,1,65,120,82,26,45,101,46,127,139,116,106,175,1,77,226,254,218,28,179,195,254,252,3,162,1,13,241,84,86,140,60,60,1,153,168,252,94,20,23,187,8,10,136,124,96,142,34,50,2,4,254,89,29,31,225,174,222,244,0,0,2,0,76,255,236,4,100,5,160,0,22,0,26,0,31,64,18,0,10,106,23,24,106,23,23,0,19,14,106,19,3,114,0,9,114,0,43,43,43,18,57,47,43,43,48,49,5,32,17,52,54,55,23,6,21,16,33,32,17,16,33,34,7,39,54,51,32,17,16,1,53,33,21,2,88,253,244,2,2,209,3,1,58,1,58,254,98,163,141,28,156,176,2,112,251,236,3,173,20,2,188,31,59,28,16,49,53,253,252,2,24,2,44,39,177,46,253,28,253,48,2,116,190,190,0,0,2,0,80,0,0,4,96,5,140,0,3,0,7,0,19,64,10,2,5,4,106,5,2,114,0,8,114,0,43,43,43,51,48,49,33,17,51,17,1,53,33,21,1,244,200,253,148,4,16,5,140,250,116,4,206,190,190,0,3,0,80,0,0,4,96,5,140,0,3,0,7,0,11,0,31,64,17,6,9,0,1,106,0,0,4,9,8,106,9,2,114,4,8,114,0,43,43,43,18,57,47,43,17,51,48,49,19,53,33,21,1,17,51,17,1,53,33,21,192,3,48,254,4,200,253,148,4,16,2,75,190,190,253,181,5,140,250,116,4,206,190,190,0,255,255,0,80,0,0,4,96,7,48,2,38,0,143,0,0,1,6,6,66,0,0,0,11,182,2,8,1,1,1,160,86,0,43,52,0,255,255,0,80,254,32,4,96,5,140,2,38,0,143,0,0,1,6,6,43,176,0,0,14,180,2,17,0,1,0,185,255,251,0,86,0,43,52,255,255,0,80,254,32,4,96,5,140,2,38,0,143,0,0,1,6,6,42,251,0,0,14,180,2,9,0,1,1,185,255,116,0,86,0,43,52,0,1,0,140,255,236,4,36,5,140,0,15,0,21,64,11,12,3,0,8,106,3,2,114,0,9,114,0,43,43,43,17,51,48,49,5,32,17,17,51,17,20,22,51,32,17,17,51,17,20,6,2,84,254,56,200,125,135,1,4,200,236,20,1,220,3,196,252,60,142,144,1,30,3,196,252,60,238,238,0,255,255,0,140,255,236,4,36,7,38,2,38,0,148,0,0,1,6,6,63,0,0,0,11,182,1,16,3,1,1,160,86,0,43,52,0,255,255,0,140,255,236,4,36,7,68,2,38,0,148,0,0,1,6,6,67,0,0,0,11,182,1,16,11,1,1,150,86,0,43,52,0,255,255,0,140,255,236,4,36,7,48,2,38,0,148,0,0,1,6,6,65,0,0,0,11,182,1,20,11,1,1,160,86,0,43,52,0,255,255,0,140,255,236,4,36,7,56,2,38,0,148,0,0,1,6,6,60,0,0,0,13,183,2,1,16,11,1,1,160,86,0,43,52,52,0,255,255,0,140,254,92,4,36,5,140,2,38,0,148,0,0,1,6,6,41,0,0,0,14,180,1,22,0,1,1,185,255,124,0,86,0,43,52,255,255,0,140,255,236,4,36,7,38,2,38,0,148,0,0,1,6,6,62,0,0,0,11,182,1,16,3,1,1,160,86,0,43,52,0,255,255,0,140,255,236,4,36,7,112,2,38,0,148,0,0,1,6,6,71,0,0,0,11,182,1,16,11,1,1,109,86,0,43,52,0,0,2,0,140,255,236,5,18,6,117,0,9,0,25,0,29,64,17,1,22,0,105,22,13,5,105,13,2,114,10,18,106,10,9,114,0,43,43,43,43,51,43,51,48,49,1,39,55,54,54,53,51,20,6,7,1,32,17,17,51,17,20,22,51,32,17,17,51,17,20,6,3,143,51,61,93,92,192,163,164,254,137,254,56,200,125,135,1,4,200,236,4,231,165,10,15,111,97,169,192,27,250,251,1,220,3,196,252,60,142,144,1,30,3,196,252,60,238,238,0,255,255,0,140,255,236,5,18,7,38,2,38,0,156,0,0,1,6,6,63,0,0,0,11,182,2,26,13,1,1,160,86,0,43,52,0,255,255,0,140,254,92,5,18,6,117,2,38,0,156,0,0,1,6,6,41,0,0,0,14,180,2,32,10,1,1,185,255,124,0,86,0,43,52,255,255,0,140,255,236,5,18,7,38,2,38,0,156,0,0,1,6,6,62,0,0,0,11,182,2,26,13,1,1,160,86,0,43,52,0,255,255,0,140,255,236,5,18,7,112,2,38,0,156,0,0,1,6,6,71,0,0,0,11,182,2,26,21,1,1,109,86,0,43,52,0,255,255,0,140,255,236,5,18,7,98,2,38,0,156,0,0,1,6,6,69,10,0,0,11,182,2,26,13,1,1,146,86,0,43,52,0,255,255,0,140,255,236,4,77,7,38,2,38,0,148,0,0,1,6,6,64,0,0,0,13,183,2,1,16,11,1,1,160,86,0,43,52,52,0,255,255,0,140,255,236,4,36,6,232,2,38,0,148,0,0,1,6,6,70,0,0,0,11,182,1,16,3,1,1,160,86,0,43,52,0,0,2,0,140,254,88,4,36,5,140,0,20,0,36,0,37,64,22,33,24,2,114,7,6,8,3,21,29,105,5,21,0,15,106,21,0,105,21,9,114,0,43,43,43,18,57,43,23,57,43,50,48,49,1,34,38,53,52,55,53,55,23,14,2,21,20,22,51,50,55,7,6,6,3,32,17,17,51,17,20,22,51,32,17,17,51,17,20,6,2,156,115,125,114,220,44,52,105,71,46,70,37,45,18,25,45,92,254,56,200,125,135,1,4,200,236,254,88,101,91,154,38,70,10,27,17,39,67,58,26,62,11,170,4,5,1,148,1,220,3,196,252,60,142,144,1,30,3,196,252,60,238,238,0,255,255,0,140,255,236,4,36,7,108,2,38,0,148,0,0,1,6,6,68,0,0,0,13,183,2,1,16,11,1,1,68,86,0,43,52,52,0,255,255,0,140,255,236,4,36,7,98,2,38,0,148,0,0,1,6,6,69,10,0,0,11,182,1,16,3,1,1,146,86,0,43,52,0,0,1,0,44,0,0,4,130,5,140,0,7,0,19,64,9,3,0,6,1,2,114,0,8,114,0,43,43,50,18,57,48,49,33,1,51,1,51,1,51,1,1,188,254,112,214,1,76,18,1,76,214,254,112,5,140,251,30,4,226,250,116,255,255,0,45,0,0,4,131,5,140,2,6,1,207,0,0,0,2,0,20,0,0,4,156,5,140,0,9,0,19,0,37,64,20,5,12,13,106,8,12,12,10,17,1,2,114,10,15,0,3,106,0,8,114,0,43,43,50,51,43,50,17,57,17,51,43,50,48,49,51,3,51,19,51,19,51,7,35,3,51,3,35,39,51,19,51,19,51,3,180,160,210,120,20,131,200,67,40,105,222,105,40,65,200,129,20,120,210,160,5,140,251,20,3,132,198,252,162,3,94,198,252,124,4,236,250,116,0,255,255,0,20,0,0,4,156,7,38,2,38,0,169,0,0,1,6,6,63,0,0,0,11,182,2,20,1,1,1,160,86,0,43,52,0,255,255,0,20,0,0,4,156,7,48,2,38,0,169,0,0,1,6,6,65,0,0,0,11,182,2,24,17,1,1,160,86,0,43,52,0,255,255,0,20,0,0,4,156,7,56,2,38,0,169,0,0,1,6,6,60,0,0,0,13,183,3,2,20,17,1,1,160,86,0,43,52,52,0,255,255,0,20,0,0,4,156,7,38,2,38,0,169,0,0,1,6,6,62,0,0,0,11,182,2,20,17,1,1,160,86,0,43,52,0,0,2,0,66,0,0,4,112,5,140,0,5,0,11,0,28,64,15,1,10,4,7,4,2,5,5,6,8,114,9,2,2,114,0,43,50,43,50,17,18,23,57,48,49,33,1,1,51,1,1,33,1,1,51,1,1,3,138,254,148,254,36,230,1,122,1,206,251,210,1,206,1,122,230,254,36,254,148,2,124,3,16,253,94,253,22,2,234,2,162,252,240,253,132,0,2,0,25,0,0,4,151,5,140,0,7,0,11,0,23,64,12,0,9,3,3,1,8,8,114,6,1,2,114,0,43,50,43,17,23,57,48,49,1,1,51,1,51,1,51,1,3,17,51,17,2,3,254,22,220,1,90,18,1,90,220,254,22,185,200,1,218,3,178,253,58,2,198,252,78,254,38,2,188,253,68,255,255,0,25,0,0,4,151,7,38,2,38,0,175,0,0,1,6,6,63,0,0,0,11,182,2,12,1,1,1,160,86,0,43,52,0,255,255,0,25,0,0,4,151,7,48,2,38,0,175,0,0,1,6,6,65,0,0,0,11,182,2,16,5,1,1,160,86,0,43,52,0,255,255,0,25,0,0,4,151,7,56,2,38,0,175,0,0,1,6,6,60,0,0,0,13,183,3,2,12,5,1,1,160,86,0,43,52,52,0,255,255,0,25,254,92,4,151,5,140,2,38,0,175,0,0,1,6,6,41,0,0,0,14,180,2,18,8,1,1,185,255,104,0,86,0,43,52,255,255,0,25,0,0,4,151,7,38,2,38,0,175,0,0,1,6,6,62,0,0,0,11,182,2,12,5,1,1,160,86,0,43,52,0,255,255,0,25,0,0,4,151,7,112,2,38,0,175,0,0,1,6,6,71,0,0,0,11,182,2,12,5,1,1,109,86,0,43,52,0,255,255,0,25,0,0,4,151,6,232,2,38,0,175,0,0,1,6,6,70,0,0,0,11,182,2,12,1,1,1,160,86,0,43,52,0,255,255,0,25,0,0,4,151,7,98,2,38,0,175,0,0,1,6,6,69,10,0,0,11,182,2,12,1,1,1,146,86,0,43,52,0,0,3,0,150,0,0,4,46,5,140,0,3,0,7,0,11,0,29,64,16,2,3,9,8,106,9,2,114,0,1,4,6,106,4,8,114,0,43,43,50,57,43,43,50,57,48,49,37,39,1,23,1,53,33,21,1,53,33,21,1,46,152,2,236,152,252,124,3,152,252,104,3,132,68,122,4,148,132,251,50,190,190,4,206,190,190,255,255,0,150,0,0,4,46,7,38,2,38,0,184,0,0,1,6,6,63,0,0,0,11,182,3,12,9,1,1,160,86,0,43,52,0,255,255,0,150,0,0,4,46,7,48,2,38,0,184,0,0,1,6,6,66,0,0,0,11,182,3,12,9,1,1,160,86,0,43,52,0,255,255,0,150,0,0,4,46,7,56,2,38,0,184,0,0,1,6,6,61,0,0,0,11,182,3,12,9,1,1,160,86,0,43,52,0,255,255,0,45,0,0,5,51,7,38,2,38,0,71,0,0,0,39,6,63,254,232,0,0,1,7,6,63,1,104,0,0,0,21,64,14,6,36,11,1,1,160,86,5,32,21,1,1,160,86,0,43,52,43,52,0,255,255,0,96,255,236,4,125,7,48,2,38,0,28,0,0,1,6,6,74,105,0,0,11,182,1,22,5,1,1,100,86,0,43,52,0,255,255,0,148,0,0,4,28,7,48,2,38,0,94,0,0,1,6,6,74,0,0,0,11,182,3,16,13,1,1,120,86,0,43,52,0,255,255,0,76,255,236,4,100,7,48,2,38,0,101,0,0,1,6,6,74,0,0,0,11,182,2,16,4,1,1,100,86,0,43,52,0,255,255,0,129,255,236,4,37,7,48,2,38,0,135,0,0,1,6,6,74,20,0,0,11,182,1,40,20,1,1,100,86,0,43,52,0,255,255,0,150,0,0,4,46,7,48,2,38,0,184,0,0,1,6,6,74,0,0,0,11,182,3,12,9,1,1,120,86,0,43,52,0,0,3,0,168,0,0,4,8,4,36,0,3,0,7,0,11,0,25,64,14,9,8,106,1,9,6,114,4,5,106,0,4,10,114,0,43,50,43,43,50,43,48,49,33,17,51,17,33,53,33,21,1,53,33,21,1,244,200,253,236,3,96,252,160,3,96,4,36,251,220,190,190,3,102,190,190,0,2,0,96,255,236,4,134,4,46,0,15,0,45,0,42,64,27,22,29,106,41,42,1,39,22,5,8,16,34,106,16,11,114,15,13,106,15,10,8,7,106,8,7,114,0,43,43,63,43,43,43,18,23,57,43,48,49,5,3,39,17,52,38,39,39,55,23,4,22,21,17,23,21,5,34,38,53,52,54,51,50,22,23,7,38,38,35,32,21,20,22,51,50,54,54,53,53,19,35,55,20,6,6,3,50,14,28,149,147,254,20,214,1,7,255,180,253,54,166,182,251,229,95,149,58,44,67,128,67,254,236,95,87,99,133,66,62,84,34,85,154,10,1,58,88,1,18,106,99,4,7,188,3,4,219,210,254,70,22,170,20,160,146,168,180,23,23,144,15,5,158,74,82,68,106,56,116,254,240,32,92,123,61,255,255,0,96,255,236,4,134,6,92,2,38,0,195,0,0,1,6,6,30,10,0,0,11,182,2,46,8,1,1,178,86,0,43,52,0,255,255,0,96,255,236,4,134,6,67,2,38,0,195,0,0,1,6,6,34,236,0,0,11,182,2,46,8,1,1,168,86,0,43,52,0,255,255,0,96,255,236,4,134,7,229,2,38,0,195,0,0,0,38,6,34,236,0,1,7,6,30,0,10,1,137,0,21,64,14,3,64,50,1,1,38,86,2,46,8,1,1,168,86,0,43,52,43,52,0,255,255,0,96,254,92,4,134,6,67,2,38,0,195,0,0,0,38,6,41,0,0,1,6,6,34,236,0,0,24,64,12,3,58,8,1,1,168,86,2,52,16,1,1,185,255,124,0,86,0,43,52,43,52,255,255,0,96,255,236,4,134,7,229,2,38,0,195,0,0,0,38,6,34,236,0,1,7,6,29,0,25,1,137,0,21,64,14,3,64,59,1,1,38,86,2,46,8,1,1,168,86,0,43,52,43,52,0,255,255,0,96,255,236,4,134,8,37,2,38,0,195,0,0,0,38,6,34,236,0,1,7,6,38,0,0,1,137,0,23,64,15,4,3,64,59,1,1,38,86,2,46,8,1,1,168,86,0,43,52,43,52,52,0,255,255,0,96,255,236,4,134,7,201,2,38,0,195,0,0,0,38,6,34,236,0,1,7,6,36,255,246,1,137,0,21,64,14,3,64,50,1,1,46,86,2,46,8,1,1,168,86,0,43,52,43,52,0,255,255,0,96,255,236,4,134,6,92,2,38,0,195,0,0,1,6,6,33,236,0,0,11,182,2,46,8,1,1,178,86,0,43,52,0,255,255,0,96,255,236,4,134,6,92,2,38,0,195,0,0,1,6,6,32,236,0,0,11,182,2,50,8,1,1,178,86,0,43,52,0,255,255,0,96,255,236,4,194,7,176,2,38,0,195,0,0,0,38,6,32,236,0,1,7,6,30,1,111,1,84,0,23,180,3,54,47,1,0,184,255,216,183,86,2,50,8,1,1,178,86,0,43,52,43,52,0,255,255,0,96,254,92,4,134,6,92,2,38,0,195,0,0,0,38,6,41,0,0,1,6,6,32,236,0,0,24,64,12,3,62,8,1,1,178,86,2,52,16,1,1,185,255,124,0,86,0,43,52,43,52,255,255,0,96,255,236,4,134,7,176,2,38,0,195,0,0,0,38,6,32,236,0,1,7,6,29,1,125,1,84,0,23,180,3,54,47,1,0,184,255,216,183,86,2,50,8,1,1,178,86,0,43,52,43,52,0,255,255,0,96,255,236,4,134,7,240,2,38,0,195,0,0,0,38,6,32,236,0,1,7,6,38,1,101,1,84,0,25,181,4,3,54,47,1,0,184,255,216,183,86,2,50,8,1,1,178,86,0,43,52,43,52,52,0,255,255,0,96,255,236,4,134,8,10,2,38,0,195,0,0,0,38,6,32,236,0,1,7,6,36,255,246,1,202,0,21,64,14,3,54,47,1,1,86,86,2,50,8,1,1,178,86,0,43,52,43,52,0,255,255,0,96,255,236,4,134,5,226,2,38,0,195,0,0,1,6,6,27,238,0,0,13,183,3,2,46,8,1,1,168,86,0,43,52,52,0,255,255,0,96,254,92,4,134,4,46,2,38,0,195,0,0,1,6,6,41,0,0,0,14,180,2,52,16,1,1,185,255,124,0,86,0,43,52,255,255,0,96,255,236,4,134,6,92,2,38,0,195,0,0,1,6,6,29,25,0,0,11,182,2,46,8,1,1,178,86,0,43,52,0,255,255,0,96,255,236,4,134,6,156,2,38,0,195,0,0,1,6,6,38,0,0,0,13,183,3,2,46,8,1,1,178,86,0,43,52,52,0,255,255,0,96,255,236,4,134,5,156,2,38,0,195,0,0,1,6,6,37,236,0,0,11,182,2,46,8,1,1,178,86,0,43,52,0,0,3,0,96,254,88,4,134,4,46,0,20,0,36,0,66,0,57,64,37,43,50,106,62,63,22,60,43,5,29,37,0,15,106,37,0,105,37,55,106,37,11,114,7,8,36,34,105,36,10,114,29,28,106,29,7,114,0,43,43,43,43,57,57,43,43,43,43,17,18,23,57,43,48,49,1,34,38,53,52,54,55,53,55,23,34,6,21,20,22,51,50,55,7,6,6,3,3,39,17,52,38,39,39,55,23,4,22,21,17,23,21,5,34,38,53,52,54,51,50,22,23,7,38,38,35,32,21,20,22,51,50,54,54,53,53,19,35,55,20,6,6,3,252,115,125,59,55,240,20,106,118,61,55,35,47,18,23,47,222,14,28,149,147,254,20,214,1,7,255,180,253,54,166,182,251,229,95,149,58,44,67,128,67,254,236,95,87,99,133,66,62,84,34,85,154,254,88,111,101,68,93,16,65,2,32,88,80,42,46,11,170,4,5,1,158,1,58,88,1,18,106,99,4,7,188,3,4,219,210,254,70,22,170,20,160,146,168,180,23,23,144,15,5,158,74,82,68,106,56,116,254,240,32,92,123,61,0,255,255,0,96,255,236,4,134,6,94,2,38,0,195,0,0,1,6,6,35,236,0,0,13,183,3,2,46,8,1,1,128,86,0,43,52,52,0,255,255,0,96,255,236,4,134,7,116,2,38,0,195,0,0,0,38,6,35,236,0,1,7,6,30,0,10,1,24,0,26,180,4,66,52,0,0,184,255,154,64,9,86,3,2,46,8,1,1,128,86,0,43,52,52,43,52,255,255,0,96,255,236,4,134,6,64,2,38,0,195,0,0,1,6,6,36,246,0,0,11,182,2,46,8,1,1,186,86,0,43,52,0,0,3,0,21,255,236,4,151,4,56,0,28,0,41,0,71,0,60,64,39,56,55,106,56,56,42,48,60,106,48,7,114,42,66,106,42,11,114,6,13,106,24,29,10,6,4,0,36,35,106,36,7,114,0,19,106,0,11,114,0,43,43,43,43,18,23,57,43,43,43,43,43,18,57,47,43,48,49,5,34,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,51,50,54,53,53,19,35,55,6,6,19,53,17,52,38,39,39,55,23,22,22,21,17,1,34,2,17,16,18,51,50,18,21,20,6,7,33,53,33,52,38,35,34,6,21,20,22,51,50,55,23,6,6,1,43,133,145,194,176,65,110,37,44,26,90,56,84,92,75,67,80,88,152,164,84,16,138,82,156,140,94,20,94,204,224,1,34,193,213,165,148,146,159,3,3,254,28,1,52,69,77,75,69,149,135,57,63,26,40,89,20,160,146,166,182,19,17,154,23,7,88,80,74,82,121,109,176,254,180,22,127,139,1,74,82,1,18,99,116,4,3,182,3,7,225,201,254,188,254,182,1,25,1,15,1,5,1,31,254,246,242,34,72,30,152,161,145,167,185,184,202,13,171,8,10,255,255,0,21,255,236,4,151,6,92,2,38,0,219,0,0,1,6,6,30,30,0,0,11,182,3,72,36,1,1,178,86,0,43,52,0,0,2,0,168,255,236,4,80,5,220,0,24,0,28,0,37,64,22,26,0,114,17,15,0,19,13,106,19,7,114,28,3,25,3,0,7,106,0,11,114,0,43,43,23,57,43,43,18,57,57,43,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,35,32,17,3,51,54,51,50,22,21,16,0,37,17,51,17,1,196,72,140,72,82,53,128,63,191,209,127,117,254,242,62,82,15,245,212,232,254,171,253,173,212,20,11,9,194,25,9,230,210,144,156,254,208,1,16,212,250,230,254,217,254,187,20,5,220,250,54,0,1,0,136,255,236,4,73,4,56,0,25,0,27,64,15,9,10,0,6,13,106,6,7,114,0,19,106,0,11,114,0,43,43,43,43,18,57,57,48,49,5,32,0,17,16,0,33,50,22,23,7,38,38,35,34,6,21,20,22,51,50,54,55,23,6,6,2,170,254,251,254,227,1,23,1,3,155,221,47,163,45,140,83,147,163,182,168,80,157,75,24,87,184,20,1,29,1,11,1,4,1,32,115,105,123,73,80,181,167,181,191,14,12,186,18,12,0,255,255,0,136,255,236,4,73,6,92,2,38,0,222,0,0,1,6,6,30,80,0,0,11,182,1,26,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,73,6,92,2,38,0,222,0,0,1,6,6,33,50,0,0,11,182,1,26,6,1,1,168,86,0,43,52,0,255,255,0,136,254,32,4,73,4,56,2,38,0,222,0,0,1,6,6,43,231,0,0,11,182,1,35,0,0,0,15,86,0,43,52,0,255,255,0,136,255,236,4,73,6,92,2,38,0,222,0,0,1,6,6,32,50,0,0,11,182,1,30,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,73,5,226,2,38,0,222,0,0,1,6,6,28,48,0,0,11,182,1,26,6,1,1,158,86,0,43,52,0,0,2,0,96,255,236,4,8,5,220,0,25,0,30,0,37,64,23,30,10,28,0,114,9,11,21,23,4,0,6,13,106,6,7,114,0,18,106,0,11,114,0,43,43,43,43,18,23,57,43,63,48,49,5,34,2,17,16,18,51,50,22,23,51,3,16,33,34,6,21,16,51,32,53,53,19,35,6,6,55,39,17,51,17,2,6,201,221,222,202,128,139,13,82,62,254,242,117,127,246,1,12,72,92,10,152,204,22,212,20,1,23,1,5,1,11,1,37,105,107,254,240,1,48,198,182,254,152,180,116,254,220,91,93,10,208,5,22,250,36,0,4,0,118,255,236,4,80,5,236,0,10,0,21,0,36,0,40,0,49,64,33,37,38,106,28,37,105,28,16,106,0,33,10,34,31,28,4,7,5,22,11,106,22,11,114,39,40,106,5,39,105,5,1,114,0,43,43,43,43,43,18,23,57,43,43,43,48,49,1,17,16,2,37,55,22,4,18,17,21,1,32,17,52,38,35,34,6,21,20,22,23,34,2,53,52,54,51,50,22,23,51,17,55,16,0,1,39,37,23,3,94,248,254,236,50,244,1,51,145,254,10,1,24,138,128,127,137,130,122,223,243,202,186,129,179,30,74,166,254,252,253,222,40,3,58,40,1,16,1,138,1,37,1,100,101,100,74,245,254,146,254,255,48,254,150,1,20,142,154,133,123,151,165,184,1,6,238,210,230,111,101,254,212,118,254,251,254,227,3,249,175,240,175,0,3,0,96,255,236,5,104,6,32,0,3,0,29,0,34,0,44,64,28,34,10,1,3,106,32,1,105,32,0,27,25,15,13,4,4,10,17,106,10,7,114,4,22,106,4,11,114,0,43,43,43,43,18,23,57,63,43,43,63,48,49,1,19,51,3,1,34,2,17,16,18,51,50,22,23,51,3,16,33,34,6,21,16,51,32,53,53,19,35,6,6,55,39,17,51,17,4,98,50,212,90,252,248,201,221,222,202,128,139,13,82,62,254,242,117,127,246,1,12,72,92,10,152,204,22,212,4,164,1,124,254,132,251,72,1,23,1,5,1,11,1,37,105,107,254,240,1,48,198,182,254,152,180,116,254,220,91,93,10,208,5,22,250,36,0,0,3,0,96,255,236,4,114,5,220,0,3,0,29,0,34,0,44,64,27,34,10,0,1,106,0,10,32,0,27,25,15,13,4,4,10,17,106,10,7,114,4,22,106,4,11,114,0,43,43,43,43,18,23,57,63,18,57,43,63,48,49,1,53,33,21,1,34,2,17,16,18,51,50,22,23,51,3,16,33,34,6,21,16,51,32,53,53,19,35,6,6,55,39,17,51,17,1,206,2,164,253,148,201,221,222,202,128,139,13,82,62,254,242,117,127,246,1,12,72,92,10,152,204,22,212,4,194,174,174,251,42,1,23,1,5,1,11,1,37,105,107,254,240,1,48,198,182,254,152,180,116,254,220,91,93,10,208,5,22,250,36,0,1,0,136,255,236,4,40,4,56,0,29,0,33,64,19,27,0,23,106,12,13,106,12,12,0,6,17,106,6,7,114,0,11,114,0,43,43,43,18,57,47,43,43,51,48,49,5,32,0,17,16,18,51,50,18,21,20,7,33,53,33,52,38,35,34,6,21,20,22,51,50,54,55,23,6,6,2,190,254,241,254,217,250,228,215,235,6,253,24,2,46,136,120,135,149,205,189,66,128,66,26,94,156,20,1,29,1,11,1,4,1,32,254,252,248,73,63,162,143,153,184,168,184,192,15,13,186,18,10,255,255,0,136,255,236,4,40,6,92,2,38,0,232,0,0,1,6,6,30,40,0,0,11,182,1,30,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,40,6,67,2,38,0,232,0,0,1,6,6,34,10,0,0,11,182,1,30,6,1,1,158,86,0,43,52,0,255,255,0,136,255,236,4,40,6,92,2,38,0,232,0,0,1,6,6,33,10,0,0,11,182,1,30,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,40,6,92,2,38,0,232,0,0,1,6,6,32,10,0,0,11,182,1,34,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,224,7,176,2,38,0,232,0,0,0,38,6,32,10,0,1,7,6,30,1,141,1,84,0,23,180,2,38,31,1,0,184,255,216,183,86,1,34,6,1,1,168,86,0,43,52,43,52,0,255,255,0,136,254,92,4,40,6,92,2,38,0,232,0,0,0,38,6,41,30,0,1,6,6,32,10,0,0,24,64,12,2,46,6,1,1,168,86,1,36,0,1,1,185,255,124,0,86,0,43,52,43,52,255,255,0,136,255,236,4,58,7,176,2,38,0,232,0,0,0,38,6,32,10,0,1,7,6,29,1,155,1,84,0,23,180,2,38,31,1,0,184,255,216,183,86,1,34,6,1,1,168,86,0,43,52,43,52,0,255,255,0,136,255,236,4,138,7,240,2,38,0,232,0,0,0,38,6,32,10,0,1,7,6,38,1,131,1,84,0,25,181,3,2,38,31,1,0,184,255,216,183,86,1,34,6,1,1,168,86,0,43,52,43,52,52,0,255,255,0,136,255,236,4,40,8,10,2,38,0,232,0,0,0,38,6,32,10,0,1,7,6,36,0,20,1,202,0,21,64,14,2,38,31,1,1,86,86,1,34,6,1,1,168,86,0,43,52,43,52,0,255,255,0,136,255,236,4,40,5,226,2,38,0,232,0,0,1,6,6,27,12,0,0,13,183,2,1,30,6,1,1,158,86,0,43,52,52,0,255,255,0,136,255,236,4,40,5,226,2,38,0,232,0,0,1,6,6,28,8,0,0,11,182,1,30,6,1,1,158,86,0,43,52,0,255,255,0,136,254,92,4,40,4,56,2,38,0,232,0,0,1,6,6,41,30,0,0,14,180,1,36,0,1,1,185,255,124,0,86,0,43,52,255,255,0,136,255,236,4,40,6,92,2,38,0,232,0,0,1,6,6,29,55,0,0,11,182,1,30,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,40,6,156,2,38,0,232,0,0,1,6,6,38,30,0,0,13,183,2,1,30,6,1,1,168,86,0,43,52,52,0,255,255,0,136,255,236,4,40,5,156,2,38,0,232,0,0,1,6,6,37,10,0,0,11,182,1,30,6,1,1,168,86,0,43,52,0,0,2,0,136,254,88,4,40,4,56,0,21,0,51,0,49,64,30,35,34,106,35,35,22,28,39,106,28,7,114,7,9,49,3,22,45,106,6,22,0,16,106,22,0,105,22,11,114,0,43,43,43,18,57,43,23,57,43,43,18,57,47,43,48,49,1,34,38,53,52,54,55,53,55,23,14,2,21,20,22,51,50,55,7,6,6,3,32,0,17,16,18,51,50,18,21,20,7,33,53,33,52,38,35,34,6,21,20,22,51,50,54,55,23,6,6,3,110,115,125,60,54,240,20,51,103,70,46,70,37,45,18,25,45,196,254,241,254,217,250,228,215,235,6,253,24,2,46,136,120,135,149,205,189,66,128,66,26,94,156,254,88,101,91,74,100,18,70,10,32,12,39,69,56,26,62,11,170,4,5,1,148,1,29,1,11,1,4,1,32,254,252,248,73,63,162,143,153,184,168,184,192,15,13,186,18,10,0,255,255,0,166,255,236,4,26,4,56,2,6,2,73,0,0,255,255,0,68,254,35,4,100,5,160,2,6,3,84,0,0,255,255,0,136,255,236,4,40,6,64,2,38,0,232,0,0,1,6,6,36,20,0,0,11,182,1,30,6,1,1,176,86,0,43,52,0,0,1,0,136,255,236,4,40,4,56,0,29,0,31,64,18,0,11,106,8,5,106,8,8,0,24,17,106,24,7,114,0,11,114,0,43,43,43,18,57,47,43,43,48,49,5,34,2,53,52,55,33,21,33,20,22,51,50,54,53,52,38,35,34,6,7,39,54,54,51,32,0,17,16,2,2,74,214,236,6,2,232,253,210,136,120,135,149,205,189,66,128,66,26,95,155,60,1,16,1,38,250,20,1,5,247,73,63,162,142,154,184,168,185,191,20,18,176,31,17,254,227,254,245,254,253,254,223,0,2,0,79,254,52,4,37,4,27,0,21,0,31,0,45,64,25,25,28,27,106,24,23,14,106,13,30,28,3,0,23,23,28,0,6,106,28,0,105,28,6,114,0,43,43,43,18,57,47,18,57,18,57,51,43,57,43,57,48,49,1,32,39,55,22,22,51,50,54,53,52,38,35,35,39,51,22,4,21,20,6,6,3,35,39,1,23,33,53,33,21,1,2,29,254,223,173,140,80,148,105,138,153,174,158,111,8,180,233,1,0,122,232,240,128,20,1,241,24,253,101,3,55,254,75,254,52,179,148,72,65,152,129,125,137,153,4,225,200,134,206,117,2,221,124,2,17,49,174,201,254,46,0,0,2,0,68,0,0,4,100,5,240,0,12,0,16,0,27,64,15,13,14,106,13,13,0,3,9,106,3,1,114,0,10,114,0,43,43,43,18,57,47,43,48,49,33,17,16,33,50,23,7,38,38,35,32,17,17,1,53,33,21,1,146,1,246,114,106,22,63,96,45,254,228,253,222,3,212,3,202,2,38,20,184,8,6,254,162,252,44,2,134,174,174,0,3,0,96,254,34,4,8,4,56,0,28,0,40,0,45,0,48,64,30,44,6,29,30,106,29,15,114,45,36,23,11,9,5,6,26,26,0,6,14,106,6,7,114,0,20,106,0,11,114,0,43,43,43,43,18,57,47,18,23,57,43,43,63,48,49,5,34,2,17,16,18,51,50,22,23,51,7,52,38,35,34,6,21,20,22,51,50,54,53,53,19,35,6,6,1,39,37,54,54,53,53,51,21,16,0,5,1,17,55,51,17,2,6,201,221,222,202,128,139,13,82,62,120,120,131,143,140,136,120,118,72,92,10,152,254,56,10,1,84,161,145,214,254,254,254,230,1,72,20,192,20,1,23,1,5,1,11,1,37,105,107,232,133,131,198,182,178,182,90,90,116,254,220,91,93,254,54,194,10,5,168,163,242,210,254,229,254,242,9,2,216,2,64,224,252,224,0,255,255,0,96,254,34,4,8,6,67,2,38,0,255,0,0,1,6,6,34,236,0,0,11,182,3,46,6,1,1,158,86,0,43,52,0,255,255,0,96,254,34,4,8,6,92,2,38,0,255,0,0,1,6,6,33,236,0,0,11,182,3,46,6,1,1,168,86,0,43,52,0,255,255,0,96,254,34,4,8,6,92,2,38,0,255,0,0,1,6,6,32,236,0,0,11,182,3,50,6,1,1,168,86,0,43,52,0,255,255,0,96,254,34,4,8,6,52,2,38,0,255,0,0,1,6,6,39,246,0,0,11,182,3,46,6,1,1,128,86,0,43,52,0,255,255,0,96,254,34,4,8,5,226,2,38,0,255,0,0,1,6,6,28,234,0,0,11,182,3,46,6,1,1,158,86,0,43,52,0,0,2,0,168,0,0,4,8,5,220,0,15,0,19,0,29,64,16,17,0,114,7,6,11,15,16,10,114,11,4,106,11,7,114,0,43,43,43,50,17,57,57,43,48,49,33,17,52,38,35,34,17,3,51,54,54,51,50,22,21,17,33,17,51,17,3,52,100,90,250,62,82,9,138,133,168,184,252,160,212,2,178,101,109,254,208,1,16,107,105,204,186,253,78,5,220,250,36,0,3,0,62,0,0,4,8,5,220,0,3,0,19,0,23,0,39,64,22,0,1,106,0,0,15,21,0,114,11,10,15,19,20,10,114,15,8,106,15,7,114,0,43,43,43,50,17,57,57,43,17,57,47,43,48,49,19,53,33,21,19,17,52,38,35,34,17,3,51,54,54,51,50,22,21,17,33,17,51,17,62,2,164,82,100,90,250,62,82,9,138,133,168,184,252,160,212,4,194,174,174,251,62,2,178,101,109,254,208,1,16,107,105,204,186,253,78,5,220,250,36,255,255,255,184,0,0,4,8,7,128,2,38,1,5,0,0,1,7,6,66,254,186,0,80,0,11,182,2,20,17,1,1,160,86,0,43,52,0,255,255,255,189,0,0,4,8,7,128,2,38,1,5,0,0,1,7,6,65,254,186,0,80,0,11,182,2,24,17,1,1,160,86,0,43,52,0,0,5,0,160,0,0,4,78,5,244,0,3,0,7,0,11,0,15,0,27,0,37,64,22,16,22,106,13,16,105,1,13,12,106,13,6,114,9,4,5,106,8,0,4,10,114,0,43,50,50,43,50,43,43,57,43,43,48,49,33,17,51,17,33,53,33,21,51,53,33,21,1,53,33,21,3,34,38,53,52,54,51,50,22,21,20,6,2,52,212,253,152,1,168,172,1,90,252,142,2,44,118,61,87,87,61,62,86,86,3,232,252,24,174,174,174,174,3,116,176,176,1,88,87,61,62,86,86,62,61,87,0,0,4,0,160,0,0,4,78,4,36,0,3,0,7,0,11,0,15,0,33,64,18,0,4,1,13,9,8,4,5,106,13,12,106,13,6,114,4,10,114,0,43,43,43,43,51,50,17,51,17,51,48,49,33,17,51,17,33,53,33,21,51,53,33,21,1,53,33,21,2,52,212,253,152,1,168,172,1,90,252,142,2,44,4,36,251,220,174,174,174,174,3,118,174,174,0,255,255,0,160,0,0,4,78,6,92,2,38,1,10,0,0,1,6,6,30,80,0,0,11,182,4,16,1,1,1,188,86,0,43,52,0,255,255,0,160,0,0,4,78,6,67,2,38,1,10,0,0,1,6,6,34,50,0,0,11,182,4,16,1,1,1,178,86,0,43,52,0,255,255,0,160,0,0,4,78,6,92,2,38,1,10,0,0,1,6,6,32,50,0,0,11,182,4,20,1,1,1,188,86,0,43,52,0,255,255,0,160,0,0,4,78,5,226,2,38,1,10,0,0,1,6,6,27,52,0,0,13,183,5,4,16,1,1,1,178,86,0,43,52,52,0,255,255,0,160,254,92,4,78,5,244,2,38,1,9,0,0,1,6,6,41,70,0,0,14,180,5,34,8,1,1,185,255,104,0,86,0,43,52,255,255,0,160,0,0,4,78,6,92,2,38,1,10,0,0,1,6,6,29,95,0,0,11,182,4,16,1,1,1,188,86,0,43,52,0,255,255,0,160,0,0,4,78,6,156,2,38,1,10,0,0,1,6,6,38,70,0,0,13,183,5,4,16,1,1,1,188,86,0,43,52,52,0,0,5,0,200,254,32,3,232,5,244,0,11,0,15,0,19,0,31,0,43,0,41,64,24,38,20,26,106,32,13,20,105,6,19,12,17,13,6,114,12,10,114,0,1,106,0,15,114,0,43,43,43,43,50,18,57,57,43,50,43,50,48,49,19,39,55,54,54,53,17,51,17,16,0,5,3,17,51,17,1,17,51,17,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,252,10,200,161,145,212,255,0,254,230,178,212,1,36,212,253,156,61,87,87,61,62,86,86,1,186,61,87,87,61,62,86,86,254,32,188,18,14,159,163,1,66,254,222,254,229,254,253,20,1,212,4,36,251,220,1,94,2,198,253,58,3,110,87,61,62,86,86,62,61,87,87,61,62,86,86,62,61,87,255,255,0,160,0,0,4,78,5,156,2,38,1,10,0,0,1,6,6,37,50,0,0,11,182,4,16,13,1,1,188,86,0,43,52,0,0,6,0,160,254,88,4,78,5,244,0,20,0,24,0,28,0,32,0,36,0,48,0,53,64,32,37,43,106,34,37,105,22,34,33,106,34,6,114,7,31,25,26,106,6,25,0,15,106,25,0,105,32,21,9,25,10,114,0,43,50,50,50,43,43,18,57,43,50,57,43,43,57,43,43,48,49,1,34,38,53,52,54,55,53,55,23,34,6,21,20,22,51,50,55,7,6,6,3,17,51,17,33,53,33,21,51,53,33,21,1,53,33,21,3,34,38,53,52,54,51,50,22,21,20,6,2,158,115,125,59,55,240,20,106,118,61,55,35,47,18,23,47,126,212,253,152,1,168,172,1,90,252,142,2,44,118,61,87,87,61,62,86,86,254,88,111,101,74,100,18,50,2,32,88,80,42,46,11,170,4,5,1,168,3,232,252,24,174,174,174,174,3,116,176,176,1,88,87,61,62,86,86,62,61,87,255,255,0,160,0,0,4,78,6,64,2,38,1,10,0,0,1,6,6,36,60,0,0,11,182,4,16,13,1,1,196,86,0,43,52,0,0,4,0,170,254,32,3,140,5,244,0,12,0,16,0,20,0,32,0,37,64,22,21,27,106,14,21,105,7,20,0,18,14,13,106,14,6,114,0,1,106,0,15,114,0,43,43,43,43,51,18,57,57,43,43,48,49,19,39,55,54,54,53,17,51,17,20,6,6,7,3,53,33,21,3,17,51,17,3,34,38,53,52,54,51,50,22,21,20,6,180,10,200,161,145,212,112,238,188,86,1,172,16,212,128,61,87,87,61,62,86,86,254,32,188,18,15,158,163,1,66,254,222,189,237,121,15,5,74,174,174,253,232,2,198,253,58,3,110,87,61,62,86,86,62,61,87,0,0,3,0,170,254,32,3,120,4,36,0,12,0,16,0,20,0,25,64,13,6,20,0,18,14,13,106,14,6,114,0,15,114,0,43,43,43,51,18,57,57,48,49,19,39,55,54,54,53,17,51,17,20,6,6,7,3,53,33,21,3,17,51,17,180,10,200,161,145,212,112,238,188,86,1,172,16,212,254,32,188,18,15,158,163,1,66,254,222,189,237,121,15,5,74,174,174,253,232,2,198,253,58,0,255,255,0,170,254,32,4,84,6,92,2,38,1,23,0,0,1,7,6,32,0,182,0,0,0,11,182,3,25,14,1,1,188,86,0,43,52,0,0,3,0,160,0,0,4,116,5,220,0,10,0,14,0,18,0,34,64,18,17,16,0,1,106,0,0,11,6,12,0,114,15,11,10,114,6,6,0,63,43,50,43,17,18,57,47,43,57,57,48,49,1,53,51,50,54,54,55,51,2,0,33,1,17,51,17,33,1,55,1,1,54,120,132,170,97,23,220,42,254,219,254,255,254,192,212,1,250,254,210,200,1,108,1,146,190,91,206,171,254,181,254,185,254,110,5,220,250,36,2,4,82,253,170,0,255,255,0,160,254,32,4,116,5,220,2,38,1,25,0,0,1,6,6,42,236,0,0,14,180,3,20,11,1,1,185,255,116,0,86,0,43,52,0,3,0,160,0,0,4,116,4,36,0,10,0,14,0,18,0,31,64,16,17,16,0,1,106,0,0,11,7,12,6,114,15,11,10,114,0,43,50,43,50,17,57,47,43,57,57,48,49,1,53,51,50,54,54,55,51,2,0,33,1,17,51,17,33,1,55,1,1,54,120,132,170,97,23,220,42,254,219,254,255,254,192,212,1,250,254,210,200,1,108,1,146,190,91,206,171,254,181,254,185,254,110,4,36,251,220,2,4,82,253,170,0,2,0,88,255,236,4,40,5,220,0,15,0,19,0,25,64,14,5,17,0,10,106,17,16,106,17,0,114,0,11,114,0,43,43,43,43,17,51,48,49,5,34,38,53,17,51,17,20,22,22,51,50,55,23,6,6,1,53,33,21,2,236,184,164,212,32,93,91,83,129,24,81,149,253,22,1,74,20,200,220,4,76,251,190,84,106,50,38,186,22,20,5,66,174,174,255,255,0,88,255,236,4,40,7,118,2,38,1,28,0,0,1,6,6,63,162,80,0,11,182,2,20,4,1,1,160,86,0,43,52,0,0,3,0,88,255,236,4,40,6,32,0,3,0,19,0,23,0,31,64,19,1,3,106,21,1,105,21,20,106,9,21,0,114,4,14,106,4,11,114,0,43,43,43,50,43,43,43,48,49,1,19,51,3,3,34,38,53,17,51,17,20,22,22,51,50,55,23,6,6,1,53,33,21,2,250,50,212,90,186,184,164,212,32,93,91,83,129,24,81,149,253,22,1,74,4,164,1,124,254,132,251,72,200,220,4,76,251,190,84,106,50,38,186,22,20,5,66,174,174,0,255,255,0,88,254,32,4,40,5,220,2,38,1,28,0,0,1,6,6,42,70,0,0,14,180,2,21,0,1,1,185,255,136,0,86,0,43,52,255,255,0,88,255,236,4,40,5,220,2,38,1,28,0,0,1,7,2,174,1,60,1,44,0,14,180,2,20,12,1,1,185,2,142,0,86,0,43,52,0,3,0,88,255,236,4,40,5,220,0,3,0,19,0,23,0,37,64,22,2,3,106,0,1,106,2,0,4,21,20,106,9,21,0,114,4,14,106,4,11,114,0,43,43,43,50,43,18,57,57,43,43,48,49,19,53,1,21,3,34,38,53,17,51,17,20,22,22,51,50,55,23,6,6,1,53,33,21,118,3,38,176,184,164,212,32,93,91,83,129,24,81,149,253,22,1,74,1,199,185,1,164,185,252,129,200,220,4,76,251,190,84,106,50,38,186,22,20,5,66,174,174,0,0,3,0,112,0,0,4,64,4,56,0,14,0,19,0,34,0,41,64,23,10,3,106,10,30,7,114,6,26,5,25,26,3,15,16,6,114,14,34,34,15,10,114,0,43,50,17,51,43,18,23,57,17,51,43,50,43,48,49,33,17,52,35,34,21,39,51,54,54,51,50,22,21,17,33,17,51,23,17,51,17,52,35,34,21,39,51,54,54,51,50,22,21,17,3,108,82,104,72,82,5,89,84,110,100,252,48,188,24,186,84,102,62,68,6,89,87,83,95,3,42,110,144,152,62,90,118,132,252,194,4,36,224,252,188,3,62,90,144,152,77,75,114,116,252,174,0,2,0,168,0,0,4,8,4,56,0,15,0,20,0,29,64,16,7,6,16,17,6,114,15,16,10,114,11,4,106,11,7,114,0,43,43,43,50,43,18,57,57,48,49,33,17,52,38,35,34,17,3,51,54,54,51,50,22,21,17,33,17,51,23,17,3,52,100,90,250,62,82,9,138,133,168,184,252,160,192,20,2,178,96,104,254,218,1,16,107,105,204,186,253,78,4,36,224,252,188,0,255,255,0,168,0,0,4,8,6,92,2,38,1,35,0,0,1,6,6,30,20,0,0,11,182,2,21,17,1,1,188,86,0,43,52,0,0,3,0,0,0,0,4,8,6,92,0,3,0,19,0,24,0,39,64,23,10,11,20,21,0,1,106,21,0,105,21,6,114,19,20,10,114,15,8,106,15,7,114,0,43,43,43,50,43,43,43,17,18,57,57,48,49,17,19,51,3,1,17,52,38,35,34,17,3,51,54,54,51,50,22,21,17,33,17,51,23,17,70,232,140,2,146,100,90,250,62,82,9,138,133,168,184,252,160,192,20,4,224,1,124,254,132,251,32,2,178,96,104,254,218,1,16,107,105,204,186,253,78,4,36,224,252,188,255,255,0,168,0,0,4,8,6,92,2,38,1,35,0,0,1,6,6,33,246,0,0,11,182,2,21,17,1,1,188,86,0,43,52,0,255,255,0,168,254,32,4,8,4,56,2,38,1,35,0,0,1,6,6,42,0,0,0,14,180,2,22,16,1,1,185,255,116,0,86,0,43,52,0,3,0,168,254,32,4,8,4,56,0,15,0,28,0,33,0,34,64,21,7,6,22,15,4,29,30,6,114,29,10,114,16,17,106,16,15,114,11,7,114,0,43,43,43,43,43,17,23,57,48,49,1,17,52,38,35,34,17,3,51,54,54,51,50,22,21,17,1,39,55,54,54,53,17,51,17,20,6,6,7,1,17,51,23,17,3,52,100,90,250,62,82,9,138,133,168,184,253,200,10,130,124,112,212,98,206,164,254,116,192,20,1,133,1,45,101,109,254,208,1,16,107,105,204,186,254,211,252,155,188,18,15,158,163,1,126,254,162,189,237,121,15,1,212,4,36,224,252,188,0,3,255,58,254,32,4,8,4,56,0,15,0,28,0,33,0,38,64,24,33,23,6,7,4,0,30,6,114,16,17,106,16,15,114,11,4,106,11,7,114,0,10,114,0,43,43,43,43,43,43,18,23,57,48,49,33,17,52,38,35,34,17,3,51,54,54,51,50,22,21,17,1,39,55,54,54,53,17,51,17,20,6,6,7,1,17,51,23,17,3,52,100,90,250,62,82,9,138,133,168,184,251,60,10,130,124,112,212,98,207,163,1,0,192,20,2,178,101,109,254,208,1,16,107,105,204,186,253,78,254,32,188,18,17,156,163,1,126,254,162,189,233,120,20,2,186,3,62,224,253,162,255,255,0,168,0,0,4,8,6,64,2,38,1,35,0,0,1,6,6,36,0,0,0,11,182,2,21,17,1,1,196,86,0,43,52,0,0,2,0,136,255,236,4,40,4,56,0,11,0,23,0,21,64,12,0,12,106,6,18,106,6,7,114,0,11,114,0,43,43,43,43,48,49,5,34,2,17,16,18,51,50,18,17,16,2,39,50,54,53,52,38,35,34,6,21,20,22,2,88,220,244,244,220,221,243,243,221,117,127,127,117,117,127,127,20,1,32,1,6,1,7,1,31,254,225,254,249,254,250,254,224,190,188,172,173,187,187,173,172,188,255,255,0,136,255,236,4,40,6,92,2,38,1,43,0,0,1,6,6,30,30,0,0,11,182,2,24,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,40,6,67,2,38,1,43,0,0,1,6,6,34,0,0,0,11,182,2,24,6,1,1,158,86,0,43,52,0,255,255,0,136,255,236,4,40,6,92,2,38,1,43,0,0,1,6,6,32,0,0,0,11,182,2,28,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,214,7,176,2,38,1,43,0,0,0,38,6,32,0,0,1,7,6,30,1,131,1,84,0,23,180,3,32,25,1,0,184,255,216,183,86,2,28,6,1,1,168,86,0,43,52,43,52,0,255,255,0,136,254,92,4,40,6,92,2,38,1,43,0,0,0,38,6,41,0,0,1,6,6,32,0,0,0,24,64,12,3,40,6,1,1,168,86,2,30,0,1,1,185,255,124,0,86,0,43,52,43,52,255,255,0,136,255,236,4,48,7,176,2,38,1,43,0,0,0,38,6,32,0,0,1,7,6,29,1,145,1,84,0,23,180,3,32,25,1,0,184,255,216,183,86,2,28,6,1,1,168,86,0,43,52,43,52,0,255,255,0,136,255,236,4,128,7,240,2,38,1,43,0,0,0,38,6,32,0,0,1,7,6,38,1,121,1,84,0,25,181,4,3,32,25,1,0,184,255,216,183,86,2,28,6,1,1,168,86,0,43,52,43,52,52,0,255,255,0,136,255,236,4,40,8,10,2,38,1,43,0,0,0,38,6,32,0,0,1,7,6,36,0,10,1,202,0,21,64,14,3,32,25,1,1,86,86,2,28,6,1,1,168,86,0,43,52,43,52,0,255,255,0,136,255,236,4,40,5,226,2,38,1,43,0,0,1,6,6,27,2,0,0,13,183,3,2,24,6,1,1,158,86,0,43,52,52,0,255,255,0,136,254,92,4,40,4,56,2,38,1,43,0,0,1,6,6,41,0,0,0,14,180,2,30,0,1,1,185,255,124,0,86,0,43,52,255,255,0,136,255,236,4,40,6,92,2,38,1,43,0,0,1,6,6,29,45,0,0,11,182,2,24,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,40,6,156,2,38,1,43,0,0,1,6,6,38,20,0,0,13,183,3,2,24,6,1,1,168,86,0,43,52,52,0,255,255,0,136,255,236,4,184,5,63,2,38,1,43,0,0,1,7,6,40,1,44,0,0,0,14,180,2,24,6,0,0,185,255,71,0,86,0,43,52,255,255,0,136,255,236,4,184,6,92,2,38,1,56,0,0,1,6,6,30,30,0,0,11,182,3,34,6,1,1,168,86,0,43,52,0,255,255,0,136,254,92,4,184,5,63,2,38,1,56,0,0,1,6,6,41,0,0,0,14,180,3,40,0,1,1,185,255,124,0,86,0,43,52,255,255,0,136,255,236,4,184,6,92,2,38,1,56,0,0,1,6,6,29,45,0,0,11,182,3,34,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,184,6,156,2,38,1,56,0,0,1,6,6,38,20,0,0,13,183,4,3,34,6,1,1,168,86,0,43,52,52,0,255,255,0,136,255,236,4,184,6,64,2,38,1,56,0,0,1,6,6,36,10,0,0,11,182,3,34,6,1,1,176,86,0,43,52,0,255,255,0,136,255,236,4,40,6,92,2,38,1,43,0,0,1,6,6,31,70,0,0,13,183,3,2,24,6,1,1,168,86,0,43,52,52,0,255,255,0,136,255,236,4,40,5,156,2,38,1,43,0,0,1,6,6,37,0,0,0,11,182,2,24,6,1,1,168,86,0,43,52,0,0,3,0,136,254,88,4,40,4,56,0,21,0,33,0,45,0,39,64,24,28,40,106,28,7,114,9,7,8,3,22,34,105,6,22,0,16,106,22,0,105,22,11,114,0,43,43,43,18,57,43,23,57,43,43,48,49,1,34,38,53,52,54,55,53,55,23,14,2,21,20,22,51,50,55,7,6,6,3,34,2,17,16,18,51,50,18,17,16,2,39,50,54,53,52,38,35,34,6,21,20,22,2,157,115,125,60,54,220,19,41,95,67,46,70,37,45,18,25,45,89,220,244,244,220,221,243,243,221,117,127,127,117,117,127,127,254,88,101,91,74,100,18,70,6,25,16,39,66,58,26,62,11,170,4,5,1,148,1,32,1,6,1,7,1,31,254,225,254,249,254,250,254,224,190,188,172,173,187,187,173,172,188,0,0,1,0,132,255,236,4,40,4,56,0,25,0,27,64,15,3,4,0,20,13,106,20,7,114,0,7,106,0,11,114,0,43,43,43,43,18,57,57,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,35,34,6,7,39,54,54,51,32,0,17,16,0,2,14,129,206,59,104,50,156,92,152,168,198,182,67,118,77,32,77,143,98,1,15,1,39,254,233,20,71,52,160,37,56,182,166,182,190,18,23,184,26,21,254,227,254,245,254,253,254,223,0,3,0,136,255,122,4,40,4,174,0,3,0,15,0,27,0,35,64,19,3,1,0,2,10,10,22,106,10,7,114,0,4,4,16,106,4,11,114,0,43,43,16,206,43,43,16,206,17,57,57,48,49,5,39,1,23,1,34,2,17,16,18,51,50,18,17,16,2,39,50,54,53,52,38,35,34,6,21,20,22,1,45,105,2,188,115,254,101,220,244,244,220,221,243,243,221,117,127,127,117,117,127,127,134,75,4,233,65,251,127,1,32,1,6,1,7,1,31,254,225,254,249,254,250,254,224,190,188,172,173,187,187,173,172,188,255,255,0,136,255,122,4,40,6,92,2,38,1,66,0,0,1,6,6,30,30,0,0,11,182,3,28,10,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,40,6,64,2,38,1,43,0,0,1,6,6,36,10,0,0,11,182,2,24,6,1,1,176,86,0,43,52,0,0,3,0,20,255,236,4,150,4,56,0,7,0,17,0,47,0,45,64,27,31,32,106,31,31,0,4,24,36,106,24,4,13,106,4,7,114,18,42,106,18,0,8,106,0,11,114,0,43,43,51,43,43,43,51,43,17,18,57,47,43,48,49,5,32,17,16,33,32,17,16,37,50,17,52,38,35,34,6,21,16,5,34,2,17,16,18,51,50,18,21,20,6,7,33,53,33,52,38,35,34,6,21,20,22,51,50,55,23,6,6,1,108,254,168,1,88,1,48,254,208,144,71,73,82,80,2,248,193,213,165,148,146,159,3,3,254,28,1,52,69,77,75,69,149,135,57,63,26,40,89,20,2,38,2,38,253,218,253,218,190,1,104,181,179,179,181,254,152,190,1,33,1,7,1,5,1,31,254,246,242,34,72,30,152,161,145,167,185,184,202,13,171,8,10,0,0,2,0,168,254,52,4,80,4,56,0,28,0,33,0,38,64,24,30,6,114,29,14,114,3,5,18,20,4,0,23,15,106,23,7,114,0,9,106,0,11,114,0,43,43,43,43,18,23,57,43,43,48,49,5,34,38,39,35,19,21,20,22,51,50,54,53,52,38,35,34,6,21,39,51,54,54,51,50,18,17,16,2,1,17,51,23,17,2,170,120,151,11,92,72,118,120,137,139,143,131,120,120,62,82,14,139,127,203,221,221,253,53,192,20,20,93,91,1,36,116,90,90,182,178,182,198,131,133,232,107,105,254,219,254,245,254,251,254,233,254,72,5,240,224,250,240,0,0,2,0,168,254,52,4,80,5,220,0,28,0,32,0,38,64,24,30,0,114,29,14,114,3,5,18,20,4,0,23,15,106,23,7,114,0,9,106,0,11,114,0,43,43,43,43,18,23,57,43,43,48,49,5,34,38,39,35,19,21,20,22,51,50,54,53,52,38,35,34,6,21,3,51,54,54,51,50,18,17,16,2,1,17,51,17,2,170,120,151,11,92,72,133,135,122,124,127,117,135,135,62,82,14,139,127,203,221,221,253,53,212,20,93,91,1,36,116,90,90,182,178,182,198,151,153,1,16,107,105,254,219,254,245,254,251,254,233,254,72,7,168,248,88,0,0,2,0,96,254,52,4,8,4,56,0,28,0,33,0,38,64,24,33,14,114,32,6,114,25,24,11,10,4,0,6,14,106,6,7,114,0,20,106,0,11,114,0,43,43,43,43,18,23,57,43,43,48,49,5,34,2,17,16,18,51,50,22,23,51,7,52,38,35,34,6,21,20,22,51,50,54,53,53,19,35,6,6,19,17,55,51,17,2,6,201,221,222,202,128,139,13,82,62,120,120,131,143,140,136,120,118,72,92,10,152,182,20,192,20,1,23,1,5,1,11,1,37,105,107,232,133,131,198,182,178,182,90,90,116,254,220,91,93,254,72,5,16,224,250,16,0,4,0,80,0,0,4,128,4,56,0,13,0,17,0,22,0,26,0,45,64,26,0,1,14,24,23,106,19,24,6,114,8,8,4,18,14,15,106,14,10,114,4,11,106,4,7,114,0,43,43,43,43,51,18,57,47,43,50,43,18,57,57,48,49,1,3,51,18,33,50,22,21,35,52,38,35,34,6,1,53,33,21,33,17,51,19,17,1,53,33,23,2,16,62,82,18,1,18,164,148,210,69,77,135,133,254,64,2,196,254,40,172,40,254,104,1,98,20,1,200,1,76,1,36,188,210,116,102,231,253,99,174,174,4,36,254,208,253,12,3,118,174,174,255,255,0,80,0,0,4,128,6,92,2,38,1,73,0,0,1,6,6,30,30,0,0,11,182,4,27,19,1,1,188,86,0,43,52,0,255,255,0,80,0,0,4,128,6,92,2,38,1,73,0,0,1,6,6,33,0,0,0,11,182,4,27,19,1,1,188,86,0,43,52,0,255,255,0,80,254,32,4,128,4,56,2,38,1,73,0,0,1,7,6,42,255,86,0,0,0,14,180,4,28,18,1,1,185,255,116,0,86,0,43,52,0,1,0,156,255,236,4,20,4,56,0,39,0,34,64,22,10,37,13,14,34,33,17,30,8,0,20,27,106,20,7,114,0,7,106,0,11,114,0,43,43,43,43,18,23,57,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,39,39,38,38,53,52,36,33,50,22,23,7,38,38,35,34,6,21,20,22,23,23,22,22,21,20,6,2,6,120,171,71,24,105,161,72,161,145,51,53,244,157,147,1,11,1,41,77,133,70,22,81,124,59,178,160,66,68,196,167,155,250,20,14,16,192,16,16,63,69,48,47,13,62,40,118,120,174,156,9,11,184,8,6,61,69,46,41,17,48,40,134,128,171,155,255,255,0,156,255,236,4,20,6,92,2,38,1,77,0,0,1,6,6,30,60,0,0,11,182,1,40,20,1,1,168,86,0,43,52,0,255,255,0,156,255,236,4,20,6,92,2,38,1,77,0,0,1,6,6,33,30,0,0,11,182,1,40,20,1,1,168,86,0,43,52,0,255,255,0,156,254,32,4,20,4,56,2,38,1,77,0,0,1,6,6,43,191,0,0,11,182,1,49,0,0,0,15,86,0,43,52,0,255,255,0,156,255,236,4,20,6,92,2,38,1,77,0,0,1,6,6,32,30,0,0,11,182,1,44,20,1,1,168,86,0,43,52,0,255,255,0,156,254,32,4,20,4,56,2,38,1,77,0,0,1,6,6,42,10,0,0,14,180,1,41,0,1,1,185,255,136,0,86,0,43,52,0,2,0,68,255,236,4,140,5,240,0,54,0,58,0,50,64,33,55,56,106,55,55,31,10,52,13,48,17,45,42,20,38,23,10,0,35,26,106,35,1,114,31,10,114,0,7,106,0,11,114,0,43,43,43,43,43,18,23,57,18,57,47,43,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,39,46,2,53,52,54,55,54,54,53,52,38,39,34,6,21,17,35,17,52,54,51,50,22,21,20,6,6,7,6,6,21,20,22,23,30,2,21,20,6,1,53,33,21,3,50,79,124,49,24,73,112,43,60,66,73,50,40,78,51,50,25,29,53,73,68,112,122,212,237,215,170,185,31,47,23,19,37,65,43,43,85,56,181,252,109,1,44,20,16,14,192,15,17,59,53,73,95,39,35,75,99,72,70,105,46,44,102,73,56,63,1,131,119,251,200,4,46,215,235,162,148,70,92,67,35,36,73,57,49,85,47,40,91,111,71,146,160,2,152,176,176,0,0,2,0,68,0,0,4,100,5,240,0,12,0,16,0,27,64,15,13,14,106,13,13,0,3,9,106,3,1,114,0,10,114,0,43,43,43,18,57,47,43,48,49,33,17,16,33,50,23,7,38,38,35,34,17,17,1,53,33,21,1,166,1,216,120,110,22,66,101,47,254,253,202,1,244,3,202,2,38,20,184,8,6,254,162,252,44,2,132,176,176,0,0,3,0,60,255,236,4,36,5,100,0,15,0,19,0,23,0,35,64,20,4,21,16,16,0,21,20,106,21,17,105,21,6,114,0,9,106,0,11,114,0,43,43,43,43,43,18,57,47,18,57,48,49,5,34,38,53,53,51,21,20,22,51,50,54,55,23,6,6,1,17,51,17,1,53,33,21,3,14,241,215,212,123,141,50,112,72,24,70,133,253,237,212,254,34,3,192,20,200,220,180,170,126,114,11,9,186,12,12,2,8,3,112,252,144,1,130,174,174,0,0,4,0,60,255,236,4,36,5,100,0,3,0,19,0,23,0,27,0,37,64,23,1,0,106,20,8,1,3,4,25,24,106,25,21,105,25,6,114,4,13,106,4,11,114,0,43,43,43,43,43,18,23,57,43,48,49,19,53,33,21,3,34,38,53,53,51,21,20,22,51,50,54,55,23,6,6,1,17,51,17,1,53,33,21,60,3,192,238,241,215,212,123,141,50,112,72,24,70,133,253,237,212,254,34,3,192,1,240,174,174,253,252,200,220,180,170,126,114,11,9,186,12,12,2,8,3,112,252,144,1,130,174,174,0,4,0,60,255,236,4,36,6,32,0,3,0,19,0,23,0,27,0,41,64,24,20,8,4,25,0,1,106,0,25,25,24,106,25,21,105,25,6,114,4,13,106,4,11,114,0,43,43,43,43,43,16,204,43,17,18,57,57,48,49,1,19,51,3,3,34,38,53,53,51,21,20,22,51,50,54,55,23,6,6,1,17,51,17,1,53,33,21,2,170,50,212,90,72,241,215,212,123,141,50,112,72,24,70,133,253,237,212,254,34,3,192,4,164,1,124,254,132,251,72,200,220,180,170,126,114,11,9,186,12,12,2,8,3,112,252,144,1,130,174,174,255,255,0,60,254,32,4,36,5,100,2,38,1,85,0,0,1,6,6,43,236,0,0,11,182,3,33,0,0,0,15,86,0,43,52,0,255,255,0,60,254,32,4,36,5,100,2,38,1,85,0,0,1,6,6,42,55,0,0,14,180,3,25,0,1,1,185,255,136,0,86,0,43,52,0,5,0,0,254,35,4,200,5,160,0,15,0,19,0,23,0,38,0,50,0,50,64,33,39,40,106,39,15,114,28,34,106,21,28,105,24,45,19,5,4,0,21,20,106,21,17,105,21,6,114,0,9,106,0,11,114,0,43,43,43,43,43,18,23,57,43,43,43,43,48,49,5,34,38,53,53,51,21,20,22,51,50,54,55,23,6,6,1,17,51,17,1,53,33,21,3,17,52,54,51,50,22,23,7,38,35,34,6,21,17,1,39,55,54,54,53,17,51,17,20,6,5,1,246,166,150,212,59,65,18,41,25,24,32,61,254,161,212,254,114,3,102,118,166,166,36,73,31,22,39,45,73,81,253,182,10,118,140,126,212,236,254,250,20,143,157,220,210,63,57,6,4,186,7,7,1,184,3,192,252,64,1,210,174,174,253,242,2,188,191,189,7,8,184,9,94,86,253,58,252,187,188,12,14,123,122,1,146,254,142,237,230,18,0,3,0,156,255,236,4,134,4,36,0,16,0,23,0,27,0,39,64,23,23,21,106,23,10,114,12,20,24,3,14,14,0,25,4,6,114,0,9,106,0,11,114,0,43,43,43,50,17,57,47,23,57,43,43,48,49,5,34,38,53,17,51,17,20,22,51,50,54,53,19,35,6,6,55,39,53,51,21,23,21,1,17,51,17,1,250,167,183,212,104,94,116,118,54,70,25,146,205,18,212,146,254,154,212,20,199,181,2,188,253,68,91,99,147,173,254,226,108,116,10,254,186,238,22,170,1,44,2,248,253,68,255,255,0,156,255,236,4,134,6,92,2,38,1,91,0,0,1,6,6,30,20,0,0,11,182,3,28,4,1,1,188,86,0,43,52,0,255,255,0,156,255,236,4,134,6,67,2,38,1,91,0,0,1,6,6,34,246,0,0,11,182,3,28,4,1,1,178,86,0,43,52,0,255,255,0,156,255,236,4,134,6,92,2,38,1,91,0,0,1,6,6,32,246,0,0,11,182,3,32,4,1,1,188,86,0,43,52,0,255,255,0,156,255,236,4,134,5,226,2,38,1,91,0,0,1,6,6,27,248,0,0,13,183,4,3,28,4,1,1,178,86,0,43,52,52,0,255,255,0,156,254,92,4,134,4,36,2,38,1,91,0,0,1,6,6,41,226,0,0,14,180,3,34,0,1,1,185,255,124,0,86,0,43,52,255,255,0,156,255,236,4,134,6,92,2,38,1,91,0,0,1,6,6,29,35,0,0,11,182,3,28,4,1,1,188,86,0,43,52,0,255,255,0,156,255,236,4,134,6,156,2,38,1,91,0,0,1,6,6,38,10,0,0,13,183,4,3,28,4,1,1,188,86,0,43,52,52,0,0,4,0,156,255,236,4,214,5,63,0,9,0,26,0,33,0,37,0,47,64,30,33,31,106,33,10,114,24,34,37,30,22,5,10,35,14,5,105,1,14,0,105,14,6,114,10,19,106,10,11,114,0,43,43,43,43,51,43,51,18,23,57,43,43,48,49,1,39,55,54,54,53,51,20,6,7,1,34,38,53,17,51,17,20,22,51,50,54,53,19,35,6,6,55,39,53,51,21,23,21,1,17,51,17,3,83,50,40,93,84,220,165,182,254,127,167,183,212,104,94,116,118,54,70,25,146,205,18,212,146,254,154,212,3,127,165,10,23,130,120,184,208,46,252,99,199,181,2,188,253,68,91,99,147,173,254,226,108,116,10,254,186,238,22,170,1,44,2,248,253,68,255,255,0,156,255,236,4,214,6,92,2,38,1,99,0,0,1,6,6,30,20,0,0,11,182,4,38,14,1,1,188,86,0,43,52,0,255,255,0,156,254,92,4,214,5,63,2,38,1,99,0,0,1,6,6,41,226,0,0,14,180,4,44,10,1,1,185,255,124,0,86,0,43,52,255,255,0,156,255,236,4,214,6,92,2,38,1,99,0,0,1,6,6,29,35,0,0,14,180,4,38,5,1,0,185,255,161,0,86,0,43,52,255,255,0,156,255,236,4,214,6,156,2,38,1,99,0,0,1,6,6,38,10,0,0,16,181,5,4,38,5,1,0,185,255,161,0,86,0,43,52,52,255,255,0,156,255,236,4,214,6,64,2,38,1,99,0,0,1,6,6,36,0,0,0,11,182,4,38,14,1,1,196,86,0,43,52,0,255,255,0,156,255,236,4,134,6,92,2,38,1,91,0,0,1,6,6,31,60,0,0,13,183,4,3,28,4,1,1,188,86,0,43,52,52,0,255,255,0,156,255,236,4,134,5,156,2,38,1,91,0,0,1,6,6,37,246,0,0,11,182,3,28,4,1,1,188,86,0,43,52,0,0,4,0,156,254,88,4,134,4,36,0,20,0,37,0,44,0,48,0,54,64,33,8,7,44,42,105,6,15,9,44,10,33,41,48,45,35,5,21,46,25,6,114,15,0,106,21,15,105,21,30,106,21,11,114,0,43,43,43,43,43,50,17,23,57,63,51,18,57,43,57,57,48,49,1,34,38,53,52,54,55,53,55,23,34,6,21,20,22,51,50,55,7,6,6,1,34,38,53,17,51,17,20,22,51,50,54,53,19,35,6,6,55,39,53,51,21,23,21,1,17,51,17,3,252,115,125,59,55,240,20,106,118,61,55,35,47,18,23,47,253,234,167,183,212,104,94,116,118,54,70,25,146,205,18,212,146,254,154,212,254,88,111,101,68,93,16,65,2,32,88,80,42,46,11,170,4,5,1,148,199,181,2,188,253,68,91,99,147,173,254,226,108,116,10,254,186,238,22,170,1,44,2,248,253,68,255,255,0,156,255,236,4,134,6,94,2,38,1,91,0,0,1,6,6,35,246,0,0,13,183,4,3,28,4,1,1,138,86,0,43,52,52,0,255,255,0,156,255,236,4,134,6,64,2,38,1,91,0,0,1,6,6,36,0,0,0,11,182,3,28,4,1,1,196,86,0,43,52,0,0,1,0,80,0,0,4,96,4,36,0,7,0,19,64,10,6,1,6,114,0,3,106,0,10,114,0,43,43,43,50,48,49,33,1,51,1,51,1,51,1,1,208,254,128,226,1,34,18,1,24,226,254,138,4,36,252,144,3,112,251,220,255,255,0,95,0,0,4,81,4,36,2,6,2,25,0,0,0,2,0,70,0,0,4,106,4,36,0,9,0,19,0,33,64,18,18,11,2,105,16,8,3,11,6,114,5,10,13,106,0,10,10,114,0,43,50,43,50,43,50,50,50,43,50,48,49,33,3,35,39,51,19,51,19,51,3,33,3,51,19,51,19,51,7,35,3,2,208,124,16,87,194,125,18,90,210,150,252,234,120,200,80,18,125,194,89,14,124,3,74,218,252,124,3,132,251,220,4,36,252,124,3,132,218,252,182,0,255,255,0,70,0,0,4,106,6,92,2,38,1,112,0,0,1,6,6,30,20,0,0,11,182,2,20,3,1,1,188,86,0,43,52,0,255,255,0,70,0,0,4,106,6,92,2,38,1,112,0,0,1,6,6,32,246,0,0,11,182,2,24,3,1,1,188,86,0,43,52,0,255,255,0,70,0,0,4,106,5,226,2,38,1,112,0,0,1,6,6,27,248,0,0,13,183,3,2,20,7,1,1,178,86,0,43,52,52,0,255,255,0,70,0,0,4,106,6,92,2,38,1,112,0,0,1,6,6,29,35,0,0,11,182,2,20,3,1,1,188,86,0,43,52,0,0,2,0,106,0,0,4,70,4,36,0,5,0,11,0,26,64,14,7,4,1,10,4,11,3,8,6,114,11,0,10,114,0,43,50,43,50,18,23,57,48,49,51,1,1,51,1,1,33,1,1,51,1,1,106,1,166,1,70,240,254,74,254,202,1,252,254,190,254,86,240,1,70,1,166,2,72,1,220,253,166,254,54,1,202,2,90,254,36,253,184,0,0,2,0,55,254,32,4,91,4,36,0,13,0,19,0,27,64,16,8,15,6,114,14,17,106,14,10,114,0,1,106,0,15,114,0,43,43,43,43,43,50,48,49,19,39,55,62,2,55,1,51,1,14,2,7,19,1,51,1,51,21,75,10,166,105,149,106,40,1,8,220,254,206,60,149,203,142,222,254,90,220,1,90,32,254,32,190,20,13,88,173,140,3,148,252,58,190,232,116,16,1,204,4,36,252,124,160,0,255,255,0,55,254,32,4,91,6,92,2,38,1,118,0,0,1,6,6,30,45,0,0,11,182,2,20,7,1,1,188,86,0,43,52,0,255,255,0,55,254,32,4,91,6,92,2,38,1,118,0,0,1,6,6,32,15,0,0,11,182,2,24,7,1,1,188,86,0,43,52,0,255,255,0,55,254,32,4,91,5,226,2,38,1,118,0,0,1,6,6,27,17,0,0,13,183,3,2,20,7,1,1,178,86,0,43,52,52,0,255,255,0,55,254,32,4,91,4,36,2,38,1,118,0,0,1,7,6,41,1,89,0,0,0,11,182,2,20,0,2,0,60,86,0,43,52,0,255,255,0,55,254,32,4,91,6,92,2,38,1,118,0,0,1,6,6,29,60,0,0,11,182,2,20,7,1,1,188,86,0,43,52,0,255,255,0,55,254,32,4,91,6,156,2,38,1,118,0,0,1,6,6,38,35,0,0,13,183,3,2,20,7,1,1,188,86,0,43,52,52,0,255,255,0,55,254,32,4,91,5,156,2,38,1,118,0,0,1,6,6,37,15,0,0,11,182,2,20,15,1,1,188,86,0,43,52,0,255,255,0,55,254,32,4,91,6,64,2,38,1,118,0,0,1,6,6,36,25,0,0,11,182,2,20,15,1,1,196,86,0,43,52,0,0,3,0,160,0,0,4,12,4,36,0,3,0,7,0,11,0,33,64,18,0,5,4,2,3,9,8,106,9,6,114,1,4,5,106,4,10,114,0,43,43,50,43,43,50,57,17,18,57,48,49,37,39,1,23,1,53,33,21,1,53,33,21,1,50,146,2,198,146,252,168,3,108,252,148,3,88,54,122,3,58,118,252,140,176,176,3,116,176,176,255,255,0,160,0,0,4,12,6,92,2,38,1,127,0,0,1,6,6,30,30,0,0,11,182,3,12,9,1,1,188,86,0,43,52,0,255,255,0,160,0,0,4,12,6,92,2,38,1,127,0,0,1,6,6,33,0,0,0,11,182,3,12,9,1,1,188,86,0,43,52,0,255,255,0,160,0,0,4,12,5,226,2,38,1,127,0,0,1,6,6,28,254,0,0,11,182,3,12,9,1,1,178,86,0,43,52,0,0,3,0,96,255,236,5,4,6,32,0,25,0,30,0,34,0,46,64,30,30,10,114,32,34,106,28,32,105,28,0,114,23,21,11,9,4,0,6,13,106,6,7,114,0,18,106,0,11,114,0,43,43,43,43,18,23,57,43,43,43,43,48,49,5,34,2,17,16,18,51,50,22,23,51,3,16,35,34,6,21,16,51,50,53,53,19,35,6,6,55,39,17,51,17,19,19,51,3,1,222,192,190,191,193,110,118,12,82,62,210,112,112,226,208,72,92,10,129,181,22,212,90,50,192,90,20,1,13,1,15,1,25,1,23,105,107,254,240,1,48,189,191,254,152,180,116,254,220,91,93,10,208,5,22,250,36,4,164,1,124,254,132,0,0,5,0,242,254,32,4,117,6,92,0,12,0,16,0,20,0,24,0,28,0,39,64,22,26,21,22,106,25,21,6,17,13,18,14,6,114,13,10,114,0,1,106,0,15,114,0,43,43,43,43,50,18,57,57,206,50,43,50,48,49,19,39,55,54,54,53,17,51,17,20,6,6,7,3,17,51,17,1,17,51,17,1,19,51,3,33,19,51,3,252,10,200,161,145,212,112,238,188,178,212,1,36,212,253,67,170,212,190,1,52,170,212,190,254,32,188,18,14,159,163,1,66,254,222,189,238,121,14,1,212,4,36,251,220,1,94,2,198,253,58,3,130,1,124,254,132,1,124,254,132,0,255,255,0,136,255,236,4,73,6,112,2,38,0,222,0,0,1,6,6,73,80,0,0,11,182,1,26,6,1,1,168,86,0,43,52,0,255,255,0,168,0,0,4,8,6,112,2,38,1,35,0,0,1,6,6,73,20,0,0,11,182,2,21,17,1,1,188,86,0,43,52,0,255,255,0,136,255,236,4,40,6,112,2,38,1,43,0,0,1,6,6,73,30,0,0,11,182,2,24,6,1,1,168,86,0,43,52,0,255,255,0,156,255,236,4,20,6,112,2,38,1,77,0,0,1,6,6,73,60,0,0,11,182,1,40,20,1,1,168,86,0,43,52,0,255,255,0,160,0,0,4,12,6,112,2,38,1,127,0,0,1,6,6,73,30,0,0,11,182,3,12,9,1,1,188,86,0,43,52,0,255,255,0,121,0,188,4,55,4,164,2,6,3,69,0,0,0,10,246,230,0,0,4,106,4,36,0,9,0,19,0,27,0,35,0,43,0,51,0,59,0,67,0,75,0,83,0,137,64,76,19,20,20,35,35,36,36,51,51,52,52,67,67,68,68,83,83,9,26,14,30,30,42,46,46,58,62,62,74,78,78,9,6,106,80,3,2,106,38,31,34,105,40,31,70,63,66,105,72,63,54,47,50,105,56,47,22,15,18,105,24,15,15,47,63,31,3,5,8,9,10,114,11,8,6,114,0,43,50,43,17,23,57,17,51,43,50,17,51,43,50,17,51,43,50,17,51,43,50,43,51,43,50,17,51,51,17,51,51,17,51,51,17,51,51,17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,51,17,51,48,49,33,3,35,39,51,19,51,19,51,3,33,3,51,19,51,19,51,7,35,3,33,3,35,39,51,19,51,21,35,53,51,19,51,7,35,3,33,3,35,39,51,19,51,21,35,53,51,19,51,7,35,3,33,3,35,39,51,19,51,21,35,53,51,19,51,7,35,3,33,3,35,39,51,19,51,21,35,53,51,19,51,7,35,3,2,218,158,50,66,220,154,20,80,200,110,243,88,110,200,80,20,154,220,86,30,158,1,62,148,50,66,220,164,20,20,20,174,220,86,30,158,1,62,148,50,66,220,164,20,20,20,184,220,86,30,168,1,92,168,50,66,220,184,20,20,20,164,220,86,30,148,1,62,158,50,66,220,174,20,20,20,164,220,86,30,148,2,230,198,252,244,3,132,251,220,4,36,252,124,3,12,198,253,26,2,230,198,252,244,160,160,3,12,198,253,26,2,230,198,252,244,160,160,3,12,198,253,26,2,230,198,252,244,160,160,3,12,198,253,26,2,230,198,252,244,160,160,3,12,198,253,26,0,0,2,1,28,3,5,3,226,5,160,0,15,0,42,0,35,64,21,33,39,36,29,22,5,8,16,15,13,106,15,8,16,105,8,7,106,8,17,114,0,43,43,43,50,43,17,18,23,57,48,49,1,39,7,53,52,38,35,35,55,23,22,22,21,21,23,21,5,34,38,53,52,54,51,50,22,23,7,38,38,35,34,21,20,51,50,54,53,53,23,35,55,6,6,2,233,8,16,88,87,185,11,162,180,173,107,254,19,103,114,149,136,67,105,40,26,46,90,46,114,86,88,88,36,61,20,25,92,3,11,185,1,215,56,60,146,1,1,143,136,249,13,112,12,101,92,104,113,12,14,108,8,2,76,74,84,46,39,164,7,73,75,0,2,1,2,3,2,3,174,5,160,0,11,0,23,0,21,64,12,0,12,106,6,0,105,6,18,106,6,17,114,0,43,43,43,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,2,88,154,188,188,154,155,187,187,155,71,86,86,71,71,86,86,3,2,184,151,152,183,183,152,151,184,150,102,83,83,102,102,83,83,102,0,0,2,1,33,3,22,3,130,5,160,0,15,0,20,0,27,64,15,17,16,114,8,6,20,11,0,105,11,3,106,11,17,114,0,43,43,43,50,57,57,43,48,49,1,17,52,35,34,6,21,39,51,54,54,51,50,22,21,17,33,17,51,23,17,2,200,115,60,60,37,48,5,84,71,119,131,253,159,176,12,3,22,1,135,125,71,71,149,61,66,123,111,254,96,2,126,135,254,9,0,255,255,0,45,0,0,4,131,5,140,2,6,0,1,0,0,0,3,0,160,0,0,4,96,5,140,0,17,0,21,0,25,0,35,64,20,9,10,106,9,9,18,23,19,22,106,19,2,114,0,1,106,0,18,8,114,0,43,50,43,43,43,51,18,57,47,43,48,49,33,53,33,50,54,53,52,38,35,33,39,33,50,22,21,20,6,35,33,17,51,17,3,53,33,21,1,90,1,30,133,145,145,133,254,230,24,1,108,205,225,225,205,253,238,200,158,3,46,190,132,121,111,122,190,221,202,211,232,5,140,250,116,4,206,190,190,255,255,0,160,0,0,4,110,5,140,2,6,0,27,0,0,0,2,0,180,0,0,4,66,5,140,0,3,0,7,0,19,64,10,5,4,106,5,1,2,114,0,8,114,0,43,43,50,43,48,49,51,17,51,17,3,53,33,21,180,200,200,3,142,5,140,250,116,4,206,190,190,255,255,0,180,0,0,4,66,7,38,2,38,1,146,0,0,1,6,6,63,20,0,0,11,182,2,8,1,1,1,160,86,0,43,52,0,0,3,0,180,0,0,4,86,6,194,0,3,0,7,0,11,0,23,64,13,8,5,4,106,5,9,105,5,2,114,0,8,114,0,43,43,43,43,57,48,49,51,17,51,17,3,53,33,21,39,17,51,17,180,200,200,3,162,200,200,5,140,250,116,4,206,190,190,40,1,204,254,52,0,0,6,0,30,254,222,4,146,5,140,0,13,0,17,0,21,0,25,0,29,0,33,0,40,64,23,1,0,19,15,4,32,33,106,18,14,96,22,32,8,114,27,7,26,106,23,7,2,114,0,43,50,43,51,43,50,26,206,50,43,23,57,48,49,37,39,62,3,53,17,51,17,20,14,2,1,17,51,17,33,17,51,17,1,17,51,17,1,53,33,21,19,21,33,53,1,40,180,30,45,30,16,185,15,31,47,254,213,200,2,228,200,254,186,200,253,65,2,108,209,251,140,155,25,43,161,198,203,84,2,39,253,223,87,208,206,171,254,19,1,164,254,92,1,164,254,92,1,34,5,140,250,116,4,206,190,190,251,240,190,190,0,255,255,0,160,0,0,4,76,5,140,2,6,0,38,0,0,255,255,0,160,0,0,4,76,7,38,2,38,1,150,0,0,1,6,6,62,30,0,0,11,182,4,16,1,1,1,160,86,0,43,52,0,255,255,0,160,0,0,4,76,7,56,2,38,1,150,0,0,1,6,6,60,30,0,0,13,183,5,4,16,1,1,1,160,86,0,43,52,52,0,0,7,0,27,255,251,4,149,5,145,0,19,0,39,0,43,0,63,0,67,0,87,0,91,0,80,64,46,54,53,106,54,65,77,30,44,0,4,89,76,88,88,43,1,89,89,63,43,42,106,31,43,43,65,64,10,11,106,10,65,2,114,87,86,106,87,64,20,21,106,20,64,8,114,0,43,50,43,17,51,43,43,50,43,17,18,57,47,51,43,50,50,17,51,17,51,17,51,18,23,57,17,51,43,48,49,1,55,50,54,54,53,17,52,54,51,51,21,35,34,6,21,17,20,6,7,1,53,51,50,54,53,17,52,54,55,55,7,34,6,6,21,17,20,6,35,19,53,51,21,39,39,38,38,53,17,52,38,35,35,53,51,50,22,21,17,20,22,22,51,19,17,51,17,5,34,38,53,17,52,38,38,35,39,23,22,22,21,17,20,22,51,51,21,1,53,51,21,3,15,48,39,33,6,89,85,90,23,19,30,85,69,252,104,23,19,30,85,69,164,48,39,32,7,88,86,162,236,98,164,69,85,30,19,23,90,86,88,7,32,39,146,170,1,142,85,89,6,33,39,48,164,69,85,30,19,23,254,24,226,2,212,81,15,40,36,1,76,104,93,190,30,34,254,216,64,72,5,253,29,190,30,34,1,40,65,72,4,10,81,15,39,37,254,180,103,94,2,108,190,190,109,10,5,72,64,1,40,34,30,190,93,104,254,180,36,40,15,252,219,5,140,250,116,5,94,103,1,76,37,39,15,81,10,4,72,65,254,216,34,30,190,2,108,190,190,0,1,0,64,255,236,4,48,5,160,0,46,0,37,64,20,36,39,15,2,3,14,14,0,30,21,106,30,3,114,0,7,106,0,9,114,0,43,43,43,43,18,57,47,57,57,205,57,57,48,49,5,32,39,55,30,2,51,50,54,53,52,38,35,35,39,54,54,53,52,38,35,34,6,6,7,39,62,2,51,32,4,21,20,6,7,55,21,39,30,2,21,20,6,6,2,54,254,204,194,144,63,108,116,76,137,156,182,148,150,22,242,208,159,183,40,86,88,43,25,31,89,108,57,1,31,1,0,168,194,17,17,109,191,118,123,227,20,171,141,46,56,26,133,118,114,123,188,8,104,106,83,114,12,18,10,184,10,18,13,192,155,127,161,42,56,117,54,2,83,160,117,125,187,102,0,0,3,0,148,0,0,4,28,5,140,0,7,0,11,0,15,0,29,64,14,14,4,4,1,6,12,9,2,114,12,7,8,8,114,0,43,50,50,43,17,57,57,50,17,51,48,49,33,17,51,1,51,17,35,1,35,17,51,17,33,17,51,17,1,2,102,1,224,60,60,254,32,212,192,2,8,192,1,94,4,46,254,162,251,210,5,140,250,116,5,140,250,116,0,255,255,0,148,0,0,4,28,7,68,2,38,1,155,0,0,1,6,6,80,0,0,0,11,182,3,16,13,1,1,150,86,0,43,52,0,255,255,0,148,0,0,4,28,7,38,2,38,1,155,0,0,1,6,6,62,0,0,0,11,182,3,16,9,1,1,160,86,0,43,52,0,0,4,0,140,255,251,4,106,5,145,0,19,0,23,0,27,0,47,0,49,64,27,19,38,1,36,36,1,24,25,106,24,24,20,21,10,11,106,10,21,2,114,47,46,106,47,20,8,114,0,43,50,43,43,50,43,17,18,57,47,43,50,51,17,18,57,57,48,49,1,55,50,54,55,55,62,2,51,51,21,35,34,6,7,7,6,6,35,1,17,51,17,3,53,33,21,1,34,38,38,39,39,38,38,35,39,51,50,22,23,23,22,22,51,51,21,2,23,11,98,74,19,38,21,58,102,87,68,48,46,36,14,53,22,93,121,253,230,200,45,1,77,1,169,87,102,58,21,38,18,78,105,11,143,128,105,22,53,14,36,46,48,2,212,81,79,90,184,101,116,50,190,48,56,213,88,106,253,44,5,140,250,116,2,103,190,190,253,148,50,117,100,184,89,80,81,106,88,213,56,48,190,255,255,0,140,255,251,4,106,7,38,2,38,1,158,0,0,1,6,6,63,0,0,0,11,182,4,48,21,1,1,160,86,0,43,52,0,0,3,0,37,0,0,4,36,5,140,0,12,0,16,0,20,0,27,64,15,0,1,106,0,16,8,114,18,17,106,18,15,6,2,114,0,43,50,50,43,43,50,43,48,49,55,53,50,54,54,53,17,51,17,20,14,2,5,17,51,17,1,53,33,21,37,104,91,22,185,23,78,162,2,172,200,253,50,2,169,1,190,103,190,130,3,38,252,225,144,229,161,86,1,5,140,250,116,4,206,190,190,255,255,0,128,0,0,4,48,5,140,2,6,0,93,0,0,255,255,0,140,0,0,4,36,5,140,2,6,0,66,0,0,255,255,0,76,255,236,4,100,5,160,2,6,0,101,0,0,0,3,0,140,0,0,4,36,5,140,0,3,0,7,0,11,0,27,64,14,0,4,1,5,9,8,106,9,5,2,114,4,8,114,0,43,43,50,43,17,51,17,51,48,49,33,17,51,17,33,17,51,17,3,53,33,21,3,92,200,252,104,200,158,3,73,5,140,250,116,5,140,250,116,4,206,190,190,255,255,0,160,0,0,4,96,5,140,2,6,0,128,0,0,255,255,0,96,255,236,4,125,5,160,2,6,0,28,0,0,255,255,0,80,0,0,4,96,5,140,2,6,0,143,0,0,0,2,0,96,0,0,4,152,5,140,0,11,0,16,0,27,64,14,16,12,7,0,7,13,2,114,0,1,106,0,8,114,0,43,43,43,50,17,18,57,57,48,49,51,53,50,54,54,55,1,51,1,14,2,55,1,51,1,51,203,140,179,111,38,1,29,220,254,163,52,149,237,189,254,30,220,1,95,34,190,50,122,108,3,182,251,220,138,157,65,200,4,196,252,114,0,255,255,0,96,0,0,4,152,7,68,2,38,1,168,0,0,1,6,6,80,50,0,0,11,182,2,17,6,1,1,150,86,0,43,52,0,0,3,0,66,255,236,4,110,5,180,0,7,0,19,0,27,0,41,64,25,11,16,15,12,4,4,24,105,9,18,17,10,4,0,20,105,4,0,8,13,3,114,8,9,114,0,43,43,18,57,57,43,23,57,43,23,57,48,49,37,32,17,16,33,32,17,16,5,53,55,17,39,53,51,21,7,17,23,21,3,32,17,16,33,32,17,16,2,88,253,234,2,22,2,22,253,148,10,10,170,10,10,84,1,78,254,178,254,178,140,2,58,2,78,253,178,253,198,160,228,63,3,150,59,212,212,59,252,106,63,228,1,68,1,150,1,170,254,86,254,106,0,255,255,0,66,0,0,4,112,5,140,2,6,0,174,0,0,0,2,0,140,0,0,4,36,5,140,0,11,0,15,0,27,64,14,14,4,0,9,106,0,0,15,4,2,114,15,8,114,0,43,43,17,57,47,43,17,51,48,49,1,34,38,53,17,51,17,20,22,51,33,21,3,17,51,17,2,68,232,208,200,114,126,1,42,18,200,2,33,227,253,1,139,254,117,152,138,190,253,223,5,140,250,116,0,0,4,0,140,254,222,4,136,5,140,0,3,0,7,0,11,0,15,0,31,64,16,1,9,2,114,13,4,5,106,0,4,4,12,96,8,8,114,0,43,26,206,51,17,51,43,50,43,50,48,49,33,17,51,17,33,53,33,21,33,17,51,17,1,17,51,17,3,82,200,252,156,3,208,252,6,200,2,108,200,5,140,250,116,190,190,5,140,250,116,254,222,1,224,254,32,0,4,0,128,0,0,4,48,5,140,0,3,0,7,0,11,0,15,0,37,64,19,12,8,13,9,0,8,1,9,4,5,106,4,8,9,2,114,8,8,114,0,43,43,17,51,43,17,51,17,51,17,51,17,51,48,49,33,17,51,17,33,53,33,21,33,17,51,17,51,17,51,17,3,104,200,252,122,3,97,252,117,200,187,170,5,140,250,116,180,180,5,140,250,116,5,140,250,116,0,0,5,0,128,254,222,4,136,5,140,0,3,0,7,0,11,0,15,0,19,0,39,64,20,1,17,17,9,2,114,0,16,16,8,14,4,5,106,4,12,96,8,8,114,0,43,26,206,51,43,50,17,51,17,51,43,50,17,51,48,49,33,17,51,17,33,53,33,21,33,17,51,17,1,17,51,17,1,17,51,17,3,104,200,252,122,3,97,252,117,200,2,120,200,253,123,170,5,140,250,116,180,180,5,140,250,116,254,222,1,214,254,42,1,34,5,140,250,116,0,0,4,0,140,254,222,4,36,5,140,0,3,0,7,0,11,0,15,0,33,64,18,1,13,2,114,4,96,12,8,114,6,0,8,9,106,0,8,8,114,0,43,50,43,17,57,43,26,206,43,50,48,49,33,17,51,17,1,17,51,17,1,53,33,21,33,17,51,17,3,92,200,253,208,200,253,208,3,152,252,104,200,5,140,250,116,254,222,1,164,254,92,1,34,190,190,5,140,250,116,0,2,0,160,0,0,4,110,5,140,0,19,0,23,0,31,64,17,0,1,106,0,20,10,9,106,10,10,20,21,2,114,20,8,114,0,43,43,17,57,47,43,17,51,43,48,49,33,53,33,50,54,53,52,38,35,33,53,33,50,22,22,21,20,6,6,35,33,17,51,17,1,90,1,44,126,152,152,126,254,192,1,122,130,193,107,107,193,130,253,224,200,190,147,121,122,146,190,114,206,138,138,206,114,5,140,250,116,0,3,0,0,0,0,4,110,5,140,0,19,0,23,0,27,0,39,64,22,22,25,0,1,106,0,20,10,9,106,10,10,20,25,24,106,25,2,114,20,8,114,0,43,43,43,18,57,47,43,17,51,43,17,51,48,49,33,53,51,50,54,53,52,38,35,35,53,33,50,22,22,21,20,6,6,35,33,17,51,17,1,53,33,21,1,180,210,126,152,152,126,230,1,32,130,193,107,107,193,130,254,58,200,254,62,1,68,190,147,121,122,146,190,114,206,138,138,206,114,5,140,250,116,4,206,190,190,0,3,0,128,0,0,4,48,5,140,0,19,0,23,0,27,0,39,64,21,24,20,25,21,0,1,106,0,20,10,9,106,10,10,20,21,2,114,20,8,114,0,43,43,17,57,47,43,17,51,43,17,51,17,51,48,49,33,53,51,50,54,53,52,38,35,35,53,51,50,22,22,21,20,6,6,35,33,17,51,17,33,17,51,17,1,58,82,76,92,92,76,102,160,91,134,75,75,134,91,254,186,200,2,42,190,190,147,121,122,146,190,114,206,138,138,206,114,5,140,250,116,5,140,250,116,0,4,0,53,0,0,4,100,5,140,0,10,0,14,0,34,0,38,0,45,64,26,36,35,106,36,5,25,24,106,25,25,0,12,5,2,114,15,16,106,15,11,0,1,106,0,8,114,0,43,43,51,51,43,43,50,17,57,47,43,17,51,43,48,49,51,53,50,54,53,17,51,17,20,6,6,33,17,51,17,35,53,51,50,54,53,52,38,35,35,53,51,50,22,22,21,20,6,6,35,1,53,33,21,53,96,71,160,60,142,1,131,180,24,85,58,70,70,58,105,163,79,116,65,65,116,79,253,166,1,179,190,109,146,3,207,252,56,173,198,81,5,140,250,116,190,147,121,122,146,190,114,206,138,138,206,114,4,206,190,190,0,0,4,0,128,0,0,4,100,5,140,0,19,0,23,0,27,0,33,0,51,64,28,28,20,29,21,0,1,106,0,20,24,25,106,24,24,20,21,10,9,106,10,10,20,21,2,114,20,8,114,0,43,43,17,57,47,43,17,18,57,47,43,17,51,43,17,51,17,51,48,49,33,53,51,50,54,53,52,38,35,35,53,51,50,22,22,21,20,6,6,35,33,17,51,17,3,53,33,21,3,17,51,17,21,17,2,208,76,62,76,76,62,76,134,82,121,67,67,121,82,253,42,200,158,2,19,157,200,190,147,121,122,146,190,114,206,138,138,206,114,5,140,250,116,2,100,190,190,253,156,5,140,253,175,20,252,217,0,255,255,0,129,255,236,4,37,5,160,2,6,0,135,0,0,0,2,0,96,255,236,4,125,5,160,0,21,0,25,0,37,64,21,22,23,106,9,8,5,22,22,0,5,12,106,5,3,114,0,17,106,0,9,114,0,43,43,43,43,18,57,47,18,57,57,43,48,49,5,32,17,16,0,33,50,22,23,7,38,38,35,34,2,17,16,33,50,55,23,6,1,53,33,21,2,246,253,106,1,78,1,48,147,218,50,148,45,139,81,198,238,1,236,145,141,46,174,253,0,2,168,20,2,220,1,91,1,125,93,86,147,68,74,254,234,255,0,253,210,60,176,68,2,140,190,190,0,0,2,0,17,255,236,4,80,5,160,0,25,0,29,0,35,64,20,26,27,106,3,4,26,26,0,20,14,106,20,3,114,0,8,106,0,9,114,0,43,43,43,43,18,57,47,57,57,43,48,49,5,34,38,39,55,30,2,51,50,18,53,16,2,35,34,6,7,39,54,51,32,0,17,16,0,1,53,33,21,1,220,135,235,89,144,59,99,103,65,194,216,240,236,76,142,71,46,175,194,1,64,1,73,254,198,254,55,2,173,20,86,85,141,49,56,23,1,32,253,1,7,1,32,25,25,176,58,254,138,254,159,254,169,254,122,2,140,190,190,255,255,0,168,0,0,4,8,5,140,2,6,0,70,0,0,255,255,0,168,0,0,4,8,7,56,2,38,0,70,0,0,1,6,6,60,0,0,0,13,183,4,3,12,1,1,1,160,86,0,43,52,52,0,255,255,0,96,255,236,4,48,5,140,2,6,0,83,0,0,0,3,0,20,0,0,4,38,5,140,0,11,0,15,0,19,0,35,64,19,14,17,11,12,5,6,106,5,5,12,17,16,106,17,2,114,12,8,114,0,43,43,43,18,57,47,43,17,51,17,51,48,49,33,17,52,38,35,35,53,51,50,22,21,17,33,17,51,17,1,53,33,21,3,94,100,112,228,228,217,195,252,202,200,254,92,3,52,1,134,152,138,190,227,253,254,122,5,140,250,116,4,206,190,190,0,0,4,0,80,255,236,4,100,5,160,0,11,0,15,0,19,0,31,0,39,64,24,0,20,106,16,17,106,16,16,0,6,26,106,13,2,114,12,8,114,6,3,114,0,9,114,0,43,43,43,43,43,18,57,47,43,43,48,49,5,34,2,17,16,18,51,50,18,17,16,2,37,17,51,17,3,53,33,21,1,50,54,17,16,2,35,34,2,17,16,22,3,7,184,165,165,184,184,165,165,252,145,190,108,1,75,1,16,84,75,75,84,84,75,75,20,1,85,1,123,1,133,1,95,254,161,254,123,254,133,254,171,20,5,140,250,116,2,100,190,190,254,64,254,1,26,1,37,1,7,254,249,254,219,254,230,254,0,0,4,0,72,255,251,4,38,5,140,0,20,0,41,0,45,0,49,0,45,64,25,0,31,18,42,43,105,33,42,42,49,9,21,22,106,21,49,8,114,48,9,12,106,9,2,114,0,43,43,51,43,50,43,17,18,57,47,51,43,50,57,57,48,49,1,34,46,3,53,52,54,51,33,7,33,34,6,21,20,22,51,33,21,1,53,51,50,54,55,55,62,2,51,51,21,34,6,6,7,7,6,6,35,1,53,33,21,3,17,51,17,2,52,39,115,123,108,67,252,220,1,56,24,254,224,119,143,143,119,1,36,252,220,33,39,62,19,36,21,63,81,49,191,83,88,40,12,51,23,115,139,1,124,1,147,36,200,2,116,7,33,78,140,110,203,221,190,125,125,121,139,92,253,135,190,39,71,130,75,77,27,74,27,57,45,204,93,109,2,23,190,190,253,238,5,140,250,116,0,0,3,0,20,0,0,4,88,5,140,0,15,0,19,0,23,0,35,64,20,8,9,106,8,8,16,21,20,106,18,21,2,114,0,1,106,0,16,8,114,0,43,50,43,43,50,43,18,57,47,43,48,49,33,53,50,54,53,52,38,35,33,53,33,50,22,21,20,6,33,17,51,17,1,53,33,21,2,130,136,134,126,126,254,225,1,31,227,225,234,253,160,200,254,62,3,52,190,128,127,125,124,190,218,221,223,222,5,130,250,126,4,206,190,190,0,0,3,255,252,0,0,4,66,5,140,0,3,0,7,0,11,0,31,64,17,0,1,106,0,0,4,5,9,8,106,9,5,2,114,4,8,114,0,43,43,50,43,17,18,57,47,43,48,49,3,53,33,21,1,17,51,17,3,53,33,21,4,2,200,253,240,200,200,3,142,2,73,190,190,253,183,5,140,250,116,4,206,190,190,0,8,0,27,254,222,4,176,5,145,0,19,0,39,0,43,0,47,0,67,0,71,0,91,0,95,0,82,64,46,58,57,106,58,69,80,92,92,44,1,93,93,48,0,81,30,4,67,44,45,105,31,44,44,68,69,10,11,106,10,69,2,114,22,41,41,72,89,105,72,40,96,39,68,8,114,0,43,50,26,206,51,43,50,17,51,43,50,43,17,18,57,47,51,43,50,23,57,50,17,51,17,51,17,51,17,51,43,48,49,1,55,50,54,54,53,17,52,54,51,51,21,35,34,6,21,17,20,6,7,1,53,51,50,54,53,17,52,54,55,55,7,34,6,6,21,17,20,6,35,1,17,51,17,1,53,51,21,39,39,38,38,53,17,52,38,35,35,53,51,50,22,21,17,20,22,22,51,19,17,51,17,5,34,38,53,17,52,38,38,35,39,23,22,22,21,17,20,22,51,51,21,1,53,51,21,2,191,68,29,24,5,89,85,90,23,19,30,85,69,252,184,23,19,30,85,69,164,68,29,24,5,88,86,3,125,190,252,111,188,58,164,69,85,30,19,23,90,86,88,5,24,29,126,170,1,102,85,89,5,24,29,68,164,69,85,30,19,23,254,64,178,2,212,81,15,40,36,1,76,104,93,190,30,34,254,216,64,72,5,253,29,190,30,34,1,40,65,72,4,10,81,15,39,37,254,180,103,94,254,227,1,224,254,32,3,137,190,190,109,10,5,72,64,1,40,34,30,190,93,104,254,180,36,40,15,252,219,5,140,250,116,5,94,103,1,76,37,39,15,81,10,4,72,65,254,221,34,30,195,2,108,190,190,0,5,0,140,254,222,4,136,5,145,0,19,0,23,0,27,0,31,0,51,0,45,64,24,0,41,40,29,28,106,1,29,29,20,10,21,2,114,25,32,49,105,32,24,96,20,8,114,0,43,26,206,51,43,50,43,50,17,57,47,51,43,50,57,57,48,49,1,55,50,54,55,55,62,2,51,51,21,35,34,6,7,7,6,6,35,1,17,51,17,1,17,51,17,1,53,33,21,1,34,38,38,39,39,38,38,35,39,51,50,22,23,23,22,22,51,51,21,2,23,11,98,74,19,38,21,58,102,87,68,48,46,36,14,53,22,93,121,253,230,200,2,118,190,252,159,1,77,1,169,87,102,58,21,38,18,78,105,11,143,128,105,22,53,14,36,46,48,2,212,81,79,90,184,101,116,50,190,48,56,213,88,106,253,44,5,140,250,116,254,222,1,219,254,37,3,137,190,190,253,148,50,117,100,184,89,80,81,106,88,213,56,48,190,0,4,0,140,254,222,4,136,5,140,0,3,0,7,0,11,0,15,0,35,64,19,13,12,106,13,13,8,6,9,2,114,4,1,106,4,0,96,8,8,114,0,43,26,206,51,43,43,50,17,57,47,43,48,49,1,17,51,17,1,17,51,17,33,17,51,17,3,53,33,21,3,202,190,254,212,200,252,104,200,158,3,73,254,222,1,224,254,32,1,34,5,140,250,116,5,140,250,116,2,100,190,190,0,255,255,0,25,0,0,4,151,5,140,2,6,0,175,0,0,0,3,0,25,0,0,4,151,5,140,0,3,0,11,0,15,0,31,64,17,0,1,106,7,13,4,3,0,0,5,12,8,114,10,5,2,114,0,43,50,43,18,57,47,23,57,43,48,49,1,53,33,21,37,1,51,1,51,1,51,1,3,17,51,17,1,1,2,177,254,81,254,22,220,1,90,18,1,90,220,254,22,185,200,1,39,190,190,179,3,178,253,58,2,198,252,78,254,38,2,188,253,68,0,0,3,0,66,254,222,4,136,5,140,0,3,0,9,0,15,0,38,64,21,11,8,14,5,4,10,13,4,1,106,0,4,96,4,10,8,114,13,6,2,114,0,43,50,43,50,26,16,206,43,17,18,23,57,48,49,1,17,51,17,3,1,1,51,1,1,33,1,1,51,1,1,3,202,190,254,254,148,254,36,230,1,122,1,206,251,210,1,206,1,122,230,254,36,254,148,254,222,1,224,254,32,1,34,2,124,3,16,253,94,253,22,2,234,2,162,252,240,253,132,0,3,0,140,254,222,4,136,5,140,0,3,0,15,0,19,0,35,64,19,4,13,106,4,4,8,0,16,96,16,1,106,16,8,114,18,8,2,114,0,43,50,43,43,26,16,206,18,57,47,43,48,49,1,17,51,17,1,34,38,53,17,51,17,20,22,51,33,21,3,17,51,17,3,202,190,253,188,232,208,200,114,126,1,42,18,200,254,222,1,224,254,32,3,67,227,253,1,139,254,117,152,138,190,253,223,5,140,250,116,0,2,0,140,0,0,4,36,5,140,0,11,0,15,0,27,64,14,11,12,5,6,106,5,5,12,13,2,114,12,8,114,0,43,43,17,57,47,43,17,51,48,49,33,17,52,38,35,33,53,33,50,22,21,17,33,17,51,17,3,92,114,126,254,214,1,42,232,208,252,104,200,1,139,152,138,190,227,253,254,117,5,140,250,116,0,255,255,0,168,0,0,4,8,5,140,2,6,0,70,0,0,255,255,0,76,255,236,4,100,5,160,2,6,0,142,0,0,255,255,0,148,0,0,4,28,6,232,2,38,1,155,0,0,1,6,6,70,0,0,0,11,182,3,16,9,1,1,160,86,0,43,52,0,0,3,0,76,255,236,4,100,5,160,0,3,0,11,0,19,0,31,64,18,4,12,106,0,1,106,0,0,4,8,16,106,8,3,114,4,9,114,0,43,43,43,18,57,47,43,43,48,49,19,53,33,21,1,32,17,16,33,32,17,16,37,32,17,16,33,32,17,16,182,3,73,254,89,253,244,2,12,2,12,253,244,1,58,254,198,254,198,2,100,190,190,253,136,2,208,2,228,253,28,253,48,184,2,24,2,44,253,212,253,232,0,255,255,0,96,0,0,4,152,6,232,2,38,1,168,0,0,1,6,6,70,50,0,0,11,182,2,17,13,1,1,160,86,0,43,52,0,0,4,0,30,254,222,4,146,5,140,0,7,0,11,0,15,0,19,0,33,64,17,6,0,1,2,114,9,17,0,13,105,16,11,96,4,0,8,114,0,43,50,26,205,50,43,57,57,43,18,57,48,49,51,1,33,1,35,1,35,1,1,17,51,17,3,53,33,21,3,17,51,17,102,1,94,1,34,1,94,210,254,236,18,254,236,254,230,200,200,4,116,200,200,5,140,250,116,4,224,251,32,254,222,1,164,254,92,1,34,190,190,254,222,1,164,254,92,0,1,0,45,0,0,4,131,5,140,0,7,0,19,64,9,6,4,1,2,114,4,0,8,114,0,43,50,43,17,57,48,49,51,1,33,1,35,1,35,1,45,1,154,1,34,1,154,220,254,186,18,254,186,5,140,250,116,4,224,251,32,0,3,0,66,255,106,4,110,6,34,0,11,0,23,0,35,0,41,64,25,15,20,19,16,4,6,30,105,17,6,3,114,14,21,13,22,4,0,24,105,12,96,0,9,114,0,43,26,205,43,23,57,43,205,43,23,57,48,49,5,32,2,17,16,18,33,32,18,17,16,2,5,53,55,17,39,53,51,21,7,17,23,21,3,50,18,17,16,2,35,34,2,17,16,18,2,88,254,231,253,253,1,25,1,25,253,253,254,135,10,10,190,10,10,94,170,154,154,170,170,154,154,20,1,85,1,123,1,133,1,95,254,161,254,123,254,133,254,171,130,184,70,4,211,65,166,166,65,251,45,70,184,1,38,1,8,1,36,1,47,1,17,254,239,254,209,254,220,254,248,255,255,0,96,255,236,4,134,4,46,2,6,0,195,0,0,0,2,0,122,255,236,4,60,5,145,0,25,0,36,0,33,64,19,20,32,106,16,20,20,0,9,10,106,9,3,114,0,26,106,0,11,114,0,43,43,43,43,18,57,47,57,43,48,49,5,34,0,17,53,52,18,54,55,37,23,5,14,2,21,21,51,54,54,51,50,22,21,20,2,39,50,54,53,52,38,35,34,6,21,16,2,106,239,254,255,113,240,188,1,113,10,254,188,145,167,71,23,31,184,133,180,198,244,220,119,131,133,121,132,144,20,1,61,1,33,118,200,1,13,157,32,63,190,55,24,87,147,116,98,111,121,246,224,233,254,255,184,160,146,137,149,138,128,254,186,0,4,0,168,0,0,4,60,4,36,0,17,0,21,0,25,0,43,0,44,64,26,36,35,106,36,19,22,10,26,23,4,9,27,105,9,9,18,19,6,114,0,1,106,0,18,10,114,0,43,50,43,43,17,57,47,43,23,57,17,51,43,48,49,33,53,33,50,54,53,52,38,35,33,53,33,50,22,21,20,6,35,33,17,51,17,3,53,33,21,37,53,33,50,54,53,52,38,35,33,53,33,50,22,21,20,6,35,1,110,1,84,74,82,89,81,254,166,1,140,163,179,168,152,253,172,212,82,1,200,254,104,1,64,74,82,89,81,254,226,1,80,163,179,168,152,190,73,67,67,73,71,136,125,133,147,4,36,251,220,1,242,98,98,61,71,63,57,57,63,190,146,134,106,115,0,0,2,1,60,0,0,4,46,4,36,0,3,0,7,0,19,64,10,5,4,106,5,1,6,114,0,10,114,0,43,43,50,43,48,49,33,17,51,17,3,53,33,21,1,60,212,150,2,180,4,36,251,220,3,102,190,190,0,255,255,1,60,0,0,4,46,6,92,2,38,1,212,0,0,1,6,6,30,120,0,0,11,182,2,8,1,1,1,188,86,0,43,52,0,0,3,1,60,0,0,4,66,5,40,0,3,0,7,0,11,0,25,64,13,8,5,4,106,5,9,96,1,6,114,0,10,114,0,43,43,26,206,51,43,50,48,49,33,17,51,17,3,53,33,21,35,17,51,17,1,60,212,150,2,180,180,200,4,36,251,220,3,102,190,190,1,194,254,62,0,0,6,0,40,254,242,4,106,4,36,0,9,0,13,0,17,0,21,0,25,0,29,0,40,64,23,11,15,0,1,4,28,29,106,14,10,96,18,28,10,114,23,22,106,23,20,5,6,114,0,43,50,50,43,43,50,26,206,50,43,23,57,48,49,37,39,54,54,53,17,51,17,20,2,1,17,51,17,33,17,51,17,1,17,51,17,1,53,33,21,19,21,33,53,1,62,190,59,52,185,48,254,176,200,2,178,200,254,174,212,253,105,2,68,209,251,190,145,25,86,249,169,1,130,254,133,173,254,246,254,0,1,144,254,112,1,144,254,112,1,14,4,36,251,220,3,102,190,190,253,88,190,190,0,255,255,0,136,255,236,4,40,4,56,2,6,0,232,0,0,255,255,0,136,255,236,4,40,6,92,2,38,1,216,0,0,1,6,6,29,65,0,0,11,182,1,30,6,1,1,168,86,0,43,52,0,255,255,0,136,255,236,4,40,5,226,2,38,1,216,0,0,1,6,6,27,22,0,0,13,183,2,1,30,6,1,1,158,86,0,43,52,52,0,0,7,0,37,255,246,4,139,4,46,0,18,0,37,0,41,0,60,0,64,0,83,0,87,0,78,64,45,52,51,106,52,62,72,84,84,41,1,85,85,29,73,0,42,4,60,41,40,106,30,41,41,62,61,9,10,106,9,62,6,114,83,82,106,83,61,19,20,106,19,61,10,114,0,43,50,43,17,51,43,43,50,43,17,18,57,47,51,43,50,23,57,50,17,51,17,51,17,51,17,51,43,48,49,1,53,50,54,53,53,52,54,51,51,21,35,34,6,21,21,20,6,7,1,53,51,50,54,53,53,52,54,55,55,21,34,6,21,21,20,6,35,19,53,51,21,39,39,38,38,53,53,52,38,35,35,53,51,50,22,21,21,20,22,51,19,17,51,17,5,34,38,53,53,52,38,35,53,23,22,22,21,21,20,22,51,51,21,1,53,51,21,3,38,54,17,110,103,73,43,22,37,84,61,252,145,43,23,36,84,61,110,54,17,109,104,212,203,131,110,61,84,36,23,43,73,104,109,17,54,115,180,1,145,103,110,17,54,110,61,84,37,22,43,254,18,209,2,24,81,36,55,170,101,91,190,27,32,134,64,72,5,253,212,190,28,31,134,65,71,5,10,81,36,55,170,101,91,1,197,174,174,93,10,5,72,64,134,32,27,190,91,101,170,55,36,253,151,4,36,251,220,10,91,101,170,55,36,81,10,5,71,65,134,31,28,190,1,197,174,174,0,0,1,0,115,255,236,4,12,4,56,0,44,0,39,64,22,37,38,14,15,106,3,4,14,14,0,30,23,106,30,7,114,0,7,106,0,11,114,0,43,43,43,43,18,57,47,57,57,43,57,57,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,35,35,39,51,50,54,54,53,52,38,35,34,6,7,39,54,54,51,50,4,21,20,6,6,7,21,30,2,21,20,4,2,44,122,235,84,102,72,185,74,125,143,161,201,42,11,56,138,136,44,163,124,69,108,86,25,74,131,105,223,1,6,60,118,87,103,135,68,254,252,20,52,78,148,52,42,77,64,83,81,164,32,63,44,62,62,13,9,180,10,16,131,142,54,100,71,12,20,15,68,105,72,140,170,0,3,0,168,0,0,4,8,4,36,0,7,0,11,0,15,0,27,64,13,6,1,8,13,4,9,6,114,15,7,8,10,114,0,43,50,50,43,50,50,18,57,57,48,49,33,17,51,1,51,17,35,1,35,17,51,17,33,17,51,17,1,52,92,1,159,70,85,254,97,217,212,1,184,212,1,34,3,2,254,222,252,254,4,36,251,220,4,36,251,220,0,255,255,0,168,0,0,4,8,6,67,2,38,1,221,0,0,1,6,6,79,0,0,0,11,182,3,16,3,1,1,178,86,0,43,52,0,255,255,0,168,0,0,4,8,6,92,2,38,1,221,0,0,1,6,6,29,45,0,0,11,182,3,16,3,1,1,188,86,0,43,52,0,0,4,0,168,255,251,4,49,4,41,0,19,0,23,0,27,0,47,0,45,64,25,37,0,1,24,25,106,36,24,24,20,21,10,11,106,10,21,6,114,28,45,106,28,20,10,114,0,43,50,43,43,50,43,17,18,57,47,51,43,50,57,57,48,49,1,53,50,54,55,55,62,2,51,51,21,35,34,6,7,7,6,6,35,1,17,51,17,3,53,33,21,1,34,38,38,39,39,38,38,35,53,51,50,22,23,23,22,22,51,51,21,2,34,64,51,17,69,31,66,98,78,43,43,37,38,14,70,25,95,81,254,20,212,15,1,53,1,100,78,103,71,31,69,17,51,64,124,81,105,25,70,14,38,37,33,2,32,81,39,43,171,77,81,29,190,20,34,164,57,56,253,224,4,36,251,220,1,179,190,190,254,72,29,81,77,171,43,39,81,56,57,164,34,20,190,255,255,0,168,255,251,4,49,6,92,2,38,1,224,0,0,1,6,6,30,20,0,0,11,182,4,48,21,1,1,188,86,0,43,52,0,0,3,0,63,0,0,4,14,4,36,0,11,0,15,0,19,0,27,64,15,17,16,106,17,13,6,6,114,12,0,1,106,0,10,114,0,43,43,51,43,50,50,43,48,49,51,53,50,54,54,53,17,51,17,20,6,6,33,17,51,17,1,53,33,21,63,80,91,38,185,71,172,2,100,212,253,54,2,165,190,55,132,117,2,54,253,209,193,218,90,4,36,251,220,3,102,190,190,0,4,0,128,0,0,4,48,4,36,0,7,0,11,0,19,0,23,0,41,64,21,6,14,2,17,19,0,0,17,14,3,8,21,15,3,9,6,114,20,8,10,114,0,43,50,43,50,50,50,18,23,57,17,51,17,51,17,51,48,49,37,55,51,19,51,21,35,3,5,17,51,17,55,3,35,53,51,19,51,23,23,17,51,17,2,54,30,12,172,122,58,162,253,214,202,188,162,58,122,172,8,20,250,202,220,230,2,98,252,253,180,220,4,36,251,220,220,2,76,252,253,158,230,220,4,36,251,220,0,0,3,0,168,0,0,4,8,4,36,0,3,0,7,0,11,0,31,64,16,0,4,1,5,8,9,106,8,8,4,5,6,114,4,10,114,0,43,43,17,57,47,43,17,51,17,51,48,49,33,17,51,17,33,17,51,17,3,53,33,21,3,52,212,252,160,212,150,3,3,4,36,251,220,4,36,251,220,1,187,174,174,255,255,0,136,255,236,4,40,4,56,2,6,1,43,0,0,0,3,0,168,0,0,4,8,4,36,0,3,0,7,0,11,0,27,64,14,0,4,1,5,9,8,106,9,5,6,114,4,10,114,0,43,43,50,43,17,51,17,51,48,49,33,17,51,17,33,17,51,17,3,53,33,21,3,52,212,252,160,212,150,3,3,4,36,251,220,4,36,251,220,3,102,190,190,255,255,0,168,254,52,4,80,4,56,2,6,1,70,0,0,255,255,0,136,255,236,4,73,4,56,2,6,0,222,0,0,0,2,0,90,0,0,4,86,4,36,0,3,0,7,0,19,64,10,2,5,4,106,5,6,114,0,10,114,0,43,43,43,51,48,49,33,17,51,17,1,53,33,21,1,238,212,253,152,3,252,4,36,251,220,3,102,190,190,255,255,0,55,254,32,4,91,4,36,2,6,1,118,0,0,255,255,0,55,254,32,4,91,6,67,2,38,1,234,0,0,1,6,6,79,251,0,0,11,182,2,20,7,1,1,178,86,0,43,52,0,0,3,0,45,254,72,4,131,5,220,0,27,0,55,0,67,0,50,64,32,61,0,114,56,14,114,15,34,41,106,3,53,5,51,17,39,19,37,8,28,22,34,7,114,9,28,47,106,0,28,11,114,0,43,50,43,50,43,50,18,23,57,43,50,43,43,48,49,5,34,38,39,35,19,21,20,22,51,50,54,53,52,38,35,34,17,3,51,54,54,51,50,18,17,16,2,33,34,2,17,16,18,51,50,22,23,51,3,16,35,34,6,21,20,22,51,50,54,53,53,19,35,6,6,19,17,55,17,39,17,51,17,7,17,23,17,3,140,79,101,7,92,57,63,65,69,62,61,68,130,47,82,9,92,84,131,118,117,253,22,130,117,118,131,84,92,9,82,47,130,67,62,62,69,65,63,57,92,7,100,127,15,15,202,15,15,20,88,86,1,46,116,90,90,170,190,200,180,254,208,1,26,101,101,254,247,254,217,254,228,255,0,1,0,1,28,1,39,1,9,101,101,254,230,1,48,180,200,190,170,90,90,116,254,210,86,88,254,92,2,125,57,2,41,33,2,148,253,108,33,253,215,57,253,131,0,255,255,0,106,0,0,4,70,4,36,2,6,1,117,0,0,0,2,0,128,0,0,4,8,4,36,0,11,0,15,0,27,64,14,14,4,0,9,106,0,0,15,4,6,114,15,10,114,0,43,43,17,57,47,43,17,51,48,49,1,34,38,53,53,51,21,20,22,51,33,21,3,17,51,17,2,48,217,215,212,110,110,1,62,58,212,1,124,215,215,250,250,128,128,174,254,132,4,36,251,220,0,0,4,0,140,254,242,4,106,4,36,0,3,0,7,0,11,0,15,0,29,64,15,1,9,6,114,13,4,5,106,4,12,96,0,8,10,114,0,43,50,26,206,51,43,50,43,50,48,49,33,17,51,17,33,53,33,21,33,17,51,17,1,17,51,17,3,14,212,252,232,3,107,252,87,212,2,66,200,4,36,251,220,190,190,4,36,251,220,254,242,1,204,254,52,0,4,0,112,0,0,4,64,4,36,0,3,0,7,0,11,0,15,0,37,64,19,12,8,13,9,0,8,1,9,4,5,106,4,8,9,6,114,8,10,114,0,43,43,17,51,43,17,51,17,51,17,51,17,51,48,49,33,17,51,17,33,53,33,21,33,17,51,17,51,17,51,17,3,108,212,252,90,3,129,252,85,212,185,180,4,36,251,220,180,180,4,36,251,220,4,36,251,220,0,0,5,0,112,254,242,4,134,4,36,0,3,0,7,0,11,0,15,0,19,0,35,64,18,17,1,9,6,114,0,16,16,13,4,5,106,4,12,96,8,10,114,0,43,26,206,51,43,50,51,17,51,43,50,50,48,49,33,17,51,17,33,53,33,21,33,17,51,17,1,17,51,17,1,17,51,17,3,88,212,252,110,3,129,252,85,212,2,122,200,253,114,170,4,36,251,220,180,180,4,36,251,220,254,242,1,194,254,62,1,14,4,36,251,220,0,0,4,0,173,254,242,4,3,4,36,0,3,0,7,0,11,0,15,0,33,64,17,1,13,6,114,5,0,0,15,15,8,9,106,4,96,8,10,114,0,43,26,206,43,51,17,51,17,57,43,50,48,49,33,17,51,17,1,17,51,17,1,53,33,21,33,17,51,17,3,47,212,253,247,200,253,235,3,86,252,170,212,4,36,251,220,254,242,1,144,254,112,1,14,174,174,4,36,251,220,0,2,0,188,0,0,4,80,4,36,0,17,0,21,0,31,64,17,0,1,106,0,18,9,10,106,9,9,18,19,6,114,18,10,114,0,43,43,17,57,47,43,17,51,43,48,49,33,53,33,50,54,53,52,38,35,33,53,33,50,22,21,20,6,35,33,17,51,17,1,130,1,74,80,88,88,80,254,162,1,122,172,188,188,172,253,212,212,190,88,80,80,88,190,187,171,171,187,4,36,251,220,0,3,0,0,0,0,4,80,4,36,0,17,0,21,0,25,0,39,64,22,20,23,0,1,106,0,18,9,10,106,9,9,18,23,22,106,23,6,114,18,10,114,0,43,43,43,18,57,47,43,17,51,43,17,51,48,49,33,53,51,50,54,53,52,38,35,33,53,33,50,22,21,20,6,35,33,17,51,17,1,53,33,21,1,190,250,90,98,98,90,254,242,1,42,182,198,198,182,254,36,212,254,52,1,97,190,88,80,80,88,190,187,171,171,187,4,36,251,220,3,102,190,190,0,0,3,0,112,0,0,4,64,4,36,0,17,0,21,0,25,0,39,64,21,22,18,23,19,0,1,106,0,18,10,9,106,10,10,18,19,6,114,18,10,114,0,43,43,17,57,47,43,17,51,43,17,51,17,51,48,49,33,53,51,50,54,53,52,38,35,35,53,51,50,22,21,20,6,35,33,17,51,17,33,17,51,17,1,54,79,80,88,88,80,99,127,158,172,172,158,254,207,212,2,40,212,170,98,90,90,98,170,187,171,171,187,4,36,251,220,4,36,251,220,0,4,0,63,0,0,4,147,4,36,0,10,0,14,0,32,0,36,0,45,64,26,34,33,106,34,5,24,25,106,24,24,0,12,5,6,114,15,16,106,15,11,0,1,106,0,10,114,0,43,43,51,51,43,43,50,17,57,47,43,17,51,43,48,49,51,53,50,54,53,17,51,17,20,6,6,33,17,51,17,35,53,51,50,54,53,52,38,35,35,53,51,50,22,21,20,6,35,1,53,33,21,63,79,58,185,58,140,1,128,192,14,74,71,77,77,71,94,112,158,172,172,158,253,169,1,228,190,65,89,2,204,253,59,135,153,63,4,36,251,220,190,88,80,80,88,190,187,171,171,187,3,118,174,174,0,0,4,0,88,0,0,4,147,4,36,0,17,0,21,0,25,0,31,0,43,64,23,26,18,27,19,0,1,106,0,18,10,9,22,23,106,22,22,18,19,6,114,18,10,114,0,43,43,17,57,47,43,51,50,17,51,43,17,51,17,51,48,49,33,53,51,50,54,53,52,38,35,35,53,51,50,22,21,20,6,35,33,17,51,17,3,53,33,21,3,17,51,17,21,17,2,207,104,71,77,77,71,124,142,158,172,172,158,253,15,212,150,1,195,60,192,190,88,80,74,80,174,171,157,171,187,4,36,251,220,2,0,174,174,254,0,4,36,254,69,50,253,201,0,255,255,0,156,255,236,4,20,4,56,2,6,1,77,0,0,0,2,0,136,255,236,4,73,4,56,0,25,0,29,0,39,64,22,26,27,106,10,9,6,26,26,0,6,13,106,6,7,114,23,0,19,106,0,11,114,0,43,43,51,43,43,18,57,47,18,57,57,43,48,49,5,32,0,17,16,0,33,50,22,23,7,38,38,35,34,6,21,20,22,51,50,54,55,23,6,6,1,53,33,21,2,170,254,251,254,227,1,23,1,3,155,221,47,163,45,140,83,151,169,188,172,80,157,75,24,87,184,253,212,2,57,20,1,29,1,11,1,4,1,32,115,105,123,73,80,181,167,181,191,14,12,186,18,12,1,210,174,174,0,0,2,0,132,255,236,4,40,4,56,0,25,0,29,0,37,64,21,26,27,106,3,4,26,26,0,17,20,13,106,20,7,114,0,7,106,0,11,114,0,43,43,43,43,51,18,57,47,57,57,43,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,35,34,6,7,55,54,54,51,32,0,17,16,0,1,53,33,21,2,14,129,206,59,104,50,156,92,152,168,208,192,61,125,66,18,55,129,74,1,25,1,49,254,233,254,143,2,22,20,71,52,160,37,56,182,166,182,190,10,11,194,8,9,254,227,254,245,254,253,254,223,1,210,174,174,255,255,0,160,0,0,4,78,5,244,2,6,1,9,0,0,255,255,0,160,0,0,4,78,5,226,2,38,1,10,0,0,1,6,6,27,52,0,0,13,183,5,4,16,1,1,1,178,86,0,43,52,52,0,255,255,0,170,254,32,3,140,5,244,2,6,1,22,0,0,0,3,0,0,0,0,4,8,5,220,0,14,0,18,0,22,0,39,64,21,10,4,106,20,19,106,6,8,15,10,20,10,20,15,16,0,114,14,15,10,114,0,43,50,43,17,57,57,47,47,18,57,57,43,43,48,49,33,17,52,38,35,34,17,3,51,54,51,50,22,21,17,33,17,51,17,1,53,33,21,3,52,90,80,230,62,82,16,244,158,174,252,200,212,254,92,3,2,2,58,101,109,254,208,1,16,212,204,186,253,198,5,220,250,36,4,122,174,174,0,0,4,0,110,255,236,4,100,4,56,0,11,0,15,0,19,0,31,0,39,64,24,0,20,106,16,17,106,16,16,0,6,26,106,13,6,114,12,10,114,6,7,114,0,11,114,0,43,43,43,43,43,18,57,47,43,43,48,49,5,34,2,17,16,18,51,50,18,17,16,2,37,17,51,17,3,53,33,21,19,50,54,53,52,38,35,34,6,21,20,22,3,7,173,156,156,173,184,165,165,252,175,197,125,1,75,252,78,71,71,78,78,71,71,20,1,0,1,28,1,39,1,9,254,247,254,217,254,228,255,0,20,4,36,251,220,1,184,174,174,254,236,169,187,198,178,178,198,187,169,0,4,0,126,255,251,4,3,4,36,0,17,0,38,0,42,0,46,0,45,64,25,0,27,15,39,40,105,29,39,39,46,6,18,19,106,18,46,10,114,45,6,9,106,6,6,114,0,43,43,51,43,50,43,17,18,57,47,51,43,50,57,57,48,49,1,34,38,53,52,54,51,33,21,33,34,6,21,20,22,51,33,7,1,53,51,50,54,55,55,54,54,51,51,7,34,6,6,7,7,14,2,35,1,53,33,21,3,17,51,17,1,221,154,168,210,192,1,36,254,220,87,95,95,87,1,16,10,253,75,33,41,45,23,50,32,87,73,190,8,65,68,34,15,43,36,73,104,85,1,85,1,97,48,212,1,194,152,139,152,167,190,86,79,74,81,100,254,57,190,35,34,74,47,46,61,18,36,28,81,69,89,44,1,109,190,190,254,152,4,36,251,220,0,0,4,0,0,254,32,4,8,5,220,0,14,0,18,0,22,0,35,0,44,64,27,23,24,106,23,15,114,10,4,106,20,19,106,10,7,29,0,4,15,20,20,15,16,0,114,15,10,114,0,43,43,17,57,47,18,23,57,43,43,43,43,48,49,37,17,52,38,35,34,17,3,51,54,51,50,22,21,17,5,17,51,17,1,53,33,21,1,39,55,54,54,53,17,51,17,20,6,6,7,3,52,90,80,230,62,82,16,244,158,174,252,200,212,254,92,3,2,255,0,10,140,92,84,212,85,180,143,140,1,174,101,109,254,208,1,16,212,204,186,254,82,140,5,220,250,36,4,122,174,174,249,166,188,18,8,128,130,1,136,254,152,165,211,106,10,0,3,0,106,0,0,4,46,4,36,0,3,0,7,0,11,0,31,64,17,0,1,106,0,0,4,5,9,8,106,9,5,6,114,4,10,114,0,43,43,50,43,17,18,57,47,43,48,49,19,53,33,21,1,17,51,17,3,53,33,21,106,2,170,254,40,212,150,2,180,1,167,174,174,254,89,4,36,251,220,3,102,190,190,0,8,0,47,254,242,4,142,4,41,0,19,0,39,0,43,0,63,0,67,0,87,0,91,0,95,0,78,64,45,54,53,106,54,65,77,30,44,0,4,90,63,1,40,41,105,91,76,31,40,40,65,64,10,11,106,10,65,6,114,94,87,86,106,87,64,20,21,106,20,92,96,64,10,114,0,43,26,206,51,43,17,51,43,50,43,50,43,17,18,57,47,51,51,51,43,50,50,50,23,57,17,51,43,48,49,1,39,50,54,54,53,53,52,54,51,51,21,35,34,6,21,21,20,6,7,1,53,51,50,54,53,53,52,54,55,55,23,34,6,6,21,21,20,6,35,19,53,51,21,39,39,38,38,53,53,52,38,35,35,53,51,50,22,21,21,20,22,22,51,3,17,51,17,5,34,38,53,53,52,38,38,35,55,23,22,22,21,21,20,22,51,51,21,1,53,51,21,19,17,51,17,2,156,32,71,58,11,116,108,73,63,19,30,96,69,253,19,63,19,30,96,69,138,22,70,59,11,116,108,242,128,28,138,69,96,30,19,63,73,108,116,11,59,70,4,160,1,104,108,116,11,58,71,32,128,69,96,30,19,63,254,69,128,208,200,2,24,81,15,40,36,160,104,93,190,30,34,124,64,72,5,253,217,190,30,34,124,65,71,5,10,81,15,39,37,160,103,94,1,192,174,174,93,10,5,72,64,124,34,30,190,93,104,160,36,40,15,253,151,4,36,251,220,5,94,103,160,37,39,15,81,10,5,71,65,119,34,30,195,1,192,174,174,253,55,1,204,254,52,0,5,0,168,254,242,4,142,4,41,0,19,0,23,0,27,0,31,0,51,0,51,64,29,0,41,1,24,25,106,40,24,24,21,20,10,11,106,10,21,6,114,30,51,50,106,51,20,28,105,20,10,114,0,43,43,51,43,50,43,50,43,17,18,57,47,51,43,50,57,57,48,49,1,55,50,54,55,55,62,2,51,51,21,35,34,6,7,7,6,6,35,1,17,51,17,3,53,33,21,1,17,51,17,3,34,38,38,39,39,38,38,35,39,51,50,22,23,23,22,22,51,51,21,2,26,8,64,51,17,69,31,66,98,78,43,43,37,38,14,70,25,95,81,254,20,212,15,1,53,1,36,200,136,78,103,71,31,69,17,51,64,8,132,81,105,25,70,14,38,37,33,2,32,81,39,43,171,77,81,29,190,20,34,164,57,56,253,224,4,36,251,220,1,179,190,190,253,63,1,199,254,57,1,9,29,81,77,171,43,39,81,56,57,164,34,20,190,0,4,0,168,254,242,4,142,4,36,0,3,0,7,0,11,0,15,0,35,64,19,13,12,106,13,13,8,6,9,6,114,4,1,106,4,0,96,8,10,114,0,43,26,206,51,43,43,50,17,57,47,43,48,49,1,17,51,17,1,17,51,17,33,17,51,17,3,53,33,21,3,198,200,254,166,212,252,160,212,150,3,3,254,242,1,204,254,52,1,14,4,36,251,220,4,36,251,220,1,187,174,174,0,0,2,0,80,254,52,4,96,4,36,0,7,0,11,0,25,64,13,8,14,114,4,9,0,6,1,6,114,0,10,114,0,43,43,50,18,57,57,43,48,49,33,1,51,1,35,1,51,1,3,17,51,17,1,243,254,93,226,1,69,62,1,69,226,254,93,207,212,4,36,252,124,3,132,251,220,254,52,2,44,253,212,0,3,0,80,254,52,4,96,4,36,0,3,0,11,0,15,0,31,64,17,12,14,114,8,13,4,10,5,6,114,1,0,106,1,4,10,114,0,43,50,43,43,50,18,57,57,43,48,49,23,53,33,21,37,1,51,1,35,1,51,1,3,17,51,17,215,3,3,254,25,254,93,226,1,69,62,1,69,226,254,93,207,212,174,174,174,174,4,36,252,124,3,132,251,220,254,52,2,44,253,212,0,0,3,0,106,254,242,4,132,4,36,0,3,0,9,0,15,0,38,64,21,8,11,5,14,4,7,4,7,12,6,114,10,1,106,0,10,96,10,4,10,114,0,43,50,26,16,206,43,43,50,17,18,23,57,48,49,1,17,51,17,9,2,51,1,1,33,1,1,51,1,1,3,188,200,251,230,1,166,1,70,240,254,74,254,202,1,252,254,190,254,86,240,1,70,1,166,254,242,1,204,254,52,1,14,2,72,1,220,253,166,254,54,1,202,2,90,254,36,253,184,0,3,0,128,254,242,4,142,4,36,0,3,0,15,0,19,0,35,64,19,4,13,106,4,4,8,0,16,96,16,1,106,16,10,114,18,8,6,114,0,43,50,43,43,26,16,206,18,57,47,43,48,49,1,17,51,17,1,34,38,53,53,51,21,20,22,51,33,21,3,17,51,17,3,198,200,253,162,217,215,212,110,110,1,62,58,212,254,242,1,204,254,52,2,138,215,215,250,250,128,128,174,254,132,4,36,251,220,255,255,0,168,0,0,4,8,5,220,2,6,1,5,0,0,255,255,0,160,0,0,4,78,4,36,2,6,1,10,0,0,255,255,0,136,255,236,4,40,4,56,2,6,0,252,0,0,255,255,0,168,0,0,4,8,5,156,2,38,1,221,0,0,1,6,6,37,0,0,0,11,182,3,16,9,1,1,188,86,0,43,52,0,0,3,0,136,255,236,4,40,4,56,0,3,0,15,0,27,0,31,64,18,4,16,106,0,1,106,0,0,4,10,22,106,10,7,114,4,11,114,0,43,43,43,18,57,47,43,43,48,49,19,53,33,21,1,34,2,17,16,18,51,50,18,17,16,2,39,50,54,53,52,38,35,34,6,21,20,22,230,3,3,254,111,220,244,244,220,221,243,243,221,117,127,127,117,117,127,127,1,193,162,162,254,43,1,32,1,6,1,7,1,31,254,225,254,249,254,250,254,224,190,188,172,173,187,187,173,172,188,255,255,0,55,254,32,4,91,5,156,2,38,1,234,0,0,1,6,6,37,15,0,0,11,182,2,20,15,1,1,188,86,0,43,52,0,0,2,0,160,255,236,4,50,5,160,0,18,0,38,0,35,64,20,12,13,26,27,106,26,26,0,6,34,106,6,3,114,0,19,106,0,11,114,0,43,43,43,43,18,57,47,43,57,57,48,49,5,34,38,17,17,16,33,50,22,21,20,6,7,21,22,22,21,20,6,39,50,54,53,52,38,35,35,53,51,50,54,53,52,38,35,34,17,17,16,2,102,239,215,1,196,201,221,146,134,153,167,241,217,113,125,126,116,104,98,99,109,106,96,240,20,232,1,2,1,217,1,241,189,171,126,154,20,14,4,190,172,200,220,190,131,119,122,133,190,108,97,86,94,254,202,254,42,254,212,0,1,0,156,255,236,4,20,4,56,0,43,0,34,64,22,3,34,31,30,8,9,12,25,8,0,22,15,106,22,7,114,0,37,106,0,11,114,0,43,43,43,43,18,23,57,48,49,5,34,38,53,52,62,2,55,55,54,54,53,52,38,35,34,6,7,55,54,54,51,32,4,21,20,14,2,7,5,6,6,21,20,22,51,50,54,55,23,6,6,2,140,253,243,70,105,108,39,216,53,61,147,178,70,120,77,14,57,115,70,1,29,1,15,57,89,98,40,254,248,55,49,139,148,92,160,105,24,83,205,20,157,144,85,112,68,36,9,51,13,44,52,68,71,1,5,188,5,3,159,155,79,100,58,31,11,68,14,64,39,73,59,25,27,183,31,28,0,255,255,0,96,254,34,4,8,4,56,2,6,0,255,0,0,0,7,0,37,255,246,4,139,5,220,0,19,0,39,0,43,0,63,0,69,0,89,0,93,0,78,64,46,66,0,114,89,88,106,89,64,78,93,93,40,1,92,92,79,30,44,0,4,63,40,41,105,31,40,40,54,64,20,21,106,20,64,8,114,10,11,106,10,54,53,106,54,6,114,0,43,43,51,43,43,50,43,17,18,57,47,51,43,50,23,57,50,17,51,17,51,17,51,17,51,43,43,48,49,1,39,50,54,54,53,53,52,54,51,51,21,35,34,6,21,21,20,6,7,1,53,51,50,54,53,53,52,54,55,55,23,34,6,6,21,21,20,6,35,19,53,51,21,39,39,38,38,53,53,52,38,35,35,53,51,50,22,21,21,20,22,22,51,19,17,3,51,3,17,5,34,38,53,53,52,38,38,35,55,23,22,22,21,21,20,22,51,51,21,1,53,51,21,3,10,32,66,54,11,110,103,73,43,22,37,84,61,252,145,43,23,36,84,61,138,32,66,54,11,109,104,212,188,88,138,61,84,36,23,43,73,104,109,11,54,66,56,5,190,5,1,144,103,110,11,54,66,32,138,61,84,37,22,43,254,39,188,2,24,81,15,40,36,170,101,91,190,27,32,134,64,72,5,253,212,190,28,31,134,65,72,4,10,81,15,39,37,170,101,91,1,197,174,174,93,10,5,72,64,134,32,27,190,91,101,170,36,40,15,253,151,2,63,3,157,252,99,253,193,10,91,101,170,37,39,15,81,10,4,72,65,134,31,28,190,1,197,174,174,0,1,0,79,254,52,4,37,4,56,0,47,0,41,64,23,37,40,14,15,106,3,2,0,14,14,30,0,6,106,30,0,105,30,22,106,30,7,114,0,43,43,43,43,18,57,47,18,57,57,43,57,57,48,49,1,32,39,55,22,22,51,50,54,53,52,38,38,35,35,39,54,54,53,52,38,38,35,34,6,7,39,62,2,51,32,22,21,20,6,7,7,55,21,39,30,2,21,20,6,6,2,29,254,223,173,140,80,148,105,138,153,95,156,91,111,24,221,193,61,131,106,56,161,52,25,22,100,121,55,1,10,242,166,133,53,24,14,108,186,115,122,232,254,52,179,148,72,65,141,120,92,121,60,191,8,108,108,58,96,57,16,11,189,7,13,8,201,163,145,151,30,12,55,123,57,2,88,172,128,128,197,112,0,255,255,0,156,255,236,4,134,4,36,2,6,1,91,0,0,255,255,0,156,255,236,4,134,6,67,2,38,2,21,0,0,0,6,6,79,246,0,255,255,0,156,255,236,4,134,6,92,2,38,2,21,0,0,0,6,6,29,35,0,0,4,0,168,255,251,4,49,5,220,0,19,0,23,0,27,0,47,0,47,64,27,21,0,114,28,45,106,28,20,0,37,1,24,25,106,36,24,24,10,20,10,114,10,11,106,10,6,114,0,43,43,43,17,57,47,51,43,50,57,57,17,51,43,43,48,49,1,55,50,54,55,55,62,2,51,51,21,35,34,6,7,7,6,6,35,1,17,51,17,3,53,33,21,1,34,38,38,39,39,38,38,35,39,51,50,22,23,23,22,22,51,51,21,2,26,8,64,51,17,69,31,66,98,78,43,43,37,38,14,70,25,95,81,254,20,212,15,1,53,1,100,78,103,71,31,69,17,51,64,8,132,81,105,25,70,14,38,37,33,2,32,81,39,43,171,77,81,29,190,20,34,164,57,56,253,224,5,220,250,36,1,179,190,190,254,72,29,81,77,171,43,39,81,56,57,164,34,20,190,0,1,0,95,0,0,4,81,4,36,0,7,0,19,64,9,6,4,1,6,114,4,0,10,114,0,43,50,43,18,57,48,49,51,1,33,1,35,1,35,1,95,1,104,1,34,1,104,220,254,236,18,254,236,4,36,251,220,3,120,252,136,255,255,0,168,0,0,4,8,4,56,2,6,1,35,0,0,255,255,0,112,0,0,4,64,4,56,2,6,1,34,0,0,0,4,0,156,254,242,4,134,4,36,0,3,0,20,0,27,0,31,0,44,64,27,25,27,2,105,27,10,114,18,28,31,23,24,16,6,4,29,8,6,114,4,13,106,0,96,4,11,114,0,43,26,206,43,43,50,18,23,57,43,43,57,48,49,1,17,51,17,37,34,38,53,17,51,17,20,22,51,50,54,53,19,35,6,6,55,39,53,51,21,23,21,1,17,51,17,3,190,200,253,116,167,183,212,104,94,116,118,54,70,25,146,205,18,212,146,254,154,212,254,242,1,204,254,52,250,199,181,2,188,253,68,91,99,147,173,254,226,108,116,10,254,186,248,12,170,1,44,2,248,253,68,0,1,0,112,255,236,4,64,4,36,0,34,0,35,64,19,22,10,114,20,13,13,4,6,114,25,31,17,0,9,106,28,0,11,114,0,43,50,43,50,57,57,43,50,17,51,43,48,49,5,34,38,53,17,51,17,20,22,51,50,54,53,17,51,17,20,51,50,53,17,51,17,7,39,35,6,6,35,34,38,39,35,6,6,1,77,107,114,212,47,46,46,47,180,94,92,212,194,11,18,16,87,65,61,85,21,16,16,96,20,177,163,2,228,253,28,76,84,78,92,2,218,253,28,160,160,2,228,251,216,6,154,79,85,85,79,79,85,0,2,0,82,254,242,4,166,4,36,0,3,0,38,0,45,64,25,3,26,96,26,2,106,26,11,114,24,17,17,8,6,114,36,29,21,4,13,106,32,4,11,114,0,43,50,43,50,57,57,43,50,17,51,43,43,26,16,205,48,49,1,17,51,17,37,34,38,53,17,51,17,20,22,51,50,54,53,17,51,17,20,51,50,53,17,51,17,7,39,35,6,6,35,34,38,39,35,6,6,3,222,200,252,137,107,114,212,47,46,46,47,180,94,92,212,194,11,18,16,87,65,61,85,21,16,16,96,254,242,1,204,254,52,250,177,163,2,228,253,28,76,84,78,92,2,218,253,28,160,160,2,228,251,216,6,154,79,85,85,79,79,85,0,0,2,0,168,255,236,4,100,4,36,0,15,0,26,0,31,64,17,10,22,106,6,0,10,10,0,4,6,114,0,16,106,0,11,114,0,43,43,43,17,57,47,18,57,43,48,49,5,34,38,39,17,51,17,51,54,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,2,126,225,243,2,212,18,30,179,129,185,203,254,230,126,138,135,123,127,139,20,220,202,2,146,254,20,104,113,207,188,196,214,184,118,108,101,110,115,106,216,0,0,2,0,0,255,236,4,100,4,36,0,17,0,28,0,33,64,19,12,24,106,8,12,12,0,6,5,106,6,6,114,0,18,106,0,11,114,0,43,43,43,43,18,57,47,57,43,48,49,5,34,38,39,17,35,53,33,17,51,54,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,2,161,203,220,2,248,1,204,18,26,155,112,169,184,236,213,110,119,116,107,106,115,20,220,202,1,212,190,254,20,104,113,207,188,196,214,184,118,108,101,110,115,106,216,0,4,0,110,255,236,4,100,5,220,0,11,0,15,0,19,0,31,0,38,64,23,15,10,114,13,0,114,16,17,106,16,16,0,6,26,106,6,7,114,0,20,106,0,11,0,63,43,43,43,18,57,47,43,43,43,48,49,5,34,2,17,16,18,51,50,18,17,16,2,37,17,51,17,3,53,33,21,19,50,54,53,52,38,35,34,6,21,20,22,3,7,173,156,156,173,184,165,165,252,175,197,125,1,75,252,78,71,71,78,78,71,71,20,1,0,1,28,1,39,1,9,254,247,254,217,254,228,255,0,20,5,220,250,36,1,184,174,174,254,236,169,187,198,178,178,198,187,169,0,0,2,0,126,255,236,4,60,5,141,0,36,0,48,0,33,64,19,8,7,28,43,106,28,0,18,19,106,0,37,106,18,2,114,0,11,114,0,43,43,43,43,18,57,43,57,57,48,49,5,34,38,38,53,52,54,55,53,46,2,53,52,62,2,55,37,23,5,14,2,21,20,22,22,23,30,3,21,20,6,6,39,50,54,53,52,38,35,34,6,21,20,22,2,88,142,214,118,184,147,111,110,36,102,153,159,56,1,74,10,254,153,66,109,64,55,85,44,89,173,142,84,120,217,142,128,137,148,118,122,142,145,20,110,206,143,182,204,28,23,25,79,93,45,102,117,54,16,2,12,189,17,3,13,45,51,47,54,30,12,24,61,103,169,133,154,220,116,184,172,129,139,152,160,135,137,160,0,255,255,0,45,0,0,4,131,5,140,2,6,0,1,0,0,255,255,0,160,0,0,4,110,5,140,2,6,0,27,0,0,255,255,0,180,0,0,4,66,5,140,2,6,1,146,0,0,0,2,0,45,0,0,4,131,5,140,0,7,0,11,0,25,64,13,6,4,1,2,114,8,9,106,8,4,0,8,114,0,43,50,50,43,43,18,57,48,49,51,1,33,1,35,1,35,1,35,53,33,21,45,1,154,1,34,1,154,210,254,176,18,254,176,80,3,72,5,140,250,116,4,224,251,32,190,190,0,255,255,0,160,0,0,4,76,5,140,2,6,0,38,0,0,255,255,0,150,0,0,4,46,5,140,2,6,0,184,0,0,255,255,0,140,0,0,4,36,5,140,2,6,0,66,0,0,0,3,0,76,255,236,4,100,5,160,0,3,0,11,0,19,0,31,64,18,4,12,106,0,1,106,0,0,4,8,16,106,8,3,114,4,9,114,0,43,43,43,18,57,47,43,43,48,49,19,53,33,21,1,32,17,16,33,32,17,16,37,32,17,16,33,32,17,16,213,3,6,254,125,253,244,2,12,2,12,253,244,1,58,254,198,254,198,2,104,188,188,253,132,2,208,2,228,253,28,253,48,184,2,24,2,44,253,212,253,232,0,255,255,0,168,0,0,4,8,5,140,2,6,0,70,0,0,255,255,0,160,0,0,4,148,5,140,2,6,0,85,0,0,255,255,0,45,0,0,4,131,5,140,2,6,1,207,0,0,255,255,0,128,0,0,4,48,5,140,2,6,0,93,0,0,255,255,0,148,0,0,4,28,5,140,2,6,0,94,0,0,0,3,0,100,0,0,4,76,5,140,0,3,0,7,0,11,0,31,64,18,4,5,106,8,9,106,8,8,4,1,0,106,1,2,114,4,8,114,0,43,43,43,18,57,47,43,43,48,49,19,53,33,21,1,53,33,21,1,53,33,21,100,3,232,252,24,3,232,252,114,3,52,4,206,190,190,251,50,190,190,2,104,190,190,255,255,0,76,255,236,4,100,5,160,2,6,0,101,0,0,255,255,0,140,0,0,4,36,5,140,2,6,1,164,0,0,255,255,0,160,0,0,4,96,5,140,2,6,0,128,0,0,0,3,0,150,0,0,4,46,5,140,0,5,0,9,0,13,0,35,64,19,4,3,11,10,106,2,5,6,11,2,114,0,1,6,7,106,6,8,114,0,43,43,50,57,43,18,57,57,43,50,57,48,49,37,39,1,1,55,1,1,53,33,21,1,53,33,21,1,40,146,1,185,254,71,162,2,23,253,71,3,152,252,104,3,132,54,122,2,25,2,5,132,253,119,253,55,176,176,4,206,190,190,255,255,0,80,0,0,4,96,5,140,2,6,0,143,0,0,255,255,0,25,0,0,4,151,5,140,2,6,0,175,0,0,255,255,0,66,255,236,4,110,5,180,2,6,1,170,0,0,255,255,0,66,0,0,4,112,5,140,2,6,0,174,0,0,0,3,0,76,0,0,4,100,5,140,0,13,0,17,0,21,0,26,64,14,14,15,19,18,4,3,17,8,114,20,11,3,2,114,0,43,50,50,43,18,23,57,48,49,1,32,17,17,51,17,16,33,32,17,17,51,17,16,37,51,17,35,19,35,17,51,2,88,253,244,200,1,68,1,68,200,253,143,200,200,200,200,200,1,54,2,28,2,58,253,198,254,156,1,100,2,58,253,198,253,228,100,254,102,1,154,3,242,0,3,0,76,0,0,4,100,5,160,0,25,0,29,0,33,0,45,64,25,15,30,31,106,14,0,30,30,26,13,1,1,25,26,27,106,26,8,114,7,20,106,7,3,114,0,43,43,43,43,50,50,17,51,17,51,17,57,57,43,50,48,49,37,53,46,2,53,16,33,32,17,20,6,6,7,21,39,54,18,53,16,33,32,17,20,18,23,5,53,33,21,51,53,33,21,1,94,91,122,61,2,12,2,12,55,111,84,180,110,110,254,198,254,198,122,122,254,86,1,170,164,1,146,127,76,20,136,235,166,2,168,253,88,169,236,133,16,71,51,40,1,31,247,1,240,254,16,243,254,225,44,186,186,186,186,186,0,0,3,255,255,0,0,4,131,5,140,0,7,0,11,0,15,0,35,64,19,8,9,106,8,8,0,5,4,13,15,106,2,13,2,114,4,0,8,114,0,43,50,43,50,43,18,57,18,57,47,43,48,49,51,1,33,1,35,3,35,3,3,53,33,21,1,19,51,3,245,1,54,1,34,1,54,210,236,18,236,20,2,8,252,68,90,212,110,5,140,250,116,4,224,251,32,1,90,190,190,2,182,1,124,254,132,0,5,255,255,0,0,4,76,5,140,0,3,0,7,0,11,0,15,0,19,0,43,64,25,17,16,106,17,13,8,9,106,8,8,0,13,15,106,2,13,2,114,4,5,106,4,0,8,114,0,43,50,43,43,50,43,18,57,47,43,17,51,43,48,49,33,17,51,17,35,53,33,21,1,53,33,21,1,19,51,3,55,53,33,21,1,104,200,200,2,228,253,28,2,48,252,103,90,212,110,169,2,228,5,140,250,116,190,190,2,104,190,190,1,168,1,124,254,132,190,190,190,0,4,255,255,0,0,4,36,5,140,0,3,0,7,0,11,0,15,0,33,64,18,12,13,106,12,12,4,9,11,106,6,1,9,2,114,0,4,8,114,0,43,50,43,50,50,43,18,57,47,43,48,49,33,17,51,17,33,17,51,17,1,19,51,3,19,53,33,21,3,92,200,253,48,200,253,227,90,212,110,191,2,129,5,140,250,116,5,140,250,116,4,16,1,124,254,132,254,84,190,190,0,0,4,255,255,0,0,4,8,5,140,0,3,0,7,0,11,0,15,0,31,64,18,13,12,106,13,9,11,106,1,9,2,114,4,5,106,0,4,8,114,0,43,50,43,43,50,43,51,43,48,49,33,17,51,17,33,53,33,21,1,19,51,3,55,53,33,21,2,87,200,254,81,2,152,251,247,90,212,110,177,2,152,5,140,250,116,190,190,4,16,1,124,254,132,190,190,190,0,0,3,255,255,255,236,4,100,5,160,0,7,0,11,0,19,0,29,64,18,9,11,106,9,2,114,4,16,106,4,3,114,0,12,106,0,9,114,0,43,43,43,43,43,43,48,49,5,32,17,16,33,32,17,16,1,19,51,3,1,50,17,16,35,34,17,16,2,188,254,88,1,168,1,168,251,155,90,212,110,1,253,214,214,214,20,2,208,2,228,253,28,253,48,4,36,1,124,254,132,252,148,2,24,2,44,253,212,253,232,0,3,255,255,0,0,4,152,5,140,0,7,0,11,0,15,0,31,64,17,0,9,3,3,1,11,1,13,15,106,6,13,2,114,11,8,114,0,43,43,50,43,51,17,18,23,57,48,49,1,1,51,19,51,19,51,1,3,17,51,17,1,19,51,3,2,156,254,180,220,186,18,196,220,254,174,185,200,252,170,90,212,110,1,214,3,182,253,58,2,198,252,74,254,42,2,188,253,68,4,16,1,124,254,132,0,0,4,255,255,0,0,4,100,5,160,0,19,0,23,0,27,0,31,0,45,64,25,29,31,106,29,2,114,11,9,26,24,24,10,0,19,1,21,20,8,114,5,15,106,5,3,114,0,43,43,43,205,50,50,57,57,51,16,205,50,50,43,43,48,49,37,53,36,17,16,33,32,17,16,7,21,39,54,17,16,35,34,17,16,23,5,53,33,21,51,53,33,21,1,19,51,3,2,28,254,248,1,168,1,168,240,130,160,214,214,184,254,146,1,110,84,1,86,251,183,90,212,110,127,76,59,1,242,2,168,253,88,254,6,48,71,51,79,1,239,1,240,254,16,254,26,88,186,186,186,186,186,4,16,1,124,254,132,255,255,0,168,0,0,4,8,7,56,2,38,2,43,0,0,1,6,6,60,0,0,0,13,183,4,3,12,1,1,1,160,86,0,43,52,52,0,255,255,0,25,0,0,4,151,7,56,2,38,2,54,0,0,1,6,6,60,0,0,0,13,183,3,2,12,5,1,1,160,86,0,43,52,52,0,0,3,0,160,254,117,4,148,5,140,0,11,0,15,0,27,0,43,64,22,0,1,106,22,21,6,26,17,12,0,0,6,12,6,13,2,114,16,96,12,8,114,0,43,26,206,43,50,17,18,57,47,18,57,57,18,57,57,43,48,49,1,55,50,54,54,18,53,51,20,2,2,4,1,17,51,17,1,17,52,38,39,1,55,1,22,22,21,17,1,30,18,154,224,145,71,206,110,210,254,208,254,192,200,2,100,24,32,254,166,180,1,110,32,24,1,196,198,129,219,1,19,147,189,254,164,254,239,158,254,60,5,140,250,116,254,117,1,166,36,62,48,2,7,102,253,207,49,79,58,254,70,0,3,0,76,255,236,4,134,4,56,0,26,0,33,0,37,0,44,64,29,35,6,114,33,31,106,33,10,114,9,11,22,30,37,24,6,0,6,13,106,6,7,114,0,18,106,0,11,114,0,43,43,43,43,18,23,57,43,43,43,48,49,5,34,2,17,16,18,51,50,22,23,51,3,16,33,34,6,21,16,51,50,54,53,53,19,35,6,6,55,39,53,51,21,23,21,1,17,51,17,2,16,215,237,237,217,114,124,12,82,62,254,242,117,127,246,135,133,72,92,10,135,183,18,212,146,254,154,212,20,1,23,1,5,1,11,1,37,105,107,254,240,1,48,198,182,254,152,90,90,116,254,220,91,93,10,254,186,238,22,170,1,44,2,248,253,68,0,0,3,0,160,254,52,4,50,5,160,0,44,0,48,0,52,0,52,64,32,48,14,114,52,39,16,51,4,37,18,105,47,10,5,3,28,3,37,37,0,10,25,106,10,3,114,0,30,106,0,11,114,0,43,43,43,43,18,57,47,23,57,18,57,43,23,57,43,48,49,5,34,38,53,23,35,38,53,17,16,33,50,22,21,20,6,35,35,53,51,50,54,53,52,38,35,34,17,17,16,51,50,54,53,52,38,35,35,53,51,50,22,21,20,6,1,17,51,17,19,53,51,21,2,142,126,138,34,93,171,1,196,201,221,194,176,156,98,99,109,106,96,240,244,113,125,126,116,104,234,158,174,220,253,74,212,136,246,20,124,112,40,110,184,1,217,1,241,189,171,145,161,91,108,97,86,94,254,202,254,42,254,212,131,119,122,133,91,191,175,200,220,254,72,4,144,251,112,4,154,98,98,0,2,0,36,254,52,4,116,4,76,0,5,0,23,0,29,64,17,14,6,15,7,114,6,14,114,3,6,114,0,1,106,0,11,114,0,43,43,43,43,43,17,57,48,49,5,53,32,17,51,16,1,54,54,53,52,2,38,38,39,55,30,2,18,21,20,6,7,1,108,2,52,212,252,170,5,5,23,58,101,78,122,105,136,78,31,5,5,20,190,3,122,251,200,254,72,98,235,137,213,1,40,202,143,61,175,76,175,240,254,164,251,137,235,98,0,0,2,0,126,255,236,4,60,5,160,0,34,0,46,0,39,64,24,7,9,8,3,27,41,106,27,19,18,3,0,16,21,106,16,3,114,0,35,106,0,11,114,0,43,43,43,43,18,23,57,43,23,57,48,49,5,34,38,38,53,52,54,55,53,23,46,2,53,52,54,51,50,23,7,38,35,34,6,21,20,22,23,30,2,21,20,6,6,39,50,54,53,52,38,35,34,6,21,20,22,2,91,144,215,118,177,163,41,107,136,64,227,207,220,180,102,127,171,117,105,92,112,149,209,110,120,216,143,120,145,150,124,115,141,145,20,111,201,134,167,194,9,66,56,31,81,110,73,162,177,107,163,80,61,68,58,72,31,41,112,191,160,143,215,118,184,171,141,122,148,159,131,132,160,0,2,0,166,255,236,4,26,4,56,0,17,0,33,0,39,64,22,5,19,4,33,32,106,6,33,33,0,23,28,106,23,7,114,0,11,106,0,11,114,0,43,43,43,43,18,57,47,51,43,57,57,50,48,49,5,32,17,52,37,37,7,35,32,21,20,51,50,54,55,23,6,6,1,53,36,53,16,33,32,23,7,38,35,34,21,20,5,7,2,114,254,52,1,106,1,50,24,32,254,121,247,124,163,64,55,80,209,254,233,254,236,1,190,1,27,125,65,138,183,247,1,161,24,20,1,44,226,30,80,181,145,126,38,17,191,22,26,1,199,115,70,202,1,2,58,181,55,124,140,16,181,0,2,0,176,254,32,4,58,5,220,0,25,0,29,0,31,64,18,13,14,12,27,26,106,27,0,114,7,20,106,7,10,114,0,15,114,0,43,43,43,43,43,50,50,57,48,49,1,39,54,54,53,52,38,35,32,0,53,16,1,53,5,4,0,21,20,22,51,50,22,21,20,6,1,53,33,21,2,255,95,101,99,73,67,254,247,254,221,2,114,1,18,254,149,254,185,209,191,141,155,157,253,75,3,76,254,32,180,29,87,58,50,56,1,14,252,1,209,1,64,74,47,231,254,132,191,167,175,155,141,137,176,6,217,186,186,0,2,0,168,254,52,4,8,4,56,0,15,0,20,0,30,64,17,17,6,114,7,6,11,16,10,114,11,4,106,11,7,114,0,14,0,63,43,43,43,17,57,57,43,48,49,1,17,52,38,35,34,17,3,51,54,54,51,50,22,21,17,1,17,51,23,17,3,52,100,90,250,62,82,9,138,133,168,184,252,160,192,20,254,52,4,126,101,109,254,208,1,16,107,105,204,186,251,130,1,204,4,36,224,252,188,0,3,0,136,255,236,4,40,5,160,0,11,0,23,0,27,0,31,64,18,0,12,106,24,25,106,24,24,0,6,18,106,6,3,114,0,11,114,0,43,43,43,18,57,47,43,43,48,49,5,34,2,17,16,18,51,50,18,17,16,2,39,50,18,17,16,2,35,34,2,17,16,18,1,53,33,21,2,88,244,220,220,244,244,220,220,244,134,120,120,134,133,121,121,254,237,3,73,20,1,90,1,128,1,128,1,90,254,166,254,128,254,128,254,166,184,1,3,1,31,1,31,1,3,254,253,254,225,254,225,254,253,1,198,190,190,0,2,0,130,255,236,4,40,4,36,0,15,0,19,0,25,64,14,5,17,0,10,106,17,16,106,17,6,114,0,11,114,0,43,43,43,43,17,51,48,49,5,34,38,53,17,51,17,20,22,22,51,50,55,23,6,6,1,53,33,21,2,252,177,157,212,30,87,85,78,118,24,77,142,253,53,1,62,20,200,220,2,148,253,118,84,106,50,38,186,22,20,3,136,176,176,0,3,0,168,0,0,4,136,4,56,0,7,0,12,0,16,0,30,64,17,1,14,5,15,4,8,9,6,114,13,0,8,10,114,6,7,114,0,43,43,50,50,43,18,23,57,48,49,33,39,51,54,54,55,1,23,1,17,51,17,7,33,1,55,1,1,104,38,80,15,79,72,1,150,153,252,65,212,20,2,51,254,206,149,1,138,171,110,200,90,1,253,119,252,63,4,36,252,71,107,1,212,140,253,160,0,0,2,0,67,255,236,4,150,5,220,0,23,0,31,0,34,64,21,24,10,114,25,26,27,30,4,0,12,7,106,12,0,114,0,19,106,0,11,114,0,43,43,43,43,18,23,57,43,48,49,5,34,38,39,3,38,38,35,34,7,39,54,51,50,22,23,1,22,22,51,50,55,23,6,37,1,23,7,22,6,7,3,4,44,130,160,44,255,27,81,58,27,35,24,51,55,128,156,42,1,2,27,83,61,27,35,24,51,251,224,1,203,136,135,16,5,20,224,20,117,154,3,121,95,75,8,186,12,112,148,252,124,95,75,8,186,12,20,4,84,191,41,66,122,57,253,137,0,0,4,0,156,254,52,4,134,4,36,0,17,0,21,0,28,0,32,0,47,64,30,28,26,106,28,10,114,18,14,114,13,19,24,4,29,20,2,7,15,15,0,30,5,6,114,0,10,106,0,11,114,0,43,43,43,50,17,57,47,23,57,43,43,43,48,49,5,34,39,35,39,17,51,17,20,22,51,50,54,53,19,35,6,6,1,17,23,19,1,39,53,51,21,23,21,1,17,51,17,2,54,162,43,57,148,212,104,94,116,118,54,70,21,109,254,14,184,38,1,184,18,212,146,254,154,212,20,224,156,2,188,253,138,115,125,138,162,254,226,112,112,254,72,3,122,193,253,71,1,194,254,186,238,22,170,1,44,2,248,253,68,0,2,0,6,0,0,4,96,4,56,0,5,0,17,0,27,64,15,12,7,114,17,2,11,3,3,6,5,10,114,3,6,114,0,43,43,50,17,23,57,43,48,49,33,55,51,1,51,1,33,3,46,2,39,55,30,2,23,19,1,188,142,18,1,34,226,254,128,254,220,113,39,81,115,90,122,103,138,93,34,122,180,3,112,251,220,1,134,134,207,140,34,175,38,142,206,134,254,31,0,0,4,0,142,254,32,4,48,5,220,0,14,0,28,0,43,0,47,0,61,64,35,30,5,42,29,37,38,36,45,44,106,6,29,42,105,8,29,29,0,45,0,114,15,16,106,15,15,114,23,0,12,106,22,0,11,114,0,43,50,43,50,43,43,43,18,57,47,51,43,50,43,50,50,57,17,18,57,57,48,49,5,32,17,52,54,55,37,7,35,32,17,20,33,51,7,19,39,54,54,53,52,38,35,55,50,22,21,20,6,1,53,38,38,53,52,54,55,53,5,32,21,16,33,7,1,53,33,21,2,102,254,54,198,234,1,150,14,32,253,186,1,59,95,54,35,75,85,95,73,67,54,141,155,157,254,159,206,170,128,128,1,186,254,24,2,86,14,252,186,3,136,20,1,84,161,190,30,94,190,254,247,170,190,254,52,180,29,87,58,50,56,190,155,141,137,176,4,20,110,15,153,139,116,131,24,72,50,253,254,245,190,2,197,186,186,255,255,0,136,255,236,4,40,4,56,2,6,1,43,0,0,0,3,0,90,255,236,4,120,4,36,0,15,0,19,0,23,0,29,64,17,21,20,106,18,5,21,6,114,16,10,114,0,9,106,0,11,114,0,43,43,43,43,50,50,43,48,49,5,34,38,53,17,51,17,20,22,51,50,54,55,23,6,6,37,17,51,17,1,53,33,21,3,230,147,131,212,47,79,14,29,19,24,37,62,252,237,212,254,132,4,16,20,157,173,2,238,253,28,79,71,4,4,186,7,5,20,4,36,251,220,3,102,190,190,0,2,0,168,254,52,4,80,4,56,0,27,0,31,0,36,64,23,28,14,114,3,6,5,18,19,29,6,0,22,15,106,22,7,114,0,9,106,0,11,114,0,43,43,43,43,18,23,57,43,48,49,5,34,38,39,35,19,21,20,22,51,50,54,53,52,38,35,34,6,21,39,52,54,51,50,18,17,16,2,1,17,51,17,2,150,112,140,10,92,72,133,135,122,124,129,129,122,134,212,245,223,235,233,231,253,63,212,20,93,91,1,36,116,90,90,182,178,191,189,159,145,9,227,248,254,233,254,231,254,251,254,233,254,72,4,41,251,215,0,0,1,0,136,254,32,4,73,4,56,0,34,0,35,64,21,18,17,7,14,21,106,14,7,114,7,28,106,7,11,114,0,1,106,0,15,114,0,43,43,43,43,43,43,18,57,57,48,49,1,39,54,54,53,52,39,35,34,2,17,52,54,54,51,50,22,23,7,38,38,35,34,6,6,21,20,22,51,51,22,22,21,20,6,2,185,95,98,108,117,89,223,243,125,241,172,155,221,47,163,45,140,83,98,139,73,156,144,90,130,142,168,254,32,180,28,91,55,103,3,1,29,1,11,173,245,130,115,105,123,73,80,81,156,111,181,191,2,155,139,130,185,0,3,0,136,255,236,4,176,4,36,0,15,0,27,0,31,0,31,64,18,7,8,29,28,106,29,6,22,106,6,6,114,0,16,106,0,11,114,0,43,43,43,43,51,43,50,57,48,49,5,34,2,17,52,18,51,23,21,30,2,21,20,6,6,39,50,54,53,52,38,35,34,6,21,20,22,19,53,33,21,2,83,218,241,241,218,224,65,101,59,112,201,136,110,119,119,110,115,124,124,115,2,93,20,1,32,1,6,253,1,21,63,151,10,106,163,97,147,221,122,190,188,172,163,177,177,163,172,188,2,188,190,190,0,0,2,0,130,255,236,4,46,4,36,0,15,0,19,0,25,64,14,5,17,0,9,106,17,16,106,17,6,114,0,11,114,0,43,43,43,43,17,51,48,49,5,34,38,53,17,51,17,20,22,51,50,54,55,23,6,6,1,53,33,21,2,252,177,157,212,75,127,41,94,61,24,77,142,253,53,3,172,20,200,220,2,148,253,118,126,114,19,19,186,22,20,3,122,190,190,0,1,0,5,255,236,4,20,4,36,0,21,0,25,64,14,19,8,0,15,106,8,7,106,8,6,114,0,11,114,0,43,43,43,43,17,51,48,49,5,32,17,3,52,38,35,35,53,51,50,22,21,19,20,51,50,53,17,51,17,16,2,128,254,108,1,50,62,118,158,157,127,1,192,192,212,20,1,174,1,64,77,63,190,125,155,254,142,240,240,2,138,253,118,254,82,0,5,0,86,254,72,4,90,5,220,0,11,0,15,0,27,0,31,0,35,0,37,64,22,33,0,114,12,14,114,35,29,6,22,105,6,7,114,31,14,0,16,105,0,11,114,0,43,43,57,57,43,43,57,57,43,43,48,49,5,32,0,17,16,0,33,32,0,17,16,0,1,19,51,19,3,50,54,53,52,38,35,34,6,21,20,22,23,17,51,17,3,3,51,3,2,88,254,254,255,0,1,0,1,2,1,2,1,0,255,0,254,148,25,162,25,106,158,156,156,158,157,157,157,76,162,162,25,212,25,20,1,18,1,20,1,20,1,18,254,238,254,236,254,236,254,238,254,92,1,215,254,41,2,68,194,196,196,194,194,196,196,194,38,3,103,252,153,3,148,1,226,254,30,0,2,0,57,254,72,4,105,4,56,0,25,0,31,0,40,64,26,3,16,30,27,4,15,6,28,31,14,114,28,6,114,12,7,106,12,7,114,0,19,106,0,15,114,0,43,43,43,43,43,43,17,23,57,48,49,1,34,38,39,1,38,38,35,34,7,39,54,51,50,22,23,1,22,22,51,50,54,55,23,6,6,37,1,1,51,1,1,3,255,134,154,57,254,168,36,90,65,27,35,24,51,55,132,149,55,1,92,37,92,67,14,29,19,24,28,48,252,57,1,206,1,70,240,254,44,254,192,254,72,123,148,3,121,93,77,8,186,12,118,142,252,124,94,76,4,4,186,7,5,20,3,46,2,154,252,212,253,100,0,0,2,0,106,254,72,4,70,5,220,0,13,0,19,0,31,64,18,16,0,114,14,14,114,10,3,6,114,18,15,0,7,105,0,11,114,0,43,43,57,57,43,50,43,43,48,49,5,32,17,17,51,17,16,33,32,17,17,51,17,16,1,19,3,51,3,19,2,88,254,18,202,1,36,1,36,202,253,173,20,15,192,15,20,20,2,38,2,18,253,238,254,142,1,114,2,18,253,238,253,218,254,92,2,69,5,79,250,177,253,187,0,0,3,0,106,255,236,4,58,4,36,0,16,0,33,0,37,0,39,64,23,34,30,3,5,29,5,35,35,0,13,21,6,114,0,8,106,0,17,26,106,17,11,114,0,43,43,51,43,43,50,18,57,47,23,57,48,49,5,34,38,39,51,55,20,22,51,50,54,53,17,51,17,20,6,33,34,38,53,17,51,17,20,22,51,50,54,53,23,51,6,6,19,17,51,17,3,59,106,109,16,1,87,47,46,46,47,212,130,253,167,119,126,212,47,46,46,47,87,1,16,114,42,180,20,173,191,16,109,91,84,76,2,228,253,28,163,177,177,163,2,228,253,28,76,84,91,109,16,191,173,1,88,2,24,253,232,255,255,0,130,255,236,4,40,6,92,2,38,2,77,0,0,1,6,6,76,222,0,0,11,182,2,20,4,1,1,188,86,0,43,52,0,255,255,0,130,255,236,4,40,5,226,2,38,2,77,0,0,1,6,6,27,194,0,0,13,183,3,2,20,4,1,1,178,86,0,43,52,52,0,255,255,0,94,255,236,4,40,6,92,2,38,2,77,0,0,1,6,6,78,214,0,0,16,64,9,4,3,2,24,17,1,1,178,86,0,43,52,52,52,255,255,0,5,255,236,4,20,6,92,2,38,2,89,0,0,1,6,6,76,30,0,0,11,182,1,22,18,1,1,188,86,0,43,52,0,255,255,0,5,255,236,4,20,5,226,2,38,2,89,0,0,1,6,6,27,2,0,0,13,183,2,1,22,18,1,1,178,86,0,43,52,52,0,255,255,0,5,255,236,4,72,6,92,2,38,2,89,0,0,1,6,6,78,22,0,0,16,64,9,3,2,1,26,8,1,1,178,86,0,43,52,52,52,255,255,0,136,255,236,4,40,6,92,2,38,2,83,0,0,1,6,6,76,30,0,0,11,182,2,24,6,1,1,168,86,0,43,52,0,255,255,0,106,255,236,4,58,6,92,2,38,2,93,0,0,1,6,6,76,30,0,0,11,182,3,38,21,1,1,188,86,0,43,52,0,255,255,0,76,255,236,4,134,6,92,2,38,2,69,0,0,1,6,6,76,0,0,0,11,182,3,38,6,1,1,168,86,0,43,52,0,255,255,0,166,255,236,4,26,6,92,2,38,2,73,0,0,1,6,6,76,70,0,0,11,182,2,34,23,1,1,168,86,0,43,52,0,255,255,0,168,254,52,4,8,6,92,2,38,2,75,0,0,1,6,6,76,20,0,0,11,182,2,21,17,1,1,188,86,0,43,52,0,0,3,0,168,254,117,4,103,4,56,0,7,0,12,0,24,0,38,64,24,13,14,114,14,23,1,18,5,19,6,8,9,6,114,0,8,10,114,6,7,106,6,7,114,0,43,43,43,50,43,18,23,57,43,48,49,33,39,51,54,54,55,1,23,1,17,51,17,7,1,17,52,38,39,3,55,1,22,22,21,17,1,104,38,80,15,79,72,1,150,153,252,65,212,20,2,31,18,22,246,149,1,32,34,27,171,110,200,90,1,253,119,252,63,4,36,252,71,107,254,117,1,151,51,63,28,1,58,140,254,139,42,83,60,254,67,0,3,0,116,255,236,4,60,5,160,0,7,0,19,0,27,0,29,64,17,8,14,106,8,0,4,24,106,4,5,114,0,20,106,0,13,114,0,43,43,43,43,18,57,43,48,49,5,32,17,16,33,32,17,16,1,34,38,53,52,54,51,50,22,21,20,6,3,32,17,16,33,32,17,16,2,88,254,28,1,228,1,228,254,28,67,83,83,67,68,82,82,68,1,14,254,242,254,242,20,2,208,2,228,253,28,253,48,2,58,83,67,68,82,82,68,67,83,254,126,2,24,2,44,253,212,253,232,0,4,0,170,0,0,4,28,5,140,0,3,0,7,0,11,0,15,0,37,64,21,13,12,106,13,4,14,15,106,1,14,4,114,9,4,5,106,8,0,4,12,114,0,43,50,50,43,50,43,50,43,18,57,43,48,49,33,17,51,17,33,53,33,21,51,53,33,21,1,53,37,21,2,12,212,253,202,1,118,172,1,80,252,162,1,78,5,140,250,116,186,186,186,186,4,74,202,120,206,0,2,0,126,0,0,4,72,5,160,0,21,0,25,0,35,64,20,11,10,0,14,7,106,14,5,114,22,23,106,22,20,0,1,106,0,12,114,0,43,43,50,51,43,43,43,18,57,57,48,49,51,53,36,0,53,52,38,35,34,6,7,39,54,54,51,50,22,21,20,0,5,21,35,53,33,21,172,1,73,1,69,120,122,81,176,63,138,69,254,139,225,223,254,239,254,233,252,3,96,224,182,1,140,210,122,122,94,78,137,99,120,213,215,216,254,115,183,216,186,186,0,0,2,0,125,255,236,4,20,5,160,0,22,0,45,0,45,64,25,17,44,16,45,24,105,15,35,34,38,45,45,0,38,31,106,38,5,114,0,7,106,0,13,114,0,43,43,43,43,18,57,47,18,57,57,51,43,50,57,57,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,38,35,35,39,5,22,22,21,20,4,1,39,62,2,53,52,38,35,34,6,7,39,54,54,51,50,22,21,20,6,7,21,2,2,110,183,71,25,61,153,117,154,170,98,187,133,32,24,1,50,170,212,254,235,254,125,24,156,196,92,111,103,76,171,76,138,92,242,149,194,212,164,132,20,26,22,191,17,38,124,112,80,112,58,130,24,13,195,168,190,210,2,158,130,21,82,117,72,87,97,76,76,137,104,95,165,153,128,189,35,120,0,0,4,0,72,0,0,4,96,5,140,0,3,0,7,0,11,0,15,0,33,64,17,5,8,9,106,7,3,8,2,8,2,14,15,12,114,14,4,114,0,43,43,18,57,57,47,47,51,51,43,50,48,49,19,19,51,3,35,55,33,21,51,53,51,21,1,17,51,17,74,200,206,202,206,142,2,78,162,154,254,176,202,1,62,3,254,252,2,176,176,176,176,254,194,5,140,250,116,0,3,0,132,255,236,4,70,5,140,0,26,0,31,0,35,0,51,64,30,33,32,106,33,28,27,16,106,15,27,19,13,106,4,27,19,19,27,4,3,0,28,4,114,0,7,106,0,13,114,0,43,43,43,17,23,57,47,47,47,43,17,51,43,17,51,43,48,49,5,34,38,53,51,20,22,51,50,54,53,52,38,35,34,7,55,54,54,51,50,22,22,21,20,6,6,1,19,51,3,7,19,39,33,21,2,102,230,252,214,140,130,126,138,151,137,140,122,18,79,156,79,138,193,101,113,214,253,219,20,210,34,84,4,18,2,176,20,219,199,111,123,154,140,137,151,66,170,45,31,110,209,149,152,214,112,2,188,2,228,253,152,124,2,42,186,186,0,0,3,0,118,255,236,4,60,5,146,0,8,0,23,0,35,0,42,64,26,18,30,106,15,8,1,12,13,0,6,9,18,18,5,9,24,106,9,13,114,5,6,106,5,4,114,0,43,43,43,43,18,57,47,18,23,57,43,48,49,1,39,53,16,0,37,23,4,17,1,34,0,17,23,17,51,54,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,1,37,175,1,157,1,167,20,253,134,1,22,240,254,252,166,74,30,179,129,186,202,242,222,117,127,133,125,128,140,142,1,69,201,88,1,132,1,148,20,190,27,253,225,253,82,1,29,1,5,118,1,4,111,121,230,210,228,252,184,155,141,123,133,144,132,138,138,0,3,0,112,0,0,4,130,5,140,0,3,0,7,0,11,0,27,64,14,5,9,4,96,9,8,106,1,9,4,114,0,12,114,0,43,43,50,43,26,206,18,57,48,49,33,1,51,1,1,17,51,17,3,53,33,7,1,191,1,232,219,254,24,253,214,206,206,4,18,142,5,140,250,116,3,154,1,212,254,44,1,52,190,190,0,0,5,0,116,255,236,4,60,5,160,0,11,0,23,0,27,0,39,0,51,0,43,64,26,26,27,18,28,40,105,18,28,105,18,6,105,18,0,46,34,106,46,5,114,0,12,106,0,13,114,0,43,43,43,43,18,57,43,43,43,18,57,57,48,49,5,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,3,53,33,21,39,50,54,53,52,38,35,34,6,21,20,22,23,34,38,53,52,54,51,50,22,21,20,6,2,88,231,253,253,231,231,253,253,231,129,141,141,129,129,141,141,37,1,78,168,110,120,120,110,109,121,121,109,211,233,233,211,212,232,232,20,215,195,179,195,195,179,195,215,184,124,112,120,134,134,120,112,124,2,30,102,102,140,103,91,104,112,112,104,91,103,100,175,159,171,189,189,171,159,175,0,0,3,0,118,255,250,4,60,5,160,0,8,0,20,0,35,0,42,64,26,21,9,106,4,31,5,30,3,32,6,27,21,21,0,27,15,106,27,5,114,0,1,106,0,12,114,0,43,43,43,43,18,57,47,18,23,57,43,48,49,23,39,36,17,17,23,21,16,0,3,50,54,53,52,38,35,34,6,21,20,22,23,34,38,53,52,54,51,50,0,17,39,17,35,6,6,248,20,2,122,222,254,99,75,128,138,140,140,120,130,137,37,186,202,243,223,240,1,4,166,74,30,179,6,190,27,2,31,1,138,254,48,254,106,254,87,2,177,144,132,138,138,155,141,123,133,184,230,210,228,252,254,227,254,251,118,254,252,111,121,0,3,0,116,255,236,4,60,5,160,0,7,0,11,0,19,0,30,64,18,8,9,11,10,4,0,4,16,106,4,5,114,0,12,106,0,13,114,0,43,43,43,43,18,23,57,48,49,5,32,17,16,33,32,17,16,37,39,1,23,1,32,17,16,33,32,17,16,2,88,254,28,1,228,1,228,252,252,82,2,130,98,254,142,1,14,254,242,254,242,20,2,208,2,228,253,28,253,48,252,106,3,14,80,252,148,2,24,2,44,253,212,253,232,255,255,1,8,255,236,3,122,2,116,2,7,2,147,0,0,252,212,255,255,1,86,255,254,3,92,2,106,2,7,2,148,0,0,252,222,255,255,1,61,255,255,3,90,2,125,2,7,2,149,0,0,252,221,255,255,1,80,255,235,3,79,2,115,2,7,2,150,0,0,252,211,255,255,1,64,0,0,3,98,2,106,2,7,2,151,0,0,252,222,255,255,1,80,255,236,3,106,2,95,2,7,2,152,0,0,252,211,255,255,1,68,255,236,3,112,2,115,2,7,2,153,0,0,252,211,255,255,1,98,0,0,3,131,2,106,2,7,2,154,0,0,252,222,255,255,1,68,255,237,3,107,2,115,2,7,2,155,0,0,252,211,255,255,1,68,255,240,3,112,2,114,2,7,2,156,0,0,252,210,255,255,1,8,255,236,3,122,2,116,2,7,2,147,0,0,252,212,255,255,1,86,255,254,3,92,2,106,2,7,2,148,0,0,252,222,255,255,1,61,255,255,3,90,2,125,2,7,2,149,0,0,252,221,255,255,1,80,255,235,3,79,2,115,2,7,2,150,0,0,252,211,255,255,1,64,0,0,3,98,2,106,2,7,2,151,0,0,252,222,255,255,1,80,255,236,3,106,2,95,2,7,2,152,0,0,252,211,255,255,1,68,255,236,3,112,2,115,2,7,2,153,0,0,252,211,255,255,1,98,0,0,3,131,2,106,2,7,2,154,0,0,252,222,255,255,1,68,255,237,3,107,2,115,2,7,2,155,0,0,252,211,255,255,1,68,255,240,3,112,2,114,2,7,2,156,0,0,252,210,255,255,1,8,3,24,3,122,5,160,2,6,2,147,0,0,255,255,1,86,3,32,3,92,5,140,2,6,2,148,0,0,255,255,1,61,3,34,3,90,5,160,2,6,2,149,0,0,255,255,1,80,3,24,3,79,5,160,2,6,2,150,0,0,255,255,1,64,3,34,3,98,5,140,2,6,2,151,0,0,255,255,1,80,3,25,3,106,5,140,2,6,2,152,0,0,255,255,1,68,3,25,3,112,5,160,2,6,2,153,0,0,255,255,1,98,3,34,3,131,5,140,2,6,2,154,0,0,255,255,1,68,3,26,3,107,5,160,2,6,2,155,0,0,255,255,1,68,3,30,3,112,5,160,2,6,2,156,0,0,0,2,1,8,3,24,3,122,5,160,0,11,0,23,0,21,64,12,0,12,106,6,0,105,6,18,106,6,3,114,0,43,43,43,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,2,66,142,172,172,142,141,171,171,141,59,72,72,59,61,72,72,3,24,179,148,146,175,172,149,148,179,163,91,73,72,86,86,72,73,91,0,0,4,1,86,3,32,3,92,5,140,0,3,0,7,0,11,0,15,0,35,64,19,13,12,2,6,11,10,106,7,3,2,11,105,2,15,106,14,2,2,114,0,43,50,43,43,50,50,43,50,18,57,57,48,49,1,17,51,17,33,53,51,21,51,53,51,21,1,53,55,21,2,29,156,254,157,207,139,172,254,3,190,3,32,2,108,253,148,141,141,141,141,1,153,158,53,160,0,0,2,1,61,3,34,3,90,5,160,0,19,0,23,0,33,64,18,9,8,12,21,18,0,1,106,20,12,0,105,12,6,106,12,3,114,0,43,43,43,50,43,50,57,18,57,57,48,49,1,53,54,54,53,52,35,34,7,39,54,54,51,50,22,21,20,6,7,21,35,53,33,21,1,86,149,148,102,74,80,66,44,134,79,117,141,121,123,220,1,234,3,34,157,53,115,60,93,46,138,33,35,109,89,78,143,66,153,140,140,0,2,1,80,3,24,3,79,5,160,0,21,0,41,0,32,64,20,23,40,15,16,14,22,6,34,0,7,106,34,0,105,34,28,106,34,3,114,0,43,43,43,43,18,23,57,48,49,1,6,38,39,55,22,22,51,50,54,53,52,38,35,35,53,23,22,22,21,20,6,3,39,54,54,53,52,35,34,7,39,54,54,51,50,22,21,20,6,7,21,2,42,65,110,43,41,31,81,51,64,70,66,61,64,173,86,105,153,211,10,97,86,112,97,78,21,50,113,63,123,133,82,67,3,25,1,14,13,146,6,15,33,30,25,27,96,15,7,77,68,93,100,1,8,116,7,35,24,49,29,149,16,14,71,67,52,75,14,72,0,0,4,1,64,3,34,3,98,5,140,0,3,0,7,0,11,0,15,0,31,64,16,6,11,10,106,4,3,2,14,11,11,14,15,105,14,2,114,0,43,43,57,47,18,57,51,51,43,50,48,49,1,19,51,3,35,55,33,21,51,53,51,21,7,17,51,17,1,65,78,164,78,165,62,1,12,138,78,225,156,3,140,1,223,254,33,140,140,140,140,106,2,106,253,150,0,0,3,1,80,3,25,3,106,5,140,0,23,0,28,0,32,0,27,64,17,6,4,24,14,12,27,15,18,32,9,25,0,105,30,25,2,114,0,43,50,43,23,57,48,49,1,34,38,53,51,20,51,50,54,53,52,38,35,34,7,55,54,54,51,50,22,21,20,6,37,19,51,3,7,39,39,33,21,2,90,127,139,191,76,41,44,50,46,56,46,8,29,73,37,113,124,142,254,142,9,184,14,51,8,8,1,106,3,25,102,92,50,37,33,32,35,28,112,15,17,93,85,104,115,253,1,118,254,231,93,234,140,140,0,0,3,1,68,3,25,3,112,5,160,0,9,0,24,0,33,0,35,64,20,13,1,14,0,25,5,10,6,19,16,3,5,29,29,5,10,105,5,3,114,0,43,43,57,47,18,23,57,18,23,57,48,49,1,39,53,52,54,55,23,6,6,21,19,34,38,53,23,55,51,54,54,51,50,22,21,20,6,39,50,53,52,35,34,6,21,20,1,195,127,227,251,8,163,146,108,136,149,124,30,31,15,92,66,95,103,141,135,100,100,49,55,3,191,80,21,191,180,9,141,4,93,98,254,201,128,118,70,136,42,46,98,89,101,112,130,78,74,40,37,75,0,0,3,1,98,3,34,3,131,5,140,0,3,0,7,0,11,0,27,64,15,6,9,8,4,105,9,8,106,9,3,105,1,9,2,114,0,43,50,43,43,43,18,57,48,49,1,19,51,3,1,17,51,17,39,53,33,7,2,35,175,177,176,254,143,156,156,2,33,63,3,34,2,106,253,150,1,67,1,25,254,231,156,139,139,0,5,1,68,3,26,3,107,5,160,0,11,0,20,0,24,0,32,0,44,0,24,64,15,12,16,24,33,6,23,25,29,8,39,0,105,39,3,114,0,43,43,23,57,48,49,1,34,38,53,52,54,51,50,22,21,20,6,39,50,53,52,35,34,6,21,20,55,53,51,21,39,50,53,52,35,34,21,20,23,34,38,53,52,54,51,50,22,21,20,6,2,87,130,145,145,130,131,145,145,131,100,100,47,52,29,142,72,83,83,82,82,122,136,136,122,123,136,136,3,26,97,88,79,85,85,79,88,97,118,84,81,43,38,84,206,44,44,77,64,63,63,64,60,80,72,73,80,80,73,72,80,0,3,1,68,3,30,3,112,5,160,0,9,0,24,0,33,0,25,64,16,10,21,4,25,6,19,20,5,30,9,16,0,105,16,3,114,0,43,43,23,57,48,49,1,39,54,54,53,55,23,21,20,6,39,34,38,53,52,54,51,50,22,21,39,7,35,6,6,55,50,54,53,52,35,34,21,20,1,146,8,163,146,50,127,227,131,95,103,141,130,137,148,124,30,31,15,92,12,50,54,104,100,3,30,141,5,89,96,145,80,21,188,178,233,98,89,101,112,128,118,70,136,42,46,118,40,37,75,78,74,0,1,0,94,1,50,4,92,4,82,0,3,0,10,179,2,0,106,2,0,47,43,48,49,19,39,1,23,186,92,3,162,92,1,50,136,2,152,130,0,0,7,0,82,255,255,4,104,5,140,0,3,0,7,0,11,0,15,0,19,0,39,0,43,0,68,64,42,38,43,42,106,32,26,106,43,32,105,20,21,106,20,0,1,3,2,4,6,43,8,114,17,16,6,9,15,14,106,8,7,6,15,105,6,19,106,18,6,2,114,0,43,50,43,43,50,50,43,50,18,57,57,43,17,23,57,50,43,43,43,43,50,48,49,19,39,1,23,5,17,51,17,33,53,51,21,51,53,51,21,1,53,55,21,1,53,54,54,53,52,35,34,7,39,54,54,51,50,22,21,20,6,7,21,35,53,33,21,186,92,3,162,92,252,189,156,254,157,207,139,172,254,3,190,1,75,149,148,102,74,80,66,44,134,79,117,141,121,123,220,1,234,1,40,136,2,152,130,166,2,108,253,148,141,141,141,141,1,153,158,53,160,251,19,157,53,115,60,93,46,138,33,35,109,89,78,143,66,153,140,140,0,0,9,0,82,0,0,4,92,5,140,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,68,64,40,25,31,30,106,33,32,24,24,23,22,31,105,0,1,3,2,4,19,22,35,106,34,22,2,114,10,15,14,106,11,7,6,15,15,19,17,106,19,8,114,0,43,43,57,47,57,51,51,43,50,43,50,43,18,23,57,43,50,50,18,57,57,43,50,48,49,19,39,1,23,1,19,51,3,35,55,33,21,51,53,51,21,7,17,51,17,1,17,51,17,33,53,51,21,51,53,51,21,1,53,55,21,186,92,3,162,92,253,213,78,164,78,165,62,1,12,138,78,225,156,253,12,156,254,157,207,139,172,254,3,190,1,30,136,2,152,130,252,174,1,223,254,33,140,140,140,140,106,2,106,253,150,3,32,2,108,253,148,141,141,141,141,1,153,158,53,160,0,0,7,0,94,0,0,4,92,5,160,0,3,0,7,0,11,0,15,0,19,0,41,0,61,0,58,64,37,27,42,34,61,36,35,60,43,48,9,54,20,105,0,1,3,2,4,19,54,3,114,10,15,14,106,11,7,6,15,15,19,18,105,19,8,114,0,43,43,57,47,57,51,51,43,50,43,18,23,57,43,23,57,48,49,19,39,1,23,1,19,51,3,35,55,33,21,51,53,51,21,7,17,51,17,1,6,38,39,55,22,22,51,50,54,53,52,38,35,35,53,23,22,22,21,20,6,3,39,54,54,53,52,35,34,7,39,54,54,51,50,22,21,20,6,7,21,186,92,3,162,92,253,213,78,164,78,165,62,1,12,138,78,225,156,253,45,65,110,43,41,31,81,51,64,70,66,61,64,173,86,105,153,211,10,97,86,112,97,78,21,50,113,63,123,133,82,67,1,50,136,2,152,130,252,154,1,223,254,33,140,140,140,140,106,2,106,253,150,3,25,1,14,13,146,6,15,33,30,25,27,96,15,7,77,68,93,100,1,8,116,7,35,24,49,29,149,16,14,71,67,52,75,14,72,0,10,0,82,255,237,4,121,5,140,0,3,0,7,0,11,0,15,0,19,0,31,0,40,0,44,0,52,0,64,0,63,64,40,32,36,44,53,26,43,45,49,8,20,59,105,0,1,3,2,4,6,20,9,114,17,16,6,10,15,14,106,11,7,6,15,105,6,19,106,18,6,2,114,0,43,50,43,43,50,50,43,50,18,57,57,43,17,23,57,43,23,57,48,49,19,39,1,23,5,17,51,17,33,53,51,21,51,53,51,21,1,53,55,21,1,34,38,53,52,54,51,50,22,21,20,6,39,50,53,52,35,34,6,21,20,55,53,51,21,39,50,53,52,35,34,21,20,23,34,38,53,52,54,51,50,22,21,20,6,186,92,3,162,92,252,189,156,254,157,207,139,172,254,3,190,2,76,130,145,145,130,131,145,145,131,100,100,47,52,29,142,72,83,83,82,82,122,136,136,122,123,136,136,1,40,136,2,152,130,166,2,108,253,148,141,141,141,141,1,153,158,53,160,251,1,97,88,79,85,85,79,88,97,118,84,81,43,38,84,206,44,44,77,64,63,63,64,60,80,72,73,80,80,73,72,80,0,0,8,0,76,255,237,4,121,5,160,0,3,0,25,0,45,0,57,0,66,0,70,0,78,0,90,0,52,64,36,58,62,67,79,52,68,71,75,8,46,85,105,0,1,3,2,4,38,46,9,114,26,18,45,20,19,44,27,32,8,38,4,105,38,3,114,0,43,43,23,57,43,17,23,57,43,23,57,48,49,19,39,1,23,5,6,38,39,55,22,22,51,50,54,53,52,38,35,35,53,23,22,22,21,20,6,3,39,54,54,53,52,35,34,7,39,54,54,51,50,22,21,20,6,7,21,1,34,38,53,52,54,51,50,22,21,20,6,39,50,53,52,35,34,6,21,20,55,53,51,21,39,50,53,52,35,34,21,20,23,34,38,53,52,54,51,50,22,21,20,6,186,92,3,162,92,252,202,65,110,43,41,31,81,51,64,70,66,61,64,173,86,105,153,211,10,97,86,112,97,78,21,50,113,63,123,133,82,67,1,192,130,145,145,130,131,145,145,131,100,100,47,52,29,142,72,83,83,82,82,122,136,136,122,123,136,136,1,40,136,2,152,130,173,1,14,13,146,6,15,33,30,25,27,96,15,7,77,68,93,100,1,8,116,7,35,24,49,29,149,16,14,71,67,52,75,14,72,251,172,97,88,79,85,85,79,88,97,118,84,81,43,38,84,206,44,44,77,64,63,63,64,60,80,72,73,80,80,73,72,80,0,0,9,0,76,255,237,4,121,5,140,0,3,0,27,0,32,0,36,0,48,0,57,0,61,0,69,0,81,0,52,64,35,49,53,61,70,43,60,62,66,8,37,76,105,0,1,3,2,4,35,37,9,114,10,8,32,16,31,22,6,35,4,105,30,35,2,114,0,43,50,43,23,57,43,17,23,57,43,23,57,48,49,19,39,1,23,5,34,38,53,51,20,51,50,54,53,52,38,35,34,7,55,54,54,51,50,22,21,20,6,37,19,51,3,7,39,39,33,21,1,34,38,53,52,54,51,50,22,21,20,6,39,50,53,52,35,34,6,21,20,55,53,51,21,39,50,53,52,35,34,21,20,23,34,38,53,52,54,51,50,22,21,20,6,186,92,3,162,92,252,250,127,139,191,76,41,44,50,46,56,46,8,29,73,37,113,124,142,254,142,9,184,14,51,8,8,1,106,1,37,130,145,145,130,131,145,145,131,100,100,47,52,29,142,72,83,83,82,82,122,136,136,122,123,136,136,1,40,136,2,152,130,173,102,92,50,37,33,32,35,28,112,15,17,93,85,104,115,253,1,118,254,231,93,234,140,140,250,237,97,88,79,85,85,79,88,97,118,84,81,43,38,84,206,44,44,77,64,63,63,64,60,80,72,73,80,80,73,72,80,0,9,0,94,255,237,4,121,5,140,0,3,0,7,0,11,0,15,0,27,0,36,0,40,0,48,0,60,0,46,64,30,28,32,40,49,22,39,41,45,8,16,55,105,16,9,114,10,13,12,8,105,13,12,106,13,7,105,5,13,2,114,0,43,50,43,43,43,18,57,43,43,23,57,48,49,19,39,1,23,5,19,51,3,1,17,51,17,39,53,33,7,1,34,38,53,52,54,51,50,22,21,20,6,39,50,53,52,35,34,6,21,20,55,53,51,21,39,50,53,52,35,34,21,20,23,34,38,53,52,54,51,50,22,21,20,6,186,92,3,162,92,252,195,175,177,176,254,143,156,156,2,33,63,1,37,130,145,145,130,131,145,145,131,100,100,47,52,29,142,72,83,83,82,82,122,136,136,122,123,136,136,1,40,136,2,152,130,164,2,106,253,150,1,67,1,25,254,231,156,139,139,250,236,97,88,79,85,85,79,88,97,118,84,81,43,38,84,206,44,44,77,64,63,63,64,60,80,72,73,80,80,73,72,80,0,0,1,1,196,255,236,2,236,1,20,0,11,0,12,181,0,6,106,0,19,114,0,43,43,48,49,5,34,38,53,52,54,51,50,22,21,20,6,2,88,61,87,87,61,62,86,86,20,87,61,62,86,86,62,61,87,0,1,1,146,254,76,2,202,0,254,0,3,0,10,179,1,0,106,1,0,47,43,48,49,1,19,51,3,1,146,80,232,120,254,76,2,178,253,78,0,0,2,1,196,255,236,2,236,4,56,0,11,0,23,0,21,64,12,12,18,106,12,19,114,6,0,106,6,7,114,0,43,43,43,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,2,88,61,87,87,61,62,86,86,62,61,87,87,61,62,86,86,3,16,87,61,62,86,86,62,61,87,252,220,87,61,62,86,86,62,61,87,0,2,1,146,254,76,2,236,4,56,0,11,0,15,0,19,64,10,14,12,106,14,6,0,106,6,7,114,0,43,43,47,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,1,19,51,3,2,88,61,87,87,61,62,86,86,254,252,80,232,120,3,16,87,61,62,86,86,62,61,87,251,60,2,178,253,78,0,255,255,0,54,255,236,4,122,1,20,2,39,2,165,254,114,0,0,2,39,2,165,1,142,0,0,2,6,2,165,0,0,0,2,1,196,255,236,2,236,5,150,0,3,0,15,0,21,64,12,10,3,105,4,10,106,4,19,114,1,16,114,0,43,43,43,43,48,49,1,3,51,3,3,34,38,53,52,54,51,50,22,21,20,6,1,246,6,208,10,94,61,87,87,61,62,86,86,1,200,3,206,252,50,254,36,87,61,62,86,86,62,61,87,0,2,1,196,254,142,2,236,4,56,0,3,0,15,0,21,64,12,10,1,105,4,10,106,4,0,105,4,7,114,0,43,43,43,43,48,49,1,19,51,19,3,50,22,21,20,6,35,34,38,53,52,54,1,240,6,192,10,104,62,86,86,62,61,87,87,254,142,3,206,252,50,5,170,86,62,61,87,87,61,62,86,0,3,0,156,255,236,4,22,5,160,0,21,0,29,0,41,0,44,64,28,23,22,7,14,4,17,6,0,11,27,106,11,10,106,36,0,105,30,36,106,22,30,19,114,26,11,3,114,0,43,50,43,50,43,43,43,43,18,23,57,48,49,1,53,52,54,55,54,54,53,52,38,35,55,50,22,21,20,6,7,6,6,21,21,1,39,54,36,51,7,34,6,19,34,38,53,52,54,51,50,22,21,20,6,1,244,82,82,81,81,100,92,2,195,215,111,111,64,64,254,110,138,70,1,3,151,2,94,182,244,61,87,87,61,62,86,86,1,200,96,99,151,52,50,119,69,75,83,190,177,161,111,182,71,42,99,59,82,2,110,143,99,120,190,94,251,104,87,61,62,86,86,62,61,87,0,0,3,0,154,254,132,4,20,4,56,0,21,0,29,0,41,0,42,64,27,27,26,3,18,15,6,6,30,36,10,105,30,36,106,22,30,0,105,30,23,105,30,21,105,30,7,114,0,43,43,43,43,50,43,43,17,23,57,48,49,1,34,38,53,52,54,55,54,54,53,53,51,21,20,6,7,6,6,21,20,22,51,7,55,50,54,55,23,6,4,3,50,22,21,20,6,35,34,38,53,52,54,2,52,195,215,111,111,65,63,196,81,83,81,81,101,91,2,2,94,182,64,138,70,254,253,117,62,86,86,62,61,87,87,254,132,178,160,111,182,71,42,100,58,82,96,99,150,53,50,119,69,75,83,190,190,94,78,143,99,120,5,180,86,62,61,87,87,61,62,86,0,255,255,1,196,2,50,2,236,3,90,2,7,2,165,0,0,2,70,0,1,1,48,1,158,3,128,3,238,0,15,0,10,179,8,0,106,8,0,47,43,48,49,1,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,2,88,82,134,80,80,134,82,82,134,80,80,134,1,158,80,134,82,82,134,80,80,134,82,82,134,80,0,0,5,0,110,1,2,4,62,4,152,0,3,0,7,0,11,0,15,0,19,0,49,64,32,16,8,1,7,15,12,6,2,11,17,10,13,4,4,0,10,9,106,18,19,106,3,5,18,10,4,13,0,105,13,150,114,0,43,43,23,57,43,43,17,51,17,18,23,57,48,49,1,1,55,1,5,39,1,23,7,37,55,5,7,3,51,3,7,39,37,23,3,56,254,230,112,1,80,253,150,166,1,80,112,82,254,50,74,1,184,100,34,216,34,48,52,1,184,74,1,2,1,134,96,254,166,140,140,1,90,96,22,132,204,196,70,1,224,254,32,70,140,196,204,255,255,0,182,255,236,3,250,5,150,0,39,2,170,254,242,0,0,0,7,2,170,1,14,0,0,0,4,0,120,0,0,4,96,5,140,0,3,0,7,0,11,0,15,0,35,64,19,5,4,106,12,13,106,5,12,5,12,8,1,9,16,114,0,8,18,114,0,43,50,43,50,17,57,57,47,47,43,43,48,49,33,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,2,178,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,0,255,255,1,196,255,236,2,236,1,20,2,6,2,165,0,0,0,1,0,100,6,32,4,76,6,208,0,3,0,10,179,0,1,106,0,0,47,43,48,49,19,53,33,21,100,3,232,6,32,176,176,0,0,1,0,104,255,66,4,96,6,74,0,3,0,12,181,1,0,106,1,152,114,0,43,43,48,49,23,1,51,1,104,3,36,212,252,220,190,7,8,248,248,0,0,1,0,104,255,66,4,96,6,74,0,3,0,12,181,1,0,106,1,152,114,0,43,43,48,49,5,1,51,1,3,140,252,220,212,3,36,190,7,8,248,248,0,1,1,10,255,56,3,230,6,84,0,17,0,21,64,12,0,15,106,6,0,105,6,9,106,6,154,114,0,43,43,43,43,48,49,5,32,0,17,16,0,33,51,7,35,34,0,17,16,0,51,51,23,3,182,254,187,254,153,1,103,1,69,48,20,8,237,254,255,1,1,237,8,20,200,1,223,1,181,1,175,1,217,180,254,132,254,168,254,162,254,126,180,0,0,1,0,202,255,56,3,166,6,84,0,17,0,21,64,12,0,1,106,10,0,105,10,9,106,10,154,114,0,43,43,43,43,48,49,23,55,51,50,0,17,16,0,35,35,39,51,32,0,17,16,0,33,202,20,8,237,1,1,254,255,237,8,20,48,1,70,1,102,254,154,254,186,200,180,1,130,1,94,1,88,1,124,180,254,39,254,81,254,75,254,33,0,1,1,0,255,42,3,228,6,90,0,54,0,33,64,19,38,39,10,11,106,10,22,0,48,106,22,0,105,22,29,106,22,154,114,0,43,43,43,43,18,57,43,57,57,48,49,5,34,38,53,52,54,53,52,38,38,35,53,50,62,2,53,52,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,21,20,6,7,21,22,22,21,20,6,21,20,22,51,50,54,55,23,6,6,3,58,163,179,42,95,127,48,35,91,87,57,42,179,163,59,78,33,24,35,65,28,71,75,46,138,124,124,138,46,75,71,28,65,35,24,33,78,214,195,175,84,164,88,56,63,25,158,19,37,54,34,92,160,84,169,183,11,9,170,5,5,90,82,87,158,87,99,109,2,34,2,113,95,91,158,83,91,99,6,4,170,9,11,0,0,1,0,206,255,42,3,178,6,90,0,54,0,33,64,19,17,16,45,44,106,45,33,0,7,106,33,0,105,33,26,106,33,154,114,0,43,43,43,43,18,57,43,57,57,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,53,52,54,55,53,38,38,53,52,54,53,52,38,35,34,6,7,39,54,54,51,50,22,21,20,6,21,20,30,2,51,21,34,6,6,21,20,22,21,20,6,1,120,58,79,33,24,35,65,28,71,75,46,138,124,124,138,46,75,71,28,65,35,24,33,79,58,163,179,42,57,87,92,34,48,127,95,42,179,214,11,9,170,4,6,99,91,83,158,91,95,113,2,34,2,109,99,87,158,87,82,90,5,5,170,9,11,183,169,84,160,92,34,54,37,19,158,25,63,56,88,164,84,175,195,0,0,3,1,116,255,42,3,230,6,98,0,3,0,7,0,11,0,27,64,15,9,8,106,9,1,4,5,106,4,1,0,106,1,153,114,0,43,43,50,43,17,51,43,48,49,5,17,51,17,35,53,33,21,1,53,33,21,1,116,200,20,1,190,254,66,1,190,214,7,56,248,200,190,190,6,122,190,190,0,3,0,202,255,42,3,60,6,98,0,3,0,7,0,11,0,27,64,15,9,8,106,9,10,4,5,106,4,10,0,105,10,153,114,0,43,43,50,43,17,51,43,48,49,5,17,51,17,33,53,33,21,1,53,33,21,2,104,212,253,142,1,178,254,78,1,178,214,7,56,248,200,190,190,6,122,190,190,0,0,1,0,152,0,0,3,252,5,140,0,7,0,22,64,12,1,6,5,2,4,0,3,2,114,0,8,114,0,43,43,18,23,57,48,49,33,1,53,1,33,1,21,1,2,173,253,235,2,21,1,79,253,235,2,21,2,189,18,2,189,253,67,18,253,67,0,1,0,180,0,0,4,24,5,140,0,7,0,22,64,12,1,6,5,2,4,0,3,2,114,0,8,114,0,43,43,18,23,57,48,49,51,1,53,1,33,1,21,1,180,2,21,253,235,1,79,2,21,253,235,2,189,18,2,189,253,67,18,253,67,0,0,1,0,221,0,0,3,221,5,140,0,7,0,22,64,12,1,6,5,2,4,0,3,2,114,0,8,114,0,43,43,18,23,57,48,49,33,1,53,1,51,1,21,1,2,242,253,235,2,21,235,253,235,2,21,2,189,18,2,189,253,67,18,253,67,0,0,1,0,211,0,0,3,211,5,140,0,7,0,22,64,12,2,1,5,6,4,0,3,2,114,0,8,114,0,43,43,18,23,57,48,49,51,1,53,1,51,1,21,1,211,2,21,253,235,235,2,21,253,235,2,189,18,2,189,253,67,18,253,67,255,255,0,100,2,104,4,76,3,34,2,6,3,68,0,0,255,255,0,100,2,104,4,76,3,34,2,6,2,193,0,0,0,1,0,70,2,104,4,106,3,34,0,3,0,12,181,1,0,106,1,147,114,0,43,43,48,49,19,53,33,21,70,4,36,2,104,186,186,0,0,1,0,40,2,104,4,136,3,34,0,3,0,12,181,1,0,106,1,147,114,0,43,43,48,49,19,53,33,21,40,4,96,2,104,186,186,0,255,255,0,40,2,104,4,136,3,34,2,6,2,196,0,0,255,255,0,100,2,104,4,76,3,34,2,6,2,193,0,0,255,255,0,100,2,104,4,76,3,34,2,6,2,198,0,0,0,1,0,100,255,80,4,76,0,0,0,3,0,12,181,1,0,106,1,8,114,0,43,43,48,49,23,53,33,21,100,3,232,176,176,176,255,255,0,100,254,32,4,76,0,0,2,38,2,200,0,0,2,7,2,200,0,0,254,208,255,255,1,116,254,76,3,76,0,254,2,7,2,207,0,0,251,114,255,255,0,150,254,76,4,38,0,254,0,39,2,207,0,218,251,114,0,7,2,207,255,34,251,114,255,255,0,200,2,218,4,88,5,140,0,39,2,206,255,34,0,0,0,7,2,206,0,218,0,0,255,255,0,150,2,218,4,38,5,140,0,39,2,207,0,218,0,0,0,7,2,207,255,34,0,0,0,1,1,166,2,218,3,126,5,140,0,3,0,12,181,1,0,106,1,16,114,0,43,43,48,49,1,1,51,3,1,166,1,54,162,190,2,218,2,178,253,78,0,1,1,116,2,218,3,76,5,140,0,3,0,12,181,1,0,106,1,16,114,0,43,43,48,49,1,19,33,1,1,116,190,1,26,254,202,2,218,2,178,253,78,0,255,255,1,140,2,218,3,100,5,140,0,71,2,207,4,216,0,0,192,0,64,0,0,2,0,76,0,74,4,60,3,216,0,7,0,15,0,38,64,23,12,3,4,106,15,0,7,106,1,6,5,2,14,13,9,10,8,8,3,0,105,11,3,0,47,51,43,50,23,57,43,50,43,50,48,49,37,1,53,1,21,5,21,5,5,1,53,1,21,5,21,5,4,60,254,24,1,232,254,212,1,44,253,248,254,24,1,232,254,212,1,44,74,1,128,142,1,128,230,216,18,216,230,1,128,142,1,128,230,216,18,216,0,2,0,116,0,74,4,100,3,216,0,7,0,15,0,46,64,29,13,12,106,13,5,8,9,106,8,6,7,3,4,15,14,10,11,8,5,0,1,106,5,0,105,5,4,106,5,0,47,43,43,43,18,23,57,51,43,17,51,43,48,49,37,53,37,53,37,53,1,21,1,53,37,53,37,53,1,21,2,124,1,44,254,212,1,232,252,16,1,44,254,212,1,232,74,230,216,18,216,230,254,128,142,254,128,230,216,18,216,230,254,128,142,0,0,1,0,236,0,74,3,166,3,216,0,7,0,28,64,16,5,6,2,1,4,3,0,7,106,3,0,105,3,4,106,3,0,47,43,43,43,18,23,57,48,49,37,1,53,1,21,5,21,5,3,166,253,70,2,186,254,42,1,214,74,1,128,142,1,128,220,226,18,226,0,1,1,10,0,74,3,196,3,216,0,7,0,28,64,16,6,3,2,7,4,5,0,1,106,5,0,105,5,4,106,5,0,47,43,43,43,18,23,57,48,49,37,53,37,53,37,53,1,21,1,10,1,214,254,42,2,186,74,220,226,18,226,220,254,128,142,0,255,255,1,26,3,12,3,150,5,140,0,39,2,214,255,56,0,0,0,7,2,214,0,204,0,0,0,1,1,226,3,12,2,202,5,140,0,3,0,12,181,1,0,106,1,16,114,0,43,43,48,49,1,3,51,3,1,246,20,232,20,3,12,2,128,253,128,0,0,2,252,104,2,104,3,152,3,34,0,3,0,7,0,16,183,0,5,4,106,1,5,147,114,0,43,50,43,50,48,49,19,53,33,21,33,53,33,21,120,3,32,248,208,3,12,2,104,186,186,186,186,0,0,3,247,184,2,104,3,152,3,34,0,3,0,7,0,11,0,27,64,13,1,9,9,5,0,8,8,5,4,106,5,147,114,0,43,43,50,17,51,17,51,17,51,48,49,19,53,33,21,33,53,33,21,33,53,33,21,120,3,32,244,32,3,12,1,74,3,32,2,104,186,186,186,186,186,186,0,2,247,184,0,112,3,192,5,24,0,15,0,19,0,38,64,24,6,15,14,7,4,13,1,0,106,16,1,105,17,16,106,12,13,106,17,12,105,17,147,114,0,43,43,43,43,43,43,17,23,57,48,49,55,53,62,3,55,17,46,3,39,53,1,21,5,53,33,21,6,167,211,122,63,19,20,67,124,209,162,3,186,243,248,10,202,112,240,71,85,44,17,1,1,20,2,14,43,86,73,240,253,234,122,34,188,188,0,2,252,104,254,202,3,12,6,194,0,3,0,7,0,21,64,12,5,4,105,5,149,114,1,0,106,1,147,114,0,43,43,43,43,48,49,1,53,33,21,3,17,51,17,252,104,6,24,60,200,2,104,186,186,252,98,7,248,248,8,0,0,2,252,104,0,112,3,192,5,24,0,15,0,19,0,38,64,24,6,15,14,7,4,13,1,0,106,16,1,105,17,16,106,12,13,106,17,12,105,17,147,114,0,43,43,43,43,43,43,17,23,57,48,49,55,53,62,3,55,17,46,3,39,53,1,21,5,53,33,21,6,167,211,123,63,18,20,67,124,209,162,3,186,248,168,6,26,112,230,74,90,46,17,1,1,20,2,14,43,86,73,240,253,234,122,34,188,188,0,3,247,184,0,112,3,192,5,24,0,7,0,11,0,27,0,52,64,33,7,2,3,18,19,27,26,6,8,5,0,5,24,25,106,4,9,24,105,0,13,12,106,1,8,13,105,9,8,106,9,147,114,0,43,43,43,50,43,50,43,50,43,50,17,18,23,57,48,49,55,53,1,53,1,53,1,21,5,53,33,21,1,53,62,3,55,17,46,3,39,53,1,21,6,2,138,253,118,3,186,243,248,7,88,253,132,167,211,122,63,19,20,67,124,209,162,3,186,112,240,1,92,18,1,90,240,253,234,122,34,188,188,254,10,240,68,84,46,19,1,1,20,2,14,42,87,73,240,253,234,122,0,2,252,104,0,112,3,152,5,24,0,7,0,11,0,36,64,23,7,0,106,8,7,105,1,2,5,6,4,9,8,106,4,3,106,9,4,105,9,147,114,0,43,43,43,43,23,57,43,43,48,49,37,1,53,1,21,1,21,1,1,53,33,21,3,152,252,70,3,186,253,118,2,138,248,208,3,184,112,2,24,122,2,22,240,254,166,18,254,164,1,16,168,168,0,3,247,184,0,112,3,152,5,24,0,3,0,11,0,19,0,48,64,31,7,16,15,106,8,1,16,105,4,19,12,106,11,0,19,105,13,14,18,17,5,6,9,10,8,1,0,106,1,147,114,0,43,43,23,57,43,50,43,50,43,50,43,50,48,49,1,53,33,21,1,1,53,1,21,1,21,1,5,1,53,1,21,1,21,1,247,184,5,52,6,172,252,70,3,186,253,118,2,138,252,204,252,70,3,186,253,118,2,138,2,102,188,188,254,10,2,24,122,2,22,240,254,166,18,254,164,240,2,24,122,2,22,240,254,166,18,254,164,0,0,2,252,104,2,35,3,232,3,209,0,29,0,33,0,35,64,20,6,15,106,21,0,106,6,30,21,21,30,25,105,11,31,30,106,31,147,114,0,43,43,50,43,57,47,18,57,43,43,48,49,1,34,38,39,38,38,35,34,6,21,21,35,53,52,54,51,50,22,23,22,22,51,50,54,53,53,51,21,20,6,37,53,33,21,2,228,74,129,62,57,113,60,55,50,204,138,152,77,138,60,58,99,55,45,40,202,123,248,251,4,36,2,35,62,37,35,61,42,47,27,17,158,142,62,37,35,61,57,62,110,100,173,157,79,186,186,0,0,6,252,120,255,56,3,218,6,84,0,27,0,31,0,35,0,39,0,43,0,47,0,65,64,44,45,39,30,34,43,40,29,35,44,36,10,32,41,32,28,38,37,106,46,47,106,31,33,46,38,4,41,28,105,41,150,114,0,21,106,8,0,105,8,15,106,8,154,114,0,43,43,43,43,43,43,23,57,43,43,17,51,17,18,23,57,48,49,7,34,36,2,17,16,18,36,51,50,22,23,7,38,38,35,32,0,17,16,0,33,50,54,55,23,6,6,1,1,55,1,5,39,1,23,7,37,55,5,7,3,51,3,7,39,37,23,140,242,254,170,180,180,1,86,242,27,54,27,20,17,34,17,254,236,254,214,1,42,1,20,20,39,19,20,29,60,3,67,254,230,112,1,80,253,150,166,1,80,112,82,254,50,74,1,184,100,34,216,34,48,52,1,184,74,200,215,1,153,1,36,1,32,1,148,212,1,4,180,4,1,254,132,254,168,254,162,254,126,2,5,180,5,2,1,202,1,134,96,254,166,140,140,1,90,96,22,132,204,196,70,1,224,254,32,70,140,196,204,0,0,2,252,64,254,202,2,188,6,194,0,53,0,57,0,41,64,25,55,54,106,55,149,114,37,38,11,10,106,11,21,0,47,106,21,0,105,21,28,106,21,154,114,0,43,43,43,43,18,57,43,57,57,43,43,48,49,5,34,38,53,52,54,53,52,38,38,35,53,50,54,54,53,52,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,21,20,6,7,21,22,22,21,20,6,21,20,22,51,50,54,55,23,6,6,5,17,51,17,254,222,210,232,2,81,108,41,39,109,82,2,232,210,93,144,33,24,63,115,50,120,126,6,117,105,105,117,6,126,120,50,115,63,24,52,125,2,185,200,214,226,204,69,135,72,56,63,25,158,34,64,46,75,132,69,197,215,11,9,170,5,5,122,110,71,130,71,99,109,2,34,2,113,95,74,130,68,119,131,6,4,170,9,11,96,7,248,248,8,0,0,5,252,67,255,42,3,152,6,90,0,54,0,58,0,62,0,66,0,70,0,62,64,38,66,65,106,57,58,106,45,16,17,44,4,57,66,57,66,57,68,67,68,60,2,114,67,59,8,114,0,7,106,33,0,105,33,26,106,33,154,114,0,43,43,43,43,43,50,43,50,17,18,57,57,47,47,18,23,57,43,43,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,53,52,54,55,53,38,38,53,52,54,53,52,38,35,34,6,7,39,54,54,51,50,22,21,20,6,21,20,30,2,51,21,34,6,6,21,20,22,21,20,6,19,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,252,237,58,79,33,24,35,65,28,71,75,46,138,124,124,138,46,75,71,28,65,35,24,33,79,58,163,179,42,57,87,92,34,48,127,95,42,179,125,5,139,252,158,120,176,120,253,46,5,132,254,82,120,176,120,214,11,9,170,4,6,99,91,83,158,91,95,113,2,34,2,109,99,87,158,87,82,90,5,5,170,9,11,183,169,84,160,92,42,64,45,23,98,31,75,68,88,164,84,175,195,2,62,170,170,254,152,5,140,250,116,3,122,170,170,252,134,5,140,250,116,0,0,4,253,108,254,202,2,142,6,194,0,3,0,7,0,11,0,15,0,35,64,21,13,15,106,13,149,114,10,11,106,10,1,7,6,106,7,1,3,105,1,153,114,0,43,43,50,43,17,51,43,43,43,48,49,5,17,51,17,35,53,33,21,1,53,33,21,1,17,51,17,253,108,202,20,2,154,253,102,2,154,1,10,200,200,7,28,248,228,176,176,6,108,176,176,249,38,7,248,248,8,0,0,7,252,63,255,42,3,152,6,98,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,55,64,33,21,22,106,16,26,21,105,26,25,106,19,26,153,114,15,14,106,6,7,106,15,6,15,6,2,11,3,8,114,10,2,2,114,0,43,50,43,50,17,57,57,47,47,43,43,43,50,43,43,50,43,48,49,33,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,35,17,51,3,33,53,33,17,33,53,33,1,234,120,176,120,251,194,5,60,252,158,120,176,120,253,118,5,60,251,25,200,200,180,254,66,1,190,254,66,1,190,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,251,176,7,56,248,200,190,5,188,190,0,2,252,216,2,48,3,152,3,88,0,3,0,15,0,21,64,12,10,4,106,1,10,105,1,0,106,1,147,114,0,43,43,43,43,48,49,3,53,33,21,5,34,38,53,52,54,51,50,22,21,20,6,180,4,76,249,212,61,87,87,61,62,86,86,2,102,186,186,54,87,61,62,86,86,62,61,87,255,255,253,160,255,236,2,96,1,20,0,39,2,165,251,220,0,0,0,7,2,165,255,116,0,0,255,255,249,244,255,236,1,92,1,20,0,39,2,165,248,48,0,0,0,39,2,165,251,80,0,0,0,7,2,165,254,112,0,0,0,4,247,236,1,110,3,152,4,28,0,3,0,7,0,19,0,31,0,35,64,21,26,20,106,14,8,106,26,14,1,4,5,106,1,4,105,1,0,106,1,148,114,0,43,43,43,43,18,57,57,43,43,48,49,1,53,33,21,1,53,33,21,37,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,254,12,5,140,250,116,5,140,244,232,61,87,87,61,62,86,86,2,196,61,87,87,61,62,86,86,3,98,186,186,254,12,186,186,194,87,61,62,86,86,62,61,87,87,61,62,86,86,62,61,87,0,3,248,40,0,214,3,152,4,180,0,7,0,19,0,31,0,47,64,29,14,8,106,26,20,106,14,26,0,4,3,106,2,4,106,7,0,106,1,7,106,6,5,2,1,106,2,151,114,0,43,43,57,57,43,43,43,43,17,57,57,43,43,48,49,37,1,53,1,21,1,21,1,37,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,152,251,142,4,114,252,164,3,92,245,36,61,87,87,61,62,86,86,3,168,61,87,87,61,62,86,86,214,1,138,202,1,138,220,254,246,18,254,246,108,87,61,62,86,86,62,61,87,87,61,62,86,86,62,61,87,255,255,253,120,255,236,3,38,5,160,0,39,2,165,251,180,0,0,0,7,2,172,255,16,0,0,0,3,252,216,1,110,3,152,4,28,0,3,0,7,0,19,0,29,64,17,14,8,106,14,1,4,5,106,1,4,105,1,0,106,1,148,114,0,43,43,43,43,18,57,43,48,49,3,53,33,21,1,53,33,21,37,34,38,53,52,54,51,50,22,21,20,6,100,3,252,252,4,3,252,249,212,61,87,87,61,62,86,86,3,98,186,186,254,12,186,186,194,87,61,62,86,86,62,61,87,255,255,253,160,255,236,2,96,4,56,0,39,2,167,251,220,0,0,0,7,2,167,255,116,0,0,255,255,249,244,255,236,1,92,4,56,0,39,2,167,248,48,0,0,0,39,2,167,251,80,0,0,0,7,2,167,254,112,0,0,0,6,247,236,0,160,3,152,4,236,0,3,0,7,0,19,0,31,0,43,0,55,0,45,64,28,32,14,8,106,38,1,14,105,50,20,26,106,44,4,20,105,4,5,106,1,4,105,1,0,106,1,148,114,0,43,43,43,43,43,50,43,50,43,50,43,50,48,49,1,53,33,21,1,53,33,21,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,254,12,5,140,250,116,5,140,247,234,61,87,87,61,62,86,86,62,61,87,87,61,62,86,86,252,192,61,87,87,61,62,86,86,62,61,87,87,61,62,86,86,3,98,186,186,254,12,186,186,2,86,87,61,62,86,86,62,61,87,252,220,87,61,62,86,86,62,61,87,3,36,87,61,62,86,86,62,61,87,252,220,87,61,62,86,86,62,61,87,0,0,4,252,216,0,160,3,152,4,236,0,3,0,7,0,19,0,31,0,37,64,24,14,8,106,1,14,105,20,26,106,4,20,105,4,5,106,1,4,105,1,0,106,1,148,114,0,43,43,43,43,43,43,43,43,48,49,3,53,33,21,1,53,33,21,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,200,4,96,251,160,4,96,249,212,61,87,87,61,62,86,86,62,61,87,87,61,62,86,86,3,58,186,186,254,12,186,186,2,126,87,61,62,86,86,62,61,87,252,220,87,61,62,86,86,62,61,87,0,0,3,252,216,0,160,3,194,4,236,0,7,0,19,0,31,0,53,64,34,2,3,7,6,20,26,106,0,20,105,1,0,106,7,1,106,6,7,106,14,8,106,5,14,105,4,5,106,6,4,106,6,151,114,0,43,43,43,43,43,43,43,43,43,43,17,18,57,57,48,49,39,53,1,53,1,53,1,21,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,156,3,52,252,204,4,94,249,170,61,87,87,61,62,86,86,62,61,87,87,61,62,86,86,214,220,1,10,18,1,10,220,254,118,202,1,100,87,61,62,86,86,62,61,87,252,220,87,61,62,86,86,62,61,87,0,3,252,224,0,160,3,152,4,236,0,7,0,19,0,31,0,53,64,34,6,5,1,2,14,8,106,3,14,105,4,3,106,2,4,106,20,26,106,0,20,105,7,0,106,1,7,106,2,1,106,2,151,114,0,43,43,43,43,43,43,43,43,43,43,17,18,57,57,48,49,37,1,53,1,21,1,21,1,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,152,251,162,4,94,252,204,3,52,249,220,61,87,87,61,62,86,86,62,61,87,87,61,62,86,86,214,1,138,202,1,138,220,254,246,18,254,246,2,18,87,61,62,86,86,62,61,87,252,220,87,61,62,86,86,62,61,87,255,255,248,210,255,66,3,32,6,74,0,39,2,167,247,14,0,0,0,39,2,181,254,192,0,0,0,7,2,181,251,0,0,0,255,255,253,136,254,76,2,120,4,56,0,39,2,168,251,246,0,0,0,6,2,168,140,0,255,255,253,160,255,236,2,96,5,150,0,39,2,170,251,220,0,0,0,7,2,170,255,116,0,0,255,255,248,200,255,236,2,136,5,150,0,39,2,170,247,4,0,0,0,39,2,170,251,100,0,0,0,6,2,165,156,0,0,3,252,4,255,156,3,252,5,240,0,3,0,7,0,11,0,29,64,18,4,5,106,4,0,105,9,4,105,9,8,106,9,1,105,9,148,114,0,43,43,43,43,43,43,48,49,5,1,51,1,1,53,33,21,1,53,33,21,253,252,3,46,202,252,210,253,62,7,248,248,8,7,248,100,6,84,249,172,1,210,186,186,1,244,186,186,0,0,4,247,84,255,156,3,252,5,240,0,3,0,7,0,11,0,15,0,37,64,24,13,1,105,12,13,106,9,12,105,4,0,105,5,4,106,8,5,105,9,8,106,9,147,114,0,43,43,43,43,43,43,43,43,48,49,5,1,51,1,1,53,33,21,1,53,33,21,1,53,33,21,251,204,3,46,202,252,210,250,190,12,168,243,88,12,168,243,88,12,168,100,6,84,249,172,1,50,186,186,1,154,186,186,1,154,186,186,0,255,255,252,220,255,236,2,136,5,160,0,39,2,172,252,64,0,0,0,6,2,165,156,0,255,255,252,220,255,236,2,136,5,160,0,39,2,172,252,64,0,0,0,6,2,167,156,0,255,255,252,66,255,236,3,108,5,160,0,39,2,172,251,166,0,0,0,7,2,172,255,86,0,0,0,5,252,22,255,236,3,152,5,160,0,3,0,9,0,31,0,39,0,51,0,54,64,36,33,24,17,32,14,27,6,36,46,10,105,40,46,106,40,9,114,37,36,20,106,36,3,114,3,2,106,8,3,105,8,9,106,8,148,114,0,43,43,43,43,43,43,50,43,43,43,17,23,57,48,49,3,53,33,21,1,54,54,55,33,21,1,53,52,54,55,54,54,53,52,38,35,55,50,22,21,20,6,7,6,6,21,21,1,39,54,36,51,7,34,6,19,34,38,53,52,54,51,50,22,21,20,6,98,3,250,252,60,23,34,7,3,132,249,214,82,82,81,81,100,92,2,195,215,111,111,64,64,254,110,138,70,1,3,151,2,94,182,244,61,87,87,61,62,86,86,1,110,186,186,1,244,41,102,43,186,254,102,96,99,151,52,50,119,69,75,83,190,177,161,111,182,71,42,99,59,82,2,110,143,99,120,190,94,251,104,87,61,62,86,86,62,61,87,0,0,6,252,139,255,56,3,218,6,84,0,25,0,29,0,33,0,37,0,41,0,45,0,65,64,44,34,42,33,27,41,38,32,28,43,37,10,39,30,36,35,106,44,45,106,31,29,44,36,4,26,26,39,30,105,39,150,114,0,7,106,20,0,105,20,13,106,20,154,114,0,43,43,43,43,43,43,50,18,23,57,43,43,17,18,23,57,48,49,23,34,38,39,55,22,22,51,32,0,17,16,0,33,34,6,7,39,54,54,51,32,0,17,16,0,1,1,55,1,5,39,1,23,7,37,55,5,7,3,51,3,7,39,37,23,222,29,60,29,20,20,39,19,1,19,1,43,254,213,254,237,17,34,17,20,27,54,27,1,108,1,144,254,112,253,11,254,230,112,1,80,253,150,166,1,80,112,82,254,50,74,1,184,100,34,216,34,48,52,1,184,74,200,2,5,180,5,2,1,130,1,94,1,88,1,124,1,4,180,4,1,254,39,254,81,254,75,254,33,1,202,1,134,96,254,166,140,140,1,90,96,22,132,204,196,70,1,224,254,32,70,140,196,204,255,255,251,252,1,2,4,4,4,152,0,39,2,176,251,142,0,0,0,6,2,176,198,0,255,255,247,76,1,2,4,4,5,196,0,38,2,176,198,0,0,39,2,176,246,222,0,0,0,7,2,176,251,90,1,44,255,255,251,252,0,214,3,238,4,180,0,39,2,176,251,142,0,0,0,6,3,73,158,0,255,255,251,252,255,66,4,38,6,74,0,39,2,176,251,142,0,0,0,6,2,181,198,0,0,5,252,104,255,56,3,210,6,84,0,3,0,7,0,11,0,15,0,33,0,51,64,31,16,31,106,22,16,105,22,24,106,22,154,114,12,13,106,9,8,106,12,9,12,9,4,1,5,2,114,0,4,8,114,0,43,50,43,50,18,57,57,47,47,43,43,43,43,43,43,48,49,33,19,51,3,33,19,51,3,1,53,33,21,1,53,33,21,1,32,0,17,16,0,33,51,7,35,34,0,17,16,0,51,51,23,254,162,120,176,120,253,156,120,176,120,254,202,5,60,250,196,5,60,1,254,254,187,254,153,1,103,1,69,48,20,8,237,254,255,1,1,237,8,20,5,140,250,116,5,140,250,116,1,104,170,170,2,18,170,170,251,190,1,223,1,181,1,175,1,217,180,254,132,254,168,254,162,254,126,180,0,5,252,84,255,42,3,228,6,90,0,54,0,58,0,62,0,66,0,70,0,60,64,37,67,68,106,60,59,106,10,39,38,11,4,60,67,60,67,60,55,64,56,2,114,63,55,8,114,0,48,106,22,0,105,22,29,106,22,154,114,0,43,43,43,43,43,50,43,50,18,57,57,47,47,18,23,57,43,43,48,49,5,34,38,53,52,54,53,52,38,38,35,53,50,62,2,53,52,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,21,20,6,7,21,22,22,21,20,6,21,20,22,51,50,54,55,23,6,6,37,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,3,58,163,179,42,95,127,48,35,91,87,57,42,179,163,59,78,33,24,35,65,28,71,75,46,138,124,124,138,46,75,71,28,65,35,24,33,78,249,101,120,176,120,254,202,5,220,252,94,120,176,120,253,22,5,220,214,195,175,92,179,95,56,63,25,98,19,37,54,34,100,175,91,169,183,11,9,170,5,5,90,82,87,158,87,99,109,2,34,2,113,95,91,158,83,91,99,6,4,170,9,11,214,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,0,0,7,252,104,255,42,3,194,6,98,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,57,64,34,23,16,23,22,106,17,16,105,26,27,106,26,17,153,114,12,13,106,9,8,106,12,9,12,9,4,1,5,2,114,0,4,8,114,0,43,50,43,50,18,57,57,47,47,43,43,43,50,43,43,43,17,51,48,49,33,19,51,3,33,19,51,3,1,53,33,21,1,53,33,21,3,17,51,17,35,53,33,21,1,53,33,21,254,162,120,176,120,253,156,120,176,120,254,202,5,80,250,176,5,80,104,200,20,1,190,254,66,1,190,5,140,250,116,5,140,250,116,1,104,170,170,2,18,170,170,251,176,7,56,248,200,190,190,6,122,190,190,255,255,252,104,0,0,3,2,5,140,0,39,2,178,251,240,0,0,0,7,2,167,0,22,0,180,255,255,252,104,255,236,3,2,5,150,0,39,2,178,251,240,0,0,0,6,2,170,22,0,0,6,252,104,255,236,3,194,5,160,0,30,0,34,0,38,0,42,0,46,0,58,0,66,64,41,26,4,7,23,4,20,53,30,105,47,53,106,47,9,114,14,43,44,106,32,31,106,43,32,43,32,35,40,36,2,114,39,35,8,114,20,10,106,20,3,114,0,43,43,43,50,43,50,18,57,57,47,47,43,43,57,43,43,43,17,23,57,48,49,1,53,52,54,55,54,54,53,52,38,35,34,6,6,21,35,52,62,2,51,50,22,21,20,6,7,6,6,21,21,5,53,33,21,1,19,51,3,33,19,51,3,1,53,33,21,19,34,38,53,52,54,51,50,22,21,20,6,1,160,82,82,81,81,106,96,77,109,58,202,60,115,167,106,200,220,111,111,64,64,250,4,3,232,252,158,120,176,120,1,4,120,176,120,253,22,4,192,222,61,87,87,61,62,86,86,1,200,96,99,151,52,53,123,72,71,77,53,102,73,100,155,107,56,172,156,114,188,72,42,99,59,82,96,170,170,254,152,5,140,250,116,5,140,250,116,3,122,170,170,252,114,87,61,62,86,86,62,61,87,255,255,252,104,0,0,3,152,5,140,0,39,2,178,251,240,0,0,0,7,2,178,255,56,0,0,0,14,247,184,0,0,3,152,5,140,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,119,64,61,54,38,38,22,5,5,20,21,106,55,39,39,23,4,4,20,47,31,31,15,0,0,13,12,106,46,30,30,14,1,1,13,20,13,20,13,16,41,49,49,25,25,33,33,9,9,17,2,114,40,48,48,24,24,32,32,8,8,16,8,114,0,43,50,17,51,17,51,17,51,17,51,43,50,17,51,17,51,17,51,17,51,17,57,57,47,47,17,51,17,51,51,17,51,43,50,17,51,51,17,51,17,51,17,51,51,17,51,43,50,17,51,51,17,51,48,49,1,53,33,21,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,251,38,5,50,250,206,5,50,249,154,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,2,78,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,2,78,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,1,104,170,170,2,18,170,170,252,134,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,252,134,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,252,134,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,0,0,18,243,8,0,0,3,152,5,140,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,143,64,73,60,44,44,28,28,4,4,13,12,106,61,45,45,29,29,5,5,13,69,53,53,37,37,1,1,20,21,106,68,52,52,36,36,0,0,20,13,20,13,20,16,57,65,65,41,41,49,49,25,25,33,33,9,9,17,2,114,56,64,64,40,40,48,48,24,24,32,32,8,8,16,8,114,0,43,50,17,51,17,51,17,51,17,51,17,51,17,51,43,50,17,51,17,51,17,51,17,51,17,51,17,51,17,57,57,47,47,17,51,17,51,17,51,17,51,43,50,17,51,17,51,17,51,17,51,17,51,17,51,17,51,43,50,17,51,17,51,17,51,48,49,1,53,33,21,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,246,118,9,226,246,30,9,226,244,234,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,2,138,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,2,138,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,2,138,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,3,122,170,170,253,238,170,170,254,152,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,252,134,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,252,134,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,252,134,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,0,0,6,252,104,0,0,3,152,5,140,0,3,0,7,0,11,0,15,0,19,0,23,0,47,64,25,1,20,21,106,0,20,4,13,12,106,5,13,20,13,20,13,16,9,17,2,114,8,16,8,114,0,43,50,43,50,18,57,57,47,47,17,51,43,50,17,51,43,50,48,49,19,53,33,21,1,53,33,21,1,19,51,3,1,53,33,21,1,19,51,3,1,53,33,21,160,2,248,253,8,2,248,251,10,120,176,120,253,22,3,232,252,158,120,176,120,254,202,3,232,3,116,176,176,253,242,176,176,254,154,5,140,250,116,1,104,170,170,254,152,5,140,250,116,3,122,170,170,0,5,252,104,255,80,3,192,5,140,0,3,0,7,0,11,0,15,0,19,0,41,64,23,16,17,106,5,4,106,16,5,16,5,8,1,9,2,114,12,8,0,105,13,8,8,114,0,43,50,43,50,43,50,18,57,57,47,47,43,43,48,49,5,19,51,3,1,53,33,21,1,19,51,3,5,55,33,21,1,53,33,21,254,148,134,176,134,253,36,3,232,252,158,120,176,120,1,54,2,4,234,248,168,3,232,176,6,60,249,196,2,24,170,170,254,152,5,140,250,116,176,176,176,4,42,170,170,0,6,247,184,255,80,3,212,6,84,0,19,0,23,0,27,0,31,0,35,0,39,0,59,64,34,32,33,106,21,20,106,32,21,32,21,24,29,25,2,114,18,1,2,37,37,28,0,24,36,105,24,8,114,9,11,106,9,154,114,0,43,43,43,43,50,50,51,17,51,57,57,43,50,18,57,57,47,47,43,43,48,49,5,37,53,34,38,2,53,16,0,33,51,7,35,34,0,17,16,0,51,51,1,53,33,21,1,19,51,3,23,19,51,3,1,53,33,21,1,53,33,23,3,206,254,150,86,168,110,1,103,1,69,48,20,8,237,254,255,1,1,237,8,243,248,3,232,252,158,120,176,120,246,134,176,134,253,36,3,232,254,132,8,192,234,176,130,66,163,1,55,222,1,175,1,217,180,254,132,254,168,254,157,254,121,1,134,170,170,254,152,5,140,250,116,176,6,60,249,196,4,42,170,170,251,214,176,176,0,255,255,252,48,255,66,4,4,6,74,0,39,2,181,251,200,0,0,0,6,2,176,198,0,0,3,252,48,255,66,3,154,6,74,0,3,0,7,0,11,0,29,64,18,9,11,106,9,152,114,3,2,106,6,3,105,6,7,106,6,148,114,0,43,43,43,43,43,43,48,49,1,55,33,21,1,55,33,21,1,1,51,1,254,204,90,4,116,252,24,90,3,142,248,150,3,36,212,252,220,1,110,186,186,1,244,186,186,251,224,7,8,248,248,0,5,247,128,255,66,3,152,6,74,0,3,0,7,0,11,0,15,0,19,0,37,64,22,17,19,106,17,152,114,7,14,15,106,2,11,10,106,3,14,11,105,6,14,148,114,0,43,50,43,50,43,50,43,50,43,43,48,49,1,55,33,21,1,55,33,21,19,53,33,21,1,53,33,21,1,1,51,1,250,28,90,4,116,252,24,90,3,142,158,4,16,251,240,4,16,243,232,3,36,212,252,220,1,110,186,186,1,244,186,186,254,12,186,186,1,244,186,186,251,224,7,8,248,248,0,0,2,252,48,255,66,3,238,6,74,0,7,0,11,0,45,64,28,2,3,7,6,9,11,106,9,152,114,1,0,106,7,1,106,6,7,106,4,5,106,6,4,105,6,151,114,0,43,43,43,43,43,43,43,43,17,18,57,57,48,49,55,53,1,53,1,53,1,21,1,1,51,1,48,2,188,252,50,4,208,248,66,3,36,212,252,220,214,220,1,10,18,1,128,215,254,5,202,252,226,7,8,248,248,255,255,252,98,255,66,3,204,6,74,0,39,2,181,251,250,0,0,0,7,2,181,255,108,0,0,255,255,247,218,255,66,3,172,6,74,0,39,2,181,255,76,0,0,0,39,2,181,247,114,0,0,0,7,2,181,251,110,0,0,255,255,252,98,255,66,3,204,6,74,0,39,2,182,251,250,0,0,0,7,2,182,255,108,0,0,0,2,247,184,255,80,3,152,6,224,0,3,0,7,0,19,64,10,5,149,114,7,2,3,106,2,8,114,0,43,43,57,43,48,49,5,53,33,21,37,17,51,17,247,184,11,224,249,172,200,176,176,176,56,7,88,248,168,0,1,252,104,255,80,3,152,0,0,0,3,0,12,181,1,0,106,1,8,114,0,43,43,48,49,5,53,33,21,252,104,7,48,176,176,176,0,255,255,1,196,3,16,2,236,4,56,2,7,2,165,0,0,3,36,255,255,1,146,254,76,2,236,4,56,2,6,2,168,0,0,0,5,0,160,254,192,4,110,6,204,0,3,0,21,0,25,0,29,0,47,0,48,64,28,26,27,14,30,4,13,31,105,13,13,22,40,23,39,106,1,23,2,114,22,5,106,4,0,96,22,8,114,0,43,26,206,51,43,43,206,43,51,18,57,47,43,23,57,48,49,1,17,51,17,1,53,33,50,54,53,52,38,35,33,39,33,50,22,21,20,6,35,33,17,51,17,3,53,33,21,37,53,51,50,54,53,52,38,35,35,39,33,50,22,21,20,6,35,2,2,138,254,206,1,44,132,146,152,140,254,230,24,1,100,216,236,224,206,253,224,200,82,1,160,254,164,240,113,125,131,121,222,24,1,0,216,236,224,206,254,192,8,12,247,244,1,64,190,121,109,112,123,91,186,170,186,204,5,140,250,116,2,186,98,98,56,91,101,94,92,98,190,187,173,147,159,0,2,0,96,254,192,4,125,6,204,0,3,0,25,0,33,64,18,12,13,4,9,16,105,1,9,3,114,4,21,105,0,96,4,9,114,0,43,26,205,43,43,205,43,18,57,57,48,49,1,17,51,17,3,32,17,16,0,33,50,22,23,7,38,38,35,34,2,17,16,33,50,55,23,6,2,122,138,14,253,106,1,78,1,48,147,218,50,148,45,139,81,193,233,1,226,145,141,46,174,254,192,8,12,247,244,1,44,2,220,1,91,1,125,93,86,147,68,74,254,234,255,0,253,210,60,176,68,0,2,0,136,254,178,4,73,5,114,0,3,0,29,0,27,64,15,10,17,105,1,10,7,114,4,23,105,3,96,4,11,114,0,43,26,205,43,43,205,43,48,49,1,17,51,17,3,32,0,17,16,0,33,50,22,23,7,38,38,35,34,6,21,20,22,51,50,54,55,23,6,6,2,82,138,50,254,251,254,227,1,23,1,3,155,221,47,163,45,140,83,147,163,182,168,80,157,75,24,87,184,254,178,6,192,249,64,1,58,1,29,1,11,1,4,1,32,115,105,123,73,80,181,167,181,191,14,12,186,18,12,0,3,0,96,254,182,4,125,6,180,0,3,0,7,0,29,0,51,64,31,16,17,8,3,13,7,105,2,13,6,105,13,20,106,13,3,114,5,8,1,105,4,8,0,105,8,25,106,8,9,114,0,43,43,43,50,43,50,43,43,43,50,43,50,18,57,57,48,49,1,39,1,23,1,39,1,23,19,32,17,16,0,33,50,22,23,7,38,38,35,34,2,17,16,33,50,55,23,6,2,161,136,1,100,136,253,132,136,1,100,136,9,253,106,1,78,1,48,147,218,50,148,45,139,81,193,233,1,226,145,141,46,174,254,182,24,7,230,24,248,26,24,7,230,24,249,80,2,220,1,91,1,125,93,86,147,68,74,254,234,255,0,253,210,60,176,68,0,0,6,0,72,0,131,4,104,4,235,0,15,0,19,0,23,0,35,0,39,0,43,0,57,64,36,43,37,8,42,105,41,39,40,26,4,8,30,106,19,21,18,22,4,0,24,106,23,17,0,20,105,0,16,105,8,0,105,8,38,105,8,0,47,43,43,43,43,57,57,43,23,57,43,23,57,43,57,57,48,49,1,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,5,39,55,23,5,3,55,23,37,50,54,53,52,38,35,34,6,21,20,22,3,39,55,23,5,39,55,23,2,91,128,191,105,105,191,128,128,191,105,105,191,253,225,116,197,143,2,88,228,128,216,253,243,92,112,112,92,92,112,112,239,200,127,220,1,254,143,215,127,1,44,100,180,120,121,179,100,100,179,121,120,180,100,169,132,207,86,253,1,3,101,228,227,115,95,95,115,115,95,95,115,1,180,209,124,251,82,88,245,124,0,0,2,0,129,254,192,4,37,6,204,0,3,0,43,0,42,64,27,34,21,37,38,18,17,14,41,28,27,10,4,24,31,105,1,24,3,114,4,11,105,3,96,4,9,114,0,43,26,205,43,43,205,43,18,23,57,48,49,1,17,51,17,3,34,38,39,55,22,22,51,50,54,53,52,38,39,39,38,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,23,23,22,22,21,20,6,2,32,138,131,121,211,90,26,110,205,97,140,136,67,63,246,145,155,224,205,143,220,102,140,88,153,83,103,113,74,72,208,158,164,251,254,192,8,12,247,244,1,44,39,39,202,47,49,98,100,66,92,28,112,66,186,138,186,204,84,95,142,72,65,99,97,69,87,34,98,74,186,146,193,193,0,0,4,0,96,254,182,4,114,5,220,0,3,0,7,0,33,0,38,0,57,64,37,17,19,29,30,35,5,8,14,2,3,106,38,2,105,38,11,114,4,5,106,4,14,36,0,114,14,21,106,14,7,114,8,26,106,8,11,114,0,43,43,43,43,43,18,57,43,43,43,43,17,18,23,57,48,49,19,53,33,21,1,53,33,21,1,34,2,17,16,18,51,50,22,23,51,3,16,33,34,6,21,16,51,32,53,53,19,35,6,6,55,39,17,51,17,166,3,98,253,198,2,164,253,148,201,221,222,202,128,139,13,82,62,254,242,117,127,246,1,12,72,92,10,152,204,22,212,254,182,176,176,6,12,174,174,251,42,1,23,1,5,1,11,1,37,105,107,254,240,1,48,198,182,254,152,180,116,254,220,91,93,10,208,5,22,250,36,0,3,0,79,255,236,4,125,5,160,0,21,0,25,0,29,0,38,64,24,26,27,106,23,22,106,23,26,9,8,4,0,5,12,106,5,3,114,0,17,106,0,11,114,0,43,43,43,43,18,23,57,43,43,48,49,5,32,17,16,0,33,50,22,23,7,38,38,35,34,2,17,16,33,50,55,23,6,1,53,33,21,1,53,33,21,3,10,253,186,1,30,1,6,144,212,49,168,40,123,72,153,183,1,146,136,130,46,166,252,145,3,50,252,206,3,50,20,2,220,1,91,1,125,115,104,127,77,85,254,234,255,0,253,210,60,176,68,1,255,138,138,1,34,138,138,0,5,0,62,0,0,4,55,5,159,0,21,0,25,0,29,0,33,0,37,0,53,64,32,32,33,25,36,37,106,28,25,36,105,29,25,24,106,25,8,114,9,10,6,0,19,105,6,0,105,6,13,106,6,3,114,0,43,43,43,43,18,57,57,43,43,51,43,50,43,18,57,57,48,49,1,34,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,51,51,21,3,53,33,21,33,17,51,17,3,53,33,21,1,53,33,21,1,252,213,233,230,208,116,140,57,133,29,93,56,105,115,131,119,96,109,2,48,253,208,185,185,1,204,254,52,2,48,2,43,228,208,214,234,74,66,143,44,49,135,123,117,129,190,253,213,186,186,3,112,252,144,1,92,186,186,1,90,186,186,0,3,0,78,254,35,4,110,5,160,0,12,0,25,0,29,0,37,64,21,28,29,106,12,20,13,28,28,3,13,14,106,13,15,114,3,9,106,3,3,114,0,43,43,43,43,18,57,47,18,57,57,43,48,49,1,17,16,33,50,23,7,38,38,35,32,17,17,1,39,55,54,54,53,17,51,17,20,6,6,7,3,53,33,21,1,156,1,246,114,106,22,63,96,45,254,228,253,232,10,108,118,108,212,96,202,160,88,3,212,1,104,2,18,2,38,20,184,8,6,254,162,253,228,252,187,188,15,17,156,163,1,66,254,222,189,234,120,19,4,8,174,174,0,0,4,0,30,0,0,4,76,5,140,0,3,0,7,0,11,0,15,0,33,64,18,11,10,106,2,3,11,11,7,14,15,106,6,14,2,114,7,8,114,0,43,43,50,43,18,57,47,57,57,43,48,49,55,53,33,21,5,17,51,17,3,53,33,21,1,53,33,21,30,2,136,253,250,200,200,2,248,253,8,3,172,231,138,138,231,5,140,250,116,2,44,190,190,2,162,190,190,0,4,0,96,254,192,4,126,6,204,0,7,0,33,0,37,0,41,0,49,64,27,39,38,106,35,17,18,14,39,39,8,14,21,105,1,14,3,114,31,37,8,27,105,0,96,8,9,114,0,43,26,205,43,57,57,43,205,43,18,57,47,18,57,57,51,43,48,49,1,17,51,17,21,17,21,17,3,32,0,17,16,0,33,50,22,23,7,38,38,35,34,2,21,16,18,51,50,54,55,23,6,6,55,17,51,17,1,53,33,21,2,112,138,30,254,194,254,194,1,74,1,42,149,224,53,149,46,139,80,202,224,224,222,95,145,46,78,42,211,63,190,254,32,1,218,254,192,8,12,251,205,62,254,2,78,254,177,1,44,1,110,1,110,1,91,1,125,93,85,148,68,74,254,233,255,254,233,254,233,37,13,174,13,47,60,2,158,253,98,1,224,190,190,0,5,0,70,255,236,4,106,5,160,0,19,0,40,0,44,0,48,0,52,0,59,64,35,47,46,19,3,18,49,50,106,28,48,27,3,26,42,41,106,10,9,49,42,49,42,13,20,34,106,20,9,114,13,6,106,13,3,114,0,43,43,43,43,18,57,57,47,47,57,57,43,50,23,57,43,50,23,57,48,49,1,54,54,53,52,38,35,34,6,7,39,54,36,51,50,22,21,20,7,21,1,34,38,53,52,54,55,53,23,6,6,21,20,22,51,50,54,55,23,6,6,1,53,33,21,37,1,51,1,1,53,33,21,2,181,63,63,97,89,82,186,86,140,100,1,8,141,185,204,149,254,237,222,244,79,79,151,48,47,134,122,95,225,112,26,94,242,253,103,4,36,252,216,1,129,126,254,127,254,134,4,36,3,72,47,110,63,94,102,72,65,142,86,93,141,129,124,97,48,252,103,139,127,55,106,34,84,45,34,73,41,80,88,50,46,202,37,41,1,225,148,148,54,1,74,254,182,1,10,148,148,0,5,0,0,0,0,4,176,5,140,0,3,0,7,0,19,0,23,0,27,0,39,64,20,1,5,9,8,106,26,21,25,9,5,5,20,14,21,2,114,24,20,8,114,0,43,50,43,50,18,57,47,57,57,18,57,43,17,51,48,49,1,53,33,21,33,53,33,21,7,55,50,54,54,18,53,51,20,2,2,4,1,17,51,17,33,1,55,1,2,188,1,244,251,80,1,41,11,18,154,224,145,71,206,110,210,254,208,254,192,200,2,58,254,152,180,1,166,2,89,138,138,138,138,149,198,129,219,1,19,147,189,254,164,254,239,158,254,60,5,140,250,116,2,180,102,252,230,0,4,0,76,0,0,4,100,6,32,0,23,0,27,0,31,0,35,0,43,64,23,0,23,1,24,25,106,31,32,12,12,7,24,8,114,30,33,7,7,16,106,7,3,114,0,43,43,16,206,50,43,17,57,47,57,57,43,50,50,57,48,49,37,53,38,2,53,16,0,33,50,0,17,21,35,53,52,38,35,34,2,21,20,22,22,51,5,53,33,21,1,17,51,17,51,17,51,17,1,124,137,167,1,27,1,0,243,1,10,200,161,148,162,177,120,218,146,253,94,3,252,253,96,108,122,108,143,69,31,1,16,235,1,73,1,105,254,219,254,245,172,172,189,207,254,237,251,170,254,140,186,186,186,2,196,3,92,252,164,3,92,252,164,0,4,0,109,0,0,4,91,5,160,0,23,0,27,0,31,0,35,0,51,64,29,22,1,27,26,106,32,33,106,29,28,106,11,12,8,32,29,32,29,8,0,27,8,114,8,15,106,8,3,114,0,43,43,43,50,17,57,57,47,47,18,57,57,43,43,43,50,50,48,49,51,53,54,54,53,17,52,54,51,50,22,23,7,38,38,35,34,6,21,17,20,6,7,23,35,53,33,21,1,53,33,21,1,53,33,21,132,81,79,222,196,144,212,49,168,42,128,75,87,109,80,82,100,252,3,136,252,37,3,20,252,236,3,20,186,116,210,115,1,153,194,210,115,104,127,74,80,109,104,254,104,115,212,114,186,186,186,1,215,138,138,1,4,138,138,0,3,0,120,255,236,4,100,5,140,0,16,0,20,0,24,0,43,64,24,23,21,22,106,24,21,20,18,17,106,19,18,21,18,0,4,2,114,0,10,106,0,9,114,0,43,43,43,18,57,57,17,51,43,50,17,51,43,50,48,49,5,34,38,53,17,51,17,20,22,22,51,50,54,55,23,6,6,1,53,37,21,37,53,37,21,2,176,195,173,200,32,94,92,68,151,83,84,109,206,253,79,3,110,252,146,3,110,20,200,220,3,252,252,14,84,106,50,54,54,166,70,62,1,225,148,150,148,180,148,150,148,0,2,0,76,0,0,4,100,5,140,0,13,0,17,0,25,64,13,3,10,105,3,14,15,2,114,13,7,14,8,114,0,43,50,50,43,18,57,43,48,49,51,17,16,33,32,17,17,35,17,16,33,32,17,17,51,17,51,17,76,2,12,2,12,210,254,198,254,198,245,138,2,28,2,88,253,168,253,228,2,28,1,160,254,96,253,228,5,140,250,116,0,0,4,0,0,0,0,4,176,5,140,0,3,0,11,0,15,0,19,0,43,64,22,17,8,8,13,1,0,106,6,13,10,1,1,19,13,2,114,19,4,4,12,8,114,0,43,50,17,51,43,18,57,47,57,18,57,43,17,51,17,51,48,49,17,53,33,21,1,1,35,17,51,1,51,17,33,17,51,17,33,17,51,17,4,176,254,112,254,72,92,132,1,184,50,253,26,192,2,8,192,2,129,138,138,253,127,4,56,1,84,251,200,254,172,5,140,250,116,5,140,250,116,0,3,0,0,0,0,4,176,5,140,0,3,0,21,0,25,0,37,64,20,5,4,106,0,5,1,5,1,5,22,14,23,13,106,23,2,114,22,8,114,0,43,43,43,51,18,57,57,47,47,18,57,43,48,49,17,53,33,21,1,53,51,50,54,53,52,38,35,35,53,51,32,0,21,20,0,33,1,17,51,17,4,176,252,160,242,158,174,174,158,238,238,1,3,1,27,254,229,254,253,254,94,200,3,83,138,138,254,101,190,158,142,143,157,190,254,255,233,234,255,0,254,72,5,140,250,116,0,0,4,0,0,0,0,4,176,5,140,0,3,0,7,0,25,0,29,0,38,64,22,9,8,106,4,5,0,1,4,27,9,9,26,19,27,17,106,27,2,114,26,8,114,0,43,43,43,51,18,57,47,18,23,57,43,48,49,17,53,33,21,5,53,33,21,1,53,51,50,54,53,52,38,35,35,53,51,32,0,21,20,0,33,1,17,51,17,4,176,251,80,4,176,252,160,242,158,174,174,158,238,238,1,3,1,27,254,229,254,253,254,94,200,3,213,138,138,245,138,138,254,216,190,158,142,143,157,190,254,255,233,234,255,0,254,72,5,140,250,116,0,0,4,0,0,0,0,4,96,5,140,0,3,0,7,0,25,0,29,0,43,64,23,4,9,8,106,5,9,0,1,9,1,9,1,26,18,27,17,106,27,2,114,26,8,114,0,43,43,43,51,18,57,57,47,47,17,57,17,51,43,50,48,49,53,53,33,21,1,53,33,21,35,53,51,50,54,53,52,38,35,35,53,51,32,0,21,20,0,33,1,17,51,17,3,20,252,236,1,181,101,242,158,174,174,158,238,238,1,3,1,27,254,229,254,253,254,94,200,161,138,138,1,23,190,190,190,158,142,143,157,190,254,255,233,234,255,0,254,72,5,140,250,116,0,0,4,0,80,255,236,4,150,5,140,0,34,0,38,0,42,0,60,0,60,64,38,36,44,43,106,44,44,39,53,40,52,106,40,2,114,35,39,8,114,9,32,12,29,15,26,6,0,18,23,106,18,7,114,0,6,106,0,11,114,0,43,43,43,43,18,23,57,43,50,43,43,51,18,57,47,43,57,48,49,5,34,39,55,22,22,51,50,54,53,52,38,39,38,38,53,52,54,51,50,23,7,38,35,34,6,21,20,22,23,22,22,21,20,6,37,3,51,19,33,17,51,17,3,53,51,50,54,53,52,38,35,35,53,51,50,22,21,20,6,35,3,110,117,85,24,65,88,25,48,48,68,68,70,76,131,133,93,77,22,68,36,54,54,70,64,74,74,147,253,178,138,175,158,253,216,185,14,57,80,82,82,80,77,77,161,171,171,161,20,20,196,13,13,46,46,33,107,75,77,154,82,146,144,20,184,14,50,50,35,102,74,85,151,67,148,148,20,2,156,253,100,5,140,250,116,2,28,174,135,121,132,144,174,224,206,214,236,0,4,0,164,0,0,4,76,5,140,0,17,0,21,0,25,0,29,0,44,64,24,10,28,16,11,9,27,29,106,19,1,0,106,23,22,27,1,1,21,27,2,114,21,8,114,0,43,43,18,57,47,18,57,57,43,57,43,50,50,63,57,48,49,19,53,33,50,54,53,52,38,35,33,37,21,22,22,21,20,6,35,1,1,51,1,1,53,33,21,1,53,33,21,164,1,108,119,133,133,119,254,148,2,142,82,90,241,221,1,18,254,154,220,1,122,252,146,3,168,252,88,3,160,2,28,190,126,114,125,135,38,58,15,135,110,196,214,253,228,2,156,253,100,3,143,138,138,1,63,190,190,0,6,0,80,0,0,4,96,4,36,0,3,0,7,0,11,0,15,0,19,0,23,0,34,64,18,10,19,14,23,4,2,15,11,0,4,8,114,22,17,6,2,6,114,0,43,50,50,50,43,50,50,50,17,23,57,48,49,33,17,51,17,33,17,51,17,51,53,33,21,33,17,51,17,19,17,51,17,1,53,33,21,3,162,190,251,240,190,109,2,229,253,27,160,122,160,253,27,2,229,4,36,251,220,4,36,251,220,170,170,3,12,252,244,1,24,3,12,252,244,2,98,170,170,0,3,0,109,0,0,4,91,5,160,0,23,0,27,0,31,0,45,64,25,1,22,22,27,26,106,30,31,106,11,12,8,30,30,8,23,27,8,114,8,15,106,8,3,114,0,43,43,43,50,17,57,47,18,57,57,43,43,50,17,51,48,49,51,53,54,54,53,17,52,54,51,50,22,23,7,38,38,35,34,6,21,17,20,6,7,21,35,53,33,21,1,53,33,21,132,81,79,222,196,144,212,49,168,42,128,75,87,109,80,82,152,3,136,252,37,3,20,186,116,210,115,1,153,194,210,115,104,127,74,80,109,104,254,104,115,212,114,186,186,186,2,69,138,138,0,0,3,0,80,0,0,4,96,5,140,0,3,0,7,0,11,0,27,64,16,5,4,106,1,8,5,105,9,8,106,9,2,114,0,8,114,0,43,43,43,43,50,43,48,49,33,17,51,17,1,53,33,21,1,53,33,21,1,244,200,253,148,4,16,251,240,4,16,4,36,251,220,3,102,190,190,1,104,190,190,0,4,0,80,0,0,4,96,5,140,0,3,0,7,0,11,0,15,0,32,64,20,4,5,7,6,0,1,3,2,8,8,13,12,106,9,13,2,114,8,8,114,0,43,43,50,43,18,23,57,48,49,19,53,37,21,1,53,37,21,1,17,51,17,1,53,33,21,161,3,110,252,146,3,110,253,229,200,253,148,4,16,2,159,148,150,148,254,32,148,150,148,254,21,5,140,250,116,4,206,190,190,0,3,0,0,0,0,4,176,5,140,0,3,0,13,0,23,0,51,64,25,10,17,17,9,2,3,106,12,9,19,7,2,4,9,2,9,2,21,4,21,5,4,14,4,12,0,63,51,63,51,17,18,57,57,47,47,17,18,57,57,17,57,43,17,51,17,51,48,49,17,53,33,21,1,3,51,19,51,19,51,7,35,3,51,3,35,39,51,19,51,19,51,3,4,176,252,4,160,210,120,20,131,200,67,40,105,222,105,40,65,200,129,20,120,210,160,2,69,138,138,253,187,5,140,251,20,3,132,198,252,162,3,94,198,252,124,4,236,250,116,0,4,0,25,0,0,4,151,5,140,0,3,0,7,0,15,0,19,0,27,64,16,4,5,8,0,1,17,11,7,9,16,8,114,13,9,2,114,0,43,50,43,17,23,57,48,49,19,53,33,21,1,53,33,21,1,1,51,1,51,1,51,1,3,17,51,17,162,3,110,252,146,3,110,253,243,254,22,220,1,90,18,1,90,220,254,22,185,200,1,245,138,138,254,202,138,138,1,27,3,178,253,58,2,198,252,78,254,38,2,188,253,68,0,255,255,1,48,1,158,3,128,3,238,2,6,2,175,0,0,255,255,0,106,255,66,4,98,6,74,0,6,2,181,2,0,0,3,0,100,0,226,4,76,4,168,0,3,0,7,0,11,0,18,64,9,5,8,9,0,4,1,4,105,1,0,47,43,23,57,48,49,19,53,33,21,1,53,33,21,1,53,33,21,100,3,232,252,24,3,232,252,24,3,232,3,238,186,186,252,244,186,186,1,134,186,186,0,255,255,255,150,1,168,5,26,2,124,2,6,4,56,0,0,0,1,0,68,254,35,2,102,7,16,0,12,0,15,183,0,6,105,0,1,106,0,15,0,63,43,43,48,49,19,39,55,54,54,53,17,51,17,20,6,6,7,78,10,108,118,108,212,96,202,160,254,35,188,15,17,156,163,6,210,249,78,189,234,120,19,0,1,1,146,253,18,4,100,5,160,0,12,0,15,183,3,9,106,3,0,105,3,3,0,63,43,43,48,49,1,17,16,33,50,23,7,38,38,35,32,17,17,1,146,1,246,114,106,22,63,96,45,254,228,253,18,6,104,2,38,20,184,8,6,254,162,249,142,0,2,0,100,1,94,4,76,3,135,0,3,0,7,0,16,183,6,1,3,106,1,7,105,1,0,47,43,43,57,48,49,19,53,33,21,1,17,51,17,100,3,232,252,24,192,2,205,186,186,254,145,1,211,254,45,0,5,0,100,0,0,4,76,5,140,0,3,0,7,0,11,0,15,0,19,0,26,64,16,8,9,12,13,16,17,4,5,8,1,3,8,114,1,2,114,0,43,43,17,23,57,48,49,51,1,51,1,3,53,33,21,1,53,33,21,1,53,33,21,1,53,33,21,142,2,202,202,253,54,244,3,232,252,24,3,232,252,24,3,232,252,24,3,232,5,140,250,116,4,72,166,166,252,94,166,166,1,54,166,166,1,54,166,166,0,0,2,0,100,0,190,4,76,4,204,0,3,0,7,0,21,64,12,4,0,105,5,4,106,5,1,105,5,147,114,0,43,43,43,43,48,49,37,17,51,17,1,53,33,21,1,248,192,253,172,3,232,190,4,14,251,242,1,171,186,186,0,0,1,0,100,2,104,4,76,3,34,0,3,0,12,181,1,0,106,1,147,114,0,43,43,48,49,19,53,33,21,100,3,232,2,104,186,186,0,0,2,0,121,0,188,4,55,4,164,0,3,0,7,0,22,64,11,5,3,7,1,4,4,2,0,105,6,2,0,47,51,43,50,23,57,48,49,55,1,39,1,5,55,1,7,249,3,62,128,252,194,3,62,128,252,194,128,188,3,109,123,252,145,121,121,3,111,123,0,0,3,0,100,0,151,4,76,4,241,0,3,0,15,0,27,0,29,64,18,16,22,106,1,16,105,10,4,106,0,10,105,1,0,106,1,147,114,0,43,43,43,43,43,43,48,49,19,53,33,21,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,100,3,232,254,12,58,83,83,58,59,82,82,59,58,83,83,58,59,82,83,2,104,186,186,254,47,82,58,59,82,82,59,58,82,3,65,83,58,58,82,82,58,58,83,0,0,2,0,100,1,110,4,76,4,28,0,3,0,7,0,21,64,12,4,5,106,1,4,105,1,0,106,1,148,114,0,43,43,43,43,48,49,19,53,33,21,1,53,33,21,100,3,232,252,24,3,232,3,98,186,186,254,12,186,186,0,3,0,100,0,0,4,76,5,140,0,3,0,7,0,11,0,29,64,18,4,5,106,9,4,105,9,8,106,9,148,114,3,8,114,1,2,114,0,43,43,43,43,43,43,48,49,51,1,51,1,3,53,33,21,1,53,33,21,142,2,202,202,253,54,244,3,232,252,24,3,232,5,140,250,116,1,110,186,186,1,244,186,186,0,1,0,146,0,214,4,80,4,180,0,7,0,37,64,22,3,2,6,7,1,0,106,7,1,106,6,7,106,4,5,106,6,4,106,6,151,114,0,43,43,43,43,43,43,17,18,57,57,48,49,55,53,1,53,1,53,1,21,146,2,188,253,68,3,190,214,220,1,10,18,1,10,220,254,118,202,0,0,1,0,96,0,214,4,30,4,180,0,7,0,33,64,20,4,3,106,2,4,106,7,0,106,1,7,106,5,6,2,1,106,2,151,114,0,43,43,57,57,43,43,43,43,48,49,37,1,53,1,21,1,21,1,4,30,252,66,3,190,253,28,2,228,214,1,138,202,1,138,220,254,246,18,254,246,0,0,2,0,126,0,103,4,60,4,180,0,7,0,11,0,40,64,22,9,8,106,0,9,105,1,0,106,7,1,106,6,7,106,4,5,106,6,4,106,6,185,255,255,0,114,0,43,43,43,43,43,43,43,43,48,49,19,53,37,53,37,53,1,21,1,53,33,21,126,2,228,253,28,3,190,252,67,3,185,1,58,220,216,18,216,220,254,168,202,253,213,186,186,0,0,2,0,116,0,103,4,50,4,180,0,7,0,11,0,39,64,24,4,3,106,2,4,106,10,11,106,0,10,105,7,0,106,1,7,106,5,6,2,1,106,2,0,47,43,57,57,43,43,43,43,43,43,48,49,1,1,53,1,21,5,21,5,1,53,33,21,4,50,252,66,3,190,253,28,2,228,252,70,3,185,1,58,1,88,202,1,88,220,216,18,216,254,81,186,186,0,3,0,100,0,186,4,76,4,200,0,3,0,7,0,11,0,25,64,13,0,8,9,106,4,5,106,4,4,1,8,105,1,0,47,43,57,47,43,43,57,48,49,37,17,51,17,1,53,33,21,1,53,33,21,1,248,192,253,172,3,232,252,24,3,232,246,3,210,252,46,1,181,186,186,254,15,186,186,0,255,255,0,100,0,196,4,76,4,196,2,39,3,79,0,0,1,34,2,7,3,79,0,0,254,222,0,1,0,100,1,230,4,76,3,162,0,29,0,23,64,12,10,19,106,25,4,106,10,25,14,29,105,14,0,47,43,57,57,43,43,48,49,19,53,52,54,51,50,22,23,22,22,51,50,54,53,53,51,21,20,6,35,34,38,39,38,38,35,34,6,21,21,100,128,142,73,129,58,49,87,47,45,40,202,114,126,71,128,57,51,93,51,56,51,1,230,80,173,157,54,35,29,57,57,62,90,80,173,157,55,34,31,55,57,62,90,0,0,2,0,100,1,94,4,76,3,135,0,3,0,7,0,16,183,5,1,0,106,1,7,105,1,0,47,43,43,57,48,49,19,53,33,21,3,17,51,17,100,3,232,192,192,2,205,186,186,254,145,1,211,254,45,0,0,1,0,204,3,52,3,226,5,140,0,7,0,16,183,6,4,1,0,106,1,2,114,0,43,43,50,57,48,49,19,1,33,1,35,3,35,3,204,1,4,1,14,1,4,220,166,18,166,3,52,2,88,253,168,1,184,254,72,0,0,3,0,100,1,88,4,122,4,46,0,25,0,38,0,51,0,37,64,19,45,6,33,106,9,23,13,19,13,6,39,0,26,106,19,6,0,105,6,0,47,43,50,43,50,17,51,17,18,57,57,43,50,48,49,1,34,38,53,52,54,51,50,22,23,35,54,54,51,50,22,21,20,6,35,34,38,39,51,6,6,39,50,54,55,21,38,38,35,34,6,21,20,22,33,50,54,53,52,38,35,34,6,7,53,22,22,1,116,123,149,149,123,102,132,47,60,47,132,102,123,149,149,123,102,132,47,60,47,132,53,63,67,15,15,68,62,61,75,75,1,208,62,74,74,62,63,67,15,15,67,1,88,199,163,169,195,123,134,134,123,195,169,163,199,123,133,133,123,168,129,100,71,105,129,107,91,87,107,107,87,91,107,129,105,71,100,129,0,1,0,136,0,0,4,40,4,56,0,13,0,19,64,10,3,10,106,3,7,114,7,0,8,114,0,43,50,43,43,48,49,51,17,16,33,32,17,17,35,17,16,35,34,17,17,136,1,208,1,208,220,244,244,2,78,1,234,254,22,253,178,2,78,1,44,254,212,253,178,0,0,2,0,68,254,35,4,100,5,160,0,12,0,25,0,27,64,15,20,12,3,13,14,106,13,15,114,3,9,106,3,3,114,0,43,43,43,43,18,57,57,48,49,1,17,16,33,50,23,7,38,38,35,32,17,17,1,39,55,54,54,53,17,51,17,20,6,6,7,1,146,1,246,114,106,22,63,96,45,254,228,253,232,10,108,118,108,212,96,202,160,1,104,2,18,2,38,20,184,8,6,254,162,253,228,252,187,188,15,17,156,163,1,66,254,222,189,234,120,19,255,255,0,76,0,0,4,100,5,160,2,6,2,58,0,0,255,255,0,45,0,0,4,131,5,140,2,6,2,38,0,0,0,3,0,80,255,56,4,96,5,140,0,3,0,7,0,11,0,25,64,13,1,5,5,0,9,4,105,9,8,106,9,2,114,0,43,43,43,50,51,17,51,48,49,5,17,51,17,33,17,51,17,1,53,33,21,3,12,212,252,240,212,254,172,4,16,200,6,84,249,172,6,84,249,172,5,150,190,190,0,3,0,150,255,56,4,46,5,140,0,5,0,9,0,13,0,33,64,18,4,3,12,13,106,0,1,9,8,106,5,2,12,9,105,12,2,114,0,43,43,57,57,43,50,57,43,50,57,48,49,5,39,1,1,55,1,1,53,33,21,1,53,33,21,1,40,146,1,195,254,61,162,2,23,253,71,3,152,252,104,3,132,146,122,2,126,2,104,132,253,18,252,212,176,176,5,150,190,190,0,2,0,86,255,56,4,106,5,140,0,7,0,11,0,25,64,13,3,2,2,10,7,105,10,11,106,6,10,2,114,0,43,50,43,43,57,47,57,48,49,5,3,51,19,51,1,51,1,19,53,33,21,1,18,188,206,109,18,1,5,196,254,192,124,1,194,200,2,89,254,91,5,160,249,172,5,150,190,190,255,255,0,156,254,52,4,134,4,36,2,6,2,80,0,0,255,255,0,118,255,236,4,60,5,146,0,71,2,112,4,178,0,0,192,0,64,0,0,2,0,100,0,0,4,76,4,36,0,3,0,7,0,19,64,10,7,6,106,3,7,8,114,1,6,114,0,43,43,50,43,48,49,51,17,51,17,35,53,33,21,100,192,192,3,232,4,36,251,220,186,186,0,5,0,54,255,236,4,142,5,160,0,3,0,15,0,27,0,39,0,51,0,44,64,28,28,40,106,34,28,105,0,1,3,2,4,4,34,46,106,34,17,10,22,106,4,10,105,4,16,106,4,19,0,63,43,43,43,63,43,18,23,57,43,43,48,49,19,39,1,23,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,186,92,3,162,92,254,250,142,172,172,142,141,171,171,141,59,72,72,59,61,72,72,254,87,142,172,172,142,141,171,171,141,59,72,72,59,61,72,72,1,50,136,2,152,130,252,28,177,145,147,177,177,147,145,177,163,88,71,73,88,88,73,71,88,2,139,177,145,147,177,174,150,145,177,163,88,71,74,89,89,74,71,88,0,0,7,0,32,255,236,4,173,5,160,0,3,0,15,0,27,0,39,0,51,0,63,0,75,0,47,64,31,28,40,106,34,28,105,0,1,3,2,4,4,34,46,106,34,3,114,16,52,22,64,10,70,6,4,58,105,4,9,114,0,43,43,23,57,43,43,18,23,57,43,43,48,49,19,39,1,23,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,3,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,136,92,3,162,92,253,244,107,130,130,107,107,129,129,107,38,45,45,38,38,46,46,158,142,172,172,142,141,171,171,141,59,72,72,59,61,72,72,2,164,107,130,130,107,107,129,129,107,38,45,45,38,38,46,46,1,50,136,2,152,130,252,28,138,113,114,138,138,114,113,138,144,59,48,49,59,59,49,48,59,2,158,177,145,147,177,174,150,145,177,163,88,71,74,89,89,74,71,88,253,97,138,113,114,138,138,114,113,138,144,59,48,49,59,59,49,48,59,0,0,4,0,100,0,166,4,76,4,238,0,3,0,7,0,11,0,15,0,20,64,11,6,11,10,15,14,3,6,1,4,105,1,0,47,43,23,57,48,49,19,53,33,21,1,53,33,21,1,53,33,21,1,53,33,21,100,3,232,252,24,3,232,252,24,3,232,252,24,3,232,4,72,166,166,252,94,166,166,1,54,166,166,1,54,166,166,0,255,255,0,121,0,188,4,55,4,164,2,6,3,69,0,0,0,2,0,194,0,0,3,238,5,160,0,7,0,11,0,23,64,12,4,7,7,6,9,3,8,1,105,8,8,114,0,43,43,23,57,17,51,48,49,19,1,51,1,35,3,33,3,19,17,51,17,194,1,139,22,1,139,222,50,254,244,50,90,188,3,8,2,152,253,104,1,70,254,186,252,248,4,168,251,88,0,2,0,100,1,46,4,106,4,90,0,7,0,11,0,33,64,18,6,7,9,8,1,0,106,1,9,8,106,4,5,106,4,9,147,114,0,43,206,43,43,206,43,17,18,57,57,48,49,1,53,37,17,37,53,1,21,5,53,33,21,1,210,1,29,254,227,2,152,251,250,3,14,1,46,222,50,1,12,50,222,254,118,22,84,188,188,0,0,2,0,194,255,236,3,238,5,140,0,7,0,11,0,23,64,11,5,3,8,2,2,9,0,105,9,2,114,0,43,43,57,47,57,57,51,48,49,5,1,51,19,33,19,51,1,39,17,51,17,2,77,254,117,222,50,1,12,50,222,254,117,105,188,20,2,152,254,186,1,70,253,104,248,4,168,251,88,0,0,2,0,70,1,46,4,76,4,90,0,7,0,11,0,29,64,16,7,0,106,7,2,1,10,11,106,4,3,106,4,10,147,114,0,43,206,43,43,57,57,206,43,48,49,1,1,53,1,21,5,17,5,37,53,33,21,2,222,253,104,2,152,254,227,1,29,254,96,3,14,1,46,1,140,22,1,138,222,50,254,244,50,90,188,188,0,3,0,65,1,46,4,111,4,90,0,7,0,15,0,19,0,44,64,25,7,9,10,6,4,18,19,8,1,0,106,15,1,18,19,106,11,4,5,106,12,4,18,147,114,0,43,204,50,43,50,43,204,50,43,50,17,18,23,57,48,49,1,53,55,17,39,53,1,21,1,1,53,1,21,7,17,23,37,53,33,21,2,189,195,195,1,178,253,132,254,78,1,178,195,195,254,236,2,242,1,46,222,50,1,12,50,222,254,118,22,254,116,1,140,22,1,138,222,50,254,244,50,90,188,188,0,3,0,194,255,236,3,238,5,160,0,7,0,15,0,19,0,37,64,17,17,6,1,4,13,7,11,16,10,7,10,7,10,1,8,105,1,0,47,43,57,57,47,47,17,57,57,18,57,57,17,57,57,48,49,19,1,51,1,35,39,33,7,19,1,51,23,33,55,51,1,39,17,51,17,194,1,139,22,1,139,222,50,254,244,50,173,254,117,222,50,1,12,50,222,254,117,105,188,3,118,2,42,253,214,246,246,252,118,2,42,246,246,253,214,218,4,0,252,0,0,4,0,194,255,70,3,238,5,160,0,3,0,11,0,19,0,23,0,42,64,22,21,10,6,11,15,20,14,11,14,11,14,6,12,105,6,17,2,3,106,2,8,114,0,43,43,63,43,57,57,47,47,17,57,57,17,18,57,57,48,49,23,53,33,21,1,1,51,1,35,39,33,7,19,1,51,23,33,55,51,1,39,17,51,17,200,3,22,252,228,1,139,22,1,139,222,50,254,244,50,173,254,117,222,50,1,12,50,222,254,117,105,188,186,186,186,4,48,2,42,253,214,246,246,252,118,2,42,246,246,253,214,218,4,0,252,0,0,5,0,194,0,0,3,238,5,160,0,7,0,11,0,15,0,19,0,23,0,40,64,21,22,23,1,3,10,15,14,19,4,7,8,3,7,3,7,8,1,105,8,8,114,0,43,43,57,57,47,47,17,18,23,57,17,18,57,57,48,49,19,1,51,1,35,3,33,3,19,53,51,21,3,53,51,21,3,53,51,21,3,17,51,17,194,1,139,22,1,139,222,50,254,244,50,90,188,188,188,188,188,188,188,3,8,2,152,253,104,1,70,254,186,252,248,194,194,1,48,182,182,1,36,182,182,1,36,1,48,254,208,0,0,5,0,194,255,236,3,238,5,140,0,7,0,11,0,15,0,19,0,23,0,41,64,23,13,16,17,20,4,21,2,8,3,9,12,4,5,2,5,2,5,21,0,105,21,2,114,0,43,43,57,57,47,47,17,23,57,17,18,23,57,48,49,5,1,51,19,33,19,51,1,39,17,51,17,3,53,51,21,3,53,51,21,3,53,51,21,2,77,254,117,222,50,1,12,50,222,254,117,105,188,188,188,188,188,188,188,20,2,152,254,186,1,70,253,104,248,1,48,254,208,1,158,182,182,1,36,182,182,1,36,194,194,0,0,1,0,0,254,32,4,176,255,83,0,3,0,0,17,17,33,17,4,176,254,32,1,51,254,205,0,1,0,0,254,32,4,176,0,135,0,3,0,0,17,17,33,17,4,176,254,32,2,103,253,153,0,1,0,0,254,32,4,176,1,186,0,3,0,0,17,17,33,17,4,176,254,32,3,154,252,102,0,1,0,0,254,32,4,176,2,238,0,3,0,0,17,17,33,17,4,176,254,32,4,206,251,50,0,1,0,0,254,32,4,176,4,33,0,3,0,0,17,17,33,17,4,176,254,32,6,1,249,255,0,1,0,0,254,32,4,176,5,85,0,3,0,0,17,17,33,17,4,176,254,32,7,53,248,203,0,1,0,0,254,32,4,176,6,136,0,3,0,0,17,17,33,17,4,176,254,32,8,104,247,152,0,1,0,0,254,32,4,176,7,188,0,3,0,0,17,17,33,17,4,176,254,32,9,156,246,100,0,1,0,0,2,18,4,176,7,188,0,3,0,0,17,17,33,17,4,176,2,18,5,170,250,86,0,1,0,0,6,136,4,176,7,188,0,3,0,0,17,17,33,17,4,176,6,136,1,52,254,204,0,1,0,0,254,32,0,150,7,188,0,3,0,0,17,17,51,17,150,254,32,9,156,246,100,0,0,1,0,0,254,32,1,44,7,188,0,3,0,0,17,17,33,17,1,44,254,32,9,156,246,100,0,1,0,0,254,32,1,194,7,188,0,3,0,0,17,17,33,17,1,194,254,32,9,156,246,100,0,1,0,0,254,32,2,88,7,188,0,3,0,0,17,17,33,17,2,88,254,32,9,156,246,100,0,1,0,0,254,32,2,238,7,188,0,3,0,0,17,17,33,17,2,238,254,32,9,156,246,100,0,1,0,0,254,32,3,132,7,188,0,3,0,0,17,17,33,17,3,132,254,32,9,156,246,100,0,1,0,0,254,32,4,26,7,188,0,3,0,0,17,17,33,17,4,26,254,32,9,156,246,100,0,1,2,88,254,32,4,176,7,188,0,3,0,0,1,17,33,17,2,88,2,88,254,32,9,156,246,100,0,1,4,26,254,32,4,176,7,188,0,3,0,0,1,17,51,17,4,26,150,254,32,9,156,246,100,0,0,1,0,0,254,32,2,88,2,238,0,3,0,0,17,17,33,17,2,88,254,32,4,206,251,50,0,1,2,88,254,32,4,176,2,18,0,3,0,0,1,17,33,17,2,88,2,88,254,32,3,242,252,14,0,1,0,0,2,18,2,88,7,188,0,3,0,0,17,17,33,17,2,88,2,18,5,170,250,86,0,1,0,0,254,32,4,176,7,188,0,5,0,0,17,17,33,17,33,17,2,88,2,88,254,32,9,156,251,50,251,50,0,2,0,0,254,32,4,176,7,188,0,3,0,7,0,0,17,17,33,25,2,33,17,2,88,2,88,2,18,5,170,250,86,252,14,3,242,252,14,0,0,1,0,0,254,32,4,176,7,188,0,5,0,0,17,17,33,17,33,17,4,176,253,168,254,32,9,156,250,86,252,14,0,1,0,0,254,32,4,176,7,188,0,5,0,0,1,17,33,17,33,17,2,88,253,168,4,176,254,32,3,242,5,170,246,100,0,1,2,88,2,18,4,176,7,188,0,3,0,0,1,17,33,17,2,88,2,88,2,18,5,170,250,86,0,1,0,0,254,32,4,176,7,188,0,7,0,0,17,17,33,17,33,17,33,17,2,88,2,88,253,168,254,32,4,206,4,206,250,86,252,14,0,1,0,0,254,32,4,176,7,188,0,5,0,0,17,17,33,17,33,17,2,88,2,88,254,32,4,206,4,206,246,100,0,9,0,0,254,32,4,176,7,188,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,0,17,53,1,21,1,1,21,1,33,1,21,1,33,55,21,7,37,53,1,21,1,53,1,21,1,53,1,51,1,53,1,51,1,53,1,51,4,176,252,124,3,132,252,164,1,104,1,244,254,52,1,104,100,60,251,140,4,176,251,80,4,176,251,80,1,104,40,254,112,2,248,40,252,224,4,136,40,1,124,40,4,176,40,247,244,3,132,40,252,164,1,244,40,254,52,100,40,60,60,40,4,176,40,252,224,40,4,176,40,1,144,40,1,104,252,224,40,2,248,251,80,40,4,136,0,18,0,0,254,32,4,176,7,188,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,0,17,53,1,21,1,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,55,21,7,37,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,37,53,55,51,3,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,4,176,251,180,4,76,251,220,160,3,132,252,164,160,2,188,253,108,160,1,244,254,52,160,1,44,254,252,160,100,60,251,140,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,160,40,200,1,104,40,254,112,2,48,40,253,168,2,248,40,252,224,3,192,40,252,24,4,136,40,2,68,40,4,176,40,247,44,4,76,40,251,220,3,132,40,252,164,2,188,40,253,108,1,244,40,254,52,1,44,40,254,252,100,40,60,60,40,4,176,40,252,24,40,4,176,40,252,24,40,4,176,40,252,24,40,4,176,40,252,24,40,4,176,40,200,40,160,254,112,40,1,104,253,168,40,2,48,252,224,40,2,248,252,24,40,3,192,251,80,40,4,136,0,36,0,0,254,32,4,176,7,188,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,51,0,55,0,59,0,63,0,67,0,71,0,75,0,79,0,83,0,87,0,91,0,95,0,99,0,103,0,107,0,111,0,115,0,119,0,123,0,127,0,131,0,135,0,139,0,143,0,0,17,53,1,21,1,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,55,21,7,51,55,21,7,37,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,37,53,55,51,7,53,55,51,3,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,4,176,251,80,4,176,251,120,60,4,76,251,220,60,3,232,252,64,60,3,132,252,164,60,3,32,253,8,60,2,188,253,108,60,2,88,253,208,60,1,244,254,52,60,1,144,254,152,60,1,44,254,252,60,200,160,60,100,60,251,140,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,60,40,100,160,40,200,1,4,40,254,212,1,104,40,254,112,1,204,40,254,12,2,48,40,253,168,2,148,40,253,68,2,248,40,252,224,3,92,40,252,124,3,192,40,252,24,4,36,40,251,180,4,136,40,2,168,40,4,176,40,246,200,4,176,40,251,120,4,76,40,251,220,3,232,40,252,64,3,132,40,252,164,3,32,40,253,8,2,188,40,253,108,2,88,40,253,208,1,244,40,254,52,1,144,40,254,152,1,44,40,254,252,200,40,160,100,40,60,60,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,100,40,60,200,40,160,254,212,40,1,4,254,112,40,1,104,254,12,40,1,204,253,168,40,2,48,253,68,40,2,148,252,224,40,2,248,252,124,40,3,92,252,24,40,3,192,251,180,40,4,36,251,80,40,4,136,0,1,0,75,0,185,4,101,4,211,0,15,0,0,37,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,2,88,158,236,131,131,236,158,158,236,131,131,236,185,131,236,158,158,236,131,131,236,158,158,236,131,0,2,0,75,0,185,4,101,4,211,0,15,0,31,0,0,37,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,2,88,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,185,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,0,2,0,0,0,110,4,176,5,30,0,15,0,31,0,0,37,34,36,2,53,52,18,36,51,50,4,18,21,20,2,4,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,2,88,181,254,242,149,149,1,14,181,181,1,14,149,149,254,242,181,136,202,112,112,202,136,135,203,112,112,203,110,149,1,14,181,181,1,14,149,149,254,242,181,181,254,242,149,150,112,203,135,136,202,112,112,202,136,135,203,112,0,0,3,0,75,0,185,4,101,4,211,0,4,0,20,0,36,0,0,1,3,19,33,17,21,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,1,93,207,160,1,42,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,1,35,1,157,1,154,252,201,106,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,3,0,75,0,185,4,101,4,211,0,4,0,20,0,36,0,0,1,17,33,19,3,7,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,2,88,1,42,160,207,251,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,1,35,3,66,254,91,254,99,106,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,0,3,0,75,0,185,4,101,4,211,0,4,0,20,0,36,0,0,37,37,53,33,17,5,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,2,82,254,99,3,66,254,97,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,252,207,251,254,214,227,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,0,3,0,75,0,185,4,101,4,211,0,4,0,20,0,36,0,0,19,53,37,5,17,1,50,22,22,21,20,6,6,35,34,38,38,53,52,54,54,23,34,6,6,21,20,22,22,51,50,54,54,53,52,38,38,181,1,157,1,165,254,97,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,2,198,251,207,160,254,214,2,13,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,0,1,0,75,0,185,2,88,4,211,0,8,0,0,37,34,38,38,53,52,54,54,51,2,88,158,236,131,131,236,158,185,131,236,158,158,236,131,0,1,2,88,0,185,4,101,4,211,0,8,0,0,37,17,50,22,22,21,20,6,6,2,88,158,236,131,131,236,185,4,26,131,236,158,158,236,131,0,0,3,0,75,0,185,4,101,4,211,0,3,0,19,0,35,0,0,1,17,5,19,1,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,2,88,1,103,116,254,37,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,2,198,1,219,105,254,142,253,243,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,3,0,75,0,185,4,101,4,211,0,8,0,24,0,40,0,0,37,1,53,33,17,51,1,17,3,5,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,1,175,254,206,1,219,180,1,36,197,254,237,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,225,1,53,176,1,219,254,228,254,172,254,227,91,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,3,0,75,0,185,4,101,4,211,0,5,0,21,0,37,0,0,19,53,33,17,51,17,3,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,153,1,116,150,75,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,2,123,150,1,107,253,255,254,62,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,3,0,75,0,185,4,101,4,211,0,5,0,21,0,37,0,0,1,17,33,53,33,17,7,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,2,13,254,149,2,1,75,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,1,7,1,116,150,253,246,78,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,0,3,0,75,0,185,4,101,4,211,0,5,0,21,0,37,0,0,1,17,33,21,33,17,7,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,2,13,2,21,254,129,75,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,1,7,2,10,150,254,140,78,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,0,3,0,75,0,185,4,101,4,211,0,5,0,21,0,37,0,0,1,17,51,17,33,21,1,50,22,22,21,20,6,6,35,34,38,38,53,52,54,54,23,34,6,6,21,20,22,22,51,50,54,54,53,52,38,38,2,13,150,1,127,254,54,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,2,123,2,10,254,140,150,2,88,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,4,0,75,0,185,4,101,4,211,0,3,0,7,0,23,0,39,0,0,1,17,23,17,51,17,23,17,3,50,22,22,21,20,6,6,35,34,38,38,53,52,54,54,23,34,6,6,21,20,22,22,51,50,54,54,53,52,38,38,1,119,150,150,150,225,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,1,18,3,127,1,252,130,3,127,1,252,130,3,193,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,12,0,75,0,185,4,101,4,211,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,95,0,107,0,119,0,131,0,143,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,39,34,38,53,52,54,51,50,22,21,20,6,5,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,55,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,55,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,5,34,38,53,52,54,51,50,22,21,20,6,3,58,34,41,41,34,34,41,41,254,27,34,41,41,34,34,41,41,197,34,41,41,34,34,41,41,1,98,34,41,41,34,34,41,41,254,28,34,41,41,34,34,41,41,28,34,41,41,34,34,41,41,2,68,34,41,41,34,34,41,41,254,27,34,41,41,34,34,41,41,2,68,34,41,41,34,34,41,41,27,34,41,41,34,34,41,41,254,28,34,41,41,34,34,41,41,1,99,34,41,41,34,34,41,41,4,0,41,34,34,41,41,34,34,41,252,246,41,34,34,41,41,34,34,41,165,41,34,34,41,41,34,34,41,226,41,34,34,41,41,34,34,41,1,194,41,34,34,41,41,34,34,41,225,41,34,34,41,41,34,34,41,253,154,41,34,34,41,41,34,34,41,3,10,41,34,34,41,41,34,34,41,253,155,41,34,34,41,41,34,34,41,224,41,34,34,41,41,34,34,41,1,194,41,34,34,41,41,34,34,41,225,41,34,34,41,41,34,34,41,0,3,0,75,0,185,4,101,4,211,0,11,0,27,0,43,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,50,22,22,21,20,6,6,35,34,38,38,53,52,54,54,23,34,6,6,21,20,22,22,51,50,54,54,53,52,38,38,2,88,102,123,123,102,102,123,123,102,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,1,229,123,102,102,123,123,102,102,123,2,238,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,255,255,0,0,0,110,4,176,5,30,2,38,3,140,0,0,0,6,3,157,0,0,0,2,1,48,1,158,3,128,3,238,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,2,88,133,163,163,133,134,162,162,134,66,80,80,66,66,80,80,1,158,163,133,134,162,162,134,133,163,150,80,66,66,80,80,66,66,80,0,2,0,75,0,185,4,101,4,211,0,3,0,15,0,0,55,17,33,17,37,50,54,53,52,38,35,34,6,21,20,22,75,4,26,253,243,134,162,162,134,133,163,163,185,4,26,251,230,215,163,133,134,162,162,134,133,163,0,3,0,0,0,110,4,176,5,30,0,3,0,19,0,35,0,0,53,17,33,17,37,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,55,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,4,176,253,168,158,236,131,131,236,158,158,236,131,131,236,158,113,169,93,93,169,113,113,169,93,93,169,110,4,176,251,80,75,131,236,158,158,236,131,131,236,158,158,236,131,150,93,169,113,113,169,93,93,169,113,113,169,93,0,2,0,0,2,198,4,176,5,30,0,12,0,21,0,0,17,17,33,17,35,52,38,38,35,34,6,6,21,51,52,54,54,51,50,22,22,21,4,176,75,131,236,158,158,236,131,150,93,169,113,113,169,93,2,198,2,88,253,168,158,236,131,131,236,158,113,169,93,93,169,113,0,2,0,0,0,110,4,176,2,198,0,12,0,21,0,0,53,17,51,20,22,22,51,50,54,54,53,51,17,37,34,38,38,53,33,20,6,6,75,131,236,158,158,236,131,75,253,168,113,169,93,2,238,93,169,110,2,88,158,236,131,131,236,158,253,168,225,93,169,113,113,169,93,0,0,1,0,75,2,198,4,101,4,211,0,17,0,0,19,52,54,54,51,50,22,22,21,35,52,38,38,35,34,6,6,21,75,131,236,158,158,236,131,150,93,169,113,113,169,93,2,198,158,236,131,131,236,158,113,169,93,93,169,113,0,1,0,75,0,185,4,101,2,198,0,17,0,0,37,34,38,38,53,51,20,22,22,51,50,54,54,53,51,20,6,6,2,88,158,236,131,150,93,169,113,113,169,93,150,131,236,185,131,236,158,113,169,93,93,169,113,158,236,131,0,1,0,75,2,198,2,88,4,211,0,9,0,0,19,52,54,54,51,21,34,6,6,21,75,131,236,158,113,169,93,2,198,158,236,131,150,93,169,113,0,1,2,88,2,198,4,101,4,211,0,9,0,0,1,52,38,38,35,53,50,22,22,21,3,207,93,169,113,158,236,131,2,198,113,169,93,150,131,236,158,0,0,1,2,88,0,185,4,101,2,198,0,9,0,0,37,53,50,54,54,53,51,20,6,6,2,88,113,169,93,150,131,236,185,150,93,169,113,158,236,131,0,1,0,75,0,185,2,88,2,198,0,9,0,0,37,34,38,38,53,51,20,22,22,51,2,88,158,236,131,150,93,169,113,185,131,236,158,113,169,93,0,1,0,0,0,110,4,176,5,30,0,3,0,0,37,9,2,2,88,253,168,2,88,2,88,110,2,88,2,88,253,168,0,2,0,0,0,110,4,176,5,30,0,3,0,7,0,0,37,9,6,2,88,253,168,2,88,2,88,253,168,1,132,254,124,254,124,110,2,88,2,88,253,168,254,124,1,132,1,132,254,124,0,3,0,0,0,110,4,176,5,30,0,2,0,6,0,10,0,0,37,1,1,17,9,6,2,88,253,235,2,21,253,168,2,88,2,88,253,168,1,132,254,124,254,124,192,2,6,2,6,251,162,2,88,2,88,253,168,254,124,1,132,1,132,254,124,0,0,3,0,0,0,110,4,176,5,30,0,2,0,6,0,10,0,0,37,17,9,8,2,88,2,21,253,235,253,168,2,88,2,88,253,168,1,132,254,124,254,124,192,4,12,253,250,253,168,2,88,2,88,253,168,254,124,1,132,1,132,254,124,0,0,3,0,0,0,110,4,176,5,30,0,2,0,6,0,10,0,0,19,9,9,67,2,21,2,21,253,235,253,168,2,88,2,88,253,168,1,132,254,124,254,124,2,198,2,6,253,250,253,168,2,88,2,88,253,168,254,124,1,132,1,132,254,124,0,3,0,0,0,110,4,176,5,30,0,2,0,6,0,10,0,0,19,33,1,17,9,6,67,4,42,253,235,2,88,253,168,253,168,2,88,254,124,1,132,1,132,2,198,253,250,4,94,253,168,253,168,2,88,1,132,254,124,254,124,1,132,0,0,3,0,0,0,110,4,176,5,30,0,3,0,7,0,11,0,0,1,39,55,23,3,9,6,2,88,176,176,176,176,2,88,253,168,253,168,2,88,254,124,1,132,1,132,2,22,176,176,176,2,88,253,168,253,168,2,88,1,132,254,124,254,124,1,132,0,2,0,80,0,0,4,96,5,140,0,5,0,9,0,0,33,1,1,51,1,1,39,9,2,1,223,254,113,1,143,232,1,153,254,103,116,1,54,254,202,254,212,2,198,2,198,253,58,253,58,172,2,26,2,26,253,230,0,1,0,0,1,154,4,176,3,242,0,3,0,0,17,19,33,3,170,4,6,170,1,154,2,88,253,168,0,2,0,0,1,154,4,176,3,242,0,3,0,11,0,0,17,19,33,3,37,39,33,7,19,23,33,55,170,4,6,170,252,170,59,3,113,103,129,59,252,143,103,1,154,2,88,253,168,72,78,78,1,200,78,78,0,1,1,44,0,110,3,132,5,30,0,3,0,0,37,17,33,17,1,44,2,88,110,4,176,251,80,0,0,1,0,0,1,154,4,176,3,242,0,3,0,0,17,17,33,17,4,176,1,154,2,88,253,168,0,2,0,0,1,154,4,176,3,242,0,3,0,7,0,0,17,17,33,17,37,33,17,33,4,176,251,230,3,132,252,124,1,154,2,88,253,168,150,1,44,0,0,2,1,44,0,110,3,132,5,30,0,3,0,7,0,0,37,17,33,17,37,33,17,33,1,44,2,88,254,62,1,44,254,212,110,4,176,251,80,150,3,132,0,1,0,75,0,185,4,101,4,211,0,3,0,0,55,17,33,17,75,4,26,185,4,26,251,230,0,2,0,75,0,185,4,101,4,211,0,3,0,7,0,0,55,17,33,17,37,33,17,33,75,4,26,252,124,2,238,253,18,185,4,26,251,230,150,2,238,0,0,2,0,75,0,185,4,101,4,211,0,15,0,31,0,0,37,34,38,53,17,52,54,51,33,50,22,21,17,20,6,35,37,33,50,54,53,17,52,38,35,33,34,6,21,17,20,22,1,75,115,141,141,115,2,26,115,141,141,115,253,229,2,28,48,57,57,48,253,228,48,57,57,185,141,115,2,26,115,141,141,115,253,230,115,141,150,57,48,2,28,48,57,57,48,253,228,48,57,0,0,3,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,0,1,17,33,17,1,17,33,17,37,33,17,33,1,119,1,194,253,18,4,26,252,124,2,238,253,18,1,229,1,194,254,62,254,212,4,26,251,230,150,2,238,0,0,12,0,75,0,185,4,101,4,211,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,95,0,107,0,119,0,131,0,143,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,4,26,31,44,44,31,31,44,44,252,93,31,44,44,31,31,44,44,31,31,44,44,31,31,44,44,1,13,31,44,44,31,31,44,44,254,181,31,44,44,31,31,44,44,2,57,31,44,44,31,31,44,44,253,137,31,44,44,31,31,44,44,3,101,31,44,44,31,31,44,44,253,137,31,44,44,31,31,44,44,2,57,31,44,44,31,31,44,44,31,31,44,44,31,31,44,44,254,181,31,44,44,31,31,44,44,4,61,44,31,31,44,44,31,31,44,252,124,44,31,31,44,44,31,31,44,1,44,44,31,31,44,44,31,31,44,254,212,44,31,31,44,44,31,31,44,2,88,44,31,31,44,44,31,31,44,253,168,44,31,31,44,44,31,31,44,3,132,44,31,31,44,44,31,31,44,252,124,44,31,31,44,44,31,31,44,3,132,44,31,31,44,44,31,31,44,253,168,44,31,31,44,44,31,31,44,1,44,44,31,31,44,44,31,31,44,1,44,44,31,31,44,44,31,31,44,0,4,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,15,0,0,19,53,33,21,1,53,33,21,1,17,33,17,37,33,17,33,149,3,134,252,122,3,134,252,48,4,26,252,124,2,238,253,18,3,17,150,150,254,212,150,150,254,212,4,26,251,230,150,2,238,0,4,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,15,0,0,1,35,17,51,1,35,17,51,1,33,17,33,3,17,33,17,2,13,150,150,1,44,150,150,1,44,251,230,4,26,150,253,18,1,3,3,134,252,122,3,134,252,48,4,26,252,124,2,238,253,18,0,0,6,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,15,0,19,0,23,0,0,19,53,33,21,1,17,51,17,37,53,33,21,5,17,51,17,5,17,33,17,37,33,17,33,149,3,134,253,92,150,254,136,3,134,254,136,150,253,18,4,26,252,124,2,238,253,18,3,17,150,150,253,242,3,134,252,122,226,150,150,226,3,134,252,122,74,4,26,251,230,150,2,238,0,0,5,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,15,0,19,0,0,19,55,1,7,1,53,1,35,3,51,1,21,1,17,33,17,37,33,17,33,129,111,3,79,101,252,188,2,103,212,111,212,1,170,252,19,4,26,252,124,2,238,253,18,4,56,101,252,177,111,1,170,212,253,153,3,163,254,86,212,254,158,4,26,251,230,150,2,238,0,0,5,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,15,0,19,0,0,1,1,39,1,19,1,35,9,2,53,1,1,33,17,33,3,17,33,17,4,47,252,167,101,3,79,90,254,109,212,2,103,254,220,253,130,1,170,2,67,251,230,4,26,150,253,18,4,56,252,167,111,3,79,253,236,254,109,2,103,1,60,253,130,212,1,170,252,32,4,26,252,124,2,238,253,18,0,0,8,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,0,37,1,55,1,5,1,53,1,5,39,1,23,1,1,21,1,1,53,1,51,1,1,51,1,1,17,33,17,37,33,17,33,3,218,252,167,111,3,79,253,234,254,109,2,103,253,217,101,3,79,111,253,132,2,103,254,109,253,241,1,170,212,1,66,253,130,212,1,170,252,19,4,26,252,124,2,238,253,18,223,3,89,101,252,177,88,1,147,212,253,153,23,111,3,79,101,252,190,2,103,212,254,109,1,37,212,1,170,253,130,2,126,254,86,253,202,4,26,251,230,150,2,238,0,0,1,1,44,1,154,3,132,3,242,0,3,0,0,1,17,33,17,1,44,2,88,1,154,2,88,253,168,0,2,1,44,1,154,3,132,3,242,0,3,0,7,0,0,1,17,33,17,37,33,17,33,1,44,2,88,254,62,1,44,254,212,1,154,2,88,253,168,150,1,44,0,0,3,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,0,37,33,17,33,1,17,33,17,37,33,17,33,2,88,254,27,1,229,253,243,4,26,252,124,2,238,253,18,235,3,182,252,24,4,26,251,230,150,2,238,0,3,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,0,37,17,33,17,23,33,17,33,3,17,33,17,2,88,1,229,40,251,230,4,26,150,253,18,235,3,182,252,74,50,4,26,252,124,2,238,253,18,0,3,0,75,0,185,4,101,4,211,0,2,0,6,0,10,0,0,55,17,33,19,33,17,33,3,17,33,17,101,3,220,36,251,230,4,26,150,253,18,221,3,211,252,9,4,26,252,124,2,238,253,18,0,0,3,0,75,0,185,4,101,4,211,0,2,0,6,0,10,0,0,1,17,33,3,33,17,33,19,17,33,17,4,75,252,36,36,4,26,251,230,150,2,238,4,175,252,45,3,247,251,230,3,132,253,18,2,238,0,0,3,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,0,37,35,17,51,37,33,17,33,19,17,33,17,2,163,150,150,253,168,4,26,251,230,150,2,238,219,3,214,34,251,230,3,132,253,18,2,238,0,0,3,0,75,0,185,4,101,4,211,0,5,0,9,0,13,0,0,19,53,33,17,51,17,1,33,17,33,19,17,33,17,130,1,140,150,253,167,4,26,251,230,150,2,238,2,123,150,1,140,253,222,2,88,251,230,3,132,253,18,2,238,0,3,0,75,0,185,4,101,4,211,0,5,0,9,0,13,0,0,19,33,17,35,17,33,3,17,33,17,37,33,17,33,130,2,34,150,254,116,55,4,26,252,124,2,238,253,18,3,17,253,222,1,140,254,62,4,26,251,230,150,2,238,0,3,0,75,0,185,4,101,4,211,0,5,0,9,0,13,0,0,1,21,33,17,35,17,1,33,17,33,3,17,33,17,4,46,254,116,150,2,89,251,230,4,26,150,253,18,3,17,150,254,116,2,34,253,168,4,26,252,124,2,238,253,18,0,0,3,0,75,0,185,4,101,4,211,0,5,0,9,0,13,0,0,1,33,17,51,17,33,19,17,33,17,5,33,17,33,4,46,253,222,150,1,140,55,251,230,3,132,253,18,2,238,2,123,2,34,254,116,1,194,251,230,4,26,150,253,18,0,0,2,0,150,1,4,4,26,4,136,0,3,0,7,0,0,19,17,33,17,37,33,17,33,150,3,132,253,18,2,88,253,168,1,4,3,132,252,124,150,2,88,0,1,0,150,1,4,4,26,4,136,0,3,0,0,19,17,33,17,150,3,132,1,4,3,132,252,124,0,0,2,0,225,1,79,3,207,4,61,0,3,0,7,0,0,19,17,33,17,37,33,17,33,225,2,238,253,168,1,194,254,62,1,79,2,238,253,18,150,1,194,0,1,0,225,1,79,3,207,4,61,0,3,0,0,19,17,33,17,225,2,238,1,79,2,238,253,18,0,0,1,0,0,0,230,4,176,4,226,0,2,0,0,53,1,1,2,88,2,88,230,3,252,252,4,0,1,0,120,0,110,4,116,5,30,0,2,0,0,55,17,1,120,3,252,110,4,176,253,168,0,0,1,0,0,0,170,4,176,4,166,0,2,0,0,37,1,33,2,88,253,168,4,176,170,3,252,0,1,0,60,0,110,4,56,5,30,0,2,0,0,37,1,1,4,56,252,4,3,252,110,2,88,2,88,0,2,0,0,0,230,4,176,4,226,0,2,0,8,0,0,53,1,1,37,39,33,7,1,51,2,88,2,88,252,10,67,3,202,78,254,27,148,230,3,252,252,4,20,130,124,3,56,0,2,0,120,0,110,4,116,5,30,0,2,0,8,0,0,55,17,1,1,39,1,21,1,55,120,3,252,252,154,124,3,56,252,194,130,110,4,176,253,168,254,23,78,1,229,148,1,232,67,0,2,0,0,0,170,4,176,4,166,0,2,0,8,0,0,37,1,33,1,1,23,33,55,1,2,88,253,168,4,176,253,94,1,229,78,252,54,67,1,232,170,3,252,252,174,3,56,124,130,252,194,0,2,0,60,0,110,4,56,5,30,0,2,0,8,0,0,37,1,1,3,17,23,1,53,1,4,56,252,4,3,252,150,130,252,194,3,56,110,2,88,2,88,251,191,3,202,67,254,24,148,254,27,0,3,0,0,0,230,4,176,4,226,0,11,0,14,0,20,0,0,1,34,38,53,52,54,51,50,22,21,20,6,9,2,37,39,33,7,1,51,2,88,31,44,44,31,31,44,44,253,137,2,88,2,88,252,10,67,3,202,78,254,27,148,2,3,44,31,31,44,44,31,31,44,254,227,3,252,252,4,20,130,124,3,56,0,0,3,0,0,0,230,4,176,4,226,0,2,0,5,0,11,0,0,1,33,9,3,37,39,33,7,1,51,2,88,254,22,1,234,253,168,2,88,2,88,252,10,67,3,202,78,254,27,148,1,24,3,56,252,150,3,252,252,4,20,130,124,3,56,0,3,0,0,0,230,4,176,4,226,0,2,0,5,0,11,0,0,1,17,1,23,33,9,2,51,1,39,33,2,88,1,234,110,251,80,2,88,1,158,254,24,148,254,27,78,3,202,1,24,3,56,252,200,50,3,252,252,24,3,62,252,200,124,0,1,0,120,1,94,4,116,4,46,0,2,0,0,19,17,1,120,3,252,1,94,2,208,254,152,0,1,0,60,1,94,4,56,4,46,0,2,0,0,9,2,4,56,252,4,3,252,1,94,1,104,1,104,0,2,0,120,1,94,4,116,4,46,0,2,0,8,0,0,19,17,1,5,39,37,21,37,55,120,3,252,252,154,78,2,143,253,113,78,1,94,2,208,254,152,229,48,214,66,214,48,0,2,0,60,1,94,4,56,4,46,0,2,0,8,0,0,9,2,3,17,23,5,53,5,4,56,252,4,3,252,150,78,253,66,2,190,1,94,1,104,1,104,253,159,1,242,68,229,96,229,0,1,0,131,1,49,4,45,4,78,0,2,0,0,19,1,1,131,1,213,1,213,1,49,3,29,252,227,0,1,0,195,0,241,3,224,4,155,0,2,0,0,55,17,1,195,3,29,241,3,170,254,43,0,0,1,0,131,1,62,4,45,4,91,0,2,0,0,1,1,33,2,88,254,43,3,170,1,62,3,29,0,0,1,0,208,0,241,3,237,4,155,0,2,0,0,37,1,1,3,237,252,227,3,29,241,1,213,1,213,0,2,0,131,1,49,4,45,4,78,0,2,0,8,0,0,19,1,1,37,39,33,7,1,51,131,1,213,1,213,253,51,40,2,64,40,254,223,82,1,49,3,29,252,227,80,70,70,1,235,0,2,0,195,0,241,3,224,4,155,0,2,0,8,0,0,55,17,1,1,39,1,21,1,55,195,3,29,253,121,70,1,235,254,21,70,241,3,170,254,43,254,224,40,1,33,82,1,33,40,0,2,0,131,1,62,4,45,4,91,0,2,0,8,0,0,1,1,33,1,1,23,33,55,1,2,88,254,43,3,170,254,2,1,33,40,253,192,40,1,33,1,62,3,29,253,197,1,235,70,70,254,21,0,0,2,0,208,0,241,3,237,4,155,0,2,0,8,0,0,37,1,1,3,17,23,1,53,1,3,237,252,227,3,29,150,70,254,21,1,235,241,1,213,1,213,253,11,2,64,40,254,223,82,254,223,0,1,0,75,0,185,4,101,4,211,0,2,0,0,37,1,33,4,101,251,230,4,26,185,4,26,0,1,0,75,0,185,4,101,4,211,0,2,0,0,55,1,17,75,4,26,185,4,26,251,230,0,0,1,0,75,0,185,4,101,4,211,0,2,0,0,55,17,1,75,4,26,185,4,26,251,230,0,0,1,0,75,0,185,4,101,4,211,0,2,0,0,55,17,33,75,4,26,185,4,26,0,0,2,0,75,0,185,4,101,4,211,0,2,0,8,0,0,37,1,33,3,7,17,23,33,55,4,101,251,230,4,26,93,57,81,253,68,24,185,4,26,253,23,24,2,188,81,57,0,0,2,0,75,0,185,4,101,4,211,0,2,0,8,0,0,1,17,33,1,1,39,33,7,17,4,101,251,230,3,189,253,116,24,2,188,81,4,211,251,230,2,233,253,116,57,81,2,188,0,0,2,0,75,0,185,4,101,4,211,0,2,0,8,0,0,19,1,33,19,55,17,39,33,7,75,4,26,251,230,93,57,81,2,188,24,4,211,251,230,2,233,24,253,68,81,57,0,0,2,0,75,0,185,4,101,4,211,0,2,0,8,0,0,55,17,33,1,1,23,33,55,17,75,4,26,252,67,2,140,24,253,68,81,185,4,26,253,23,2,140,57,81,253,68,0,0,3,255,150,251,60,5,26,3,80,0,5,0,11,0,15,0,0,1,17,33,21,33,17,33,17,33,53,33,17,1,53,33,21,2,194,2,88,254,124,253,132,254,124,2,88,253,168,5,132,251,60,6,108,212,250,104,5,152,212,249,148,7,64,212,212,0,2,255,150,251,60,3,150,3,80,0,5,0,11,0,0,1,17,33,53,33,17,33,17,33,53,33,17,2,194,252,212,4,0,253,132,254,124,2,88,251,60,7,64,212,247,236,5,152,212,249,148,0,2,1,26,251,60,5,26,3,80,0,5,0,11,0,0,1,17,33,21,33,17,51,17,33,21,33,17,1,26,4,0,252,212,212,2,88,254,124,251,60,8,20,212,248,192,6,108,212,250,104,0,0,2,255,150,0,212,5,26,3,80,0,3,0,7,0,0,3,53,33,21,1,53,33,21,106,5,132,250,124,5,132,2,124,212,212,254,88,212,212,0,0,3,255,150,0,212,5,26,8,232,0,5,0,9,0,15,0,0,1,17,51,17,33,21,1,53,33,21,1,53,33,17,51,17,2,194,212,1,132,250,124,5,132,250,124,1,132,212,2,124,6,108,250,104,212,254,88,212,212,1,168,212,5,152,249,148,0,2,255,150,0,212,3,150,8,232,0,5,0,11,0,0,39,53,33,17,51,17,1,53,33,17,51,17,106,3,44,212,252,0,1,132,212,212,212,7,64,247,236,1,168,212,5,152,249,148,0,2,1,26,0,212,5,26,8,232,0,5,0,11,0,0,37,17,51,17,33,21,1,17,51,17,33,21,1,26,212,3,44,253,168,212,1,132,212,8,20,248,192,212,1,168,6,108,250,104,212,0,0,2,1,26,251,60,3,150,8,232,0,3,0,7,0,0,1,17,51,17,33,17,51,17,2,194,212,253,132,212,251,60,13,172,242,84,13,172,242,84,0,4,255,150,251,60,5,26,8,232,0,5,0,11,0,17,0,23,0,0,1,17,51,17,33,21,1,17,33,53,33,17,51,17,33,21,33,17,1,53,33,17,51,17,2,194,212,1,132,252,0,254,124,2,88,212,2,88,254,124,252,0,1,132,212,2,124,6,108,250,104,212,248,192,5,152,212,249,148,6,108,212,250,104,7,64,212,5,152,249,148,0,0,3,255,150,251,60,3,150,8,232,0,5,0,11,0,15,0,0,3,53,33,17,51,17,3,17,33,53,33,17,51,17,51,17,106,1,132,212,212,254,124,2,88,212,212,2,124,212,5,152,249,148,248,192,5,152,212,249,148,13,172,242,84,0,0,3,1,26,251,60,5,26,8,232,0,5,0,11,0,15,0,0,1,17,51,17,33,21,1,17,33,21,33,17,33,17,51,17,2,194,212,1,132,253,168,2,88,254,124,253,132,212,2,124,6,108,250,104,212,248,192,6,108,212,250,104,13,172,242,84,0,1,255,150,251,60,5,26,2,124,0,11,0,0,1,17,33,53,33,21,33,17,35,17,35,17,1,26,254,124,5,132,254,124,212,212,251,60,6,108,212,212,249,148,6,108,249,148,0,1,255,150,251,60,3,150,2,124,0,9,0,0,1,17,33,53,33,17,35,17,35,17,1,26,254,124,4,0,212,212,251,60,6,108,212,248,192,6,108,249,148,0,0,1,1,26,251,60,5,26,2,124,0,9,0,0,1,17,33,21,33,17,35,17,35,17,1,26,4,0,254,124,212,212,251,60,7,64,212,249,148,6,108,249,148,0,0,1,255,150,251,60,5,26,2,124,0,7,0,0,1,17,33,53,33,21,33,17,1,132,254,18,5,132,254,18,251,60,6,108,212,212,249,148,0,1,255,150,251,60,3,44,2,124,0,5,0,0,1,17,33,53,33,17,1,132,254,18,3,150,251,60,6,108,212,248,192,0,0,1,255,150,251,60,3,44,8,232,0,9,0,0,1,17,33,53,33,17,51,17,51,17,1,132,254,18,2,88,212,106,251,60,6,108,212,6,108,249,148,248,192,0,0,1,1,132,251,60,5,26,2,124,0,5,0,0,1,17,33,21,33,17,1,132,3,150,254,18,251,60,7,64,212,249,148,0,0,1,1,132,251,60,5,26,8,232,0,9,0,0,1,17,51,17,51,17,33,21,33,17,1,132,106,212,2,88,254,18,251,60,7,64,6,108,249,148,212,249,148,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,53,33,17,51,17,33,21,33,17,1,132,254,18,2,88,212,2,88,254,18,251,60,6,108,212,6,108,249,148,212,249,148,0,0,1,255,150,251,60,5,26,2,230,0,7,0,0,1,17,33,17,33,17,33,17,1,238,253,168,5,132,253,168,251,60,6,2,1,168,254,88,249,254,0,1,255,150,251,60,2,194,2,230,0,5,0,0,1,17,33,17,33,17,1,238,253,168,3,44,251,60,6,2,1,168,248,86,0,1,255,150,251,60,3,44,8,232,0,9,0,0,1,17,33,17,33,17,33,17,35,17,1,238,253,168,1,238,1,168,106,251,60,6,2,1,168,6,2,248,86,249,254,0,0,1,1,238,251,60,5,26,2,230,0,5,0,0,1,17,33,17,33,17,1,238,3,44,253,168,251,60,7,170,254,88,249,254,0,1,1,132,251,60,5,26,8,232,0,9,0,0,1,17,35,17,33,17,33,17,33,17,1,238,106,1,168,1,238,253,168,251,60,6,2,7,170,249,254,254,88,249,254,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,17,33,17,33,17,33,17,33,17,1,238,253,168,1,238,1,168,1,238,253,168,251,60,6,2,1,168,6,2,249,254,254,88,249,254,0,2,255,150,251,60,5,26,3,80,0,7,0,11,0,0,1,17,33,53,33,21,33,17,1,53,33,21,1,238,253,168,5,132,253,168,252,212,5,132,251,60,5,152,212,212,250,104,7,64,212,212,0,1,255,150,251,60,2,194,3,80,0,9,0,0,1,17,33,53,33,53,33,53,33,17,1,238,253,168,2,88,253,168,3,44,251,60,5,152,212,212,212,247,236,0,0,1,1,238,251,60,5,26,3,80,0,9,0,0,1,17,33,21,33,21,33,21,33,17,1,238,3,44,253,168,2,88,253,168,251,60,8,20,212,212,212,250,104,0,0,2,0,150,1,62,4,26,2,230,0,3,0,7,0,0,1,17,33,17,33,17,33,17,2,238,1,44,252,124,1,44,1,62,1,168,254,88,1,168,254,88,0,2,1,132,255,58,3,44,4,233,0,3,0,7,0,0,1,17,33,17,1,17,33,17,1,132,1,168,254,88,1,168,3,4,1,229,254,27,252,54,1,229,254,27,0,1,1,132,251,60,3,44,2,124,0,3,0,0,1,17,33,17,1,132,1,168,251,60,7,64,248,192,0,1,255,150,251,60,5,26,2,230,0,7,0,0,1,17,33,17,33,17,33,17,1,132,254,18,5,132,254,18,251,60,6,2,1,168,254,88,249,254,0,1,255,150,251,60,3,44,2,230,0,5,0,0,1,17,33,17,33,17,1,132,254,18,3,150,251,60,6,2,1,168,248,86,0,1,1,132,251,60,5,26,2,230,0,5,0,0,1,17,33,17,33,17,1,132,3,150,254,18,251,60,7,170,254,88,249,254,0,1,255,150,1,62,5,26,2,230,0,3,0,0,3,17,33,17,106,5,132,1,62,1,168,254,88,0,0,1,255,150,1,62,2,194,2,230,0,3,0,0,3,17,33,17,106,3,44,1,62,1,168,254,88,0,0,1,255,150,1,62,5,26,2,230,0,7,0,0,3,17,33,21,33,21,33,21,106,3,44,2,88,253,168,1,62,1,168,106,212,106,0,4,0,37,1,62,4,138,2,230,0,3,0,7,0,11,0,15,0,0,1,17,51,17,33,17,51,17,51,17,51,17,51,17,51,17,3,169,225,251,155,225,75,225,75,225,1,62,1,168,254,88,1,168,254,88,1,168,254,88,1,168,254,88,0,4,1,132,254,132,3,44,5,159,0,3,0,7,0,11,0,15,0,0,1,17,33,17,1,17,33,17,1,17,33,17,1,17,33,17,1,132,1,168,254,88,1,168,254,88,1,168,254,88,1,168,4,51,1,108,254,148,250,81,1,108,254,148,1,229,1,108,254,148,1,229,1,108,254,148,0,1,1,238,1,62,5,26,2,230,0,3,0,0,1,17,33,17,1,238,3,44,1,62,1,168,254,88,0,3,0,66,1,62,4,109,2,230,0,3,0,7,0,11,0,0,1,17,33,17,33,17,33,17,51,17,33,17,3,98,1,11,251,213,1,11,133,1,11,1,62,1,168,254,88,1,168,254,88,1,168,254,88,0,0,3,1,132,254,179,3,44,5,110,0,3,0,7,0,11,0,0,1,17,33,17,1,17,33,17,1,17,33,17,1,132,1,168,254,88,1,168,254,88,1,168,3,191,1,175,254,81,250,244,1,175,254,81,2,134,1,175,254,81,0,1,1,132,1,168,3,44,8,232,0,3,0,0,1,17,33,17,1,132,1,168,1,168,7,64,248,192,0,1,255,150,1,62,5,26,8,232,0,7,0,0,3,17,33,17,33,17,33,17,106,1,238,1,168,1,238,1,62,1,168,6,2,249,254,254,88,0,0,1,255,150,1,62,3,44,8,232,0,5,0,0,3,17,33,17,33,17,106,1,238,1,168,1,62,1,168,6,2,248,86,0,0,1,1,132,251,60,3,44,8,232,0,7,0,0,1,17,35,17,33,17,35,17,1,238,106,1,168,106,251,60,6,108,7,64,248,192,249,148,0,1,1,132,1,62,5,26,8,232,0,5,0,0,1,17,33,17,33,17,1,132,1,168,1,238,1,62,7,170,249,254,254,88,0,1,1,132,251,60,3,44,8,232,0,3,0,0,1,17,33,17,1,132,1,168,251,60,13,172,242,84,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,17,33,17,33,17,33,17,33,17,1,132,254,18,1,238,1,168,1,238,254,18,251,60,6,2,1,168,6,2,249,254,254,88,249,254,0,1,255,150,251,60,3,44,8,232,0,7,0,0,1,17,33,17,33,17,33,17,1,132,254,18,1,238,1,168,251,60,6,2,1,168,6,2,242,84,0,1,1,132,251,60,5,26,8,232,0,7,0,0,1,17,33,17,33,17,33,17,1,132,1,168,1,238,254,18,251,60,13,172,249,254,254,88,249,254,0,1,255,150,251,60,5,26,8,232,0,13,0,0,1,17,33,17,33,17,51,17,51,21,33,21,33,17,1,132,254,18,2,88,212,106,1,238,254,18,251,60,6,2,1,168,6,2,249,254,106,212,249,148,0,1,255,150,251,60,5,26,2,230,0,9,0,0,1,17,33,17,33,21,33,21,33,17,1,238,253,168,3,44,2,88,253,168,251,60,6,2,1,168,106,212,249,148,0,1,255,150,1,62,5,26,8,232,0,9,0,0,3,17,33,17,51,17,33,21,33,21,106,2,88,212,2,88,253,168,1,62,1,168,6,2,249,148,212,106,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,17,33,17,51,17,33,21,33,17,1,238,253,168,2,88,212,2,88,253,168,251,60,6,2,1,168,6,2,249,148,212,249,148,0,1,255,150,251,60,5,26,2,230,0,9,0,0,1,17,33,53,33,53,33,17,33,17,1,132,254,18,1,238,3,150,254,18,251,60,6,108,212,106,254,88,249,254,0,1,255,150,1,62,5,26,8,232,0,9,0,0,1,53,33,53,33,17,33,17,33,17,1,132,254,18,1,238,1,168,1,238,1,62,106,212,6,108,249,254,254,88,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,53,33,17,33,17,33,17,33,17,1,132,254,18,1,238,1,168,1,238,254,18,251,60,6,108,212,6,108,249,254,254,88,249,254,0,0,1,255,150,251,60,5,26,8,232,0,13,0,0,1,17,33,17,33,17,33,17,33,21,33,21,35,17,1,238,253,168,1,238,1,168,1,238,254,18,106,251,60,6,2,1,168,6,2,249,148,212,106,249,254,0,0,1,255,150,251,60,2,194,2,124,0,15,0,0,1,17,52,46,2,35,35,53,51,50,4,22,18,21,17,1,238,77,136,179,102,106,106,146,1,0,194,110,251,60,4,126,102,179,136,77,212,110,194,255,0,146,251,130,0,1,1,238,251,60,5,26,2,124,0,15,0,0,1,17,52,18,54,36,51,51,21,35,34,14,2,21,17,1,238,110,194,1,0,146,106,106,102,179,136,77,251,60,4,126,146,1,0,194,110,212,77,136,179,102,251,130,0,1,255,150,1,168,2,194,8,232,0,15,0,0,3,53,51,50,62,2,53,17,51,17,20,2,6,4,35,106,106,102,179,136,77,212,110,194,255,0,146,1,168,212,77,136,179,102,4,126,251,130,146,255,0,194,110,0,0,1,1,238,1,168,5,26,8,232,0,15,0,0,1,34,36,38,2,53,17,51,17,20,30,2,51,51,21,4,176,146,255,0,194,110,212,77,136,179,102,106,1,168,110,194,1,0,146,4,126,251,130,102,179,136,77,212,0,1,0,0,254,72,4,176,5,220,0,15,0,0,17,53,1,1,53,51,1,1,51,21,1,1,21,35,1,1,1,219,254,37,125,1,219,1,219,125,254,37,1,219,125,254,37,254,37,254,72,202,3,0,3,0,202,253,0,3,0,202,253,0,253,0,202,3,0,253,0,0,0,1,0,0,254,72,4,176,5,220,0,5,0,0,1,1,53,51,1,21,4,51,251,205,125,4,51,254,72,6,202,202,249,54,202,0,0,1,0,0,254,72,4,176,5,220,0,5,0,0,17,53,1,51,21,1,4,51,125,251,205,254,72,202,6,202,202,249,54,0,0,2,0,150,1,168,4,26,2,124,0,3,0,7,0,0,1,53,33,21,33,53,33,21,2,238,1,44,252,124,1,44,1,168,212,212,212,212,0,2,1,238,255,58,2,194,4,233,0,3,0,7,0,0,1,17,51,17,3,17,51,17,1,238,212,212,212,3,4,1,229,254,27,252,54,1,229,254,27,0,0,1,1,238,251,60,2,194,2,124,0,3,0,0,1,17,51,17,1,238,212,251,60,7,64,248,192,0,0,1,255,150,251,60,5,26,2,124,0,7,0,0,1,17,33,53,33,21,33,17,1,238,253,168,5,132,253,168,251,60,6,108,212,212,249,148,0,1,255,150,251,60,2,194,2,124,0,5,0,0,1,17,33,53,33,17,1,238,253,168,3,44,251,60,6,108,212,248,192,0,0,1,1,238,251,60,5,26,2,124,0,5,0,0,1,17,33,21,33,17,1,238,3,44,253,168,251,60,7,64,212,249,148,0,0,1,255,150,1,168,5,26,2,124,0,3,0,0,3,53,33,21,106,5,132,1,168,212,212,0,0,1,255,150,1,168,2,194,2,124,0,3,0,0,3,53,33,21,106,3,44,1,168,212,212,0,0,1,255,150,1,62,5,26,2,230,0,7,0,0,1,53,33,53,33,53,33,17,1,238,253,168,2,88,3,44,1,62,106,212,106,254,88,0,0,4,0,37,1,168,4,138,2,124,0,3,0,7,0,11,0,15,0,0,1,53,51,21,33,53,51,21,51,53,51,21,51,53,51,21,3,169,225,251,155,225,75,225,75,225,1,168,212,212,212,212,212,212,212,212,0,4,1,238,254,132,2,194,5,159,0,3,0,7,0,11,0,15,0,0,1,17,51,17,3,17,51,17,3,17,51,17,3,17,51,17,1,238,212,212,212,212,212,212,212,4,51,1,108,254,148,250,81,1,108,254,148,1,229,1,108,254,148,1,229,1,108,254,148,0,0,1,1,238,1,168,5,26,2,124,0,3,0,0,1,53,33,21,1,238,3,44,1,168,212,212,0,3,0,66,1,168,4,109,2,124,0,3,0,7,0,11,0,0,1,53,33,21,33,53,33,21,51,53,33,21,3,98,1,11,251,213,1,11,133,1,11,1,168,212,212,212,212,212,212,0,0,3,1,238,254,179,2,194,5,110,0,3,0,7,0,11,0,0,1,17,51,17,3,17,51,17,3,17,51,17,1,238,212,212,212,212,212,3,191,1,175,254,81,250,244,1,175,254,81,2,134,1,175,254,81,0,0,1,1,238,1,168,2,194,8,232,0,3,0,0,1,17,51,17,1,238,212,1,168,7,64,248,192,0,0,1,1,132,251,60,3,44,8,232,0,7,0,0,1,17,51,17,51,17,51,17,1,132,106,212,106,251,60,7,64,6,108,249,148,248,192,0,0,1,255,150,1,168,5,26,8,232,0,7,0,0,3,53,33,17,51,17,33,21,106,2,88,212,2,88,1,168,212,6,108,249,148,212,0,1,255,150,1,168,2,194,8,232,0,5,0,0,3,53,33,17,51,17,106,2,88,212,1,168,212,6,108,248,192,0,0,1,1,238,1,168,5,26,8,232,0,5,0,0,1,17,51,17,33,21,1,238,212,2,88,1,168,7,64,249,148,212,0,1,1,238,251,60,2,194,8,232,0,3,0,0,1,17,51,17,1,238,212,251,60,13,172,242,84,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,53,33,17,51,17,33,21,33,17,1,238,253,168,2,88,212,2,88,253,168,251,60,6,108,212,6,108,249,148,212,249,148,0,0,1,255,150,251,60,2,194,8,232,0,7,0,0,1,17,33,53,33,17,51,17,1,238,253,168,2,88,212,251,60,6,108,212,6,108,242,84,0,1,1,238,251,60,5,26,8,232,0,7,0,0,1,17,51,17,33,21,33,17,1,238,212,2,88,253,168,251,60,13,172,249,148,212,249,148,0,1,255,150,251,60,5,26,8,232,0,13,0,0,1,17,33,53,33,53,51,17,51,17,33,17,33,17,1,132,254,18,1,238,106,212,2,88,254,18,251,60,6,108,212,106,6,2,249,254,254,88,249,254,0,1,255,150,251,60,5,26,2,230,0,9,0,0,1,17,33,53,33,53,33,17,33,17,1,238,253,168,2,88,3,44,253,168,251,60,6,108,212,106,254,88,249,254,0,1,255,150,1,62,5,26,8,232,0,9,0,0,1,53,33,53,33,17,51,17,33,17,1,238,253,168,2,88,212,2,88,1,62,106,212,6,108,249,254,254,88,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,53,33,17,51,17,33,17,33,17,1,238,253,168,2,88,212,2,88,253,168,251,60,6,108,212,6,108,249,254,254,88,249,254,0,1,255,150,251,60,5,26,2,230,0,9,0,0,1,17,33,17,33,21,33,21,33,17,1,132,254,18,3,150,1,238,254,18,251,60,6,2,1,168,106,212,249,148,0,1,255,150,1,62,5,26,8,232,0,9,0,0,3,17,33,17,33,17,33,21,33,21,106,1,238,1,168,1,238,254,18,1,62,1,168,6,2,249,148,212,106,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,17,33,17,33,17,33,21,33,17,1,132,254,18,1,238,1,168,1,238,254,18,251,60,6,2,1,168,6,2,249,148,212,249,148,0,0,1,255,150,251,60,5,26,8,232,0,13,0,0,1,17,35,53,33,53,33,17,33,17,33,17,33,17,1,238,106,254,18,1,238,1,168,1,238,253,168,251,60,6,2,106,212,6,108,249,254,254,88,249,254,0,0,1,255,150,1,168,5,26,8,232,0,11,0,0,3,53,33,17,51,17,51,17,51,17,33,21,106,1,132,212,212,212,1,132,1,168,212,6,108,249,148,6,108,249,148,212,0,1,255,150,1,168,3,150,8,232,0,9,0,0,3,53,33,17,51,17,51,17,51,17,106,1,132,212,212,212,1,168,212,6,108,249,148,6,108,248,192,0,0,1,1,26,1,168,5,26,8,232,0,9,0,0,1,17,51,17,51,17,51,17,33,21,1,26,212,212,212,1,132,1,168,7,64,249,148,6,108,249,148,212,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,53,33,17,33,17,33,21,33,17,1,238,253,168,1,238,1,168,1,238,253,168,251,60,6,108,212,6,108,249,148,212,249,148,0,1,255,150,1,168,5,26,8,232,0,7,0,0,3,53,33,17,33,17,33,21,106,1,238,1,168,1,238,1,168,212,6,108,249,148,212,0,0,1,255,150,251,60,3,44,8,232,0,9,0,0,1,17,33,53,33,17,33,17,35,17,1,238,253,168,1,238,1,168,106,251,60,6,108,212,6,108,248,192,249,148,0,1,255,150,1,168,3,44,8,232,0,5,0,0,3,53,33,17,33,17,106,1,238,1,168,1,168,212,6,108,248,192,0,1,1,132,251,60,5,26,8,232,0,9,0,0,1,17,35,17,33,17,33,21,33,17,1,238,106,1,168,1,238,253,168,251,60,6,108,7,64,249,148,212,249,148,0,1,1,132,1,168,5,26,8,232,0,5,0,0,1,17,33,17,33,21,1,132,1,168,1,238,1,168,7,64,249,148,212,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,17,33,17,51,17,33,17,33,17,1,132,254,18,2,88,212,2,88,254,18,251,60,6,2,1,168,6,2,249,254,254,88,249,254,0,0,1,255,150,1,62,5,26,8,232,0,7,0,0,3,17,33,17,51,17,33,17,106,2,88,212,2,88,1,62,1,168,6,2,249,254,254,88,0,1,255,150,251,60,3,44,8,232,0,9,0,0,1,17,33,17,33,17,51,17,51,17,1,132,254,18,2,88,212,106,251,60,6,2,1,168,6,2,249,254,248,86,0,1,255,150,1,62,2,194,8,232,0,5,0,0,3,17,33,17,51,17,106,2,88,212,1,62,1,168,6,2,248,86,0,1,1,132,251,60,5,26,8,232,0,9,0,0,1,17,51,17,51,17,33,17,33,17,1,132,106,212,2,88,254,18,251,60,7,170,6,2,249,254,254,88,249,254,0,1,1,238,1,62,5,26,8,232,0,5,0,0,1,17,51,17,33,17,1,238,212,2,88,1,62,7,170,249,254,254,88,0,0,2,255,150,0,212,5,26,8,232,0,7,0,11,0,0,3,53,33,17,51,17,33,21,1,53,33,21,106,2,88,212,2,88,250,124,5,132,2,124,212,5,152,250,104,212,254,88,212,212,0,1,255,150,0,212,2,194,8,232,0,9,0,0,39,53,33,53,33,53,33,17,51,17,106,2,88,253,168,2,88,212,212,212,212,212,5,152,247,236,0,1,1,238,0,212,5,26,8,232,0,9,0,0,37,17,51,17,33,21,33,21,33,21,1,238,212,2,88,253,168,2,88,212,8,20,250,104,212,212,212,0,0,1,255,150,251,60,5,26,8,232,0,19,0,0,1,17,33,53,33,17,51,17,51,17,51,17,33,21,33,17,35,17,35,17,1,26,254,124,1,132,212,212,212,1,132,254,124,212,212,251,60,6,108,212,6,108,249,148,6,108,249,148,212,249,148,6,108,249,148,0,0,2,255,150,251,60,3,150,8,232,0,7,0,11,0,0,1,17,33,53,33,17,51,17,51,17,51,17,1,26,254,124,1,132,212,212,212,251,60,6,108,212,6,108,242,84,13,172,242,84,0,2,1,26,251,60,5,26,8,232,0,7,0,11,0,0,1,17,51,17,33,21,33,17,33,17,51,17,2,194,212,1,132,254,124,253,132,212,251,60,13,172,249,148,212,249,148,13,172,242,84,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,53,33,17,33,17,33,21,33,17,1,132,254,18,1,238,1,168,1,238,254,18,251,60,6,108,212,6,108,249,148,212,249,148,0,1,255,150,251,60,3,44,8,232,0,7,0,0,1,17,33,53,33,17,33,17,1,132,254,18,1,238,1,168,251,60,6,108,212,6,108,242,84,0,0,1,1,132,251,60,5,26,8,232,0,7,0,0,1,17,33,17,33,21,33,17,1,132,1,168,1,238,254,18,251,60,13,172,249,148,212,249,148,0,0,1,255,150,251,60,5,26,8,232,0,11,0,0,1,17,33,17,33,17,51,17,33,17,33,17,1,238,253,168,2,88,212,2,88,253,168,251,60,6,2,1,168,6,2,249,254,254,88,249,254,0,0,1,255,150,251,60,2,194,8,232,0,7,0,0,1,17,33,17,33,17,51,17,1,238,253,168,2,88,212,251,60,6,2,1,168,6,2,242,84,0,0,1,1,238,251,60,5,26,8,232,0,7,0,0,1,17,51,17,33,17,33,17,1,238,212,2,88,253,168,251,60,13,172,249,254,254,88,249,254,0,0,1,255,150,251,60,5,26,8,232,0,19,0,0,1,17,33,53,33,53,33,53,33,17,51,17,33,21,33,21,33,21,33,17,1,238,253,168,2,88,253,168,2,88,212,2,88,253,168,2,88,253,168,251,60,5,152,212,212,212,5,152,250,104,212,212,212,250,104,0,0,1,255,150,251,60,2,194,8,232,0,11,0,0,1,17,33,53,33,53,33,53,33,17,51,17,1,238,253,168,2,88,253,168,2,88,212,251,60,5,152,212,212,212,5,152,242,84,0,1,1,238,251,60,5,26,8,232,0,11,0,0,1,17,51,17,33,21,33,21,33,21,33,17,1,238,212,2,88,253,168,2,88,253,168,251,60,13,172,250,104,212,212,212,250,104,0,1,0,0,254,32,4,176,255,73,0,3,0,0,17,17,33,17,4,176,254,32,1,41,254,215,0,1,0,0,254,32,4,176,0,115,0,3,0,0,17,17,33,17,4,176,254,32,2,83,253,173,0,1,0,0,254,32,4,176,1,156,0,3,0,0,17,17,33,17,4,176,254,32,3,124,252,132,0,1,0,0,254,32,4,176,2,198,0,3,0,0,17,17,33,17,4,176,254,32,4,166,251,90,0,1,0,0,254,32,4,176,3,239,0,3,0,0,17,17,33,17,4,176,254,32,5,207,250,49,0,1,0,0,254,32,4,176,5,25,0,3,0,0,17,17,33,17,4,176,254,32,6,249,249,7,0,1,0,0,254,32,4,176,6,66,0,3,0,0,17,17,33,17,4,176,254,32,8,34,247,222,0,1,0,0,254,32,4,176,7,108,0,3,0,0,17,17,33,17,4,176,254,32,9,76,246,180,0,1,0,0,2,18,4,176,7,108,0,3,0,0,17,17,33,17,4,176,2,18,5,90,250,166,0,1,0,0,6,66,4,176,7,108,0,3,0,0,17,17,33,17,4,176,6,66,1,42,254,214,0,1,0,0,254,32,0,150,7,108,0,3,0,0,17,17,51,17,150,254,32,9,76,246,180,0,0,1,0,0,254,32,1,44,7,108,0,3,0,0,17,17,33,17,1,44,254,32,9,76,246,180,0,1,0,0,254,32,1,194,7,108,0,3,0,0,17,17,33,17,1,194,254,32,9,76,246,180,0,1,0,0,254,32,2,88,7,108,0,3,0,0,17,17,33,17,2,88,254,32,9,76,246,180,0,1,0,0,254,32,2,238,7,108,0,3,0,0,17,17,33,17,2,238,254,32,9,76,246,180,0,1,0,0,254,32,3,132,7,108,0,3,0,0,17,17,33,17,3,132,254,32,9,76,246,180,0,1,0,0,254,32,4,26,7,108,0,3,0,0,17,17,33,17,4,26,254,32,9,76,246,180,0,1,2,88,254,32,4,176,7,108,0,3,0,0,1,17,33,17,2,88,2,88,254,32,9,76,246,180,0,1,4,26,254,32,4,176,7,108,0,3,0,0,1,17,51,17,4,26,150,254,32,9,76,246,180,0,0,1,0,0,254,32,2,88,2,198,0,3,0,0,17,17,33,17,2,88,254,32,4,166,251,90,0,1,2,88,254,32,4,176,2,18,0,3,0,0,1,17,33,17,2,88,2,88,254,32,3,242,252,14,0,1,0,0,2,18,2,88,7,108,0,3,0,0,17,17,33,17,2,88,2,18,5,90,250,166,0,1,0,0,254,32,4,176,7,108,0,5,0,0,17,17,33,17,33,17,2,88,2,88,254,32,9,76,251,90,251,90,0,2,0,0,254,32,4,176,7,108,0,3,0,7,0,0,17,17,33,25,2,33,17,2,88,2,88,2,18,5,90,250,166,252,14,3,242,252,14,0,0,1,0,0,254,32,4,176,7,108,0,5,0,0,17,17,33,17,33,17,4,176,253,168,254,32,9,76,250,166,252,14,0,1,0,0,254,32,4,176,7,108,0,5,0,0,1,17,33,17,33,17,2,88,253,168,4,176,254,32,3,242,5,90,246,180,0,1,2,88,2,18,4,176,7,108,0,3,0,0,1,17,33,17,2,88,2,88,2,18,5,90,250,166,0,1,0,0,254,32,4,176,7,108,0,7,0,0,17,17,33,17,33,17,33,17,2,88,2,88,253,168,254,32,4,166,4,166,250,166,252,14,0,1,0,0,254,32,4,176,7,108,0,5,0,0,17,17,33,17,33,17,2,88,2,88,254,32,4,166,4,166,246,180,0,9,0,0,254,32,4,176,7,108,0,3,0,7,0,11,0,14,0,18,0,22,0,26,0,30,0,34,0,0,17,53,1,21,1,1,21,1,33,1,21,1,33,55,21,33,39,1,21,1,53,1,21,1,53,1,51,1,53,1,51,1,53,1,51,4,176,252,204,3,52,252,244,1,104,1,164,254,132,1,104,20,251,100,20,4,176,251,80,4,176,251,80,1,104,40,254,112,2,248,40,252,224,4,136,40,1,44,40,4,176,40,248,68,3,52,40,252,244,1,164,40,254,132,20,20,20,4,176,40,252,224,40,4,176,40,1,144,40,1,104,252,224,40,2,248,251,80,40,4,136,0,0,18,0,0,254,32,4,176,7,108,0,3,0,7,0,11,0,15,0,19,0,23,0,26,0,30,0,34,0,38,0,42,0,46,0,50,0,54,0,58,0,62,0,66,0,70,0,0,17,53,1,21,1,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,55,21,7,51,55,21,33,39,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,37,53,55,51,3,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,4,176,252,4,3,252,252,44,160,3,52,252,244,160,2,108,253,188,160,1,164,254,132,160,220,180,160,20,251,100,20,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,160,40,200,1,104,40,254,112,2,48,40,253,168,2,248,40,252,224,3,192,40,252,24,4,136,40,1,244,40,4,176,40,247,124,3,252,40,252,44,3,52,40,252,244,2,108,40,253,188,1,164,40,254,132,220,40,180,20,20,20,4,176,40,252,24,40,4,176,40,252,24,40,4,176,40,252,24,40,4,176,40,252,24,40,4,176,40,200,40,160,254,112,40,1,104,253,168,40,2,48,252,224,40,2,248,252,24,40,3,192,251,80,40,4,136,0,0,36,0,0,254,32,4,176,7,108,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,35,0,39,0,43,0,47,0,50,0,54,0,58,0,62,0,66,0,70,0,74,0,78,0,82,0,86,0,90,0,94,0,98,0,102,0,106,0,110,0,114,0,118,0,122,0,126,0,130,0,134,0,138,0,142,0,0,17,53,1,21,1,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,1,21,1,51,55,21,7,51,55,21,7,51,55,21,33,39,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,1,53,1,21,37,53,55,51,7,53,55,51,3,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,1,53,1,51,4,176,251,160,4,96,251,200,60,3,252,252,44,60,3,152,252,144,60,3,52,252,244,60,2,208,253,88,60,2,108,253,188,60,2,8,254,32,60,1,164,254,132,60,1,64,254,232,60,220,180,60,120,80,60,20,251,100,20,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,4,176,251,80,60,40,100,160,40,200,1,4,40,254,212,1,104,40,254,112,1,204,40,254,12,2,48,40,253,168,2,148,40,253,68,2,248,40,252,224,3,92,40,252,124,3,192,40,252,24,4,36,40,251,180,4,136,40,2,88,40,4,176,40,247,24,4,96,40,251,200,3,252,40,252,44,3,152,40,252,144,3,52,40,252,244,2,208,40,253,88,2,108,40,253,188,2,8,40,254,32,1,164,40,254,132,1,64,40,254,232,220,40,180,120,40,80,20,20,20,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,251,180,40,4,176,40,100,40,60,200,40,160,254,212,40,1,4,254,112,40,1,104,254,12,40,1,204,253,168,40,2,48,253,68,40,2,148,252,224,40,2,248,252,124,40,3,92,252,24,40,3,192,251,180,40,4,36,251,80,40,4,136,0,0,3,0,0,0,8,4,176,4,248,0,20,0,56,0,68,0,30,64,20,24,28,25,46,45,0,20,50,39,57,58,64,63,9,14,60,21,105,10,60,0,47,51,43,23,57,48,49,1,46,2,39,46,3,39,55,30,3,23,30,3,23,1,34,38,39,55,22,22,51,50,54,53,52,46,2,53,52,54,51,50,22,21,20,6,7,23,62,2,51,50,22,21,20,6,6,19,39,18,33,50,22,23,7,38,38,35,34,3,252,16,74,155,137,135,186,122,74,23,180,33,76,99,134,90,120,164,108,71,27,252,236,147,192,73,86,53,63,30,29,36,58,77,58,105,94,84,102,38,7,35,21,43,68,58,95,114,116,209,137,180,138,1,2,89,147,52,104,38,95,47,151,1,190,86,111,83,44,43,84,100,135,95,40,86,109,69,49,27,36,70,91,129,95,254,14,76,69,138,41,37,34,34,44,58,58,81,65,95,104,102,84,52,90,20,14,55,91,55,113,94,123,185,102,3,55,68,1,117,66,66,144,44,42,0,5,0,0,0,110,4,176,5,30,0,15,0,30,0,42,0,58,0,70,0,30,64,18,16,21,58,30,36,64,6,42,8,50,106,0,42,105,8,0,105,8,0,47,43,43,43,17,23,57,48,49,37,34,36,2,53,52,18,36,51,50,4,18,21,20,2,4,39,34,38,53,52,51,58,2,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,19,50,54,54,53,52,38,38,35,34,6,6,21,20,22,22,1,34,38,53,52,54,51,50,22,21,20,6,2,88,181,254,242,149,149,1,14,181,181,1,14,149,149,254,242,186,139,169,66,67,181,186,72,35,31,181,254,158,59,72,72,59,59,72,72,151,141,209,116,116,209,141,140,210,116,116,210,1,94,59,72,72,59,59,72,72,110,149,1,14,181,181,1,14,149,149,254,242,181,181,254,242,149,219,136,112,66,29,37,112,136,1,174,72,59,59,72,72,59,59,72,253,253,116,210,140,141,209,116,116,209,141,140,210,116,2,3,72,59,59,72,72,59,59,72,0,0,4,0,0,0,110,4,176,5,30,0,15,0,30,0,42,0,54,0,20,64,11,16,21,30,42,48,36,6,8,0,105,8,0,47,43,23,57,48,49,37,34,36,2,53,52,18,36,51,50,4,18,21,20,2,4,39,50,54,53,52,38,35,42,2,35,34,21,20,22,3,50,54,53,52,38,35,34,6,21,20,22,33,50,54,53,52,38,35,34,6,21,20,22,2,88,181,254,242,149,149,1,14,181,181,1,14,149,149,254,242,186,149,181,31,35,72,186,181,67,66,169,66,59,72,72,59,59,72,72,1,223,59,72,72,59,59,72,72,110,149,1,14,181,181,1,14,149,149,254,242,181,181,254,242,149,219,136,112,37,29,66,112,136,1,174,72,59,59,72,72,59,59,72,72,59,59,72,72,59,59,72,0,10,0,31,0,139,4,148,5,0,0,11,0,15,0,19,0,23,0,35,0,39,0,43,0,47,0,51,0,55,0,54,64,39,12,40,43,13,15,41,14,42,44,23,22,45,52,36,53,39,37,55,54,38,20,49,19,0,24,105,19,0,106,49,19,105,6,30,105,49,6,106,49,0,47,43,43,43,43,43,17,18,23,57,48,49,1,34,38,53,52,54,51,50,22,21,20,6,5,39,55,23,19,17,51,17,1,39,33,21,5,50,54,53,52,38,35,34,6,21,20,22,3,39,55,23,1,39,55,23,3,53,33,21,1,17,51,17,23,39,55,23,2,88,160,195,195,160,161,194,194,253,249,87,198,86,102,122,253,137,1,1,23,1,34,93,112,112,93,93,112,112,155,197,86,197,2,11,199,86,199,157,1,26,253,137,122,186,86,199,86,1,99,195,160,161,194,194,161,160,195,92,86,197,86,254,191,1,23,254,234,1,252,122,122,143,112,93,93,112,112,93,93,112,1,111,197,87,197,253,72,199,86,199,1,43,122,122,1,94,1,26,254,230,128,86,199,86,0,4,0,136,0,0,4,40,5,160,0,15,0,19,0,23,0,35,0,35,64,19,22,0,24,105,0,8,19,18,18,8,23,8,114,8,30,106,8,3,114,0,43,43,43,17,57,47,57,18,57,43,57,48,49,1,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,1,53,33,21,5,17,51,17,3,50,54,53,52,38,35,34,6,21,20,22,2,88,147,207,110,110,207,147,147,208,109,109,208,253,203,3,73,253,245,200,100,117,127,127,117,117,127,127,2,8,110,211,149,143,201,106,106,201,143,149,211,110,254,174,190,190,182,2,68,253,188,2,198,146,134,125,135,135,125,134,146,0,5,0,36,255,236,4,146,5,130,0,11,0,23,0,27,0,36,0,45,0,49,64,30,24,25,6,18,106,6,32,33,27,40,42,26,7,38,36,36,0,38,37,106,34,38,2,114,0,12,106,0,9,114,0,43,43,43,50,43,18,57,47,18,23,57,43,57,57,48,49,5,34,2,53,52,54,51,50,22,21,20,2,39,50,54,53,52,38,35,34,6,21,20,22,1,39,1,23,3,53,52,54,55,39,39,51,17,1,53,33,21,39,39,6,6,35,1,214,206,228,228,206,206,228,228,206,103,111,111,103,103,111,111,1,64,133,1,138,154,112,44,49,57,36,180,253,188,2,68,226,55,46,78,39,20,1,6,238,229,251,251,229,238,254,250,190,162,148,139,151,151,139,148,162,2,85,134,1,158,90,254,117,136,34,84,61,48,217,253,188,1,144,180,180,29,47,40,36,0,0,2,0,89,0,60,4,87,5,0,0,18,0,22,0,18,64,9,12,0,15,21,4,19,6,105,19,0,47,43,23,57,48,49,37,34,38,53,16,0,55,22,0,17,20,6,35,34,38,53,35,20,6,23,17,51,17,1,54,105,116,1,19,246,242,1,3,110,101,87,97,212,105,124,174,162,148,134,1,8,1,168,148,150,254,88,254,250,134,148,106,95,95,106,102,3,232,252,24,0,0,6,0,49,0,60,4,127,5,0,0,11,0,27,0,32,0,36,0,41,0,57,0,28,64,19,35,30,39,18,52,0,40,29,49,21,25,45,42,12,14,33,6,105,33,0,47,43,23,57,48,49,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,39,23,21,35,20,6,3,53,55,51,21,3,17,51,17,3,53,51,23,21,19,34,38,53,35,53,55,7,52,54,51,50,22,21,20,6,2,88,169,206,206,169,170,205,205,254,22,104,127,129,106,100,120,129,232,93,128,42,92,211,114,134,114,211,92,64,106,128,93,232,129,120,100,107,128,127,2,58,181,149,172,208,208,172,149,181,254,74,130,106,112,135,138,114,118,35,83,104,127,1,31,52,150,202,254,153,3,232,252,24,1,103,202,150,52,254,225,127,104,83,35,118,114,138,135,112,106,130,0,1,0,69,0,60,4,107,4,236,0,20,0,14,181,10,7,0,106,14,7,0,47,51,43,57,48,49,37,38,2,2,53,52,54,51,50,22,23,51,54,54,51,50,22,21,20,2,2,2,88,160,239,132,146,120,101,142,16,12,16,142,101,120,146,132,239,60,90,1,9,1,57,160,168,204,160,131,131,160,204,168,160,254,198,254,247,0,0,1,0,109,0,40,4,67,5,20,0,3,0,10,179,2,0,106,2,0,47,43,48,49,37,9,2,2,92,254,17,1,239,1,231,40,2,118,2,118,253,138,0,1,0,126,0,0,4,102,5,140,0,7,0,21,64,10,4,2,2,0,6,2,114,0,8,114,0,43,43,18,57,47,57,48,49,33,3,51,19,51,1,51,1,1,68,198,206,119,18,1,195,206,253,242,2,89,254,91,4,216,250,116,0,3,0,0,0,8,4,176,4,248,0,20,0,56,0,68,0,29,64,19,54,50,53,32,33,0,1,28,39,57,68,62,63,13,66,21,105,11,66,0,47,51,43,23,57,48,49,19,39,62,3,55,62,3,55,23,14,3,7,14,2,1,34,38,38,53,52,54,51,50,22,22,23,55,38,38,53,52,54,51,50,22,21,20,14,2,21,20,22,51,50,54,55,23,6,6,1,38,35,34,6,7,39,54,54,51,32,19,180,180,27,71,108,164,120,90,134,99,76,33,180,23,74,122,186,135,137,155,74,2,80,140,210,116,115,94,59,67,43,21,35,7,38,102,84,95,104,58,77,58,36,29,30,63,53,86,73,192,254,87,69,151,47,95,38,104,52,148,88,1,2,138,1,190,60,95,129,91,70,36,27,49,69,109,86,40,95,135,100,84,43,44,83,111,253,244,102,185,123,94,113,55,91,55,14,20,90,52,84,102,104,95,65,81,58,58,44,34,34,37,41,138,69,76,3,55,251,42,44,144,66,66,254,139,0,4,0,108,255,13,4,48,5,159,0,26,0,41,0,53,0,57,0,42,64,28,33,48,106,27,42,106,27,54,38,11,45,56,36,33,8,6,0,22,106,6,0,105,6,17,106,6,3,114,0,43,43,43,43,18,23,57,43,43,48,49,5,34,36,2,17,16,33,32,17,20,20,21,35,52,52,53,16,33,32,17,16,18,51,50,55,21,6,3,34,38,53,52,54,51,50,22,23,51,17,35,6,6,39,50,54,53,52,38,35,34,6,21,20,22,23,17,51,17,2,198,211,254,246,125,2,0,1,196,172,254,232,254,168,206,228,125,72,79,152,133,147,147,135,77,111,22,74,74,18,111,25,80,86,78,74,82,90,83,241,172,243,175,1,115,1,39,3,73,253,222,90,170,109,107,168,88,1,126,253,97,254,164,254,199,25,180,25,1,135,247,224,237,233,121,111,254,35,111,121,190,121,111,172,157,134,146,134,147,170,2,89,253,167,0,0,3,0,56,255,236,4,200,5,160,0,15,0,35,0,43,0,45,64,25,22,23,32,36,32,36,32,16,39,40,8,106,7,40,3,114,16,29,106,16,9,114,0,8,114,0,43,43,43,43,50,43,50,18,57,57,47,47,17,57,57,48,49,33,1,38,38,53,52,54,51,23,34,6,21,20,22,23,1,5,34,38,53,52,54,55,23,6,6,21,20,22,51,50,18,17,51,16,0,19,52,38,35,39,50,22,21,3,194,253,252,130,114,213,195,4,91,101,77,67,2,146,253,6,183,223,199,181,110,138,150,125,103,198,216,192,254,182,14,85,77,4,181,199,2,54,143,227,106,191,207,184,112,104,73,140,77,253,18,20,199,165,161,206,27,122,27,137,98,85,105,1,58,1,32,254,137,254,101,4,118,65,69,184,166,152,0,4,0,36,0,0,4,136,5,140,0,6,0,10,0,14,0,18,0,27,64,14,9,17,18,106,0,7,13,6,17,2,114,7,8,114,0,43,43,50,50,17,57,43,57,48,49,1,34,38,53,52,54,51,3,17,51,17,51,17,51,17,1,55,33,21,2,0,227,249,253,235,102,200,170,200,254,24,20,2,124,2,128,197,185,188,210,250,116,5,6,250,250,5,140,250,116,4,206,190,190,0,0,2,0,69,255,36,4,107,6,32,0,54,0,67,0,41,64,23,31,30,65,51,106,3,4,59,24,106,65,59,38,10,17,106,38,10,105,38,44,106,38,0,47,43,43,43,18,57,57,43,57,57,43,57,57,48,49,1,20,6,7,21,22,22,21,20,6,33,34,38,39,55,22,22,51,50,54,53,52,38,39,37,38,38,53,52,54,23,53,46,2,53,52,54,33,50,23,7,38,38,35,34,6,21,20,22,23,5,30,2,5,20,22,22,51,50,54,53,52,38,35,34,6,4,107,147,162,107,102,240,254,246,120,171,71,24,105,161,72,150,136,40,44,254,158,157,147,187,208,115,129,51,248,1,20,146,134,22,81,124,59,157,141,45,49,1,70,110,142,70,252,182,88,152,96,150,136,164,140,168,150,2,162,140,129,2,28,43,119,107,171,155,14,16,192,16,16,63,69,48,47,13,110,49,143,146,134,136,1,23,39,73,99,77,174,156,20,184,8,6,61,69,46,40,18,120,40,86,125,105,75,83,32,92,100,118,80,94,0,3,0,26,0,15,4,150,5,125,0,11,0,36,0,48,0,36,64,22,18,24,106,12,30,106,12,22,21,18,4,6,0,37,106,6,0,105,6,43,106,6,0,47,43,43,43,18,23,57,43,43,48,49,37,32,0,17,16,0,33,32,0,17,16,0,3,34,38,53,52,54,51,50,22,23,7,38,35,34,6,21,20,22,51,50,54,55,23,6,6,7,50,18,53,16,2,35,34,2,17,20,18,2,88,254,238,254,212,1,44,1,18,1,18,1,44,254,212,222,175,191,186,172,89,127,27,123,44,84,76,84,103,97,44,87,41,24,52,113,107,193,211,211,193,193,211,211,15,1,100,1,68,1,82,1,116,254,140,254,174,254,188,254,156,1,109,172,160,155,173,63,57,113,73,82,76,88,94,14,12,156,18,12,211,1,20,250,1,9,1,35,254,221,254,247,250,254,236,0,0,5,0,26,0,15,4,150,5,125,0,11,0,15,0,19,0,31,0,49,0,39,64,23,43,13,16,12,12,32,17,18,33,41,13,7,20,6,26,106,0,20,106,6,0,105,6,0,47,43,43,43,17,23,57,17,51,17,51,48,49,37,32,0,17,16,0,33,32,0,17,16,0,1,17,51,17,51,39,55,23,5,50,18,53,16,2,35,34,2,17,20,18,19,53,51,50,54,53,52,38,35,35,53,51,50,22,21,20,6,35,2,88,254,238,254,212,1,44,1,18,1,18,1,44,254,212,253,242,160,209,114,154,147,254,208,193,211,211,193,193,211,211,87,154,44,48,48,44,174,174,116,126,126,116,15,1,100,1,68,1,82,1,116,254,140,254,174,254,188,254,156,1,125,2,122,253,134,212,27,239,227,1,20,250,1,9,1,35,254,221,254,247,250,254,236,1,175,130,45,40,41,44,130,107,98,107,118,0,4,0,26,0,15,4,150,5,125,0,11,0,15,0,27,0,45,0,33,64,19,39,13,12,28,29,37,13,5,6,0,16,106,6,0,105,6,22,106,6,0,47,43,43,43,18,23,57,17,51,48,49,37,32,0,17,16,0,33,32,0,17,16,0,1,17,51,17,23,50,18,53,16,2,35,34,2,17,20,18,19,53,51,50,54,53,52,38,35,35,53,51,50,22,21,20,6,35,2,88,254,238,254,212,1,44,1,18,1,18,1,44,254,212,253,242,160,92,193,211,211,193,193,211,211,87,144,44,48,48,44,164,174,116,126,126,116,15,1,100,1,68,1,82,1,116,254,140,254,174,254,188,254,156,1,125,2,122,253,134,227,1,20,250,1,9,1,35,254,221,254,247,250,254,236,1,135,130,55,50,50,55,130,118,107,117,128,0,6,0,29,3,6,4,119,5,140,0,3,0,7,0,15,0,19,0,27,0,31,0,57,64,30,13,22,22,5,4,106,30,11,11,24,24,17,17,1,1,15,20,25,9,4,5,28,28,16,16,5,0,105,5,2,0,63,43,50,17,51,17,18,23,57,50,17,51,17,51,17,51,17,51,43,50,17,51,48,49,19,17,51,17,1,53,33,21,1,55,51,19,51,21,35,3,5,17,51,17,55,3,35,53,51,19,51,23,23,17,51,17,192,151,254,198,1,224,1,62,16,6,85,80,31,79,254,145,146,103,89,31,90,85,4,10,142,146,3,6,2,134,253,122,2,2,132,132,254,206,161,1,21,172,254,246,208,2,134,253,122,208,1,10,172,254,235,161,208,2,134,253,122,0,4,0,52,255,236,4,142,5,159,0,3,0,15,0,27,0,51,0,46,64,30,28,47,106,34,28,105,0,1,3,2,4,4,34,41,106,34,3,114,10,22,106,4,10,105,4,16,106,4,9,114,0,43,43,43,43,43,43,18,23,57,43,43,48,49,19,39,1,23,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,1,34,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,51,50,55,23,6,186,92,3,162,92,254,250,142,172,172,142,141,171,171,141,57,69,69,57,58,70,70,254,104,160,176,182,166,93,132,28,123,21,67,40,76,84,89,81,83,89,24,90,1,50,136,2,152,130,252,28,177,145,147,177,177,147,145,177,168,85,69,71,85,85,71,69,85,2,155,165,151,147,161,63,57,113,35,38,77,71,74,82,36,156,40,0,2,1,2,3,2,3,174,5,160,0,11,0,23,0,21,64,12,0,12,106,6,0,105,6,18,106,6,3,114,0,43,43,43,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,2,88,154,188,188,154,155,187,187,155,76,91,91,76,76,91,91,3,2,184,151,152,183,183,152,151,184,150,102,83,83,102,102,83,83,102,0,0,1,1,206,3,12,3,36,5,140,0,3,0,12,181,1,0,106,1,2,114,0,43,43,48,49,1,19,33,3,1,206,80,1,6,190,3,12,2,128,253,128,0,2,0,242,3,12,3,216,5,140,0,3,0,7,0,16,183,7,5,0,105,2,5,2,114,0,43,50,43,50,48,49,1,19,33,3,33,19,33,3,2,130,80,1,6,190,253,216,80,1,6,190,3,12,2,128,253,128,2,128,253,128,0,1,1,244,254,202,2,188,6,194,0,3,0,12,181,1,0,106,1,149,114,0,43,43,48,49,1,17,51,17,1,244,200,254,202,7,248,248,8,0,0,2,1,244,254,202,2,188,6,194,0,3,0,7,0,21,64,12,0,5,105,1,0,106,1,4,105,1,149,114,0,43,43,43,43,48,49,1,17,51,17,3,17,51,17,1,244,200,200,200,3,102,3,92,252,164,251,100,3,92,252,164,0,2,0,220,1,16,3,212,5,160,0,3,0,9,0,21,64,11,5,4,106,5,5,1,0,106,1,3,114,0,43,43,57,47,43,48,49,1,3,51,3,1,53,33,33,21,33,1,255,10,192,10,254,49,1,126,1,122,254,134,1,16,4,144,251,112,2,180,168,168,0,1,0,0,0,0,4,40,5,160,0,28,0,29,64,17,15,14,106,15,0,7,21,106,7,3,114,0,28,106,0,9,114,0,43,43,43,43,18,57,43,48,49,33,34,36,2,53,16,18,51,50,22,21,20,2,4,33,53,32,0,17,52,38,35,34,2,21,20,22,22,51,3,192,212,254,195,175,237,217,169,185,250,254,36,254,174,1,151,1,191,75,69,116,128,130,236,158,187,1,81,226,1,73,1,105,209,191,232,254,186,172,184,1,30,1,4,103,113,254,248,242,170,255,141,0,0,5,0,220,1,16,3,212,5,160,0,5,0,9,0,15,0,19,0,23,0,55,64,29,3,0,1,106,4,0,14,11,10,106,13,11,18,23,21,0,19,8,11,0,11,0,11,21,6,105,21,3,114,0,43,43,57,57,47,47,17,57,57,17,18,57,57,17,51,43,50,17,51,43,50,48,49,19,53,33,33,21,33,3,19,51,19,1,53,33,33,21,33,39,17,51,17,3,3,51,3,220,1,126,1,122,254,134,101,10,172,10,254,39,1,126,1,122,254,134,91,172,172,10,192,10,4,0,158,158,253,16,1,92,254,164,1,22,158,158,110,1,188,254,68,1,166,1,102,254,154,0,0,6,0,58,0,0,4,132,5,140,0,11,0,15,0,19,0,31,0,39,0,43,0,57,64,34,41,36,36,37,33,43,17,43,32,32,17,16,106,17,2,114,6,26,106,0,6,105,0,20,106,14,0,105,15,14,106,15,8,114,0,43,43,43,43,43,43,43,43,50,17,51,17,18,57,57,51,17,51,48,49,37,34,38,53,52,54,51,50,22,21,20,6,5,53,33,21,1,17,51,17,1,50,54,53,52,38,35,34,6,21,20,22,1,3,35,53,51,19,51,21,35,17,51,17,3,86,138,166,166,138,137,165,165,254,71,2,94,251,182,172,2,112,53,63,63,53,54,64,64,254,102,140,92,132,140,50,30,172,220,171,141,143,171,171,143,141,171,220,138,138,3,72,2,68,253,188,254,60,80,64,66,80,80,66,64,80,1,196,1,124,200,254,132,200,2,68,253,188,0,0,4,0,76,255,236,4,100,4,156,0,30,0,34,0,38,0,42,0,50,64,31,35,36,106,12,13,42,33,41,40,34,6,6,31,27,32,3,35,35,0,6,18,106,0,6,105,0,24,106,0,9,114,0,43,43,43,43,18,57,47,23,57,18,23,57,51,43,48,49,5,34,0,17,16,0,51,50,0,17,20,6,7,39,54,53,52,38,35,34,2,21,20,22,51,50,54,55,51,6,4,37,3,19,55,3,53,33,21,37,17,23,19,2,98,254,254,232,1,24,254,245,1,13,2,2,159,3,185,169,173,191,191,173,125,179,38,151,45,254,254,254,97,240,12,228,206,3,173,254,207,251,12,20,1,43,1,15,1,44,1,74,254,203,254,231,39,62,17,16,36,66,227,249,254,242,246,217,239,139,126,181,198,117,1,71,1,191,237,253,132,154,154,66,2,58,237,254,179,0,0,1,0,80,0,110,4,96,5,30,0,5,0,0,37,1,17,1,1,17,2,88,253,248,2,8,2,8,110,1,44,2,88,1,44,254,212,253,168,0,0,1,0,75,1,139,4,101,4,1,0,15,0,0,1,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,2,88,158,236,131,131,236,158,158,236,131,131,236,1,139,78,142,95,95,142,78,78,142,95,95,142,78,0,0,1,0,0,0,110,4,176,5,30,0,15,0,0,37,34,36,2,53,52,18,36,51,50,4,18,21,20,2,4,2,88,181,254,242,149,149,1,14,181,181,1,14,149,149,254,242,110,149,1,14,181,181,1,14,149,149,254,242,181,181,254,242,149,0,1,0,0,0,110,4,176,5,30,0,3,0,0,53,17,33,17,4,176,110,4,176,251,80,0,0,1,0,212,1,66,3,220,4,74,0,3,0,0,9,3,2,88,254,124,1,132,1,132,1,66,1,132,1,132,254,124,0,1,1,6,1,210,3,170,4,16,0,2,0,0,1,1,33,2,88,254,174,2,164,1,210,2,62,0,0,1,1,10,1,116,3,72,4,24,0,2,0,0,9,2,3,72,253,194,2,62,1,116,1,82,1,82,0,1,1,72,1,0,3,105,4,140,0,3,0,0,9,3,2,88,254,240,1,16,1,17,1,0,1,198,1,198,254,58,0,1,1,104,1,116,3,166,4,24,0,2,0,0,1,17,1,1,104,2,62,1,116,2,164,254,174,0,0,1,1,6,1,124,3,170,3,186,0,2,0,0,9,2,1,6,1,82,1,82,1,124,2,62,253,194,0,1,0,0,0,168,4,176,5,30,0,4,0,0,55,3,1,1,3,230,230,2,88,2,88,230,168,2,194,1,180,254,76,253,62,0,0,1,1,168,2,22,3,8,3,118,0,3,0,0,1,39,55,23,2,88,176,176,176,2,22,176,176,176,0,1,1,159,1,146,3,17,3,251,0,3,0,0,1,3,19,19,2,88,185,185,185,1,146,1,52,1,53,254,203,0,0,1,1,29,0,185,3,147,4,211,0,15,0,0,37,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,2,88,95,142,78,78,142,95,95,142,78,78,142,185,131,236,158,158,236,131,131,236,158,158,236,131,0,1,1,119,1,229,3,57,3,167,0,3,0,0,1,17,33,17,1,119,1,194,1,229,1,194,254,62,0,1,0,75,0,185,4,101,2,198,0,8,0,0,37,34,38,38,53,33,20,6,6,2,88,158,236,131,4,26,131,236,185,131,236,158,158,236,131,0,0,1,0,0,0,190,4,176,4,206,0,5,0,0,37,1,1,33,1,1,1,44,254,212,1,44,2,88,1,44,254,212,190,2,8,2,8,253,248,253,248,0,0,3,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,0,19,17,33,17,1,33,17,33,19,17,33,17,125,3,182,252,24,4,26,251,230,150,2,238,2,198,1,229,254,27,2,13,251,230,3,132,253,18,2,238,0,3,0,75,0,185,4,101,4,211,0,2,0,6,0,10,0,0,19,33,17,5,17,33,17,37,33,17,33,111,3,211,252,9,4,26,252,124,2,238,253,18,4,185,252,36,36,4,26,251,230,150,2,238,0,1,0,75,2,198,4,101,4,211,0,8,0,0,19,52,54,54,51,50,22,22,21,75,131,236,158,158,236,131,2,198,158,236,131,131,236,158,0,3,0,75,0,185,4,101,4,211,0,3,0,7,0,11,0,0,19,33,17,33,7,17,33,17,37,33,17,33,125,3,182,252,74,50,4,26,252,124,2,238,253,18,2,198,254,27,40,4,26,251,230,150,2,238,0,3,0,75,0,185,4,101,4,211,0,2,0,6,0,10,0,0,37,33,17,37,17,33,17,5,33,17,33,4,65,252,45,3,247,251,230,3,132,253,18,2,238,211,3,220,36,251,230,4,26,150,253,18,0,2,0,80,0,110,4,96,5,30,0,5,0,17,0,0,37,1,17,1,1,17,5,35,1,7,17,23,1,51,1,55,17,39,2,88,253,248,2,8,2,8,254,62,140,1,254,70,70,254,2,140,254,2,70,70,110,1,44,2,88,1,44,254,212,253,168,168,1,40,122,2,76,122,1,40,254,216,122,253,180,122,0,2,0,75,1,139,4,101,4,1,0,15,0,27,0,0,1,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,53,52,38,35,34,6,21,20,22,2,88,158,236,131,131,236,158,158,236,131,131,236,158,170,205,205,170,169,206,206,1,139,78,142,95,95,142,78,78,142,95,95,142,78,150,91,74,74,91,91,74,74,91,0,2,0,0,0,110,4,176,5,30,0,3,0,7,0,0,53,17,33,17,37,33,17,33,4,176,251,230,3,132,252,124,110,4,176,251,80,150,3,132,0,2,0,212,1,66,3,220,4,74,0,3,0,11,0,0,9,3,5,35,1,21,1,51,1,53,2,88,254,124,1,132,1,132,254,181,114,1,34,254,222,114,254,222,1,66,1,132,1,132,254,124,233,1,34,114,1,34,254,222,114,0,0,2,1,72,1,0,3,105,4,140,0,3,0,11,0,0,9,3,7,35,19,21,3,51,3,53,2,88,254,240,1,16,1,17,231,84,182,182,84,182,1,0,1,198,1,198,254,58,232,1,45,138,1,45,254,211,138,0,0,2,0,0,0,168,4,176,5,30,0,4,0,9,0,0,55,3,1,1,3,37,33,19,1,1,230,230,2,88,2,88,230,253,137,2,10,163,254,88,254,88,168,2,194,1,180,254,76,253,62,150,1,243,1,52,254,204,0,2,1,159,1,146,3,17,3,251,0,3,0,7,0,0,1,3,19,19,7,55,39,7,2,88,185,185,185,185,69,69,68,1,146,1,52,1,53,254,203,114,114,114,114,0,0,2,1,29,0,185,3,147,4,211,0,15,0,27,0,0,37,34,38,38,53,52,54,54,51,50,22,22,21,20,6,6,39,50,54,53,52,38,35,34,6,21,20,22,2,88,95,142,78,78,142,95,95,142,78,78,142,95,74,91,91,74,74,91,91,185,131,236,158,158,236,131,131,236,158,158,236,131,150,206,169,170,205,205,170,169,206,0,0,2,1,119,1,229,3,57,3,167,0,3,0,7,0,0,1,17,33,17,37,51,53,35,1,119,1,194,254,212,150,150,1,229,1,194,254,62,150,150,0,6,252,10,255,236,3,226,5,160,0,15,0,36,0,52,0,73,0,81,0,89,0,77,64,41,85,8,77,77,78,45,106,60,23,59,22,69,32,82,74,23,22,16,32,74,32,74,16,86,44,7,78,3,114,0,37,8,114,66,16,29,106,53,16,9,114,0,43,50,43,50,43,50,43,50,50,50,17,57,57,47,47,18,57,57,17,51,17,51,17,51,17,51,43,50,17,51,51,48,49,33,1,38,38,53,52,54,51,23,34,6,21,20,22,23,1,5,34,38,53,52,54,55,23,6,6,21,20,22,51,50,18,17,51,16,2,6,55,1,38,38,53,52,54,51,23,34,6,21,20,22,23,1,5,34,38,53,52,54,55,23,6,6,21,20,22,51,50,18,17,51,16,2,6,1,52,38,35,39,50,22,21,33,52,38,35,39,50,22,21,2,250,254,48,67,97,187,169,4,66,74,54,34,2,40,249,150,183,183,150,150,110,105,103,94,94,162,162,182,117,236,213,254,48,69,95,187,169,4,66,74,52,36,2,40,1,142,183,183,150,150,110,105,103,94,94,162,162,182,113,235,252,86,74,68,4,171,189,3,38,74,68,4,180,180,2,214,107,187,82,161,177,184,81,75,57,119,54,252,154,20,181,183,170,196,28,122,28,130,104,100,100,1,49,1,51,254,249,254,163,174,20,2,214,108,192,76,161,177,184,81,75,55,118,57,252,154,20,181,183,170,196,28,122,28,130,104,100,100,1,50,1,50,254,249,254,163,174,4,118,65,69,184,166,152,65,69,184,159,159,0,0,2,253,22,254,202,3,152,6,194,0,3,0,7,0,21,64,11,1,0,106,1,1,6,4,105,6,149,114,0,43,43,57,47,43,48,49,1,53,33,21,1,35,17,51,253,48,6,104,250,70,200,200,2,104,186,186,252,98,7,248,0,0,2,253,68,254,202,3,192,6,194,0,54,0,58,0,41,64,25,57,55,106,57,149,114,17,16,44,45,106,44,33,0,7,106,33,0,105,33,26,106,33,154,114,0,43,43,43,43,18,57,43,57,57,43,43,48,49,5,34,38,39,55,22,22,51,50,54,53,52,38,53,52,54,55,53,38,38,53,52,54,53,52,38,35,34,6,7,39,54,54,51,50,22,21,20,6,21,20,30,2,51,21,34,6,6,21,20,22,21,20,6,5,35,17,51,1,34,93,124,53,24,63,116,49,120,126,46,138,124,124,138,46,126,120,49,116,63,24,33,144,93,210,232,42,57,87,92,34,48,127,95,42,232,252,24,200,200,214,11,9,170,4,6,131,119,68,130,74,95,113,2,34,2,109,99,71,130,71,110,122,5,5,170,9,11,215,197,69,132,75,34,54,37,19,158,25,63,56,72,135,69,204,226,96,7,248,0,4,253,114,254,202,2,142,6,194,0,3,0,7,0,11,0,15,0,33,64,20,13,15,106,13,149,114,3,6,106,4,2,3,106,2,11,106,9,2,153,114,0,43,50,43,43,50,43,43,43,48,49,5,17,51,17,33,53,33,21,1,53,33,21,1,17,51,17,1,196,202,253,0,2,74,253,182,2,74,251,154,200,200,7,28,248,228,176,176,6,108,176,176,249,38,7,248,248,8,255,255,253,198,254,202,2,58,6,194,0,39,4,167,255,126,0,0,0,7,4,167,251,210,0,0,0,4,245,72,254,202,2,188,6,194,0,7,0,11,0,15,0,19,0,63,64,37,19,13,15,106,17,13,149,114,3,2,6,7,0,8,10,5,4,11,1,8,106,7,1,105,6,7,106,9,4,5,106,6,4,105,6,151,114,0,43,43,43,50,43,43,43,57,17,18,57,17,51,17,18,57,57,43,50,43,50,48,49,5,53,1,53,1,53,1,21,1,17,23,17,1,17,51,17,33,17,51,17,252,220,4,222,251,34,5,224,250,32,200,247,164,200,3,32,200,10,240,1,214,18,1,216,240,253,148,202,253,150,5,160,100,251,40,254,112,7,248,248,8,7,248,248,8,0,4,249,112,254,202,3,152,6,194,0,3,0,7,0,11,0,15,0,33,64,20,9,13,15,106,10,13,149,114,7,6,106,2,7,105,2,3,106,2,148,114,0,43,43,43,43,43,50,43,50,48,49,1,53,33,21,1,53,33,21,1,35,17,51,1,17,51,17,253,8,6,144,249,112,6,144,249,172,200,200,252,44,200,3,98,186,186,254,12,186,186,253,92,7,248,248,8,7,248,248,8,0,3,249,152,254,202,2,143,6,194,0,7,0,11,0,15,0,59,64,35,2,3,6,11,7,1,10,5,4,14,12,106,14,149,114,8,1,0,106,7,1,105,6,7,106,9,4,5,106,6,4,105,6,151,114,0,43,43,43,50,43,43,43,50,43,43,17,18,57,17,18,57,17,57,57,48,49,5,53,1,53,1,53,1,21,1,17,23,17,1,35,17,51,252,175,4,222,251,34,5,224,250,32,200,252,233,200,200,10,240,1,214,18,1,216,240,253,148,202,253,150,5,160,100,251,40,254,112,7,248,0,3,253,22,254,202,3,152,6,194,0,3,0,7,0,11,0,29,64,18,10,8,105,10,149,114,7,6,106,2,7,105,2,3,106,2,148,114,0,43,43,43,43,43,43,48,49,1,53,33,21,1,53,33,21,1,35,17,51,253,88,6,64,249,192,6,64,250,70,200,200,3,98,186,186,254,12,186,186,253,92,7,248,0,0,2,253,109,255,246,3,77,5,150,0,7,0,11,0,45,64,26,3,2,6,7,11,0,1,8,106,7,1,105,6,7,106,10,5,4,9,106,6,4,105,6,151,114,0,43,43,43,50,57,43,43,43,50,57,17,18,57,57,48,49,5,53,1,53,1,53,1,21,1,17,23,17,253,109,4,222,251,34,5,224,250,32,200,10,240,1,214,18,1,216,240,253,148,202,253,150,5,160,100,251,40,0,3,252,10,254,192,3,197,6,204,0,7,0,41,0,45,0,76,64,49,18,39,21,22,36,35,25,32,8,8,43,28,28,29,106,28,3,114,45,8,96,8,15,105,8,9,114,3,2,6,7,1,0,106,7,1,106,6,7,106,4,5,106,6,4,105,6,151,114,0,43,43,43,43,43,43,17,18,57,57,43,43,26,16,205,43,43,16,205,18,23,57,48,49,55,53,1,53,1,53,1,21,1,34,38,39,55,22,22,51,50,54,53,52,38,39,39,38,38,53,52,54,51,21,34,6,21,20,22,23,23,22,22,21,20,6,1,17,51,17,7,2,188,251,71,5,187,249,235,121,211,90,26,110,205,97,140,136,67,63,246,145,155,236,214,112,124,74,72,208,158,164,251,254,253,138,214,220,1,10,18,1,248,215,253,141,202,253,140,39,39,194,43,45,98,100,66,92,28,112,66,186,138,186,204,184,103,93,69,86,35,98,73,187,146,193,193,254,212,8,12,247,244,0,255,255,252,64,0,190,3,192,4,204,0,39,3,67,251,220,0,0,0,7,3,67,255,116,0,0,0,8,247,184,0,190,3,152,4,204,0,3,0,7,0,11,0,15,0,19,0,23,0,27,0,31,0,61,64,32,8,24,24,23,16,105,15,7,7,31,31,3,3,22,23,106,9,25,25,22,17,105,14,6,6,30,30,2,2,22,147,114,0,43,50,17,51,17,51,17,51,43,50,17,51,43,50,17,51,17,51,17,51,43,50,17,51,48,49,1,53,33,21,33,53,33,21,1,17,51,17,1,53,33,21,1,17,51,17,1,53,33,21,1,17,51,17,1,53,33,21,253,229,3,117,248,163,3,117,251,218,192,253,172,3,232,5,164,192,253,172,3,232,249,176,192,253,172,3,232,2,105,186,186,186,186,254,85,4,14,251,242,1,171,186,186,254,85,4,14,251,242,1,171,186,186,254,85,4,14,251,242,1,171,186,186,255,255,252,104,0,190,3,196,4,204,0,39,3,67,252,4,0,0,0,7,3,73,255,116,0,0,255,255,247,184,0,160,3,152,4,236,0,39,3,71,247,84,0,0,0,39,3,71,255,76,0,0,0,7,2,167,251,80,0,180,255,255,247,184,255,236,3,152,5,150,0,39,3,71,247,84,0,0,0,39,3,71,255,76,0,0,0,7,2,170,251,80,0,0,0,4,252,4,1,110,3,252,4,28,0,3,0,7,0,11,0,15,0,29,64,16,6,15,14,106,7,2,15,105,11,2,3,106,10,2,148,114,0,43,50,43,50,43,50,43,50,48,49,19,53,33,21,1,53,33,21,1,53,33,21,19,53,33,21,80,3,172,248,8,3,152,252,104,3,152,180,3,172,3,98,186,186,254,12,186,186,1,244,186,186,254,12,186,186,0,0,3,247,84,0,206,3,252,4,188,0,3,0,7,0,11,0,29,64,18,5,4,106,8,5,105,9,8,106,0,1,106,9,0,105,9,147,114,0,43,43,43,43,43,43,48,49,1,53,33,21,1,53,33,21,1,53,33,21,247,84,12,168,243,88,12,168,243,88,12,168,4,2,186,186,252,204,186,186,1,154,186,186,0,0,3,247,184,0,112,3,192,5,24,0,11,0,15,0,19,0,50,64,30,10,5,4,11,4,17,3,13,12,1,0,106,1,13,12,106,16,13,105,6,17,16,106,8,9,106,8,17,148,114,0,43,206,43,43,57,43,43,206,43,17,18,57,18,23,57,48,49,55,53,55,53,1,53,1,53,39,53,1,21,1,53,33,5,1,53,33,5,6,200,1,204,254,56,204,3,186,243,248,10,240,254,252,246,20,9,96,1,4,112,220,30,82,1,0,18,1,8,70,32,220,253,234,122,254,250,186,186,1,204,186,186,0,3,252,104,0,112,3,192,5,24,0,11,0,15,0,19,0,47,64,28,6,17,16,106,3,12,13,106,11,4,5,10,4,17,12,1,0,106,1,17,12,105,8,9,106,8,17,148,0,63,206,43,43,206,43,17,18,23,57,43,57,43,57,48,49,55,53,55,53,1,53,1,53,39,53,1,21,1,53,33,5,1,53,33,5,6,200,1,204,254,56,204,3,186,248,168,6,64,254,252,250,196,4,176,1,4,112,220,30,82,1,0,18,1,8,70,32,220,253,234,122,254,250,186,186,1,204,186,186,0,0,4,247,184,0,112,3,192,5,24,0,7,0,11,0,15,0,27,0,59,64,36,5,24,25,106,4,24,13,22,13,12,106,0,17,16,106,1,17,8,19,8,9,106,7,27,20,2,3,21,26,6,8,13,8,105,13,148,0,63,43,23,57,43,57,16,206,50,43,50,43,57,16,206,50,43,50,48,49,55,53,1,53,1,53,1,21,1,53,33,5,1,53,33,5,1,53,55,53,1,53,1,53,39,53,1,21,6,2,148,253,108,3,186,243,248,8,32,254,252,248,228,6,144,1,4,253,234,200,1,204,254,56,204,3,186,112,220,1,112,18,1,110,220,253,234,122,254,250,186,186,1,204,186,186,253,34,220,30,82,1,0,18,1,8,70,32,220,253,234,122,0,0,5,247,184,0,112,3,152,5,24,0,7,0,11,0,15,0,19,0,23,0,64,64,39,3,23,22,106,4,13,23,105,21,13,1,6,5,2,4,9,20,13,12,106,0,19,16,106,7,8,19,105,17,18,8,9,106,13,8,105,13,148,114,0,43,43,43,50,57,43,50,43,50,43,50,17,23,57,17,57,43,50,43,50,48,49,37,1,53,1,21,1,21,1,37,53,33,21,1,53,33,21,1,1,55,5,1,39,1,21,3,152,252,70,3,186,253,108,2,148,244,32,7,36,248,220,7,36,1,136,253,244,132,1,136,254,120,132,2,12,112,2,24,122,2,22,220,254,146,18,254,144,34,186,186,1,244,186,186,253,14,1,40,144,220,2,22,142,1,40,220,0,0,3,247,84,255,156,3,252,5,240,0,3,0,7,0,11,0,28,64,17,4,5,106,4,0,105,9,4,105,9,8,106,9,1,105,9,148,0,63,43,43,43,43,43,48,49,5,1,51,1,1,53,33,21,1,53,33,21,251,164,3,46,202,252,210,250,230,12,168,243,88,12,168,100,6,84,249,172,1,210,186,186,1,244,186,186,0,2,252,104,0,112,3,152,5,24,0,7,0,11,0,40,64,25,7,2,3,6,4,10,11,1,0,106,11,1,105,10,11,106,4,5,106,10,4,105,10,147,114,0,43,43,43,43,43,43,17,18,23,57,48,49,37,53,1,53,1,53,1,21,7,53,33,21,252,104,2,148,253,108,3,186,96,3,214,112,220,1,112,18,1,110,220,253,234,122,34,188,188,0,0,3,247,184,0,112,3,192,5,24,0,15,0,23,0,27,0,50,64,31,22,23,19,18,15,14,6,25,24,0,17,16,106,1,24,17,106,25,24,106,13,20,21,106,12,25,20,106,25,147,114,0,43,43,50,43,50,43,43,50,43,50,17,18,23,57,48,49,55,53,62,3,55,17,46,3,39,53,1,21,1,53,1,53,1,53,1,21,7,53,33,21,6,167,211,122,63,19,20,67,124,209,162,3,186,243,248,2,148,253,108,3,186,106,7,122,112,240,65,84,47,21,1,1,20,2,16,44,86,70,240,253,234,122,253,232,220,1,112,18,1,110,220,253,234,122,34,188,188,0,255,255,252,216,0,160,3,34,4,236,0,39,3,73,252,70,0,0,0,7,2,167,0,54,0,180,0,2,253,74,0,144,2,238,5,154,0,7,0,11,0,43,64,26,2,3,7,6,9,8,106,0,9,105,1,0,106,7,1,106,6,7,106,4,5,106,6,4,106,6,0,47,43,43,43,43,43,43,43,17,18,57,57,48,49,1,53,37,53,37,53,1,21,1,53,33,21,253,74,4,112,251,144,5,164,250,92,5,164,1,228,220,246,18,246,220,254,148,222,253,64,190,190,0,0,5,247,184,0,112,3,192,5,24,0,11,0,15,0,19,0,23,0,27,0,64,64,37,6,19,26,11,4,5,10,4,22,16,26,27,106,3,15,14,23,22,106,12,1,0,106,13,1,26,23,105,18,8,9,106,17,8,26,148,114,0,43,204,50,43,50,43,205,50,43,50,43,50,57,57,43,50,17,23,57,17,57,57,48,49,55,53,55,53,1,53,1,53,39,53,1,21,1,53,37,23,3,37,53,1,3,53,33,5,1,53,33,5,6,200,1,204,254,56,204,3,186,243,248,1,136,132,132,254,120,2,12,132,9,104,254,252,247,156,7,216,1,4,112,220,30,82,1,0,18,1,8,70,32,220,253,234,122,253,232,220,230,154,1,192,228,220,254,216,253,146,176,176,1,214,176,176,0,2,252,104,0,174,3,192,4,220,0,7,0,15,0,58,64,34,3,2,11,10,4,7,6,8,9,1,12,4,13,5,1,0,106,7,1,106,15,6,7,106,4,5,106,6,4,106,14,6,151,114,0,43,50,43,43,43,50,43,43,17,51,17,51,17,51,50,17,18,23,57,48,49,55,53,1,53,1,53,1,21,1,53,1,53,1,53,1,21,2,2,188,253,68,3,190,248,168,2,188,253,68,3,190,174,220,1,50,18,1,50,220,254,78,202,254,78,220,1,50,18,1,50,220,254,78,202,0,3,247,184,0,112,3,152,5,24,0,7,0,15,0,19,0,54,64,34,8,9,1,12,4,13,5,1,0,106,19,1,105,4,5,106,18,4,105,6,7,14,15,11,10,3,2,8,18,19,106,18,147,114,0,43,43,23,57,43,43,43,43,17,51,17,51,17,51,50,48,49,37,53,1,53,1,53,1,21,1,53,1,53,1,53,1,21,5,53,33,21,250,236,2,148,253,108,3,206,248,254,2,148,253,108,3,186,2,242,5,52,112,220,1,112,18,1,110,220,253,234,122,253,232,220,1,112,18,1,110,220,253,234,122,34,188,188,0,5,247,184,0,112,3,152,5,24,0,7,0,11,0,15,0,19,0,23,0,78,64,44,15,23,22,11,19,12,6,7,3,2,4,18,23,0,8,1,9,4,5,13,14,106,9,8,106,9,19,13,22,10,14,23,19,18,106,22,19,105,22,23,106,22,148,114,0,43,43,43,43,17,51,50,16,204,16,204,43,43,50,51,17,51,17,51,17,18,23,57,51,17,57,17,18,57,48,49,37,53,1,53,1,53,1,21,3,53,37,23,3,37,53,1,3,53,33,21,1,53,33,21,247,184,2,148,253,108,3,186,134,1,136,132,132,254,120,2,12,132,7,36,248,220,7,36,112,220,1,112,18,1,110,220,253,234,122,253,232,220,220,144,1,202,218,220,254,216,253,126,186,186,1,244,186,186,255,255,247,184,0,214,3,192,4,180,0,39,3,73,255,112,0,0,0,39,3,73,247,38,0,0,0,7,3,73,251,80,0,0,0,2,252,64,0,112,3,152,5,24,0,15,0,19,0,37,64,22,1,2,19,18,15,0,106,19,15,105,4,3,106,18,4,105,18,19,106,18,147,114,0,43,43,43,43,43,43,17,18,57,57,48,49,39,1,53,1,21,14,3,7,17,30,3,23,1,53,33,21,6,252,70,3,186,162,209,124,67,20,19,63,122,212,166,253,132,6,26,112,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,1,6,188,188,0,0,2,247,144,0,112,3,152,5,24,0,15,0,19,0,37,64,22,1,2,19,18,15,0,106,19,15,105,4,3,106,18,4,105,18,19,106,18,147,114,0,43,43,43,43,43,43,17,18,57,57,48,49,37,1,53,1,21,14,3,7,17,30,3,23,1,53,33,21,251,74,252,70,3,186,162,209,124,67,20,19,63,122,212,166,253,132,10,202,112,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,1,6,188,188,0,3,247,144,0,112,3,192,5,24,0,15,0,31,0,35,0,56,64,33,16,0,31,1,20,12,19,13,14,15,18,17,4,35,34,1,0,106,35,1,105,12,13,106,34,12,105,34,35,106,34,147,114,0,43,43,43,43,43,43,17,18,23,57,17,51,17,51,17,51,17,51,48,49,55,53,62,3,55,17,46,3,39,53,1,21,1,1,53,1,21,14,3,7,17,30,3,23,1,53,33,21,6,167,211,122,63,19,20,67,124,209,162,3,186,247,138,252,70,3,186,162,209,124,67,20,19,63,122,212,166,253,132,9,180,112,240,65,84,47,21,1,1,20,2,16,44,86,70,240,253,234,122,253,232,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,1,6,188,188,0,0,3,247,144,0,112,3,152,5,24,0,7,0,23,0,27,0,52,64,32,8,23,7,12,4,11,3,7,0,106,27,7,106,4,3,106,26,4,106,2,1,5,6,10,9,6,26,27,106,26,147,114,0,43,43,23,57,43,43,43,43,17,51,17,51,17,51,50,48,49,37,1,53,1,21,1,21,1,5,1,53,1,21,14,3,7,17,30,3,23,1,53,33,21,3,152,252,70,3,186,253,128,2,128,247,178,252,70,3,186,162,209,124,67,20,19,63,122,212,166,253,132,7,82,112,2,24,122,2,22,240,254,166,18,254,164,240,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,1,6,188,188,0,255,255,252,238,0,160,3,38,4,236,0,39,3,74,252,142,0,0,0,7,2,167,0,58,0,180,0,5,242,224,255,236,3,152,5,150,0,15,0,19,0,23,0,27,0,39,0,57,64,36,1,2,19,18,15,0,106,19,15,105,4,3,106,18,4,105,34,24,105,28,34,106,28,9,114,25,2,114,20,18,19,106,21,18,147,114,0,43,50,43,50,43,43,43,43,43,43,43,43,17,18,57,57,48,49,37,1,53,1,21,14,3,7,17,30,3,23,1,53,33,21,33,53,33,21,5,3,51,3,3,34,38,53,52,54,51,50,22,21,20,6,246,154,252,70,3,186,162,209,124,67,20,19,63,122,212,166,253,132,4,16,2,208,8,154,245,158,6,208,10,94,61,87,87,61,62,86,86,112,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,1,6,188,188,188,188,158,3,206,252,50,254,36,87,61,62,86,86,62,61,87,255,255,252,84,0,214,3,218,4,180,0,39,3,74,251,244,0,0,0,6,2,176,156,0,255,255,247,164,0,214,3,192,4,180,0,39,3,73,255,112,0,0,0,39,3,74,247,68,0,0,0,7,2,176,251,90,0,0,0,2,252,179,255,246,2,147,5,150,0,7,0,11,0,45,64,26,10,3,4,9,8,7,0,106,1,7,105,11,4,3,106,2,4,105,6,5,2,1,106,2,151,114,0,43,43,57,57,43,43,50,43,43,50,57,17,18,57,48,49,5,1,53,1,21,1,21,1,21,39,17,55,2,147,250,32,5,224,251,34,4,222,200,200,10,2,106,202,2,108,240,254,40,18,254,42,240,100,4,216,100,0,3,248,144,254,202,2,28,6,194,0,7,0,11,0,15,0,49,64,30,13,15,106,13,149,114,10,11,4,3,106,2,4,105,9,8,7,0,106,1,7,105,6,5,2,1,106,2,151,114,0,43,43,57,57,43,43,50,57,43,43,50,57,43,43,48,49,5,1,53,1,21,1,21,1,21,39,17,55,1,17,51,17,254,112,250,32,5,224,251,34,4,222,200,200,2,228,200,10,2,106,202,2,108,240,254,40,18,254,42,240,100,4,216,100,249,52,7,248,248,8,0,0,4,243,224,254,202,1,88,6,194,0,7,0,11,0,15,0,19,0,53,64,32,16,13,15,106,17,13,149,114,10,11,4,3,106,2,4,105,9,8,7,0,106,1,7,105,6,5,2,1,106,2,151,114,0,43,43,57,57,43,43,50,57,43,43,50,57,43,50,43,50,48,49,5,1,53,1,21,1,21,1,21,39,17,55,1,17,51,17,33,17,51,17,249,192,250,32,5,224,251,34,4,222,200,200,2,232,200,3,32,200,10,2,106,202,2,108,240,254,40,18,254,42,240,100,4,216,100,249,52,7,248,248,8,7,248,248,8,255,255,247,164,254,202,3,192,6,194,0,39,3,73,255,112,0,0,0,39,3,74,247,68,0,0,0,7,4,167,251,90,0,0,0,3,252,24,254,192,3,206,6,204,0,7,0,41,0,45,0,74,64,49,25,26,32,19,35,36,16,15,39,12,10,8,43,22,22,29,105,22,3,114,42,8,96,8,9,106,8,9,114,4,3,106,2,4,106,7,0,106,1,7,105,6,5,2,1,106,2,151,114,0,43,43,57,57,43,43,43,43,43,43,26,16,204,43,43,16,205,18,23,57,48,49,5,1,53,1,21,1,21,1,7,55,50,54,53,52,38,39,39,38,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,23,23,22,22,21,20,6,1,17,51,17,1,242,250,38,3,210,253,38,4,226,30,16,140,136,67,63,246,145,155,236,214,147,218,50,168,42,129,75,113,124,74,72,208,158,164,251,254,253,138,42,2,138,202,1,144,216,254,236,18,253,246,198,194,94,94,66,92,28,112,66,186,138,186,204,115,104,127,73,79,97,89,69,87,34,98,74,186,146,193,193,254,212,8,12,247,244,0,4,247,104,254,192,3,192,6,204,0,7,0,35,0,39,0,47,0,104,64,67,43,42,46,47,41,40,106,47,41,106,7,0,106,1,7,105,5,6,2,1,1,46,47,106,44,45,106,46,44,105,4,3,106,2,4,106,2,46,151,114,12,33,15,16,30,29,19,26,8,8,37,22,22,23,106,22,3,114,36,8,96,8,9,106,8,9,114,0,43,43,26,16,204,43,43,16,205,18,23,57,43,50,43,43,43,43,43,50,17,18,57,57,43,43,43,43,17,18,57,57,48,49,5,1,53,1,21,1,21,1,7,55,50,54,53,52,38,39,39,38,38,53,52,54,51,21,34,6,21,20,22,23,23,22,22,21,20,6,1,17,51,17,1,53,1,53,1,53,1,21,253,164,249,196,3,210,253,38,5,68,60,16,140,136,67,63,246,145,155,236,214,112,124,74,72,208,158,164,251,254,253,138,2,20,2,188,251,31,5,227,63,2,159,202,1,144,216,254,236,18,253,215,177,184,103,105,66,92,28,112,66,186,138,186,204,184,103,93,69,87,34,98,74,186,146,198,198,254,222,8,12,247,244,2,22,220,1,10,18,2,2,215,253,131,202,0,255,255,252,84,0,190,3,152,4,204,0,39,3,74,251,244,0,0,0,7,3,67,255,76,0,0,255,255,247,164,0,190,3,192,4,204,0,39,3,73,255,112,0,0,0,39,3,74,247,68,0,0,0,7,3,67,251,90,0,0,0,2,253,74,0,144,2,238,5,154,0,7,0,11,0,43,64,26,6,5,1,2,4,3,106,2,4,106,10,11,106,0,10,105,7,0,106,1,7,106,2,1,106,2,0,47,43,43,43,43,43,43,43,17,18,57,57,48,49,1,1,53,1,21,5,21,5,1,53,33,21,2,238,250,92,5,164,251,144,4,112,250,92,5,164,1,228,1,108,222,1,108,220,246,18,246,253,208,190,190,0,3,247,144,0,92,3,152,5,44,0,11,0,15,0,19,0,58,64,34,2,1,7,8,4,19,9,15,14,6,19,18,11,0,106,11,15,15,14,106,18,15,105,4,3,106,4,18,18,19,106,18,148,114,0,43,43,16,206,43,43,43,16,206,43,17,18,57,17,18,57,18,23,57,48,49,37,1,53,1,21,7,21,1,21,1,21,23,37,37,33,21,1,37,33,21,251,74,252,70,3,186,204,254,56,1,204,200,254,98,254,252,10,240,245,156,1,4,9,96,92,2,44,122,2,42,240,32,70,254,248,18,255,0,82,30,54,186,186,1,204,186,186,0,0,4,242,224,0,112,3,192,5,24,0,11,0,23,0,27,0,31,0,72,64,43,0,12,1,23,8,16,9,15,6,18,29,13,20,19,14,5,4,10,11,8,25,29,28,106,3,21,24,25,106,23,12,106,23,29,24,105,16,15,106,16,29,148,114,0,43,204,43,43,205,43,43,57,57,43,17,23,57,17,57,57,17,51,17,51,17,51,17,51,48,49,55,53,55,53,1,53,1,53,39,53,1,21,1,1,53,1,21,7,21,1,21,1,21,23,37,37,33,5,1,37,33,5,6,200,1,204,254,56,204,3,186,242,218,252,70,3,186,204,254,56,1,204,200,254,98,254,252,14,176,254,252,242,224,1,4,11,144,1,4,112,220,30,82,1,0,18,1,8,70,32,220,253,234,122,253,232,2,24,122,2,22,220,32,70,254,248,18,255,0,82,30,54,166,166,1,224,166,166,0,4,247,144,0,92,3,192,5,44,0,11,0,23,0,27,0,31,0,82,64,48,0,12,1,23,8,16,9,15,20,19,14,13,5,4,10,11,8,28,3,21,24,25,6,18,29,28,23,12,106,23,24,24,25,106,29,24,105,16,15,106,16,29,29,28,106,29,148,114,0,43,43,16,204,43,43,43,16,205,43,17,18,57,57,17,18,57,57,18,23,57,17,51,17,51,17,51,17,51,48,49,55,53,55,53,1,53,1,53,39,53,1,21,1,1,53,1,21,7,21,1,21,1,21,23,37,37,33,5,1,37,33,5,6,200,1,204,254,56,204,3,186,247,138,252,70,3,186,204,254,56,1,204,200,254,98,254,252,10,0,254,252,247,144,1,4,6,224,1,4,92,240,30,82,1,0,18,1,8,70,32,240,253,214,122,253,212,2,44,122,2,42,240,32,70,254,248,18,255,0,82,30,54,186,186,1,204,186,186,0,5,247,144,0,92,3,152,5,44,0,11,0,15,0,19,0,23,0,27,0,72,64,41,20,0,23,11,27,4,26,3,6,25,17,2,7,8,1,4,13,24,17,16,106,21,9,22,12,13,106,11,0,106,11,17,12,105,4,3,106,4,17,148,114,0,43,204,43,43,205,43,43,50,57,57,43,50,17,23,57,17,57,57,17,51,17,51,17,51,17,51,48,49,37,1,53,1,21,7,21,1,21,1,21,23,37,37,33,21,1,37,33,21,1,1,55,1,1,39,1,21,251,74,252,70,3,186,204,254,56,1,204,200,254,98,254,252,9,104,247,36,1,4,7,216,1,136,253,244,132,1,136,254,120,132,2,12,92,2,44,122,2,42,240,32,70,254,248,18,255,0,82,30,54,206,206,1,184,206,206,253,54,1,60,164,254,252,1,238,162,1,60,220,255,255,252,76,0,214,3,200,4,180,0,39,3,74,251,236,0,0,0,7,3,73,255,120,0,0,0,2,252,64,0,164,3,152,4,230,0,7,0,15,0,58,64,34,5,6,13,14,4,2,9,1,10,2,8,0,15,7,12,11,4,3,106,2,4,106,7,0,106,1,7,106,2,1,106,2,151,114,0,43,43,43,43,43,43,50,51,17,51,17,51,17,51,17,51,18,23,57,48,49,55,1,53,1,21,1,21,1,5,1,53,1,21,1,21,1,18,252,46,3,210,253,48,2,208,3,134,252,66,3,190,253,68,2,188,164,1,188,202,1,188,220,254,196,18,254,196,220,1,188,202,1,188,220,254,196,18,254,196,0,0,3,247,144,0,112,3,152,5,24,0,15,0,23,0,27,0,58,64,35,16,0,23,15,20,4,19,3,2,1,18,17,21,22,6,24,25,15,0,106,24,15,105,4,3,106,25,4,105,25,24,106,25,147,114,0,43,43,43,43,43,43,17,18,23,57,17,51,17,51,17,51,17,51,48,49,37,1,53,1,21,14,3,7,17,30,3,23,5,1,53,1,21,1,21,1,19,53,33,21,254,188,252,70,3,186,162,209,124,67,20,19,63,122,212,166,252,142,252,70,3,186,253,108,2,148,246,7,88,112,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,240,2,24,122,2,22,240,254,166,18,254,164,1,6,188,188,0,4,247,144,0,92,3,152,5,44,0,11,0,19,0,23,0,27,0,80,64,47,7,8,2,1,17,18,14,13,8,22,27,12,0,19,11,16,4,15,3,9,23,22,6,27,26,11,0,106,11,23,23,22,106,26,23,105,4,3,106,4,26,26,27,106,26,148,114,0,43,43,16,206,43,43,43,16,206,43,17,18,57,17,18,57,17,51,17,51,17,51,17,51,17,18,23,57,48,49,37,1,53,1,21,7,21,1,21,1,21,23,5,1,53,1,21,1,21,1,37,37,33,21,1,37,33,21,254,26,252,70,3,186,204,254,56,1,204,200,253,48,252,70,3,186,253,108,2,148,1,50,254,252,8,32,248,108,1,4,6,144,92,2,44,122,2,42,240,32,70,254,248,18,255,0,82,30,240,2,44,122,2,42,240,254,146,18,254,144,54,186,186,1,204,186,186,0,255,255,247,164,0,214,3,152,4,180,0,39,3,74,255,122,0,0,0,39,3,74,247,68,0,0,0,7,3,74,251,100,0,0,0,2,252,64,0,112,3,232,5,24,0,15,0,53,0,57,64,37,36,27,106,47,16,106,22,41,106,22,47,36,3,3,15,0,106,31,15,105,1,2,32,31,106,4,3,106,32,4,105,32,50,105,32,147,114,0,43,43,43,43,43,57,57,43,43,17,23,57,43,43,43,48,49,39,1,53,1,21,14,3,7,17,30,3,23,37,34,38,39,38,38,35,34,14,2,35,34,38,38,35,53,50,22,22,51,50,62,2,51,50,22,23,22,22,51,50,53,53,51,21,16,6,252,70,3,186,162,209,124,67,20,19,63,122,212,166,2,174,81,139,65,53,107,61,57,98,98,110,69,65,123,123,66,71,122,119,65,69,111,99,100,59,75,130,63,53,112,65,120,202,112,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,138,65,38,31,51,35,45,35,31,31,180,20,21,35,45,35,62,38,31,54,189,70,90,254,142,255,255,247,164,0,214,3,192,4,180,0,39,3,73,255,112,0,0,0,39,3,74,247,68,0,0,0,7,3,79,251,90,0,0,0,2,247,144,0,112,3,232,5,24,0,63,0,79,0,67,64,45,22,11,106,45,52,106,33,0,106,58,39,106,6,27,106,6,58,33,45,22,5,64,68,67,106,17,68,105,79,64,106,16,79,105,66,65,17,16,106,17,48,105,17,147,114,0,43,43,43,57,57,43,43,43,43,17,23,57,43,43,43,43,43,48,49,1,34,38,39,38,38,35,34,14,2,35,34,46,2,35,53,50,30,2,51,50,62,2,51,50,22,23,22,22,51,50,54,55,54,54,51,50,22,23,22,22,51,50,53,53,51,21,16,33,34,38,39,38,38,35,34,6,7,6,6,1,1,53,1,21,14,3,7,17,30,3,23,254,112,90,136,60,58,116,74,74,113,104,116,77,81,116,97,104,69,69,104,97,114,81,78,118,104,116,76,100,147,68,47,101,63,56,120,61,79,163,73,83,149,67,58,110,61,120,202,254,192,88,155,74,55,107,57,55,120,60,79,159,252,147,252,70,3,186,162,209,124,67,20,19,63,122,212,166,1,234,52,33,31,49,23,29,23,10,12,10,196,8,11,8,23,29,23,62,37,26,40,51,32,41,61,68,34,29,54,189,70,90,254,142,70,37,28,50,41,32,41,71,254,134,2,24,122,2,22,240,70,86,44,16,2,254,236,1,21,47,84,65,0,2,252,64,255,66,4,40,6,74,0,7,0,11,0,41,64,26,9,11,106,9,152,114,4,3,106,2,4,106,7,0,106,1,7,105,5,6,2,1,106,2,151,114,0,43,43,57,57,43,43,43,43,43,43,48,49,37,1,53,1,21,1,21,9,2,51,1,1,80,250,240,3,210,253,38,4,54,254,194,3,36,212,252,220,46,2,50,202,1,148,220,254,236,18,254,58,254,76,7,8,248,248,0,0,3,247,144,255,66,3,192,6,74,0,7,0,15,0,19,0,68,64,45,15,8,106,9,15,105,12,11,106,10,12,106,1,0,106,7,1,106,4,5,106,6,4,105,3,2,13,14,4,7,6,17,19,106,17,152,114,9,6,7,106,10,6,151,114,0,43,50,43,50,43,43,17,18,23,57,43,43,43,43,43,43,43,43,48,49,55,53,1,53,1,53,1,21,1,1,53,1,21,1,21,1,3,1,51,1,2,2,188,251,237,5,21,248,224,250,240,3,210,253,38,4,54,252,3,36,212,252,220,214,220,1,10,18,1,173,215,253,216,202,253,206,2,50,202,1,148,220,254,236,18,254,58,254,76,7,8,248,248,0,0,2,252,24,1,182,3,152,3,100,0,29,0,33,0,35,64,22,33,29,105,32,33,106,10,19,106,4,10,105,4,25,106,32,4,105,15,32,147,114,0,43,50,43,43,43,43,43,43,48,49,1,53,52,54,51,50,22,23,22,22,51,50,54,53,53,51,21,20,6,35,34,38,39,38,38,35,34,6,21,21,37,53,33,21,252,24,128,142,77,134,64,58,113,59,45,40,202,114,126,84,154,65,57,98,55,55,50,2,144,4,36,1,182,80,184,166,71,38,34,52,47,52,20,10,163,147,50,39,35,71,66,73,90,168,186,186,0,0,5,252,24,255,13,3,152,5,159,0,44,0,58,0,73,0,85,0,89,0,64,64,42,59,74,106,40,4,106,10,34,106,65,80,106,48,71,86,59,4,54,65,68,10,40,77,51,23,7,27,44,44,27,45,54,106,17,45,105,17,27,106,17,3,114,0,43,43,43,43,17,57,47,18,23,57,18,23,57,43,43,43,43,48,49,1,53,52,54,51,50,22,23,22,22,51,50,54,54,55,54,36,51,50,22,22,21,17,35,17,52,38,35,34,6,7,14,2,35,34,38,39,38,38,35,34,6,21,21,1,32,0,3,54,54,55,18,18,51,50,55,21,6,3,34,38,53,52,54,51,50,22,23,51,17,35,6,6,39,50,54,53,52,38,35,34,6,21,20,22,23,17,51,17,252,24,128,142,77,137,61,50,78,59,52,48,30,24,78,1,23,223,153,201,100,172,142,138,172,215,64,29,71,101,74,61,110,52,57,98,55,55,50,5,74,254,231,254,225,27,44,81,37,7,207,219,125,72,79,152,133,147,147,135,77,111,22,74,74,18,111,25,80,86,78,74,82,90,83,241,172,1,182,80,184,166,67,42,34,52,87,137,73,236,233,132,245,169,254,143,1,107,191,191,215,254,115,145,68,58,31,35,71,66,73,90,253,87,1,61,1,90,20,67,46,254,188,254,220,25,180,25,1,135,247,224,237,233,121,111,254,35,111,121,190,121,111,172,157,134,146,134,147,170,2,89,253,167,0,0,2,253,68,1,110,2,188,4,106,0,27,0,31,0,31,64,17,29,28,106,29,27,24,4,106,10,18,106,24,10,13,27,105,13,0,47,43,57,57,43,43,16,198,43,48,49,1,53,52,54,51,50,30,3,51,50,53,53,51,21,20,6,35,34,46,3,35,34,21,21,3,53,33,21,253,68,179,181,79,143,137,137,143,79,120,202,157,163,79,145,139,139,145,79,150,204,5,120,2,174,70,181,179,43,64,65,43,159,70,90,171,169,43,64,65,43,179,50,254,192,186,186,0,0,2,252,25,0,112,3,192,5,24,0,15,0,53,0,63,64,40,25,44,106,50,19,106,39,30,106,39,50,25,3,13,0,35,53,105,15,14,35,34,1,0,106,35,1,105,34,35,106,12,13,106,34,12,105,34,147,114,0,43,43,43,43,43,43,17,18,57,57,43,17,18,23,57,43,43,43,48,49,55,53,62,3,55,17,46,3,39,53,1,21,5,53,16,33,50,22,23,22,22,51,50,62,2,51,50,22,22,51,21,34,38,38,35,34,14,2,35,34,38,39,38,38,35,34,21,21,6,167,211,122,63,19,20,67,124,209,162,3,186,248,89,1,64,81,139,65,53,107,61,57,98,98,110,69,66,123,123,65,70,123,118,66,69,111,99,100,59,75,130,63,53,112,65,120,112,240,65,84,47,21,1,1,20,2,16,44,86,70,240,253,234,122,182,90,1,114,65,38,31,51,35,45,35,31,31,180,21,20,35,45,35,63,37,32,53,189,70,0,1,252,104,1,190,3,152,4,36,0,53,0,34,64,21,22,30,106,36,16,106,10,44,106,50,4,106,50,10,36,22,4,25,53,105,25,0,47,43,23,57,43,43,43,43,48,49,1,53,52,54,51,50,22,23,22,22,51,50,54,55,54,54,51,50,22,23,22,22,51,50,53,53,51,21,20,6,35,34,38,39,38,38,35,34,6,6,7,14,2,35,34,38,39,38,38,35,34,21,21,252,104,128,142,89,107,54,35,82,56,69,83,48,41,130,106,51,111,65,52,75,29,85,202,114,126,77,92,46,56,83,77,52,63,42,22,31,72,101,76,60,117,53,46,85,40,105,1,190,80,173,157,60,31,19,25,71,62,54,78,41,33,26,35,119,90,80,173,157,45,22,27,41,34,51,25,36,71,48,39,28,25,43,119,90,0,2,247,104,0,112,3,192,5,24,0,63,0,79,0,71,64,47,21,42,106,9,54,106,48,15,106,60,3,106,37,26,106,37,60,48,9,21,5,64,76,77,106,31,76,105,78,79,31,32,65,64,106,32,65,105,32,63,105,31,32,106,31,147,114,0,43,43,43,43,43,17,18,57,57,43,43,17,23,57,43,43,43,43,43,48,49,1,53,16,33,50,22,23,22,22,51,50,54,55,54,54,51,50,22,23,22,22,51,50,62,2,51,50,30,2,51,21,34,46,2,35,34,14,2,35,34,38,39,38,38,35,34,6,7,6,6,35,34,38,39,38,38,35,34,21,21,1,53,62,3,55,17,46,3,39,53,1,21,247,104,1,64,88,155,74,56,106,57,55,120,60,79,159,71,90,136,60,58,117,73,74,113,104,116,77,81,116,97,104,69,69,104,97,114,81,78,118,104,115,77,100,147,68,47,101,63,55,120,62,79,162,74,82,149,68,58,110,61,120,7,212,167,211,122,63,19,20,67,124,209,162,3,186,1,210,90,1,114,70,37,28,50,42,31,41,71,52,33,31,49,23,29,23,10,12,10,196,8,11,8,23,29,23,62,37,26,40,51,32,41,61,68,34,29,54,189,70,254,158,240,65,84,47,21,1,1,20,2,16,44,86,70,240,253,234,122,0,0,3,252,44,1,110,3,152,5,140,0,7,0,11,0,15,0,35,64,20,3,14,15,106,6,7,7,1,11,10,106,14,11,105,14,148,114,1,2,114,0,43,43,43,43,18,57,47,57,43,50,48,49,1,1,33,19,35,3,35,3,1,53,33,21,1,53,33,21,252,44,1,64,1,14,246,220,152,18,226,2,184,3,216,250,252,5,4,2,146,2,250,253,214,1,138,253,166,254,220,186,186,1,244,186,186,0,10,251,220,255,236,4,72,5,160,0,3,0,15,0,27,0,39,0,51,0,63,0,75,0,79,0,91,0,103,0,66,64,42,98,34,46,106,92,28,40,106,80,34,28,105,76,0,77,1,79,78,3,2,8,4,86,34,3,114,64,4,16,106,70,10,22,106,58,4,10,105,52,4,9,114,0,43,50,43,50,43,50,43,50,43,50,18,23,57,43,50,43,50,43,50,48,49,1,39,1,23,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,37,39,1,23,5,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,252,96,92,4,70,92,254,86,142,172,172,142,141,171,171,141,57,69,69,57,58,70,70,254,84,142,172,172,142,141,171,171,141,57,69,69,57,58,70,70,6,52,142,172,172,142,141,171,171,141,57,69,69,57,58,70,70,253,26,92,4,38,92,253,20,142,172,172,142,141,171,171,141,57,69,69,57,58,70,70,1,50,126,3,26,120,251,154,177,145,147,177,177,147,145,177,168,85,69,71,85,85,71,69,85,2,134,177,145,147,177,174,150,145,177,168,85,69,72,86,86,72,69,85,252,42,177,145,147,177,177,147,145,177,168,85,69,71,85,85,71,69,85,62,126,3,2,120,192,177,145,147,177,174,150,145,177,168,85,69,72,86,86,72,69,85,0,3,0,156,255,239,4,81,5,140,0,11,0,23,0,27,0,35,64,20,0,1,12,25,7,106,8,25,2,114,24,27,21,3,12,18,106,12,9,114,0,43,43,23,57,43,50,43,18,57,57,48,49,1,39,54,54,53,52,38,35,17,32,17,20,1,34,38,53,52,54,51,50,22,21,20,6,55,17,23,17,3,146,84,44,44,197,199,2,71,253,53,117,117,127,127,107,127,138,16,122,2,102,62,49,117,68,107,107,1,40,254,103,205,252,201,96,96,97,96,89,74,100,122,202,4,211,50,251,115,0,5,0,5,255,236,4,79,5,180,0,3,0,15,0,19,0,31,0,35,0,44,64,26,13,19,4,10,106,29,35,20,26,106,20,4,33,18,1,34,4,2,3,106,4,2,105,4,9,114,0,43,43,43,23,57,18,57,43,57,57,43,57,57,48,49,1,3,37,17,1,34,38,53,52,54,51,50,22,21,20,6,55,17,23,17,5,34,38,53,52,54,51,50,22,21,20,6,55,17,55,17,1,94,9,2,250,252,150,101,123,134,110,97,117,128,6,122,1,150,101,123,134,110,97,117,128,6,122,4,60,1,40,80,254,216,251,96,116,96,96,117,111,92,100,122,222,4,154,50,251,152,79,116,96,96,117,111,92,100,122,222,3,172,125,251,215,0,0,1,0,200,4,116,1,244,5,160,0,11,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,0,0,2,0,200,2,191,1,244,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,3,0,200,1,11,1,244,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,5,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,8,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,95,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,5,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,4,0,200,255,86,1,244,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,3,0,200,2,191,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,2,191,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,3,0,200,2,191,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,3,0,200,255,86,1,244,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,2,0,200,1,11,1,244,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,3,0,200,255,86,1,244,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,2,0,200,4,116,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,3,0,200,2,191,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,2,0,200,2,191,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,5,30,88,62,62,88,88,62,62,88,0,2,0,200,1,11,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,2,0,200,255,86,1,244,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,2,0,200,255,86,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,0,1,0,200,2,191,1,244,3,235,0,11,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,0,0,2,0,200,1,11,1,244,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,5,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,7,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,83,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,4,0,200,1,11,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,5,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,255,86,1,244,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,2,0,200,2,191,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,3,0,200,2,191,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,2,0,200,2,191,3,232,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,2,0,200,1,11,3,232,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,2,0,200,255,86,1,244,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,2,0,200,255,86,3,232,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,1,0,200,1,11,1,244,2,55,0,11,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,0,0,2,0,200,1,11,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,4,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,6,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,71,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,3,0,200,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,2,0,200,1,11,3,232,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,3,0,200,1,11,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,2,0,200,1,11,3,232,2,55,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,2,55,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,4,0,200,255,86,3,232,2,55,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,2,55,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,2,0,200,255,86,1,244,2,55,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,2,55,0,11,0,23,0,35,0,0,5,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,170,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,2,0,200,255,86,3,232,2,55,0,11,0,23,0,0,5,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,170,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,1,2,188,4,116,3,232,5,160,0,11,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,0,0,2,2,188,2,191,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,3,2,188,1,11,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,5,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,59,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,4,2,188,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,1,180,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,3,2,188,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,3,105,88,62,62,88,88,62,62,88,0,0,2,2,188,1,11,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,3,2,188,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,2,0,200,255,86,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,5,160,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,2,2,188,255,86,3,232,5,160,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,4,116,88,62,62,88,88,62,62,88,250,226,88,62,62,88,88,62,62,88,0,0,1,2,188,2,191,3,232,3,235,0,11,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,0,0,2,2,188,1,11,3,232,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,254,76,88,62,62,88,88,62,62,88,0,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,4,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,47,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,3,2,188,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,1,181,88,62,62,88,88,62,62,88,0,0,2,0,200,255,86,3,232,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,3,235,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,2,2,188,255,86,3,232,3,235,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,2,191,88,62,62,88,88,62,62,88,252,151,88,62,62,88,88,62,62,88,0,0,1,2,188,1,11,3,232,2,55,0,11,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,0,0,2,0,200,255,86,3,232,2,55,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,3,0,200,255,86,3,232,2,55,0,11,0,23,0,35,0,0,1,34,38,53,52,54,51,50,22,21,20,6,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,1,182,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,2,2,188,255,86,3,232,2,55,0,11,0,23,0,0,1,34,38,53,52,54,51,50,22,21,20,6,3,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,62,62,88,88,62,62,88,88,1,11,88,62,62,88,88,62,62,88,254,75,88,62,62,88,88,62,62,88,0,0,1,0,200,255,86,1,244,0,130,0,11,0,0,5,34,38,53,52,54,51,50,22,21,20,6,1,94,62,88,88,62,62,88,88,170,88,62,62,88,88,62,62,88,0,2,0,200,255,86,3,232,0,130,0,11,0,23,0,0,5,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,253,206,62,88,88,62,62,88,88,170,88,62,62,88,88,62,62,88,88,62,62,88,88,62,62,88,0,0,1,2,188,255,86,3,232,0,130,0,11,0,0,5,34,38,53,52,54,51,50,22,21,20,6,3,82,62,88,88,62,62,88,88,170,88,62,62,88,88,62,62,88,255,255,1,116,2,218,3,76,5,140,2,6,2,207,0,0,255,255,1,146,254,76,2,202,0,254,2,6,2,166,0,0,255,255,1,116,2,218,3,76,5,140,2,6,2,207,0,0,0,1,1,176,3,12,3,96,5,190,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,1,51,3,1,176,1,14,162,150,3,12,2,178,253,78,255,255,0,170,4,224,4,6,5,156,2,6,6,57,0,0,0,2,1,0,4,214,3,176,5,226,0,11,0,23,0,14,181,18,0,6,106,12,0,0,47,50,43,50,48,49,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,42,55,79,79,55,56,78,78,254,36,55,79,79,55,56,78,78,4,214,79,55,56,78,78,56,55,79,79,55,56,78,78,56,55,79,0,1,1,210,4,214,2,222,5,226,0,11,0,10,179,0,6,106,0,0,47,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,2,88,55,79,79,55,56,78,78,4,214,79,55,56,78,78,56,55,79,0,0,1,1,33,4,224,2,159,6,92,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,3,51,19,1,223,190,212,170,4,224,1,124,254,132,0,0,1,1,213,4,224,3,83,6,92,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,19,51,3,1,213,170,212,190,4,224,1,124,254,132,0,0,2,0,219,4,224,3,203,6,92,0,3,0,7,0,14,181,5,0,1,106,4,0,0,47,50,43,50,48,49,1,19,51,3,33,19,51,3,2,87,150,222,170,253,186,150,222,170,4,224,1,124,254,132,1,124,254,132,0,1,1,18,4,224,3,158,6,92,0,7,0,14,181,5,0,1,106,4,0,0,47,50,43,57,48,49,1,19,51,19,35,39,51,7,1,18,240,172,240,212,124,20,124,4,224,1,124,254,132,246,246,0,0,1,1,18,4,224,3,158,6,92,0,7,0,16,182,3,6,6,0,1,106,0,0,47,43,50,18,57,48,49,1,3,51,23,35,55,51,3,2,2,240,212,124,20,124,212,240,4,224,1,124,246,246,254,132,0,0,1,0,251,4,214,3,181,6,67,0,17,0,16,183,14,0,4,106,0,9,106,0,0,47,43,43,50,48,49,1,34,38,53,53,51,21,20,22,51,50,54,53,53,51,21,20,6,2,88,166,183,175,90,84,84,90,175,182,4,214,168,154,43,43,89,97,97,89,43,43,154,168,0,0,2,1,106,4,174,3,70,6,94,0,11,0,19,0,19,64,10,6,16,106,0,6,105,0,12,106,0,0,47,43,43,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,39,50,53,52,35,34,21,20,2,88,113,125,125,113,113,125,125,113,96,96,96,4,174,113,103,103,113,113,103,103,113,116,100,100,100,100,0,0,1,0,240,4,232,3,202,6,64,0,27,0,23,64,12,9,17,106,23,3,106,9,23,27,12,105,27,0,47,43,57,57,43,43,48,49,19,53,52,51,50,22,23,22,22,51,50,53,53,51,21,20,6,35,34,38,39,38,38,35,34,6,21,21,240,210,40,70,38,50,71,25,54,172,94,94,28,82,53,33,66,32,37,37,4,232,40,250,25,19,25,31,64,90,80,120,120,24,26,17,33,36,38,50,0,0,1,0,170,4,224,4,6,5,156,0,3,0,10,179,0,1,106,0,0,47,43,48,49,19,53,33,21,170,3,92,4,224,188,188,0,0,2,1,100,4,224,3,7,6,156,0,19,0,26,0,20,64,10,25,10,9,106,24,0,10,105,0,16,0,63,43,50,43,50,48,49,1,53,52,62,2,53,52,38,35,55,50,22,21,20,14,2,21,21,39,39,54,54,51,7,34,1,246,32,43,32,34,28,21,94,113,36,46,36,234,67,31,116,65,21,73,4,224,36,39,55,42,40,25,26,30,151,106,87,48,59,45,51,39,9,250,119,34,41,151,0,0,1,1,236,4,184,2,242,6,52,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,19,51,3,1,236,90,172,50,4,184,1,124,254,132,0,0,1,1,195,3,127,3,140,5,63,0,9,0,17,64,9,1,5,105,1,0,106,1,6,114,0,43,43,43,48,49,1,39,55,54,54,53,51,20,6,7,1,245,50,60,94,93,210,173,174,3,127,165,10,16,138,119,190,219,29,0,1,1,210,254,92,2,222,255,104,0,11,0,10,179,6,0,106,6,0,47,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,2,88,55,79,79,55,56,78,78,254,92,79,55,56,78,78,56,55,79,0,0,1,1,159,254,32,2,202,255,116,0,3,0,10,179,1,0,106,1,0,47,43,48,49,1,19,51,3,1,159,77,222,117,254,32,1,84,254,172,0,0,1,2,2,254,32,3,124,0,6,0,15,0,25,64,15,1,0,106,7,1,105,10,7,106,9,10,106,9,8,114,0,43,43,43,43,43,48,49,1,53,50,54,53,52,38,35,55,23,7,22,22,21,20,6,2,2,95,93,80,82,69,136,25,86,86,188,254,32,150,36,36,35,33,196,11,95,18,83,66,106,107,0,1,1,156,254,88,3,18,0,32,0,20,0,21,64,11,15,0,106,9,15,105,7,6,9,8,114,0,43,50,50,43,43,48,49,1,34,38,53,52,54,55,53,55,21,34,6,21,20,22,51,50,55,7,6,6,2,140,115,125,70,64,240,106,118,61,55,35,47,18,22,48,254,88,101,91,74,100,18,70,2,32,88,80,42,46,11,170,4,5,255,255,1,33,4,224,2,159,6,92,2,6,6,29,0,0,255,255,1,213,4,224,3,83,6,92,2,6,6,30,0,0,255,255,1,0,4,214,3,176,5,226,0,6,6,27,0,0,255,255,1,210,4,214,2,222,5,226,0,6,6,28,0,0,255,255,1,33,4,224,2,159,6,92,0,6,6,29,0,0,255,255,1,213,4,224,3,83,6,92,0,6,6,30,0,0,255,255,0,219,4,224,3,203,6,92,0,6,6,31,0,0,255,255,1,18,4,224,3,158,6,92,0,6,6,32,0,0,255,255,1,18,4,224,3,158,6,92,0,6,6,33,0,0,255,255,0,251,4,214,3,181,6,67,0,6,6,34,0,0,255,255,1,106,4,174,3,70,6,94,0,6,6,35,0,0,255,255,0,240,4,232,3,202,6,64,0,6,6,36,0,0,255,255,0,170,4,224,4,6,5,156,0,6,6,37,0,0,255,255,2,2,254,32,3,124,0,6,0,6,6,43,0,0,255,255,1,156,254,88,3,18,0,32,0,6,6,44,0,0,0,2,1,2,6,44,3,174,7,56,0,11,0,23,0,14,181,18,0,6,106,12,0,0,47,50,43,50,48,49,1,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,3,40,55,79,79,55,56,78,78,254,40,55,79,79,55,56,78,78,6,44,79,55,56,78,78,56,55,79,79,55,56,78,78,56,55,79,0,1,1,210,6,44,2,222,7,56,0,11,0,10,179,0,6,106,0,0,47,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,2,88,55,79,79,55,56,78,78,6,44,79,55,56,78,78,56,55,79,0,0,1,0,239,6,44,2,229,7,38,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,37,33,23,1,243,254,252,1,26,220,6,44,250,250,0,0,1,1,213,6,44,3,203,7,38,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,55,33,5,1,213,220,1,26,254,252,6,44,250,250,0,0,2,0,249,6,44,4,77,7,38,0,3,0,7,0,14,181,5,0,1,106,4,0,0,47,50,43,50,48,49,1,55,33,7,33,55,33,7,2,147,160,1,26,200,253,116,160,1,26,200,6,44,250,250,250,250,0,1,1,3,6,44,3,183,7,48,0,7,0,14,181,5,0,1,106,4,0,0,47,50,43,57,48,49,1,1,51,1,35,39,51,7,1,3,1,4,172,1,4,222,177,106,177,6,44,1,4,254,252,205,205,0,0,1,0,254,6,44,3,178,7,48,0,7,0,14,181,4,6,0,1,106,0,0,47,43,50,57,48,49,1,1,51,23,35,55,51,1,2,2,254,252,222,134,20,134,222,254,252,6,44,1,4,156,156,254,252,0,0,1,0,226,6,34,3,206,7,68,0,13,0,16,183,11,0,3,106,0,7,106,0,0,47,43,43,50,48,49,1,34,38,53,51,20,22,51,50,54,53,51,20,6,2,88,178,196,175,105,94,95,104,175,196,6,34,152,138,73,81,81,73,138,152,0,0,2,1,106,5,208,3,70,7,108,0,11,0,23,0,19,64,10,6,18,106,0,6,105,0,12,106,0,0,47,43,43,43,48,49,1,34,38,53,52,54,51,50,22,21,20,6,39,50,54,53,52,38,35,34,6,21,20,22,2,88,113,125,125,113,113,125,125,113,47,49,49,47,46,50,50,5,208,108,98,98,108,108,98,98,108,116,47,43,44,47,47,44,43,47,0,0,1,0,215,6,30,3,217,7,98,0,27,0,23,64,12,10,18,106,24,4,106,10,24,27,13,105,27,0,47,43,57,57,43,43,48,49,19,53,52,54,51,50,22,23,22,22,51,50,53,53,51,21,20,6,35,34,38,39,38,38,35,34,21,21,215,105,105,41,89,58,59,62,25,54,172,94,94,34,94,65,43,72,26,74,6,30,50,125,125,25,24,24,27,64,60,50,120,120,28,27,18,27,74,60,0,0,1,0,213,6,44,3,219,6,232,0,3,0,10,179,0,1,106,0,0,47,43,48,49,19,53,33,21,213,3,6,6,44,188,188,0,0,1,1,100,5,249,3,67,7,112,0,22,0,16,183,14,9,106,22,14,105,22,0,0,47,47,43,43,48,49,1,53,52,54,55,54,54,53,52,35,34,7,39,54,51,50,21,20,6,7,6,6,21,2,20,30,36,39,32,82,96,68,67,81,171,227,54,65,16,13,5,249,21,18,35,25,25,33,16,51,43,119,75,163,60,79,38,9,16,10,0,1,1,135,4,181,3,80,6,117,0,9,0,14,182,1,5,105,1,0,106,1,0,47,43,43,48,49,1,39,55,54,54,53,51,20,6,7,1,185,50,60,103,102,192,173,174,4,181,165,10,17,137,119,190,219,29,0,0,1,1,223,4,224,3,13,6,112,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,19,51,3,1,223,90,212,110,4,224,1,144,254,112,0,0,1,2,7,6,4,3,23,7,48,0,3,0,10,179,0,1,106,0,0,47,43,48,49,1,19,51,3,2,7,30,242,90,6,4,1,44,254,212,0,255,255,0,240,4,232,3,202,6,64,2,6,6,36,0,0,255,255,1,213,4,224,3,83,6,92,0,6,6,30,0,0,255,255,1,213,4,224,3,83,6,92,2,6,6,76,0,0,0,3,0,136,4,214,4,50,6,92,0,3,0,15,0,27,0,23,64,11,10,16,22,106,16,16,4,3,1,106,3,0,47,43,51,51,47,43,50,48,49,1,19,51,3,5,34,38,53,52,54,51,50,22,21,20,6,33,34,38,53,52,54,51,50,22,21,20,6,1,202,130,212,150,254,132,55,79,79,55,56,78,78,2,102,55,79,79,55,56,78,78,4,224,1,124,254,132,10,79,55,56,78,78,56,55,79,79,55,56,78,78,56,55,79,0,0,1,0,253,4,214,3,179,6,67,0,13,0,16,183,11,0,3,106,0,7,106,0,0,47,43,43,50,48,49,1,34,38,53,51,20,22,51,50,54,53,51,20,6,2,88,179,168,188,72,87,89,70,188,169,4,214,181,184,120,109,111,118,185,180,0,0,1,1,0,6,34,3,176,7,68,0,13,0,16,183,11,0,3,106,0,7,106,0,0,47,43,43,50,48,49,1,34,38,53,51,20,22,51,50,54,53,51,20,6,2,88,163,181,195,78,71,71,78,195,180,6,34,152,138,88,66,66,88,138,152,0,0,6,0,160,254,192,4,110,6,204,0,3,0,7,0,25,0,29,0,33,0,51,0,56,64,32,0,45,45,27,43,106,33,19,51,32,4,17,35,105,17,17,26,1,27,2,114,5,25,25,26,9,106,4,96,26,8,114,0,43,26,206,43,51,17,57,43,206,18,57,47,43,23,57,43,51,17,57,48,49,1,17,51,17,3,17,51,17,1,53,33,50,54,53,52,38,35,33,39,33,50,22,21,20,6,35,33,17,51,17,3,53,33,21,37,53,51,50,54,53,52,38,35,35,39,33,50,22,21,20,6,35,2,2,138,138,138,254,206,1,44,132,146,152,140,254,230,24,1,100,216,236,224,206,253,224,200,82,1,160,254,164,240,113,125,131,121,222,24,1,0,216,236,224,206,5,44,1,160,254,96,249,148,1,133,254,123,1,64,190,121,109,112,123,91,186,170,186,204,5,140,250,116,2,186,98,98,56,91,101,94,92,98,190,187,173,147,159,0,3,0,129,254,192,4,37,6,204,0,3,0,7,0,47,0,46,64,29,3,28,35,105,18,45,21,22,42,41,25,38,32,31,10,8,2,96,28,3,114,6,8,15,105,7,8,9,114,0,43,205,43,57,43,26,205,18,23,57,43,57,48,49,1,17,51,17,3,17,51,17,3,34,38,39,55,22,22,51,50,54,53,52,38,39,39,38,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,23,23,22,22,21,20,6,2,32,138,138,138,131,121,211,90,26,110,205,97,140,136,67,63,246,145,155,224,205,143,220,102,140,88,153,83,103,113,74,72,208,158,164,251,5,56,1,148,254,108,249,136,1,146,254,110,1,44,39,39,202,47,49,98,100,66,92,28,112,66,186,138,186,204,84,95,142,72,65,99,97,69,87,34,98,74,186,146,193,193,0,0,4,252,10,254,192,3,197,6,204,0,7,0,11,0,45,0,49,0,74,64,47,2,3,7,6,49,33,64,22,43,25,26,40,39,29,36,8,12,48,32,3,114,12,19,105,11,96,12,9,114,1,0,106,7,1,106,6,7,106,4,5,106,6,4,106,6,151,114,0,43,43,43,43,43,43,43,26,205,43,43,204,18,23,57,26,205,50,17,18,57,57,48,49,55,53,1,53,1,53,1,21,1,17,51,17,3,34,38,39,55,22,22,51,50,54,53,52,38,39,39,38,38,53,52,54,51,21,34,6,21,20,22,23,23,22,22,21,20,6,1,17,51,17,7,2,188,250,247,6,11,249,231,138,134,121,211,90,26,110,205,97,140,136,67,63,246,145,155,236,214,112,124,74,72,208,158,164,251,254,253,138,214,220,1,10,18,2,26,215,253,107,202,252,96,1,138,254,118,1,44,39,39,194,43,45,98,100,66,92,28,112,66,186,138,186,204,184,103,93,69,87,34,98,74,186,146,193,193,4,252,1,228,254,28,0,0,4,252,24,254,192,3,206,6,204,0,7,0,41,0,45,0,49,0,78,64,51,6,5,1,2,47,22,29,105,12,39,15,16,36,35,19,32,26,25,10,8,49,22,3,114,42,8,9,106,45,96,8,9,114,4,3,106,2,4,106,7,0,106,1,7,105,2,1,106,2,151,114,0,43,43,43,43,43,43,43,26,204,43,50,43,205,18,23,57,43,57,17,18,57,57,48,49,5,1,53,1,21,1,21,1,7,55,50,54,53,52,38,39,39,38,38,53,52,54,51,50,22,23,7,38,38,35,34,6,21,20,22,23,23,22,22,21,20,6,37,51,17,35,19,35,17,51,2,4,250,20,3,210,253,38,4,244,48,16,140,136,67,63,246,145,155,236,214,147,218,50,168,42,129,75,113,124,74,72,208,158,164,251,254,253,138,138,138,138,138,50,2,146,202,1,144,216,254,236,18,253,238,190,194,94,94,66,92,28,112,66,186,138,186,204,115,104,127,73,79,97,89,69,87,34,98,74,186,146,193,193,194,254,18,6,125,1,143,0,0,5,247,104,254,192,3,192,6,204,0,7,0,11,0,39,0,43,0,51,0,0,5,1,53,1,21,1,21,1,3,17,51,17,3,55,50,54,53,52,38,39,39,38,38,53,52,54,51,21,34,6,21,20,22,23,23,22,22,21,20,6,1,17,51,17,1,53,1,53,1,53,1,21,253,164,249,196,3,210,253,38,5,68,64,138,134,16,140,136,67,63,246,145,155,236,214,112,124,74,72,208,158,164,251,254,253,138,2,20,2,188,250,202,6,56,63,2,159,202,1,144,216,254,236,18,253,215,254,45,1,218,254,38,1,34,184,103,105,66,92,28,112,66,186,138,186,204,184,103,93,69,87,34,98,74,186,146,198,198,5,6,1,228,254,28,251,238,220,1,10,18,2,37,215,253,96,202,0,1,0,0,0,1,0,2,0,0,12,198,6,88,0,0,0,0,12,202,0,0,0,26,0,54,0,63,0,72,0,81,0,90,0,99,0,108,0,117,0,126,0,136,0,148,0,158,0,170,0,182,0,192,0,201,0,210,0,219,0,228,0,237,1,45,1,54,1,65,1,74,1,119,1,128,1,217,2,3,2,12,2,21,2,30,2,40,2,49,2,90,2,136,2,145,2,154,2,182,2,191,2,200,2,209,2,219,2,231,2,241,2,253,3,9,3,19,3,28,3,37,3,46,3,55,3,64,3,73,3,143,3,222,3,231,3,240,4,50,4,73,4,137,4,146,4,155,4,165,4,174,4,183,4,204,4,232,4,241,4,251,5,18,5,86,5,95,5,104,5,114,5,123,5,132,5,141,5,150,5,159,5,168,5,231,5,240,6,28,6,40,6,85,6,94,6,112,6,121,6,147,6,156,6,168,6,196,6,249,7,31,7,40,7,49,7,58,7,122,7,186,7,195,7,218,7,227,7,236,7,246,8,2,8,14,8,26,8,38,8,48,8,57,8,67,8,76,8,85,8,94,8,103,8,112,8,121,8,130,8,139,8,148,8,157,8,225,9,16,9,48,9,57,9,66,9,131,9,175,9,226,10,19,10,72,10,81,10,90,10,99,10,185,10,195,10,205,10,214,10,226,10,235,11,47,11,97,11,114,11,137,11,146,11,155,11,164,11,183,11,192,11,201,11,211,11,220,11,229,11,238,11,247,12,38,12,47,12,56,12,65,12,74,12,83,12,92,12,101,12,173,12,182,12,191,12,213,12,222,13,14,13,23,13,33,13,42,13,51,13,85,13,115,13,124,13,134,13,143,13,152,13,161,13,170,13,179,13,188,13,217,13,227,13,237,13,247,14,2,14,11,14,20,14,29,14,39,14,49,14,74,14,169,14,178,14,187,14,196,14,205,14,214,14,223,14,233,14,242,14,251,15,4,15,13,15,22,15,31,15,41,15,50,15,59,15,68,15,77,15,86,15,215,15,224,15,234,15,244,16,116,16,125,16,173,16,221,16,230,16,239,16,248,17,1,17,10,17,71,17,149,17,214,18,26,18,85,18,94,18,103,18,112,18,121,18,130,18,139,18,148,18,157,18,167,18,176,18,185,18,194,18,203,18,212,18,221,19,67,19,76,19,85,19,95,19,160,19,231,20,12,20,96,20,105,20,114,20,123,20,132,20,141,20,179,20,222,20,232,20,242,21,44,21,72,21,81,21,90,21,99,21,108,21,117,21,126,21,135,21,223,21,232,22,79,22,89,22,156,22,198,22,208,22,249,23,2,23,43,23,90,23,99,23,150,23,159,23,169,23,223,24,27,24,65,24,74,24,114,24,123,24,132,24,197,25,8,25,18,25,57,25,66,25,75,25,84,25,93,25,102,25,111,25,120,25,130,25,139,25,148,25,157,25,166,25,176,25,185,25,194,25,203,25,212,25,222,25,231,25,240,26,72,26,120,26,171,26,180,26,190,27,20,27,85,27,148,27,213,28,5,28,14,28,23,28,32,28,119,28,128,28,137,28,146,28,155,28,164,29,22,29,57,29,108,29,166,29,219,29,228,29,237,30,71,30,122,30,131,30,140,30,149,30,158,30,167,30,176,30,185,31,1,31,10,31,19,31,28,31,37,31,47,31,56,31,65,31,148,31,157,31,167,31,189,31,198,31,244,31,253,32,6,32,15,32,24,32,58,32,106,32,115,32,124,32,133,32,142,32,151,32,160,32,169,32,179,32,209,32,218,32,227,32,236,33,50,33,98,33,107,33,116,33,125,33,134,33,143,33,152,34,66,34,146,34,180,34,223,34,232,35,26,35,35,35,52,35,61,35,83,35,138,35,147,35,156,35,165,36,90,36,181,36,219,36,228,36,237,37,82,37,91,37,132,37,141,37,150,37,159,37,179,37,188,37,197,37,206,37,250,38,3,38,56,38,65,38,97,38,124,38,148,38,178,38,203,38,253,39,55,39,112,39,188,40,2,40,11,40,57,40,115,40,124,40,133,40,142,40,179,40,231,41,74,41,124,41,147,42,89,42,197,42,223,42,232,43,13,43,55,43,93,43,124,43,133,43,142,43,151,43,181,43,190,43,237,44,4,44,72,44,81,44,150,44,229,44,246,44,255,45,21,45,77,45,86,45,95,45,104,46,4,46,97,46,133,46,142,46,151,46,253,47,6,47,49,47,99,47,121,47,130,47,150,47,159,47,168,47,185,47,194,47,203,48,48,48,57,48,94,48,121,48,145,48,181,48,206,48,249,49,43,49,97,49,170,49,236,49,245,50,45,50,96,50,105,50,114,50,123,50,166,50,213,51,55,51,133,51,156,52,99,52,208,52,235,53,7,53,42,53,84,53,128,53,137,53,146,53,155,53,164,53,206,53,215,54,21,54,113,54,122,55,43,55,135,55,144,55,153,55,162,56,8,56,30,56,39,56,48,56,105,56,172,56,247,57,37,57,93,57,143,57,237,57,246,57,255,58,8,58,37,58,46,58,55,58,64,58,95,58,104,58,113,58,122,58,131,58,140,58,164,58,173,58,182,58,191,58,230,58,239,58,248,59,1,59,10,59,47,59,121,59,157,59,198,59,230,60,8,60,42,60,79,60,142,60,151,60,160,60,225,61,43,61,130,61,168,62,6,62,80,62,149,62,187,62,233,63,12,63,53,63,130,63,187,63,232,64,82,64,91,64,141,64,202,65,21,65,76,65,120,65,164,65,227,66,39,66,80,66,159,66,168,66,177,66,186,66,195,66,204,66,213,66,222,66,231,66,240,66,249,67,2,67,61,67,103,67,131,67,188,68,28,68,67,68,140,68,205,68,236,69,57,69,129,69,166,69,175,69,184,69,193,69,202,69,211,69,220,69,229,69,238,69,247,70,0,70,9,70,18,70,27,70,36,70,45,70,54,70,63,70,72,70,81,70,90,70,99,70,108,70,117,70,126,70,135,70,144,70,153,70,162,70,171,70,180,70,217,70,246,71,45,71,130,71,165,71,226,72,34,72,61,72,122,72,187,72,205,73,42,73,116,73,237,74,78,74,233,75,103,75,196,75,224,75,238,76,34,76,71,76,80,76,120,76,160,76,253,77,87,77,97,77,129,77,178,77,187,77,215,77,224,77,237,77,251,78,9,78,45,78,83,78,172,79,10,79,33,79,56,79,74,79,92,79,110,79,128,79,137,79,146,79,160,79,174,79,183,79,192,79,201,79,215,79,225,79,234,79,243,79,252,80,5,80,20,80,35,80,44,80,86,80,127,80,154,80,181,80,193,80,207,80,225,80,247,81,43,81,63,81,115,81,180,81,212,82,14,82,86,82,180,83,32,83,161,83,188,83,230,84,7,84,16,84,25,84,80,84,148,84,157,84,194,84,203,84,212,85,58,85,121,85,192,86,8,86,17,86,26,86,35,86,44,86,68,86,96,86,105,86,114,86,123,86,232,87,69,87,78,87,87,87,96,87,105,87,164,88,35,88,76,88,85,88,94,88,214,88,223,89,43,89,139,89,175,89,223,90,51,90,60,90,91,90,130,90,161,90,170,90,179,90,188,90,206,90,220,90,231,90,240,90,240,90,240,90,240,90,240,90,240,91,77,91,123,91,175,91,225,92,54,92,145,92,219,93,20,93,83,93,148,93,177,94,1,94,107,94,163,94,226,95,45,95,100,95,133,95,178,95,228,96,27,96,82,96,197,97,10,97,51,97,117,97,143,97,180,97,235,98,22,98,31,98,40,98,65,98,74,98,108,98,140,98,159,98,191,98,212,98,226,98,252,99,46,99,65,99,91,99,120,99,147,99,182,99,217,99,244,99,253,100,61,100,80,100,102,100,182,100,210,101,13,101,22,101,31,101,51,101,90,101,122,101,131,101,140,101,158,101,242,102,75,102,101,102,110,102,137,102,167,102,197,102,227,103,23,103,68,103,118,103,162,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,207,103,240,104,20,104,63,104,102,104,141,104,180,104,180,104,180,104,213,104,246,105,33,105,76,105,119,105,162,105,204,106,175,106,214,106,223,106,248,106,248,107,28,107,54,107,79,107,106,107,134,107,155,107,175,107,196,107,217,107,217,107,236,107,255,108,18,108,37,108,56,108,79,108,104,108,104,108,131,108,131,108,131,108,145,108,159,108,159,108,173,108,212,108,226,109,99,109,120,109,141,109,174,109,219,110,9,110,82,110,82,110,96,110,110,110,124,110,138,110,152,110,170,110,192,110,214,110,236,111,2,111,16,111,16,111,25,111,25,111,25,111,25,111,25,111,25,111,47,111,71,111,94,111,117,111,139,111,161,111,182,111,182,111,182,111,205,111,228,111,228,111,228,111,228,111,228,111,251,112,18,112,41,112,63,112,63,112,63,112,63,112,63,112,91,112,119,112,147,112,175,112,210,112,239,113,11,113,32,113,67,113,96,113,125,113,145,113,194,113,227,114,4,114,25,114,43,114,61,114,80,114,97,114,119,114,136,114,158,114,182,114,201,114,218,114,240,115,1,115,23,115,47,115,74,115,92,115,110,115,128,115,146,115,160,115,179,115,196,115,213,115,227,115,241,115,255,116,25,116,51,116,65,116,87,116,109,116,123,116,142,116,159,116,178,116,195,116,209,116,233,116,251,117,14,117,38,117,57,117,76,117,100,117,122,117,144,117,168,117,192,117,220,117,248,118,20,118,48,118,89,118,109,118,130,118,148,118,166,118,180,118,199,118,216,118,233,118,247,119,5,119,19,119,45,119,71,119,85,119,107,119,129,119,143,119,162,119,181,119,198,119,215,119,229,119,253,120,16,120,34,120,58,120,77,120,96,120,120,120,142,120,164,120,188,120,212,120,233,120,251,121,13,121,37,121,56,121,78,121,95,121,117,121,134,121,158,121,177,121,199,121,216,121,238,121,255,122,26,122,44,122,62,122,89,122,113,122,138,122,162,122,180,122,199,122,223,122,242,123,4,123,31,123,51,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,70,123,194,124,7,124,65,124,163,124,228,125,68,125,96,125,189,125,223,125,237,126,3,126,127,126,215,127,50,127,86,127,226,128,48,128,133,128,213,129,18,129,103,129,136,129,151,129,172,129,186,129,204,129,230,130,31,130,78,130,139,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,212,130,226,130,240,130,240,130,254,131,12,131,46,131,71,131,85,131,114,131,141,131,164,131,183,131,208,131,222,132,154,132,175,133,23,133,50,133,59,133,96,133,124,133,157,133,180,133,209,134,49,134,58,134,113,134,124,134,133,134,142,134,168,134,190,134,238,135,30,135,91,135,141,135,166,135,200,136,14,136,23,136,50,136,116,136,156,136,204,136,254,137,7,137,58,137,109,137,199,138,13,138,22,138,110,138,120,138,129,138,157,138,190,138,227,138,236,139,78,139,182,139,192,139,201,139,228,140,21,140,99,140,179,140,250,141,4,141,43,141,108,141,172,141,181,142,41,142,50,142,183,142,214,143,6,143,82,144,13,144,79,144,200,145,62,145,201,145,236,146,143,146,206,147,32,147,32,147,66,147,112,147,176,148,2,148,102,148,220,149,100,149,254,150,134,150,252,151,132,151,250,152,94,152,212,153,92,153,210,154,54,154,172,155,16,155,98,155,198,156,60,156,196,157,58,157,158,158,20,158,120,158,202,159,46,159,164,160,8,160,90,160,190,161,16,161,80,161,162,162,6,162,124,163,4,163,122,163,222,164,84,164,184,165,10,165,110,165,228,166,72,166,154,166,254,167,80,167,144,167,226,168,70,168,188,169,32,169,114,169,214,170,40,170,104,170,186,171,30,171,112,171,176,172,2,172,66,172,112,172,176,173,2,173,102,173,220,174,100,174,218,175,62,175,180,176,24,176,106,176,206,177,68,177,168,177,250,178,94,178,176,178,240,179,66,179,166,180,28,180,128,180,210,181,54,181,136,181,200,182,26,182,126,182,208,183,16,183,98,183,162,183,208,184,16,184,98,184,198,185,60,185,160,185,242,186,86,186,168,186,232,187,58,187,158,187,240,188,48,188,130,188,194,188,240,189,48,189,130,189,230,190,56,190,120,190,202,191,10,191,56,191,120,191,202,192,10,192,56,192,120,192,166,192,194,192,240,193,48,193,130,193,230,194,92,194,228,195,90,195,190,196,52,196,152,196,234,197,78,197,196,198,40,198,122,198,222,199,48,199,112,199,194,200,38,200,156,201,0,201,82,201,182,202,8,202,72,202,154,202,254,203,80,203,144,203,226,204,34,204,80,204,144,204,226,205,70,205,188,206,32,206,114,206,214,207,40,207,104,207,186,208,30,208,112,208,176,209,2,209,66,209,112,209,176,210,2,210,102,210,184,210,248,211,74,211,138,211,184,211,248,212,74,212,138,212,184,212,248,213,38,213,66,213,112,213,176,214,2,214,102,214,220,215,64,215,146,215,246,216,72,216,136,216,218,217,62,217,144,217,208,218,34,218,98,218,144,218,208,219,34,219,134,219,216,220,24,220,106,220,170,220,216,221,24,221,106,221,170,221,216,222,24,222,70,222,98,222,144,222,208,223,34,223,134,223,216,224,24,224,106,224,170,224,216,225,24,225,106,225,170,225,216,226,24,226,70,226,98,226,144,226,208,227,34,227,98,227,144,227,208,227,254,228,26,228,72,228,136,228,182,228,210,229,0,229,28,229,37,229,46,229,55,229,70,229,79,229,128,229,153,229,167,229,181,229,199,229,219,229,239,230,12,230,40,230,98,230,113,230,176,230,190,230,206,230,231,230,245,231,30,231,74,231,83,231,92,231,101,231,110,231,119,231,128,231,137,231,146,231,155,231,164,231,173,231,182,231,191,231,200,231,209,232,5,232,30,232,46,232,62,232,81,232,103,232,125,232,153,232,202,233,9,233,22,233,75,233,104,233,118,233,132,233,141,233,150,233,159,233,217,233,244,234,16,234,16,234,16,234,119,234,226,235,80,235,190,236,47,192,0,64,0,128,2,0,12,0,15,0,0,0,15,0,1,8,7,1,2,2,2,2,2,2,2,7,96,230,26,230,26,160,26,230,129,0,154,131,0,102,7,212,20,236,20,236,44,236,20,129,0,64,131,0,192,128,2,0,12,0,20,0,0,0,23,0,1,0,7,24,81,175,232,95,252,4,161,135,132,6,95,95,0,51,205,205,51,131,4,236,236,20,20,186,129,0,70,135,132,65,255,46,255,46,128,3,164,228,228,164,131,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,171,131,134,129,0,40,131,134,128,2,0,12,0,5,0,0,0,2,0,1,0,129,0,251,131,134,134,134,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,211,131,134,129,0,40,131,134,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,211,131,134,129,0,40,131,134,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,132,134,134,134,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,57,0,0,0,57,0,1,0,27,251,15,45,45,45,57,95,90,230,235,221,241,241,241,251,246,244,255,254,251,24,81,175,232,95,252,4,161,135,129,3,226,206,196,197,131,8,172,138,156,171,171,171,165,0,254,133,6,95,95,0,51,205,205,51,131,132,2,224,196,211,129,14,28,60,60,60,30,32,30,30,22,6,236,236,20,20,186,129,0,70,135,129,5,5,10,255,249,0,238,130,7,20,40,60,60,60,64,4,1,133,65,255,46,255,46,128,3,164,228,228,164,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,6,0,0,0,2,0,1,0,0,226,132,0,8,132,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,30,0,0,0,30,0,1,15,14,0,1,2,1,1,2,2,2,2,2,2,2,2,2,2,14,26,125,236,40,177,20,0,40,230,40,206,40,230,40,230,129,5,84,84,0,217,38,164,130,3,210,46,0,92,14,239,156,10,196,73,0,10,226,20,226,40,226,20,226,20,129,5,182,182,0,246,157,74,130,3,37,219,0,182,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,87,0,0,0,77,32,1,0,43,170,170,20,56,94,94,94,65,40,170,170,10,250,232,232,232,223,216,24,24,170,170,230,230,10,10,170,170,0,45,94,94,94,54,20,170,170,0,244,232,232,232,25,70,131,128,14,154,154,154,186,216,3,51,51,51,4,4,4,252,246,251,133,13,35,231,231,35,4,205,205,205,249,30,63,102,102,102,130,4,4,10,8,4,4,131,26,25,1,1,3,3,1,2,3,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,3,2,1,25,56,0,196,0,56,100,20,9,0,236,56,56,30,56,0,232,196,196,196,232,0,56,0,20,61,100,5,64,64,20,224,224,242,134,12,32,32,32,8,246,222,192,192,192,0,10,14,14,0,128,2,0,12,0,38,0,0,0,32,0,1,0,21,246,14,14,14,1,246,238,225,222,49,39,8,246,201,148,148,148,226,235,243,222,233,131,136,10,80,86,94,94,94,45,0,162,162,162,169,133,128,6,236,236,236,246,0,249,248,132,3,25,56,56,56,136,134,12,2,5,205,190,175,175,175,217,0,81,81,81,81,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,34,0,0,0,34,0,1,0,19,170,170,0,49,94,94,94,49,0,170,170,0,232,232,232,0,24,24,170,170,131,128,8,154,154,154,205,0,51,102,102,102,141,19,56,56,0,227,196,196,196,227,0,56,56,0,20,20,20,0,236,236,56,56,131,128,8,75,75,75,42,0,214,181,181,181,141,0,128,2,0,12,0,39,0,0,0,39,0,1,0,131,19,170,170,0,49,94,94,94,49,0,170,170,0,232,232,232,0,24,24,170,170,131,13,51,205,205,51,0,154,154,154,205,0,51,102,102,102,141,131,19,56,56,0,227,196,196,196,227,0,56,56,0,20,20,20,0,236,236,56,56,131,13,224,32,32,224,0,75,75,75,42,0,214,181,181,181,141,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,17,0,0,0,17,0,1,8,7,1,2,2,2,2,2,2,2,7,24,170,24,232,24,232,24,232,129,5,154,0,205,51,0,102,7,236,56,236,20,236,20,236,20,129,5,64,0,32,224,0,192,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,171,131,134,129,0,40,131,134,128,2,0,12,0,5,0,0,0,2,0,1,0,129,0,251,131,134,134,134,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,211,131,134,129,0,40,131,134,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,211,131,134,129,0,40,131,134,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,132,134,134,134,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,75,0,0,0,52,32,1,0,7,247,253,1,1,1,7,10,10,64,255,126,27,231,214,197,197,197,223,247,242,240,251,250,247,24,24,170,170,24,24,232,232,24,24,232,232,24,24,232,232,131,129,5,253,250,239,248,10,20,130,8,227,216,194,171,171,171,165,0,254,133,7,154,154,0,51,205,205,51,102,129,0,102,131,17,16,0,1,2,2,1,3,3,3,3,4,2,2,2,2,2,2,2,128,2,252,246,252,129,10,50,20,20,236,56,236,20,236,20,236,20,130,4,247,246,0,50,60,130,5,64,0,32,224,0,192,128,2,0,12,0,89,0,0,0,55,32,1,0,12,246,227,230,237,55,39,3,246,227,168,168,168,209,130,21,215,164,164,164,213,0,255,255,254,254,232,236,242,251,0,8,18,24,24,24,18,7,131,4,12,24,24,24,33,131,129,23,2,5,80,84,94,94,94,56,0,231,207,206,50,50,50,4,216,191,162,162,162,163,168,171,133,6,246,227,216,228,243,251,251,129,4,251,244,253,0,11,132,19,18,0,1,1,1,1,3,3,2,1,2,3,1,2,4,1,4,5,10,1,129,1,2,20,129,1,62,34,129,8,62,62,0,20,20,0,236,236,246,129,11,254,10,215,175,0,36,38,218,0,39,81,81,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,61,0,0,0,57,32,1,0,29,10,20,24,203,214,232,253,10,51,92,92,92,36,216,254,4,105,80,24,24,232,232,131,136,197,232,232,232,244,5,131,130,15,182,176,167,164,164,164,200,236,12,31,31,31,225,96,98,98,129,7,98,225,223,223,236,231,232,245,132,17,16,1,1,1,1,1,2,3,3,2,1,1,2,2,1,1,1,2,6,244,236,30,25,15,0,194,129,3,156,0,236,20,64,0,130,128,1,10,20,129,14,80,81,81,81,20,201,45,188,188,0,188,45,45,45,0,0,128,2,0,12,0,13,0,0,0,13,0,1,6,5,1,2,2,2,2,2,5,24,170,24,16,24,232,129,3,205,51,0,102,5,236,56,236,0,236,20,129,3,33,223,0,192,128,2,0,12,0,66,0,0,0,49,32,1,0,33,246,16,14,14,14,0,246,233,220,225,49,37,7,246,198,148,148,148,209,246,244,242,242,222,222,238,66,66,222,222,246,246,222,222,131,129,0,17,132,14,12,23,103,99,94,94,94,44,0,225,162,162,162,162,162,131,6,206,206,0,52,206,206,52,131,16,15,0,4,1,1,2,1,1,3,3,3,3,1,4,2,2,2,128,4,236,246,0,18,20,129,0,56,129,4,20,190,20,0,20,131,11,250,246,195,175,0,81,81,0,30,0,30,222,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,11,0,0,0,11,0,1,6,5,1,2,2,2,2,2,5,86,232,24,170,24,232,131,1,205,51,5,200,20,236,56,236,20,131,1,32,224,128,2,0,12,0,15,0,0,0,19,32,1,8,7,0,2,3,2,2,2,2,2,129,5,86,232,24,170,24,232,1,51,205,131,1,205,51,6,5,5,2,2,2,2,2,5,200,20,236,56,236,20,131,1,32,224,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,13,0,0,0,13,0,1,6,5,1,2,2,2,2,2,5,55,201,24,232,24,232,129,0,154,129,0,102,5,218,38,236,20,236,20,129,0,57,129,0,199,128,2,0,12,0,59,0,0,0,64,32,1,0,15,31,52,54,54,202,202,251,31,51,86,86,86,232,232,232,250,131,3,50,50,206,206,133,1,40,40,131,2,236,236,255,129,5,208,146,146,146,180,196,129,5,196,227,236,0,154,154,132,0,102,129,1,102,102,129,0,102,131,19,18,0,3,2,1,1,1,1,1,2,1,1,3,2,2,2,2,2,2,2,18,254,208,38,13,254,233,202,202,20,20,20,236,30,209,39,236,30,0,202,128,9,85,80,85,85,85,79,85,0,85,43,64,0,149,6,85,0,85,0,192,0,192,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,64,0,0,0,49,32,1,0,32,252,2,6,6,6,12,15,15,131,0,229,202,202,202,228,252,247,245,0,255,252,55,55,201,201,24,24,232,232,24,24,232,232,131,129,5,253,250,239,248,10,20,130,8,227,216,194,171,171,171,165,0,254,133,3,154,154,0,102,129,0,102,131,16,15,0,1,2,2,1,2,1,3,3,3,4,2,2,2,2,2,15,20,16,10,16,20,40,20,70,40,40,218,38,236,20,236,20,130,1,247,246,129,1,50,60,130,0,57,129,0,199,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,41,0,0,0,33,32,1,0,128,14,2,24,24,172,172,207,0,49,86,86,86,232,232,232,3,129,1,40,40,131,129,0,242,129,4,203,166,166,166,204,131,2,243,0,102,129,0,102,131,10,9,1,2,2,1,1,3,2,1,3,2,7,246,236,70,34,0,200,20,20,129,128,8,10,45,85,85,10,0,10,192,0,0,128,2,0,12,0,5,0,0,0,5,0,1,0,128,0,5,131,133,128,0,60,131,133,0,128,2,0,12,0,43,0,0,0,33,0,1,0,16,216,216,235,24,64,90,90,232,232,231,227,221,24,24,170,170,110,64,0,144,1,42,232,131,5,40,188,188,171,167,203,129,3,224,227,6,40,132,1,214,172,132,129,17,242,222,209,202,202,20,20,18,12,5,236,236,56,56,176,9,89,20,131,128,4,80,80,66,44,16,138,1,180,180,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,9,0,0,0,9,0,1,4,3,1,2,2,2,3,24,170,24,232,129,1,154,0,3,236,56,236,20,129,1,64,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,19,0,0,0,19,32,1,0,11,35,60,201,211,24,24,170,170,24,24,232,232,131,136,1,154,154,132,6,5,1,2,2,2,2,2,5,186,20,236,56,236,20,131,1,64,0,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,5,0,1,0,128,0,216,131,133,128,0,40,131,133,0,128,2,0,12,0,23,0,0,0,20,0,1,0,131,5,180,180,232,232,180,180,65,255,70,255,70,131,128,5,171,0,85,0,154,154,136,131,1,216,216,129,3,216,216,36,36,131,6,226,60,30,196,0,65,65,136,128,2,0,12,0,52,0,0,0,40,0,1,0,23,21,4,250,124,78,78,94,220,24,24,178,178,36,162,196,196,132,6,1,250,78,78,232,232,131,2,80,194,194,129,65,0,164,0,164,0,80,131,0,80,65,0,164,0,164,129,2,194,194,80,135,130,13,186,192,212,206,0,236,236,44,44,0,50,44,64,70,129,4,10,212,212,20,20,131,2,156,226,226,131,0,156,131,0,156,131,2,226,226,156,135,0,128,2,0,12,0,31,0,0,0,32,0,1,0,15,81,166,203,203,176,91,83,83,24,24,178,178,78,78,232,232,131,128,65,0,252,0,252,129,65,255,4,255,4,140,64,255,102,2,74,54,54,64,0,154,10,182,202,202,236,236,54,54,202,202,20,20,131,128,1,36,36,129,1,220,220,140,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,58,0,0,0,57,0,1,0,28,55,55,25,63,79,79,79,232,232,232,253,17,15,81,166,203,203,176,91,83,83,24,24,178,178,78,78,232,232,131,128,4,180,179,189,233,40,129,5,40,16,11,15,5,0,65,0,252,0,252,129,65,255,4,255,4,140,12,136,146,217,214,203,203,203,20,20,20,18,255,227,64,255,102,2,74,54,54,64,0,154,10,182,202,202,236,236,54,54,202,202,20,20,131,128,3,86,68,59,24,131,6,231,222,236,245,0,36,36,129,1,220,220,140,128,2,0,12,0,57,0,0,0,57,0,1,0,129,26,226,8,24,24,24,177,177,177,198,218,216,81,166,203,203,176,91,83,83,24,24,178,178,78,78,232,232,131,128,4,180,179,192,233,40,129,5,40,18,14,17,5,0,65,0,252,0,252,129,65,255,4,255,4,140,12,249,3,250,247,236,236,236,53,53,53,51,32,4,64,255,102,2,74,54,54,64,0,154,10,182,202,202,236,236,54,54,202,202,20,20,131,128,3,86,68,59,24,131,6,233,225,238,245,0,36,36,129,1,220,220,140,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,13,0,0,0,13,0,1,6,5,3,4,2,1,3,1,5,24,232,94,94,162,162,129,3,152,0,94,0,5,236,20,196,196,60,60,129,3,81,0,175,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,171,131,134,129,0,40,131,134,128,2,0,12,0,5,0,0,0,5,0,1,0,129,0,251,131,134,134,128,0,236,132,0,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,211,131,134,129,0,40,131,134,128,2,0,12,0,6,0,0,0,5,0,1,0,128,1,251,211,131,134,129,0,40,131,134,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,132,134,134,134,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,133,128,0,236,131,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,70,0,0,0,52,32,1,0,36,230,236,240,240,240,1,1,139,240,201,177,180,180,180,221,230,223,223,234,235,230,0,24,24,24,0,232,232,232,0,94,94,94,0,162,162,162,131,129,17,7,14,254,14,4,248,253,245,232,222,216,178,171,171,171,165,0,254,136,7,152,152,0,94,94,94,0,152,131,16,15,0,1,2,2,3,4,3,2,1,1,5,4,2,1,3,1,128,1,247,236,129,10,70,30,20,20,14,236,20,196,196,60,60,9,246,246,0,246,0,20,50,50,0,250,129,3,81,0,175,0,0,128,2,0,12,0,39,32,0,0,42,0,1,0,13,12,0,2,1,1,2,2,3,1,2,2,1,2,4,128,11,20,24,206,230,0,87,87,10,6,24,0,232,130,6,184,168,164,0,43,92,92,130,128,12,250,240,236,246,247,247,3,20,236,193,193,193,224,130,7,236,245,0,10,20,20,20,9,131,131,12,81,81,81,81,81,81,38,0,217,175,175,175,175,139,128,2,0,12,0,22,0,0,0,17,0,1,10,9,0,1,1,1,4,4,2,1,3,1,9,246,55,10,201,24,232,94,94,162,162,128,2,226,0,30,129,3,152,0,94,0,9,60,0,196,0,236,20,196,196,60,60,133,3,81,0,175,0,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,0,2,0,12,0,53,32,0,0,64,32,1,18,17,0,4,2,3,2,1,4,2,1,1,1,1,2,3,4,2,2,2,128,0,26,129,0,206,129,10,230,0,24,40,40,0,164,0,230,0,230,133,11,164,0,162,162,162,94,94,0,210,46,0,92,22,21,6,2,1,2,1,1,1,2,2,1,2,1,1,1,1,1,1,1,3,2,2,2,21,236,61,90,48,90,68,15,216,20,236,208,208,222,236,19,60,60,60,216,20,216,20,134,14,74,0,74,74,192,182,182,182,228,7,43,37,219,0,182,0,128,2,0,12,0,43,0,0,0,32,32,1,0,21,170,170,20,56,94,94,94,56,20,170,170,20,255,232,232,232,255,20,24,24,170,170,131,9,50,204,204,204,243,25,62,102,102,102,130,4,14,25,37,50,50,135,10,9,1,1,4,2,2,1,3,3,2,2,9,56,0,186,0,56,0,20,0,236,56,3,24,24,215,192,130,0,216,129,128,2,0,12,0,44,0,0,0,44,0,1,0,21,170,170,20,56,94,94,94,56,20,170,170,20,0,232,232,232,0,20,24,24,170,170,131,17,25,179,179,179,218,0,36,77,77,77,231,231,231,244,0,12,25,25,135,21,56,56,0,223,186,186,186,223,0,56,56,0,11,20,20,20,11,0,236,236,56,56,131,17,241,49,49,49,26,5,239,217,217,217,25,25,25,24,25,6,241,241,135,0,128,2,0,12,0,52,0,0,0,32,32,1,0,10,50,61,54,54,54,202,202,202,6,50,248,129,14,24,24,24,0,232,232,232,0,94,94,94,0,162,162,162,131,129,8,10,0,236,236,0,219,164,164,164,136,7,152,152,0,94,94,94,0,152,131,10,9,1,3,2,3,6,4,2,1,3,1,9,246,215,41,20,236,20,196,196,60,60,130,0,85,129,3,81,0,175,0,0,128,2,0,12,0,47,0,0,0,45,0,1,0,25,170,170,40,67,94,94,94,67,40,170,170,40,9,232,232,232,9,40,24,24,170,170,106,80,216,232,131,9,51,205,205,205,242,20,58,102,102,102,130,4,10,20,35,51,51,139,25,56,56,0,223,186,186,186,223,0,56,56,0,9,20,20,20,9,0,236,236,56,56,186,246,60,20,131,9,232,40,40,40,19,0,225,192,192,192,132,2,244,232,232,139,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,81,0,0,0,78,0,1,0,128,4,10,23,24,12,5,129,31,48,98,98,98,86,66,165,217,24,24,24,7,10,254,250,235,54,49,19,10,206,158,158,158,155,154,66,27,232,232,232,243,131,129,16,251,246,141,151,162,162,162,192,221,237,17,30,121,102,60,20,19,130,16,1,12,89,88,94,94,94,59,20,14,248,247,161,177,186,221,238,132,129,37,236,236,248,247,6,0,216,190,190,190,197,206,0,249,236,236,236,6,30,15,33,20,226,249,8,30,48,66,66,66,60,50,31,22,20,20,20,252,131,129,14,2,0,81,82,81,81,81,55,20,251,233,231,215,224,8,132,16,247,0,175,168,175,175,175,204,236,6,9,10,8,3,234,10,14,132,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,128,0,236,131,133,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,128,0,236,131,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,5,0,1,0,128,0,251,131,133,128,0,236,131,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,68,0,0,0,54,32,1,0,15,26,26,26,13,0,6,239,230,70,55,28,0,211,172,172,172,134,15,46,96,96,96,61,30,112,110,230,226,0,243,230,230,230,244,131,133,7,3,0,80,94,100,100,100,53,132,18,154,154,154,154,154,199,239,9,50,60,40,30,0,226,236,209,203,225,239,132,19,18,2,1,3,1,1,3,3,2,2,4,2,3,1,2,1,1,1,1,3,3,236,245,15,20,129,0,56,130,8,200,230,0,186,20,80,0,9,20,131,1,181,181,130,6,73,35,188,176,181,0,206,130,0,0,2,0,12,0,42,32,0,0,45,32,1,13,12,2,3,3,3,1,2,1,1,1,2,3,2,2,12,26,26,164,92,92,0,10,16,26,0,230,26,0,7,206,206,206,162,0,94,94,89,130,1,206,50,14,13,3,1,1,1,2,3,1,2,2,1,2,2,3,2,13,236,236,236,60,60,196,196,0,236,236,0,20,236,0,8,8,25,32,32,0,81,0,175,175,130,1,32,224,0,128,2,0,12,0,8,0,0,0,8,0,1,4,3,1,2,2,2,3,55,201,24,232,130,0,102,3,218,38,236,20,130,0,192,128,2,0,12,0,12,0,0,0,14,32,1,6,5,0,2,3,2,2,2,129,3,55,201,24,232,1,51,205,130,0,102,4,3,5,2,2,2,3,218,38,236,20,130,0,192,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,2,4,3,5,3,24,170,86,232,128,2,206,156,0,3,236,56,200,20,128,2,37,75,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,28,0,0,0,39,32,1,13,12,0,1,1,1,1,2,1,1,1,3,4,3,5,12,57,88,87,87,80,236,236,24,57,24,170,86,232,0,80,129,9,1,247,0,24,76,80,0,206,156,0,12,11,0,1,1,1,1,2,1,1,4,4,3,5,128,3,216,203,190,176,130,3,236,56,200,20,11,196,0,246,231,251,0,230,197,0,37,75,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,69,0,0,0,61,32,1,0,6,220,226,230,230,230,247,247,64,255,119,28,220,184,164,170,170,170,211,220,213,213,224,225,220,0,24,24,24,170,170,170,211,0,86,86,86,232,232,232,244,131,129,17,7,14,254,14,4,248,248,240,228,220,216,178,171,171,171,165,0,254,134,3,206,156,156,156,137,19,18,0,1,2,2,1,1,1,1,1,1,1,3,2,1,1,4,4,3,5,18,246,237,226,246,246,236,236,255,35,60,60,20,10,10,4,236,56,200,20,3,246,246,0,246,129,12,247,249,255,11,20,50,50,0,250,0,37,75,0,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,15,0,0,0,15,0,1,0,7,92,25,158,5,253,100,233,166,131,130,1,163,163,134,2,196,236,50,129,2,206,20,60,131,130,1,80,80,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,43,0,0,0,39,0,1,0,6,84,24,156,236,236,25,231,129,1,186,70,129,6,25,231,20,20,100,232,172,131,130,1,176,176,129,65,0,128,0,128,129,65,0,128,0,128,129,1,176,176,134,6,226,236,40,0,10,236,20,129,1,30,226,129,6,236,20,246,0,216,20,30,131,130,1,90,90,129,1,166,166,129,1,166,166,129,1,90,90,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,27,0,0,0,27,0,1,0,11,106,36,24,150,219,232,24,36,106,232,220,150,131,128,0,31,129,0,225,129,0,224,129,0,31,132,11,176,236,216,80,20,40,216,236,176,40,20,80,131,128,0,236,129,0,20,129,0,20,129,0,236,132,0,128,2,0,12,0,23,0,0,0,24,0,1,0,11,60,24,159,5,251,97,232,196,55,55,201,201,131,130,1,151,151,131,1,146,146,132,2,218,236,70,129,6,186,20,38,218,218,38,38,131,0,196,129,1,60,60,129,0,196,135,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,251,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,18,0,0,0,18,0,1,8,7,0,1,1,1,2,2,2,2,7,200,24,56,232,24,232,24,232,4,224,154,22,102,154,129,0,102,7,10,236,246,20,236,20,236,20,128,3,64,0,192,64,129,0,192,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,20,131,133,133,133,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,20,131,133,133,133,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,20,131,133,133,133,128,2,0,12,0,6,0,0,0,2,0,1,0,128,1,236,10,131,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,128,0,236,131,133,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,20,131,133,133,133,128,2,0,12,0,21,32,0,0,16,0,1,0,6,5,1,2,2,2,2,2,5,55,201,24,232,24,232,129,0,156,129,0,100,3,215,215,41,41,139,132,3,74,74,0,182,129,0,182,131,128,2,0,12,0,92,0,0,0,84,0,1,0,45,62,59,81,81,81,42,236,24,24,0,251,229,229,229,232,232,4,13,24,24,24,2,2,20,66,60,95,98,25,1,176,176,176,203,226,244,40,81,81,81,94,100,77,69,41,12,131,128,6,104,247,200,29,101,100,96,130,3,252,219,140,149,130,20,240,224,223,208,208,208,212,215,22,32,35,35,35,211,194,178,178,178,189,218,247,130,2,244,5,9,132,45,228,218,246,246,246,252,0,236,236,0,30,60,60,60,20,20,246,242,236,236,236,230,226,217,189,198,198,201,233,246,70,70,70,47,30,17,255,246,246,246,218,216,218,214,222,238,131,129,5,60,236,210,186,186,186,132,1,60,60,130,20,7,15,27,40,40,40,45,50,226,226,226,226,226,15,40,70,70,70,67,63,60,138,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,5,0,0,0,2,0,1,0,129,0,253,131,134,134,134,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,5,0,0,0,2,0,1,0,129,0,253,131,134,134,134,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,133,0,0,0,112,0,1,0,63,252,2,6,6,6,12,15,15,131,236,219,202,202,202,228,252,247,245,0,255,252,62,59,81,81,81,42,236,24,24,0,251,229,229,229,232,232,4,13,24,24,24,2,2,20,66,60,95,98,25,1,176,176,176,203,226,244,40,81,81,81,94,100,77,2,69,41,12,131,129,5,253,250,244,1,20,20,130,8,227,216,194,171,171,171,165,0,254,129,6,104,247,200,29,101,100,96,130,3,252,219,140,149,130,20,240,224,223,208,208,208,212,215,22,32,35,35,35,211,194,178,178,178,189,218,247,130,2,244,5,9,132,137,56,28,60,60,60,39,20,24,30,20,15,4,228,218,246,246,246,252,0,236,236,0,30,60,60,60,20,20,246,242,236,236,236,230,226,217,189,198,198,201,233,246,70,70,70,47,30,17,255,246,246,246,218,216,218,214,222,238,131,129,4,246,236,239,245,246,131,6,26,50,64,80,80,80,80,132,5,60,236,210,186,186,186,132,1,60,60,130,20,7,15,27,40,40,40,45,50,226,226,226,226,226,15,40,70,70,70,67,63,60,138,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,134,129,0,25,131,134,134,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,141,0,0,0,101,32,1,0,63,29,27,24,24,24,0,251,7,29,28,63,46,0,250,213,186,186,186,210,231,252,29,29,29,248,83,15,16,5,29,29,29,29,15,0,24,24,0,230,201,201,201,247,6,24,24,24,14,6,254,232,232,232,232,232,195,195,62,62,43,31,253,200,200,7,200,225,247,243,233,222,233,245,131,129,25,244,234,237,223,223,223,223,220,32,34,35,35,35,4,221,199,178,178,178,221,247,196,50,50,48,26,131,3,43,87,90,90,130,0,255,131,2,7,12,7,130,20,5,240,252,22,32,32,226,226,24,94,94,94,27,0,217,172,172,172,184,7,4,132,35,34,0,1,3,2,3,1,3,3,3,3,1,1,3,2,1,1,3,1,1,1,1,1,3,1,4,4,4,2,1,2,3,3,2,1,1,128,1,247,236,129,5,40,40,60,10,206,226,129,21,226,206,206,0,236,236,0,237,216,0,9,20,20,30,198,198,246,30,0,20,20,16,132,3,216,216,20,70,129,6,50,26,0,236,216,168,168,129,0,3,132,6,240,26,225,172,0,94,94,129,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,45,0,0,0,38,32,1,0,28,206,225,7,24,4,248,220,206,17,90,90,90,44,0,158,158,158,148,205,0,244,232,232,232,218,24,24,158,158,131,131,10,148,166,168,168,168,214,0,42,88,88,88,145,14,13,0,3,1,3,3,3,2,2,1,1,1,3,3,2,128,0,236,129,9,186,0,50,60,75,50,35,20,236,50,129,3,90,90,0,166,135,0,2,0,12,0,37,32,0,0,46,32,1,12,11,0,4,2,3,1,1,1,1,3,3,3,1,128,10,24,0,232,56,47,18,0,156,0,8,252,131,7,70,98,98,98,0,158,166,5,16,15,0,1,3,1,1,3,1,3,1,1,1,3,3,1,1,1,15,50,16,236,247,0,30,246,0,29,60,60,50,15,20,28,42,132,7,226,186,176,176,217,0,80,80,130,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,58,32,0,0,50,0,1,0,19,18,0,4,2,1,1,1,2,2,3,2,2,1,2,1,1,1,1,2,1,18,45,24,49,58,97,106,94,11,166,11,94,94,110,105,65,93,94,232,232,131,9,225,210,211,88,0,168,59,84,46,34,129,2,70,0,251,30,216,226,236,236,236,225,216,207,192,198,206,206,206,12,40,70,70,70,10,206,206,206,206,203,195,211,226,206,206,20,20,131,138,8,186,166,166,166,212,0,110,110,110,64,0,170,0,100,140,0,128,2,0,12,0,63,32,0,0,80,0,1,0,21,20,2,2,1,1,1,1,3,2,2,1,1,2,4,3,5,2,2,2,1,1,1,20,101,10,0,248,237,232,0,102,48,0,210,162,11,24,110,80,232,248,10,0,236,10,9,21,0,251,252,0,164,0,92,92,92,133,3,40,206,0,90,40,196,198,200,221,246,0,7,16,20,20,20,10,198,198,198,233,10,37,66,66,66,37,10,251,236,236,236,246,0,226,185,178,198,196,20,20,15,10,251,251,10,131,129,19,229,196,186,0,3,13,29,40,40,86,86,10,220,170,170,170,199,226,26,86,129,2,241,226,240,134,6,40,21,0,226,30,20,216,131,128,2,0,12,0,63,0,0,0,54,0,1,0,34,47,60,196,209,45,35,24,24,24,37,49,58,97,106,94,94,94,11,219,166,166,166,11,94,94,94,94,110,105,65,93,94,94,232,232,131,139,16,225,210,210,211,88,88,88,42,0,168,168,168,59,84,46,46,34,129,0,70,129,0,251,131,34,236,236,20,20,216,226,236,236,236,225,216,207,192,198,206,206,206,12,40,70,70,70,10,206,206,206,206,203,195,211,226,206,206,20,20,131,142,8,186,166,166,166,212,0,110,110,110,64,0,170,0,100,140,128,2,0,12,0,64,32,0,0,58,0,1,0,21,20,0,2,2,4,2,1,1,1,2,2,3,2,2,1,2,1,1,1,1,2,1,129,18,45,24,49,58,97,106,94,11,166,11,94,94,110,105,65,93,94,232,232,1,42,214,131,9,225,210,211,88,0,168,59,84,46,34,129,2,70,0,251,129,32,20,20,216,226,236,236,236,225,216,207,192,198,206,206,206,12,40,70,70,70,10,206,206,206,206,203,195,211,226,206,206,20,20,131,0,196,129,0,196,138,8,186,166,166,166,212,0,110,110,110,64,0,170,0,100,140,0,128,2,0,12,0,61,0,0,0,43,32,1,0,29,1,13,24,24,24,12,1,244,232,232,232,232,175,175,72,72,37,1,220,180,180,180,222,1,247,251,243,232,13,18,131,129,2,11,12,8,130,4,6,24,41,72,72,129,13,43,94,94,94,44,0,217,162,162,162,162,162,0,5,132,14,13,0,4,1,1,3,1,2,2,3,3,3,2,1,1,13,246,236,242,246,20,20,236,188,246,64,246,13,20,20,131,9,241,242,240,16,182,0,84,84,84,0,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,5,0,0,0,2,0,1,0,129,0,253,131,134,134,134,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,103,0,0,0,87,0,1,0,1,246,252,130,46,255,253,253,247,232,200,187,196,196,196,237,246,239,239,250,251,246,1,13,24,24,24,12,1,244,232,232,232,232,175,175,72,72,37,1,220,180,180,180,222,1,247,251,243,232,13,18,131,129,18,7,14,3,255,6,4,251,0,243,230,223,216,178,171,171,171,165,0,254,130,2,11,12,8,130,4,6,24,41,72,72,129,13,43,94,94,94,44,0,217,162,162,162,162,162,0,5,132,132,0,255,131,41,255,29,60,60,60,54,20,22,30,20,17,4,246,241,236,236,236,242,246,4,20,20,20,20,236,236,188,188,219,246,25,64,64,64,25,246,254,13,20,20,11,252,131,131,14,253,252,251,0,248,253,2,7,26,50,48,80,80,80,80,138,18,248,241,242,240,240,16,16,229,182,182,182,221,0,41,84,84,84,84,84,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,61,0,0,0,55,32,1,0,29,255,11,24,24,24,24,81,81,184,184,219,255,36,76,76,76,34,255,9,6,13,24,242,238,255,242,232,232,232,244,131,129,4,250,232,216,184,184,129,13,212,162,162,162,212,0,38,94,94,94,100,104,20,2,130,2,246,244,247,132,18,17,0,1,1,1,1,2,2,1,2,3,1,2,2,1,1,3,1,3,17,10,251,236,236,236,20,68,68,10,192,192,10,244,236,236,10,14,20,129,12,7,15,15,16,240,26,74,0,214,172,178,182,20,130,0,128,2,0,12,0,66,0,0,0,63,0,1,0,128,10,15,24,200,214,238,0,47,98,98,98,47,129,8,12,195,213,232,232,232,238,249,195,129,5,85,110,24,24,232,232,64,255,120,131,130,14,172,165,158,158,158,204,242,12,40,40,40,233,233,237,246,131,5,40,40,216,84,84,84,129,1,114,216,131,128,11,244,236,236,241,250,0,227,194,194,194,211,226,130,6,10,20,20,20,16,7,226,129,6,176,0,236,236,20,20,90,131,130,14,80,80,80,80,80,42,10,238,206,206,206,41,41,40,20,131,5,206,206,31,166,166,166,129,1,166,30,131,128,2,0,12,0,29,32,0,0,20,0,1,10,9,2,1,2,1,1,1,1,2,3,2,9,8,2,1,2,1,2,1,2,3,2,8,59,0,232,232,251,0,197,24,232,130,5,98,98,98,0,214,42,9,221,0,20,15,11,3,0,35,236,20,130,6,176,176,176,176,0,35,221,0,128,2,0,12,0,78,0,0,0,77,0,1,0,45,40,33,24,24,24,32,40,47,89,106,94,94,94,29,236,203,166,166,166,207,236,28,94,94,94,94,106,90,60,24,30,0,48,94,94,94,232,232,232,243,0,94,94,84,232,232,131,129,0,4,132,0,250,129,11,236,24,88,88,88,42,0,220,168,168,168,219,131,0,3,129,3,150,152,155,205,143,28,216,226,236,236,236,225,216,207,192,198,206,206,206,222,238,24,70,70,70,24,236,220,206,206,206,206,203,195,211,130,13,229,206,206,206,20,20,20,11,0,206,206,206,20,20,131,138,10,146,156,166,166,166,212,0,54,110,110,110,65,0,140,0,170,0,100,132,3,50,50,49,24,132,0,1,137,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,31,0,0,0,31,32,1,0,19,94,94,94,44,0,162,162,160,150,170,195,197,214,232,232,232,24,24,162,162,131,128,5,4,44,88,88,88,4,144,11,10,1,1,2,2,2,1,1,1,4,2,2,10,206,206,251,50,58,65,38,20,20,236,50,3,196,181,166,196,134,0,128,2,0,12,0,36,0,0,0,37,32,1,0,131,19,94,94,94,44,0,162,162,160,150,170,195,197,214,232,232,232,24,24,162,162,131,10,42,214,214,42,0,4,44,88,88,88,4,144,13,12,1,2,2,1,2,2,2,1,1,1,4,2,2,12,236,0,206,206,251,50,58,65,38,20,20,236,50,5,20,216,196,181,166,196,134,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,221,131,133,133,133,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,216,131,133,133,133,128,2,0,12,0,46,32,0,0,56,0,1,0,14,13,1,2,2,2,2,2,2,2,2,3,2,1,1,3,13,59,197,24,60,196,232,24,197,15,43,251,230,203,230,4,12,0,172,0,172,129,6,86,95,25,254,254,25,95,27,221,221,35,35,236,236,221,221,35,35,20,20,236,236,35,35,0,237,226,226,226,237,0,18,30,30,30,18,131,132,1,90,90,129,3,90,90,0,166,129,12,166,226,226,237,0,18,30,30,30,18,0,237,226,131,0,128,2,0,12,0,17,0,0,0,17,0,1,8,7,1,2,2,2,2,2,2,2,7,59,197,24,60,196,232,24,197,129,2,172,0,172,129,0,84,7,221,35,236,221,35,20,236,35,129,2,90,0,90,129,0,164,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,82,32,0,0,81,0,1,0,28,27,0,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,3,2,1,1,3,2,3,2,1,1,3,27,18,24,0,51,101,98,94,232,236,240,246,0,59,197,94,232,22,50,2,237,210,237,57,85,37,16,245,16,128,3,154,152,158,202,132,0,2,132,11,95,25,254,254,25,95,95,25,254,254,25,95,42,236,236,0,224,196,196,196,20,20,20,11,0,236,236,60,60,196,196,20,20,32,13,2,2,2,13,32,50,62,62,62,50,238,219,208,208,208,219,238,0,12,12,12,132,128,3,80,80,77,39,132,0,1,136,23,226,226,237,0,18,30,30,30,18,0,237,226,226,226,237,0,18,30,30,30,18,0,237,226,131,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,100,0,0,0,93,0,1,0,48,8,14,18,18,18,24,27,27,143,248,231,214,214,214,240,8,3,1,12,11,8,59,59,197,197,24,24,60,60,196,196,232,232,24,24,197,197,251,15,43,43,43,15,251,230,203,203,203,230,131,129,5,253,250,239,0,10,20,130,8,227,216,194,171,171,171,165,0,254,129,1,12,12,129,1,172,172,129,3,172,172,0,86,129,12,86,95,95,66,46,25,254,254,254,25,46,66,95,131,48,10,10,10,10,10,10,10,10,30,10,38,70,70,70,49,30,34,40,30,25,14,221,221,35,35,236,236,221,221,35,35,20,20,236,236,35,35,0,237,226,226,226,237,0,18,30,30,30,18,131,129,4,246,236,233,232,231,131,6,26,50,64,80,80,80,80,135,1,90,90,129,3,90,90,0,166,129,12,166,226,226,237,0,18,30,30,30,18,0,237,226,131,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,58,32,0,0,62,0,1,0,19,18,0,1,1,1,1,5,1,1,1,2,2,2,2,2,3,2,1,1,3,18,18,24,0,51,94,232,238,249,0,18,94,94,232,58,86,38,17,246,17,128,3,154,152,157,202,132,0,84,129,5,95,25,254,254,25,95,130,8,229,206,206,206,20,20,20,16,7,130,17,206,206,206,206,20,20,246,227,216,216,216,227,246,8,20,20,20,8,131,128,3,86,81,75,39,132,3,255,255,0,166,129,0,166,131,11,226,226,237,0,18,30,30,30,18,0,237,226,131,0,128,2,0,12,0,36,0,0,0,35,32,1,0,20,18,24,0,51,101,98,94,232,236,239,242,249,0,18,18,94,94,94,94,232,232,131,128,3,154,152,157,202,135,0,84,129,0,84,135,11,10,1,1,1,1,5,2,1,2,2,2,2,129,3,229,206,20,7,129,2,206,206,20,5,86,81,75,39,0,255,129,0,166,129,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,35,131,133,133,133,128,2,0,12,0,37,0,0,0,32,0,1,0,18,158,158,176,232,46,87,96,232,223,195,146,24,24,158,158,123,122,0,232,131,5,30,186,186,186,200,230,129,2,1,30,30,132,0,30,133,130,15,241,220,209,206,20,19,9,0,236,236,50,50,206,0,50,20,131,5,226,50,50,50,41,18,129,2,241,226,226,139,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,37,0,0,0,32,0,1,0,18,158,158,176,232,46,87,96,232,223,195,146,24,24,158,158,123,122,0,232,131,5,30,186,186,186,200,230,129,2,1,30,30,132,0,30,133,130,15,241,220,209,206,20,19,9,0,236,236,50,50,206,0,50,20,131,5,226,50,50,50,41,18,129,2,241,226,226,139,128,2,0,12,0,43,0,0,0,37,32,1,0,19,70,74,59,59,59,197,197,197,226,255,0,254,245,232,0,44,24,24,59,59,131,129,1,241,206,129,10,196,187,170,158,158,158,149,246,251,0,84,129,0,84,131,11,10,0,2,1,2,1,2,2,2,1,4,2,128,9,221,221,35,35,30,0,12,20,236,221,128,6,23,50,0,50,97,110,110,129,0,166,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,47,0,0,0,41,32,1,0,23,40,90,236,226,70,74,59,59,59,197,197,197,226,255,0,254,245,232,0,44,24,24,59,59,131,133,1,241,206,129,10,196,187,170,158,158,158,149,246,251,0,84,129,0,84,131,13,12,1,2,1,2,1,2,1,2,2,2,1,4,2,12,236,70,0,221,221,35,35,30,0,12,20,236,221,130,6,23,50,0,50,97,110,110,129,0,166,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,128,0,60,131,133,128,2,0,12,0,49,0,0,0,45,32,1,0,131,19,70,74,59,59,59,197,197,197,226,255,0,254,245,232,0,44,24,24,59,59,131,128,2,177,0,79,129,1,241,206,129,10,196,187,170,158,158,158,149,246,251,0,84,129,0,84,131,15,14,0,1,1,1,1,2,1,2,1,2,2,2,1,4,2,132,9,221,221,35,35,30,0,12,20,236,221,11,236,80,20,176,0,23,50,0,50,97,110,110,129,0,166,0,128,2,0,12,0,54,0,0,0,53,32,1,0,34,94,94,94,30,213,213,213,201,212,224,226,224,232,232,232,24,24,172,162,162,43,43,43,236,162,162,162,157,169,185,186,206,213,213,213,131,129,2,68,68,68,130,0,15,130,0,249,136,2,68,68,68,141,18,17,1,2,2,2,1,1,1,4,2,1,4,2,2,2,1,1,1,4,17,211,233,15,25,30,34,25,20,236,45,246,14,45,55,60,53,30,15,4,146,146,176,0,11,132,4,146,146,176,0,252,130,128,2,0,12,0,32,0,0,0,30,32,1,0,20,94,94,94,44,0,162,162,160,150,170,195,197,214,232,232,232,24,24,174,162,162,131,128,5,4,49,98,98,98,4,145,11,10,1,3,2,2,1,1,1,4,2,1,2,10,206,251,50,58,65,38,20,20,236,40,50,2,176,176,176,135,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,36,0,0,0,30,32,1,0,24,20,80,206,216,94,94,94,44,0,162,162,160,150,170,195,197,214,232,232,232,24,24,174,162,162,131,132,5,4,49,98,98,98,4,145,11,10,5,3,2,2,1,1,1,4,2,1,2,10,206,251,50,58,65,38,20,20,236,40,50,2,176,176,176,135,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,60,0,0,0,57,0,1,0,33,94,94,94,44,0,162,162,160,150,170,195,197,214,232,232,232,69,75,0,51,94,94,94,232,232,232,238,249,0,24,24,174,162,162,131,6,147,4,44,88,88,88,4,135,12,147,10,164,152,157,202,0,196,196,246,250,250,251,137,33,206,206,206,230,251,50,50,50,58,65,38,20,20,20,20,20,0,246,0,230,206,206,206,20,20,20,16,6,0,236,236,40,50,50,131,6,1,176,171,166,166,166,176,135,5,1,0,70,70,68,33,132,1,5,6,137,128,2,0,12,0,64,0,0,0,57,32,1,0,33,94,94,94,44,0,162,162,160,150,170,195,197,214,232,232,232,255,5,186,237,24,24,24,162,162,162,168,180,186,24,24,174,162,162,131,128,5,4,44,88,88,88,4,136,13,10,164,152,155,202,0,196,196,246,250,246,246,0,70,130,0,70,131,19,18,1,3,2,2,1,1,1,4,2,1,1,1,5,1,1,1,1,2,1,7,206,251,50,58,65,38,20,20,129,8,245,236,50,39,17,0,236,40,50,2,176,166,176,132,8,70,70,69,33,0,1,2,0,70,129,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,0,2,0,12,0,41,32,0,0,25,32,1,14,13,1,3,1,2,3,1,2,2,1,1,2,1,1,2,13,12,24,12,244,232,244,47,100,100,47,209,156,156,209,133,7,158,0,46,98,98,46,0,158,8,7,1,3,3,3,3,3,3,3,7,246,236,9,20,227,196,29,60,131,3,80,217,176,38,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,5,0,0,0,2,0,1,0,129,0,253,131,134,134,134,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,233,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,83,0,0,0,80,0,1,0,1,246,252,130,40,4,7,7,9,251,210,189,196,196,196,237,246,239,239,250,251,246,0,12,24,24,24,12,0,244,232,232,232,244,0,47,100,100,100,47,0,209,156,156,156,209,131,129,18,1,4,254,2,11,4,4,2,246,233,223,216,178,171,171,171,165,0,254,140,11,158,158,209,0,46,98,98,98,46,0,209,158,131,45,251,251,251,251,251,250,251,251,15,5,249,20,55,55,55,49,15,17,25,15,12,255,0,246,236,236,236,246,0,9,20,20,20,9,0,227,196,196,196,227,0,29,60,60,60,29,131,131,14,253,252,251,0,252,255,253,254,21,50,48,80,80,80,80,142,11,80,80,38,0,217,176,176,176,217,0,38,80,131,0,2,0,12,0,44,32,0,0,40,32,1,15,14,0,2,1,1,3,1,1,1,3,1,2,1,3,4,1,128,13,21,24,221,0,42,90,90,20,20,24,24,0,232,245,130,7,165,158,158,208,0,98,98,98,131,13,12,0,3,1,1,1,1,3,2,1,3,1,3,4,12,226,236,10,4,231,226,186,223,0,249,236,0,20,129,7,60,68,80,80,0,176,176,183,130,128,2,0,12,0,50,0,0,0,38,32,1,0,128,26,30,0,226,0,12,24,24,24,12,0,244,232,232,232,244,0,47,100,100,100,47,0,209,156,156,156,209,131,128,2,231,0,25,139,11,158,158,209,0,46,98,98,98,46,0,209,158,131,12,11,0,1,1,1,2,3,3,3,3,3,3,3,128,10,226,0,30,246,236,9,20,227,196,29,60,128,2,20,0,236,131,3,80,217,176,38,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,91,0,0,0,67,32,1,0,47,246,24,24,24,246,216,216,216,246,48,48,48,19,246,220,194,194,194,248,7,25,25,25,15,7,255,233,233,233,233,233,196,196,63,63,44,32,254,201,201,201,226,248,244,234,223,234,246,131,135,9,158,158,0,49,98,98,98,49,0,158,129,2,255,12,7,130,20,5,240,252,22,32,32,226,226,24,94,94,94,27,0,217,172,172,172,184,7,4,132,23,22,0,3,1,3,1,3,2,1,1,3,1,4,4,4,2,2,1,3,3,1,1,1,1,22,246,236,246,0,15,226,15,42,70,0,9,20,20,0,186,215,246,30,0,8,20,20,16,131,4,70,221,176,176,221,131,7,240,27,172,172,0,94,94,94,129,0,128,2,0,12,0,60,0,0,0,57,0,1,0,33,216,197,165,150,162,162,162,162,228,20,48,90,90,90,53,20,227,162,162,162,150,166,208,216,223,232,232,232,224,24,24,162,162,162,131,129,0,3,131,11,219,168,168,168,220,0,42,88,88,88,14,216,129,0,250,132,0,4,137,33,40,48,65,58,50,50,50,50,36,20,231,186,186,186,232,18,35,50,50,50,58,64,48,40,30,20,20,20,30,236,236,50,50,50,131,132,0,100,65,0,170,0,130,10,90,90,90,44,0,212,166,166,166,156,146,146,128,2,0,12,0,58,0,0,0,55,32,1,0,32,216,197,165,150,162,162,162,162,213,246,33,90,90,90,37,246,212,162,162,162,150,166,208,216,223,232,232,232,224,24,24,162,162,131,129,0,3,131,10,219,168,168,168,220,0,42,88,88,88,34,130,0,250,132,0,4,136,19,18,0,1,1,1,2,1,2,1,3,1,3,2,2,1,1,1,4,3,2,18,40,48,65,58,50,50,21,246,186,186,20,50,58,64,48,40,20,236,50,131,0,100,64,0,170,5,90,90,0,212,166,186,134,128,2,0,12,0,60,0,0,0,57,32,1,0,33,40,33,24,24,24,32,40,47,89,106,94,94,94,29,236,203,166,166,166,207,236,28,94,94,94,94,106,90,60,94,94,94,232,232,131,129,0,4,132,0,250,129,11,216,14,88,88,88,42,0,220,168,168,168,219,131,0,3,137,20,19,0,4,1,1,1,1,1,2,3,2,2,2,1,2,1,2,1,1,3,2,19,216,236,225,216,207,192,198,206,238,70,70,236,220,206,206,198,190,209,206,20,134,5,146,166,212,44,90,90,64,0,170,0,100,132,0,2,0,12,0,41,32,0,0,42,32,1,15,14,0,2,1,1,3,2,2,4,2,2,1,2,2,1,1,14,197,185,213,216,232,90,0,24,0,59,217,197,24,197,177,132,2,46,88,172,133,0,84,13,12,0,2,2,1,1,2,3,4,2,2,1,3,2,12,35,45,20,5,20,206,206,236,20,221,35,236,35,128,0,40,129,3,215,216,166,70,130,1,186,0,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,77,0,0,0,84,0,1,0,128,38,5,16,24,12,9,2,0,52,100,100,100,54,255,8,11,24,24,24,12,0,245,227,232,243,242,247,0,203,156,156,156,201,4,251,245,232,232,232,245,131,131,14,159,158,158,158,158,187,220,243,35,50,47,47,63,41,20,132,14,98,98,98,98,98,65,30,16,221,206,209,209,200,216,236,132,128,12,255,235,236,245,15,28,0,220,186,186,186,212,236,64,255,126,24,186,236,236,236,5,0,245,6,20,12,255,242,0,32,60,60,60,15,227,80,44,20,20,20,254,131,129,16,1,0,80,80,80,80,80,49,15,243,221,216,6,249,6,246,242,130,16,255,0,176,175,176,176,176,207,241,10,26,37,252,1,248,10,12,132,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,100,0,0,0,115,0,1,0,135,50,47,100,100,100,95,100,100,100,100,100,100,97,100,103,100,100,100,48,0,211,162,162,162,24,24,24,11,0,244,232,232,232,232,232,232,230,232,232,232,230,232,232,232,232,232,232,245,24,24,196,196,131,131,17,158,158,158,158,158,209,0,1,254,5,11,11,9,10,7,3,0,4,129,4,45,97,98,98,47,138,3,2,2,0,2,130,3,253,0,254,254,131,3,43,213,213,43,131,128,1,4,3,129,51,5,6,0,229,196,196,196,203,196,187,199,216,216,216,194,203,207,196,196,196,206,216,252,35,35,35,221,221,221,218,216,244,20,20,20,27,29,20,17,20,20,20,20,20,39,35,20,20,20,19,236,236,133,129,27,255,0,80,79,80,80,80,62,50,6,240,0,13,36,31,0,243,237,246,255,229,196,187,176,176,176,192,206,129,1,20,10,130,6,246,236,15,31,13,0,2,132,9,239,223,233,0,248,0,212,44,44,212,131,0,2,0,12,0,29,32,0,0,29,32,1,9,8,2,1,2,1,2,1,2,3,2,8,40,10,232,232,3,10,176,24,212,130,5,98,98,98,0,214,44,9,8,1,2,2,1,2,1,2,3,2,8,221,0,20,20,5,0,35,236,0,130,5,176,176,176,246,45,211,128,2,0,12,0,45,0,0,0,43,32,1,0,128,22,54,83,83,83,221,221,221,247,0,12,8,245,232,238,249,83,83,221,221,24,24,232,232,131,129,1,15,10,130,5,213,158,158,158,158,159,134,0,84,129,0,84,131,13,12,0,2,1,2,1,3,1,2,1,4,2,2,2,12,40,221,221,35,35,40,35,20,20,221,35,236,20,128,6,23,50,0,70,80,80,80,129,2,20,0,166,0,128,2,0,12,0,54,0,0,0,48,32,1,0,27,24,24,232,232,0,54,83,83,83,221,221,221,247,0,12,8,245,232,238,249,83,83,221,221,24,24,232,232,131,3,42,214,214,42,129,1,15,10,130,5,213,158,158,158,158,159,134,0,84,129,0,84,131,15,14,0,2,2,2,1,2,1,3,1,2,1,4,2,2,2,129,12,40,221,221,35,35,40,35,20,20,221,35,236,20,0,166,129,6,23,50,0,70,80,80,80,129,2,20,0,166,0,128,2,0,12,0,49,0,0,0,43,32,1,0,27,40,60,196,216,0,54,83,83,83,221,221,221,247,0,12,8,245,232,238,249,83,83,221,221,24,24,232,232,131,133,1,15,10,130,5,213,158,158,158,158,159,134,0,84,129,0,84,131,13,12,4,2,1,2,1,3,1,2,1,4,2,2,2,12,40,221,221,35,35,40,35,20,20,221,35,236,20,128,6,23,50,0,70,80,80,80,129,2,20,0,166,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,92,0,0,0,75,32,1,0,128,11,30,59,59,59,197,197,197,225,0,2,8,12,130,5,59,59,197,197,24,24,129,26,59,59,59,36,0,250,238,232,243,240,236,217,197,197,197,0,3,220,15,59,59,59,197,197,197,207,217,131,134,5,204,158,158,158,158,158,134,0,84,129,3,84,0,90,37,130,7,2,5,101,98,98,98,83,70,129,3,156,154,164,209,130,3,226,240,0,254,131,25,24,0,4,2,3,3,1,4,2,1,2,3,3,3,1,2,3,3,1,1,1,1,3,1,1,1,7,10,246,60,10,20,20,246,60,129,5,221,0,20,20,0,35,129,6,238,221,221,35,35,18,0,129,2,50,110,110,130,0,166,131,7,176,176,176,100,100,98,63,30,129,1,1,0,128,2,0,12,0,48,0,0,0,41,32,1,0,27,50,37,24,24,24,162,162,162,212,0,46,94,94,94,104,98,71,94,94,94,232,232,232,232,94,94,232,232,131,134,4,208,158,158,158,203,130,0,2,132,1,137,149,131,0,156,131,14,13,0,4,2,3,3,2,2,1,3,1,1,1,2,2,13,196,236,50,0,206,191,193,206,20,20,20,20,206,20,129,2,80,80,80,131,1,60,60,130,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,68,0,0,0,63,32,1,0,37,93,93,93,92,100,100,232,232,27,93,50,37,24,24,24,162,162,162,212,0,46,94,94,94,104,98,71,94,94,94,232,232,232,232,94,94,232,232,131,0,100,130,0,6,129,2,42,83,100,134,4,208,158,158,158,203,130,0,2,132,1,137,149,131,0,156,131,21,20,0,1,1,1,1,3,1,2,4,2,3,3,2,2,1,3,1,1,1,2,2,128,19,226,226,228,226,0,2,196,236,50,0,206,191,193,206,20,20,20,20,206,20,6,206,0,246,223,0,235,206,129,2,80,80,80,131,1,60,60,130,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,88,0,0,0,64,32,1,0,48,252,2,6,6,6,22,35,35,131,236,219,202,202,202,228,252,247,245,0,255,252,50,37,24,24,24,162,162,162,212,0,46,94,94,94,104,98,71,94,94,94,232,232,232,232,94,94,232,232,131,129,5,250,245,240,0,20,20,130,8,227,216,194,171,171,171,165,0,254,135,4,208,158,158,158,203,130,0,2,132,1,137,149,131,0,156,131,23,22,0,3,1,2,3,3,3,2,1,3,4,2,3,3,2,2,1,3,1,1,1,2,2,132,17,60,20,30,20,196,236,50,0,206,191,193,206,20,20,20,20,206,20,128,6,236,239,246,0,50,80,80,130,2,80,80,80,131,1,60,60,130,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,15,0,0,0,15,0,1,0,7,73,24,155,5,251,101,232,179,131,130,1,156,156,134,2,216,236,40,129,2,216,20,40,131,130,1,70,70,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,43,0,0,0,35,0,1,0,19,37,0,2,24,233,17,12,102,232,178,78,24,164,244,239,24,233,2,0,224,131,128,65,0,138,0,138,129,1,176,176,133,1,176,176,129,65,0,138,0,138,132,0,236,131,9,251,251,221,20,80,176,236,55,5,5,131,0,20,131,128,1,204,204,129,1,110,110,133,1,110,110,129,1,204,204,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,27,0,0,0,27,0,1,0,11,24,44,98,232,232,158,98,39,24,158,217,232,131,128,0,232,129,0,34,129,0,39,129,0,237,132,11,226,246,186,30,10,70,186,246,226,70,10,30,131,128,0,10,129,0,246,129,0,246,129,0,10,132,0,128,2,0,12,0,44,0,0,0,39,0,1,0,9,24,30,187,179,188,222,251,90,232,145,65,255,127,255,123,7,154,187,65,24,166,235,225,220,131,128,4,157,149,154,176,219,131,3,255,251,249,249,130,1,186,186,132,19,236,236,0,243,225,211,206,196,20,30,30,21,8,0,156,236,60,216,236,236,131,128,4,54,54,51,40,18,131,2,255,254,255,131,1,84,84,132,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,5,0,0,0,2,0,1,0,128,0,253,131,133,133,133,128,2,0,12,0,28,32,0,0,19,0,1,0,8,7,0,1,1,1,2,2,2,2,7,199,24,57,232,24,232,24,232,4,235,170,23,86,170,129,0,86,2,76,0,196,140,8,68,68,188,188,0,68,68,0,188,129,0,188,131,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,68,0,0,0,59,0,1,0,34,42,44,25,25,25,46,46,57,97,105,93,93,93,244,212,167,167,167,244,93,93,93,93,109,106,64,92,93,93,231,231,63,76,232,245,131,129,2,10,0,242,130,16,225,210,210,211,88,88,88,33,0,168,168,168,59,84,46,46,34,129,0,70,129,0,251,135,34,196,225,236,236,236,225,196,196,192,198,206,206,206,12,45,70,70,70,10,206,206,206,206,203,197,200,226,206,206,20,20,236,236,40,40,131,129,2,10,0,242,133,8,186,166,166,166,203,0,110,110,110,64,0,170,0,100,144,128,2,0,12,0,45,0,0,0,38,0,1,0,25,18,24,0,51,94,94,94,232,232,232,238,249,0,24,24,162,162,94,94,232,232,10,80,235,175,85,64,0,155,1,54,250,131,128,3,154,152,158,202,132,1,1,1,148,28,236,236,0,224,196,196,196,20,20,20,16,7,0,236,236,60,60,196,196,20,20,211,231,65,45,211,231,65,45,131,128,3,80,80,77,39,155,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,168,0,0,0,159,0,1,0,4,30,253,17,31,219,129,5,90,232,158,98,24,166,129,63,37,225,3,3,226,49,3,23,37,225,9,9,9,9,9,9,39,227,5,5,225,57,5,25,39,227,17,17,17,17,17,17,37,225,3,3,233,29,3,23,37,225,245,245,245,245,245,245,29,217,251,251,205,31,251,15,29,217,247,247,247,247,247,247,4,31,219,253,253,207,131,128,1,118,118,129,1,176,176,133,1,176,176,129,1,118,118,129,1,118,118,129,1,176,176,129,1,176,176,129,1,118,118,129,1,118,118,129,1,176,176,129,1,176,176,129,1,118,118,129,1,118,118,129,1,176,176,129,1,176,176,129,1,118,118,129,1,118,118,129,1,176,176,129,1,176,176,129,1,118,118,132,40,191,236,236,216,0,232,232,212,20,40,216,236,44,24,24,0,40,40,20,55,246,20,20,0,40,10,10,10,10,10,10,241,25,5,5,20,236,5,5,241,25,133,1,236,20,129,1,20,236,129,1,236,20,133,20,231,15,251,251,20,226,251,251,231,15,246,246,246,246,246,246,216,0,236,236,10,131,128,1,184,184,129,1,110,110,133,1,110,110,129,1,184,184,129,1,184,184,129,1,110,110,129,1,110,110,129,1,184,184,129,1,184,184,129,1,110,110,129,1,110,110,129,1,184,184,129,1,184,184,129,1,110,110,129,1,110,110,129,1,184,184,129,1,184,184,129,1,110,110,129,1,110,110,129,1,184,184,132,128,2,0,12,0,68,0,0,0,78,0,1,0,8,50,50,50,50,50,25,0,24,24,129,31,232,232,232,232,232,30,27,24,24,24,11,0,16,50,50,50,37,13,0,196,196,196,0,25,50,50,50,50,60,60,57,44,131,131,3,28,60,60,60,132,1,216,216,138,9,38,42,44,44,44,246,200,200,200,235,138,42,196,196,206,206,206,231,0,236,236,0,11,20,20,20,20,20,216,225,236,236,236,215,196,196,186,196,196,211,241,0,31,31,31,10,236,206,206,206,196,176,186,190,189,131,131,3,236,216,216,216,130,7,1,0,70,70,0,253,253,254,134,9,226,233,236,236,236,5,30,30,30,10,132,1,254,253,131,0,128,2,0,12,0,21,0,0,0,21,32,1,12,11,0,1,3,1,2,3,3,1,2,3,1,2,128,10,10,24,10,245,232,32,70,70,224,186,186,133,5,186,224,33,70,33,224,6,5,4,6,3,3,3,3,5,236,20,229,196,27,60,129,3,60,229,196,27,0,2,0,12,0,37,32,0,0,36,32,1,12,11,2,1,2,1,2,1,1,1,3,2,2,1,11,70,20,184,184,184,187,218,246,232,24,184,184,5,54,54,243,216,216,235,132,0,216,11,10,0,1,3,2,2,1,1,1,3,3,1,10,176,176,41,80,100,109,114,110,20,236,80,128,4,5,191,18,236,246,129,0,60,129,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,44,32,0,0,44,32,1,14,13,1,1,1,2,2,1,1,2,3,3,2,2,2,2,13,170,0,44,94,44,0,170,216,232,216,24,170,24,232,8,154,154,154,226,51,51,51,205,226,131,0,102,14,13,1,1,3,3,1,1,1,3,1,2,2,2,2,2,13,56,246,196,246,32,56,0,20,20,0,236,56,236,20,8,64,64,6,224,224,32,32,5,2,131,0,192,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,8,0,0,0,8,0,1,4,3,1,2,2,2,3,24,170,24,232,130,0,102,3,236,56,236,0,130,0,192,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,12,0,0,0,11,0,1,6,5,1,2,2,2,2,2,128,4,146,0,232,86,232,130,2,102,0,100,5,236,56,236,0,180,0,130,0,192,129,0,0,2,0,12,0,53,32,0,0,45,32,1,17,16,0,1,1,2,1,1,4,5,2,2,2,2,2,2,2,2,2,16,166,0,6,21,24,24,185,24,170,86,232,80,226,9,0,232,24,9,156,156,163,215,243,0,244,156,0,156,131,2,102,0,154,14,13,0,1,5,4,5,2,2,2,2,2,1,2,3,2,9,65,230,230,65,236,56,200,20,198,18,129,1,20,236,6,64,64,0,8,64,0,64,130,0,192,129,0,64,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,189,0,0,0,159,32,1,0,39,190,148,178,223,0,12,62,79,72,74,20,20,20,1,227,216,166,150,158,150,236,236,236,255,30,40,90,105,99,106,66,108,78,32,0,244,194,178,183,182,65,0,168,0,168,47,40,40,66,106,99,107,90,40,30,255,236,236,236,182,183,178,194,244,0,33,78,108,40,40,216,216,74,72,78,62,12,1,223,178,148,190,150,158,151,166,216,226,1,20,20,20,216,216,65,255,98,255,98,131,7,235,205,205,220,3,40,10,4,130,26,102,102,102,80,52,50,17,236,235,0,154,154,154,176,204,216,245,19,21,21,51,51,39,4,226,246,249,129,13,51,205,205,51,235,235,236,17,50,52,80,102,102,102,130,6,4,10,40,3,220,205,205,133,21,249,246,226,4,39,51,51,21,21,19,245,216,204,176,154,154,154,0,51,205,205,51,131,55,54,0,1,4,1,1,1,4,3,1,1,1,1,4,2,1,1,1,1,1,1,4,1,1,1,1,2,2,1,1,1,1,1,1,4,2,1,1,1,1,4,2,2,2,1,1,1,4,1,1,1,2,1,3,4,2,10,172,192,192,192,192,222,20,20,20,20,9,134,9,104,84,84,84,84,53,24,84,4,104,133,20,24,53,84,84,84,84,236,20,222,192,192,192,192,172,0,9,20,20,20,20,192,128,6,43,43,196,227,0,192,192,129,3,254,0,64,64,129,0,2,129,3,213,213,60,28,129,1,43,213,129,0,253,129,1,192,192,129,3,227,196,43,43,130,3,28,60,213,213,129,5,1,0,64,64,43,213,0,128,2,0,12,0,82,0,0,0,86,32,1,0,35,236,7,24,200,206,216,229,236,33,92,92,92,41,0,251,7,49,84,84,84,61,60,58,32,10,14,24,17,35,58,60,3,232,232,232,243,131,6,250,238,232,232,232,233,235,131,130,25,181,174,165,162,162,162,207,246,19,49,49,49,207,209,242,20,74,95,95,95,93,90,89,250,250,254,130,0,19,129,0,249,142,29,28,0,1,1,1,3,1,1,2,3,1,1,1,2,3,1,1,1,1,1,2,2,1,2,1,2,1,1,2,3,28,226,231,236,10,243,236,217,194,0,246,246,216,190,20,3,239,233,236,236,6,40,30,20,20,20,20,20,20,20,130,14,61,81,81,81,30,223,223,33,30,226,176,176,176,176,176,132,1,3,10,129,1,246,0,0,128,2,0,12,0,31,32,0,0,31,0,1,0,9,8,1,1,1,3,1,2,2,2,2,8,228,178,78,78,178,24,178,78,232,65,255,86,255,86,128,64,0,170,132,15,64,64,74,192,192,192,182,64,236,236,64,64,192,192,20,20,131,128,65,0,130,0,130,129,65,255,126,255,126,140,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,100,0,0,0,89,0,1,0,38,11,0,223,236,251,90,89,92,70,30,251,251,19,13,241,235,175,158,130,156,24,24,170,170,156,156,216,216,20,60,82,79,80,241,226,216,0,11,156,64,255,123,7,139,156,216,222,250,0,232,232,131,19,244,205,205,206,206,123,76,24,1,1,1,101,101,101,101,103,1,236,244,244,131,3,51,205,205,51,129,16,234,180,134,51,51,51,51,13,13,13,21,0,154,156,156,156,156,132,129,9,230,222,206,176,160,181,231,0,20,20,129,9,245,0,45,63,35,25,236,236,56,56,132,6,231,181,160,176,206,221,230,129,5,25,34,63,45,0,245,129,1,20,20,131,128,2,32,32,15,129,1,2,2,130,6,192,192,192,194,192,0,254,133,3,224,32,32,224,129,1,254,253,129,2,241,224,224,130,6,2,0,64,62,64,64,64,132,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,30,32,0,0,25,0,1,12,11,0,2,1,2,2,1,1,2,3,2,2,2,9,8,0,2,3,2,1,6,2,2,2,8,24,24,24,185,185,86,232,0,232,128,3,156,136,0,136,130,0,102,11,236,236,226,216,51,51,51,34,200,20,236,20,128,6,64,24,156,0,156,180,242,130,0,192,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,10,0,0,0,10,0,1,6,5,1,2,2,2,2,2,5,86,232,24,170,24,232,132,0,102,5,200,20,236,56,236,0,132,0,192,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,40,0,0,0,34,0,1,0,16,24,24,28,39,51,55,100,232,232,234,238,0,35,24,156,248,248,131,128,4,154,154,170,199,216,129,4,40,31,13,0,225,129,65,255,43,255,43,131,130,13,4,1,246,196,20,50,59,33,0,219,236,60,0,60,131,128,3,64,64,30,253,131,3,252,253,0,213,129,1,50,50,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,0,2,0,12,0,52,32,0,0,42,32,1,16,15,3,4,1,1,1,1,1,2,1,1,1,1,3,1,3,1,15,24,232,40,40,30,30,40,216,216,226,226,216,84,84,172,172,15,20,236,0,196,156,80,60,0,60,80,156,196,162,0,94,0,14,13,1,1,3,1,3,2,2,2,2,2,2,1,3,1,13,246,246,10,10,208,236,208,48,20,48,176,176,80,80,3,206,246,50,246,133,3,51,246,205,246,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,27,32,0,0,24,32,1,8,7,0,3,2,1,3,2,2,2,128,6,24,170,170,0,86,86,232,5,40,40,0,40,194,40,129,7,6,1,1,4,1,2,4,2,6,246,236,56,56,0,200,20,4,213,234,0,22,43,129,0,128,2,0,12,0,16,0,0,0,16,0,1,8,7,1,2,2,2,2,2,2,2,7,110,0,24,232,24,170,86,232,129,0,154,130,1,154,0,7,200,20,236,20,236,56,200,20,129,0,64,130,1,64,0,128,2,0,12,0,13,0,0,0,13,0,1,8,7,1,2,2,2,2,2,2,2,7,86,232,24,232,24,170,40,216,129,0,164,132,7,200,20,236,20,236,56,236,20,129,0,74,132,128,2,0,12,0,18,0,0,0,18,0,1,10,9,1,2,2,2,2,2,2,2,2,2,9,86,232,24,0,24,170,86,232,40,216,129,0,164,130,0,164,130,9,200,20,236,0,236,56,200,20,236,20,129,0,74,130,0,74,130,128,2,0,12,0,15,0,0,0,13,0,1,8,7,1,2,2,2,2,2,2,2,7,86,232,55,201,24,232,24,170,129,2,196,0,154,130,7,200,20,218,38,236,20,236,56,131,0,64,130,128,2,0,12,0,46,0,0,0,41,32,1,0,23,170,170,10,57,94,94,94,57,10,170,170,216,228,234,232,232,232,234,228,216,24,24,170,170,131,128,16,154,154,154,188,231,17,52,52,52,206,206,206,218,231,231,232,244,137,13,12,1,1,1,1,2,1,1,2,1,5,3,2,2,12,56,226,225,196,196,225,226,56,236,20,236,236,56,9,64,64,64,27,4,224,224,32,32,11,130,128,2,0,12,0,56,0,0,0,47,32,1,0,27,170,170,246,46,94,94,94,46,246,170,170,196,214,229,232,232,232,229,214,196,24,24,170,170,24,24,250,250,131,128,16,154,154,154,188,231,17,52,52,52,206,206,206,218,231,231,232,244,133,0,102,129,0,102,131,15,14,1,1,1,1,2,1,1,2,1,5,3,2,2,1,2,12,56,0,234,196,196,234,0,56,0,20,0,236,56,129,9,64,64,64,32,255,224,224,32,32,11,130,1,192,0,128,2,0,12,0,50,0,0,0,50,0,1,0,27,170,170,215,20,77,77,77,20,215,170,170,157,186,221,235,235,235,221,186,157,24,24,170,170,76,76,232,232,131,128,16,154,154,154,188,231,17,52,52,52,206,206,206,218,231,231,232,244,141,27,234,234,206,216,216,216,216,216,206,234,234,206,227,3,20,20,20,3,227,206,236,236,56,56,190,190,20,20,131,128,16,44,44,44,22,16,9,244,244,244,32,32,32,28,21,16,11,4,141,0,0,2,0,12,0,64,32,0,0,75,32,1,20,19,0,2,2,2,1,5,2,2,1,2,1,3,2,1,2,3,1,2,2,2,19,24,24,24,210,210,45,211,206,226,74,74,226,216,166,216,232,216,166,30,216,128,3,156,146,0,146,129,9,154,154,195,231,52,206,206,212,239,250,129,0,102,23,22,1,3,4,2,2,2,2,1,1,1,2,1,1,2,1,1,1,3,1,1,1,2,2,128,5,216,54,20,215,241,197,64,255,126,3,154,176,176,154,64,255,126,9,197,166,199,249,20,249,199,166,236,0,0,86,132,12,44,44,44,22,9,244,244,32,32,32,28,11,4,130,0,192,0,128,2,0,12,0,66,0,0,0,60,32,1,0,33,216,216,236,28,74,74,74,28,236,216,216,176,198,222,232,232,232,222,198,176,24,24,170,170,24,24,205,206,70,70,216,216,216,216,131,128,16,154,154,154,188,231,16,48,48,48,206,206,206,218,231,231,232,244,133,3,50,206,206,50,130,1,251,251,132,19,18,1,1,1,1,2,1,1,2,1,5,3,2,2,2,2,1,2,1,1,18,198,136,160,176,176,160,136,178,176,20,176,236,56,236,0,211,11,11,227,9,44,44,44,22,9,244,244,32,32,11,130,1,43,213,129,1,47,27,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,41,32,0,0,38,0,1,0,14,13,0,3,2,2,1,1,1,2,3,2,2,1,2,2,11,246,14,246,225,222,49,39,246,158,226,243,222,129,132,8,80,86,94,0,162,169,0,51,205,128,6,236,236,236,246,0,249,248,132,3,26,56,56,56,140,134,12,2,5,205,190,175,175,175,217,0,81,81,81,81,129,3,224,32,32,224,131,128,2,0,12,0,54,0,0,0,49,0,1,0,128,12,7,20,24,202,212,228,245,0,42,91,91,91,45,129,9,1,2,23,11,0,244,232,232,232,244,135,129,16,245,236,161,162,162,162,162,162,211,0,45,94,94,94,96,98,8,134,3,50,206,206,50,131,131,13,20,6,237,212,196,199,203,203,203,244,30,27,22,20,130,4,10,20,20,20,9,135,129,15,245,236,40,56,73,80,80,80,37,0,217,175,175,175,175,175,135,3,224,32,32,224,131,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,29,32,0,0,33,32,1,9,8,2,2,2,1,3,3,2,2,2,8,86,0,201,0,232,55,201,24,232,3,30,57,211,211,131,0,102,10,9,1,3,2,1,1,2,3,2,2,2,9,200,0,46,0,10,20,226,46,236,20,5,77,213,43,43,43,113,130,0,170,0,2,0,12,0,51,32,0,0,41,32,1,18,17,1,3,1,2,3,1,2,2,1,2,3,2,1,1,2,1,1,2,7,14,25,14,242,231,242,24,180,129,7,48,83,83,48,228,193,193,228,135,9,51,205,162,0,49,94,94,49,0,162,14,13,0,4,2,4,3,2,1,2,2,3,3,1,2,2,5,5,236,5,20,236,66,129,5,5,200,5,40,70,40,133,7,224,32,81,0,175,175,0,81,128,2,0,12,0,90,0,0,0,95,0,1,0,49,236,240,251,7,18,24,24,24,6,0,86,86,0,206,162,162,162,206,0,86,86,24,24,0,29,49,55,55,54,68,90,100,196,196,204,216,220,216,216,210,212,0,50,50,86,86,86,86,232,232,131,138,8,102,102,102,48,10,236,207,206,205,129,17,154,154,154,206,236,0,9,17,19,19,19,51,51,39,17,0,10,247,129,3,51,206,205,51,135,128,21,254,249,244,239,236,236,236,247,0,200,200,0,27,60,60,60,27,0,200,200,236,236,129,5,6,0,239,230,235,252,130,6,23,42,51,60,104,120,49,130,5,200,200,200,200,20,20,131,5,10,10,10,9,7,3,132,28,192,192,192,224,0,15,32,32,32,10,0,64,64,64,61,64,40,30,6,246,246,246,226,226,226,226,226,65,40,129,3,226,30,32,224,135,128,2,0,12,0,44,0,0,0,42,32,1,0,129,4,34,86,86,86,35,131,10,233,232,232,232,233,55,55,201,201,24,24,133,128,13,156,156,212,251,16,51,51,51,205,205,205,218,251,8,132,0,102,129,0,102,131,14,13,1,3,1,1,1,2,1,1,2,2,2,2,2,2,13,226,186,186,222,0,60,0,9,20,250,226,46,236,20,8,75,18,248,224,224,32,32,32,18,132,0,128,2,0,12,0,13,0,0,0,13,0,1,6,5,1,2,2,2,2,2,5,24,0,24,170,24,232,1,206,50,130,0,102,128,4,20,236,56,236,0,1,43,213,130,0,192,128,2,0,12,0,210,0,0,0,172,0,1,0,5,14,208,248,46,80,92,67,0,142,0,159,0,152,0,154,20,100,100,100,81,51,40,246,230,238,230,236,236,236,255,30,40,90,105,99,106,66,64,0,128,11,88,34,0,244,194,178,183,182,93,93,249,249,65,0,160,0,160,20,80,80,66,106,99,107,90,40,30,255,236,236,236,182,183,178,194,244,0,35,88,64,0,128,1,80,80,129,67,0,154,0,152,0,158,0,142,15,92,81,46,248,208,14,230,238,231,246,40,50,81,100,100,100,129,1,186,186,131,7,235,205,205,220,3,40,10,4,130,26,102,102,102,80,52,50,17,236,235,0,154,154,154,176,204,216,245,19,21,21,51,51,39,4,226,246,249,130,16,154,154,0,51,205,205,51,235,235,236,17,50,52,80,102,102,102,130,6,4,10,40,3,220,205,205,133,21,249,246,226,4,39,51,51,21,21,19,245,216,199,174,154,154,154,0,51,205,205,51,131,18,172,182,192,201,202,202,202,202,232,6,20,20,20,20,20,20,20,20,9,138,11,104,94,84,76,74,74,74,74,43,14,170,170,129,4,66,66,34,34,104,137,36,14,43,74,74,74,74,76,84,94,231,231,25,25,6,232,202,202,202,202,201,192,182,172,0,9,20,20,20,20,20,20,20,20,236,236,210,210,131,128,6,43,43,43,43,43,196,227,130,4,192,192,192,192,192,129,0,254,129,4,64,64,64,64,64,129,0,2,129,6,213,213,213,213,213,60,28,130,6,59,59,0,213,43,43,213,129,0,253,129,4,192,192,192,192,192,130,6,227,196,43,43,43,43,43,133,6,28,60,213,213,213,213,213,129,0,1,129,9,59,59,59,59,59,0,213,43,43,213,131,0,128,2,0,12,0,107,0,0,0,96,0,1,0,42,11,0,223,236,251,90,89,92,70,30,251,251,19,13,241,235,175,158,130,156,24,24,170,170,76,76,232,232,156,156,216,216,20,60,82,79,80,241,226,216,0,11,156,64,255,123,7,139,156,216,221,250,0,232,232,131,19,244,205,205,206,206,123,76,24,1,1,1,101,101,101,101,103,1,236,244,244,132,6,159,159,0,51,205,205,51,129,16,234,180,134,51,51,51,51,13,13,13,21,0,154,158,159,159,159,132,129,9,230,222,206,176,160,181,231,0,20,20,129,13,245,0,45,63,35,25,236,236,56,56,190,190,20,20,132,6,231,181,160,176,206,221,230,129,5,25,34,63,45,0,245,129,1,20,20,131,128,2,32,32,15,129,1,2,2,130,6,192,192,192,194,192,0,254,134,6,64,64,0,224,32,32,224,129,1,254,253,129,2,241,224,224,130,6,2,0,64,62,64,64,64,132,128,2,0,12,0,15,0,0,0,15,0,1,8,7,1,2,2,2,2,2,2,2,7,60,216,86,232,24,170,24,232,0,154,132,1,205,51,7,190,20,200,20,236,56,236,20,0,64,132,1,32,224,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,29,0,0,0,32,0,1,0,131,11,60,24,159,5,251,97,232,196,55,55,201,201,131,3,51,205,205,51,130,1,151,151,131,1,146,146,132,6,236,236,20,20,218,236,70,129,6,186,20,38,218,218,38,38,131,4,224,32,32,224,196,129,1,60,60,129,0,196,135,128,2,0,12,0,35,0,0,0,35,0,1,0,15,76,76,232,232,106,36,24,150,219,232,24,36,106,232,220,150,131,128,1,154,154,129,0,31,129,0,225,129,0,224,129,0,31,132,15,190,190,20,20,176,236,216,80,20,40,216,236,176,40,20,80,131,128,1,64,64,129,0,236,129,0,20,129,0,20,129,0,236,132,0,0,2,0,12,0,33,32,0,0,30,32,1,10,9,1,2,1,3,2,1,3,2,2,2,9,66,222,0,24,170,170,0,86,86,232,7,154,0,40,40,0,40,194,40,129,9,8,1,2,2,1,4,1,2,4,2,8,190,20,246,236,56,56,0,200,20,6,64,0,213,234,0,22,43,129,0,128,2,0,12,0,23,32,0,0,17,0,1,8,7,1,1,2,2,1,3,3,2,7,6,2,2,2,1,3,3,2,6,86,0,170,0,232,24,170,3,27,51,205,205,130,7,200,200,40,56,60,20,236,56,5,90,27,224,32,32,110,129,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,17,0,0,0,21,32,1,8,7,0,2,5,4,2,1,3,1,129,5,24,232,94,94,162,162,1,51,205,129,3,152,0,94,0,6,5,7,4,2,1,3,1,5,236,20,196,196,60,60,129,3,81,0,175,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,39,0,0,0,41,0,1,0,19,47,75,187,215,74,255,7,188,24,24,170,170,24,24,232,232,86,86,232,232,131,132,1,100,100,129,1,186,186,129,1,154,154,129,1,186,186,132,19,179,239,23,83,249,3,3,13,236,236,56,56,236,236,20,20,200,200,20,20,131,132,65,255,46,255,46,129,1,64,64,129,1,64,64,129,1,64,64,132,0,128,2,0,12,0,15,0,0,0,17,0,1,0,7,24,81,175,232,105,252,4,151,131,132,1,95,95,132,4,236,236,20,20,196,129,0,60,131,132,65,255,46,255,46,132,0,128,2,0,12,0,60,32,0,0,63,0,1,0,20,19,4,3,3,1,1,1,1,1,1,2,1,1,1,1,3,2,2,2,2,2,19,24,244,232,244,50,50,40,40,50,206,206,216,216,206,50,94,50,206,162,206,132,14,216,216,20,20,0,20,20,216,216,182,0,74,74,0,182,128,34,5,236,236,236,5,0,251,20,20,20,251,213,213,236,236,213,213,43,43,20,20,43,43,0,218,196,196,196,218,0,38,60,60,60,38,131,129,2,18,0,238,130,2,238,0,18,140,11,81,81,54,0,201,175,175,175,201,0,54,81,131,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,65,32,0,0,61,32,1,21,20,4,1,1,1,1,1,1,1,1,1,1,1,2,3,4,1,1,3,3,1,2,20,24,24,41,74,100,232,232,100,26,197,161,161,146,176,232,245,0,94,0,210,161,128,10,6,10,15,20,0,95,115,101,57,237,176,131,4,164,0,92,92,0,20,19,1,4,1,1,1,1,1,1,1,1,1,1,2,3,4,2,3,1,2,3,19,246,236,241,248,0,20,20,0,24,51,62,62,72,20,20,241,190,190,241,62,129,1,255,255,129,4,166,166,170,191,228,131,4,86,0,214,170,236,128,2,0,12,0,68,32,0,0,77,0,1,0,22,21,1,1,3,1,2,2,1,3,3,2,2,2,2,2,1,1,2,3,2,1,3,3,21,162,50,102,102,0,162,0,232,0,24,162,192,226,162,0,49,102,50,162,0,232,0,6,156,156,206,246,35,5,5,131,6,226,30,221,221,221,40,100,129,1,10,251,8,50,50,228,217,198,198,198,224,242,130,9,10,20,20,20,10,0,236,236,50,50,129,1,236,236,129,14,12,237,198,198,198,244,26,50,50,0,10,20,20,20,10,132,128,12,80,80,80,54,35,11,236,236,236,246,246,246,251,139,9,10,20,20,20,248,226,204,176,176,176,132,2,5,10,10,131,128,2,0,12,0,8,0,0,0,8,0,1,4,3,1,2,2,2,3,24,162,0,232,130,0,100,3,236,50,236,20,130,0,182,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,12,0,0,0,12,0,1,6,5,1,2,2,2,2,2,5,24,162,24,232,82,232,130,2,100,0,100,5,236,50,0,20,194,20,130,2,182,0,182,0,2,0,12,0,50,32,0,0,49,32,1,16,15,0,1,1,2,4,1,2,2,2,2,2,2,2,2,2,2,15,165,0,11,20,185,176,24,174,82,232,98,236,9,254,232,24,8,154,154,172,0,223,173,166,0,166,131,2,100,0,156,16,15,0,1,1,2,2,1,4,2,2,2,2,2,2,2,2,2,0,97,130,11,97,97,236,62,194,20,194,20,0,194,20,236,2,74,74,62,129,3,146,74,0,74,131,2,182,0,74,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,174,0,0,0,124,32,1,0,8,216,216,204,248,5,95,112,79,30,129,7,10,3,255,246,151,138,160,166,129,29,246,252,1,10,105,119,96,90,40,40,52,9,251,161,145,176,226,45,45,50,50,40,90,96,119,105,10,1,252,246,129,28,226,176,145,161,251,9,52,40,46,46,212,212,30,79,112,95,5,248,204,216,216,166,160,138,151,246,255,3,10,129,3,212,212,211,211,131,128,5,214,214,226,214,80,32,130,25,100,100,100,97,100,186,207,241,246,0,156,156,156,159,156,70,48,15,10,0,42,42,31,42,176,224,129,13,42,214,214,42,0,246,241,207,186,100,97,100,100,100,130,5,32,80,214,226,214,214,133,20,224,176,42,31,42,42,0,10,15,48,70,156,159,156,156,156,0,42,214,214,42,131,44,43,0,1,3,1,2,1,2,1,3,1,5,1,3,1,4,1,3,1,3,2,2,1,4,1,3,2,1,3,1,3,2,2,1,1,2,1,3,1,4,1,3,2,2,2,128,5,188,188,188,182,178,20,130,0,236,131,5,68,68,68,78,234,252,131,11,236,78,68,68,68,246,10,178,182,188,188,188,131,2,20,0,22,128,1,45,45,130,6,196,196,196,0,60,60,60,129,1,211,211,129,1,45,211,129,1,196,196,130,1,45,45,132,1,211,211,129,4,60,60,0,45,211,0,128,2,0,12,0,89,0,0,0,83,0,1,0,128,12,4,11,14,220,228,248,0,46,100,100,100,47,236,129,28,236,31,83,100,100,100,43,0,2,6,9,24,18,8,0,245,232,232,232,246,241,212,212,236,243,232,232,232,245,131,129,26,254,250,176,169,164,164,164,215,0,18,37,37,37,219,219,219,233,2,20,56,92,92,92,96,92,0,4,132,9,254,246,242,247,1,7,9,8,10,5,132,128,11,251,240,236,10,8,2,0,228,196,196,196,223,131,19,230,204,196,196,196,230,0,254,249,246,236,241,249,0,9,20,20,20,15,7,129,5,6,16,20,20,20,9,131,131,22,66,77,86,86,86,56,30,245,206,206,206,50,50,50,32,251,226,199,170,170,170,170,170,134,9,1,254,254,5,251,5,8,6,10,5,132,0,128,2,0,12,0,31,0,0,0,27,32,1,0,15,176,176,162,94,80,80,94,162,24,24,162,162,94,94,232,232,131,128,65,255,126,255,126,129,65,0,130,0,130,140,8,7,2,1,3,1,2,2,2,2,7,60,206,196,50,236,50,206,20,64,0,180,128,64,255,76,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,95,0,0,0,96,0,1,0,8,60,60,39,48,50,105,88,67,35,130,35,5,9,2,5,222,222,233,0,24,24,162,162,162,162,246,246,246,25,62,88,105,50,48,39,60,60,246,223,202,202,241,238,245,241,246,246,131,7,246,206,206,213,216,90,46,8,130,8,100,100,100,93,100,0,252,246,246,131,3,50,206,206,50,129,16,248,210,166,40,44,50,50,10,10,10,5,0,156,163,156,156,156,132,128,46,236,225,243,236,206,189,203,232,236,20,20,0,2,250,0,52,62,51,50,236,236,50,50,50,50,20,20,236,222,187,175,196,236,246,227,236,0,50,55,62,52,0,250,2,0,20,20,131,7,10,37,37,41,37,20,252,246,130,8,182,182,182,174,182,20,19,10,10,131,3,219,37,37,219,129,16,10,4,236,219,215,219,219,246,246,246,238,236,74,83,74,74,74,132,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,41,0,0,0,31,32,1,0,19,24,24,18,19,24,24,24,189,189,189,197,236,94,94,232,232,24,24,232,232,131,128,4,156,156,164,167,156,129,2,156,209,249,132,0,100,129,0,100,131,10,9,0,2,1,1,1,4,4,2,2,2,9,236,229,220,216,216,57,206,20,216,20,128,2,74,60,29,132,0,182,0,128,2,0,12,0,51,0,0,0,35,0,1,0,23,34,0,252,103,83,83,103,238,25,25,173,173,19,153,173,173,153,4,0,236,83,83,231,231,131,128,65,255,116,255,116,129,65,0,162,0,162,133,65,0,162,0,162,129,65,255,116,255,116,136,0,20,129,13,174,214,214,204,10,236,236,42,42,246,52,42,42,82,129,4,246,214,214,20,20,131,128,1,80,80,141,1,80,80,136,0,128,2,0,12,0,11,0,0,0,13,0,1,6,5,1,2,2,2,2,2,5,94,232,24,162,254,227,131,1,214,42,4,206,20,236,50,120,64,255,105,131,1,45,211,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,10,0,0,0,10,0,1,6,5,1,2,2,2,2,2,5,94,232,24,162,250,232,132,0,100,5,206,20,236,50,174,51,132,0,182,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,8,0,0,0,8,0,1,4,3,1,2,2,2,3,59,197,24,232,130,0,100,3,221,35,236,20,130,0,182,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,0,2,0,12,0,100,32,0,0,89,32,1,37,36,0,3,1,2,3,3,1,2,2,1,1,2,1,4,2,1,3,2,3,1,2,1,1,1,1,3,1,2,2,1,1,3,2,2,2,2,2,36,196,192,247,222,0,90,90,0,222,247,192,195,196,232,60,42,24,60,74,19,44,0,208,166,166,0,23,44,19,74,74,59,44,59,207,222,207,128,6,236,236,0,168,0,47,88,139,10,88,88,88,47,0,168,168,0,236,236,246,133,35,34,0,1,1,1,2,1,1,3,2,3,2,2,1,1,1,4,2,1,3,2,1,1,1,3,1,3,4,1,1,1,2,1,1,4,6,34,30,30,40,30,20,20,20,222,204,241,20,30,40,30,30,20,226,232,236,226,226,216,226,236,15,52,253,236,236,236,226,216,226,236,20,132,4,120,113,90,0,166,140,5,166,166,0,90,113,120,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,30,32,0,0,30,0,1,0,9,8,0,3,2,1,2,1,2,2,2,8,236,24,162,162,198,236,80,94,232,6,42,20,0,20,214,214,42,129,128,14,235,236,236,236,50,50,50,45,50,206,206,206,206,20,20,131,2,211,211,221,131,4,17,45,45,45,211,135,0,128,2,0,12,0,16,0,0,0,16,0,1,8,7,1,2,2,2,2,2,2,2,7,119,1,24,0,24,162,82,232,129,0,156,130,1,156,0,7,206,20,236,0,236,50,194,20,129,0,74,130,1,74,0,128,2,0,12,0,13,0,0,0,13,0,1,8,7,1,2,2,2,2,2,2,2,7,94,232,22,229,24,162,43,213,129,0,166,132,7,206,20,236,20,236,50,236,20,129,0,84,132,128,2,0,12,0,30,32,0,0,29,0,1,0,10,9,1,2,2,2,2,2,2,2,2,2,9,118,0,24,0,24,162,82,232,38,218,129,0,166,130,0,166,130,3,206,206,20,20,131,3,236,236,50,50,129,5,20,20,241,241,15,15,131,132,1,84,84,133,1,84,84,136,128,2,0,12,0,15,0,0,0,13,0,1,8,7,1,2,2,2,2,2,2,2,7,94,232,53,203,24,232,24,162,129,2,166,0,172,130,7,206,20,224,32,236,20,236,50,131,0,90,130,0,2,0,12,0,32,32,0,0,41,32,1,10,9,1,1,2,4,2,1,4,2,2,2,9,162,10,100,10,162,0,232,0,24,162,6,156,156,196,50,206,206,243,130,13,12,1,1,1,1,2,1,1,2,1,2,4,2,2,12,50,226,215,196,196,215,226,50,0,20,0,236,50,9,74,74,74,42,251,219,219,37,37,27,130,0,0,2,0,12,0,49,32,0,0,39,32,1,16,15,1,1,1,1,3,1,2,1,1,3,1,1,2,2,2,2,15,194,0,47,100,47,0,206,236,233,232,233,236,60,194,24,0,9,156,156,156,196,50,50,206,206,206,243,132,0,100,12,11,0,2,1,1,2,1,1,3,8,2,1,2,9,246,246,225,196,196,225,246,20,226,40,129,128,6,74,74,42,251,219,219,37,129,1,182,0,128,2,0,12,0,41,32,0,0,53,0,1,0,14,13,1,1,2,4,2,1,1,2,2,1,2,2,2,2,13,162,0,94,0,162,236,245,0,245,236,24,162,94,232,7,176,176,208,40,216,216,216,236,133,65,255,102,255,102,6,7,233,193,193,193,233,7,65,255,102,255,102,14,243,5,27,27,27,5,243,236,236,50,50,206,206,20,20,131,128,14,94,94,94,52,18,241,199,199,199,37,37,37,27,18,10,141,0,128,2,0,12,0,67,32,0,0,66,0,1,0,23,22,1,1,1,1,2,1,1,1,1,2,2,2,1,3,3,2,1,1,3,1,1,2,2,22,24,28,45,45,210,210,210,216,245,49,207,207,0,80,0,206,0,244,232,244,0,45,206,7,156,156,174,176,0,176,216,249,130,3,156,156,0,100,134,0,84,34,236,236,225,216,216,216,57,57,57,43,9,231,231,15,15,160,160,246,225,196,196,196,225,246,180,180,236,254,20,20,20,254,236,216,216,133,128,3,74,74,61,44,129,2,246,250,254,133,14,74,74,74,42,18,251,219,219,219,37,37,37,27,18,10,137,128,2,0,12,0,62,0,0,0,56,32,1,0,21,207,207,0,43,80,80,80,43,0,205,205,246,246,232,232,232,246,246,24,24,162,162,129,7,9,9,49,49,207,207,207,207,131,128,14,156,156,156,184,220,6,42,42,42,214,214,214,224,220,230,133,3,42,214,214,42,130,1,254,24,132,18,17,1,1,3,3,2,1,1,2,2,1,2,2,1,2,2,2,1,1,128,10,236,196,236,0,236,254,20,254,236,236,50,129,3,206,40,40,0,7,74,74,9,219,37,37,37,9,131,1,219,37,129,1,15,16,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,48,32,0,0,52,32,1,16,15,0,4,2,3,1,1,1,1,1,2,2,1,3,1,3,2,128,12,24,0,232,56,47,18,0,213,166,212,0,8,252,129,131,11,70,98,98,98,98,0,158,158,166,5,42,214,18,17,0,1,3,1,1,3,1,3,2,1,2,1,3,1,1,1,1,2,15,50,16,236,247,0,30,246,0,70,70,59,50,15,20,28,42,129,132,7,226,186,176,217,0,80,80,80,130,1,211,45,128,2,0,12,0,50,0,0,0,39,32,1,0,128,24,8,21,24,227,233,247,0,42,90,90,90,44,0,8,27,35,24,19,7,0,244,232,232,232,245,135,131,12,170,165,158,158,158,208,0,48,98,98,98,99,102,136,3,42,214,214,42,131,13,12,0,3,1,3,3,3,3,1,3,1,3,2,2,128,0,236,129,6,216,0,226,236,0,9,20,129,129,4,60,80,0,176,176,131,1,211,45,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,39,32,0,0,34,32,1,12,11,2,2,2,2,1,1,1,2,3,2,2,2,11,94,246,162,152,206,206,219,232,24,162,25,0,1,23,48,129,2,216,216,216,130,1,214,42,11,10,1,2,1,2,2,2,4,2,2,2,2,10,206,228,246,50,65,50,20,236,50,0,20,3,166,166,166,166,132,1,45,211,0,0,2,0,12,0,39,32,0,0,43,32,1,14,13,0,4,2,1,3,1,2,2,1,2,3,2,4,2,7,254,0,254,243,232,243,24,177,129,3,51,90,221,182,135,5,42,214,148,0,108,0,14,13,0,4,9,2,2,2,2,1,1,1,3,1,1,1,13,20,10,236,50,40,0,224,186,186,186,52,90,90,90,131,9,45,211,66,34,0,222,190,222,0,34,128,2,0,12,0,91,0,0,0,92,0,1,0,128,26,12,24,24,24,11,0,94,94,0,208,156,156,156,208,0,94,94,24,24,0,37,97,111,105,107,94,70,129,2,23,28,11,129,11,253,241,241,0,70,70,94,94,94,94,232,232,131,2,246,246,252,132,24,100,100,100,61,25,245,206,206,206,246,0,158,158,158,188,226,236,254,10,10,10,50,50,42,20,129,1,251,251,129,3,50,206,206,50,135,128,18,247,236,236,236,246,0,206,206,10,26,50,50,50,26,10,206,206,236,236,129,4,7,0,216,202,244,129,8,50,32,6,250,255,33,53,43,11,130,5,206,206,206,206,20,20,131,4,5,5,254,246,251,130,28,182,182,182,216,242,8,37,37,37,5,0,74,74,74,68,74,26,26,5,5,5,219,219,215,201,185,226,225,239,129,3,219,37,37,219,135,0,2,0,12,0,79,32,0,0,64,32,1,24,23,0,1,3,2,2,1,1,1,2,3,2,2,2,1,1,1,1,1,1,2,1,1,2,1,23,94,94,246,162,152,206,206,219,232,24,162,25,0,39,45,41,71,94,94,232,232,232,19,41,64,255,116,128,0,48,129,2,216,216,216,130,7,214,42,0,154,152,155,199,246,64,255,66,1,216,229,129,21,20,0,1,2,1,2,2,2,3,3,2,2,2,2,1,1,1,1,4,1,1,1,20,206,206,228,246,50,65,50,20,236,50,0,20,236,236,220,206,206,20,11,249,236,4,176,166,166,166,166,132,5,45,211,100,100,102,49,129,2,6,7,0,0,128,2,0,12,0,13,0,0,0,13,0,1,6,5,1,2,2,2,2,2,5,24,0,24,162,0,232,1,214,42,130,0,100,5,236,20,236,50,236,20,1,45,211,130,0,182,128,2,0,12,0,215,0,0,0,169,32,1,0,0,98,64,0,130,3,87,75,97,106,66,0,196,0,213,0,174,27,120,90,90,120,110,99,90,251,238,16,30,246,246,216,226,237,246,85,99,64,50,228,206,248,5,239,230,140,64,255,124,18,162,216,5,5,85,85,228,50,64,99,85,246,237,226,216,246,246,216,162,64,255,124,10,140,230,239,5,248,206,75,75,5,5,120,66,0,174,0,213,0,196,3,106,97,75,87,64,0,130,18,98,30,16,238,251,90,98,110,120,90,90,251,251,75,75,103,103,253,253,131,128,62,214,214,220,221,214,90,39,5,5,5,105,105,105,105,110,186,207,241,246,251,151,151,151,152,146,70,48,15,10,0,42,42,36,34,42,166,216,251,251,42,214,214,42,0,246,241,207,186,110,105,105,105,105,5,5,5,39,90,214,221,220,214,214,131,26,251,251,216,166,42,34,36,42,42,0,10,15,48,70,141,151,156,156,156,251,42,214,214,42,0,156,156,132,56,55,0,1,2,2,1,2,1,3,1,1,1,1,3,3,3,1,3,1,1,4,1,1,1,1,2,2,1,1,3,1,1,2,3,1,2,1,4,2,2,1,1,1,1,1,2,2,1,1,3,1,2,1,4,2,2,2,55,58,22,215,209,209,197,188,30,27,20,20,20,40,226,236,236,216,188,234,47,47,47,59,68,194,31,188,216,236,236,236,226,68,59,47,47,234,245,9,188,197,209,209,209,215,22,58,40,20,20,27,30,215,62,194,20,128,9,45,45,45,10,5,5,201,201,204,206,129,1,55,50,130,7,211,211,246,248,251,251,45,211,130,7,206,204,201,5,5,10,45,45,129,6,251,251,248,246,211,211,211,130,6,45,50,50,45,211,50,0,0,128,2,0,12,0,102,0,0,0,103,0,1,0,8,68,60,39,48,50,105,88,67,35,130,39,5,9,2,5,222,222,233,0,24,24,162,162,162,162,246,246,82,82,232,232,246,25,62,88,105,50,48,39,60,68,246,223,202,202,241,238,245,241,246,246,131,7,246,206,206,213,216,90,46,8,130,8,100,100,100,93,100,0,252,246,246,131,6,50,206,206,50,0,161,161,130,16,248,210,166,40,44,50,50,10,10,10,5,0,156,165,161,161,161,132,51,8,236,225,243,236,206,189,203,232,236,20,20,0,2,249,0,52,62,51,50,236,236,50,50,50,50,20,20,194,194,20,20,236,222,187,175,196,236,246,227,236,8,50,55,62,52,0,249,2,0,20,20,131,7,10,37,37,41,37,20,252,246,130,8,182,182,182,174,182,20,19,10,10,131,6,219,37,37,219,0,74,74,130,16,10,4,236,219,215,219,219,246,246,246,238,236,74,83,74,74,74,132,128,2,0,12,0,15,0,0,0,17,0,1,8,7,1,2,2,2,2,2,2,2,7,40,190,94,232,24,162,254,227,0,156,132,1,214,42,6,194,20,206,20,236,50,120,64,255,105,0,74,132,1,45,211,128,2,0,12,0,23,0,0,0,19,0,1,0,2,64,24,156,129,6,100,232,192,59,59,197,197,131,130,1,166,166,131,1,196,196,132,2,221,236,40,129,6,216,20,35,221,221,35,35,131,130,1,100,100,138,0,128,2,0,12,0,29,0,0,0,28,0,1,0,131,2,64,24,156,129,6,100,232,192,59,59,197,197,131,0,84,129,0,84,130,1,166,166,131,1,196,196,132,6,236,236,20,20,221,236,40,129,6,216,20,35,221,221,35,35,131,0,166,129,0,166,130,1,100,100,138,128,2,0,12,0,35,0,0,0,35,0,1,0,15,46,45,197,198,24,44,98,232,232,158,98,39,24,158,217,232,131,128,1,156,156,129,0,232,129,0,34,129,0,39,129,0,237,132,15,194,194,20,20,226,246,186,30,10,70,186,246,226,70,10,30,131,128,1,74,74,129,0,10,129,0,246,129,0,246,129,0,10,132,0,128,2,0,12,0,36,32,0,0,38,0,1,0,11,10,1,2,1,3,2,1,2,1,2,2,2,10,42,192,236,24,162,162,198,236,80,94,232,8,156,0,42,20,0,20,214,214,42,129,19,194,194,20,20,0,235,236,236,236,50,50,50,45,50,206,206,206,206,20,20,131,128,5,74,74,0,211,211,221,131,4,17,45,45,45,211,135,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,46,0,0,0,25,32,1,0,132,22,12,24,24,24,12,0,244,232,232,232,244,0,47,100,100,100,47,0,209,156,156,156,209,131,3,36,220,220,36,139,11,158,158,209,0,46,98,98,98,46,0,209,158,131,8,7,5,3,3,3,3,3,3,3,7,246,236,9,20,227,196,29,60,131,3,80,217,176,38,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,0,2,0,12,0,61,32,0,0,51,32,1,20,19,5,2,2,3,1,3,3,1,2,2,1,2,1,1,2,1,1,1,2,1,19,24,245,232,232,232,232,0,48,100,16,196,0,196,17,100,100,47,0,164,164,130,14,253,3,0,158,158,0,50,50,206,206,206,0,46,98,98,129,17,16,0,5,1,3,3,1,3,3,1,1,1,3,4,2,3,2,1,128,15,236,0,20,50,50,20,5,231,196,196,0,228,196,5,50,50,131,10,15,241,0,80,80,48,20,219,37,236,176,129,128,2,0,12,0,85,0,0,0,85,0,1,0,128,6,5,24,24,24,245,212,217,129,19,60,100,100,100,46,0,241,246,24,24,5,250,0,251,232,232,232,3,29,28,129,11,204,156,156,156,201,0,238,236,232,232,237,12,131,129,16,232,236,209,188,191,207,216,216,229,19,40,76,98,98,98,96,98,132,16,24,30,55,71,64,46,40,40,26,254,216,189,158,158,158,158,158,134,128,42,238,236,236,236,205,181,198,244,196,206,196,196,196,224,0,228,212,236,236,229,238,0,18,20,20,20,48,75,77,50,110,80,60,60,60,19,246,241,9,20,20,12,22,131,129,16,251,20,6,255,8,28,40,30,33,20,246,216,176,176,176,174,176,132,16,10,0,13,12,251,231,226,246,241,10,20,53,80,80,80,80,80,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,189,0,0,0,151,0,1,0,9,244,20,238,230,252,5,95,112,79,30,129,7,10,3,255,246,151,138,160,166,129,30,246,252,1,10,105,119,96,90,12,236,18,26,4,251,161,145,176,226,45,45,65,65,12,90,96,119,105,10,1,252,246,129,32,226,176,145,161,251,4,26,18,236,45,45,50,206,211,211,30,79,112,95,5,252,230,238,20,244,166,160,138,151,246,255,3,10,129,3,191,191,211,211,131,128,6,214,214,220,221,214,80,32,130,26,100,100,100,97,100,186,207,241,246,0,156,156,156,159,156,70,48,14,10,0,42,42,36,34,42,176,224,129,13,42,214,214,42,0,246,241,207,186,100,97,100,100,100,130,8,32,80,214,221,220,214,214,0,220,129,0,220,130,21,224,176,42,34,36,42,42,0,10,14,48,70,156,159,156,156,156,0,42,214,214,42,131,11,28,248,218,194,188,188,188,188,182,178,20,20,135,1,236,236,135,14,228,8,38,63,68,68,68,68,73,78,234,234,11,11,228,135,26,236,236,78,73,68,68,68,68,63,38,8,245,245,210,44,9,9,178,182,188,188,188,188,194,218,248,28,135,5,20,20,235,235,22,22,131,128,4,45,45,45,45,45,132,4,196,196,196,196,196,132,4,60,60,60,60,60,129,0,255,129,4,211,211,211,211,211,131,3,211,45,45,211,132,4,196,196,196,196,196,132,6,45,45,45,45,45,0,246,129,0,254,132,4,211,211,211,211,211,129,0,255,129,9,60,60,60,60,60,0,211,45,45,211,131,0,128,2,0,12,0,86,0,0,0,84,0,1,0,128,46,15,24,210,222,242,0,47,98,98,98,73,34,10,250,4,54,94,94,94,75,34,0,3,12,15,24,22,14,5,0,244,232,232,232,242,232,232,232,232,232,237,236,232,232,232,238,249,131,130,22,178,168,158,158,158,200,236,6,39,56,56,56,211,214,250,30,49,79,98,98,98,98,98,136,7,246,254,2,226,30,2,7,5,136,128,11,244,236,20,16,6,0,227,194,194,194,211,240,130,19,220,190,190,190,204,233,0,255,252,251,236,238,244,253,0,11,20,20,20,8,132,6,5,15,20,20,20,16,7,131,130,22,50,66,80,80,80,37,0,244,228,220,220,220,37,36,18,0,234,198,176,176,176,176,176,135,3,4,12,10,10,129,3,246,246,248,253,135,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,95,0,0,0,96,0,1,0,8,68,60,39,48,50,105,88,67,35,130,35,5,9,2,5,222,222,233,0,24,24,162,162,162,162,246,246,246,25,62,88,105,50,48,39,60,68,246,223,202,202,241,238,245,241,246,246,131,7,246,206,206,213,216,90,46,8,130,8,100,100,100,93,100,0,252,246,246,131,3,50,206,206,50,129,16,248,210,166,40,44,50,50,10,10,10,5,0,156,163,156,156,156,132,47,8,236,225,243,236,206,189,203,232,236,20,20,0,2,249,0,52,62,51,50,236,236,50,50,50,50,20,20,236,222,187,175,196,236,246,227,236,8,50,55,62,52,0,249,2,0,20,20,131,7,10,37,37,41,37,20,252,246,130,8,182,182,182,174,182,20,19,10,10,131,3,219,37,37,219,129,16,10,4,236,219,215,219,219,246,246,246,238,236,74,83,74,74,74,132,128,2,0,12,0,15,0,0,0,15,0,1,0,4,24,75,181,232,95,129,0,161,131,132,1,80,80,132,7,221,225,41,35,225,5,5,31,131,132,1,178,178,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,56,0,0,0,45,32,1,0,31,30,30,180,180,50,37,24,24,24,162,162,162,212,0,46,94,94,94,104,98,71,94,94,94,232,232,180,180,94,94,232,232,131,128,1,156,156,135,4,208,158,158,158,203,130,0,2,132,1,147,149,131,0,156,131,15,14,1,2,1,4,2,3,3,2,3,3,1,1,1,2,2,14,194,20,196,236,50,0,206,192,206,20,20,20,20,206,20,0,74,130,2,80,80,80,130,1,40,40,130,128,2,0,12,0,58,0,0,0,63,0,1,0,34,30,23,24,24,24,162,162,162,193,226,6,43,43,43,213,213,213,20,92,92,92,232,232,92,92,105,102,83,70,60,39,43,55,52,40,131,129,1,219,196,129,6,196,178,168,168,168,181,196,129,4,196,168,168,168,196,146,128,33,246,236,236,236,50,50,50,33,15,2,246,246,246,10,10,10,241,206,206,206,20,20,206,206,196,199,222,231,237,247,0,246,246,252,131,129,1,230,206,129,5,10,48,90,90,90,50,130,4,10,90,90,90,10,133,0,249,130,0,249,135,128,2,0,12,0,66,0,0,0,70,0,1,0,38,44,44,196,196,30,23,24,24,24,162,162,162,193,226,6,43,43,43,213,213,213,20,92,92,92,232,232,92,92,105,102,83,70,60,39,43,55,52,40,131,128,1,156,156,130,1,219,196,129,6,196,178,168,168,168,181,196,129,4,196,168,168,168,196,146,1,174,174,130,33,246,236,236,236,50,50,50,33,15,2,246,246,246,10,10,10,241,206,206,206,20,20,206,206,196,199,222,231,237,247,0,246,246,252,131,128,1,74,74,130,1,230,206,129,5,10,48,90,90,90,50,130,4,10,90,90,90,10,133,0,249,130,0,249,135,0,0,2,0,12,0,37,32,0,0,43,32,1,12,11,1,1,2,3,1,2,4,2,3,1,2,3,11,11,22,24,152,155,186,232,0,100,100,0,162,131,0,7,129,4,164,0,43,92,0,13,12,0,3,2,2,3,1,1,1,1,3,3,3,2,128,11,236,50,65,40,31,20,20,20,232,206,24,50,128,11,18,0,40,40,40,29,18,10,86,243,210,18,0,2,0,12,0,48,32,0,0,51,32,1,16,15,0,1,1,1,2,2,2,1,1,1,4,2,3,1,2,3,15,20,22,22,24,24,162,152,156,180,196,232,20,100,100,0,162,131,0,100,129,0,7,130,4,164,0,43,92,0,16,15,0,1,1,1,2,2,2,3,1,1,1,1,2,4,2,3,15,251,234,214,216,0,30,45,25,22,20,20,20,251,206,251,30,129,13,9,18,182,0,40,40,40,29,18,10,86,243,210,18,0,0,2,0,12,0,39,32,0,0,49,32,1,14,13,0,4,2,1,3,1,2,2,1,2,3,2,4,2,7,254,0,254,243,232,243,24,177,129,3,51,90,221,182,135,5,42,214,148,0,108,0,18,17,0,1,3,1,1,1,3,1,2,2,2,2,1,1,2,2,1,3,17,5,249,236,249,5,14,20,14,236,50,40,0,15,225,186,225,15,100,137,7,45,211,86,86,0,170,170,0,128,2,0,12,0,98,0,0,0,77,32,1,0,128,5,7,18,24,24,24,1,129,39,11,21,24,24,24,234,192,200,0,232,225,0,212,173,164,164,164,190,232,0,33,36,6,232,232,232,237,248,0,34,94,94,94,54,0,207,162,162,162,214,131,129,5,4,5,0,249,21,15,132,3,222,210,229,254,129,29,106,110,109,70,24,10,252,231,221,226,238,222,205,216,0,7,6,0,164,164,207,0,36,75,75,75,41,0,217,164,131,25,24,1,3,2,1,1,2,1,1,3,2,1,1,1,1,3,2,2,1,1,1,3,4,2,4,3,24,250,236,214,196,196,231,236,236,215,196,20,20,196,231,68,47,0,3,11,16,20,224,190,31,66,128,5,236,199,196,206,227,246,131,7,180,180,182,216,243,0,255,255,129,3,86,0,170,40,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,23,0,0,0,21,0,1,0,11,24,72,184,232,91,252,4,165,216,216,40,40,131,132,1,100,100,129,1,154,154,132,4,236,236,20,20,186,129,0,70,135,132,65,255,46,255,46,129,1,64,64,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,18,0,0,0,21,32,1,8,7,1,2,4,4,2,1,3,1,7,216,40,24,232,94,94,162,162,1,206,50,129,3,152,0,94,0,6,5,7,4,2,1,3,1,5,236,20,196,196,60,60,129,3,81,0,175,0,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,24,232,24,232,4,252,128,4,102,154,0,205,51,5,236,20,236,20,236,20,128,4,172,84,0,42,214,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,32,0,0,0,32,0,1,0,13,206,24,90,24,190,216,24,24,232,232,24,24,232,232,131,4,240,170,0,102,20,129,3,170,170,0,102,129,0,102,131,13,70,236,186,236,70,20,236,236,20,20,236,236,20,20,131,4,78,78,0,192,192,129,3,78,78,0,192,129,0,192,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,28,32,0,0,34,32,1,8,7,2,4,3,4,2,2,2,2,7,24,170,86,232,201,55,55,201,128,6,211,0,49,248,0,248,0,10,9,2,2,1,3,1,2,4,2,2,2,9,236,56,56,200,200,20,38,218,238,18,9,216,0,216,41,216,0,252,0,252,0,128,2,0,12,0,64,0,0,0,70,0,1,0,129,10,18,27,24,24,24,0,232,232,232,229,238,130,11,47,94,94,94,0,162,162,162,209,0,24,24,131,1,232,232,131,4,178,150,168,191,223,132,18,223,190,166,147,178,158,165,213,0,94,94,94,0,214,166,158,0,158,158,129,1,158,158,132,33,216,216,232,240,236,236,236,0,20,20,20,16,23,40,40,216,186,196,196,196,0,60,60,60,70,40,236,236,40,40,216,216,20,20,131,5,68,88,107,87,40,20,130,19,20,41,88,108,88,68,68,61,6,216,175,175,175,216,6,60,68,0,68,68,129,1,68,68,132,0,128,2,0,12,0,28,0,0,0,31,0,1,0,15,92,70,182,160,19,250,2,233,43,43,214,214,74,74,220,210,131,132,6,100,100,0,51,205,205,51,135,4,236,236,20,20,186,129,8,70,196,196,60,60,0,206,20,60,131,132,65,255,46,255,46,128,3,164,228,228,164,135,128,2,0,12,0,34,32,0,0,22,0,1,12,11,1,2,2,2,2,2,1,1,1,1,2,2,11,10,1,2,2,2,2,2,2,1,1,2,2,128,9,146,0,233,0,233,24,170,160,0,233,129,3,154,0,205,51,131,0,102,11,236,56,236,20,236,20,236,186,0,40,236,20,129,3,64,0,32,224,132,0,192,128,2,0,12,0,25,32,0,0,25,0,1,0,9,8,1,2,2,2,2,1,1,2,2,8,86,232,0,146,24,170,160,0,232,134,1,205,51,15,200,200,20,20,236,236,56,56,236,186,0,40,236,236,20,20,131,139,3,224,32,32,224,131,0,128,2,0,12,0,27,32,0,0,17,0,1,10,9,1,2,2,2,1,1,1,1,2,2,9,8,1,2,2,2,2,1,1,2,2,8,54,200,0,232,24,170,160,0,232,129,0,154,132,0,102,9,219,39,236,20,236,186,0,40,236,20,129,0,57,133,0,199,128,2,0,12,0,27,32,0,0,17,0,1,10,9,3,4,1,1,1,1,2,1,3,1,9,8,3,4,2,1,1,2,1,3,1,128,7,232,24,170,160,94,94,138,138,132,3,152,0,94,0,9,236,20,236,186,0,40,196,196,60,60,133,3,81,0,175,0,128,2,0,12,0,31,0,0,0,30,0,1,0,15,52,13,149,255,255,95,231,198,52,52,198,198,24,24,170,160,131,0,230,129,1,146,146,129,3,230,0,146,146,136,15,218,235,69,2,2,185,19,38,218,218,38,38,236,186,0,40,131,0,200,129,65,0,160,0,160,129,0,200,139,0,2,0,12,0,56,32,0,0,57,32,1,19,18,0,1,2,5,1,1,1,1,1,3,1,2,2,2,2,2,2,1,1,129,1,24,232,130,5,90,90,166,166,0,24,129,3,232,24,170,160,14,136,158,0,167,158,136,158,172,0,94,0,158,158,0,158,131,19,18,1,2,3,1,1,1,2,2,3,1,2,2,2,2,2,1,1,1,1,11,176,236,20,20,20,80,0,196,60,60,0,236,129,4,20,236,186,0,40,13,78,50,0,50,75,78,68,0,175,0,68,68,0,68,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,67,0,0,0,49,0,1,0,20,216,216,235,24,64,90,90,232,232,231,227,221,24,24,170,170,86,86,86,94,106,64,0,132,5,30,242,236,232,232,232,131,5,40,188,188,171,167,203,129,3,224,227,6,40,132,2,139,135,130,64,255,120,1,238,195,67,255,114,255,111,255,109,255,119,132,129,25,242,222,209,202,202,20,20,18,12,5,236,236,56,56,200,200,200,200,200,230,50,31,19,20,20,20,131,128,4,80,80,66,44,16,138,9,207,204,222,227,236,236,208,225,200,207,132,0,128,2,0,12,0,68,0,0,0,67,32,1,0,128,36,11,24,24,24,12,0,23,57,68,57,57,57,0,213,166,166,166,0,29,57,57,57,17,82,73,36,62,65,57,195,195,232,232,57,57,195,195,131,135,12,238,246,246,0,88,88,88,42,0,168,168,168,212,129,2,20,20,35,129,0,120,129,1,141,148,136,20,19,0,4,2,3,2,2,3,2,1,2,1,2,3,1,3,1,1,1,2,1,19,196,236,186,191,206,35,70,35,4,206,206,196,206,206,20,20,20,206,20,20,131,4,216,166,0,90,90,64,0,160,0,80,129,3,80,60,60,0,64,0,160,128,0,90,0,2,0,12,0,85,32,0,0,77,32,1,29,28,0,3,2,1,1,1,3,1,1,3,4,1,1,2,1,2,1,2,1,2,3,3,3,4,2,1,1,1,1,19,226,162,162,24,24,24,245,232,232,0,47,100,100,47,0,162,162,0,48,100,129,2,232,24,162,131,130,19,1,0,60,0,6,10,0,206,237,10,98,98,60,0,158,158,226,50,0,236,129,1,10,246,129,28,27,0,3,1,1,4,1,3,1,1,1,3,1,1,1,2,1,2,1,2,3,3,3,3,2,2,2,2,2,27,60,70,50,30,236,0,20,20,26,30,0,228,196,196,228,0,50,50,0,196,0,216,20,42,236,50,0,216,134,14,4,10,10,37,37,1,226,176,176,236,60,80,40,219,246,133,128,2,0,12,0,37,0,0,0,25,32,1,0,129,21,92,92,232,232,24,24,24,24,24,27,37,52,64,0,228,192,170,162,162,162,162,162,131,128,1,158,158,134,4,21,48,68,82,87,140,8,7,1,2,2,4,5,1,7,1,128,6,206,20,236,236,30,50,50,0,80,130,0,216,130,0,128,2,0,12,0,94,0,0,0,81,32,1,0,128,45,7,18,24,24,24,27,30,30,0,13,23,24,24,24,1,236,234,232,20,4,236,213,164,164,164,220,0,247,237,232,232,232,245,1,0,51,94,94,94,52,0,213,162,162,162,213,131,129,6,251,242,236,248,253,5,5,129,3,9,19,20,10,131,20,80,98,98,98,40,0,223,166,156,159,170,191,206,214,238,0,164,164,168,186,226,130,3,229,206,187,164,131,27,26,1,1,3,3,1,1,1,1,1,3,2,1,2,3,1,1,1,1,4,3,2,1,1,1,1,3,2,26,250,242,236,236,0,239,232,236,236,0,20,20,0,68,68,36,0,6,20,10,190,190,190,231,10,66,36,131,3,20,249,248,5,130,15,176,176,216,231,246,0,255,0,86,34,236,217,180,180,0,86,128,2,0,12,0,69,0,0,0,66,0,1,0,128,9,24,24,24,0,251,5,0,155,155,155,129,4,1,1,232,236,249,129,13,24,24,24,0,240,232,9,6,0,155,155,155,251,5,131,129,19,236,250,251,210,45,45,45,236,164,164,164,158,159,0,255,0,45,251,250,246,131,7,94,92,92,92,20,218,210,45,131,128,3,236,236,236,40,130,23,59,59,59,0,7,16,20,20,16,6,40,40,236,236,236,0,13,20,20,10,0,59,59,59,133,129,12,236,241,241,38,221,221,221,30,86,86,86,86,86,130,3,251,5,7,10,130,8,10,180,170,170,170,226,31,38,221,131,128,2,0,12,0,64,0,0,0,61,32,1,0,128,28,51,76,90,90,90,49,246,249,24,24,24,120,120,232,216,166,166,166,181,216,239,232,232,232,251,24,24,232,232,131,128,25,157,163,178,196,224,247,0,17,8,0,7,106,96,96,77,9,0,219,175,158,147,180,196,220,1,96,129,0,96,131,19,18,0,1,1,1,1,3,1,2,2,1,1,3,2,1,1,2,1,3,2,18,186,146,166,186,186,226,230,236,146,146,20,70,34,0,9,20,20,236,20,128,3,70,64,43,30,129,11,236,158,168,178,236,80,80,80,50,30,0,178,128,2,0,12,0,32,0,0,0,30,32,1,0,20,94,94,94,44,0,162,162,160,150,170,195,197,214,232,232,232,24,24,174,162,162,131,128,5,4,44,88,88,88,4,145,11,10,1,3,2,2,1,1,1,4,2,1,2,10,206,251,50,58,65,38,20,20,236,40,50,2,176,166,176,135,0,0,2,0,12,0,45,32,0,0,34,32,1,14,13,4,6,2,1,1,2,1,1,1,1,2,1,2,2,13,24,232,0,49,94,94,49,0,206,162,162,206,24,232,129,11,162,162,206,50,94,94,94,50,206,162,205,51,12,11,1,3,1,2,3,1,5,3,3,1,1,2,9,246,236,246,10,20,10,186,36,70,36,129,133,5,211,170,45,86,219,37,0,128,2,0,12,0,19,0,0,0,27,32,1,10,9,0,4,2,3,1,2,1,2,2,2,9,60,61,195,231,0,242,232,38,24,61,130,2,162,162,162,130,0,86,8,7,0,4,2,4,2,1,4,2,128,6,221,35,0,20,20,236,0,129,2,80,80,80,129,0,168,128,2,0,12,0,33,0,0,0,35,0,1,0,16,128,128,148,177,238,10,66,234,24,24,158,158,128,107,40,219,232,131,130,4,226,199,226,0,69,133,64,0,140,0,60,132,16,50,50,70,55,54,55,221,20,236,236,50,50,50,166,166,0,20,131,128,68,0,160,0,160,0,148,0,132,0,130,128,0,196,140,0,128,2,0,12,0,71,0,0,0,69,0,1,0,128,30,21,61,70,10,16,18,0,3,14,24,14,0,232,187,176,226,225,231,0,248,244,232,242,24,20,214,28,20,10,7,144,131,129,1,239,206,64,0,140,4,116,100,100,100,103,131,7,22,60,146,153,156,156,156,155,130,1,240,123,67,0,144,0,147,0,182,0,185,132,128,30,240,217,216,213,224,238,246,241,236,236,245,0,15,39,40,37,26,18,10,15,20,20,11,236,206,10,10,14,255,246,75,131,129,7,253,0,9,225,186,186,186,186,131,7,3,0,11,51,70,70,70,70,130,0,186,68,255,66,255,66,255,42,254,247,254,232,132,0,128,2,0,12,0,50,0,0,0,51,0,1,0,32,20,193,170,181,24,24,162,162,162,222,20,56,94,94,94,104,97,43,24,24,182,152,94,94,94,232,232,232,232,94,94,232,232,131,135,4,199,138,138,138,192,130,0,7,136,1,137,149,136,128,31,17,60,50,236,236,50,50,50,24,0,231,206,206,196,196,217,248,236,236,50,50,206,206,206,20,20,20,20,206,206,20,20,131,134,6,60,60,60,60,60,60,60,137,3,60,60,60,60,136,128,2,0,12,0,41,0,0,0,36,0,1,0,17,93,11,5,101,232,189,93,36,30,6,1,23,209,183,178,199,212,6,131,128,1,156,156,131,0,125,64,0,129,8,121,108,100,0,10,14,1,241,177,131,17,216,246,10,216,20,50,216,216,213,197,204,236,0,237,234,245,250,10,131,128,1,70,70,132,8,12,252,221,206,0,7,52,79,60,132,128,2,0,12,0,98,0,0,0,101,0,1,0,128,34,24,24,24,57,40,232,232,146,166,166,166,255,245,246,0,43,66,90,90,90,38,246,245,239,232,232,232,237,40,40,65,24,24,24,12,130,8,166,166,166,232,232,24,24,232,232,131,129,11,20,11,14,251,206,50,50,50,0,156,156,156,129,4,152,152,178,196,226,129,21,156,156,177,196,225,247,50,251,3,20,44,53,88,106,96,96,96,4,206,206,50,96,129,0,96,131,128,6,236,236,236,246,0,20,20,64,255,36,2,70,70,70,129,14,10,236,206,196,186,186,186,228,10,0,10,20,20,20,1,129,4,245,236,236,236,246,130,8,70,70,70,20,20,236,236,20,20,131,129,11,246,251,255,0,37,219,219,219,50,74,74,74,129,4,70,65,49,40,22,129,21,74,74,61,50,30,6,219,20,16,238,206,186,163,158,178,178,178,236,37,37,219,178,129,0,178,131,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,48,0,0,0,38,32,1,0,128,22,32,60,60,60,196,196,196,223,226,223,232,242,232,240,244,59,59,197,197,24,24,232,232,131,129,1,237,216,129,8,216,186,158,158,158,158,158,2,2,132,0,100,129,0,100,131,13,12,0,4,2,3,1,2,1,1,1,2,2,2,2,128,11,226,40,0,4,20,20,14,7,216,30,236,20,129,3,80,80,80,80,133,0,182,0,128,2,0,12,0,56,0,0,0,52,32,1,0,31,226,208,173,152,162,162,162,162,219,0,39,90,90,90,37,0,212,162,162,24,24,12,0,233,232,232,232,229,24,24,162,162,131,129,0,3,131,10,219,168,168,168,220,0,33,88,88,88,42,133,2,242,0,4,136,16,15,0,1,1,2,1,1,2,1,3,4,2,1,4,3,3,2,15,70,70,72,50,50,50,11,226,186,18,50,236,10,20,236,50,131,0,90,64,0,180,5,90,90,0,166,226,226,129,1,226,0,0,128,2,0,12,0,72,0,0,0,64,0,1,0,128,26,57,73,90,90,90,55,54,41,24,24,24,27,17,0,238,216,232,72,57,27,0,231,185,156,156,156,210,129,4,251,232,232,232,245,131,128,4,150,162,202,226,3,130,3,4,0,248,250,130,18,5,0,72,89,98,98,98,68,24,0,212,156,156,156,158,200,226,237,252,131,27,236,236,212,186,186,186,236,0,247,236,236,236,241,249,0,7,18,20,246,251,253,0,19,46,60,60,60,29,129,4,10,20,20,20,255,131,128,4,70,63,42,30,1,139,16,186,181,176,176,176,194,231,0,39,80,80,80,80,70,60,38,7,131,0,0,2,0,12,0,52,32,0,0,46,32,1,17,16,1,3,2,1,1,1,1,2,2,2,2,1,3,3,1,3,2,1,11,24,130,11,249,238,232,239,0,100,100,0,156,156,0,232,130,13,50,110,101,80,40,10,158,208,0,100,0,208,0,100,16,15,1,3,1,1,1,1,1,1,1,1,4,3,3,3,3,2,2,246,236,246,130,7,5,15,20,20,0,196,0,60,129,132,10,156,154,163,178,186,80,0,176,0,176,0,0,2,0,12,0,39,32,0,0,37,32,1,12,11,0,1,1,1,2,1,2,1,3,1,4,2,11,20,37,50,50,206,206,236,226,242,232,24,232,129,9,213,168,0,158,158,158,158,252,0,100,12,11,0,4,2,2,1,1,1,2,1,1,2,2,128,2,221,35,21,129,5,20,20,20,0,236,20,129,4,80,80,80,80,80,131,0,182,0,2,0,12,0,37,32,0,0,39,32,1,11,10,3,1,1,1,3,1,1,1,1,3,4,10,24,24,18,24,0,192,158,158,158,98,232,3,100,94,100,100,129,4,11,50,0,158,0,13,12,1,1,1,3,2,1,1,1,1,1,3,1,3,12,237,236,236,236,0,50,50,49,50,50,206,206,20,129,1,182,182,132,3,10,80,10,0,128,2,0,12,0,50,32,0,0,63,0,1,0,18,17,4,6,2,1,1,1,1,4,2,1,3,1,2,2,1,1,1,1,17,24,232,61,35,221,195,0,80,0,215,176,215,36,220,35,61,195,221,133,7,188,34,68,68,222,188,60,196,131,128,34,4,236,236,236,4,0,252,20,20,20,252,216,226,30,40,0,210,176,176,176,210,0,45,80,80,80,45,246,246,10,10,226,216,40,30,131,129,2,14,0,243,130,2,243,0,14,132,11,70,70,42,0,214,186,186,186,214,0,42,70,139,128,2,0,12,0,62,0,0,0,60,0,1,0,31,20,63,109,110,217,216,233,236,227,247,4,10,236,191,147,146,40,40,23,20,20,13,9,252,248,5,24,30,110,232,226,146,131,129,7,223,196,125,115,98,98,98,101,131,8,31,56,128,142,158,158,158,156,156,131,0,236,129,0,20,132,128,17,250,247,241,241,238,250,0,246,236,236,245,0,6,9,15,15,18,5,129,10,20,20,20,20,0,236,246,196,20,10,60,131,131,5,176,175,176,176,176,176,131,8,1,0,80,81,80,80,80,80,80,131,0,40,129,0,216,132,0,128,2,0,12,0,42,0,0,0,27,32,1,0,128,18,24,24,24,172,172,172,0,84,84,84,232,232,232,54,34,49,207,222,202,131,129,0,176,129,4,176,172,172,172,176,129,0,176,129,0,172,129,0,172,132,10,9,2,4,3,4,1,1,1,1,1,1,9,236,60,196,20,216,236,216,40,20,40,128,0,90,135,128,2,0,12,0,78,0,0,0,66,32,1,0,2,236,245,247,129,24,211,211,250,30,61,94,94,94,232,232,232,233,20,22,24,24,24,162,162,162,190,216,2,45,45,129,5,9,11,45,45,211,211,131,129,9,204,146,146,146,158,168,168,168,182,196,129,1,196,225,130,1,225,196,129,11,196,182,168,168,168,158,146,146,146,204,0,146,129,0,146,131,22,21,0,1,1,1,1,1,2,3,4,2,1,1,2,4,1,4,1,1,1,1,2,2,21,30,21,4,10,107,20,3,206,20,24,226,230,236,50,33,236,149,246,252,235,236,20,129,5,9,20,62,216,90,42,132,5,42,90,216,62,20,9,129,0,40,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,50,0,0,0,55,0,1,0,24,128,128,148,177,238,10,66,234,24,24,158,158,128,94,94,94,95,94,40,219,248,238,232,232,232,131,130,4,226,199,226,0,69,133,3,226,214,213,222,64,0,140,4,60,167,171,180,196,132,24,50,50,70,55,54,55,221,20,236,236,50,50,50,206,206,206,205,206,226,40,20,18,20,20,20,131,128,68,0,160,0,160,0,148,0,132,0,130,128,0,196,133,9,226,226,226,226,226,226,226,224,226,226,132,0,2,0,12,0,33,32,0,0,39,32,1,10,9,3,4,2,1,5,3,3,1,3,1,9,24,232,22,50,233,206,98,98,158,158,129,7,51,22,206,22,162,0,94,0,12,11,3,4,2,1,1,4,2,1,2,2,2,2,11,236,20,7,18,18,245,234,234,0,206,0,46,129,9,216,237,0,40,0,237,66,0,190,0,128,2,0,12,0,17,0,0,0,17,0,1,8,7,1,2,2,2,2,2,2,2,7,61,195,24,61,195,232,24,61,129,2,158,0,158,129,0,110,7,221,35,236,221,35,20,236,221,129,2,58,0,58,129,0,196,128,2,0,12,0,58,0,0,0,43,32,1,0,19,24,24,58,94,94,94,39,0,231,220,200,24,35,247,0,234,232,232,232,135,65,255,58,255,58,3,24,24,232,232,131,128,11,163,181,220,246,34,94,94,94,116,120,40,24,130,4,240,246,200,146,138,129,1,158,158,132,13,12,0,1,3,3,2,1,1,3,3,2,1,3,2,12,236,236,196,0,240,236,216,0,20,64,110,236,20,128,5,68,236,175,175,176,226,129,3,60,78,68,0,128,2,0,12,0,92,0,0,0,87,0,1,0,128,44,7,24,24,11,9,4,0,46,98,98,98,68,23,0,249,3,186,210,232,232,232,245,249,3,10,56,98,98,98,57,20,244,230,210,24,22,2,10,250,232,232,232,181,136,136,131,131,32,152,155,162,162,162,190,216,233,9,31,31,31,245,242,240,226,236,245,0,31,245,246,10,38,50,72,94,94,94,99,95,25,13,130,5,255,0,245,238,236,40,131,128,12,250,239,236,236,240,249,0,230,200,200,200,213,238,130,5,236,253,20,20,20,10,129,20,237,212,200,200,200,243,21,16,248,236,236,240,250,0,10,20,20,20,254,236,236,131,131,15,81,81,81,81,81,43,10,244,212,196,196,196,60,216,229,247,130,13,196,60,56,39,15,0,218,175,175,175,190,205,30,15,132,2,248,239,236,132,128,2,0,12,0,32,0,0,0,32,0,1,0,15,24,0,142,166,24,220,32,32,176,176,232,232,32,32,176,176,131,0,9,129,8,9,9,177,177,9,9,177,177,9,135,15,236,206,25,55,236,0,199,199,17,17,20,20,199,199,17,17,131,0,217,129,8,217,217,39,39,217,217,39,39,217,135,0,128,2,0,12,0,59,32,0,0,73,0,1,0,19,18,3,2,3,2,3,2,1,1,1,1,1,3,4,1,1,1,1,1,2,15,25,159,46,97,70,0,196,214,248,10,254,231,28,25,161,175,129,0,231,128,9,212,162,0,60,0,146,193,226,226,226,131,3,206,0,98,0,31,236,236,236,236,56,56,22,246,218,200,200,200,235,20,42,60,100,70,53,40,26,18,20,20,20,3,240,236,236,46,46,60,129,1,20,20,131,129,15,21,40,40,60,81,81,81,50,10,216,171,171,171,181,20,1,130,6,252,255,10,15,10,0,181,130,1,181,188,129,0,188,131,0,128,2,0,12,0,61,0,0,0,55,32,1,0,35,152,24,24,24,0,232,221,152,152,0,11,24,24,152,152,142,145,163,176,203,232,232,232,244,0,50,104,104,104,50,0,206,152,152,152,204,131,129,5,10,5,1,0,100,96,143,11,162,162,228,0,45,94,94,94,45,0,226,162,131,19,18,0,1,1,3,1,1,1,1,1,2,2,1,3,3,3,3,3,2,1,18,50,236,236,20,20,50,50,246,242,236,50,60,20,20,246,206,0,50,50,129,3,216,0,181,184,134,5,242,81,242,175,221,6,0,128,2,0,12,0,25,0,0,0,24,0,1,0,11,125,101,232,0,24,24,164,164,24,24,232,56,131,131,0,60,129,1,60,102,129,0,102,131,128,9,196,20,60,236,236,50,50,236,236,20,132,131,0,196,129,1,196,192,129,0,192,131,0,2,0,12,0,93,32,0,0,48,32,1,30,29,0,3,3,3,4,1,1,3,1,2,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,2,2,4,2,128,10,24,0,232,47,98,98,0,210,158,158,210,130,14,46,98,98,98,46,0,209,158,158,158,209,11,24,244,232,128,28,236,8,236,162,200,236,51,51,236,200,162,20,236,205,205,242,20,55,94,94,94,55,20,242,205,248,20,0,20,16,15,4,6,3,1,1,4,2,1,6,3,4,2,4,3,3,3,15,236,20,229,200,200,27,56,56,0,200,27,56,246,236,9,20,129,9,81,56,35,221,35,56,35,241,175,241,131,0,128,2,0,12,0,64,0,0,0,67,32,1,0,3,24,35,104,104,64,0,151,2,232,232,232,129,25,50,106,106,106,52,0,210,158,158,158,208,80,53,24,24,24,11,0,245,232,232,104,104,114,111,93,131,128,19,156,160,0,203,0,206,230,255,162,162,211,0,30,94,94,94,29,0,211,162,146,21,20,0,1,1,1,1,1,4,1,1,1,2,1,1,2,3,3,2,1,3,2,1,20,236,236,206,206,253,20,0,232,208,208,236,10,33,56,236,236,251,10,20,206,196,20,242,61,58,242,189,242,67,67,21,236,161,161,161,0,242,0,242,242,242,242,242,0,2,0,12,0,32,32,0,0,29,32,1,10,9,3,4,1,1,1,1,2,1,3,1,9,24,232,0,30,34,4,98,98,158,158,130,6,226,41,71,162,0,94,0,10,9,3,4,1,1,1,1,1,2,2,2,1,236,20,132,2,206,0,46,130,6,20,0,236,66,0,190,0,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,25,0,0,0,21,32,1,14,13,1,3,2,1,3,1,1,1,2,2,1,1,2,2,13,11,24,0,246,232,246,0,28,61,28,0,229,195,229,133,7,195,195,0,61,61,61,0,195,6,5,4,6,3,2,2,4,5,236,20,234,206,234,50,129,3,60,0,196,0,128,2,0,12,0,18,0,0,0,18,0,1,8,7,1,2,2,2,2,2,2,2,7,31,225,24,31,225,232,24,31,7,2,2,207,2,207,2,2,67,7,226,30,236,226,30,20,236,226,7,2,2,81,2,81,2,2,193,128,2,0,12,0,48,0,0,0,49,32,1,0,11,24,24,49,73,73,73,37,15,249,24,20,8,129,9,232,232,232,204,176,176,24,24,232,232,131,128,7,206,237,26,53,68,68,68,64,132,4,10,0,228,202,206,129,1,206,206,132,15,14,0,1,3,2,1,1,1,1,2,3,1,1,1,3,2,14,236,236,196,236,237,236,236,243,20,20,20,59,90,236,20,128,13,80,0,196,196,206,10,6,0,20,42,91,110,80,0,128,2,0,12,0,81,0,0,0,75,32,1,0,128,11,7,19,24,11,9,4,0,25,54,54,54,25,130,5,216,223,232,232,232,244,129,17,28,54,54,54,20,17,16,24,18,7,0,245,232,232,232,218,206,206,131,131,26,197,197,197,197,197,217,236,252,13,13,13,216,242,242,239,236,246,0,13,243,248,21,40,58,58,58,58,132,5,246,236,234,229,229,254,131,25,24,0,3,1,3,3,3,2,1,1,1,1,2,1,1,3,2,2,1,1,1,4,1,1,1,1,128,21,236,236,0,196,0,216,0,9,20,20,9,216,216,196,0,236,236,240,251,20,20,9,129,129,14,30,30,10,236,0,236,227,236,236,0,236,20,246,226,226,131,3,253,246,246,0,0,128,2,0,12,0,25,32,0,0,32,0,1,0,8,7,1,2,2,2,2,2,2,2,7,24,211,24,31,225,232,31,225,129,2,206,0,206,130,15,236,216,0,25,236,0,226,226,20,20,20,20,226,226,20,20,131,0,246,129,8,246,246,40,40,246,246,40,40,246,135,128,2,0,12,0,61,0,0,0,48,32,1,0,128,31,12,24,24,185,185,0,31,66,66,66,42,20,226,186,186,199,229,246,240,232,232,232,245,24,24,186,186,186,216,226,232,232,131,132,11,204,204,204,224,241,7,30,30,30,0,216,244,130,2,248,241,248,133,0,50,129,0,50,131,16,15,1,2,2,1,1,3,2,2,1,3,4,3,2,1,2,2,7,247,236,30,0,241,226,10,30,129,5,20,236,30,30,0,20,129,5,30,30,30,249,236,226,132,2,226,0,206,128,2,0,12,0,53,0,0,0,61,32,1,0,33,200,24,24,24,1,232,229,211,195,195,246,6,24,24,200,195,191,192,194,196,214,232,232,232,239,0,56,56,56,0,226,195,195,195,131,133,2,49,47,25,143,8,218,218,0,36,36,36,17,0,218,131,20,19,0,1,1,2,1,1,3,2,1,1,1,1,1,3,4,2,2,2,1,3,128,18,236,236,255,20,20,40,246,236,236,0,40,60,50,20,0,216,0,18,40,128,4,20,20,1,0,206,129,1,11,20,132,4,30,0,226,226,30,0,128,2,0,12,0,21,0,0,0,20,0,1,0,11,46,53,232,226,24,24,214,214,24,24,232,232,131,135,0,49,129,0,49,131,10,246,216,20,50,236,236,40,40,236,236,20,132,135,0,195,129,0,195,131,0,2,0,12,0,52,32,0,0,58,32,1,16,15,1,2,7,3,1,3,2,2,5,1,3,1,2,3,3,3,15,11,24,232,56,56,229,200,0,56,56,200,200,0,24,0,232,15,255,245,250,219,242,2,242,245,232,0,35,0,245,250,255,250,18,17,1,3,1,2,3,1,2,4,2,2,7,4,2,3,1,2,3,1,17,246,236,246,10,20,10,216,19,40,0,226,30,246,236,246,10,20,10,17,255,255,255,255,255,255,39,255,19,255,215,255,255,255,255,255,255,255,128,2,0,12,0,53,32,0,0,63,0,1,0,19,18,0,1,3,1,2,1,2,4,2,1,2,1,1,1,1,2,3,2,3,18,24,27,61,56,232,232,60,24,10,249,232,56,61,65,64,0,61,0,200,1,251,202,130,0,254,136,3,220,0,38,220,33,236,236,225,216,216,0,20,20,20,1,206,220,236,236,236,247,0,9,20,20,0,216,196,197,202,0,237,216,216,216,0,40,40,40,131,3,251,45,43,23,129,3,236,236,243,250,135,1,246,236,132,8,30,30,15,0,226,226,226,0,30,131,0,128,2,0,12,0,12,0,0,0,11,0,1,0,128,2,38,0,218,131,128,2,196,0,54,131,2,60,0,196,132,3,236,20,20,236,131,128,2,0,12,0,88,0,0,0,85,32,1,0,128,30,38,0,218,31,31,225,225,24,24,31,31,225,225,232,232,24,24,31,31,24,24,49,73,73,73,37,15,249,24,20,8,129,9,232,232,232,204,176,176,24,24,232,232,131,128,27,196,0,54,2,2,2,2,2,207,207,2,2,207,207,2,67,2,2,67,0,206,237,26,53,68,68,68,64,132,4,10,0,228,202,206,129,1,206,206,132,27,26,0,1,1,1,2,2,2,2,2,2,2,2,1,1,3,2,1,1,1,1,2,3,1,1,1,3,2,26,20,236,236,20,226,30,236,226,30,20,236,226,236,236,196,236,237,236,236,243,20,20,20,59,90,236,20,26,236,0,20,0,2,2,81,2,81,2,2,193,0,80,0,196,196,206,10,6,0,20,42,91,110,80,0,0,2,0,12,0,63,32,0,0,73,32,1,20,19,0,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,128,18,38,0,218,24,211,24,31,225,232,31,225,31,225,24,31,225,232,24,31,128,2,196,0,54,129,2,206,0,206,130,7,2,2,207,2,207,2,2,67,23,22,0,1,1,1,1,1,1,1,1,1,2,1,2,3,2,2,2,2,2,2,2,2,2,22,20,236,236,20,236,216,0,25,236,0,226,20,20,226,20,226,30,236,226,30,20,236,226,4,246,10,30,10,246,129,5,246,246,40,246,246,40,129,7,2,2,81,2,81,2,2,193,128,2,0,12,0,114,0,0,0,114,0,1,0,128,31,38,0,218,24,24,211,211,24,24,31,31,225,225,232,232,31,31,225,225,0,7,19,24,11,9,4,0,25,54,54,54,25,130,5,216,223,232,232,232,244,129,17,28,54,54,54,20,17,16,24,18,7,0,245,232,232,232,218,206,206,131,128,2,196,0,54,132,1,206,206,129,1,206,206,136,26,197,197,197,197,197,217,236,252,13,13,13,216,242,242,239,236,246,0,13,243,248,21,40,58,58,58,58,132,5,246,236,234,229,229,254,131,59,20,236,236,20,236,216,0,25,236,0,226,226,20,20,20,20,226,226,20,20,0,250,240,236,236,240,250,0,227,196,196,196,227,0,216,216,0,9,20,20,20,9,216,216,205,196,196,196,0,245,236,236,240,251,0,10,20,20,20,9,133,4,226,246,10,246,246,129,8,246,246,40,40,246,246,40,40,246,135,26,30,30,30,30,30,20,10,252,236,236,236,0,236,227,236,236,246,0,236,20,17,1,246,226,226,226,226,134,2,253,246,246,132,0,0,2,0,12,0,88,32,0,0,94,32,1,28,27,0,1,1,1,2,2,2,2,2,2,2,2,2,2,7,3,1,3,2,2,5,1,3,1,2,3,3,3,128,26,38,0,218,31,225,24,31,225,232,24,31,11,24,232,56,56,229,200,0,56,56,200,200,0,24,0,232,128,26,196,0,54,2,2,207,2,207,2,2,67,255,245,250,219,242,2,242,245,232,0,35,0,245,250,255,250,30,29,0,1,1,1,2,2,2,2,2,2,2,2,2,3,1,2,3,1,2,4,2,2,7,4,2,3,1,2,3,1,29,20,236,236,20,226,30,236,226,30,20,236,226,246,236,246,10,20,10,216,19,40,0,226,30,246,236,246,10,20,10,29,236,0,20,0,2,2,81,2,81,2,2,193,255,255,255,255,255,255,39,255,19,255,215,255,255,255,255,255,255,255,0,2,0,12,0,154,32,0,0,143,32,1,51,50,0,1,1,1,1,3,1,2,1,1,2,2,1,2,1,3,2,1,1,1,1,1,2,1,1,1,1,1,1,1,2,1,1,1,1,2,2,7,3,1,3,2,2,5,1,3,1,2,3,3,3,128,10,38,0,218,0,24,11,4,0,25,54,25,129,2,216,232,244,129,31,28,54,54,20,17,16,24,18,7,0,245,232,232,218,206,206,11,24,232,56,56,229,200,0,56,56,200,200,0,24,0,232,128,2,196,0,54,129,18,197,197,197,197,236,13,13,216,242,236,0,13,243,248,21,40,58,58,58,132,20,236,234,229,229,254,255,245,250,219,242,2,242,245,232,0,35,0,245,250,255,250,47,46,0,1,1,1,1,3,1,3,3,3,2,1,1,1,1,2,1,1,3,2,2,1,1,1,4,1,1,1,1,2,3,1,2,3,1,2,4,2,2,7,4,2,3,1,2,3,1,26,20,236,236,20,0,236,236,0,196,0,216,0,9,20,20,9,216,216,196,0,236,236,240,251,20,20,9,129,17,246,236,246,10,20,10,216,19,40,0,226,30,246,236,246,10,20,10,3,246,10,30,10,129,14,30,30,10,236,0,236,227,236,236,0,236,20,246,226,226,131,21,253,246,246,0,255,255,255,255,255,255,39,255,19,255,215,255,255,255,255,255,255,255,0,0,2,0,12,0,125,32,0,0,115,32,1,41,40,0,1,1,1,4,2,1,1,2,1,2,1,1,1,1,1,1,1,2,2,2,3,1,1,2,2,2,7,3,1,3,2,2,5,1,3,1,2,3,3,3,128,39,38,0,218,24,185,0,31,66,66,20,226,186,186,199,229,246,240,232,245,24,186,216,226,232,11,24,232,56,56,229,200,0,56,56,200,200,0,24,0,232,128,13,196,0,54,0,204,204,204,241,7,30,30,0,216,244,130,0,241,130,18,50,0,50,255,245,250,219,242,2,242,245,232,0,35,0,245,250,255,250,38,37,0,1,1,1,2,2,2,1,1,3,2,2,1,3,4,3,2,1,2,2,2,3,1,2,3,1,2,4,2,2,7,4,2,3,1,2,3,1,11,20,236,236,20,247,236,30,0,241,226,10,30,129,23,20,236,30,30,0,20,246,236,246,10,20,10,216,19,40,0,226,30,246,236,246,10,20,10,3,246,10,30,10,129,5,30,30,30,249,236,226,132,20,226,0,206,255,255,255,255,255,255,39,255,19,255,215,255,255,255,255,255,255,255,0,2,0,12,0,83,32,0,0,91,32,1,28,27,0,1,1,1,1,1,1,1,2,2,2,2,2,2,7,3,1,3,2,2,5,1,3,1,2,3,3,3,128,26,38,0,218,46,53,232,226,24,214,24,232,11,24,232,56,56,229,200,0,56,56,200,200,0,24,0,232,128,2,196,0,54,134,16,49,255,245,250,219,242,2,242,245,232,0,35,0,245,250,255,250,31,30,0,1,1,1,1,1,1,1,2,2,2,1,1,2,3,1,2,3,1,2,4,2,2,7,4,2,3,1,2,3,1,30,20,236,236,20,246,216,20,50,236,40,236,20,0,246,236,246,10,20,10,216,19,40,0,226,30,246,236,246,10,20,10,3,246,10,30,10,135,18,195,255,255,255,255,255,255,39,255,19,255,215,255,255,255,255,255,255,255,0,2,0,12,0,22,32,0,0,21,32,1,6,5,1,3,2,1,1,3,5,20,48,0,235,208,235,128,4,186,159,159,186,0,6,5,0,1,3,1,1,4,128,4,238,215,238,0,41,129,3,58,82,82,24,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,60,60,181,216,131,135,3,216,216,40,40,131,135,0,128,2,0,12,0,40,32,0,0,50,0,1,0,12,11,1,3,2,1,1,3,2,3,2,1,1,3,11,20,48,0,235,208,235,20,48,0,235,208,235,1,97,27,129,7,27,97,0,186,159,159,186,0,128,22,231,196,196,196,231,0,24,60,60,60,24,0,231,196,196,196,231,0,24,60,60,60,24,131,4,136,136,171,196,220,130,3,220,196,171,136,129,8,35,60,84,120,120,120,84,60,35,132,0,128,2,0,12,0,29,32,0,0,31,0,1,0,9,8,1,3,2,1,1,3,2,1,1,8,20,48,0,235,208,235,60,181,216,1,97,27,129,1,27,97,130,128,14,231,196,196,196,231,0,24,60,60,60,24,216,216,40,40,131,4,136,136,171,196,220,130,3,220,196,171,136,135,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,0,2,0,12,0,34,32,0,0,34,32,1,10,9,0,1,1,1,2,3,2,1,1,3,9,55,59,197,201,20,48,0,235,208,235,0,156,129,6,156,0,186,159,159,186,0,10,9,0,1,1,1,1,1,3,1,1,4,9,216,196,60,40,0,238,215,238,0,41,0,120,129,0,120,129,3,58,82,82,24,128,2,0,12,0,33,32,0,0,34,0,1,0,10,9,0,1,1,1,1,1,3,1,2,2,9,59,55,201,197,0,235,208,235,20,48,128,1,100,100,130,3,69,97,97,49,15,196,216,40,60,0,17,41,41,41,17,0,238,215,215,215,238,131,128,1,136,136,130,8,231,215,197,174,174,174,197,215,231,132,128,2,0,12,0,87,0,0,0,85,32,1,0,9,53,53,53,58,73,93,104,104,104,49,129,13,245,232,232,232,229,213,204,203,203,203,201,24,65,22,129,13,245,240,0,20,48,48,48,20,0,235,208,208,208,235,131,10,156,176,169,161,176,197,224,246,43,100,100,129,11,251,246,239,235,216,207,192,176,156,120,40,36,129,2,100,100,122,129,8,227,207,186,159,159,159,186,207,227,132,27,26,0,1,1,1,1,1,1,1,3,1,3,1,1,1,1,1,1,2,1,3,1,3,1,3,1,1,4,26,216,216,216,235,0,224,196,196,236,0,20,20,11,0,18,40,40,236,226,0,236,0,238,215,238,0,41,8,40,25,30,23,40,22,247,226,181,129,9,244,223,216,228,244,241,181,236,0,181,129,3,58,82,82,24,0,128,2,0,12,0,84,0,0,0,83,0,1,0,128,19,11,24,24,24,27,43,51,53,53,53,203,203,203,197,183,163,152,152,152,206,130,17,11,16,55,232,191,234,0,235,208,208,208,235,0,20,48,48,48,20,131,129,26,4,10,17,21,40,49,63,80,100,100,80,88,95,80,60,33,10,214,156,156,0,156,156,134,136,216,221,130,8,28,49,69,97,97,97,69,49,28,132,128,40,246,236,236,236,246,0,238,216,216,216,40,40,40,21,0,32,60,60,60,38,20,0,20,20,20,20,30,26,10,0,17,41,41,41,17,0,238,215,215,215,238,131,131,24,12,33,40,28,11,15,216,216,231,227,232,216,234,9,30,51,75,75,0,75,75,75,75,20,11,130,8,231,215,197,174,174,174,197,215,231,132,128,2,0,12,0,2,0,0,0,4,0,1,0,132,132,132,0,216,131,0,0,2,0,12,0,24,32,0,0,28,32,1,4,3,1,4,4,4,0,39,66,0,140,255,217,255,116,67,0,140,255,217,255,116,0,39,8,7,0,2,2,2,3,1,2,2,128,6,211,194,211,17,46,62,46,7,194,210,0,46,62,46,0,210,128,2,0,12,0,42,0,0,0,42,0,1,0,19,20,27,229,183,236,73,27,229,15,18,227,241,38,63,193,218,241,15,29,238,131,11,23,27,229,192,23,192,229,27,36,44,181,220,131,3,36,220,181,44,131,19,192,212,36,10,64,246,212,36,247,242,3,12,216,216,40,50,12,247,253,14,131,11,219,231,19,253,219,253,25,237,218,202,23,48,131,3,208,38,23,202,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,17,0,0,0,17,0,1,8,7,1,2,2,2,2,2,2,2,7,50,216,24,232,40,206,24,232,129,1,234,60,129,1,196,22,7,206,30,236,20,226,50,236,20,129,1,34,196,129,1,60,222,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,6,0,0,0,6,0,1,0,135,128,1,170,170,132,135,128,1,88,88,132,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,24,90,232,166,131,135,3,236,201,20,55,131,135,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,90,24,166,232,131,135,3,201,236,55,20,131,135,0,128,2,0,12,0,32,0,0,0,26,32,1,0,17,232,254,24,24,24,254,232,232,242,232,198,162,162,162,198,232,242,232,131,135,8,90,90,90,43,0,213,166,166,166,132,8,7,0,4,2,2,1,3,3,1,128,6,236,0,20,0,60,0,20,130,4,171,171,0,85,85,0,128,2,0,12,0,31,32,0,0,32,0,1,0,10,9,0,1,1,3,3,1,1,1,4,2,9,24,14,24,94,24,14,24,24,232,24,128,4,166,166,0,90,90,131,17,235,235,255,227,195,195,195,227,255,235,235,255,8,19,19,19,8,255,131,128,8,85,85,85,40,0,216,171,171,171,139,128,2,0,12,0,80,0,0,0,85,32,1,0,135,6,38,56,24,24,47,47,24,135,31,247,237,232,242,246,253,0,195,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,132,195,0,253,247,243,232,237,247,131,134,8,5,10,13,13,243,243,245,248,253,137,5,88,88,90,90,90,43,131,5,250,243,243,13,13,6,131,5,214,166,166,166,167,168,134,30,29,0,3,3,1,1,1,2,1,1,1,1,1,3,3,1,2,1,3,3,1,2,3,1,3,1,2,3,3,1,2,131,5,31,29,236,18,36,21,131,15,6,20,20,50,64,64,64,64,64,64,64,64,50,20,20,6,129,9,200,192,193,200,56,56,55,54,54,56,131,11,171,171,171,194,0,5,251,0,24,85,85,85,129,0,2,0,12,0,87,32,0,0,88,32,1,29,28,0,2,1,1,1,2,1,1,1,3,3,1,3,3,2,1,2,1,1,1,2,6,2,1,1,2,1,1,2,28,254,18,22,11,8,254,59,122,122,122,122,122,122,122,59,254,9,12,22,18,254,254,230,207,206,230,199,216,254,130,4,168,167,166,166,214,129,1,13,243,129,3,90,90,88,88,131,6,248,245,243,13,13,10,0,30,29,0,3,1,3,1,2,2,1,3,1,3,2,1,2,1,3,1,3,3,3,1,1,1,1,2,1,1,1,1,3,128,15,236,236,206,200,192,192,192,192,192,192,192,192,200,206,236,236,131,5,235,220,237,20,227,225,130,129,13,85,85,85,85,24,0,251,5,0,194,171,171,171,171,130,10,56,54,54,55,56,200,200,193,192,200,0,0,128,2,0,12,0,13,0,0,0,13,0,1,6,5,1,2,2,2,2,2,5,24,170,170,232,170,232,129,0,154,129,0,102,5,236,56,56,20,56,20,129,0,74,129,0,182,128,2,0,12,0,13,0,0,0,13,0,1,6,5,1,2,2,2,2,2,5,98,232,24,98,24,98,129,0,154,129,0,102,5,212,20,236,212,236,212,129,0,74,129,0,182,128,2,0,12,0,11,0,0,0,11,0,1,0,7,85,24,24,85,232,171,171,232,131,139,7,136,236,236,136,40,120,120,40,131,139,0,128,2,0,12,0,11,0,0,0,11,0,1,0,7,26,87,87,26,173,234,234,173,131,139,7,208,128,128,208,112,12,12,112,131,139,0,128,2,0,12,0,11,0,0,0,11,0,1,0,7,90,24,24,90,232,166,166,232,131,139,7,160,220,220,160,4,64,64,4,131,139,0,128,2,0,12,0,11,0,0,0,11,0,1,0,7,24,90,90,24,166,232,232,166,131,139,7,252,192,192,252,96,36,36,96,131,139,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,7,0,0,0,7,0,1,0,135,3,48,208,208,48,131,135,3,217,39,39,217,131,0,128,2,0,12,0,7,0,0,0,7,0,1,0,135,3,48,208,208,48,131,135,3,217,39,39,217,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,7,0,0,0,7,0,1,0,135,0,88,129,0,88,131,135,0,178,129,0,178,131,0,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,133,128,0,206,131,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,9,0,0,0,7,0,1,0,128,1,50,216,64,255,116,131,135,3,136,186,0,236,131,135,0,128,2,0,12,0,10,0,0,0,7,0,1,0,0,40,64,0,140,128,0,206,131,135,3,226,246,90,40,131,135,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,35,0,0,0,35,0,1,0,0,232,129,7,232,232,172,172,232,0,24,24,129,1,196,196,132,128,3,35,221,0,115,129,5,141,0,35,221,0,115,129,0,141,131,10,20,246,246,20,20,100,100,20,0,246,246,129,1,90,90,132,128,14,236,20,0,186,10,246,70,0,236,20,0,186,10,246,70,131,0,128,2,0,12,0,33,0,0,0,36,0,1,0,129,1,60,60,129,7,232,232,24,24,84,84,24,24,133,128,0,141,129,5,115,0,221,35,0,141,129,3,115,0,221,35,131,15,10,10,176,176,10,10,20,20,246,246,166,166,246,246,20,20,131,128,14,70,246,10,186,0,20,236,0,70,246,10,186,0,20,236,131,128,2,0,12,0,20,0,0,0,20,0,1,0,7,212,4,4,212,212,156,156,212,131,128,3,40,216,0,110,129,0,146,131,7,20,236,236,20,20,120,120,20,131,128,6,236,20,0,196,10,246,60,131,0,128,2,0,12,0,20,0,0,0,20,0,1,0,7,44,44,100,100,44,44,252,252,131,128,0,146,129,3,110,0,216,40,131,7,236,236,136,136,236,236,20,20,131,128,6,60,246,10,196,0,20,236,131,0,128,2,0,12,0,5,0,0,0,5,0,1,0,1,20,236,131,133,1,216,40,131,133,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,51,66,190,205,131,135,3,226,206,50,30,131,135,0,128,2,0,12,0,11,0,0,0,11,0,1,0,139,7,48,208,208,48,48,208,208,48,131,139,7,222,34,34,222,222,34,34,222,131,0,128,2,0,12,0,15,0,0,0,15,0,1,0,143,11,48,208,208,48,48,208,208,48,48,208,208,48,131,143,11,222,34,34,222,222,34,34,222,222,34,34,222,131,0,128,2,0,12,0,47,0,0,0,44,0,1,0,129,2,41,91,123,67,0,149,0,164,0,164,0,150,2,124,91,40,133,65,0,144,0,144,131,128,18,131,176,246,41,73,81,179,186,221,17,84,125,0,206,50,51,209,209,51,131,129,0,172,71,255,75,255,40,255,57,255,86,255,86,255,57,255,41,255,77,0,174,139,128,11,100,46,242,217,216,224,34,41,43,18,213,156,130,3,224,34,34,224,131,128,2,0,12,0,13,0,0,0,13,0,1,0,131,3,55,55,201,201,131,3,48,208,208,48,135,131,3,218,218,38,38,131,3,222,34,34,222,135,0,128,2,0,12,0,47,0,0,0,44,0,1,0,129,2,41,91,122,67,0,148,0,164,0,164,0,150,2,124,91,40,133,65,0,144,0,144,131,128,18,141,183,248,41,73,81,179,186,221,17,84,125,0,206,50,51,209,209,51,131,129,0,172,71,255,75,255,39,255,56,255,86,255,86,255,57,255,41,255,77,0,174,139,128,11,110,53,244,217,216,224,34,41,43,18,213,156,130,3,224,34,34,224,131,128,2,0,12,0,64,0,0,0,53,0,1,0,129,65,0,150,0,150,133,65,0,144,0,144,129,2,41,91,123,67,0,149,0,164,0,164,0,150,2,124,91,40,135,128,64,255,126,129,64,0,130,128,21,206,50,51,209,209,51,0,131,179,250,43,73,81,179,186,221,18,84,125,0,206,50,131,129,1,156,156,137,0,172,71,255,75,255,40,255,57,255,86,255,86,255,57,255,41,255,77,0,174,135,128,0,70,129,0,186,130,16,224,34,34,224,0,100,49,246,219,216,224,34,41,43,19,213,156,134,128,2,0,12,0,29,0,0,0,22,0,1,0,132,65,255,106,255,106,130,1,40,40,131,128,2,50,206,0,64,0,130,129,64,255,126,3,39,217,217,39,131,132,1,100,100,130,65,0,190,0,190,131,131,0,186,129,4,70,213,43,43,213,131,128,2,0,12,0,67,0,0,0,35,0,1,0,129,1,40,40,79,252,204,252,204,252,204,252,204,252,204,252,54,252,54,252,204,3,52,3,52,3,52,3,52,3,52,2,158,2,158,3,52,131,7,49,207,207,49,0,50,206,0,64,0,130,129,64,255,126,128,2,50,206,0,64,0,130,129,64,255,126,131,129,65,0,190,0,190,132,1,100,100,133,65,0,140,0,140,132,3,223,33,33,223,131,0,186,129,0,70,131,0,186,129,0,70,131,0,128,2,0,12,0,64,0,0,0,67,0,1,0,7,34,32,50,23,252,7,18,9,130,18,114,114,114,78,38,26,5,38,72,69,60,76,90,90,90,234,234,234,4,135,129,11,13,65,115,111,111,111,91,70,57,57,70,33,131,6,206,154,145,145,145,207,20,129,6,20,9,0,48,208,208,48,131,7,238,236,228,227,227,0,10,4,130,18,182,182,182,201,222,223,217,227,216,210,204,204,204,204,204,22,22,22,3,135,33,227,227,217,217,215,207,207,207,202,197,224,224,1,27,51,51,51,57,51,58,71,71,71,52,31,31,31,227,227,227,222,34,34,222,131,128,2,0,12,0,88,0,0,0,87,0,1,0,47,16,18,22,24,24,24,22,18,16,13,6,3,13,9,0,252,209,162,162,162,209,252,255,6,10,0,4,13,20,27,229,183,236,73,27,229,15,18,227,241,38,63,193,218,241,15,29,238,131,138,28,2,92,90,90,90,90,43,0,213,166,166,166,165,163,253,255,0,23,27,229,192,23,192,229,27,36,44,181,220,131,3,36,220,181,44,131,47,238,238,238,238,238,238,238,238,238,243,253,2,2,253,243,238,21,62,62,62,21,238,240,245,248,248,245,241,192,212,36,10,64,246,212,36,247,242,3,12,216,216,40,50,12,247,253,14,131,139,27,171,171,171,171,171,216,0,40,85,85,85,84,83,254,255,0,219,231,19,253,219,253,25,237,218,202,23,48,131,3,208,38,23,202,131,128,2,0,12,0,104,32,0,0,99,0,1,0,35,34,2,1,3,2,1,2,1,1,2,1,2,1,3,1,1,1,1,2,2,1,3,2,1,1,1,2,1,2,3,3,1,1,1,2,2,34,54,54,94,106,80,24,80,105,94,94,54,54,6,231,246,0,4,14,186,186,226,188,132,132,188,226,226,186,14,1,246,250,6,55,201,11,225,196,0,10,13,243,243,246,0,17,60,32,130,14,88,88,90,75,60,0,243,243,13,13,0,239,196,166,168,132,132,11,40,40,40,57,36,236,236,38,58,40,40,40,133,0,237,129,23,14,38,50,57,64,64,64,104,104,104,83,64,64,83,104,104,104,64,64,64,57,50,38,14,131,3,218,218,38,38,131,129,17,225,196,197,199,200,192,193,200,200,56,56,54,54,56,58,59,60,32,132,25,171,171,171,171,171,203,231,238,250,0,2,5,5,251,251,254,0,7,19,25,53,85,85,85,85,85,138,128,2,0,12,0,133,0,0,0,112,32,1,0,15,252,253,255,0,245,248,251,252,44,93,93,93,93,93,93,111,65,0,147,0,147,52,111,93,93,93,93,93,93,44,252,251,248,246,0,255,253,252,239,225,225,225,225,225,225,208,199,218,255,255,206,199,225,225,225,225,225,225,239,189,189,232,232,40,40,206,206,182,182,232,232,50,50,216,216,131,131,25,168,167,166,166,166,214,0,5,13,17,23,13,13,243,243,233,239,244,252,0,43,90,90,90,88,88,134,5,252,243,239,244,249,254,131,4,3,10,17,13,5,130,3,60,234,234,60,131,3,22,196,196,22,135,38,37,0,3,1,3,1,2,2,1,3,1,3,2,1,2,1,3,1,3,3,3,1,1,1,1,2,1,1,1,1,3,4,2,2,2,2,2,2,2,128,15,236,236,206,200,192,192,192,192,192,192,192,192,200,206,236,236,131,5,235,220,237,20,227,225,130,7,245,20,196,20,238,20,196,20,129,13,85,85,85,85,24,0,251,5,0,194,171,171,171,171,130,12,56,44,28,20,16,240,240,224,204,200,0,34,196,129,1,60,222,129,128,2,0,12,0,16,0,0,0,16,0,1,8,7,1,2,2,2,2,2,2,2,7,24,172,172,0,172,0,55,201,129,0,170,129,0,86,129,7,236,54,54,20,54,20,218,38,129,0,78,129,0,178,129,128,2,0,12,0,28,0,0,0,28,0,1,14,13,1,2,2,2,2,2,2,2,1,2,3,2,2,2,13,50,216,14,232,40,206,14,232,232,86,24,86,24,86,129,1,234,60,129,1,196,22,130,2,154,102,0,13,196,20,0,20,196,20,0,20,20,200,236,200,236,200,129,1,34,196,129,1,60,222,130,2,74,182,0,0,2,0,12,0,27,32,0,0,26,32,1,8,7,0,2,3,3,2,1,1,3,129,5,20,48,0,235,208,235,7,48,208,23,209,182,182,209,23,8,7,0,2,2,1,3,1,1,4,130,4,238,215,238,0,41,7,222,34,218,218,20,44,44,242,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,0,2,0,12,0,49,32,0,0,48,32,1,16,15,0,2,2,2,3,3,2,1,1,3,2,3,2,1,1,3,131,11,20,48,0,235,208,235,20,48,0,235,208,235,15,48,208,48,208,50,236,209,209,236,50,50,236,209,209,236,50,16,15,0,2,2,2,2,1,3,1,1,4,2,1,3,1,1,4,132,10,238,215,238,0,41,0,238,215,238,0,41,15,228,40,216,28,218,218,20,44,44,242,218,218,20,44,44,242,0,0,2,0,12,0,64,32,0,0,60,32,1,20,19,0,1,1,1,1,1,1,1,2,3,2,1,1,3,2,3,2,1,1,3,128,1,1,1,129,14,153,153,0,20,48,0,235,208,235,20,48,0,235,208,235,4,40,70,186,216,70,129,12,186,68,254,227,227,254,68,68,254,227,227,254,68,20,19,0,1,1,1,1,1,1,1,1,1,3,1,1,4,2,1,3,1,1,4,132,1,50,50,129,10,238,215,238,0,41,0,238,215,238,0,41,19,236,216,40,20,216,10,246,40,236,236,38,62,62,4,236,236,38,62,62,4,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,0,2,0,12,0,31,32,0,0,30,32,1,10,9,0,2,2,2,3,3,2,1,1,3,131,5,20,48,0,235,208,235,9,48,208,50,210,50,236,209,209,236,50,10,9,0,2,2,2,2,1,3,1,1,4,132,4,238,215,238,0,41,9,227,40,216,27,218,218,20,44,44,242,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,85,32,0,0,105,0,1,0,28,27,0,2,2,2,3,3,2,1,1,3,2,3,2,1,1,3,2,3,2,1,1,3,2,3,2,1,1,3,131,23,20,48,0,235,208,235,20,48,0,235,208,235,20,48,0,235,208,235,20,48,0,235,208,235,5,48,208,50,210,97,27,129,9,27,97,0,186,159,159,186,0,97,27,129,7,27,97,0,186,159,159,186,0,136,46,231,196,196,196,231,0,24,60,60,60,24,0,231,196,196,196,231,0,24,60,60,60,24,0,231,196,196,196,231,0,24,60,60,60,24,0,231,196,196,196,231,0,24,60,60,60,24,131,12,228,40,40,228,216,28,28,216,136,136,171,196,220,130,3,220,196,171,136,129,14,35,60,84,120,120,120,84,60,35,0,136,136,171,196,220,130,3,220,196,171,136,129,8,35,60,84,120,120,120,84,60,35,132,0,0,2,0,12,0,49,32,0,0,64,32,1,16,15,0,2,2,2,3,3,2,1,1,3,2,3,2,1,1,3,131,11,20,48,0,235,208,235,20,48,0,235,208,235,5,88,248,90,250,97,27,129,7,27,97,0,186,159,159,186,0,20,19,1,2,2,2,1,3,1,2,1,1,1,2,1,3,1,2,1,1,1,2,2,100,0,100,129,14,196,196,0,24,60,60,24,0,196,196,0,24,60,60,24,6,80,11,67,0,136,196,220,129,10,220,196,136,0,60,84,120,120,84,60,0,0,128,2,0,12,0,63,32,0,0,66,0,1,0,20,19,0,1,1,1,1,1,1,1,2,3,2,1,1,3,2,3,2,1,1,3,129,1,123,123,129,13,255,255,20,48,0,235,208,235,20,48,0,235,208,235,1,40,186,129,5,70,216,186,70,97,27,129,7,27,97,0,186,159,159,186,0,31,239,239,229,229,239,239,3,3,0,231,196,196,196,231,0,24,60,60,60,24,0,231,196,196,196,231,0,24,60,60,60,24,131,12,236,40,246,10,216,20,40,216,136,136,171,196,220,130,3,220,196,171,136,129,8,35,60,84,120,120,120,84,60,35,132,128,2,0,12,0,64,32,0,0,66,0,1,0,20,19,0,1,1,1,1,1,1,1,2,3,2,1,1,3,2,3,2,1,1,3,128,1,1,1,129,14,133,133,0,20,48,0,235,208,235,20,48,0,235,208,235,4,40,70,186,216,70,129,2,186,97,27,129,7,27,97,0,186,159,159,186,0,128,1,236,236,129,1,10,10,129,22,231,196,196,196,231,0,24,60,60,60,24,0,231,196,196,196,231,0,24,60,60,60,24,131,12,236,216,40,20,216,10,246,40,136,136,171,196,220,130,3,220,196,171,136,129,8,35,60,84,120,120,120,84,60,35,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,17,0,0,0,17,0,1,0,128,2,100,0,156,139,131,7,48,208,208,48,48,208,208,48,131,3,236,196,20,60,139,131,7,216,28,28,216,228,40,40,228,131,0,128,2,0,12,0,21,0,0,0,21,0,1,0,128,2,100,0,156,143,131,11,48,208,208,48,48,208,208,48,48,208,208,48,131,3,246,206,30,70,143,131,11,243,54,54,243,223,33,33,223,202,13,13,202,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,103,0,0,0,101,0,1,0,132,2,241,220,216,129,9,53,53,53,58,73,93,104,104,104,49,129,13,245,232,232,232,229,213,204,203,203,203,201,24,65,22,129,13,245,240,0,20,48,48,48,20,0,235,208,208,208,235,131,20,48,208,208,48,48,27,230,208,208,48,156,176,169,161,176,197,224,246,43,100,100,129,11,251,246,239,235,216,207,192,176,156,120,40,36,129,2,100,100,122,129,8,227,207,186,159,159,159,186,207,227,132,131,2,236,250,5,130,41,216,216,216,235,0,224,196,196,196,217,236,0,10,20,20,20,11,0,18,40,40,40,236,226,230,247,0,236,236,236,0,238,215,215,215,238,0,17,41,41,41,17,131,20,216,27,27,216,226,241,23,40,40,226,40,25,30,23,40,22,247,226,205,181,181,131,9,244,223,216,228,244,241,40,181,236,245,129,2,181,181,181,129,8,24,41,58,82,82,82,58,41,24,132,0,128,2,0,12,0,87,0,0,0,86,0,1,0,45,240,244,253,0,246,249,0,4,48,94,94,94,48,4,0,247,243,253,250,243,240,236,232,232,232,236,20,27,229,183,236,73,27,229,15,18,227,241,38,63,193,218,241,15,29,238,131,129,15,255,253,163,165,166,166,166,213,0,43,90,90,90,90,92,2,135,11,23,27,229,192,23,192,229,27,36,44,181,220,131,3,36,220,181,44,131,15,20,17,13,10,10,12,17,20,238,196,196,196,238,20,15,5,129,27,5,15,20,20,20,20,20,20,192,212,36,10,64,246,212,36,247,242,3,12,216,216,40,50,12,247,253,14,131,129,14,255,254,83,84,85,85,85,40,0,216,171,171,171,171,171,136,11,219,231,19,253,219,253,25,237,218,202,23,48,131,3,208,38,23,202,131,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,0,2,0,12,0,57,32,0,0,48,32,1,20,19,1,2,2,2,2,2,2,2,1,1,3,1,1,1,1,1,4,2,1,1,19,30,196,20,186,4,172,4,172,232,254,24,254,232,232,242,232,162,232,242,232,131,3,234,60,196,22,133,5,90,90,213,166,166,0,16,15,1,2,2,2,2,2,2,2,1,4,2,2,1,3,3,1,6,246,70,246,70,236,0,236,129,6,236,0,20,0,60,0,20,131,3,34,196,60,222,130,4,171,171,0,85,85,0,0,2,0,12,0,128,32,0,0,113,32,1,42,41,0,3,3,2,1,2,1,1,1,2,3,3,1,2,1,1,2,3,2,2,1,1,1,1,1,1,2,1,1,2,1,2,1,2,2,2,2,2,2,2,2,2,20,4,31,31,57,50,1,37,57,48,31,31,4,2,0,10,8,4,163,163,163,146,65,255,109,255,109,18,146,163,163,163,163,163,4,5,11,0,2,40,206,24,36,50,216,24,36,129,1,243,253,130,2,2,5,13,131,17,88,88,90,0,244,233,243,243,13,13,23,17,5,0,214,166,166,168,131,1,234,60,129,1,196,22,38,37,0,3,3,1,1,1,2,1,1,1,1,1,3,3,1,2,1,3,3,1,2,3,1,3,1,2,3,3,1,2,2,2,2,2,2,2,2,2,37,7,7,7,7,38,36,243,25,43,28,7,7,7,7,13,27,27,57,71,71,71,71,71,71,71,71,57,27,27,13,10,90,0,60,10,90,0,60,129,9,170,186,218,240,16,16,24,40,66,86,131,11,171,171,171,194,0,5,251,0,24,85,85,85,131,1,34,196,129,1,60,222,0,128,2,0,12,0,27,0,0,0,27,0,1,14,13,1,2,2,2,2,2,2,2,2,2,2,2,2,2,13,30,196,20,186,4,222,4,222,24,170,170,232,170,232,131,3,234,60,196,22,129,0,154,129,0,102,13,246,70,246,70,236,216,236,216,236,56,56,20,56,20,131,3,34,196,60,222,129,0,74,129,0,182,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,114,0,0,0,113,0,1,0,58,53,53,53,58,73,93,104,104,104,55,10,235,191,169,169,24,24,22,18,13,10,250,232,232,232,229,213,204,203,203,203,25,25,233,233,41,41,207,207,51,51,217,217,25,25,169,169,0,20,48,48,48,20,0,235,208,208,208,235,131,18,156,176,169,161,176,194,217,236,37,100,100,101,71,16,234,234,239,248,253,130,12,246,236,232,234,216,207,192,176,156,60,234,234,60,135,3,22,196,196,22,129,8,227,207,186,159,159,159,186,207,227,132,12,216,216,216,235,0,224,196,196,196,223,246,24,23,129,29,204,204,241,25,36,10,15,20,20,20,11,0,18,40,40,40,236,236,20,20,226,226,50,50,206,206,30,30,236,236,130,10,238,215,215,215,238,0,17,41,41,41,17,131,18,40,25,30,23,40,19,240,216,199,181,181,181,198,225,237,49,59,48,23,130,12,251,246,237,222,216,228,244,241,40,196,34,34,196,135,3,222,60,60,222,129,8,24,41,58,82,82,82,58,41,24,132,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,55,0,0,0,55,0,1,28,27,0,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,131,23,50,216,24,232,40,206,24,232,50,216,24,232,40,206,24,232,50,216,24,232,40,206,24,232,3,60,234,23,196,129,1,234,60,129,1,196,22,129,1,234,60,129,1,196,22,129,1,234,60,129,1,196,22,131,23,206,30,236,20,226,50,236,20,206,30,236,20,226,50,236,20,206,30,236,20,226,50,236,20,3,196,34,222,60,129,1,34,196,129,1,60,222,129,1,34,196,129,1,60,222,129,1,34,196,129,1,60,222,128,2,0,12,0,71,0,0,0,71,0,1,36,35,0,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,131,31,50,216,24,232,40,206,24,232,50,216,24,232,40,206,24,232,50,216,24,232,40,206,24,232,50,216,24,232,40,206,24,232,3,22,196,60,234,129,1,234,60,129,1,196,22,129,1,234,60,129,1,196,22,129,1,234,60,129,1,196,22,129,1,234,60,129,1,196,22,131,31,206,30,236,20,226,50,236,20,206,30,236,20,226,50,236,20,206,30,236,20,226,50,236,20,206,30,236,20,226,50,236,20,3,222,60,196,34,129,1,34,196,129,1,60,222,129,1,34,196,129,1,60,222,129,1,34,196,129,1,60,222,129,1,34,196,129,1,60,222,128,2,0,12,0,23,0,0,0,23,0,1,12,11,0,2,2,2,3,2,2,2,2,2,2,2,131,7,50,216,24,232,40,206,24,232,3,28,196,62,230,129,1,234,60,129,1,196,22,131,7,206,30,236,20,226,50,236,20,3,228,60,198,30,129,1,34,196,129,1,60,222,128,2,0,12,0,42,0,0,0,40,32,1,0,13,57,50,216,223,24,24,232,232,40,40,206,206,30,28,129,3,24,24,232,232,131,0,86,129,4,86,60,234,234,60,131,0,86,129,4,86,22,196,196,22,131,12,11,0,1,1,1,2,2,2,2,1,2,3,2,7,199,206,30,23,236,20,226,50,129,1,236,20,0,178,129,2,178,34,196,129,3,178,0,60,222,0,128,2,0,12,0,76,0,0,0,79,32,1,0,0,233,129,36,250,7,25,25,25,255,233,233,243,233,199,163,163,163,199,233,243,24,24,232,232,40,40,206,206,57,50,216,223,24,24,232,232,30,30,216,232,131,5,86,20,241,14,13,252,132,3,90,90,90,43,132,3,60,234,234,60,131,0,86,129,5,86,22,196,196,22,86,129,0,86,131,25,24,0,1,2,1,2,3,2,1,3,3,1,2,2,2,2,1,1,1,1,2,2,1,1,1,1,24,24,176,165,196,234,254,18,254,58,254,18,236,20,226,50,199,206,30,23,236,20,0,2,20,24,3,178,248,20,16,129,6,171,171,0,41,41,34,196,129,0,178,129,3,178,60,222,178,129,0,178,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,24,0,0,0,24,0,1,0,1,23,233,129,1,23,233,129,3,24,90,232,166,131,7,48,208,208,48,48,208,208,48,135,1,244,6,129,1,231,251,129,3,236,201,20,55,131,7,216,27,27,216,226,40,40,226,135,0,128,2,0,12,0,32,0,0,0,32,0,1,0,1,23,233,129,1,23,233,137,3,24,90,232,166,131,15,48,208,208,48,48,208,208,48,48,208,208,48,48,208,208,48,135,1,244,6,129,1,231,251,137,3,236,201,20,55,131,15,216,27,27,216,226,40,40,226,216,27,27,216,226,40,40,226,135,0,128,2,0,12,0,26,0,0,0,23,0,1,0,129,65,0,175,0,175,1,26,26,129,3,24,90,232,166,131,128,6,131,5,251,119,255,211,45,135,129,9,185,185,239,239,255,255,236,201,20,55,131,7,236,40,246,10,228,37,40,216,135,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,9,0,0,0,9,0,1,4,3,0,2,3,2,129,1,55,201,0,86,129,0,70,129,1,218,38,0,178,129,0,178,128,2,0,12,0,7,0,0,0,7,0,1,0,135,0,86,129,0,86,131,135,0,178,129,0,178,131,0,128,2,0,12,0,4,0,0,0,4,0,1,0,132,0,96,131,132,0,173,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,91,0,0,0,82,32,1,0,47,24,24,232,232,170,170,20,56,94,94,94,65,40,170,170,10,250,232,232,232,223,216,24,24,170,170,230,230,10,10,170,170,0,45,94,94,94,54,20,170,170,0,244,232,232,232,25,70,131,132,14,154,154,154,186,216,3,51,51,51,4,4,4,252,246,251,133,13,35,231,231,35,4,205,205,205,249,30,63,102,102,102,130,4,4,10,8,4,4,131,28,27,1,2,2,1,3,3,1,2,3,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,3,2,1,27,187,69,56,0,196,0,56,100,20,9,0,236,56,56,30,56,0,232,196,196,196,232,0,56,0,20,61,100,129,5,64,64,20,224,224,242,134,12,32,32,32,8,246,222,192,192,192,0,10,14,14,128,2,0,12,0,42,0,0,0,36,0,1,0,25,24,24,232,232,246,14,14,14,1,246,238,225,222,49,39,8,246,201,148,148,148,226,235,243,222,233,131,140,10,80,86,94,94,94,45,0,162,162,162,169,133,11,186,186,70,70,0,236,236,236,246,0,249,248,132,3,25,56,56,56,136,138,12,2,5,205,190,175,175,175,217,0,81,81,81,81,133,0,0,2,0,12,0,41,32,0,0,50,32,1,14,13,1,2,1,4,2,3,1,1,1,1,3,3,3,1,13,24,232,0,24,0,232,56,47,18,0,156,0,8,252,133,7,70,98,98,98,0,158,166,5,18,17,1,2,1,1,3,1,1,3,1,3,1,1,1,3,3,1,1,1,17,184,72,50,16,236,247,0,30,246,0,29,60,60,50,15,20,28,42,134,7,226,186,176,176,217,0,80,80,130,0,128,2,0,12,0,46,0,0,0,40,0,1,0,29,216,10,40,0,206,0,30,246,246,14,14,14,1,246,238,225,222,49,39,8,246,201,148,148,148,226,235,243,222,233,131,144,10,80,86,94,94,94,45,0,162,162,162,169,133,0,80,129,12,80,60,236,236,60,0,236,236,236,246,0,249,248,132,3,25,56,56,56,136,142,12,2,5,205,190,175,175,175,217,0,81,81,81,81,133,0,128,2,0,12,0,75,32,0,0,54,0,1,26,25,1,4,4,4,3,1,1,1,1,1,1,1,1,1,3,1,2,3,2,1,1,1,1,1,1,1,24,23,5,8,3,1,1,1,1,1,1,1,1,1,3,1,2,3,2,1,1,1,1,1,1,1,23,24,232,240,24,10,216,16,40,246,232,0,48,104,48,209,152,10,24,229,216,246,40,27,232,129,21,58,0,236,20,58,20,236,0,156,156,45,100,100,211,20,0,198,236,20,236,198,0,25,250,236,6,20,21,237,236,20,236,236,20,20,0,241,221,241,16,35,236,237,21,20,20,236,237,21,25,236,6,20,250,238,22,0,216,235,216,0,19,36,36,240,220,220,16,0,234,18,40,0,40,20,236,0,128,2,0,12,0,85,0,0,0,83,0,1,0,9,24,24,232,232,0,10,23,24,12,5,129,31,48,98,98,98,86,66,165,217,24,24,24,7,10,254,250,235,54,49,19,10,206,158,158,158,155,154,66,27,232,232,232,243,131,133,16,251,246,141,151,162,162,162,192,221,237,17,30,121,102,60,20,19,130,16,1,12,89,88,94,94,94,59,20,14,248,247,161,177,186,221,238,132,3,187,187,69,69,129,37,236,236,248,247,6,0,216,190,190,190,197,206,0,249,236,236,236,6,30,15,33,20,226,249,8,30,48,66,66,66,60,50,31,22,20,20,20,252,131,133,14,2,0,81,82,81,81,81,55,20,251,233,231,215,224,8,132,16,247,0,175,168,175,175,175,204,236,6,9,10,8,3,234,10,14,132,0,128,2,0,12,0,68,32,0,0,67,0,1,0,23,22,0,2,2,2,2,4,2,1,1,1,2,2,3,2,2,1,2,1,1,1,1,2,1,131,18,45,24,49,58,97,106,94,11,166,11,94,94,110,105,65,93,94,232,232,3,38,218,42,214,131,9,225,210,211,88,0,168,59,84,46,34,129,2,70,0,251,3,236,236,20,20,129,32,20,20,216,226,236,236,236,225,216,207,192,198,206,206,206,12,40,70,70,70,10,206,206,206,206,203,195,211,226,206,206,20,20,131,4,208,40,40,208,196,129,0,196,138,8,186,166,166,166,212,0,110,110,110,64,0,170,0,100,140,128,2,0,12,0,50,0,0,0,50,0,1,0,21,20,39,39,39,35,30,11,238,232,79,71,45,30,235,173,173,173,0,253,253,232,255,139,134,12,22,40,100,97,94,94,94,45,0,162,162,162,169,129,7,24,232,232,24,24,232,232,24,131,18,236,236,236,236,242,246,242,247,0,20,15,255,246,21,56,56,56,236,245,129,0,248,139,134,12,24,45,225,201,175,175,175,217,0,81,81,81,81,129,7,216,20,20,216,236,40,40,236,131,0,0,2,0,12,0,60,32,0,0,54,32,1,19,18,0,3,3,3,1,2,1,3,1,2,2,2,2,2,2,2,2,2,2,128,0,24,129,14,66,20,0,156,156,0,206,0,232,0,165,0,252,0,232,1,49,30,129,7,72,98,98,30,243,207,49,160,130,3,208,48,0,96,18,17,0,3,3,2,1,1,1,2,3,2,5,2,2,2,2,2,2,2,128,16,236,30,55,60,60,57,40,70,34,216,20,216,40,216,20,216,20,10,226,231,0,10,20,196,187,176,241,50,78,133,0,178,128,2,0,12,0,63,0,0,0,53,0,1,0,25,49,49,49,246,234,222,222,230,241,246,187,187,187,0,6,231,14,49,49,49,187,187,187,196,216,231,135,64,255,116,0,60,131,5,98,98,98,98,98,60,64,255,116,16,1,155,152,160,162,176,176,176,176,203,241,3,0,42,214,214,42,131,25,214,214,214,246,0,10,10,4,251,246,22,22,22,226,226,246,229,214,214,214,22,22,22,16,1,246,135,133,5,181,181,181,181,181,221,129,4,71,71,66,50,31,131,6,253,253,0,216,40,40,216,131,0,128,2,0,12,0,18,0,0,0,18,0,1,8,7,1,2,2,2,2,2,2,2,7,24,0,24,170,24,16,24,232,1,232,24,129,3,205,51,0,102,7,236,20,236,56,236,0,236,20,1,20,218,129,3,33,223,0,192,128,2,0,12,0,80,0,0,0,67,32,1,0,41,4,4,212,212,212,212,212,212,246,16,14,14,14,0,246,233,220,225,49,37,7,246,198,148,148,148,209,246,244,242,242,222,222,238,66,66,222,222,246,246,222,222,131,130,3,223,244,196,244,130,0,17,132,14,12,23,103,99,94,94,94,44,0,225,162,162,162,162,162,131,6,206,206,0,52,206,206,52,131,22,21,0,2,1,1,1,1,2,4,1,1,2,1,1,3,3,3,3,1,4,2,2,2,11,177,59,59,255,255,59,0,236,246,0,18,20,129,0,56,129,4,20,190,20,0,20,129,3,236,226,34,47,131,11,250,246,195,175,0,81,81,0,30,0,30,222,128,2,0,12,0,106,0,0,0,92,32,1,0,128,16,49,98,98,98,52,10,253,218,199,24,21,14,10,251,232,232,232,130,31,11,24,24,24,31,30,30,0,212,158,158,158,209,0,6,236,245,232,229,7,24,24,232,232,50,14,225,5,24,24,232,232,131,9,236,251,52,80,86,94,94,94,87,81,132,4,245,236,224,216,226,129,30,1,1,22,39,41,30,30,18,221,191,177,162,162,162,146,138,0,252,0,29,227,227,29,0,232,232,0,29,227,227,29,131,30,29,0,3,2,1,3,1,2,1,3,1,1,1,4,3,2,2,1,3,3,1,1,1,2,2,1,1,1,1,2,2,29,200,200,244,30,236,236,251,0,20,20,60,60,236,196,56,56,56,0,20,20,17,5,236,20,236,196,40,80,236,20,4,100,20,170,170,176,130,10,40,45,50,40,216,206,216,244,0,86,80,130,7,40,216,0,40,40,0,40,216,0,128,2,0,12,0,57,0,0,0,41,0,1,0,1,60,60,131,18,206,206,216,216,235,24,64,90,90,232,232,231,227,221,24,24,170,170,110,64,0,144,1,42,232,131,13,25,231,231,25,25,231,231,25,40,188,188,171,167,203,129,3,224,227,6,40,132,1,214,172,132,137,17,242,222,209,202,202,20,20,18,12,5,236,236,56,56,176,9,89,20,131,13,196,20,20,196,196,20,20,196,0,80,80,66,44,16,138,1,180,180,132,0,0,2,0,12,0,64,32,0,0,50,32,1,20,19,1,1,1,1,4,2,2,1,3,3,1,1,1,1,2,2,2,2,2,2,128,18,4,24,24,245,232,84,84,0,172,172,178,212,0,24,232,9,247,9,247,3,143,178,197,236,129,8,60,0,74,236,192,160,158,158,158,129,2,60,0,60,17,16,1,1,2,2,4,4,2,1,2,2,2,2,2,2,2,2,2,16,196,214,236,246,20,200,0,34,70,53,0,236,20,250,44,235,29,1,98,93,130,6,205,150,150,0,59,78,78,132,128,2,0,12,0,71,0,0,0,66,32,1,0,2,12,12,6,131,15,10,20,255,238,244,78,68,37,20,214,136,136,136,136,143,151,64,255,51,11,12,12,244,244,12,12,244,244,12,12,244,244,131,128,2,160,185,232,135,5,70,85,102,102,102,49,129,2,232,185,160,129,10,160,160,0,24,232,232,24,24,232,232,24,131,21,20,1,3,3,1,3,1,1,1,1,2,1,1,2,1,1,2,2,2,2,2,2,13,236,236,11,40,20,236,250,35,60,60,60,60,60,60,129,4,20,236,0,236,0,0,68,130,16,246,211,197,183,183,181,181,0,51,68,0,68,0,20,216,40,236,128,2,0,12,0,51,0,0,0,46,0,1,0,18,30,44,53,53,53,203,203,203,223,240,236,1,12,22,234,239,7,24,24,129,1,24,24,133,129,1,222,186,129,18,186,176,164,158,158,158,157,162,251,254,0,32,234,230,28,32,234,230,28,131,128,17,246,236,236,236,56,56,56,48,24,0,5,15,20,20,15,5,236,236,129,1,236,236,133,133,7,75,75,75,75,75,75,75,75,130,7,186,20,20,186,246,80,80,246,131,128,2,0,12,0,21,0,0,0,21,32,1,10,9,0,1,3,1,2,1,3,1,3,2,9,24,24,232,232,94,94,162,162,24,232,128,6,60,210,60,0,60,46,60,129,6,5,1,3,4,3,4,2,5,236,20,210,46,216,40,128,2,20,0,195,129,128,2,0,12,0,39,32,0,0,37,0,1,0,12,11,1,2,1,1,2,1,1,2,2,2,2,2,11,24,232,81,166,203,176,91,83,24,178,78,232,2,231,25,0,64,0,252,129,64,255,4,132,131,64,255,102,2,74,54,54,64,0,154,10,182,202,202,236,236,54,54,202,202,20,20,131,6,206,50,50,206,0,36,36,129,1,220,220,140,0,0,2,0,12,0,51,32,0,0,37,32,1,16,15,1,2,2,1,1,1,1,2,1,2,1,2,2,2,2,2,15,24,232,170,20,56,94,94,56,20,170,20,232,232,20,24,170,8,231,25,204,204,204,243,25,102,102,129,2,14,37,50,129,12,11,0,2,3,1,4,2,2,1,3,3,2,2,129,9,56,0,186,0,56,0,20,0,236,56,5,206,50,24,24,215,192,130,0,216,129,0,2,0,12,0,57,32,0,0,41,32,1,18,17,1,2,2,2,2,1,1,1,1,2,1,2,1,2,2,2,2,2,17,24,232,24,232,170,20,56,94,94,56,20,170,20,232,232,20,24,170,10,231,25,231,25,204,204,204,243,25,102,102,129,2,14,37,50,129,14,13,0,2,2,2,3,1,4,2,2,1,3,3,2,2,131,9,56,0,186,0,56,0,20,0,236,56,7,226,0,236,10,24,24,215,192,130,0,216,129,0,2,0,12,0,57,32,0,0,41,32,1,18,17,1,2,2,2,2,1,1,1,1,2,1,2,1,2,2,2,2,2,17,24,0,24,0,170,20,56,94,94,56,20,170,20,232,232,20,24,170,10,231,25,204,50,204,204,204,243,25,102,102,129,2,14,37,50,129,14,13,0,2,2,2,3,1,4,2,2,1,3,3,2,2,131,9,56,0,186,0,56,0,20,0,236,56,7,196,20,216,20,24,24,215,192,130,0,216,129,128,2,0,12,0,110,0,0,0,106,0,1,0,128,12,6,0,245,226,229,0,44,80,80,80,72,54,21,130,36,241,236,232,232,242,215,206,175,152,152,152,180,220,232,232,232,232,250,100,70,246,0,24,24,185,185,185,185,0,38,78,78,78,38,0,185,185,138,130,13,153,156,158,158,158,183,216,244,16,30,60,72,70,40,131,12,98,98,98,98,88,70,49,1,216,207,209,206,224,129,1,216,216,132,9,43,213,213,213,251,31,57,86,86,86,130,4,10,20,31,43,43,131,131,9,245,231,226,216,206,206,206,210,226,234,132,41,11,20,20,26,30,50,70,70,70,62,50,25,20,20,20,9,226,40,100,30,236,236,60,60,10,10,40,10,236,236,236,10,40,10,10,40,40,40,40,40,40,40,131,130,13,80,80,80,80,80,60,40,33,20,20,33,22,30,15,131,12,176,176,176,176,202,226,232,249,246,2,240,236,245,136,9,216,40,40,40,18,0,218,176,176,176,132,2,237,216,216,131,0,128,2,0,12,0,62,0,0,0,62,32,1,0,29,24,24,0,46,94,94,94,46,0,24,246,246,239,232,232,232,244,0,101,85,236,232,24,24,232,232,24,24,232,232,131,17,50,206,206,206,237,10,52,100,100,100,100,110,98,55,30,40,50,50,131,4,49,1,1,49,100,129,0,100,131,20,19,1,1,2,1,3,1,2,2,1,1,1,1,1,1,1,1,2,2,2,2,19,236,0,196,196,0,236,0,20,20,20,9,0,196,196,20,20,236,20,236,20,11,249,249,241,236,192,192,182,201,216,202,185,185,131,3,23,163,0,192,0,0,2,0,12,0,37,32,0,0,32,32,1,12,11,1,2,2,2,2,2,2,2,2,2,2,2,11,72,232,24,184,24,232,24,214,42,232,24,232,131,2,176,0,236,129,2,20,0,80,12,11,1,2,2,2,2,2,1,2,2,2,3,2,11,186,20,236,70,28,20,28,28,228,228,236,228,134,1,50,206,130,0,128,2,0,12,0,60,0,0,0,59,32,1,0,2,12,12,6,131,24,10,20,255,238,244,78,68,37,20,214,136,136,136,136,143,151,151,12,12,244,244,12,12,244,244,131,128,2,160,185,232,135,5,70,85,102,102,102,49,129,2,232,185,160,129,6,160,160,0,24,232,232,24,131,19,18,1,3,3,1,3,1,1,1,1,2,1,1,2,1,1,2,2,1,2,16,236,236,11,40,20,236,250,35,60,60,60,60,60,60,100,0,20,129,0,68,130,14,246,211,197,183,183,181,181,0,51,68,0,68,0,198,58,128,2,0,12,0,17,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,53,203,24,232,24,232,2,100,0,100,64,0,200,128,0,100,5,218,38,236,20,236,20,5,252,0,252,188,0,192,0,128,2,0,12,0,27,0,0,0,34,0,1,0,135,7,55,55,201,201,24,24,232,232,131,7,27,229,229,27,27,229,229,27,131,0,102,129,0,102,131,15,236,236,20,20,236,236,20,20,218,218,38,38,236,236,20,20,131,7,206,50,50,206,176,20,20,176,131,0,192,129,0,192,131,128,2,0,12,0,52,0,0,0,45,0,1,0,10,24,24,232,232,84,24,156,236,236,25,231,129,1,186,70,129,6,25,231,20,20,100,232,172,131,3,24,232,232,24,130,1,176,176,129,65,0,128,0,128,129,65,0,128,0,128,129,1,176,176,134,131,6,226,236,40,0,10,236,20,129,1,30,226,129,6,236,20,246,0,216,20,30,131,3,216,60,60,216,130,1,90,90,129,1,166,166,129,1,166,166,129,1,90,90,134,128,2,0,12,0,33,0,0,0,40,0,1,0,135,11,60,24,159,5,251,97,232,196,55,55,201,201,131,7,8,216,216,8,24,232,232,24,130,1,151,151,131,1,146,146,132,10,236,236,20,20,236,236,20,20,218,236,70,129,6,186,20,38,218,218,38,38,131,8,206,50,50,206,186,30,30,186,196,129,1,60,60,129,0,196,135,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,22,32,0,0,15,0,1,0,6,5,1,2,2,2,2,2,5,24,232,24,232,24,232,5,208,48,208,48,208,48,143,11,222,34,34,222,222,34,34,222,222,34,34,222,131,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,29,0,0,0,26,0,1,0,12,10,16,241,24,59,59,59,197,197,197,206,226,241,131,11,1,155,152,160,162,176,255,255,176,203,241,3,132,11,236,236,0,239,224,224,224,32,32,32,26,11,132,128,4,71,71,66,50,31,131,1,253,253,132,128,2,0,12,0,27,0,0,0,23,32,1,0,12,59,59,59,0,244,232,232,240,251,0,197,197,197,131,128,0,60,131,5,98,98,98,98,98,60,132,7,6,1,2,2,1,2,1,2,6,224,0,20,20,5,0,32,130,3,181,181,181,221,0,128,2,0,12,0,10,0,0,0,9,0,1,4,3,1,2,2,2,3,24,232,24,182,128,2,96,50,0,3,236,20,236,64,1,34,222,129,0,128,2,0,12,0,25,0,0,0,25,0,1,0,128,2,103,0,153,147,131,15,38,218,218,38,38,218,218,38,38,218,218,38,38,218,218,38,131,128,2,176,0,80,147,131,15,246,70,70,246,186,10,10,186,206,30,30,206,226,50,50,226,131,0,128,2,0,12,0,15,32,0,0,13,0,1,0,4,3,1,2,2,2,3,49,207,24,232,129,1,208,48,3,210,210,46,46,135,131,3,221,33,33,221,131,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,24,232,1,208,48,1,236,20,1,34,222,128,2,0,12,0,19,0,0,0,19,0,1,0,7,215,232,41,24,41,232,215,24,131,6,65,0,191,0,65,0,191,132,6,60,0,196,0,196,0,60,132,128,6,196,0,60,0,60,0,196,131,0,0,2,0,12,0,34,32,0,0,53,32,1,10,9,1,2,2,3,3,3,3,3,3,3,9,24,232,15,36,241,220,15,36,241,220,9,208,48,36,241,220,15,36,241,220,15,17,16,0,2,2,2,2,2,1,1,2,1,2,1,2,2,1,2,1,130,13,209,209,0,18,47,47,18,237,209,209,0,18,47,47,16,208,48,195,223,4,32,32,4,223,195,226,253,36,63,63,17,253,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,1,2,2,2,3,24,232,24,232,3,208,48,208,48,3,236,20,236,20,3,40,228,28,216,128,2,0,12,0,15,0,0,0,15,0,1,8,7,0,1,1,1,2,2,2,2,7,24,85,232,171,24,232,24,232,131,3,208,48,208,48,7,216,216,40,40,236,20,236,20,131,3,28,216,40,228,128,2,0,12,0,24,0,0,0,20,0,1,0,1,24,24,65,0,156,0,156,3,24,24,232,232,131,128,6,131,5,251,125,0,211,45,131,7,216,216,20,20,216,216,40,40,131,1,236,40,129,3,216,20,40,216,131,0,128,2,0,12,0,20,0,0,0,20,0,1,0,7,232,24,24,232,232,140,140,232,131,128,6,45,211,0,125,251,5,131,131,7,40,216,216,40,40,20,20,40,131,4,236,216,40,20,216,129,0,40,131,0,128,2,0,12,0,28,0,0,0,28,0,1,0,11,21,21,113,113,21,21,229,229,20,20,233,233,131,11,50,181,5,251,75,206,211,45,48,208,208,48,131,11,236,236,156,156,236,236,20,20,235,235,24,24,131,1,236,40,129,7,216,20,40,216,216,28,28,216,131,0,128,2,0,12,0,28,0,0,0,28,0,1,0,11,235,27,27,235,235,143,143,235,23,23,236,236,131,11,50,45,211,206,75,251,5,181,48,208,208,48,131,11,20,236,236,20,20,100,100,20,232,232,21,21,131,4,236,216,40,20,216,129,4,40,216,28,28,216,131,0,0,2,0,12,0,21,32,0,0,21,32,1,6,5,1,2,2,2,2,2,5,49,207,24,232,24,232,129,3,208,48,208,48,6,5,1,2,1,2,3,2,1,214,42,129,1,236,20,129,3,218,38,34,222,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,51,0,0,0,64,32,1,0,29,24,24,24,13,0,245,228,5,41,50,46,69,88,88,88,232,232,232,243,0,254,14,246,215,212,216,190,168,168,168,131,133,6,246,196,146,145,145,145,197,135,6,7,55,107,111,111,111,59,133,20,19,0,1,2,1,2,1,1,1,1,3,2,1,3,2,1,1,1,1,1,2,19,236,236,251,10,3,0,245,223,212,202,20,20,246,255,0,11,25,34,45,56,19,216,40,40,40,43,40,44,60,60,20,40,216,216,213,216,212,196,196,196,236,128,2,0,12,0,10,0,0,0,9,0,1,4,3,1,2,2,2,3,24,232,74,232,128,2,96,50,0,3,236,20,192,20,1,34,222,129,0,128,2,0,12,0,15,0,0,0,15,0,1,0,7,24,74,182,232,95,251,5,161,131,132,1,80,80,132,4,226,236,20,30,236,129,0,20,131,132,1,196,196,132,0,128,2,0,12,0,94,0,0,0,53,32,1,0,51,20,22,24,24,24,22,20,7,254,241,15,3,249,236,235,232,232,232,235,236,249,3,15,241,254,7,226,250,27,25,25,27,250,226,210,191,191,191,210,30,46,66,66,66,46,30,6,230,231,231,230,6,131,135,0,249,129,0,249,136,0,7,129,4,7,0,180,180,230,129,16,26,74,74,74,34,0,222,180,180,180,222,0,34,74,74,74,26,129,1,230,180,131,18,17,0,4,2,7,4,2,7,2,2,1,2,3,3,4,2,2,2,1,128,0,236,129,13,20,0,31,5,1,5,31,65,226,192,226,252,0,252,133,11,80,35,0,220,176,0,80,219,176,220,0,35,0,2,0,12,0,28,32,0,0,15,32,1,8,7,0,1,3,1,2,1,3,1,7,24,24,232,232,102,102,154,154,128,6,50,0,50,0,50,98,50,4,3,2,3,4,3,3,236,20,214,42,129,1,176,0,0,128,2,0,12,0,58,0,0,0,47,0,1,0,25,59,59,59,0,244,232,232,240,251,0,197,197,197,10,16,241,24,59,59,59,197,197,197,206,226,241,131,64,255,116,0,60,131,5,98,98,98,98,98,60,64,255,116,11,1,155,152,160,162,176,176,176,176,203,241,3,132,24,224,224,224,0,10,20,20,14,5,0,32,32,32,236,236,0,239,224,224,224,32,32,32,26,11,132,133,5,181,181,181,181,181,221,129,4,71,71,66,50,31,131,1,253,253,132,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,10,0,0,0,10,0,1,6,5,1,2,2,2,2,2,5,61,195,61,195,24,232,132,0,102,5,212,20,236,44,236,20,132,0,182,128,2,0,12,0,32,0,0,0,32,0,1,0,13,196,24,125,24,180,0,24,24,232,232,24,24,232,232,131,4,226,168,0,102,34,129,3,168,168,0,102,129,0,102,131,13,70,236,176,236,70,20,236,236,40,40,236,236,40,40,131,10,78,78,255,192,192,1,0,78,78,0,192,129,0,192,131,0,128,2,0,12,0,25,0,0,0,25,0,1,0,11,34,24,180,225,225,40,196,160,40,40,232,232,131,130,1,166,166,130,0,102,129,0,102,131,7,196,226,30,236,246,236,60,34,129,1,20,20,131,130,1,120,120,130,0,192,129,0,192,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,9,0,0,0,9,0,1,4,3,1,2,2,2,3,24,182,24,232,129,1,158,0,3,236,64,236,20,129,1,68,0,0,2,0,12,0,100,32,0,0,55,32,1,32,31,0,1,1,1,4,1,3,1,4,1,1,1,2,1,1,2,1,1,4,1,3,1,4,1,1,1,2,1,1,2,1,1,128,30,42,0,214,232,232,232,232,232,17,65,65,17,232,193,143,143,193,24,24,24,24,24,65,113,113,65,24,241,191,191,241,128,30,190,0,60,0,255,0,255,183,183,222,0,73,73,73,0,222,183,255,254,255,251,182,182,221,255,70,70,70,255,221,182,17,16,0,1,1,1,5,6,3,3,3,3,6,2,2,5,3,3,3,16,249,219,249,23,253,17,245,223,25,47,229,239,249,221,199,1,23,128,2,30,0,226,129,3,60,229,196,27,129,4,253,60,228,194,27,0,0,2,0,12,0,85,32,0,0,81,32,1,28,27,0,1,1,1,2,3,3,3,2,1,3,1,2,3,6,6,2,3,1,2,2,1,7,6,3,3,1,5,27,15,57,10,224,250,0,241,236,246,15,47,15,220,189,24,0,12,85,85,12,185,185,20,232,18,43,18,209,3,20,209,236,41,131,5,194,194,28,62,62,228,129,4,185,0,32,69,32,130,3,194,28,62,228,27,26,0,1,1,1,2,3,3,3,3,3,1,5,6,2,2,5,3,3,3,3,3,3,3,3,3,1,5,26,249,219,249,23,241,236,250,0,232,216,232,20,236,246,0,228,206,8,30,5,0,14,20,252,236,252,40,3,236,10,20,246,131,3,40,238,216,18,129,4,253,60,228,194,27,131,3,40,238,216,18,128,2,0,12,0,19,0,0,0,19,0,1,0,147,15,38,218,218,38,38,218,218,38,38,218,218,38,38,218,218,38,131,147,15,246,70,70,246,186,10,10,186,206,30,30,206,226,50,50,226,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,22,0,0,0,18,0,1,0,131,7,110,176,80,146,49,49,207,207,131,132,65,0,130,0,130,129,1,100,100,132,131,7,14,54,202,242,212,212,44,44,131,132,65,254,246,254,246,136,0,128,2,0,12,0,25,0,0,0,21,0,1,0,129,65,0,171,0,171,133,1,100,100,131,5,1,147,81,177,111,1,129,3,50,208,208,50,131,129,65,255,31,255,31,139,5,1,254,214,44,4,1,129,3,224,34,34,224,131,0,128,2,0,12,0,26,0,0,0,20,0,1,0,129,3,146,80,176,110,129,3,49,49,207,207,131,130,65,255,126,255,126,130,0,156,129,0,156,131,129,3,242,202,54,14,129,3,212,212,44,44,131,130,65,1,10,1,10,138,0,128,2,0,12,0,25,0,0,0,21,0,1,0,132,65,255,85,255,85,128,1,156,156,133,0,1,129,8,1,111,177,81,147,50,208,208,50,131,132,65,0,225,0,225,136,0,1,129,8,1,4,44,214,254,224,34,34,224,131,0,128,2,0,12,0,43,0,0,0,48,0,1,0,129,1,96,96,129,4,251,251,0,5,5,129,6,160,160,0,211,211,45,45,131,5,1,157,81,177,101,1,129,0,1,129,8,1,101,177,81,157,50,208,208,50,131,129,65,255,121,255,121,129,4,251,251,0,5,5,129,65,0,135,0,135,128,3,95,95,144,144,131,5,1,254,214,44,4,1,129,0,1,129,8,1,4,44,214,254,224,34,34,224,131,128,2,0,12,0,38,0,0,0,38,0,1,0,131,3,110,176,80,146,129,3,146,80,176,110,129,3,49,49,207,207,131,132,65,0,130,0,130,131,65,255,126,255,126,130,3,168,70,70,168,131,131,3,14,54,202,242,129,3,242,202,54,14,129,3,212,212,44,44,131,132,65,255,70,255,70,131,65,0,186,0,186,130,3,30,164,164,30,131,0,128,2,0,12,0,43,0,0,0,43,0,1,0,135,3,110,176,80,146,129,3,146,80,176,110,129,3,49,49,207,207,131,0,98,129,0,98,132,65,0,130,0,130,131,65,255,126,255,126,130,3,168,70,70,168,131,135,3,14,54,202,242,129,3,242,202,54,14,129,3,212,212,44,44,131,0,188,129,0,188,132,65,255,70,255,70,131,65,0,186,0,186,130,3,30,164,164,30,131,0,128,2,0,12,0,30,0,0,0,30,0,1,14,13,0,3,1,1,1,1,2,2,2,2,2,2,2,2,129,11,110,176,80,146,49,207,49,207,49,207,49,207,130,65,0,130,0,130,128,0,246,129,4,40,246,30,50,30,129,11,250,34,222,6,212,44,212,44,212,44,212,44,130,65,255,40,255,40,128,7,30,0,20,236,0,226,0,206,128,2,0,12,0,31,0,0,0,31,0,1,14,13,1,1,1,1,1,1,3,2,2,2,2,2,2,2,128,12,146,80,176,110,0,49,207,49,207,49,207,49,207,129,65,255,126,255,126,129,4,226,206,226,10,216,129,0,10,128,12,6,222,34,250,0,212,44,212,44,212,44,212,44,129,65,0,216,0,216,129,7,50,0,30,0,20,236,0,226,128,2,0,12,0,37,0,0,0,16,32,1,0,144,14,17,40,54,54,54,40,17,0,239,216,202,202,202,216,239,131,143,15,198,198,213,239,0,18,43,58,58,58,43,18,0,239,213,198,131,4,3,17,4,4,4,3,226,156,30,100,3,100,226,156,30,128,2,0,12,0,37,0,0,0,22,32,1,0,144,14,16,41,54,54,54,41,16,0,239,215,202,202,202,215,239,131,143,15,198,198,213,238,0,17,44,58,58,58,44,17,0,238,213,198,131,6,5,17,4,3,1,4,2,5,226,156,0,29,100,29,5,100,226,156,156,30,100,128,2,0,12,0,57,0,0,0,16,32,1,0,67,0,251,0,117,255,66,254,171,145,14,17,40,54,54,54,40,17,0,239,216,202,202,202,216,239,131,0,210,67,254,159,254,102,255,236,3,116,143,15,198,198,213,239,0,18,43,58,58,58,43,18,0,239,213,198,131,4,3,22,4,4,4,3,226,156,30,100,3,100,226,156,30,128,2,0,12,0,48,0,0,0,16,32,1,0,129,2,43,30,90,144,14,17,40,54,54,54,40,17,0,240,216,202,202,202,216,240,131,4,210,50,225,0,60,143,15,198,198,213,239,0,18,43,58,58,58,43,18,0,239,213,198,131,4,3,22,4,4,4,3,226,156,30,100,3,100,226,156,30,0,128,2,0,12,0,49,0,0,0,16,32,1,0,128,3,60,210,50,225,144,14,17,40,54,54,54,40,17,0,239,216,202,202,202,216,239,131,1,226,166,129,0,213,143,15,198,198,213,239,0,18,43,58,58,58,43,18,0,239,213,198,131,4,3,22,4,4,4,3,226,156,30,100,3,100,226,156,30,128,2,0,12,0,48,0,0,0,16,32,1,0,4,210,60,0,225,50,144,14,239,216,202,202,202,216,239,0,17,40,54,54,54,40,17,131,128,2,90,30,43,144,15,58,58,43,18,0,239,213,198,198,198,213,239,0,18,43,58,131,4,3,22,4,4,4,3,30,100,226,156,3,156,30,100,226,0,128,2,0,12,0,37,0,0,0,16,32,1,0,148,14,17,40,54,54,54,40,17,0,239,216,202,202,202,216,239,131,147,15,198,198,213,239,0,18,43,58,58,58,43,18,0,239,213,198,131,4,3,21,4,4,4,3,226,156,30,100,3,100,226,156,30,128,2,0,12,0,37,0,0,0,16,32,1,0,153,14,17,40,54,54,54,40,17,0,240,216,202,202,202,216,240,131,152,15,198,198,213,239,0,18,43,58,58,58,43,18,0,239,213,198,131,4,3,26,4,4,4,3,226,156,30,100,3,100,226,156,30,128,2,0,12,0,32,0,0,0,25,32,1,15,14,1,2,2,17,1,1,2,1,1,1,2,1,1,2,1,128,13,28,228,0,17,40,54,54,40,17,240,216,202,202,216,14,226,20,30,198,198,213,0,18,43,58,58,43,18,239,213,7,6,1,2,2,18,4,4,4,128,5,236,20,226,156,30,100,6,20,0,236,100,226,156,30,128,2,0,12,0,32,0,0,0,25,32,1,15,14,1,2,2,17,1,1,2,1,1,1,2,1,1,2,1,14,30,236,226,0,17,40,54,54,40,17,240,216,202,202,216,14,28,228,0,198,198,213,0,18,43,58,58,43,18,239,213,7,6,1,2,2,18,4,4,4,6,236,0,20,226,156,30,100,6,236,20,0,100,226,156,30,128,2,0,12,0,32,0,0,0,25,32,1,15,14,1,2,2,18,1,2,1,1,1,2,1,1,2,1,1,14,30,0,226,17,40,54,54,40,17,239,216,202,202,216,239,14,228,28,0,198,213,0,18,43,58,58,43,18,239,213,198,7,6,1,2,2,18,4,4,4,6,236,0,20,226,156,30,100,6,20,236,0,100,226,156,30,128,2,0,12,0,32,0,0,0,25,32,1,15,14,1,2,2,18,1,1,2,1,1,2,1,2,1,1,1,14,30,226,0,239,216,202,202,216,239,17,40,54,54,40,17,128,13,228,28,58,43,18,239,213,198,198,213,0,18,43,58,7,6,1,2,2,18,4,4,4,6,236,20,0,30,100,226,156,128,5,20,236,156,30,100,226,128,2,0,12,0,46,0,0,0,25,32,1,0,7,28,28,228,228,28,28,228,228,144,14,239,216,202,202,202,216,239,0,17,40,54,54,54,40,17,131,151,15,58,58,43,18,0,239,213,198,198,198,213,239,0,18,43,58,131,8,7,1,2,2,2,18,4,4,4,7,24,44,211,231,30,100,226,156,131,3,156,30,100,226,128,2,0,12,0,148,32,0,0,196,0,1,96,95,0,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,48,47,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,47,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,47,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,13,250,243,6,128,63,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,30,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,63,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,31,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,240,240,250,7,16,16,0,250,128,2,0,12,0,37,0,0,0,28,32,1,0,156,14,239,216,202,202,202,216,239,0,17,40,54,54,54,40,17,131,155,15,58,58,43,18,0,239,213,198,198,198,213,239,0,18,43,58,131,8,7,1,3,3,3,19,4,4,4,7,18,39,238,217,30,100,226,156,7,39,238,217,18,156,30,100,226,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,14,0,0,0,16,32,1,6,5,13,3,1,2,3,1,5,25,54,25,231,202,231,5,198,26,58,58,230,198,4,3,13,3,3,3,3,234,206,23,50,3,50,234,206,23,128,2,0,12,0,37,0,0,0,22,32,1,0,148,14,239,216,202,202,202,216,239,0,17,40,54,54,54,40,17,131,147,15,198,198,213,239,0,18,43,58,58,58,43,18,0,239,213,198,131,6,5,20,5,1,3,1,1,128,4,70,53,235,203,186,5,70,235,203,186,203,235,128,2,0,12,0,22,0,0,0,16,32,1,0,140,8,202,202,216,239,0,17,40,54,54,131,141,6,18,43,58,58,58,43,18,132,4,3,13,5,1,2,3,70,235,203,186,128,2,186,203,0,0,0,2,0,12,0,22,32,0,0,15,32,1,6,5,14,1,2,2,1,1,5,239,216,202,54,40,17,5,198,213,0,239,213,198,4,3,14,1,2,1,3,21,53,70,186,1,70,53,129,0,128,2,0,12,0,22,0,0,0,19,32,1,0,136,8,54,54,40,17,0,239,216,202,202,131,137,6,18,43,58,58,58,43,18,132,6,5,2,6,1,5,1,2,129,3,186,21,53,70,130,2,186,203,0,128,2,0,12,0,22,0,0,0,20,32,1,0,132,8,202,202,216,239,0,17,40,54,54,135,133,6,239,213,198,198,198,213,239,136,6,5,4,1,5,1,2,3,128,4,70,235,203,186,0,129,1,70,53,129,0,128,2,0,12,0,14,0,0,0,14,0,1,0,133,3,239,216,202,202,131,132,3,58,58,43,18,132,133,3,21,53,70,70,131,132,3,186,186,203,235,132,0,128,2,0,12,0,13,0,0,0,13,0,1,0,3,54,54,40,17,137,128,3,18,43,58,58,136,3,186,186,203,235,137,128,3,235,203,186,186,136,0,128,2,0,12,0,14,0,0,0,14,0,1,0,129,3,17,40,54,54,135,128,3,198,198,213,239,136,129,3,235,203,186,186,135,128,3,70,70,53,21,136,0,128,2,0,12,0,14,0,0,0,14,0,1,0,132,3,202,202,216,239,132,133,3,239,213,198,198,131,132,3,70,70,53,21,132,133,3,21,53,70,70,131,0,128,2,0,12,0,12,0,0,0,12,0,1,0,132,2,90,0,166,131,131,2,166,0,90,132,132,2,166,0,90,131,131,2,90,0,166,132,0,128,2,0,12,0,12,0,0,0,12,0,1,0,135,2,90,0,166,131,134,2,166,0,90,132,135,2,166,0,90,131,134,2,90,0,166,132,0,128,2,0,12,0,12,0,0,0,12,0,1,0,135,2,90,0,166,131,134,2,166,0,90,132,135,2,166,0,90,131,134,2,90,0,166,132,0,128,2,0,12,0,12,0,0,0,12,0,1,0,135,2,90,0,166,131,134,2,166,0,90,132,135,2,166,0,90,131,134,2,90,0,166,132,0,128,2,0,12,0,12,0,0,0,12,0,1,0,135,2,166,0,90,131,134,2,90,0,166,132,135,2,90,0,166,131,134,2,166,0,90,132,0,128,2,0,12,0,12,0,0,0,21,0,1,0,136,2,166,0,90,131,135,2,90,0,166,132,128,2,20,0,236,132,2,90,0,166,131,2,20,0,236,132,2,166,0,90,132,128,2,0,12,0,18,0,0,0,18,0,1,0,9,50,0,50,206,0,206,0,103,0,153,131,133,2,136,0,120,132,9,226,0,226,30,0,30,0,186,0,70,131,133,2,70,0,186,132,0,128,2,0,12,0,20,0,0,0,20,0,1,0,131,0,201,129,1,55,55,129,0,201,131,132,1,196,196,129,1,60,60,132,131,0,70,129,1,186,186,129,0,70,131,132,1,70,70,129,1,186,186,132,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,56,200,1,206,60,1,186,70,1,70,186,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,56,200,1,196,60,1,186,70,1,70,186,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,56,200,1,196,60,1,146,110,1,110,146,128,2,0,12,0,36,0,0,0,28,32,1,0,145,5,26,56,56,56,56,26,129,5,231,200,200,200,200,231,131,143,3,196,196,196,228,129,5,28,60,60,60,60,28,129,1,228,196,131,8,7,16,1,3,1,3,1,3,1,7,70,186,186,186,186,70,70,70,7,70,70,70,186,186,186,186,70,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,9,2,1,56,200,1,196,60,1,146,110,1,110,146,128,2,0,12,0,98,0,0,0,98,0,1,48,47,1,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,47,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,47,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,13,251,243,6,47,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,47,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,240,7,16,250,128,2,0,12,0,11,0,0,0,11,0,1,6,5,0,2,2,2,7,2,131,1,56,200,5,30,226,30,226,196,60,131,1,146,110,5,206,246,10,50,110,146,128,2,0,12,0,11,0,0,0,11,0,1,6,5,0,2,2,2,7,2,5,226,30,226,30,60,196,131,1,56,200,5,50,10,246,206,146,110,131,1,146,110,128,2,0,12,0,21,0,0,0,21,0,1,10,9,0,2,3,2,1,2,3,2,6,2,129,1,30,226,129,3,30,226,56,200,1,30,226,129,1,30,226,129,1,196,60,129,1,25,35,129,3,221,231,146,110,1,221,231,129,1,25,35,129,1,110,146,128,2,0,12,0,36,0,0,0,40,0,1,0,3,243,203,5,45,129,3,216,40,40,216,133,3,200,56,56,200,131,5,53,13,211,251,40,216,131,1,216,40,131,3,196,196,60,60,131,128,10,20,0,236,40,40,60,40,216,236,236,236,131,3,110,146,146,110,131,11,236,0,20,0,40,60,40,40,196,196,216,176,131,3,110,110,146,146,131,0,128,2,0,12,0,39,0,0,0,40,0,1,0,8,13,211,251,53,0,216,40,0,216,129,0,40,131,3,56,56,200,200,131,4,53,251,211,13,40,129,3,216,0,40,216,132,3,196,60,60,196,131,11,16,36,16,252,232,232,212,232,56,36,36,36,131,3,146,146,110,110,131,11,236,0,20,0,40,40,40,60,196,176,216,196,131,3,110,146,146,110,131,128,2,0,12,0,63,0,0,0,69,0,1,0,4,45,243,203,5,40,129,5,216,211,251,53,13,40,129,0,216,129,4,40,216,0,40,216,132,3,200,56,56,200,131,17,251,53,13,211,0,40,216,0,251,211,13,53,0,216,40,0,40,216,129,0,40,129,0,216,131,3,196,196,60,60,131,23,20,0,236,0,80,60,60,40,236,0,20,0,216,196,196,176,60,60,80,40,196,216,176,196,131,3,110,146,146,110,131,128,15,20,0,236,90,110,70,90,0,236,0,20,90,70,110,90,166,64,255,126,4,166,166,166,166,166,64,255,126,131,3,110,110,146,146,131,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,56,200,1,196,60,1,216,40,1,40,216,128,2,0,12,0,6,0,0,0,6,0,1,2,1,9,2,1,56,200,1,196,60,1,146,110,1,110,146,128,2,0,12,0,6,0,0,0,6,0,1,2,1,9,2,1,56,200,1,60,196,1,146,110,1,146,110,128,2,0,12,0,6,0,0,0,6,0,1,2,1,8,2,1,56,200,1,60,196,1,146,110,1,146,110,128,2,0,12,0,6,0,0,0,6,0,1,2,1,8,2,1,200,56,1,196,60,1,110,146,1,110,146,128,2,0,12,0,9,0,0,0,9,0,1,4,3,0,2,7,2,3,228,28,200,56,129,1,196,60,3,40,216,110,146,129,1,110,146,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,6,2,4,235,27,227,200,56,4,226,20,30,196,60,128,3,236,20,110,146,4,20,0,236,110,146,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,6,2,4,227,27,235,56,200,4,226,236,30,196,60,4,20,236,0,146,110,4,20,0,236,110,146,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,6,2,4,21,229,29,56,200,4,30,236,226,60,196,128,3,20,236,146,110,4,236,0,20,146,110,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,6,2,4,29,229,21,200,56,4,30,20,226,60,196,4,236,20,0,110,146,4,236,0,20,146,110,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,56,200,1,196,60,1,216,40,1,40,216,128,1,0,8,0,6,0,0,2,1,5,2,1,56,200,1,196,60,128,2,0,12,0,14,0,0,0,17,0,1,0,130,0,186,129,2,70,70,186,131,131,1,186,186,134,130,5,80,30,216,176,225,33,131,131,4,80,80,0,178,176,131,128,2,0,12,0,16,0,0,0,18,0,1,0,130,0,186,131,0,186,131,130,5,255,185,185,69,69,255,131,130,5,60,230,156,158,242,60,131,130,5,38,77,33,225,173,224,131,0,128,2,0,12,0,14,0,0,0,18,0,1,0,130,1,70,70,129,1,186,186,131,132,1,70,70,133,130,5,225,176,216,30,80,33,131,130,5,98,20,196,196,20,100,131,0,128,2,0,12,0,14,0,0,0,18,0,1,0,130,1,70,70,135,130,5,255,255,69,69,185,185,131,130,5,196,196,14,98,100,26,131,130,5,38,224,173,225,33,77,131,0,128,2,0,12,0,14,0,0,0,17,0,1,0,142,0,186,129,2,70,70,186,131,143,1,186,186,134,142,5,80,30,216,176,225,33,131,143,4,80,80,0,178,176,131,128,2,0,12,0,14,0,0,0,17,0,1,0,133,0,186,129,2,70,70,186,131,134,1,186,186,134,133,5,80,30,216,176,225,33,131,134,4,80,80,0,178,176,131,128,2,0,12,0,12,0,0,0,17,0,1,0,133,3,70,70,186,186,133,137,1,186,186,131,133,5,176,223,31,80,40,226,131,134,4,176,178,0,80,80,131,128,2,0,12,0,18,0,0,0,14,0,1,0,130,5,196,0,57,57,0,196,131,130,5,236,211,232,24,45,20,131,130,0,60,131,0,60,131,131,3,50,50,206,206,132,0,128,2,0,12,0,15,0,0,0,17,0,1,0,130,4,60,60,0,246,246,132,132,3,45,39,217,211,131,130,4,196,196,0,47,47,132,130,5,20,236,206,221,35,50,131,0,128,2,0,12,0,18,0,0,0,14,0,1,0,130,5,170,206,57,91,7,252,131,130,5,229,196,196,220,110,110,131,130,0,50,129,2,206,206,50,131,131,1,50,50,134,0,128,2,0,12,0,18,0,0,0,14,0,1,0,130,5,196,220,110,110,229,196,131,130,5,199,165,249,4,86,50,131,130,0,50,131,0,50,131,131,3,50,50,206,206,132,0,128,2,0,12,0,18,0,0,0,14,0,1,0,130,5,7,91,57,206,170,252,131,130,5,146,36,60,60,27,146,131,130,1,206,206,129,1,50,50,131,132,1,206,206,133,0,128,2,0,12,0,18,0,0,0,12,0,1,0,130,5,60,60,27,146,146,36,131,130,5,199,50,86,4,249,165,131,130,1,206,206,135,132,3,206,206,50,50,131,0,128,2,0,12,0,24,0,0,0,18,0,1,0,130,3,82,56,56,50,65,255,126,255,102,131,130,65,255,94,255,116,3,50,60,60,74,131,130,2,80,176,176,129,0,80,131,130,0,20,129,2,176,176,20,131,0,128,2,0,12,0,26,0,0,0,16,0,1,0,130,0,82,65,255,102,255,126,2,50,56,56,131,130,64,0,162,3,182,196,196,206,64,0,140,131,130,1,80,80,129,1,176,176,131,130,3,236,236,80,80,133,0,128,2,0,12,0,24,0,0,0,18,0,1,0,130,3,174,200,200,206,65,0,130,0,154,131,130,65,0,162,0,140,3,206,196,196,182,131,130,2,176,80,80,129,0,176,131,130,0,236,129,2,80,80,236,131,0,128,2,0,12,0,26,0,0,0,16,0,1,0,130,0,174,65,0,154,0,130,2,206,200,200,131,130,64,255,94,3,74,60,60,50,64,255,116,131,130,1,176,176,129,1,80,80,131,130,3,20,20,176,176,133,0,128,2,0,12,0,30,0,0,0,18,0,1,8,7,1,2,2,2,2,2,2,2,1,197,197,65,255,79,0,177,3,59,59,59,197,0,59,64,0,177,128,64,0,177,1,59,0,65,255,79,255,197,7,35,35,105,151,221,221,221,35,7,221,151,0,151,221,0,105,35,128,2,0,12,0,23,0,0,0,14,0,1,6,5,1,2,2,2,2,2,1,197,59,65,255,79,0,177,1,59,59,0,197,64,255,79,128,64,0,177,1,59,0,5,35,221,105,151,221,221,5,35,105,0,151,221,0,0,128,2,0,12,0,22,0,0,0,14,0,1,6,5,1,2,2,2,2,2,64,0,177,3,197,59,197,197,64,255,79,64,255,79,2,197,0,59,64,0,177,128,5,151,35,221,35,35,105,5,105,35,0,221,151,0,128,2,0,12,0,14,0,0,0,10,0,1,4,3,1,2,2,2,3,59,197,59,197,64,255,79,1,197,59,64,0,177,3,221,35,221,35,3,105,35,221,151,128,2,0,12,0,30,0,0,0,18,0,1,8,7,1,2,2,2,2,2,2,2,0,197,64,255,79,3,197,59,197,59,65,0,177,0,59,128,64,255,79,1,197,59,65,0,177,255,79,128,0,197,7,35,105,35,221,35,221,151,221,128,6,105,35,221,151,105,0,35,128,2,0,12,0,23,0,0,0,14,0,1,6,5,1,2,2,2,2,2,1,59,197,67,255,79,0,59,0,177,0,59,1,59,0,65,0,177,255,79,128,0,197,5,221,35,105,221,151,221,5,221,0,151,105,0,35,0,128,2,0,12,0,24,0,0,0,14,0,1,6,5,1,2,2,2,2,2,64,0,177,2,59,197,197,65,255,79,255,197,128,0,59,64,0,177,128,65,255,79,255,197,5,151,221,35,35,105,35,128,4,221,151,0,105,35,128,2,0,12,0,16,32,0,0,11,0,1,0,4,3,1,2,2,2,0,197,66,255,79,0,177,0,59,131,7,35,35,105,105,151,151,221,221,131,139,128,2,0,12,0,45,0,0,0,26,0,1,12,11,1,2,2,2,2,2,2,2,2,2,2,2,0,197,66,255,79,255,197,0,177,3,59,59,197,197,67,255,79,0,59,0,177,0,59,128,66,255,79,255,197,0,177,2,59,0,59,64,0,177,128,64,255,79,128,0,197,11,35,105,35,151,221,221,35,35,105,221,151,221,128,10,105,35,151,221,0,221,151,0,105,0,35,0,128,2,0,12,0,28,0,0,0,16,0,1,8,7,1,2,2,2,2,2,2,2,0,59,66,0,177,0,59,0,177,2,59,59,197,64,255,79,64,255,79,128,0,197,64,0,177,0,59,130,7,221,151,221,151,221,221,35,105,4,105,0,35,151,221,130,128,2,0,12,0,27,0,0,0,16,0,1,8,7,1,2,2,2,2,2,2,2,0,197,64,255,79,2,197,197,197,66,255,79,0,177,0,59,128,64,255,79,1,197,59,64,0,177,130,7,35,105,35,35,35,105,151,221,128,3,105,35,221,151,130,0,128,2,0,12,0,14,0,0,0,10,0,1,4,3,1,2,2,2,64,0,177,1,59,197,64,255,79,3,59,197,59,0,3,151,221,35,105,3,221,35,221,0,128,2,0,12,0,11,0,0,0,8,0,1,3,2,1,2,2,66,0,177,0,59,255,79,2,59,197,0,2,151,221,105,2,221,35,0,128,2,0,12,0,11,0,0,0,8,0,1,3,2,0,2,2,66,0,177,255,197,255,79,128,1,197,59,2,151,35,105,128,1,35,221,128,2,0,12,0,10,0,0,0,10,0,1,4,3,1,2,2,2,3,118,59,197,138,3,59,197,59,0,3,186,221,35,70,3,221,35,221,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,118,59,138,2,59,197,0,2,186,221,70,2,221,35,0,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,2,4,118,59,59,197,138,128,3,59,197,0,197,4,186,221,221,35,70,128,3,221,35,0,35,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,118,197,138,2,197,59,0,2,186,35,70,2,35,221,0,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,2,4,118,59,197,197,138,128,3,197,0,197,59,4,186,221,35,35,70,128,3,35,0,35,221,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,118,59,59,197,197,138,5,59,197,0,197,59,0,5,186,221,221,35,35,70,5,221,35,0,35,221,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,59,59,197,197,128,2,118,138,118,3,221,221,35,35,128,2,186,70,186,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,2,2,59,59,197,128,1,118,138,2,221,221,35,128,1,186,70,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,1,4,59,59,118,138,138,128,3,118,138,0,118,4,221,221,186,70,70,128,3,186,70,0,186,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,2,2,59,197,197,128,1,138,118,2,221,35,35,128,1,70,186,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,2,4,59,118,138,197,197,128,3,118,0,138,118,4,221,186,70,35,35,128,3,186,0,70,186,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,59,59,118,138,197,197,5,118,138,0,138,118,0,5,221,221,186,70,35,35,5,186,70,0,70,186,0,128,2,0,12,0,19,0,0,0,14,0,1,6,5,0,2,2,2,3,2,5,59,59,197,197,59,197,128,68,0,177,0,59,0,177,255,79,255,197,5,221,221,35,35,221,35,128,4,151,221,151,105,35,0,128,2,0,12,0,10,0,0,0,8,0,1,3,2,0,1,7,2,59,59,197,128,65,0,177,255,79,2,221,221,35,128,1,151,105,0,128,2,0,12,0,10,0,0,0,8,0,1,3,2,0,2,6,2,59,197,197,128,65,255,79,0,177,2,221,35,35,128,1,105,151,0,128,2,0,12,0,11,0,0,0,11,0,1,0,139,7,118,138,138,118,118,138,138,118,131,139,7,186,70,70,186,186,70,70,186,131,0,128,2,0,12,0,11,0,0,0,11,0,1,0,7,118,118,138,138,118,118,138,138,131,139,7,186,186,70,70,186,186,70,70,131,139,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,118,138,1,197,0,1,186,70,1,35,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,1,2,2,2,3,118,59,197,138,3,118,138,118,0,3,186,221,35,70,3,186,70,186,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,118,59,138,2,118,138,0,2,186,221,70,2,186,70,0,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,118,197,138,2,138,118,0,2,186,35,70,2,70,186,0,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,1,138,118,1,221,35,1,70,186,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,1,138,118,1,221,35,1,70,186,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,6,1,59,197,1,138,118,1,221,35,1,70,186,128,2,0,12,0,19,0,0,0,19,0,1,0,147,15,118,138,138,118,118,138,138,118,118,138,138,118,118,138,138,118,131,147,15,186,70,70,186,186,70,70,186,186,70,70,186,186,70,70,186,131,0,128,2,0,12,0,19,0,0,0,19,0,1,0,15,118,118,138,138,118,118,138,138,118,118,138,138,118,118,138,138,131,147,15,186,186,70,70,186,186,70,70,186,186,70,70,186,186,70,70,131,147,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,1,138,118,1,221,35,1,70,186,128,2,0,12,0,15,0,0,0,15,0,1,0,143,11,118,138,138,118,118,138,138,118,118,138,138,118,131,143,11,186,70,70,186,186,70,70,186,186,70,70,186,131,0,128,2,0,12,0,15,0,0,0,15,0,1,0,11,118,118,138,138,118,118,138,138,118,118,138,138,131,143,11,186,186,70,70,186,186,70,70,186,186,70,70,131,143,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,118,138,128,0,59,1,186,70,128,0,221,128,2,0,12,0,10,0,0,0,10,0,1,4,3,1,2,2,2,3,59,118,138,197,3,138,0,138,118,3,221,186,70,35,3,70,0,70,186,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,59,118,138,2,138,0,118,2,221,186,70,2,70,0,186,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,59,118,138,197,128,2,59,0,59,3,221,186,70,35,128,2,221,0,221,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,118,138,197,128,1,138,118,2,186,70,35,128,1,70,186,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,118,118,138,138,131,135,3,186,186,70,70,131,135,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,118,59,118,138,197,138,5,118,138,0,138,118,0,5,186,221,186,70,35,70,5,186,70,0,70,186,0,128,2,0,12,0,9,0,0,0,9,0,1,4,3,1,2,2,2,3,118,59,118,138,1,118,138,129,3,186,221,186,70,1,186,70,129,128,2,0,12,0,10,0,0,0,10,0,1,4,3,1,2,2,2,3,118,138,197,138,128,2,138,118,0,3,186,70,35,70,128,2,70,186,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,3,3,2,5,118,59,59,138,197,138,5,118,138,0,138,59,0,5,186,221,221,70,35,70,5,186,70,0,70,221,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,4,3,59,59,197,197,128,2,118,138,59,3,221,221,35,35,128,2,186,70,221,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,1,3,59,59,197,197,3,118,138,0,197,3,221,221,35,35,3,186,70,0,35,128,2,0,12,0,14,0,0,0,14,0,1,6,5,0,2,2,2,2,2,5,59,59,59,197,197,197,128,4,118,138,0,197,59,5,221,221,221,35,35,35,128,4,186,70,0,35,221,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,2,2,4,118,59,118,197,138,4,59,197,138,118,0,4,186,221,186,35,70,4,221,35,70,186,0,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,2,2,4,118,59,118,138,197,4,59,197,0,138,118,4,186,221,186,70,35,4,221,35,0,70,186,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,118,59,118,138,197,138,5,59,197,0,138,118,0,5,186,221,186,70,35,70,5,221,35,0,70,186,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,0,2,2,2,2,3,5,59,59,118,138,197,138,128,4,118,138,0,197,118,5,221,221,186,70,35,70,128,4,186,70,0,35,186,0,2,0,12,0,19,32,0,0,25,32,1,5,4,1,5,2,1,5,4,59,0,59,0,197,128,3,59,197,197,0,7,6,2,1,1,2,2,1,5,6,221,227,236,0,221,0,35,6,249,236,227,221,35,35,0,128,2,0,12,0,19,32,0,0,16,0,1,7,6,1,5,2,1,2,1,2,5,4,1,5,2,1,5,4,59,0,197,0,197,128,3,197,59,59,0,6,221,0,35,0,20,29,35,128,5,35,221,221,227,236,0,128,2,0,12,0,19,32,0,0,16,0,1,7,6,1,1,2,1,2,3,5,5,4,1,1,5,3,5,4,59,0,59,197,0,1,197,197,129,0,59,6,221,0,236,227,221,35,0,3,35,35,29,20,129,0,221,0,2,0,12,0,19,32,0,0,25,32,1,5,4,0,5,3,5,2,128,3,59,197,0,197,0,59,129,1,197,59,7,6,0,5,4,1,1,2,2,128,5,221,35,29,20,0,35,6,221,0,7,20,29,35,221,128,2,0,12,0,34,0,0,0,34,0,1,0,129,0,70,129,2,186,0,70,129,0,186,129,2,70,0,186,131,128,2,143,0,113,129,0,143,129,2,113,0,143,129,0,113,132,129,0,215,129,2,41,0,215,129,0,41,129,2,215,0,41,131,128,2,66,0,190,129,0,66,129,2,190,0,66,129,0,190,132,0,128,2,0,12,0,13,0,0,0,13,0,1,0,0,70,129,0,186,133,128,0,113,129,0,143,132,0,215,129,0,41,133,128,0,190,129,0,66,132,0,128,2,0,12,0,14,0,0,0,14,0,1,0,129,0,70,129,0,186,131,128,0,143,129,0,113,132,129,0,215,129,0,41,131,128,0,66,129,0,190,132,0,128,2,0,12,0,11,0,0,0,11,0,1,0,139,7,59,197,197,59,59,197,197,59,131,139,7,221,35,35,221,221,35,35,221,131,0,128,2,0,12,0,11,0,0,0,11,0,1,0,7,59,59,197,197,59,59,197,197,131,139,7,221,221,35,35,221,221,35,35,131,139,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,1,197,0,1,221,35,1,35,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,59,59,197,197,128,2,59,197,59,3,221,221,35,35,128,2,221,35,221,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,2,2,59,59,197,128,1,59,197,2,221,221,35,128,1,221,35,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,2,2,59,197,197,128,1,197,59,2,221,35,35,128,1,35,221,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,1,197,59,1,221,35,1,35,221,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,1,197,59,1,221,35,1,35,221,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,59,197,1,138,118,1,221,35,1,70,186,128,2,0,12,0,19,0,0,0,19,0,1,0,147,15,59,197,197,59,59,197,197,59,59,197,197,59,59,197,197,59,131,147,15,221,35,35,221,221,35,35,221,221,35,35,221,221,35,35,221,131,0,128,2,0,12,0,19,0,0,0,19,0,1,0,15,59,59,197,197,59,59,197,197,59,59,197,197,59,59,197,197,131,147,15,221,221,35,35,221,221,35,35,221,221,35,35,221,221,35,35,131,147,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,1,197,59,1,221,35,1,35,221,128,2,0,12,0,15,0,0,0,15,0,1,0,143,11,59,197,197,59,59,197,197,59,59,197,197,59,131,143,11,221,35,35,221,221,35,35,221,221,35,35,221,131,0,128,2,0,12,0,15,0,0,0,15,0,1,0,11,59,59,197,197,59,59,197,197,59,59,197,197,131,143,11,221,221,35,35,221,221,35,35,221,221,35,35,131,143,0,128,2,0,12,0,6,0,0,0,6,0,1,2,1,1,2,1,59,197,128,0,59,1,221,35,128,0,221,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,118,59,197,138,128,2,197,0,197,3,186,221,35,70,128,2,35,0,35,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,59,59,197,197,3,59,197,0,197,3,221,221,35,35,3,221,35,0,35,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,2,2,59,59,197,2,59,197,0,2,221,221,35,2,221,35,0,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,1,2,59,197,197,2,59,0,197,2,221,35,35,2,221,0,35,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,59,59,197,197,131,135,3,221,221,35,35,131,135,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,0,2,2,2,2,2,5,59,59,59,197,197,197,128,4,59,197,0,197,59,5,221,221,221,35,35,35,128,4,221,35,0,35,221,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,59,59,59,197,128,2,59,197,0,3,221,221,221,35,128,2,221,35,0,128,2,0,12,0,9,0,0,0,9,0,1,4,3,0,2,2,2,3,59,197,197,197,129,1,197,59,3,221,35,35,35,129,1,35,221,128,2,0,12,0,14,0,0,0,14,0,1,6,5,0,2,3,3,2,2,5,118,59,118,197,197,138,128,4,59,138,0,138,118,5,186,221,186,35,35,70,128,4,221,70,0,70,186,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,1,5,2,3,59,59,197,197,128,2,59,138,118,3,221,221,35,35,128,2,221,70,186,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,4,2,2,3,59,59,197,197,3,118,197,0,138,3,221,221,35,35,3,186,35,0,70,128,2,0,12,0,14,0,0,0,14,0,1,6,5,0,2,2,2,2,2,5,59,59,59,197,197,197,128,4,59,197,0,138,118,5,221,221,221,35,35,35,128,4,221,35,0,70,186,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,2,2,4,118,59,138,197,138,4,118,138,197,59,0,4,186,221,70,35,70,4,186,70,35,221,0,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,1,2,2,2,2,4,59,118,138,197,138,4,138,0,197,59,118,4,221,186,70,35,70,4,70,0,35,221,186,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,118,59,118,138,197,138,5,118,138,0,197,59,0,5,186,221,186,70,35,70,5,186,70,0,35,221,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,2,3,2,2,2,2,5,118,59,118,138,197,197,5,118,197,0,138,118,0,5,186,221,186,70,35,35,5,186,35,0,70,186,0,128,2,0,12,0,14,0,0,0,10,0,1,4,3,1,2,6,2,0,59,66,0,177,255,79,255,197,3,197,0,197,59,3,221,151,105,35,3,35,0,35,221,128,2,0,12,0,11,0,0,0,8,0,1,3,2,0,2,6,0,59,65,0,177,255,79,2,59,197,0,2,221,151,105,2,221,35,0,128,2,0,12,0,11,0,0,0,8,0,1,3,2,1,6,2,66,0,177,255,79,255,197,128,1,197,59,2,151,105,35,128,1,35,221,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,59,59,118,138,197,197,5,59,197,0,197,59,0,5,221,221,186,70,35,35,5,221,35,0,35,221,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,1,2,2,2,3,59,118,138,197,3,197,0,197,59,3,221,186,70,35,3,35,0,35,221,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,1,4,59,59,118,138,138,128,3,59,197,0,59,4,221,221,186,70,70,128,3,221,35,0,221,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,59,118,138,2,197,0,59,2,221,186,70,2,35,0,221,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,2,4,59,118,138,197,197,128,3,59,0,197,59,4,221,186,70,35,35,128,3,221,0,35,221,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,1,2,2,2,118,138,197,128,1,197,59,2,186,70,35,128,1,35,221,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,118,59,59,197,197,138,5,118,138,0,138,118,0,5,186,221,221,35,35,70,5,186,70,0,70,186,0,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,59,59,197,197,3,118,138,0,138,3,221,221,35,35,3,186,70,0,70,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,2,4,118,59,59,197,138,128,3,118,138,0,138,4,186,221,221,35,70,128,3,186,70,0,70,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,2,2,59,59,197,2,118,138,0,2,221,221,35,2,186,70,0,0,128,2,0,12,0,12,0,0,0,12,0,1,5,4,0,2,2,2,2,4,118,59,197,197,138,128,3,138,0,138,118,4,186,221,35,35,70,128,3,70,0,70,186,0,128,2,0,12,0,8,0,0,0,8,0,1,3,2,0,2,1,2,59,197,197,2,118,0,138,2,221,35,35,2,186,0,70,0,128,2,0,12,0,20,0,0,0,14,0,1,6,5,0,2,2,2,3,2,5,59,59,197,197,59,197,0,197,64,255,79,128,66,255,79,0,59,0,177,5,221,221,35,35,221,35,5,35,105,0,105,221,151,128,2,0,12,0,10,0,0,0,8,0,1,3,2,0,6,2,2,59,59,197,65,0,177,255,79,128,2,221,221,35,2,151,105,0,0,128,2,0,12,0,11,0,0,0,8,0,1,3,2,0,2,1,2,59,197,197,64,0,177,128,64,255,79,2,221,35,35,2,151,0,105,128,2,0,12,0,20,0,0,0,14,0,1,6,5,1,2,2,6,2,2,69,0,177,0,59,0,177,255,79,255,197,255,79,5,59,197,0,197,59,0,5,151,221,151,105,35,105,5,221,35,0,35,221,0,128,2,0,12,0,17,0,0,0,11,0,1,6,5,1,2,2,2,2,2,66,0,177,0,59,0,177,1,59,197,64,255,79,1,59,197,131,5,151,221,151,221,35,105,1,221,35,131,128,2,0,12,0,18,0,0,0,12,0,1,6,5,1,2,2,2,2,2,0,197,68,255,79,255,197,255,79,0,177,0,59,128,1,197,59,130,5,35,105,35,105,151,221,128,1,35,221,130,128,2,0,12,0,14,0,0,0,14,0,1,6,5,1,2,2,2,2,2,5,118,59,118,138,197,138,5,59,197,0,197,59,0,5,186,221,186,70,35,70,5,221,35,0,35,221,0,128,2,0,12,0,9,0,0,0,9,0,1,4,3,1,2,2,2,3,118,59,118,138,1,59,197,129,3,186,221,186,70,1,221,35,129,128,2,0,12,0,10,0,0,0,10,0,1,4,3,1,2,2,2,3,118,138,197,138,128,2,197,59,0,3,186,70,35,70,128,2,35,221,0,128,2,0,12,0,14,0,0,0,14,0,1,6,5,0,2,2,2,2,2,5,59,59,59,197,197,197,128,4,118,138,0,138,118,5,221,221,221,35,35,35,128,4,186,70,0,70,186,128,2,0,12,0,10,0,0,0,10,0,1,4,3,0,2,2,2,3,59,59,59,197,128,2,118,138,0,3,221,221,221,35,128,2,186,70,0,128,2,0,12,0,9,0,0,0,9,0,1,4,3,0,2,2,2,3,59,197,197,197,129,1,138,118,3,221,35,35,35,129,1,70,186,128,2,0,12,0,19,0,0,0,14,0,1,6,5,0,2,6,2,2,6,5,59,59,59,197,197,197,128,65,0,177,255,79,128,65,255,79,0,177,5,221,221,221,35,35,35,128,4,151,105,0,105,151,0,128,2,0,12,0,12,0,0,0,10,0,1,4,3,0,2,6,2,3,59,59,59,197,128,65,0,177,255,79,128,3,221,221,221,35,128,2,151,105,0,128,2,0,12,0,11,0,0,0,9,0,1,4,3,0,2,2,6,3,59,197,197,197,129,65,255,79,0,177,3,221,35,35,35,129,1,105,151,128,2,0,12,0,126,0,0,0,109,0,1,0,49,56,48,36,14,246,1,20,33,33,24,190,194,206,221,237,246,241,233,228,224,222,0,5,10,12,228,240,254,5,17,30,30,30,28,26,24,24,24,11,0,3,7,7,7,7,7,247,248,250,253,134,11,211,50,40,20,12,248,242,41,36,26,20,232,131,20,20,35,56,73,80,77,61,39,9,246,226,230,240,247,247,241,239,233,232,237,246,130,11,1,188,179,171,171,171,184,196,204,217,228,243,132,7,255,253,253,253,253,5,3,1,135,1,80,40,130,6,6,10,91,95,100,100,100,131,19,236,235,203,183,196,240,19,21,6,0,20,13,13,17,12,0,226,212,226,250,133,14,227,193,176,167,156,156,156,180,212,236,236,236,236,236,245,132,11,20,21,23,27,30,25,20,20,20,15,6,40,133,4,236,240,251,0,28,131,128,19,235,239,1,0,245,239,233,208,176,0,34,52,44,29,30,36,31,29,48,80,131,10,70,96,120,120,120,110,100,85,67,48,21,132,3,6,10,7,2,146,4,226,220,216,216,216,131,0,2,0,12,0,82,32,0,0,43,32,1,26,25,17,3,6,1,1,2,2,3,3,3,2,1,1,1,1,4,1,1,2,1,1,1,2,3,3,3,25,13,29,230,227,227,244,15,33,241,223,0,11,29,38,38,0,243,225,214,214,225,243,15,33,241,223,25,14,242,242,244,248,14,33,241,223,15,212,212,223,242,0,44,44,33,0,242,223,212,33,241,223,15,13,12,16,16,3,3,3,3,4,4,4,4,3,3,3,128,11,14,6,26,34,244,216,12,40,230,222,242,250,12,10,212,232,240,220,40,244,216,12,212,232,240,220,0,0,2,0,12,0,46,32,0,0,58,32,1,14,13,17,2,1,5,4,1,2,3,3,3,3,3,3,3,13,244,227,227,17,29,13,241,223,15,33,241,223,15,33,13,14,248,244,242,2,14,33,241,223,15,33,241,223,15,18,17,16,2,2,1,3,1,1,2,1,1,2,3,3,3,3,3,3,3,17,255,32,32,28,0,237,231,224,224,240,6,14,250,242,6,14,250,242,17,240,253,13,15,15,15,15,9,253,240,242,6,14,250,242,6,14,250,128,2,0,12,0,89,0,0,0,93,32,1,0,139,7,245,11,11,244,16,16,240,240,132,18,25,54,54,54,25,0,231,202,202,202,231,12,12,245,245,12,12,245,246,131,7,16,16,240,240,244,11,11,245,131,139,43,11,244,245,11,0,3,3,255,16,240,240,16,198,198,230,0,26,58,58,58,26,0,230,198,11,11,244,244,11,11,245,244,16,240,240,16,3,255,0,3,11,245,245,12,131,30,29,4,6,2,1,1,1,2,2,2,2,2,3,1,5,2,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,29,236,20,14,214,227,28,216,40,236,0,234,206,234,50,228,214,14,29,243,228,29,43,0,20,216,40,28,227,242,42,129,27,214,14,28,227,0,236,40,216,60,229,196,27,228,241,42,28,213,228,28,14,40,216,20,0,228,28,43,242,0,128,2,0,12,0,75,0,0,0,41,32,1,0,128,34,15,24,24,24,24,24,15,0,242,231,232,232,232,231,242,24,24,232,232,50,50,206,206,0,38,100,100,100,38,0,218,156,156,156,218,131,6,40,40,42,34,20,7,255,130,25,255,7,20,34,42,40,50,206,206,50,0,40,40,0,198,198,248,20,48,98,98,98,48,20,248,198,131,14,13,1,1,3,1,1,6,4,2,2,2,2,2,4,2,13,250,240,236,240,250,20,236,20,218,38,232,206,24,50,133,1,30,226,129,3,75,0,181,0,0,0,2,0,12,0,90,32,0,0,90,32,1,26,25,4,6,3,1,1,4,2,1,2,1,1,1,2,1,1,1,1,1,2,2,2,1,1,1,1,1,20,24,0,66,124,124,214,156,156,228,35,104,14,62,62,33,0,251,0,232,232,232,65,0,139,0,132,2,117,101,106,129,9,158,208,0,98,0,208,70,251,62,102,68,0,130,0,130,0,140,0,140,0,154,130,5,24,26,41,65,86,86,27,26,1,3,1,2,3,1,2,2,4,2,3,1,1,1,1,1,1,1,1,1,1,4,2,1,1,1,2,22,246,236,246,10,20,10,232,206,24,50,216,156,232,36,196,196,196,173,156,156,0,156,0,67,255,96,255,96,255,96,255,96,133,8,75,0,181,0,196,0,38,234,156,68,255,96,255,97,255,103,255,106,255,106,130,3,166,166,178,196,0,2,0,12,0,26,32,0,0,18,32,1,11,10,0,1,3,1,5,2,1,2,2,3,2,10,30,26,20,10,236,226,216,206,50,40,216,138,7,6,4,3,5,3,2,3,2,6,216,19,40,40,216,236,20,134,0,2,0,12,0,94,32,0,0,79,32,1,30,29,1,1,2,3,2,1,2,4,2,1,1,1,1,2,2,3,1,4,2,3,2,1,2,2,2,1,1,1,1,4,29,9,20,20,247,236,236,40,40,20,24,30,30,40,40,30,20,0,20,236,0,236,216,226,216,216,226,226,232,236,216,16,20,14,5,0,10,14,30,15,10,10,16,20,20,20,24,20,20,129,10,20,20,30,24,20,20,20,16,10,10,24,25,24,1,2,1,3,1,1,3,2,4,3,1,2,2,2,6,2,1,5,3,2,1,1,3,1,3,24,247,236,236,9,20,20,226,216,226,226,216,216,226,0,236,20,0,30,30,40,40,30,30,34,40,13,236,246,250,0,250,246,226,231,246,236,236,236,231,236,129,8,236,226,236,236,236,236,246,246,231,0,0,2,0,12,0,37,32,0,0,18,32,1,12,11,0,1,2,1,3,3,1,3,1,2,1,2,128,10,6,20,20,10,5,251,246,242,236,236,250,128,2,6,49,60,132,2,60,48,7,7,6,5,2,2,1,1,3,4,6,216,236,246,246,10,20,40,134,0,128,2,0,12,0,7,0,0,0,7,0,1,0,128,2,40,0,216,131,135,128,2,216,0,40,131,135,0,128,2,0,12,0,15,0,0,0,15,0,1,0,2,75,24,171,129,2,85,232,182,131,130,1,176,176,134,2,226,236,40,129,2,206,20,20,131,130,1,120,120,134,0,128,2,0,12,0,125,0,0,0,109,0,1,0,20,200,34,33,28,23,15,10,19,35,50,62,66,232,223,223,236,0,10,242,220,208,135,39,3,6,8,9,249,249,249,249,249,253,0,244,232,232,232,230,228,226,226,226,240,251,2,16,28,244,247,252,45,24,236,231,220,215,14,8,243,236,217,206,131,20,20,246,237,232,233,239,241,247,247,240,230,226,246,9,39,61,77,80,73,56,35,136,7,1,3,5,253,253,253,253,255,132,11,243,228,217,204,196,184,171,171,171,179,188,1,129,7,80,100,100,100,95,91,10,6,130,0,40,131,32,20,0,6,30,44,30,0,244,239,243,244,236,0,250,235,237,16,60,73,53,22,0,250,241,236,236,236,230,226,229,233,235,236,132,14,11,20,20,20,20,20,44,76,100,100,100,89,80,64,29,131,5,216,228,0,5,16,20,137,128,19,80,48,29,31,36,30,29,44,52,34,0,176,208,233,239,245,0,1,239,235,140,3,2,7,10,6,132,10,21,48,67,85,100,110,120,120,120,96,70,131,4,216,216,216,220,226,137,0,0,2,0,12,0,84,32,0,0,79,32,1,28,27,0,1,1,2,2,2,8,1,2,3,3,2,4,2,1,1,1,2,1,2,1,3,2,1,3,1,3,2,128,7,9,19,24,10,232,58,10,204,129,16,20,0,20,35,58,63,8,63,36,216,58,7,216,166,166,58,232,2,40,40,31,130,4,80,80,0,206,40,131,10,6,10,246,246,0,156,50,100,100,1,208,129,25,24,0,2,1,1,2,2,8,1,2,3,3,2,4,2,1,2,2,1,1,2,3,3,4,3,2,24,20,245,236,236,0,20,196,0,62,20,20,216,62,216,204,186,196,186,188,246,196,246,80,196,20,2,206,216,239,129,19,226,176,176,0,20,206,226,226,226,226,226,226,226,226,10,19,186,245,226,226,0,128,2,0,12,0,83,0,0,0,86,0,1,0,6,110,165,231,14,14,14,8,129,29,202,142,142,142,139,135,232,0,1,24,24,24,12,0,196,184,170,170,170,209,0,35,76,76,232,232,245,98,98,47,129,2,245,232,232,131,128,64,0,150,3,71,12,0,255,129,5,94,94,44,0,251,242,131,0,248,131,8,60,54,23,0,205,162,162,162,213,132,2,44,94,94,135,2,196,206,234,130,15,246,20,0,27,70,70,70,38,20,20,0,247,236,236,236,246,129,19,34,70,70,70,31,0,219,178,178,20,20,10,186,186,223,0,20,20,20,20,131,128,4,50,29,3,0,18,129,6,176,176,223,0,6,32,50,132,11,16,37,40,196,207,2,40,58,80,80,80,38,131,3,196,186,176,176,129,1,224,196,131,0,2,0,12,0,29,32,0,0,31,32,1,9,8,0,2,4,2,2,2,2,2,2,128,7,24,0,55,201,55,201,0,232,3,60,44,0,100,131,0,102,10,9,0,4,1,3,2,2,2,1,1,2,128,8,236,247,0,76,24,100,0,236,20,1,136,225,132,2,192,0,192,128,2,0,12,0,138,0,0,0,128,32,1,0,63,232,232,207,196,196,212,232,232,232,232,0,11,13,24,24,15,11,0,46,104,104,104,40,236,50,41,24,24,24,52,60,60,65,46,24,24,24,26,0,243,232,232,246,250,0,211,152,152,152,231,50,0,246,236,232,152,152,162,205,0,46,104,104,104,3,65,0,213,152,131,128,7,1,246,246,5,28,10,0,8,130,24,1,0,156,156,156,156,156,209,0,45,108,111,46,23,25,0,19,35,35,20,3,4,10,0,248,131,26,100,99,100,100,100,47,0,226,163,155,216,235,237,239,0,254,235,216,216,216,240,0,1,40,40,40,14,131,43,42,0,2,1,1,3,2,1,2,1,1,3,2,1,1,1,1,1,1,1,1,2,2,1,1,2,2,1,2,1,3,3,1,1,1,1,1,1,1,1,3,1,4,2,1,20,11,129,38,20,10,0,239,236,236,0,206,206,206,209,206,0,250,236,236,246,0,248,240,236,246,0,20,20,0,50,50,48,50,0,4,14,20,50,15,0,206,0,0,10,129,0,246,132,14,75,75,53,30,17,3,0,216,205,233,226,0,10,8,6,131,14,181,181,226,239,253,0,40,47,29,8,0,50,50,226,206,0,0,2,0,12,0,85,32,0,0,58,32,1,28,27,1,3,3,3,2,1,2,1,2,3,1,2,1,2,1,1,1,4,4,1,1,1,1,2,1,1,1,1,15,12,24,245,232,0,23,47,47,0,246,43,0,233,209,209,234,129,9,25,54,54,54,25,231,202,202,202,231,131,23,34,34,0,241,222,226,21,34,34,0,239,222,222,34,192,225,0,29,62,62,29,0,225,192,20,19,1,3,3,3,2,4,2,3,1,1,1,2,1,3,3,1,4,2,4,2,19,247,236,10,20,5,30,5,236,236,255,25,80,80,5,226,226,232,206,24,50,134,12,30,236,206,206,226,246,50,50,0,70,0,186,0,0,0,2,0,12,0,85,32,0,0,73,32,1,28,27,1,3,3,3,3,2,1,1,1,1,2,1,1,1,1,2,1,1,1,1,2,1,4,2,2,1,4,2,27,12,24,245,232,33,223,65,70,0,232,25,54,54,54,25,231,202,202,202,231,223,0,30,0,223,0,232,0,131,0,236,129,20,20,20,0,192,225,0,29,62,62,29,0,225,192,236,236,9,20,236,236,10,20,25,24,1,3,3,3,3,2,1,1,1,1,2,2,4,2,4,1,1,3,1,1,2,1,2,1,3,24,247,236,10,20,20,70,221,251,25,251,232,206,24,50,40,216,201,186,201,216,40,236,236,236,236,134,12,20,20,0,70,0,186,0,20,20,20,231,216,216,129,2,245,236,236,0,2,0,12,0,82,32,0,0,65,32,1,27,26,1,3,3,3,3,2,2,1,1,1,1,2,1,1,1,1,2,1,1,2,2,1,2,1,2,2,2,26,12,24,245,232,43,233,25,54,54,54,25,231,202,202,202,231,226,10,28,50,28,10,226,10,242,242,10,131,22,236,0,192,225,0,29,62,62,29,0,225,192,236,236,236,0,20,20,236,236,247,10,20,22,21,1,3,3,3,3,2,2,2,4,2,4,1,1,3,1,1,2,1,2,1,1,2,21,247,236,10,20,20,70,232,206,24,50,20,0,241,226,241,0,40,10,10,10,10,10,133,9,70,0,186,0,30,30,30,227,206,206,129,3,248,236,238,236,0,128,2,0,12,0,35,0,0,0,53,32,1,19,18,1,2,2,2,1,2,1,2,1,1,2,2,1,1,2,1,1,4,2,18,25,224,24,222,6,254,33,105,38,244,34,238,12,228,161,223,2,28,232,130,5,42,0,196,0,80,80,131,0,80,129,0,196,129,18,17,1,2,2,2,3,1,2,1,1,2,2,1,1,2,1,1,4,2,17,226,10,236,0,15,221,251,241,25,0,35,5,45,35,65,15,251,20,130,4,196,110,0,196,196,131,0,196,129,0,110,129,0,128,2,0,12,0,90,0,0,0,66,32,1,0,128,38,38,0,218,0,11,24,24,24,11,0,246,232,232,232,246,0,30,66,66,66,30,0,226,190,190,190,226,0,12,24,24,24,12,0,240,228,232,30,16,129,9,223,186,186,186,222,0,251,242,232,242,131,128,2,196,0,54,139,11,180,180,222,0,34,76,76,76,34,0,222,180,135,13,11,20,70,76,68,68,68,32,0,224,188,188,188,188,133,22,21,0,1,1,1,5,6,3,3,3,3,2,4,1,1,3,1,1,2,2,1,3,3,12,249,219,249,23,236,20,238,216,18,40,0,236,247,129,4,246,248,0,36,36,129,128,2,30,0,226,129,3,40,238,216,18,132,6,206,196,186,223,0,70,0,0,0,2,0,12,0,33,32,0,0,21,32,1,10,9,4,6,3,2,1,1,2,1,2,1,9,14,242,29,65,65,29,227,191,191,227,129,7,198,0,27,58,58,27,230,198,6,5,4,6,3,2,4,2,5,236,20,233,206,23,50,129,3,50,0,206,0,128,2,0,12,0,10,0,0,0,7,0,1,0,0,25,64,0,155,128,0,216,131,135,3,226,226,40,40,131,135,128,2,0,12,0,17,0,0,0,11,0,1,0,0,25,64,0,155,128,1,216,25,64,0,155,128,0,216,131,139,7,236,236,50,50,236,236,50,50,131,139,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,55,55,201,201,131,135,3,218,218,38,38,131,135,0,128,2,0,12,0,11,0,0,0,11,0,1,0,7,55,55,201,201,55,55,201,201,131,139,7,218,218,38,38,218,218,38,38,131,139,0,128,2,0,12,0,19,32,0,0,20,0,1,0,6,5,0,1,1,1,2,3,5,44,54,208,218,26,230,131,1,216,40,8,214,214,42,42,236,236,0,20,20,132,131,5,213,43,33,43,213,223,131,128,2,0,12,0,40,32,0,0,60,0,1,0,13,12,0,5,2,3,4,2,1,1,3,3,1,2,1,0,232,129,9,232,24,59,96,96,0,138,138,193,216,131,8,47,209,233,0,94,0,227,162,162,13,20,239,206,196,196,196,212,226,250,20,20,20,15,7,129,12,228,196,196,196,211,226,250,20,20,20,13,12,20,131,129,3,255,15,40,21,130,19,245,236,230,220,216,216,41,41,244,195,186,175,175,175,238,40,43,63,81,81,131,0,128,2,0,12,0,39,32,0,0,42,0,1,0,14,13,1,3,2,1,1,1,2,3,3,2,1,1,1,1,13,26,230,53,43,217,207,26,230,43,217,43,53,207,217,1,221,35,131,1,221,35,133,23,236,236,0,20,20,0,206,206,50,50,236,236,0,20,20,0,206,206,50,50,206,206,50,50,131,5,208,48,38,48,208,218,131,5,208,48,38,48,208,218,139,128,2,0,12,0,54,32,0,0,33,0,1,20,19,4,6,3,2,2,2,2,2,1,3,1,2,2,1,2,1,1,2,2,2,18,17,4,6,3,2,2,2,2,3,3,1,4,1,2,1,1,2,2,2,17,24,232,24,232,24,202,30,66,226,190,64,192,212,192,64,54,54,232,129,0,208,130,5,180,35,76,35,0,95,129,0,161,130,19,236,20,236,20,236,20,242,226,226,14,30,30,206,30,20,50,226,236,236,20,129,0,50,130,5,30,0,243,226,243,13,135,0,128,2,0,12,0,72,32,0,0,61,0,1,0,24,23,0,4,3,2,2,1,1,1,1,3,2,2,2,2,1,1,3,1,1,3,2,2,1,1,128,15,24,245,232,232,232,40,40,40,0,206,206,0,35,40,232,176,129,4,24,232,80,246,232,131,9,28,32,30,20,0,22,11,246,234,246,130,6,156,186,224,32,216,196,0,128,11,246,236,236,236,246,0,10,20,20,20,20,20,142,14,20,19,7,100,236,236,100,236,236,20,20,156,156,0,20,131,137,2,253,248,246,130,10,246,236,236,236,246,0,10,20,20,20,10,131,0,196,129,4,30,246,10,10,246,135,128,2,0,12,0,6,0,0,0,6,0,1,2,1,9,2,1,196,60,1,200,56,1,110,146,1,110,146,128,2,0,12,0,6,0,0,0,6,0,1,2,1,8,2,1,60,196,1,200,56,1,146,110,1,110,146,128,2,0,12,0,6,0,0,0,6,0,1,2,1,9,2,1,60,196,1,200,56,1,146,110,1,110,146,128,2,0,12,0,6,0,0,0,6,0,1,2,1,8,2,1,196,60,1,56,200,1,110,146,1,146,110,128,2,0,12,0,30,0,0,0,24,0,1,0,133,11,5,250,51,56,56,61,26,230,196,200,200,203,131,133,11,193,193,226,231,20,25,45,45,25,20,230,227,131,136,1,166,166,131,1,90,90,132,133,2,90,90,90,129,3,166,166,166,166,129,0,90,131,0,128,2,0,12,0,14,0,0,0,16,32,1,6,5,17,2,1,3,1,2,5,24,54,54,231,202,202,5,198,0,27,58,27,230,4,3,17,3,3,3,3,215,166,40,90,3,40,238,216,18,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,56,200,1,196,60,1,166,90,1,90,166,128,2,0,12,0,22,0,0,0,22,0,1,0,131,7,235,21,69,69,10,246,193,193,131,131,7,197,197,245,11,70,70,17,239,131,131,7,30,226,226,226,226,30,30,30,131,131,7,30,30,30,226,226,226,226,30,131,0,128,2,0,12,0,19,32,0,0,22,0,1,0,4,3,5,2,2,2,128,2,70,0,186,64,255,126,128,64,0,130,128,131,7,20,236,236,236,236,20,20,20,131,131,7,10,10,10,246,246,246,246,10,131,128,2,0,12,0,16,0,0,0,16,0,1,0,132,4,211,45,72,0,184,131,132,4,196,196,23,75,23,131,132,4,30,226,196,0,60,131,132,4,60,60,236,196,236,131,0,128,2,0,12,0,12,0,0,0,12,0,1,0,132,2,25,0,231,131,131,2,201,0,55,132,132,2,226,0,30,131,131,2,30,0,226,132,0,0,2,0,12,0,22,32,0,0,16,32,1,6,5,17,1,1,4,2,1,5,24,54,54,232,202,202,5,198,229,0,58,0,229,4,3,17,3,3,3,3,229,196,27,60,3,80,220,176,36,128,2,0,12,0,6,0,0,0,6,0,1,2,1,5,2,1,56,200,1,196,60,1,236,20,1,20,236,128,2,0,12,0,179,0,0,0,183,0,1,0,63,86,247,251,36,36,36,22,10,10,217,164,164,164,166,193,238,250,18,27,27,27,74,104,44,245,173,173,173,218,250,24,72,72,238,238,233,237,90,251,1,40,40,40,26,14,14,221,168,168,168,172,197,242,246,14,23,23,23,70,100,40,241,169,169,25,169,214,246,20,68,68,234,234,225,229,102,102,56,14,14,254,236,236,98,98,52,10,10,241,232,232,131,128,4,60,42,19,30,16,129,6,94,94,61,32,8,236,206,130,13,10,0,239,239,236,30,36,6,0,220,172,172,172,232,129,1,13,11,129,4,60,41,13,30,16,129,6,94,94,61,32,6,233,206,130,13,10,0,239,239,236,30,36,6,0,220,172,172,172,231,129,1,13,11,129,2,44,94,94,132,2,44,94,94,129,0,249,132,63,196,230,227,18,18,18,18,20,15,46,88,88,88,73,85,20,0,9,236,236,236,39,80,80,76,60,60,60,36,0,211,178,178,20,20,241,226,196,230,229,18,18,18,18,20,15,46,88,88,88,75,85,20,0,9,236,236,236,39,80,80,76,60,60,25,60,36,0,211,178,178,20,20,237,221,186,186,230,15,20,21,20,20,186,186,230,15,20,12,20,20,131,128,4,215,220,230,246,251,129,6,176,176,192,196,174,168,149,130,13,7,236,251,37,40,196,204,227,0,46,80,80,80,53,129,1,13,11,129,4,215,219,224,246,251,129,6,176,176,192,196,172,165,149,130,13,7,236,251,37,40,196,204,227,0,46,80,80,80,52,129,6,13,11,0,196,186,176,176,129,5,224,196,196,186,176,176,129,1,217,196,131,0,128,2,0,12,0,15,32,0,0,13,0,1,0,4,3,1,2,1,2,3,70,0,201,55,1,209,49,129,131,3,38,218,218,38,131,3,222,34,34,222,135,0,0,2,0,12,0,103,32,0,0,93,32,1,34,33,2,1,1,3,3,2,1,2,1,1,1,2,3,1,2,2,1,1,1,1,3,1,2,1,2,1,1,2,1,1,2,3,3,2,33,5,10,255,242,70,70,70,88,124,124,88,70,70,70,242,252,0,10,25,250,202,202,202,202,185,176,195,232,183,176,202,202,201,55,129,14,168,166,196,239,0,13,13,243,243,0,60,75,90,88,88,130,11,32,60,17,0,248,245,243,13,13,10,0,196,129,33,32,2,1,1,3,2,1,3,3,1,3,2,1,3,3,1,1,1,3,1,2,1,1,1,1,1,2,1,1,1,1,3,3,2,130,9,206,192,192,192,192,192,192,192,192,206,129,0,20,133,5,235,220,237,20,227,225,130,1,38,218,129,11,85,85,53,25,0,251,5,0,238,231,171,171,130,13,32,60,58,56,54,54,55,56,200,200,193,192,200,196,129,128,2,0,12,0,16,0,0,0,16,0,1,8,7,1,2,2,2,2,2,2,2,7,84,232,0,84,0,84,55,201,129,0,170,129,0,86,129,7,182,0,136,182,136,182,218,38,129,0,78,129,0,178,129,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,29,0,0,0,31,0,1,0,129,65,0,140,0,140,133,9,150,150,55,55,201,201,55,55,201,201,131,128,0,136,129,3,120,0,216,40,143,129,1,146,146,133,9,80,80,218,218,38,38,218,218,38,38,131,128,6,80,246,10,176,0,40,216,129,1,236,20,139,0,128,2,0,12,0,21,0,0,0,21,0,1,0,135,7,201,55,55,201,55,55,201,201,131,7,48,208,208,48,48,208,208,48,139,135,7,38,218,218,38,218,218,38,38,131,7,228,40,40,228,216,28,28,216,139,0,128,2,0,12,0,25,0,0,0,27,0,1,0,129,65,0,140,0,140,133,5,150,150,201,55,55,201,131,128,0,136,129,3,120,0,216,40,139,129,1,146,146,133,5,80,80,38,218,218,38,131,128,6,80,246,10,176,0,40,216,129,1,236,20,135,0,128,2,0,12,0,13,0,0,0,13,0,1,6,5,1,2,2,2,1,2,5,30,0,30,0,201,55,3,208,48,208,48,129,5,176,0,176,0,38,218,3,40,228,28,216,129,128,2,0,12,0,21,0,0,0,23,0,1,0,129,65,0,140,0,140,133,1,150,150,131,128,0,136,129,3,120,0,216,40,135,129,1,146,146,133,1,80,80,131,128,6,80,246,10,176,0,40,216,129,1,236,20,131,0,128,2,0,12,0,90,0,0,0,89,0,1,0,129,65,0,175,0,175,131,37,2,12,25,26,14,7,2,2,50,100,100,100,88,68,167,219,26,26,26,253,247,248,197,160,160,160,157,156,68,29,234,234,234,245,23,23,231,231,131,128,6,131,5,251,117,253,211,45,129,16,251,246,149,155,162,162,162,192,221,237,17,30,121,102,60,20,19,129,11,94,94,63,20,14,247,247,161,176,186,221,238,136,7,252,252,201,201,18,18,15,15,129,35,236,236,248,247,6,0,216,190,190,190,197,206,0,249,236,236,236,250,9,10,37,66,66,66,60,50,31,22,20,20,20,252,184,184,66,66,131,7,226,30,246,10,189,254,40,216,129,14,2,0,89,86,81,81,81,55,20,251,233,231,215,224,8,131,11,175,175,208,236,6,8,10,8,2,234,10,14,136,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,49,32,0,0,47,0,1,0,16,15,0,2,2,2,3,2,2,2,2,2,2,2,2,2,2,2,131,11,49,207,24,232,49,207,24,232,49,207,24,232,3,48,208,48,208,129,1,208,48,129,1,208,48,129,1,208,48,135,3,210,210,46,46,131,3,210,210,46,46,131,3,210,210,46,46,135,7,221,33,33,221,221,33,33,221,131,3,221,33,33,221,131,3,221,33,33,221,131,3,221,33,33,221,131,0,128,2,0,12,0,2,0,0,0,7,0,1,0,133,133,64,255,126,0,10,131,133,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,19,0,0,0,19,0,1,0,147,15,48,208,208,48,48,208,208,48,48,208,208,48,48,208,208,48,131,147,15,228,40,40,228,216,28,28,216,228,40,40,228,216,28,28,216,131,0,128,2,0,12,0,15,0,0,0,15,0,1,0,143,11,48,208,208,48,48,208,208,48,48,208,208,48,131,143,11,222,34,34,222,222,34,34,222,222,34,34,222,131,0,128,2,0,12,0,51,0,0,0,31,0,1,0,129,69,0,170,0,170,0,140,0,140,0,170,0,170,133,64,255,116,0,20,129,64,0,160,132,0,236,64,255,126,0,60,131,0,196,64,0,130,10,20,206,50,48,208,208,48,48,208,208,48,131,129,5,156,156,196,196,152,152,138,64,0,140,131,128,1,226,226,131,1,30,30,131,3,60,60,0,196,129,0,196,131,0,128,2,0,12,0,51,0,0,0,31,0,1,0,129,69,0,170,0,170,0,140,0,140,0,170,0,170,133,64,255,116,0,20,129,64,0,160,132,0,236,64,255,126,0,60,131,0,196,64,0,130,10,20,206,50,48,208,208,48,48,208,208,48,131,129,5,156,156,196,196,152,152,138,64,0,140,131,128,1,226,226,131,1,30,30,131,3,60,60,0,196,129,0,196,131,0,128,2,0,12,0,69,0,0,0,40,0,1,0,129,65,0,150,0,150,133,64,255,116,0,20,129,64,0,160,130,69,0,170,0,170,0,140,0,140,0,170,0,170,135,0,236,64,255,126,129,64,0,130,11,20,206,50,48,208,208,48,48,208,208,48,236,64,255,126,0,60,131,0,196,64,0,130,2,20,206,50,131,129,1,146,146,138,64,0,140,129,5,156,156,196,196,152,152,135,128,0,90,129,0,166,131,3,60,60,0,196,129,3,196,0,226,226,131,1,30,30,134,128,2,0,12,0,46,0,0,0,41,0,1,0,132,65,255,126,255,126,130,1,254,254,129,3,254,254,0,30,130,0,30,133,128,3,50,206,0,95,129,16,161,68,228,228,68,28,188,188,28,0,75,226,146,30,181,0,110,131,132,1,110,110,130,1,2,2,129,3,2,2,0,236,130,0,236,133,131,0,166,129,16,90,20,80,80,20,176,236,236,176,0,20,80,70,176,236,0,186,131,128,2,0,12,0,20,0,0,0,17,0,1,0,0,40,64,0,140,1,40,196,139,131,7,48,208,208,48,48,208,208,48,131,3,223,183,7,47,139,131,7,222,34,34,222,222,34,34,222,131,128,2,0,12,0,30,0,0,0,24,0,1,0,1,1,1,65,0,141,0,141,5,1,1,1,1,247,247,133,128,0,146,129,7,110,0,206,50,49,207,207,49,131,129,1,146,146,131,65,255,96,255,96,133,128,0,90,129,0,166,130,3,223,33,33,223,131,0,128,2,0,12,0,64,0,0,0,62,0,1,0,129,2,41,91,123,67,0,149,0,164,0,164,0,150,2,124,91,40,133,65,0,140,0,140,131,1,227,227,65,0,144,0,144,131,128,16,131,182,253,45,73,81,179,186,219,14,81,125,0,206,50,0,146,129,7,110,0,206,50,51,209,209,51,131,129,0,172,71,255,75,255,40,255,57,255,86,255,86,255,57,255,41,255,77,0,174,133,65,255,86,255,86,131,65,255,108,255,108,133,128,11,100,52,249,221,216,224,34,41,41,15,210,156,131,0,120,129,0,136,130,3,224,34,34,224,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,21,0,0,0,19,0,1,0,129,65,0,210,0,210,139,128,10,136,5,251,120,0,201,55,50,206,206,50,131,129,1,206,206,139,128,0,60,129,7,196,0,30,226,224,32,32,224,131,0,128,2,0,12,0,67,0,0,0,51,0,1,0,129,69,0,170,0,170,0,140,0,140,0,170,0,170,134,0,226,130,2,226,2,2,64,255,116,2,20,2,2,64,0,160,132,0,236,64,255,126,0,60,131,0,196,64,0,130,18,20,206,50,0,146,216,75,40,110,0,181,48,218,218,48,38,208,208,38,131,129,5,156,156,196,196,152,152,134,0,20,130,2,20,254,254,129,2,254,254,0,64,0,140,131,128,1,226,226,131,1,30,30,131,11,70,70,20,186,186,0,236,0,70,70,0,186,129,0,186,131,0,128,2,0,12,0,36,0,0,0,30,0,1,0,1,255,255,65,0,180,0,180,1,255,255,131,65,0,180,0,180,135,15,40,171,5,251,85,216,211,45,40,171,5,251,85,216,211,45,131,5,236,236,236,236,236,236,131,1,236,236,135,1,246,50,129,5,206,10,40,216,246,50,129,3,206,10,40,216,131,0,128,2,0,12,0,43,0,0,0,40,0,1,0,129,65,0,140,0,140,129,1,236,236,129,65,0,140,0,140,131,1,216,216,133,128,0,146,129,5,110,0,206,50,0,146,129,7,110,0,206,50,49,207,207,49,131,129,65,255,106,255,106,129,1,236,236,129,1,146,146,131,65,255,66,255,66,133,128,0,90,129,0,166,131,0,90,129,0,166,130,3,223,33,33,223,131,128,2,0,12,0,45,0,0,0,41,0,1,0,129,65,0,140,0,140,134,0,226,130,2,226,2,2,129,1,2,2,133,128,0,146,129,19,110,0,206,50,0,146,226,75,30,110,0,181,68,228,228,68,28,188,188,28,131,129,1,146,146,134,0,20,130,2,20,254,254,129,1,254,254,133,128,0,90,129,0,166,131,14,70,80,20,176,186,0,236,20,80,80,20,176,236,236,176,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,47,0,0,0,42,0,1,0,132,2,216,165,132,67,255,107,255,92,255,92,255,108,3,133,165,214,0,65,255,112,255,112,133,128,18,50,206,0,125,81,14,219,186,179,81,73,45,253,182,131,51,209,209,51,131,132,0,83,71,0,179,0,215,0,200,0,170,0,170,0,199,0,216,0,181,0,83,136,131,15,156,210,15,41,41,34,224,216,221,249,52,100,224,34,34,224,131,128,2,0,12,0,47,0,0,0,42,0,1,0,132,2,216,165,132,67,255,107,255,92,255,92,255,108,3,133,165,214,0,65,255,112,255,112,133,128,18,50,206,0,125,81,14,219,186,179,81,73,45,253,182,131,51,209,209,51,131,132,0,83,71,0,179,0,215,0,200,0,170,0,170,0,199,0,216,0,181,0,83,136,131,15,156,210,15,41,41,34,224,216,221,249,52,100,224,34,34,224,131,128,2,0,12,0,85,0,0,0,82,0,1,0,129,2,41,91,123,67,0,149,0,164,0,164,0,150,2,124,91,40,136,2,216,165,132,67,255,107,255,92,255,92,255,108,3,133,165,214,0,67,255,112,255,112,0,138,0,138,131,128,34,131,182,253,45,73,81,179,186,219,14,81,125,0,206,50,0,50,206,0,125,81,14,219,186,179,81,73,45,253,182,131,51,209,209,51,131,129,0,172,71,255,75,255,40,255,57,255,86,255,86,255,57,255,41,255,77,0,174,136,0,83,71,0,179,0,215,0,200,0,170,0,170,0,199,0,216,0,181,0,83,130,1,234,234,131,128,11,100,52,249,221,216,224,34,41,41,15,210,156,134,15,156,210,15,41,41,34,224,216,221,249,52,100,224,34,34,224,131,128,2,0,12,0,68,0,0,0,58,0,1,0,132,65,255,96,255,96,133,2,216,165,132,67,255,107,255,92,255,92,255,108,3,133,165,214,0,65,255,112,255,112,1,69,69,131,128,2,50,206,0,64,0,130,129,64,255,126,128,18,50,206,0,125,81,14,219,186,179,81,73,45,253,182,131,51,209,209,51,131,132,1,90,90,133,0,83,71,0,179,0,215,0,200,0,170,0,170,0,199,0,216,0,181,0,83,130,65,0,188,0,188,131,131,0,186,129,0,70,131,15,156,210,15,41,41,34,224,216,221,249,52,100,224,34,34,224,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,133,133,133,133,0,128,2,0,12,0,84,0,0,0,79,0,1,0,132,2,216,165,132,67,255,107,255,92,255,92,255,108,3,133,165,214,0,65,255,112,255,112,133,15,55,59,197,201,0,20,48,48,48,20,0,235,208,208,208,235,131,128,23,50,206,0,125,81,14,219,186,179,81,73,45,253,182,131,51,209,209,51,49,207,207,49,156,129,0,156,129,8,227,207,186,159,159,159,186,207,227,132,132,0,83,71,0,179,0,215,0,200,0,170,0,170,0,199,0,216,0,181,0,83,136,15,216,196,60,40,0,238,215,215,215,238,0,17,41,41,41,17,131,131,20,156,210,15,41,41,34,224,216,221,249,52,100,224,34,34,224,224,34,34,224,120,129,0,120,129,8,24,41,58,82,82,82,58,41,24,132,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,1,216,40,131,133,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,21,0,0,0,22,0,1,0,132,65,255,116,255,116,129,1,106,106,132,128,3,40,216,0,120,129,0,136,135,132,1,110,110,129,1,176,176,132,128,9,216,40,0,176,10,246,80,0,20,236,132,128,2,0,12,0,26,0,0,0,27,0,1,0,132,65,255,116,255,116,129,6,106,106,0,55,55,201,201,131,128,3,40,216,0,120,129,0,136,139,132,1,110,110,129,6,176,176,0,218,218,38,38,131,128,9,216,40,0,176,10,246,80,0,20,236,136,128,2,0,12,0,30,0,0,0,31,0,1,0,132,65,255,116,255,116,129,10,106,106,0,55,55,201,201,55,55,201,201,131,128,3,40,216,0,120,129,0,136,143,132,1,110,110,129,10,176,176,0,218,218,38,38,218,218,38,38,131,128,9,216,40,0,176,10,246,80,0,20,236,140,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,94,0,0,0,88,0,1,0,2,73,1,1,129,65,255,92,255,92,38,73,78,62,80,102,102,102,90,70,169,221,28,28,28,255,249,233,231,12,115,64,10,249,199,162,162,162,159,158,70,31,236,236,236,28,25,25,233,233,131,20,22,42,208,247,112,248,2,153,2,154,163,197,221,237,17,30,121,102,60,20,19,130,17,32,52,114,112,104,104,104,67,20,14,248,247,161,177,186,221,252,15,135,0,3,129,4,255,255,80,80,3,129,35,216,190,190,190,197,206,0,249,236,236,236,250,9,246,10,49,27,4,251,9,37,66,66,66,60,50,31,22,20,20,20,252,184,184,66,66,131,18,22,216,40,24,216,10,246,82,0,71,71,49,20,251,233,231,215,224,8,132,16,22,40,200,192,185,185,185,212,236,6,9,10,8,3,234,10,14,136,0,128,2,0,12,0,101,0,0,0,94,0,1,0,2,231,1,1,129,65,255,92,255,92,32,231,58,42,69,98,98,98,86,66,165,217,24,24,24,251,245,246,195,158,158,158,155,154,66,27,232,232,232,15,21,21,229,229,129,65,0,175,0,175,1,222,222,133,20,43,42,208,247,112,248,2,184,11,173,180,205,221,237,17,30,121,102,60,20,19,129,12,94,94,63,20,14,248,247,161,177,186,221,254,22,132,6,131,5,251,107,243,211,45,131,0,231,129,42,69,69,80,80,231,2,2,218,192,192,192,199,208,2,251,238,238,238,252,11,12,39,68,68,68,62,52,33,24,22,22,22,254,186,186,68,68,237,237,186,186,233,233,133,18,23,216,40,24,216,10,246,93,10,91,91,60,20,251,233,231,215,224,8,131,12,175,175,208,236,6,9,10,8,3,234,10,19,10,131,7,226,30,246,10,201,10,40,216,131,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,1,156,60,131,133,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,21,0,0,0,19,0,1,0,132,65,255,46,255,46,136,128,10,55,201,0,120,251,5,136,50,206,206,50,131,132,1,50,50,136,128,3,226,30,0,196,129,4,60,224,32,32,224,131,0,128,2,0,12,0,51,0,0,0,33,0,1,0,132,69,255,86,255,86,255,116,255,116,255,86,255,86,128,0,236,64,0,140,130,64,255,96,133,128,2,50,206,0,64,0,130,0,196,131,0,60,64,255,126,7,48,208,208,48,48,208,208,48,131,132,5,104,104,60,60,100,100,132,64,255,116,134,0,20,129,2,236,30,30,131,6,226,226,0,60,60,0,196,129,0,196,131,0,128,2,0,12,0,87,0,0,0,55,0,1,0,129,69,0,170,0,170,0,140,0,140,0,170,0,170,136,69,255,86,255,86,255,116,255,116,255,86,255,86,128,0,236,65,0,140,255,116,1,20,0,65,255,96,0,160,132,0,236,64,255,126,0,60,131,0,196,64,0,130,6,20,206,50,236,50,206,20,64,0,130,0,196,131,0,60,64,255,126,7,48,228,228,48,28,208,208,28,131,129,5,156,156,196,196,152,152,136,5,104,104,60,60,100,100,130,1,40,156,64,255,116,128,0,40,64,0,180,131,128,1,226,226,131,1,30,30,134,1,30,30,131,6,226,226,0,80,80,0,176,129,0,176,131,0,128,2,0,12,0,86,0,0,0,60,0,1,0,129,69,0,170,0,170,0,140,0,140,0,170,0,170,136,69,255,86,255,86,255,116,255,116,255,86,255,86,128,0,236,65,0,140,255,116,1,20,0,65,255,96,0,160,132,128,64,255,126,0,60,131,0,196,64,0,130,128,5,206,50,0,50,206,0,64,0,130,0,196,131,0,60,64,255,126,7,48,208,208,48,48,208,208,48,131,129,5,156,156,196,196,152,152,136,5,104,104,60,60,100,100,130,1,40,156,64,255,116,128,0,40,64,0,180,131,2,20,226,226,131,2,30,30,236,129,0,20,129,2,236,30,30,131,6,226,226,0,60,60,0,196,129,0,196,131,0,128,2,0,12,0,75,0,0,0,53,0,1,0,132,69,255,86,255,86,255,116,255,116,255,86,255,86,128,0,236,64,0,140,2,254,254,0,64,255,96,3,254,254,0,30,130,0,30,133,128,2,50,206,0,64,0,130,0,196,131,0,60,64,255,126,10,48,188,188,48,68,208,208,68,236,55,186,64,255,126,2,70,201,20,64,0,130,131,132,5,104,104,60,60,100,100,130,1,2,2,64,255,116,128,3,2,2,0,236,130,0,236,133,0,20,129,2,236,30,30,131,6,226,226,0,40,40,0,216,129,0,216,129,2,40,70,216,129,0,186,131,0,128,2,0,12,0,2,0,0,0,5,0,1,0,133,133,1,216,40,131,133,128,2,0,12,0,38,0,0,0,27,0,1,0,0,237,129,1,237,237,65,255,76,255,76,0,237,132,65,255,76,255,76,132,15,50,45,211,206,75,251,5,181,50,45,211,206,75,251,5,181,131,132,1,20,20,133,1,20,20,132,128,3,216,40,0,196,129,5,60,0,216,40,0,196,129,0,60,131,128,2,0,12,0,65,0,0,0,52,0,1,0,132,2,216,165,132,67,255,107,255,92,255,92,255,108,2,133,165,214,133,65,255,116,255,116,128,65,255,112,255,112,133,128,18,50,206,0,125,81,14,219,186,179,81,73,45,253,182,131,0,50,206,0,64,0,130,129,64,255,126,3,51,209,209,51,131,132,0,83,71,0,179,0,215,0,200,0,170,0,170,0,199,0,216,0,181,0,83,133,1,110,110,136,131,11,156,210,15,41,41,34,224,216,221,249,52,100,131,0,186,129,4,70,224,34,34,224,131,128,2,0,12,0,69,0,0,0,45,0,1,0,132,69,255,86,255,86,255,116,255,116,255,86,255,86,133,65,255,106,255,106,128,0,236,64,0,140,130,64,255,96,133,128,2,50,206,0,64,0,130,0,196,131,0,60,64,255,126,128,2,50,206,0,64,0,130,129,64,255,126,7,48,208,208,48,48,208,208,48,131,132,5,104,104,60,60,100,100,133,1,110,110,132,64,255,116,134,0,20,129,2,236,30,30,131,2,226,226,20,129,1,236,166,129,5,90,0,60,60,0,196,129,0,196,131,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,0,2,0,12,0,117,32,0,0,103,32,1,36,35,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,1,1,1,5,4,2,1,2,5,1,1,1,1,2,2,2,1,132,2,216,165,132,67,255,107,255,92,255,92,255,108,10,133,165,214,0,236,228,226,222,211,206,196,64,255,126,11,139,162,196,206,211,222,226,228,236,82,232,232,128,34,50,206,0,125,81,14,219,186,179,81,73,45,253,182,131,50,54,55,57,55,55,55,49,207,204,202,202,202,204,202,201,202,202,206,211,34,33,0,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,5,3,2,4,5,1,1,1,1,1,1,2,2,1,130,3,63,106,89,34,129,24,25,73,92,57,0,40,26,255,246,244,236,10,1,0,10,40,32,14,10,251,237,226,202,20,20,129,31,156,205,1,19,15,10,246,241,243,8,57,100,246,246,241,246,247,246,0,226,30,60,60,60,94,90,94,90,90,0,20,0,128,2,0,12,0,2,0,0,0,2,0,1,0,134,134,134,134,0,128,2,0,12,0,136,32,0,0,117,0,1,0,43,42,0,2,1,8,1,1,1,2,4,1,1,8,1,2,6,2,1,1,1,1,3,2,2,1,1,2,2,6,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,26,226,201,196,196,185,171,158,136,170,186,196,196,202,226,226,234,236,240,251,0,82,232,0,251,240,233,226,132,2,216,165,132,67,255,107,255,92,255,92,255,108,3,133,165,214,0,42,54,51,54,54,54,54,55,55,201,201,201,201,198,201,201,202,201,199,201,201,0,241,54,54,53,55,54,0,50,206,0,115,71,7,216,186,179,81,73,48,4,192,141,164,14,4,15,20,3,234,216,221,223,226,206,206,206,20,20,20,131,4,2,8,10,10,2,135,3,63,106,89,34,129,3,25,73,92,57,132,63,246,246,246,246,246,246,246,246,243,239,236,236,236,237,240,241,241,15,15,25,40,50,50,50,53,57,60,60,60,60,60,60,60,60,60,60,60,63,60,60,60,101,110,107,90,90,90,60,20,20,0,246,246,246,246,246,245,246,246,246,246,246,246,246,131,11,156,205,1,19,15,10,246,241,243,8,57,100,131,128,2,0,12,0,25,0,0,0,24,0,1,0,0,200,131,65,255,91,255,91,4,170,24,90,232,166,131,7,41,45,211,246,115,251,5,192,135,0,21,129,8,255,255,80,80,247,236,201,20,55,131,7,248,216,40,20,216,10,246,72,135,128,2,0,12,0,43,0,0,0,40,0,1,0,129,65,0,175,0,175,1,33,33,129,0,228,131,65,255,91,255,91,4,198,24,90,232,166,131,128,14,131,5,251,102,238,211,45,28,45,211,246,115,251,5,179,135,8,1,1,206,206,222,222,20,20,21,129,8,255,255,80,80,247,236,201,20,55,131,15,226,30,246,10,223,32,40,216,248,216,40,20,216,10,246,72,135,0,2,0,12,0,70,32,0,0,70,32,1,22,21,0,1,2,1,2,1,1,1,1,3,2,1,3,1,1,1,1,1,1,3,3,2,21,24,24,4,236,208,246,19,7,250,26,170,170,204,212,249,231,194,192,196,166,27,0,21,255,254,254,254,248,194,150,143,143,194,208,194,254,254,13,53,108,109,109,254,208,48,22,21,0,1,2,1,1,1,2,1,1,3,2,1,3,1,1,1,1,1,1,3,2,2,21,236,236,251,10,10,12,10,238,228,2,78,78,244,250,17,11,21,26,32,52,2,2,21,228,52,32,32,32,51,53,52,52,52,32,248,208,208,214,218,212,188,188,248,222,34,128,2,0,12,0,176,0,0,0,185,0,1,0,63,24,24,24,19,0,243,233,236,252,13,7,5,33,61,60,30,5,248,230,231,242,242,242,68,68,68,14,246,245,252,22,24,11,254,254,240,234,221,219,210,216,193,166,166,166,10,14,25,31,10,229,214,217,242,10,10,10,10,10,30,20,10,10,10,25,20,30,45,68,73,18,18,73,69,46,226,17,68,68,68,17,226,202,176,176,176,202,68,68,242,242,131,11,1,1,239,237,237,237,232,200,159,148,148,148,65,255,109,255,109,1,169,212,130,1,252,252,131,33,18,80,80,80,68,93,40,3,1,1,1,6,54,90,90,90,90,42,1,1,40,40,37,37,32,2,233,220,206,206,206,206,40,40,135,18,6,10,10,246,246,251,0,156,156,234,50,76,100,100,100,53,1,208,156,135,63,236,236,236,251,10,3,247,241,234,239,223,214,211,211,208,186,192,198,222,1,20,20,20,196,196,196,197,196,226,16,51,60,45,19,8,1,245,241,2,21,34,44,54,54,54,20,255,236,235,11,52,61,56,35,20,20,20,20,20,216,8,62,62,62,25,9,216,204,189,186,196,196,186,188,204,246,222,196,196,196,222,246,33,80,80,80,33,196,196,20,20,131,15,226,50,39,30,30,30,46,50,55,70,70,70,18,232,248,251,130,63,4,250,226,226,226,226,202,176,176,176,205,16,1,236,226,226,226,220,226,218,186,186,186,214,246,226,206,206,225,249,0,17,28,24,20,20,20,20,206,206,226,226,226,226,226,226,226,226,226,226,226,226,226,226,226,10,10,15,19,228,186,186,186,205,6,226,245,10,226,226,226,226,131,128,2,0,12,0,57,0,0,0,62,0,1,0,8,26,26,26,13,0,12,19,16,7,129,11,80,80,80,230,230,230,242,0,244,237,240,249,129,6,174,174,174,26,26,230,230,131,133,5,234,201,169,147,147,147,135,5,22,55,87,109,109,109,129,3,48,208,208,48,131,130,24,239,236,248,252,243,229,218,217,202,202,202,20,20,20,30,30,33,11,238,223,245,29,74,74,74,135,31,216,10,24,20,20,20,32,50,68,80,80,80,40,40,40,10,242,236,236,236,224,206,188,176,176,176,236,216,222,34,34,222,131,128,2,0,12,0,120,0,0,0,108,0,1,0,129,2,35,84,119,68,0,149,0,164,0,164,0,150,0,128,1,98,46,131,17,23,23,23,19,22,27,29,33,44,49,51,53,55,58,59,71,94,117,65,0,129,0,129,17,116,93,71,59,58,55,53,50,49,44,33,29,27,22,19,173,173,173,131,128,52,141,190,0,44,69,77,175,182,212,3,70,115,0,204,48,50,45,206,206,206,202,201,199,201,201,201,201,201,201,201,201,204,207,207,49,49,51,54,54,54,54,54,54,54,54,51,54,54,54,54,54,54,50,131,129,3,188,143,162,221,129,3,232,188,171,204,131,37,235,235,235,215,229,1,9,12,16,19,15,8,1,250,245,246,250,253,255,255,253,250,246,245,240,233,226,219,215,223,241,245,5,18,29,53,53,53,131,128,27,100,56,6,241,240,246,10,14,17,255,204,156,0,254,254,236,0,10,10,10,16,10,9,10,10,10,7,3,130,21,15,30,30,226,226,211,196,196,196,196,196,196,196,196,161,166,161,166,166,166,0,236,131,0,128,2,0,12,0,111,0,0,0,112,0,1,0,53,24,24,24,19,0,214,222,236,251,3,246,230,251,0,18,16,236,241,243,236,246,8,10,82,82,82,232,232,232,223,226,253,233,216,221,206,236,2,4,243,236,220,197,200,226,228,234,231,221,213,216,172,172,172,131,128,23,251,239,241,241,241,251,231,214,201,201,201,192,191,208,201,201,201,200,191,171,161,161,161,251,129,25,4,17,14,14,14,17,44,56,54,54,54,66,73,64,45,43,54,54,54,59,74,93,94,94,94,251,132,42,236,236,236,246,0,238,217,206,228,219,226,230,240,236,236,230,226,222,215,206,216,198,196,202,202,202,20,20,20,11,0,252,244,246,2,10,20,14,6,1,0,3,2,129,8,2,10,10,22,41,50,50,50,50,131,53,226,0,27,50,50,50,73,80,68,70,70,70,54,50,49,50,50,50,59,50,30,40,40,40,20,20,20,0,224,196,196,196,202,206,205,216,216,216,217,217,216,219,228,236,236,236,236,236,230,206,206,206,216,226,131,0,2,0,12,0,145,32,0,0,120,32,1,46,45,1,2,1,1,1,1,1,1,6,2,1,8,1,1,1,2,4,1,1,8,1,1,1,6,2,1,1,1,1,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,29,24,0,5,16,20,22,28,30,30,56,60,60,71,85,98,120,86,70,60,60,55,39,30,30,21,20,17,5,0,174,129,2,41,91,123,67,0,149,0,164,0,164,0,150,2,124,91,40,131,28,15,202,202,203,202,202,202,202,202,205,202,202,202,202,201,201,55,55,55,55,58,55,55,55,55,55,58,55,55,129,14,131,182,253,45,73,81,179,186,219,14,81,125,0,206,50,42,41,0,1,2,9,1,2,2,1,4,5,1,1,2,2,5,5,8,1,1,1,1,1,1,1,1,1,2,2,1,1,1,1,1,1,1,1,1,1,1,1,1,2,1,236,236,129,2,2,10,2,137,9,253,240,236,252,22,40,35,33,30,50,129,3,188,143,162,221,129,3,232,188,171,204,130,41,236,0,10,10,11,10,9,10,10,20,19,16,15,241,206,196,196,194,196,196,196,155,146,149,166,166,196,0,100,56,6,241,240,246,10,14,17,255,204,156,0,254,0,128,2,0,12,0,30,0,0,0,26,0,1,0,7,255,73,181,196,60,250,4,137,131,1,60,60,133,130,12,48,48,80,80,0,48,208,208,48,48,208,208,48,131,7,225,237,21,37,243,1,1,19,139,130,12,228,228,196,196,0,216,28,28,216,228,40,40,228,131,0,0,2,0,12,0,184,32,0,0,130,32,1,60,59,0,1,1,1,4,1,3,1,4,2,1,3,1,2,1,1,4,1,3,1,4,2,1,1,2,1,1,1,1,1,4,1,3,1,4,2,1,3,1,2,1,1,1,1,1,1,4,1,3,1,4,2,1,1,2,1,1,1,1,1,128,58,42,204,162,232,232,232,232,232,70,70,232,190,138,138,190,24,24,24,24,24,118,118,118,24,238,186,186,186,238,232,232,232,232,232,70,70,232,190,138,138,190,21,63,0,214,24,24,24,24,24,118,118,118,24,238,186,186,186,238,128,58,200,227,21,0,255,0,255,178,220,0,78,78,0,220,178,255,254,255,251,177,219,255,33,75,75,33,255,219,177,0,255,0,255,178,220,0,78,78,0,220,178,4,204,0,50,255,254,255,251,177,219,255,33,75,75,33,255,219,177,42,41,0,1,1,1,5,6,2,4,2,1,3,1,5,2,2,4,4,2,1,3,1,5,6,2,4,2,1,3,1,1,1,1,1,5,2,2,4,4,2,1,3,1,41,1,227,205,235,5,25,15,236,15,30,50,30,237,247,1,247,212,247,6,26,6,255,19,9,230,9,24,44,24,38,8,251,25,231,241,251,241,206,241,0,20,0,128,2,40,211,171,129,5,55,231,201,201,25,55,129,6,253,55,230,199,199,25,55,129,9,55,231,201,201,25,55,37,77,0,216,129,6,253,55,230,199,199,25,55,128,2,0,12,0,60,0,0,0,53,0,1,0,128,7,23,58,91,91,91,53,14,14,130,15,12,27,32,32,32,17,248,248,238,238,238,3,14,14,238,238,131,128,4,240,12,52,80,116,65,0,140,0,140,131,15,253,253,226,193,160,133,133,133,163,183,210,253,203,216,10,183,131,128,18,206,206,206,206,206,231,0,196,10,10,10,236,238,216,216,216,239,236,244,130,2,244,196,196,133,128,6,30,24,9,0,221,186,186,133,10,31,40,48,80,80,80,41,10,5,0,30,129,0,10,131,128,2,0,12,0,79,0,0,0,72,0,1,0,1,18,17,129,22,251,250,5,5,5,239,231,241,241,241,241,252,17,17,241,241,10,9,20,20,20,254,246,131,2,11,32,32,133,64,0,130,129,64,0,130,129,2,209,176,144,66,255,96,255,96,255,96,23,148,186,213,0,156,0,50,186,92,92,45,12,236,188,188,188,240,22,49,92,2,95,226,22,131,35,236,235,20,20,5,244,236,236,236,233,241,7,20,20,20,18,236,236,20,20,5,244,236,236,236,233,241,7,20,20,20,18,216,216,20,20,131,0,176,129,0,176,129,10,11,30,50,60,60,60,49,30,9,0,30,129,12,30,226,226,237,0,20,30,30,30,19,0,235,226,135,0,2,0,12,0,28,32,0,0,28,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,8,7,1,1,2,1,2,1,2,1,7,243,226,226,243,13,30,30,13,7,226,243,13,30,30,13,243,226,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,13,30,244,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,196,32,0,0,100,32,1,64,63,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,63,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,63,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,32,31,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,30,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,31,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,12,30,243,226,13,30,244,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,12,30,243,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,13,30,244,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,12,30,243,226,13,30,244,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,13,30,244,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,13,30,244,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,13,30,244,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,12,30,243,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,12,30,243,226,12,30,243,226,0,30,0,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,3,3,3,3,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,12,30,243,226,0,30,0,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,3,3,3,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,0,30,0,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,3,3,3,3,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,0,30,0,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,3,3,3,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,3,3,3,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,0,30,0,0,2,0,12,0,28,32,0,0,16,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,4,3,0,4,2,4,128,2,226,0,30,3,226,13,30,244,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,4,2,4,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,13,30,244,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,172,32,0,0,88,32,1,56,55,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,55,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,55,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,28,27,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,26,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,27,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,12,30,243,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,12,30,243,226,13,30,244,226,12,30,243,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,12,30,243,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,12,30,243,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,12,30,243,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,13,30,244,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,4,2,4,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,13,30,244,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,13,30,244,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,4,2,4,128,6,226,0,30,0,226,0,30,7,226,12,30,243,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,12,30,243,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,0,30,0,0,2,0,12,0,28,32,0,0,16,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,4,3,0,4,2,4,128,2,226,0,30,3,226,12,30,243,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,12,30,243,226,13,30,244,0,2,0,12,0,148,32,0,0,76,32,1,48,47,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,47,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,47,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,24,23,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,22,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,23,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,4,2,4,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,12,30,243,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,12,30,243,226,12,30,243,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,3,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,4,2,4,2,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,12,30,243,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,12,30,243,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,4,2,4,128,6,226,0,30,0,226,0,30,7,226,12,30,243,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,12,30,243,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,4,2,4,2,3,3,3,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,12,30,243,226,0,30,0,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,4,2,4,2,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,12,30,243,226,12,30,243,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,12,30,243,0,2,0,12,0,28,32,0,0,16,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,4,3,0,3,3,3,128,2,226,0,30,3,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,4,2,4,2,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,124,32,0,0,64,32,1,40,39,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,39,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,39,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,20,19,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,18,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,19,226,0,30,0,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,4,2,4,2,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,12,30,243,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,13,30,244,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,4,2,4,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,3,3,3,3,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,0,30,0,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,3,3,3,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,3,3,3,3,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,0,30,0,226,0,30,0,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,3,3,3,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,0,30,0,0,2,0,12,0,28,32,0,0,16,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,4,3,0,4,2,4,128,2,226,0,30,3,226,13,30,244,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,4,2,4,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,12,30,243,0,2,0,12,0,100,32,0,0,52,32,1,32,31,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,31,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,31,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,16,15,0,4,2,4,2,3,3,3,3,3,3,3,3,4,2,4,128,14,226,0,30,0,226,0,30,0,226,0,30,0,226,0,30,15,226,13,30,244,226,0,30,0,226,0,30,0,226,12,30,243,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,4,2,4,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,12,30,243,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,13,30,244,226,0,30,0,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,13,30,244,226,0,30,0,0,2,0,12,0,28,32,0,0,16,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,4,3,0,4,2,4,128,2,226,0,30,3,226,12,30,243,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,12,30,243,226,0,30,0,0,2,0,12,0,76,32,0,0,40,32,1,24,23,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,23,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,23,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,12,11,0,4,2,4,2,3,3,3,3,3,3,3,128,10,226,0,30,0,226,0,30,0,226,0,30,11,226,12,30,243,226,0,30,0,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,4,2,4,2,3,3,3,128,6,226,0,30,0,226,0,30,7,226,12,30,243,226,0,30,0,0,2,0,12,0,28,32,0,0,16,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,4,3,0,3,3,3,128,2,226,0,30,3,226,0,30,0,0,2,0,12,0,52,32,0,0,28,32,1,16,15,1,2,1,2,1,1,2,1,2,2,1,2,1,1,2,1,15,25,60,60,0,232,196,196,232,25,60,60,0,232,196,196,232,15,60,0,232,196,196,232,25,60,60,0,232,196,196,232,25,60,8,7,0,3,3,3,3,3,3,3,128,6,226,0,30,0,226,0,30,7,226,0,30,0,226,0,30,0,0,2,0,12,0,28,32,0,0,16,32,1,8,7,1,2,1,2,1,1,2,1,7,25,60,60,0,232,196,196,232,7,60,0,232,196,196,232,25,60,4,3,0,3,3,3,128,2,226,0,30,3,226,0,30,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,9,0,0,0,7,0,1,0,2,236,70,236,64,255,96,131,135,3,206,40,110,50,131,135,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,40,32,0,0,46,32,1,12,11,1,3,2,1,1,3,2,3,2,1,1,3,11,14,34,0,241,222,241,14,34,0,241,222,241,11,35,241,222,222,241,35,35,241,222,222,241,35,14,13,1,1,2,3,2,1,2,1,1,2,1,2,2,1,13,5,245,245,28,45,45,239,227,211,211,227,251,11,11,13,248,8,32,48,20,8,248,248,8,32,48,48,20,8,128,2,0,12,0,14,0,0,0,16,32,1,6,5,1,3,2,1,1,3,5,14,34,0,241,222,241,5,35,241,222,222,241,35,4,3,1,3,3,1,3,238,212,18,44,3,208,15,40,15,128,2,0,12,0,7,0,0,0,7,0,1,0,3,52,248,147,217,131,135,3,211,191,25,45,131,135,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,45,115,14,210,131,135,3,211,231,65,45,131,135,0,128,2,0,12,0,11,0,0,0,11,0,1,0,7,57,67,212,212,51,61,206,206,131,139,7,206,236,50,20,206,236,50,20,131,139,0,128,2,0,12,0,15,0,0,0,11,0,1,0,128,3,55,201,0,90,129,0,166,131,132,1,45,45,132,4,186,186,70,70,226,129,0,30,131,139,0,128,2,0,12,0,15,0,0,0,11,0,1,0,2,55,0,166,129,2,90,0,201,131,130,1,211,211,134,2,186,186,30,129,2,226,70,70,131,139,0,0,2,0,12,0,23,32,0,0,22,32,1,7,6,1,2,4,3,1,4,2,6,7,15,186,34,70,241,248,129,2,231,205,231,129,7,6,0,3,4,3,2,4,1,128,5,206,50,232,206,50,23,129,1,33,70,130,0,128,2,0,12,0,15,32,0,0,18,0,1,8,7,1,1,2,3,1,2,5,4,4,3,4,6,5,4,3,24,232,28,228,129,1,32,224,7,232,206,206,24,50,50,226,30,7,246,252,4,10,4,252,226,30,0,128,2,0,12,0,48,0,0,0,55,0,1,0,27,19,19,19,251,2,15,20,26,35,35,55,55,55,227,227,227,240,251,239,226,226,225,222,221,206,191,191,191,131,132,5,231,216,198,186,186,186,135,6,29,40,48,70,70,70,35,133,27,206,206,206,236,243,239,246,222,183,186,186,186,186,20,20,20,30,30,3,2,20,21,45,50,50,50,50,50,131,129,11,50,50,50,49,40,49,60,60,60,55,20,20,132,7,7,0,1,246,246,246,252,246,132,128,2,0,12,0,10,32,0,0,6,0,1,0,2,1,1,2,1,26,230,1,158,0,135,128,1,76,76,132,0,128,2,0,12,0,58,0,0,0,55,32,1,0,26,30,30,30,34,37,41,41,41,24,0,246,247,227,227,227,227,227,227,227,227,233,255,2,249,246,0,247,131,128,8,236,248,8,20,32,40,52,59,59,129,5,30,40,33,22,14,6,129,2,49,6,4,129,1,59,59,131,17,16,1,1,2,1,1,3,1,3,1,1,1,2,2,1,3,1,1,16,226,226,212,206,206,216,20,60,60,51,39,30,246,236,20,216,235,128,11,253,242,239,236,216,0,20,17,12,7,0,226,129,1,216,216,128,2,0,12,0,7,0,0,0,7,0,1,0,3,50,15,186,191,131,135,3,216,206,30,40,131,135,0,128,1,0,8,0,23,0,0,0,0,246,129,6,43,90,90,232,232,239,246,131,0,75,129,0,7,130,2,32,74,75,131,128,2,0,12,0,14,0,0,0,16,32,1,6,5,1,3,2,1,1,3,5,14,34,0,241,222,241,5,34,240,221,221,240,34,4,3,1,3,3,1,3,238,212,18,44,3,222,29,54,29,128,2,0,12,0,7,0,0,0,7,0,1,0,3,62,60,191,228,131,135,3,216,216,40,40,131,135,0,128,2,0,12,0,35,0,0,0,33,0,1,0,15,20,20,58,84,84,84,60,25,40,231,216,231,236,236,236,8,131,128,13,187,187,209,237,3,21,21,43,17,246,1,253,246,246,132,15,216,216,206,196,196,196,206,216,216,40,40,31,20,20,20,246,131,128,6,10,10,5,0,250,246,246,129,2,246,247,252,134,0,128,2,0,12,0,42,0,0,0,32,32,1,0,1,246,252,130,15,5,9,9,230,230,213,196,196,196,222,246,241,239,250,248,246,131,129,5,4,9,254,7,25,2,130,8,227,216,194,171,171,171,165,0,254,132,10,9,0,1,1,1,3,3,3,3,3,1,9,4,0,250,250,240,4,54,24,24,18,129,5,10,20,10,0,50,60,129,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,40,32,0,0,52,32,1,12,11,1,3,2,1,1,3,2,3,2,1,1,3,11,14,34,0,241,222,241,14,34,0,241,222,241,11,34,240,221,221,240,34,34,240,221,221,240,34,16,15,0,1,1,1,2,1,3,1,2,1,1,1,2,1,3,1,15,40,21,252,252,21,40,84,84,216,197,172,172,197,216,4,4,15,7,7,32,51,95,95,51,32,7,7,32,51,95,95,51,32,128,2,0,12,0,14,0,0,0,16,32,1,6,5,1,3,2,1,1,3,5,14,34,0,241,222,241,5,35,241,222,222,241,35,4,3,1,3,3,1,3,238,212,18,44,3,246,53,78,53,128,2,0,12,0,7,0,0,0,11,0,1,0,3,46,71,167,172,131,135,3,226,186,40,30,131,128,1,30,30,132,0,128,2,0,12,0,7,0,0,0,11,0,1,0,3,75,80,176,201,131,135,3,236,226,80,40,131,128,1,30,30,132,0,128,2,0,12,0,14,0,0,0,11,0,1,0,1,25,30,64,255,126,4,151,115,120,216,241,131,139,7,246,216,40,40,226,196,10,20,131,139,128,2,0,12,0,15,0,0,0,15,0,1,0,7,20,45,211,236,75,250,6,181,131,132,1,34,34,132,7,211,191,55,35,201,38,208,45,131,132,1,177,177,132,0,128,2,0,12,0,15,0,0,0,15,0,1,0,7,45,20,181,49,207,75,236,211,131,130,1,173,173,134,2,196,216,50,129,2,206,40,60,131,130,1,30,30,134,0,0,2,0,12,0,21,32,0,0,22,32,1,6,5,3,2,2,1,2,2,5,20,191,0,30,65,236,128,2,232,205,205,129,6,5,1,2,2,3,1,2,5,247,236,90,213,166,20,5,236,0,2,30,2,0,0,128,2,0,12,0,50,0,0,0,34,32,1,0,128,22,15,20,20,20,15,0,241,236,236,236,241,0,18,46,46,46,18,0,238,210,210,210,238,131,129,2,5,0,251,130,15,251,0,5,0,216,216,241,0,15,39,39,39,15,0,241,216,131,10,9,1,3,1,2,3,1,5,3,3,1,9,227,196,227,29,60,29,236,9,20,9,9,246,5,10,10,251,246,241,226,14,30,0,128,2,0,12,0,57,0,0,0,56,0,1,0,27,20,20,20,8,252,255,13,13,9,34,41,64,64,64,238,238,238,249,4,247,234,237,227,217,213,192,192,192,131,128,1,30,15,130,6,235,212,192,175,175,175,236,129,1,236,246,130,6,21,43,66,81,81,81,30,132,27,236,236,236,240,0,255,237,216,210,210,199,174,174,174,20,20,20,16,0,250,5,20,23,47,60,80,80,80,131,129,14,22,30,30,30,41,50,52,60,60,60,40,30,30,30,8,130,5,249,246,247,236,236,236,133,128,2,0,12,0,6,0,0,0,7,0,1,0,135,128,1,156,156,132,135,3,236,40,40,236,131,128,2,0,12,0,46,0,0,0,47,0,1,0,22,29,29,29,38,34,41,50,50,50,10,253,247,20,16,10,236,236,236,237,226,229,226,226,131,129,9,11,16,10,13,27,39,65,65,65,50,131,5,10,22,18,10,12,4,132,22,231,231,231,228,231,212,191,191,191,211,222,231,231,238,0,30,30,30,24,20,14,5,5,131,129,13,5,18,20,7,253,246,226,226,226,226,0,10,10,10,129,2,2,0,252,133,128,2,0,12,0,24,0,0,0,21,0,1,0,9,33,63,63,76,80,80,236,236,13,33,131,4,50,226,226,229,232,129,2,8,47,50,131,130,5,227,196,196,20,20,10,132,4,236,30,30,25,13,129,2,247,238,236,131,128,2,0,12,0,7,0,0,0,7,0,1,0,3,49,49,193,207,131,135,3,216,216,40,40,131,135,0,128,2,0,12,0,7,0,0,0,7,0,1,0,3,50,95,206,216,131,135,3,216,226,50,40,131,135,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,128,2,0,12,0,2,0,0,0,2,0,1,0,132,132,132,132,0,0,2,0,12,0,48,32,0,0,55,32,1,16,15,0,1,1,1,2,3,2,1,1,3,2,3,2,1,1,3,15,50,100,255,215,84,104,70,55,36,55,210,230,196,181,162,181,132,3,206,187,187,206,129,4,206,187,187,206,0,18,17,0,1,1,1,1,1,1,2,1,2,2,1,3,1,2,3,2,1,17,218,198,32,52,232,220,204,204,220,244,4,4,24,8,8,47,64,64,131,13,248,248,8,32,48,48,20,8,248,8,32,48,20,8,0,0,2,0,12,0,21,32,0,0,21,32,1,6,5,1,2,2,3,1,2,5,13,24,186,39,70,232,129,3,230,206,231,0,6,5,3,2,1,2,2,2,5,196,35,20,236,221,60,128,2,37,70,70,129,0,2,0,12,0,21,32,0,0,22,32,1,6,5,1,2,2,3,1,2,5,11,24,175,39,81,232,129,3,244,200,244,0,6,5,1,2,2,3,2,2,5,232,206,40,237,216,50,5,236,0,17,30,0,246,0,128,2,0,12,0,103,0,0,0,89,32,1,0,51,24,24,232,232,24,24,232,232,170,170,20,56,94,94,94,65,40,170,170,10,250,232,232,232,223,216,24,24,170,170,230,230,10,10,170,170,0,45,94,94,94,54,20,170,170,0,244,232,232,232,25,70,131,0,47,129,3,47,0,232,232,129,14,154,154,154,186,216,3,51,51,51,4,4,4,252,246,251,133,13,35,231,231,35,4,205,205,205,249,30,63,102,102,102,130,4,4,10,8,4,4,131,30,29,1,2,2,2,2,1,3,3,1,2,3,2,1,2,2,2,2,2,1,1,1,1,1,1,1,1,2,3,2,1,29,187,69,187,69,56,0,196,0,56,100,20,9,0,236,56,56,30,56,0,232,196,196,196,232,0,56,0,20,61,100,128,8,204,74,0,64,64,20,224,224,242,134,12,32,32,32,8,246,222,192,192,192,0,10,14,14,0,128,2,0,12,0,106,0,0,0,95,0,1,0,13,24,24,232,232,24,24,232,232,0,10,23,24,12,5,129,31,48,98,98,98,86,66,165,217,24,24,24,7,10,254,250,235,54,49,19,10,206,158,158,158,155,154,66,27,232,232,232,243,131,71,249,136,249,90,249,90,249,136,6,177,6,122,6,122,6,177,129,16,251,246,141,151,162,162,162,192,221,237,17,30,121,102,60,20,19,130,16,1,12,89,88,94,94,94,59,20,14,248,247,161,177,186,221,238,132,7,187,187,69,69,187,187,69,69,129,37,236,236,248,247,6,0,216,190,190,190,197,206,0,249,236,236,236,6,30,15,33,20,226,249,8,30,48,66,66,66,60,50,31,22,20,20,20,252,131,0,198,129,3,198,0,59,59,130,14,2,0,81,82,81,81,81,55,20,251,233,231,215,224,8,132,16,247,0,175,168,175,175,175,204,236,6,9,10,8,3,234,10,14,132,128,2,0,12,0,105,0,0,0,101,0,1,0,129,65,0,175,0,175,1,30,30,129,41,23,23,231,231,2,12,25,26,14,7,2,2,50,100,100,100,88,68,167,219,26,26,26,253,247,248,197,160,160,160,157,156,68,29,234,234,234,245,23,23,231,231,131,128,9,131,5,251,106,242,211,45,0,206,206,130,16,251,246,149,155,162,162,162,192,221,237,17,30,121,102,60,20,19,129,13,94,94,63,20,14,248,247,161,177,186,221,238,0,94,129,0,94,131,11,252,252,201,201,16,16,15,15,184,184,66,66,129,35,236,236,248,247,6,0,216,190,190,190,197,206,0,249,236,236,236,250,9,10,37,66,66,66,60,50,31,22,20,20,20,252,184,184,66,66,131,10,226,30,246,10,186,251,40,216,0,12,12,130,14,2,0,89,86,81,81,81,55,20,251,233,231,215,224,8,131,13,175,175,208,236,6,9,10,8,3,234,10,14,0,175,129,0,175,131,0,128,2,0,12,0,107,0,0,0,99,0,1,0,2,55,1,1,129,65,255,92,255,92,42,55,78,62,80,102,102,102,90,70,169,221,28,28,28,255,249,233,231,12,115,64,10,249,199,162,162,162,159,158,70,31,236,236,236,28,25,233,233,25,233,25,25,233,131,20,30,42,208,247,112,248,2,161,2,154,163,197,221,237,17,30,121,102,60,20,19,130,17,32,52,114,112,104,104,104,67,20,14,248,247,161,177,186,221,252,15,65,255,120,255,120,129,1,65,65,133,0,59,129,4,255,255,80,80,59,129,39,216,190,190,190,197,206,0,249,236,236,236,250,9,246,10,49,27,4,251,9,37,66,66,66,60,50,31,22,20,20,20,252,184,66,66,184,66,184,184,66,131,18,1,216,40,24,216,10,246,61,0,71,71,49,20,251,233,231,215,224,8,132,19,22,40,200,192,185,185,185,212,236,6,9,10,8,3,234,10,14,0,71,71,129,1,196,196,133,0,128,2,0,12,0,109,0,0,0,104,0,1,0,2,27,1,1,129,65,255,92,255,92,36,27,21,21,229,229,58,42,69,98,98,98,86,66,165,217,24,24,24,251,245,246,195,158,158,158,155,154,66,27,232,232,232,15,21,21,229,229,129,65,0,175,0,175,135,24,21,42,208,247,112,248,2,162,0,173,173,0,11,173,180,205,221,237,17,30,121,102,60,20,19,129,13,94,94,63,20,14,248,247,161,177,186,221,254,22,94,129,8,94,0,131,5,251,93,229,211,45,131,0,231,129,46,69,69,80,80,231,186,186,68,68,2,2,218,192,192,192,199,208,2,251,238,238,238,252,11,12,39,68,68,68,62,52,33,24,22,22,22,254,186,186,68,68,237,237,186,186,62,62,133,22,23,216,40,24,216,10,246,93,0,91,91,0,10,91,91,60,20,251,233,231,215,224,8,131,13,175,175,208,236,6,9,10,8,3,234,10,19,10,175,129,8,175,226,30,246,10,166,231,40,216,131,0,1,0,0,7,215,0,66,121,53,134,224,95,15,60,245,0,11,8,0,0,0,0,0,216,207,225,101,0,0,0,0,219,32,55,250,242,224,251,60,5,104,8,232,0,0,0,6,0,2,0,1,0,0,0,0,0,1,0,0,7,108,254,32,0,0,4,176,242,224,251,179,5,104,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,82,4,176,0,128,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,45,4,176,0,42,4,176,0,42,4,176,0,160,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,160,4,176,0,42,4,176,0,160,4,176,0,42,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,128,4,176,0,150,4,176,0,160,4,176,0,64,4,176,0,160,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,140,4,176,0,62,4,176,0,140,4,176,0,140,4,176,0,168,4,176,0,45,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,96,4,176,0,96,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,129,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,58,4,176,0,128,4,176,0,148,4,176,0,148,4,176,0,148,4,176,0,148,4,176,0,148,4,176,255,128,4,176,0,148,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,76,4,176,0,17,4,176,0,66,4,176,0,66,4,176,0,76,4,176,0,76,4,176,0,160,4,176,0,160,4,176,0,76,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,129,4,176,0,129,4,176,0,129,4,176,0,129,4,176,0,129,4,176,0,129,4,176,0,140,4,176,0,76,4,176,0,80,4,176,0,80,4,176,0,80,4,176,0,80,4,176,0,80,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,140,4,176,0,44,4,176,0,45,4,176,0,20,4,176,0,20,4,176,0,20,4,176,0,20,4,176,0,20,4,176,0,66,4,176,0,25,4,176,0,25,4,176,0,25,4,176,0,25,4,176,0,25,4,176,0,25,4,176,0,25,4,176,0,25,4,176,0,25,4,176,0,150,4,176,0,150,4,176,0,150,4,176,0,150,4,176,0,45,4,176,0,96,4,176,0,148,4,176,0,76,4,176,0,129,4,176,0,150,4,176,0,168,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,21,4,176,0,21,4,176,0,168,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,96,4,176,0,118,4,176,0,96,4,176,0,96,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,166,4,176,0,68,4,176,0,136,4,176,0,136,4,176,0,79,4,176,0,68,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,96,4,176,0,168,4,176,0,62,4,176,255,184,4,176,255,189,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,200,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,170,4,176,0,170,4,176,0,170,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,88,4,176,0,88,4,176,0,88,4,176,0,88,4,176,0,88,4,176,0,88,4,176,0,112,4,176,0,168,4,176,0,168,4,176,0,0,4,176,0,168,4,176,0,168,4,176,0,168,4,176,255,58,4,176,0,168,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,132,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,20,4,176,0,168,4,176,0,168,4,176,0,96,4,176,0,80,4,176,0,80,4,176,0,80,4,176,0,80,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,68,4,176,0,68,4,176,0,60,4,176,0,60,4,176,0,60,4,176,0,60,4,176,0,60,4,176,0,0,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,80,4,176,0,95,4,176,0,70,4,176,0,70,4,176,0,70,4,176,0,70,4,176,0,70,4,176,0,106,4,176,0,55,4,176,0,55,4,176,0,55,4,176,0,55,4,176,0,55,4,176,0,55,4,176,0,55,4,176,0,55,4,176,0,55,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,96,4,176,0,242,4,176,0,136,4,176,0,168,4,176,0,136,4,176,0,156,4,176,0,160,4,176,0,121,4,176,246,230,4,176,1,28,4,176,1,2,4,176,1,33,4,176,0,45,4,176,0,160,4,176,0,160,4,176,0,180,4,176,0,180,4,176,0,180,4,176,0,30,4,176,0,160,4,176,0,160,4,176,0,160,4,176,0,27,4,176,0,64,4,176,0,148,4,176,0,148,4,176,0,148,4,176,0,140,4,176,0,140,4,176,0,37,4,176,0,128,4,176,0,140,4,176,0,76,4,176,0,140,4,176,0,160,4,176,0,96,4,176,0,80,4,176,0,96,4,176,0,96,4,176,0,66,4,176,0,66,4,176,0,140,4,176,0,140,4,176,0,128,4,176,0,128,4,176,0,140,4,176,0,160,4,176,0,0,4,176,0,128,4,176,0,53,4,176,0,128,4,176,0,129,4,176,0,96,4,176,0,17,4,176,0,168,4,176,0,168,4,176,0,96,4,176,0,20,4,176,0,80,4,176,0,72,4,176,0,20,4,176,255,252,4,176,0,27,4,176,0,140,4,176,0,140,4,176,0,25,4,176,0,25,4,176,0,66,4,176,0,140,4,176,0,140,4,176,0,168,4,176,0,76,4,176,0,148,4,176,0,76,4,176,0,96,4,176,0,30,4,176,0,45,4,176,0,66,4,176,0,96,4,176,0,122,4,176,0,168,4,176,1,60,4,176,1,60,4,176,1,60,4,176,0,40,4,176,0,136,4,176,0,136,4,176,0,136,4,176,0,37,4,176,0,115,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,168,4,176,0,63,4,176,0,128,4,176,0,168,4,176,0,136,4,176,0,168,4,176,0,168,4,176,0,136,4,176,0,90,4,176,0,55,4,176,0,55,4,176,0,45,4,176,0,106,4,176,0,128,4,176,0,140,4,176,0,112,4,176,0,112,4,176,0,173,4,176,0,188,4,176,0,0,4,176,0,112,4,176,0,63,4,176,0,88,4,176,0,156,4,176,0,136,4,176,0,132,4,176,0,160,4,176,0,160,4,176,0,170,4,176,0,0,4,176,0,110,4,176,0,126,4,176,0,0,4,176,0,106,4,176,0,47,4,176,0,168,4,176,0,168,4,176,0,80,4,176,0,80,4,176,0,106,4,176,0,128,4,176,0,168,4,176,0,160,4,176,0,136,4,176,0,168,4,176,0,136,4,176,0,55,4,176,0,160,4,176,0,156,4,176,0,96,4,176,0,37,4,176,0,79,4,176,0,156,4,176,0,156,4,176,0,156,4,176,0,168,4,176,0,95,4,176,0,168,4,176,0,112,4,176,0,156,4,176,0,112,4,176,0,82,4,176,0,168,4,176,0,0,4,176,0,110,4,176,0,126,4,176,0,45,4,176,0,160,4,176,0,180,4,176,0,45,4,176,0,160,4,176,0,150,4,176,0,140,4,176,0,76,4,176,0,168,4,176,0,160,4,176,0,45,4,176,0,128,4,176,0,148,4,176,0,100,4,176,0,76,4,176,0,140,4,176,0,160,4,176,0,150,4,176,0,80,4,176,0,25,4,176,0,66,4,176,0,66,4,176,0,76,4,176,0,76,4,176,255,255,4,176,255,255,4,176,255,255,4,176,255,255,4,176,255,255,4,176,255,255,4,176,255,255,4,176,0,168,4,176,0,25,4,176,0,160,4,176,0,76,4,176,0,160,4,176,0,36,4,176,0,126,4,176,0,166,4,176,0,176,4,176,0,168,4,176,0,136,4,176,0,130,4,176,0,168,4,176,0,67,4,176,0,156,4,176,0,6,4,176,0,142,4,176,0,136,4,176,0,90,4,176,0,168,4,176,0,136,4,176,0,136,4,176,0,130,4,176,0,5,4,176,0,86,4,176,0,57,4,176,0,106,4,176,0,106,4,176,0,130,4,176,0,130,4,176,0,94,4,176,0,5,4,176,0,5,4,176,0,5,4,176,0,136,4,176,0,106,4,176,0,76,4,176,0,166,4,176,0,168,4,176,0,168,4,176,0,116,4,176,0,170,4,176,0,126,4,176,0,125,4,176,0,72,4,176,0,132,4,176,0,118,4,176,0,112,4,176,0,116,4,176,0,118,4,176,0,116,4,176,1,8,4,176,1,86,4,176,1,61,4,176,1,80,4,176,1,64,4,176,1,80,4,176,1,68,4,176,1,98,4,176,1,68,4,176,1,68,4,176,1,8,4,176,1,86,4,176,1,61,4,176,1,80,4,176,1,64,4,176,1,80,4,176,1,68,4,176,1,98,4,176,1,68,4,176,1,68,4,176,1,8,4,176,1,86,4,176,1,61,4,176,1,80,4,176,1,64,4,176,1,80,4,176,1,68,4,176,1,98,4,176,1,68,4,176,1,68,4,176,1,8,4,176,1,86,4,176,1,61,4,176,1,80,4,176,1,64,4,176,1,80,4,176,1,68,4,176,1,98,4,176,1,68,4,176,1,68,4,176,0,94,4,176,0,82,4,176,0,82,4,176,0,94,4,176,0,82,4,176,0,76,4,176,0,76,4,176,0,94,4,176,1,196,4,176,1,146,4,176,1,196,4,176,1,146,4,176,0,54,4,176,1,196,4,176,1,196,4,176,0,156,4,176,0,154,4,176,1,196,4,176,1,48,4,176,0,110,4,176,0,182,4,176,0,120,4,176,1,196,4,176,0,100,4,176,0,104,4,176,0,104,4,176,1,10,4,176,0,202,4,176,1,0,4,176,0,206,4,176,1,116,4,176,0,202,4,176,0,152,4,176,0,180,4,176,0,221,4,176,0,211,4,176,0,100,4,176,0,100,4,176,0,70,4,176,0,40,4,176,0,40,4,176,0,100,4,176,0,100,4,176,0,100,4,176,0,100,4,176,1,116,4,176,0,150,4,176,0,200,4,176,0,150,4,176,1,166,4,176,1,116,4,176,1,140,4,176,0,76,4,176,0,116,4,176,0,236,4,176,1,10,4,176,1,26,4,176,1,226,4,176,252,104,4,176,247,184,4,176,247,184,4,176,252,104,4,176,252,104,4,176,247,184,4,176,252,104,4,176,247,184,4,176,252,104,4,176,252,120,4,176,252,64,4,176,252,67,4,176,253,108,4,176,252,63,4,176,252,216,4,176,253,160,4,176,249,244,4,176,247,236,4,176,248,40,4,176,253,120,4,176,252,216,4,176,253,160,4,176,249,244,4,176,247,236,4,176,252,216,4,176,252,216,4,176,252,224,4,176,248,210,4,176,253,136,4,176,253,160,4,176,248,200,4,176,252,4,4,176,247,84,4,176,252,220,4,176,252,220,4,176,252,66,4,176,252,22,4,176,252,139,4,176,251,252,4,176,247,76,4,176,251,252,4,176,251,252,4,176,252,104,4,176,252,84,4,176,252,104,4,176,252,104,4,176,252,104,4,176,252,104,4,176,252,104,4,176,247,184,4,176,243,8,4,176,252,104,4,176,252,104,4,176,247,184,4,176,252,48,4,176,252,48,4,176,247,128,4,176,252,48,4,176,252,98,4,176,247,218,4,176,252,98,4,176,247,184,4,176,252,104,4,176,1,196,4,176,1,146,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,160,4,176,0,96,4,176,0,136,4,176,0,96,4,176,0,72,4,176,0,129,4,176,0,96,4,176,0,79,4,176,0,62,4,176,0,78,4,176,0,30,4,176,0,96,4,176,0,70,4,176,0,0,4,176,0,76,4,176,0,109,4,176,0,120,4,176,0,76,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,80,4,176,0,164,4,176,0,80,4,176,0,109,4,176,0,80,4,176,0,80,4,176,0,0,4,176,0,25,4,176,1,48,4,176,0,106,4,176,0,100,4,176,255,150,4,176,0,68,4,176,1,146,4,176,0,100,4,176,0,100,4,176,0,100,4,176,0,100,4,176,0,121,4,176,0,100,4,176,0,100,4,176,0,100,4,176,0,146,4,176,0,96,4,176,0,126,4,176,0,116,4,176,0,100,4,176,0,100,4,176,0,100,4,176,0,100,4,176,0,204,4,176,0,100,4,176,0,136,4,176,0,68,4,176,0,76,4,176,0,45,4,176,0,80,4,176,0,150,4,176,0,86,4,176,0,156,4,176,0,118,4,176,0,100,4,176,0,54,4,176,0,32,4,176,0,100,4,176,0,121,4,176,0,194,4,176,0,100,4,176,0,194,4,176,0,70,4,176,0,65,4,176,0,194,4,176,0,194,4,176,0,194,4,176,0,194,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,2,88,4,176,4,26,4,176,0,0,4,176,2,88,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,2,88,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,75,4,176,0,75,4,176,0,0,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,2,88,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,0,4,176,1,48,4,176,0,75,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,75,4,176,0,75,4,176,0,75,4,176,2,88,4,176,2,88,4,176,0,75,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,80,4,176,0,0,4,176,0,0,4,176,1,44,4,176,0,0,4,176,0,0,4,176,1,44,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,1,44,4,176,1,44,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,150,4,176,0,150,4,176,0,225,4,176,0,225,4,176,0,0,4,176,0,120,4,176,0,0,4,176,0,60,4,176,0,0,4,176,0,120,4,176,0,0,4,176,0,60,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,120,4,176,0,60,4,176,0,120,4,176,0,60,4,176,0,131,4,176,0,195,4,176,0,131,4,176,0,208,4,176,0,131,4,176,0,195,4,176,0,131,4,176,0,208,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,255,150,4,176,255,150,4,176,1,26,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,26,4,176,1,26,4,176,255,150,4,176,255,150,4,176,1,26,4,176,255,150,4,176,255,150,4,176,1,26,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,132,4,176,1,132,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,238,4,176,1,132,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,238,4,176,0,150,4,176,1,132,4,176,1,132,4,176,255,150,4,176,255,150,4,176,1,132,4,176,255,150,4,176,255,150,4,176,255,150,4,176,0,37,4,176,1,132,4,176,1,238,4,176,0,66,4,176,1,132,4,176,1,132,4,176,255,150,4,176,255,150,4,176,1,132,4,176,1,132,4,176,1,132,4,176,255,150,4,176,255,150,4,176,1,132,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,238,4,176,255,150,4,176,1,238,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,150,4,176,1,238,4,176,1,238,4,176,255,150,4,176,255,150,4,176,1,238,4,176,255,150,4,176,255,150,4,176,255,150,4,176,0,37,4,176,1,238,4,176,1,238,4,176,0,66,4,176,1,238,4,176,1,238,4,176,1,132,4,176,255,150,4,176,255,150,4,176,1,238,4,176,1,238,4,176,255,150,4,176,255,150,4,176,1,238,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,26,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,132,4,176,1,132,4,176,255,150,4,176,255,150,4,176,255,150,4,176,255,150,4,176,1,132,4,176,1,238,4,176,255,150,4,176,255,150,4,176,1,238,4,176,255,150,4,176,255,150,4,176,1,26,4,176,255,150,4,176,255,150,4,176,1,132,4,176,255,150,4,176,255,150,4,176,1,238,4,176,255,150,4,176,255,150,4,176,1,238,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,2,88,4,176,4,26,4,176,0,0,4,176,2,88,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,2,88,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,0,4,176,0,31,4,176,0,136,4,176,0,36,4,176,0,89,4,176,0,49,4,176,0,69,4,176,0,109,4,176,0,126,4,176,0,0,4,176,0,108,4,176,0,56,4,176,0,36,4,176,0,69,4,176,0,26,4,176,0,26,4,176,0,26,4,176,0,29,4,176,0,52,4,176,1,2,4,176,1,206,4,176,0,242,4,176,1,244,4,176,1,244,4,176,0,220,4,176,0,0,4,176,0,220,4,176,0,58,4,176,0,76,4,176,0,80,4,176,0,75,4,176,0,0,4,176,0,0,4,176,0,212,4,176,1,6,4,176,1,10,4,176,1,72,4,176,1,104,4,176,1,6,4,176,0,0,4,176,1,168,4,176,1,159,4,176,1,29,4,176,1,119,4,176,0,75,4,176,0,0,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,75,4,176,0,80,4,176,0,75,4,176,0,0,4,176,0,212,4,176,1,72,4,176,0,0,4,176,1,159,4,176,1,29,4,176,1,119,4,176,252,10,4,176,253,22,4,176,253,68,4,176,253,114,4,176,253,198,4,176,245,72,4,176,249,112,4,176,249,152,4,176,253,22,4,176,253,109,4,176,252,10,4,176,252,64,4,176,247,184,4,176,252,104,4,176,247,184,4,176,247,184,4,176,252,4,4,176,247,84,4,176,247,184,4,176,252,104,4,176,247,184,4,176,247,184,4,176,247,84,4,176,252,104,4,176,247,184,4,176,252,216,4,176,253,74,4,176,247,184,4,176,252,104,4,176,247,184,4,176,247,184,4,176,247,184,4,176,252,64,4,176,247,144,4,176,247,144,4,176,247,144,4,176,252,238,4,176,242,224,4,176,252,84,4,176,247,164,4,176,252,179,4,176,248,144,4,176,243,224,4,176,247,164,4,176,252,24,4,176,247,104,4,176,252,84,4,176,247,164,4,176,253,74,4,176,247,144,4,176,242,224,4,176,247,144,4,176,247,144,4,176,252,76,4,176,252,64,4,176,247,144,4,176,247,144,4,176,247,164,4,176,252,64,4,176,247,164,4,176,247,144,4,176,252,64,4,176,247,144,4,176,252,24,4,176,252,24,4,176,253,68,4,176,252,25,4,176,252,104,4,176,247,104,4,176,252,44,4,176,251,220,4,176,0,156,4,176,0,5,4,176,0,0,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,0,200,4,176,2,188,4,176,2,188,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,2,188,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,0,200,4,176,0,200,4,176,2,188,4,176,1,116,4,176,1,146,4,176,1,116,4,176,1,176,4,176,0,170,0,0,1,0,0,0,1,210,0,0,1,33,0,0,1,213,0,0,0,219,0,0,1,18,0,0,1,18,0,0,0,251,0,0,1,106,0,0,0,240,0,0,0,170,0,0,1,100,0,0,1,236,0,0,1,195,0,0,1,210,0,0,1,159,0,0,2,2,0,0,1,156,0,0,1,33,0,0,1,213,4,176,1,0,4,176,1,210,4,176,1,33,4,176,1,213,4,176,0,219,4,176,1,18,4,176,1,18,4,176,0,251,4,176,1,106,4,176,0,240,4,176,0,170,4,176,2,2,4,176,1,156,0,0,1,2,0,0,1,210,0,0,0,239,0,0,1,213,0,0,0,249,0,0,1,3,0,0,0,254,0,0,0,226,0,0,1,106,0,0,0,215,0,0,0,213,0,0,1,100,0,0,1,135,0,0,1,223,0,0,2,7,0,0,0,240,4,176,1,213,4,176,1,213,4,176,0,136,0,0,0,253,0,0,1,0,4,176,0,0,0,0,0,160,0,129,252,10,252,24,247,104,0,0,0,0,0,0,0,92,0,0,0,178,0,0,0,214,0,0,0,250,0,0,1,48,0,0,1,102,0,0,1,156,0,0,1,212,0,0,2,10,0,0,2,46,0,0,2,82,0,0,2,136,0,0,2,190,0,0,2,244,0,0,3,44,0,0,3,98,0,0,3,136,0,0,3,174,0,0,3,210,0,0,3,246,0,0,4,26,0,0,4,188,0,0,4,226,0,0,5,10,0,0,5,46,0,0,5,196,0,0,5,232,0,0,6,152,0,0,7,4,0,0,7,40,0,0,7,76,0,0,7,112,0,0,7,148,0,0,7,184,0,0,8,24,0,0,8,148,0,0,8,184,0,0,8,200,0,0,9,46,0,0,9,82,0,0,9,118,0,0,9,154,0,0,9,190,0,0,9,244,0,0,10,42,0,0,10,96,0,0,10,152,0,0,10,206,0,0,10,244,0,0,11,24,0,0,11,62,0,0,11,98,0,0,11,134,0,0,11,170,0,0,12,92,0,0,13,14,0,0,13,30,0,0,13,66,0,0,13,202,0,0,14,28,0,0,14,188,0,0,14,224,0,0,15,4,0,0,15,40,0,0,15,78,0,0,15,114,0,0,15,196,0,0,16,42,0,0,16,78,0,0,16,114,0,0,16,194,0,0,17,90,0,0,17,126,0,0,17,162,0,0,17,198,0,0,17,236,0,0,18,16,0,0,18,54,0,0,18,90,0,0,18,126,0,0,18,162,0,0,19,58,0,0,19,94,0,0,19,194,0,0,19,232,0,0,20,94,0,0,20,132,0,0,20,188,0,0,20,226,0,0,21,52,0,0,21,90,0,0,21,130,0,0,21,218,0,0,22,96,0,0,22,188,0,0,22,224,0,0,23,4,0,0,23,42,0,0,23,196,0,0,24,84,0,0,24,120,0,0,24,208,0,0,24,244,0,0,25,24,0,0,25,60,0,0,25,114,0,0,25,168,0,0,25,222,0,0,26,22,0,0,26,76,0,0,26,114,0,0,26,152,0,0,26,188,0,0,26,224,0,0,27,6,0,0,27,42,0,0,27,80,0,0,27,116,0,0,27,152,0,0,27,188,0,0,27,226,0,0,28,6,0,0,28,170,0,0,29,30,0,0,29,148,0,0,29,184,0,0,29,220,0,0,30,146,0,0,31,0,0,0,31,112,0,0,31,242,0,0,32,114,0,0,32,150,0,0,32,186,0,0,32,224,0,0,33,124,0,0,33,160,0,0,33,196,0,0,33,232,0,0,34,12,0,0,34,50,0,0,34,218,0,0,35,88,0,0,35,146,0,0,35,232,0,0,36,12,0,0,36,50,0,0,36,88,0,0,36,168,0,0,36,204,0,0,36,240,0,0,37,20,0,0,37,58,0,0,37,96,0,0,37,132,0,0,37,168,0,0,38,32,0,0,38,68,0,0,38,106,0,0,38,142,0,0,38,178,0,0,38,214,0,0,38,252,0,0,39,32,0,0,39,186,0,0,39,224,0,0,40,4,0,0,40,66,0,0,40,82,0,0,40,194,0,0,40,230,0,0,41,10,0,0,41,48,0,0,41,84,0,0,41,178,0,0,42,4,0,0,42,40,0,0,42,76,0,0,42,114,0,0,42,152,0,0,42,188,0,0,42,224,0,0,43,4,0,0,43,40,0,0,43,126,0,0,43,162,0,0,43,198,0,0,43,234,0,0,44,34,0,0,44,70,0,0,44,106,0,0,44,142,0,0,44,178,0,0,44,214,0,0,45,34,0,0,45,218,0,0,45,254,0,0,46,34,0,0,46,88,0,0,46,142,0,0,46,196,0,0,46,252,0,0,47,50,0,0,47,86,0,0,47,122,0,0,47,178,0,0,47,232,0,0,48,32,0,0,48,90,0,0,48,144,0,0,48,182,0,0,48,220,0,0,49,0,0,0,49,38,0,0,49,74,0,0,50,76,0,0,50,114,0,0,50,172,0,0,50,208,0,0,51,224,0,0,52,4,0,0,52,138,0,0,53,0,0,0,53,36,0,0,53,72,0,0,53,108,0,0,53,144,0,0,53,180,0,0,54,64,0,0,55,2,0,0,55,168,0,0,56,74,0,0,56,204,0,0,56,240,0,0,57,20,0,0,57,56,0,0,57,92,0,0,57,148,0,0,57,202,0,0,58,2,0,0,58,60,0,0,58,114,0,0,58,152,0,0,58,188,0,0,58,226,0,0,59,6,0,0,59,44,0,0,59,80,0,0,60,32,0,0,60,48,0,0,60,64,0,0,60,100,0,0,60,228,0,0,61,126,0,0,61,218,0,0,62,160,0,0,62,196,0,0,62,232,0,0,63,12,0,0,63,48,0,0,63,84,0,0,63,182,0,0,64,48,0,0,64,86,0,0,64,124,0,0,65,0,0,0,65,96,0,0,65,132,0,0,65,168,0,0,65,204,0,0,65,242,0,0,66,24,0,0,66,60,0,0,66,98,0,0,67,28,0,0,67,64,0,0,68,14,0,0,68,50,0,0,68,198,0,0,69,46,0,0,69,84,0,0,69,200,0,0,69,238,0,0,70,94,0,0,70,190,0,0,70,226,0,0,71,90,0,0,71,128,0,0,71,168,0,0,72,36,0,0,72,182,0,0,73,28,0,0,73,64,0,0,73,192,0,0,73,228,0,0,74,10,0,0,74,160,0,0,75,56,0,0,75,92,0,0,75,196,0,0,75,232,0,0,76,12,0,0,76,48,0,0,76,104,0,0,76,158,0,0,76,214,0,0,77,16,0,0,77,70,0,0,77,108,0,0,77,146,0,0,77,182,0,0,77,220,0,0,78,4,0,0,78,40,0,0,78,78,0,0,78,114,0,0,78,152,0,0,78,188,0,0,78,226,0,0,79,6,0,0,79,190,0,0,80,50,0,0,80,186,0,0,80,222,0,0,81,2,0,0,81,198,0,0,82,90,0,0,82,236,0,0,83,126,0,0,84,14,0,0,84,50,0,0,84,86,0,0,84,126,0,0,85,26,0,0,85,62,0,0,85,98,0,0,85,134,0,0,85,170,0,0,85,208,0,0,86,174,0,0,87,10,0,0,87,130,0,0,88,8,0,0,88,150,0,0,88,186,0,0,88,224,0,0,89,182,0,0,90,58,0,0,90,94,0,0,90,130,0,0,90,166,0,0,90,204,0,0,90,242,0,0,91,22,0,0,91,60,0,0,91,232,0,0,92,12,0,0,92,50,0,0,92,88,0,0,92,128,0,0,92,164,0,0,92,202,0,0,92,238,0,0,93,188,0,0,93,226,0,0,94,6,0,0,94,68,0,0,94,84,0,0,94,194,0,0,94,230,0,0,95,10,0,0,95,48,0,0,95,84,0,0,95,176,0,0,96,28,0,0,96,64,0,0,96,100,0,0,96,138,0,0,96,176,0,0,96,212,0,0,96,250,0,0,97,30,0,0,97,66,0,0,97,156,0,0,97,192,0,0,97,228,0,0,98,8,0,0,98,172,0,0,99,68,0,0,99,104,0,0,99,140,0,0,99,176,0,0,99,212,0,0,99,248,0,0,100,8,0,0,101,154,0,0,102,60,0,0,102,158,0,0,103,2,0,0,103,18,0,0,103,138,0,0,103,154,0,0,103,210,0,0,103,246,0,0,104,64,0,0,104,226,0,0,104,242,0,0,105,22,0,0,105,60,0,0,106,150,0,0,107,70,0,0,107,164,0,0,107,200,0,0,107,236,0,0,108,182,0,0,108,218,0,0,109,64,0,0,109,80,0,0,109,96,0,0,109,112,0,0,109,190,0,0,109,206,0,0,109,222,0,0,109,238,0,0,110,78,0,0,110,114,0,0,111,0,0,0,111,16,0,0,111,104,0,0,111,200,0,0,112,44,0,0,112,164,0,0,113,8,0,0,113,116,0,0,113,244,0,0,114,114,0,0,115,20,0,0,115,178,0,0,115,194,0,0,116,70,0,0,116,210,0,0,116,226,0,0,117,8,0,0,117,24,0,0,117,130,0,0,118,32,0,0,118,232,0,0,119,92,0,0,119,176,0,0,121,28,0,0,121,242,0,0,122,90,0,0,122,106,0,0,122,210,0,0,123,74,0,0,123,184,0,0,124,14,0,0,124,30,0,0,124,46,0,0,124,82,0,0,124,194,0,0,124,230,0,0,125,92,0,0,125,154,0,0,126,68,0,0,126,84,0,0,126,234,0,0,127,154,0,0,127,212,0,0,127,248,0,0,128,68,0,0,128,222,0,0,128,238,0,0,129,18,0,0,129,56,0,0,130,122,0,0,131,36,0,0,131,128,0,0,131,164,0,0,131,200,0,0,132,140,0,0,132,176,0,0,133,18,0,0,133,148,0,0,133,230,0,0,133,246,0,0,134,68,0,0,134,84,0,0,134,100,0,0,134,158,0,0,134,174,0,0,134,210,0,0,135,210,0,0,135,226,0,0,136,56,0,0,136,150,0,0,136,250,0,0,137,110,0,0,137,210,0,0,138,56,0,0,138,180,0,0,139,44,0,0,139,200,0,0,140,88,0,0,140,104,0,0,140,248,0,0,141,132,0,0,141,148,0,0,141,186,0,0,141,202,0,0,142,66,0,0,142,216,0,0,143,154,0,0,144,64,0,0,144,148,0,0,145,242,0,0,146,204,0,0,147,52,0,0,147,134,0,0,147,236,0,0,148,100,0,0,148,208,0,0,148,224,0,0,148,240,0,0,149,0,0,0,149,36,0,0,149,164,0,0,149,200,0,0,150,94,0,0,151,6,0,0,151,22,0,0,152,110,0,0,153,38,0,0,153,54,0,0,153,76,0,0,153,98,0,0,154,42,0,0,154,104,0,0,154,120,0,0,154,136,0,0,155,32,0,0,155,170,0,0,156,78,0,0,156,194,0,0,157,60,0,0,157,210,0,0,158,132,0,0,158,148,0,0,158,164,0,0,158,180,0,0,159,4,0,0,159,20,0,0,159,36,0,0,159,52,0,0,159,164,0,0,159,180,0,0,159,196,0,0,159,212,0,0,159,228,0,0,159,244,0,0,160,72,0,0,160,88,0,0,160,104,0,0,160,120,0,0,160,222,0,0,160,238,0,0,160,254,0,0,161,14,0,0,161,30,0,0,161,138,0,0,162,40,0,0,162,146,0,0,163,12,0,0,163,114,0,0,163,212,0,0,164,66,0,0,164,172,0,0,165,74,0,0,165,112,0,0,165,150,0,0,166,46,0,0,166,214,0,0,167,160,0,0,168,20,0,0,168,194,0,0,169,90,0,0,169,226,0,0,170,76,0,0,170,212,0,0,171,52,0,0,171,158,0,0,172,50,0,0,172,212,0,0,173,56,0,0,174,16,0,0,174,32,0,0,174,146,0,0,175,30,0,0,175,172,0,0,176,50,0,0,176,146,0,0,176,242,0,0,177,160,0,0,178,64,0,0,178,176,0,0,179,76,0,0,179,112,0,0,179,150,0,0,179,190,0,0,179,226,0,0,180,8,0,0,180,48,0,0,180,84,0,0,180,120,0,0,180,156,0,0,180,192,0,0,180,228,0,0,181,108,0,0,181,236,0,0,182,80,0,0,182,202,0,0,183,132,0,0,183,230,0,0,184,142,0,0,185,50,0,0,185,136,0,0,186,74,0,0,186,234,0,0,187,92,0,0,187,110,0,0,187,128,0,0,187,146,0,0,187,164,0,0,187,182,0,0,187,200,0,0,187,218,0,0,187,236,0,0,187,254,0,0,188,16,0,0,188,34,0,0,188,52,0,0,188,70,0,0,188,88,0,0,188,106,0,0,188,124,0,0,188,142,0,0,188,160,0,0,188,178,0,0,188,196,0,0,188,212,0,0,188,228,0,0,188,244,0,0,189,4,0,0,189,20,0,0,189,36,0,0,189,52,0,0,189,68,0,0,189,84,0,0,189,100,0,0,189,198,0,0,190,40,0,0,190,150,0,0,191,54,0,0,191,150,0,0,192,28,0,0,192,170,0,0,192,254,0,0,193,150,0,0,194,24,0,0,194,64,0,0,195,20,0,0,195,220,0,0,196,218,0,0,197,220,0,0,199,20,0,0,200,54,0,0,201,34,0,0,201,90,0,0,201,130,0,0,201,228,0,0,202,54,0,0,202,86,0,0,202,168,0,0,202,250,0,0,203,170,0,0,204,86,0,0,204,104,0,0,204,172,0,0,205,60,0,0,205,86,0,0,205,194,0,0,205,210,0,0,205,246,0,0,206,32,0,0,206,74,0,0,206,168,0,0,207,4,0,0,207,190,0,0,208,120,0,0,208,198,0,0,209,22,0,0,209,88,0,0,209,154,0,0,209,220,0,0,210,28,0,0,210,44,0,0,210,60,0,0,210,98,0,0,210,136,0,0,210,152,0,0,210,168,0,0,210,184,0,0,210,220,0,0,210,244,0,0,211,6,0,0,211,32,0,0,211,58,0,0,211,84,0,0,211,126,0,0,211,170,0,0,211,192,0,0,212,46,0,0,212,160,0,0,212,230,0,0,213,42,0,0,213,68,0,0,213,110,0,0,213,164,0,0,213,240,0,0,214,92,0,0,214,154,0,0,215,6,0,0,215,158,0,0,215,252,0,0,216,136,0,0,217,18,0,0,218,12,0,0,218,218,0,0,219,238,0,0,220,84,0,0,220,252,0,0,221,74,0,0,221,100,0,0,221,134,0,0,222,16,0,0,222,170,0,0,222,196,0,0,223,40,0,0,223,66,0,0,223,100,0,0,224,60,0,0,224,202,0,0,225,104,0,0,226,10,0,0,226,44,0,0,226,68,0,0,226,94,0,0,226,126,0,0,226,214,0,0,227,68,0,0,227,92,0,0,227,116,0,0,227,142,0,0,228,106,0,0,229,94,0,0,229,118,0,0,229,150,0,0,229,174,0,0,229,198,0,0,230,124,0,0,231,142,0,0,232,52,0,0,232,78,0,0,232,102,0,0,233,96,0,0,233,122,0,0,234,212,0,0,236,132,0,0,237,24,0,0,237,152,0,0,238,106,0,0,238,130,0,0,238,220,0,0,239,90,0,0,239,194,0,0,239,220,0,0,239,254,0,0,240,24,0,0,240,82,0,0,240,120,0,0,240,138,0,0,240,154,0,0,240,154,0,0,240,154,0,0,240,154,0,0,240,154,0,0,240,154,0,0,241,94,0,0,241,222,0,0,242,98,0,0,243,10,0,0,243,218,0,0,244,140,0,0,245,72,0,0,245,218,0,0,246,138,0,0,247,26,0,0,247,124,0,0,248,62,0,0,249,38,0,0,249,186,0,0,250,94,0,0,251,4,0,0,251,136,0,0,251,228,0,0,252,94,0,0,252,222,0,0,253,108,0,0,253,252,0,0,254,234,0,0,255,130,0,0,255,254,0,1,0,144,0,1,0,224,0,1,1,70,0,1,1,210,0,1,2,68,0,1,2,84,0,1,2,100,0,1,2,172,0,1,2,188,0,1,2,254,0,1,3,66,0,1,3,122,0,1,3,232,0,1,4,38,0,1,4,76,0,1,4,146,0,1,5,10,0,1,5,70,0,1,5,154,0,1,5,232,0,1,6,54,0,1,6,148,0,1,6,244,0,1,7,68,0,1,7,94,0,1,7,206,0,1,8,6,0,1,8,66,0,1,8,254,0,1,9,70,0,1,9,190,0,1,9,206,0,1,9,222,0,1,10,44,0,1,10,144,0,1,10,224,0,1,10,240,0,1,11,6,0,1,11,60,0,1,12,6,0,1,13,18,0,1,13,106,0,1,13,122,0,1,13,202,0,1,14,34,0,1,14,114,0,1,14,200,0,1,15,70,0,1,15,190,0,1,16,72,0,1,16,206,0,1,17,84,0,1,17,110,0,1,17,136,0,1,17,162,0,1,17,188,0,1,17,214,0,1,17,240,0,1,18,10,0,1,18,36,0,1,18,62,0,1,18,88,0,1,18,114,0,1,18,140,0,1,18,166,0,1,18,192,0,1,18,218,0,1,18,244,0,1,19,14,0,1,19,42,0,1,19,70,0,1,19,96,0,1,19,124,0,1,19,150,0,1,19,182,0,1,19,222,0,1,19,254,0,1,20,32,0,1,20,60,0,1,20,98,0,1,20,130,0,1,21,28,0,1,22,64,0,1,24,124,0,1,24,180,0,1,25,24,0,1,25,132,0,1,25,250,0,1,26,114,0,1,26,232,0,1,27,96,0,1,27,134,0,1,27,174,0,1,28,36,0,1,28,168,0,1,29,30,0,1,29,150,0,1,30,14,0,1,30,134,0,1,31,6,0,1,32,150,0,1,33,26,0,1,33,48,0,1,33,124,0,1,33,182,0,1,34,38,0,1,34,110,0,1,34,184,0,1,34,244,0,1,35,48,0,1,35,88,0,1,35,130,0,1,35,170,0,1,35,210,0,1,35,242,0,1,36,36,0,1,36,102,0,1,36,166,0,1,36,230,0,1,37,38,0,1,37,104,0,1,37,162,0,1,37,190,0,1,37,246,0,1,38,18,0,1,38,44,0,1,38,86,0,1,38,128,0,1,38,154,0,1,38,196,0,1,39,40,0,1,39,100,0,1,40,250,0,1,41,64,0,1,41,136,0,1,41,234,0,1,42,70,0,1,42,170,0,1,43,66,0,1,43,94,0,1,43,138,0,1,43,196,0,1,43,252,0,1,44,50,0,1,44,106,0,1,44,162,0,1,44,224,0,1,45,30,0,1,45,94,0,1,45,158,0,1,45,200,0,1,45,228,0,1,46,14,0,1,46,42,0,1,46,68,0,1,46,94,0,1,46,120,0,1,46,148,0,1,46,196,0,1,46,246,0,1,47,42,0,1,47,94,0,1,47,178,0,1,47,242,0,1,48,50,0,1,48,76,0,1,48,104,0,1,48,152,0,1,48,202,0,1,48,230,0,1,49,0,0,1,49,28,0,1,49,56,0,1,49,106,0,1,49,156,0,1,49,210,0,1,50,6,0,1,50,32,0,1,50,58,0,1,50,84,0,1,50,108,0,1,50,156,0,1,50,206,0,1,50,254,0,1,51,46,0,1,51,112,0,1,51,164,0,1,51,216,0,1,52,0,0,1,52,66,0,1,52,116,0,1,52,168,0,1,52,208,0,1,53,44,0,1,53,108,0,1,53,174,0,1,53,222,0,1,54,10,0,1,54,54,0,1,54,92,0,1,54,126,0,1,54,170,0,1,54,204,0,1,54,248,0,1,55,42,0,1,55,82,0,1,55,116,0,1,55,162,0,1,55,196,0,1,55,242,0,1,56,38,0,1,56,90,0,1,56,134,0,1,56,178,0,1,56,220,0,1,57,8,0,1,57,36,0,1,57,76,0,1,57,110,0,1,57,144,0,1,57,172,0,1,57,200,0,1,57,236,0,1,58,44,0,1,58,120,0,1,58,148,0,1,58,204,0,1,59,8,0,1,59,36,0,1,59,76,0,1,59,110,0,1,59,148,0,1,59,182,0,1,59,210,0,1,60,6,0,1,60,46,0,1,60,86,0,1,60,140,0,1,60,184,0,1,60,226,0,1,61,20,0,1,61,64,0,1,61,108,0,1,61,160,0,1,61,216,0,1,62,18,0,1,62,76,0,1,62,134,0,1,62,192,0,1,63,8,0,1,63,44,0,1,63,78,0,1,63,116,0,1,63,158,0,1,63,186,0,1,63,224,0,1,64,2,0,1,64,36,0,1,64,62,0,1,64,88,0,1,64,126,0,1,64,182,0,1,64,252,0,1,65,22,0,1,65,72,0,1,65,128,0,1,65,156,0,1,65,194,0,1,65,230,0,1,66,6,0,1,66,38,0,1,66,66,0,1,66,116,0,1,66,154,0,1,66,192,0,1,66,246,0,1,67,34,0,1,67,78,0,1,67,128,0,1,67,172,0,1,67,216,0,1,68,12,0,1,68,68,0,1,68,114,0,1,68,156,0,1,68,198,0,1,68,248,0,1,69,30,0,1,69,74,0,1,69,106,0,1,69,150,0,1,69,184,0,1,69,236,0,1,70,18,0,1,70,62,0,1,70,94,0,1,70,138,0,1,70,172,0,1,70,222,0,1,71,6,0,1,71,48,0,1,71,118,0,1,71,168,0,1,71,220,0,1,72,14,0,1,72,54,0,1,72,94,0,1,72,146,0,1,72,186,0,1,72,226,0,1,73,40,0,1,73,88,0,1,73,136,0,1,73,162,0,1,73,188,0,1,73,214,0,1,73,240,0,1,74,10,0,1,74,36,0,1,74,62,0,1,74,88,0,1,74,114,0,1,74,140,0,1,74,166,0,1,74,192,0,1,74,218,0,1,74,244,0,1,75,14,0,1,75,40,0,1,75,66,0,1,75,94,0,1,75,122,0,1,75,148,0,1,75,176,0,1,75,202,0,1,75,234,0,1,76,18,0,1,76,50,0,1,76,84,0,1,76,112,0,1,76,150,0,1,76,182,0,1,77,78,0,1,78,108,0,1,80,162,0,1,81,140,0,1,82,124,0,1,83,50,0,1,84,42,0,1,84,194,0,1,85,138,0,1,85,238,0,1,86,184,0,1,87,16,0,1,87,58,0,1,87,120,0,1,88,98,0,1,89,58,0,1,89,244,0,1,90,90,0,1,91,72,0,1,92,16,0,1,92,224,0,1,93,156,0,1,94,74,0,1,95,22,0,1,95,120,0,1,95,162,0,1,95,224,0,1,96,8,0,1,96,70,0,1,96,140,0,1,97,10,0,1,97,162,0,1,98,106,0,1,99,50,0,1,99,90,0,1,99,148,0,1,99,212,0,1,99,238,0,1,100,14,0,1,100,42,0,1,100,70,0,1,100,102,0,1,100,130,0,1,100,158,0,1,100,194,0,1,100,222,0,1,100,254,0,1,101,54,0,1,101,82,0,1,101,122,0,1,101,164,0,1,101,222,0,1,102,20,0,1,102,58,0,1,102,114,0,1,102,168,0,1,102,250,0,1,103,82,0,1,103,122,0,1,103,184,0,1,103,242,0,1,104,44,0,1,104,90,0,1,104,178,0,1,104,218,0,1,106,58,0,1,106,120,0,1,107,70,0,1,107,170,0,1,107,196,0,1,108,88,0,1,108,190,0,1,109,64,0,1,109,148,0,1,109,250,0,1,110,218,0,1,110,244,0,1,111,174,0,1,111,200,0,1,111,234,0,1,112,12,0,1,112,108,0,1,112,192,0,1,113,68,0,1,113,198,0,1,114,114,0,1,115,30,0,1,115,116,0,1,115,210,0,1,116,104,0,1,116,130,0,1,116,228,0,1,117,150,0,1,118,22,0,1,118,160,0,1,119,82,0,1,119,116,0,1,119,228,0,1,120,84,0,1,121,6,0,1,121,166,0,1,121,192,0,1,122,128,0,1,122,152,0,1,122,186,0,1,123,32,0,1,123,154,0,1,124,36,0,1,124,70,0,1,125,38,0,1,126,50,0,1,126,76,0,1,126,110,0,1,126,210,0,1,127,98,0,1,128,42,0,1,128,252,0,1,129,190,0,1,129,216,0,1,130,94,0,1,131,2,0,1,131,200,0,1,131,234,0,1,132,192,0,1,132,226,0,1,134,10,0,1,134,114,0,1,135,18,0,1,135,156,0,1,136,230,0,1,137,98,0,1,138,60,0,1,138,246,0,1,140,32,0,1,140,138,0,1,141,250,0,1,142,124,0,1,143,36,0,1,143,36,0,1,143,82,0,1,143,160,0,1,144,14,0,1,144,156,0,1,145,76,0,1,146,30,0,1,147,16,0,1,148,36,0,1,149,24,0,1,149,232,0,1,150,218,0,1,151,172,0,1,152,92,0,1,153,44,0,1,154,30,0,1,154,240,0,1,155,158,0,1,156,110,0,1,157,30,0,1,157,172,0,1,158,92,0,1,159,44,0,1,160,30,0,1,160,240,0,1,161,158,0,1,162,110,0,1,163,30,0,1,163,172,0,1,164,90,0,1,165,42,0,1,165,218,0,1,166,104,0,1,167,24,0,1,167,168,0,1,168,22,0,1,168,166,0,1,169,88,0,1,170,42,0,1,171,28,0,1,171,238,0,1,172,158,0,1,173,110,0,1,174,30,0,1,174,174,0,1,175,94,0,1,176,46,0,1,176,222,0,1,177,108,0,1,178,26,0,1,178,168,0,1,179,20,0,1,179,162,0,1,180,82,0,1,181,34,0,1,181,210,0,1,182,96,0,1,183,14,0,1,183,156,0,1,184,10,0,1,184,152,0,1,185,70,0,1,185,214,0,1,186,68,0,1,186,210,0,1,187,66,0,1,187,144,0,1,187,254,0,1,188,142,0,1,189,62,0,1,190,14,0,1,191,0,0,1,191,210,0,1,192,130,0,1,193,84,0,1,194,6,0,1,194,148,0,1,195,66,0,1,196,18,0,1,196,194,0,1,197,80,0,1,198,0,0,1,198,144,0,1,198,254,0,1,199,140,0,1,200,58,0,1,201,10,0,1,201,186,0,1,202,72,0,1,202,248,0,1,203,136,0,1,203,244,0,1,204,128,0,1,205,46,0,1,205,188,0,1,206,42,0,1,206,184,0,1,207,38,0,1,207,114,0,1,207,224,0,1,208,112,0,1,209,34,0,1,209,242,0,1,210,162,0,1,211,50,0,1,211,226,0,1,212,114,0,1,212,224,0,1,213,112,0,1,214,30,0,1,214,172,0,1,215,26,0,1,215,168,0,1,216,22,0,1,216,100,0,1,216,210,0,1,217,98,0,1,218,16,0,1,218,158,0,1,219,12,0,1,219,154,0,1,220,8,0,1,220,86,0,1,220,196,0,1,221,80,0,1,221,190,0,1,222,12,0,1,222,120,0,1,222,198,0,1,222,244,0,1,223,66,0,1,223,176,0,1,224,62,0,1,224,238,0,1,225,190,0,1,226,176,0,1,227,130,0,1,228,48,0,1,229,0,0,1,229,176,0,1,230,64,0,1,230,240,0,1,231,194,0,1,232,116,0,1,233,2,0,1,233,178,0,1,234,66,0,1,234,176,0,1,235,64,0,1,235,240,0,1,236,194,0,1,237,116,0,1,238,2,0,1,238,178,0,1,239,66,0,1,239,174,0,1,240,60,0,1,240,236,0,1,241,122,0,1,241,232,0,1,242,118,0,1,242,228,0,1,243,50,0,1,243,160,0,1,244,48,0,1,244,224,0,1,245,176,0,1,246,96,0,1,246,238,0,1,247,156,0,1,248,42,0,1,248,154,0,1,249,42,0,1,249,218,0,1,250,106,0,1,250,216,0,1,251,102,0,1,251,212,0,1,252,32,0,1,252,142,0,1,253,30,0,1,253,206,0,1,254,94,0,1,254,204,0,1,255,90,0,1,255,200,0,2,0,22,0,2,0,132,0,2,1,18,0,2,1,128,0,2,1,206,0,2,2,58,0,2,2,136,0,2,2,182,0,2,3,4,0,2,3,116,0,2,4,2,0,2,4,176,0,2,5,128,0,2,6,48,0,2,6,192,0,2,7,112,0,2,8,0,0,2,8,110,0,2,8,252,0,2,9,172,0,2,10,60,0,2,10,170,0,2,11,58,0,2,11,170,0,2,11,248,0,2,12,102,0,2,12,244,0,2,13,164,0,2,14,52,0,2,14,162,0,2,15,50,0,2,15,162,0,2,15,238,0,2,16,92,0,2,16,236,0,2,17,90,0,2,17,168,0,2,18,20,0,2,18,98,0,2,18,144,0,2,18,222,0,2,19,76,0,2,19,220,0,2,20,138,0,2,21,24,0,2,21,136,0,2,22,22,0,2,22,132,0,2,22,210,0,2,23,66,0,2,23,208,0,2,24,62,0,2,24,140,0,2,24,250,0,2,25,72,0,2,25,118,0,2,25,196,0,2,26,52,0,2,26,194,0,2,27,48,0,2,27,126,0,2,27,236,0,2,28,58,0,2,28,104,0,2,28,182,0,2,29,36,0,2,29,114,0,2,29,158,0,2,29,234,0,2,30,22,0,2,30,38,0,2,30,54,0,2,30,70,0,2,30,110,0,2,30,126,0,2,30,216,0,2,31,16,0,2,31,56,0,2,31,96,0,2,31,154,0,2,31,208,0,2,32,8,0,2,32,82,0,2,32,166,0,2,33,16,0,2,33,52,0,2,33,158,0,2,33,198,0,2,34,2,0,2,34,58,0,2,34,98,0,2,34,180,0,2,35,14,0,2,35,30,0,2,35,46,0,2,35,62,0,2,35,78,0,2,35,94,0,2,35,110,0,2,35,126,0,2,35,142,0,2,35,158,0,2,35,174,0,2,35,190,0,2,35,206,0,2,35,222,0,2,35,238,0,2,35,254,0,2,36,88,0,2,36,144,0,2,36,184,0,2,36,224,0,2,37,24,0,2,37,80,0,2,37,136,0,2,37,202,0,2,38,42,0,2,38,148,0,2,38,184,0,2,39,18,0,2,39,76,0,2,39,116,0,2,39,156,0,2,39,172,0,2,39,188,0,2,39,204,0,2,40,64,0,2,40,130,0,2,40,196,0,2,40,196,0,2,40,196,0,2,41,158,0,2,42,98,0,2,43,78,0,2,44,62,0,2,44,240,0,1,0,0,6,88,0,144,0,36,0,92,0,15,0,2,0,16,0,47,0,154,0,0,3,8,15,131,0,3,0,3,0,0,0,28,1,86,0,1,0,0,0,0,1,0,0,6,0,0,0,1,0,0,0,0,1,1,0,10,0,6,0,1,0,0,0,0,1,2,0,5,0,16,0,1,0,0,0,0,1,3,0,9,0,21,0,1,0,0,0,0,1,4,0,7,0,30,0,1,0,0,0,0,1,5,0,8,0,37,0,1,0,0,0,0,1,6,0,4,0,45,0,3,0,1,4,9,0,0,0,100,0,49,0,3,0,1,4,9,0,1,0,26,0,149,0,3,0,1,4,9,0,2,0,14,0,175,0,3,0,1,4,9,0,3,0,68,0,189,0,3,0,1,4,9,0,4,0,42,1,1,0,3,0,1,4,9,0,5,0,32,1,43,0,3,0,1,4,9,0,6,0,40,1,75,0,3,0,1,4,9,0,7,0,130,1,115,0,3,0,1,4,9,0,8,0,28,1,245,0,3,0,1,4,9,0,9,0,20,2,17,0,3,0,1,4,9,0,11,0,48,2,37,0,3,0,1,4,9,0,12,0,48,2,37,0,3,0,1,4,9,0,13,22,212,2,85,0,3,0,1,4,9,0,14,0,54,25,41,0,3,0,1,4,9,1,0,0,12,25,95,0,3,0,1,4,9,1,1,0,20,25,107,0,3,0,1,4,9,1,2,0,10,25,127,0,3,0,1,4,9,1,3,0,18,25,137,0,3,0,1,4,9,1,4,0,14,0,175,0,3,0,1,4,9,1,5,0,16,25,155,0,3,0,1,4,9,1,6,0,8,25,171,87,101,105,103,104,116,69,120,116,114,97,76,105,103,104,116,76,105,103,104,116,83,101,109,105,76,105,103,104,116,82,101,103,117,108,97,114,83,101,109,105,66,111,108,100,66,111,108,100,0,169,0,32,0,50,0,48,0,50,0,48,0,32,0,77,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,32,0,67,0,111,0,114,0,112,0,111,0,114,0,97,0,116,0,105,0,111,0,110,0,46,0,32,0,65,0,108,0,108,0,32,0,82,0,105,0,103,0,104,0,116,0,115,0,32,0,82,0,101,0,115,0,101,0,114,0,118,0,101,0,100,0,46,0,67,0,97,0,115,0,99,0,97,0,100,0,105,0,97,0,32,0,67,0,111,0,100,0,101,0,82,0,101,0,103,0,117,0,108,0,97,0,114,0,50,0,48,0,48,0,55,0,46,0,48,0,48,0,49,0,59,0,83,0,65,0,74,0,65,0,59,0,67,0,97,0,115,0,99,0,97,0,100,0,105,0,97,0,67,0,111,0,100,0,101,0,45,0,82,0,101,0,103,0,117,0,108,0,97,0,114,0,67,0,97,0,115,0,99,0,97,0,100,0,105,0,97,0,32,0,67,0,111,0,100,0,101,0,32,0,82,0,101,0,103,0,117,0,108,0,97,0,114,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,50,0,48,0,48,0,55,0,46,0,48,0,48,0,49,0,67,0,97,0,115,0,99,0,97,0,100,0,105,0,97,0,67,0,111,0,100,0,101,0,45,0,82,0,101,0,103,0,117,0,108,0,97,0,114,0,67,0,97,0,115,0,99,0,97,0,100,0,105,0,97,0,32,0,67,0,111,0,100,0,101,0,32,0,105,0,115,0,32,0,97,0,32,0,116,0,114,0,97,0,100,0,101,0,109,0,97,0,114,0,107,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,77,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,32,0,103,0,114,0,111,0,117,0,112,0,32,0,111,0,102,0,32,0,99,0,111,0,109,0,112,0,97,0,110,0,105,0,101,0,115,0,46,0,83,0,97,0,106,0,97,0,32,0,84,0,121,0,112,0,101,0,119,0,111,0,114,0,107,0,115,0,65,0,97,0,114,0,111,0,110,0,32,0,66,0,101,0,108,0,108,0,104,0,116,0,116,0,112,0,58,0,47,0,47,0,115,0,97,0,106,0,97,0,116,0,121,0,112,0,101,0,119,0,111,0,114,0,107,0,115,0,46,0,99,0,111,0,109,0,77,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,32,0,115,0,117,0,112,0,112,0,108,0,105,0,101,0,100,0,32,0,102,0,111,0,110,0,116,0,46,0,32,0,89,0,111,0,117,0,32,0,109,0,97,0,121,0,32,0,117,0,115,0,101,0,32,0,116,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,32,0,116,0,111,0,32,0,99,0,114,0,101,0,97,0,116,0,101,0,44,0,32,0,100,0,105,0,115,0,112,0,108,0,97,0,121,0,44,0,32,0,97,0,110,0,100,0,32,0,112,0,114,0,105,0,110,0,116,0,32,0,99,0,111,0,110,0,116,0,101,0,110,0,116,0,32,0,97,0,115,0,32,0,112,0,101,0,114,0,109,0,105,0,116,0,116,0,101,0,100,0,32,0,98,0,121,0,32,0,116,0,104,0,101,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,32,0,116,0,101,0,114,0,109,0,115,0,32,0,111,0,114,0,32,0,116,0,101,0,114,0,109,0,115,0,32,0,111,0,102,0,32,0,117,0,115,0,101,0,44,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,77,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,32,0,112,0,114,0,111,0,100,0,117,0,99,0,116,0,44,0,32,0,115,0,101,0,114,0,118,0,105,0,99,0,101,0,44,0,32,0,111,0,114,0,32,0,99,0,111,0,110,0,116,0,101,0,110,0,116,0,32,0,105,0,110,0,32,0,119,0,104,0,105,0,99,0,104,0,32,0,116,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,32,0,119,0,97,0,115,0,32,0,105,0,110,0,99,0,108,0,117,0,100,0,101,0,100,0,46,0,32,0,89,0,111,0,117,0,32,0,109,0,97,0,121,0,32,0,111,0,110,0,108,0,121,0,32,0,40,0,105,0,41,0,32,0,101,0,109,0,98,0,101,0,100,0,32,0,116,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,32,0,105,0,110,0,32,0,99,0,111,0,110,0,116,0,101,0,110,0,116,0,32,0,97,0,115,0,32,0,112,0,101,0,114,0,109,0,105,0,116,0,116,0,101,0,100,0,32,0,98,0,121,0,32,0,116,0,104,0,101,0,32,0,101,0,109,0,98,0,101,0,100,0,100,0,105,0,110,0,103,0,32,0,114,0,101,0,115,0,116,0,114,0,105,0,99,0,116,0,105,0,111,0,110,0,115,0,32,0,105,0,110,0,99,0,108,0,117,0,100,0,101,0,100,0,32,0,105,0,110,0,32,0,116,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,59,0,32,0,97,0,110,0,100,0,32,0,40,0,105,0,105,0,41,0,32,0,116,0,101,0,109,0,112,0,111,0,114,0,97,0,114,0,105,0,108,0,121,0,32,0,100,0,111,0,119,0,110,0,108,0,111,0,97,0,100,0,32,0,116,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,32,0,116,0,111,0,32,0,97,0,32,0,112,0,114,0,105,0,110,0,116,0,101,0,114,0,32,0,111,0,114,0,32,0,111,0,116,0,104,0,101,0,114,0,32,0,111,0,117,0,116,0,112,0,117,0,116,0,32,0,100,0,101,0,118,0,105,0,99,0,101,0,32,0,116,0,111,0,32,0,104,0,101,0,108,0,112,0,32,0,112,0,114,0,105,0,110,0,116,0,32,0,99,0,111,0,110,0,116,0,101,0,110,0,116,0,46,0,32,0,65,0,110,0,121,0,32,0,111,0,116,0,104,0,101,0,114,0,32,0,117,0,115,0,101,0,32,0,105,0,115,0,32,0,112,0,114,0,111,0,104,0,105,0,98,0,105,0,116,0,101,0,100,0,46,0,10,0,32,0,10,0,84,0,104,0,101,0,32,0,102,0,111,0,108,0,108,0,111,0,119,0,105,0,110,0,103,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,44,0,32,0,98,0,97,0,115,0,101,0,100,0,32,0,111,0,110,0,32,0,116,0,104,0,101,0,32,0,83,0,73,0,76,0,32,0,79,0,112,0,101,0,110,0,32,0,70,0,111,0,110,0,116,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,32,0,40,0,104,0,116,0,116,0,112,0,115,0,58,0,47,0,47,0,115,0,99,0,114,0,105,0,112,0,116,0,115,0,46,0,115,0,105,0,108,0,46,0,111,0,114,0,103,0,47,0,79,0,70,0,76,0,41,0,44,0,32,0,97,0,112,0,112,0,108,0,105,0,101,0,115,0,32,0,116,0,111,0,32,0,116,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,46,0,32,0,65,0,100,0,100,0,105,0,116,0,105,0,111,0,110,0,97,0,108,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,32,0,116,0,101,0,114,0,109,0,115,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,102,0,111,0,117,0,110,0,100,0,32,0,111,0,110,0,32,0,116,0,104,0,101,0,32,0,71,0,105,0,116,0,72,0,117,0,98,0,32,0,114,0,101,0,112,0,111,0,115,0,105,0,116,0,111,0,114,0,121,0,32,0,102,0,111,0,114,0,32,0,116,0,104,0,105,0,115,0,32,0,102,0,111,0,110,0,116,0,32,0,40,0,104,0,116,0,116,0,112,0,115,0,58,0,47,0,47,0,103,0,105,0,116,0,104,0,117,0,98,0,46,0,99,0,111,0,109,0,47,0,109,0,105,0,99,0,114,0,111,0,115,0,111,0,102,0,116,0,47,0,99,0,97,0,115,0,99,0,97,0,100,0,105,0,97,0,45,0,99,0,111,0,100,0,101,0,47,0,98,0,108,0,111,0,98,0,47,0,109,0,97,0,115,0,116,0,101,0,114,0,47,0,76,0,73,0,67,0,69,0,78,0,83,0,69,0,41,0,46,0,10,0,32,0,10,0,80,0,101,0,114,0,109,0,105,0,115,0,115,0,105,0,111,0,110,0,32,0,105,0,115,0,32,0,104,0,101,0,114,0,101,0,98,0,121,0,32,0,103,0,114,0,97,0,110,0,116,0,101,0,100,0,44,0,32,0,102,0,114,0,101,0,101,0,32,0,111,0,102,0,32,0,99,0,104,0,97,0,114,0,103,0,101,0,44,0,32,0,116,0,111,0,32,0,97,0,110,0,121,0,32,0,112,0,101,0,114,0,115,0,111,0,110,0,32,0,111,0,98,0,116,0,97,0,105,0,110,0,105,0,110,0,103,0,32,0,97,0,32,0,99,0,111,0,112,0,121,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,44,0,32,0,116,0,111,0,32,0,117,0,115,0,101,0,44,0,32,0,115,0,116,0,117,0,100,0,121,0,44,0,32,0,99,0,111,0,112,0,121,0,44,0,32,0,109,0,101,0,114,0,103,0,101,0,44,0,32,0,101,0,109,0,98,0,101,0,100,0,44,0,32,0,109,0,111,0,100,0,105,0,102,0,121,0,44,0,32,0,114,0,101,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,44,0,32,0,97,0,110,0,100,0,32,0,115,0,101,0,108,0,108,0,32,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,97,0,110,0,100,0,32,0,117,0,110,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,99,0,111,0,112,0,105,0,101,0,115,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,44,0,32,0,115,0,117,0,98,0,106,0,101,0,99,0,116,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,102,0,111,0,108,0,108,0,111,0,119,0,105,0,110,0,103,0,32,0,99,0,111,0,110,0,100,0,105,0,116,0,105,0,111,0,110,0,115,0,58,0,10,0,32,0,10,0,49,0,41,0,32,0,78,0,101,0,105,0,116,0,104,0,101,0,114,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,110,0,111,0,114,0,32,0,97,0,110,0,121,0,32,0,111,0,102,0,32,0,105,0,116,0,115,0,32,0,105,0,110,0,100,0,105,0,118,0,105,0,100,0,117,0,97,0,108,0,32,0,99,0,111,0,109,0,112,0,111,0,110,0,101,0,110,0,116,0,115,0,44,0,32,0,105,0,110,0,32,0,79,0,114,0,105,0,103,0,105,0,110,0,97,0,108,0,32,0,111,0,114,0,32,0,77,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,115,0,44,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,115,0,111,0,108,0,100,0,32,0,98,0,121,0,32,0,105,0,116,0,115,0,101,0,108,0,102,0,46,0,10,0,32,0,10,0,50,0,41,0,32,0,79,0,114,0,105,0,103,0,105,0,110,0,97,0,108,0,32,0,111,0,114,0,32,0,77,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,115,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,109,0,97,0,121,0,32,0,98,0,101,0,32,0,98,0,117,0,110,0,100,0,108,0,101,0,100,0,44,0,32,0,114,0,101,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,100,0,32,0,97,0,110,0,100,0,47,0,111,0,114,0,32,0,115,0,111,0,108,0,100,0,32,0,119,0,105,0,116,0,104,0,32,0,97,0,110,0,121,0,32,0,115,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,44,0,32,0,112,0,114,0,111,0,118,0,105,0,100,0,101,0,100,0,32,0,116,0,104,0,97,0,116,0,32,0,101,0,97,0,99,0,104,0,32,0,99,0,111,0,112,0,121,0,32,0,99,0,111,0,110,0,116,0,97,0,105,0,110,0,115,0,32,0,116,0,104,0,101,0,32,0,97,0,98,0,111,0,118,0,101,0,32,0,99,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,110,0,111,0,116,0,105,0,99,0,101,0,32,0,97,0,110,0,100,0,32,0,116,0,104,0,105,0,115,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,46,0,32,0,84,0,104,0,101,0,115,0,101,0,32,0,99,0,97,0,110,0,32,0,98,0,101,0,32,0,105,0,110,0,99,0,108,0,117,0,100,0,101,0,100,0,32,0,101,0,105,0,116,0,104,0,101,0,114,0,32,0,97,0,115,0,32,0,115,0,116,0,97,0,110,0,100,0,45,0,97,0,108,0,111,0,110,0,101,0,32,0,116,0,101,0,120,0,116,0,32,0,102,0,105,0,108,0,101,0,115,0,44,0,32,0,104,0,117,0,109,0,97,0,110,0,45,0,114,0,101,0,97,0,100,0,97,0,98,0,108,0,101,0,32,0,104,0,101,0,97,0,100,0,101,0,114,0,115,0,32,0,111,0,114,0,32,0,105,0,110,0,32,0,116,0,104,0,101,0,32,0,97,0,112,0,112,0,114,0,111,0,112,0,114,0,105,0,97,0,116,0,101,0,32,0,109,0,97,0,99,0,104,0,105,0,110,0,101,0,45,0,114,0,101,0,97,0,100,0,97,0,98,0,108,0,101,0,32,0,109,0,101,0,116,0,97,0,100,0,97,0,116,0,97,0,32,0,102,0,105,0,101,0,108,0,100,0,115,0,32,0,119,0,105,0,116,0,104,0,105,0,110,0,32,0,116,0,101,0,120,0,116,0,32,0,111,0,114,0,32,0,98,0,105,0,110,0,97,0,114,0,121,0,32,0,102,0,105,0,108,0,101,0,115,0,32,0,97,0,115,0,32,0,108,0,111,0,110,0,103,0,32,0,97,0,115,0,32,0,116,0,104,0,111,0,115,0,101,0,32,0,102,0,105,0,101,0,108,0,100,0,115,0,32,0,99,0,97,0,110,0,32,0,98,0,101,0,32,0,101,0,97,0,115,0,105,0,108,0,121,0,32,0,118,0,105,0,101,0,119,0,101,0,100,0,32,0,98,0,121,0,32,0,116,0,104,0,101,0,32,0,117,0,115,0,101,0,114,0,46,0,10,0,32,0,10,0,51,0,41,0,32,0,78,0,111,0,32,0,77,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,109,0,97,0,121,0,32,0,117,0,115,0,101,0,32,0,116,0,104,0,101,0,32,0,82,0,101,0,115,0,101,0,114,0,118,0,101,0,100,0,32,0,70,0,111,0,110,0,116,0,32,0,78,0,97,0,109,0,101,0,40,0,115,0,41,0,32,0,117,0,110,0,108,0,101,0,115,0,115,0,32,0,101,0,120,0,112,0,108,0,105,0,99,0,105,0,116,0,32,0,119,0,114,0,105,0,116,0,116,0,101,0,110,0,32,0,112,0,101,0,114,0,109,0,105,0,115,0,115,0,105,0,111,0,110,0,32,0,105,0,115,0,32,0,103,0,114,0,97,0,110,0,116,0,101,0,100,0,32,0,98,0,121,0,32,0,116,0,104,0,101,0,32,0,99,0,111,0,114,0,114,0,101,0,115,0,112,0,111,0,110,0,100,0,105,0,110,0,103,0,32,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,72,0,111,0,108,0,100,0,101,0,114,0,46,0,32,0,84,0,104,0,105,0,115,0,32,0,114,0,101,0,115,0,116,0,114,0,105,0,99,0,116,0,105,0,111,0,110,0,32,0,111,0,110,0,108,0,121,0,32,0,97,0,112,0,112,0,108,0,105,0,101,0,115,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,112,0,114,0,105,0,109,0,97,0,114,0,121,0,32,0,102,0,111,0,110,0,116,0,32,0,110,0,97,0,109,0,101,0,32,0,97,0,115,0,32,0,112,0,114,0,101,0,115,0,101,0,110,0,116,0,101,0,100,0,32,0,116,0,111,0,32,0,116,0,104,0,101,0,32,0,117,0,115,0,101,0,114,0,115,0,46,0,10,0,32,0,10,0,52,0,41,0,32,0,84,0,104,0,101,0,32,0,110,0,97,0,109,0,101,0,40,0,115,0,41,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,72,0,111,0,108,0,100,0,101,0,114,0,40,0,115,0,41,0,32,0,111,0,114,0,32,0,116,0,104,0,101,0,32,0,65,0,117,0,116,0,104,0,111,0,114,0,40,0,115,0,41,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,32,0,115,0,104,0,97,0,108,0,108,0,32,0,110,0,111,0,116,0,32,0,98,0,101,0,32,0,117,0,115,0,101,0,100,0,32,0,116,0,111,0,32,0,112,0,114,0,111,0,109,0,111,0,116,0,101,0,44,0,32,0,101,0,110,0,100,0,111,0,114,0,115,0,101,0,32,0,111,0,114,0,32,0,97,0,100,0,118,0,101,0,114,0,116,0,105,0,115,0,101,0,32,0,97,0,110,0,121,0,32,0,77,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,86,0,101,0,114,0,115,0,105,0,111,0,110,0,44,0,32,0,101,0,120,0,99,0,101,0,112,0,116,0,32,0,116,0,111,0,32,0,97,0,99,0,107,0,110,0,111,0,119,0,108,0,101,0,100,0,103,0,101,0,32,0,116,0,104,0,101,0,32,0,99,0,111,0,110,0,116,0,114,0,105,0,98,0,117,0,116,0,105,0,111,0,110,0,40,0,115,0,41,0,32,0,111,0,102,0,32,0,116,0,104,0,101,0,32,0,67,0,111,0,112,0,121,0,114,0,105,0,103,0,104,0,116,0,32,0,72,0,111,0,108,0,100,0,101,0,114,0,40,0,115,0,41,0,32,0,97,0,110,0,100,0,32,0,116,0,104,0,101,0,32,0,65,0,117,0,116,0,104,0,111,0,114,0,40,0,115,0,41,0,32,0,111,0,114,0,32,0,119,0,105,0,116,0,104,0,32,0,116,0,104,0,101,0,105,0,114,0,32,0,101,0,120,0,112,0,108,0,105,0,99,0,105,0,116,0,32,0,119,0,114,0,105,0,116,0,116,0,101,0,110,0,32,0,112,0,101,0,114,0,109,0,105,0,115,0,115,0,105,0,111,0,110,0,46,0,10,0,32,0,10,0,53,0,41,0,32,0,84,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,44,0,32,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,32,0,111,0,114,0,32,0,117,0,110,0,109,0,111,0,100,0,105,0,102,0,105,0,101,0,100,0,44,0,32,0,105,0,110,0,32,0,112,0,97,0,114,0,116,0,32,0,111,0,114,0,32,0,105,0,110,0,32,0,119,0,104,0,111,0,108,0,101,0,44,0,32,0,109,0,117,0,115,0,116,0,32,0,98,0,101,0,32,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,100,0,32,0,101,0,110,0,116,0,105,0,114,0,101,0,108,0,121,0,32,0,117,0,110,0,100,0,101,0,114,0,32,0,116,0,104,0,105,0,115,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,44,0,32,0,97,0,110,0,100,0,32,0,109,0,117,0,115,0,116,0,32,0,110,0,111,0,116,0,32,0,98,0,101,0,32,0,100,0,105,0,115,0,116,0,114,0,105,0,98,0,117,0,116,0,101,0,100,0,32,0,117,0,110,0,100,0,101,0,114,0,32,0,97,0,110,0,121,0,32,0,111,0,116,0,104,0,101,0,114,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,46,0,32,0,84,0,104,0,101,0,32,0,114,0,101,0,113,0,117,0,105,0,114,0,101,0,109,0,101,0,110,0,116,0,32,0,102,0,111,0,114,0,32,0,102,0,111,0,110,0,116,0,115,0,32,0,116,0,111,0,32,0,114,0,101,0,109,0,97,0,105,0,110,0,32,0,117,0,110,0,100,0,101,0,114,0,32,0,116,0,104,0,105,0,115,0,32,0,108,0,105,0,99,0,101,0,110,0,115,0,101,0,32,0,100,0,111,0,101,0,115,0,32,0,110,0,111,0,116,0,32,0,97,0,112,0,112,0,108,0,121,0,32,0,116,0,111,0,32,0,97,0,110,0,121,0,32,0,100,0,111,0,99,0,117,0,109,0,101,0,110,0,116,0,32,0,99,0,114,0,101,0,97,0,116,0,101,0,100,0,32,0,117,0,115,0,105,0,110,0,103,0,32,0,116,0,104,0,101,0,32,0,70,0,111,0,110,0,116,0,32,0,83,0,111,0,102,0,116,0,119,0,97,0,114,0,101,0,46,0,10,0,32,0,10,0,84,0,72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69,0,32,0,73,0,83,0,32,0,80,0,82,0,79,0,86,0,73,0,68,0,69,0,68,0,32,0,34,0,65,0,83,0,32,0,73,0,83,0,34,0,44,0,32,0,87,0,73,0,84,0,72,0,79,0,85,0,84,0,32,0,87,0,65,0,82,0,82,0,65,0,78,0,84,0,89,0,32,0,79,0,70,0,32,0,65,0,78,0,89,0,32,0,75,0,73,0,78,0,68,0,44,0,32,0,69,0,88,0,80,0,82,0,69,0,83,0,83,0,32,0,79,0,82,0,32,0,73,0,77,0,80,0,76,0,73,0,69,0,68,0,44,0,32,0,73,0,78,0,67,0,76,0,85,0,68,0,73,0,78,0,71,0,32,0,66,0,85,0,84,0,32,0,78,0,79,0,84,0,32,0,76,0,73,0,77,0,73,0,84,0,69,0,68,0,32,0,84,0,79,0,32,0,65,0,78,0,89,0,32,0,87,0,65,0,82,0,82,0,65,0,78,0,84,0,73,0,69,0,83,0,32,0,79,0,70,0,32,0,77,0,69,0,82,0,67,0,72,0,65,0,78,0,84,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,44,0,32,0,70,0,73,0,84,0,78,0,69,0,83,0,83,0,32,0,70,0,79,0,82,0,32,0,65,0,32,0,80,0,65,0,82,0,84,0,73,0,67,0,85,0,76,0,65,0,82,0,32,0,80,0,85,0,82,0,80,0,79,0,83,0,69,0,32,0,65,0,78,0,68,0,32,0,78,0,79,0,78,0,73,0,78,0,70,0,82,0,73,0,78,0,71,0,69,0,77,0,69,0,78,0,84,0,32,0,79,0,70,0,32,0,67,0,79,0,80,0,89,0,82,0,73,0,71,0,72,0,84,0,44,0,32,0,80,0,65,0,84,0,69,0,78,0,84,0,44,0,32,0,84,0,82,0,65,0,68,0,69,0,77,0,65,0,82,0,75,0,44,0,32,0,79,0,82,0,32,0,79,0,84,0,72,0,69,0,82,0,32,0,82,0,73,0,71,0,72,0,84,0,46,0,32,0,73,0,78,0,32,0,78,0,79,0,32,0,69,0,86,0,69,0,78,0,84,0,32,0,83,0,72,0,65,0,76,0,76,0,32,0,84,0,72,0,69,0,32,0,67,0,79,0,80,0,89,0,82,0,73,0,71,0,72,0,84,0,32,0,72,0,79,0,76,0,68,0,69,0,82,0,32,0,66,0,69,0,32,0,76,0,73,0,65,0,66,0,76,0,69,0,32,0,70,0,79,0,82,0,32,0,65,0,78,0,89,0,32,0,67,0,76,0,65,0,73,0,77,0,44,0,32,0,68,0,65,0,77,0,65,0,71,0,69,0,83,0,32,0,79,0,82,0,32,0,79,0,84,0,72,0,69,0,82,0,32,0,76,0,73,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,44,0,32,0,73,0,78,0,67,0,76,0,85,0,68,0,73,0,78,0,71,0,32,0,65,0,78,0,89,0,32,0,71,0,69,0,78,0,69,0,82,0,65,0,76,0,44,0,32,0,83,0,80,0,69,0,67,0,73,0,65,0,76,0,44,0,32,0,73,0,78,0,68,0,73,0,82,0,69,0,67,0,84,0,44,0,32,0,73,0,78,0,67,0,73,0,68,0,69,0,78,0,84,0,65,0,76,0,44,0,32,0,79,0,82,0,32,0,67,0,79,0,78,0,83,0,69,0,81,0,85,0,69,0,78,0,84,0,73,0,65,0,76,0,32,0,68,0,65,0,77,0,65,0,71,0,69,0,83,0,44,0,32,0,87,0,72,0,69,0,84,0,72,0,69,0,82,0,32,0,73,0,78,0,32,0,65,0,78,0,32,0,65,0,67,0,84,0,73,0,79,0,78,0,32,0,79,0,70,0,32,0,67,0,79,0,78,0,84,0,82,0,65,0,67,0,84,0,44,0,32,0,84,0,79,0,82,0,84,0,32,0,79,0,82,0,32,0,79,0,84,0,72,0,69,0,82,0,87,0,73,0,83,0,69,0,44,0,32,0,65,0,82,0,73,0,83,0,73,0,78,0,71,0,32,0,70,0,82,0,79,0,77,0,44,0,32,0,79,0,85,0,84,0,32,0,79,0,70,0,32,0,84,0,72,0,69,0,32,0,85,0,83,0,69,0,32,0,79,0,82,0,32,0,73,0,78,0,65,0,66,0,73,0,76,0,73,0,84,0,89,0,32,0,84,0,79,0,32,0,85,0,83,0,69,0,32,0,84,0,72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69,0,32,0,79,0,82,0,32,0,70,0,82,0,79,0,77,0,32,0,79,0,84,0,72,0,69,0,82,0,32,0,68,0,69,0,65,0,76,0,73,0,78,0,71,0,83,0,32,0,73,0,78,0,32,0,84,0,72,0,69,0,32,0,70,0,79,0,78,0,84,0,32,0,83,0,79,0,70,0,84,0,87,0,65,0,82,0,69,0,46,0,104,0,116,0,116,0,112,0,115,0,58,0,47,0,47,0,115,0,99,0,114,0,105,0,112,0,116,0,115,0,46,0,115,0,105,0,108,0,46,0,111,0,114,0,103,0,47,0,79,0,70,0,76,0,87,0,101,0,105,0,103,0,104,0,116,0,69,0,120,0,116,0,114,0,97,0,76,0,105,0,103,0,104,0,116,0,76,0,105,0,103,0,104,0,116,0,83,0,101,0,109,0,105,0,76,0,105,0,103,0,104,0,116,0,83,0,101,0,109,0,105,0,66,0,111,0,108,0,100,0,66,0,111,0,108,0,100,0,0,0,0,2,0,0,0,0,0,0,255,156,0,50,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,6,88,0,0,0,36,0,201,1,2,6,97,6,98,6,99,6,100,6,101,6,102,0,199,6,103,6,104,6,105,6,106,6,107,0,98,6,108,0,173,6,109,1,16,1,17,0,99,1,18,0,174,0,144,1,19,0,37,0,38,0,253,0,255,0,100,1,20,1,21,0,39,0,233,1,22,1,23,0,40,0,101,1,24,1,25,0,200,6,110,6,111,6,112,6,113,6,114,0,202,1,31,6,115,0,203,6,116,1,34,1,35,6,117,6,118,6,119,6,120,0,41,0,42,0,248,1,40,1,41,6,121,1,43,0,43,1,44,6,122,1,46,0,44,1,47,0,204,1,48,0,205,0,206,0,250,6,123,0,207,6,124,1,51,1,52,1,53,0,45,1,54,0,46,6,125,0,47,1,56,1,57,6,126,1,59,0,226,0,48,0,49,1,60,1,61,6,127,1,63,6,128,0,102,0,50,0,208,1,65,0,209,6,129,6,130,6,131,6,132,6,133,0,103,6,134,0,211,6,135,1,73,6,136,6,137,6,138,6,139,6,140,1,79,1,80,6,141,6,142,0,145,1,83,0,175,0,176,0,51,0,237,0,52,0,53,1,84,1,85,6,143,0,54,1,87,0,228,0,251,1,88,6,144,6,145,6,146,0,55,1,92,1,93,6,147,6,148,0,56,0,212,1,96,0,213,0,104,6,149,0,214,6,150,1,99,6,151,6,152,6,153,6,154,6,155,1,105,1,106,1,107,1,108,1,109,0,57,6,156,0,58,1,111,1,112,1,113,1,114,0,59,0,60,0,235,1,115,0,187,6,157,1,117,6,158,6,159,6,160,0,61,1,121,0,230,1,122,1,123,1,124,1,125,1,126,1,127,1,128,6,161,0,68,0,105,1,130,6,162,6,163,6,164,6,165,6,166,6,167,0,107,6,168,6,169,6,170,6,171,6,172,0,108,6,173,0,106,6,174,1,144,1,145,0,110,1,146,0,109,0,160,1,147,0,69,0,70,0,254,1,0,0,111,1,148,1,149,0,71,0,234,1,150,1,1,0,72,0,112,1,151,1,152,0,114,6,175,6,176,6,177,6,178,6,179,0,115,1,158,6,180,0,113,6,181,1,161,1,162,6,182,6,183,6,184,6,185,6,186,0,73,0,74,0,249,1,168,1,169,6,187,1,171,0,75,1,172,6,188,1,174,0,76,0,215,0,116,1,176,0,118,0,119,6,189,0,117,6,190,1,179,1,180,1,181,1,182,0,77,6,191,1,184,0,78,6,192,1,186,0,79,1,187,1,188,6,193,1,190,0,227,0,80,0,81,1,191,1,192,1,193,6,194,1,195,6,195,0,120,0,82,0,121,1,197,0,123,6,196,6,197,6,198,6,199,6,200,0,124,6,201,0,122,6,202,1,205,6,203,6,204,6,205,6,206,6,207,1,211,1,212,6,208,6,209,0,161,1,215,0,125,0,177,0,83,0,238,0,84,0,85,1,216,1,217,6,210,0,86,1,219,0,229,0,252,1,220,6,211,0,137,1,222,0,87,1,223,1,224,6,212,6,213,6,214,0,88,0,126,1,228,0,128,0,129,6,215,0,127,6,216,1,231,6,217,6,218,6,219,6,220,6,221,1,237,1,238,1,239,1,240,1,241,0,89,6,222,0,90,1,243,1,244,1,245,1,246,0,91,0,92,0,236,1,247,0,186,6,223,1,249,6,224,6,225,6,226,0,93,1,253,0,231,1,254,1,255,2,0,2,1,2,2,2,3,2,4,2,5,2,6,2,7,0,157,0,158,6,227,6,228,6,229,6,230,6,231,6,232,6,233,6,234,6,235,6,236,6,237,6,238,6,239,6,240,6,241,6,242,6,243,6,244,6,245,6,246,6,247,6,248,6,249,6,250,6,251,6,252,6,253,6,254,6,255,7,0,7,1,7,2,7,3,7,4,7,5,7,6,7,7,7,8,7,9,7,10,7,11,7,12,7,13,7,14,7,15,7,16,7,17,7,18,7,19,7,20,7,21,7,22,7,23,7,24,7,25,7,26,7,27,7,28,7,29,7,30,7,31,7,32,7,33,7,34,7,35,7,36,7,37,7,38,7,39,7,40,7,41,7,42,7,43,7,44,7,45,7,46,7,47,7,48,7,49,7,50,7,51,7,52,7,53,7,54,7,55,7,56,7,57,7,58,7,59,7,60,7,61,7,62,7,63,7,64,7,65,7,66,7,67,7,68,7,69,7,70,7,71,7,72,7,73,7,74,7,75,7,76,7,77,7,78,7,79,7,80,7,81,7,82,7,83,7,84,7,85,7,86,7,87,7,88,7,89,7,90,7,91,7,92,7,93,7,94,7,95,7,96,7,97,7,98,7,99,7,100,7,101,7,102,7,103,7,104,7,105,7,106,7,107,7,108,7,109,7,110,7,111,7,112,7,113,7,114,7,115,7,116,7,117,7,118,7,119,2,157,2,158,2,159,7,120,2,160,2,161,2,162,2,163,2,164,2,165,2,166,2,167,2,168,2,169,2,170,2,171,2,172,2,173,2,174,2,175,2,176,2,177,2,178,7,121,2,179,2,180,2,181,2,182,2,183,2,184,2,185,2,186,2,187,7,122,2,189,2,190,2,191,2,192,2,193,2,194,2,195,2,196,2,197,2,198,2,199,7,123,2,200,2,201,2,202,0,155,2,203,7,124,2,205,2,206,2,207,2,208,2,209,2,210,2,211,2,212,2,213,2,214,2,215,2,216,2,217,2,218,2,219,2,220,2,221,2,222,7,125,0,19,0,20,0,21,0,22,0,23,0,24,0,25,0,26,0,27,0,28,2,224,7,126,7,127,7,128,7,129,7,130,7,131,7,132,7,133,7,134,7,135,2,235,2,236,2,237,2,238,2,239,2,240,2,241,2,242,2,243,2,244,2,245,2,246,2,247,2,248,2,249,2,250,2,251,2,252,2,253,2,254,7,136,7,137,7,138,7,139,7,140,7,141,7,142,7,143,7,144,7,145,0,188,0,244,0,245,0,246,3,6,3,7,3,8,3,9,0,17,0,15,0,29,0,30,0,171,0,4,0,163,0,34,0,162,0,195,0,135,0,13,7,146,0,6,3,11,7,147,0,18,0,63,0,11,0,12,0,94,0,96,0,62,0,64,7,148,7,149,7,150,7,151,0,16,7,152,0,178,0,179,7,153,7,154,7,155,0,66,3,21,0,196,0,197,0,180,0,181,0,182,0,183,3,22,0,169,0,170,0,190,0,191,0,5,0,10,3,25,3,26,3,27,3,28,3,29,3,30,3,31,3,32,3,33,3,34,3,35,3,36,3,37,3,38,3,39,3,40,3,41,3,42,3,43,3,44,3,45,3,46,3,47,3,48,3,49,3,50,3,51,3,52,3,53,3,54,3,55,3,56,3,57,3,58,3,59,3,60,3,61,3,62,3,63,3,64,3,65,3,66,3,67,3,68,3,69,3,70,3,71,3,72,3,73,7,156,7,157,3,76,3,77,3,78,3,79,3,80,3,81,3,82,3,83,3,84,3,85,3,86,3,87,3,88,7,158,7,159,0,3,7,160,3,92,7,161,7,162,7,163,0,132,7,164,0,189,0,7,3,97,7,165,7,166,0,166,0,247,7,167,7,168,7,169,7,170,3,104,7,171,7,172,7,173,3,108,7,174,7,175,7,176,7,177,7,178,0,133,7,179,7,180,7,181,0,150,7,182,7,183,3,119,7,184,3,121,3,122,7,185,7,186,0,14,0,239,0,240,0,184,0,32,0,143,0,33,0,31,0,149,0,148,0,147,0,167,0,97,0,164,0,65,0,146,3,125,0,156,7,187,7,188,0,154,0,153,0,165,7,189,0,152,3,129,0,8,0,198,7,190,7,191,7,192,7,193,7,194,7,195,7,196,7,197,7,198,7,199,7,200,7,201,7,202,7,203,7,204,7,205,7,206,7,207,7,208,7,209,7,210,7,211,7,212,7,213,7,214,7,215,7,216,7,217,7,218,7,219,7,220,7,221,7,222,7,223,7,224,7,225,7,226,7,227,7,228,7,229,7,230,7,231,7,232,7,233,7,234,7,235,7,236,7,237,7,238,7,239,7,240,7,241,7,242,7,243,7,244,7,245,7,246,7,247,7,248,7,249,7,250,7,251,7,252,7,253,7,254,7,255,8,0,8,1,8,2,8,3,8,4,8,5,8,6,8,7,8,8,8,9,8,10,8,11,8,12,8,13,0,185,8,14,8,15,8,16,8,17,8,18,8,19,8,20,8,21,8,22,8,23,8,24,8,25,8,26,8,27,8,28,8,29,8,30,8,31,8,32,8,33,8,34,8,35,8,36,8,37,8,38,8,39,8,40,8,41,8,42,8,43,8,44,8,45,8,46,8,47,8,48,8,49,8,50,8,51,8,52,8,53,8,54,8,55,8,56,8,57,8,58,8,59,8,60,8,61,8,62,8,63,8,64,8,65,8,66,8,67,8,68,8,69,8,70,8,71,8,72,8,73,8,74,8,75,8,76,8,77,8,78,8,79,8,80,8,81,8,82,8,83,8,84,8,85,8,86,8,87,8,88,8,89,8,90,8,91,8,92,8,93,8,94,8,95,8,96,8,97,8,98,8,99,8,100,8,101,8,102,8,103,8,104,8,105,8,106,8,107,8,108,8,109,8,110,8,111,8,112,8,113,8,114,8,115,8,116,8,117,8,118,8,119,8,120,8,121,8,122,8,123,8,124,8,125,8,126,8,127,8,128,8,129,8,130,8,131,8,132,8,133,8,134,8,135,8,136,8,137,8,138,8,139,8,140,8,141,8,142,8,143,8,144,8,145,8,146,8,147,8,148,8,149,8,150,8,151,8,152,8,153,8,154,8,155,8,156,8,157,8,158,8,159,8,160,8,161,8,162,8,163,8,164,8,165,8,166,8,167,8,168,8,169,8,170,8,171,8,172,8,173,8,174,8,175,8,176,8,177,8,178,8,179,8,180,8,181,8,182,8,183,8,184,8,185,8,186,8,187,8,188,8,189,8,190,8,191,8,192,8,193,8,194,8,195,8,196,8,197,8,198,8,199,8,200,8,201,8,202,8,203,8,204,8,205,8,206,8,207,8,208,8,209,8,210,8,211,8,212,8,213,8,214,8,215,8,216,8,217,8,218,8,219,8,220,8,221,8,222,8,223,8,224,8,225,8,226,8,227,8,228,8,229,8,230,8,231,8,232,8,233,8,234,8,235,8,236,8,237,8,238,8,239,8,240,8,241,8,242,8,243,8,244,8,245,8,246,8,247,8,248,0,35,0,9,0,136,0,134,0,139,0,138,8,249,0,140,8,250,0,131,4,191,4,192,0,95,0,232,0,130,8,251,0,194,8,252,4,195,8,253,8,254,8,255,9,0,9,1,9,2,9,3,9,4,9,5,9,6,9,7,9,8,9,9,9,10,9,11,9,12,9,13,9,14,9,15,9,16,9,17,9,18,9,19,9,20,9,21,9,22,9,23,9,24,9,25,9,26,9,27,4,227,4,228,4,229,4,230,4,231,4,232,4,233,4,234,4,235,4,236,4,237,4,238,4,239,4,240,4,241,4,242,4,243,4,244,4,245,4,246,4,247,4,248,4,249,4,250,4,251,4,252,4,253,4,254,4,255,5,0,5,1,5,2,5,3,5,4,5,5,5,6,5,7,5,8,5,9,5,10,5,11,5,12,5,13,5,14,5,15,5,16,5,17,5,18,5,19,5,20,5,21,5,22,5,23,5,24,5,25,5,26,5,27,5,28,5,29,5,30,5,31,5,32,5,33,5,34,5,35,5,36,5,37,5,38,5,39,5,40,5,41,9,28,9,29,9,30,9,31,9,32,9,33,9,34,9,35,9,36,9,37,9,38,9,39,9,40,9,41,9,42,9,43,9,44,9,45,9,46,9,47,9,48,9,49,9,50,9,51,9,52,9,53,9,54,9,55,9,56,9,57,9,58,9,59,9,60,9,61,9,62,9,63,9,64,9,65,9,66,9,67,9,68,9,69,9,70,9,71,9,72,9,73,9,74,9,75,9,76,9,77,9,78,9,79,9,80,9,81,9,82,9,83,9,84,9,85,9,86,9,87,9,88,9,89,9,90,9,91,9,92,9,93,9,94,9,95,9,96,9,97,9,98,9,99,9,100,9,101,9,102,9,103,9,104,9,105,9,106,9,107,9,108,9,109,9,110,9,111,9,112,9,113,9,114,9,115,9,116,9,117,9,118,9,119,9,120,9,121,9,122,9,123,9,124,9,125,9,126,9,127,9,128,9,129,9,130,9,131,9,132,9,133,9,134,9,135,9,136,9,137,9,138,9,139,9,140,9,141,9,142,9,143,9,144,9,145,9,146,9,147,9,148,9,149,9,150,9,151,9,152,9,153,9,154,9,155,9,156,9,157,9,158,9,159,9,160,9,161,9,162,9,163,9,164,9,165,9,166,9,167,9,168,9,169,9,170,9,171,9,172,9,173,9,174,9,175,9,176,9,177,9,178,9,179,9,180,9,181,9,182,9,183,9,184,9,185,9,186,9,187,9,188,9,189,9,190,9,191,9,192,9,193,9,194,9,195,9,196,9,197,9,198,9,199,9,200,9,201,9,202,9,203,9,204,9,205,9,206,9,207,9,208,9,209,9,210,9,211,9,212,9,213,9,214,9,215,9,216,9,217,9,218,9,219,9,220,9,221,9,222,9,223,9,224,9,225,9,226,9,227,9,228,9,229,9,230,9,231,9,232,9,233,9,234,9,235,9,236,9,237,9,238,9,239,9,240,9,241,9,242,9,243,9,244,9,245,9,246,9,247,9,248,9,249,9,250,9,251,9,252,9,253,9,254,9,255,10,0,10,1,10,2,10,3,10,4,10,5,10,6,10,7,10,8,10,9,10,10,10,11,10,12,10,13,10,14,10,15,10,16,10,17,10,18,10,19,10,20,10,21,10,22,10,23,10,24,10,25,10,26,10,27,10,28,10,29,10,30,10,31,10,32,10,33,10,34,10,35,10,36,6,51,6,52,10,37,10,38,10,39,10,40,10,41,6,58,10,42,6,60,10,43,10,44,6,63,10,45,10,46,10,47,10,48,10,49,0,142,0,220,0,67,0,141,0,223,0,216,0,225,0,219,0,221,0,217,0,218,0,222,0,224,10,50,10,51,6,71,6,72,10,52,10,53,10,54,10,55,10,56,6,78,10,57,6,80,10,58,6,82,6,83,10,59,6,85,6,86,6,87,10,60,10,61,6,90,6,91,10,62,6,93,6,94,6,95,6,96,6,65,98,114,101,118,101,11,65,98,114,101,118,101,97,99,117,116,101,14,65,98,114,101,118,101,100,111,116,98,101,108,111,119,11,65,98,114,101,118,101,103,114,97,118,101,15,65,98,114,101,118,101,104,111,111,107,97,98,111,118,101,11,65,98,114,101,118,101,116,105,108,100,101,6,65,99,97,114,111,110,16,65,99,105,114,99,117,109,102,108,101,120,97,99,117,116,101,19,65,99,105,114,99,117,109,102,108,101,120,100,111,116,98,101,108,111,119,16,65,99,105,114,99,117,109,102,108,101,120,103,114,97,118,101,20,65,99,105,114,99,117,109,102,108,101,120,104,111,111,107,97,98,111,118,101,16,65,99,105,114,99,117,109,102,108,101,120,116,105,108,100,101,9,65,100,111,116,98,101,108,111,119,10,65,104,111,111,107,97,98,111,118,101,7,65,109,97,99,114,111,110,7,65,111,103,111,110,101,107,10,65,114,105,110,103,97,99,117,116,101,7,65,69,97,99,117,116,101,11,67,99,105,114,99,117,109,102,108,101,120,10,67,100,111,116,97,99,99,101,110,116,6,68,99,97,114,111,110,6,68,99,114,111,97,116,6,69,98,114,101,118,101,6,69,99,97,114,111,110,16,69,99,105,114,99,117,109,102,108,101,120,97,99,117,116,101,19,69,99,105,114,99,117,109,102,108,101,120,100,111,116,98,101,108,111,119,16,69,99,105,114,99,117,109,102,108,101,120,103,114,97,118,101,20,69,99,105,114,99,117,109,102,108,101,120,104,111,111,107,97,98,111,118,101,16,69,99,105,114,99,117,109,102,108,101,120,116,105,108,100,101,10,69,100,111,116,97,99,99,101,110,116,9,69,100,111,116,98,101,108,111,119,10,69,104,111,111,107,97,98,111,118,101,7,69,109,97,99,114,111,110,7,69,111,103,111,110,101,107,5,69,111,112,101,110,3,69,115,104,6,69,116,105,108,100,101,3,69,122,104,6,71,99,97,114,111,110,11,71,99,105,114,99,117,109,102,108,101,120,12,71,99,111,109,109,97,97,99,99,101,110,116,10,71,100,111,116,97,99,99,101,110,116,4,72,98,97,114,6,72,99,97,114,111,110,11,72,99,105,114,99,117,109,102,108,101,120,2,73,74,6,73,98,114,101,118,101,9,73,100,111,116,98,101,108,111,119,10,73,104,111,111,107,97,98,111,118,101,7,73,109,97,99,114,111,110,7,73,111,103,111,110,101,107,6,73,116,105,108,100,101,11,74,99,105,114,99,117,109,102,108,101,120,12,75,99,111,109,109,97,97,99,99,101,110,116,6,76,97,99,117,116,101,6,76,99,97,114,111,110,12,76,99,111,109,109,97,97,99,99,101,110,116,4,76,100,111,116,6,78,97,99,117,116,101,6,78,99,97,114,111,110,12,78,99,111,109,109,97,97,99,99,101,110,116,3,69,110,103,9,78,104,111,111,107,108,101,102,116,6,79,98,114,101,118,101,16,79,99,105,114,99,117,109,102,108,101,120,97,99,117,116,101,19,79,99,105,114,99,117,109,102,108,101,120,100,111,116,98,101,108,111,119,16,79,99,105,114,99,117,109,102,108,101,120,103,114,97,118,101,20,79,99,105,114,99,117,109,102,108,101,120,104,111,111,107,97,98,111,118,101,16,79,99,105,114,99,117,109,102,108,101,120,116,105,108,100,101,9,79,100,111,116,98,101,108,111,119,10,79,104,111,111,107,97,98,111,118,101,5,79,104,111,114,110,10,79,104,111,114,110,97,99,117,116,101,13,79,104,111,114,110,100,111,116,98,101,108,111,119,10,79,104,111,114,110,103,114,97,118,101,14,79,104,111,114,110,104,111,111,107,97,98,111,118,101,10,79,104,111,114,110,116,105,108,100,101,13,79,104,117,110,103,97,114,117,109,108,97,117,116,7,79,109,97,99,114,111,110,7,79,111,103,111,110,101,107,5,79,111,112,101,110,11,79,115,108,97,115,104,97,99,117,116,101,6,82,97,99,117,116,101,6,82,99,97,114,111,110,12,82,99,111,109,109,97,97,99,99,101,110,116,6,83,97,99,117,116,101,11,83,99,105,114,99,117,109,102,108,101,120,12,83,99,111,109,109,97,97,99,99,101,110,116,10,71,101,114,109,97,110,100,98,108,115,5,83,99,104,119,97,4,84,98,97,114,6,84,99,97,114,111,110,8,84,99,101,100,105,108,108,97,12,84,99,111,109,109,97,97,99,99,101,110,116,6,85,98,114,101,118,101,9,85,100,111,116,98,101,108,111,119,10,85,104,111,111,107,97,98,111,118,101,5,85,104,111,114,110,10,85,104,111,114,110,97,99,117,116,101,13,85,104,111,114,110,100,111,116,98,101,108,111,119,10,85,104,111,114,110,103,114,97,118,101,14,85,104,111,114,110,104,111,111,107,97,98,111,118,101,10,85,104,111,114,110,116,105,108,100,101,13,85,104,117,110,103,97,114,117,109,108,97,117,116,7,85,109,97,99,114,111,110,7,85,111,103,111,110,101,107,5,85,114,105,110,103,6,85,116,105,108,100,101,7,86,116,117,114,110,101,100,6,87,97,99,117,116,101,11,87,99,105,114,99,117,109,102,108,101,120,9,87,100,105,101,114,101,115,105,115,6,87,103,114,97,118,101,11,89,99,105,114,99,117,109,102,108,101,120,9,89,100,111,116,98,101,108,111,119,6,89,103,114,97,118,101,10,89,104,111,111,107,97,98,111,118,101,7,89,109,97,99,114,111,110,6,89,116,105,108,100,101,6,90,97,99,117,116,101,10,90,100,111,116,97,99,99,101,110,116,16,73,97,99,117,116,101,95,74,46,108,111,99,108,78,76,68,14,67,97,99,117,116,101,46,108,111,99,108,80,76,75,14,78,97,99,117,116,101,46,108,111,99,108,80,76,75,14,79,97,99,117,116,101,46,108,111,99,108,80,76,75,14,83,97,99,117,116,101,46,108,111,99,108,80,76,75,14,90,97,99,117,116,101,46,108,111,99,108,80,76,75,6,73,115,109,97,108,108,6,97,98,114,101,118,101,11,97,98,114,101,118,101,97,99,117,116,101,14,97,98,114,101,118,101,100,111,116,98,101,108,111,119,11,97,98,114,101,118,101,103,114,97,118,101,15,97,98,114,101,118,101,104,111,111,107,97,98,111,118,101,11,97,98,114,101,118,101,116,105,108,100,101,6,97,99,97,114,111,110,16,97,99,105,114,99,117,109,102,108,101,120,97,99,117,116,101,19,97,99,105,114,99,117,109,102,108,101,120,100,111,116,98,101,108,111,119,16,97,99,105,114,99,117,109,102,108,101,120,103,114,97,118,101,20,97,99,105,114,99,117,109,102,108,101,120,104,111,111,107,97,98,111,118,101,16,97,99,105,114,99,117,109,102,108,101,120,116,105,108,100,101,9,97,100,111,116,98,101,108,111,119,10,97,104,111,111,107,97,98,111,118,101,7,97,109,97,99,114,111,110,7,97,111,103,111,110,101,107,10,97,114,105,110,103,97,99,117,116,101,7,97,101,97,99,117,116,101,11,99,99,105,114,99,117,109,102,108,101,120,10,99,100,111,116,97,99,99,101,110,116,6,100,99,97,114,111,110,6,101,98,114,101,118,101,6,101,99,97,114,111,110,16,101,99,105,114,99,117,109,102,108,101,120,97,99,117,116,101,19,101,99,105,114,99,117,109,102,108,101,120,100,111,116,98,101,108,111,119,16,101,99,105,114,99,117,109,102,108,101,120,103,114,97,118,101,20,101,99,105,114,99,117,109,102,108,101,120,104,111,111,107,97,98,111,118,101,16,101,99,105,114,99,117,109,102,108,101,120,116,105,108,100,101,10,101,100,111,116,97,99,99,101,110,116,9,101,100,111,116,98,101,108,111,119,10,101,104,111,111,107,97,98,111,118,101,7,101,109,97,99,114,111,110,7,101,111,103,111,110,101,107,5,101,111,112,101,110,3,101,115,104,6,101,116,105,108,100,101,5,115,99,104,119,97,3,101,122,104,6,103,99,97,114,111,110,11,103,99,105,114,99,117,109,102,108,101,120,12,103,99,111,109,109,97,97,99,99,101,110,116,10,103,100,111,116,97,99,99,101,110,116,4,104,98,97,114,6,104,99,97,114,111,110,11,104,99,105,114,99,117,109,102,108,101,120,8,105,100,111,116,108,101,115,115,6,105,98,114,101,118,101,9,105,100,111,116,98,101,108,111,119,10,105,104,111,111,107,97,98,111,118,101,2,105,106,7,105,109,97,99,114,111,110,7,105,111,103,111,110,101,107,6,105,116,105,108,100,101,8,106,100,111,116,108,101,115,115,11,106,99,105,114,99,117,109,102,108,101,120,12,107,99,111,109,109,97,97,99,99,101,110,116,12,107,103,114,101,101,110,108,97,110,100,105,99,6,108,97,99,117,116,101,6,108,99,97,114,111,110,12,108,99,111,109,109,97,97,99,99,101,110,116,4,108,100,111,116,6,110,97,99,117,116,101,11,110,97,112,111,115,116,114,111,112,104,101,6,110,99,97,114,111,110,12,110,99,111,109,109,97,97,99,99,101,110,116,3,101,110,103,9,110,104,111,111,107,108,101,102,116,6,111,98,114,101,118,101,16,111,99,105,114,99,117,109,102,108,101,120,97,99,117,116,101,19,111,99,105,114,99,117,109,102,108,101,120,100,111,116,98,101,108,111,119,16,111,99,105,114,99,117,109,102,108,101,120,103,114,97,118,101,20,111,99,105,114,99,117,109,102,108,101,120,104,111,111,107,97,98,111,118,101,16,111,99,105,114,99,117,109,102,108,101,120,116,105,108,100,101,9,111,100,111,116,98,101,108,111,119,10,111,104,111,111,107,97,98,111,118,101,5,111,104,111,114,110,10,111,104,111,114,110,97,99,117,116,101,13,111,104,111,114,110,100,111,116,98,101,108,111,119,10,111,104,111,114,110,103,114,97,118,101,14,111,104,111,114,110,104,111,111,107,97,98,111,118,101,10,111,104,111,114,110,116,105,108,100,101,13,111,104,117,110,103,97,114,117,109,108,97,117,116,7,111,109,97,99,114,111,110,7,111,111,103,111,110,101,107,5,111,111,112,101,110,11,111,115,108,97,115,104,97,99,117,116,101,6,114,97,99,117,116,101,6,114,99,97,114,111,110,12,114,99,111,109,109,97,97,99,99,101,110,116,6,115,97,99,117,116,101,11,115,99,105,114,99,117,109,102,108,101,120,12,115,99,111,109,109,97,97,99,99,101,110,116,5,108,111,110,103,115,4,116,98,97,114,6,116,99,97,114,111,110,8,116,99,101,100,105,108,108,97,12,116,99,111,109,109,97,97,99,99,101,110,116,4,116,101,115,104,6,117,98,114,101,118,101,9,117,100,111,116,98,101,108,111,119,10,117,104,111,111,107,97,98,111,118,101,5,117,104,111,114,110,10,117,104,111,114,110,97,99,117,116,101,13,117,104,111,114,110,100,111,116,98,101,108,111,119,10,117,104,111,114,110,103,114,97,118,101,14,117,104,111,114,110,104,111,111,107,97,98,111,118,101,10,117,104,111,114,110,116,105,108,100,101,13,117,104,117,110,103,97,114,117,109,108,97,117,116,7,117,109,97,99,114,111,110,7,117,111,103,111,110,101,107,5,117,114,105,110,103,6,117,116,105,108,100,101,7,118,116,117,114,110,101,100,6,119,97,99,117,116,101,11,119,99,105,114,99,117,109,102,108,101,120,9,119,100,105,101,114,101,115,105,115,6,119,103,114,97,118,101,11,121,99,105,114,99,117,109,102,108,101,120,9,121,100,111,116,98,101,108,111,119,6,121,103,114,97,118,101,10,121,104,111,111,107,97,98,111,118,101,7,121,109,97,99,114,111,110,6,121,116,105,108,100,101,6,122,97,99,117,116,101,10,122,100,111,116,97,99,99,101,110,116,10,100,99,97,114,111,110,46,97,108,116,16,105,97,99,117,116,101,95,106,46,108,111,99,108,78,76,68,14,99,97,99,117,116,101,46,108,111,99,108,80,76,75,14,110,97,99,117,116,101,46,108,111,99,108,80,76,75,14,111,97,99,117,116,101,46,108,111,99,108,80,76,75,14,115,97,99,117,116,101,46,108,111,99,108,80,76,75,14,122,97,99,117,116,101,46,108,111,99,108,80,76,75,10,120,46,109,117,108,116,105,112,108,121,10,119,95,119,95,119,46,108,105,103,97,4,110,109,111,100,4,65,45,99,121,5,66,101,45,99,121,5,86,101,45,99,121,5,71,101,45,99,121,6,71,106,101,45,99,121,12,71,104,101,117,112,116,117,114,110,45,99,121,5,68,101,45,99,121,5,73,101,45,99,121,10,73,101,103,114,97,118,101,45,99,121,5,73,111,45,99,121,6,90,104,101,45,99,121,5,90,101,45,99,121,5,73,105,45,99,121,10,73,105,115,104,111,114,116,45,99,121,10,73,105,103,114,97,118,101,45,99,121,5,75,97,45,99,121,6,75,106,101,45,99,121,5,69,108,45,99,121,5,69,109,45,99,121,5,69,110,45,99,121,4,79,45,99,121,5,80,101,45,99,121,5,69,114,45,99,121,5,69,115,45,99,121,5,84,101,45,99,121,4,85,45,99,121,9,85,115,104,111,114,116,45,99,121,5,69,102,45,99,121,5,72,97,45,99,121,6,67,104,101,45,99,121,6,84,115,101,45,99,121,6,83,104,97,45,99,121,8,83,104,99,104,97,45,99,121,7,68,122,104,101,45,99,121,11,83,111,102,116,115,105,103,110,45,99,121,11,72,97,114,100,115,105,103,110,45,99,121,7,89,101,114,117,45,99,121,6,76,106,101,45,99,121,6,78,106,101,45,99,121,6,68,122,101,45,99,121,4,69,45,99,121,12,69,114,101,118,101,114,115,101,100,45,99,121,4,73,45,99,121,5,89,105,45,99,121,5,74,101,45,99,121,7,84,115,104,101,45,99,121,5,73,117,45,99,121,5,73,97,45,99,121,6,68,106,101,45,99,121,12,71,104,101,115,116,114,111,107,101,45,99,121,15,90,104,101,100,101,115,99,101,110,100,101,114,45,99,121,14,75,97,100,101,115,99,101,110,100,101,114,45,99,121,14,69,110,100,101,115,99,101,110,100,101,114,45,99,121,12,85,115,116,114,97,105,103,104,116,45,99,121,18,85,115,116,114,97,105,103,104,116,115,116,114,111,107,101,45,99,121,14,72,97,100,101,115,99,101,110,100,101,114,45,99,121,15,67,104,101,100,101,115,99,101,110,100,101,114,45,99,121,7,83,104,104,97,45,99,121,11,80,97,108,111,99,104,107,97,45,99,121,8,83,99,104,119,97,45,99,121,10,73,109,97,99,114,111,110,45,99,121,10,79,98,97,114,114,101,100,45,99,121,10,85,109,97,99,114,111,110,45,99,121,13,68,101,45,99,121,46,108,111,99,108,66,71,82,13,69,108,45,99,121,46,108,111,99,108,66,71,82,13,69,102,45,99,121,46,108,111,99,108,66,71,82,4,97,45,99,121,5,98,101,45,99,121,5,118,101,45,99,121,5,103,101,45,99,121,6,103,106,101,45,99,121,12,103,104,101,117,112,116,117,114,110,45,99,121,5,100,101,45,99,121,5,105,101,45,99,121,10,105,101,103,114,97,118,101,45,99,121,5,105,111,45,99,121,6,122,104,101,45,99,121,5,122,101,45,99,121,5,105,105,45,99,121,10,105,105,115,104,111,114,116,45,99,121,10,105,105,103,114,97,118,101,45,99,121,5,107,97,45,99,121,6,107,106,101,45,99,121,5,101,108,45,99,121,5,101,109,45,99,121,5,101,110,45,99,121,4,111,45,99,121,5,112,101,45,99,121,5,101,114,45,99,121,5,101,115,45,99,121,5,116,101,45,99,121,4,117,45,99,121,9,117,115,104,111,114,116,45,99,121,5,101,102,45,99,121,5,104,97,45,99,121,6,99,104,101,45,99,121,6,116,115,101,45,99,121,6,115,104,97,45,99,121,8,115,104,99,104,97,45,99,121,7,100,122,104,101,45,99,121,11,115,111,102,116,115,105,103,110,45,99,121,11,104,97,114,100,115,105,103,110,45,99,121,7,121,101,114,117,45,99,121,6,108,106,101,45,99,121,6,110,106,101,45,99,121,6,100,122,101,45,99,121,4,101,45,99,121,12,101,114,101,118,101,114,115,101,100,45,99,121,4,105,45,99,121,5,121,105,45,99,121,5,106,101,45,99,121,7,116,115,104,101,45,99,121,5,105,117,45,99,121,5,105,97,45,99,121,6,100,106,101,45,99,121,12,103,104,101,115,116,114,111,107,101,45,99,121,15,122,104,101,100,101,115,99,101,110,100,101,114,45,99,121,14,107,97,100,101,115,99,101,110,100,101,114,45,99,121,14,101,110,100,101,115,99,101,110,100,101,114,45,99,121,12,117,115,116,114,97,105,103,104,116,45,99,121,18,117,115,116,114,97,105,103,104,116,115,116,114,111,107,101,45,99,121,14,104,97,100,101,115,99,101,110,100,101,114,45,99,121,15,99,104,101,100,101,115,99,101,110,100,101,114,45,99,121,7,115,104,104,97,45,99,121,11,112,97,108,111,99,104,107,97,45,99,121,8,115,99,104,119,97,45,99,121,10,105,109,97,99,114,111,110,45,99,121,10,111,98,97,114,114,101,100,45,99,121,10,117,109,97,99,114,111,110,45,99,121,13,118,101,45,99,121,46,108,111,99,108,66,71,82,13,103,101,45,99,121,46,108,111,99,108,66,71,82,13,100,101,45,99,121,46,108,111,99,108,66,71,82,14,122,104,101,45,99,121,46,108,111,99,108,66,71,82,13,122,101,45,99,121,46,108,111,99,108,66,71,82,13,105,105,45,99,121,46,108,111,99,108,66,71,82,18,105,105,115,104,111,114,116,45,99,121,46,108,111,99,108,66,71,82,18,105,105,103,114,97,118,101,45,99,121,46,108,111,99,108,66,71,82,13,107,97,45,99,121,46,108,111,99,108,66,71,82,13,101,108,45,99,121,46,108,111,99,108,66,71,82,13,112,101,45,99,121,46,108,111,99,108,66,71,82,13,116,101,45,99,121,46,108,111,99,108,66,71,82,14,116,115,101,45,99,121,46,108,111,99,108,66,71,82,14,115,104,97,45,99,121,46,108,111,99,108,66,71,82,16,115,104,99,104,97,45,99,121,46,108,111,99,108,66,71,82,19,115,111,102,116,115,105,103,110,45,99,121,46,108,111,99,108,66,71,82,19,104,97,114,100,115,105,103,110,45,99,121,46,108,111,99,108,66,71,82,13,105,117,45,99,121,46,108,111,99,108,66,71,82,13,98,101,45,99,121,46,108,111,99,108,83,82,66,5,65,108,112,104,97,4,66,101,116,97,5,71,97,109,109,97,7,69,112,115,105,108,111,110,4,90,101,116,97,3,69,116,97,5,84,104,101,116,97,4,73,111,116,97,5,75,97,112,112,97,6,76,97,109,98,100,97,2,77,117,2,78,117,2,88,105,7,79,109,105,99,114,111,110,2,80,105,3,82,104,111,5,83,105,103,109,97,3,84,97,117,7,85,112,115,105,108,111,110,3,80,104,105,3,67,104,105,3,80,115,105,10,65,108,112,104,97,116,111,110,111,115,12,69,112,115,105,108,111,110,116,111,110,111,115,8,69,116,97,116,111,110,111,115,9,73,111,116,97,116,111,110,111,115,12,79,109,105,99,114,111,110,116,111,110,111,115,12,85,112,115,105,108,111,110,116,111,110,111,115,10,79,109,101,103,97,116,111,110,111,115,12,73,111,116,97,100,105,101,114,101,115,105,115,15,85,112,115,105,108,111,110,100,105,101,114,101,115,105,115,9,75,97,105,83,121,109,98,111,108,5,97,108,112,104,97,4,98,101,116,97,5,103,97,109,109,97,5,100,101,108,116,97,7,101,112,115,105,108,111,110,4,122,101,116,97,3,101,116,97,5,116,104,101,116,97,4,105,111,116,97,5,107,97,112,112,97,6,108,97,109,98,100,97,2,110,117,2,120,105,7,111,109,105,99,114,111,110,3,114,104,111,10,115,105,103,109,97,102,105,110,97,108,5,115,105,103,109,97,3,116,97,117,7,117,112,115,105,108,111,110,3,112,104,105,3,99,104,105,3,112,115,105,5,111,109,101,103,97,9,105,111,116,97,116,111,110,111,115,12,105,111,116,97,100,105,101,114,101,115,105,115,17,105,111,116,97,100,105,101,114,101,115,105,115,116,111,110,111,115,12,117,112,115,105,108,111,110,116,111,110,111,115,15,117,112,115,105,108,111,110,100,105,101,114,101,115,105,115,20,117,112,115,105,108,111,110,100,105,101,114,101,115,105,115,116,111,110,111,115,12,111,109,105,99,114,111,110,116,111,110,111,115,10,111,109,101,103,97,116,111,110,111,115,10,97,108,112,104,97,116,111,110,111,115,12,101,112,115,105,108,111,110,116,111,110,111,115,8,101,116,97,116,111,110,111,115,9,107,97,105,83,121,109,98,111,108,9,122,101,114,111,46,122,101,114,111,12,122,101,114,111,105,110,102,101,114,105,111,114,11,111,110,101,105,110,102,101,114,105,111,114,11,116,119,111,105,110,102,101,114,105,111,114,13,116,104,114,101,101,105,110,102,101,114,105,111,114,12,102,111,117,114,105,110,102,101,114,105,111,114,12,102,105,118,101,105,110,102,101,114,105,111,114,11,115,105,120,105,110,102,101,114,105,111,114,13,115,101,118,101,110,105,110,102,101,114,105,111,114,13,101,105,103,104,116,105,110,102,101,114,105,111,114,12,110,105,110,101,105,110,102,101,114,105,111,114,9,122,101,114,111,46,100,110,111,109,8,111,110,101,46,100,110,111,109,8,116,119,111,46,100,110,111,109,10,116,104,114,101,101,46,100,110,111,109,9,102,111,117,114,46,100,110,111,109,9,102,105,118,101,46,100,110,111,109,8,115,105,120,46,100,110,111,109,10,115,101,118,101,110,46,100,110,111,109,10,101,105,103,104,116,46,100,110,111,109,9,110,105,110,101,46,100,110,111,109,9,122,101,114,111,46,110,117,109,114,8,111,110,101,46,110,117,109,114,8,116,119,111,46,110,117,109,114,10,116,104,114,101,101,46,110,117,109,114,9,102,111,117,114,46,110,117,109,114,9,102,105,118,101,46,110,117,109,114,8,115,105,120,46,110,117,109,114,10,115,101,118,101,110,46,110,117,109,114,10,101,105,103,104,116,46,110,117,109,114,9,110,105,110,101,46,110,117,109,114,12,122,101,114,111,115,117,112,101,114,105,111,114,12,102,111,117,114,115,117,112,101,114,105,111,114,12,102,105,118,101,115,117,112,101,114,105,111,114,11,115,105,120,115,117,112,101,114,105,111,114,13,115,101,118,101,110,115,117,112,101,114,105,111,114,13,101,105,103,104,116,115,117,112,101,114,105,111,114,12,110,105,110,101,115,117,112,101,114,105,111,114,9,111,110,101,101,105,103,104,116,104,12,116,104,114,101,101,101,105,103,104,116,104,115,11,102,105,118,101,101,105,103,104,116,104,115,12,115,101,118,101,110,101,105,103,104,116,104,115,12,101,120,99,108,97,109,100,111,117,98,108,101,14,111,110,101,100,111,116,101,110,108,101,97,100,101,114,8,111,118,101,114,108,105,110,101,43,104,101,97,118,121,108,101,102,116,112,111,105,110,116,105,110,103,97,110,103,108,101,113,117,111,116,97,116,105,111,110,109,97,114,107,111,114,110,97,109,101,110,116,44,104,101,97,118,121,114,105,103,104,116,112,111,105,110,116,105,110,103,97,110,103,108,101,113,117,111,116,97,116,105,111,110,109,97,114,107,111,114,110,97,109,101,110,116,38,109,101,100,105,117,109,108,101,102,116,112,111,105,110,116,105,110,103,97,110,103,108,101,98,114,97,99,107,101,116,111,114,110,97,109,101,110,116,39,109,101,100,105,117,109,114,105,103,104,116,112,111,105,110,116,105,110,103,97,110,103,108,101,98,114,97,99,107,101,116,111,114,110,97,109,101,110,116,10,115,111,102,116,104,121,112,104,101,110,13,104,111,114,105,122,111,110,116,97,108,98,97,114,9,104,121,112,104,101,110,116,119,111,17,110,111,110,98,114,101,97,107,105,110,103,104,121,112,104,101,110,13,117,110,100,101,114,115,99,111,114,101,100,98,108,13,113,117,111,116,101,114,101,118,101,114,115,101,100,13,103,117,105,108,108,101,109,101,116,108,101,102,116,14,103,117,105,108,108,101,109,101,116,114,105,103,104,116,18,104,121,112,104,101,110,95,104,121,112,104,101,110,46,108,105,103,97,25,104,121,112,104,101,110,95,104,121,112,104,101,110,95,104,121,112,104,101,110,46,108,105,103,97,26,104,121,112,104,101,110,95,104,121,112,104,101,110,95,103,114,101,97,116,101,114,46,108,105,103,97,15,104,121,112,104,101,110,95,98,97,114,46,108,105,103,97,19,104,121,112,104,101,110,95,103,114,101,97,116,101,114,46,108,105,103,97,27,104,121,112,104,101,110,95,103,114,101,97,116,101,114,95,103,114,101,97,116,101,114,46,108,105,103,97,16,104,121,112,104,101,110,95,108,101,115,115,46,108,105,103,97,21,104,121,112,104,101,110,95,108,101,115,115,95,108,101,115,115,46,108,105,103,97,22,104,121,112,104,101,110,95,97,115,99,105,105,116,105,108,100,101,46,108,105,103,97,23,112,97,114,101,110,108,101,102,116,95,97,115,116,101,114,105,115,107,46,108,105,103,97,18,98,114,97,99,101,108,101,102,116,95,98,97,114,46,108,105,103,97,26,98,114,97,99,101,114,105,103,104,116,95,110,117,109,98,101,114,115,105,103,110,46,108,105,103,97,20,98,114,97,99,107,101,116,108,101,102,116,95,98,97,114,46,108,105,103,97,28,98,114,97,99,107,101,116,114,105,103,104,116,95,110,117,109,98,101,114,115,105,103,110,46,108,105,103,97,18,112,101,114,105,111,100,95,104,121,112,104,101,110,46,108,105,103,97,18,112,101,114,105,111,100,95,112,101,114,105,111,100,46,108,105,103,97,25,112,101,114,105,111,100,95,112,101,114,105,111,100,95,112,101,114,105,111,100,46,108,105,103,97,24,112,101,114,105,111,100,95,112,101,114,105,111,100,95,101,113,117,97,108,46,108,105,103,97,23,112,101,114,105,111,100,95,112,101,114,105,111,100,95,108,101,115,115,46,108,105,103,97,20,112,101,114,105,111,100,95,113,117,101,115,116,105,111,110,46,108,105,103,97,17,112,101,114,105,111,100,95,101,113,117,97,108,46,108,105,103,97,16,99,111,108,111,110,95,99,111,108,111,110,46,108,105,103,97,22,99,111,108,111,110,95,99,111,108,111,110,95,99,111,108,111,110,46,108,105,103,97,22,99,111,108,111,110,95,99,111,108,111,110,95,101,113,117,97,108,46,108,105,103,97,16,99,111,108,111,110,95,101,113,117,97,108,46,108,105,103,97,18,99,111,108,111,110,95,103,114,101,97,116,101,114,46,108,105,103,97,15,99,111,108,111,110,95,108,101,115,115,46,108,105,103,97,22,99,111,108,111,110,95,115,108,97,115,104,95,115,108,97,115,104,46,108,105,103,97,24,115,101,109,105,99,111,108,111,110,95,115,101,109,105,99,111,108,111,110,46,108,105,103,97,18,101,120,99,108,97,109,95,101,120,99,108,97,109,46,108,105,103,97,25,101,120,99,108,97,109,95,101,120,99,108,97,109,95,112,101,114,105,111,100,46,108,105,103,97,17,101,120,99,108,97,109,95,101,113,117,97,108,46,108,105,103,97,23,101,120,99,108,97,109,95,101,113,117,97,108,95,101,113,117,97,108,46,108,105,103,97,20,113,117,101,115,116,105,111,110,95,112,101,114,105,111,100,46,108,105,103,97,19,113,117,101,115,116,105,111,110,95,99,111,108,111,110,46,108,105,103,97,22,113,117,101,115,116,105,111,110,95,113,117,101,115,116,105,111,110,46,108,105,103,97,19,113,117,101,115,116,105,111,110,95,101,113,117,97,108,46,108,105,103,97,24,97,115,116,101,114,105,115,107,95,112,97,114,101,110,114,105,103,104,116,46,108,105,103,97,22,97,115,116,101,114,105,115,107,95,97,115,116,101,114,105,115,107,46,108,105,103,97,31,97,115,116,101,114,105,115,107,95,97,115,116,101,114,105,115,107,95,97,115,116,101,114,105,115,107,46,108,105,103,97,21,97,115,116,101,114,105,115,107,95,103,114,101,97,116,101,114,46,108,105,103,97,19,97,115,116,101,114,105,115,107,95,115,108,97,115,104,46,108,105,103,97,25,110,117,109,98,101,114,115,105,103,110,95,112,97,114,101,110,108,101,102,116,46,108,105,103,97,25,110,117,109,98,101,114,115,105,103,110,95,98,114,97,99,101,108,101,102,116,46,108,105,103,97,27,110,117,109,98,101,114,115,105,103,110,95,98,114,97,99,107,101,116,108,101,102,116,46,108,105,103,97,21,110,117,109,98,101,114,115,105,103,110,95,99,111,108,111,110,46,108,105,103,97,22,110,117,109,98,101,114,115,105,103,110,95,101,120,99,108,97,109,46,108,105,103,97,24,110,117,109,98,101,114,115,105,103,110,95,113,117,101,115,116,105,111,110,46,108,105,103,97,26,110,117,109,98,101,114,115,105,103,110,95,110,117,109,98,101,114,115,105,103,110,46,108,105,103,97,37,110,117,109,98,101,114,115,105,103,110,95,110,117,109,98,101,114,115,105,103,110,95,110,117,109,98,101,114,115,105,103,110,46,108,105,103,97,48,110,117,109,98,101,114,115,105,103,110,95,110,117,109,98,101,114,115,105,103,110,95,110,117,109,98,101,114,115,105,103,110,95,110,117,109,98,101,114,115,105,103,110,46,108,105,103,97,21,110,117,109,98,101,114,115,105,103,110,95,101,113,117,97,108,46,108,105,103,97,26,110,117,109,98,101,114,115,105,103,110,95,117,110,100,101,114,115,99,111,114,101,46,108,105,103,97,36,110,117,109,98,101,114,115,105,103,110,95,117,110,100,101,114,115,99,111,114,101,95,112,97,114,101,110,108,101,102,116,46,108,105,103,97,19,115,108,97,115,104,95,97,115,116,101,114,105,115,107,46,108,105,103,97,16,115,108,97,115,104,95,101,113,117,97,108,46,108,105,103,97,22,115,108,97,115,104,95,101,113,117,97,108,95,101,113,117,97,108,46,108,105,103,97,18,115,108,97,115,104,95,103,114,101,97,116,101,114,46,108,105,103,97,16,115,108,97,115,104,95,115,108,97,115,104,46,108,105,103,97,22,115,108,97,115,104,95,115,108,97,115,104,95,115,108,97,115,104,46,108,105,103,97,24,98,97,99,107,115,108,97,115,104,95,98,97,99,107,115,108,97,115,104,46,108,105,103,97,30,117,110,100,101,114,115,99,111,114,101,95,98,97,114,95,117,110,100,101,114,115,99,111,114,101,46,108,105,103,97,26,117,110,100,101,114,115,99,111,114,101,95,117,110,100,101,114,115,99,111,114,101,46,108,105,103,97,9,97,110,111,116,101,108,101,105,97,13,113,117,101,115,116,105,111,110,103,114,101,101,107,16,112,117,110,99,116,117,97,116,105,111,110,115,112,97,99,101,7,110,98,115,112,97,99,101,2,67,82,13,108,105,110,101,115,101,112,97,114,97,116,111,114,4,98,97,104,116,4,99,101,100,105,9,99,111,108,111,110,115,105,103,110,4,100,111,110,103,4,101,117,114,111,12,101,117,114,111,99,117,114,114,101,110,99,121,7,103,117,97,114,97,110,105,7,104,114,121,118,110,105,97,3,107,105,112,4,108,97,114,105,4,108,105,114,97,11,108,105,114,97,84,117,114,107,105,115,104,5,109,97,110,97,116,5,110,97,105,114,97,6,112,101,115,101,116,97,4,112,101,115,111,5,114,117,98,108,101,5,114,117,112,101,101,11,114,117,112,101,101,73,110,100,105,97,110,6,115,104,101,113,101,108,5,116,101,110,103,101,6,116,117,103,114,105,107,3,119,111,110,14,98,117,108,108,101,116,111,112,101,114,97,116,111,114,13,100,105,118,105,115,105,111,110,115,108,97,115,104,11,101,113,117,105,118,97,108,101,110,99,101,23,104,111,114,105,122,111,110,116,97,108,108,105,110,101,101,120,116,101,110,115,105,111,110,10,105,110,116,101,103,114,97,108,98,116,10,105,110,116,101,103,114,97,108,116,112,18,108,111,103,105,99,97,108,110,111,116,82,101,118,101,114,115,101,100,12,110,111,116,105,100,101,110,116,105,99,97,108,12,105,110,116,101,114,115,101,99,116,105,111,110,3,79,104,109,9,105,110,99,114,101,109,101,110,116,5,109,105,99,114,111,10,111,114,116,104,111,103,111,110,97,108,20,115,116,114,105,99,116,108,121,101,113,117,105,118,97,108,101,110,116,116,111,20,118,101,99,116,111,114,79,114,67,114,111,115,115,80,114,111,100,117,99,116,7,117,112,65,114,114,111,119,10,114,105,103,104,116,65,114,114,111,119,9,100,111,119,110,65,114,114,111,119,9,108,101,102,116,65,114,114,111,119,14,108,101,102,116,82,105,103,104,116,65,114,114,111,119,11,117,112,68,111,119,110,65,114,114,111,119,15,117,112,68,111,119,110,98,97,115,101,65,114,114,111,119,11,117,112,68,97,115,104,65,114,114,111,119,13,100,97,115,104,100,111,119,110,65,114,114,111,119,19,108,111,119,101,114,79,110,101,69,105,103,104,116,104,66,108,111,99,107,20,108,111,119,101,114,79,110,101,81,117,97,114,116,101,114,66,108,111,99,107,22,108,111,119,101,114,84,104,114,101,101,69,105,103,104,116,104,115,66,108,111,99,107,14,108,111,119,101,114,72,97,108,102,66,108,111,99,107,21,108,111,119,101,114,70,105,118,101,69,105,103,104,116,104,115,66,108,111,99,107,23,108,111,119,101,114,84,104,114,101,101,81,117,97,114,116,101,114,115,66,108,111,99,107,22,108,111,119,101,114,83,101,118,101,110,69,105,103,104,116,104,115,66,108,111,99,107,9,102,117,108,108,66,108,111,99,107,14,117,112,112,101,114,72,97,108,102,66,108,111,99,107,19,117,112,112,101,114,79,110,101,69,105,103,104,116,104,66,108,111,99,107,18,108,101,102,116,79,110,101,69,105,103,104,116,104,66,108,111,99,107,19,108,101,102,116,79,110,101,81,117,97,114,116,101,114,66,108,111,99,107,21,108,101,102,116,84,104,114,101,101,69,105,103,104,116,104,115,66,108,111,99,107,9,108,101,102,116,66,108,111,99,107,20,108,101,102,116,70,105,118,101,69,105,103,104,116,104,115,66,108,111,99,107,22,108,101,102,116,84,104,114,101,101,81,117,97,114,116,101,114,115,66,108,111,99,107,21,108,101,102,116,83,101,118,101,110,69,105,103,104,116,104,115,66,108,111,99,107,10,114,105,103,104,116,66,108,111,99,107,19,114,105,103,104,116,79,110,101,69,105,103,104,116,104,66,108,111,99,107,14,108,111,119,101,114,76,101,102,116,66,108,111,99,107,15,108,111,119,101,114,82,105,103,104,116,66,108,111,99,107,14,117,112,112,101,114,76,101,102,116,66,108,111,99,107,39,117,112,112,101,114,76,101,102,116,65,110,100,76,111,119,101,114,76,101,102,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,27,117,112,112,101,114,76,101,102,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,39,117,112,112,101,114,76,101,102,116,65,110,100,85,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,76,101,102,116,66,108,111,99,107,40,117,112,112,101,114,76,101,102,116,65,110,100,85,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,15,117,112,112,101,114,82,105,103,104,116,66,108,111,99,107,27,117,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,76,101,102,116,66,108,111,99,107,40,117,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,76,101,102,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,10,115,104,97,100,101,108,105,103,104,116,11,115,104,97,100,101,109,101,100,105,117,109,9,115,104,97,100,101,100,97,114,107,11,98,108,97,99,107,67,105,114,99,108,101,11,119,104,105,116,101,67,105,114,99,108,101,11,108,97,114,103,101,67,105,114,99,108,101,24,108,101,102,116,72,97,108,102,66,108,97,99,107,87,104,105,116,101,67,105,114,99,108,101,25,114,105,103,104,116,72,97,108,102,66,108,97,99,107,87,104,105,116,101,67,105,114,99,108,101,25,108,111,119,101,114,72,97,108,102,66,108,97,99,107,87,104,105,116,101,67,105,114,99,108,101,25,117,112,112,101,114,72,97,108,102,66,108,97,99,107,87,104,105,116,101,67,105,114,99,108,101,19,108,101,102,116,72,97,108,102,66,108,97,99,107,67,105,114,99,108,101,20,114,105,103,104,116,72,97,108,102,66,108,97,99,107,67,105,114,99,108,101,21,117,112,112,101,114,82,105,103,104,116,66,108,97,99,107,67,105,114,99,108,101,20,117,112,112,101,114,76,101,102,116,87,104,105,116,101,67,105,114,99,108,101,28,117,112,112,101,114,76,101,102,116,81,117,97,100,114,97,110,116,87,104,105,116,101,67,105,114,99,108,101,28,108,111,119,101,114,76,101,102,116,81,117,97,100,114,97,110,116,87,104,105,116,101,67,105,114,99,108,101,29,108,111,119,101,114,82,105,103,104,116,81,117,97,100,114,97,110,116,87,104,105,116,101,67,105,114,99,108,101,29,117,112,112,101,114,82,105,103,104,116,81,117,97,100,114,97,110,116,87,104,105,116,101,67,105,114,99,108,101,18,118,101,114,116,105,99,97,108,70,105,108,108,67,105,114,99,108,101,12,100,111,116,116,101,100,67,105,114,99,108,101,7,102,105,115,104,101,121,101,8,98,117,108,108,115,101,121,101,11,119,104,105,116,101,66,117,108,108,101,116,13,105,110,118,101,114,115,101,66,117,108,108,101,116,18,105,110,118,101,114,115,101,87,104,105,116,101,67,105,114,99,108,101,27,117,112,112,101,114,72,97,108,102,73,110,118,101,114,115,101,87,104,105,116,101,67,105,114,99,108,101,27,108,111,119,101,114,72,97,108,102,73,110,118,101,114,115,101,87,104,105,116,101,67,105,114,99,108,101,12,117,112,112,101,114,72,97,108,102,65,114,99,12,108,111,119,101,114,72,97,108,102,65,114,99,12,117,112,112,101,114,76,101,102,116,65,114,99,13,117,112,112,101,114,82,105,103,104,116,65,114,99,13,108,111,119,101,114,82,105,103,104,116,65,114,99,12,108,111,119,101,114,76,101,102,116,65,114,99,12,98,108,97,99,107,68,105,97,109,111,110,100,12,119,104,105,116,101,68,105,97,109,111,110,100,20,108,101,102,116,72,97,108,102,66,108,97,99,107,68,105,97,109,111,110,100,21,114,105,103,104,116,72,97,108,102,66,108,97,99,107,68,105,97,109,111,110,100,19,116,111,112,72,97,108,102,66,108,97,99,107,68,105,97,109,111,110,100,22,98,111,116,116,111,109,72,97,108,102,66,108,97,99,107,68,105,97,109,111,110,100,19,98,108,97,99,107,73,110,87,104,105,116,101,68,105,97,109,111,110,100,18,98,108,97,99,107,80,97,114,97,108,108,101,108,111,103,114,97,109,18,119,104,105,116,101,80,97,114,97,108,108,101,108,111,103,114,97,109,17,98,108,97,99,107,86,101,114,116,105,99,97,108,82,101,99,116,10,102,105,108,108,101,100,82,101,99,116,9,119,104,105,116,101,82,101,99,116,17,119,104,105,116,101,86,101,114,116,105,99,97,108,82,101,99,116,11,98,108,97,99,107,83,113,117,97,114,101,11,119,104,105,116,101,83,113,117,97,114,101,25,119,104,105,116,101,82,111,117,110,100,101,100,67,111,114,110,101,114,115,83,113,117,97,114,101,18,119,104,105,116,101,73,110,66,108,97,99,107,83,113,117,97,114,101,12,100,111,116,116,101,100,83,113,117,97,114,101,20,104,111,114,105,122,111,110,116,97,108,70,105,108,108,83,113,117,97,114,101,18,118,101,114,116,105,99,97,108,70,105,108,108,83,113,117,97,114,101,20,99,114,111,115,115,104,97,116,99,104,70,105,108,108,83,113,117,97,114,101,31,117,112,112,101,114,108,101,102,116,116,111,108,111,119,101,114,114,105,103,104,116,70,105,108,108,83,113,117,97,114,101,31,117,112,112,101,114,114,105,103,104,116,116,111,108,111,119,101,114,108,101,102,116,70,105,108,108,83,113,117,97,114,101,28,100,105,97,103,111,110,97,108,99,114,111,115,115,104,97,116,99,104,70,105,108,108,83,113,117,97,114,101,16,98,108,97,99,107,83,109,97,108,108,83,113,117,97,114,101,16,119,104,105,116,101,83,109,97,108,108,83,113,117,97,114,101,19,108,101,102,116,72,97,108,102,66,108,97,99,107,83,113,117,97,114,101,20,114,105,103,104,116,72,97,108,102,66,108,97,99,107,83,113,117,97,114,101,32,117,112,112,101,114,76,101,102,116,68,105,97,103,111,110,97,108,72,97,108,102,66,108,97,99,107,83,113,117,97,114,101,33,108,111,119,101,114,82,105,103,104,116,68,105,97,103,111,110,97,108,72,97,108,102,66,108,97,99,107,83,113,117,97,114,101,32,118,101,114,116,105,99,97,108,66,105,115,101,99,116,105,110,103,76,105,110,101,87,104,105,116,101,83,113,117,97,114,101,28,119,104,105,116,101,85,112,112,101,114,76,101,102,116,81,117,97,100,114,97,110,116,83,113,117,97,114,101,28,119,104,105,116,101,76,111,119,101,114,76,101,102,116,81,117,97,100,114,97,110,116,83,113,117,97,114,101,29,119,104,105,116,101,76,111,119,101,114,82,105,103,104,116,81,117,97,100,114,97,110,116,83,113,117,97,114,101,29,119,104,105,116,101,85,112,112,101,114,82,105,103,104,116,81,117,97,100,114,97,110,116,83,113,117,97,114,101,17,109,101,100,105,117,109,87,104,105,116,101,83,113,117,97,114,101,17,109,101,100,105,117,109,66,108,97,99,107,83,113,117,97,114,101,22,109,101,100,105,117,109,87,104,105,116,101,83,109,97,108,108,83,113,117,97,114,101,22,109,101,100,105,117,109,66,108,97,99,107,83,109,97,108,108,83,113,117,97,114,101,15,117,112,66,108,97,99,107,84,114,105,97,110,103,108,101,18,114,105,103,104,116,66,108,97,99,107,84,114,105,97,110,103,108,101,17,100,111,119,110,66,108,97,99,107,84,114,105,97,110,103,108,101,17,108,101,102,116,66,108,97,99,107,84,114,105,97,110,103,108,101,15,117,112,87,104,105,116,101,84,114,105,97,110,103,108,101,18,114,105,103,104,116,87,104,105,116,101,84,114,105,97,110,103,108,101,17,100,111,119,110,87,104,105,116,101,84,114,105,97,110,103,108,101,17,108,101,102,116,87,104,105,116,101,84,114,105,97,110,103,108,101,22,117,112,87,104,105,116,101,84,114,105,97,110,103,108,101,87,105,116,104,68,111,116,23,117,112,76,101,102,116,72,97,108,102,66,108,97,99,107,84,114,105,97,110,103,108,101,24,117,112,82,105,103,104,116,72,97,108,102,66,108,97,99,107,84,114,105,97,110,103,108,101,17,114,105,103,104,116,66,108,97,99,107,80,111,105,110,116,101,114,16,108,101,102,116,66,108,97,99,107,80,111,105,110,116,101,114,17,114,105,103,104,116,87,104,105,116,101,80,111,105,110,116,101,114,16,108,101,102,116,87,104,105,116,101,80,111,105,110,116,101,114,20,117,112,66,108,97,99,107,83,109,97,108,108,84,114,105,97,110,103,108,101,23,114,105,103,104,116,66,108,97,99,107,83,109,97,108,108,84,114,105,97,110,103,108,101,22,100,111,119,110,66,108,97,99,107,83,109,97,108,108,84,114,105,97,110,103,108,101,22,108,101,102,116,66,108,97,99,107,83,109,97,108,108,84,114,105,97,110,103,108,101,20,117,112,87,104,105,116,101,83,109,97,108,108,84,114,105,97,110,103,108,101,23,114,105,103,104,116,87,104,105,116,101,83,109,97,108,108,84,114,105,97,110,103,108,101,22,100,111,119,110,87,104,105,116,101,83,109,97,108,108,84,114,105,97,110,103,108,101,22,108,101,102,116,87,104,105,116,101,83,109,97,108,108,84,114,105,97,110,103,108,101,23,117,112,112,101,114,82,105,103,104,116,66,108,97,99,107,84,114,105,97,110,103,108,101,23,108,111,119,101,114,82,105,103,104,116,66,108,97,99,107,84,114,105,97,110,103,108,101,22,108,111,119,101,114,76,101,102,116,66,108,97,99,107,84,114,105,97,110,103,108,101,22,117,112,112,101,114,76,101,102,116,66,108,97,99,107,84,114,105,97,110,103,108,101,18,117,112,112,101,114,82,105,103,104,116,84,114,105,97,110,103,108,101,18,108,111,119,101,114,82,105,103,104,116,84,114,105,97,110,103,108,101,17,108,111,119,101,114,76,101,102,116,84,114,105,97,110,103,108,101,17,117,112,112,101,114,76,101,102,116,84,114,105,97,110,103,108,101,26,98,111,120,68,111,117,98,108,101,68,111,119,110,65,110,100,72,111,114,105,122,111,110,116,97,108,20,98,111,120,68,111,117,98,108,101,68,111,119,110,65,110,100,76,101,102,116,21,98,111,120,68,111,117,98,108,101,68,111,119,110,65,110,100,82,105,103,104,116,19,98,111,120,68,111,117,98,108,101,72,111,114,105,122,111,110,116,97,108,24,98,111,120,68,111,117,98,108,101,85,112,65,110,100,72,111,114,105,122,111,110,116,97,108,18,98,111,120,68,111,117,98,108,101,85,112,65,110,100,76,101,102,116,19,98,111,120,68,111,117,98,108,101,85,112,65,110,100,82,105,103,104,116,17,98,111,120,68,111,117,98,108,101,86,101,114,116,105,99,97,108,30,98,111,120,68,111,117,98,108,101,86,101,114,116,105,99,97,108,65,110,100,72,111,114,105,122,111,110,116,97,108,24,98,111,120,68,111,117,98,108,101,86,101,114,116,105,99,97,108,65,110,100,76,101,102,116,25,98,111,120,68,111,117,98,108,101,86,101,114,116,105,99,97,108,65,110,100,82,105,103,104,116,32,98,111,120,68,111,119,110,68,111,117,98,108,101,65,110,100,72,111,114,105,122,111,110,116,97,108,83,105,110,103,108,101,26,98,111,120,68,111,119,110,68,111,117,98,108,101,65,110,100,76,101,102,116,83,105,110,103,108,101,27,98,111,120,68,111,119,110,68,111,117,98,108,101,65,110,100,82,105,103,104,116,83,105,110,103,108,101,30,98,111,120,68,111,119,110,72,101,97,118,121,65,110,100,72,111,114,105,122,111,110,116,97,108,76,105,103,104,116,24,98,111,120,68,111,119,110,72,101,97,118,121,65,110,100,76,101,102,116,76,105,103,104,116,26,98,111,120,68,111,119,110,72,101,97,118,121,65,110,100,76,101,102,116,85,112,76,105,103,104,116,25,98,111,120,68,111,119,110,72,101,97,118,121,65,110,100,82,105,103,104,116,76,105,103,104,116,27,98,111,120,68,111,119,110,72,101,97,118,121,65,110,100,82,105,103,104,116,85,112,76,105,103,104,116,32,98,111,120,68,111,119,110,72,101,97,118,121,65,110,100,85,112,72,111,114,105,122,111,110,116,97,108,76,105,103,104,116,30,98,111,120,68,111,119,110,76,105,103,104,116,65,110,100,72,111,114,105,122,111,110,116,97,108,72,101,97,118,121,24,98,111,120,68,111,119,110,76,105,103,104,116,65,110,100,76,101,102,116,72,101,97,118,121,26,98,111,120,68,111,119,110,76,105,103,104,116,65,110,100,76,101,102,116,85,112,72,101,97,118,121,25,98,111,120,68,111,119,110,76,105,103,104,116,65,110,100,82,105,103,104,116,72,101,97,118,121,27,98,111,120,68,111,119,110,76,105,103,104,116,65,110,100,82,105,103,104,116,85,112,72,101,97,118,121,32,98,111,120,68,111,119,110,76,105,103,104,116,65,110,100,85,112,72,111,114,105,122,111,110,116,97,108,72,101,97,118,121,32,98,111,120,68,111,119,110,83,105,110,103,108,101,65,110,100,72,111,114,105,122,111,110,116,97,108,68,111,117,98,108,101,26,98,111,120,68,111,119,110,83,105,110,103,108,101,65,110,100,76,101,102,116,68,111,117,98,108,101,27,98,111,120,68,111,119,110,83,105,110,103,108,101,65,110,100,82,105,103,104,116,68,111,117,98,108,101,28,98,111,120,72,101,97,118,121,68,111,117,98,108,101,68,97,115,104,72,111,114,105,122,111,110,116,97,108,26,98,111,120,72,101,97,118,121,68,111,117,98,108,101,68,97,115,104,86,101,114,116,105,99,97,108,12,98,111,120,72,101,97,118,121,68,111,119,110,25,98,111,120,72,101,97,118,121,68,111,119,110,65,110,100,72,111,114,105,122,111,110,116,97,108,19,98,111,120,72,101,97,118,121,68,111,119,110,65,110,100,76,101,102,116,20,98,111,120,72,101,97,118,121,68,111,119,110,65,110,100,82,105,103,104,116,18,98,111,120,72,101,97,118,121,72,111,114,105,122,111,110,116,97,108,12,98,111,120,72,101,97,118,121,76,101,102,116,25,98,111,120,72,101,97,118,121,76,101,102,116,65,110,100,76,105,103,104,116,82,105,103,104,116,31,98,111,120,72,101,97,118,121,81,117,97,100,114,117,112,108,101,68,97,115,104,72,111,114,105,122,111,110,116,97,108,29,98,111,120,72,101,97,118,121,81,117,97,100,114,117,112,108,101,68,97,115,104,86,101,114,116,105,99,97,108,13,98,111,120,72,101,97,118,121,82,105,103,104,116,28,98,111,120,72,101,97,118,121,84,114,105,112,108,101,68,97,115,104,72,111,114,105,122,111,110,116,97,108,26,98,111,120,72,101,97,118,121,84,114,105,112,108,101,68,97,115,104,86,101,114,116,105,99,97,108,10,98,111,120,72,101,97,118,121,85,112,23,98,111,120,72,101,97,118,121,85,112,65,110,100,72,111,114,105,122,111,110,116,97,108,17,98,111,120,72,101,97,118,121,85,112,65,110,100,76,101,102,116,22,98,111,120,72,101,97,118,121,85,112,65,110,100,76,105,103,104,116,68,111,119,110,18,98,111,120,72,101,97,118,121,85,112,65,110,100,82,105,103,104,116,16,98,111,120,72,101,97,118,121,86,101,114,116,105,99,97,108,29,98,111,120,72,101,97,118,121,86,101,114,116,105,99,97,108,65,110,100,72,111,114,105,122,111,110,116,97,108,23,98,111,120,72,101,97,118,121,86,101,114,116,105,99,97,108,65,110,100,76,101,102,116,24,98,111,120,72,101,97,118,121,86,101,114,116,105,99,97,108,65,110,100,82,105,103,104,116,31,98,111,120,76,101,102,116,68,111,119,110,72,101,97,118,121,65,110,100,82,105,103,104,116,85,112,76,105,103,104,116,29,98,111,120,76,101,102,116,72,101,97,118,121,65,110,100,82,105,103,104,116,68,111,119,110,76,105,103,104,116,27,98,111,120,76,101,102,116,72,101,97,118,121,65,110,100,82,105,103,104,116,85,112,76,105,103,104,116,33,98,111,120,76,101,102,116,72,101,97,118,121,65,110,100,82,105,103,104,116,86,101,114,116,105,99,97,108,76,105,103,104,116,29,98,111,120,76,101,102,116,76,105,103,104,116,65,110,100,82,105,103,104,116,68,111,119,110,72,101,97,118,121,27,98,111,120,76,101,102,116,76,105,103,104,116,65,110,100,82,105,103,104,116,85,112,72,101,97,118,121,33,98,111,120,76,101,102,116,76,105,103,104,116,65,110,100,82,105,103,104,116,86,101,114,116,105,99,97,108,72,101,97,118,121,31,98,111,120,76,101,102,116,85,112,72,101,97,118,121,65,110,100,82,105,103,104,116,68,111,119,110,76,105,103,104,116,22,98,111,120,76,105,103,104,116,65,114,99,68,111,119,110,65,110,100,76,101,102,116,23,98,111,120,76,105,103,104,116,65,114,99,68,111,119,110,65,110,100,82,105,103,104,116,20,98,111,120,76,105,103,104,116,65,114,99,85,112,65,110,100,76,101,102,116,21,98,111,120,76,105,103,104,116,65,114,99,85,112,65,110,100,82,105,103,104,116,21,98,111,120,76,105,103,104,116,68,105,97,103,111,110,97,108,67,114,111,115,115,37,98,111,120,76,105,103,104,116,68,105,97,103,111,110,97,108,85,112,112,101,114,76,101,102,116,84,111,76,111,119,101,114,82,105,103,104,116,37,98,111,120,76,105,103,104,116,68,105,97,103,111,110,97,108,85,112,112,101,114,82,105,103,104,116,84,111,76,111,119,101,114,76,101,102,116,28,98,111,120,76,105,103,104,116,68,111,117,98,108,101,68,97,115,104,72,111,114,105,122,111,110,116,97,108,26,98,111,120,76,105,103,104,116,68,111,117,98,108,101,68,97,115,104,86,101,114,116,105,99,97,108,12,98,111,120,76,105,103,104,116,68,111,119,110,25,98,111,120,76,105,103,104,116,68,111,119,110,65,110,100,72,111,114,105,122,111,110,116,97,108,19,98,111,120,76,105,103,104,116,68,111,119,110,65,110,100,76,101,102,116,20,98,111,120,76,105,103,104,116,68,111,119,110,65,110,100,82,105,103,104,116,18,98,111,120,76,105,103,104,116,72,111,114,105,122,111,110,116,97,108,12,98,111,120,76,105,103,104,116,76,101,102,116,25,98,111,120,76,105,103,104,116,76,101,102,116,65,110,100,72,101,97,118,121,82,105,103,104,116,31,98,111,120,76,105,103,104,116,81,117,97,100,114,117,112,108,101,68,97,115,104,72,111,114,105,122,111,110,116,97,108,29,98,111,120,76,105,103,104,116,81,117,97,100,114,117,112,108,101,68,97,115,104,86,101,114,116,105,99,97,108,13,98,111,120,76,105,103,104,116,82,105,103,104,116,28,98,111,120,76,105,103,104,116,84,114,105,112,108,101,68,97,115,104,72,111,114,105,122,111,110,116,97,108,26,98,111,120,76,105,103,104,116,84,114,105,112,108,101,68,97,115,104,86,101,114,116,105,99,97,108,10,98,111,120,76,105,103,104,116,85,112,22,98,111,120,76,105,103,104,116,85,112,65,110,100,72,101,97,118,121,68,111,119,110,23,98,111,120,76,105,103,104,116,85,112,65,110,100,72,111,114,105,122,111,110,116,97,108,17,98,111,120,76,105,103,104,116,85,112,65,110,100,76,101,102,116,18,98,111,120,76,105,103,104,116,85,112,65,110,100,82,105,103,104,116,16,98,111,120,76,105,103,104,116,86,101,114,116,105,99,97,108,29,98,111,120,76,105,103,104,116,86,101,114,116,105,99,97,108,65,110,100,72,111,114,105,122,111,110,116,97,108,23,98,111,120,76,105,103,104,116,86,101,114,116,105,99,97,108,65,110,100,76,101,102,116,24,98,111,120,76,105,103,104,116,86,101,114,116,105,99,97,108,65,110,100,82,105,103,104,116,31,98,111,120,82,105,103,104,116,68,111,119,110,72,101,97,118,121,65,110,100,76,101,102,116,85,112,76,105,103,104,116,29,98,111,120,82,105,103,104,116,72,101,97,118,121,65,110,100,76,101,102,116,68,111,119,110,76,105,103,104,116,27,98,111,120,82,105,103,104,116,72,101,97,118,121,65,110,100,76,101,102,116,85,112,76,105,103,104,116,33,98,111,120,82,105,103,104,116,72,101,97,118,121,65,110,100,76,101,102,116,86,101,114,116,105,99,97,108,76,105,103,104,116,29,98,111,120,82,105,103,104,116,76,105,103,104,116,65,110,100,76,101,102,116,68,111,119,110,72,101,97,118,121,27,98,111,120,82,105,103,104,116,76,105,103,104,116,65,110,100,76,101,102,116,85,112,72,101,97,118,121,33,98,111,120,82,105,103,104,116,76,105,103,104,116,65,110,100,76,101,102,116,86,101,114,116,105,99,97,108,72,101,97,118,121,31,98,111,120,82,105,103,104,116,85,112,72,101,97,118,121,65,110,100,76,101,102,116,68,111,119,110,76,105,103,104,116,30,98,111,120,85,112,68,111,117,98,108,101,65,110,100,72,111,114,105,122,111,110,116,97,108,83,105,110,103,108,101,24,98,111,120,85,112,68,111,117,98,108,101,65,110,100,76,101,102,116,83,105,110,103,108,101,25,98,111,120,85,112,68,111,117,98,108,101,65,110,100,82,105,103,104,116,83,105,110,103,108,101,32,98,111,120,85,112,72,101,97,118,121,65,110,100,68,111,119,110,72,111,114,105,122,111,110,116,97,108,76,105,103,104,116,28,98,111,120,85,112,72,101,97,118,121,65,110,100,72,111,114,105,122,111,110,116,97,108,76,105,103,104,116,26,98,111,120,85,112,72,101,97,118,121,65,110,100,76,101,102,116,68,111,119,110,76,105,103,104,116,22,98,111,120,85,112,72,101,97,118,121,65,110,100,76,101,102,116,76,105,103,104,116,27,98,111,120,85,112,72,101,97,118,121,65,110,100,82,105,103,104,116,68,111,119,110,76,105,103,104,116,23,98,111,120,85,112,72,101,97,118,121,65,110,100,82,105,103,104,116,76,105,103,104,116,32,98,111,120,85,112,76,105,103,104,116,65,110,100,68,111,119,110,72,111,114,105,122,111,110,116,97,108,72,101,97,118,121,28,98,111,120,85,112,76,105,103,104,116,65,110,100,72,111,114,105,122,111,110,116,97,108,72,101,97,118,121,26,98,111,120,85,112,76,105,103,104,116,65,110,100,76,101,102,116,68,111,119,110,72,101,97,118,121,22,98,111,120,85,112,76,105,103,104,116,65,110,100,76,101,102,116,72,101,97,118,121,27,98,111,120,85,112,76,105,103,104,116,65,110,100,82,105,103,104,116,68,111,119,110,72,101,97,118,121,23,98,111,120,85,112,76,105,103,104,116,65,110,100,82,105,103,104,116,72,101,97,118,121,30,98,111,120,85,112,83,105,110,103,108,101,65,110,100,72,111,114,105,122,111,110,116,97,108,68,111,117,98,108,101,24,98,111,120,85,112,83,105,110,103,108,101,65,110,100,76,101,102,116,68,111,117,98,108,101,25,98,111,120,85,112,83,105,110,103,108,101,65,110,100,82,105,103,104,116,68,111,117,98,108,101,36,98,111,120,86,101,114,116,105,99,97,108,68,111,117,98,108,101,65,110,100,72,111,114,105,122,111,110,116,97,108,83,105,110,103,108,101,30,98,111,120,86,101,114,116,105,99,97,108,68,111,117,98,108,101,65,110,100,76,101,102,116,83,105,110,103,108,101,31,98,111,120,86,101,114,116,105,99,97,108,68,111,117,98,108,101,65,110,100,82,105,103,104,116,83,105,110,103,108,101,34,98,111,120,86,101,114,116,105,99,97,108,72,101,97,118,121,65,110,100,72,111,114,105,122,111,110,116,97,108,76,105,103,104,116,28,98,111,120,86,101,114,116,105,99,97,108,72,101,97,118,121,65,110,100,76,101,102,116,76,105,103,104,116,29,98,111,120,86,101,114,116,105,99,97,108,72,101,97,118,121,65,110,100,82,105,103,104,116,76,105,103,104,116,34,98,111,120,86,101,114,116,105,99,97,108,76,105,103,104,116,65,110,100,72,111,114,105,122,111,110,116,97,108,72,101,97,118,121,28,98,111,120,86,101,114,116,105,99,97,108,76,105,103,104,116,65,110,100,76,101,102,116,72,101,97,118,121,29,98,111,120,86,101,114,116,105,99,97,108,76,105,103,104,116,65,110,100,82,105,103,104,116,72,101,97,118,121,36,98,111,120,86,101,114,116,105,99,97,108,83,105,110,103,108,101,65,110,100,72,111,114,105,122,111,110,116,97,108,68,111,117,98,108,101,30,98,111,120,86,101,114,116,105,99,97,108,83,105,110,103,108,101,65,110,100,76,101,102,116,68,111,117,98,108,101,31,98,111,120,86,101,114,116,105,99,97,108,83,105,110,103,108,101,65,110,100,82,105,103,104,116,68,111,117,98,108,101,25,108,111,119,101,114,79,110,101,69,105,103,104,116,104,66,108,111,99,107,46,115,116,121,112,111,26,108,111,119,101,114,79,110,101,81,117,97,114,116,101,114,66,108,111,99,107,46,115,116,121,112,111,28,108,111,119,101,114,84,104,114,101,101,69,105,103,104,116,104,115,66,108,111,99,107,46,115,116,121,112,111,20,108,111,119,101,114,72,97,108,102,66,108,111,99,107,46,115,116,121,112,111,27,108,111,119,101,114,70,105,118,101,69,105,103,104,116,104,115,66,108,111,99,107,46,115,116,121,112,111,29,108,111,119,101,114,84,104,114,101,101,81,117,97,114,116,101,114,115,66,108,111,99,107,46,115,116,121,112,111,28,108,111,119,101,114,83,101,118,101,110,69,105,103,104,116,104,115,66,108,111,99,107,46,115,116,121,112,111,15,102,117,108,108,66,108,111,99,107,46,115,116,121,112,111,20,117,112,112,101,114,72,97,108,102,66,108,111,99,107,46,115,116,121,112,111,25,117,112,112,101,114,79,110,101,69,105,103,104,116,104,66,108,111,99,107,46,115,116,121,112,111,24,108,101,102,116,79,110,101,69,105,103,104,116,104,66,108,111,99,107,46,115,116,121,112,111,25,108,101,102,116,79,110,101,81,117,97,114,116,101,114,66,108,111,99,107,46,115,116,121,112,111,27,108,101,102,116,84,104,114,101,101,69,105,103,104,116,104,115,66,108,111,99,107,46,115,116,121,112,111,15,108,101,102,116,66,108,111,99,107,46,115,116,121,112,111,26,108,101,102,116,70,105,118,101,69,105,103,104,116,104,115,66,108,111,99,107,46,115,116,121,112,111,28,108,101,102,116,84,104,114,101,101,81,117,97,114,116,101,114,115,66,108,111,99,107,46,115,116,121,112,111,27,108,101,102,116,83,101,118,101,110,69,105,103,104,116,104,115,66,108,111,99,107,46,115,116,121,112,111,16,114,105,103,104,116,66,108,111,99,107,46,115,116,121,112,111,25,114,105,103,104,116,79,110,101,69,105,103,104,116,104,66,108,111,99,107,46,115,116,121,112,111,20,108,111,119,101,114,76,101,102,116,66,108,111,99,107,46,115,116,121,112,111,21,108,111,119,101,114,82,105,103,104,116,66,108,111,99,107,46,115,116,121,112,111,20,117,112,112,101,114,76,101,102,116,66,108,111,99,107,46,115,116,121,112,111,45,117,112,112,101,114,76,101,102,116,65,110,100,76,111,119,101,114,76,101,102,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,46,115,116,121,112,111,33,117,112,112,101,114,76,101,102,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,46,115,116,121,112,111,45,117,112,112,101,114,76,101,102,116,65,110,100,85,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,76,101,102,116,66,108,111,99,107,46,115,116,121,112,111,46,117,112,112,101,114,76,101,102,116,65,110,100,85,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,46,115,116,121,112,111,21,117,112,112,101,114,82,105,103,104,116,66,108,111,99,107,46,115,116,121,112,111,33,117,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,76,101,102,116,66,108,111,99,107,46,115,116,121,112,111,46,117,112,112,101,114,82,105,103,104,116,65,110,100,76,111,119,101,114,76,101,102,116,65,110,100,76,111,119,101,114,82,105,103,104,116,66,108,111,99,107,46,115,116,121,112,111,16,115,104,97,100,101,108,105,103,104,116,46,115,116,121,112,111,17,115,104,97,100,101,109,101,100,105,117,109,46,115,116,121,112,111,15,115,104,97,100,101,100,97,114,107,46,115,116,121,112,111,32,114,101,118,101,114,115,101,100,82,111,116,97,116,101,100,70,108,111,114,97,108,72,101,97,114,116,66,117,108,108,101,116,16,119,104,105,116,101,83,109,105,108,105,110,103,70,97,99,101,16,98,108,97,99,107,83,109,105,108,105,110,103,70,97,99,101,11,115,117,110,87,105,116,104,82,97,121,115,5,118,101,110,117,115,4,109,97,114,115,14,115,112,97,100,101,66,108,97,99,107,83,117,105,116,13,99,108,117,98,66,108,97,99,107,83,117,105,116,14,104,101,97,114,116,66,108,97,99,107,83,117,105,116,16,100,105,97,109,111,110,100,66,108,97,99,107,83,117,105,116,9,99,104,101,99,107,109,97,114,107,24,114,111,116,97,116,101,100,70,108,111,114,97,108,72,101,97,114,116,66,117,108,108,101,116,9,112,117,98,108,105,115,104,101,100,6,99,97,114,101,111,102,6,109,105,110,117,116,101,6,115,101,99,111,110,100,9,108,105,116,101,114,83,105,103,110,6,110,117,109,101,114,111,9,101,115,116,105,109,97,116,101,100,12,98,108,97,99,107,72,101,120,97,103,111,110,22,98,108,97,99,107,72,111,114,105,122,111,110,116,97,108,69,108,108,105,112,115,101,16,98,108,97,99,107,76,97,114,103,101,67,105,114,99,108,101,16,98,108,97,99,107,76,97,114,103,101,83,113,117,97,114,101,18,98,108,97,99,107,77,101,100,105,117,109,68,105,97,109,111,110,100,30,98,108,97,99,107,77,101,100,105,117,109,68,111,119,110,84,114,105,97,110,103,108,101,67,101,110,116,114,101,100,30,98,108,97,99,107,77,101,100,105,117,109,76,101,102,116,84,114,105,97,110,103,108,101,67,101,110,116,114,101,100,18,98,108,97,99,107,77,101,100,105,117,109,76,111,122,101,110,103,101,31,98,108,97,99,107,77,101,100,105,117,109,82,105,103,104,116,84,114,105,97,110,103,108,101,67,101,110,116,114,101,100,28,98,108,97,99,107,77,101,100,105,117,109,85,112,84,114,105,97,110,103,108,101,67,101,110,116,114,101,100,13,98,108,97,99,107,80,101,110,116,97,103,111,110,17,98,108,97,99,107,83,109,97,108,108,68,105,97,109,111,110,100,17,98,108,97,99,107,83,109,97,108,108,76,111,122,101,110,103,101,20,98,108,97,99,107,86,101,114,116,105,99,97,108,69,108,108,105,112,115,101,20,98,108,97,99,107,86,101,114,121,115,109,97,108,108,83,113,117,97,114,101,21,98,111,116,116,111,109,72,97,108,102,66,108,97,99,107,67,105,114,99,108,101,22,104,111,114,105,122,111,110,116,97,108,66,108,97,99,107,72,101,120,97,103,111,110,20,108,111,119,101,114,72,97,108,102,87,104,105,116,101,83,113,117,97,114,101,24,108,111,119,101,114,76,101,102,116,72,97,108,102,87,104,105,116,101,83,113,117,97,114,101,18,116,111,112,72,97,108,102,66,108,97,99,107,67,105,114,99,108,101,18,116,111,112,72,97,108,102,87,104,105,116,101,83,113,117,97,114,101,23,116,111,112,82,105,103,104,116,72,97,108,102,87,104,105,116,101,83,113,117,97,114,101,12,119,104,105,116,101,72,101,120,97,103,111,110,22,119,104,105,116,101,72,111,114,105,122,111,110,116,97,108,69,108,108,105,112,115,101,16,119,104,105,116,101,76,97,114,103,101,83,113,117,97,114,101,18,119,104,105,116,101,77,101,100,105,117,109,68,105,97,109,111,110,100,18,119,104,105,116,101,77,101,100,105,117,109,76,111,122,101,110,103,101,13,119,104,105,116,101,80,101,110,116,97,103,111,110,17,119,104,105,116,101,83,109,97,108,108,76,111,122,101,110,103,101,20,119,104,105,116,101,86,101,114,116,105,99,97,108,69,108,108,105,112,115,101,20,119,104,105,116,101,86,101,114,121,115,109,97,108,108,83,113,117,97,114,101,24,97,109,112,101,114,115,97,110,100,95,97,109,112,101,114,115,97,110,100,46,108,105,103,97,15,98,97,114,95,104,121,112,104,101,110,46,108,105,103,97,19,98,97,114,95,98,114,97,99,101,114,105,103,104,116,46,108,105,103,97,21,98,97,114,95,98,114,97,99,107,101,116,114,105,103,104,116,46,108,105,103,97,12,98,97,114,95,98,97,114,46,108,105,103,97,24,98,97,114,95,98,97,114,95,98,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,18,98,97,114,95,98,97,114,95,101,113,117,97,108,46,108,105,103,97,20,98,97,114,95,98,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,14,98,97,114,95,101,113,117,97,108,46,108,105,103,97,16,98,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,19,100,111,108,108,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,14,112,108,117,115,95,112,108,117,115,46,108,105,103,97,19,112,108,117,115,95,112,108,117,115,95,112,108,117,115,46,108,105,103,97,17,112,108,117,115,95,103,114,101,97,116,101,114,46,108,105,103,97,22,101,113,117,97,108,95,99,111,108,111,110,95,101,113,117,97,108,46,108,105,103,97,23,101,113,117,97,108,95,101,120,99,108,97,109,95,101,113,117,97,108,46,108,105,103,97,16,101,113,117,97,108,95,101,113,117,97,108,46,108,105,103,97,22,101,113,117,97,108,95,101,113,117,97,108,95,101,113,117,97,108,46,108,105,103,97,24,101,113,117,97,108,95,101,113,117,97,108,95,103,114,101,97,116,101,114,46,108,105,103,97,18,101,113,117,97,108,95,103,114,101,97,116,101,114,46,108,105,103,97,26,101,113,117,97,108,95,103,114,101,97,116,101,114,95,103,114,101,97,116,101,114,46,108,105,103,97,20,101,113,117,97,108,95,108,101,115,115,95,108,101,115,115,46,108,105,103,97,22,101,113,117,97,108,95,115,108,97,115,104,95,101,113,117,97,108,46,108,105,103,97,19,103,114,101,97,116,101,114,95,104,121,112,104,101,110,46,108,105,103,97,27,103,114,101,97,116,101,114,95,104,121,112,104,101,110,95,103,114,101,97,116,101,114,46,108,105,103,97,18,103,114,101,97,116,101,114,95,99,111,108,111,110,46,108,105,103,97,18,103,114,101,97,116,101,114,95,101,113,117,97,108,46,108,105,103,97,26,103,114,101,97,116,101,114,95,101,113,117,97,108,95,103,114,101,97,116,101,114,46,108,105,103,97,20,103,114,101,97,116,101,114,95,103,114,101,97,116,101,114,46,108,105,103,97,27,103,114,101,97,116,101,114,95,103,114,101,97,116,101,114,95,104,121,112,104,101,110,46,108,105,103,97,26,103,114,101,97,116,101,114,95,103,114,101,97,116,101,114,95,101,113,117,97,108,46,108,105,103,97,28,103,114,101,97,116,101,114,95,103,114,101,97,116,101,114,95,103,114,101,97,116,101,114,46,108,105,103,97,16,108,101,115,115,95,104,121,112,104,101,110,46,108,105,103,97,23,108,101,115,115,95,104,121,112,104,101,110,95,104,121,112,104,101,110,46,108,105,103,97,24,108,101,115,115,95,104,121,112,104,101,110,95,103,114,101,97,116,101,114,46,108,105,103,97,21,108,101,115,115,95,104,121,112,104,101,110,95,108,101,115,115,46,108,105,103,97,15,108,101,115,115,95,99,111,108,111,110,46,108,105,103,97,30,108,101,115,115,95,101,120,99,108,97,109,95,104,121,112,104,101,110,95,104,121,112,104,101,110,46,108,105,103,97,18,108,101,115,115,95,97,115,116,101,114,105,115,107,46,108,105,103,97,26,108,101,115,115,95,97,115,116,101,114,105,115,107,95,103,114,101,97,116,101,114,46,108,105,103,97,13,108,101,115,115,95,98,97,114,46,108,105,103,97,17,108,101,115,115,95,98,97,114,95,98,97,114,46,108,105,103,97,21,108,101,115,115,95,98,97,114,95,98,97,114,95,98,97,114,46,108,105,103,97,21,108,101,115,115,95,98,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,16,108,101,115,115,95,100,111,108,108,97,114,46,108,105,103,97,24,108,101,115,115,95,100,111,108,108,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,14,108,101,115,115,95,112,108,117,115,46,108,105,103,97,22,108,101,115,115,95,112,108,117,115,95,103,114,101,97,116,101,114,46,108,105,103,97,15,108,101,115,115,95,101,113,117,97,108,46,108,105,103,97,21,108,101,115,115,95,101,113,117,97,108,95,101,113,117,97,108,46,108,105,103,97,29,108,101,115,115,95,101,113,117,97,108,95,101,113,117,97,108,95,103,114,101,97,116,101,114,46,108,105,103,97,23,108,101,115,115,95,101,113,117,97,108,95,103,114,101,97,116,101,114,46,108,105,103,97,20,108,101,115,115,95,101,113,117,97,108,95,108,101,115,115,46,108,105,103,97,17,108,101,115,115,95,103,114,101,97,116,101,114,46,108,105,103,97,14,108,101,115,115,95,108,101,115,115,46,108,105,103,97,21,108,101,115,115,95,108,101,115,115,95,104,121,112,104,101,110,46,108,105,103,97,20,108,101,115,115,95,108,101,115,115,95,101,113,117,97,108,46,108,105,103,97,19,108,101,115,115,95,108,101,115,115,95,108,101,115,115,46,108,105,103,97,20,108,101,115,115,95,97,115,99,105,105,116,105,108,100,101,46,108,105,103,97,28,108,101,115,115,95,97,115,99,105,105,116,105,108,100,101,95,103,114,101,97,116,101,114,46,108,105,103,97,31,108,101,115,115,95,97,115,99,105,105,116,105,108,100,101,95,97,115,99,105,105,116,105,108,100,101,46,108,105,103,97,15,108,101,115,115,95,115,108,97,115,104,46,108,105,103,97,23,108,101,115,115,95,115,108,97,115,104,95,103,114,101,97,116,101,114,46,108,105,103,97,22,97,115,99,105,105,116,105,108,100,101,95,104,121,112,104,101,110,46,108,105,103,97,18,97,115,99,105,105,116,105,108,100,101,95,97,116,46,108,105,103,97,21,97,115,99,105,105,116,105,108,100,101,95,101,113,117,97,108,46,108,105,103,97,23,97,115,99,105,105,116,105,108,100,101,95,103,114,101,97,116,101,114,46,108,105,103,97,26,97,115,99,105,105,116,105,108,100,101,95,97,115,99,105,105,116,105,108,100,101,46,108,105,103,97,34,97,115,99,105,105,116,105,108,100,101,95,97,115,99,105,105,116,105,108,100,101,95,103,114,101,97,116,101,114,46,108,105,103,97,22,97,115,99,105,105,99,105,114,99,117,109,95,101,113,117,97,108,46,108,105,103,97,20,112,101,114,99,101,110,116,95,112,101,114,99,101,110,116,46,108,105,103,97,12,110,111,116,101,45,109,117,115,105,99,97,108,15,110,111,116,101,100,98,108,45,109,117,115,105,99,97,108,13,98,108,97,110,107,45,98,114,97,105,108,108,101,13,100,111,116,115,49,45,98,114,97,105,108,108,101,14,100,111,116,115,49,50,45,98,114,97,105,108,108,101,15,100,111,116,115,49,50,51,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,51,52,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,52,53,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,52,53,54,45,98,114,97,105,108,108,101,19,100,111,116,115,49,50,51,52,53,54,55,45,98,114,97,105,108,108,101,20,100,111,116,115,49,50,51,52,53,54,55,56,45,98,114,97,105,108,108,101,19,100,111,116,115,49,50,51,52,53,54,56,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,52,53,55,45,98,114,97,105,108,108,101,19,100,111,116,115,49,50,51,52,53,55,56,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,52,53,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,52,54,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,52,54,55,45,98,114,97,105,108,108,101,19,100,111,116,115,49,50,51,52,54,55,56,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,52,54,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,52,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,52,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,52,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,51,53,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,53,54,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,53,54,55,45,98,114,97,105,108,108,101,19,100,111,116,115,49,50,51,53,54,55,56,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,53,54,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,53,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,53,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,53,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,51,54,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,51,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,51,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,51,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,51,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,50,52,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,52,53,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,52,53,54,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,52,53,54,55,45,98,114,97,105,108,108,101,19,100,111,116,115,49,50,52,53,54,55,56,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,52,53,54,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,52,53,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,52,53,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,52,53,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,52,54,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,52,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,52,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,52,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,52,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,52,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,52,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,50,53,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,53,54,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,53,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,50,53,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,53,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,53,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,53,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,53,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,50,54,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,50,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,50,55,45,98,114,97,105,108,108,101,16,100,111,116,115,49,50,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,50,56,45,98,114,97,105,108,108,101,14,100,111,116,115,49,51,45,98,114,97,105,108,108,101,15,100,111,116,115,49,51,52,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,52,53,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,52,53,54,45,98,114,97,105,108,108,101,18,100,111,116,115,49,51,52,53,54,55,45,98,114,97,105,108,108,101,19,100,111,116,115,49,51,52,53,54,55,56,45,98,114,97,105,108,108,101,18,100,111,116,115,49,51,52,53,54,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,52,53,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,51,52,53,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,52,53,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,52,54,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,52,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,51,52,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,52,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,52,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,52,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,52,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,51,53,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,53,54,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,53,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,51,53,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,53,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,53,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,53,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,53,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,51,54,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,51,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,51,55,45,98,114,97,105,108,108,101,16,100,111,116,115,49,51,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,51,56,45,98,114,97,105,108,108,101,14,100,111,116,115,49,52,45,98,114,97,105,108,108,101,15,100,111,116,115,49,52,53,45,98,114,97,105,108,108,101,16,100,111,116,115,49,52,53,54,45,98,114,97,105,108,108,101,17,100,111,116,115,49,52,53,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,49,52,53,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,49,52,53,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,52,53,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,52,53,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,52,53,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,52,54,45,98,114,97,105,108,108,101,16,100,111,116,115,49,52,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,52,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,52,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,52,55,45,98,114,97,105,108,108,101,16,100,111,116,115,49,52,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,52,56,45,98,114,97,105,108,108,101,14,100,111,116,115,49,53,45,98,114,97,105,108,108,101,15,100,111,116,115,49,53,54,45,98,114,97,105,108,108,101,16,100,111,116,115,49,53,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,49,53,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,49,53,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,53,55,45,98,114,97,105,108,108,101,16,100,111,116,115,49,53,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,53,56,45,98,114,97,105,108,108,101,14,100,111,116,115,49,54,45,98,114,97,105,108,108,101,15,100,111,116,115,49,54,55,45,98,114,97,105,108,108,101,16,100,111,116,115,49,54,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,49,54,56,45,98,114,97,105,108,108,101,14,100,111,116,115,49,55,45,98,114,97,105,108,108,101,15,100,111,116,115,49,55,56,45,98,114,97,105,108,108,101,14,100,111,116,115,49,56,45,98,114,97,105,108,108,101,13,100,111,116,115,50,45,98,114,97,105,108,108,101,14,100,111,116,115,50,51,45,98,114,97,105,108,108,101,15,100,111,116,115,50,51,52,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,52,53,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,52,53,54,45,98,114,97,105,108,108,101,18,100,111,116,115,50,51,52,53,54,55,45,98,114,97,105,108,108,101,19,100,111,116,115,50,51,52,53,54,55,56,45,98,114,97,105,108,108,101,18,100,111,116,115,50,51,52,53,54,56,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,52,53,55,45,98,114,97,105,108,108,101,18,100,111,116,115,50,51,52,53,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,52,53,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,52,54,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,52,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,50,51,52,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,52,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,52,55,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,52,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,52,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,51,53,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,53,54,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,53,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,50,51,53,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,53,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,53,55,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,53,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,53,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,51,54,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,50,51,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,51,55,45,98,114,97,105,108,108,101,16,100,111,116,115,50,51,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,51,56,45,98,114,97,105,108,108,101,14,100,111,116,115,50,52,45,98,114,97,105,108,108,101,15,100,111,116,115,50,52,53,45,98,114,97,105,108,108,101,16,100,111,116,115,50,52,53,54,45,98,114,97,105,108,108,101,17,100,111,116,115,50,52,53,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,50,52,53,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,50,52,53,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,52,53,55,45,98,114,97,105,108,108,101,17,100,111,116,115,50,52,53,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,52,53,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,52,54,45,98,114,97,105,108,108,101,16,100,111,116,115,50,52,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,50,52,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,52,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,52,55,45,98,114,97,105,108,108,101,16,100,111,116,115,50,52,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,52,56,45,98,114,97,105,108,108,101,14,100,111,116,115,50,53,45,98,114,97,105,108,108,101,15,100,111,116,115,50,53,54,45,98,114,97,105,108,108,101,16,100,111,116,115,50,53,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,50,53,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,50,53,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,53,55,45,98,114,97,105,108,108,101,16,100,111,116,115,50,53,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,53,56,45,98,114,97,105,108,108,101,14,100,111,116,115,50,54,45,98,114,97,105,108,108,101,15,100,111,116,115,50,54,55,45,98,114,97,105,108,108,101,16,100,111,116,115,50,54,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,50,54,56,45,98,114,97,105,108,108,101,14,100,111,116,115,50,55,45,98,114,97,105,108,108,101,15,100,111,116,115,50,55,56,45,98,114,97,105,108,108,101,14,100,111,116,115,50,56,45,98,114,97,105,108,108,101,13,100,111,116,115,51,45,98,114,97,105,108,108,101,14,100,111,116,115,51,52,45,98,114,97,105,108,108,101,15,100,111,116,115,51,52,53,45,98,114,97,105,108,108,101,16,100,111,116,115,51,52,53,54,45,98,114,97,105,108,108,101,17,100,111,116,115,51,52,53,54,55,45,98,114,97,105,108,108,101,18,100,111,116,115,51,52,53,54,55,56,45,98,114,97,105,108,108,101,17,100,111,116,115,51,52,53,54,56,45,98,114,97,105,108,108,101,16,100,111,116,115,51,52,53,55,45,98,114,97,105,108,108,101,17,100,111,116,115,51,52,53,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,51,52,53,56,45,98,114,97,105,108,108,101,15,100,111,116,115,51,52,54,45,98,114,97,105,108,108,101,16,100,111,116,115,51,52,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,51,52,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,51,52,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,51,52,55,45,98,114,97,105,108,108,101,16,100,111,116,115,51,52,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,51,52,56,45,98,114,97,105,108,108,101,14,100,111,116,115,51,53,45,98,114,97,105,108,108,101,15,100,111,116,115,51,53,54,45,98,114,97,105,108,108,101,16,100,111,116,115,51,53,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,51,53,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,51,53,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,51,53,55,45,98,114,97,105,108,108,101,16,100,111,116,115,51,53,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,51,53,56,45,98,114,97,105,108,108,101,14,100,111,116,115,51,54,45,98,114,97,105,108,108,101,15,100,111,116,115,51,54,55,45,98,114,97,105,108,108,101,16,100,111,116,115,51,54,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,51,54,56,45,98,114,97,105,108,108,101,14,100,111,116,115,51,55,45,98,114,97,105,108,108,101,15,100,111,116,115,51,55,56,45,98,114,97,105,108,108,101,14,100,111,116,115,51,56,45,98,114,97,105,108,108,101,13,100,111,116,115,52,45,98,114,97,105,108,108,101,14,100,111,116,115,52,53,45,98,114,97,105,108,108,101,15,100,111,116,115,52,53,54,45,98,114,97,105,108,108,101,16,100,111,116,115,52,53,54,55,45,98,114,97,105,108,108,101,17,100,111,116,115,52,53,54,55,56,45,98,114,97,105,108,108,101,16,100,111,116,115,52,53,54,56,45,98,114,97,105,108,108,101,15,100,111,116,115,52,53,55,45,98,114,97,105,108,108,101,16,100,111,116,115,52,53,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,52,53,56,45,98,114,97,105,108,108,101,14,100,111,116,115,52,54,45,98,114,97,105,108,108,101,15,100,111,116,115,52,54,55,45,98,114,97,105,108,108,101,16,100,111,116,115,52,54,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,52,54,56,45,98,114,97,105,108,108,101,14,100,111,116,115,52,55,45,98,114,97,105,108,108,101,15,100,111,116,115,52,55,56,45,98,114,97,105,108,108,101,14,100,111,116,115,52,56,45,98,114,97,105,108,108,101,13,100,111,116,115,53,45,98,114,97,105,108,108,101,14,100,111,116,115,53,54,45,98,114,97,105,108,108,101,15,100,111,116,115,53,54,55,45,98,114,97,105,108,108,101,16,100,111,116,115,53,54,55,56,45,98,114,97,105,108,108,101,15,100,111,116,115,53,54,56,45,98,114,97,105,108,108,101,14,100,111,116,115,53,55,45,98,114,97,105,108,108,101,15,100,111,116,115,53,55,56,45,98,114,97,105,108,108,101,14,100,111,116,115,53,56,45,98,114,97,105,108,108,101,13,100,111,116,115,54,45,98,114,97,105,108,108,101,14,100,111,116,115,54,55,45,98,114,97,105,108,108,101,15,100,111,116,115,54,55,56,45,98,114,97,105,108,108,101,14,100,111,116,115,54,56,45,98,114,97,105,108,108,101,13,100,111,116,115,55,45,98,114,97,105,108,108,101,14,100,111,116,115,55,56,45,98,114,97,105,108,108,101,13,100,111,116,115,56,45,98,114,97,105,108,108,101,13,110,117,109,101,114,97,108,45,103,114,101,101,107,18,108,111,119,101,114,110,117,109,101,114,97,108,45,103,114,101,101,107,13,97,112,111,115,116,114,111,112,104,101,109,111,100,14,99,111,109,109,97,116,117,114,110,101,100,109,111,100,16,102,105,114,115,116,116,111,110,101,99,104,105,110,101,115,101,12,100,105,101,114,101,115,105,115,99,111,109,98,13,100,111,116,97,99,99,101,110,116,99,111,109,98,9,103,114,97,118,101,99,111,109,98,9,97,99,117,116,101,99,111,109,98,16,104,117,110,103,97,114,117,109,108,97,117,116,99,111,109,98,14,99,105,114,99,117,109,102,108,101,120,99,111,109,98,9,99,97,114,111,110,99,111,109,98,9,98,114,101,118,101,99,111,109,98,8,114,105,110,103,99,111,109,98,9,116,105,108,100,101,99,111,109,98,10,109,97,99,114,111,110,99,111,109,98,13,104,111,111,107,97,98,111,118,101,99,111,109,98,20,99,111,109,109,97,116,117,114,110,101,100,97,98,111,118,101,99,111,109,98,8,104,111,114,110,99,111,109,98,12,100,111,116,98,101,108,111,119,99,111,109,98,15,99,111,109,109,97,97,99,99,101,110,116,99,111,109,98,11,99,101,100,105,108,108,97,99,111,109,98,10,111,103,111,110,101,107,99,111,109,98,13,103,114,97,118,101,116,111,110,101,99,111,109,98,13,97,99,117,116,101,116,111,110,101,99,111,109,98,17,100,105,101,114,101,115,105,115,99,111,109,98,46,99,97,115,101,18,100,111,116,97,99,99,101,110,116,99,111,109,98,46,99,97,115,101,14,103,114,97,118,101,99,111,109,98,46,99,97,115,101,14,97,99,117,116,101,99,111,109,98,46,99,97,115,101,21,104,117,110,103,97,114,117,109,108,97,117,116,99,111,109,98,46,99,97,115,101,19,99,105,114,99,117,109,102,108,101,120,99,111,109,98,46,99,97,115,101,14,99,97,114,111,110,99,111,109,98,46,99,97,115,101,14,98,114,101,118,101,99,111,109,98,46,99,97,115,101,13,114,105,110,103,99,111,109,98,46,99,97,115,101,14,116,105,108,100,101,99,111,109,98,46,99,97,115,101,15,109,97,99,114,111,110,99,111,109,98,46,99,97,115,101,18,104,111,111,107,97,98,111,118,101,99,111,109,98,46,99,97,115,101,13,104,111,114,110,99,111,109,98,46,99,97,115,101,17,97,99,117,116,101,99,111,109,98,46,108,111,99,108,80,76,75,22,97,99,117,116,101,99,111,109,98,46,99,97,115,101,46,108,111,99,108,80,76,75,15,112,101,114,105,115,112,111,109,101,110,105,99,111,109,98,5,116,111,110,111,115,10,116,111,110,111,115,46,99,97,115,101,13,100,105,101,114,101,115,105,115,116,111,110,111,115,12,98,114,101,118,101,99,111,109,98,45,99,121,17,98,114,101,118,101,99,111,109,98,45,99,121,46,99,97,115,101,7,117,110,105,48,48,48,57,3,76,73,71,16,98,97,104,116,46,66,82,65,67,75,69,84,46,54,48,48,18,100,111,108,108,97,114,46,66,82,65,67,75,69,84,46,54,48,48,31,100,111,108,108,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,46,66,82,65,67,75,69,84,46,54,48,48,28,108,101,115,115,95,100,111,108,108,97,114,46,108,105,103,97,46,66,82,65,67,75,69,84,46,54,48,48,36,108,101,115,115,95,100,111,108,108,97,114,95,103,114,101,97,116,101,114,46,108,105,103,97,46,66,82,65,67,75,69,84,46,54,48,48,7,117,110,105,49,69,65,69,7,117,110,105,49,69,66,54,7,117,110,105,49,69,66,48,7,117,110,105,49,69,66,50,7,117,110,105,49,69,66,52,7,117,110,105,48,49,67,68,7,117,110,105,49,69,65,52,7,117,110,105,49,69,65,67,7,117,110,105,49,69,65,54,7,117,110,105,49,69,65,56,7,117,110,105,49,69,65,65,7,117,110,105,49,69,65,48,7,117,110,105,49,69,65,50,7,117,110,105,49,69,66,69,7,117,110,105,49,69,67,54,7,117,110,105,49,69,67,48,7,117,110,105,49,69,67,50,7,117,110,105,49,69,67,52,7,117,110,105,49,69,66,56,7,117,110,105,49,69,66,65,7,117,110,105,48,49,57,48,7,117,110,105,48,49,65,57,7,117,110,105,49,69,66,67,7,117,110,105,48,49,66,55,7,117,110,105,48,49,50,50,7,117,110,105,48,50,49,69,7,117,110,105,49,69,67,65,7,117,110,105,49,69,67,56,7,117,110,105,48,49,51,54,7,117,110,105,48,49,51,66,7,117,110,105,48,49,52,53,7,117,110,105,48,49,57,68,7,117,110,105,49,69,68,48,7,117,110,105,49,69,68,56,7,117,110,105,49,69,68,50,7,117,110,105,49,69,68,52,7,117,110,105,49,69,68,54,7,117,110,105,49,69,67,67,7,117,110,105,49,69,67,69,7,117,110,105,49,69,68,65,7,117,110,105,49,69,69,50,7,117,110,105,49,69,68,67,7,117,110,105,49,69,68,69,7,117,110,105,49,69,69,48,7,117,110,105,48,49,69,65,7,117,110,105,48,49,56,54,7,117,110,105,48,49,53,54,7,117,110,105,48,50,49,56,7,117,110,105,49,69,57,69,7,117,110,105,48,49,56,70,7,117,110,105,48,49,54,50,7,117,110,105,48,50,49,65,7,117,110,105,49,69,69,52,7,117,110,105,49,69,69,54,7,117,110,105,49,69,69,56,7,117,110,105,49,69,70,48,7,117,110,105,49,69,69,65,7,117,110,105,49,69,69,67,7,117,110,105,49,69,69,69,7,117,110,105,48,50,52,53,7,117,110,105,49,69,70,52,7,117,110,105,49,69,70,54,7,117,110,105,48,50,51,50,7,117,110,105,49,69,70,56,7,117,110,105,48,50,54,65,7,117,110,105,49,69,65,70,7,117,110,105,49,69,66,55,7,117,110,105,49,69,66,49,7,117,110,105,49,69,66,51,7,117,110,105,49,69,66,53,7,117,110,105,48,49,67,69,7,117,110,105,49,69,65,53,7,117,110,105,49,69,65,68,7,117,110,105,49,69,65,55,7,117,110,105,49,69,65,57,7,117,110,105,49,69,65,66,7,117,110,105,49,69,65,49,7,117,110,105,49,69,65,51,7,117,110,105,49,69,66,70,7,117,110,105,49,69,67,55,7,117,110,105,49,69,67,49,7,117,110,105,49,69,67,51,7,117,110,105,49,69,67,53,7,117,110,105,49,69,66,57,7,117,110,105,49,69,66,66,7,117,110,105,48,50,53,66,7,117,110,105,48,50,56,51,7,117,110,105,49,69,66,68,7,117,110,105,48,50,53,57,7,117,110,105,48,50,57,50,7,117,110,105,48,49,50,51,7,117,110,105,48,50,49,70,7,117,110,105,49,69,67,66,7,117,110,105,49,69,67,57,7,117,110,105,48,50,51,55,7,117,110,105,48,49,51,55,7,117,110,105,48,49,51,67,7,117,110,105,48,49,52,54,7,117,110,105,48,50,55,50,7,117,110,105,49,69,68,49,7,117,110,105,49,69,68,57,7,117,110,105,49,69,68,51,7,117,110,105,49,69,68,53,7,117,110,105,49,69,68,55,7,117,110,105,49,69,67,68,7,117,110,105,49,69,67,70,7,117,110,105,49,69,68,66,7,117,110,105,49,69,69,51,7,117,110,105,49,69,68,68,7,117,110,105,49,69,68,70,7,117,110,105,49,69,69,49,7,117,110,105,48,49,69,66,7,117,110,105,48,50,53,52,7,117,110,105,48,49,53,55,7,117,110,105,48,50,49,57,7,117,110,105,48,49,54,51,7,117,110,105,48,50,49,66,7,117,110,105,48,50,65,55,7,117,110,105,49,69,69,53,7,117,110,105,49,69,69,55,7,117,110,105,49,69,69,57,7,117,110,105,49,69,70,49,7,117,110,105,49,69,69,66,7,117,110,105,49,69,69,68,7,117,110,105,49,69,69,70,7,117,110,105,48,50,56,67,7,117,110,105,49,69,70,53,7,117,110,105,49,69,70,55,7,117,110,105,48,50,51,51,7,117,110,105,49,69,70,57,7,117,110,105,50,48,55,70,7,117,110,105,48,52,49,48,7,117,110,105,48,52,49,49,7,117,110,105,48,52,49,50,7,117,110,105,48,52,49,51,7,117,110,105,48,52,48,51,7,117,110,105,48,52,57,48,7,117,110,105,48,52,49,52,7,117,110,105,48,52,49,53,7,117,110,105,48,52,48,48,7,117,110,105,48,52,48,49,7,117,110,105,48,52,49,54,7,117,110,105,48,52,49,55,7,117,110,105,48,52,49,56,7,117,110,105,48,52,49,57,7,117,110,105,48,52,48,68,7,117,110,105,48,52,49,65,7,117,110,105,48,52,48,67,7,117,110,105,48,52,49,66,7,117,110,105,48,52,49,67,7,117,110,105,48,52,49,68,7,117,110,105,48,52,49,69,7,117,110,105,48,52,49,70,7,117,110,105,48,52,50,48,7,117,110,105,48,52,50,49,7,117,110,105,48,52,50,50,7,117,110,105,48,52,50,51,7,117,110,105,48,52,48,69,7,117,110,105,48,52,50,52,7,117,110,105,48,52,50,53,7,117,110,105,48,52,50,55,7,117,110,105,48,52,50,54,7,117,110,105,48,52,50,56,7,117,110,105,48,52,50,57,7,117,110,105,48,52,48,70,7,117,110,105,48,52,50,67,7,117,110,105,48,52,50,65,7,117,110,105,48,52,50,66,7,117,110,105,48,52,48,57,7,117,110,105,48,52,48,65,7,117,110,105,48,52,48,53,7,117,110,105,48,52,48,52,7,117,110,105,48,52,50,68,7,117,110,105,48,52,48,54,7,117,110,105,48,52,48,55,7,117,110,105,48,52,48,56,7,117,110,105,48,52,48,66,7,117,110,105,48,52,50,69,7,117,110,105,48,52,50,70,7,117,110,105,48,52,48,50,7,117,110,105,48,52,57,50,7,117,110,105,48,52,57,54,7,117,110,105,48,52,57,65,7,117,110,105,48,52,65,50,7,117,110,105,48,52,65,69,7,117,110,105,48,52,66,48,7,117,110,105,48,52,66,50,7,117,110,105,48,52,66,54,7,117,110,105,48,52,66,65,7,117,110,105,48,52,67,48,7,117,110,105,48,52,68,56,7,117,110,105,48,52,69,50,7,117,110,105,48,52,69,56,7,117,110,105,48,52,69,69,15,117,110,105,48,52,49,52,46,108,111,99,108,66,71,82,15,117,110,105,48,52,49,66,46,108,111,99,108,66,71,82,15,117,110,105,48,52,50,52,46,108,111,99,108,66,71,82,7,117,110,105,48,52,51,48,7,117,110,105,48,52,51,49,7,117,110,105,48,52,51,50,7,117,110,105,48,52,51,51,7,117,110,105,48,52,53,51,7,117,110,105,48,52,57,49,7,117,110,105,48,52,51,52,7,117,110,105,48,52,51,53,7,117,110,105,48,52,53,48,7,117,110,105,48,52,53,49,7,117,110,105,48,52,51,54,7,117,110,105,48,52,51,55,7,117,110,105,48,52,51,56,7,117,110,105,48,52,51,57,7,117,110,105,48,52,53,68,7,117,110,105,48,52,51,65,7,117,110,105,48,52,53,67,7,117,110,105,48,52,51,66,7,117,110,105,48,52,51,67,7,117,110,105,48,52,51,68,7,117,110,105,48,52,51,69,7,117,110,105,48,52,51,70,7,117,110,105,48,52,52,48,7,117,110,105,48,52,52,49,7,117,110,105,48,52,52,50,7,117,110,105,48,52,52,51,7,117,110,105,48,52,53,69,7,117,110,105,48,52,52,52,7,117,110,105,48,52,52,53,7,117,110,105,48,52,52,55,7,117,110,105,48,52,52,54,7,117,110,105,48,52,52,56,7,117,110,105,48,52,52,57,7,117,110,105,48,52,53,70,7,117,110,105,48,52,52,67,7,117,110,105,48,52,52,65,7,117,110,105,48,52,52,66,7,117,110,105,48,52,53,57,7,117,110,105,48,52,53,65,7,117,110,105,48,52,53,53,7,117,110,105,48,52,53,52,7,117,110,105,48,52,52,68,7,117,110,105,48,52,53,54,7,117,110,105,48,52,53,55,7,117,110,105,48,52,53,56,7,117,110,105,48,52,53,66,7,117,110,105,48,52,52,69,7,117,110,105,48,52,52,70,7,117,110,105,48,52,53,50,7,117,110,105,48,52,57,51,7,117,110,105,48,52,57,55,7,117,110,105,48,52,57,66,7,117,110,105,48,52,65,51,7,117,110,105,48,52,65,70,7,117,110,105,48,52,66,49,7,117,110,105,48,52,66,51,7,117,110,105,48,52,66,55,7,117,110,105,48,52,66,66,7,117,110,105,48,52,67,70,7,117,110,105,48,52,68,57,7,117,110,105,48,52,69,51,7,117,110,105,48,52,69,57,7,117,110,105,48,52,69,70,15,117,110,105,48,52,51,50,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,51,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,52,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,54,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,55,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,56,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,57,46,108,111,99,108,66,71,82,15,117,110,105,48,52,53,68,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,65,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,66,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,70,46,108,111,99,108,66,71,82,15,117,110,105,48,52,52,50,46,108,111,99,108,66,71,82,15,117,110,105,48,52,52,54,46,108,111,99,108,66,71,82,15,117,110,105,48,52,52,56,46,108,111,99,108,66,71,82,15,117,110,105,48,52,52,57,46,108,111,99,108,66,71,82,15,117,110,105,48,52,52,67,46,108,111,99,108,66,71,82,15,117,110,105,48,52,52,65,46,108,111,99,108,66,71,82,15,117,110,105,48,52,52,69,46,108,111,99,108,66,71,82,15,117,110,105,48,52,51,49,46,108,111,99,108,83,82,66,7,117,110,105,48,51,57,52,7,117,110,105,48,51,65,57,7,117,110,105,48,51,67,70,7,117,110,105,48,51,66,67,7,117,110,105,48,51,67,50,7,117,110,105,48,51,68,55,7,117,110,105,50,48,56,48,7,117,110,105,50,48,56,49,7,117,110,105,50,48,56,50,7,117,110,105,50,48,56,51,7,117,110,105,50,48,56,52,7,117,110,105,50,48,56,53,7,117,110,105,50,48,56,54,7,117,110,105,50,48,56,55,7,117,110,105,50,48,56,56,7,117,110,105,50,48,56,57,7,117,110,105,50,48,55,48,7,117,110,105,48,48,66,57,7,117,110,105,48,48,66,50,7,117,110,105,48,48,66,51,7,117,110,105,50,48,55,52,7,117,110,105,50,48,55,53,7,117,110,105,50,48,55,54,7,117,110,105,50,48,55,55,7,117,110,105,50,48,55,56,7,117,110,105,50,48,55,57,9,101,120,99,108,97,109,100,98,108,7,117,110,105,50,48,51,69,7,117,110,105,50,55,54,69,7,117,110,105,50,55,54,70,7,117,110,105,50,55,54,67,7,117,110,105,50,55,54,68,7,117,110,105,48,48,65,68,7,117,110,105,50,48,49,53,7,117,110,105,50,48,49,48,7,117,110,105,50,48,49,49,20,117,110,105,65,55,55,52,65,55,55,52,65,55,55,52,46,108,105,103,97,24,117,110,105,65,55,55,52,65,55,55,52,65,55,55,52,65,55,55,52,46,108,105,103,97,7,117,110,105,48,51,55,69,7,117,110,105,50,48,48,56,7,117,110,105,48,48,65,48,7,117,110,105,50,48,50,56,7,117,110,105,48,69,51,70,7,117,110,105,50,48,66,53,13,99,111,108,111,110,109,111,110,101,116,97,114,121,4,69,117,114,111,7,117,110,105,50,48,65,48,7,117,110,105,50,48,66,50,7,117,110,105,50,48,66,52,7,117,110,105,50,48,65,68,7,117,110,105,50,48,66,69,7,117,110,105,50,48,66,65,7,117,110,105,50,48,66,67,7,117,110,105,50,48,65,54,7,117,110,105,50,48,66,49,7,117,110,105,50,48,66,68,7,117,110,105,50,48,65,56,7,117,110,105,50,48,66,57,7,117,110,105,50,48,65,65,7,117,110,105,50,48,66,56,7,117,110,105,50,48,65,69,7,117,110,105,50,48,65,57,7,117,110,105,50,50,49,57,7,117,110,105,50,50,49,53,7,117,110,105,50,51,65,70,13,114,101,118,108,111,103,105,99,97,108,110,111,116,7,117,110,105,50,50,54,50,7,117,110,105,50,49,50,54,7,117,110,105,50,50,48,54,7,117,110,105,48,48,66,53,7,117,110,105,50,50,54,51,7,117,110,105,50,65,50,70,7,97,114,114,111,119,117,112,10,97,114,114,111,119,114,105,103,104,116,9,97,114,114,111,119,100,111,119,110,9,97,114,114,111,119,108,101,102,116,9,97,114,114,111,119,98,111,116,104,9,97,114,114,111,119,117,112,100,110,12,97,114,114,111,119,117,112,100,110,98,115,101,7,117,110,105,50,49,69,49,7,117,110,105,50,49,69,51,7,117,110,105,50,53,56,49,7,117,110,105,50,53,56,50,7,117,110,105,50,53,56,51,7,100,110,98,108,111,99,107,7,117,110,105,50,53,56,53,7,117,110,105,50,53,56,54,7,117,110,105,50,53,56,55,5,98,108,111,99,107,7,117,112,98,108,111,99,107,7,117,110,105,50,53,57,52,7,117,110,105,50,53,56,70,7,117,110,105,50,53,56,69,7,117,110,105,50,53,56,68,7,108,102,98,108,111,99,107,7,117,110,105,50,53,56,66,7,117,110,105,50,53,56,65,7,117,110,105,50,53,56,57,7,114,116,98,108,111,99,107,7,117,110,105,50,53,57,53,7,117,110,105,50,53,57,54,7,117,110,105,50,53,57,55,7,117,110,105,50,53,57,56,7,117,110,105,50,53,57,57,7,117,110,105,50,53,57,65,7,117,110,105,50,53,57,66,7,117,110,105,50,53,57,67,7,117,110,105,50,53,57,68,7,117,110,105,50,53,57,69,7,117,110,105,50,53,57,70,7,108,116,115,104,97,100,101,5,115,104,97,100,101,7,100,107,115,104,97,100,101,7,117,110,105,50,53,67,70,6,99,105,114,99,108,101,7,117,110,105,50,53,69,70,7,117,110,105,50,53,68,48,7,117,110,105,50,53,68,49,7,117,110,105,50,53,68,50,7,117,110,105,50,53,68,51,7,117,110,105,50,53,68,54,7,117,110,105,50,53,68,55,7,117,110,105,50,53,68,52,7,117,110,105,50,53,68,53,7,117,110,105,50,53,70,52,7,117,110,105,50,53,70,53,7,117,110,105,50,53,70,54,7,117,110,105,50,53,70,55,7,117,110,105,50,53,67,68,7,117,110,105,50,53,67,67,7,117,110,105,50,53,67,57,7,117,110,105,50,53,67,69,10,111,112,101,110,98,117,108,108,101,116,9,105,110,118,98,117,108,108,101,116,9,105,110,118,99,105,114,99,108,101,7,117,110,105,50,53,68,65,7,117,110,105,50,53,68,66,7,117,110,105,50,53,69,48,7,117,110,105,50,53,69,49,7,117,110,105,50,53,68,67,7,117,110,105,50,53,68,68,7,117,110,105,50,53,68,69,7,117,110,105,50,53,68,70,7,117,110,105,50,53,67,54,7,117,110,105,50,53,67,55,7,117,110,105,50,66,49,54,7,117,110,105,50,66,49,55,7,117,110,105,50,66,49,56,7,117,110,105,50,66,49,57,7,117,110,105,50,53,67,56,7,117,110,105,50,53,66,48,7,117,110,105,50,53,66,49,7,117,110,105,50,53,65,69,10,102,105,108,108,101,100,114,101,99,116,7,117,110,105,50,53,65,68,7,117,110,105,50,53,65,70,9,102,105,108,108,101,100,98,111,120,7,117,110,105,50,53,65,49,7,117,110,105,50,53,65,50,7,117,110,105,50,53,65,51,7,117,110,105,50,66,49,65,7,117,110,105,50,53,65,52,7,117,110,105,50,53,65,53,7,117,110,105,50,53,65,54,7,117,110,105,50,53,65,55,7,117,110,105,50,53,65,56,7,117,110,105,50,53,65,57,7,117,110,105,50,53,65,65,7,117,110,105,50,53,65,66,7,117,110,105,50,53,69,55,7,117,110,105,50,53,69,56,7,117,110,105,50,53,69,57,7,117,110,105,50,53,69,65,7,117,110,105,50,53,69,66,7,117,110,105,50,53,70,48,7,117,110,105,50,53,70,49,7,117,110,105,50,53,70,50,7,117,110,105,50,53,70,51,7,117,110,105,50,53,70,66,7,117,110,105,50,53,70,67,7,117,110,105,50,53,70,68,7,117,110,105,50,53,70,69,7,116,114,105,97,103,117,112,7,117,110,105,50,53,66,54,7,116,114,105,97,103,100,110,7,117,110,105,50,53,67,48,7,117,110,105,50,53,66,51,7,117,110,105,50,53,66,55,7,117,110,105,50,53,66,68,7,117,110,105,50,53,67,49,7,117,110,105,50,53,69,67,7,117,110,105,50,53,69,68,7,117,110,105,50,53,69,69,7,116,114,105,97,103,114,116,7,116,114,105,97,103,108,102,7,117,110,105,50,53,66,66,7,117,110,105,50,53,67,53,7,117,110,105,50,53,66,52,7,117,110,105,50,53,66,56,7,117,110,105,50,53,66,69,7,117,110,105,50,53,67,50,7,117,110,105,50,53,66,53,7,117,110,105,50,53,66,57,7,117,110,105,50,53,66,70,7,117,110,105,50,53,67,51,7,117,110,105,50,53,69,53,7,117,110,105,50,53,69,50,7,117,110,105,50,53,69,51,7,117,110,105,50,53,69,52,7,117,110,105,50,53,70,57,7,117,110,105,50,53,70,70,7,117,110,105,50,53,70,65,7,117,110,105,50,53,70,56,7,117,110,105,50,53,54,54,7,117,110,105,50,53,53,55,7,117,110,105,50,53,53,52,7,117,110,105,50,53,53,48,7,117,110,105,50,53,54,57,7,117,110,105,50,53,53,68,7,117,110,105,50,53,53,65,7,117,110,105,50,53,53,49,7,117,110,105,50,53,54,67,7,117,110,105,50,53,54,51,7,117,110,105,50,53,54,48,7,117,110,105,50,53,54,53,7,117,110,105,50,53,53,54,7,117,110,105,50,53,53,51,7,117,110,105,50,53,51,48,7,117,110,105,50,53,49,50,7,117,110,105,50,53,50,55,7,117,110,105,50,53,48,69,7,117,110,105,50,53,49,70,7,117,110,105,50,53,52,49,7,117,110,105,50,53,50,70,7,117,110,105,50,53,49,49,7,117,110,105,50,53,50,57,7,117,110,105,50,53,48,68,7,117,110,105,50,53,50,49,7,117,110,105,50,53,52,55,7,117,110,105,50,53,54,52,7,117,110,105,50,53,53,53,7,117,110,105,50,53,53,50,7,117,110,105,50,53,52,68,7,117,110,105,50,53,52,70,7,117,110,105,50,53,55,66,7,117,110,105,50,53,51,51,7,117,110,105,50,53,49,51,7,117,110,105,50,53,48,70,7,117,110,105,50,53,48,49,7,117,110,105,50,53,55,56,7,117,110,105,50,53,55,69,7,117,110,105,50,53,48,57,7,117,110,105,50,53,48,66,7,117,110,105,50,53,55,65,7,117,110,105,50,53,48,53,7,117,110,105,50,53,48,55,7,117,110,105,50,53,55,57,7,117,110,105,50,53,51,66,7,117,110,105,50,53,49,66,7,117,110,105,50,53,55,70,7,117,110,105,50,53,49,55,7,117,110,105,50,53,48,51,7,117,110,105,50,53,52,66,7,117,110,105,50,53,50,66,7,117,110,105,50,53,50,51,7,117,110,105,50,53,52,53,7,117,110,105,50,53,50,68,7,117,110,105,50,53,51,53,7,117,110,105,50,53,51,68,7,117,110,105,50,53,51,50,7,117,110,105,50,53,51,65,7,117,110,105,50,53,52,65,7,117,110,105,50,53,52,51,7,117,110,105,50,53,54,69,7,117,110,105,50,53,54,68,7,117,110,105,50,53,54,70,7,117,110,105,50,53,55,48,7,117,110,105,50,53,55,51,7,117,110,105,50,53,55,50,7,117,110,105,50,53,55,49,7,117,110,105,50,53,52,67,7,117,110,105,50,53,52,69,7,117,110,105,50,53,55,55,7,117,110,105,50,53,50,67,7,117,110,105,50,53,49,48,7,117,110,105,50,53,48,67,7,117,110,105,50,53,48,48,7,117,110,105,50,53,55,52,7,117,110,105,50,53,55,67,7,117,110,105,50,53,48,56,7,117,110,105,50,53,48,65,7,117,110,105,50,53,55,54,7,117,110,105,50,53,48,52,7,117,110,105,50,53,48,54,7,117,110,105,50,53,55,53,7,117,110,105,50,53,55,68,7,117,110,105,50,53,51,52,7,117,110,105,50,53,49,56,7,117,110,105,50,53,49,52,7,117,110,105,50,53,48,50,7,117,110,105,50,53,51,67,7,117,110,105,50,53,50,52,7,117,110,105,50,53,49,67,7,117,110,105,50,53,52,54,7,117,110,105,50,53,50,69,7,117,110,105,50,53,51,54,7,117,110,105,50,53,51,69,7,117,110,105,50,53,51,49,7,117,110,105,50,53,51,57,7,117,110,105,50,53,52,57,7,117,110,105,50,53,52,52,7,117,110,105,50,53,54,56,7,117,110,105,50,53,53,67,7,117,110,105,50,53,53,57,7,117,110,105,50,53,52,48,7,117,110,105,50,53,51,56,7,117,110,105,50,53,50,54,7,117,110,105,50,53,49,65,7,117,110,105,50,53,49,69,7,117,110,105,50,53,49,54,7,117,110,105,50,53,52,56,7,117,110,105,50,53,51,55,7,117,110,105,50,53,50,65,7,117,110,105,50,53,49,57,7,117,110,105,50,53,50,50,7,117,110,105,50,53,49,53,7,117,110,105,50,53,54,55,7,117,110,105,50,53,53,66,7,117,110,105,50,53,53,56,7,117,110,105,50,53,54,66,7,117,110,105,50,53,54,50,7,117,110,105,50,53,53,70,7,117,110,105,50,53,52,50,7,117,110,105,50,53,50,56,7,117,110,105,50,53,50,48,7,117,110,105,50,53,51,70,7,117,110,105,50,53,50,53,7,117,110,105,50,53,49,68,7,117,110,105,50,53,54,65,7,117,110,105,50,53,54,49,7,117,110,105,50,53,53,69,13,117,110,105,50,53,56,49,46,115,116,121,112,111,13,117,110,105,50,53,56,50,46,115,116,121,112,111,13,117,110,105,50,53,56,51,46,115,116,121,112,111,13,100,110,98,108,111,99,107,46,115,116,121,112,111,13,117,110,105,50,53,56,53,46,115,116,121,112,111,13,117,110,105,50,53,56,54,46,115,116,121,112,111,13,117,110,105,50,53,56,55,46,115,116,121,112,111,11,98,108,111,99,107,46,115,116,121,112,111,13,117,112,98,108,111,99,107,46,115,116,121,112,111,13,117,110,105,50,53,57,52,46,115,116,121,112,111,13,117,110,105,50,53,56,70,46,115,116,121,112,111,13,117,110,105,50,53,56,69,46,115,116,121,112,111,13,117,110,105,50,53,56,68,46,115,116,121,112,111,13,108,102,98,108,111,99,107,46,115,116,121,112,111,13,117,110,105,50,53,56,66,46,115,116,121,112,111,13,117,110,105,50,53,56,65,46,115,116,121,112,111,13,117,110,105,50,53,56,57,46,115,116,121,112,111,13,114,116,98,108,111,99,107,46,115,116,121,112,111,13,117,110,105,50,53,57,53,46,115,116,121,112,111,13,117,110,105,50,53,57,54,46,115,116,121,112,111,13,117,110,105,50,53,57,55,46,115,116,121,112,111,13,117,110,105,50,53,57,56,46,115,116,121,112,111,13,117,110,105,50,53,57,57,46,115,116,121,112,111,13,117,110,105,50,53,57,65,46,115,116,121,112,111,13,117,110,105,50,53,57,66,46,115,116,121,112,111,13,117,110,105,50,53,57,67,46,115,116,121,112,111,13,117,110,105,50,53,57,68,46,115,116,121,112,111,13,117,110,105,50,53,57,69,46,115,116,121,112,111,13,117,110,105,50,53,57,70,46,115,116,121,112,111,13,108,116,115,104,97,100,101,46,115,116,121,112,111,11,115,104,97,100,101,46,115,116,121,112,111,13,100,107,115,104,97,100,101,46,115,116,121,112,111,7,117,110,105,50,54,49,57,9,115,109,105,108,101,102,97,99,101,12,105,110,118,115,109,105,108,101,102,97,99,101,3,115,117,110,6,102,101,109,97,108,101,4,109,97,108,101,5,115,112,97,100,101,4,99,108,117,98,5,104,101,97,114,116,7,100,105,97,109,111,110,100,7,117,110,105,50,55,49,51,7,117,110,105,50,55,54,55,7,117,110,105,50,49,49,55,7,117,110,105,50,49,48,53,7,117,110,105,50,49,49,51,7,117,110,105,50,49,49,54,7,117,110,105,50,66,50,50,7,117,110,105,50,66,50,67,7,117,110,105,50,66,50,52,7,117,110,105,50,66,49,66,7,117,110,105,50,66,50,53,7,117,110,105,50,66,67,54,7,117,110,105,50,66,67,55,7,117,110,105,50,66,50,55,7,117,110,105,50,66,67,56,7,117,110,105,50,66,67,53,7,117,110,105,50,66,49,70,7,117,110,105,50,66,50,57,7,117,110,105,50,66,50,65,7,117,110,105,50,66,50,69,7,117,110,105,50,66,49,68,7,117,110,105,50,66,67,66,7,117,110,105,50,66,50,51,7,117,110,105,50,66,49,50,7,117,110,105,50,66,49,52,7,117,110,105,50,66,67,65,7,117,110,105,50,66,49,51,7,117,110,105,50,66,49,53,7,117,110,105,50,66,50,49,7,117,110,105,50,66,50,68,7,117,110,105,50,66,49,67,7,117,110,105,50,66,50,54,7,117,110,105,50,66,50,56,7,117,110,105,50,66,50,48,7,117,110,105,50,66,50,66,7,117,110,105,50,66,50,70,7,117,110,105,50,66,49,69,11,109,117,115,105,99,97,108,110,111,116,101,14,109,117,115,105,99,97,108,110,111,116,101,100,98,108,7,117,110,105,50,56,48,48,7,117,110,105,50,56,48,49,7,117,110,105,50,56,48,51,7,117,110,105,50,56,48,55,7,117,110,105,50,56,48,70,7,117,110,105,50,56,49,70,7,117,110,105,50,56,51,70,7,117,110,105,50,56,55,70,7,117,110,105,50,56,70,70,7,117,110,105,50,56,66,70,7,117,110,105,50,56,53,70,7,117,110,105,50,56,68,70,7,117,110,105,50,56,57,70,7,117,110,105,50,56,50,70,7,117,110,105,50,56,54,70,7,117,110,105,50,56,69,70,7,117,110,105,50,56,65,70,7,117,110,105,50,56,52,70,7,117,110,105,50,56,67,70,7,117,110,105,50,56,56,70,7,117,110,105,50,56,49,55,7,117,110,105,50,56,51,55,7,117,110,105,50,56,55,55,7,117,110,105,50,56,70,55,7,117,110,105,50,56,66,55,7,117,110,105,50,56,53,55,7,117,110,105,50,56,68,55,7,117,110,105,50,56,57,55,7,117,110,105,50,56,50,55,7,117,110,105,50,56,54,55,7,117,110,105,50,56,69,55,7,117,110,105,50,56,65,55,7,117,110,105,50,56,52,55,7,117,110,105,50,56,67,55,7,117,110,105,50,56,56,55,7,117,110,105,50,56,48,66,7,117,110,105,50,56,49,66,7,117,110,105,50,56,51,66,7,117,110,105,50,56,55,66,7,117,110,105,50,56,70,66,7,117,110,105,50,56,66,66,7,117,110,105,50,56,53,66,7,117,110,105,50,56,68,66,7,117,110,105,50,56,57,66,7,117,110,105,50,56,50,66,7,117,110,105,50,56,54,66,7,117,110,105,50,56,69,66,7,117,110,105,50,56,65,66,7,117,110,105,50,56,52,66,7,117,110,105,50,56,67,66,7,117,110,105,50,56,56,66,7,117,110,105,50,56,49,51,7,117,110,105,50,56,51,51,7,117,110,105,50,56,55,51,7,117,110,105,50,56,70,51,7,117,110,105,50,56,66,51,7,117,110,105,50,56,53,51,7,117,110,105,50,56,68,51,7,117,110,105,50,56,57,51,7,117,110,105,50,56,50,51,7,117,110,105,50,56,54,51,7,117,110,105,50,56,69,51,7,117,110,105,50,56,65,51,7,117,110,105,50,56,52,51,7,117,110,105,50,56,67,51,7,117,110,105,50,56,56,51,7,117,110,105,50,56,48,53,7,117,110,105,50,56,48,68,7,117,110,105,50,56,49,68,7,117,110,105,50,56,51,68,7,117,110,105,50,56,55,68,7,117,110,105,50,56,70,68,7,117,110,105,50,56,66,68,7,117,110,105,50,56,53,68,7,117,110,105,50,56,68,68,7,117,110,105,50,56,57,68,7,117,110,105,50,56,50,68,7,117,110,105,50,56,54,68,7,117,110,105,50,56,69,68,7,117,110,105,50,56,65,68,7,117,110,105,50,56,52,68,7,117,110,105,50,56,67,68,7,117,110,105,50,56,56,68,7,117,110,105,50,56,49,53,7,117,110,105,50,56,51,53,7,117,110,105,50,56,55,53,7,117,110,105,50,56,70,53,7,117,110,105,50,56,66,53,7,117,110,105,50,56,53,53,7,117,110,105,50,56,68,53,7,117,110,105,50,56,57,53,7,117,110,105,50,56,50,53,7,117,110,105,50,56,54,53,7,117,110,105,50,56,69,53,7,117,110,105,50,56,65,53,7,117,110,105,50,56,52,53,7,117,110,105,50,56,67,53,7,117,110,105,50,56,56,53,7,117,110,105,50,56,48,57,7,117,110,105,50,56,49,57,7,117,110,105,50,56,51,57,7,117,110,105,50,56,55,57,7,117,110,105,50,56,70,57,7,117,110,105,50,56,66,57,7,117,110,105,50,56,53,57,7,117,110,105,50,56,68,57,7,117,110,105,50,56,57,57,7,117,110,105,50,56,50,57,7,117,110,105,50,56,54,57,7,117,110,105,50,56,69,57,7,117,110,105,50,56,65,57,7,117,110,105,50,56,52,57,7,117,110,105,50,56,67,57,7,117,110,105,50,56,56,57,7,117,110,105,50,56,49,49,7,117,110,105,50,56,51,49,7,117,110,105,50,56,55,49,7,117,110,105,50,56,70,49,7,117,110,105,50,56,66,49,7,117,110,105,50,56,53,49,7,117,110,105,50,56,68,49,7,117,110,105,50,56,57,49,7,117,110,105,50,56,50,49,7,117,110,105,50,56,54,49,7,117,110,105,50,56,69,49,7,117,110,105,50,56,65,49,7,117,110,105,50,56,52,49,7,117,110,105,50,56,67,49,7,117,110,105,50,56,56,49,7,117,110,105,50,56,48,50,7,117,110,105,50,56,48,54,7,117,110,105,50,56,48,69,7,117,110,105,50,56,49,69,7,117,110,105,50,56,51,69,7,117,110,105,50,56,55,69,7,117,110,105,50,56,70,69,7,117,110,105,50,56,66,69,7,117,110,105,50,56,53,69,7,117,110,105,50,56,68,69,7,117,110,105,50,56,57,69,7,117,110,105,50,56,50,69,7,117,110,105,50,56,54,69,7,117,110,105,50,56,69,69,7,117,110,105,50,56,65,69,7,117,110,105,50,56,52,69,7,117,110,105,50,56,67,69,7,117,110,105,50,56,56,69,7,117,110,105,50,56,49,54,7,117,110,105,50,56,51,54,7,117,110,105,50,56,55,54,7,117,110,105,50,56,70,54,7,117,110,105,50,56,66,54,7,117,110,105,50,56,53,54,7,117,110,105,50,56,68,54,7,117,110,105,50,56,57,54,7,117,110,105,50,56,50,54,7,117,110,105,50,56,54,54,7,117,110,105,50,56,69,54,7,117,110,105,50,56,65,54,7,117,110,105,50,56,52,54,7,117,110,105,50,56,67,54,7,117,110,105,50,56,56,54,7,117,110,105,50,56,48,65,7,117,110,105,50,56,49,65,7,117,110,105,50,56,51,65,7,117,110,105,50,56,55,65,7,117,110,105,50,56,70,65,7,117,110,105,50,56,66,65,7,117,110,105,50,56,53,65,7,117,110,105,50,56,68,65,7,117,110,105,50,56,57,65,7,117,110,105,50,56,50,65,7,117,110,105,50,56,54,65,7,117,110,105,50,56,69,65,7,117,110,105,50,56,65,65,7,117,110,105,50,56,52,65,7,117,110,105,50,56,67,65,7,117,110,105,50,56,56,65,7,117,110,105,50,56,49,50,7,117,110,105,50,56,51,50,7,117,110,105,50,56,55,50,7,117,110,105,50,56,70,50,7,117,110,105,50,56,66,50,7,117,110,105,50,56,53,50,7,117,110,105,50,56,68,50,7,117,110,105,50,56,57,50,7,117,110,105,50,56,50,50,7,117,110,105,50,56,54,50,7,117,110,105,50,56,69,50,7,117,110,105,50,56,65,50,7,117,110,105,50,56,52,50,7,117,110,105,50,56,67,50,7,117,110,105,50,56,56,50,7,117,110,105,50,56,48,52,7,117,110,105,50,56,48,67,7,117,110,105,50,56,49,67,7,117,110,105,50,56,51,67,7,117,110,105,50,56,55,67,7,117,110,105,50,56,70,67,7,117,110,105,50,56,66,67,7,117,110,105,50,56,53,67,7,117,110,105,50,56,68,67,7,117,110,105,50,56,57,67,7,117,110,105,50,56,50,67,7,117,110,105,50,56,54,67,7,117,110,105,50,56,69,67,7,117,110,105,50,56,65,67,7,117,110,105,50,56,52,67,7,117,110,105,50,56,67,67,7,117,110,105,50,56,56,67,7,117,110,105,50,56,49,52,7,117,110,105,50,56,51,52,7,117,110,105,50,56,55,52,7,117,110,105,50,56,70,52,7,117,110,105,50,56,66,52,7,117,110,105,50,56,53,52,7,117,110,105,50,56,68,52,7,117,110,105,50,56,57,52,7,117,110,105,50,56,50,52,7,117,110,105,50,56,54,52,7,117,110,105,50,56,69,52,7,117,110,105,50,56,65,52,7,117,110,105,50,56,52,52,7,117,110,105,50,56,67,52,7,117,110,105,50,56,56,52,7,117,110,105,50,56,48,56,7,117,110,105,50,56,49,56,7,117,110,105,50,56,51,56,7,117,110,105,50,56,55,56,7,117,110,105,50,56,70,56,7,117,110,105,50,56,66,56,7,117,110,105,50,56,53,56,7,117,110,105,50,56,68,56,7,117,110,105,50,56,57,56,7,117,110,105,50,56,50,56,7,117,110,105,50,56,54,56,7,117,110,105,50,56,69,56,7,117,110,105,50,56,65,56,7,117,110,105,50,56,52,56,7,117,110,105,50,56,67,56,7,117,110,105,50,56,56,56,7,117,110,105,50,56,49,48,7,117,110,105,50,56,51,48,7,117,110,105,50,56,55,48,7,117,110,105,50,56,70,48,7,117,110,105,50,56,66,48,7,117,110,105,50,56,53,48,7,117,110,105,50,56,68,48,7,117,110,105,50,56,57,48,7,117,110,105,50,56,50,48,7,117,110,105,50,56,54,48,7,117,110,105,50,56,69,48,7,117,110,105,50,56,65,48,7,117,110,105,50,56,52,48,7,117,110,105,50,56,67,48,7,117,110,105,50,56,56,48,7,117,110,105,48,51,55,52,7,117,110,105,48,51,55,53,7,117,110,105,48,50,66,67,7,117,110,105,48,50,66,66,7,117,110,105,48,50,67,57,7,117,110,105,48,51,48,56,7,117,110,105,48,51,48,55,7,117,110,105,48,51,48,66,7,117,110,105,48,51,48,50,7,117,110,105,48,51,48,67,7,117,110,105,48,51,48,54,7,117,110,105,48,51,48,65,7,117,110,105,48,51,48,52,7,117,110,105,48,51,49,50,7,117,110,105,48,51,49,66,7,117,110,105,48,51,50,54,7,117,110,105,48,51,50,55,7,117,110,105,48,51,50,56,7,117,110,105,48,51,52,48,7,117,110,105,48,51,52,49,12,117,110,105,48,51,48,56,46,99,97,115,101,12,117,110,105,48,51,48,55,46,99,97,115,101,12,117,110,105,48,51,48,66,46,99,97,115,101,12,117,110,105,48,51,48,50,46,99,97,115,101,12,117,110,105,48,51,48,67,46,99,97,115,101,12,117,110,105,48,51,48,54,46,99,97,115,101,12,117,110,105,48,51,48,65,46,99,97,115,101,12,117,110,105,48,51,48,52,46,99,97,115,101,12,117,110,105,48,51,49,66,46,99,97,115,101,7,117,110,105,48,51,52,50,11,98,114,101,118,101,99,111,109,98,99,121,16,98,114,101,118,101,99,111,109,98,99,121,46,99,97,115,101,9,117,110,105,48,69,51,70,46,49,0,64,255,146,71,255,31,145,70,255,31,144,69,255,31,143,67,255,31,142,68,255,31,141,68,114,31,140,66,255,31,139,63,54,31,138,65,255,31,137,63,255,31,136,64,147,31,135,64,255,31,134,59,255,31,133,60,147,31,132,60,255,31,131,61,255,31,130,62,255,31,129,58,255,31,128,56,255,31,127,57,255,31,126,55,255,31,125,55,205,31,124,54,171,31,123,54,255,31,122,54,128,31,121,53,255,31,120,52,255,31,119,50,27,31,118,50,171,31,117,50,255,31,116,50,128,31,115,50,86,31,114,51,45,31,113,51,255,31,112,51,74,31,111,49,255,31,110,49,205,31,109,49,114,31,108,47,114,31,107,47,255,31,106,47,171,31,105,48,255,31,104,48,171,31,103,46,255,31,102,43,24,31,101,45,255,31,100,43,255,31,99,44,255,31,98,43,61,31,97,43,25,31,96,42,255,31,95,40,128,31,94,40,255,31,93,40,86,31,92,40,52,31,91,41,255,31,90,41,64,31,89,39,255,31,88,36,128,31,87,36,255,31,86,38,255,31,85,37,255,31,84,37,86,31,83,37,38,64,255,31,82,35,255,31,81,35,52,31,80,34,255,31,79,31,255,31,78,33,255,31,77,32,255,31,76,30,255,31,75,29,255,31,74,29,128,31,73,28,61,31,72,28,255,31,70,69,94,31,69,67,128,31,68,67,69,31,65,63,128,31,64,63,52,31,62,61,114,31,61,60,64,31,60,59,61,31,57,56,79,31,51,50,16,31,49,47,45,31,48,47,79,31,47,24,27,25,92,46,27,18,31,45,43,86,31,44,205,43,85,43,10,26,25,92,42,26,11,31,41,40,28,31,40,25,255,31,39,25,6,31,38,37,128,31,37,36,86,31,36,22,205,31,35,24,22,31,34,23,7,31,33,171,31,85,32,31,12,31,31,23,255,31,30,103,29,85,29,22,255,31,28,22,6,31,27,53,25,25,91,24,61,22,119,91,26,53,25,25,91,23,61,22,119,91,21,25,69,22,78,90,19,52,18,85,17,52,16,85,18,89,16,89,13,52,12,85,5,52,4,85,12,89,4,89,15,57,14,85,11,52,10,85,7,52,6,85,1,52,0,85,14,89,10,89,6,89,0,89,9,52,8,85,3,52,64,13,2,85,8,89,2,89,16,0,3,64,64,5,1,185,1,144,0,84,43,75,184,7,255,82,75,176,8,80,91,176,1,136,176,37,83,176,1,136,176,64,81,90,176,6,136,176,0,85,90,91,88,177,1,1,142,89,133,141,141,0,29,66,75,176,144,83,88,178,3,0,0,29,66,89,177,2,2,67,81,88,177,4,3,142,89,66,0,43,0,43,43,43,0,43,0,43,0,43,0,43,43,43,43,43,0,43,0,43,43,43,0,43,0,43,43,43,1,43,1,43,1,43,1,43,1,43,1,43,43,43,0,43,43,43,43,43,43,43,43,1,43,43,43,0,43,0,43,43,43,43,1,43,43,43,1,43,0,43,1,43,43,43,0,43,43,43,43,43,1,43,43,43,43,43,0,43,43,43,43,43,43,43,43,43,43,43,43,1,43,43,43,43,43,43,43,0,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,43,1,43,43,43,43,43,43,43,43,43,0,43,43,43,43,43,43,43,43,1,43,43,43,43,43,43,0,43,43,43,43,43,43,43,43,43,43,43,43,24}; \ No newline at end of file diff --git a/Client/CascadiaCodeFont.h b/Client/CascadiaCodeFont.h deleted file mode 100644 index f5b558ae..00000000 --- a/Client/CascadiaCodeFont.h +++ /dev/null @@ -1,6 +0,0 @@ -#pragma once - -//Generated by Fonts/encodeFont.py -//This is crossplatform and works well, although it is a bit weird. - -extern unsigned char CascadiaCodeTTF[358448]; \ No newline at end of file diff --git a/Client/Constants.h b/Client/Constants.h index 91613ca9..839e7f54 100644 --- a/Client/Constants.h +++ b/Client/Constants.h @@ -177,17 +177,6 @@ enum class SOUND_POSITION_PRESET : signed char OUT_OF_RANGE = -1 }; -//Needed for converting the ImGui Combo index into the VPT index. -inline const SOUND_POSITION_PRESET SOUND_POSITION_PRESET_ARRAY[] = { - SOUND_POSITION_PRESET::OFF, - SOUND_POSITION_PRESET::FRONT_LEFT, - SOUND_POSITION_PRESET::FRONT_RIGHT, - SOUND_POSITION_PRESET::FRONT, - SOUND_POSITION_PRESET::REAR_LEFT, - SOUND_POSITION_PRESET::REAR_RIGHT, - SOUND_POSITION_PRESET::OUT_OF_RANGE -}; - enum class VPT_INQUIRED_TYPE : signed char { NO_USE = 0, diff --git a/Client/CrossPlatformGUI.cpp b/Client/CrossPlatformGUI.cpp deleted file mode 100644 index 993d9a85..00000000 --- a/Client/CrossPlatformGUI.cpp +++ /dev/null @@ -1,673 +0,0 @@ -#include "CrossPlatformGUI.h" - -#include -#include -#include -#include - -#define STB_IMAGE_IMPLEMENTATION -#define STBI_ONLY_PNG -#include "stb_image.h" - -#if defined(_WIN32) -#ifndef NOMINMAX -#define NOMINMAX -#endif -#include -#elif defined(__linux__) -#include -#endif - -bool CrossPlatformGUI::performGUIPass() -{ - ImGui::NewFrame(); - - bool open = true; - ImGuiIO& io = ImGui::GetIO(); - - ImGui::SetNextWindowPos({ 0, 0 }); - ImGui::SetNextWindowSize(io.DisplaySize); - ImGui::Begin("SonyBridge", &open, - ImGuiWindowFlags_NoTitleBar | ImGuiWindowFlags_NoResize | ImGuiWindowFlags_NoMove | - ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoBringToFrontOnFocus); - - ImGui::TextDisabled("Not affiliated with Sony. Use at your own risk."); - ImGui::Spacing(); - - this->_drawErrors(); - this->_drawDeviceDiscovery(); - - if (this->_bt.isConnected()) - { - this->_pumpConnectionState(); - - if (this->_synced) - { - this->_drawStatusHeader(); - this->_drawASMControls(); - if (this->_isV2()) - { - this->_drawEqualizer(); - this->_drawDsee(); - } - this->_drawOptionalFeatures(); - if (!this->_isV2()) - this->_drawSurroundControls(); - - this->_sendPendingASMChanges(); - } - else - { - ImGui::Spacing(); - ImGui::TextDisabled("Reading device settings %c", "|/-\\"[(int)(ImGui::GetTime() / 0.1f) & 3]); - } - } - else - { - this->_synced = false; - this->_probed = false; - this->_initialized = false; - this->_pollCounter = 0; - } - - ImGui::End(); - ImGui::Render(); - - return open; -} - -void CrossPlatformGUI::_drawErrors() -{ - if (this->_mq.begin() == this->_mq.end()) - return; - - for (auto&& message : this->_mq) - ImGui::TextColored(ImVec4(0.95f, 0.45f, 0.45f, 1.0f), "%s", message.message.c_str()); - ImGui::Spacing(); -} - -void CrossPlatformGUI::_drawDeviceDiscovery() -{ - static std::vector connectedDevices; - static int selectedDevice = -1; - - if (!this->_beginCard("##discovery")) { this->_endCard(); return; } - - if (this->_bt.isConnected()) - { - ImGui::Text("Connected to %s", this->_connectedDevice.name.c_str()); - ImGui::Spacing(); - if (ImGui::Button("Disconnect")) - { - selectedDevice = -1; - this->_bt.disconnect(); - } - this->_endCard(); - return; - } - - this->_cardTitle("Select a device"); - - int temp = 0; - for (const auto& device : connectedDevices) - { - std::string label = (device.name.empty() ? "Unknown Device" : device.name) + "##" + device.mac; - ImGui::RadioButton(label.c_str(), &selectedDevice, temp++); - } - - ImGui::Spacing(); - - if (this->_connectFuture.valid()) - { - if (this->_connectFuture.ready()) - { - try - { - this->_connectFuture.get(); - } - catch (const RecoverableException& exc) - { - if (exc.shouldDisconnect) - this->_bt.disconnect(); - this->_mq.addMessage(exc.what()); - } - } - else - { - ImGui::Text("Connecting %c", "|/-\\"[(int)(ImGui::GetTime() / 0.05f) & 3]); - } - } - else if (ImGui::Button("Connect")) - { - if (selectedDevice != -1) - { - this->_connectedDevice = connectedDevices[selectedDevice]; - this->_connectFuture.setFromAsync([this]() { this->_bt.connect(this->_connectedDevice.mac); }); - } - } - - ImGui::SameLine(); - - if (this->_connectedDevicesFuture.valid()) - { - if (this->_connectedDevicesFuture.ready()) - { - try - { - connectedDevices = this->_connectedDevicesFuture.get(); - } - catch (const RecoverableException& exc) - { - if (exc.shouldDisconnect) - this->_bt.disconnect(); - this->_mq.addMessage(exc.what()); - } - } - else - { - ImGui::Text("Discovering %c", "|/-\\"[(int)(ImGui::GetTime() / 0.05f) & 3]); - } - } - else if (ImGui::Button("Refresh devices")) - { - selectedDevice = -1; - this->_connectedDevicesFuture.setFromAsync([this]() { return this->_bt.getConnectedDevices(); }); - } - - this->_endCard(); -} - -void CrossPlatformGUI::_pumpConnectionState() -{ - // Phase 1 - fast post-connect reads: init handshake (v2), protocol-aware ambient read, then the - // always-answered settings. Each read is guarded so one slow/unanswered reply can't block the others or - // drop the link, and we always reach _synced so the UI leaves the "Reading device settings" state. - if (!this->_synced && !this->_refreshFuture.valid()) - { - this->_refreshFuture.setFromAsync([this]() { - try { if (!this->_initialized) { this->_headphones.initDevice(); this->_initialized = true; } } - catch (const std::exception&) {} - // requestAmbientState is protocol-aware (v1 uses 66 02, v2 uses 66 17) and read-only; sending it - // immediately gives v1 devices the handshake traffic they need to stay powered on. - try { this->_headphones.requestAmbientState(); } catch (const std::exception&) {} - if (this->_isV2()) - { - try { this->_headphones.requestBattery(); } catch (const std::exception&) {} - try { this->_headphones.requestEqualizer(); } catch (const std::exception&) {} - try { this->_headphones.requestDsee(); } catch (const std::exception&) {} - } - }); - } - - if (this->_refreshFuture.valid() && this->_refreshFuture.ready()) - { - try { this->_refreshFuture.get(); } catch (const std::exception&) {} - this->_syncUIFromHeadphones(); - this->_synced = true; - this->_pollCounter = 0; - } - - if (!this->_synced) - return; - - // Phase 2 - probe optional capabilities in the background. Each unsupported GET times out (~2.5s), so - // this must not gate the UI. The Feature cards read has*() live, so they appear once probing settles. - if (this->_isV2() && !this->_probed && !this->_probeFuture.valid()) - { - this->_probeFuture.setFromAsync([this]() { try { this->_headphones.probeCapabilities(); } catch (const std::exception&) {} }); - } - if (this->_probeFuture.valid() && this->_probeFuture.ready()) - { - try { this->_probeFuture.get(); } catch (const std::exception&) {} - this->_probed = true; - this->_uiAutoPowerOff = this->_headphones.getAutoPowerOff(); - this->_uiSpeakToChat = this->_headphones.getSpeakToChat(); - this->_uiAdaptiveVolume = this->_headphones.getAdaptiveVolume(); - } - - // Poll the button-changeable ASM state so the app reflects changes made on the headphone itself. - if (this->_pollFuture.valid() && this->_pollFuture.ready()) - { - try { this->_pollFuture.get(); } catch (const std::exception&) {} - if (!this->_sendCommandFuture.valid()) - { - this->_uiAsmOn = this->_headphones.getAmbientSoundControl(); - int lvl = this->_headphones.getAsmLevel(); - this->_uiAsmMode = !this->_uiAsmOn ? 0 : (lvl > 0 ? 2 : 1); - if (lvl > 0) this->_uiAsmLevel = lvl; - this->_uiFocusOnVoice = this->_headphones.getFocusOnVoice(); - } - } - if (!this->_pollFuture.valid() && ++this->_pollCounter >= DYNAMIC_POLL_FRAMES) - { - this->_pollCounter = 0; - this->_pollFuture.setFromAsync([this]() { this->_headphones.requestAmbientState(); }); - } -} - -void CrossPlatformGUI::_syncUIFromHeadphones() -{ - this->_uiAsmOn = this->_headphones.getAmbientSoundControl(); - int lvl = this->_headphones.getAsmLevel(); - this->_uiAsmMode = !this->_uiAsmOn ? 0 : (lvl > 0 ? 2 : 1); - this->_uiAsmLevel = lvl > 0 ? lvl : 10; - this->_uiFocusOnVoice = this->_headphones.getFocusOnVoice(); - - this->_uiEqPreset = (int)(unsigned char)this->_headphones.getEqualizerPreset(); - for (int i = 0; i < 5; ++i) - this->_uiEqBands[i] = this->_headphones.getEqualizerBand(i); - this->_uiClearBass = this->_headphones.getClearBass(); - this->_uiDsee = this->_headphones.getDsee(); - - this->_uiAutoPowerOff = this->_headphones.getAutoPowerOff(); - this->_uiSpeakToChat = this->_headphones.getSpeakToChat(); - this->_uiAdaptiveVolume = this->_headphones.getAdaptiveVolume(); -} - -std::string CrossPlatformGUI::_resourceBase() -{ -#if defined(_WIN32) - char buf[MAX_PATH]; - DWORD n = GetModuleFileNameA(NULL, buf, MAX_PATH); - std::string p(buf, n > 0 ? n : 0); - auto s = p.find_last_of("\\/"); - return s == std::string::npos ? std::string(".") : p.substr(0, s); -#elif defined(__linux__) - char buf[4096]; - ssize_t n = readlink("/proc/self/exe", buf, sizeof(buf) - 1); - if (n <= 0) return "."; - buf[n] = '\0'; - std::string p(buf); - auto s = p.find_last_of('/'); - return s == std::string::npos ? std::string(".") : p.substr(0, s); -#else - return "."; -#endif -} - -const CrossPlatformGUI::DeviceTexture& CrossPlatformGUI::_deviceTexture(const std::string& name) -{ - std::string slug = name; - std::transform(slug.begin(), slug.end(), slug.begin(), [](unsigned char ch) { return (char)std::tolower(ch); }); - std::replace(slug.begin(), slug.end(), ' ', '-'); - - auto it = this->_deviceTextures.find(slug); - if (it != this->_deviceTextures.end()) - return it->second; - - DeviceTexture out; // ok == false by default; cached even on failure so we don't retry every frame. - - const std::string base = this->_resourceBase(); - const std::string candidates[] = { - base + "/resources/devices/" + slug + ".png", - base + "/" + slug + ".png", - "resources/devices/" + slug + ".png", - }; - - int w = 0, h = 0, comp = 0; - unsigned char* pixels = nullptr; - for (const auto& path : candidates) - { - pixels = stbi_load(path.c_str(), &w, &h, &comp, 4); - if (pixels) break; - } - - if (pixels && w > 0 && h > 0) - { - ImTextureData* tex = IM_NEW(ImTextureData)(); - tex->Create(ImTextureFormat_RGBA32, w, h); - memcpy(tex->GetPixels(), pixels, (size_t)w * h * 4); - tex->SetStatus(ImTextureStatus_WantCreate); - ImGui::GetPlatformIO().Textures.push_back(tex); - - out.ref = tex->GetTexRef(); - out.w = w; - out.h = h; - out.ok = true; - } - if (pixels) - stbi_image_free(pixels); - - auto res = this->_deviceTextures.emplace(slug, out); - return res.first->second; -} - -void CrossPlatformGUI::_drawStatusHeader() -{ - if (!this->_beginCard("##status")) { this->_endCard(); return; } - - const DeviceTexture& hero = this->_deviceTexture(this->_connectedDevice.name); - if (hero.ok) - { - const float cardW = ImGui::GetContentRegionAvail().x; - const float maxH = 150.f; - float scale = std::min(cardW / (float)hero.w, maxH / (float)hero.h); - if (scale > 1.f) scale = 1.f; - const ImVec2 sz(hero.w * scale, hero.h * scale); - const float offx = (cardW - sz.x) * 0.5f; - if (offx > 0.f) - ImGui::SetCursorPosX(ImGui::GetCursorPosX() + offx); - ImGui::Image(hero.ref, sz); - ImGui::Spacing(); - } - - ImGui::Text("%s", this->_connectedDevice.name.empty() ? "Sony Headphones" : this->_connectedDevice.name.c_str()); - ImGui::SameLine(); - ImGui::TextDisabled("(%s)", this->_isV2() ? "v2" : "v1"); - - if (this->_headphones.hasDualBattery()) - { - ImGui::Text("Battery L %d%% R %d%%", this->_headphones.getBatteryLeft(), this->_headphones.getBatteryRight()); - if (this->_headphones.getBatteryCase() >= 0) - ImGui::Text("Case %d%%", this->_headphones.getBatteryCase()); - } - else - { - int batt = this->_headphones.getBatteryLevel(); - if (batt >= 0) - ImGui::Text("Battery %d%%%s", batt, this->_headphones.isBatteryCharging() ? " (charging)" : ""); - } - - if (this->_headphones.hasCodec()) - ImGui::Text("Codec %s", this->_headphones.getCodec().c_str()); - if (this->_headphones.hasFirmware()) - ImGui::TextDisabled("Firmware %s", this->_headphones.getFirmware().c_str()); - - this->_endCard(); -} - -void CrossPlatformGUI::_drawASMControls() -{ - if (!this->_beginCard("##asm")) { this->_endCard(); return; } - this->_cardTitle("Ambient Sound"); - - const char* modes[] = { "Off", "Noise Cancelling", "Ambient" }; - const float widths[] = { 110.f, 150.f, 120.f }; - for (int i = 0; i < 3; ++i) - { - if (i) ImGui::SameLine(); - bool sel = this->_uiAsmMode == i; - if (sel) ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); - if (ImGui::Button(modes[i], ImVec2(widths[i], 0))) - this->_uiAsmMode = i; - if (sel) ImGui::PopStyleColor(); - } - - if (this->_uiAsmMode == 2) - { - int maxLevel = this->_isV2() ? 20 : 19; - if (this->_uiAsmLevel < 1) this->_uiAsmLevel = 1; - if (this->_uiAsmLevel > maxLevel) this->_uiAsmLevel = maxLevel; - ImGui::Spacing(); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - ImGui::SliderInt("##asmlevel", &this->_uiAsmLevel, 1, maxLevel, "Level %d"); - if (this->_headphones.isFocusOnVoiceAvailable()) - ImGui::Checkbox("Focus on Voice", &this->_uiFocusOnVoice); - } - - // Map UI intent onto the desired state (mirrors the macOS applyMode); setChanges() sends only the diff. - switch (this->_uiAsmMode) - { - case 0: - this->_headphones.setAmbientSoundControl(false); - break; - case 1: - this->_headphones.setAmbientSoundControl(true); - this->_headphones.setAsmLevel(0); - this->_headphones.setFocusOnVoice(false); - break; - case 2: - this->_headphones.setAmbientSoundControl(true); - this->_headphones.setAsmLevel(this->_uiAsmLevel < 1 ? 1 : this->_uiAsmLevel); - this->_headphones.setFocusOnVoice(this->_uiFocusOnVoice); - break; - } - - this->_endCard(); -} - -void CrossPlatformGUI::_drawEqualizer() -{ - if (!this->_beginCard("##eq")) { this->_endCard(); return; } - this->_cardTitle("Equalizer"); - - static const struct { const char* name; int val; } presets[] = { - { "Off", 0x00 }, { "Bright", 0x10 }, { "Excited", 0x11 }, { "Mellow", 0x12 }, { "Relaxed", 0x13 }, - { "Vocal", 0x14 }, { "Treble", 0x15 }, { "Bass", 0x16 }, { "Speech", 0x17 }, { "Manual", 0xA0 } - }; - - const float spacing = ImGui::GetStyle().ItemSpacing.x; - const float cellW = (ImGui::GetContentRegionAvail().x - spacing * 4.f) / 5.f; - for (int i = 0; i < 10; ++i) - { - if (i % 5) ImGui::SameLine(); - bool sel = this->_uiEqPreset == presets[i].val; - if (sel) ImGui::PushStyleColor(ImGuiCol_Button, ImGui::GetStyle().Colors[ImGuiCol_ButtonActive]); - if (ImGui::Button(presets[i].name, ImVec2(cellW, 0))) - { - this->_uiEqPreset = presets[i].val; - int p = presets[i].val; - this->_sendFeatureCommand([this, p]() { this->_headphones.setEqualizerPreset((EQ_PRESET)p); }); - } - if (sel) ImGui::PopStyleColor(); - } - - if (this->_uiEqPreset == 0xA0) - { - ImGui::Spacing(); - const char* bandNames[] = { "Clear Bass", "400", "1k", "2.5k", "6.3k", "16k" }; - int* values[] = { &this->_uiClearBass, &this->_uiEqBands[0], &this->_uiEqBands[1], - &this->_uiEqBands[2], &this->_uiEqBands[3], &this->_uiEqBands[4] }; - bool changed = false; - for (int i = 0; i < 6; ++i) - { - std::string id = "##eqband" + std::to_string(i); - std::string fmt = std::string(bandNames[i]) + " %d"; - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::SliderInt(id.c_str(), values[i], 0, 10, fmt.c_str())) - changed = true; - } - if (changed) - { - std::vector bands(this->_uiEqBands.begin(), this->_uiEqBands.end()); - int cb = this->_uiClearBass; - this->_sendFeatureCommand([this, cb, bands]() { this->_headphones.setEqualizerCustom(cb, bands); }); - } - } - - this->_endCard(); -} - -void CrossPlatformGUI::_drawDsee() -{ - if (!this->_beginCard("##dsee")) { this->_endCard(); return; } - this->_cardTitle("DSEE Upscaling"); - - if (ImGui::Checkbox("Enable DSEE", &this->_uiDsee)) - { - bool v = this->_uiDsee; - this->_sendFeatureCommand([this, v]() { this->_headphones.setDsee(v); }); - } - - this->_endCard(); -} - -void CrossPlatformGUI::_drawOptionalFeatures() -{ - const bool any = this->_headphones.hasAutoPowerOff() || this->_headphones.hasSpeakToChat() || - this->_headphones.hasAdaptiveVolume(); - if (!any) - return; - - if (!this->_beginCard("##features")) { this->_endCard(); return; } - this->_cardTitle("Features"); - - if (this->_headphones.hasAutoPowerOff()) - { - ImGui::TextUnformatted("Auto Power-Off"); - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::Combo("##apo", &this->_uiAutoPowerOff, - "Off\0After 5 min\0After 30 min\0After 1 hour\0After 3 hours\0When taken off\0\0")) - { - int idx = this->_uiAutoPowerOff; - this->_sendFeatureCommand([this, idx]() { this->_headphones.setAutoPowerOff(idx); }); - } - } - - if (this->_headphones.hasSpeakToChat()) - { - if (ImGui::Checkbox("Speak-to-Chat", &this->_uiSpeakToChat)) - { - bool v = this->_uiSpeakToChat; - this->_sendFeatureCommand([this, v]() { this->_headphones.setSpeakToChat(v); }); - } - } - - if (this->_headphones.hasAdaptiveVolume()) - { - if (ImGui::Checkbox("Adaptive Volume Control", &this->_uiAdaptiveVolume)) - { - bool v = this->_uiAdaptiveVolume; - this->_sendFeatureCommand([this, v]() { this->_headphones.setAdaptiveVolume(v); }); - } - } - - this->_endCard(); -} - -void CrossPlatformGUI::_drawSurroundControls() -{ - if (!this->_beginCard("##vpt")) { this->_endCard(); return; } - this->_cardTitle("Virtual Sound"); - - ImGui::TextDisabled("Only one may be used at a time"); - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::Combo("##pos", &this->_uiSoundPosition, - "Off\0Front Left\0Front Right\0Front\0Rear Left\0Rear Right\0\0")) - this->_uiVptType = 0; - - ImGui::SetNextItemWidth(ImGui::GetContentRegionAvail().x); - if (ImGui::Combo("##vpt", &this->_uiVptType, - "Off\0Outdoor Festival\0Arena\0Concert Hall\0Club\0\0")) - this->_uiSoundPosition = 0; - - this->_headphones.setSurroundPosition(SOUND_POSITION_PRESET_ARRAY[this->_uiSoundPosition]); - this->_headphones.setVptType(this->_uiVptType); - - this->_endCard(); -} - -void CrossPlatformGUI::_sendPendingASMChanges() -{ - if (this->_featureCommandFuture.valid() && this->_featureCommandFuture.ready()) - { - try { this->_featureCommandFuture.get(); } - catch (const RecoverableException& e) { if (e.shouldDisconnect) this->_bt.disconnect(); this->_mq.addMessage(e.what()); } - catch (const std::exception& e) { this->_mq.addMessage(e.what()); } - } - - if (this->_sendCommandFuture.valid() && this->_sendCommandFuture.ready()) - { - try - { - this->_sendCommandFuture.get(); - } - catch (const RecoverableException& exc) - { - std::string prefix; - if (exc.shouldDisconnect) - { - this->_bt.disconnect(); - prefix = "Disconnected due to: "; - } - this->_mq.addMessage(prefix + exc.what()); - } - catch (const std::exception& e) { this->_mq.addMessage(e.what()); } - } - else if (!this->_sendCommandFuture.valid() && this->_headphones.isChanged()) - { - this->_sendCommandFuture.setFromAsync([this]() { this->_headphones.setChanges(); }); - } -} - -bool CrossPlatformGUI::_beginCard(const char* id) -{ - return ImGui::BeginChild(id, ImVec2(0.f, 0.f), - ImGuiChildFlags_Borders | ImGuiChildFlags_AutoResizeY | ImGuiChildFlags_AlwaysUseWindowPadding); -} - -void CrossPlatformGUI::_endCard() -{ - ImGui::EndChild(); - ImGui::Spacing(); -} - -void CrossPlatformGUI::_cardTitle(const char* title) -{ - ImGui::PushStyleColor(ImGuiCol_Text, ImVec4(0.55f, 0.63f, 0.72f, 1.0f)); - ImGui::TextUnformatted(title); - ImGui::PopStyleColor(); - ImGui::Spacing(); -} - -void CrossPlatformGUI::_applyTheme() -{ - ImGui::StyleColorsDark(); - ImGuiStyle& s = ImGui::GetStyle(); - - s.WindowRounding = 0.f; - s.ChildRounding = 10.f; - s.FrameRounding = 8.f; - s.GrabRounding = 8.f; - s.PopupRounding = 8.f; - s.ScrollbarRounding = 8.f; - s.WindowPadding = ImVec2(16, 16); - s.FramePadding = ImVec2(12, 7); - s.ItemSpacing = ImVec2(10, 10); - s.ItemInnerSpacing = ImVec2(8, 6); - s.ChildBorderSize = 1.f; - - const ImVec4 accent = ImVec4(0.26f, 0.55f, 0.96f, 1.00f); - const ImVec4 accentHi = ImVec4(0.36f, 0.63f, 1.00f, 1.00f); - - ImVec4* c = s.Colors; - c[ImGuiCol_WindowBg] = WINDOW_COLOR; - c[ImGuiCol_ChildBg] = ImVec4(0.13f, 0.13f, 0.15f, 1.00f); - c[ImGuiCol_PopupBg] = ImVec4(0.13f, 0.13f, 0.15f, 1.00f); - c[ImGuiCol_Border] = ImVec4(1.f, 1.f, 1.f, 0.06f); - c[ImGuiCol_FrameBg] = ImVec4(0.20f, 0.20f, 0.23f, 1.00f); - c[ImGuiCol_FrameBgHovered] = ImVec4(0.25f, 0.25f, 0.29f, 1.00f); - c[ImGuiCol_FrameBgActive] = ImVec4(0.28f, 0.28f, 0.32f, 1.00f); - c[ImGuiCol_Text] = ImVec4(0.94f, 0.94f, 0.96f, 1.00f); - c[ImGuiCol_TextDisabled] = ImVec4(0.50f, 0.50f, 0.56f, 1.00f); - c[ImGuiCol_Button] = ImVec4(0.22f, 0.22f, 0.26f, 1.00f); - c[ImGuiCol_ButtonHovered] = ImVec4(0.28f, 0.28f, 0.33f, 1.00f); - c[ImGuiCol_ButtonActive] = accent; - c[ImGuiCol_CheckMark] = accent; - c[ImGuiCol_SliderGrab] = accent; - c[ImGuiCol_SliderGrabActive] = accentHi; - c[ImGuiCol_Header] = ImVec4(0.22f, 0.22f, 0.26f, 1.00f); - c[ImGuiCol_HeaderHovered] = ImVec4(0.26f, 0.26f, 0.31f, 1.00f); - c[ImGuiCol_HeaderActive] = accent; - c[ImGuiCol_Separator] = ImVec4(1.f, 1.f, 1.f, 0.06f); - c[ImGuiCol_ScrollbarBg] = ImVec4(0.f, 0.f, 0.f, 0.f); -} - -CrossPlatformGUI::CrossPlatformGUI(BluetoothWrapper bt) : _bt(std::move(bt)), _headphones(_bt) -{ - this->_applyTheme(); - - ImGuiIO& io = ImGui::GetIO(); - this->_mq = TimedMessageQueue(GUI_MAX_MESSAGES); - this->_connectedDevicesFuture.setFromAsync([this]() { return this->_bt.getConnectedDevices(); }); - - io.IniFilename = nullptr; - io.WantSaveIniSettings = false; - - //AddFontFromMemory will own the pointer, so there's no leak - char* fileData = new char[sizeof(CascadiaCodeTTF)]; - memcpy(fileData, CascadiaCodeTTF, sizeof(CascadiaCodeTTF)); - ImFont* font = io.Fonts->AddFontFromMemoryTTF(reinterpret_cast(fileData), sizeof(CascadiaCodeTTF), FONT_SIZE); - IM_ASSERT(font != NULL); -} diff --git a/Client/CrossPlatformGUI.h b/Client/CrossPlatformGUI.h deleted file mode 100644 index f396939f..00000000 --- a/Client/CrossPlatformGUI.h +++ /dev/null @@ -1,109 +0,0 @@ -#pragma once - -#include "imgui/imgui.h" -#include "Constants.h" -#include "IBluetoothConnector.h" -#include "BluetoothWrapper.h" -#include "CommandSerializer.h" -#include "Exceptions.h" -#include "TimedMessageQueue.h" -#include "SingleInstanceFuture.h" -#include "CascadiaCodeFont.h" -#include "Headphones.h" - -#include -#include -#include -#include - -constexpr auto GUI_MAX_MESSAGES = 5; -constexpr auto GUI_HEIGHT = 660; -constexpr auto GUI_WIDTH = 460; -constexpr auto FPS = 60; -constexpr auto MS_PER_FRAME = 1000 / FPS; -constexpr auto FONT_SIZE = 16.0f; -const auto WINDOW_COLOR = ImVec4(0.09f, 0.09f, 0.11f, 1.00f); - -// Physical-button changes (ASM) are polled roughly every two seconds so the app stays in sync. -constexpr auto DYNAMIC_POLL_FRAMES = FPS * 2; - -class CrossPlatformGUI -{ -public: - CrossPlatformGUI(BluetoothWrapper bt); - - //Run the GUI code once. This function should be called from a loop from one of the GUI impls (Windows, OSX, Linux...) - //O: true if the user wants to close the window - bool performGUIPass(); -private: - void _applyTheme(); - - void _drawErrors(); - void _drawDeviceDiscovery(); - void _drawStatusHeader(); - void _drawASMControls(); - void _drawEqualizer(); - void _drawDsee(); - void _drawOptionalFeatures(); - void _drawSurroundControls(); - - // Connection lifecycle: read device state after connect, then poll button-changeable state. - void _pumpConnectionState(); - void _syncUIFromHeadphones(); - void _sendPendingASMChanges(); - // Fire an immediate-setter feature command (EQ/DSEE/auto-power-off/…) on the worker future if it's idle. - template void _sendFeatureCommand(F&& fn); - - bool _beginCard(const char* id); - void _endCard(); - void _cardTitle(const char* title); - - // Device hero image (loaded from resources/devices/.png, uploaded via ImGui's 1.92 texture API). - struct DeviceTexture { ImTextureRef ref; int w = 0; int h = 0; bool ok = false; }; - const DeviceTexture& _deviceTexture(const std::string& name); - std::string _resourceBase(); - - bool _isV2() { return _bt.getProtocolVersion() == SonyProtocolVersion::V2; } - - BluetoothDevice _connectedDevice; - BluetoothWrapper _bt; - SingleInstanceFuture> _connectedDevicesFuture; - SingleInstanceFuture _sendCommandFuture; - SingleInstanceFuture _featureCommandFuture; - SingleInstanceFuture _refreshFuture; - SingleInstanceFuture _probeFuture; - SingleInstanceFuture _pollFuture; - SingleInstanceFuture _connectFuture; - TimedMessageQueue _mq; - Headphones _headphones; - - bool _initialized = false; - bool _synced = false; - bool _probed = false; - int _pollCounter = 0; - - // UI state, synced from the device once after connect; user edits are pushed back to the headphones. - bool _uiAsmOn = false; - int _uiAsmMode = 0; // 0 = Off, 1 = Noise Cancelling, 2 = Ambient Sound - int _uiAsmLevel = 0; - bool _uiFocusOnVoice = false; - int _uiEqPreset = 0; - std::array _uiEqBands = { 0, 0, 0, 0, 0 }; - int _uiClearBass = 0; - bool _uiDsee = false; - int _uiAutoPowerOff = 0; - bool _uiSpeakToChat = false; - bool _uiAdaptiveVolume = false; - int _uiSoundPosition = 0; - int _uiVptType = 0; - - std::map _deviceTextures; -}; - -template -void CrossPlatformGUI::_sendFeatureCommand(F&& fn) -{ - if (_featureCommandFuture.valid()) - return; - _featureCommandFuture.setFromAsync(std::forward(fn)); -} diff --git a/Client/Fonts/CascadiaCode.ttf b/Client/Fonts/CascadiaCode.ttf deleted file mode 100644 index a271f0dd509bbe785f57d9108ca1d7bfa303a1fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 358448 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

?wrkID3+9!8T0+CBbW2NU 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 !+ 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

)5B?$6T^XsKp6L%>!bBQ+0xM5=; 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 diff --git a/Client/Fonts/FontLicense.txt b/Client/Fonts/FontLicense.txt deleted file mode 100644 index 40f856f6..00000000 --- a/Client/Fonts/FontLicense.txt +++ /dev/null @@ -1,94 +0,0 @@ -Copyright (c) 2019 - Present, Microsoft Corporation, -with Reserved Font Name Cascadia Code. - -This Font Software is licensed under the SIL Open Font License, Version 1.1. -This license is copied below, and is also available with a FAQ at: -http://scripts.sil.org/OFL - - ------------------------------------------------------------ -SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 ------------------------------------------------------------ - -PREAMBLE -The goals of the Open Font License (OFL) are to stimulate worldwide -development of collaborative font projects, to support the font creation -efforts of academic and linguistic communities, and to provide a free and -open framework in which fonts may be shared and improved in partnership -with others. - -The OFL allows the licensed fonts to be used, studied, modified and -redistributed freely as long as they are not sold by themselves. The -fonts, including any derivative works, can be bundled, embedded, -redistributed and/or sold with any software provided that any reserved -names are not used by derivative works. The fonts and derivatives, -however, cannot be released under any other type of license. The -requirement for fonts to remain under this license does not apply -to any document created using the fonts or their derivatives. - -DEFINITIONS -"Font Software" refers to the set of files released by the Copyright -Holder(s) under this license and clearly marked as such. This may -include source files, build scripts and documentation. - -"Reserved Font Name" refers to any names specified as such after the -copyright statement(s). - -"Original Version" refers to the collection of Font Software components as -distributed by the Copyright Holder(s). - -"Modified Version" refers to any derivative made by adding to, deleting, -or substituting -- in part or in whole -- any of the components of the -Original Version, by changing formats or by porting the Font Software to a -new environment. - -"Author" refers to any designer, engineer, programmer, technical -writer or other person who contributed to the Font Software. - -PERMISSION & CONDITIONS -Permission is hereby granted, free of charge, to any person obtaining -a copy of the Font Software, to use, study, copy, merge, embed, modify, -redistribute, and sell modified and unmodified copies of the Font -Software, subject to the following conditions: - -1) Neither the Font Software nor any of its individual components, -in Original or Modified Versions, may be sold by itself. - -2) Original or Modified Versions of the Font Software may be bundled, -redistributed and/or sold with any software, provided that each copy -contains the above copyright notice and this license. These can be -included either as stand-alone text files, human-readable headers or -in the appropriate machine-readable metadata fields within text or -binary files as long as those fields can be easily viewed by the user. - -3) No Modified Version of the Font Software may use the Reserved Font -Name(s) unless explicit written permission is granted by the corresponding -Copyright Holder. This restriction only applies to the primary font name as -presented to the users. - -4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font -Software shall not be used to promote, endorse or advertise any -Modified Version, except to acknowledge the contribution(s) of the -Copyright Holder(s) and the Author(s) or with their explicit written -permission. - -5) The Font Software, modified or unmodified, in part or in whole, -must be distributed entirely under this license, and must not be -distributed under any other license. The requirement for fonts to -remain under this license does not apply to any document created -using the Font Software. - -TERMINATION -This license becomes null and void if any of the above conditions are -not met. - -DISCLAIMER -THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT -OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE -COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL -DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM -OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/Client/Fonts/encodeFont.py b/Client/Fonts/encodeFont.py deleted file mode 100644 index 29f6d023..00000000 --- a/Client/Fonts/encodeFont.py +++ /dev/null @@ -1,20 +0,0 @@ -font = "unsigned char CascadiaCodeTTF[{}] = {{{}}};" -fontDecl = "extern unsigned char CascadiaCodeTTF[{}];" - -with open("./CascadiaCode.ttf", "rb") as f: - fbytes = f.read() - -font = font.format(len(fbytes), ",".join(map(lambda x: f"{x}", fbytes))) - -with open("../CascadiaCodeFont.cpp", "w") as f: - f.write('#include "CascadiaCodeFont.h"\n\n') - f.write("/*\n") - with open("FontLicense.txt", "r") as h: - f.write(h.read()) - f.write("*/\n\n") - f.write(font) - -with open("../CascadiaCodeFont.h", "w") as f: - f.write("#pragma once\n\n") - f.write("//Generated by Fonts/encodeFont.py\n//This is crossplatform and works well, although it is a bit weird.\n\n") - f.write(fontDecl.format(len(fbytes))) \ No newline at end of file diff --git a/Client/Headphones.h b/Client/Headphones.h index 6197d569..be3fa52b 100644 --- a/Client/Headphones.h +++ b/Client/Headphones.h @@ -1,4 +1,3 @@ -#include "SingleInstanceFuture.h" #include "BluetoothWrapper.h" #include "Constants.h" diff --git a/Client/IBluetoothConnector.h b/Client/IBluetoothConnector.h index 54678d7d..aa841c02 100644 --- a/Client/IBluetoothConnector.h +++ b/Client/IBluetoothConnector.h @@ -18,7 +18,7 @@ struct BluetoothDevice }; /* -General notes: Please look at the implementation of WindowsBluetoothConnector. +General notes: Please look at the implementation of MacOSBluetoothConnector. * Functions should throw RecoverableExceptions if they're indeed recoverable, and throw std::runtime_error otherwise. * RecoverableException can force a disconnection of the socket with an additional param (a call to disconnect()). * connect() should try the v1 service UUID (SONY_UUID) first and fall back to the v2 UUID (SONY_UUID_V2) diff --git a/Client/SingleInstanceFuture.h b/Client/SingleInstanceFuture.h deleted file mode 100644 index d2e6c49c..00000000 --- a/Client/SingleInstanceFuture.h +++ /dev/null @@ -1,54 +0,0 @@ -#pragma once - -#include -#include -#include -#include - - -//A simple future wrapper class. Allows only a single instance to be active at any single time; particularly useful for GUI operations where we don't want -//to send the same commands or repeat operations before they completed. Also wraps std::async nicely with setFromAsync -template -class SingleInstanceFuture : public std::future -{ -public: - SingleInstanceFuture(void) = default; - template - void setFromAsync(Func func, Args&&... args) noexcept(false); - bool ready(); - -private: - SingleInstanceFuture(std::future other); - SingleInstanceFuture operator=(std::future& other); -}; - -template -template -inline void SingleInstanceFuture::setFromAsync(Func func, Args && ...args) -{ - if (this->valid()) - { - throw std::runtime_error("The asynchronous action was cancelled before it finished executing"); - } - *this = std::async(std::launch::async, func, std::forward(args)...); -} - -template -inline bool SingleInstanceFuture::ready() -{ - if (!this->valid()) - { - return false; - } - return this->wait_for(std::chrono::seconds(0)) == std::future_status::ready; -} - - -template -inline SingleInstanceFuture::SingleInstanceFuture(std::future other) : std::future(std::move(other)) {} - -template -inline SingleInstanceFuture SingleInstanceFuture::operator=(std::future& other) -{ - return std::future::operator=(other); -} diff --git a/Client/TimedMessageQueue.cpp b/Client/TimedMessageQueue.cpp deleted file mode 100644 index 09fecfe4..00000000 --- a/Client/TimedMessageQueue.cpp +++ /dev/null @@ -1,40 +0,0 @@ -#include "TimedMessageQueue.h" - -TimedMessageQueue::TimedMessageQueue(unsigned int maxMessages, unsigned long long durationMs) -{ - this->_maxMessages = maxMessages; - this->_durationMs = durationMs; -} - -void TimedMessageQueue::addMessage(std::string message) -{ - if (this->_messages.size() == this->_maxMessages) - { - this->_messages.pop_front(); - } - - this->_messages.emplace_back(std::move(message), Clock::now() + std::chrono::milliseconds(this->_durationMs)); -} - -std::deque::const_iterator TimedMessageQueue::begin() -{ - while (this->_messages.size() > 0) - { - if (this->_messages.front()._releaseTime < Clock::now()) - { - this->_messages.pop_front(); - } - else - { - //break if we reached a non-stale message, to improve perf - break; - } - } - - return this->_messages.cbegin(); -} - -std::deque::const_iterator TimedMessageQueue::end() const -{ - return this->_messages.cend(); -} diff --git a/Client/TimedMessageQueue.h b/Client/TimedMessageQueue.h deleted file mode 100644 index 6aac4999..00000000 --- a/Client/TimedMessageQueue.h +++ /dev/null @@ -1,48 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include - -using LargeCounter = unsigned long long; -using Clock = std::chrono::system_clock; -using TimePoint = std::chrono::time_point; - -auto constexpr DEFAULT_MAX_MESSAGES = 13371337; -constexpr auto DEFAULT_ERROR_MESSAGE_MS = 10000; - -struct Message -{ -public: - Message(std::string message, TimePoint releaseTime) - { - this->message = std::move(message); - this->_releaseTime = releaseTime; - } - - friend class TimedMessageQueue; - - std::string message; -private: - TimePoint _releaseTime; -}; - -class TimedMessageQueue -{ -public: - TimedMessageQueue(unsigned int maxMessages = DEFAULT_MAX_MESSAGES, unsigned long long durationMs = DEFAULT_ERROR_MESSAGE_MS); - - //I: A message, and the length of time it should remain available - void addMessage(std::string message); - - //The iteators returned are guaranteed to stay valid only until the next `begin()` or `addMessage` call. - std::deque::const_iterator begin(); - std::deque::const_iterator end() const; -private: - std::deque _messages; - unsigned int _maxMessages = DEFAULT_MAX_MESSAGES; - unsigned long long _durationMs; -}; \ No newline at end of file diff --git a/Client/imgui b/Client/imgui deleted file mode 160000 index b62bfd6b..00000000 --- a/Client/imgui +++ /dev/null @@ -1 +0,0 @@ -Subproject commit b62bfd6b06de958e4630b715225b7e8409bfd0f9 diff --git a/Client/linux/DBusHelper.cpp b/Client/linux/DBusHelper.cpp deleted file mode 100644 index abbf7a2b..00000000 --- a/Client/linux/DBusHelper.cpp +++ /dev/null @@ -1,335 +0,0 @@ -#include "DBusHelper.h" -#include "../Exceptions.h" -#include -#include -#include - -DBusConnection *dbus_open_system_bus(void) -{ - DBusError error; - DBusConnection *connection = NULL; - - dbus_error_init(&error); - - connection = dbus_bus_get(DBUS_BUS_SYSTEM, &error); - - if (dbus_error_is_set(&error)) - { - printf("Could not get system bus\nError: %s\n", error.message); - dbus_error_free(&error); - return NULL; - } - - return connection; -} - -dbus_bool_t open_dict_read(DBusMessageIter *const iter, DBusMessageIter *const iter_dict) -{ - if (NULL == iter || NULL == iter_dict) - { - return FALSE; - } - - if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_ARRAY) - { - return FALSE; - } - - if (dbus_message_iter_get_element_type(iter) != DBUS_TYPE_DICT_ENTRY) - { - return FALSE; - } - - dbus_message_iter_recurse(iter, iter_dict); - return TRUE; -} - -dbus_bool_t read_next_object_path_entry(DBusMessageIter *const iter_object_paths, char **const object_path, DBusMessageIter *const iter_interfaces) -{ - DBusMessageIter iter_dict_entry; - - if (!iter_object_paths || !iter_interfaces) - { - goto error; - } - - if (dbus_message_iter_get_arg_type(iter_object_paths) != DBUS_TYPE_DICT_ENTRY) - { - goto error; - } - - dbus_message_iter_recurse(iter_object_paths, &iter_dict_entry); - - if (dbus_message_iter_get_arg_type(&iter_dict_entry) != DBUS_TYPE_OBJECT_PATH) - { - printf("Error: Unexpected arg type for object path\n"); - goto error; - } - - dbus_message_iter_get_basic(&iter_dict_entry, object_path); - - dbus_message_iter_next(&iter_dict_entry); - - if (FALSE == open_dict_read(&iter_dict_entry, iter_interfaces)) - { - goto error; - } - - dbus_message_iter_next(iter_object_paths); - - return TRUE; - -error: - return FALSE; -} - -dbus_bool_t read_next_interface_entry(DBusMessageIter *const interface_dict, char **const interface) -{ - DBusMessageIter iter_dict_entry; - - if (!interface_dict) - { - goto error; - } - - if (dbus_message_iter_get_arg_type(interface_dict) != DBUS_TYPE_DICT_ENTRY) - { - goto error; - } - - dbus_message_iter_recurse(interface_dict, &iter_dict_entry); - - if (dbus_message_iter_get_arg_type(&iter_dict_entry) != DBUS_TYPE_STRING) - { - printf("Error: Unexpected arg type for interface\n"); - goto error; - } - - dbus_message_iter_get_basic(&iter_dict_entry, interface); - - dbus_message_iter_next(interface_dict); - - return TRUE; - -error: - return FALSE; -} - -std::vector dbus_list_adapters(DBusConnection *const connection) -{ - - std::vector ret; - - DBusError error; - DBusMessage *msg = NULL; - DBusMessage *rsp = NULL; - DBusMessageIter args; - DBusMessageIter subargs; - DBusMessageIter interface_iter; - char *object_path = NULL; - char *interface = NULL; - char const *const device_interface = "org.bluez.Device1"; - - dbus_error_init(&error); - - msg = dbus_message_new_method_call("org.bluez", - "/", - "org.freedesktop.DBus.ObjectManager", - "GetManagedObjects"); - if (NULL == msg) - { - printf("Error: Could not obtain method call\n"); - goto clean_up; - } - - /* No arguments */ - - /* Invoke the method */ - rsp = dbus_connection_send_with_reply_and_block(connection, - msg, - DBUS_TIMEOUT_USE_DEFAULT, - &error); - if (dbus_error_is_set(&error)) - { - printf("Could not send dbus message\nError: %s\n", error.message); - dbus_error_free(&error); - goto clean_up; - } - - if (NULL == rsp) - { - printf("Error: Response was NULL\n"); - goto clean_up; - } - - if (!dbus_message_iter_init(rsp, &args)) - { - printf("Error: RCould not start message iterator on response\n"); - goto clean_up; - } - - if (!open_dict_read(&args, &subargs)) - { - printf("Error: Could not start dict read\n"); - goto clean_up; - } - - while (FALSE != read_next_object_path_entry(&subargs, &object_path, &interface_iter)) - { - /* dbus_bool_t found = FALSE; */ - while (FALSE != read_next_interface_entry(&interface_iter, &interface)) - { - if (strcmp(device_interface, interface) == 0) - { - ret.push_back(object_path); - } - } - } - -clean_up: - if (NULL != rsp) - { - dbus_message_unref(rsp); - } - - if (NULL != msg) - { - dbus_message_unref(msg); - } - return ret; -} - -std::string dbus_get_property(DBusConnection *const connection, const char *device_path, const char *property) -{ - - std::string ret; - - DBusError error; - DBusMessage *msg = NULL; - DBusMessage *rsp = NULL; - DBusMessageIter args; - DBusMessageIter subargs; - char *interface = NULL; - char const *const device_interface = "org.bluez.Device1"; - - dbus_error_init(&error); - - msg = dbus_message_new_method_call("org.bluez", - device_path, - "org.freedesktop.DBus.Properties", - "Get"); - if (NULL == msg) - { - printf("Error: Could not obtain method call\n"); - goto clean_up; - } - - /* arguments */ - dbus_message_append_args(msg, - DBUS_TYPE_STRING, &device_interface, - DBUS_TYPE_INVALID); - - dbus_message_append_args(msg, - DBUS_TYPE_STRING, &property, - DBUS_TYPE_INVALID); - - /* Invoke the method */ - rsp = dbus_connection_send_with_reply_and_block(connection, - msg, - DBUS_TIMEOUT_USE_DEFAULT, - &error); - if (dbus_error_is_set(&error)) - { - printf("Could not send dbus message\nError: %s\n", error.message); - dbus_error_free(&error); - goto clean_up; - } - - if (NULL == rsp) - { - printf("Error: Response was NULL\n"); - goto clean_up; - } - - if (!dbus_message_iter_init(rsp, &args)) - { - printf("Error: Could not start message iterator on response\n"); - goto clean_up; - } - - dbus_message_iter_recurse(&args, &subargs); - - dbus_message_iter_get_basic(&subargs, &interface); - ret = std::string(interface); - -clean_up: - if (NULL != rsp) - { - dbus_message_unref(rsp); - } - - if (NULL != msg) - { - dbus_message_unref(msg); - } - - return ret; -} - -uint8_t sdp_getServiceChannel(const char *dev_addr, uint8_t *uuid128) -{ - int status; - bdaddr_t target; - uuid_t svc_uuid; - sdp_list_t *response_list, *search_list, *attrid_list; - sdp_session_t *session = 0; - uint32_t range = 0x0000ffff; - uint8_t port = 0; - str2ba(dev_addr, &target); - /* connect to the SDP server running on the remote machine */ - const bdaddr_t bdaddr_any = {{0, 0, 0, 0, 0, 0}}; - session = sdp_connect(&bdaddr_any, &target, SDP_RETRY_IF_BUSY); - if (!session) { - throw RecoverableException("Error: could not connect to bluetooth spd server", true); -} - - sdp_uuid128_create(&svc_uuid, uuid128); - search_list = sdp_list_append(0, &svc_uuid); - attrid_list = sdp_list_append(0, &range); - // get a list of service records that have UUID 0xabcd - response_list = NULL; - status = sdp_service_search_attr_req(session, search_list, - SDP_ATTR_REQ_RANGE, attrid_list, &response_list); - if (status == 0) - { - sdp_list_t *proto_list = NULL; - sdp_list_t *r = response_list; - - // go through each of the service records - for (; r; r = r->next) - { - sdp_record_t *rec = (sdp_record_t *)r->data; - - // get a list of the protocol sequences - if (sdp_get_access_protos(rec, &proto_list) == 0) - { - // get the RFCOMM port number - port = sdp_get_proto_port(proto_list, RFCOMM_UUID); - - sdp_list_free(proto_list, 0); - } - sdp_record_free(rec); - } - } - sdp_list_free(response_list, 0); - sdp_list_free(search_list, 0); - sdp_list_free(attrid_list, 0); - sdp_close(session); - - if (port != 0) - { - printf("found service running on RFCOMM port %d\n", port); - } - - return port; -} \ No newline at end of file diff --git a/Client/linux/DBusHelper.h b/Client/linux/DBusHelper.h deleted file mode 100644 index 91af421f..00000000 --- a/Client/linux/DBusHelper.h +++ /dev/null @@ -1,16 +0,0 @@ -#pragma once - -#include -#include -#include -#include - -DBusConnection *dbus_open_system_bus(); -dbus_bool_t open_dict_read(DBusMessageIter *const iter, DBusMessageIter *const iter_dict); -dbus_bool_t read_next_object_path_entry(DBusMessageIter *const iter_object_paths, char **const object_path, DBusMessageIter *const iter_interfaces); -dbus_bool_t read_next_interface_entry(DBusMessageIter *const interface_dict, char **const interface); -std::vector dbus_list_adapters(DBusConnection *const connection); -std::string dbus_get_property(DBusConnection *const connection, const char *device_path, const char *property); - -uint8_t sdp_getServiceChannel(const char *dev_addr, uint8_t *uuid128); - diff --git a/Client/linux/FindDBus.cmake b/Client/linux/FindDBus.cmake deleted file mode 100644 index 4a1a1805..00000000 --- a/Client/linux/FindDBus.cmake +++ /dev/null @@ -1,59 +0,0 @@ -# - Try to find DBus -# Once done, this will define -# -# DBUS_FOUND - system has DBus -# DBUS_INCLUDE_DIRS - the DBus include directories -# DBUS_LIBRARIES - link these to use DBus -# -# Copyright (C) 2012 Raphael Kubo da Costa -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS -# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, -# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -FIND_PACKAGE(PkgConfig) -PKG_CHECK_MODULES(PC_DBUS QUIET dbus-1) - -FIND_LIBRARY(DBUS_LIBRARIES - NAMES dbus-1 - HINTS ${PC_DBUS_LIBDIR} - ${PC_DBUS_LIBRARY_DIRS} -) - -FIND_PATH(DBUS_INCLUDE_DIR - NAMES dbus/dbus.h - HINTS ${PC_DBUS_INCLUDEDIR} - ${PC_DBUS_INCLUDE_DIRS} -) - -GET_FILENAME_COMPONENT(_DBUS_LIBRARY_DIR ${DBUS_LIBRARIES} PATH) -FIND_PATH(DBUS_ARCH_INCLUDE_DIR - NAMES dbus/dbus-arch-deps.h - HINTS ${PC_DBUS_INCLUDEDIR} - ${PC_DBUS_INCLUDE_DIRS} - ${_DBUS_LIBRARY_DIR} - ${DBUS_INCLUDE_DIR} - PATH_SUFFIXES include -) - -SET(DBUS_INCLUDE_DIRS ${DBUS_INCLUDE_DIR} ${DBUS_ARCH_INCLUDE_DIR}) - -INCLUDE(FindPackageHandleStandardArgs) -FIND_PACKAGE_HANDLE_STANDARD_ARGS(DBUS REQUIRED_VARS DBUS_INCLUDE_DIRS DBUS_LIBRARIES) diff --git a/Client/linux/LinuxBluetoothConnector.cpp b/Client/linux/LinuxBluetoothConnector.cpp deleted file mode 100644 index 3e0d19ae..00000000 --- a/Client/linux/LinuxBluetoothConnector.cpp +++ /dev/null @@ -1,151 +0,0 @@ -#include "LinuxBluetoothConnector.h" - -#include -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -#include "DBusHelper.h" - -LinuxBluetoothConnector::LinuxBluetoothConnector() -{ -} -LinuxBluetoothConnector::~LinuxBluetoothConnector() -{ - //onclose event - if (isConnected()) - { - disconnect(); - } -} - -int LinuxBluetoothConnector::recv(char *buf, size_t length) -{ - ssize_t bytesRead = ::read(this->_socket, buf, length); - if (bytesRead < 0) - { - // A recv timeout (SO_RCVTIMEO) is expected while probing optional features: report it as recoverable - // WITHOUT forcing a disconnect so an unanswered GET just hides that feature instead of dropping the link. - if (errno == EAGAIN || errno == EWOULDBLOCK) - { - throw RecoverableException("recv timed out", false); - } - throw RecoverableException(std::string("Couldn't recv: ") + strerror(errno), true); - } - return (int)bytesRead; -} - -int LinuxBluetoothConnector::send(char *buf, size_t length) -{ - - size_t written = ::write(this->_socket, buf, length); - // printf("length: %ld, written: %ld\n", length, written); - // for (int i = 0; i < written; i++) - // { - // std::cout << std::setfill('0') << std::setw(2) << std::hex << (0xff & (unsigned int)buf[i]) << " "; - // } - // std::cout << '\n'; - return written; -} - -void LinuxBluetoothConnector::connect(const std::string &addrStr) -{ - - printf("connecting to %s\n", addrStr.c_str()); - struct sockaddr_rc addr = {0}; - int status; - const char *dest = addrStr.c_str(); - - // allocate a socket - this->_socket = ::socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); - - uint32_t linkmode = RFCOMM_LM_AUTH | RFCOMM_LM_ENCRYPT; - int sl = sizeof(linkmode); - setsockopt(this->_socket, SOL_RFCOMM, RFCOMM_LM, &linkmode, sl); - - // Bound recv so capability probing can't block forever (matches the 2.5s macOS timeout). - struct timeval recvTimeout = {2, 500000}; - setsockopt(this->_socket, SOL_SOCKET, SO_RCVTIMEO, &recvTimeout, sizeof(recvTimeout)); - - // set the connection parameters (who to connect to) - addr.rc_family = AF_BLUETOOTH; - // try the v1 service UUID first, then fall back to the v2 (newer-generation) UUID. - uint8_t channel = sdp_getServiceChannel(addrStr.c_str(), SERVICE_UUID_IN_BYTES); - this->_protocolVersion = SonyProtocolVersion::V1; - if (channel == 0) - { - channel = sdp_getServiceChannel(addrStr.c_str(), SERVICE_UUID_V2_IN_BYTES); - this->_protocolVersion = SonyProtocolVersion::V2; - } - if (channel == 0) - { - throw RecoverableException("Couldn't find the Sony service record on this device (neither protocol version) - is this a supported headset?", true); - } - printf("channel: %d\n", channel); - addr.rc_channel = channel; - str2ba(dest, &addr.rc_bdaddr); - - // connect to server - status = ::connect(this->_socket, (struct sockaddr *)&addr, sizeof(addr)); - - if (status < 0) - { - throw RecoverableException("Error: could not connect to bluetooth socket", true); - } - this->_connected = true; -} - -std::vector LinuxBluetoothConnector::getConnectedDevices() -{ - - std::vector res; - - DBusConnection *connection = dbus_open_system_bus(); - if (NULL == connection) - { - return res; - } - - std::vector adapter_paths = dbus_list_adapters(connection); - for (auto &adapter : adapter_paths) - { - printf("%s\n", adapter.c_str()); - std::string name = dbus_get_property(connection, adapter.c_str(), "Name"); - std::string address = dbus_get_property(connection, adapter.c_str(), "Address"); - res.push_back({.name = name, .mac = address}); - } - - return res; -} - -void LinuxBluetoothConnector::disconnect() noexcept -{ - // close connection - if (this->_socket != -1) - { - ::close(this->_socket); - } - this->_connected = false; - printf("closed\n"); -} - -bool LinuxBluetoothConnector::isConnected() noexcept -{ - return this->_connected; -} - -SonyProtocolVersion LinuxBluetoothConnector::getProtocolVersion() noexcept -{ - return this->_protocolVersion; -} diff --git a/Client/linux/LinuxBluetoothConnector.h b/Client/linux/LinuxBluetoothConnector.h deleted file mode 100644 index ae2e01b3..00000000 --- a/Client/linux/LinuxBluetoothConnector.h +++ /dev/null @@ -1,25 +0,0 @@ -#pragma once -#include -#include "../IBluetoothConnector.h" -#include "Constants.h" -#include - -class LinuxBluetoothConnector final : public IBluetoothConnector -{ -public: - LinuxBluetoothConnector(); - ~LinuxBluetoothConnector(); - virtual void connect(const std::string& addrStr) noexcept(false); - virtual int send(char* buf, size_t length) noexcept(false); - virtual int recv(char* buf, size_t length) noexcept(false); - virtual void disconnect() noexcept; - virtual bool isConnected() noexcept; - virtual std::vector getConnectedDevices() noexcept(false); - virtual SonyProtocolVersion getProtocolVersion() noexcept; - - -private: - int _socket = -1; - std::atomic _connected = false; - SonyProtocolVersion _protocolVersion = SonyProtocolVersion::V1; -}; \ No newline at end of file diff --git a/Client/linux/LinuxGUI.cpp b/Client/linux/LinuxGUI.cpp deleted file mode 100644 index 6da15903..00000000 --- a/Client/linux/LinuxGUI.cpp +++ /dev/null @@ -1,88 +0,0 @@ -#include "LinuxGUI.h" -#include "imgui.h" -#include "backends/imgui_impl_glfw.h" -#include "backends/imgui_impl_opengl3.h" -#include -#include -#include "Constants.h" -#include "TimedMessageQueue.h" -#include "CrossPlatformGUI.h" - -static void glfw_error_callback(int error, const char *description) -{ - fprintf(stderr, "Glfw Error %d: %s\n", error, description); -} - -void EnterGUIMainLoop(BluetoothWrapper bt) -{ - // Setup Dear ImGui binding - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - - // init GUI - CrossPlatformGUI GUI = CrossPlatformGUI(std::move(bt)); - - // Setup window - glfwSetErrorCallback(glfw_error_callback); - if (!glfwInit()) - return; - - const char *glsl_version = "#version 150"; - glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); - glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); - glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); - - // Create window with graphics context - GLFWwindow *window = glfwCreateWindow(GUI_WIDTH, GUI_HEIGHT, APP_NAME, NULL, NULL); - if (window == NULL) - return; - - glfwMakeContextCurrent(window); - glfwSwapInterval(1); // Enable vsync - - ImGuiIO &io = ImGui::GetIO(); - (void)io; - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableGamepad; // Enable Gamepad Controls - - // Setup Dear ImGui style - ImGui::StyleColorsDark(); - //ImGui::StyleColorsClassic(); - - // Setup Platform/Renderer backends - ImGui_ImplGlfw_InitForOpenGL(window, true); - ImGui_ImplOpenGL3_Init(glsl_version); - - ImVec4 clear_color = ImVec4(0.45f, 0.55f, 0.60f, 1.00f); - // Main loop - while (!glfwWindowShouldClose(window)) - { - - glfwPollEvents(); - - // Start the Dear ImGui frame - ImGui_ImplOpenGL3_NewFrame(); - ImGui_ImplGlfw_NewFrame(); - - // perform gui pass - GUI.performGUIPass(); - - int display_w, display_h; - glfwGetFramebufferSize(window, &display_w, &display_h); - glViewport(0, 0, display_w, display_h); - glClearColor(clear_color.x, clear_color.y, clear_color.z, clear_color.w); - glClear(GL_COLOR_BUFFER_BIT); - ImGui_ImplOpenGL3_RenderDrawData(ImGui::GetDrawData()); - - glfwSwapBuffers(window); - } - - // Cleanup - ImGui_ImplOpenGL3_Shutdown(); - ImGui_ImplGlfw_Shutdown(); - ImGui::DestroyContext(); - - glfwDestroyWindow(window); - glfwTerminate(); -}; diff --git a/Client/linux/LinuxGUI.h b/Client/linux/LinuxGUI.h deleted file mode 100644 index de248693..00000000 --- a/Client/linux/LinuxGUI.h +++ /dev/null @@ -1,5 +0,0 @@ -#pragma once - -#include "BluetoothWrapper.h" - -void EnterGUIMainLoop(BluetoothWrapper bt); \ No newline at end of file diff --git a/Client/linux/main.cpp b/Client/linux/main.cpp deleted file mode 100644 index 847a4653..00000000 --- a/Client/linux/main.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include -#include "LinuxGUI.h" -#include "LinuxBluetoothConnector.h" -#include "BluetoothWrapper.h" - -int main(int argc, const char *argv[]) -{ - try - { - // Get bluetooth connector - std::unique_ptr connector = std::make_unique(); - // Wrap the connector using the bluetoothwrapper - BluetoothWrapper wrap(std::move(connector)); - // Start the gui - EnterGUIMainLoop(std::move(wrap)); - } - catch (const std::exception &e) - { - printf("%s", e.what()); - } - return 1; -} diff --git a/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj b/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj index 2ce1c62e..ded42608 100644 --- a/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj +++ b/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj @@ -14,7 +14,6 @@ A8DC78EC2576923D00447738 /* MacOSBluetoothConnector.mm in Sources */ = {isa = PBXBuildFile; fileRef = A8DC78E82576923D00447738 /* MacOSBluetoothConnector.mm */; }; A8DC78F12576952E00447738 /* BluetoothWrapper.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8DC78EF2576952E00447738 /* BluetoothWrapper.cpp */; }; A8DC78F52576953600447738 /* CommandSerializer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8DC78F32576953600447738 /* CommandSerializer.cpp */; }; - A8DC78FA2576954100447738 /* TimedMessageQueue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8DC78F92576954100447738 /* TimedMessageQueue.cpp */; }; A8DC78FF2576967D00447738 /* ByteMagic.cpp in Sources */ = {isa = PBXBuildFile; fileRef = A8DC78FD2576967D00447738 /* ByteMagic.cpp */; }; A8DC790525769A6600447738 /* IOBluetooth.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A8DC790425769A6600447738 /* IOBluetooth.framework */; }; A8DC792C25769C9900447738 /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = A8DC792825769C9900447738 /* AppDelegate.mm */; }; @@ -44,9 +43,6 @@ A8DC78F02576952E00447738 /* BluetoothWrapper.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = BluetoothWrapper.h; path = ../BluetoothWrapper.h; sourceTree = ""; }; A8DC78F32576953600447738 /* CommandSerializer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = CommandSerializer.cpp; path = ../CommandSerializer.cpp; sourceTree = ""; }; A8DC78F42576953600447738 /* CommandSerializer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = CommandSerializer.h; path = ../CommandSerializer.h; sourceTree = ""; }; - A8DC78F72576954100447738 /* TimedMessageQueue.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = TimedMessageQueue.h; path = ../TimedMessageQueue.h; sourceTree = ""; }; - A8DC78F82576954100447738 /* SingleInstanceFuture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = SingleInstanceFuture.h; path = ../SingleInstanceFuture.h; sourceTree = ""; }; - A8DC78F92576954100447738 /* TimedMessageQueue.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = TimedMessageQueue.cpp; path = ../TimedMessageQueue.cpp; sourceTree = ""; }; A8DC78FD2576967D00447738 /* ByteMagic.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = ByteMagic.cpp; path = ../ByteMagic.cpp; sourceTree = ""; }; A8DC78FE2576967D00447738 /* ByteMagic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = ByteMagic.h; path = ../ByteMagic.h; sourceTree = ""; }; A8DC790425769A6600447738 /* IOBluetooth.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOBluetooth.framework; path = System/Library/Frameworks/IOBluetooth.framework; sourceTree = SDKROOT; }; @@ -92,9 +88,6 @@ A8DC78F02576952E00447738 /* BluetoothWrapper.h */, A8DC78F32576953600447738 /* CommandSerializer.cpp */, A8DC78F42576953600447738 /* CommandSerializer.h */, - A8DC78F82576954100447738 /* SingleInstanceFuture.h */, - A8DC78F92576954100447738 /* TimedMessageQueue.cpp */, - A8DC78F72576954100447738 /* TimedMessageQueue.h */, A8DC78FD2576967D00447738 /* ByteMagic.cpp */, A8DC78FE2576967D00447738 /* ByteMagic.h */, A8A3D31D283EC38600148E80 /* Headphones.cpp */, @@ -196,7 +189,6 @@ A8DC78EC2576923D00447738 /* MacOSBluetoothConnector.mm in Sources */, A8DC792D25769C9900447738 /* ViewController.mm in Sources */, A8DC78F12576952E00447738 /* BluetoothWrapper.cpp in Sources */, - A8DC78FA2576954100447738 /* TimedMessageQueue.cpp in Sources */, A8DC78F52576953600447738 /* CommandSerializer.cpp in Sources */, A8DC78FF2576967D00447738 /* ByteMagic.cpp in Sources */, A8DC792C25769C9900447738 /* AppDelegate.mm in Sources */, diff --git a/Client/resources/devices/linkbuds-s.png b/Client/resources/devices/linkbuds-s.png deleted file mode 100644 index 89f98ed86e824ac4259a8f6e9964b11ad15de9af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72807 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 z 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%0D)g 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 N`Z^}sRa*8D{{yd7`56EJ diff --git a/Client/resources/devices/mdr-xb950bt.png b/Client/resources/devices/mdr-xb950bt.png deleted file mode 100644 index 2362dacf7ecdb34b1142311f0977389f523fee05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107133 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

m|9z1&t@2oG+#uPvX!o}s1argAv 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%0Ae<;<^t%e$&D`4aM97w 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 oC--@Uw>g7I{>0&tG`{YB;7AfxeqWE}_< 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 Ukhem<6BBS58JOu;-FJ%nA5qa>R{#J2 diff --git a/Client/resources/devices/wf-1000xm4.png b/Client/resources/devices/wf-1000xm4.png deleted file mode 100644 index 418be7ef2e35106995515c8b55ca06423d659295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63054 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%0Driw(q7E$Fh5?IVMnXa& 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 diff --git a/Client/resources/devices/wf-1000xm5.png b/Client/resources/devices/wf-1000xm5.png deleted file mode 100644 index 413f582dd4874443fe352baef7eacddd69f7eb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63455 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

vdu@Z&y;no> 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 U=jMj9-$5QJF?rEyVZ)&R14!mIL;wH) diff --git a/Client/resources/devices/wf-c700n.png b/Client/resources/devices/wf-c700n.png deleted file mode 100644 index 1e183ff2576ca94388f91155de050edc2e73a63d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65464 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 xK0%rr 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 Uvmk}mMF0Q*07*qoM6N<$f^=zemjD0& diff --git a/Client/resources/devices/wh-1000xm2.png b/Client/resources/devices/wh-1000xm2.png deleted file mode 100644 index dd502bb5a5deda69c05e4c51055bc0689bb3321a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120624 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 z 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 b3p)M-hx9PKU2Z{`00000NkvXXu0mjf7GeJS diff --git a/Client/resources/devices/wh-1000xm3.png b/Client/resources/devices/wh-1000xm3.png deleted file mode 100644 index febf92e19438fe9266ed23430587e4d88c931d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69683 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%0Aod4!eEO!w=3Q1Yg%<(mo3@^LMSGTA3qt} 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 KMNUMnLSTYw-Eckt diff --git a/Client/resources/devices/wh-1000xm5.png b/Client/resources/devices/wh-1000xm5.png deleted file mode 100644 index 5c58b84416c855981db3fc96f86a5a6cca64b8e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76768 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¬s?iV%>x7LR!s9on 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�t!!{=jh1j2QecRrxqPB>X7uu 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 diff --git a/Client/resources/devices/wh-1000xm6.png b/Client/resources/devices/wh-1000xm6.png deleted file mode 100644 index 61f2e586afe131a69a5e25e766d4ed100b333118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112001 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

-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

1RU+lg(kf5f6jLs&ZFPDb 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 -#endif // STBI_NO_STDIO - -#define STBI_VERSION 1 - -enum -{ - STBI_default = 0, // only used for desired_channels - - STBI_grey = 1, - STBI_grey_alpha = 2, - STBI_rgb = 3, - STBI_rgb_alpha = 4 -}; - -#include -typedef unsigned char stbi_uc; -typedef unsigned short stbi_us; - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef STBIDEF -#ifdef STB_IMAGE_STATIC -#define STBIDEF static -#else -#define STBIDEF extern -#endif -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// PRIMARY API - works on images of any type -// - -// -// load image by filename, open file, or memory buffer -// - -typedef struct -{ - int (*read) (void *user,char *data,int size); // fill 'data' with 'size' bytes. return number of bytes actually read - void (*skip) (void *user,int n); // skip the next 'n' bytes, or 'unget' the last -n bytes if negative - int (*eof) (void *user); // returns nonzero if we are at end of file/data -} stbi_io_callbacks; - -//////////////////////////////////// -// -// 8-bits-per-channel interface -// - -STBIDEF stbi_uc *stbi_load_from_memory (stbi_uc const *buffer, int len , int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk , void *user, int *x, int *y, int *channels_in_file, int desired_channels); - -#ifndef STBI_NO_STDIO -STBIDEF stbi_uc *stbi_load (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_uc *stbi_load_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); -// for stbi_load_from_file, file pointer is left pointing immediately after image -#endif - -#ifndef STBI_NO_GIF -STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp); -#endif - -#ifdef STBI_WINDOWS_UTF8 -STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input); -#endif - -//////////////////////////////////// -// -// 16-bits-per-channel interface -// - -STBIDEF stbi_us *stbi_load_16_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); - -#ifndef STBI_NO_STDIO -STBIDEF stbi_us *stbi_load_16 (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); -STBIDEF stbi_us *stbi_load_from_file_16(FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); -#endif - -//////////////////////////////////// -// -// float-per-channel interface -// -#ifndef STBI_NO_LINEAR - STBIDEF float *stbi_loadf_from_memory (stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels); - STBIDEF float *stbi_loadf_from_callbacks (stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels); - - #ifndef STBI_NO_STDIO - STBIDEF float *stbi_loadf (char const *filename, int *x, int *y, int *channels_in_file, int desired_channels); - STBIDEF float *stbi_loadf_from_file (FILE *f, int *x, int *y, int *channels_in_file, int desired_channels); - #endif -#endif - -#ifndef STBI_NO_HDR - STBIDEF void stbi_hdr_to_ldr_gamma(float gamma); - STBIDEF void stbi_hdr_to_ldr_scale(float scale); -#endif // STBI_NO_HDR - -#ifndef STBI_NO_LINEAR - STBIDEF void stbi_ldr_to_hdr_gamma(float gamma); - STBIDEF void stbi_ldr_to_hdr_scale(float scale); -#endif // STBI_NO_LINEAR - -// stbi_is_hdr is always defined, but always returns false if STBI_NO_HDR -STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user); -STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len); -#ifndef STBI_NO_STDIO -STBIDEF int stbi_is_hdr (char const *filename); -STBIDEF int stbi_is_hdr_from_file(FILE *f); -#endif // STBI_NO_STDIO - - -// get a VERY brief reason for failure -// on most compilers (and ALL modern mainstream compilers) this is threadsafe -STBIDEF const char *stbi_failure_reason (void); - -// free the loaded image -- this is just free() -STBIDEF void stbi_image_free (void *retval_from_stbi_load); - -// get image dimensions & components without fully decoding -STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp); -STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp); -STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len); -STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *clbk, void *user); - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_info (char const *filename, int *x, int *y, int *comp); -STBIDEF int stbi_info_from_file (FILE *f, int *x, int *y, int *comp); -STBIDEF int stbi_is_16_bit (char const *filename); -STBIDEF int stbi_is_16_bit_from_file(FILE *f); -#endif - - - -// for image formats that explicitly notate that they have premultiplied alpha, -// we just return the colors as stored in the file. set this flag to force -// unpremultiplication. results are undefined if the unpremultiply overflow. -STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply); - -// indicate whether we should process iphone images back to canonical format, -// or just pass them through "as-is" -STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert); - -// flip the image vertically, so the first pixel in the output array is the bottom left -STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip); - -// as above, but only applies to images loaded on the thread that calls the function -// this function is only available if your compiler supports thread-local variables; -// calling it will fail to link if your compiler doesn't -STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply); -STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert); -STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip); - -// ZLIB client - used by PNG, available for other purposes - -STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen); -STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header); -STBIDEF char *stbi_zlib_decode_malloc(const char *buffer, int len, int *outlen); -STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - -STBIDEF char *stbi_zlib_decode_noheader_malloc(const char *buffer, int len, int *outlen); -STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen); - - -#ifdef __cplusplus -} -#endif - -// -// -//// end header file ///////////////////////////////////////////////////// -#endif // STBI_INCLUDE_STB_IMAGE_H - -#ifdef STB_IMAGE_IMPLEMENTATION - -#if defined(STBI_ONLY_JPEG) || defined(STBI_ONLY_PNG) || defined(STBI_ONLY_BMP) \ - || defined(STBI_ONLY_TGA) || defined(STBI_ONLY_GIF) || defined(STBI_ONLY_PSD) \ - || defined(STBI_ONLY_HDR) || defined(STBI_ONLY_PIC) || defined(STBI_ONLY_PNM) \ - || defined(STBI_ONLY_ZLIB) - #ifndef STBI_ONLY_JPEG - #define STBI_NO_JPEG - #endif - #ifndef STBI_ONLY_PNG - #define STBI_NO_PNG - #endif - #ifndef STBI_ONLY_BMP - #define STBI_NO_BMP - #endif - #ifndef STBI_ONLY_PSD - #define STBI_NO_PSD - #endif - #ifndef STBI_ONLY_TGA - #define STBI_NO_TGA - #endif - #ifndef STBI_ONLY_GIF - #define STBI_NO_GIF - #endif - #ifndef STBI_ONLY_HDR - #define STBI_NO_HDR - #endif - #ifndef STBI_ONLY_PIC - #define STBI_NO_PIC - #endif - #ifndef STBI_ONLY_PNM - #define STBI_NO_PNM - #endif -#endif - -#if defined(STBI_NO_PNG) && !defined(STBI_SUPPORT_ZLIB) && !defined(STBI_NO_ZLIB) -#define STBI_NO_ZLIB -#endif - - -#include -#include // ptrdiff_t on osx -#include -#include -#include - -#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) -#include // ldexp, pow -#endif - -#ifndef STBI_NO_STDIO -#include -#endif - -#ifndef STBI_ASSERT -#include -#define STBI_ASSERT(x) assert(x) -#endif - -#ifdef __cplusplus -#define STBI_EXTERN extern "C" -#else -#define STBI_EXTERN extern -#endif - - -#ifndef _MSC_VER - #ifdef __cplusplus - #define stbi_inline inline - #else - #define stbi_inline - #endif -#else - #define stbi_inline __forceinline -#endif - -#ifndef STBI_NO_THREAD_LOCALS - #if defined(__cplusplus) && __cplusplus >= 201103L - #define STBI_THREAD_LOCAL thread_local - #elif defined(__GNUC__) && __GNUC__ < 5 - #define STBI_THREAD_LOCAL __thread - #elif defined(_MSC_VER) - #define STBI_THREAD_LOCAL __declspec(thread) - #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L && !defined(__STDC_NO_THREADS__) - #define STBI_THREAD_LOCAL _Thread_local - #endif - - #ifndef STBI_THREAD_LOCAL - #if defined(__GNUC__) - #define STBI_THREAD_LOCAL __thread - #endif - #endif -#endif - -#if defined(_MSC_VER) || defined(__SYMBIAN32__) -typedef unsigned short stbi__uint16; -typedef signed short stbi__int16; -typedef unsigned int stbi__uint32; -typedef signed int stbi__int32; -#else -#include -typedef uint16_t stbi__uint16; -typedef int16_t stbi__int16; -typedef uint32_t stbi__uint32; -typedef int32_t stbi__int32; -#endif - -// should produce compiler error if size is wrong -typedef unsigned char validate_uint32[sizeof(stbi__uint32)==4 ? 1 : -1]; - -#ifdef _MSC_VER -#define STBI_NOTUSED(v) (void)(v) -#else -#define STBI_NOTUSED(v) (void)sizeof(v) -#endif - -#ifdef _MSC_VER -#define STBI_HAS_LROTL -#endif - -#ifdef STBI_HAS_LROTL - #define stbi_lrot(x,y) _lrotl(x,y) -#else - #define stbi_lrot(x,y) (((x) << (y)) | ((x) >> (-(y) & 31))) -#endif - -#if defined(STBI_MALLOC) && defined(STBI_FREE) && (defined(STBI_REALLOC) || defined(STBI_REALLOC_SIZED)) -// ok -#elif !defined(STBI_MALLOC) && !defined(STBI_FREE) && !defined(STBI_REALLOC) && !defined(STBI_REALLOC_SIZED) -// ok -#else -#error "Must define all or none of STBI_MALLOC, STBI_FREE, and STBI_REALLOC (or STBI_REALLOC_SIZED)." -#endif - -#ifndef STBI_MALLOC -#define STBI_MALLOC(sz) malloc(sz) -#define STBI_REALLOC(p,newsz) realloc(p,newsz) -#define STBI_FREE(p) free(p) -#endif - -#ifndef STBI_REALLOC_SIZED -#define STBI_REALLOC_SIZED(p,oldsz,newsz) STBI_REALLOC(p,newsz) -#endif - -// x86/x64 detection -#if defined(__x86_64__) || defined(_M_X64) -#define STBI__X64_TARGET -#elif defined(__i386) || defined(_M_IX86) -#define STBI__X86_TARGET -#endif - -#if defined(__GNUC__) && defined(STBI__X86_TARGET) && !defined(__SSE2__) && !defined(STBI_NO_SIMD) -// gcc doesn't support sse2 intrinsics unless you compile with -msse2, -// which in turn means it gets to use SSE2 everywhere. This is unfortunate, -// but previous attempts to provide the SSE2 functions with runtime -// detection caused numerous issues. The way architecture extensions are -// exposed in GCC/Clang is, sadly, not really suited for one-file libs. -// New behavior: if compiled with -msse2, we use SSE2 without any -// detection; if not, we don't use it at all. -#define STBI_NO_SIMD -#endif - -#if defined(__MINGW32__) && defined(STBI__X86_TARGET) && !defined(STBI_MINGW_ENABLE_SSE2) && !defined(STBI_NO_SIMD) -// Note that __MINGW32__ doesn't actually mean 32-bit, so we have to avoid STBI__X64_TARGET -// -// 32-bit MinGW wants ESP to be 16-byte aligned, but this is not in the -// Windows ABI and VC++ as well as Windows DLLs don't maintain that invariant. -// As a result, enabling SSE2 on 32-bit MinGW is dangerous when not -// simultaneously enabling "-mstackrealign". -// -// See https://github.com/nothings/stb/issues/81 for more information. -// -// So default to no SSE2 on 32-bit MinGW. If you've read this far and added -// -mstackrealign to your build settings, feel free to #define STBI_MINGW_ENABLE_SSE2. -#define STBI_NO_SIMD -#endif - -#if !defined(STBI_NO_SIMD) && (defined(STBI__X86_TARGET) || defined(STBI__X64_TARGET)) -#define STBI_SSE2 -#include - -#ifdef _MSC_VER - -#if _MSC_VER >= 1400 // not VC6 -#include // __cpuid -static int stbi__cpuid3(void) -{ - int info[4]; - __cpuid(info,1); - return info[3]; -} -#else -static int stbi__cpuid3(void) -{ - int res; - __asm { - mov eax,1 - cpuid - mov res,edx - } - return res; -} -#endif - -#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name - -#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) -static int stbi__sse2_available(void) -{ - int info3 = stbi__cpuid3(); - return ((info3 >> 26) & 1) != 0; -} -#endif - -#else // assume GCC-style if not VC++ -#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) - -#if !defined(STBI_NO_JPEG) && defined(STBI_SSE2) -static int stbi__sse2_available(void) -{ - // If we're even attempting to compile this on GCC/Clang, that means - // -msse2 is on, which means the compiler is allowed to use SSE2 - // instructions at will, and so are we. - return 1; -} -#endif - -#endif -#endif - -// ARM NEON -#if defined(STBI_NO_SIMD) && defined(STBI_NEON) -#undef STBI_NEON -#endif - -#ifdef STBI_NEON -#include -#ifdef _MSC_VER -#define STBI_SIMD_ALIGN(type, name) __declspec(align(16)) type name -#else -#define STBI_SIMD_ALIGN(type, name) type name __attribute__((aligned(16))) -#endif -#endif - -#ifndef STBI_SIMD_ALIGN -#define STBI_SIMD_ALIGN(type, name) type name -#endif - -#ifndef STBI_MAX_DIMENSIONS -#define STBI_MAX_DIMENSIONS (1 << 24) -#endif - -/////////////////////////////////////////////// -// -// stbi__context struct and start_xxx functions - -// stbi__context structure is our basic context used by all images, so it -// contains all the IO context, plus some basic image information -typedef struct -{ - stbi__uint32 img_x, img_y; - int img_n, img_out_n; - - stbi_io_callbacks io; - void *io_user_data; - - int read_from_callbacks; - int buflen; - stbi_uc buffer_start[128]; - int callback_already_read; - - stbi_uc *img_buffer, *img_buffer_end; - stbi_uc *img_buffer_original, *img_buffer_original_end; -} stbi__context; - - -static void stbi__refill_buffer(stbi__context *s); - -// initialize a memory-decode context -static void stbi__start_mem(stbi__context *s, stbi_uc const *buffer, int len) -{ - s->io.read = NULL; - s->read_from_callbacks = 0; - s->callback_already_read = 0; - s->img_buffer = s->img_buffer_original = (stbi_uc *) buffer; - s->img_buffer_end = s->img_buffer_original_end = (stbi_uc *) buffer+len; -} - -// initialize a callback-based context -static void stbi__start_callbacks(stbi__context *s, stbi_io_callbacks *c, void *user) -{ - s->io = *c; - s->io_user_data = user; - s->buflen = sizeof(s->buffer_start); - s->read_from_callbacks = 1; - s->callback_already_read = 0; - s->img_buffer = s->img_buffer_original = s->buffer_start; - stbi__refill_buffer(s); - s->img_buffer_original_end = s->img_buffer_end; -} - -#ifndef STBI_NO_STDIO - -static int stbi__stdio_read(void *user, char *data, int size) -{ - return (int) fread(data,1,size,(FILE*) user); -} - -static void stbi__stdio_skip(void *user, int n) -{ - int ch; - fseek((FILE*) user, n, SEEK_CUR); - ch = fgetc((FILE*) user); /* have to read a byte to reset feof()'s flag */ - if (ch != EOF) { - ungetc(ch, (FILE *) user); /* push byte back onto stream if valid. */ - } -} - -static int stbi__stdio_eof(void *user) -{ - return feof((FILE*) user) || ferror((FILE *) user); -} - -static stbi_io_callbacks stbi__stdio_callbacks = -{ - stbi__stdio_read, - stbi__stdio_skip, - stbi__stdio_eof, -}; - -static void stbi__start_file(stbi__context *s, FILE *f) -{ - stbi__start_callbacks(s, &stbi__stdio_callbacks, (void *) f); -} - -//static void stop_file(stbi__context *s) { } - -#endif // !STBI_NO_STDIO - -static void stbi__rewind(stbi__context *s) -{ - // conceptually rewind SHOULD rewind to the beginning of the stream, - // but we just rewind to the beginning of the initial buffer, because - // we only use it after doing 'test', which only ever looks at at most 92 bytes - s->img_buffer = s->img_buffer_original; - s->img_buffer_end = s->img_buffer_original_end; -} - -enum -{ - STBI_ORDER_RGB, - STBI_ORDER_BGR -}; - -typedef struct -{ - int bits_per_channel; - int num_channels; - int channel_order; -} stbi__result_info; - -#ifndef STBI_NO_JPEG -static int stbi__jpeg_test(stbi__context *s); -static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PNG -static int stbi__png_test(stbi__context *s); -static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp); -static int stbi__png_is16(stbi__context *s); -#endif - -#ifndef STBI_NO_BMP -static int stbi__bmp_test(stbi__context *s); -static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_TGA -static int stbi__tga_test(stbi__context *s); -static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context *s); -static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc); -static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp); -static int stbi__psd_is16(stbi__context *s); -#endif - -#ifndef STBI_NO_HDR -static int stbi__hdr_test(stbi__context *s); -static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PIC -static int stbi__pic_test(stbi__context *s); -static void *stbi__pic_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_GIF -static int stbi__gif_test(stbi__context *s); -static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp); -static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp); -#endif - -#ifndef STBI_NO_PNM -static int stbi__pnm_test(stbi__context *s); -static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri); -static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp); -static int stbi__pnm_is16(stbi__context *s); -#endif - -static -#ifdef STBI_THREAD_LOCAL -STBI_THREAD_LOCAL -#endif -const char *stbi__g_failure_reason; - -STBIDEF const char *stbi_failure_reason(void) -{ - return stbi__g_failure_reason; -} - -#ifndef STBI_NO_FAILURE_STRINGS -static int stbi__err(const char *str) -{ - stbi__g_failure_reason = str; - return 0; -} -#endif - -static void *stbi__malloc(size_t size) -{ - return STBI_MALLOC(size); -} - -// stb_image uses ints pervasively, including for offset calculations. -// therefore the largest decoded image size we can support with the -// current code, even on 64-bit targets, is INT_MAX. this is not a -// significant limitation for the intended use case. -// -// we do, however, need to make sure our size calculations don't -// overflow. hence a few helper functions for size calculations that -// multiply integers together, making sure that they're non-negative -// and no overflow occurs. - -// return 1 if the sum is valid, 0 on overflow. -// negative terms are considered invalid. -static int stbi__addsizes_valid(int a, int b) -{ - if (b < 0) return 0; - // now 0 <= b <= INT_MAX, hence also - // 0 <= INT_MAX - b <= INTMAX. - // And "a + b <= INT_MAX" (which might overflow) is the - // same as a <= INT_MAX - b (no overflow) - return a <= INT_MAX - b; -} - -// returns 1 if the product is valid, 0 on overflow. -// negative factors are considered invalid. -static int stbi__mul2sizes_valid(int a, int b) -{ - if (a < 0 || b < 0) return 0; - if (b == 0) return 1; // mul-by-0 is always safe - // portable way to check for no overflows in a*b - return a <= INT_MAX/b; -} - -#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) -// returns 1 if "a*b + add" has no negative terms/factors and doesn't overflow -static int stbi__mad2sizes_valid(int a, int b, int add) -{ - return stbi__mul2sizes_valid(a, b) && stbi__addsizes_valid(a*b, add); -} -#endif - -// returns 1 if "a*b*c + add" has no negative terms/factors and doesn't overflow -static int stbi__mad3sizes_valid(int a, int b, int c, int add) -{ - return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && - stbi__addsizes_valid(a*b*c, add); -} - -// returns 1 if "a*b*c*d + add" has no negative terms/factors and doesn't overflow -#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) -static int stbi__mad4sizes_valid(int a, int b, int c, int d, int add) -{ - return stbi__mul2sizes_valid(a, b) && stbi__mul2sizes_valid(a*b, c) && - stbi__mul2sizes_valid(a*b*c, d) && stbi__addsizes_valid(a*b*c*d, add); -} -#endif - -#if !defined(STBI_NO_JPEG) || !defined(STBI_NO_PNG) || !defined(STBI_NO_TGA) || !defined(STBI_NO_HDR) -// mallocs with size overflow checking -static void *stbi__malloc_mad2(int a, int b, int add) -{ - if (!stbi__mad2sizes_valid(a, b, add)) return NULL; - return stbi__malloc(a*b + add); -} -#endif - -static void *stbi__malloc_mad3(int a, int b, int c, int add) -{ - if (!stbi__mad3sizes_valid(a, b, c, add)) return NULL; - return stbi__malloc(a*b*c + add); -} - -#if !defined(STBI_NO_LINEAR) || !defined(STBI_NO_HDR) || !defined(STBI_NO_PNM) -static void *stbi__malloc_mad4(int a, int b, int c, int d, int add) -{ - if (!stbi__mad4sizes_valid(a, b, c, d, add)) return NULL; - return stbi__malloc(a*b*c*d + add); -} -#endif - -// returns 1 if the sum of two signed ints is valid (between -2^31 and 2^31-1 inclusive), 0 on overflow. -static int stbi__addints_valid(int a, int b) -{ - if ((a >= 0) != (b >= 0)) return 1; // a and b have different signs, so no overflow - if (a < 0 && b < 0) return a >= INT_MIN - b; // same as a + b >= INT_MIN; INT_MIN - b cannot overflow since b < 0. - return a <= INT_MAX - b; -} - -// returns 1 if the product of two ints fits in a signed short, 0 on overflow. -static int stbi__mul2shorts_valid(int a, int b) -{ - if (b == 0 || b == -1) return 1; // multiplication by 0 is always 0; check for -1 so SHRT_MIN/b doesn't overflow - if ((a >= 0) == (b >= 0)) return a <= SHRT_MAX/b; // product is positive, so similar to mul2sizes_valid - if (b < 0) return a <= SHRT_MIN / b; // same as a * b >= SHRT_MIN - return a >= SHRT_MIN / b; -} - -// stbi__err - error -// stbi__errpf - error returning pointer to float -// stbi__errpuc - error returning pointer to unsigned char - -#ifdef STBI_NO_FAILURE_STRINGS - #define stbi__err(x,y) 0 -#elif defined(STBI_FAILURE_USERMSG) - #define stbi__err(x,y) stbi__err(y) -#else - #define stbi__err(x,y) stbi__err(x) -#endif - -#define stbi__errpf(x,y) ((float *)(size_t) (stbi__err(x,y)?NULL:NULL)) -#define stbi__errpuc(x,y) ((unsigned char *)(size_t) (stbi__err(x,y)?NULL:NULL)) - -STBIDEF void stbi_image_free(void *retval_from_stbi_load) -{ - STBI_FREE(retval_from_stbi_load); -} - -#ifndef STBI_NO_LINEAR -static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp); -#endif - -#ifndef STBI_NO_HDR -static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp); -#endif - -static int stbi__vertically_flip_on_load_global = 0; - -STBIDEF void stbi_set_flip_vertically_on_load(int flag_true_if_should_flip) -{ - stbi__vertically_flip_on_load_global = flag_true_if_should_flip; -} - -#ifndef STBI_THREAD_LOCAL -#define stbi__vertically_flip_on_load stbi__vertically_flip_on_load_global -#else -static STBI_THREAD_LOCAL int stbi__vertically_flip_on_load_local, stbi__vertically_flip_on_load_set; - -STBIDEF void stbi_set_flip_vertically_on_load_thread(int flag_true_if_should_flip) -{ - stbi__vertically_flip_on_load_local = flag_true_if_should_flip; - stbi__vertically_flip_on_load_set = 1; -} - -#define stbi__vertically_flip_on_load (stbi__vertically_flip_on_load_set \ - ? stbi__vertically_flip_on_load_local \ - : stbi__vertically_flip_on_load_global) -#endif // STBI_THREAD_LOCAL - -static void *stbi__load_main(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) -{ - memset(ri, 0, sizeof(*ri)); // make sure it's initialized if we add new fields - ri->bits_per_channel = 8; // default is 8 so most paths don't have to be changed - ri->channel_order = STBI_ORDER_RGB; // all current input & output are this, but this is here so we can add BGR order - ri->num_channels = 0; - - // test the formats with a very explicit header first (at least a FOURCC - // or distinctive magic number first) - #ifndef STBI_NO_PNG - if (stbi__png_test(s)) return stbi__png_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_BMP - if (stbi__bmp_test(s)) return stbi__bmp_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_GIF - if (stbi__gif_test(s)) return stbi__gif_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_PSD - if (stbi__psd_test(s)) return stbi__psd_load(s,x,y,comp,req_comp, ri, bpc); - #else - STBI_NOTUSED(bpc); - #endif - #ifndef STBI_NO_PIC - if (stbi__pic_test(s)) return stbi__pic_load(s,x,y,comp,req_comp, ri); - #endif - - // then the formats that can end up attempting to load with just 1 or 2 - // bytes matching expectations; these are prone to false positives, so - // try them later - #ifndef STBI_NO_JPEG - if (stbi__jpeg_test(s)) return stbi__jpeg_load(s,x,y,comp,req_comp, ri); - #endif - #ifndef STBI_NO_PNM - if (stbi__pnm_test(s)) return stbi__pnm_load(s,x,y,comp,req_comp, ri); - #endif - - #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - float *hdr = stbi__hdr_load(s, x,y,comp,req_comp, ri); - return stbi__hdr_to_ldr(hdr, *x, *y, req_comp ? req_comp : *comp); - } - #endif - - #ifndef STBI_NO_TGA - // test tga last because it's a crappy test! - if (stbi__tga_test(s)) - return stbi__tga_load(s,x,y,comp,req_comp, ri); - #endif - - return stbi__errpuc("unknown image type", "Image not of any known type, or corrupt"); -} - -static stbi_uc *stbi__convert_16_to_8(stbi__uint16 *orig, int w, int h, int channels) -{ - int i; - int img_len = w * h * channels; - stbi_uc *reduced; - - reduced = (stbi_uc *) stbi__malloc(img_len); - if (reduced == NULL) return stbi__errpuc("outofmem", "Out of memory"); - - for (i = 0; i < img_len; ++i) - reduced[i] = (stbi_uc)((orig[i] >> 8) & 0xFF); // top half of each byte is sufficient approx of 16->8 bit scaling - - STBI_FREE(orig); - return reduced; -} - -static stbi__uint16 *stbi__convert_8_to_16(stbi_uc *orig, int w, int h, int channels) -{ - int i; - int img_len = w * h * channels; - stbi__uint16 *enlarged; - - enlarged = (stbi__uint16 *) stbi__malloc(img_len*2); - if (enlarged == NULL) return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); - - for (i = 0; i < img_len; ++i) - enlarged[i] = (stbi__uint16)((orig[i] << 8) + orig[i]); // replicate to high and low byte, maps 0->0, 255->0xffff - - STBI_FREE(orig); - return enlarged; -} - -static void stbi__vertical_flip(void *image, int w, int h, int bytes_per_pixel) -{ - int row; - size_t bytes_per_row = (size_t)w * bytes_per_pixel; - stbi_uc temp[2048]; - stbi_uc *bytes = (stbi_uc *)image; - - for (row = 0; row < (h>>1); row++) { - stbi_uc *row0 = bytes + row*bytes_per_row; - stbi_uc *row1 = bytes + (h - row - 1)*bytes_per_row; - // swap row0 with row1 - size_t bytes_left = bytes_per_row; - while (bytes_left) { - size_t bytes_copy = (bytes_left < sizeof(temp)) ? bytes_left : sizeof(temp); - memcpy(temp, row0, bytes_copy); - memcpy(row0, row1, bytes_copy); - memcpy(row1, temp, bytes_copy); - row0 += bytes_copy; - row1 += bytes_copy; - bytes_left -= bytes_copy; - } - } -} - -#ifndef STBI_NO_GIF -static void stbi__vertical_flip_slices(void *image, int w, int h, int z, int bytes_per_pixel) -{ - int slice; - int slice_size = w * h * bytes_per_pixel; - - stbi_uc *bytes = (stbi_uc *)image; - for (slice = 0; slice < z; ++slice) { - stbi__vertical_flip(bytes, w, h, bytes_per_pixel); - bytes += slice_size; - } -} -#endif - -static unsigned char *stbi__load_and_postprocess_8bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi__result_info ri; - void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 8); - - if (result == NULL) - return NULL; - - // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. - STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); - - if (ri.bits_per_channel != 8) { - result = stbi__convert_16_to_8((stbi__uint16 *) result, *x, *y, req_comp == 0 ? *comp : req_comp); - ri.bits_per_channel = 8; - } - - // @TODO: move stbi__convert_format to here - - if (stbi__vertically_flip_on_load) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi_uc)); - } - - return (unsigned char *) result; -} - -static stbi__uint16 *stbi__load_and_postprocess_16bit(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - stbi__result_info ri; - void *result = stbi__load_main(s, x, y, comp, req_comp, &ri, 16); - - if (result == NULL) - return NULL; - - // it is the responsibility of the loaders to make sure we get either 8 or 16 bit. - STBI_ASSERT(ri.bits_per_channel == 8 || ri.bits_per_channel == 16); - - if (ri.bits_per_channel != 16) { - result = stbi__convert_8_to_16((stbi_uc *) result, *x, *y, req_comp == 0 ? *comp : req_comp); - ri.bits_per_channel = 16; - } - - // @TODO: move stbi__convert_format16 to here - // @TODO: special case RGB-to-Y (and RGBA-to-YA) for 8-bit-to-16-bit case to keep more precision - - if (stbi__vertically_flip_on_load) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(stbi__uint16)); - } - - return (stbi__uint16 *) result; -} - -#if !defined(STBI_NO_HDR) && !defined(STBI_NO_LINEAR) -static void stbi__float_postprocess(float *result, int *x, int *y, int *comp, int req_comp) -{ - if (stbi__vertically_flip_on_load && result != NULL) { - int channels = req_comp ? req_comp : *comp; - stbi__vertical_flip(result, *x, *y, channels * sizeof(float)); - } -} -#endif - -#ifndef STBI_NO_STDIO - -#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) -STBI_EXTERN __declspec(dllimport) int __stdcall MultiByteToWideChar(unsigned int cp, unsigned long flags, const char *str, int cbmb, wchar_t *widestr, int cchwide); -STBI_EXTERN __declspec(dllimport) int __stdcall WideCharToMultiByte(unsigned int cp, unsigned long flags, const wchar_t *widestr, int cchwide, char *str, int cbmb, const char *defchar, int *used_default); -#endif - -#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) -STBIDEF int stbi_convert_wchar_to_utf8(char *buffer, size_t bufferlen, const wchar_t* input) -{ - return WideCharToMultiByte(65001 /* UTF8 */, 0, input, -1, buffer, (int) bufferlen, NULL, NULL); -} -#endif - -static FILE *stbi__fopen(char const *filename, char const *mode) -{ - FILE *f; -#if defined(_WIN32) && defined(STBI_WINDOWS_UTF8) - wchar_t wMode[64]; - wchar_t wFilename[1024]; - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, filename, -1, wFilename, sizeof(wFilename)/sizeof(*wFilename))) - return 0; - - if (0 == MultiByteToWideChar(65001 /* UTF8 */, 0, mode, -1, wMode, sizeof(wMode)/sizeof(*wMode))) - return 0; - -#if defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != _wfopen_s(&f, wFilename, wMode)) - f = 0; -#else - f = _wfopen(wFilename, wMode); -#endif - -#elif defined(_MSC_VER) && _MSC_VER >= 1400 - if (0 != fopen_s(&f, filename, mode)) - f=0; -#else - f = fopen(filename, mode); -#endif - return f; -} - - -STBIDEF stbi_uc *stbi_load(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - unsigned char *result; - if (!f) return stbi__errpuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -STBIDEF stbi_uc *stbi_load_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *result; - stbi__context s; - stbi__start_file(&s,f); - result = stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); - if (result) { - // need to 'unget' all the characters in the IO buffer - fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); - } - return result; -} - -STBIDEF stbi__uint16 *stbi_load_from_file_16(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi__uint16 *result; - stbi__context s; - stbi__start_file(&s,f); - result = stbi__load_and_postprocess_16bit(&s,x,y,comp,req_comp); - if (result) { - // need to 'unget' all the characters in the IO buffer - fseek(f, - (int) (s.img_buffer_end - s.img_buffer), SEEK_CUR); - } - return result; -} - -STBIDEF stbi_us *stbi_load_16(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - stbi__uint16 *result; - if (!f) return (stbi_us *) stbi__errpuc("can't fopen", "Unable to open file"); - result = stbi_load_from_file_16(f,x,y,comp,req_comp); - fclose(f); - return result; -} - - -#endif //!STBI_NO_STDIO - -STBIDEF stbi_us *stbi_load_16_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *channels_in_file, int desired_channels) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); -} - -STBIDEF stbi_us *stbi_load_16_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *channels_in_file, int desired_channels) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *)clbk, user); - return stbi__load_and_postprocess_16bit(&s,x,y,channels_in_file,desired_channels); -} - -STBIDEF stbi_uc *stbi_load_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); -} - -STBIDEF stbi_uc *stbi_load_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__load_and_postprocess_8bit(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_GIF -STBIDEF stbi_uc *stbi_load_gif_from_memory(stbi_uc const *buffer, int len, int **delays, int *x, int *y, int *z, int *comp, int req_comp) -{ - unsigned char *result; - stbi__context s; - stbi__start_mem(&s,buffer,len); - - result = (unsigned char*) stbi__load_gif_main(&s, delays, x, y, z, comp, req_comp); - if (stbi__vertically_flip_on_load) { - stbi__vertical_flip_slices( result, *x, *y, *z, *comp ); - } - - return result; -} -#endif - -#ifndef STBI_NO_LINEAR -static float *stbi__loadf_main(stbi__context *s, int *x, int *y, int *comp, int req_comp) -{ - unsigned char *data; - #ifndef STBI_NO_HDR - if (stbi__hdr_test(s)) { - stbi__result_info ri; - float *hdr_data = stbi__hdr_load(s,x,y,comp,req_comp, &ri); - if (hdr_data) - stbi__float_postprocess(hdr_data,x,y,comp,req_comp); - return hdr_data; - } - #endif - data = stbi__load_and_postprocess_8bit(s, x, y, comp, req_comp); - if (data) - return stbi__ldr_to_hdr(data, *x, *y, req_comp ? req_comp : *comp); - return stbi__errpf("unknown image type", "Image not of any known type, or corrupt"); -} - -STBIDEF float *stbi_loadf_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} - -STBIDEF float *stbi_loadf_from_callbacks(stbi_io_callbacks const *clbk, void *user, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} - -#ifndef STBI_NO_STDIO -STBIDEF float *stbi_loadf(char const *filename, int *x, int *y, int *comp, int req_comp) -{ - float *result; - FILE *f = stbi__fopen(filename, "rb"); - if (!f) return stbi__errpf("can't fopen", "Unable to open file"); - result = stbi_loadf_from_file(f,x,y,comp,req_comp); - fclose(f); - return result; -} - -STBIDEF float *stbi_loadf_from_file(FILE *f, int *x, int *y, int *comp, int req_comp) -{ - stbi__context s; - stbi__start_file(&s,f); - return stbi__loadf_main(&s,x,y,comp,req_comp); -} -#endif // !STBI_NO_STDIO - -#endif // !STBI_NO_LINEAR - -// these is-hdr-or-not is defined independent of whether STBI_NO_LINEAR is -// defined, for API simplicity; if STBI_NO_LINEAR is defined, it always -// reports false! - -STBIDEF int stbi_is_hdr_from_memory(stbi_uc const *buffer, int len) -{ - #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__hdr_test(&s); - #else - STBI_NOTUSED(buffer); - STBI_NOTUSED(len); - return 0; - #endif -} - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_is_hdr (char const *filename) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result=0; - if (f) { - result = stbi_is_hdr_from_file(f); - fclose(f); - } - return result; -} - -STBIDEF int stbi_is_hdr_from_file(FILE *f) -{ - #ifndef STBI_NO_HDR - long pos = ftell(f); - int res; - stbi__context s; - stbi__start_file(&s,f); - res = stbi__hdr_test(&s); - fseek(f, pos, SEEK_SET); - return res; - #else - STBI_NOTUSED(f); - return 0; - #endif -} -#endif // !STBI_NO_STDIO - -STBIDEF int stbi_is_hdr_from_callbacks(stbi_io_callbacks const *clbk, void *user) -{ - #ifndef STBI_NO_HDR - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) clbk, user); - return stbi__hdr_test(&s); - #else - STBI_NOTUSED(clbk); - STBI_NOTUSED(user); - return 0; - #endif -} - -#ifndef STBI_NO_LINEAR -static float stbi__l2h_gamma=2.2f, stbi__l2h_scale=1.0f; - -STBIDEF void stbi_ldr_to_hdr_gamma(float gamma) { stbi__l2h_gamma = gamma; } -STBIDEF void stbi_ldr_to_hdr_scale(float scale) { stbi__l2h_scale = scale; } -#endif - -static float stbi__h2l_gamma_i=1.0f/2.2f, stbi__h2l_scale_i=1.0f; - -STBIDEF void stbi_hdr_to_ldr_gamma(float gamma) { stbi__h2l_gamma_i = 1/gamma; } -STBIDEF void stbi_hdr_to_ldr_scale(float scale) { stbi__h2l_scale_i = 1/scale; } - - -////////////////////////////////////////////////////////////////////////////// -// -// Common code used by all image loaders -// - -enum -{ - STBI__SCAN_load=0, - STBI__SCAN_type, - STBI__SCAN_header -}; - -static void stbi__refill_buffer(stbi__context *s) -{ - int n = (s->io.read)(s->io_user_data,(char*)s->buffer_start,s->buflen); - s->callback_already_read += (int) (s->img_buffer - s->img_buffer_original); - if (n == 0) { - // at end of file, treat same as if from memory, but need to handle case - // where s->img_buffer isn't pointing to safe memory, e.g. 0-byte file - s->read_from_callbacks = 0; - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start+1; - *s->img_buffer = 0; - } else { - s->img_buffer = s->buffer_start; - s->img_buffer_end = s->buffer_start + n; - } -} - -stbi_inline static stbi_uc stbi__get8(stbi__context *s) -{ - if (s->img_buffer < s->img_buffer_end) - return *s->img_buffer++; - if (s->read_from_callbacks) { - stbi__refill_buffer(s); - return *s->img_buffer++; - } - return 0; -} - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_HDR) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) -// nothing -#else -stbi_inline static int stbi__at_eof(stbi__context *s) -{ - if (s->io.read) { - if (!(s->io.eof)(s->io_user_data)) return 0; - // if feof() is true, check if buffer = end - // special case: we've only got the special 0 character at the end - if (s->read_from_callbacks == 0) return 1; - } - - return s->img_buffer >= s->img_buffer_end; -} -#endif - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) -// nothing -#else -static void stbi__skip(stbi__context *s, int n) -{ - if (n == 0) return; // already there! - if (n < 0) { - s->img_buffer = s->img_buffer_end; - return; - } - if (s->io.read) { - int blen = (int) (s->img_buffer_end - s->img_buffer); - if (blen < n) { - s->img_buffer = s->img_buffer_end; - (s->io.skip)(s->io_user_data, n - blen); - return; - } - } - s->img_buffer += n; -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_TGA) && defined(STBI_NO_HDR) && defined(STBI_NO_PNM) -// nothing -#else -static int stbi__getn(stbi__context *s, stbi_uc *buffer, int n) -{ - if (s->io.read) { - int blen = (int) (s->img_buffer_end - s->img_buffer); - if (blen < n) { - int res, count; - - memcpy(buffer, s->img_buffer, blen); - - count = (s->io.read)(s->io_user_data, (char*) buffer + blen, n - blen); - res = (count == (n-blen)); - s->img_buffer = s->img_buffer_end; - return res; - } - } - - if (s->img_buffer+n <= s->img_buffer_end) { - memcpy(buffer, s->img_buffer, n); - s->img_buffer += n; - return 1; - } else - return 0; -} -#endif - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) -// nothing -#else -static int stbi__get16be(stbi__context *s) -{ - int z = stbi__get8(s); - return (z << 8) + stbi__get8(s); -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) && defined(STBI_NO_PIC) -// nothing -#else -static stbi__uint32 stbi__get32be(stbi__context *s) -{ - stbi__uint32 z = stbi__get16be(s); - return (z << 16) + stbi__get16be(s); -} -#endif - -#if defined(STBI_NO_BMP) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) -// nothing -#else -static int stbi__get16le(stbi__context *s) -{ - int z = stbi__get8(s); - return z + (stbi__get8(s) << 8); -} -#endif - -#ifndef STBI_NO_BMP -static stbi__uint32 stbi__get32le(stbi__context *s) -{ - stbi__uint32 z = stbi__get16le(s); - z += (stbi__uint32)stbi__get16le(s) << 16; - return z; -} -#endif - -#define STBI__BYTECAST(x) ((stbi_uc) ((x) & 255)) // truncate int to byte without warnings - -#if defined(STBI_NO_JPEG) && defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) -// nothing -#else -////////////////////////////////////////////////////////////////////////////// -// -// generic converter from built-in img_n to req_comp -// individual types do this automatically as much as possible (e.g. jpeg -// does all cases internally since it needs to colorspace convert anyway, -// and it never has alpha, so very few cases ). png can automatically -// interleave an alpha=255 channel, but falls back to this for other cases -// -// assume data buffer is malloced, so malloc a new one and free that one -// only failure mode is malloc failing - -static stbi_uc stbi__compute_y(int r, int g, int b) -{ - return (stbi_uc) (((r*77) + (g*150) + (29*b)) >> 8); -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_BMP) && defined(STBI_NO_PSD) && defined(STBI_NO_TGA) && defined(STBI_NO_GIF) && defined(STBI_NO_PIC) && defined(STBI_NO_PNM) -// nothing -#else -static unsigned char *stbi__convert_format(unsigned char *data, int img_n, int req_comp, unsigned int x, unsigned int y) -{ - int i,j; - unsigned char *good; - - if (req_comp == img_n) return data; - STBI_ASSERT(req_comp >= 1 && req_comp <= 4); - - good = (unsigned char *) stbi__malloc_mad3(req_comp, x, y, 0); - if (good == NULL) { - STBI_FREE(data); - return stbi__errpuc("outofmem", "Out of memory"); - } - - for (j=0; j < (int) y; ++j) { - unsigned char *src = data + j * x * img_n ; - unsigned char *dest = good + j * x * req_comp; - - #define STBI__COMBO(a,b) ((a)*8+(b)) - #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (STBI__COMBO(img_n, req_comp)) { - STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=255; } break; - STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=255; } break; - STBI__CASE(2,1) { dest[0]=src[0]; } break; - STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; - STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=255; } break; - STBI__CASE(3,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; - STBI__CASE(3,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = 255; } break; - STBI__CASE(4,1) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); } break; - STBI__CASE(4,2) { dest[0]=stbi__compute_y(src[0],src[1],src[2]); dest[1] = src[3]; } break; - STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; - default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return stbi__errpuc("unsupported", "Unsupported format conversion"); - } - #undef STBI__CASE - } - - STBI_FREE(data); - return good; -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) -// nothing -#else -static stbi__uint16 stbi__compute_y_16(int r, int g, int b) -{ - return (stbi__uint16) (((r*77) + (g*150) + (29*b)) >> 8); -} -#endif - -#if defined(STBI_NO_PNG) && defined(STBI_NO_PSD) -// nothing -#else -static stbi__uint16 *stbi__convert_format16(stbi__uint16 *data, int img_n, int req_comp, unsigned int x, unsigned int y) -{ - int i,j; - stbi__uint16 *good; - - if (req_comp == img_n) return data; - STBI_ASSERT(req_comp >= 1 && req_comp <= 4); - - good = (stbi__uint16 *) stbi__malloc(req_comp * x * y * 2); - if (good == NULL) { - STBI_FREE(data); - return (stbi__uint16 *) stbi__errpuc("outofmem", "Out of memory"); - } - - for (j=0; j < (int) y; ++j) { - stbi__uint16 *src = data + j * x * img_n ; - stbi__uint16 *dest = good + j * x * req_comp; - - #define STBI__COMBO(a,b) ((a)*8+(b)) - #define STBI__CASE(a,b) case STBI__COMBO(a,b): for(i=x-1; i >= 0; --i, src += a, dest += b) - // convert source image with img_n components to one with req_comp components; - // avoid switch per pixel, so use switch per scanline and massive macros - switch (STBI__COMBO(img_n, req_comp)) { - STBI__CASE(1,2) { dest[0]=src[0]; dest[1]=0xffff; } break; - STBI__CASE(1,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(1,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=0xffff; } break; - STBI__CASE(2,1) { dest[0]=src[0]; } break; - STBI__CASE(2,3) { dest[0]=dest[1]=dest[2]=src[0]; } break; - STBI__CASE(2,4) { dest[0]=dest[1]=dest[2]=src[0]; dest[3]=src[1]; } break; - STBI__CASE(3,4) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2];dest[3]=0xffff; } break; - STBI__CASE(3,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; - STBI__CASE(3,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = 0xffff; } break; - STBI__CASE(4,1) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); } break; - STBI__CASE(4,2) { dest[0]=stbi__compute_y_16(src[0],src[1],src[2]); dest[1] = src[3]; } break; - STBI__CASE(4,3) { dest[0]=src[0];dest[1]=src[1];dest[2]=src[2]; } break; - default: STBI_ASSERT(0); STBI_FREE(data); STBI_FREE(good); return (stbi__uint16*) stbi__errpuc("unsupported", "Unsupported format conversion"); - } - #undef STBI__CASE - } - - STBI_FREE(data); - return good; -} -#endif - -#ifndef STBI_NO_LINEAR -static float *stbi__ldr_to_hdr(stbi_uc *data, int x, int y, int comp) -{ - int i,k,n; - float *output; - if (!data) return NULL; - output = (float *) stbi__malloc_mad4(x, y, comp, sizeof(float), 0); - if (output == NULL) { STBI_FREE(data); return stbi__errpf("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - output[i*comp + k] = (float) (pow(data[i*comp+k]/255.0f, stbi__l2h_gamma) * stbi__l2h_scale); - } - } - if (n < comp) { - for (i=0; i < x*y; ++i) { - output[i*comp + n] = data[i*comp + n]/255.0f; - } - } - STBI_FREE(data); - return output; -} -#endif - -#ifndef STBI_NO_HDR -#define stbi__float2int(x) ((int) (x)) -static stbi_uc *stbi__hdr_to_ldr(float *data, int x, int y, int comp) -{ - int i,k,n; - stbi_uc *output; - if (!data) return NULL; - output = (stbi_uc *) stbi__malloc_mad3(x, y, comp, 0); - if (output == NULL) { STBI_FREE(data); return stbi__errpuc("outofmem", "Out of memory"); } - // compute number of non-alpha components - if (comp & 1) n = comp; else n = comp-1; - for (i=0; i < x*y; ++i) { - for (k=0; k < n; ++k) { - float z = (float) pow(data[i*comp+k]*stbi__h2l_scale_i, stbi__h2l_gamma_i) * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (stbi_uc) stbi__float2int(z); - } - if (k < comp) { - float z = data[i*comp+k] * 255 + 0.5f; - if (z < 0) z = 0; - if (z > 255) z = 255; - output[i*comp + k] = (stbi_uc) stbi__float2int(z); - } - } - STBI_FREE(data); - return output; -} -#endif - -////////////////////////////////////////////////////////////////////////////// -// -// "baseline" JPEG/JFIF decoder -// -// simple implementation -// - doesn't support delayed output of y-dimension -// - simple interface (only one output format: 8-bit interleaved RGB) -// - doesn't try to recover corrupt jpegs -// - doesn't allow partial loading, loading multiple at once -// - still fast on x86 (copying globals into locals doesn't help x86) -// - allocates lots of intermediate memory (full size of all components) -// - non-interleaved case requires this anyway -// - allows good upsampling (see next) -// high-quality -// - upsampled channels are bilinearly interpolated, even across blocks -// - quality integer IDCT derived from IJG's 'slow' -// performance -// - fast huffman; reasonable integer IDCT -// - some SIMD kernels for common paths on targets with SSE2/NEON -// - uses a lot of intermediate memory, could cache poorly - -#ifndef STBI_NO_JPEG - -// huffman decoding acceleration -#define FAST_BITS 9 // larger handles more cases; smaller stomps less cache - -typedef struct -{ - stbi_uc fast[1 << FAST_BITS]; - // weirdly, repacking this into AoS is a 10% speed loss, instead of a win - stbi__uint16 code[256]; - stbi_uc values[256]; - stbi_uc size[257]; - unsigned int maxcode[18]; - int delta[17]; // old 'firstsymbol' - old 'firstcode' -} stbi__huffman; - -typedef struct -{ - stbi__context *s; - stbi__huffman huff_dc[4]; - stbi__huffman huff_ac[4]; - stbi__uint16 dequant[4][64]; - stbi__int16 fast_ac[4][1 << FAST_BITS]; - -// sizes for components, interleaved MCUs - int img_h_max, img_v_max; - int img_mcu_x, img_mcu_y; - int img_mcu_w, img_mcu_h; - -// definition of jpeg image component - struct - { - int id; - int h,v; - int tq; - int hd,ha; - int dc_pred; - - int x,y,w2,h2; - stbi_uc *data; - void *raw_data, *raw_coeff; - stbi_uc *linebuf; - short *coeff; // progressive only - int coeff_w, coeff_h; // number of 8x8 coefficient blocks - } img_comp[4]; - - stbi__uint32 code_buffer; // jpeg entropy-coded buffer - int code_bits; // number of valid bits - unsigned char marker; // marker seen while filling entropy buffer - int nomore; // flag if we saw a marker so must stop - - int progressive; - int spec_start; - int spec_end; - int succ_high; - int succ_low; - int eob_run; - int jfif; - int app14_color_transform; // Adobe APP14 tag - int rgb; - - int scan_n, order[4]; - int restart_interval, todo; - -// kernels - void (*idct_block_kernel)(stbi_uc *out, int out_stride, short data[64]); - void (*YCbCr_to_RGB_kernel)(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step); - stbi_uc *(*resample_row_hv_2_kernel)(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs); -} stbi__jpeg; - -static int stbi__build_huffman(stbi__huffman *h, int *count) -{ - int i,j,k=0; - unsigned int code; - // build size list for each symbol (from JPEG spec) - for (i=0; i < 16; ++i) { - for (j=0; j < count[i]; ++j) { - h->size[k++] = (stbi_uc) (i+1); - if(k >= 257) return stbi__err("bad size list","Corrupt JPEG"); - } - } - h->size[k] = 0; - - // compute actual symbols (from jpeg spec) - code = 0; - k = 0; - for(j=1; j <= 16; ++j) { - // compute delta to add to code to compute symbol id - h->delta[j] = k - code; - if (h->size[k] == j) { - while (h->size[k] == j) - h->code[k++] = (stbi__uint16) (code++); - if (code-1 >= (1u << j)) return stbi__err("bad code lengths","Corrupt JPEG"); - } - // compute largest code + 1 for this size, preshifted as needed later - h->maxcode[j] = code << (16-j); - code <<= 1; - } - h->maxcode[j] = 0xffffffff; - - // build non-spec acceleration table; 255 is flag for not-accelerated - memset(h->fast, 255, 1 << FAST_BITS); - for (i=0; i < k; ++i) { - int s = h->size[i]; - if (s <= FAST_BITS) { - int c = h->code[i] << (FAST_BITS-s); - int m = 1 << (FAST_BITS-s); - for (j=0; j < m; ++j) { - h->fast[c+j] = (stbi_uc) i; - } - } - } - return 1; -} - -// build a table that decodes both magnitude and value of small ACs in -// one go. -static void stbi__build_fast_ac(stbi__int16 *fast_ac, stbi__huffman *h) -{ - int i; - for (i=0; i < (1 << FAST_BITS); ++i) { - stbi_uc fast = h->fast[i]; - fast_ac[i] = 0; - if (fast < 255) { - int rs = h->values[fast]; - int run = (rs >> 4) & 15; - int magbits = rs & 15; - int len = h->size[fast]; - - if (magbits && len + magbits <= FAST_BITS) { - // magnitude code followed by receive_extend code - int k = ((i << len) & ((1 << FAST_BITS) - 1)) >> (FAST_BITS - magbits); - int m = 1 << (magbits - 1); - if (k < m) k += (~0U << magbits) + 1; - // if the result is small enough, we can fit it in fast_ac table - if (k >= -128 && k <= 127) - fast_ac[i] = (stbi__int16) ((k * 256) + (run * 16) + (len + magbits)); - } - } - } -} - -static void stbi__grow_buffer_unsafe(stbi__jpeg *j) -{ - do { - unsigned int b = j->nomore ? 0 : stbi__get8(j->s); - if (b == 0xff) { - int c = stbi__get8(j->s); - while (c == 0xff) c = stbi__get8(j->s); // consume fill bytes - if (c != 0) { - j->marker = (unsigned char) c; - j->nomore = 1; - return; - } - } - j->code_buffer |= b << (24 - j->code_bits); - j->code_bits += 8; - } while (j->code_bits <= 24); -} - -// (1 << n) - 1 -static const stbi__uint32 stbi__bmask[17]={0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535}; - -// decode a jpeg huffman value from the bitstream -stbi_inline static int stbi__jpeg_huff_decode(stbi__jpeg *j, stbi__huffman *h) -{ - unsigned int temp; - int c,k; - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - - // look at the top FAST_BITS and determine what symbol ID it is, - // if the code is <= FAST_BITS - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - k = h->fast[c]; - if (k < 255) { - int s = h->size[k]; - if (s > j->code_bits) - return -1; - j->code_buffer <<= s; - j->code_bits -= s; - return h->values[k]; - } - - // naive test is to shift the code_buffer down so k bits are - // valid, then test against maxcode. To speed this up, we've - // preshifted maxcode left so that it has (16-k) 0s at the - // end; in other words, regardless of the number of bits, it - // wants to be compared against something shifted to have 16; - // that way we don't need to shift inside the loop. - temp = j->code_buffer >> 16; - for (k=FAST_BITS+1 ; ; ++k) - if (temp < h->maxcode[k]) - break; - if (k == 17) { - // error! code not found - j->code_bits -= 16; - return -1; - } - - if (k > j->code_bits) - return -1; - - // convert the huffman code to the symbol id - c = ((j->code_buffer >> (32 - k)) & stbi__bmask[k]) + h->delta[k]; - if(c < 0 || c >= 256) // symbol id out of bounds! - return -1; - STBI_ASSERT((((j->code_buffer) >> (32 - h->size[c])) & stbi__bmask[h->size[c]]) == h->code[c]); - - // convert the id to a symbol - j->code_bits -= k; - j->code_buffer <<= k; - return h->values[c]; -} - -// bias[n] = (-1<code_bits < n) stbi__grow_buffer_unsafe(j); - if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing - - sgn = j->code_buffer >> 31; // sign bit always in MSB; 0 if MSB clear (positive), 1 if MSB set (negative) - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k + (stbi__jbias[n] & (sgn - 1)); -} - -// get some unsigned bits -stbi_inline static int stbi__jpeg_get_bits(stbi__jpeg *j, int n) -{ - unsigned int k; - if (j->code_bits < n) stbi__grow_buffer_unsafe(j); - if (j->code_bits < n) return 0; // ran out of bits from stream, return 0s intead of continuing - k = stbi_lrot(j->code_buffer, n); - j->code_buffer = k & ~stbi__bmask[n]; - k &= stbi__bmask[n]; - j->code_bits -= n; - return k; -} - -stbi_inline static int stbi__jpeg_get_bit(stbi__jpeg *j) -{ - unsigned int k; - if (j->code_bits < 1) stbi__grow_buffer_unsafe(j); - if (j->code_bits < 1) return 0; // ran out of bits from stream, return 0s intead of continuing - k = j->code_buffer; - j->code_buffer <<= 1; - --j->code_bits; - return k & 0x80000000; -} - -// given a value that's at position X in the zigzag stream, -// where does it appear in the 8x8 matrix coded as row-major? -static const stbi_uc stbi__jpeg_dezigzag[64+15] = -{ - 0, 1, 8, 16, 9, 2, 3, 10, - 17, 24, 32, 25, 18, 11, 4, 5, - 12, 19, 26, 33, 40, 48, 41, 34, - 27, 20, 13, 6, 7, 14, 21, 28, - 35, 42, 49, 56, 57, 50, 43, 36, - 29, 22, 15, 23, 30, 37, 44, 51, - 58, 59, 52, 45, 38, 31, 39, 46, - 53, 60, 61, 54, 47, 55, 62, 63, - // let corrupt input sample past end - 63, 63, 63, 63, 63, 63, 63, 63, - 63, 63, 63, 63, 63, 63, 63 -}; - -// decode one 64-entry block-- -static int stbi__jpeg_decode_block(stbi__jpeg *j, short data[64], stbi__huffman *hdc, stbi__huffman *hac, stbi__int16 *fac, int b, stbi__uint16 *dequant) -{ - int diff,dc,k; - int t; - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - t = stbi__jpeg_huff_decode(j, hdc); - if (t < 0 || t > 15) return stbi__err("bad huffman code","Corrupt JPEG"); - - // 0 all the ac values now so we can do it 32-bits at a time - memset(data,0,64*sizeof(data[0])); - - diff = t ? stbi__extend_receive(j, t) : 0; - if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta","Corrupt JPEG"); - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - if (!stbi__mul2shorts_valid(dc, dequant[0])) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - data[0] = (short) (dc * dequant[0]); - - // decode AC components, see JPEG spec - k = 1; - do { - unsigned int zig; - int c,r,s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); - j->code_buffer <<= s; - j->code_bits -= s; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) ((r >> 8) * dequant[zig]); - } else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (rs != 0xf0) break; // end block - k += 16; - } else { - k += r; - // decode into unzigzag'd location - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) (stbi__extend_receive(j,s) * dequant[zig]); - } - } - } while (k < 64); - return 1; -} - -static int stbi__jpeg_decode_block_prog_dc(stbi__jpeg *j, short data[64], stbi__huffman *hdc, int b) -{ - int diff,dc; - int t; - if (j->spec_end != 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - - if (j->succ_high == 0) { - // first scan for DC coefficient, must be first - memset(data,0,64*sizeof(data[0])); // 0 all the ac values now - t = stbi__jpeg_huff_decode(j, hdc); - if (t < 0 || t > 15) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - diff = t ? stbi__extend_receive(j, t) : 0; - - if (!stbi__addints_valid(j->img_comp[b].dc_pred, diff)) return stbi__err("bad delta", "Corrupt JPEG"); - dc = j->img_comp[b].dc_pred + diff; - j->img_comp[b].dc_pred = dc; - if (!stbi__mul2shorts_valid(dc, 1 << j->succ_low)) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - data[0] = (short) (dc * (1 << j->succ_low)); - } else { - // refinement scan for DC coefficient - if (stbi__jpeg_get_bit(j)) - data[0] += (short) (1 << j->succ_low); - } - return 1; -} - -// @OPTIMIZE: store non-zigzagged during the decode passes, -// and only de-zigzag when dequantizing -static int stbi__jpeg_decode_block_prog_ac(stbi__jpeg *j, short data[64], stbi__huffman *hac, stbi__int16 *fac) -{ - int k; - if (j->spec_start == 0) return stbi__err("can't merge dc and ac", "Corrupt JPEG"); - - if (j->succ_high == 0) { - int shift = j->succ_low; - - if (j->eob_run) { - --j->eob_run; - return 1; - } - - k = j->spec_start; - do { - unsigned int zig; - int c,r,s; - if (j->code_bits < 16) stbi__grow_buffer_unsafe(j); - c = (j->code_buffer >> (32 - FAST_BITS)) & ((1 << FAST_BITS)-1); - r = fac[c]; - if (r) { // fast-AC path - k += (r >> 4) & 15; // run - s = r & 15; // combined length - if (s > j->code_bits) return stbi__err("bad huffman code", "Combined length longer than code bits available"); - j->code_buffer <<= s; - j->code_bits -= s; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) ((r >> 8) * (1 << shift)); - } else { - int rs = stbi__jpeg_huff_decode(j, hac); - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r); - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); - --j->eob_run; - break; - } - k += 16; - } else { - k += r; - zig = stbi__jpeg_dezigzag[k++]; - data[zig] = (short) (stbi__extend_receive(j,s) * (1 << shift)); - } - } - } while (k <= j->spec_end); - } else { - // refinement scan for these AC coefficients - - short bit = (short) (1 << j->succ_low); - - if (j->eob_run) { - --j->eob_run; - for (k = j->spec_start; k <= j->spec_end; ++k) { - short *p = &data[stbi__jpeg_dezigzag[k]]; - if (*p != 0) - if (stbi__jpeg_get_bit(j)) - if ((*p & bit)==0) { - if (*p > 0) - *p += bit; - else - *p -= bit; - } - } - } else { - k = j->spec_start; - do { - int r,s; - int rs = stbi__jpeg_huff_decode(j, hac); // @OPTIMIZE see if we can use the fast path here, advance-by-r is so slow, eh - if (rs < 0) return stbi__err("bad huffman code","Corrupt JPEG"); - s = rs & 15; - r = rs >> 4; - if (s == 0) { - if (r < 15) { - j->eob_run = (1 << r) - 1; - if (r) - j->eob_run += stbi__jpeg_get_bits(j, r); - r = 64; // force end of block - } else { - // r=15 s=0 should write 16 0s, so we just do - // a run of 15 0s and then write s (which is 0), - // so we don't have to do anything special here - } - } else { - if (s != 1) return stbi__err("bad huffman code", "Corrupt JPEG"); - // sign bit - if (stbi__jpeg_get_bit(j)) - s = bit; - else - s = -bit; - } - - // advance by r - while (k <= j->spec_end) { - short *p = &data[stbi__jpeg_dezigzag[k++]]; - if (*p != 0) { - if (stbi__jpeg_get_bit(j)) - if ((*p & bit)==0) { - if (*p > 0) - *p += bit; - else - *p -= bit; - } - } else { - if (r == 0) { - *p = (short) s; - break; - } - --r; - } - } - } while (k <= j->spec_end); - } - } - return 1; -} - -// take a -128..127 value and stbi__clamp it and convert to 0..255 -stbi_inline static stbi_uc stbi__clamp(int x) -{ - // trick to use a single test to catch both cases - if ((unsigned int) x > 255) { - if (x < 0) return 0; - if (x > 255) return 255; - } - return (stbi_uc) x; -} - -#define stbi__f2f(x) ((int) (((x) * 4096 + 0.5))) -#define stbi__fsh(x) ((x) * 4096) - -// derived from jidctint -- DCT_ISLOW -#define STBI__IDCT_1D(s0,s1,s2,s3,s4,s5,s6,s7) \ - int t0,t1,t2,t3,p1,p2,p3,p4,p5,x0,x1,x2,x3; \ - p2 = s2; \ - p3 = s6; \ - p1 = (p2+p3) * stbi__f2f(0.5411961f); \ - t2 = p1 + p3*stbi__f2f(-1.847759065f); \ - t3 = p1 + p2*stbi__f2f( 0.765366865f); \ - p2 = s0; \ - p3 = s4; \ - t0 = stbi__fsh(p2+p3); \ - t1 = stbi__fsh(p2-p3); \ - x0 = t0+t3; \ - x3 = t0-t3; \ - x1 = t1+t2; \ - x2 = t1-t2; \ - t0 = s7; \ - t1 = s5; \ - t2 = s3; \ - t3 = s1; \ - p3 = t0+t2; \ - p4 = t1+t3; \ - p1 = t0+t3; \ - p2 = t1+t2; \ - p5 = (p3+p4)*stbi__f2f( 1.175875602f); \ - t0 = t0*stbi__f2f( 0.298631336f); \ - t1 = t1*stbi__f2f( 2.053119869f); \ - t2 = t2*stbi__f2f( 3.072711026f); \ - t3 = t3*stbi__f2f( 1.501321110f); \ - p1 = p5 + p1*stbi__f2f(-0.899976223f); \ - p2 = p5 + p2*stbi__f2f(-2.562915447f); \ - p3 = p3*stbi__f2f(-1.961570560f); \ - p4 = p4*stbi__f2f(-0.390180644f); \ - t3 += p1+p4; \ - t2 += p2+p3; \ - t1 += p2+p4; \ - t0 += p1+p3; - -static void stbi__idct_block(stbi_uc *out, int out_stride, short data[64]) -{ - int i,val[64],*v=val; - stbi_uc *o; - short *d = data; - - // columns - for (i=0; i < 8; ++i,++d, ++v) { - // if all zeroes, shortcut -- this avoids dequantizing 0s and IDCTing - if (d[ 8]==0 && d[16]==0 && d[24]==0 && d[32]==0 - && d[40]==0 && d[48]==0 && d[56]==0) { - // no shortcut 0 seconds - // (1|2|3|4|5|6|7)==0 0 seconds - // all separate -0.047 seconds - // 1 && 2|3 && 4|5 && 6|7: -0.047 seconds - int dcterm = d[0]*4; - v[0] = v[8] = v[16] = v[24] = v[32] = v[40] = v[48] = v[56] = dcterm; - } else { - STBI__IDCT_1D(d[ 0],d[ 8],d[16],d[24],d[32],d[40],d[48],d[56]) - // constants scaled things up by 1<<12; let's bring them back - // down, but keep 2 extra bits of precision - x0 += 512; x1 += 512; x2 += 512; x3 += 512; - v[ 0] = (x0+t3) >> 10; - v[56] = (x0-t3) >> 10; - v[ 8] = (x1+t2) >> 10; - v[48] = (x1-t2) >> 10; - v[16] = (x2+t1) >> 10; - v[40] = (x2-t1) >> 10; - v[24] = (x3+t0) >> 10; - v[32] = (x3-t0) >> 10; - } - } - - for (i=0, v=val, o=out; i < 8; ++i,v+=8,o+=out_stride) { - // no fast case since the first 1D IDCT spread components out - STBI__IDCT_1D(v[0],v[1],v[2],v[3],v[4],v[5],v[6],v[7]) - // constants scaled things up by 1<<12, plus we had 1<<2 from first - // loop, plus horizontal and vertical each scale by sqrt(8) so together - // we've got an extra 1<<3, so 1<<17 total we need to remove. - // so we want to round that, which means adding 0.5 * 1<<17, - // aka 65536. Also, we'll end up with -128 to 127 that we want - // to encode as 0..255 by adding 128, so we'll add that before the shift - x0 += 65536 + (128<<17); - x1 += 65536 + (128<<17); - x2 += 65536 + (128<<17); - x3 += 65536 + (128<<17); - // tried computing the shifts into temps, or'ing the temps to see - // if any were out of range, but that was slower - o[0] = stbi__clamp((x0+t3) >> 17); - o[7] = stbi__clamp((x0-t3) >> 17); - o[1] = stbi__clamp((x1+t2) >> 17); - o[6] = stbi__clamp((x1-t2) >> 17); - o[2] = stbi__clamp((x2+t1) >> 17); - o[5] = stbi__clamp((x2-t1) >> 17); - o[3] = stbi__clamp((x3+t0) >> 17); - o[4] = stbi__clamp((x3-t0) >> 17); - } -} - -#ifdef STBI_SSE2 -// sse2 integer IDCT. not the fastest possible implementation but it -// produces bit-identical results to the generic C version so it's -// fully "transparent". -static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) -{ - // This is constructed to match our regular (generic) integer IDCT exactly. - __m128i row0, row1, row2, row3, row4, row5, row6, row7; - __m128i tmp; - - // dot product constant: even elems=x, odd elems=y - #define dct_const(x,y) _mm_setr_epi16((x),(y),(x),(y),(x),(y),(x),(y)) - - // out(0) = c0[even]*x + c0[odd]*y (c0, x, y 16-bit, out 32-bit) - // out(1) = c1[even]*x + c1[odd]*y - #define dct_rot(out0,out1, x,y,c0,c1) \ - __m128i c0##lo = _mm_unpacklo_epi16((x),(y)); \ - __m128i c0##hi = _mm_unpackhi_epi16((x),(y)); \ - __m128i out0##_l = _mm_madd_epi16(c0##lo, c0); \ - __m128i out0##_h = _mm_madd_epi16(c0##hi, c0); \ - __m128i out1##_l = _mm_madd_epi16(c0##lo, c1); \ - __m128i out1##_h = _mm_madd_epi16(c0##hi, c1) - - // out = in << 12 (in 16-bit, out 32-bit) - #define dct_widen(out, in) \ - __m128i out##_l = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), (in)), 4); \ - __m128i out##_h = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), (in)), 4) - - // wide add - #define dct_wadd(out, a, b) \ - __m128i out##_l = _mm_add_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_add_epi32(a##_h, b##_h) - - // wide sub - #define dct_wsub(out, a, b) \ - __m128i out##_l = _mm_sub_epi32(a##_l, b##_l); \ - __m128i out##_h = _mm_sub_epi32(a##_h, b##_h) - - // butterfly a/b, add bias, then shift by "s" and pack - #define dct_bfly32o(out0, out1, a,b,bias,s) \ - { \ - __m128i abiased_l = _mm_add_epi32(a##_l, bias); \ - __m128i abiased_h = _mm_add_epi32(a##_h, bias); \ - dct_wadd(sum, abiased, b); \ - dct_wsub(dif, abiased, b); \ - out0 = _mm_packs_epi32(_mm_srai_epi32(sum_l, s), _mm_srai_epi32(sum_h, s)); \ - out1 = _mm_packs_epi32(_mm_srai_epi32(dif_l, s), _mm_srai_epi32(dif_h, s)); \ - } - - // 8-bit interleave step (for transposes) - #define dct_interleave8(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi8(a, b); \ - b = _mm_unpackhi_epi8(tmp, b) - - // 16-bit interleave step (for transposes) - #define dct_interleave16(a, b) \ - tmp = a; \ - a = _mm_unpacklo_epi16(a, b); \ - b = _mm_unpackhi_epi16(tmp, b) - - #define dct_pass(bias,shift) \ - { \ - /* even part */ \ - dct_rot(t2e,t3e, row2,row6, rot0_0,rot0_1); \ - __m128i sum04 = _mm_add_epi16(row0, row4); \ - __m128i dif04 = _mm_sub_epi16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - dct_rot(y0o,y2o, row7,row3, rot2_0,rot2_1); \ - dct_rot(y1o,y3o, row5,row1, rot3_0,rot3_1); \ - __m128i sum17 = _mm_add_epi16(row1, row7); \ - __m128i sum35 = _mm_add_epi16(row3, row5); \ - dct_rot(y4o,y5o, sum17,sum35, rot1_0,rot1_1); \ - dct_wadd(x4, y0o, y4o); \ - dct_wadd(x5, y1o, y5o); \ - dct_wadd(x6, y2o, y5o); \ - dct_wadd(x7, y3o, y4o); \ - dct_bfly32o(row0,row7, x0,x7,bias,shift); \ - dct_bfly32o(row1,row6, x1,x6,bias,shift); \ - dct_bfly32o(row2,row5, x2,x5,bias,shift); \ - dct_bfly32o(row3,row4, x3,x4,bias,shift); \ - } - - __m128i rot0_0 = dct_const(stbi__f2f(0.5411961f), stbi__f2f(0.5411961f) + stbi__f2f(-1.847759065f)); - __m128i rot0_1 = dct_const(stbi__f2f(0.5411961f) + stbi__f2f( 0.765366865f), stbi__f2f(0.5411961f)); - __m128i rot1_0 = dct_const(stbi__f2f(1.175875602f) + stbi__f2f(-0.899976223f), stbi__f2f(1.175875602f)); - __m128i rot1_1 = dct_const(stbi__f2f(1.175875602f), stbi__f2f(1.175875602f) + stbi__f2f(-2.562915447f)); - __m128i rot2_0 = dct_const(stbi__f2f(-1.961570560f) + stbi__f2f( 0.298631336f), stbi__f2f(-1.961570560f)); - __m128i rot2_1 = dct_const(stbi__f2f(-1.961570560f), stbi__f2f(-1.961570560f) + stbi__f2f( 3.072711026f)); - __m128i rot3_0 = dct_const(stbi__f2f(-0.390180644f) + stbi__f2f( 2.053119869f), stbi__f2f(-0.390180644f)); - __m128i rot3_1 = dct_const(stbi__f2f(-0.390180644f), stbi__f2f(-0.390180644f) + stbi__f2f( 1.501321110f)); - - // rounding biases in column/row passes, see stbi__idct_block for explanation. - __m128i bias_0 = _mm_set1_epi32(512); - __m128i bias_1 = _mm_set1_epi32(65536 + (128<<17)); - - // load - row0 = _mm_load_si128((const __m128i *) (data + 0*8)); - row1 = _mm_load_si128((const __m128i *) (data + 1*8)); - row2 = _mm_load_si128((const __m128i *) (data + 2*8)); - row3 = _mm_load_si128((const __m128i *) (data + 3*8)); - row4 = _mm_load_si128((const __m128i *) (data + 4*8)); - row5 = _mm_load_si128((const __m128i *) (data + 5*8)); - row6 = _mm_load_si128((const __m128i *) (data + 6*8)); - row7 = _mm_load_si128((const __m128i *) (data + 7*8)); - - // column pass - dct_pass(bias_0, 10); - - { - // 16bit 8x8 transpose pass 1 - dct_interleave16(row0, row4); - dct_interleave16(row1, row5); - dct_interleave16(row2, row6); - dct_interleave16(row3, row7); - - // transpose pass 2 - dct_interleave16(row0, row2); - dct_interleave16(row1, row3); - dct_interleave16(row4, row6); - dct_interleave16(row5, row7); - - // transpose pass 3 - dct_interleave16(row0, row1); - dct_interleave16(row2, row3); - dct_interleave16(row4, row5); - dct_interleave16(row6, row7); - } - - // row pass - dct_pass(bias_1, 17); - - { - // pack - __m128i p0 = _mm_packus_epi16(row0, row1); // a0a1a2a3...a7b0b1b2b3...b7 - __m128i p1 = _mm_packus_epi16(row2, row3); - __m128i p2 = _mm_packus_epi16(row4, row5); - __m128i p3 = _mm_packus_epi16(row6, row7); - - // 8bit 8x8 transpose pass 1 - dct_interleave8(p0, p2); // a0e0a1e1... - dct_interleave8(p1, p3); // c0g0c1g1... - - // transpose pass 2 - dct_interleave8(p0, p1); // a0c0e0g0... - dct_interleave8(p2, p3); // b0d0f0h0... - - // transpose pass 3 - dct_interleave8(p0, p2); // a0b0c0d0... - dct_interleave8(p1, p3); // a4b4c4d4... - - // store - _mm_storel_epi64((__m128i *) out, p0); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p0, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p2); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p2, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p1); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p1, 0x4e)); out += out_stride; - _mm_storel_epi64((__m128i *) out, p3); out += out_stride; - _mm_storel_epi64((__m128i *) out, _mm_shuffle_epi32(p3, 0x4e)); - } - -#undef dct_const -#undef dct_rot -#undef dct_widen -#undef dct_wadd -#undef dct_wsub -#undef dct_bfly32o -#undef dct_interleave8 -#undef dct_interleave16 -#undef dct_pass -} - -#endif // STBI_SSE2 - -#ifdef STBI_NEON - -// NEON integer IDCT. should produce bit-identical -// results to the generic C version. -static void stbi__idct_simd(stbi_uc *out, int out_stride, short data[64]) -{ - int16x8_t row0, row1, row2, row3, row4, row5, row6, row7; - - int16x4_t rot0_0 = vdup_n_s16(stbi__f2f(0.5411961f)); - int16x4_t rot0_1 = vdup_n_s16(stbi__f2f(-1.847759065f)); - int16x4_t rot0_2 = vdup_n_s16(stbi__f2f( 0.765366865f)); - int16x4_t rot1_0 = vdup_n_s16(stbi__f2f( 1.175875602f)); - int16x4_t rot1_1 = vdup_n_s16(stbi__f2f(-0.899976223f)); - int16x4_t rot1_2 = vdup_n_s16(stbi__f2f(-2.562915447f)); - int16x4_t rot2_0 = vdup_n_s16(stbi__f2f(-1.961570560f)); - int16x4_t rot2_1 = vdup_n_s16(stbi__f2f(-0.390180644f)); - int16x4_t rot3_0 = vdup_n_s16(stbi__f2f( 0.298631336f)); - int16x4_t rot3_1 = vdup_n_s16(stbi__f2f( 2.053119869f)); - int16x4_t rot3_2 = vdup_n_s16(stbi__f2f( 3.072711026f)); - int16x4_t rot3_3 = vdup_n_s16(stbi__f2f( 1.501321110f)); - -#define dct_long_mul(out, inq, coeff) \ - int32x4_t out##_l = vmull_s16(vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmull_s16(vget_high_s16(inq), coeff) - -#define dct_long_mac(out, acc, inq, coeff) \ - int32x4_t out##_l = vmlal_s16(acc##_l, vget_low_s16(inq), coeff); \ - int32x4_t out##_h = vmlal_s16(acc##_h, vget_high_s16(inq), coeff) - -#define dct_widen(out, inq) \ - int32x4_t out##_l = vshll_n_s16(vget_low_s16(inq), 12); \ - int32x4_t out##_h = vshll_n_s16(vget_high_s16(inq), 12) - -// wide add -#define dct_wadd(out, a, b) \ - int32x4_t out##_l = vaddq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vaddq_s32(a##_h, b##_h) - -// wide sub -#define dct_wsub(out, a, b) \ - int32x4_t out##_l = vsubq_s32(a##_l, b##_l); \ - int32x4_t out##_h = vsubq_s32(a##_h, b##_h) - -// butterfly a/b, then shift using "shiftop" by "s" and pack -#define dct_bfly32o(out0,out1, a,b,shiftop,s) \ - { \ - dct_wadd(sum, a, b); \ - dct_wsub(dif, a, b); \ - out0 = vcombine_s16(shiftop(sum_l, s), shiftop(sum_h, s)); \ - out1 = vcombine_s16(shiftop(dif_l, s), shiftop(dif_h, s)); \ - } - -#define dct_pass(shiftop, shift) \ - { \ - /* even part */ \ - int16x8_t sum26 = vaddq_s16(row2, row6); \ - dct_long_mul(p1e, sum26, rot0_0); \ - dct_long_mac(t2e, p1e, row6, rot0_1); \ - dct_long_mac(t3e, p1e, row2, rot0_2); \ - int16x8_t sum04 = vaddq_s16(row0, row4); \ - int16x8_t dif04 = vsubq_s16(row0, row4); \ - dct_widen(t0e, sum04); \ - dct_widen(t1e, dif04); \ - dct_wadd(x0, t0e, t3e); \ - dct_wsub(x3, t0e, t3e); \ - dct_wadd(x1, t1e, t2e); \ - dct_wsub(x2, t1e, t2e); \ - /* odd part */ \ - int16x8_t sum15 = vaddq_s16(row1, row5); \ - int16x8_t sum17 = vaddq_s16(row1, row7); \ - int16x8_t sum35 = vaddq_s16(row3, row5); \ - int16x8_t sum37 = vaddq_s16(row3, row7); \ - int16x8_t sumodd = vaddq_s16(sum17, sum35); \ - dct_long_mul(p5o, sumodd, rot1_0); \ - dct_long_mac(p1o, p5o, sum17, rot1_1); \ - dct_long_mac(p2o, p5o, sum35, rot1_2); \ - dct_long_mul(p3o, sum37, rot2_0); \ - dct_long_mul(p4o, sum15, rot2_1); \ - dct_wadd(sump13o, p1o, p3o); \ - dct_wadd(sump24o, p2o, p4o); \ - dct_wadd(sump23o, p2o, p3o); \ - dct_wadd(sump14o, p1o, p4o); \ - dct_long_mac(x4, sump13o, row7, rot3_0); \ - dct_long_mac(x5, sump24o, row5, rot3_1); \ - dct_long_mac(x6, sump23o, row3, rot3_2); \ - dct_long_mac(x7, sump14o, row1, rot3_3); \ - dct_bfly32o(row0,row7, x0,x7,shiftop,shift); \ - dct_bfly32o(row1,row6, x1,x6,shiftop,shift); \ - dct_bfly32o(row2,row5, x2,x5,shiftop,shift); \ - dct_bfly32o(row3,row4, x3,x4,shiftop,shift); \ - } - - // load - row0 = vld1q_s16(data + 0*8); - row1 = vld1q_s16(data + 1*8); - row2 = vld1q_s16(data + 2*8); - row3 = vld1q_s16(data + 3*8); - row4 = vld1q_s16(data + 4*8); - row5 = vld1q_s16(data + 5*8); - row6 = vld1q_s16(data + 6*8); - row7 = vld1q_s16(data + 7*8); - - // add DC bias - row0 = vaddq_s16(row0, vsetq_lane_s16(1024, vdupq_n_s16(0), 0)); - - // column pass - dct_pass(vrshrn_n_s32, 10); - - // 16bit 8x8 transpose - { -// these three map to a single VTRN.16, VTRN.32, and VSWP, respectively. -// whether compilers actually get this is another story, sadly. -#define dct_trn16(x, y) { int16x8x2_t t = vtrnq_s16(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn32(x, y) { int32x4x2_t t = vtrnq_s32(vreinterpretq_s32_s16(x), vreinterpretq_s32_s16(y)); x = vreinterpretq_s16_s32(t.val[0]); y = vreinterpretq_s16_s32(t.val[1]); } -#define dct_trn64(x, y) { int16x8_t x0 = x; int16x8_t y0 = y; x = vcombine_s16(vget_low_s16(x0), vget_low_s16(y0)); y = vcombine_s16(vget_high_s16(x0), vget_high_s16(y0)); } - - // pass 1 - dct_trn16(row0, row1); // a0b0a2b2a4b4a6b6 - dct_trn16(row2, row3); - dct_trn16(row4, row5); - dct_trn16(row6, row7); - - // pass 2 - dct_trn32(row0, row2); // a0b0c0d0a4b4c4d4 - dct_trn32(row1, row3); - dct_trn32(row4, row6); - dct_trn32(row5, row7); - - // pass 3 - dct_trn64(row0, row4); // a0b0c0d0e0f0g0h0 - dct_trn64(row1, row5); - dct_trn64(row2, row6); - dct_trn64(row3, row7); - -#undef dct_trn16 -#undef dct_trn32 -#undef dct_trn64 - } - - // row pass - // vrshrn_n_s32 only supports shifts up to 16, we need - // 17. so do a non-rounding shift of 16 first then follow - // up with a rounding shift by 1. - dct_pass(vshrn_n_s32, 16); - - { - // pack and round - uint8x8_t p0 = vqrshrun_n_s16(row0, 1); - uint8x8_t p1 = vqrshrun_n_s16(row1, 1); - uint8x8_t p2 = vqrshrun_n_s16(row2, 1); - uint8x8_t p3 = vqrshrun_n_s16(row3, 1); - uint8x8_t p4 = vqrshrun_n_s16(row4, 1); - uint8x8_t p5 = vqrshrun_n_s16(row5, 1); - uint8x8_t p6 = vqrshrun_n_s16(row6, 1); - uint8x8_t p7 = vqrshrun_n_s16(row7, 1); - - // again, these can translate into one instruction, but often don't. -#define dct_trn8_8(x, y) { uint8x8x2_t t = vtrn_u8(x, y); x = t.val[0]; y = t.val[1]; } -#define dct_trn8_16(x, y) { uint16x4x2_t t = vtrn_u16(vreinterpret_u16_u8(x), vreinterpret_u16_u8(y)); x = vreinterpret_u8_u16(t.val[0]); y = vreinterpret_u8_u16(t.val[1]); } -#define dct_trn8_32(x, y) { uint32x2x2_t t = vtrn_u32(vreinterpret_u32_u8(x), vreinterpret_u32_u8(y)); x = vreinterpret_u8_u32(t.val[0]); y = vreinterpret_u8_u32(t.val[1]); } - - // sadly can't use interleaved stores here since we only write - // 8 bytes to each scan line! - - // 8x8 8-bit transpose pass 1 - dct_trn8_8(p0, p1); - dct_trn8_8(p2, p3); - dct_trn8_8(p4, p5); - dct_trn8_8(p6, p7); - - // pass 2 - dct_trn8_16(p0, p2); - dct_trn8_16(p1, p3); - dct_trn8_16(p4, p6); - dct_trn8_16(p5, p7); - - // pass 3 - dct_trn8_32(p0, p4); - dct_trn8_32(p1, p5); - dct_trn8_32(p2, p6); - dct_trn8_32(p3, p7); - - // store - vst1_u8(out, p0); out += out_stride; - vst1_u8(out, p1); out += out_stride; - vst1_u8(out, p2); out += out_stride; - vst1_u8(out, p3); out += out_stride; - vst1_u8(out, p4); out += out_stride; - vst1_u8(out, p5); out += out_stride; - vst1_u8(out, p6); out += out_stride; - vst1_u8(out, p7); - -#undef dct_trn8_8 -#undef dct_trn8_16 -#undef dct_trn8_32 - } - -#undef dct_long_mul -#undef dct_long_mac -#undef dct_widen -#undef dct_wadd -#undef dct_wsub -#undef dct_bfly32o -#undef dct_pass -} - -#endif // STBI_NEON - -#define STBI__MARKER_none 0xff -// if there's a pending marker from the entropy stream, return that -// otherwise, fetch from the stream and get a marker. if there's no -// marker, return 0xff, which is never a valid marker value -static stbi_uc stbi__get_marker(stbi__jpeg *j) -{ - stbi_uc x; - if (j->marker != STBI__MARKER_none) { x = j->marker; j->marker = STBI__MARKER_none; return x; } - x = stbi__get8(j->s); - if (x != 0xff) return STBI__MARKER_none; - while (x == 0xff) - x = stbi__get8(j->s); // consume repeated 0xff fill bytes - return x; -} - -// in each scan, we'll have scan_n components, and the order -// of the components is specified by order[] -#define STBI__RESTART(x) ((x) >= 0xd0 && (x) <= 0xd7) - -// after a restart interval, stbi__jpeg_reset the entropy decoder and -// the dc prediction -static void stbi__jpeg_reset(stbi__jpeg *j) -{ - j->code_bits = 0; - j->code_buffer = 0; - j->nomore = 0; - j->img_comp[0].dc_pred = j->img_comp[1].dc_pred = j->img_comp[2].dc_pred = j->img_comp[3].dc_pred = 0; - j->marker = STBI__MARKER_none; - j->todo = j->restart_interval ? j->restart_interval : 0x7fffffff; - j->eob_run = 0; - // no more than 1<<31 MCUs if no restart_interal? that's plenty safe, - // since we don't even allow 1<<30 pixels -} - -static int stbi__parse_entropy_coded_data(stbi__jpeg *z) -{ - stbi__jpeg_reset(z); - if (!z->progressive) { - if (z->scan_n == 1) { - int i,j; - STBI_SIMD_ALIGN(short, data[64]); - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - // if it's NOT a restart, then just bail, so we get corrupt data - // rather than no data - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } else { // interleaved - int i,j,k,x,y; - STBI_SIMD_ALIGN(short, data[64]); - for (j=0; j < z->img_mcu_y; ++j) { - for (i=0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k=0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y=0; y < z->img_comp[n].v; ++y) { - for (x=0; x < z->img_comp[n].h; ++x) { - int x2 = (i*z->img_comp[n].h + x)*8; - int y2 = (j*z->img_comp[n].v + y)*8; - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block(z, data, z->huff_dc+z->img_comp[n].hd, z->huff_ac+ha, z->fast_ac[ha], n, z->dequant[z->img_comp[n].tq])) return 0; - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*y2+x2, z->img_comp[n].w2, data); - } - } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - } else { - if (z->scan_n == 1) { - int i,j; - int n = z->order[0]; - // non-interleaved data, we just need to process one block at a time, - // in trivial scanline order - // number of blocks to do just depends on how many actual "pixels" this - // component has, independent of interleaved MCU blocking and such - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - if (z->spec_start == 0) { - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } else { - int ha = z->img_comp[n].ha; - if (!stbi__jpeg_decode_block_prog_ac(z, data, &z->huff_ac[ha], z->fast_ac[ha])) - return 0; - } - // every data block is an MCU, so countdown the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } else { // interleaved - int i,j,k,x,y; - for (j=0; j < z->img_mcu_y; ++j) { - for (i=0; i < z->img_mcu_x; ++i) { - // scan an interleaved mcu... process scan_n components in order - for (k=0; k < z->scan_n; ++k) { - int n = z->order[k]; - // scan out an mcu's worth of this component; that's just determined - // by the basic H and V specified for the component - for (y=0; y < z->img_comp[n].v; ++y) { - for (x=0; x < z->img_comp[n].h; ++x) { - int x2 = (i*z->img_comp[n].h + x); - int y2 = (j*z->img_comp[n].v + y); - short *data = z->img_comp[n].coeff + 64 * (x2 + y2 * z->img_comp[n].coeff_w); - if (!stbi__jpeg_decode_block_prog_dc(z, data, &z->huff_dc[z->img_comp[n].hd], n)) - return 0; - } - } - } - // after all interleaved components, that's an interleaved MCU, - // so now count down the restart interval - if (--z->todo <= 0) { - if (z->code_bits < 24) stbi__grow_buffer_unsafe(z); - if (!STBI__RESTART(z->marker)) return 1; - stbi__jpeg_reset(z); - } - } - } - return 1; - } - } -} - -static void stbi__jpeg_dequantize(short *data, stbi__uint16 *dequant) -{ - int i; - for (i=0; i < 64; ++i) - data[i] *= dequant[i]; -} - -static void stbi__jpeg_finish(stbi__jpeg *z) -{ - if (z->progressive) { - // dequantize and idct the data - int i,j,n; - for (n=0; n < z->s->img_n; ++n) { - int w = (z->img_comp[n].x+7) >> 3; - int h = (z->img_comp[n].y+7) >> 3; - for (j=0; j < h; ++j) { - for (i=0; i < w; ++i) { - short *data = z->img_comp[n].coeff + 64 * (i + j * z->img_comp[n].coeff_w); - stbi__jpeg_dequantize(data, z->dequant[z->img_comp[n].tq]); - z->idct_block_kernel(z->img_comp[n].data+z->img_comp[n].w2*j*8+i*8, z->img_comp[n].w2, data); - } - } - } - } -} - -static int stbi__process_marker(stbi__jpeg *z, int m) -{ - int L; - switch (m) { - case STBI__MARKER_none: // no marker found - return stbi__err("expected marker","Corrupt JPEG"); - - case 0xDD: // DRI - specify restart interval - if (stbi__get16be(z->s) != 4) return stbi__err("bad DRI len","Corrupt JPEG"); - z->restart_interval = stbi__get16be(z->s); - return 1; - - case 0xDB: // DQT - define quantization table - L = stbi__get16be(z->s)-2; - while (L > 0) { - int q = stbi__get8(z->s); - int p = q >> 4, sixteen = (p != 0); - int t = q & 15,i; - if (p != 0 && p != 1) return stbi__err("bad DQT type","Corrupt JPEG"); - if (t > 3) return stbi__err("bad DQT table","Corrupt JPEG"); - - for (i=0; i < 64; ++i) - z->dequant[t][stbi__jpeg_dezigzag[i]] = (stbi__uint16)(sixteen ? stbi__get16be(z->s) : stbi__get8(z->s)); - L -= (sixteen ? 129 : 65); - } - return L==0; - - case 0xC4: // DHT - define huffman table - L = stbi__get16be(z->s)-2; - while (L > 0) { - stbi_uc *v; - int sizes[16],i,n=0; - int q = stbi__get8(z->s); - int tc = q >> 4; - int th = q & 15; - if (tc > 1 || th > 3) return stbi__err("bad DHT header","Corrupt JPEG"); - for (i=0; i < 16; ++i) { - sizes[i] = stbi__get8(z->s); - n += sizes[i]; - } - if(n > 256) return stbi__err("bad DHT header","Corrupt JPEG"); // Loop over i < n would write past end of values! - L -= 17; - if (tc == 0) { - if (!stbi__build_huffman(z->huff_dc+th, sizes)) return 0; - v = z->huff_dc[th].values; - } else { - if (!stbi__build_huffman(z->huff_ac+th, sizes)) return 0; - v = z->huff_ac[th].values; - } - for (i=0; i < n; ++i) - v[i] = stbi__get8(z->s); - if (tc != 0) - stbi__build_fast_ac(z->fast_ac[th], z->huff_ac + th); - L -= n; - } - return L==0; - } - - // check for comment block or APP blocks - if ((m >= 0xE0 && m <= 0xEF) || m == 0xFE) { - L = stbi__get16be(z->s); - if (L < 2) { - if (m == 0xFE) - return stbi__err("bad COM len","Corrupt JPEG"); - else - return stbi__err("bad APP len","Corrupt JPEG"); - } - L -= 2; - - if (m == 0xE0 && L >= 5) { // JFIF APP0 segment - static const unsigned char tag[5] = {'J','F','I','F','\0'}; - int ok = 1; - int i; - for (i=0; i < 5; ++i) - if (stbi__get8(z->s) != tag[i]) - ok = 0; - L -= 5; - if (ok) - z->jfif = 1; - } else if (m == 0xEE && L >= 12) { // Adobe APP14 segment - static const unsigned char tag[6] = {'A','d','o','b','e','\0'}; - int ok = 1; - int i; - for (i=0; i < 6; ++i) - if (stbi__get8(z->s) != tag[i]) - ok = 0; - L -= 6; - if (ok) { - stbi__get8(z->s); // version - stbi__get16be(z->s); // flags0 - stbi__get16be(z->s); // flags1 - z->app14_color_transform = stbi__get8(z->s); // color transform - L -= 6; - } - } - - stbi__skip(z->s, L); - return 1; - } - - return stbi__err("unknown marker","Corrupt JPEG"); -} - -// after we see SOS -static int stbi__process_scan_header(stbi__jpeg *z) -{ - int i; - int Ls = stbi__get16be(z->s); - z->scan_n = stbi__get8(z->s); - if (z->scan_n < 1 || z->scan_n > 4 || z->scan_n > (int) z->s->img_n) return stbi__err("bad SOS component count","Corrupt JPEG"); - if (Ls != 6+2*z->scan_n) return stbi__err("bad SOS len","Corrupt JPEG"); - for (i=0; i < z->scan_n; ++i) { - int id = stbi__get8(z->s), which; - int q = stbi__get8(z->s); - for (which = 0; which < z->s->img_n; ++which) - if (z->img_comp[which].id == id) - break; - if (which == z->s->img_n) return 0; // no match - z->img_comp[which].hd = q >> 4; if (z->img_comp[which].hd > 3) return stbi__err("bad DC huff","Corrupt JPEG"); - z->img_comp[which].ha = q & 15; if (z->img_comp[which].ha > 3) return stbi__err("bad AC huff","Corrupt JPEG"); - z->order[i] = which; - } - - { - int aa; - z->spec_start = stbi__get8(z->s); - z->spec_end = stbi__get8(z->s); // should be 63, but might be 0 - aa = stbi__get8(z->s); - z->succ_high = (aa >> 4); - z->succ_low = (aa & 15); - if (z->progressive) { - if (z->spec_start > 63 || z->spec_end > 63 || z->spec_start > z->spec_end || z->succ_high > 13 || z->succ_low > 13) - return stbi__err("bad SOS", "Corrupt JPEG"); - } else { - if (z->spec_start != 0) return stbi__err("bad SOS","Corrupt JPEG"); - if (z->succ_high != 0 || z->succ_low != 0) return stbi__err("bad SOS","Corrupt JPEG"); - z->spec_end = 63; - } - } - - return 1; -} - -static int stbi__free_jpeg_components(stbi__jpeg *z, int ncomp, int why) -{ - int i; - for (i=0; i < ncomp; ++i) { - if (z->img_comp[i].raw_data) { - STBI_FREE(z->img_comp[i].raw_data); - z->img_comp[i].raw_data = NULL; - z->img_comp[i].data = NULL; - } - if (z->img_comp[i].raw_coeff) { - STBI_FREE(z->img_comp[i].raw_coeff); - z->img_comp[i].raw_coeff = 0; - z->img_comp[i].coeff = 0; - } - if (z->img_comp[i].linebuf) { - STBI_FREE(z->img_comp[i].linebuf); - z->img_comp[i].linebuf = NULL; - } - } - return why; -} - -static int stbi__process_frame_header(stbi__jpeg *z, int scan) -{ - stbi__context *s = z->s; - int Lf,p,i,q, h_max=1,v_max=1,c; - Lf = stbi__get16be(s); if (Lf < 11) return stbi__err("bad SOF len","Corrupt JPEG"); // JPEG - p = stbi__get8(s); if (p != 8) return stbi__err("only 8-bit","JPEG format not supported: 8-bit only"); // JPEG baseline - s->img_y = stbi__get16be(s); if (s->img_y == 0) return stbi__err("no header height", "JPEG format not supported: delayed height"); // Legal, but we don't handle it--but neither does IJG - s->img_x = stbi__get16be(s); if (s->img_x == 0) return stbi__err("0 width","Corrupt JPEG"); // JPEG requires - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - c = stbi__get8(s); - if (c != 3 && c != 1 && c != 4) return stbi__err("bad component count","Corrupt JPEG"); - s->img_n = c; - for (i=0; i < c; ++i) { - z->img_comp[i].data = NULL; - z->img_comp[i].linebuf = NULL; - } - - if (Lf != 8+3*s->img_n) return stbi__err("bad SOF len","Corrupt JPEG"); - - z->rgb = 0; - for (i=0; i < s->img_n; ++i) { - static const unsigned char rgb[3] = { 'R', 'G', 'B' }; - z->img_comp[i].id = stbi__get8(s); - if (s->img_n == 3 && z->img_comp[i].id == rgb[i]) - ++z->rgb; - q = stbi__get8(s); - z->img_comp[i].h = (q >> 4); if (!z->img_comp[i].h || z->img_comp[i].h > 4) return stbi__err("bad H","Corrupt JPEG"); - z->img_comp[i].v = q & 15; if (!z->img_comp[i].v || z->img_comp[i].v > 4) return stbi__err("bad V","Corrupt JPEG"); - z->img_comp[i].tq = stbi__get8(s); if (z->img_comp[i].tq > 3) return stbi__err("bad TQ","Corrupt JPEG"); - } - - if (scan != STBI__SCAN_load) return 1; - - if (!stbi__mad3sizes_valid(s->img_x, s->img_y, s->img_n, 0)) return stbi__err("too large", "Image too large to decode"); - - for (i=0; i < s->img_n; ++i) { - if (z->img_comp[i].h > h_max) h_max = z->img_comp[i].h; - if (z->img_comp[i].v > v_max) v_max = z->img_comp[i].v; - } - - // check that plane subsampling factors are integer ratios; our resamplers can't deal with fractional ratios - // and I've never seen a non-corrupted JPEG file actually use them - for (i=0; i < s->img_n; ++i) { - if (h_max % z->img_comp[i].h != 0) return stbi__err("bad H","Corrupt JPEG"); - if (v_max % z->img_comp[i].v != 0) return stbi__err("bad V","Corrupt JPEG"); - } - - // compute interleaved mcu info - z->img_h_max = h_max; - z->img_v_max = v_max; - z->img_mcu_w = h_max * 8; - z->img_mcu_h = v_max * 8; - // these sizes can't be more than 17 bits - z->img_mcu_x = (s->img_x + z->img_mcu_w-1) / z->img_mcu_w; - z->img_mcu_y = (s->img_y + z->img_mcu_h-1) / z->img_mcu_h; - - for (i=0; i < s->img_n; ++i) { - // number of effective pixels (e.g. for non-interleaved MCU) - z->img_comp[i].x = (s->img_x * z->img_comp[i].h + h_max-1) / h_max; - z->img_comp[i].y = (s->img_y * z->img_comp[i].v + v_max-1) / v_max; - // to simplify generation, we'll allocate enough memory to decode - // the bogus oversized data from using interleaved MCUs and their - // big blocks (e.g. a 16x16 iMCU on an image of width 33); we won't - // discard the extra data until colorspace conversion - // - // img_mcu_x, img_mcu_y: <=17 bits; comp[i].h and .v are <=4 (checked earlier) - // so these muls can't overflow with 32-bit ints (which we require) - z->img_comp[i].w2 = z->img_mcu_x * z->img_comp[i].h * 8; - z->img_comp[i].h2 = z->img_mcu_y * z->img_comp[i].v * 8; - z->img_comp[i].coeff = 0; - z->img_comp[i].raw_coeff = 0; - z->img_comp[i].linebuf = NULL; - z->img_comp[i].raw_data = stbi__malloc_mad2(z->img_comp[i].w2, z->img_comp[i].h2, 15); - if (z->img_comp[i].raw_data == NULL) - return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); - // align blocks for idct using mmx/sse - z->img_comp[i].data = (stbi_uc*) (((size_t) z->img_comp[i].raw_data + 15) & ~15); - if (z->progressive) { - // w2, h2 are multiples of 8 (see above) - z->img_comp[i].coeff_w = z->img_comp[i].w2 / 8; - z->img_comp[i].coeff_h = z->img_comp[i].h2 / 8; - z->img_comp[i].raw_coeff = stbi__malloc_mad3(z->img_comp[i].w2, z->img_comp[i].h2, sizeof(short), 15); - if (z->img_comp[i].raw_coeff == NULL) - return stbi__free_jpeg_components(z, i+1, stbi__err("outofmem", "Out of memory")); - z->img_comp[i].coeff = (short*) (((size_t) z->img_comp[i].raw_coeff + 15) & ~15); - } - } - - return 1; -} - -// use comparisons since in some cases we handle more than one case (e.g. SOF) -#define stbi__DNL(x) ((x) == 0xdc) -#define stbi__SOI(x) ((x) == 0xd8) -#define stbi__EOI(x) ((x) == 0xd9) -#define stbi__SOF(x) ((x) == 0xc0 || (x) == 0xc1 || (x) == 0xc2) -#define stbi__SOS(x) ((x) == 0xda) - -#define stbi__SOF_progressive(x) ((x) == 0xc2) - -static int stbi__decode_jpeg_header(stbi__jpeg *z, int scan) -{ - int m; - z->jfif = 0; - z->app14_color_transform = -1; // valid values are 0,1,2 - z->marker = STBI__MARKER_none; // initialize cached marker to empty - m = stbi__get_marker(z); - if (!stbi__SOI(m)) return stbi__err("no SOI","Corrupt JPEG"); - if (scan == STBI__SCAN_type) return 1; - m = stbi__get_marker(z); - while (!stbi__SOF(m)) { - if (!stbi__process_marker(z,m)) return 0; - m = stbi__get_marker(z); - while (m == STBI__MARKER_none) { - // some files have extra padding after their blocks, so ok, we'll scan - if (stbi__at_eof(z->s)) return stbi__err("no SOF", "Corrupt JPEG"); - m = stbi__get_marker(z); - } - } - z->progressive = stbi__SOF_progressive(m); - if (!stbi__process_frame_header(z, scan)) return 0; - return 1; -} - -static stbi_uc stbi__skip_jpeg_junk_at_end(stbi__jpeg *j) -{ - // some JPEGs have junk at end, skip over it but if we find what looks - // like a valid marker, resume there - while (!stbi__at_eof(j->s)) { - stbi_uc x = stbi__get8(j->s); - while (x == 0xff) { // might be a marker - if (stbi__at_eof(j->s)) return STBI__MARKER_none; - x = stbi__get8(j->s); - if (x != 0x00 && x != 0xff) { - // not a stuffed zero or lead-in to another marker, looks - // like an actual marker, return it - return x; - } - // stuffed zero has x=0 now which ends the loop, meaning we go - // back to regular scan loop. - // repeated 0xff keeps trying to read the next byte of the marker. - } - } - return STBI__MARKER_none; -} - -// decode image to YCbCr format -static int stbi__decode_jpeg_image(stbi__jpeg *j) -{ - int m; - for (m = 0; m < 4; m++) { - j->img_comp[m].raw_data = NULL; - j->img_comp[m].raw_coeff = NULL; - } - j->restart_interval = 0; - if (!stbi__decode_jpeg_header(j, STBI__SCAN_load)) return 0; - m = stbi__get_marker(j); - while (!stbi__EOI(m)) { - if (stbi__SOS(m)) { - if (!stbi__process_scan_header(j)) return 0; - if (!stbi__parse_entropy_coded_data(j)) return 0; - if (j->marker == STBI__MARKER_none ) { - j->marker = stbi__skip_jpeg_junk_at_end(j); - // if we reach eof without hitting a marker, stbi__get_marker() below will fail and we'll eventually return 0 - } - m = stbi__get_marker(j); - if (STBI__RESTART(m)) - m = stbi__get_marker(j); - } else if (stbi__DNL(m)) { - int Ld = stbi__get16be(j->s); - stbi__uint32 NL = stbi__get16be(j->s); - if (Ld != 4) return stbi__err("bad DNL len", "Corrupt JPEG"); - if (NL != j->s->img_y) return stbi__err("bad DNL height", "Corrupt JPEG"); - m = stbi__get_marker(j); - } else { - if (!stbi__process_marker(j, m)) return 1; - m = stbi__get_marker(j); - } - } - if (j->progressive) - stbi__jpeg_finish(j); - return 1; -} - -// static jfif-centered resampling (across block boundaries) - -typedef stbi_uc *(*resample_row_func)(stbi_uc *out, stbi_uc *in0, stbi_uc *in1, - int w, int hs); - -#define stbi__div4(x) ((stbi_uc) ((x) >> 2)) - -static stbi_uc *resample_row_1(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - STBI_NOTUSED(out); - STBI_NOTUSED(in_far); - STBI_NOTUSED(w); - STBI_NOTUSED(hs); - return in_near; -} - -static stbi_uc* stbi__resample_row_v_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate two samples vertically for every one in input - int i; - STBI_NOTUSED(hs); - for (i=0; i < w; ++i) - out[i] = stbi__div4(3*in_near[i] + in_far[i] + 2); - return out; -} - -static stbi_uc* stbi__resample_row_h_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate two samples horizontally for every one in input - int i; - stbi_uc *input = in_near; - - if (w == 1) { - // if only one sample, can't do any interpolation - out[0] = out[1] = input[0]; - return out; - } - - out[0] = input[0]; - out[1] = stbi__div4(input[0]*3 + input[1] + 2); - for (i=1; i < w-1; ++i) { - int n = 3*input[i]+2; - out[i*2+0] = stbi__div4(n+input[i-1]); - out[i*2+1] = stbi__div4(n+input[i+1]); - } - out[i*2+0] = stbi__div4(input[w-2]*3 + input[w-1] + 2); - out[i*2+1] = input[w-1]; - - STBI_NOTUSED(in_far); - STBI_NOTUSED(hs); - - return out; -} - -#define stbi__div16(x) ((stbi_uc) ((x) >> 4)) - -static stbi_uc *stbi__resample_row_hv_2(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate 2x2 samples for every one in input - int i,t0,t1; - if (w == 1) { - out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); - return out; - } - - t1 = 3*in_near[0] + in_far[0]; - out[0] = stbi__div4(t1+2); - for (i=1; i < w; ++i) { - t0 = t1; - t1 = 3*in_near[i]+in_far[i]; - out[i*2-1] = stbi__div16(3*t0 + t1 + 8); - out[i*2 ] = stbi__div16(3*t1 + t0 + 8); - } - out[w*2-1] = stbi__div4(t1+2); - - STBI_NOTUSED(hs); - - return out; -} - -#if defined(STBI_SSE2) || defined(STBI_NEON) -static stbi_uc *stbi__resample_row_hv_2_simd(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // need to generate 2x2 samples for every one in input - int i=0,t0,t1; - - if (w == 1) { - out[0] = out[1] = stbi__div4(3*in_near[0] + in_far[0] + 2); - return out; - } - - t1 = 3*in_near[0] + in_far[0]; - // process groups of 8 pixels for as long as we can. - // note we can't handle the last pixel in a row in this loop - // because we need to handle the filter boundary conditions. - for (; i < ((w-1) & ~7); i += 8) { -#if defined(STBI_SSE2) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - __m128i zero = _mm_setzero_si128(); - __m128i farb = _mm_loadl_epi64((__m128i *) (in_far + i)); - __m128i nearb = _mm_loadl_epi64((__m128i *) (in_near + i)); - __m128i farw = _mm_unpacklo_epi8(farb, zero); - __m128i nearw = _mm_unpacklo_epi8(nearb, zero); - __m128i diff = _mm_sub_epi16(farw, nearw); - __m128i nears = _mm_slli_epi16(nearw, 2); - __m128i curr = _mm_add_epi16(nears, diff); // current row - - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - __m128i prv0 = _mm_slli_si128(curr, 2); - __m128i nxt0 = _mm_srli_si128(curr, 2); - __m128i prev = _mm_insert_epi16(prv0, t1, 0); - __m128i next = _mm_insert_epi16(nxt0, 3*in_near[i+8] + in_far[i+8], 7); - - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - __m128i bias = _mm_set1_epi16(8); - __m128i curs = _mm_slli_epi16(curr, 2); - __m128i prvd = _mm_sub_epi16(prev, curr); - __m128i nxtd = _mm_sub_epi16(next, curr); - __m128i curb = _mm_add_epi16(curs, bias); - __m128i even = _mm_add_epi16(prvd, curb); - __m128i odd = _mm_add_epi16(nxtd, curb); - - // interleave even and odd pixels, then undo scaling. - __m128i int0 = _mm_unpacklo_epi16(even, odd); - __m128i int1 = _mm_unpackhi_epi16(even, odd); - __m128i de0 = _mm_srli_epi16(int0, 4); - __m128i de1 = _mm_srli_epi16(int1, 4); - - // pack and write output - __m128i outv = _mm_packus_epi16(de0, de1); - _mm_storeu_si128((__m128i *) (out + i*2), outv); -#elif defined(STBI_NEON) - // load and perform the vertical filtering pass - // this uses 3*x + y = 4*x + (y - x) - uint8x8_t farb = vld1_u8(in_far + i); - uint8x8_t nearb = vld1_u8(in_near + i); - int16x8_t diff = vreinterpretq_s16_u16(vsubl_u8(farb, nearb)); - int16x8_t nears = vreinterpretq_s16_u16(vshll_n_u8(nearb, 2)); - int16x8_t curr = vaddq_s16(nears, diff); // current row - - // horizontal filter works the same based on shifted vers of current - // row. "prev" is current row shifted right by 1 pixel; we need to - // insert the previous pixel value (from t1). - // "next" is current row shifted left by 1 pixel, with first pixel - // of next block of 8 pixels added in. - int16x8_t prv0 = vextq_s16(curr, curr, 7); - int16x8_t nxt0 = vextq_s16(curr, curr, 1); - int16x8_t prev = vsetq_lane_s16(t1, prv0, 0); - int16x8_t next = vsetq_lane_s16(3*in_near[i+8] + in_far[i+8], nxt0, 7); - - // horizontal filter, polyphase implementation since it's convenient: - // even pixels = 3*cur + prev = cur*4 + (prev - cur) - // odd pixels = 3*cur + next = cur*4 + (next - cur) - // note the shared term. - int16x8_t curs = vshlq_n_s16(curr, 2); - int16x8_t prvd = vsubq_s16(prev, curr); - int16x8_t nxtd = vsubq_s16(next, curr); - int16x8_t even = vaddq_s16(curs, prvd); - int16x8_t odd = vaddq_s16(curs, nxtd); - - // undo scaling and round, then store with even/odd phases interleaved - uint8x8x2_t o; - o.val[0] = vqrshrun_n_s16(even, 4); - o.val[1] = vqrshrun_n_s16(odd, 4); - vst2_u8(out + i*2, o); -#endif - - // "previous" value for next iter - t1 = 3*in_near[i+7] + in_far[i+7]; - } - - t0 = t1; - t1 = 3*in_near[i] + in_far[i]; - out[i*2] = stbi__div16(3*t1 + t0 + 8); - - for (++i; i < w; ++i) { - t0 = t1; - t1 = 3*in_near[i]+in_far[i]; - out[i*2-1] = stbi__div16(3*t0 + t1 + 8); - out[i*2 ] = stbi__div16(3*t1 + t0 + 8); - } - out[w*2-1] = stbi__div4(t1+2); - - STBI_NOTUSED(hs); - - return out; -} -#endif - -static stbi_uc *stbi__resample_row_generic(stbi_uc *out, stbi_uc *in_near, stbi_uc *in_far, int w, int hs) -{ - // resample with nearest-neighbor - int i,j; - STBI_NOTUSED(in_far); - for (i=0; i < w; ++i) - for (j=0; j < hs; ++j) - out[i*hs+j] = in_near[i]; - return out; -} - -// this is a reduced-precision calculation of YCbCr-to-RGB introduced -// to make sure the code produces the same results in both SIMD and scalar -#define stbi__float2fixed(x) (((int) ((x) * 4096.0f + 0.5f)) << 8) -static void stbi__YCbCr_to_RGB_row(stbi_uc *out, const stbi_uc *y, const stbi_uc *pcb, const stbi_uc *pcr, int count, int step) -{ - int i; - for (i=0; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1<<19); // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr* stbi__float2fixed(1.40200f); - g = y_fixed + (cr*-stbi__float2fixed(0.71414f)) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb* stbi__float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } -} - -#if defined(STBI_SSE2) || defined(STBI_NEON) -static void stbi__YCbCr_to_RGB_simd(stbi_uc *out, stbi_uc const *y, stbi_uc const *pcb, stbi_uc const *pcr, int count, int step) -{ - int i = 0; - -#ifdef STBI_SSE2 - // step == 3 is pretty ugly on the final interleave, and i'm not convinced - // it's useful in practice (you wouldn't use it for textures, for example). - // so just accelerate step == 4 case. - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - __m128i signflip = _mm_set1_epi8(-0x80); - __m128i cr_const0 = _mm_set1_epi16( (short) ( 1.40200f*4096.0f+0.5f)); - __m128i cr_const1 = _mm_set1_epi16( - (short) ( 0.71414f*4096.0f+0.5f)); - __m128i cb_const0 = _mm_set1_epi16( - (short) ( 0.34414f*4096.0f+0.5f)); - __m128i cb_const1 = _mm_set1_epi16( (short) ( 1.77200f*4096.0f+0.5f)); - __m128i y_bias = _mm_set1_epi8((char) (unsigned char) 128); - __m128i xw = _mm_set1_epi16(255); // alpha channel - - for (; i+7 < count; i += 8) { - // load - __m128i y_bytes = _mm_loadl_epi64((__m128i *) (y+i)); - __m128i cr_bytes = _mm_loadl_epi64((__m128i *) (pcr+i)); - __m128i cb_bytes = _mm_loadl_epi64((__m128i *) (pcb+i)); - __m128i cr_biased = _mm_xor_si128(cr_bytes, signflip); // -128 - __m128i cb_biased = _mm_xor_si128(cb_bytes, signflip); // -128 - - // unpack to short (and left-shift cr, cb by 8) - __m128i yw = _mm_unpacklo_epi8(y_bias, y_bytes); - __m128i crw = _mm_unpacklo_epi8(_mm_setzero_si128(), cr_biased); - __m128i cbw = _mm_unpacklo_epi8(_mm_setzero_si128(), cb_biased); - - // color transform - __m128i yws = _mm_srli_epi16(yw, 4); - __m128i cr0 = _mm_mulhi_epi16(cr_const0, crw); - __m128i cb0 = _mm_mulhi_epi16(cb_const0, cbw); - __m128i cb1 = _mm_mulhi_epi16(cbw, cb_const1); - __m128i cr1 = _mm_mulhi_epi16(crw, cr_const1); - __m128i rws = _mm_add_epi16(cr0, yws); - __m128i gwt = _mm_add_epi16(cb0, yws); - __m128i bws = _mm_add_epi16(yws, cb1); - __m128i gws = _mm_add_epi16(gwt, cr1); - - // descale - __m128i rw = _mm_srai_epi16(rws, 4); - __m128i bw = _mm_srai_epi16(bws, 4); - __m128i gw = _mm_srai_epi16(gws, 4); - - // back to byte, set up for transpose - __m128i brb = _mm_packus_epi16(rw, bw); - __m128i gxb = _mm_packus_epi16(gw, xw); - - // transpose to interleave channels - __m128i t0 = _mm_unpacklo_epi8(brb, gxb); - __m128i t1 = _mm_unpackhi_epi8(brb, gxb); - __m128i o0 = _mm_unpacklo_epi16(t0, t1); - __m128i o1 = _mm_unpackhi_epi16(t0, t1); - - // store - _mm_storeu_si128((__m128i *) (out + 0), o0); - _mm_storeu_si128((__m128i *) (out + 16), o1); - out += 32; - } - } -#endif - -#ifdef STBI_NEON - // in this version, step=3 support would be easy to add. but is there demand? - if (step == 4) { - // this is a fairly straightforward implementation and not super-optimized. - uint8x8_t signflip = vdup_n_u8(0x80); - int16x8_t cr_const0 = vdupq_n_s16( (short) ( 1.40200f*4096.0f+0.5f)); - int16x8_t cr_const1 = vdupq_n_s16( - (short) ( 0.71414f*4096.0f+0.5f)); - int16x8_t cb_const0 = vdupq_n_s16( - (short) ( 0.34414f*4096.0f+0.5f)); - int16x8_t cb_const1 = vdupq_n_s16( (short) ( 1.77200f*4096.0f+0.5f)); - - for (; i+7 < count; i += 8) { - // load - uint8x8_t y_bytes = vld1_u8(y + i); - uint8x8_t cr_bytes = vld1_u8(pcr + i); - uint8x8_t cb_bytes = vld1_u8(pcb + i); - int8x8_t cr_biased = vreinterpret_s8_u8(vsub_u8(cr_bytes, signflip)); - int8x8_t cb_biased = vreinterpret_s8_u8(vsub_u8(cb_bytes, signflip)); - - // expand to s16 - int16x8_t yws = vreinterpretq_s16_u16(vshll_n_u8(y_bytes, 4)); - int16x8_t crw = vshll_n_s8(cr_biased, 7); - int16x8_t cbw = vshll_n_s8(cb_biased, 7); - - // color transform - int16x8_t cr0 = vqdmulhq_s16(crw, cr_const0); - int16x8_t cb0 = vqdmulhq_s16(cbw, cb_const0); - int16x8_t cr1 = vqdmulhq_s16(crw, cr_const1); - int16x8_t cb1 = vqdmulhq_s16(cbw, cb_const1); - int16x8_t rws = vaddq_s16(yws, cr0); - int16x8_t gws = vaddq_s16(vaddq_s16(yws, cb0), cr1); - int16x8_t bws = vaddq_s16(yws, cb1); - - // undo scaling, round, convert to byte - uint8x8x4_t o; - o.val[0] = vqrshrun_n_s16(rws, 4); - o.val[1] = vqrshrun_n_s16(gws, 4); - o.val[2] = vqrshrun_n_s16(bws, 4); - o.val[3] = vdup_n_u8(255); - - // store, interleaving r/g/b/a - vst4_u8(out, o); - out += 8*4; - } - } -#endif - - for (; i < count; ++i) { - int y_fixed = (y[i] << 20) + (1<<19); // rounding - int r,g,b; - int cr = pcr[i] - 128; - int cb = pcb[i] - 128; - r = y_fixed + cr* stbi__float2fixed(1.40200f); - g = y_fixed + cr*-stbi__float2fixed(0.71414f) + ((cb*-stbi__float2fixed(0.34414f)) & 0xffff0000); - b = y_fixed + cb* stbi__float2fixed(1.77200f); - r >>= 20; - g >>= 20; - b >>= 20; - if ((unsigned) r > 255) { if (r < 0) r = 0; else r = 255; } - if ((unsigned) g > 255) { if (g < 0) g = 0; else g = 255; } - if ((unsigned) b > 255) { if (b < 0) b = 0; else b = 255; } - out[0] = (stbi_uc)r; - out[1] = (stbi_uc)g; - out[2] = (stbi_uc)b; - out[3] = 255; - out += step; - } -} -#endif - -// set up the kernels -static void stbi__setup_jpeg(stbi__jpeg *j) -{ - j->idct_block_kernel = stbi__idct_block; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_row; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2; - -#ifdef STBI_SSE2 - if (stbi__sse2_available()) { - j->idct_block_kernel = stbi__idct_simd; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; - } -#endif - -#ifdef STBI_NEON - j->idct_block_kernel = stbi__idct_simd; - j->YCbCr_to_RGB_kernel = stbi__YCbCr_to_RGB_simd; - j->resample_row_hv_2_kernel = stbi__resample_row_hv_2_simd; -#endif -} - -// clean up the temporary component buffers -static void stbi__cleanup_jpeg(stbi__jpeg *j) -{ - stbi__free_jpeg_components(j, j->s->img_n, 0); -} - -typedef struct -{ - resample_row_func resample; - stbi_uc *line0,*line1; - int hs,vs; // expansion factor in each axis - int w_lores; // horizontal pixels pre-expansion - int ystep; // how far through vertical expansion we are - int ypos; // which pre-expansion row we're on -} stbi__resample; - -// fast 0..255 * 0..255 => 0..255 rounded multiplication -static stbi_uc stbi__blinn_8x8(stbi_uc x, stbi_uc y) -{ - unsigned int t = x*y + 128; - return (stbi_uc) ((t + (t >>8)) >> 8); -} - -static stbi_uc *load_jpeg_image(stbi__jpeg *z, int *out_x, int *out_y, int *comp, int req_comp) -{ - int n, decode_n, is_rgb; - z->s->img_n = 0; // make stbi__cleanup_jpeg safe - - // validate req_comp - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); - - // load a jpeg image from whichever source, but leave in YCbCr format - if (!stbi__decode_jpeg_image(z)) { stbi__cleanup_jpeg(z); return NULL; } - - // determine actual number of components to generate - n = req_comp ? req_comp : z->s->img_n >= 3 ? 3 : 1; - - is_rgb = z->s->img_n == 3 && (z->rgb == 3 || (z->app14_color_transform == 0 && !z->jfif)); - - if (z->s->img_n == 3 && n < 3 && !is_rgb) - decode_n = 1; - else - decode_n = z->s->img_n; - - // nothing to do if no components requested; check this now to avoid - // accessing uninitialized coutput[0] later - if (decode_n <= 0) { stbi__cleanup_jpeg(z); return NULL; } - - // resample and color-convert - { - int k; - unsigned int i,j; - stbi_uc *output; - stbi_uc *coutput[4] = { NULL, NULL, NULL, NULL }; - - stbi__resample res_comp[4]; - - for (k=0; k < decode_n; ++k) { - stbi__resample *r = &res_comp[k]; - - // allocate line buffer big enough for upsampling off the edges - // with upsample factor of 4 - z->img_comp[k].linebuf = (stbi_uc *) stbi__malloc(z->s->img_x + 3); - if (!z->img_comp[k].linebuf) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } - - r->hs = z->img_h_max / z->img_comp[k].h; - r->vs = z->img_v_max / z->img_comp[k].v; - r->ystep = r->vs >> 1; - r->w_lores = (z->s->img_x + r->hs-1) / r->hs; - r->ypos = 0; - r->line0 = r->line1 = z->img_comp[k].data; - - if (r->hs == 1 && r->vs == 1) r->resample = resample_row_1; - else if (r->hs == 1 && r->vs == 2) r->resample = stbi__resample_row_v_2; - else if (r->hs == 2 && r->vs == 1) r->resample = stbi__resample_row_h_2; - else if (r->hs == 2 && r->vs == 2) r->resample = z->resample_row_hv_2_kernel; - else r->resample = stbi__resample_row_generic; - } - - // can't error after this so, this is safe - output = (stbi_uc *) stbi__malloc_mad3(n, z->s->img_x, z->s->img_y, 1); - if (!output) { stbi__cleanup_jpeg(z); return stbi__errpuc("outofmem", "Out of memory"); } - - // now go ahead and resample - for (j=0; j < z->s->img_y; ++j) { - stbi_uc *out = output + n * z->s->img_x * j; - for (k=0; k < decode_n; ++k) { - stbi__resample *r = &res_comp[k]; - int y_bot = r->ystep >= (r->vs >> 1); - coutput[k] = r->resample(z->img_comp[k].linebuf, - y_bot ? r->line1 : r->line0, - y_bot ? r->line0 : r->line1, - r->w_lores, r->hs); - if (++r->ystep >= r->vs) { - r->ystep = 0; - r->line0 = r->line1; - if (++r->ypos < z->img_comp[k].y) - r->line1 += z->img_comp[k].w2; - } - } - if (n >= 3) { - stbi_uc *y = coutput[0]; - if (z->s->img_n == 3) { - if (is_rgb) { - for (i=0; i < z->s->img_x; ++i) { - out[0] = y[i]; - out[1] = coutput[1][i]; - out[2] = coutput[2][i]; - out[3] = 255; - out += n; - } - } else { - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - } - } else if (z->s->img_n == 4) { - if (z->app14_color_transform == 0) { // CMYK - for (i=0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - out[0] = stbi__blinn_8x8(coutput[0][i], m); - out[1] = stbi__blinn_8x8(coutput[1][i], m); - out[2] = stbi__blinn_8x8(coutput[2][i], m); - out[3] = 255; - out += n; - } - } else if (z->app14_color_transform == 2) { // YCCK - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - for (i=0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - out[0] = stbi__blinn_8x8(255 - out[0], m); - out[1] = stbi__blinn_8x8(255 - out[1], m); - out[2] = stbi__blinn_8x8(255 - out[2], m); - out += n; - } - } else { // YCbCr + alpha? Ignore the fourth channel for now - z->YCbCr_to_RGB_kernel(out, y, coutput[1], coutput[2], z->s->img_x, n); - } - } else - for (i=0; i < z->s->img_x; ++i) { - out[0] = out[1] = out[2] = y[i]; - out[3] = 255; // not used if n==3 - out += n; - } - } else { - if (is_rgb) { - if (n == 1) - for (i=0; i < z->s->img_x; ++i) - *out++ = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); - else { - for (i=0; i < z->s->img_x; ++i, out += 2) { - out[0] = stbi__compute_y(coutput[0][i], coutput[1][i], coutput[2][i]); - out[1] = 255; - } - } - } else if (z->s->img_n == 4 && z->app14_color_transform == 0) { - for (i=0; i < z->s->img_x; ++i) { - stbi_uc m = coutput[3][i]; - stbi_uc r = stbi__blinn_8x8(coutput[0][i], m); - stbi_uc g = stbi__blinn_8x8(coutput[1][i], m); - stbi_uc b = stbi__blinn_8x8(coutput[2][i], m); - out[0] = stbi__compute_y(r, g, b); - out[1] = 255; - out += n; - } - } else if (z->s->img_n == 4 && z->app14_color_transform == 2) { - for (i=0; i < z->s->img_x; ++i) { - out[0] = stbi__blinn_8x8(255 - coutput[0][i], coutput[3][i]); - out[1] = 255; - out += n; - } - } else { - stbi_uc *y = coutput[0]; - if (n == 1) - for (i=0; i < z->s->img_x; ++i) out[i] = y[i]; - else - for (i=0; i < z->s->img_x; ++i) { *out++ = y[i]; *out++ = 255; } - } - } - } - stbi__cleanup_jpeg(z); - *out_x = z->s->img_x; - *out_y = z->s->img_y; - if (comp) *comp = z->s->img_n >= 3 ? 3 : 1; // report original components, not output - return output; - } -} - -static void *stbi__jpeg_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - unsigned char* result; - stbi__jpeg* j = (stbi__jpeg*) stbi__malloc(sizeof(stbi__jpeg)); - if (!j) return stbi__errpuc("outofmem", "Out of memory"); - memset(j, 0, sizeof(stbi__jpeg)); - STBI_NOTUSED(ri); - j->s = s; - stbi__setup_jpeg(j); - result = load_jpeg_image(j, x,y,comp,req_comp); - STBI_FREE(j); - return result; -} - -static int stbi__jpeg_test(stbi__context *s) -{ - int r; - stbi__jpeg* j = (stbi__jpeg*)stbi__malloc(sizeof(stbi__jpeg)); - if (!j) return stbi__err("outofmem", "Out of memory"); - memset(j, 0, sizeof(stbi__jpeg)); - j->s = s; - stbi__setup_jpeg(j); - r = stbi__decode_jpeg_header(j, STBI__SCAN_type); - stbi__rewind(s); - STBI_FREE(j); - return r; -} - -static int stbi__jpeg_info_raw(stbi__jpeg *j, int *x, int *y, int *comp) -{ - if (!stbi__decode_jpeg_header(j, STBI__SCAN_header)) { - stbi__rewind( j->s ); - return 0; - } - if (x) *x = j->s->img_x; - if (y) *y = j->s->img_y; - if (comp) *comp = j->s->img_n >= 3 ? 3 : 1; - return 1; -} - -static int stbi__jpeg_info(stbi__context *s, int *x, int *y, int *comp) -{ - int result; - stbi__jpeg* j = (stbi__jpeg*) (stbi__malloc(sizeof(stbi__jpeg))); - if (!j) return stbi__err("outofmem", "Out of memory"); - memset(j, 0, sizeof(stbi__jpeg)); - j->s = s; - result = stbi__jpeg_info_raw(j, x, y, comp); - STBI_FREE(j); - return result; -} -#endif - -// public domain zlib decode v0.2 Sean Barrett 2006-11-18 -// simple implementation -// - all input must be provided in an upfront buffer -// - all output is written to a single output buffer (can malloc/realloc) -// performance -// - fast huffman - -#ifndef STBI_NO_ZLIB - -// fast-way is faster to check than jpeg huffman, but slow way is slower -#define STBI__ZFAST_BITS 9 // accelerate all cases in default tables -#define STBI__ZFAST_MASK ((1 << STBI__ZFAST_BITS) - 1) -#define STBI__ZNSYMS 288 // number of symbols in literal/length alphabet - -// zlib-style huffman encoding -// (jpegs packs from left, zlib from right, so can't share code) -typedef struct -{ - stbi__uint16 fast[1 << STBI__ZFAST_BITS]; - stbi__uint16 firstcode[16]; - int maxcode[17]; - stbi__uint16 firstsymbol[16]; - stbi_uc size[STBI__ZNSYMS]; - stbi__uint16 value[STBI__ZNSYMS]; -} stbi__zhuffman; - -stbi_inline static int stbi__bitreverse16(int n) -{ - n = ((n & 0xAAAA) >> 1) | ((n & 0x5555) << 1); - n = ((n & 0xCCCC) >> 2) | ((n & 0x3333) << 2); - n = ((n & 0xF0F0) >> 4) | ((n & 0x0F0F) << 4); - n = ((n & 0xFF00) >> 8) | ((n & 0x00FF) << 8); - return n; -} - -stbi_inline static int stbi__bit_reverse(int v, int bits) -{ - STBI_ASSERT(bits <= 16); - // to bit reverse n bits, reverse 16 and shift - // e.g. 11 bits, bit reverse and shift away 5 - return stbi__bitreverse16(v) >> (16-bits); -} - -static int stbi__zbuild_huffman(stbi__zhuffman *z, const stbi_uc *sizelist, int num) -{ - int i,k=0; - int code, next_code[16], sizes[17]; - - // DEFLATE spec for generating codes - memset(sizes, 0, sizeof(sizes)); - memset(z->fast, 0, sizeof(z->fast)); - for (i=0; i < num; ++i) - ++sizes[sizelist[i]]; - sizes[0] = 0; - for (i=1; i < 16; ++i) - if (sizes[i] > (1 << i)) - return stbi__err("bad sizes", "Corrupt PNG"); - code = 0; - for (i=1; i < 16; ++i) { - next_code[i] = code; - z->firstcode[i] = (stbi__uint16) code; - z->firstsymbol[i] = (stbi__uint16) k; - code = (code + sizes[i]); - if (sizes[i]) - if (code-1 >= (1 << i)) return stbi__err("bad codelengths","Corrupt PNG"); - z->maxcode[i] = code << (16-i); // preshift for inner loop - code <<= 1; - k += sizes[i]; - } - z->maxcode[16] = 0x10000; // sentinel - for (i=0; i < num; ++i) { - int s = sizelist[i]; - if (s) { - int c = next_code[s] - z->firstcode[s] + z->firstsymbol[s]; - stbi__uint16 fastv = (stbi__uint16) ((s << 9) | i); - z->size [c] = (stbi_uc ) s; - z->value[c] = (stbi__uint16) i; - if (s <= STBI__ZFAST_BITS) { - int j = stbi__bit_reverse(next_code[s],s); - while (j < (1 << STBI__ZFAST_BITS)) { - z->fast[j] = fastv; - j += (1 << s); - } - } - ++next_code[s]; - } - } - return 1; -} - -// zlib-from-memory implementation for PNG reading -// because PNG allows splitting the zlib stream arbitrarily, -// and it's annoying structurally to have PNG call ZLIB call PNG, -// we require PNG read all the IDATs and combine them into a single -// memory buffer - -typedef struct -{ - stbi_uc *zbuffer, *zbuffer_end; - int num_bits; - int hit_zeof_once; - stbi__uint32 code_buffer; - - char *zout; - char *zout_start; - char *zout_end; - int z_expandable; - - stbi__zhuffman z_length, z_distance; -} stbi__zbuf; - -stbi_inline static int stbi__zeof(stbi__zbuf *z) -{ - return (z->zbuffer >= z->zbuffer_end); -} - -stbi_inline static stbi_uc stbi__zget8(stbi__zbuf *z) -{ - return stbi__zeof(z) ? 0 : *z->zbuffer++; -} - -static void stbi__fill_bits(stbi__zbuf *z) -{ - do { - if (z->code_buffer >= (1U << z->num_bits)) { - z->zbuffer = z->zbuffer_end; /* treat this as EOF so we fail. */ - return; - } - z->code_buffer |= (unsigned int) stbi__zget8(z) << z->num_bits; - z->num_bits += 8; - } while (z->num_bits <= 24); -} - -stbi_inline static unsigned int stbi__zreceive(stbi__zbuf *z, int n) -{ - unsigned int k; - if (z->num_bits < n) stbi__fill_bits(z); - k = z->code_buffer & ((1 << n) - 1); - z->code_buffer >>= n; - z->num_bits -= n; - return k; -} - -static int stbi__zhuffman_decode_slowpath(stbi__zbuf *a, stbi__zhuffman *z) -{ - int b,s,k; - // not resolved by fast table, so compute it the slow way - // use jpeg approach, which requires MSbits at top - k = stbi__bit_reverse(a->code_buffer, 16); - for (s=STBI__ZFAST_BITS+1; ; ++s) - if (k < z->maxcode[s]) - break; - if (s >= 16) return -1; // invalid code! - // code size is s, so: - b = (k >> (16-s)) - z->firstcode[s] + z->firstsymbol[s]; - if (b >= STBI__ZNSYMS) return -1; // some data was corrupt somewhere! - if (z->size[b] != s) return -1; // was originally an assert, but report failure instead. - a->code_buffer >>= s; - a->num_bits -= s; - return z->value[b]; -} - -stbi_inline static int stbi__zhuffman_decode(stbi__zbuf *a, stbi__zhuffman *z) -{ - int b,s; - if (a->num_bits < 16) { - if (stbi__zeof(a)) { - if (!a->hit_zeof_once) { - // This is the first time we hit eof, insert 16 extra padding btis - // to allow us to keep going; if we actually consume any of them - // though, that is invalid data. This is caught later. - a->hit_zeof_once = 1; - a->num_bits += 16; // add 16 implicit zero bits - } else { - // We already inserted our extra 16 padding bits and are again - // out, this stream is actually prematurely terminated. - return -1; - } - } else { - stbi__fill_bits(a); - } - } - b = z->fast[a->code_buffer & STBI__ZFAST_MASK]; - if (b) { - s = b >> 9; - a->code_buffer >>= s; - a->num_bits -= s; - return b & 511; - } - return stbi__zhuffman_decode_slowpath(a, z); -} - -static int stbi__zexpand(stbi__zbuf *z, char *zout, int n) // need to make room for n bytes -{ - char *q; - unsigned int cur, limit, old_limit; - z->zout = zout; - if (!z->z_expandable) return stbi__err("output buffer limit","Corrupt PNG"); - cur = (unsigned int) (z->zout - z->zout_start); - limit = old_limit = (unsigned) (z->zout_end - z->zout_start); - if (UINT_MAX - cur < (unsigned) n) return stbi__err("outofmem", "Out of memory"); - while (cur + n > limit) { - if(limit > UINT_MAX / 2) return stbi__err("outofmem", "Out of memory"); - limit *= 2; - } - q = (char *) STBI_REALLOC_SIZED(z->zout_start, old_limit, limit); - STBI_NOTUSED(old_limit); - if (q == NULL) return stbi__err("outofmem", "Out of memory"); - z->zout_start = q; - z->zout = q + cur; - z->zout_end = q + limit; - return 1; -} - -static const int stbi__zlength_base[31] = { - 3,4,5,6,7,8,9,10,11,13, - 15,17,19,23,27,31,35,43,51,59, - 67,83,99,115,131,163,195,227,258,0,0 }; - -static const int stbi__zlength_extra[31]= -{ 0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0 }; - -static const int stbi__zdist_base[32] = { 1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193, -257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0}; - -static const int stbi__zdist_extra[32] = -{ 0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; - -static int stbi__parse_huffman_block(stbi__zbuf *a) -{ - char *zout = a->zout; - for(;;) { - int z = stbi__zhuffman_decode(a, &a->z_length); - if (z < 256) { - if (z < 0) return stbi__err("bad huffman code","Corrupt PNG"); // error in huffman codes - if (zout >= a->zout_end) { - if (!stbi__zexpand(a, zout, 1)) return 0; - zout = a->zout; - } - *zout++ = (char) z; - } else { - stbi_uc *p; - int len,dist; - if (z == 256) { - a->zout = zout; - if (a->hit_zeof_once && a->num_bits < 16) { - // The first time we hit zeof, we inserted 16 extra zero bits into our bit - // buffer so the decoder can just do its speculative decoding. But if we - // actually consumed any of those bits (which is the case when num_bits < 16), - // the stream actually read past the end so it is malformed. - return stbi__err("unexpected end","Corrupt PNG"); - } - return 1; - } - if (z >= 286) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, length codes 286 and 287 must not appear in compressed data - z -= 257; - len = stbi__zlength_base[z]; - if (stbi__zlength_extra[z]) len += stbi__zreceive(a, stbi__zlength_extra[z]); - z = stbi__zhuffman_decode(a, &a->z_distance); - if (z < 0 || z >= 30) return stbi__err("bad huffman code","Corrupt PNG"); // per DEFLATE, distance codes 30 and 31 must not appear in compressed data - dist = stbi__zdist_base[z]; - if (stbi__zdist_extra[z]) dist += stbi__zreceive(a, stbi__zdist_extra[z]); - if (zout - a->zout_start < dist) return stbi__err("bad dist","Corrupt PNG"); - if (len > a->zout_end - zout) { - if (!stbi__zexpand(a, zout, len)) return 0; - zout = a->zout; - } - p = (stbi_uc *) (zout - dist); - if (dist == 1) { // run of one byte; common in images. - stbi_uc v = *p; - if (len) { do *zout++ = v; while (--len); } - } else { - if (len) { do *zout++ = *p++; while (--len); } - } - } - } -} - -static int stbi__compute_huffman_codes(stbi__zbuf *a) -{ - static const stbi_uc length_dezigzag[19] = { 16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15 }; - stbi__zhuffman z_codelength; - stbi_uc lencodes[286+32+137];//padding for maximum single op - stbi_uc codelength_sizes[19]; - int i,n; - - int hlit = stbi__zreceive(a,5) + 257; - int hdist = stbi__zreceive(a,5) + 1; - int hclen = stbi__zreceive(a,4) + 4; - int ntot = hlit + hdist; - - memset(codelength_sizes, 0, sizeof(codelength_sizes)); - for (i=0; i < hclen; ++i) { - int s = stbi__zreceive(a,3); - codelength_sizes[length_dezigzag[i]] = (stbi_uc) s; - } - if (!stbi__zbuild_huffman(&z_codelength, codelength_sizes, 19)) return 0; - - n = 0; - while (n < ntot) { - int c = stbi__zhuffman_decode(a, &z_codelength); - if (c < 0 || c >= 19) return stbi__err("bad codelengths", "Corrupt PNG"); - if (c < 16) - lencodes[n++] = (stbi_uc) c; - else { - stbi_uc fill = 0; - if (c == 16) { - c = stbi__zreceive(a,2)+3; - if (n == 0) return stbi__err("bad codelengths", "Corrupt PNG"); - fill = lencodes[n-1]; - } else if (c == 17) { - c = stbi__zreceive(a,3)+3; - } else if (c == 18) { - c = stbi__zreceive(a,7)+11; - } else { - return stbi__err("bad codelengths", "Corrupt PNG"); - } - if (ntot - n < c) return stbi__err("bad codelengths", "Corrupt PNG"); - memset(lencodes+n, fill, c); - n += c; - } - } - if (n != ntot) return stbi__err("bad codelengths","Corrupt PNG"); - if (!stbi__zbuild_huffman(&a->z_length, lencodes, hlit)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, lencodes+hlit, hdist)) return 0; - return 1; -} - -static int stbi__parse_uncompressed_block(stbi__zbuf *a) -{ - stbi_uc header[4]; - int len,nlen,k; - if (a->num_bits & 7) - stbi__zreceive(a, a->num_bits & 7); // discard - // drain the bit-packed data into header - k = 0; - while (a->num_bits > 0) { - header[k++] = (stbi_uc) (a->code_buffer & 255); // suppress MSVC run-time check - a->code_buffer >>= 8; - a->num_bits -= 8; - } - if (a->num_bits < 0) return stbi__err("zlib corrupt","Corrupt PNG"); - // now fill header the normal way - while (k < 4) - header[k++] = stbi__zget8(a); - len = header[1] * 256 + header[0]; - nlen = header[3] * 256 + header[2]; - if (nlen != (len ^ 0xffff)) return stbi__err("zlib corrupt","Corrupt PNG"); - if (a->zbuffer + len > a->zbuffer_end) return stbi__err("read past buffer","Corrupt PNG"); - if (a->zout + len > a->zout_end) - if (!stbi__zexpand(a, a->zout, len)) return 0; - memcpy(a->zout, a->zbuffer, len); - a->zbuffer += len; - a->zout += len; - return 1; -} - -static int stbi__parse_zlib_header(stbi__zbuf *a) -{ - int cmf = stbi__zget8(a); - int cm = cmf & 15; - /* int cinfo = cmf >> 4; */ - int flg = stbi__zget8(a); - if (stbi__zeof(a)) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec - if ((cmf*256+flg) % 31 != 0) return stbi__err("bad zlib header","Corrupt PNG"); // zlib spec - if (flg & 32) return stbi__err("no preset dict","Corrupt PNG"); // preset dictionary not allowed in png - if (cm != 8) return stbi__err("bad compression","Corrupt PNG"); // DEFLATE required for png - // window = 1 << (8 + cinfo)... but who cares, we fully buffer output - return 1; -} - -static const stbi_uc stbi__zdefault_length[STBI__ZNSYMS] = -{ - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, 9,9,9,9,9,9,9,9,9,9,9,9,9,9,9,9, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, 7,7,7,7,7,7,7,7,8,8,8,8,8,8,8,8 -}; -static const stbi_uc stbi__zdefault_distance[32] = -{ - 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5 -}; -/* -Init algorithm: -{ - int i; // use <= to match clearly with spec - for (i=0; i <= 143; ++i) stbi__zdefault_length[i] = 8; - for ( ; i <= 255; ++i) stbi__zdefault_length[i] = 9; - for ( ; i <= 279; ++i) stbi__zdefault_length[i] = 7; - for ( ; i <= 287; ++i) stbi__zdefault_length[i] = 8; - - for (i=0; i <= 31; ++i) stbi__zdefault_distance[i] = 5; -} -*/ - -static int stbi__parse_zlib(stbi__zbuf *a, int parse_header) -{ - int final, type; - if (parse_header) - if (!stbi__parse_zlib_header(a)) return 0; - a->num_bits = 0; - a->code_buffer = 0; - a->hit_zeof_once = 0; - do { - final = stbi__zreceive(a,1); - type = stbi__zreceive(a,2); - if (type == 0) { - if (!stbi__parse_uncompressed_block(a)) return 0; - } else if (type == 3) { - return 0; - } else { - if (type == 1) { - // use fixed code lengths - if (!stbi__zbuild_huffman(&a->z_length , stbi__zdefault_length , STBI__ZNSYMS)) return 0; - if (!stbi__zbuild_huffman(&a->z_distance, stbi__zdefault_distance, 32)) return 0; - } else { - if (!stbi__compute_huffman_codes(a)) return 0; - } - if (!stbi__parse_huffman_block(a)) return 0; - } - } while (!final); - return 1; -} - -static int stbi__do_zlib(stbi__zbuf *a, char *obuf, int olen, int exp, int parse_header) -{ - a->zout_start = obuf; - a->zout = obuf; - a->zout_end = obuf + olen; - a->z_expandable = exp; - - return stbi__parse_zlib(a, parse_header); -} - -STBIDEF char *stbi_zlib_decode_malloc_guesssize(const char *buffer, int len, int initial_size, int *outlen) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, 1)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF char *stbi_zlib_decode_malloc(char const *buffer, int len, int *outlen) -{ - return stbi_zlib_decode_malloc_guesssize(buffer, len, 16384, outlen); -} - -STBIDEF char *stbi_zlib_decode_malloc_guesssize_headerflag(const char *buffer, int len, int initial_size, int *outlen, int parse_header) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(initial_size); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer + len; - if (stbi__do_zlib(&a, p, initial_size, 1, parse_header)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_buffer(char *obuffer, int olen, char const *ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc *) ibuffer; - a.zbuffer_end = (stbi_uc *) ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 1)) - return (int) (a.zout - a.zout_start); - else - return -1; -} - -STBIDEF char *stbi_zlib_decode_noheader_malloc(char const *buffer, int len, int *outlen) -{ - stbi__zbuf a; - char *p = (char *) stbi__malloc(16384); - if (p == NULL) return NULL; - a.zbuffer = (stbi_uc *) buffer; - a.zbuffer_end = (stbi_uc *) buffer+len; - if (stbi__do_zlib(&a, p, 16384, 1, 0)) { - if (outlen) *outlen = (int) (a.zout - a.zout_start); - return a.zout_start; - } else { - STBI_FREE(a.zout_start); - return NULL; - } -} - -STBIDEF int stbi_zlib_decode_noheader_buffer(char *obuffer, int olen, const char *ibuffer, int ilen) -{ - stbi__zbuf a; - a.zbuffer = (stbi_uc *) ibuffer; - a.zbuffer_end = (stbi_uc *) ibuffer + ilen; - if (stbi__do_zlib(&a, obuffer, olen, 0, 0)) - return (int) (a.zout - a.zout_start); - else - return -1; -} -#endif - -// public domain "baseline" PNG decoder v0.10 Sean Barrett 2006-11-18 -// simple implementation -// - only 8-bit samples -// - no CRC checking -// - allocates lots of intermediate memory -// - avoids problem of streaming data between subsystems -// - avoids explicit window management -// performance -// - uses stb_zlib, a PD zlib implementation with fast huffman decoding - -#ifndef STBI_NO_PNG -typedef struct -{ - stbi__uint32 length; - stbi__uint32 type; -} stbi__pngchunk; - -static stbi__pngchunk stbi__get_chunk_header(stbi__context *s) -{ - stbi__pngchunk c; - c.length = stbi__get32be(s); - c.type = stbi__get32be(s); - return c; -} - -static int stbi__check_png_header(stbi__context *s) -{ - static const stbi_uc png_sig[8] = { 137,80,78,71,13,10,26,10 }; - int i; - for (i=0; i < 8; ++i) - if (stbi__get8(s) != png_sig[i]) return stbi__err("bad png sig","Not a PNG"); - return 1; -} - -typedef struct -{ - stbi__context *s; - stbi_uc *idata, *expanded, *out; - int depth; -} stbi__png; - - -enum { - STBI__F_none=0, - STBI__F_sub=1, - STBI__F_up=2, - STBI__F_avg=3, - STBI__F_paeth=4, - // synthetic filter used for first scanline to avoid needing a dummy row of 0s - STBI__F_avg_first -}; - -static stbi_uc first_row_filter[5] = -{ - STBI__F_none, - STBI__F_sub, - STBI__F_none, - STBI__F_avg_first, - STBI__F_sub // Paeth with b=c=0 turns out to be equivalent to sub -}; - -static int stbi__paeth(int a, int b, int c) -{ - // This formulation looks very different from the reference in the PNG spec, but is - // actually equivalent and has favorable data dependencies and admits straightforward - // generation of branch-free code, which helps performance significantly. - int thresh = c*3 - (a + b); - int lo = a < b ? a : b; - int hi = a < b ? b : a; - int t0 = (hi <= thresh) ? lo : c; - int t1 = (thresh <= lo) ? hi : t0; - return t1; -} - -static const stbi_uc stbi__depth_scale_table[9] = { 0, 0xff, 0x55, 0, 0x11, 0,0,0, 0x01 }; - -// adds an extra all-255 alpha channel -// dest == src is legal -// img_n must be 1 or 3 -static void stbi__create_png_alpha_expand8(stbi_uc *dest, stbi_uc *src, stbi__uint32 x, int img_n) -{ - int i; - // must process data backwards since we allow dest==src - if (img_n == 1) { - for (i=x-1; i >= 0; --i) { - dest[i*2+1] = 255; - dest[i*2+0] = src[i]; - } - } else { - STBI_ASSERT(img_n == 3); - for (i=x-1; i >= 0; --i) { - dest[i*4+3] = 255; - dest[i*4+2] = src[i*3+2]; - dest[i*4+1] = src[i*3+1]; - dest[i*4+0] = src[i*3+0]; - } - } -} - -// create the png data from post-deflated data -static int stbi__create_png_image_raw(stbi__png *a, stbi_uc *raw, stbi__uint32 raw_len, int out_n, stbi__uint32 x, stbi__uint32 y, int depth, int color) -{ - int bytes = (depth == 16 ? 2 : 1); - stbi__context *s = a->s; - stbi__uint32 i,j,stride = x*out_n*bytes; - stbi__uint32 img_len, img_width_bytes; - stbi_uc *filter_buf; - int all_ok = 1; - int k; - int img_n = s->img_n; // copy it into a local for later - - int output_bytes = out_n*bytes; - int filter_bytes = img_n*bytes; - int width = x; - - STBI_ASSERT(out_n == s->img_n || out_n == s->img_n+1); - a->out = (stbi_uc *) stbi__malloc_mad3(x, y, output_bytes, 0); // extra bytes to write off the end into - if (!a->out) return stbi__err("outofmem", "Out of memory"); - - // note: error exits here don't need to clean up a->out individually, - // stbi__do_png always does on error. - if (!stbi__mad3sizes_valid(img_n, x, depth, 7)) return stbi__err("too large", "Corrupt PNG"); - img_width_bytes = (((img_n * x * depth) + 7) >> 3); - if (!stbi__mad2sizes_valid(img_width_bytes, y, img_width_bytes)) return stbi__err("too large", "Corrupt PNG"); - img_len = (img_width_bytes + 1) * y; - - // we used to check for exact match between raw_len and img_len on non-interlaced PNGs, - // but issue #276 reported a PNG in the wild that had extra data at the end (all zeros), - // so just check for raw_len < img_len always. - if (raw_len < img_len) return stbi__err("not enough pixels","Corrupt PNG"); - - // Allocate two scan lines worth of filter workspace buffer. - filter_buf = (stbi_uc *) stbi__malloc_mad2(img_width_bytes, 2, 0); - if (!filter_buf) return stbi__err("outofmem", "Out of memory"); - - // Filtering for low-bit-depth images - if (depth < 8) { - filter_bytes = 1; - width = img_width_bytes; - } - - for (j=0; j < y; ++j) { - // cur/prior filter buffers alternate - stbi_uc *cur = filter_buf + (j & 1)*img_width_bytes; - stbi_uc *prior = filter_buf + (~j & 1)*img_width_bytes; - stbi_uc *dest = a->out + stride*j; - int nk = width * filter_bytes; - int filter = *raw++; - - // check filter type - if (filter > 4) { - all_ok = stbi__err("invalid filter","Corrupt PNG"); - break; - } - - // if first row, use special filter that doesn't sample previous row - if (j == 0) filter = first_row_filter[filter]; - - // perform actual filtering - switch (filter) { - case STBI__F_none: - memcpy(cur, raw, nk); - break; - case STBI__F_sub: - memcpy(cur, raw, filter_bytes); - for (k = filter_bytes; k < nk; ++k) - cur[k] = STBI__BYTECAST(raw[k] + cur[k-filter_bytes]); - break; - case STBI__F_up: - for (k = 0; k < nk; ++k) - cur[k] = STBI__BYTECAST(raw[k] + prior[k]); - break; - case STBI__F_avg: - for (k = 0; k < filter_bytes; ++k) - cur[k] = STBI__BYTECAST(raw[k] + (prior[k]>>1)); - for (k = filter_bytes; k < nk; ++k) - cur[k] = STBI__BYTECAST(raw[k] + ((prior[k] + cur[k-filter_bytes])>>1)); - break; - case STBI__F_paeth: - for (k = 0; k < filter_bytes; ++k) - cur[k] = STBI__BYTECAST(raw[k] + prior[k]); // prior[k] == stbi__paeth(0,prior[k],0) - for (k = filter_bytes; k < nk; ++k) - cur[k] = STBI__BYTECAST(raw[k] + stbi__paeth(cur[k-filter_bytes], prior[k], prior[k-filter_bytes])); - break; - case STBI__F_avg_first: - memcpy(cur, raw, filter_bytes); - for (k = filter_bytes; k < nk; ++k) - cur[k] = STBI__BYTECAST(raw[k] + (cur[k-filter_bytes] >> 1)); - break; - } - - raw += nk; - - // expand decoded bits in cur to dest, also adding an extra alpha channel if desired - if (depth < 8) { - stbi_uc scale = (color == 0) ? stbi__depth_scale_table[depth] : 1; // scale grayscale values to 0..255 range - stbi_uc *in = cur; - stbi_uc *out = dest; - stbi_uc inb = 0; - stbi__uint32 nsmp = x*img_n; - - // expand bits to bytes first - if (depth == 4) { - for (i=0; i < nsmp; ++i) { - if ((i & 1) == 0) inb = *in++; - *out++ = scale * (inb >> 4); - inb <<= 4; - } - } else if (depth == 2) { - for (i=0; i < nsmp; ++i) { - if ((i & 3) == 0) inb = *in++; - *out++ = scale * (inb >> 6); - inb <<= 2; - } - } else { - STBI_ASSERT(depth == 1); - for (i=0; i < nsmp; ++i) { - if ((i & 7) == 0) inb = *in++; - *out++ = scale * (inb >> 7); - inb <<= 1; - } - } - - // insert alpha=255 values if desired - if (img_n != out_n) - stbi__create_png_alpha_expand8(dest, dest, x, img_n); - } else if (depth == 8) { - if (img_n == out_n) - memcpy(dest, cur, x*img_n); - else - stbi__create_png_alpha_expand8(dest, cur, x, img_n); - } else if (depth == 16) { - // convert the image data from big-endian to platform-native - stbi__uint16 *dest16 = (stbi__uint16*)dest; - stbi__uint32 nsmp = x*img_n; - - if (img_n == out_n) { - for (i = 0; i < nsmp; ++i, ++dest16, cur += 2) - *dest16 = (cur[0] << 8) | cur[1]; - } else { - STBI_ASSERT(img_n+1 == out_n); - if (img_n == 1) { - for (i = 0; i < x; ++i, dest16 += 2, cur += 2) { - dest16[0] = (cur[0] << 8) | cur[1]; - dest16[1] = 0xffff; - } - } else { - STBI_ASSERT(img_n == 3); - for (i = 0; i < x; ++i, dest16 += 4, cur += 6) { - dest16[0] = (cur[0] << 8) | cur[1]; - dest16[1] = (cur[2] << 8) | cur[3]; - dest16[2] = (cur[4] << 8) | cur[5]; - dest16[3] = 0xffff; - } - } - } - } - } - - STBI_FREE(filter_buf); - if (!all_ok) return 0; - - return 1; -} - -static int stbi__create_png_image(stbi__png *a, stbi_uc *image_data, stbi__uint32 image_data_len, int out_n, int depth, int color, int interlaced) -{ - int bytes = (depth == 16 ? 2 : 1); - int out_bytes = out_n * bytes; - stbi_uc *final; - int p; - if (!interlaced) - return stbi__create_png_image_raw(a, image_data, image_data_len, out_n, a->s->img_x, a->s->img_y, depth, color); - - // de-interlacing - final = (stbi_uc *) stbi__malloc_mad3(a->s->img_x, a->s->img_y, out_bytes, 0); - if (!final) return stbi__err("outofmem", "Out of memory"); - for (p=0; p < 7; ++p) { - int xorig[] = { 0,4,0,2,0,1,0 }; - int yorig[] = { 0,0,4,0,2,0,1 }; - int xspc[] = { 8,8,4,4,2,2,1 }; - int yspc[] = { 8,8,8,4,4,2,2 }; - int i,j,x,y; - // pass1_x[4] = 0, pass1_x[5] = 1, pass1_x[12] = 1 - x = (a->s->img_x - xorig[p] + xspc[p]-1) / xspc[p]; - y = (a->s->img_y - yorig[p] + yspc[p]-1) / yspc[p]; - if (x && y) { - stbi__uint32 img_len = ((((a->s->img_n * x * depth) + 7) >> 3) + 1) * y; - if (!stbi__create_png_image_raw(a, image_data, image_data_len, out_n, x, y, depth, color)) { - STBI_FREE(final); - return 0; - } - for (j=0; j < y; ++j) { - for (i=0; i < x; ++i) { - int out_y = j*yspc[p]+yorig[p]; - int out_x = i*xspc[p]+xorig[p]; - memcpy(final + out_y*a->s->img_x*out_bytes + out_x*out_bytes, - a->out + (j*x+i)*out_bytes, out_bytes); - } - } - STBI_FREE(a->out); - image_data += img_len; - image_data_len -= img_len; - } - } - a->out = final; - - return 1; -} - -static int stbi__compute_transparency(stbi__png *z, stbi_uc tc[3], int out_n) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc *p = z->out; - - // compute color-based transparency, assuming we've - // already got 255 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); - - if (out_n == 2) { - for (i=0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 255); - p += 2; - } - } else { - for (i=0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; -} - -static int stbi__compute_transparency16(stbi__png *z, stbi__uint16 tc[3], int out_n) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi__uint16 *p = (stbi__uint16*) z->out; - - // compute color-based transparency, assuming we've - // already got 65535 as the alpha value in the output - STBI_ASSERT(out_n == 2 || out_n == 4); - - if (out_n == 2) { - for (i = 0; i < pixel_count; ++i) { - p[1] = (p[0] == tc[0] ? 0 : 65535); - p += 2; - } - } else { - for (i = 0; i < pixel_count; ++i) { - if (p[0] == tc[0] && p[1] == tc[1] && p[2] == tc[2]) - p[3] = 0; - p += 4; - } - } - return 1; -} - -static int stbi__expand_png_palette(stbi__png *a, stbi_uc *palette, int len, int pal_img_n) -{ - stbi__uint32 i, pixel_count = a->s->img_x * a->s->img_y; - stbi_uc *p, *temp_out, *orig = a->out; - - p = (stbi_uc *) stbi__malloc_mad2(pixel_count, pal_img_n, 0); - if (p == NULL) return stbi__err("outofmem", "Out of memory"); - - // between here and free(out) below, exitting would leak - temp_out = p; - - if (pal_img_n == 3) { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p += 3; - } - } else { - for (i=0; i < pixel_count; ++i) { - int n = orig[i]*4; - p[0] = palette[n ]; - p[1] = palette[n+1]; - p[2] = palette[n+2]; - p[3] = palette[n+3]; - p += 4; - } - } - STBI_FREE(a->out); - a->out = temp_out; - - STBI_NOTUSED(len); - - return 1; -} - -static int stbi__unpremultiply_on_load_global = 0; -static int stbi__de_iphone_flag_global = 0; - -STBIDEF void stbi_set_unpremultiply_on_load(int flag_true_if_should_unpremultiply) -{ - stbi__unpremultiply_on_load_global = flag_true_if_should_unpremultiply; -} - -STBIDEF void stbi_convert_iphone_png_to_rgb(int flag_true_if_should_convert) -{ - stbi__de_iphone_flag_global = flag_true_if_should_convert; -} - -#ifndef STBI_THREAD_LOCAL -#define stbi__unpremultiply_on_load stbi__unpremultiply_on_load_global -#define stbi__de_iphone_flag stbi__de_iphone_flag_global -#else -static STBI_THREAD_LOCAL int stbi__unpremultiply_on_load_local, stbi__unpremultiply_on_load_set; -static STBI_THREAD_LOCAL int stbi__de_iphone_flag_local, stbi__de_iphone_flag_set; - -STBIDEF void stbi_set_unpremultiply_on_load_thread(int flag_true_if_should_unpremultiply) -{ - stbi__unpremultiply_on_load_local = flag_true_if_should_unpremultiply; - stbi__unpremultiply_on_load_set = 1; -} - -STBIDEF void stbi_convert_iphone_png_to_rgb_thread(int flag_true_if_should_convert) -{ - stbi__de_iphone_flag_local = flag_true_if_should_convert; - stbi__de_iphone_flag_set = 1; -} - -#define stbi__unpremultiply_on_load (stbi__unpremultiply_on_load_set \ - ? stbi__unpremultiply_on_load_local \ - : stbi__unpremultiply_on_load_global) -#define stbi__de_iphone_flag (stbi__de_iphone_flag_set \ - ? stbi__de_iphone_flag_local \ - : stbi__de_iphone_flag_global) -#endif // STBI_THREAD_LOCAL - -static void stbi__de_iphone(stbi__png *z) -{ - stbi__context *s = z->s; - stbi__uint32 i, pixel_count = s->img_x * s->img_y; - stbi_uc *p = z->out; - - if (s->img_out_n == 3) { // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 3; - } - } else { - STBI_ASSERT(s->img_out_n == 4); - if (stbi__unpremultiply_on_load) { - // convert bgr to rgb and unpremultiply - for (i=0; i < pixel_count; ++i) { - stbi_uc a = p[3]; - stbi_uc t = p[0]; - if (a) { - stbi_uc half = a / 2; - p[0] = (p[2] * 255 + half) / a; - p[1] = (p[1] * 255 + half) / a; - p[2] = ( t * 255 + half) / a; - } else { - p[0] = p[2]; - p[2] = t; - } - p += 4; - } - } else { - // convert bgr to rgb - for (i=0; i < pixel_count; ++i) { - stbi_uc t = p[0]; - p[0] = p[2]; - p[2] = t; - p += 4; - } - } - } -} - -#define STBI__PNG_TYPE(a,b,c,d) (((unsigned) (a) << 24) + ((unsigned) (b) << 16) + ((unsigned) (c) << 8) + (unsigned) (d)) - -static int stbi__parse_png_file(stbi__png *z, int scan, int req_comp) -{ - stbi_uc palette[1024], pal_img_n=0; - stbi_uc has_trans=0, tc[3]={0}; - stbi__uint16 tc16[3]; - stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0; - int first=1,k,interlace=0, color=0, is_iphone=0; - stbi__context *s = z->s; - - z->expanded = NULL; - z->idata = NULL; - z->out = NULL; - - if (!stbi__check_png_header(s)) return 0; - - if (scan == STBI__SCAN_type) return 1; - - for (;;) { - stbi__pngchunk c = stbi__get_chunk_header(s); - switch (c.type) { - case STBI__PNG_TYPE('C','g','B','I'): - is_iphone = 1; - stbi__skip(s, c.length); - break; - case STBI__PNG_TYPE('I','H','D','R'): { - int comp,filter; - if (!first) return stbi__err("multiple IHDR","Corrupt PNG"); - first = 0; - if (c.length != 13) return stbi__err("bad IHDR len","Corrupt PNG"); - s->img_x = stbi__get32be(s); - s->img_y = stbi__get32be(s); - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - z->depth = stbi__get8(s); if (z->depth != 1 && z->depth != 2 && z->depth != 4 && z->depth != 8 && z->depth != 16) return stbi__err("1/2/4/8/16-bit only","PNG not supported: 1/2/4/8/16-bit only"); - color = stbi__get8(s); if (color > 6) return stbi__err("bad ctype","Corrupt PNG"); - if (color == 3 && z->depth == 16) return stbi__err("bad ctype","Corrupt PNG"); - if (color == 3) pal_img_n = 3; else if (color & 1) return stbi__err("bad ctype","Corrupt PNG"); - comp = stbi__get8(s); if (comp) return stbi__err("bad comp method","Corrupt PNG"); - filter= stbi__get8(s); if (filter) return stbi__err("bad filter method","Corrupt PNG"); - interlace = stbi__get8(s); if (interlace>1) return stbi__err("bad interlace method","Corrupt PNG"); - if (!s->img_x || !s->img_y) return stbi__err("0-pixel image","Corrupt PNG"); - if (!pal_img_n) { - s->img_n = (color & 2 ? 3 : 1) + (color & 4 ? 1 : 0); - if ((1 << 30) / s->img_x / s->img_n < s->img_y) return stbi__err("too large", "Image too large to decode"); - } else { - // if paletted, then pal_n is our final components, and - // img_n is # components to decompress/filter. - s->img_n = 1; - if ((1 << 30) / s->img_x / 4 < s->img_y) return stbi__err("too large","Corrupt PNG"); - } - // even with SCAN_header, have to scan to see if we have a tRNS - break; - } - - case STBI__PNG_TYPE('P','L','T','E'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (c.length > 256*3) return stbi__err("invalid PLTE","Corrupt PNG"); - pal_len = c.length / 3; - if (pal_len * 3 != c.length) return stbi__err("invalid PLTE","Corrupt PNG"); - for (i=0; i < pal_len; ++i) { - palette[i*4+0] = stbi__get8(s); - palette[i*4+1] = stbi__get8(s); - palette[i*4+2] = stbi__get8(s); - palette[i*4+3] = 255; - } - break; - } - - case STBI__PNG_TYPE('t','R','N','S'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (z->idata) return stbi__err("tRNS after IDAT","Corrupt PNG"); - if (pal_img_n) { - if (scan == STBI__SCAN_header) { s->img_n = 4; return 1; } - if (pal_len == 0) return stbi__err("tRNS before PLTE","Corrupt PNG"); - if (c.length > pal_len) return stbi__err("bad tRNS len","Corrupt PNG"); - pal_img_n = 4; - for (i=0; i < c.length; ++i) - palette[i*4+3] = stbi__get8(s); - } else { - if (!(s->img_n & 1)) return stbi__err("tRNS with alpha","Corrupt PNG"); - if (c.length != (stbi__uint32) s->img_n*2) return stbi__err("bad tRNS len","Corrupt PNG"); - has_trans = 1; - // non-paletted with tRNS = constant alpha. if header-scanning, we can stop now. - if (scan == STBI__SCAN_header) { ++s->img_n; return 1; } - if (z->depth == 16) { - for (k = 0; k < s->img_n && k < 3; ++k) // extra loop test to suppress false GCC warning - tc16[k] = (stbi__uint16)stbi__get16be(s); // copy the values as-is - } else { - for (k = 0; k < s->img_n && k < 3; ++k) - tc[k] = (stbi_uc)(stbi__get16be(s) & 255) * stbi__depth_scale_table[z->depth]; // non 8-bit images will be larger - } - } - break; - } - - case STBI__PNG_TYPE('I','D','A','T'): { - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (pal_img_n && !pal_len) return stbi__err("no PLTE","Corrupt PNG"); - if (scan == STBI__SCAN_header) { - // header scan definitely stops at first IDAT - if (pal_img_n) - s->img_n = pal_img_n; - return 1; - } - if (c.length > (1u << 30)) return stbi__err("IDAT size limit", "IDAT section larger than 2^30 bytes"); - if ((int)(ioff + c.length) < (int)ioff) return 0; - if (ioff + c.length > idata_limit) { - stbi__uint32 idata_limit_old = idata_limit; - stbi_uc *p; - if (idata_limit == 0) idata_limit = c.length > 4096 ? c.length : 4096; - while (ioff + c.length > idata_limit) - idata_limit *= 2; - STBI_NOTUSED(idata_limit_old); - p = (stbi_uc *) STBI_REALLOC_SIZED(z->idata, idata_limit_old, idata_limit); if (p == NULL) return stbi__err("outofmem", "Out of memory"); - z->idata = p; - } - if (!stbi__getn(s, z->idata+ioff,c.length)) return stbi__err("outofdata","Corrupt PNG"); - ioff += c.length; - break; - } - - case STBI__PNG_TYPE('I','E','N','D'): { - stbi__uint32 raw_len, bpl; - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if (scan != STBI__SCAN_load) return 1; - if (z->idata == NULL) return stbi__err("no IDAT","Corrupt PNG"); - // initial guess for decoded data size to avoid unnecessary reallocs - bpl = (s->img_x * z->depth + 7) / 8; // bytes per line, per component - raw_len = bpl * s->img_y * s->img_n /* pixels */ + s->img_y /* filter mode per row */; - z->expanded = (stbi_uc *) stbi_zlib_decode_malloc_guesssize_headerflag((char *) z->idata, ioff, raw_len, (int *) &raw_len, !is_iphone); - if (z->expanded == NULL) return 0; // zlib should set error - STBI_FREE(z->idata); z->idata = NULL; - if ((req_comp == s->img_n+1 && req_comp != 3 && !pal_img_n) || has_trans) - s->img_out_n = s->img_n+1; - else - s->img_out_n = s->img_n; - if (!stbi__create_png_image(z, z->expanded, raw_len, s->img_out_n, z->depth, color, interlace)) return 0; - if (has_trans) { - if (z->depth == 16) { - if (!stbi__compute_transparency16(z, tc16, s->img_out_n)) return 0; - } else { - if (!stbi__compute_transparency(z, tc, s->img_out_n)) return 0; - } - } - if (is_iphone && stbi__de_iphone_flag && s->img_out_n > 2) - stbi__de_iphone(z); - if (pal_img_n) { - // pal_img_n == 3 or 4 - s->img_n = pal_img_n; // record the actual colors we had - s->img_out_n = pal_img_n; - if (req_comp >= 3) s->img_out_n = req_comp; - if (!stbi__expand_png_palette(z, palette, pal_len, s->img_out_n)) - return 0; - } else if (has_trans) { - // non-paletted image with tRNS -> source image has (constant) alpha - ++s->img_n; - } - STBI_FREE(z->expanded); z->expanded = NULL; - // end of PNG chunk, read and skip CRC - stbi__get32be(s); - return 1; - } - - default: - // if critical, fail - if (first) return stbi__err("first not IHDR", "Corrupt PNG"); - if ((c.type & (1 << 29)) == 0) { - #ifndef STBI_NO_FAILURE_STRINGS - // not threadsafe - static char invalid_chunk[] = "XXXX PNG chunk not known"; - invalid_chunk[0] = STBI__BYTECAST(c.type >> 24); - invalid_chunk[1] = STBI__BYTECAST(c.type >> 16); - invalid_chunk[2] = STBI__BYTECAST(c.type >> 8); - invalid_chunk[3] = STBI__BYTECAST(c.type >> 0); - #endif - return stbi__err(invalid_chunk, "PNG not supported: unknown PNG chunk type"); - } - stbi__skip(s, c.length); - break; - } - // end of PNG chunk, read and skip CRC - stbi__get32be(s); - } -} - -static void *stbi__do_png(stbi__png *p, int *x, int *y, int *n, int req_comp, stbi__result_info *ri) -{ - void *result=NULL; - if (req_comp < 0 || req_comp > 4) return stbi__errpuc("bad req_comp", "Internal error"); - if (stbi__parse_png_file(p, STBI__SCAN_load, req_comp)) { - if (p->depth <= 8) - ri->bits_per_channel = 8; - else if (p->depth == 16) - ri->bits_per_channel = 16; - else - return stbi__errpuc("bad bits_per_channel", "PNG not supported: unsupported color depth"); - result = p->out; - p->out = NULL; - if (req_comp && req_comp != p->s->img_out_n) { - if (ri->bits_per_channel == 8) - result = stbi__convert_format((unsigned char *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - else - result = stbi__convert_format16((stbi__uint16 *) result, p->s->img_out_n, req_comp, p->s->img_x, p->s->img_y); - p->s->img_out_n = req_comp; - if (result == NULL) return result; - } - *x = p->s->img_x; - *y = p->s->img_y; - if (n) *n = p->s->img_n; - } - STBI_FREE(p->out); p->out = NULL; - STBI_FREE(p->expanded); p->expanded = NULL; - STBI_FREE(p->idata); p->idata = NULL; - - return result; -} - -static void *stbi__png_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi__png p; - p.s = s; - return stbi__do_png(&p, x,y,comp,req_comp, ri); -} - -static int stbi__png_test(stbi__context *s) -{ - int r; - r = stbi__check_png_header(s); - stbi__rewind(s); - return r; -} - -static int stbi__png_info_raw(stbi__png *p, int *x, int *y, int *comp) -{ - if (!stbi__parse_png_file(p, STBI__SCAN_header, 0)) { - stbi__rewind( p->s ); - return 0; - } - if (x) *x = p->s->img_x; - if (y) *y = p->s->img_y; - if (comp) *comp = p->s->img_n; - return 1; -} - -static int stbi__png_info(stbi__context *s, int *x, int *y, int *comp) -{ - stbi__png p; - p.s = s; - return stbi__png_info_raw(&p, x, y, comp); -} - -static int stbi__png_is16(stbi__context *s) -{ - stbi__png p; - p.s = s; - if (!stbi__png_info_raw(&p, NULL, NULL, NULL)) - return 0; - if (p.depth != 16) { - stbi__rewind(p.s); - return 0; - } - return 1; -} -#endif - -// Microsoft/Windows BMP image - -#ifndef STBI_NO_BMP -static int stbi__bmp_test_raw(stbi__context *s) -{ - int r; - int sz; - if (stbi__get8(s) != 'B') return 0; - if (stbi__get8(s) != 'M') return 0; - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - stbi__get32le(s); // discard data offset - sz = stbi__get32le(s); - r = (sz == 12 || sz == 40 || sz == 56 || sz == 108 || sz == 124); - return r; -} - -static int stbi__bmp_test(stbi__context *s) -{ - int r = stbi__bmp_test_raw(s); - stbi__rewind(s); - return r; -} - - -// returns 0..31 for the highest set bit -static int stbi__high_bit(unsigned int z) -{ - int n=0; - if (z == 0) return -1; - if (z >= 0x10000) { n += 16; z >>= 16; } - if (z >= 0x00100) { n += 8; z >>= 8; } - if (z >= 0x00010) { n += 4; z >>= 4; } - if (z >= 0x00004) { n += 2; z >>= 2; } - if (z >= 0x00002) { n += 1;/* >>= 1;*/ } - return n; -} - -static int stbi__bitcount(unsigned int a) -{ - a = (a & 0x55555555) + ((a >> 1) & 0x55555555); // max 2 - a = (a & 0x33333333) + ((a >> 2) & 0x33333333); // max 4 - a = (a + (a >> 4)) & 0x0f0f0f0f; // max 8 per 4, now 8 bits - a = (a + (a >> 8)); // max 16 per 8 bits - a = (a + (a >> 16)); // max 32 per 8 bits - return a & 0xff; -} - -// extract an arbitrarily-aligned N-bit value (N=bits) -// from v, and then make it 8-bits long and fractionally -// extend it to full full range. -static int stbi__shiftsigned(unsigned int v, int shift, int bits) -{ - static unsigned int mul_table[9] = { - 0, - 0xff/*0b11111111*/, 0x55/*0b01010101*/, 0x49/*0b01001001*/, 0x11/*0b00010001*/, - 0x21/*0b00100001*/, 0x41/*0b01000001*/, 0x81/*0b10000001*/, 0x01/*0b00000001*/, - }; - static unsigned int shift_table[9] = { - 0, 0,0,1,0,2,4,6,0, - }; - if (shift < 0) - v <<= -shift; - else - v >>= shift; - STBI_ASSERT(v < 256); - v >>= (8-bits); - STBI_ASSERT(bits >= 0 && bits <= 8); - return (int) ((unsigned) v * mul_table[bits]) >> shift_table[bits]; -} - -typedef struct -{ - int bpp, offset, hsz; - unsigned int mr,mg,mb,ma, all_a; - int extra_read; -} stbi__bmp_data; - -static int stbi__bmp_set_mask_defaults(stbi__bmp_data *info, int compress) -{ - // BI_BITFIELDS specifies masks explicitly, don't override - if (compress == 3) - return 1; - - if (compress == 0) { - if (info->bpp == 16) { - info->mr = 31u << 10; - info->mg = 31u << 5; - info->mb = 31u << 0; - } else if (info->bpp == 32) { - info->mr = 0xffu << 16; - info->mg = 0xffu << 8; - info->mb = 0xffu << 0; - info->ma = 0xffu << 24; - info->all_a = 0; // if all_a is 0 at end, then we loaded alpha channel but it was all 0 - } else { - // otherwise, use defaults, which is all-0 - info->mr = info->mg = info->mb = info->ma = 0; - } - return 1; - } - return 0; // error -} - -static void *stbi__bmp_parse_header(stbi__context *s, stbi__bmp_data *info) -{ - int hsz; - if (stbi__get8(s) != 'B' || stbi__get8(s) != 'M') return stbi__errpuc("not BMP", "Corrupt BMP"); - stbi__get32le(s); // discard filesize - stbi__get16le(s); // discard reserved - stbi__get16le(s); // discard reserved - info->offset = stbi__get32le(s); - info->hsz = hsz = stbi__get32le(s); - info->mr = info->mg = info->mb = info->ma = 0; - info->extra_read = 14; - - if (info->offset < 0) return stbi__errpuc("bad BMP", "bad BMP"); - - if (hsz != 12 && hsz != 40 && hsz != 56 && hsz != 108 && hsz != 124) return stbi__errpuc("unknown BMP", "BMP type not supported: unknown"); - if (hsz == 12) { - s->img_x = stbi__get16le(s); - s->img_y = stbi__get16le(s); - } else { - s->img_x = stbi__get32le(s); - s->img_y = stbi__get32le(s); - } - if (stbi__get16le(s) != 1) return stbi__errpuc("bad BMP", "bad BMP"); - info->bpp = stbi__get16le(s); - if (hsz != 12) { - int compress = stbi__get32le(s); - if (compress == 1 || compress == 2) return stbi__errpuc("BMP RLE", "BMP type not supported: RLE"); - if (compress >= 4) return stbi__errpuc("BMP JPEG/PNG", "BMP type not supported: unsupported compression"); // this includes PNG/JPEG modes - if (compress == 3 && info->bpp != 16 && info->bpp != 32) return stbi__errpuc("bad BMP", "bad BMP"); // bitfields requires 16 or 32 bits/pixel - stbi__get32le(s); // discard sizeof - stbi__get32le(s); // discard hres - stbi__get32le(s); // discard vres - stbi__get32le(s); // discard colorsused - stbi__get32le(s); // discard max important - if (hsz == 40 || hsz == 56) { - if (hsz == 56) { - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - stbi__get32le(s); - } - if (info->bpp == 16 || info->bpp == 32) { - if (compress == 0) { - stbi__bmp_set_mask_defaults(info, compress); - } else if (compress == 3) { - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - info->extra_read += 12; - // not documented, but generated by photoshop and handled by mspaint - if (info->mr == info->mg && info->mg == info->mb) { - // ?!?!? - return stbi__errpuc("bad BMP", "bad BMP"); - } - } else - return stbi__errpuc("bad BMP", "bad BMP"); - } - } else { - // V4/V5 header - int i; - if (hsz != 108 && hsz != 124) - return stbi__errpuc("bad BMP", "bad BMP"); - info->mr = stbi__get32le(s); - info->mg = stbi__get32le(s); - info->mb = stbi__get32le(s); - info->ma = stbi__get32le(s); - if (compress != 3) // override mr/mg/mb unless in BI_BITFIELDS mode, as per docs - stbi__bmp_set_mask_defaults(info, compress); - stbi__get32le(s); // discard color space - for (i=0; i < 12; ++i) - stbi__get32le(s); // discard color space parameters - if (hsz == 124) { - stbi__get32le(s); // discard rendering intent - stbi__get32le(s); // discard offset of profile data - stbi__get32le(s); // discard size of profile data - stbi__get32le(s); // discard reserved - } - } - } - return (void *) 1; -} - - -static void *stbi__bmp_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi_uc *out; - unsigned int mr=0,mg=0,mb=0,ma=0, all_a; - stbi_uc pal[256][4]; - int psize=0,i,j,width; - int flip_vertically, pad, target; - stbi__bmp_data info; - STBI_NOTUSED(ri); - - info.all_a = 255; - if (stbi__bmp_parse_header(s, &info) == NULL) - return NULL; // error code already set - - flip_vertically = ((int) s->img_y) > 0; - s->img_y = abs((int) s->img_y); - - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - mr = info.mr; - mg = info.mg; - mb = info.mb; - ma = info.ma; - all_a = info.all_a; - - if (info.hsz == 12) { - if (info.bpp < 24) - psize = (info.offset - info.extra_read - 24) / 3; - } else { - if (info.bpp < 16) - psize = (info.offset - info.extra_read - info.hsz) >> 2; - } - if (psize == 0) { - // accept some number of extra bytes after the header, but if the offset points either to before - // the header ends or implies a large amount of extra data, reject the file as malformed - int bytes_read_so_far = s->callback_already_read + (int)(s->img_buffer - s->img_buffer_original); - int header_limit = 1024; // max we actually read is below 256 bytes currently. - int extra_data_limit = 256*4; // what ordinarily goes here is a palette; 256 entries*4 bytes is its max size. - if (bytes_read_so_far <= 0 || bytes_read_so_far > header_limit) { - return stbi__errpuc("bad header", "Corrupt BMP"); - } - // we established that bytes_read_so_far is positive and sensible. - // the first half of this test rejects offsets that are either too small positives, or - // negative, and guarantees that info.offset >= bytes_read_so_far > 0. this in turn - // ensures the number computed in the second half of the test can't overflow. - if (info.offset < bytes_read_so_far || info.offset - bytes_read_so_far > extra_data_limit) { - return stbi__errpuc("bad offset", "Corrupt BMP"); - } else { - stbi__skip(s, info.offset - bytes_read_so_far); - } - } - - if (info.bpp == 24 && ma == 0xff000000) - s->img_n = 3; - else - s->img_n = ma ? 4 : 3; - if (req_comp && req_comp >= 3) // we can directly decode 3 or 4 - target = req_comp; - else - target = s->img_n; // if they want monochrome, we'll post-convert - - // sanity-check size - if (!stbi__mad3sizes_valid(target, s->img_x, s->img_y, 0)) - return stbi__errpuc("too large", "Corrupt BMP"); - - out = (stbi_uc *) stbi__malloc_mad3(target, s->img_x, s->img_y, 0); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - if (info.bpp < 16) { - int z=0; - if (psize == 0 || psize > 256) { STBI_FREE(out); return stbi__errpuc("invalid", "Corrupt BMP"); } - for (i=0; i < psize; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - if (info.hsz != 12) stbi__get8(s); - pal[i][3] = 255; - } - stbi__skip(s, info.offset - info.extra_read - info.hsz - psize * (info.hsz == 12 ? 3 : 4)); - if (info.bpp == 1) width = (s->img_x + 7) >> 3; - else if (info.bpp == 4) width = (s->img_x + 1) >> 1; - else if (info.bpp == 8) width = s->img_x; - else { STBI_FREE(out); return stbi__errpuc("bad bpp", "Corrupt BMP"); } - pad = (-width)&3; - if (info.bpp == 1) { - for (j=0; j < (int) s->img_y; ++j) { - int bit_offset = 7, v = stbi__get8(s); - for (i=0; i < (int) s->img_x; ++i) { - int color = (v>>bit_offset)&0x1; - out[z++] = pal[color][0]; - out[z++] = pal[color][1]; - out[z++] = pal[color][2]; - if (target == 4) out[z++] = 255; - if (i+1 == (int) s->img_x) break; - if((--bit_offset) < 0) { - bit_offset = 7; - v = stbi__get8(s); - } - } - stbi__skip(s, pad); - } - } else { - for (j=0; j < (int) s->img_y; ++j) { - for (i=0; i < (int) s->img_x; i += 2) { - int v=stbi__get8(s),v2=0; - if (info.bpp == 4) { - v2 = v & 15; - v >>= 4; - } - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - if (i+1 == (int) s->img_x) break; - v = (info.bpp == 8) ? stbi__get8(s) : v2; - out[z++] = pal[v][0]; - out[z++] = pal[v][1]; - out[z++] = pal[v][2]; - if (target == 4) out[z++] = 255; - } - stbi__skip(s, pad); - } - } - } else { - int rshift=0,gshift=0,bshift=0,ashift=0,rcount=0,gcount=0,bcount=0,acount=0; - int z = 0; - int easy=0; - stbi__skip(s, info.offset - info.extra_read - info.hsz); - if (info.bpp == 24) width = 3 * s->img_x; - else if (info.bpp == 16) width = 2*s->img_x; - else /* bpp = 32 and pad = 0 */ width=0; - pad = (-width) & 3; - if (info.bpp == 24) { - easy = 1; - } else if (info.bpp == 32) { - if (mb == 0xff && mg == 0xff00 && mr == 0x00ff0000 && ma == 0xff000000) - easy = 2; - } - if (!easy) { - if (!mr || !mg || !mb) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } - // right shift amt to put high bit in position #7 - rshift = stbi__high_bit(mr)-7; rcount = stbi__bitcount(mr); - gshift = stbi__high_bit(mg)-7; gcount = stbi__bitcount(mg); - bshift = stbi__high_bit(mb)-7; bcount = stbi__bitcount(mb); - ashift = stbi__high_bit(ma)-7; acount = stbi__bitcount(ma); - if (rcount > 8 || gcount > 8 || bcount > 8 || acount > 8) { STBI_FREE(out); return stbi__errpuc("bad masks", "Corrupt BMP"); } - } - for (j=0; j < (int) s->img_y; ++j) { - if (easy) { - for (i=0; i < (int) s->img_x; ++i) { - unsigned char a; - out[z+2] = stbi__get8(s); - out[z+1] = stbi__get8(s); - out[z+0] = stbi__get8(s); - z += 3; - a = (easy == 2 ? stbi__get8(s) : 255); - all_a |= a; - if (target == 4) out[z++] = a; - } - } else { - int bpp = info.bpp; - for (i=0; i < (int) s->img_x; ++i) { - stbi__uint32 v = (bpp == 16 ? (stbi__uint32) stbi__get16le(s) : stbi__get32le(s)); - unsigned int a; - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mr, rshift, rcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mg, gshift, gcount)); - out[z++] = STBI__BYTECAST(stbi__shiftsigned(v & mb, bshift, bcount)); - a = (ma ? stbi__shiftsigned(v & ma, ashift, acount) : 255); - all_a |= a; - if (target == 4) out[z++] = STBI__BYTECAST(a); - } - } - stbi__skip(s, pad); - } - } - - // if alpha channel is all 0s, replace with all 255s - if (target == 4 && all_a == 0) - for (i=4*s->img_x*s->img_y-1; i >= 0; i -= 4) - out[i] = 255; - - if (flip_vertically) { - stbi_uc t; - for (j=0; j < (int) s->img_y>>1; ++j) { - stbi_uc *p1 = out + j *s->img_x*target; - stbi_uc *p2 = out + (s->img_y-1-j)*s->img_x*target; - for (i=0; i < (int) s->img_x*target; ++i) { - t = p1[i]; p1[i] = p2[i]; p2[i] = t; - } - } - } - - if (req_comp && req_comp != target) { - out = stbi__convert_format(out, target, req_comp, s->img_x, s->img_y); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - return out; -} -#endif - -// Targa Truevision - TGA -// by Jonathan Dummer -#ifndef STBI_NO_TGA -// returns STBI_rgb or whatever, 0 on error -static int stbi__tga_get_comp(int bits_per_pixel, int is_grey, int* is_rgb16) -{ - // only RGB or RGBA (incl. 16bit) or grey allowed - if (is_rgb16) *is_rgb16 = 0; - switch(bits_per_pixel) { - case 8: return STBI_grey; - case 16: if(is_grey) return STBI_grey_alpha; - // fallthrough - case 15: if(is_rgb16) *is_rgb16 = 1; - return STBI_rgb; - case 24: // fallthrough - case 32: return bits_per_pixel/8; - default: return 0; - } -} - -static int stbi__tga_info(stbi__context *s, int *x, int *y, int *comp) -{ - int tga_w, tga_h, tga_comp, tga_image_type, tga_bits_per_pixel, tga_colormap_bpp; - int sz, tga_colormap_type; - stbi__get8(s); // discard Offset - tga_colormap_type = stbi__get8(s); // colormap type - if( tga_colormap_type > 1 ) { - stbi__rewind(s); - return 0; // only RGB or indexed allowed - } - tga_image_type = stbi__get8(s); // image type - if ( tga_colormap_type == 1 ) { // colormapped (paletted) image - if (tga_image_type != 1 && tga_image_type != 9) { - stbi__rewind(s); - return 0; - } - stbi__skip(s,4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) { - stbi__rewind(s); - return 0; - } - stbi__skip(s,4); // skip image x and y origin - tga_colormap_bpp = sz; - } else { // "normal" image w/o colormap - only RGB or grey allowed, +/- RLE - if ( (tga_image_type != 2) && (tga_image_type != 3) && (tga_image_type != 10) && (tga_image_type != 11) ) { - stbi__rewind(s); - return 0; // only RGB or grey allowed, +/- RLE - } - stbi__skip(s,9); // skip colormap specification and image x/y origin - tga_colormap_bpp = 0; - } - tga_w = stbi__get16le(s); - if( tga_w < 1 ) { - stbi__rewind(s); - return 0; // test width - } - tga_h = stbi__get16le(s); - if( tga_h < 1 ) { - stbi__rewind(s); - return 0; // test height - } - tga_bits_per_pixel = stbi__get8(s); // bits per pixel - stbi__get8(s); // ignore alpha bits - if (tga_colormap_bpp != 0) { - if((tga_bits_per_pixel != 8) && (tga_bits_per_pixel != 16)) { - // when using a colormap, tga_bits_per_pixel is the size of the indexes - // I don't think anything but 8 or 16bit indexes makes sense - stbi__rewind(s); - return 0; - } - tga_comp = stbi__tga_get_comp(tga_colormap_bpp, 0, NULL); - } else { - tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3) || (tga_image_type == 11), NULL); - } - if(!tga_comp) { - stbi__rewind(s); - return 0; - } - if (x) *x = tga_w; - if (y) *y = tga_h; - if (comp) *comp = tga_comp; - return 1; // seems to have passed everything -} - -static int stbi__tga_test(stbi__context *s) -{ - int res = 0; - int sz, tga_color_type; - stbi__get8(s); // discard Offset - tga_color_type = stbi__get8(s); // color type - if ( tga_color_type > 1 ) goto errorEnd; // only RGB or indexed allowed - sz = stbi__get8(s); // image type - if ( tga_color_type == 1 ) { // colormapped (paletted) image - if (sz != 1 && sz != 9) goto errorEnd; // colortype 1 demands image type 1 or 9 - stbi__skip(s,4); // skip index of first colormap entry and number of entries - sz = stbi__get8(s); // check bits per palette color entry - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; - stbi__skip(s,4); // skip image x and y origin - } else { // "normal" image w/o colormap - if ( (sz != 2) && (sz != 3) && (sz != 10) && (sz != 11) ) goto errorEnd; // only RGB or grey allowed, +/- RLE - stbi__skip(s,9); // skip colormap specification and image x/y origin - } - if ( stbi__get16le(s) < 1 ) goto errorEnd; // test width - if ( stbi__get16le(s) < 1 ) goto errorEnd; // test height - sz = stbi__get8(s); // bits per pixel - if ( (tga_color_type == 1) && (sz != 8) && (sz != 16) ) goto errorEnd; // for colormapped images, bpp is size of an index - if ( (sz != 8) && (sz != 15) && (sz != 16) && (sz != 24) && (sz != 32) ) goto errorEnd; - - res = 1; // if we got this far, everything's good and we can return 1 instead of 0 - -errorEnd: - stbi__rewind(s); - return res; -} - -// read 16bit value and convert to 24bit RGB -static void stbi__tga_read_rgb16(stbi__context *s, stbi_uc* out) -{ - stbi__uint16 px = (stbi__uint16)stbi__get16le(s); - stbi__uint16 fiveBitMask = 31; - // we have 3 channels with 5bits each - int r = (px >> 10) & fiveBitMask; - int g = (px >> 5) & fiveBitMask; - int b = px & fiveBitMask; - // Note that this saves the data in RGB(A) order, so it doesn't need to be swapped later - out[0] = (stbi_uc)((r * 255)/31); - out[1] = (stbi_uc)((g * 255)/31); - out[2] = (stbi_uc)((b * 255)/31); - - // some people claim that the most significant bit might be used for alpha - // (possibly if an alpha-bit is set in the "image descriptor byte") - // but that only made 16bit test images completely translucent.. - // so let's treat all 15 and 16bit TGAs as RGB with no alpha. -} - -static void *stbi__tga_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - // read in the TGA header stuff - int tga_offset = stbi__get8(s); - int tga_indexed = stbi__get8(s); - int tga_image_type = stbi__get8(s); - int tga_is_RLE = 0; - int tga_palette_start = stbi__get16le(s); - int tga_palette_len = stbi__get16le(s); - int tga_palette_bits = stbi__get8(s); - int tga_x_origin = stbi__get16le(s); - int tga_y_origin = stbi__get16le(s); - int tga_width = stbi__get16le(s); - int tga_height = stbi__get16le(s); - int tga_bits_per_pixel = stbi__get8(s); - int tga_comp, tga_rgb16=0; - int tga_inverted = stbi__get8(s); - // int tga_alpha_bits = tga_inverted & 15; // the 4 lowest bits - unused (useless?) - // image data - unsigned char *tga_data; - unsigned char *tga_palette = NULL; - int i, j; - unsigned char raw_data[4] = {0}; - int RLE_count = 0; - int RLE_repeating = 0; - int read_next_pixel = 1; - STBI_NOTUSED(ri); - STBI_NOTUSED(tga_x_origin); // @TODO - STBI_NOTUSED(tga_y_origin); // @TODO - - if (tga_height > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (tga_width > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - // do a tiny bit of precessing - if ( tga_image_type >= 8 ) - { - tga_image_type -= 8; - tga_is_RLE = 1; - } - tga_inverted = 1 - ((tga_inverted >> 5) & 1); - - // If I'm paletted, then I'll use the number of bits from the palette - if ( tga_indexed ) tga_comp = stbi__tga_get_comp(tga_palette_bits, 0, &tga_rgb16); - else tga_comp = stbi__tga_get_comp(tga_bits_per_pixel, (tga_image_type == 3), &tga_rgb16); - - if(!tga_comp) // shouldn't really happen, stbi__tga_test() should have ensured basic consistency - return stbi__errpuc("bad format", "Can't find out TGA pixelformat"); - - // tga info - *x = tga_width; - *y = tga_height; - if (comp) *comp = tga_comp; - - if (!stbi__mad3sizes_valid(tga_width, tga_height, tga_comp, 0)) - return stbi__errpuc("too large", "Corrupt TGA"); - - tga_data = (unsigned char*)stbi__malloc_mad3(tga_width, tga_height, tga_comp, 0); - if (!tga_data) return stbi__errpuc("outofmem", "Out of memory"); - - // skip to the data's starting position (offset usually = 0) - stbi__skip(s, tga_offset ); - - if ( !tga_indexed && !tga_is_RLE && !tga_rgb16 ) { - for (i=0; i < tga_height; ++i) { - int row = tga_inverted ? tga_height -i - 1 : i; - stbi_uc *tga_row = tga_data + row*tga_width*tga_comp; - stbi__getn(s, tga_row, tga_width * tga_comp); - } - } else { - // do I need to load a palette? - if ( tga_indexed) - { - if (tga_palette_len == 0) { /* you have to have at least one entry! */ - STBI_FREE(tga_data); - return stbi__errpuc("bad palette", "Corrupt TGA"); - } - - // any data to skip? (offset usually = 0) - stbi__skip(s, tga_palette_start ); - // load the palette - tga_palette = (unsigned char*)stbi__malloc_mad2(tga_palette_len, tga_comp, 0); - if (!tga_palette) { - STBI_FREE(tga_data); - return stbi__errpuc("outofmem", "Out of memory"); - } - if (tga_rgb16) { - stbi_uc *pal_entry = tga_palette; - STBI_ASSERT(tga_comp == STBI_rgb); - for (i=0; i < tga_palette_len; ++i) { - stbi__tga_read_rgb16(s, pal_entry); - pal_entry += tga_comp; - } - } else if (!stbi__getn(s, tga_palette, tga_palette_len * tga_comp)) { - STBI_FREE(tga_data); - STBI_FREE(tga_palette); - return stbi__errpuc("bad palette", "Corrupt TGA"); - } - } - // load the data - for (i=0; i < tga_width * tga_height; ++i) - { - // if I'm in RLE mode, do I need to get a RLE stbi__pngchunk? - if ( tga_is_RLE ) - { - if ( RLE_count == 0 ) - { - // yep, get the next byte as a RLE command - int RLE_cmd = stbi__get8(s); - RLE_count = 1 + (RLE_cmd & 127); - RLE_repeating = RLE_cmd >> 7; - read_next_pixel = 1; - } else if ( !RLE_repeating ) - { - read_next_pixel = 1; - } - } else - { - read_next_pixel = 1; - } - // OK, if I need to read a pixel, do it now - if ( read_next_pixel ) - { - // load however much data we did have - if ( tga_indexed ) - { - // read in index, then perform the lookup - int pal_idx = (tga_bits_per_pixel == 8) ? stbi__get8(s) : stbi__get16le(s); - if ( pal_idx >= tga_palette_len ) { - // invalid index - pal_idx = 0; - } - pal_idx *= tga_comp; - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = tga_palette[pal_idx+j]; - } - } else if(tga_rgb16) { - STBI_ASSERT(tga_comp == STBI_rgb); - stbi__tga_read_rgb16(s, raw_data); - } else { - // read in the data raw - for (j = 0; j < tga_comp; ++j) { - raw_data[j] = stbi__get8(s); - } - } - // clear the reading flag for the next pixel - read_next_pixel = 0; - } // end of reading a pixel - - // copy data - for (j = 0; j < tga_comp; ++j) - tga_data[i*tga_comp+j] = raw_data[j]; - - // in case we're in RLE mode, keep counting down - --RLE_count; - } - // do I need to invert the image? - if ( tga_inverted ) - { - for (j = 0; j*2 < tga_height; ++j) - { - int index1 = j * tga_width * tga_comp; - int index2 = (tga_height - 1 - j) * tga_width * tga_comp; - for (i = tga_width * tga_comp; i > 0; --i) - { - unsigned char temp = tga_data[index1]; - tga_data[index1] = tga_data[index2]; - tga_data[index2] = temp; - ++index1; - ++index2; - } - } - } - // clear my palette, if I had one - if ( tga_palette != NULL ) - { - STBI_FREE( tga_palette ); - } - } - - // swap RGB - if the source data was RGB16, it already is in the right order - if (tga_comp >= 3 && !tga_rgb16) - { - unsigned char* tga_pixel = tga_data; - for (i=0; i < tga_width * tga_height; ++i) - { - unsigned char temp = tga_pixel[0]; - tga_pixel[0] = tga_pixel[2]; - tga_pixel[2] = temp; - tga_pixel += tga_comp; - } - } - - // convert to target component count - if (req_comp && req_comp != tga_comp) - tga_data = stbi__convert_format(tga_data, tga_comp, req_comp, tga_width, tga_height); - - // the things I do to get rid of an error message, and yet keep - // Microsoft's C compilers happy... [8^( - tga_palette_start = tga_palette_len = tga_palette_bits = - tga_x_origin = tga_y_origin = 0; - STBI_NOTUSED(tga_palette_start); - // OK, done - return tga_data; -} -#endif - -// ************************************************************************************************* -// Photoshop PSD loader -- PD by Thatcher Ulrich, integration by Nicolas Schulz, tweaked by STB - -#ifndef STBI_NO_PSD -static int stbi__psd_test(stbi__context *s) -{ - int r = (stbi__get32be(s) == 0x38425053); - stbi__rewind(s); - return r; -} - -static int stbi__psd_decode_rle(stbi__context *s, stbi_uc *p, int pixelCount) -{ - int count, nleft, len; - - count = 0; - while ((nleft = pixelCount - count) > 0) { - len = stbi__get8(s); - if (len == 128) { - // No-op. - } else if (len < 128) { - // Copy next len+1 bytes literally. - len++; - if (len > nleft) return 0; // corrupt data - count += len; - while (len) { - *p = stbi__get8(s); - p += 4; - len--; - } - } else if (len > 128) { - stbi_uc val; - // Next -len+1 bytes in the dest are replicated from next source byte. - // (Interpret len as a negative 8-bit int.) - len = 257 - len; - if (len > nleft) return 0; // corrupt data - val = stbi__get8(s); - count += len; - while (len) { - *p = val; - p += 4; - len--; - } - } - } - - return 1; -} - -static void *stbi__psd_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri, int bpc) -{ - int pixelCount; - int channelCount, compression; - int channel, i; - int bitdepth; - int w,h; - stbi_uc *out; - STBI_NOTUSED(ri); - - // Check identifier - if (stbi__get32be(s) != 0x38425053) // "8BPS" - return stbi__errpuc("not PSD", "Corrupt PSD image"); - - // Check file type version. - if (stbi__get16be(s) != 1) - return stbi__errpuc("wrong version", "Unsupported version of PSD image"); - - // Skip 6 reserved bytes. - stbi__skip(s, 6 ); - - // Read the number of channels (R, G, B, A, etc). - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) - return stbi__errpuc("wrong channel count", "Unsupported number of channels in PSD image"); - - // Read the rows and columns of the image. - h = stbi__get32be(s); - w = stbi__get32be(s); - - if (h > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (w > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - // Make sure the depth is 8 bits. - bitdepth = stbi__get16be(s); - if (bitdepth != 8 && bitdepth != 16) - return stbi__errpuc("unsupported bit depth", "PSD bit depth is not 8 or 16 bit"); - - // Make sure the color mode is RGB. - // Valid options are: - // 0: Bitmap - // 1: Grayscale - // 2: Indexed color - // 3: RGB color - // 4: CMYK color - // 7: Multichannel - // 8: Duotone - // 9: Lab color - if (stbi__get16be(s) != 3) - return stbi__errpuc("wrong color format", "PSD is not in RGB color format"); - - // Skip the Mode Data. (It's the palette for indexed color; other info for other modes.) - stbi__skip(s,stbi__get32be(s) ); - - // Skip the image resources. (resolution, pen tool paths, etc) - stbi__skip(s, stbi__get32be(s) ); - - // Skip the reserved data. - stbi__skip(s, stbi__get32be(s) ); - - // Find out if the data is compressed. - // Known values: - // 0: no compression - // 1: RLE compressed - compression = stbi__get16be(s); - if (compression > 1) - return stbi__errpuc("bad compression", "PSD has an unknown compression format"); - - // Check size - if (!stbi__mad3sizes_valid(4, w, h, 0)) - return stbi__errpuc("too large", "Corrupt PSD"); - - // Create the destination image. - - if (!compression && bitdepth == 16 && bpc == 16) { - out = (stbi_uc *) stbi__malloc_mad3(8, w, h, 0); - ri->bits_per_channel = 16; - } else - out = (stbi_uc *) stbi__malloc(4 * w*h); - - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - pixelCount = w*h; - - // Initialize the data to zero. - //memset( out, 0, pixelCount * 4 ); - - // Finally, the image data. - if (compression) { - // RLE as used by .PSD and .TIFF - // Loop until you get the number of unpacked bytes you are expecting: - // Read the next source byte into n. - // If n is between 0 and 127 inclusive, copy the next n+1 bytes literally. - // Else if n is between -127 and -1 inclusive, copy the next byte -n+1 times. - // Else if n is 128, noop. - // Endloop - - // The RLE-compressed data is preceded by a 2-byte data count for each row in the data, - // which we're going to just skip. - stbi__skip(s, h * channelCount * 2 ); - - // Read the RLE data by channel. - for (channel = 0; channel < 4; channel++) { - stbi_uc *p; - - p = out+channel; - if (channel >= channelCount) { - // Fill this channel with default data. - for (i = 0; i < pixelCount; i++, p += 4) - *p = (channel == 3 ? 255 : 0); - } else { - // Read the RLE data. - if (!stbi__psd_decode_rle(s, p, pixelCount)) { - STBI_FREE(out); - return stbi__errpuc("corrupt", "bad RLE data"); - } - } - } - - } else { - // We're at the raw image data. It's each channel in order (Red, Green, Blue, Alpha, ...) - // where each channel consists of an 8-bit (or 16-bit) value for each pixel in the image. - - // Read the data by channel. - for (channel = 0; channel < 4; channel++) { - if (channel >= channelCount) { - // Fill this channel with default data. - if (bitdepth == 16 && bpc == 16) { - stbi__uint16 *q = ((stbi__uint16 *) out) + channel; - stbi__uint16 val = channel == 3 ? 65535 : 0; - for (i = 0; i < pixelCount; i++, q += 4) - *q = val; - } else { - stbi_uc *p = out+channel; - stbi_uc val = channel == 3 ? 255 : 0; - for (i = 0; i < pixelCount; i++, p += 4) - *p = val; - } - } else { - if (ri->bits_per_channel == 16) { // output bpc - stbi__uint16 *q = ((stbi__uint16 *) out) + channel; - for (i = 0; i < pixelCount; i++, q += 4) - *q = (stbi__uint16) stbi__get16be(s); - } else { - stbi_uc *p = out+channel; - if (bitdepth == 16) { // input bpc - for (i = 0; i < pixelCount; i++, p += 4) - *p = (stbi_uc) (stbi__get16be(s) >> 8); - } else { - for (i = 0; i < pixelCount; i++, p += 4) - *p = stbi__get8(s); - } - } - } - } - } - - // remove weird white matte from PSD - if (channelCount >= 4) { - if (ri->bits_per_channel == 16) { - for (i=0; i < w*h; ++i) { - stbi__uint16 *pixel = (stbi__uint16 *) out + 4*i; - if (pixel[3] != 0 && pixel[3] != 65535) { - float a = pixel[3] / 65535.0f; - float ra = 1.0f / a; - float inv_a = 65535.0f * (1 - ra); - pixel[0] = (stbi__uint16) (pixel[0]*ra + inv_a); - pixel[1] = (stbi__uint16) (pixel[1]*ra + inv_a); - pixel[2] = (stbi__uint16) (pixel[2]*ra + inv_a); - } - } - } else { - for (i=0; i < w*h; ++i) { - unsigned char *pixel = out + 4*i; - if (pixel[3] != 0 && pixel[3] != 255) { - float a = pixel[3] / 255.0f; - float ra = 1.0f / a; - float inv_a = 255.0f * (1 - ra); - pixel[0] = (unsigned char) (pixel[0]*ra + inv_a); - pixel[1] = (unsigned char) (pixel[1]*ra + inv_a); - pixel[2] = (unsigned char) (pixel[2]*ra + inv_a); - } - } - } - } - - // convert to desired output format - if (req_comp && req_comp != 4) { - if (ri->bits_per_channel == 16) - out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, 4, req_comp, w, h); - else - out = stbi__convert_format(out, 4, req_comp, w, h); - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - - if (comp) *comp = 4; - *y = h; - *x = w; - - return out; -} -#endif - -// ************************************************************************************************* -// Softimage PIC loader -// by Tom Seddon -// -// See http://softimage.wiki.softimage.com/index.php/INFO:_PIC_file_format -// See http://ozviz.wasp.uwa.edu.au/~pbourke/dataformats/softimagepic/ - -#ifndef STBI_NO_PIC -static int stbi__pic_is4(stbi__context *s,const char *str) -{ - int i; - for (i=0; i<4; ++i) - if (stbi__get8(s) != (stbi_uc)str[i]) - return 0; - - return 1; -} - -static int stbi__pic_test_core(stbi__context *s) -{ - int i; - - if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) - return 0; - - for(i=0;i<84;++i) - stbi__get8(s); - - if (!stbi__pic_is4(s,"PICT")) - return 0; - - return 1; -} - -typedef struct -{ - stbi_uc size,type,channel; -} stbi__pic_packet; - -static stbi_uc *stbi__readval(stbi__context *s, int channel, stbi_uc *dest) -{ - int mask=0x80, i; - - for (i=0; i<4; ++i, mask>>=1) { - if (channel & mask) { - if (stbi__at_eof(s)) return stbi__errpuc("bad file","PIC file too short"); - dest[i]=stbi__get8(s); - } - } - - return dest; -} - -static void stbi__copyval(int channel,stbi_uc *dest,const stbi_uc *src) -{ - int mask=0x80,i; - - for (i=0;i<4; ++i, mask>>=1) - if (channel&mask) - dest[i]=src[i]; -} - -static stbi_uc *stbi__pic_load_core(stbi__context *s,int width,int height,int *comp, stbi_uc *result) -{ - int act_comp=0,num_packets=0,y,chained; - stbi__pic_packet packets[10]; - - // this will (should...) cater for even some bizarre stuff like having data - // for the same channel in multiple packets. - do { - stbi__pic_packet *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return stbi__errpuc("bad format","too many packets"); - - packet = &packets[num_packets++]; - - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - - act_comp |= packet->channel; - - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (reading packets)"); - if (packet->size != 8) return stbi__errpuc("bad format","packet isn't 8bpp"); - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); // has alpha channel? - - for(y=0; ytype) { - default: - return stbi__errpuc("bad format","packet has bad compression type"); - - case 0: {//uncompressed - int x; - - for(x=0;xchannel,dest)) - return 0; - break; - } - - case 1://Pure RLE - { - int left=width, i; - - while (left>0) { - stbi_uc count,value[4]; - - count=stbi__get8(s); - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pure read count)"); - - if (count > left) - count = (stbi_uc) left; - - if (!stbi__readval(s,packet->channel,value)) return 0; - - for(i=0; ichannel,dest,value); - left -= count; - } - } - break; - - case 2: {//Mixed RLE - int left=width; - while (left>0) { - int count = stbi__get8(s), i; - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (mixed read count)"); - - if (count >= 128) { // Repeated - stbi_uc value[4]; - - if (count==128) - count = stbi__get16be(s); - else - count -= 127; - if (count > left) - return stbi__errpuc("bad file","scanline overrun"); - - if (!stbi__readval(s,packet->channel,value)) - return 0; - - for(i=0;ichannel,dest,value); - } else { // Raw - ++count; - if (count>left) return stbi__errpuc("bad file","scanline overrun"); - - for(i=0;ichannel,dest)) - return 0; - } - left-=count; - } - break; - } - } - } - } - - return result; -} - -static void *stbi__pic_load(stbi__context *s,int *px,int *py,int *comp,int req_comp, stbi__result_info *ri) -{ - stbi_uc *result; - int i, x,y, internal_comp; - STBI_NOTUSED(ri); - - if (!comp) comp = &internal_comp; - - for (i=0; i<92; ++i) - stbi__get8(s); - - x = stbi__get16be(s); - y = stbi__get16be(s); - - if (y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - if (stbi__at_eof(s)) return stbi__errpuc("bad file","file too short (pic header)"); - if (!stbi__mad3sizes_valid(x, y, 4, 0)) return stbi__errpuc("too large", "PIC image too large to decode"); - - stbi__get32be(s); //skip `ratio' - stbi__get16be(s); //skip `fields' - stbi__get16be(s); //skip `pad' - - // intermediate buffer is RGBA - result = (stbi_uc *) stbi__malloc_mad3(x, y, 4, 0); - if (!result) return stbi__errpuc("outofmem", "Out of memory"); - memset(result, 0xff, x*y*4); - - if (!stbi__pic_load_core(s,x,y,comp, result)) { - STBI_FREE(result); - result=0; - } - *px = x; - *py = y; - if (req_comp == 0) req_comp = *comp; - result=stbi__convert_format(result,4,req_comp,x,y); - - return result; -} - -static int stbi__pic_test(stbi__context *s) -{ - int r = stbi__pic_test_core(s); - stbi__rewind(s); - return r; -} -#endif - -// ************************************************************************************************* -// GIF loader -- public domain by Jean-Marc Lienher -- simplified/shrunk by stb - -#ifndef STBI_NO_GIF -typedef struct -{ - stbi__int16 prefix; - stbi_uc first; - stbi_uc suffix; -} stbi__gif_lzw; - -typedef struct -{ - int w,h; - stbi_uc *out; // output buffer (always 4 components) - stbi_uc *background; // The current "background" as far as a gif is concerned - stbi_uc *history; - int flags, bgindex, ratio, transparent, eflags; - stbi_uc pal[256][4]; - stbi_uc lpal[256][4]; - stbi__gif_lzw codes[8192]; - stbi_uc *color_table; - int parse, step; - int lflags; - int start_x, start_y; - int max_x, max_y; - int cur_x, cur_y; - int line_size; - int delay; -} stbi__gif; - -static int stbi__gif_test_raw(stbi__context *s) -{ - int sz; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') return 0; - sz = stbi__get8(s); - if (sz != '9' && sz != '7') return 0; - if (stbi__get8(s) != 'a') return 0; - return 1; -} - -static int stbi__gif_test(stbi__context *s) -{ - int r = stbi__gif_test_raw(s); - stbi__rewind(s); - return r; -} - -static void stbi__gif_parse_colortable(stbi__context *s, stbi_uc pal[256][4], int num_entries, int transp) -{ - int i; - for (i=0; i < num_entries; ++i) { - pal[i][2] = stbi__get8(s); - pal[i][1] = stbi__get8(s); - pal[i][0] = stbi__get8(s); - pal[i][3] = transp == i ? 0 : 255; - } -} - -static int stbi__gif_header(stbi__context *s, stbi__gif *g, int *comp, int is_info) -{ - stbi_uc version; - if (stbi__get8(s) != 'G' || stbi__get8(s) != 'I' || stbi__get8(s) != 'F' || stbi__get8(s) != '8') - return stbi__err("not GIF", "Corrupt GIF"); - - version = stbi__get8(s); - if (version != '7' && version != '9') return stbi__err("not GIF", "Corrupt GIF"); - if (stbi__get8(s) != 'a') return stbi__err("not GIF", "Corrupt GIF"); - - stbi__g_failure_reason = ""; - g->w = stbi__get16le(s); - g->h = stbi__get16le(s); - g->flags = stbi__get8(s); - g->bgindex = stbi__get8(s); - g->ratio = stbi__get8(s); - g->transparent = -1; - - if (g->w > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - if (g->h > STBI_MAX_DIMENSIONS) return stbi__err("too large","Very large image (corrupt?)"); - - if (comp != 0) *comp = 4; // can't actually tell whether it's 3 or 4 until we parse the comments - - if (is_info) return 1; - - if (g->flags & 0x80) - stbi__gif_parse_colortable(s,g->pal, 2 << (g->flags & 7), -1); - - return 1; -} - -static int stbi__gif_info_raw(stbi__context *s, int *x, int *y, int *comp) -{ - stbi__gif* g = (stbi__gif*) stbi__malloc(sizeof(stbi__gif)); - if (!g) return stbi__err("outofmem", "Out of memory"); - if (!stbi__gif_header(s, g, comp, 1)) { - STBI_FREE(g); - stbi__rewind( s ); - return 0; - } - if (x) *x = g->w; - if (y) *y = g->h; - STBI_FREE(g); - return 1; -} - -static void stbi__out_gif_code(stbi__gif *g, stbi__uint16 code) -{ - stbi_uc *p, *c; - int idx; - - // recurse to decode the prefixes, since the linked-list is backwards, - // and working backwards through an interleaved image would be nasty - if (g->codes[code].prefix >= 0) - stbi__out_gif_code(g, g->codes[code].prefix); - - if (g->cur_y >= g->max_y) return; - - idx = g->cur_x + g->cur_y; - p = &g->out[idx]; - g->history[idx / 4] = 1; - - c = &g->color_table[g->codes[code].suffix * 4]; - if (c[3] > 128) { // don't render transparent pixels; - p[0] = c[2]; - p[1] = c[1]; - p[2] = c[0]; - p[3] = c[3]; - } - g->cur_x += 4; - - if (g->cur_x >= g->max_x) { - g->cur_x = g->start_x; - g->cur_y += g->step; - - while (g->cur_y >= g->max_y && g->parse > 0) { - g->step = (1 << g->parse) * g->line_size; - g->cur_y = g->start_y + (g->step >> 1); - --g->parse; - } - } -} - -static stbi_uc *stbi__process_gif_raster(stbi__context *s, stbi__gif *g) -{ - stbi_uc lzw_cs; - stbi__int32 len, init_code; - stbi__uint32 first; - stbi__int32 codesize, codemask, avail, oldcode, bits, valid_bits, clear; - stbi__gif_lzw *p; - - lzw_cs = stbi__get8(s); - if (lzw_cs > 12) return NULL; - clear = 1 << lzw_cs; - first = 1; - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - bits = 0; - valid_bits = 0; - for (init_code = 0; init_code < clear; init_code++) { - g->codes[init_code].prefix = -1; - g->codes[init_code].first = (stbi_uc) init_code; - g->codes[init_code].suffix = (stbi_uc) init_code; - } - - // support no starting clear code - avail = clear+2; - oldcode = -1; - - len = 0; - for(;;) { - if (valid_bits < codesize) { - if (len == 0) { - len = stbi__get8(s); // start new block - if (len == 0) - return g->out; - } - --len; - bits |= (stbi__int32) stbi__get8(s) << valid_bits; - valid_bits += 8; - } else { - stbi__int32 code = bits & codemask; - bits >>= codesize; - valid_bits -= codesize; - // @OPTIMIZE: is there some way we can accelerate the non-clear path? - if (code == clear) { // clear code - codesize = lzw_cs + 1; - codemask = (1 << codesize) - 1; - avail = clear + 2; - oldcode = -1; - first = 0; - } else if (code == clear + 1) { // end of stream code - stbi__skip(s, len); - while ((len = stbi__get8(s)) > 0) - stbi__skip(s,len); - return g->out; - } else if (code <= avail) { - if (first) { - return stbi__errpuc("no clear code", "Corrupt GIF"); - } - - if (oldcode >= 0) { - p = &g->codes[avail++]; - if (avail > 8192) { - return stbi__errpuc("too many codes", "Corrupt GIF"); - } - - p->prefix = (stbi__int16) oldcode; - p->first = g->codes[oldcode].first; - p->suffix = (code == avail) ? p->first : g->codes[code].first; - } else if (code == avail) - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); - - stbi__out_gif_code(g, (stbi__uint16) code); - - if ((avail & codemask) == 0 && avail <= 0x0FFF) { - codesize++; - codemask = (1 << codesize) - 1; - } - - oldcode = code; - } else { - return stbi__errpuc("illegal code in raster", "Corrupt GIF"); - } - } - } -} - -// this function is designed to support animated gifs, although stb_image doesn't support it -// two back is the image from two frames ago, used for a very specific disposal format -static stbi_uc *stbi__gif_load_next(stbi__context *s, stbi__gif *g, int *comp, int req_comp, stbi_uc *two_back) -{ - int dispose; - int first_frame; - int pi; - int pcount; - STBI_NOTUSED(req_comp); - - // on first frame, any non-written pixels get the background colour (non-transparent) - first_frame = 0; - if (g->out == 0) { - if (!stbi__gif_header(s, g, comp,0)) return 0; // stbi__g_failure_reason set by stbi__gif_header - if (!stbi__mad3sizes_valid(4, g->w, g->h, 0)) - return stbi__errpuc("too large", "GIF image is too large"); - pcount = g->w * g->h; - g->out = (stbi_uc *) stbi__malloc(4 * pcount); - g->background = (stbi_uc *) stbi__malloc(4 * pcount); - g->history = (stbi_uc *) stbi__malloc(pcount); - if (!g->out || !g->background || !g->history) - return stbi__errpuc("outofmem", "Out of memory"); - - // image is treated as "transparent" at the start - ie, nothing overwrites the current background; - // background colour is only used for pixels that are not rendered first frame, after that "background" - // color refers to the color that was there the previous frame. - memset(g->out, 0x00, 4 * pcount); - memset(g->background, 0x00, 4 * pcount); // state of the background (starts transparent) - memset(g->history, 0x00, pcount); // pixels that were affected previous frame - first_frame = 1; - } else { - // second frame - how do we dispose of the previous one? - dispose = (g->eflags & 0x1C) >> 2; - pcount = g->w * g->h; - - if ((dispose == 3) && (two_back == 0)) { - dispose = 2; // if I don't have an image to revert back to, default to the old background - } - - if (dispose == 3) { // use previous graphic - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi]) { - memcpy( &g->out[pi * 4], &two_back[pi * 4], 4 ); - } - } - } else if (dispose == 2) { - // restore what was changed last frame to background before that frame; - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi]) { - memcpy( &g->out[pi * 4], &g->background[pi * 4], 4 ); - } - } - } else { - // This is a non-disposal case eithe way, so just - // leave the pixels as is, and they will become the new background - // 1: do not dispose - // 0: not specified. - } - - // background is what out is after the undoing of the previou frame; - memcpy( g->background, g->out, 4 * g->w * g->h ); - } - - // clear my history; - memset( g->history, 0x00, g->w * g->h ); // pixels that were affected previous frame - - for (;;) { - int tag = stbi__get8(s); - switch (tag) { - case 0x2C: /* Image Descriptor */ - { - stbi__int32 x, y, w, h; - stbi_uc *o; - - x = stbi__get16le(s); - y = stbi__get16le(s); - w = stbi__get16le(s); - h = stbi__get16le(s); - if (((x + w) > (g->w)) || ((y + h) > (g->h))) - return stbi__errpuc("bad Image Descriptor", "Corrupt GIF"); - - g->line_size = g->w * 4; - g->start_x = x * 4; - g->start_y = y * g->line_size; - g->max_x = g->start_x + w * 4; - g->max_y = g->start_y + h * g->line_size; - g->cur_x = g->start_x; - g->cur_y = g->start_y; - - // if the width of the specified rectangle is 0, that means - // we may not see *any* pixels or the image is malformed; - // to make sure this is caught, move the current y down to - // max_y (which is what out_gif_code checks). - if (w == 0) - g->cur_y = g->max_y; - - g->lflags = stbi__get8(s); - - if (g->lflags & 0x40) { - g->step = 8 * g->line_size; // first interlaced spacing - g->parse = 3; - } else { - g->step = g->line_size; - g->parse = 0; - } - - if (g->lflags & 0x80) { - stbi__gif_parse_colortable(s,g->lpal, 2 << (g->lflags & 7), g->eflags & 0x01 ? g->transparent : -1); - g->color_table = (stbi_uc *) g->lpal; - } else if (g->flags & 0x80) { - g->color_table = (stbi_uc *) g->pal; - } else - return stbi__errpuc("missing color table", "Corrupt GIF"); - - o = stbi__process_gif_raster(s, g); - if (!o) return NULL; - - // if this was the first frame, - pcount = g->w * g->h; - if (first_frame && (g->bgindex > 0)) { - // if first frame, any pixel not drawn to gets the background color - for (pi = 0; pi < pcount; ++pi) { - if (g->history[pi] == 0) { - g->pal[g->bgindex][3] = 255; // just in case it was made transparent, undo that; It will be reset next frame if need be; - memcpy( &g->out[pi * 4], &g->pal[g->bgindex], 4 ); - } - } - } - - return o; - } - - case 0x21: // Comment Extension. - { - int len; - int ext = stbi__get8(s); - if (ext == 0xF9) { // Graphic Control Extension. - len = stbi__get8(s); - if (len == 4) { - g->eflags = stbi__get8(s); - g->delay = 10 * stbi__get16le(s); // delay - 1/100th of a second, saving as 1/1000ths. - - // unset old transparent - if (g->transparent >= 0) { - g->pal[g->transparent][3] = 255; - } - if (g->eflags & 0x01) { - g->transparent = stbi__get8(s); - if (g->transparent >= 0) { - g->pal[g->transparent][3] = 0; - } - } else { - // don't need transparent - stbi__skip(s, 1); - g->transparent = -1; - } - } else { - stbi__skip(s, len); - break; - } - } - while ((len = stbi__get8(s)) != 0) { - stbi__skip(s, len); - } - break; - } - - case 0x3B: // gif stream termination code - return (stbi_uc *) s; // using '1' causes warning on some compilers - - default: - return stbi__errpuc("unknown code", "Corrupt GIF"); - } - } -} - -static void *stbi__load_gif_main_outofmem(stbi__gif *g, stbi_uc *out, int **delays) -{ - STBI_FREE(g->out); - STBI_FREE(g->history); - STBI_FREE(g->background); - - if (out) STBI_FREE(out); - if (delays && *delays) STBI_FREE(*delays); - return stbi__errpuc("outofmem", "Out of memory"); -} - -static void *stbi__load_gif_main(stbi__context *s, int **delays, int *x, int *y, int *z, int *comp, int req_comp) -{ - if (stbi__gif_test(s)) { - int layers = 0; - stbi_uc *u = 0; - stbi_uc *out = 0; - stbi_uc *two_back = 0; - stbi__gif g; - int stride; - int out_size = 0; - int delays_size = 0; - - STBI_NOTUSED(out_size); - STBI_NOTUSED(delays_size); - - memset(&g, 0, sizeof(g)); - if (delays) { - *delays = 0; - } - - do { - u = stbi__gif_load_next(s, &g, comp, req_comp, two_back); - if (u == (stbi_uc *) s) u = 0; // end of animated gif marker - - if (u) { - *x = g.w; - *y = g.h; - ++layers; - stride = g.w * g.h * 4; - - if (out) { - void *tmp = (stbi_uc*) STBI_REALLOC_SIZED( out, out_size, layers * stride ); - if (!tmp) - return stbi__load_gif_main_outofmem(&g, out, delays); - else { - out = (stbi_uc*) tmp; - out_size = layers * stride; - } - - if (delays) { - int *new_delays = (int*) STBI_REALLOC_SIZED( *delays, delays_size, sizeof(int) * layers ); - if (!new_delays) - return stbi__load_gif_main_outofmem(&g, out, delays); - *delays = new_delays; - delays_size = layers * sizeof(int); - } - } else { - out = (stbi_uc*)stbi__malloc( layers * stride ); - if (!out) - return stbi__load_gif_main_outofmem(&g, out, delays); - out_size = layers * stride; - if (delays) { - *delays = (int*) stbi__malloc( layers * sizeof(int) ); - if (!*delays) - return stbi__load_gif_main_outofmem(&g, out, delays); - delays_size = layers * sizeof(int); - } - } - memcpy( out + ((layers - 1) * stride), u, stride ); - if (layers >= 2) { - two_back = out - 2 * stride; - } - - if (delays) { - (*delays)[layers - 1U] = g.delay; - } - } - } while (u != 0); - - // free temp buffer; - STBI_FREE(g.out); - STBI_FREE(g.history); - STBI_FREE(g.background); - - // do the final conversion after loading everything; - if (req_comp && req_comp != 4) - out = stbi__convert_format(out, 4, req_comp, layers * g.w, g.h); - - *z = layers; - return out; - } else { - return stbi__errpuc("not GIF", "Image was not as a gif type."); - } -} - -static void *stbi__gif_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi_uc *u = 0; - stbi__gif g; - memset(&g, 0, sizeof(g)); - STBI_NOTUSED(ri); - - u = stbi__gif_load_next(s, &g, comp, req_comp, 0); - if (u == (stbi_uc *) s) u = 0; // end of animated gif marker - if (u) { - *x = g.w; - *y = g.h; - - // moved conversion to after successful load so that the same - // can be done for multiple frames. - if (req_comp && req_comp != 4) - u = stbi__convert_format(u, 4, req_comp, g.w, g.h); - } else if (g.out) { - // if there was an error and we allocated an image buffer, free it! - STBI_FREE(g.out); - } - - // free buffers needed for multiple frame loading; - STBI_FREE(g.history); - STBI_FREE(g.background); - - return u; -} - -static int stbi__gif_info(stbi__context *s, int *x, int *y, int *comp) -{ - return stbi__gif_info_raw(s,x,y,comp); -} -#endif - -// ************************************************************************************************* -// Radiance RGBE HDR loader -// originally by Nicolas Schulz -#ifndef STBI_NO_HDR -static int stbi__hdr_test_core(stbi__context *s, const char *signature) -{ - int i; - for (i=0; signature[i]; ++i) - if (stbi__get8(s) != signature[i]) - return 0; - stbi__rewind(s); - return 1; -} - -static int stbi__hdr_test(stbi__context* s) -{ - int r = stbi__hdr_test_core(s, "#?RADIANCE\n"); - stbi__rewind(s); - if(!r) { - r = stbi__hdr_test_core(s, "#?RGBE\n"); - stbi__rewind(s); - } - return r; -} - -#define STBI__HDR_BUFLEN 1024 -static char *stbi__hdr_gettoken(stbi__context *z, char *buffer) -{ - int len=0; - char c = '\0'; - - c = (char) stbi__get8(z); - - while (!stbi__at_eof(z) && c != '\n') { - buffer[len++] = c; - if (len == STBI__HDR_BUFLEN-1) { - // flush to end of line - while (!stbi__at_eof(z) && stbi__get8(z) != '\n') - ; - break; - } - c = (char) stbi__get8(z); - } - - buffer[len] = 0; - return buffer; -} - -static void stbi__hdr_convert(float *output, stbi_uc *input, int req_comp) -{ - if ( input[3] != 0 ) { - float f1; - // Exponent - f1 = (float) ldexp(1.0f, input[3] - (int)(128 + 8)); - if (req_comp <= 2) - output[0] = (input[0] + input[1] + input[2]) * f1 / 3; - else { - output[0] = input[0] * f1; - output[1] = input[1] * f1; - output[2] = input[2] * f1; - } - if (req_comp == 2) output[1] = 1; - if (req_comp == 4) output[3] = 1; - } else { - switch (req_comp) { - case 4: output[3] = 1; /* fallthrough */ - case 3: output[0] = output[1] = output[2] = 0; - break; - case 2: output[1] = 1; /* fallthrough */ - case 1: output[0] = 0; - break; - } - } -} - -static float *stbi__hdr_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - char buffer[STBI__HDR_BUFLEN]; - char *token; - int valid = 0; - int width, height; - stbi_uc *scanline; - float *hdr_data; - int len; - unsigned char count, value; - int i, j, k, c1,c2, z; - const char *headerToken; - STBI_NOTUSED(ri); - - // Check identifier - headerToken = stbi__hdr_gettoken(s,buffer); - if (strcmp(headerToken, "#?RADIANCE") != 0 && strcmp(headerToken, "#?RGBE") != 0) - return stbi__errpf("not HDR", "Corrupt HDR image"); - - // Parse header - for(;;) { - token = stbi__hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) return stbi__errpf("unsupported format", "Unsupported HDR format"); - - // Parse width and height - // can't use sscanf() if we're not using stdio! - token = stbi__hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - height = (int) strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) return stbi__errpf("unsupported data layout", "Unsupported HDR format"); - token += 3; - width = (int) strtol(token, NULL, 10); - - if (height > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); - if (width > STBI_MAX_DIMENSIONS) return stbi__errpf("too large","Very large image (corrupt?)"); - - *x = width; - *y = height; - - if (comp) *comp = 3; - if (req_comp == 0) req_comp = 3; - - if (!stbi__mad4sizes_valid(width, height, req_comp, sizeof(float), 0)) - return stbi__errpf("too large", "HDR image is too large"); - - // Read data - hdr_data = (float *) stbi__malloc_mad4(width, height, req_comp, sizeof(float), 0); - if (!hdr_data) - return stbi__errpf("outofmem", "Out of memory"); - - // Load image data - // image data is stored as some number of sca - if ( width < 8 || width >= 32768) { - // Read flat data - for (j=0; j < height; ++j) { - for (i=0; i < width; ++i) { - stbi_uc rgbe[4]; - main_decode_loop: - stbi__getn(s, rgbe, 4); - stbi__hdr_convert(hdr_data + j * width * req_comp + i * req_comp, rgbe, req_comp); - } - } - } else { - // Read RLE-encoded data - scanline = NULL; - - for (j = 0; j < height; ++j) { - c1 = stbi__get8(s); - c2 = stbi__get8(s); - len = stbi__get8(s); - if (c1 != 2 || c2 != 2 || (len & 0x80)) { - // not run-length encoded, so we have to actually use THIS data as a decoded - // pixel (note this can't be a valid pixel--one of RGB must be >= 128) - stbi_uc rgbe[4]; - rgbe[0] = (stbi_uc) c1; - rgbe[1] = (stbi_uc) c2; - rgbe[2] = (stbi_uc) len; - rgbe[3] = (stbi_uc) stbi__get8(s); - stbi__hdr_convert(hdr_data, rgbe, req_comp); - i = 1; - j = 0; - STBI_FREE(scanline); - goto main_decode_loop; // yes, this makes no sense - } - len <<= 8; - len |= stbi__get8(s); - if (len != width) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("invalid decoded scanline length", "corrupt HDR"); } - if (scanline == NULL) { - scanline = (stbi_uc *) stbi__malloc_mad2(width, 4, 0); - if (!scanline) { - STBI_FREE(hdr_data); - return stbi__errpf("outofmem", "Out of memory"); - } - } - - for (k = 0; k < 4; ++k) { - int nleft; - i = 0; - while ((nleft = width - i) > 0) { - count = stbi__get8(s); - if (count > 128) { - // Run - value = stbi__get8(s); - count -= 128; - if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = value; - } else { - // Dump - if ((count == 0) || (count > nleft)) { STBI_FREE(hdr_data); STBI_FREE(scanline); return stbi__errpf("corrupt", "bad RLE data in HDR"); } - for (z = 0; z < count; ++z) - scanline[i++ * 4 + k] = stbi__get8(s); - } - } - } - for (i=0; i < width; ++i) - stbi__hdr_convert(hdr_data+(j*width + i)*req_comp, scanline + i*4, req_comp); - } - if (scanline) - STBI_FREE(scanline); - } - - return hdr_data; -} - -static int stbi__hdr_info(stbi__context *s, int *x, int *y, int *comp) -{ - char buffer[STBI__HDR_BUFLEN]; - char *token; - int valid = 0; - int dummy; - - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - - if (stbi__hdr_test(s) == 0) { - stbi__rewind( s ); - return 0; - } - - for(;;) { - token = stbi__hdr_gettoken(s,buffer); - if (token[0] == 0) break; - if (strcmp(token, "FORMAT=32-bit_rle_rgbe") == 0) valid = 1; - } - - if (!valid) { - stbi__rewind( s ); - return 0; - } - token = stbi__hdr_gettoken(s,buffer); - if (strncmp(token, "-Y ", 3)) { - stbi__rewind( s ); - return 0; - } - token += 3; - *y = (int) strtol(token, &token, 10); - while (*token == ' ') ++token; - if (strncmp(token, "+X ", 3)) { - stbi__rewind( s ); - return 0; - } - token += 3; - *x = (int) strtol(token, NULL, 10); - *comp = 3; - return 1; -} -#endif // STBI_NO_HDR - -#ifndef STBI_NO_BMP -static int stbi__bmp_info(stbi__context *s, int *x, int *y, int *comp) -{ - void *p; - stbi__bmp_data info; - - info.all_a = 255; - p = stbi__bmp_parse_header(s, &info); - if (p == NULL) { - stbi__rewind( s ); - return 0; - } - if (x) *x = s->img_x; - if (y) *y = s->img_y; - if (comp) { - if (info.bpp == 24 && info.ma == 0xff000000) - *comp = 3; - else - *comp = info.ma ? 4 : 3; - } - return 1; -} -#endif - -#ifndef STBI_NO_PSD -static int stbi__psd_info(stbi__context *s, int *x, int *y, int *comp) -{ - int channelCount, dummy, depth; - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - if (stbi__get32be(s) != 0x38425053) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 1) { - stbi__rewind( s ); - return 0; - } - stbi__skip(s, 6); - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) { - stbi__rewind( s ); - return 0; - } - *y = stbi__get32be(s); - *x = stbi__get32be(s); - depth = stbi__get16be(s); - if (depth != 8 && depth != 16) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 3) { - stbi__rewind( s ); - return 0; - } - *comp = 4; - return 1; -} - -static int stbi__psd_is16(stbi__context *s) -{ - int channelCount, depth; - if (stbi__get32be(s) != 0x38425053) { - stbi__rewind( s ); - return 0; - } - if (stbi__get16be(s) != 1) { - stbi__rewind( s ); - return 0; - } - stbi__skip(s, 6); - channelCount = stbi__get16be(s); - if (channelCount < 0 || channelCount > 16) { - stbi__rewind( s ); - return 0; - } - STBI_NOTUSED(stbi__get32be(s)); - STBI_NOTUSED(stbi__get32be(s)); - depth = stbi__get16be(s); - if (depth != 16) { - stbi__rewind( s ); - return 0; - } - return 1; -} -#endif - -#ifndef STBI_NO_PIC -static int stbi__pic_info(stbi__context *s, int *x, int *y, int *comp) -{ - int act_comp=0,num_packets=0,chained,dummy; - stbi__pic_packet packets[10]; - - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - - if (!stbi__pic_is4(s,"\x53\x80\xF6\x34")) { - stbi__rewind(s); - return 0; - } - - stbi__skip(s, 88); - - *x = stbi__get16be(s); - *y = stbi__get16be(s); - if (stbi__at_eof(s)) { - stbi__rewind( s); - return 0; - } - if ( (*x) != 0 && (1 << 28) / (*x) < (*y)) { - stbi__rewind( s ); - return 0; - } - - stbi__skip(s, 8); - - do { - stbi__pic_packet *packet; - - if (num_packets==sizeof(packets)/sizeof(packets[0])) - return 0; - - packet = &packets[num_packets++]; - chained = stbi__get8(s); - packet->size = stbi__get8(s); - packet->type = stbi__get8(s); - packet->channel = stbi__get8(s); - act_comp |= packet->channel; - - if (stbi__at_eof(s)) { - stbi__rewind( s ); - return 0; - } - if (packet->size != 8) { - stbi__rewind( s ); - return 0; - } - } while (chained); - - *comp = (act_comp & 0x10 ? 4 : 3); - - return 1; -} -#endif - -// ************************************************************************************************* -// Portable Gray Map and Portable Pixel Map loader -// by Ken Miller -// -// PGM: http://netpbm.sourceforge.net/doc/pgm.html -// PPM: http://netpbm.sourceforge.net/doc/ppm.html -// -// Known limitations: -// Does not support comments in the header section -// Does not support ASCII image data (formats P2 and P3) - -#ifndef STBI_NO_PNM - -static int stbi__pnm_test(stbi__context *s) -{ - char p, t; - p = (char) stbi__get8(s); - t = (char) stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind( s ); - return 0; - } - return 1; -} - -static void *stbi__pnm_load(stbi__context *s, int *x, int *y, int *comp, int req_comp, stbi__result_info *ri) -{ - stbi_uc *out; - STBI_NOTUSED(ri); - - ri->bits_per_channel = stbi__pnm_info(s, (int *)&s->img_x, (int *)&s->img_y, (int *)&s->img_n); - if (ri->bits_per_channel == 0) - return 0; - - if (s->img_y > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - if (s->img_x > STBI_MAX_DIMENSIONS) return stbi__errpuc("too large","Very large image (corrupt?)"); - - *x = s->img_x; - *y = s->img_y; - if (comp) *comp = s->img_n; - - if (!stbi__mad4sizes_valid(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0)) - return stbi__errpuc("too large", "PNM too large"); - - out = (stbi_uc *) stbi__malloc_mad4(s->img_n, s->img_x, s->img_y, ri->bits_per_channel / 8, 0); - if (!out) return stbi__errpuc("outofmem", "Out of memory"); - if (!stbi__getn(s, out, s->img_n * s->img_x * s->img_y * (ri->bits_per_channel / 8))) { - STBI_FREE(out); - return stbi__errpuc("bad PNM", "PNM file truncated"); - } - - if (req_comp && req_comp != s->img_n) { - if (ri->bits_per_channel == 16) { - out = (stbi_uc *) stbi__convert_format16((stbi__uint16 *) out, s->img_n, req_comp, s->img_x, s->img_y); - } else { - out = stbi__convert_format(out, s->img_n, req_comp, s->img_x, s->img_y); - } - if (out == NULL) return out; // stbi__convert_format frees input on failure - } - return out; -} - -static int stbi__pnm_isspace(char c) -{ - return c == ' ' || c == '\t' || c == '\n' || c == '\v' || c == '\f' || c == '\r'; -} - -static void stbi__pnm_skip_whitespace(stbi__context *s, char *c) -{ - for (;;) { - while (!stbi__at_eof(s) && stbi__pnm_isspace(*c)) - *c = (char) stbi__get8(s); - - if (stbi__at_eof(s) || *c != '#') - break; - - while (!stbi__at_eof(s) && *c != '\n' && *c != '\r' ) - *c = (char) stbi__get8(s); - } -} - -static int stbi__pnm_isdigit(char c) -{ - return c >= '0' && c <= '9'; -} - -static int stbi__pnm_getinteger(stbi__context *s, char *c) -{ - int value = 0; - - while (!stbi__at_eof(s) && stbi__pnm_isdigit(*c)) { - value = value*10 + (*c - '0'); - *c = (char) stbi__get8(s); - if((value > 214748364) || (value == 214748364 && *c > '7')) - return stbi__err("integer parse overflow", "Parsing an integer in the PPM header overflowed a 32-bit int"); - } - - return value; -} - -static int stbi__pnm_info(stbi__context *s, int *x, int *y, int *comp) -{ - int maxv, dummy; - char c, p, t; - - if (!x) x = &dummy; - if (!y) y = &dummy; - if (!comp) comp = &dummy; - - stbi__rewind(s); - - // Get identifier - p = (char) stbi__get8(s); - t = (char) stbi__get8(s); - if (p != 'P' || (t != '5' && t != '6')) { - stbi__rewind(s); - return 0; - } - - *comp = (t == '6') ? 3 : 1; // '5' is 1-component .pgm; '6' is 3-component .ppm - - c = (char) stbi__get8(s); - stbi__pnm_skip_whitespace(s, &c); - - *x = stbi__pnm_getinteger(s, &c); // read width - if(*x == 0) - return stbi__err("invalid width", "PPM image header had zero or overflowing width"); - stbi__pnm_skip_whitespace(s, &c); - - *y = stbi__pnm_getinteger(s, &c); // read height - if (*y == 0) - return stbi__err("invalid width", "PPM image header had zero or overflowing width"); - stbi__pnm_skip_whitespace(s, &c); - - maxv = stbi__pnm_getinteger(s, &c); // read max value - if (maxv > 65535) - return stbi__err("max value > 65535", "PPM image supports only 8-bit and 16-bit images"); - else if (maxv > 255) - return 16; - else - return 8; -} - -static int stbi__pnm_is16(stbi__context *s) -{ - if (stbi__pnm_info(s, NULL, NULL, NULL) == 16) - return 1; - return 0; -} -#endif - -static int stbi__info_main(stbi__context *s, int *x, int *y, int *comp) -{ - #ifndef STBI_NO_JPEG - if (stbi__jpeg_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PNG - if (stbi__png_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_GIF - if (stbi__gif_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_BMP - if (stbi__bmp_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PSD - if (stbi__psd_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PIC - if (stbi__pic_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_PNM - if (stbi__pnm_info(s, x, y, comp)) return 1; - #endif - - #ifndef STBI_NO_HDR - if (stbi__hdr_info(s, x, y, comp)) return 1; - #endif - - // test tga last because it's a crappy test! - #ifndef STBI_NO_TGA - if (stbi__tga_info(s, x, y, comp)) - return 1; - #endif - return stbi__err("unknown image type", "Image not of any known type, or corrupt"); -} - -static int stbi__is_16_main(stbi__context *s) -{ - #ifndef STBI_NO_PNG - if (stbi__png_is16(s)) return 1; - #endif - - #ifndef STBI_NO_PSD - if (stbi__psd_is16(s)) return 1; - #endif - - #ifndef STBI_NO_PNM - if (stbi__pnm_is16(s)) return 1; - #endif - return 0; -} - -#ifndef STBI_NO_STDIO -STBIDEF int stbi_info(char const *filename, int *x, int *y, int *comp) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result; - if (!f) return stbi__err("can't fopen", "Unable to open file"); - result = stbi_info_from_file(f, x, y, comp); - fclose(f); - return result; -} - -STBIDEF int stbi_info_from_file(FILE *f, int *x, int *y, int *comp) -{ - int r; - stbi__context s; - long pos = ftell(f); - stbi__start_file(&s, f); - r = stbi__info_main(&s,x,y,comp); - fseek(f,pos,SEEK_SET); - return r; -} - -STBIDEF int stbi_is_16_bit(char const *filename) -{ - FILE *f = stbi__fopen(filename, "rb"); - int result; - if (!f) return stbi__err("can't fopen", "Unable to open file"); - result = stbi_is_16_bit_from_file(f); - fclose(f); - return result; -} - -STBIDEF int stbi_is_16_bit_from_file(FILE *f) -{ - int r; - stbi__context s; - long pos = ftell(f); - stbi__start_file(&s, f); - r = stbi__is_16_main(&s); - fseek(f,pos,SEEK_SET); - return r; -} -#endif // !STBI_NO_STDIO - -STBIDEF int stbi_info_from_memory(stbi_uc const *buffer, int len, int *x, int *y, int *comp) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__info_main(&s,x,y,comp); -} - -STBIDEF int stbi_info_from_callbacks(stbi_io_callbacks const *c, void *user, int *x, int *y, int *comp) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); - return stbi__info_main(&s,x,y,comp); -} - -STBIDEF int stbi_is_16_bit_from_memory(stbi_uc const *buffer, int len) -{ - stbi__context s; - stbi__start_mem(&s,buffer,len); - return stbi__is_16_main(&s); -} - -STBIDEF int stbi_is_16_bit_from_callbacks(stbi_io_callbacks const *c, void *user) -{ - stbi__context s; - stbi__start_callbacks(&s, (stbi_io_callbacks *) c, user); - return stbi__is_16_main(&s); -} - -#endif // STB_IMAGE_IMPLEMENTATION - -/* - revision history: - 2.20 (2019-02-07) support utf8 filenames in Windows; fix warnings and platform ifdefs - 2.19 (2018-02-11) fix warning - 2.18 (2018-01-30) fix warnings - 2.17 (2018-01-29) change sbti__shiftsigned to avoid clang -O2 bug - 1-bit BMP - *_is_16_bit api - avoid warnings - 2.16 (2017-07-23) all functions have 16-bit variants; - STBI_NO_STDIO works again; - compilation fixes; - fix rounding in unpremultiply; - optimize vertical flip; - disable raw_len validation; - documentation fixes - 2.15 (2017-03-18) fix png-1,2,4 bug; now all Imagenet JPGs decode; - warning fixes; disable run-time SSE detection on gcc; - uniform handling of optional "return" values; - thread-safe initialization of zlib tables - 2.14 (2017-03-03) remove deprecated STBI_JPEG_OLD; fixes for Imagenet JPGs - 2.13 (2016-11-29) add 16-bit API, only supported for PNG right now - 2.12 (2016-04-02) fix typo in 2.11 PSD fix that caused crashes - 2.11 (2016-04-02) allocate large structures on the stack - remove white matting for transparent PSD - fix reported channel count for PNG & BMP - re-enable SSE2 in non-gcc 64-bit - support RGB-formatted JPEG - read 16-bit PNGs (only as 8-bit) - 2.10 (2016-01-22) avoid warning introduced in 2.09 by STBI_REALLOC_SIZED - 2.09 (2016-01-16) allow comments in PNM files - 16-bit-per-pixel TGA (not bit-per-component) - info() for TGA could break due to .hdr handling - info() for BMP to shares code instead of sloppy parse - can use STBI_REALLOC_SIZED if allocator doesn't support realloc - code cleanup - 2.08 (2015-09-13) fix to 2.07 cleanup, reading RGB PSD as RGBA - 2.07 (2015-09-13) fix compiler warnings - partial animated GIF support - limited 16-bpc PSD support - #ifdef unused functions - bug with < 92 byte PIC,PNM,HDR,TGA - 2.06 (2015-04-19) fix bug where PSD returns wrong '*comp' value - 2.05 (2015-04-19) fix bug in progressive JPEG handling, fix warning - 2.04 (2015-04-15) try to re-enable SIMD on MinGW 64-bit - 2.03 (2015-04-12) extra corruption checking (mmozeiko) - stbi_set_flip_vertically_on_load (nguillemot) - fix NEON support; fix mingw support - 2.02 (2015-01-19) fix incorrect assert, fix warning - 2.01 (2015-01-17) fix various warnings; suppress SIMD on gcc 32-bit without -msse2 - 2.00b (2014-12-25) fix STBI_MALLOC in progressive JPEG - 2.00 (2014-12-25) optimize JPG, including x86 SSE2 & NEON SIMD (ryg) - progressive JPEG (stb) - PGM/PPM support (Ken Miller) - STBI_MALLOC,STBI_REALLOC,STBI_FREE - GIF bugfix -- seemingly never worked - STBI_NO_*, STBI_ONLY_* - 1.48 (2014-12-14) fix incorrectly-named assert() - 1.47 (2014-12-14) 1/2/4-bit PNG support, both direct and paletted (Omar Cornut & stb) - optimize PNG (ryg) - fix bug in interlaced PNG with user-specified channel count (stb) - 1.46 (2014-08-26) - fix broken tRNS chunk (colorkey-style transparency) in non-paletted PNG - 1.45 (2014-08-16) - fix MSVC-ARM internal compiler error by wrapping malloc - 1.44 (2014-08-07) - various warning fixes from Ronny Chevalier - 1.43 (2014-07-15) - fix MSVC-only compiler problem in code changed in 1.42 - 1.42 (2014-07-09) - don't define _CRT_SECURE_NO_WARNINGS (affects user code) - fixes to stbi__cleanup_jpeg path - added STBI_ASSERT to avoid requiring assert.h - 1.41 (2014-06-25) - fix search&replace from 1.36 that messed up comments/error messages - 1.40 (2014-06-22) - fix gcc struct-initialization warning - 1.39 (2014-06-15) - fix to TGA optimization when req_comp != number of components in TGA; - fix to GIF loading because BMP wasn't rewinding (whoops, no GIFs in my test suite) - add support for BMP version 5 (more ignored fields) - 1.38 (2014-06-06) - suppress MSVC warnings on integer casts truncating values - fix accidental rename of 'skip' field of I/O - 1.37 (2014-06-04) - remove duplicate typedef - 1.36 (2014-06-03) - convert to header file single-file library - if de-iphone isn't set, load iphone images color-swapped instead of returning NULL - 1.35 (2014-05-27) - various warnings - fix broken STBI_SIMD path - fix bug where stbi_load_from_file no longer left file pointer in correct place - fix broken non-easy path for 32-bit BMP (possibly never used) - TGA optimization by Arseny Kapoulkine - 1.34 (unknown) - use STBI_NOTUSED in stbi__resample_row_generic(), fix one more leak in tga failure case - 1.33 (2011-07-14) - make stbi_is_hdr work in STBI_NO_HDR (as specified), minor compiler-friendly improvements - 1.32 (2011-07-13) - support for "info" function for all supported filetypes (SpartanJ) - 1.31 (2011-06-20) - a few more leak fixes, bug in PNG handling (SpartanJ) - 1.30 (2011-06-11) - added ability to load files via callbacks to accomidate custom input streams (Ben Wenger) - removed deprecated format-specific test/load functions - removed support for installable file formats (stbi_loader) -- would have been broken for IO callbacks anyway - error cases in bmp and tga give messages and don't leak (Raymond Barbiero, grisha) - fix inefficiency in decoding 32-bit BMP (David Woo) - 1.29 (2010-08-16) - various warning fixes from Aurelien Pocheville - 1.28 (2010-08-01) - fix bug in GIF palette transparency (SpartanJ) - 1.27 (2010-08-01) - cast-to-stbi_uc to fix warnings - 1.26 (2010-07-24) - fix bug in file buffering for PNG reported by SpartanJ - 1.25 (2010-07-17) - refix trans_data warning (Won Chun) - 1.24 (2010-07-12) - perf improvements reading from files on platforms with lock-heavy fgetc() - minor perf improvements for jpeg - deprecated type-specific functions so we'll get feedback if they're needed - attempt to fix trans_data warning (Won Chun) - 1.23 fixed bug in iPhone support - 1.22 (2010-07-10) - removed image *writing* support - stbi_info support from Jetro Lauha - GIF support from Jean-Marc Lienher - iPhone PNG-extensions from James Brown - warning-fixes from Nicolas Schulz and Janez Zemva (i.stbi__err. Janez (U+017D)emva) - 1.21 fix use of 'stbi_uc' in header (reported by jon blow) - 1.20 added support for Softimage PIC, by Tom Seddon - 1.19 bug in interlaced PNG corruption check (found by ryg) - 1.18 (2008-08-02) - fix a threading bug (local mutable static) - 1.17 support interlaced PNG - 1.16 major bugfix - stbi__convert_format converted one too many pixels - 1.15 initialize some fields for thread safety - 1.14 fix threadsafe conversion bug - header-file-only version (#define STBI_HEADER_FILE_ONLY before including) - 1.13 threadsafe - 1.12 const qualifiers in the API - 1.11 Support installable IDCT, colorspace conversion routines - 1.10 Fixes for 64-bit (don't use "unsigned long") - optimized upsampling by Fabian "ryg" Giesen - 1.09 Fix format-conversion for PSD code (bad global variables!) - 1.08 Thatcher Ulrich's PSD code integrated by Nicolas Schulz - 1.07 attempt to fix C++ warning/errors again - 1.06 attempt to fix C++ warning/errors again - 1.05 fix TGA loading to return correct *comp and use good luminance calc - 1.04 default float alpha is 1, not 255; use 'void *' for stbi_image_free - 1.03 bugfixes to STBI_NO_STDIO, STBI_NO_HDR - 1.02 support for (subset of) HDR files, float interface for preferred access to them - 1.01 fix bug: possible bug in handling right-side up bmps... not sure - fix bug: the stbi__bmp_load() and stbi__tga_load() functions didn't work at all - 1.00 interface to zlib that skips zlib header - 0.99 correct handling of alpha in palette - 0.98 TGA loader by lonesock; dynamically add loaders (untested) - 0.97 jpeg errors on too large a file; also catch another malloc failure - 0.96 fix detection of invalid v value - particleman@mollyrocket forum - 0.95 during header scan, seek to markers in case of padding - 0.94 STBI_NO_STDIO to disable stdio usage; rename all #defines the same - 0.93 handle jpegtran output; verbose errors - 0.92 read 4,8,16,24,32-bit BMP files of several formats - 0.91 output 24-bit Windows 3.0 BMP files - 0.90 fix a few more warnings; bump version number to approach 1.0 - 0.61 bugfixes due to Marc LeBlanc, Christopher Lloyd - 0.60 fix compiling as c++ - 0.59 fix warnings: merge Dave Moore's -Wall fixes - 0.58 fix bug: zlib uncompressed mode len/nlen was wrong endian - 0.57 fix bug: jpg last huffman symbol before marker was >9 bits but less than 16 available - 0.56 fix bug: zlib uncompressed mode len vs. nlen - 0.55 fix bug: restart_interval not initialized to 0 - 0.54 allow NULL for 'int *comp' - 0.53 fix bug in png 3->4; speedup png decoding - 0.52 png handles req_comp=3,4 directly; minor cleanup; jpeg comments - 0.51 obey req_comp requests, 1-component jpegs return as 1-component, - on 'test' only check type, not whether we support this variant - 0.50 (2006-11-19) - first released version -*/ - - -/* ------------------------------------------------------------------------------- -This software is available under 2 licenses -- choose whichever you prefer. ------------------------------------------------------------------------------- -ALTERNATIVE A - MIT License -Copyright (c) 2017 Sean Barrett -Permission is hereby granted, free of charge, to any person obtaining a copy of -this software and associated documentation files (the "Software"), to deal in -the Software without restriction, including without limitation the rights to -use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -of the Software, and to permit persons to whom the Software is furnished to do -so, subject to the following conditions: -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. ------------------------------------------------------------------------------- -ALTERNATIVE B - Public Domain (www.unlicense.org) -This is free and unencumbered software released into the public domain. -Anyone is free to copy, modify, publish, use, compile, sell, or distribute this -software, either in source code form or as a compiled binary, for any purpose, -commercial or non-commercial, and by any means. -In jurisdictions that recognize copyright laws, the author or authors of this -software dedicate any and all copyright interest in the software to the public -domain. We make this dedication for the benefit of the public at large and to -the detriment of our heirs and successors. We intend this dedication to be an -overt act of relinquishment in perpetuity of all present and future rights to -this software under copyright law. -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN -ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ------------------------------------------------------------------------------- -*/ diff --git a/Client/windows/WindowsBluetoothConnector.cpp b/Client/windows/WindowsBluetoothConnector.cpp deleted file mode 100644 index 6967f36f..00000000 --- a/Client/windows/WindowsBluetoothConnector.cpp +++ /dev/null @@ -1,238 +0,0 @@ -#include "WindowsBluetoothConnector.h" - -void WSAStartupWrapper() -{ - int iResult; - WSADATA wsaData; - iResult = WSAStartup(MAKEWORD(2, 2), &wsaData); - if (iResult != 0) { - throw std::runtime_error("WSAStartup failed: " + std::to_string(iResult)); - } -} - -WindowsBluetoothConnector::WindowsBluetoothConnector() -{ - static bool startedUp = false; - if (!startedUp) - { - ::WSAStartupWrapper(); - startedUp = true; - } -} - -bool WindowsBluetoothConnector::_tryConnect(const char* uuid, SOCKADDR_BTH& sab) -{ - RPC_STATUS errCode = ::UuidFromStringA((RPC_CSTR)uuid, &sab.serviceClassId); - if (errCode != RPC_S_OK) - { - throw std::runtime_error("Couldn't create GUID: " + std::to_string(errCode)); - } - return ::connect(this->_socket, (sockaddr*)&sab, sizeof(sab)) == 0; -} - -void WindowsBluetoothConnector::connect(const std::string& addrStr) -{ - if (this->_socket == INVALID_SOCKET) - { - this->_initSocket(); - } - - SOCKADDR_BTH sab = { 0 }; - sab.addressFamily = AF_BTH; - sab.btAddr = MACStringToLong(addrStr); - - // try the v1 service UUID first, then fall back to the v2 (newer-generation) UUID. - if (_tryConnect(SONY_UUID, sab)) - { - this->_protocolVersion = SonyProtocolVersion::V1; - this->_connected = true; - return; - } - - // A failed connect() can leave the socket unusable - recreate it before trying the v2 UUID. - ::closesocket(this->_socket); - this->_socket = INVALID_SOCKET; - this->_initSocket(); - - if (_tryConnect(SONY_UUID_V2, sab)) - { - this->_protocolVersion = SonyProtocolVersion::V2; - this->_connected = true; - return; - } - - throw RecoverableException("Couldn't connect: " + std::to_string(WSAGetLastError()), true); -} - -WindowsBluetoothConnector::~WindowsBluetoothConnector() -{ - if (this->_socket != INVALID_SOCKET) - { - ::closesocket(this->_socket); - } -} - -int WindowsBluetoothConnector::send(char* buf, size_t length) -{ - auto bytesSent = ::send(this->_socket, buf, length, 0); - if (bytesSent == SOCKET_ERROR) - { - throw RecoverableException("Couldn't send (" + std::to_string(WSAGetLastError()) + ")", true); - } - return bytesSent; -} - -int WindowsBluetoothConnector::recv(char* buf, size_t length) -{ - auto bytesReceived = ::recv(this->_socket, buf, length, 0); - if (bytesReceived == SOCKET_ERROR) - { - int err = WSAGetLastError(); - // A recv timeout is expected during capability probing - surface it as recoverable WITHOUT forcing a - // disconnect, so an unanswered optional-feature GET just hides that feature instead of dropping the link. - if (err == WSAETIMEDOUT) - { - throw RecoverableException("recv timed out", false); - } - throw RecoverableException("Couldn't recv (" + std::to_string(err) + ")", true); - } - return bytesReceived; -} - -std::vector WindowsBluetoothConnector::getConnectedDevices() -{ - std::vector res; - std::vector devsInRadio; - - HANDLE radio = NULL; - BLUETOOTH_FIND_RADIO_PARAMS radioSearchParams = { sizeof(BLUETOOTH_FIND_RADIO_PARAMS) }; - HBLUETOOTH_RADIO_FIND radioFindHandle = NULL; - - // Search only for connected devices - BLUETOOTH_DEVICE_SEARCH_PARAMS dev_search_params = { - sizeof(BLUETOOTH_DEVICE_SEARCH_PARAMS), 0, 0, 0, 1, 0, 15, NULL - }; - - // Iterate for available bluetooth radio devices - radioFindHandle = BluetoothFindFirstRadio(&radioSearchParams, &radio); - if (!radioFindHandle) - { - if (ERROR_NO_MORE_ITEMS == GetLastError()) - { - throw RecoverableException(NO_BLUETOOTH_DEVICES_ERROR); - } - else - { - throw std::runtime_error("BluetoothFindFirstRadio() failed with error code " + std::to_string(GetLastError())); - } - } - - do { - dev_search_params.hRadio = radio; - devsInRadio = _findDevicesInRadio(&dev_search_params); - res.insert(res.end(), devsInRadio.begin(), devsInRadio.end()); - } while (BluetoothFindNextRadio(radioFindHandle, &radio)); - - // No more radio, close the radio handle - if (!BluetoothFindRadioClose(radioFindHandle)) - throw std::runtime_error("BluetoothFindRadioClose(bt) failed with error code " + std::to_string(GetLastError())); - - return res; -} - -void WindowsBluetoothConnector::disconnect() noexcept -{ - if (this->_socket != INVALID_SOCKET) - { - this->_connected = false; - shutdown(this->_socket, SD_BOTH); - closesocket(this->_socket); - this->_socket = INVALID_SOCKET; - } -} - -bool WindowsBluetoothConnector::isConnected() noexcept -{ - return this->_connected; -} - -SonyProtocolVersion WindowsBluetoothConnector::getProtocolVersion() noexcept -{ - return this->_protocolVersion; -} - -void WindowsBluetoothConnector::_initSocket() -{ - SOCKET sock = ::socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); - if (sock == INVALID_SOCKET) - { - throw std::runtime_error("Couldn't create socket: " + std::to_string(WSAGetLastError())); - } - - ULONG enable = TRUE; - if (::setsockopt(sock, SOL_RFCOMM, SO_BTH_AUTHENTICATE, reinterpret_cast(&enable), sizeof(enable))) - { - throw std::runtime_error("Couldn't set SO_BTH_AUTHENTICATE: " + std::to_string(WSAGetLastError())); - } - - if (::setsockopt(sock, SOL_RFCOMM, SO_BTH_ENCRYPT, reinterpret_cast(&enable), sizeof(enable))) - { - throw std::runtime_error("Couldn't set SO_BTH_ENCRYPT: " + std::to_string(WSAGetLastError())); - } - - // Bound recv so it can't block forever. Capability probing sends a GET and relies on this timeout to - // decide a feature is unsupported - without it the app hangs on "Reading device settings" (matches the - // 2.5s timeout the macOS connector uses). - DWORD recvTimeoutMs = 2500; - ::setsockopt(sock, SOL_SOCKET, SO_RCVTIMEO, reinterpret_cast(&recvTimeoutMs), sizeof(recvTimeoutMs)); - - this->_socket = sock; -} - -std::string WindowsBluetoothConnector::_wstringToUtf8(const std::wstring& wstr) -{ - std::string strTo; - const int num_chars = WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), wstr.length(), NULL, 0, NULL, NULL); - - if (num_chars > 0) - { - strTo.resize(num_chars); - WideCharToMultiByte(CP_UTF8, 0, wstr.c_str(), wstr.length(), &strTo[0], num_chars, NULL, NULL); - } - return strTo; -} - -std::vector WindowsBluetoothConnector::_findDevicesInRadio(BLUETOOTH_DEVICE_SEARCH_PARAMS* search_params) -{ - std::vector res; - - BLUETOOTH_DEVICE_INFO device_info = { sizeof(BLUETOOTH_DEVICE_INFO),0, }; - HBLUETOOTH_DEVICE_FIND dev_find_handle = NULL; - - // For each radio, get the first device - dev_find_handle = BluetoothFindFirstDevice(search_params, &device_info); - - if (!dev_find_handle) - { - if (ERROR_NO_MORE_ITEMS == GetLastError()) - { - //No devices were found, so we can just return an empty vector - return res; - } - else - { - throw std::runtime_error("BluetoothFindFirstDevice() failed with error code: " + std::to_string(GetLastError())); - } - } - - // Get the device info - do { - res.emplace_back(BluetoothDevice{ _wstringToUtf8(device_info.szName), MACBytesToString(device_info.Address.rgBytes) }); - } while (BluetoothFindNextDevice(dev_find_handle, &device_info)); - - // NO more device, close the device handle - if (!BluetoothFindDeviceClose(dev_find_handle)) - throw std::runtime_error("BluetoothFindDeviceClose(bt_dev) failed with error code: " + std::to_string(GetLastError())); - - return res; -} diff --git a/Client/windows/WindowsBluetoothConnector.h b/Client/windows/WindowsBluetoothConnector.h deleted file mode 100644 index 824b8e1d..00000000 --- a/Client/windows/WindowsBluetoothConnector.h +++ /dev/null @@ -1,41 +0,0 @@ -#pragma once -#include -#pragma comment(lib, "ws2_32.lib") -#pragma comment(lib, "rpcrt4.lib") -#pragma comment(lib, "Bthprops.lib") -#include -#include -#include -#include -#include -#include "IBluetoothConnector.h" -#include -#include "ByteMagic.h" -#include - -class WindowsBluetoothConnector final : public IBluetoothConnector -{ -public: - WindowsBluetoothConnector(); - - ~WindowsBluetoothConnector(); - - virtual void connect(const std::string& addrStr) noexcept(false); - virtual int send(char* buf, size_t length) noexcept(false); - virtual int recv(char* buf, size_t length) noexcept(false); - virtual void disconnect() noexcept; - virtual bool isConnected() noexcept; - - virtual std::vector getConnectedDevices() noexcept(false); - virtual SonyProtocolVersion getProtocolVersion() noexcept; - -private: - std::vector _findDevicesInRadio(BLUETOOTH_DEVICE_SEARCH_PARAMS* searchParams); - std::string _wstringToUtf8(const std::wstring& wstr); - bool _tryConnect(const char* uuid, SOCKADDR_BTH& sab); - - SOCKET _socket = INVALID_SOCKET; - std::atomic _connected = false; - SonyProtocolVersion _protocolVersion = SonyProtocolVersion::V1; - void _initSocket(); -}; \ No newline at end of file diff --git a/Client/windows/WindowsGUI.cpp b/Client/windows/WindowsGUI.cpp deleted file mode 100644 index 82c9989e..00000000 --- a/Client/windows/WindowsGUI.cpp +++ /dev/null @@ -1,197 +0,0 @@ -#include "WindowsGUI.h" - -/* -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -A notice to any future readers: -This code is almost all copied from imgui/examples/example_win32_directx11. -Don't try to understand it. -!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -*/ - -// Data -static ID3D11Device* g_pd3dDevice = NULL; -static ID3D11DeviceContext* g_pd3dDeviceContext = NULL; -static IDXGISwapChain* g_pSwapChain = NULL; -static ID3D11RenderTargetView* g_mainRenderTargetView = NULL; - -void EnterGUIMainLoop(BluetoothWrapper bt) -{ - //Kinda broken but it works :) - ShowWindow(GetConsoleWindow(), SW_HIDE); //SW_RESTORE to bring back - - // Create application window - WNDCLASSEXW wc = { sizeof(WNDCLASSEXW), CS_CLASSDC, WindowsGUIInternal::WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, APP_NAME_W, NULL }; - ::RegisterClassExW(&wc); - //TODO: pass window data (size, name, etc) as params and autoscale - HWND hwnd = ::CreateWindowW(wc.lpszClassName, APP_NAME_W, WS_OVERLAPPEDWINDOW, 100, 100, GUI_WIDTH, GUI_HEIGHT, NULL, NULL, wc.hInstance, NULL); - - // Initialize Direct3D - if (!WindowsGUIInternal::CreateDeviceD3D(hwnd)) - { - WindowsGUIInternal::CleanupDeviceD3D(); - ::UnregisterClassW(wc.lpszClassName, wc.hInstance); - throw std::runtime_error("Failed to create D3D device"); - } - - // Show the window - ::ShowWindow(hwnd, SW_SHOWDEFAULT); - ::UpdateWindow(hwnd); - - // Setup Dear ImGui context - IMGUI_CHECKVERSION(); - ImGui::CreateContext(); - - //io.ConfigFlags |= ImGuiConfigFlags_NavEnableKeyboard; // Enable Keyboard Controls - - // Setup Platform/Renderer bindings - ImGui_ImplWin32_Init(hwnd); - ImGui_ImplDX11_Init(g_pd3dDevice, g_pd3dDeviceContext); - - CrossPlatformGUI gui(std::move(bt)); - - UINT presentFlags = 0; - - // Main loop - MSG msg = { 0 }; - while (msg.message != WM_QUIT) - { - // Poll and handle messages (inputs, window resize, etc.) - // You can read the io.WantCaptureMouse, io.WantCaptureKeyboard flags to tell if dear imgui wants to use your inputs. - // - When io.WantCaptureMouse is true, do not dispatch mouse input data to your main application. - // - When io.WantCaptureKeyboard is true, do not dispatch keyboard input data to your main application. - // Generally you may always pass all inputs to dear imgui, and hide them from your application based on those two flags. - - if (::PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE)) - { - ::TranslateMessage(&msg); - ::DispatchMessage(&msg); - continue; - } - - // Start the Dear ImGui frame - ImGui_ImplDX11_NewFrame(); - ImGui_ImplWin32_NewFrame(); - - //if the user wants to quit - if (!gui.performGUIPass()) - { - break; - } - - - g_pd3dDeviceContext->OMSetRenderTargets(1, &g_mainRenderTargetView, NULL); - g_pd3dDeviceContext->ClearRenderTargetView(g_mainRenderTargetView, (float*)&WINDOW_COLOR); - ImGui_ImplDX11_RenderDrawData(ImGui::GetDrawData()); - - //We need this because Present doesn't delay when the app is minimized. - if (g_pSwapChain->Present(1, presentFlags) == DXGI_STATUS_OCCLUDED) { - presentFlags = DXGI_PRESENT_TEST; - //Artificial VSYNC when the app is minimized - Sleep(MS_PER_FRAME); - } - else { - presentFlags = 0; - } - } - - // Cleanup - ImGui_ImplDX11_Shutdown(); - ImGui_ImplWin32_Shutdown(); - ImGui::DestroyContext(); - - WindowsGUIInternal::CleanupDeviceD3D(); - ::DestroyWindow(hwnd); - ::UnregisterClassW(wc.lpszClassName, wc.hInstance); -} - -void DisplayErrorMessagebox(const std::string& message) -{ - MessageBoxA(0, message.c_str(), "Sony Headphones Client | Unrecoverable Error", MB_OK | MB_ICONSTOP); - exit(GetLastError()); -} - -namespace WindowsGUIInternal -{ - - bool CreateDeviceD3D(HWND hWnd) - { - // Setup swap chain - DXGI_SWAP_CHAIN_DESC sd; - ZeroMemory(&sd, sizeof(sd)); - sd.BufferCount = 2; - sd.BufferDesc.Width = 0; - sd.BufferDesc.Height = 0; - sd.BufferDesc.Format = DXGI_FORMAT_R8G8B8A8_UNORM; - sd.BufferDesc.RefreshRate.Numerator = 60; - sd.BufferDesc.RefreshRate.Denominator = 1; - sd.Flags = DXGI_SWAP_CHAIN_FLAG_ALLOW_MODE_SWITCH; - sd.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT; - sd.OutputWindow = hWnd; - sd.SampleDesc.Count = 1; - sd.SampleDesc.Quality = 0; - sd.Windowed = TRUE; - sd.SwapEffect = DXGI_SWAP_EFFECT_DISCARD; - - UINT createDeviceFlags = 0; - //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; - D3D_FEATURE_LEVEL featureLevel; - const D3D_FEATURE_LEVEL featureLevelArray[2] = { D3D_FEATURE_LEVEL_11_0, D3D_FEATURE_LEVEL_10_0, }; - if (D3D11CreateDeviceAndSwapChain(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, createDeviceFlags, featureLevelArray, 2, D3D11_SDK_VERSION, &sd, &g_pSwapChain, &g_pd3dDevice, &featureLevel, &g_pd3dDeviceContext) != S_OK) - return false; - - CreateRenderTarget(); - return true; - } - - void CleanupDeviceD3D() - { - CleanupRenderTarget(); - if (g_pSwapChain) { g_pSwapChain->Release(); g_pSwapChain = NULL; } - if (g_pd3dDeviceContext) { g_pd3dDeviceContext->Release(); g_pd3dDeviceContext = NULL; } - if (g_pd3dDevice) { g_pd3dDevice->Release(); g_pd3dDevice = NULL; } - } - - void CreateRenderTarget() - { - ID3D11Texture2D* pBackBuffer = nullptr; - g_pSwapChain->GetBuffer(0, IID_PPV_ARGS(&pBackBuffer)); - if (pBackBuffer == nullptr) - { - throw std::runtime_error("Unexpected: pBackBuffer is null"); - } - g_pd3dDevice->CreateRenderTargetView(pBackBuffer, NULL, &g_mainRenderTargetView); - pBackBuffer->Release(); - } - - void CleanupRenderTarget() - { - if (g_mainRenderTargetView) { g_mainRenderTargetView->Release(); g_mainRenderTargetView = NULL; } - } - - // Win32 message handler - LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) - { - if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam)) - return true; - - switch (msg) - { - case WM_SIZE: - if (g_pd3dDevice != NULL && wParam != SIZE_MINIMIZED) - { - CleanupRenderTarget(); - g_pSwapChain->ResizeBuffers(0, (UINT)LOWORD(lParam), (UINT)HIWORD(lParam), DXGI_FORMAT_UNKNOWN, 0); - CreateRenderTarget(); - } - return 0; - case WM_SYSCOMMAND: - if ((wParam & 0xfff0) == SC_KEYMENU) // Disable ALT application menu - return 0; - break; - case WM_DESTROY: - ::PostQuitMessage(0); - return 0; - } - return ::DefWindowProc(hWnd, msg, wParam, lParam); - } -} diff --git a/Client/windows/WindowsGUI.h b/Client/windows/WindowsGUI.h deleted file mode 100644 index b4be8e49..00000000 --- a/Client/windows/WindowsGUI.h +++ /dev/null @@ -1,38 +0,0 @@ -#pragma once - -#include - -//The inclusion order is critical here. Do not change it. -#include "BluetoothWrapper.h" -#include "WindowsBluetoothConnector.h" - -#include "Constants.h" - -#include "imgui/imgui.h" -#include "imgui/backends/imgui_impl_win32.h" -#include "imgui/backends/imgui_impl_dx11.h" -#include -#define DIRECTINPUT_VERSION 0x0800 -#include -#include - -#include - -#include "Windows.h" - -#include "CrossPlatformGUI.h" - -// Forward declare message handler from imgui_impl_win32.cpp -extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); - -void EnterGUIMainLoop(BluetoothWrapper bt); -void DisplayErrorMessagebox(const std::string& message); - -namespace WindowsGUIInternal -{ - bool CreateDeviceD3D(HWND hWnd); - void CleanupDeviceD3D(); - void CreateRenderTarget(); - void CleanupRenderTarget(); - LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); -} diff --git a/Client/windows/main.cpp b/Client/windows/main.cpp deleted file mode 100644 index fd248713..00000000 --- a/Client/windows/main.cpp +++ /dev/null @@ -1,23 +0,0 @@ -#include -#include -#include "WindowsBluetoothConnector.h" -#include "CommandSerializer.h" -#include "BluetoothWrapper.h" - -#include "WindowsGUI.h" - -int main() -{ - std::cout << "Initializing... If can't see the GUI, something has gone wrong." << std::endl; - try - { - std::unique_ptr connector = std::make_unique(); - BluetoothWrapper wrap(std::move(connector)); - EnterGUIMainLoop(std::move(wrap)); - } - catch (const std::exception& e) - { - DisplayErrorMessagebox(e.what()); - } -} - diff --git a/README.md b/README.md index a67afb1b..4a9727ff 100644 --- a/README.md +++ b/README.md @@ -8,17 +8,16 @@
-[![Build](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/cmake.yml/badge.svg)](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/cmake.yml) +[![Build](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/xcodebuild.yml/badge.svg)](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/xcodebuild.yml) [![Release](https://img.shields.io/github/v/release/AmitRajput-Dev/SonyBridge?include_prereleases&sort=semver)](https://github.com/AmitRajput-Dev/SonyBridge/releases) [![Downloads](https://img.shields.io/github/downloads/AmitRajput-Dev/SonyBridge/total?color=success)](https://github.com/AmitRajput-Dev/SonyBridge/releases) [![Stars](https://img.shields.io/github/stars/AmitRajput-Dev/SonyBridge?style=flat)](https://github.com/AmitRajput-Dev/SonyBridge/stargazers) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) -![Platforms](https://img.shields.io/badge/platform-macOS%20%7C%20Windows%20%7C%20Linux-blue) +![Platforms](https://img.shields.io/badge/platform-macOS-blue)
[![Download for macOS](https://img.shields.io/badge/Download-macOS-000000?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/AmitRajput-Dev/SonyBridge/releases/latest) -[![Windows Beta](https://img.shields.io/badge/Windows-Beta-0078D6?style=for-the-badge&logo=windows11&logoColor=white)](https://github.com/AmitRajput-Dev/SonyBridge/releases/tag/v0.4.0-beta1) [![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-EA4AAA?style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/AmitRajput-Dev) [![Donate via Razorpay](https://img.shields.io/badge/Donate-Razorpay-3395FF?style=for-the-badge&logo=razorpay&logoColor=white)](https://razorpay.me/@amitpratapsingrajput) @@ -44,8 +43,8 @@ reverse-engineered binary protocol — no phone required. The original [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) only spoke Sony's **first-generation** protocol, so newer headsets (WH-CH720N, XM4/XM5, WF-series, LinkBuds…) just timed -out on connect. SonyBridge adds full **second-generation ("v2") protocol** support, a native SwiftUI app -on macOS, and a matching modern UI on Windows/Linux. +out on connect. SonyBridge adds full **second-generation ("v2") protocol** support and a native SwiftUI +app for macOS. ## ✨ Features @@ -60,7 +59,7 @@ on macOS, and a matching modern UI on Windows/Linux. - 🔄 **Live button sync** — changes made on the headset reflect in the app - 🔌 **Auto-connect** to your already-paired Sony headset - 🧬 **Dual-protocol** — auto-detects and speaks either protocol generation -- 🌑 **Modern UI** — dark, minimal, shaped after Sony's own app (SwiftUI on macOS, Dear ImGui on Windows/Linux) +- 🌑 **Modern UI** — dark, minimal, shaped after Sony's own app, in native SwiftUI ## 📥 Download @@ -79,27 +78,9 @@ or [**Download .app**](https://github.com/AmitRajput-Dev/SonyBridge/releases/lat macOS 11+ · Apple Silicon & Intel - -Windows - - -[**Download Beta**](https://github.com/AmitRajput-Dev/SonyBridge/releases/tag/v0.4.0-beta1) - - -🧪 Beta — testers wanted - - -Linux - - -[Build from source](#-build-from-source) - - -GLFW/OpenGL build - -> 💡 After launching, **connect your headphones in your OS Bluetooth settings first**, then open SonyBridge and hit *Connect*. Keep audio playing — Sony headsets drop the control link when idle to save power. +> 💡 After launching, **connect your headphones in your macOS Bluetooth settings first**, then open SonyBridge and hit *Connect*. Keep audio playing — Sony headsets drop the control link when idle to save power.

macOS install notes (Gatekeeper) @@ -135,31 +116,13 @@ first time (`brew trust AmitRajput-Dev/tap`). Requires **Xcode 14+**. ```sh -git clone --recurse-submodules https://github.com/AmitRajput-Dev/SonyBridge.git +git clone https://github.com/AmitRajput-Dev/SonyBridge.git open SonyBridge/Client/macos/SonyHeadphonesClient.xcodeproj ``` Then ⌘R.
-
-Windows / Linux (Dear ImGui UI) - -**Windows** (CMake + MSVC, from a Developer Command Prompt): -```sh -cd Client && mkdir build && cd build -cmake .. && cmake --build . --config Release -``` - -**Linux** (`sudo apt install libbluetooth-dev libglfw3-dev libdbus-1-dev`): -```sh -cd Client && mkdir build && cd build -cmake .. && cmake --build . -``` - -Keep the built binary next to its `resources/` folder (device hero images load from `resources/devices/`). -
- ## 🔬 How it works Sony headphones expose a vendor RFCOMM/SPP service. Commands are framed as: @@ -184,7 +147,7 @@ Contributions are very welcome — especially **device reports** and **testing o - 🐛 **Found a bug / have a device to report?** [Open an issue](https://github.com/AmitRajput-Dev/SonyBridge/issues/new) with your model and what happened. - 🧪 **Want to test?** Grab a [release](https://github.com/AmitRajput-Dev/SonyBridge/releases) and tell us how it behaves on your headset (a screenshot helps a lot). -- 🔧 **Code?** Fork, branch, and open a PR against `main`. CI builds macOS, Windows and Linux on every PR. +- 🔧 **Code?** Fork, branch, and open a PR against `main`. CI builds the macOS app on every PR. ## 🙏 Credits diff --git a/docs/banner.svg b/docs/banner.svg index b881b79b..071e1f43 100644 --- a/docs/banner.svg +++ b/docs/banner.svg @@ -30,9 +30,5 @@ macOS - - Windows - - Linux diff --git a/docs/index.html b/docs/index.html index d626c207..a2535e52 100644 --- a/docs/index.html +++ b/docs/index.html @@ -4,12 +4,12 @@ SonyBridge — Control your Sony headphones from your desktop - + - + @@ -135,7 +135,7 @@ .chip:hover{border-color:var(--border2);transform:translateY(-2px);background:var(--panel2)} /* install */ - .inst{display:grid;grid-template-columns:repeat(3,1fr);gap:16px} + .inst{display:grid;grid-template-columns:minmax(0,460px);justify-content:center;gap:16px} .inst .card{padding:26px} .inst .plat{display:flex;align-items:center;gap:10px;font-weight:700;font-size:16px;margin-bottom:14px} .inst .plat svg{color:var(--accent2)} @@ -201,18 +201,14 @@
- Open-source · macOS · Windows · Linux + Open-source · macOS

Your Sony headphones,
finally on your desktop.

-

Noise cancelling, ambient sound, EQ, DSEE and battery — controlled straight from your Mac or PC. No phone, no Sony account.

+

Noise cancelling, ambient sound, EQ, DSEE and battery — controlled straight from your Mac. No phone, no Sony account.

$brew install --cask sonybridge @@ -332,7 +328,7 @@

Works across the Sony lineup.

Get started

Install in a minute.

-

Pair your headphones in your OS Bluetooth settings first, then open SonyBridge and hit Connect.

+

Pair your headphones in your macOS Bluetooth settings first, then open SonyBridge and hit Connect.

@@ -341,17 +337,6 @@

Install in a minute.

macOS 11+ · Apple Silicon & Intel · or download the .app
-
-
Windows BETA
-

First Windows build — same UI, testers wanted. Grab it and tell us how it runs.

- -
-
-
Linux
-

Build from source — the same modern UI runs on the GLFW/OpenGL path.

-
apt install libbluetooth-dev libglfw3-dev libdbus-1-dev
- -
From 4047d243a622072e5d3c3aefda97d9dafc495ec7 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 11:51:35 +0200 Subject: [PATCH 02/50] feat(macos): French localization (fr + en fallback) --- Client/macos/ContentView.swift | 27 +++++--- Client/macos/HeadphonesBridge.mm | 20 +++--- Client/macos/HeadphonesModel.swift | 2 +- .../project.pbxproj | 30 +++++++++ Client/macos/en.lproj/InfoPlist.strings | 2 + Client/macos/fr.lproj/InfoPlist.strings | 2 + Client/macos/fr.lproj/Localizable.strings | 62 +++++++++++++++++++ Client/macos/info.plist | 7 +++ 8 files changed, 131 insertions(+), 21 deletions(-) create mode 100644 Client/macos/en.lproj/InfoPlist.strings create mode 100644 Client/macos/fr.lproj/InfoPlist.strings create mode 100644 Client/macos/fr.lproj/Localizable.strings diff --git a/Client/macos/ContentView.swift b/Client/macos/ContentView.swift index 45b0388a..1cf42e3f 100644 --- a/Client/macos/ContentView.swift +++ b/Client/macos/ContentView.swift @@ -14,6 +14,11 @@ private enum Theme { static let secondary = Color(white: 0.62) } +// Looks up a UI string in Localizable.strings (for text built at runtime, which SwiftUI doesn't localize itself). +private func tr(_ key: String) -> String { + NSLocalizedString(key, comment: "") +} + @available(macOS 11.0, *) struct ContentView: View { @StateObject private var model = HeadphonesModel() @@ -50,7 +55,7 @@ struct ContentView: View { .padding(.horizontal, 32) } Button(action: model.connect) { - Text(model.connecting ? "Connecting…" : "Connect headphones") + Text(model.connecting ? LocalizedStringKey("Connecting…") : LocalizedStringKey("Connect headphones")) .font(.system(size: 14, weight: .semibold)) .foregroundColor(.white) .frame(maxWidth: .infinity) @@ -152,7 +157,7 @@ struct ContentView: View { Image(systemName: "battery.100") .font(.system(size: 13)) .foregroundColor(Theme.accent) - Text("L \(model.batteryLeft)% R \(model.batteryRight)%") + Text(String(format: tr("L %ld%% R %ld%%"), model.batteryLeft, model.batteryRight)) .font(.system(size: 13, weight: .semibold)) .foregroundColor(Theme.secondary) } else if model.batteryLevel >= 0 { @@ -196,7 +201,7 @@ struct ContentView: View { .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous)) } - private func modeButton(_ mode: SHCAmbientMode, _ symbol: String, _ label: String) -> some View { + private func modeButton(_ mode: SHCAmbientMode, _ symbol: String, _ label: LocalizedStringKey) -> some View { let selected = model.mode == mode return Button(action: { model.setMode(mode) }) { VStack(spacing: 8) { @@ -297,7 +302,7 @@ struct ContentView: View { private func eqBandRow(_ label: String, value: Binding, display: Int, accent: Bool = false) -> some View { HStack(spacing: 10) { - Text(label) + Text(LocalizedStringKey(label)) .font(.system(size: 11, weight: .medium)) .foregroundColor(accent ? Theme.accent : Theme.secondary) .frame(width: 34, alignment: .leading) @@ -326,7 +331,7 @@ struct ContentView: View { private func eqChip(_ name: String, _ code: Int) -> some View { let selected = model.eqPreset == code return Button(action: { model.setEqualizer(code) }) { - Text(name) + Text(LocalizedStringKey(name)) .font(.system(size: 12, weight: .medium)) .foregroundColor(selected ? .white : Theme.secondary) .frame(maxWidth: .infinity) @@ -363,7 +368,7 @@ struct ContentView: View { get: { model.autoPowerOff }, set: { model.setAutoPowerOff($0) } )) { - ForEach(0.. Void) -> some View { + private func settingToggle(_ title: LocalizedStringKey, _ subtitle: LocalizedStringKey, on: Bool, action: @escaping (Bool) -> Void) -> some View { Toggle(isOn: Binding(get: { on }, set: { action($0) })) { VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(.white) @@ -394,12 +399,14 @@ struct ContentView: View { .font(.system(size: 15, weight: .bold)) .foregroundColor(.white) .padding(.bottom, 10) - aboutRow("Status", model.connected ? "Connected" : "Disconnected") + aboutRow("Status", tr(model.connected ? "Connected" : "Disconnected")) if model.hasDualBattery { aboutRow("Battery L / R", "\(model.batteryLeft)% / \(model.batteryRight)%") if model.batteryCase >= 0 { aboutRow("Case", "\(model.batteryCase)%") } } else if model.batteryLevel >= 0 { - aboutRow("Battery", "\(model.batteryLevel)%\(model.batteryCharging ? " (charging)" : "")") + aboutRow("Battery", model.batteryCharging + ? String(format: tr("%ld%% (charging)"), model.batteryLevel) + : "\(model.batteryLevel)%") } if !model.codec.isEmpty { aboutRow("Codec", model.codec) } if !model.firmware.isEmpty { aboutRow("Firmware", model.firmware) } @@ -415,7 +422,7 @@ struct ContentView: View { .background(Theme.card) } - private func aboutRow(_ label: String, _ value: String) -> some View { + private func aboutRow(_ label: LocalizedStringKey, _ value: String) -> some View { HStack { Text(label).font(.system(size: 12)).foregroundColor(Theme.secondary) Spacer() diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index 4f1b58d3..6cf092a7 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -153,7 +153,7 @@ - (void)scanAndConnectWithCompletion:(void (^)(BOOL, NSString * _Nullable))compl } if (!device) { - completion(NO, @"No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first."); + completion(NO, NSLocalizedString(@"No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first.", nil)); return; } @@ -174,7 +174,7 @@ - (void)scanAndConnectWithCompletion:(void (^)(BOOL, NSString * _Nullable))compl if (!_bt->isConnected()) { _bt->disconnect(); - completion(NO, @"Connection timed out."); + completion(NO, NSLocalizedString(@"Connection timed out.", nil)); return; } @@ -241,12 +241,12 @@ - (void)refreshDynamicWithCompletion:(void (^)(void))completion { - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { - completion(NO, @"Not connected."); + completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } // The v2 EQ SET opcode differs from v1; only issue it on confirmed v2 devices. if (_bt->getProtocolVersion() != SonyProtocolVersion::V2) { - completion(NO, @"Equalizer control isn't supported on this device yet."); + completion(NO, NSLocalizedString(@"Equalizer control isn't supported on this device yet.", nil)); return; } Headphones *hp = _hp.get(); @@ -267,7 +267,7 @@ - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL, NSString - (void)setCustomEqualizerBass:(NSInteger)bass bands:(NSArray *)bands completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { - completion(NO, @"Equalizer control isn't supported on this device yet."); + completion(NO, NSLocalizedString(@"Equalizer control isn't supported on this device yet.", nil)); return; } std::vector cbands; @@ -285,7 +285,7 @@ - (void)setCustomEqualizerBass:(NSInteger)bass bands:(NSArray *)band - (void)setDsee:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { - completion(NO, @"Not supported on this device."); + completion(NO, NSLocalizedString(@"Not supported on this device.", nil)); return; } Headphones *hp = _hp.get(); @@ -303,7 +303,7 @@ - (void)applyMode:(SHCAmbientMode)mode focusVoice:(BOOL)focusVoice completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { - completion(NO, @"Not connected."); + completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } @@ -343,7 +343,7 @@ - (void)applyMode:(SHCAmbientMode)mode } - (void)setAutoPowerOff:(NSInteger)index completion:(void (^)(BOOL, NSString * _Nullable))completion { - if (!_hp || !self.connected) { completion(NO, @"Not connected."); return; } + if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } Headphones *hp = _hp.get(); dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; @@ -353,7 +353,7 @@ - (void)setAutoPowerOff:(NSInteger)index completion:(void (^)(BOOL, NSString * _ } - (void)setSpeakToChat:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))completion { - if (!_hp || !self.connected) { completion(NO, @"Not connected."); return; } + if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } Headphones *hp = _hp.get(); dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; @@ -363,7 +363,7 @@ - (void)setSpeakToChat:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Null } - (void)setAdaptiveVolume:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))completion { - if (!_hp || !self.connected) { completion(NO, @"Not connected."); return; } + if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } Headphones *hp = _hp.get(); dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; diff --git a/Client/macos/HeadphonesModel.swift b/Client/macos/HeadphonesModel.swift index cda475ad..82b66c8a 100644 --- a/Client/macos/HeadphonesModel.swift +++ b/Client/macos/HeadphonesModel.swift @@ -172,7 +172,7 @@ final class HeadphonesModel: ObservableObject { if self.connected && !self.bridge.connected { self.connected = false self.deviceName = "" - self.errorMessage = "Headphones disconnected." + self.errorMessage = NSLocalizedString("Headphones disconnected.", comment: "") self.stopWatchingConnection() self.stopDynamicPolling() } diff --git a/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj b/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj index ded42608..b2904b06 100644 --- a/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj +++ b/Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj @@ -23,6 +23,8 @@ CC0000000000000000000004 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0000000000000000000005 /* ContentView.swift */; }; CC0000000000000000000006 /* HeadphonesModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = CC0000000000000000000007 /* HeadphonesModel.swift */; }; DD0000000000000000000001 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = DD0000000000000000000002 /* Assets.xcassets */; }; + EE0000000000000000000001 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = EE0000000000000000000002 /* Localizable.strings */; }; + EE0000000000000000000003 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EE0000000000000000000004 /* InfoPlist.strings */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ @@ -56,6 +58,9 @@ CC0000000000000000000007 /* HeadphonesModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HeadphonesModel.swift; sourceTree = ""; }; CC0000000000000000000008 /* SonyHeadphonesClient-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "SonyHeadphonesClient-Bridging-Header.h"; sourceTree = ""; }; DD0000000000000000000002 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + EE0000000000000000000005 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; + EE0000000000000000000006 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; + EE0000000000000000000007 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -102,6 +107,8 @@ CC0000000000000000000007 /* HeadphonesModel.swift */, CC0000000000000000000008 /* SonyHeadphonesClient-Bridging-Header.h */, DD0000000000000000000002 /* Assets.xcassets */, + EE0000000000000000000002 /* Localizable.strings */, + EE0000000000000000000004 /* InfoPlist.strings */, A8DC790325769A6600447738 /* Frameworks */, ); sourceTree = ""; @@ -155,6 +162,7 @@ hasScannedForEncodings = 0; knownRegions = ( en, + fr, Base, ); mainGroup = A8DC78BB25757BF300447738; @@ -174,6 +182,8 @@ files = ( A8DC793225769EA500447738 /* Main.storyboard in Resources */, DD0000000000000000000001 /* Assets.xcassets in Resources */, + EE0000000000000000000001 /* Localizable.strings in Resources */, + EE0000000000000000000003 /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -200,6 +210,26 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXVariantGroup section */ + EE0000000000000000000002 /* Localizable.strings */ = { + isa = PBXVariantGroup; + children = ( + EE0000000000000000000005 /* fr */, + ); + name = Localizable.strings; + sourceTree = ""; + }; + EE0000000000000000000004 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + EE0000000000000000000007 /* en */, + EE0000000000000000000006 /* fr */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + /* Begin XCBuildConfiguration section */ A8DC78D625757BF500447738 /* Debug */ = { isa = XCBuildConfiguration; diff --git a/Client/macos/en.lproj/InfoPlist.strings b/Client/macos/en.lproj/InfoPlist.strings new file mode 100644 index 00000000..63b393f3 --- /dev/null +++ b/Client/macos/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized Info.plist values (English). Keeps an en.lproj in the bundle so non-French systems fall back to English. */ +"NSBluetoothAlwaysUsageDescription" = "This app uses Bluetooth in order to connect to your headphones."; diff --git a/Client/macos/fr.lproj/InfoPlist.strings b/Client/macos/fr.lproj/InfoPlist.strings new file mode 100644 index 00000000..82760dbe --- /dev/null +++ b/Client/macos/fr.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized Info.plist values (French). */ +"NSBluetoothAlwaysUsageDescription" = "SonyBridge utilise le Bluetooth pour se connecter à votre casque."; diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings new file mode 100644 index 00000000..6376a68e --- /dev/null +++ b/Client/macos/fr.lproj/Localizable.strings @@ -0,0 +1,62 @@ +/* SonyBridge — French UI strings. Keys are the English source strings; missing keys fall back to English. */ + +/* Connection */ +"No headphones connected" = "Aucun casque connecté"; +"Connecting…" = "Connexion…"; +"Connect headphones" = "Connecter le casque"; +"Connected" = "Connecté"; +"Disconnected" = "Déconnecté"; + +/* Battery (L/R = left/right earbud) */ +"L %ld%% R %ld%%" = "G %ld %% D %ld %%"; +"%ld%% (charging)" = "%ld %% (en charge)"; + +/* Ambient sound control */ +"Ambient Sound Control" = "Contrôle du son ambiant"; +"Noise\nCanceling" = "Réduction\nde bruit"; +"Ambient\nSound" = "Son\nambiant"; +"Off" = "Désactivé"; +"Ambient Sound Level" = "Niveau du son ambiant"; +"Focus on Voice" = "Focalisation sur la voix"; + +/* Equalizer */ +"Equalizer" = "Égaliseur"; +"Bright" = "Brillant"; +"Excited" = "Dynamique"; +"Mellow" = "Doux"; +"Relaxed" = "Détendu"; +"Vocal" = "Voix"; +"Treble" = "Aigus"; +"Bass" = "Graves"; +"Speech" = "Parole"; +"Manual" = "Manuel"; + +/* DSEE */ +"Upscale compressed audio" = "Améliore l’audio compressé"; + +/* Settings */ +"Settings" = "Réglages"; +"Adaptive Volume" = "Volume adaptatif"; +"Auto-adjust volume by surroundings" = "Ajuste le volume selon l’environnement"; +"Pause music when you talk" = "Met la musique en pause quand vous parlez"; +"Auto Power-Off" = "Arrêt automatique"; +"Turn off when idle" = "S’éteint en cas d’inactivité"; +"1 hour" = "1 heure"; +"3 hours" = "3 heures"; +"When taken off" = "Quand le casque est retiré"; + +/* About popover */ +"Status" = "État"; +"Battery" = "Batterie"; +"Battery L / R" = "Batterie G / D"; +"Case" = "Boîtier"; +"Protocol" = "Protocole"; +"SonyBridge · not affiliated with Sony" = "SonyBridge · non affilié à Sony"; + +/* Errors */ +"Headphones disconnected." = "Casque déconnecté."; +"No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; +"Connection timed out." = "Délai de connexion dépassé."; +"Not connected." = "Non connecté."; +"Equalizer control isn't supported on this device yet." = "Le réglage de l’égaliseur n’est pas encore pris en charge sur cet appareil."; +"Not supported on this device." = "Non pris en charge sur cet appareil."; diff --git a/Client/macos/info.plist b/Client/macos/info.plist index f2a16284..642d8c1d 100644 --- a/Client/macos/info.plist +++ b/Client/macos/info.plist @@ -2,6 +2,13 @@ + CFBundleDevelopmentRegion + en + CFBundleLocalizations + + en + fr + CFBundleExecutable SonyHeadphonesClient CFBundleIdentifier From 1da9d58154f210cf2f8af1574fa2676f55db4b06 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 12:13:06 +0200 Subject: [PATCH 03/50] docs: menu bar app design spec --- .gitignore | 3 + .../specs/2026-09-10-menu-bar-app-design.md | 254 ++++++++++++++++++ 2 files changed, 257 insertions(+) create mode 100644 docs/superpowers/specs/2026-09-10-menu-bar-app-design.md diff --git a/.gitignore b/.gitignore index 954cfbca..4cb044e7 100644 --- a/.gitignore +++ b/.gitignore @@ -526,3 +526,6 @@ MigrationBackup/ # vscode .vscode/ + +# brainstorming mockups (superpowers visual companion) +.superpowers/ diff --git a/docs/superpowers/specs/2026-09-10-menu-bar-app-design.md b/docs/superpowers/specs/2026-09-10-menu-bar-app-design.md new file mode 100644 index 00000000..5a4b6e98 --- /dev/null +++ b/docs/superpowers/specs/2026-09-10-menu-bar-app-design.md @@ -0,0 +1,254 @@ +# SonyBridge dans la barre des menus — spec de design + +- **Date :** 2026-09-10 +- **Statut :** validé en discussion, à relire avant le plan d'implémentation +- **Casque de référence :** WH-1000XM6 (firmware 3.1.5, protocole v2) + +## 1. Objectif + +Transformer SonyBridge, aujourd'hui une app à fenêtre, en **app de barre des menus** sobre, dans l'esprit +des menus système d'Apple (Bluetooth, Wi-Fi). L'app donne accès à toutes les fonctions déjà gérées, et +corrige ce qui est faux sur le WH-1000XM6. + +## 2. Périmètre + +**Inclus** +- Toutes les fonctions existantes, dans un menu natif : mode NC / Son ambiant / Désactivé, niveau ambiant, + focalisation sur la voix, égaliseur (presets + manuel), DSEE, Speak-to-Chat, volume adaptatif, arrêt + automatique, batterie, codec, firmware. +- Les corrections XM6 : relecture de l'état NC/Ambiant, égaliseur 10 bandes. +- Trois options activables : lancer à l'ouverture de session, connexion automatique, reconnexion automatique. +- Un build par script (`make`), sans Xcode, et la CI correspondante. +- Le français et l'anglais (mécanisme de traduction existant). + +**Exclu** (projets séparés, plus tard) +- Les fonctions du XM6 encore inconnues du projet (multipoint, optimiseur NC, commandes tactiles…), qui + demandent de la rétro-ingénierie. +- L'écoute des notifications que le casque envoie de lui-même : on garde la relecture périodique. +- La mise à jour des captures d'écran du README et du site (à refaire après l'implémentation). + +## 3. Décisions + +| Sujet | Décision | Raison | +|---|---|---| +| Forme de l'interface | Menu natif (maquette « B ») | Le plus proche des menus système d'Apple | +| Égaliseur manuel | Curseurs dans le sous-menu « Égaliseur », sous les presets (option « 1 ») | Tout reste dans le menu, sans fenêtre en plus | +| Technique | `NSStatusItem` + `NSMenu` (AppKit), vues SwiftUI (`NSHostingView`) pour les lignes riches | `MenuBarExtra` n'accepte pas de curseurs en style menu ; un popover serait un faux menu | +| Icône de la barre | Monochrome, une par mode, grisée si déconnecté | Mode visible d'un coup d'œil, style système | +| Build | Script + `Makefile`, suppression du `.xcodeproj` | Pas de Xcode sur la machine de dev ; une seule façon de compiler | +| Version minimale | macOS 13 (au lieu de 11) | `SMAppService` pour le lancement à l'ouverture de session | + +## 4. Structure du menu + +``` +┌ WH-1000XM6 68 % ▭ ← en-tête (vue SwiftUI) +│ Connecté · AAC (ou « Connexion… » / « Non connecté ») +│ ⚠︎ ← seulement s'il y a une erreur +├────────── +│ Contrôle du son ambiant ← titre de section (inactif) +│ ◉ Réduction de bruit ← choix exclusifs +│ ◉ Son ambiant +│ ─────●───── 10 ← curseur 1…20 (visible en Son ambiant) +│ Focalisation sur la voix [ ] ← interrupteur (visible en Son ambiant) +│ ◉ Désactivé +├────────── +│ Égaliseur Graves › +│ ✓ Désactivé / Brillant / Dynamique / Doux / Détendu / Voix / Aigus / Graves / Parole / Manuel +│ ────────── +│ [10 curseurs verticaux] ou [5 curseurs + Clear Bass] ← actifs si « Manuel » +│ Réinitialiser +│ DSEE [ ] ← chaque ligne n'apparaît que si le casque +│ Speak-to-Chat [ ] gère la fonction +│ Volume adaptatif [ ] +│ Arrêt automatique Quand retiré › +│ ✓ Désactivé / 5 min / 30 min / 1 heure / 3 heures / Quand le casque est retiré +├────────── +│ À propos du casque › → Firmware, Codec, Protocole, Bluetooth (lignes d'info) +│ Options de SonyBridge › → ✓ Lancer à l'ouverture de session +│ ✓ Connexion automatique +│ ✓ Reconnexion automatique +│ Connecter… | Déconnecter +├────────── +└ Quitter SonyBridge ⌘Q +``` + +- La valeur courante (« Graves », « Quand retiré ») s'affiche à droite du titre du sous-menu. +- Casque déconnecté : le menu garde sa forme, les réglages sont désactivés (grisés), et l'en-tête affiche + « Non connecté ». L'élément « Connecter… » essaie d'abord le casque Sony déjà connecté à macOS + (comportement existant de `scanAndConnect`), sinon il ouvre le sélecteur Bluetooth de macOS. +- Valeurs par défaut des options : connexion auto **activée**, reconnexion auto **activée**, lancement à + l'ouverture de session **désactivé** (Apple demande que l'utilisateur l'active lui-même). + +## 5. Architecture + +### 5.1 Type d'app + +- `LSUIElement = YES` : pas d'icône dans le Dock, pas de fenêtre ni de menu d'app. +- `LSMinimumSystemVersion = 13.0`. +- Le bundle s'appelle `SonyBridge.app` (exécutable `SonyBridge`). L'identifiant + `com.semvis123.SonyHeadphonesClient` est conservé, pour que macOS ne redemande pas l'autorisation + Bluetooth. + +### 5.2 Fichiers (`Client/macos/`) + +| Fichier | Rôle | Dépend de | +|---|---|---| +| `main.swift` | Crée `NSApplication`, installe `AppDelegate`, lance la boucle | `AppDelegate` | +| `AppDelegate.swift` | Crée le modèle, les réglages et le contrôleur de barre ; démarre la connexion auto | tous les suivants | +| `StatusItemController.swift` | Possède le `NSStatusItem`, choisit l'icône selon l'état, attache le menu | `HeadphonesModel`, `HeadphonesMenu` | +| `HeadphonesMenu.swift` | Construit le `NSMenu` et le garde synchronisé avec le modèle (abonnement Combine) : états des choix, visibilité, valeurs à droite, actif/inactif | `HeadphonesModel`, `AppSettings`, `MenuRows` | +| `MenuRows/HeaderRow.swift` | En-tête : nom, état de connexion, codec, batterie (simple ou G/D/boîtier) | `HeadphonesModel` | +| `MenuRows/SliderRow.swift` | Curseur du niveau ambiant | `HeadphonesModel` | +| `MenuRows/ToggleRow.swift` | Ligne titre + interrupteur (focalisation, DSEE, Speak-to-Chat, volume adaptatif) | — (valeur + action en paramètres) | +| `MenuRows/EqualizerRow.swift` | Curseurs verticaux, 10 bandes ou 5 + Clear Bass selon le casque | `HeadphonesModel` | +| `HeadphonesModel.swift` | Existe déjà. État observable du casque et actions ; gagne la connexion/reconnexion auto et les relectures périodiques | `HeadphonesBridge`, `AppSettings`, `ReconnectPolicy`, `PollGuard` | +| `ReconnectPolicy.swift` | Logique pure : délai avant le prochain essai (3 s, 10 s, 30 s, puis 60 s) | — | +| `PollGuard.swift` | Logique pure : ignorer une relecture si l'utilisateur a changé ce réglage il y a moins de 3 s | — | +| `AppSettings.swift` | Les 3 options dans `UserDefaults` ; le lancement à l'ouverture passe par `SMAppService.mainApp` | — | +| `DeviceWatcher.swift` | Écoute les connexions Bluetooth (`IOBluetoothDevice.register(forConnectNotifications:)`) et signale qu'un casque Sony vient de se connecter | IOBluetooth | +| `HeadphonesBridge.h/.mm` | Existe déjà. Pont Obj-C++ ; s'adapte aux corrections XM6 (§7) | cœur C++ | +| `fr.lproj/`, `en.lproj/` | Traductions : textes du menu ajoutés, textes de l'ancienne fenêtre retirés | — | + +**Supprimés :** `ContentView.swift`, `main.mm`, `AppDelegate.h/.mm`, `ViewController.h/.mm`, `Main.storyboard`, +`SonyHeadphonesClient.xcodeproj`, `exportOptions.plist`, et les images des casques dans `Assets.xcassets` +(elles ne sont plus affichées). L'icône de l'app est déplacée dans `Client/macos/Resources/AppIcon.iconset`, +d'où `iconutil` la compile directement. + +### 5.3 Cœur C++ (`Client/`) + +- Nouveau `ProtocolParsers.h/.cpp` : des fonctions pures qui transforment la réponse du casque en valeurs. + - `parseNcAsmState(payload)` : gère les réponses `0x17` et `0x19`. + - `parseEqualizer(payload)` : gère 5 bandes + Clear Bass, et 10 bandes. + - `Headphones.cpp` les appelle, au lieu de décoder les octets lui-même. +- Le reste du cœur (mise en trame, ACK, connexion RFCOMM) ne change pas. + +## 6. Fonctionnement + +### 6.1 Connexion automatique (option activée) + +1. L'app retient l'adresse du dernier casque connecté (`UserDefaults`). +2. Au lancement : si ce casque est connecté à macOS, l'app ouvre le canal de contrôle. À défaut, elle prend le + premier casque connecté dont le nom ressemble à un Sony (règle existante `SHCLooksLikeSonyHeadset`). +3. Ensuite, `DeviceWatcher` signale chaque connexion Bluetooth. Pour un casque Sony, l'app attend 2 s (le + temps que l'audio s'établisse) puis ouvre le canal. + +### 6.2 Reconnexion automatique (option activée) + +- Si le canal se coupe alors que le casque est toujours connecté à macOS, l'app réessaie selon + `ReconnectPolicy` : 3 s, 10 s, 30 s, puis toutes les 60 s. +- L'app arrête d'essayer quand le casque se déconnecte de macOS (la connexion auto prendra le relais). +- Après un clic sur **Déconnecter**, pas de reconnexion auto jusqu'au prochain branchement du casque ou au + prochain clic sur « Connecter… ». + +### 6.3 Relectures périodiques + +- État NC/Ambiant : toutes les 2 s (suit le bouton physique du casque). Batterie : toutes les 60 s. +- Les minuteurs sont ajoutés en mode `RunLoop.Mode.common`, pour continuer à tourner **pendant que le menu + est ouvert**. Le menu se met alors à jour en direct. + +### 6.4 Commandes + +- Une action met à jour l'affichage tout de suite, puis la commande part sur la file série existante, dans + l'ordre des clics. +- `PollGuard` ignore les relectures d'un réglage pendant 3 s après que l'utilisateur l'a modifié : sans ça, + l'affichage reviendrait brièvement en arrière. +- Les curseurs (niveau ambiant, égaliseur) envoient une commande quand on relâche, et au plus toutes les + 150 ms pendant le glissement, pour ne pas saturer la liaison. + +### 6.5 Erreurs + +- La dernière erreur s'affiche sur une ligne « ⚠︎ message » sous l'en-tête. Elle disparaît à la prochaine + action réussie. Pas de fenêtre d'alerte. +- Les échecs de connexion automatique ne s'affichent pas (ils sont normaux quand le casque dort). Seuls les + échecs d'une action de l'utilisateur s'affichent. + +### 6.6 Icône + +- Des images modèles (*template*) monochromes, que macOS colore selon la barre (clair ou sombre) : une par + mode (réduction de bruit, son ambiant, désactivé), plus une version grisée quand le casque est déconnecté. +- On part de symboles SF (`SF Symbols`) ; les glyphes exacts sont montrés pour validation pendant + l'implémentation. + +## 7. Corrections WH-1000XM6 + +Constats tirés des trames réelles capturées le 2026-09-10 : + +| Fonction | Trame reçue | Constat | +|---|---|---| +| État NC/ASM, demande `66 17` | `67 17 00 00 00 00 00` | Tout à zéro : ce canal n'est pas celui du XM6 | +| Changement de mode `68 17 01 01 01 00 0a` | accepté, puis notification `69 19 01 01 01 00 0a 00 00` | Le changement marche ; le vrai état arrive sur le canal `0x19`, avec 2 octets de plus | +| Égaliseur, demande `56 00` | `57 00 30 0a 0a 0a 05 05 06 06 06 06 06 06` | Preset `0x30` inconnu ; `0x0a` = 10 valeurs de bandes | +| Volume adaptatif, demande `f6 0a` | aucune réponse | Pas géré : la ligne est masquée | + +**Correction de la relecture NC/Ambiant** +- À la connexion, l'app envoie `66 19`. Si la réponse fait au moins 7 octets, elle relit l'état par `0x19`. + Sinon, elle garde `0x17` (anciens modèles). +- L'envoi des changements continue par `68 17`, dont le fonctionnement est vérifié sur le XM6. + +**Correction de l'égaliseur** +- `parseEqualizer` lit l'octet de nombre de valeurs : + - `0x06` → Clear Bass + 5 bandes (existant) ; + - `0x0a` → 10 bandes, sans Clear Bass. +- Le sous-menu affiche les curseurs qui correspondent. Un preset inconnu est affiché « Personnalisé » ; aucun + preset n'est coché. + +**Points à déterminer par expérimentation** (étape 3 de la construction, avec l'utilisateur et le casque) +1. Le sens des 2 octets de plus de `0x19` : changer de mode avec le bouton du casque et lire les trames. +2. Le décalage des valeurs des bandes (hypothèse −10…+10 avec un décalage de 10, à confirmer) et les + identifiants des presets du XM6 : comparer avec l'app Sony, puis envoyer un preset et relire. +3. Le format d'envoi de l'égaliseur manuel à 10 bandes (hypothèse `58 00 a0 0a <10 valeurs>`) : essai pas à + pas, l'utilisateur à l'écoute. + +**Règle de sécurité :** tant qu'un format n'est pas confirmé, la commande correspondante n'est **jamais** +envoyée au XM6. Les curseurs 10 bandes restent inactifs, avec la mention « bientôt disponible ». + +## 8. Build et CI + +- `scripts/build.sh` : compile le Swift (`swiftc`, avec l'en-tête de pont), le C++ et l'Obj-C++ + (`clang++`, C++17, ARC), fait l'édition de liens, assemble `build/SonyBridge.app` (plist, `.lproj`, icône + via `iconutil`) et signe en ad hoc avec les entitlements existants. + - Variables : `CONFIG=debug|release` ; `ARCHS="arm64 x86_64"` pour une app universelle (fusion avec `lipo`) ; + `DEBUG_PROTOCOL=1` pour activer `SHC_DEBUG_PROTOCOL`. +- `Makefile` : + - `make` : compile ; + - `make run` : compile, relance l'app, et envoie les logs dans `build/app.log` ; + - `make test` : lance les tests ; + - `make release` : app universelle zippée ; + - `make clean`. +- CI : `.github/workflows/build.yml` (sur `main` et les PR) exécute `make test` et `make release`, puis publie + le zip comme artefact. `xcodebuild.yml` est supprimé. +- README : section « Build from source » réécrite (`make run`), description de l'app de barre des menus. + +## 9. Tests + +- **`make test`** compile et lance deux petits exécutables de test (assertions simples, sans XCTest, qui n'est + pas disponible sans Xcode) : + - `Client/tests/ProtocolParsersTests.cpp` : `parseNcAsmState` et `parseEqualizer` avec les trames réelles + du XM6 (§7) et des trames des anciens formats (`0x17`, 5 bandes + Clear Bass) ; aller-retour mise en trame + / décodage (`packageDataForBt` / `unpackBtMessage`), échappement et somme de contrôle. + - `Client/tests/LogicTests.swift` : `ReconnectPolicy` (suite des délais, remise à zéro) et `PollGuard` + (fenêtre de 3 s). +- **Checklist manuelle** avec le XM6 : chaque élément du menu, synchronisation avec le bouton physique, menu + ouvert pendant un changement, coupure pour inactivité puis reconnexion, déconnexion manuelle (pas de + reconnexion), lancement à l'ouverture de session, bascule clair/sombre de la barre, français et anglais. + +## 10. Ordre de construction + +1. **Base** : `scripts/build.sh` + `Makefile`, point d'entrée Swift, app d'agent, icône et menu minimal + (en-tête + modes + Quitter), sur le cœur existant. +2. **Menu complet** : toutes les lignes de §4, avec les fonctions actuelles ; `ContentView.swift` supprimé. +3. **Corrections XM6** : `ProtocolParsers` + tests, relecture `0x19`, égaliseur 10 bandes, puis les + expérimentations de §7. +4. **Options** : `AppSettings`, `DeviceWatcher`, connexion et reconnexion auto, lancement à l'ouverture de + session. +5. **Nettoyage** : suppression du `.xcodeproj` et des fichiers morts, CI, README, traductions. + +## 11. Risques + +| Risque | Parade | +|---|---| +| Taille et surbrillance des vues SwiftUI dans un `NSMenu` | Taille fixée par ligne ; vérifié dès l'étape 1 avec le curseur | +| Minuteurs gelés pendant l'ouverture du menu | Mode `RunLoop.Mode.common` (§6.3) | +| La connexion bloque le fil principal quelques secondes (boucle d'attente existante dans `HeadphonesBridge`) | Acceptable en arrière-plan ; l'en-tête affiche « Connexion… » | +| Formats XM6 non confirmés | Règle de sécurité §7 ; fonctions désactivées tant qu'elles ne sont pas vérifiées | +| Autorisation Bluetooth redemandée | Identifiant de bundle conservé | From 9e8a1d14cc28ad3c041073c5b5de6cf82637a5c0 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 13:30:24 +0200 Subject: [PATCH 04/50] docs: menu bar app implementation plan --- .../plans/2026-09-10-menu-bar-app.md | 2958 +++++++++++++++++ 1 file changed, 2958 insertions(+) create mode 100644 docs/superpowers/plans/2026-09-10-menu-bar-app.md diff --git a/docs/superpowers/plans/2026-09-10-menu-bar-app.md b/docs/superpowers/plans/2026-09-10-menu-bar-app.md new file mode 100644 index 00000000..6a47c700 --- /dev/null +++ b/docs/superpowers/plans/2026-09-10-menu-bar-app.md @@ -0,0 +1,2958 @@ +# SonyBridge barre des menus — plan d'implémentation + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal :** transformer SonyBridge (app à fenêtre SwiftUI) en app de barre des menus native, avec toutes les +fonctions existantes, les corrections WH-1000XM6, les options de connexion automatique, et un build sans Xcode. + +**Architecture :** `NSStatusItem` + `NSMenu` (AppKit). Les lignes riches (en-tête, curseurs, interrupteurs, +égaliseur) sont des vues SwiftUI hébergées dans des `NSMenuItem` (`NSHostingView`). Le modèle +`HeadphonesModel` (Swift, observable) pilote le pont Obj-C++ `HeadphonesBridge`, qui pilote le cœur C++ +existant. La logique pure (reconnexion, anti-retour d'affichage, limitation d'envoi, décodage des trames) est +isolée dans de petits fichiers testés par des exécutables de test. + +**Tech Stack :** Swift 5 (mode de langage), SwiftUI, AppKit, Combine, IOBluetooth, ServiceManagement ; +C++17 et Obj-C++ (ARC) ; build `swiftc` + `clang++` via `scripts/build.sh` et `Makefile` ; Python 3 (vérif. des +traductions). + +**Spec :** `docs/superpowers/specs/2026-09-10-menu-bar-app-design.md` + +## Global Constraints + +- macOS minimum : **13.0** (`LSMinimumSystemVersion`, cible `-apple-macos13.0`). +- Pas de Xcode : tout se compile avec les Command Line Tools (`make`, `make test`, `make run`, `make release`). +- Swift compilé avec `-swift-version 5` ; C++ en `-std=c++17` ; Obj-C++ avec `-fobjc-arc`. +- Bundle : `SonyBridge.app`, exécutable `SonyBridge`, identifiant **`com.semvis123.SonyHeadphonesClient`** + (inchangé), `LSUIElement = YES`. +- Textes : **tout texte affiché** passe par `tr("…")` en Swift ou `NSLocalizedString(@"…", nil)` en Obj-C++, + avec la clé en anglais et sa traduction dans `Client/macos/fr.lproj/Localizable.strings`. Pas de texte affiché + en dur ailleurs. `make test` le vérifie (à partir de la tâche 2). +- Sécurité XM6 : **ne jamais envoyer au casque une commande dont le format n'est pas vérifié** (spec §7). En + particulier, aucune écriture d'égaliseur sur la disposition 10 bandes avant la tâche 8. +- Git : c'est **l'utilisateur** qui committe. À chaque étape « Commit », afficher la commande proposée et + attendre qu'il la lance. +- Test matériel : l'agent ne voit pas l'écran. Chaque vérification visuelle est demandée à l'utilisateur, avec + une liste précise de choses à regarder. Les échanges avec le casque se lisent dans `build/app.log` + (`make run DEBUG=1`). + +## Carte des fichiers + +| Fichier | Tâche | Responsabilité | +|---|---|---| +| `scripts/build.sh` | 1 | Compile et assemble `build/SonyBridge.app` | +| `scripts/test.sh` | 2 | Compile et lance les exécutables de test + vérif. des traductions | +| `scripts/check_localization.py` | 2 | Chaque clé `tr()` a sa traduction, aucune traduction inutilisée | +| `Makefile` | 1, 2 | `make`, `run`, `test`, `release`, `clean` | +| `.github/workflows/build.yml` | 1, 2 | CI : tests + build universel | +| `Client/macos/info.plist` | 1 | App d'agent, macOS 13, nom SonyBridge | +| `Client/macos/Resources/AppIcon.iconset/` | 1 | Icône de l'app (compilée par `iconutil`) | +| `Client/macos/SonyBridgeApp.swift` | 1 | Point d'entrée `@main` | +| `Client/macos/AppDelegate.swift` | 1, 7 | Assemble modèle, réglages, surveillance Bluetooth, icône de barre | +| `Client/macos/Localization.swift` | 1 | `tr(_:)` | +| `Client/macos/MenuSupport.swift` | 1, 5, 6 | `ActionMenuItem`, `sectionHeader`, `hostingMenuItem`, `MenuMetrics`, `titleWithValue` | +| `Client/macos/StatusItemController.swift` | 1, 4, 7 | L'icône de la barre et son menu | +| `Client/macos/StatusIcon.swift` | 6 | Choix du symbole selon le mode | +| `Client/macos/HeadphonesMenu.swift` | 1, 6, 7, 8 | Construit le `NSMenu` et le synchronise avec le modèle | +| `Client/macos/MenuRows/*.swift` | 5 | `HeaderRow`, `AmbientLevelRow`, `ToggleRow`, `EqualizerRow` | +| `Client/macos/HeadphonesModel.swift` | 4, 7, 8 | État observable + actions + minuteurs + reconnexion | +| `Client/macos/ReconnectPolicy.swift` | 2 | Délais de reconnexion | +| `Client/macos/PollGuard.swift` | 2 | Ignore les relectures 3 s après un changement | +| `Client/macos/SendThrottle.swift` | 2 | Limite les envois des curseurs à 1 / 150 ms | +| `Client/macos/AppSettings.swift` | 7 | Les 3 options + lancement à l'ouverture de session | +| `Client/macos/DeviceWatcher.swift` | 7 | Connexions / déconnexions Bluetooth de macOS | +| `Client/macos/HeadphonesBridge.h/.mm` | 3, 4, 7, 8 | Pont Obj-C++ | +| `Client/ProtocolParsers.h/.cpp` | 3, 8 | Décodage / encodage purs des trames | +| `Client/Headphones.h/.cpp` | 3, 8 | Utilise `ProtocolParsers`, canal NC `0x19` | +| `Client/tests/LogicTests/main.swift` | 2 | Tests de la logique Swift | +| `Client/tests/ProtocolParsersTests.cpp` | 3, 8 | Tests du décodage avec les trames réelles | +| `Client/macos/fr.lproj/Localizable.strings` | toutes | Traductions | +| `README.md` | 1, 9 | Build, description | + +**Supprimés en tâche 1 :** `Client/macos/{main.mm, AppDelegate.h, AppDelegate.mm, ViewController.h, +ViewController.mm, Main.storyboard, ContentView.swift, exportOptions.plist}`, +`Client/macos/SonyHeadphonesClient.xcodeproj/`, `Client/macos/Assets.xcassets/`, +`.github/workflows/xcodebuild.yml`. + +--- + +### Task 1: Build par script + app d'agent avec un menu minimal + +Remplace le projet Xcode et la fenêtre par un build en ligne de commande et une icône de barre des menus. Le +menu minimal contient l'en-tête, les trois modes, Connecter/Déconnecter et Quitter. Il utilise le modèle +**existant** (`HeadphonesModel` actuel, avec `connected`, `connecting`, `mode`, `setMode`, `connect`, `disconnect`). + +**Files:** +- Create: `scripts/build.sh`, `Makefile`, `.github/workflows/build.yml` +- Create: `Client/macos/SonyBridgeApp.swift`, `Client/macos/AppDelegate.swift`, `Client/macos/Localization.swift`, + `Client/macos/MenuSupport.swift`, `Client/macos/StatusItemController.swift`, `Client/macos/HeadphonesMenu.swift` +- Create: `Client/macos/Resources/AppIcon.iconset/*.png` (copiés depuis `Assets.xcassets`) +- Modify: `Client/macos/info.plist`, `Client/macos/fr.lproj/Localizable.strings`, `README.md` (section build) +- Delete: la liste « Supprimés en tâche 1 » ci-dessus + +**Interfaces:** +- Consumes : `HeadphonesModel` actuel (`@Published connected/connecting/mode/deviceName/batteryLevel`, + `connect()`, `disconnect()`, `setMode(_:)`), `SHCAmbientMode` (`.off/.noiseCanceling/.ambientSound`). +- Produces : + - `func tr(_ key: String) -> String` + - `final class ActionMenuItem: NSMenuItem { init(_ title: String, key: String = "", handler: @escaping () -> Void) }` + - `func sectionHeader(_ title: String) -> NSMenuItem` + - `final class StatusItemController { init(model: HeadphonesModel) }` + - `final class HeadphonesMenu { let menu: NSMenu; init(model: HeadphonesModel) }` + - commandes `make`, `make run [DEBUG=1]`, `make release`, `make clean` ; app dans `build/SonyBridge.app` + +- [ ] **Step 1 : Copier l'icône dans un `.iconset`, puis supprimer les anciens fichiers** + +```bash +S=Client/macos/Assets.xcassets/AppIcon.appiconset; D=Client/macos/Resources/AppIcon.iconset +mkdir -p "$D" +for s in 16 32 128 256 512; do + cp "$S/icon_$s.png" "$D/icon_${s}x${s}.png" + cp "$S/icon_$((s*2)).png" "$D/icon_${s}x${s}@2x.png" +done +ls "$D" | wc -l # attendu : 10 +git rm -r -q Client/macos/main.mm Client/macos/AppDelegate.h Client/macos/AppDelegate.mm \ + Client/macos/ViewController.h Client/macos/ViewController.mm Client/macos/Main.storyboard \ + Client/macos/ContentView.swift Client/macos/exportOptions.plist \ + Client/macos/SonyHeadphonesClient.xcodeproj Client/macos/Assets.xcassets .github/workflows/xcodebuild.yml +``` + +- [ ] **Step 2 : Écrire `scripts/build.sh`** (puis `chmod +x scripts/build.sh`) + +`/bin/bash` sur macOS est la version 3.2 : pas de tableau vide avec `set -u`, d'où les options passées en chaînes. + +```bash +#!/bin/bash +# Builds build/SonyBridge.app with the Command Line Tools only (no Xcode needed). +# CONFIG=debug|release (default: debug) +# ARCHS="arm64 x86_64" (default: this Mac's architecture; several = universal binary via lipo) +# DEBUG_PROTOCOL=1 (hex-dumps every frame exchanged with the headphones to stderr) +set -euo pipefail +shopt -s nullglob + +ROOT=$(cd "$(dirname "$0")/.." && pwd) +CORE=$ROOT/Client +MAC=$CORE/macos +OUT=$ROOT/build +APP=$OUT/SonyBridge.app +SDK=$(xcrun --show-sdk-path) +CONFIG=${CONFIG:-debug} +ARCHS=${ARCHS:-$(uname -m)} +MIN_MACOS=13.0 + +if [ "$CONFIG" = release ]; then SWIFT_OPT="-O"; CXX_OPT="-O2"; else SWIFT_OPT="-Onone -g"; CXX_OPT="-O0 -g"; fi +SWIFT_DEFINES=""; CXX_DEFINES="" +if [ "${DEBUG_PROTOCOL:-0}" = 1 ]; then SWIFT_DEFINES="-D DEBUG_PROTOCOL"; CXX_DEFINES="-DSHC_DEBUG_PROTOCOL"; fi + +SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift) +CXX_SOURCES=("$CORE"/*.cpp) +OBJCXX_SOURCES=("$MAC"/*.mm) + +rm -rf "$APP" +mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" +BINARIES="" + +for ARCH in $ARCHS; do + OBJ=$OUT/obj/$CONFIG-$ARCH + rm -rf "$OBJ"; mkdir -p "$OBJ" + TARGET=$ARCH-apple-macos$MIN_MACOS + CXXFLAGS="-target $TARGET -isysroot $SDK -std=c++17 $CXX_OPT $CXX_DEFINES -I $CORE -I $MAC" + + echo "== [$ARCH] Swift" + swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 $SWIFT_OPT $SWIFT_DEFINES -wmo -parse-as-library \ + -module-name SonyBridge \ + -import-objc-header "$MAC/SonyHeadphonesClient-Bridging-Header.h" -I "$MAC" -I "$CORE" \ + -c "${SWIFT_SOURCES[@]}" -o "$OBJ/swift.o" + + echo "== [$ARCH] C++" + for f in "${CXX_SOURCES[@]}"; do clang++ $CXXFLAGS -c "$f" -o "$OBJ/$(basename "$f" .cpp).o"; done + + echo "== [$ARCH] Obj-C++" + for f in "${OBJCXX_SOURCES[@]}"; do + clang++ $CXXFLAGS -fobjc-arc -fmodules -fcxx-modules -c "$f" -o "$OBJ/$(basename "$f" .mm).o" + done + + echo "== [$ARCH] Link" + swiftc -target "$TARGET" -sdk "$SDK" "$OBJ"/*.o -o "$OBJ/SonyBridge" -lc++ \ + -framework AppKit -framework SwiftUI -framework Combine -framework IOBluetooth \ + -framework IOBluetoothUI -framework ServiceManagement + BINARIES="$BINARIES $OBJ/SonyBridge" +done + +lipo -create $BINARIES -output "$APP/Contents/MacOS/SonyBridge" + +echo "== Resources" +cp "$MAC/info.plist" "$APP/Contents/Info.plist" +cp -R "$MAC"/*.lproj "$APP/Contents/Resources/" +iconutil -c icns "$MAC/Resources/AppIcon.iconset" -o "$APP/Contents/Resources/AppIcon.icns" + +echo "== Sign (ad-hoc)" +codesign --force --sign - --entitlements "$MAC/SonyHeadphonesClient.entitlements" "$APP" +echo "OK -> $APP" +``` + +- [ ] **Step 3 : Écrire le `Makefile`** + +```make +# SonyBridge — build without Xcode. See scripts/build.sh for the knobs. +DEBUG ?= 0 + +.PHONY: all build run release clean + +all: build + +build: + DEBUG_PROTOCOL=$(DEBUG) ./scripts/build.sh + +run: build + -pkill -x SonyBridge + open --stdout build/app.log --stderr build/app.log build/SonyBridge.app + +release: + CONFIG=release ARCHS="arm64 x86_64" ./scripts/build.sh + cd build && rm -f SonyBridge.zip && ditto -c -k --keepParent SonyBridge.app SonyBridge.zip + +clean: + rm -rf build +``` + +- [ ] **Step 4 : Écrire `.github/workflows/build.yml`** (la tâche 2 y ajoutera `make test`) + +```yaml +name: macOS + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Build (release, universal) + run: make release + - uses: actions/upload-artifact@v4 + with: + name: SonyBridge-macOS + path: build/SonyBridge.zip +``` + +- [ ] **Step 5 : Réécrire `Client/macos/info.plist`** + +```xml + + + + + CFBundleDevelopmentRegion + en + CFBundleLocalizations + + en + fr + + CFBundleExecutable + SonyBridge + CFBundleIdentifier + com.semvis123.SonyHeadphonesClient + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + SonyBridge + CFBundleDisplayName + SonyBridge + CFBundlePackageType + APPL + CFBundleShortVersionString + 0.5.0 + CFBundleVersion + 1 + CFBundleIconFile + AppIcon + LSApplicationCategoryType + public.app-category.utilities + LSMinimumSystemVersion + 13.0 + LSUIElement + + NSHighResolutionCapable + + NSBluetoothAlwaysUsageDescription + This app uses Bluetooth in order to connect to your headphones. + NSPrincipalClass + NSApplication + + +``` + +Run : `plutil -lint Client/macos/info.plist` → `OK`. + +- [ ] **Step 6 : Écrire les fichiers Swift de base** + +`Client/macos/SonyBridgeApp.swift` : + +```swift +import AppKit + +// Entry point: a menu bar-only app (LSUIElement), no window and no Dock icon. +@main +enum SonyBridgeApp { + static func main() { + let app = NSApplication.shared + let delegate = AppDelegate() + app.delegate = delegate + app.setActivationPolicy(.accessory) + withExtendedLifetime(delegate) { app.run() } + } +} +``` + +`Client/macos/AppDelegate.swift` : + +```swift +import AppKit + +final class AppDelegate: NSObject, NSApplicationDelegate { + private let model = HeadphonesModel() + private var statusItemController: StatusItemController? + + func applicationDidFinishLaunching(_ notification: Notification) { + statusItemController = StatusItemController(model: model) + } + + func applicationWillTerminate(_ notification: Notification) { + model.disconnect() + } +} +``` + +`Client/macos/Localization.swift` : + +```swift +import Foundation + +// Looks up a UI string in Localizable.strings. Every user-facing string goes through this (checked by make test). +func tr(_ key: String) -> String { + NSLocalizedString(key, comment: "") +} +``` + +`Client/macos/MenuSupport.swift` : + +```swift +import AppKit + +// A menu item that runs a closure (NSMenuItem only supports target/selector natively). +final class ActionMenuItem: NSMenuItem { + private let handler: () -> Void + + init(_ title: String, key: String = "", handler: @escaping () -> Void) { + self.handler = handler + super.init(title: title, action: #selector(fire), keyEquivalent: key) + target = self + } + + required init(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + @objc private func fire() { + handler() + } +} + +// A small grey, non-clickable title above a group of items (like "Contrôle du son ambiant"). +func sectionHeader(_ title: String) -> NSMenuItem { + let item = NSMenuItem() + item.attributedTitle = NSAttributedString(string: title, attributes: [ + .font: NSFont.systemFont(ofSize: NSFont.smallSystemFontSize, weight: .semibold), + .foregroundColor: NSColor.secondaryLabelColor, + ]) + item.isEnabled = false + return item +} +``` + +`Client/macos/StatusItemController.swift` (icône provisoire ; la tâche 6 ajoute `StatusIcon`) : + +```swift +import AppKit +import Combine + +// Owns the menu bar icon and attaches the headphones menu to it. +final class StatusItemController { + private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) + private let headphonesMenu: HeadphonesMenu + private var cancellables = Set() + + init(model: HeadphonesModel) { + headphonesMenu = HeadphonesMenu(model: model) + statusItem.menu = headphonesMenu.menu + let image = NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") + image?.isTemplate = true + statusItem.button?.image = image + model.$connected + .receive(on: DispatchQueue.main) + .sink { [weak self] connected in self?.statusItem.button?.appearsDisabled = !connected } + .store(in: &cancellables) + } +} +``` + +`Client/macos/HeadphonesMenu.swift` (version minimale, remplacée entièrement en tâche 6) : + +```swift +import AppKit +import Combine + +// The status item's menu. Minimal for now: header, modes, connect/disconnect, quit. +final class HeadphonesMenu { + let menu = NSMenu() + private let model: HeadphonesModel + private var cancellables = Set() + private let headerItem = NSMenuItem() + private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] + private var connectItem: ActionMenuItem! + + init(model: HeadphonesModel) { + self.model = model + menu.autoenablesItems = false + + headerItem.isEnabled = false + menu.addItem(headerItem) + menu.addItem(.separator()) + + menu.addItem(sectionHeader(tr("Ambient Sound Control"))) + let modes: [(SHCAmbientMode, String)] = [ + (.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off")), + ] + for (mode, title) in modes { + let item = ActionMenuItem(title) { [weak model] in model?.setMode(mode) } + modeItems.append((mode, item)) + menu.addItem(item) + } + menu.addItem(.separator()) + + connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } + menu.addItem(connectItem) + menu.addItem(.separator()) + menu.addItem(ActionMenuItem(tr("Quit SonyBridge"), key: "q") { NSApp.terminate(nil) }) + + // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. + model.objectWillChange + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.update() } + .store(in: &cancellables) + update() + } + + private func update() { + let connected = model.connected + var header = model.deviceName.isEmpty ? "SonyBridge" : model.deviceName + if connected && model.batteryLevel >= 0 { + header += " — " + String(format: tr("%ld%%"), model.batteryLevel) + } + headerItem.title = header + for (mode, item) in modeItems { + item.state = connected && model.mode == mode ? .on : .off + item.isEnabled = connected + } + connectItem.title = connected ? tr("Disconnect") : (model.connecting ? tr("Connecting…") : tr("Connect…")) + connectItem.isEnabled = !model.connecting + } + + private func toggleConnection() { + if model.connected { + model.disconnect() + } else { + NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window + model.connect() + } + } +} +``` + +- [ ] **Step 7 : Remplacer `Client/macos/fr.lproj/Localizable.strings`** par les seules clés utilisées maintenant + +``` +/* SonyBridge — French UI strings. Keys are the English source strings; missing keys fall back to English. */ + +/* Menu */ +"Ambient Sound Control" = "Contrôle du son ambiant"; +"Noise Canceling" = "Réduction de bruit"; +"Ambient Sound" = "Son ambiant"; +"Off" = "Désactivé"; +"Connect…" = "Connecter…"; +"Connecting…" = "Connexion…"; +"Disconnect" = "Déconnecter"; +"Quit SonyBridge" = "Quitter SonyBridge"; +"%ld%%" = "%ld %%"; + +/* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ +"Headphones disconnected." = "Casque déconnecté."; +"No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; +"Connection timed out." = "Délai de connexion dépassé."; +"Not connected." = "Non connecté."; +"Equalizer control isn't supported on this device yet." = "Le réglage de l’égaliseur n’est pas encore pris en charge sur cet appareil."; +"Not supported on this device." = "Non pris en charge sur cet appareil."; +``` + +Run : `plutil -lint Client/macos/fr.lproj/Localizable.strings` → `OK`. + +- [ ] **Step 8 : Mettre à jour la section build du `README.md`** + +Remplacer le bloc `
` « macOS (native SwiftUI app) » de « 🚀 Build from source » par : + +````markdown +
+macOS (menu bar app) + +Requires the **Xcode Command Line Tools** (`xcode-select --install`) — the full Xcode app is not needed. + +```sh +git clone https://github.com/AmitRajput-Dev/SonyBridge.git +cd SonyBridge +make run # builds build/SonyBridge.app and launches it +``` + +`make test` runs the unit tests, `make release` builds a universal (Apple Silicon + Intel) zip, and +`make run DEBUG=1` logs every frame exchanged with the headphones to `build/app.log`. +
+```` + +- [ ] **Step 9 : Compiler** + +Run : `make` +Attendu : les étapes `== [arm64] Swift`, `C++`, `Obj-C++`, `Link`, `Resources`, `Sign`, puis +`OK -> …/build/SonyBridge.app`, sans erreur. + +- [ ] **Step 10 : Lancer et vérifier avec l'utilisateur** + +Run : `make run DEBUG=1 && pgrep -x SonyBridge` +Attendu : un PID. Demander à l'utilisateur de vérifier : +1. Une icône de casque est dans la barre des menus, grisée, et **rien dans le Dock**. +2. Le menu s'ouvre : « SonyBridge », « Contrôle du son ambiant », les 3 modes (grisés), « Connecter… », + « Quitter SonyBridge ⌘Q », en français. +3. « Connecter… » connecte le XM6 : l'icône n'est plus grisée, et l'en-tête affiche « WH-1000XM6 — 68 % ». +4. Cliquer sur « Son ambiant » change bien le mode dans le casque. **Connu, corrigé en tâche 3** : la coche + peut revenir sur « Désactivé » au bout de 2 s (mauvaise relecture du XM6). +5. « Quitter » ferme l'app. + +- [ ] **Step 11 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "feat(macos): menu bar agent app built with make (drop Xcode project and window UI)" +``` + +--- + +### Task 2: Logique pure (reconnexion, anti-retour, limitation) + `make test` + +**Files:** +- Create: `Client/macos/ReconnectPolicy.swift`, `Client/macos/PollGuard.swift`, `Client/macos/SendThrottle.swift` +- Create: `Client/tests/LogicTests/main.swift`, `scripts/test.sh`, `scripts/check_localization.py` +- Modify: `Makefile` (cible `test`), `.github/workflows/build.yml` (étape `make test`) + +**Interfaces:** +- Produces : + - `struct ReconnectPolicy { static let delays: [TimeInterval]; private(set) var attempt: Int; mutating func nextDelay() -> TimeInterval; mutating func reset() }` + - `struct PollGuard { init(window: TimeInterval = 3); mutating func userChanged(_ key: Key, at date: Date = Date()); func shouldAcceptPoll(for key: Key, at date: Date = Date()) -> Bool }` + - `struct SendThrottle { init(interval: TimeInterval = 0.15); mutating func shouldSend(at date: Date = Date(), final: Bool) -> Bool }` + - `make test` : lance `LogicTests` puis `check_localization.py` (la tâche 3 ajoute les tests C++) + +- [ ] **Step 1 : Écrire les tests** `Client/tests/LogicTests/main.swift` + +```swift +import Foundation + +// Minimal test runner (XCTest isn't available without Xcode). Exit code 1 on any failure. +var failures = 0 +func check(_ condition: Bool, _ message: String, line: Int = #line) { + if !condition { + failures += 1 + print("FAIL line \(line): \(message)") + } +} + +// ReconnectPolicy: 3 s, 10 s, 30 s, then every 60 s; reset restarts. +do { + var policy = ReconnectPolicy() + let delays = (0..<6).map { _ in policy.nextDelay() } + check(delays == [3, 10, 30, 60, 60, 60], "reconnect schedule was \(delays)") + policy.reset() + check(policy.nextDelay() == 3, "reset restarts the schedule") +} + +// PollGuard: a poll is ignored for 3 s after the user changed that setting. +do { + var pollGuard = PollGuard(window: 3) + let t0 = Date(timeIntervalSince1970: 1_000) + check(pollGuard.shouldAcceptPoll(for: "ambient", at: t0), "no user change: accept") + pollGuard.userChanged("ambient", at: t0) + check(!pollGuard.shouldAcceptPoll(for: "ambient", at: t0.addingTimeInterval(2.9)), "inside the window: reject") + check(pollGuard.shouldAcceptPoll(for: "ambient", at: t0.addingTimeInterval(3)), "after the window: accept") + check(pollGuard.shouldAcceptPoll(for: "eq", at: t0.addingTimeInterval(1)), "other keys are unaffected") +} + +// SendThrottle: at most one send per 150 ms while dragging; the final value always goes out. +do { + var throttle = SendThrottle(interval: 0.15) + let t0 = Date(timeIntervalSince1970: 1_000) + check(throttle.shouldSend(at: t0, final: false), "first drag event sends") + check(!throttle.shouldSend(at: t0.addingTimeInterval(0.10), final: false), "too soon: skip") + check(throttle.shouldSend(at: t0.addingTimeInterval(0.16), final: false), "after the interval: send") + check(throttle.shouldSend(at: t0.addingTimeInterval(0.17), final: true), "final value always sends") +} + +if failures > 0 { + print("LogicTests: \(failures) failure(s)") + exit(1) +} +print("LogicTests: all passed") +``` + +- [ ] **Step 2 : Écrire `scripts/test.sh`** (puis `chmod +x scripts/test.sh`) + +```bash +#!/bin/bash +# Builds and runs the unit test executables (plain asserts, no XCTest), then checks the translations. +set -euo pipefail + +ROOT=$(cd "$(dirname "$0")/.." && pwd) +MAC=$ROOT/Client/macos +OUT=$ROOT/build/tests +SDK=$(xcrun --show-sdk-path) +TARGET=$(uname -m)-apple-macos13.0 +mkdir -p "$OUT" + +echo "== LogicTests" +swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ + "$ROOT/Client/tests/LogicTests/main.swift" \ + "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ + -o "$OUT/LogicTests" +"$OUT/LogicTests" + +echo "== Localization" +python3 "$ROOT/scripts/check_localization.py" +``` + +- [ ] **Step 3 : Ajouter la cible `test` au `Makefile`** + +Remplacer la ligne `.PHONY` et ajouter la cible : + +```make +.PHONY: all build run test release clean + +test: + ./scripts/test.sh +``` + +- [ ] **Step 4 : Lancer les tests pour les voir échouer** + +Run : `make test` +Attendu : échec de compilation, `cannot find 'ReconnectPolicy' in scope` (et `PollGuard`, `SendThrottle`). + +- [ ] **Step 5 : Écrire les trois fichiers de logique** + +`Client/macos/ReconnectPolicy.swift` : + +```swift +import Foundation + +// Delays between automatic reconnection attempts: 3 s, 10 s, 30 s, then every 60 s. +struct ReconnectPolicy { + static let delays: [TimeInterval] = [3, 10, 30, 60] + private(set) var attempt = 0 + + // Delay before the next attempt; each call advances the schedule. + mutating func nextDelay() -> TimeInterval { + let delay = Self.delays[min(attempt, Self.delays.count - 1)] + attempt += 1 + return delay + } + + mutating func reset() { + attempt = 0 + } +} +``` + +`Client/macos/PollGuard.swift` : + +```swift +import Foundation + +// Ignores a polled value for a setting the user changed less than `window` seconds ago, so a read-back that +// raced the user's command doesn't briefly flip the menu back to the old state. +struct PollGuard { + let window: TimeInterval + private var lastUserChange: [Key: Date] = [:] + + init(window: TimeInterval = 3) { + self.window = window + } + + mutating func userChanged(_ key: Key, at date: Date = Date()) { + lastUserChange[key] = date + } + + func shouldAcceptPoll(for key: Key, at date: Date = Date()) -> Bool { + guard let changed = lastUserChange[key] else { return true } + return date.timeIntervalSince(changed) >= window + } +} +``` + +`Client/macos/SendThrottle.swift` : + +```swift +import Foundation + +// Rate-limits slider commands: at most one every `interval` while dragging; the final value always goes out. +struct SendThrottle { + let interval: TimeInterval + private var lastSend: Date? + + init(interval: TimeInterval = 0.15) { + self.interval = interval + } + + mutating func shouldSend(at date: Date = Date(), final: Bool) -> Bool { + if !final, let last = lastSend, date.timeIntervalSince(last) < interval { + return false + } + lastSend = date + return true + } +} +``` + +- [ ] **Step 6 : Écrire `scripts/check_localization.py`** + +```python +#!/usr/bin/env python3 +"""Every tr("…") / NSLocalizedString("…") key must have a French translation, and every French key must be used.""" +import json +import pathlib +import re +import subprocess +import sys + +ROOT = pathlib.Path(__file__).resolve().parent.parent +MAC = ROOT / "Client" / "macos" +STRINGS = MAC / "fr.lproj" / "Localizable.strings" +LITERAL = r'"((?:[^"\\]|\\.)*)"' +PATTERNS = [re.compile(r"\btr\(" + LITERAL + r"\)"), re.compile(r"NSLocalizedString\(@?" + LITERAL)] + +french = set(json.loads(subprocess.check_output(["plutil", "-convert", "json", "-o", "-", str(STRINGS)]))) +used = set() +for path in sorted(MAC.rglob("*.swift")) + sorted(MAC.rglob("*.mm")): + text = path.read_text(encoding="utf-8") + for pattern in PATTERNS: + used.update(key.replace("\\n", "\n") for key in pattern.findall(text)) + +missing = sorted(used - french) +unused = sorted(french - used) +for key in missing: + print(f"missing French translation: {key!r}") +for key in unused: + print(f"unused French key: {key!r}") +if missing or unused: + sys.exit(1) +print(f"Localization: {len(used)} keys, all translated") +``` + +- [ ] **Step 7 : Relancer les tests** + +Run : `make test` +Attendu : `LogicTests: all passed` puis `Localization: 15 keys, all translated` (les 15 clés de la tâche 1). +Si la vérif. des traductions échoue, corriger `Localizable.strings` : la tâche 1 doit être propre. + +- [ ] **Step 8 : Ajouter les tests à la CI** + +Dans `.github/workflows/build.yml`, avant l'étape « Build (release, universal) » : + +```yaml + - name: Test + run: make test +``` + +- [ ] **Step 9 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "test: reconnect/poll-guard/throttle logic, localization check, make test" +``` + +--- + +### Task 3: Décodage des trames + corrections XM6 (canal `0x19`, égaliseur 10 bandes en lecture) + +**Files:** +- Create: `Client/ProtocolParsers.h`, `Client/ProtocolParsers.cpp`, `Client/tests/ProtocolParsersTests.cpp` +- Modify: `Client/Headphones.h`, `Client/Headphones.cpp` (`requestAmbientState`, `requestEqualizer`, + `setEqualizerCustom`, nouvelles méthodes), `Client/macos/HeadphonesBridge.h/.mm`, `scripts/test.sh` + +**Interfaces:** +- Produces (C++) : + - `namespace ProtocolParsers { struct NcAsmState { bool enabled; bool ambient; bool focusOnVoice; int level; }; std::optional parseNcAsmState(const Buffer&); struct EqualizerState { unsigned char preset; bool hasClearBass; int clearBass; std::vector bands; }; std::optional parseEqualizer(const Buffer&); }` + - `Headphones::probeNcAsmInquiryType()`, `int Headphones::getEqualizerBandCount()`, `bool Headphones::equalizerHasClearBass()` +- Produces (Obj-C, visible en Swift) : `equalizerBandCount: Int`, `equalizerHasClearBass: Bool`, + `equalizerWritable: Bool` sur `HeadphonesBridge`. + +- [ ] **Step 1 : Écrire les tests** `Client/tests/ProtocolParsersTests.cpp` (trames réelles du XM6, spec §7) + +```cpp +#include "ProtocolParsers.h" +#include "CommandSerializer.h" +#include +#include + +// Minimal test runner (no framework). Exit code 1 on any failure. +static int failures = 0; +#define CHECK(cond) do { if (!(cond)) { failures++; std::printf("FAIL %s:%d: %s\n", __FILE__, __LINE__, #cond); } } while (0) + +static Buffer bytes(std::initializer_list values) +{ + Buffer b; + for (int v : values) b.push_back((char)v); + return b; +} + +int main() +{ + using namespace ProtocolParsers; + + // --- NC/ASM state --- + // WH-1000XM6 answer to the legacy 0x17 inquiry: all zeros = "not this channel". + CHECK(!parseNcAsmState(bytes({ 0x67, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00 })).has_value()); + // WH-1000XM6 notify on 0x19: Ambient Sound on, level 10, no voice focus. + { + auto s = parseNcAsmState(bytes({ 0x69, 0x19, 0x01, 0x01, 0x01, 0x00, 0x0a, 0x00, 0x00 })); + CHECK(s && s->enabled && s->ambient && !s->focusOnVoice && s->level == 10); + } + // WH-1000XM6 reply on 0x19: Noise Cancelling (ambient byte = 0). + { + auto s = parseNcAsmState(bytes({ 0x67, 0x19, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00 })); + CHECK(s && s->enabled && !s->ambient); + } + // Legacy 0x17 layout (WH-CH720N): effect off. + { + auto s = parseNcAsmState(bytes({ 0x67, 0x17, 0x01, 0x00, 0x00, 0x00, 0x01 })); + CHECK(s && !s->enabled); + } + CHECK(!parseNcAsmState(bytes({ 0x67, 0x17, 0x01 })).has_value()); // too short + CHECK(!parseNcAsmState(bytes({ 0x57, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0a })).has_value()); // wrong opcode + + // --- Equalizer --- + // WH-1000XM6: unknown preset 0x30, 10 bands (offset +10 hypothesis, spec §7). + { + auto e = parseEqualizer(bytes({ 0x57, 0x00, 0x30, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 })); + CHECK(e && e->preset == 0x30 && !e->hasClearBass && e->bands.size() == 10); + CHECK(e && e->bands[0] == 0 && e->bands[2] == -5 && e->bands[9] == -4); + } + // 5 bands + Clear Bass (WH-CH720N): Manual, bass +3, bands -2..+2. + { + auto e = parseEqualizer(bytes({ 0x57, 0x00, 0xa0, 0x06, 13, 8, 9, 10, 11, 12 })); + CHECK(e && e->preset == 0xa0 && e->hasClearBass && e->clearBass == 3); + CHECK(e && e->bands == std::vector({ -2, -1, 0, 1, 2 })); + } + // Preset only, no band data. + { + auto e = parseEqualizer(bytes({ 0x57, 0x00, 0x16 })); + CHECK(e && e->preset == 0x16 && e->bands.empty()); + } + CHECK(!parseEqualizer(bytes({ 0x23, 0x00, 0x44, 0x00 })).has_value()); // battery reply + + // --- Framing --- + // Round trip, with a payload byte (0x3c = END_MARKER) that must be escaped. + { + Buffer payload = bytes({ 0x68, 0x17, 0x01, 0x01, 0x01, 0x00, 0x3c }); + auto frame = CommandSerializer::packageDataForBt(payload, DATA_TYPE::DATA_MDR, 1); + CHECK(frame.front() == START_MARKER && frame.back() == END_MARKER); + auto msg = CommandSerializer::unpackBtMessage(Buffer(frame.begin() + 1, frame.end() - 1)); + CHECK(msg.dataType == DATA_TYPE::DATA_MDR && msg.seqNumber == 1 && msg.payload == payload); + } + // Real WH-1000XM6 battery frame (68 %), between the 3e/3c markers. + { + auto msg = CommandSerializer::unpackBtMessage(bytes({ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x04, 0x23, 0x00, 0x44, 0x00, 0x77 })); + CHECK(msg.payload == bytes({ 0x23, 0x00, 0x44, 0x00 })); + } + + if (failures) { std::printf("ProtocolParsersTests: %d failure(s)\n", failures); return 1; } + std::printf("ProtocolParsersTests: all passed\n"); + return 0; +} +``` + +- [ ] **Step 2 : Brancher le test dans `scripts/test.sh`**, juste avant `echo "== Localization"` : + +```bash +echo "== ProtocolParsersTests" +clang++ -target "$TARGET" -isysroot "$SDK" -std=c++17 -I "$ROOT/Client" \ + "$ROOT/Client/tests/ProtocolParsersTests.cpp" "$ROOT/Client/ProtocolParsers.cpp" \ + "$ROOT/Client/CommandSerializer.cpp" "$ROOT/Client/ByteMagic.cpp" \ + -o "$OUT/ProtocolParsersTests" +"$OUT/ProtocolParsersTests" +``` + +- [ ] **Step 3 : Voir le test échouer** + +Run : `make test` +Attendu : échec, `'ProtocolParsers.h' file not found`. + +- [ ] **Step 4 : Écrire `Client/ProtocolParsers.h`** + +```cpp +#pragma once + +#include +#include +#include "Constants.h" + +// Pure decoders for v2 inquiry replies. `payload` is the frame's field, starting with the reply opcode. +namespace ProtocolParsers +{ + struct NcAsmState + { + bool enabled; // NC/ASM effect on + bool ambient; // true = Ambient Sound, false = Noise Cancelling + bool focusOnVoice; + int level; // ambient level (meaningful when ambient) + }; + + // Accepts "67|69 17 01 " and the WH-1000XM6 "67|69 19 01 + // ". Returns nullopt when too short, for other opcodes, and for the all-zero body the XM6 sends + // back on the channel it doesn't use (67 17 00 00 00 00 00). + std::optional parseNcAsmState(const Buffer& payload); + + struct EqualizerState + { + unsigned char preset; // raw preset id (EQ_PRESET values, or ids we don't know yet like 0x30) + bool hasClearBass; // 5-band layout only + int clearBass; // -10..10 when hasClearBass + std::vector bands; // 5 or 10 values in -10..10; empty when the reply carried no band data + }; + + // "57 00 06 " (5 bands + Clear Bass) or "57 00 0a ". + std::optional parseEqualizer(const Buffer& payload); +} +``` + +- [ ] **Step 5 : Écrire `Client/ProtocolParsers.cpp`** + +```cpp +#include "ProtocolParsers.h" + +#include + +namespace ProtocolParsers +{ + std::optional parseNcAsmState(const Buffer& payload) + { + if (payload.size() < 7) return std::nullopt; + auto opcode = (unsigned char)payload[0]; + auto type = (unsigned char)payload[1]; + if ((opcode != 0x67 && opcode != 0x69) || (type != 0x17 && type != 0x19)) return std::nullopt; + if (std::all_of(payload.begin() + 2, payload.end(), [](char b) { return b == 0; })) return std::nullopt; + + NcAsmState state; + state.enabled = payload[3] != 0; + state.ambient = payload[4] != 0; + state.focusOnVoice = payload[5] != 0; + state.level = (unsigned char)payload[6]; + return state; + } + + std::optional parseEqualizer(const Buffer& payload) + { + if (payload.size() < 3 || (unsigned char)payload[0] != 0x57) return std::nullopt; + + EqualizerState state{ (unsigned char)payload[2], false, 0, {} }; + if (payload.size() < 4) return state; + size_t count = (unsigned char)payload[3]; + if (payload.size() < 4 + count) return state; + + auto value = [&](size_t i) { return (int)(unsigned char)payload[4 + i] - 10; }; + if (count == 6) + { + state.hasClearBass = true; + state.clearBass = value(0); + for (size_t i = 1; i < 6; i++) state.bands.push_back(value(i)); + } + else if (count == 10) + { + for (size_t i = 0; i < 10; i++) state.bands.push_back(value(i)); + } + return state; + } +} +``` + +- [ ] **Step 6 : Relancer les tests** + +Run : `make test` +Attendu : `LogicTests: all passed`, `ProtocolParsersTests: all passed`, `Localization: 15 keys, all translated`. + +- [ ] **Step 7 : Brancher les décodeurs dans `Client/Headphones.h`** + +Sous `void requestEqualizer();` / `EQ_PRESET getEqualizerPreset();`, ajouter : + +```cpp + int getEqualizerBandCount(); // 0 until read, then 5 (+ Clear Bass) or 10 + bool equalizerHasClearBass(); +``` + +Sous `void requestAmbientState();`, ajouter : + +```cpp + // Picks the NC/ASM inquiry channel: 0x19 when the device answers it (WH-1000XM6), else the legacy 0x17. + void probeNcAsmInquiryType(); +``` + +Remplacer le membre `std::vector _eqBands = { 0, 0, 0, 0, 0 };` par : + +```cpp + std::vector _eqBands; // empty until the first read; 5 or 10 values + bool _eqHasClearBass = false; + unsigned char _ncAsmInquiryType = 0x17; // 0x19 on the WH-1000XM6, see probeNcAsmInquiryType() +``` + +- [ ] **Step 8 : Modifier `Client/Headphones.cpp`** + +Ajouter `#include "ProtocolParsers.h"` après `#include "CommandSerializer.h"`. + +Remplacer tout le corps de `Headphones::requestEqualizer()` par : + +```cpp +void Headphones::requestEqualizer() +{ + // GET: 56 00 -> RET: 57 00 (decoded by ProtocolParsers::parseEqualizer) + auto resp = this->_conn.sendCommandAndReadResponse({ (char)V2Command::EQ_GET, 0x00 }, V2Command::EQ_RET); + if (auto eq = ProtocolParsers::parseEqualizer(resp)) + { + std::lock_guard guard(this->_propertyMtx); + this->_eqPreset = static_cast(eq->preset); + if (!eq->bands.empty()) + { + this->_eqBands = eq->bands; + this->_eqHasClearBass = eq->hasClearBass; + this->_eqClearBass = eq->clearBass; + } + } +} + +int Headphones::getEqualizerBandCount() { return (int)this->_eqBands.size(); } +bool Headphones::equalizerHasClearBass() { return this->_eqHasClearBass; } +``` + +Dans `Headphones::setEqualizerCustom`, remplacer la boucle finale qui écrit `this->_eqBands[i]` par : + +```cpp + this->_eqBands.assign(bands.begin(), bands.end()); +``` + +Dans `Headphones::requestAmbientState()`, remplacer le bloc `if (protocolVersion == SonyProtocolVersion::V2) { … }` par : + +```cpp + if (protocolVersion == SonyProtocolVersion::V2) + { + // GET: 66 -> RET: 67 01 <0=NC/1=Ambient> [2 more bytes on 0x19] + auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, (char)this->_ncAsmInquiryType }, 0x67, this->_ncAsmInquiryType); + if (auto state = ProtocolParsers::parseNcAsmState(resp)) + { + std::lock_guard guard(this->_propertyMtx); + // Update both current and desired so the UI reflects reality and isChanged() stays false. + this->_ambientSoundControl.current = this->_ambientSoundControl.desired = state->enabled; + this->_asmLevel.current = this->_asmLevel.desired = state->ambient ? state->level : 0; + this->_focusOnVoice.current = this->_focusOnVoice.desired = state->focusOnVoice; + } + } +``` + +Ajouter après `requestAmbientState()` : + +```cpp +void Headphones::probeNcAsmInquiryType() +{ + // The WH-1000XM6 answers the legacy 0x17 inquiry with all zeros and reports its real state on 0x19. + // Setting the mode still goes through 68 17, which the XM6 accepts. + try + { + auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, 0x19 }, 0x67, 0x19); + if (ProtocolParsers::parseNcAsmState(resp)) this->_ncAsmInquiryType = 0x19; + } + catch (...) {} +} +``` + +- [ ] **Step 9 : Exposer l'égaliseur dans `Client/macos/HeadphonesBridge.h`** + +Sous `@property (nonatomic, readonly) BOOL supportsEqualizer;`, ajouter : + +```objc +@property (nonatomic, readonly) NSInteger equalizerBandCount; // 0 until read, then 5 or 10 +@property (nonatomic, readonly) BOOL equalizerHasClearBass; // 5-band layout +// NO while this device's equalizer write format is unverified (the WH-1000XM6's 10-band layout, spec §7). +@property (nonatomic, readonly) BOOL equalizerWritable; +``` + +- [ ] **Step 10 : Modifier `Client/macos/HeadphonesBridge.mm`** + +Après `- (NSInteger)clearBass { … }`, ajouter : + +```objc +- (NSInteger)equalizerBandCount { return _hp ? _hp->getEqualizerBandCount() : 0; } +- (BOOL)equalizerHasClearBass { return _hp && _hp->equalizerHasClearBass(); } +// Only the 5-band + Clear Bass layout (WH-CH720N family) has a verified write format. +- (BOOL)equalizerWritable { return self.supportsEqualizer && _hp && _hp->equalizerHasClearBass(); } +``` + +Dans `refreshStatusWithCompletion:`, remplacer : + +```objc + if (!self->_initialized) { + hp->initDevice(); + self->_initialized = YES; + } +``` + +par : + +```objc + if (!self->_initialized) { + hp->initDevice(); + hp->probeNcAsmInquiryType(); + self->_initialized = YES; + } +``` + +Dans `setEqualizerPreset:completion:`, remplacer la condition +`if (_bt->getProtocolVersion() != SonyProtocolVersion::V2) {` par `if (!self.equalizerWritable) {`. +Dans `setCustomEqualizerBass:bands:completion:`, remplacer +`if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) {` par +`if (!_hp || !self.connected || !self.equalizerWritable) {`. + +- [ ] **Step 11 : Compiler et tester** + +Run : `make test && make` +Attendu : les trois lignes « all passed / all translated », puis `OK -> …/build/SonyBridge.app`. + +- [ ] **Step 12 : Vérifier sur le XM6 avec l'utilisateur** + +Run : `make run DEBUG=1`, demander à l'utilisateur de cliquer sur « Connecter… », puis +`grep -E '\[send\].* 66 19|\[recv\].* 67 19' build/app.log | head -4` +Attendu : une demande `66 19` et une réponse `67 19 …` non nulle. +Demander ensuite à l'utilisateur : +1. Choisir « Son ambiant » dans le menu : la coche **reste** sur « Son ambiant » (plus de retour sur + « Désactivé »). +2. Appuyer sur le bouton NC du casque : en 2 s environ, la coche suit le mode du casque (menu fermé puis + rouvert ; les mises à jour menu ouvert viennent en tâche 4). + +- [ ] **Step 13 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "fix(xm6): read NC/ASM state on channel 0x19, decode 10-band equalizer (read-only)" +``` + +--- + +### Task 4: Nouveau `HeadphonesModel` (état, minuteurs menu ouvert, anti-retour, limitation, batterie) + +Réécrit le modèle pour le menu : un état de connexion unique, les propriétés en lecture seule, les minuteurs +en mode `.common`, `PollGuard` et `SendThrottle`, la relecture de la batterie toutes les 60 s, et les erreurs +affichées seulement pour les actions de l'utilisateur. + +**Files:** +- Modify (réécriture complète) : `Client/macos/HeadphonesModel.swift` +- Modify : `Client/macos/HeadphonesBridge.h/.mm` (`refreshBatteryWithCompletion:`), + `Client/macos/StatusItemController.swift`, `Client/macos/HeadphonesMenu.swift`, + `Client/macos/fr.lproj/Localizable.strings` + +**Interfaces:** +- Consumes : `PollGuard`, `SendThrottle` (tâche 2) ; `equalizerBandCount`, `equalizerHasClearBass`, + `equalizerWritable` (tâche 3). +- Produces (utilisé par les tâches 5 à 8) : + - `enum ConnectionState { case disconnected, connecting, connected }` + - `HeadphonesModel` : `connectionState`, `connected` (calculé), `deviceName`, `deviceMac`, `protocolVersion`, + `firmware`, `codec`, `maxAmbientLevel`, `mode`, `ambientLevel`, `focusOnVoice`, `batteryLevel`, + `batteryCharging`, `hasDualBattery`, `batteryLeft`, `batteryRight`, `batteryCase`, `supportsEqualizer`, + `equalizerWritable`, `eqPreset: Int`, `eqBands: [Int]`, `eqHasClearBass`, `clearBass`, `dsee`, + `hasAutoPowerOff`, `autoPowerOff`, `hasSpeakToChat`, `speakToChat`, `hasAdaptiveVolume`, `adaptiveVolume`, + `errorMessage: String?` (tous `@Published private(set)`) + - Actions : `connect()`, `disconnect()`, `setMode(_:)`, `setLevel(_:final:)`, `setFocusOnVoice(_:)`, + `setEqualizerPreset(_:)`, `setEqualizerBand(_:value:final:)`, `setClearBass(_:final:)`, `resetEqualizer()`, + `setDsee(_:)`, `setAutoPowerOff(_:)`, `setSpeakToChat(_:)`, `setAdaptiveVolume(_:)`, `showError(_:)` + - Point d'extension pour la tâche 7 : `handleConnectResult(ok:error:userInitiated:)` et `linkLost()` + +- [ ] **Step 1 : Ajouter la relecture de la batterie au pont** + +`Client/macos/HeadphonesBridge.h`, sous `refreshDynamicWithCompletion:` : + +```objc +// Re-reads the battery level (v2 devices only). Completion on the main thread. +- (void)refreshBatteryWithCompletion:(void (^)(void))completion; +``` + +`Client/macos/HeadphonesBridge.mm`, après `refreshDynamicWithCompletion:` : + +```objc +- (void)refreshBatteryWithCompletion:(void (^)(void))completion { + // CRITICAL: 0x22 is BATTERY_LEVEL_REQUEST on v2 but POWER_OFF on v1 - never send it to a v1 device. + if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { completion(); return; } + Headphones *hp = _hp.get(); + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + try { hp->requestBattery(); } catch (std::exception &exc) {} + dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); + }); +} +``` + +- [ ] **Step 2 : Réécrire `Client/macos/HeadphonesModel.swift`** + +```swift +import Foundation +import Combine + +enum ConnectionState { + case disconnected, connecting, connected +} + +// Observable state of the headphones and the actions the menu triggers. Wraps the Obj-C++ HeadphonesBridge. +final class HeadphonesModel: ObservableObject { + private enum PolledSetting { case ambient } + + private let bridge = HeadphonesBridge() + + @Published private(set) var connectionState: ConnectionState = .disconnected + var connected: Bool { connectionState == .connected } + + // Kept after a disconnect so the header still names the last headset. + @Published private(set) var deviceName = "" + @Published private(set) var deviceMac = "" + @Published private(set) var protocolVersion = "" + @Published private(set) var firmware = "" + @Published private(set) var codec = "" + @Published private(set) var maxAmbientLevel = 20 + + @Published private(set) var mode: SHCAmbientMode = .off + @Published private(set) var ambientLevel = 10 + @Published private(set) var focusOnVoice = false + + @Published private(set) var batteryLevel = -1 + @Published private(set) var batteryCharging = false + @Published private(set) var hasDualBattery = false + @Published private(set) var batteryLeft = -1 + @Published private(set) var batteryRight = -1 + @Published private(set) var batteryCase = -1 + + @Published private(set) var supportsEqualizer = false + @Published private(set) var equalizerWritable = false + @Published private(set) var eqPreset = 0 + @Published private(set) var eqBands: [Int] = [] + @Published private(set) var eqHasClearBass = false + @Published private(set) var clearBass = 0 + @Published private(set) var dsee = false + + @Published private(set) var hasAutoPowerOff = false + @Published private(set) var autoPowerOff = 0 + @Published private(set) var hasSpeakToChat = false + @Published private(set) var speakToChat = false + @Published private(set) var hasAdaptiveVolume = false + @Published private(set) var adaptiveVolume = false + + // Last error from a user action; cleared by the next successful one. + @Published private(set) var errorMessage: String? + + private var timers: [Timer] = [] + private var pollGuard = PollGuard() + private var levelThrottle = SendThrottle() + private var eqThrottle = SendThrottle() + + // MARK: - Connection + + // User-initiated: uses the already-connected Sony headset, else the macOS Bluetooth picker. + func connect() { + connectionState = .connecting + errorMessage = nil + // Defer so the menu can show "Connecting…" before a modal picker blocks the main thread. + DispatchQueue.main.async { + self.bridge.scanAndConnect { ok, error in + self.handleConnectResult(ok: ok, error: error, userInitiated: true) + } + } + } + + func disconnect() { + stopTimers() + bridge.disconnect() + connectionState = .disconnected + } + + func handleConnectResult(ok: Bool, error: String?, userInitiated: Bool) { + guard ok else { + connectionState = .disconnected + if userInitiated, let error = error { errorMessage = error } + return + } + connectionState = .connected + syncFromBridge() + bridge.refreshStatus { [weak self] in self?.syncFromBridge() } // called after reads, then after probes + startTimers() + } + + // The control link dropped on its own (idle power-save). Task 7 adds the automatic reconnection here. + func linkLost() { + stopTimers() + connectionState = .disconnected + } + + // MARK: - Actions + + func setMode(_ newMode: SHCAmbientMode) { + mode = newMode + pollGuard.userChanged(.ambient) + pushAmbient() + } + + func setLevel(_ level: Int, final: Bool) { + ambientLevel = level + pollGuard.userChanged(.ambient) + if mode == .ambientSound && levelThrottle.shouldSend(final: final) { pushAmbient() } + } + + func setFocusOnVoice(_ on: Bool) { + focusOnVoice = on + pollGuard.userChanged(.ambient) + pushAmbient() + } + + func setEqualizerPreset(_ preset: Int) { + eqPreset = preset + bridge.setEqualizerPreset(preset) { [weak self] ok, error in self?.finish(ok, error) } + } + + func setEqualizerBand(_ index: Int, value: Int, final: Bool) { + guard eqBands.indices.contains(index) else { return } + eqBands[index] = value + eqPreset = 0xA0 + if eqThrottle.shouldSend(final: final) { pushCustomEqualizer() } + } + + func setClearBass(_ value: Int, final: Bool) { + clearBass = value + eqPreset = 0xA0 + if eqThrottle.shouldSend(final: final) { pushCustomEqualizer() } + } + + func resetEqualizer() { + eqBands = Array(repeating: 0, count: eqBands.count) + clearBass = 0 + eqPreset = 0xA0 + pushCustomEqualizer() + } + + func setDsee(_ on: Bool) { + dsee = on + bridge.setDsee(on) { [weak self] ok, error in self?.finish(ok, error) } + } + + func setAutoPowerOff(_ index: Int) { + autoPowerOff = index + bridge.setAutoPowerOff(index) { [weak self] ok, error in self?.finish(ok, error) } + } + + func setSpeakToChat(_ on: Bool) { + speakToChat = on + bridge.setSpeakToChat(on) { [weak self] ok, error in self?.finish(ok, error) } + } + + func setAdaptiveVolume(_ on: Bool) { + adaptiveVolume = on + bridge.setAdaptiveVolume(on) { [weak self] ok, error in self?.finish(ok, error) } + } + + func showError(_ message: String) { + errorMessage = message + } + + private func pushAmbient() { + bridge.applyMode(mode, level: ambientLevel, focusVoice: focusOnVoice) { [weak self] ok, error in + self?.finish(ok, error) + } + } + + private func pushCustomEqualizer() { + bridge.setCustomEqualizerBass(clearBass, bands: eqBands.map { NSNumber(value: $0) }) { [weak self] ok, error in + self?.finish(ok, error) + } + } + + private func finish(_ ok: Bool, _ error: String?) { + errorMessage = ok ? nil : error + } + + // MARK: - Polling + + private func startTimers() { + stopTimers() + timers = [ + repeating(every: 1.5) { [weak self] in self?.checkLink() }, + repeating(every: 2) { [weak self] in self?.pollAmbient() }, + repeating(every: 60) { [weak self] in self?.pollBattery() }, + ] + } + + private func stopTimers() { + timers.forEach { $0.invalidate() } + timers = [] + } + + // Added in .common mode so they keep firing while the menu is open (menus run the event-tracking mode). + private func repeating(every interval: TimeInterval, _ block: @escaping () -> Void) -> Timer { + let timer = Timer(timeInterval: interval, repeats: true) { _ in block() } + RunLoop.main.add(timer, forMode: .common) + return timer + } + + private func checkLink() { + if connected && !bridge.connected { linkLost() } + } + + // Follows the headset's own NC button, unless the user just changed the mode from the menu. + private func pollAmbient() { + guard connected, pollGuard.shouldAcceptPoll(for: .ambient) else { return } + bridge.refreshDynamic { [weak self] in + guard let self = self, self.pollGuard.shouldAcceptPoll(for: .ambient) else { return } + self.readAmbientFromBridge() + } + } + + private func pollBattery() { + guard connected else { return } + bridge.refreshBattery { [weak self] in self?.readBatteryFromBridge() } + } + + // MARK: - Reading the bridge + + private func syncFromBridge() { + deviceName = bridge.deviceName ?? deviceName + deviceMac = bridge.deviceMac ?? deviceMac + protocolVersion = bridge.protocolVersionString ?? "" + maxAmbientLevel = bridge.maxAmbientLevel + readAmbientFromBridge() + readBatteryFromBridge() + supportsEqualizer = bridge.supportsEqualizer + equalizerWritable = bridge.equalizerWritable + eqPreset = bridge.eqPreset + eqHasClearBass = bridge.equalizerHasClearBass + clearBass = bridge.clearBass + eqBands = (0.. 0 { ambientLevel = level } + focusOnVoice = bridge.focusOnVoice + } + + private func readBatteryFromBridge() { + batteryLevel = bridge.batteryLevel + batteryCharging = bridge.batteryCharging + hasDualBattery = bridge.hasDualBattery + batteryLeft = bridge.batteryLeft + batteryRight = bridge.batteryRight + batteryCase = bridge.batteryCase + } +} +``` + +- [ ] **Step 3 : Adapter l'icône et le menu minimal au nouvel état** + +`Client/macos/StatusItemController.swift` : remplacer le bloc `model.$connected … .store(in: &cancellables)` par : + +```swift + model.$connectionState + .receive(on: DispatchQueue.main) + .sink { [weak self] state in self?.statusItem.button?.appearsDisabled = state != .connected } + .store(in: &cancellables) +``` + +`Client/macos/HeadphonesMenu.swift`, dans `update()` : remplacer +`(model.connecting ? tr("Connecting…") : tr("Connect…"))` par +`(model.connectionState == .connecting ? tr("Connecting…") : tr("Connect…"))`, et +`connectItem.isEnabled = !model.connecting` par `connectItem.isEnabled = model.connectionState != .connecting`. + +- [ ] **Step 4 : Retirer la clé devenue inutile** + +Dans `Client/macos/fr.lproj/Localizable.strings`, supprimer la ligne `"Headphones disconnected." = …;` (le +modèle n'affiche plus d'erreur quand la liaison se coupe d'elle-même). + +- [ ] **Step 5 : Tests et build** + +Run : `make test && make` +Attendu : tout passe, `Localization: 14 keys, all translated`, puis `OK -> …`. + +- [ ] **Step 6 : Vérifier avec l'utilisateur** + +Run : `make run DEBUG=1`. Demander à l'utilisateur de : +1. Se connecter, **ouvrir le menu et le laisser ouvert**, puis appuyer sur le bouton NC du casque : la coche + change pendant que le menu est ouvert (les minuteurs tournent en mode `.common`). +2. Choisir « Son ambiant » : la coche ne revient pas en arrière. +Après au moins 2 minutes connecté : `grep -c '\[send\].* 22 00' build/app.log` → au moins 2 (lecture à la +connexion + relecture toutes les 60 s). + +- [ ] **Step 7 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "refactor(macos): menu-oriented HeadphonesModel (connection state, common-mode timers, poll guard, battery polling)" +``` + +--- + +### Task 5: Lignes riches du menu (vues SwiftUI hébergées) + +Crée les quatre vues et les vérifie tôt dans le vrai menu : c'est le risque technique principal (spec §11). +Les curseurs de l'égaliseur sont des `NSSlider` natifs verticaux (via `NSViewRepresentable`) : les contrôles +AppKit suivent la souris de façon fiable dans un menu. + +**Files:** +- Modify : `Client/macos/MenuSupport.swift` (`MenuMetrics`, `hostingMenuItem`) +- Create : `Client/macos/MenuRows/HeaderRow.swift`, `AmbientLevelRow.swift`, `ToggleRow.swift`, `EqualizerRow.swift` +- Modify : `Client/macos/HeadphonesMenu.swift` (branchement provisoire de l'en-tête et du curseur), + `Client/macos/fr.lproj/Localizable.strings` + +**Interfaces:** +- Consumes : l'API `HeadphonesModel` de la tâche 4. +- Produces : + - `enum MenuMetrics { static let width: CGFloat; static let equalizerWidth: CGFloat; static let leading: CGFloat; static let indent: CGFloat }` + - `func hostingMenuItem(width: CGFloat = MenuMetrics.width, @ViewBuilder _ content: () -> Content) -> NSMenuItem` + - `struct HeaderRow: View { init(model:) }`, `struct AmbientLevelRow: View { init(model:) }`, + `struct ToggleRow: View { init(model:title:indent:isOn:set:) }`, `struct EqualizerRow: View { init(model:) }` + +- [ ] **Step 1 : Ajouter à `Client/macos/MenuSupport.swift`** (ajouter `import SwiftUI` en tête du fichier) + +```swift +enum MenuMetrics { + static let width: CGFloat = 280 // main menu rows + static let equalizerWidth: CGFloat = 300 // equalizer submenu + static let leading: CGFloat = 14 // lines up with native item titles + static let indent: CGFloat = 36 // rows nested under "Son ambiant" +} + +// Wraps a SwiftUI view in a menu item, for rows a plain NSMenuItem can't express (sliders, switches, header). +// Rows keep a fixed height: optional lines (the error line, notes) are separate plain items instead. +func hostingMenuItem(width: CGFloat = MenuMetrics.width, @ViewBuilder _ content: () -> Content) -> NSMenuItem { + let host = NSHostingView(rootView: content().frame(width: width, alignment: .leading)) + host.frame = NSRect(origin: .zero, size: host.fittingSize) + let item = NSMenuItem() + item.view = host + return item +} +``` + +- [ ] **Step 2 : Écrire `Client/macos/MenuRows/HeaderRow.swift`** + +```swift +import SwiftUI + +// Menu header: headset name, connection state + codec, battery. +struct HeaderRow: View { + @ObservedObject var model: HeadphonesModel + + var body: some View { + HStack(alignment: .center, spacing: 8) { + VStack(alignment: .leading, spacing: 1) { + Text(model.deviceName.isEmpty ? "SonyBridge" : model.deviceName) + .font(.system(size: 13, weight: .semibold)) + Text(statusLine) + .font(.system(size: 11)) + .foregroundColor(.secondary) + } + Spacer(minLength: 8) + if model.connected { battery } + } + .padding(.horizontal, MenuMetrics.leading) + .padding(.vertical, 4) + } + + private var statusLine: String { + switch model.connectionState { + case .connecting: return tr("Connecting…") + case .disconnected: return tr("Not connected") + case .connected: return model.codec.isEmpty ? tr("Connected") : "\(tr("Connected")) · \(model.codec)" + } + } + + @ViewBuilder private var battery: some View { + if model.hasDualBattery { + Text(String(format: tr("L %ld%% R %ld%%"), model.batteryLeft, model.batteryRight)) + .font(.system(size: 12)) + .foregroundColor(.secondary) + } else if model.batteryLevel >= 0 { + HStack(spacing: 4) { + Text(String(format: tr("%ld%%"), model.batteryLevel)) + .font(.system(size: 12)) + .foregroundColor(.secondary) + Image(systemName: batterySymbol) + .foregroundColor(model.batteryLevel <= 20 && !model.batteryCharging ? .red : .secondary) + } + } + } + + private var batterySymbol: String { + if model.batteryCharging { return "battery.100.bolt" } + switch model.batteryLevel { + case ..<13: return "battery.0" + case ..<38: return "battery.25" + case ..<63: return "battery.50" + case ..<88: return "battery.75" + default: return "battery.100" + } + } +} +``` + +- [ ] **Step 3 : Écrire `Client/macos/MenuRows/AmbientLevelRow.swift`** + +```swift +import SwiftUI + +// Ambient Sound level slider (1…max), shown under "Son ambiant". +struct AmbientLevelRow: View { + @ObservedObject var model: HeadphonesModel + + var body: some View { + HStack(spacing: 8) { + Slider( + value: Binding(get: { Double(model.ambientLevel) }, + set: { model.setLevel(Int($0.rounded()), final: false) }), + in: 1...Double(max(model.maxAmbientLevel, 2)), + step: 1, + onEditingChanged: { editing in + if !editing { model.setLevel(model.ambientLevel, final: true) } + } + ) + .controlSize(.small) + Text(verbatim: "\(model.ambientLevel)") + .font(.system(size: 11, weight: .medium).monospacedDigit()) + .foregroundColor(.secondary) + .frame(width: 20, alignment: .trailing) + } + .padding(.leading, MenuMetrics.indent) + .padding(.trailing, MenuMetrics.leading) + .padding(.vertical, 2) + .disabled(!model.connected) + } +} +``` + +- [ ] **Step 4 : Écrire `Client/macos/MenuRows/ToggleRow.swift`** + +```swift +import SwiftUI + +// A title with a switch on the right (Focus on Voice, DSEE, Speak-to-Chat, Adaptive Volume). +struct ToggleRow: View { + @ObservedObject var model: HeadphonesModel + let title: String + var indent: CGFloat = MenuMetrics.leading + let isOn: (HeadphonesModel) -> Bool + let set: (HeadphonesModel, Bool) -> Void + + var body: some View { + HStack { + Text(title).font(.system(size: 13)) + Spacer(minLength: 8) + Toggle("", isOn: Binding(get: { isOn(model) }, set: { set(model, $0) })) + .labelsHidden() + .toggleStyle(.switch) + .controlSize(.mini) + } + .padding(.leading, indent) + .padding(.trailing, MenuMetrics.leading) + .padding(.vertical, 2) + .disabled(!model.connected) + .opacity(model.connected ? 1 : 0.5) + } +} +``` + +- [ ] **Step 5 : Écrire `Client/macos/MenuRows/EqualizerRow.swift`** + +```swift +import AppKit +import SwiftUI + +// Manual equalizer: 10 vertical sliders (WH-1000XM6) or Clear Bass + 5 (older models). Active only on "Manual" +// and when the device's write format is verified (model.equalizerWritable). +struct EqualizerRow: View { + @ObservedObject var model: HeadphonesModel + + private static let labels5 = ["400", "1k", "2.5k", "6.3k", "16k"] + private static let labels10 = ["31", "63", "125", "250", "500", "1k", "2k", "4k", "8k", "16k"] + + private var editable: Bool { model.connected && model.equalizerWritable && model.eqPreset == 0xA0 } + private var labels: [String] { model.eqBands.count == 10 ? Self.labels10 : Self.labels5 } + + var body: some View { + HStack(alignment: .top, spacing: 0) { + if model.eqHasClearBass { + band(tr("Clear Bass"), value: model.clearBass) { model.setClearBass($0, final: $1) } + } + ForEach(Array(model.eqBands.enumerated()), id: \.offset) { index, value in + band(index < labels.count ? labels[index] : "", value: value) { + model.setEqualizerBand(index, value: $0, final: $1) + } + } + } + .padding(.horizontal, MenuMetrics.leading) + .padding(.vertical, 6) + } + + private func band(_ label: String, value: Int, onChange: @escaping (Int, Bool) -> Void) -> some View { + VStack(spacing: 3) { + VerticalBandSlider(value: value, enabled: editable, onChange: onChange) + .frame(width: 20, height: 72) + Text(verbatim: label) + .font(.system(size: 9)) + .foregroundColor(.secondary) + .lineLimit(1) + } + .frame(maxWidth: .infinity) + } +} + +// A native vertical NSSlider in -10…10. onChange(value, final): final is true on mouse-up. +struct VerticalBandSlider: NSViewRepresentable { + let value: Int + let enabled: Bool + let onChange: (Int, Bool) -> Void + + func makeCoordinator() -> Coordinator { + Coordinator(onChange: onChange) + } + + func makeNSView(context: Context) -> NSSlider { + let slider = NSSlider(value: Double(value), minValue: -10, maxValue: 10, + target: context.coordinator, action: #selector(Coordinator.changed(_:))) + slider.isVertical = true + slider.isContinuous = true + slider.controlSize = .small + return slider + } + + func updateNSView(_ slider: NSSlider, context: Context) { + context.coordinator.onChange = onChange + if Int(slider.doubleValue.rounded()) != value { slider.doubleValue = Double(value) } + slider.isEnabled = enabled + } + + final class Coordinator: NSObject { + var onChange: (Int, Bool) -> Void + + init(onChange: @escaping (Int, Bool) -> Void) { + self.onChange = onChange + } + + @objc func changed(_ sender: NSSlider) { + let final = NSApp.currentEvent?.type == .leftMouseUp + onChange(Int(sender.doubleValue.rounded()), final) + } + } +} +``` + +- [ ] **Step 6 : Ajouter les nouvelles clés à `Client/macos/fr.lproj/Localizable.strings`** (section « Menu ») + +``` +"Not connected" = "Non connecté"; +"Connected" = "Connecté"; +"L %ld%% R %ld%%" = "G %ld %% D %ld %%"; +"Clear Bass" = "Clear Bass"; +``` + +- [ ] **Step 7 : Branchement provisoire dans le menu minimal** (remplacé entièrement en tâche 6) + +Dans `Client/macos/HeadphonesMenu.swift` : +- Remplacer `headerItem.isEnabled = false` / `menu.addItem(headerItem)` par + `menu.addItem(hostingMenuItem { HeaderRow(model: model) })`, supprimer la propriété `headerItem` et, dans + `update()`, les lignes qui construisent `header` et affectent `headerItem.title`. +- Dans la boucle des modes, juste après `menu.addItem(item)`, ajouter : + +```swift + if mode == .ambientSound { + menu.addItem(hostingMenuItem { AmbientLevelRow(model: model) }) + menu.addItem(hostingMenuItem { + ToggleRow(model: model, title: tr("Focus on Voice"), indent: MenuMetrics.indent, + isOn: { $0.focusOnVoice }, set: { $0.setFocusOnVoice($1) }) + }) + } +``` + +et la clé `"Focus on Voice" = "Focalisation sur la voix";` dans `Localizable.strings`. + +- [ ] **Step 8 : Tests et build** + +Run : `make test && make` +Attendu : tout passe, `Localization: 19 keys, all translated` (la clé `"%ld%%"` sert maintenant à +`HeaderRow` ; `update()` ne l'utilise plus), puis `OK -> …`. + +- [ ] **Step 9 : Vérifier avec l'utilisateur** + +Run : `make run`. Demander à l'utilisateur, casque connecté : +1. L'en-tête montre le nom, « Connecté · AAC » et la batterie avec son icône, bien alignés, sans être coupés. +2. Le curseur de niveau se **fait glisser** dans le menu ouvert, et le son ambiant change dans le casque + pendant le glissement (au plus toutes les 150 ms) et au relâchement. +3. L'interrupteur « Focalisation sur la voix » bascule, et le menu reste ouvert. +Si le glissement ou l'interrupteur ne réagissent pas dans le menu : **arrêter** et remonter le problème avant +la tâche 6. Toute l'approche en dépend. + +- [ ] **Step 10 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "feat(macos): SwiftUI menu rows (header, level slider, switches, equalizer)" +``` + +--- + +### Task 6: Menu complet (spec §4) + icône selon le mode + +**Files:** +- Modify (réécriture complète) : `Client/macos/HeadphonesMenu.swift`, `Client/macos/StatusItemController.swift` +- Create : `Client/macos/StatusIcon.swift` +- Modify : `Client/macos/MenuSupport.swift` (`titleWithValue`), `Client/macos/fr.lproj/Localizable.strings` + +**Interfaces:** +- Consumes : tâches 1, 4 et 5. +- Produces : + - `enum StatusIcon { static func symbolName(for: SHCAmbientMode) -> String; static func image(connected: Bool, mode: SHCAmbientMode) -> NSImage? }` + - `func titleWithValue(_ title: String, _ value: String, width: CGFloat = MenuMetrics.width - 60) -> NSAttributedString` + - `HeadphonesMenu` : `private var connectItem` et la méthode `addAppSection()`, où la tâche 7 insère le + sous-menu des options. + +- [ ] **Step 1 : Ajouter `titleWithValue` à `Client/macos/MenuSupport.swift`** + +```swift +// "Title value": the value right-aligned in the secondary color, like "Égaliseur Graves ›". +func titleWithValue(_ title: String, _ value: String, width: CGFloat = MenuMetrics.width - 60) -> NSAttributedString { + let paragraph = NSMutableParagraphStyle() + paragraph.tabStops = [NSTextTab(textAlignment: .right, location: width)] + let font = NSFont.menuFont(ofSize: 0) + let text = NSMutableAttributedString(string: title, attributes: [.font: font, .paragraphStyle: paragraph]) + if !value.isEmpty { + text.append(NSAttributedString(string: "\t" + value, attributes: [ + .font: font, .paragraphStyle: paragraph, .foregroundColor: NSColor.secondaryLabelColor, + ])) + } + return text +} +``` + +- [ ] **Step 2 : Écrire `Client/macos/StatusIcon.swift`** + +```swift +import AppKit + +// Menu bar icon: one monochrome SF Symbol per mode, dimmed when disconnected (spec §6.6). +enum StatusIcon { + static func symbolName(for mode: SHCAmbientMode) -> String { + switch mode { + case .noiseCanceling: return "headphones.circle.fill" + case .ambientSound: return "ear.and.waveform" + default: return "headphones" + } + } + + static func image(connected: Bool, mode: SHCAmbientMode) -> NSImage? { + let name = connected ? symbolName(for: mode) : "headphones" + let image = NSImage(systemSymbolName: name, accessibilityDescription: "SonyBridge") + ?? NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") + image?.isTemplate = true // macOS tints it for light/dark menu bars + return image + } +} +``` + +- [ ] **Step 3 : Réécrire `Client/macos/StatusItemController.swift`** + +```swift +import AppKit +import Combine + +// Owns the menu bar icon (it follows the mode and connection state) and attaches the headphones menu to it. +final class StatusItemController { + private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) + private let headphonesMenu: HeadphonesMenu + private var cancellables = Set() + + init(model: HeadphonesModel) { + headphonesMenu = HeadphonesMenu(model: model) + statusItem.menu = headphonesMenu.menu + model.$connectionState.combineLatest(model.$mode) + .receive(on: DispatchQueue.main) + .sink { [weak self] state, mode in + let connected = state == .connected + self?.statusItem.button?.image = StatusIcon.image(connected: connected, mode: mode) + self?.statusItem.button?.appearsDisabled = !connected + } + .store(in: &cancellables) + } +} +``` + +- [ ] **Step 4 : Réécrire `Client/macos/HeadphonesMenu.swift`** + +```swift +import AppKit +import Combine + +// The status item's menu (spec §4). Built once; update() refreshes states, visibility and values in place, +// including while the menu is open. +final class HeadphonesMenu { + let menu = NSMenu() + private let model: HeadphonesModel + private var cancellables = Set() + + private let errorItem = NSMenuItem() + private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] + private var ambientRows: [NSMenuItem] = [] // level slider + focus on voice + private let equalizerItem = NSMenuItem() + private var presetItems: [(Int, NSMenuItem)] = [] + private let equalizerNoteItem = NSMenuItem() + private var equalizerResetItem = NSMenuItem() + private var dseeItem = NSMenuItem() + private var speakToChatItem = NSMenuItem() + private var adaptiveVolumeItem = NSMenuItem() + private let autoPowerOffItem = NSMenuItem() + private var autoPowerOffItems: [NSMenuItem] = [] + private let aboutItem = NSMenuItem() + private let aboutMenu = NSMenu() + private var connectItem = NSMenuItem() + + private static var presets: [(Int, String)] { + [(0x00, tr("Off")), (0x10, tr("Bright")), (0x11, tr("Excited")), (0x12, tr("Mellow")), + (0x13, tr("Relaxed")), (0x14, tr("Vocal")), (0x15, tr("Treble")), (0x16, tr("Bass")), + (0x17, tr("Speech")), (0xA0, tr("Manual"))] + } + + // Index = the bridge's auto power-off option (0=Off, 1=5 min, 2=30 min, 3=1 h, 4=3 h, 5=when taken off). + private static var autoPowerOffOptions: [String] { + [tr("Off"), tr("5 min"), tr("30 min"), tr("1 hour"), tr("3 hours"), tr("When taken off")] + } + + init(model: HeadphonesModel) { + self.model = model + menu.autoenablesItems = false + + menu.addItem(hostingMenuItem { HeaderRow(model: model) }) + errorItem.isEnabled = false + menu.addItem(errorItem) + menu.addItem(.separator()) + addAmbientSection() + menu.addItem(.separator()) + addSoundSection() + menu.addItem(.separator()) + addAppSection() + + // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. + model.objectWillChange + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.update() } + .store(in: &cancellables) + update() + } + + // MARK: - Building + + private func addAmbientSection() { + menu.addItem(sectionHeader(tr("Ambient Sound Control"))) + let modes: [(SHCAmbientMode, String)] = [ + (.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off")), + ] + for (mode, title) in modes { + let item = ActionMenuItem(title) { [weak model] in model?.setMode(mode) } + item.image = NSImage(systemSymbolName: StatusIcon.symbolName(for: mode), accessibilityDescription: nil) + modeItems.append((mode, item)) + menu.addItem(item) + if mode == .ambientSound { + ambientRows = [ + hostingMenuItem { AmbientLevelRow(model: model) }, + hostingMenuItem { + ToggleRow(model: model, title: tr("Focus on Voice"), indent: MenuMetrics.indent, + isOn: { $0.focusOnVoice }, set: { $0.setFocusOnVoice($1) }) + }, + ] + ambientRows.forEach { menu.addItem($0) } + } + } + } + + private func addSoundSection() { + let equalizerMenu = NSMenu() + equalizerMenu.autoenablesItems = false + for (code, title) in Self.presets { + let item = ActionMenuItem(title) { [weak model] in model?.setEqualizerPreset(code) } + presetItems.append((code, item)) + equalizerMenu.addItem(item) + } + equalizerMenu.addItem(.separator()) + equalizerMenu.addItem(hostingMenuItem(width: MenuMetrics.equalizerWidth) { EqualizerRow(model: model) }) + equalizerNoteItem.title = tr("Manual equalizer coming soon for this model") + equalizerNoteItem.isEnabled = false + equalizerMenu.addItem(equalizerNoteItem) + equalizerResetItem = ActionMenuItem(tr("Reset")) { [weak model] in model?.resetEqualizer() } + equalizerMenu.addItem(equalizerResetItem) + equalizerItem.submenu = equalizerMenu + menu.addItem(equalizerItem) + + dseeItem = hostingMenuItem { + ToggleRow(model: model, title: tr("DSEE"), isOn: { $0.dsee }, set: { $0.setDsee($1) }) + } + speakToChatItem = hostingMenuItem { + ToggleRow(model: model, title: tr("Speak-to-Chat"), isOn: { $0.speakToChat }, set: { $0.setSpeakToChat($1) }) + } + adaptiveVolumeItem = hostingMenuItem { + ToggleRow(model: model, title: tr("Adaptive Volume"), isOn: { $0.adaptiveVolume }, set: { $0.setAdaptiveVolume($1) }) + } + for item in [dseeItem, speakToChatItem, adaptiveVolumeItem] { menu.addItem(item) } + + let autoPowerOffMenu = NSMenu() + autoPowerOffMenu.autoenablesItems = false + for (index, title) in Self.autoPowerOffOptions.enumerated() { + let item = ActionMenuItem(title) { [weak model] in model?.setAutoPowerOff(index) } + autoPowerOffItems.append(item) + autoPowerOffMenu.addItem(item) + } + autoPowerOffItem.submenu = autoPowerOffMenu + menu.addItem(autoPowerOffItem) + } + + private func addAppSection() { + aboutItem.title = tr("About the Headphones") + aboutMenu.autoenablesItems = false + aboutItem.submenu = aboutMenu + menu.addItem(aboutItem) + connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } + menu.addItem(connectItem) + menu.addItem(.separator()) + menu.addItem(ActionMenuItem(tr("Quit SonyBridge"), key: "q") { NSApp.terminate(nil) }) + } + + // MARK: - Updating + + private func update() { + let connected = model.connected + + errorItem.isHidden = model.errorMessage == nil + errorItem.title = "⚠︎ " + (model.errorMessage ?? "") + + for (mode, item) in modeItems { + item.state = connected && model.mode == mode ? .on : .off + item.isEnabled = connected + } + ambientRows.forEach { $0.isHidden = model.mode != .ambientSound } + + equalizerItem.isHidden = !model.supportsEqualizer + equalizerItem.isEnabled = connected + equalizerItem.attributedTitle = titleWithValue(tr("Equalizer"), Self.presetName(model.eqPreset)) + for (code, item) in presetItems { + item.state = model.eqPreset == code ? .on : .off + item.isEnabled = connected && model.equalizerWritable + } + equalizerNoteItem.isHidden = model.equalizerWritable || model.eqBands.isEmpty + equalizerResetItem.isEnabled = connected && model.equalizerWritable && model.eqPreset == 0xA0 + + dseeItem.isHidden = !model.supportsEqualizer + speakToChatItem.isHidden = !model.hasSpeakToChat + adaptiveVolumeItem.isHidden = !model.hasAdaptiveVolume + + let options = Self.autoPowerOffOptions + autoPowerOffItem.isHidden = !model.hasAutoPowerOff + autoPowerOffItem.isEnabled = connected + autoPowerOffItem.attributedTitle = titleWithValue( + tr("Auto Power-Off"), options.indices.contains(model.autoPowerOff) ? options[model.autoPowerOff] : "") + for (index, item) in autoPowerOffItems.enumerated() { + item.state = index == model.autoPowerOff ? .on : .off + } + + updateAbout() + aboutItem.isEnabled = connected + + switch model.connectionState { + case .connected: connectItem.title = tr("Disconnect") + case .connecting: connectItem.title = tr("Connecting…") + case .disconnected: connectItem.title = tr("Connect…") + } + connectItem.isEnabled = model.connectionState != .connecting + } + + private func updateAbout() { + aboutMenu.removeAllItems() + let rows: [(String, String)] = [ + (tr("Firmware"), model.firmware), (tr("Codec"), model.codec), + (tr("Protocol"), model.protocolVersion), (tr("Bluetooth"), model.deviceMac), + ] + for (title, value) in rows where !value.isEmpty { + let item = NSMenuItem() + item.attributedTitle = titleWithValue(title, value) + item.isEnabled = false + aboutMenu.addItem(item) + } + } + + private static func presetName(_ code: Int) -> String { + presets.first { $0.0 == code }?.1 ?? tr("Custom") + } + + private func toggleConnection() { + if model.connected { + model.disconnect() + } else { + NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window + model.connect() + } + } +} +``` + +- [ ] **Step 5 : Ajouter les clés à `Client/macos/fr.lproj/Localizable.strings`** (section « Menu ») + +``` +"Equalizer" = "Égaliseur"; +"Bright" = "Brillant"; +"Excited" = "Dynamique"; +"Mellow" = "Doux"; +"Relaxed" = "Détendu"; +"Vocal" = "Voix"; +"Treble" = "Aigus"; +"Bass" = "Graves"; +"Speech" = "Parole"; +"Manual" = "Manuel"; +"Custom" = "Personnalisé"; +"Manual equalizer coming soon for this model" = "Égaliseur manuel bientôt disponible pour ce modèle"; +"Reset" = "Réinitialiser"; +"DSEE" = "DSEE"; +"Speak-to-Chat" = "Speak-to-Chat"; +"Adaptive Volume" = "Volume adaptatif"; +"Auto Power-Off" = "Arrêt automatique"; +"5 min" = "5 min"; +"30 min" = "30 min"; +"1 hour" = "1 heure"; +"3 hours" = "3 heures"; +"When taken off" = "Quand le casque est retiré"; +"About the Headphones" = "À propos du casque"; +"Firmware" = "Firmware"; +"Codec" = "Codec"; +"Protocol" = "Protocole"; +"Bluetooth" = "Bluetooth"; +``` + +- [ ] **Step 6 : Tests et build** + +Run : `make test && make` +Attendu : tout passe, `Localization: 46 keys, all translated`, puis `OK -> …`. + +- [ ] **Step 7 : Vérifier avec l'utilisateur** (casque connecté, `make run`) + +Parcourir le menu avec lui, dans l'ordre de la spec §4 : +1. L'icône de la barre change avec le mode (réduction de bruit / son ambiant / désactivé) et se grise une + fois déconnecté. **Lui montrer les 3 glyphes** et demander s'ils lui conviennent (sinon, changer les noms de + symboles dans `StatusIcon.symbolName`). +2. Le curseur et « Focalisation sur la voix » n'apparaissent qu'en « Son ambiant ». +3. « Égaliseur » affiche « Personnalisé » à droite (preset `0x30` du XM6). Le sous-menu montre les presets + grisés, 10 curseurs grisés, et « Égaliseur manuel bientôt disponible pour ce modèle ». +4. DSEE et Speak-to-Chat sont présents ; Volume adaptatif est absent (le XM6 ne le gère pas). +5. « Arrêt automatique » affiche l'option en cours à droite ; changer d'option déplace la coche. +6. « À propos du casque » : Firmware 3.1.5, Codec AAC, Protocole v2, adresse Bluetooth. +7. Déconnecter : les réglages restent affichés mais grisés, et l'en-tête dit « Non connecté ». +8. Les valeurs à droite sont bien alignées et le menu n'est pas trop large (sinon, ajuster + `MenuMetrics.width` et le `width` de `titleWithValue`). + +- [ ] **Step 8 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "feat(macos): full headphones menu with per-mode status icon" +``` + +--- + +### Task 7: Options — connexion auto, reconnexion auto, lancement à l'ouverture de session + +**Files:** +- Create : `Client/macos/AppSettings.swift`, `Client/macos/DeviceWatcher.swift` +- Modify : `Client/macos/MacOSBluetoothConnector.h/.mm` (coupure de liaison sûre), + `Client/macos/HeadphonesBridge.h/.mm` (connexion par adresse, aides de classe), + `Client/macos/HeadphonesModel.swift`, `Client/macos/HeadphonesMenu.swift`, + `Client/macos/StatusItemController.swift`, `Client/macos/AppDelegate.swift`, + `Client/macos/fr.lproj/Localizable.strings` + +**Interfaces:** +- Consumes : `ReconnectPolicy` (tâche 2), `HeadphonesModel.handleConnectResult(ok:error:userInitiated:)` et + `linkLost()` (tâche 4), `HeadphonesMenu.addAppSection()` (tâche 6). +- Produces : + - `final class AppSettings: ObservableObject { var autoConnect: Bool; var autoReconnect: Bool; private(set) var launchAtLogin: Bool; var lastDeviceAddress: String?; func setLaunchAtLogin(_ enabled: Bool) -> String? }` + - `final class DeviceWatcher { var onConnect: ((String, String) -> Void)?; var onDisconnect: ((String) -> Void)?; func start() }` (adresse, nom) + - `HeadphonesBridge` (Swift) : `looksLikeSonyHeadset(_:)`, `connectedSonyHeadsetAddress()`, + `isDeviceConnectedToMac(_:)`, `connect(toAddress:completion:)` + - `HeadphonesModel` : `var settings: AppSettings?`, `autoConnectOnLaunch()`, `autoConnect(toAddress:)`, + `headsetConnectedToMac(address:name:)`, `headsetDisconnectedFromMac(address:)`, `cancelReconnect()` + - `StatusItemController(model:settings:)`, `HeadphonesMenu(model:settings:)` + +- [ ] **Step 1 : Rendre la coupure de liaison sûre dans `MacOSBluetoothConnector`** + +Aujourd'hui, quand le casque ferme le canal, `rfcommChannelClosed` appelle `disconnect()` **sur le fil du +connecteur lui-même**, et `disconnect()` fait `uthread.join()` : un fil qui s'attend lui-même lève une +exception dans une fonction `noexcept`, donc l'app plante. Une reconnexion ferait aussi `uthread = std::thread(…)` +sur un fil encore « joignable », ce qui plante aussi. À corriger avant toute reconnexion automatique. + +`Client/macos/MacOSBluetoothConnector.h` : +- ajouter, sous `virtual void closeConnection();` : + +```cpp + // Called from the channel-closed callback, on the connector thread: stops that thread's loop without joining it. + void markClosed() noexcept; +``` + +- initialiser les pointeurs privés : `void *rfcommDevice = nullptr;` et `void *rfcommchannel = nullptr;`. + +`Client/macos/MacOSBluetoothConnector.mm` : +- dans `rfcommChannelClosed:`, remplacer `delegateCPP->disconnect();` par `delegateCPP->markClosed();` +- remplacer le destructeur, `disconnect()` et le début de `connect()` : + +```objc +MacOSBluetoothConnector::~MacOSBluetoothConnector() +{ + disconnect(); +} + +void MacOSBluetoothConnector::markClosed() noexcept +{ + running = false; + disconnectionConditionVariable.notify_all(); +} + +void MacOSBluetoothConnector::disconnect() noexcept +{ + closeConnection(); + markClosed(); + // Never join from the connector thread itself (the channel-closed callback runs there). + if (uthread.joinable() && uthread.get_id() != std::this_thread::get_id()) { + uthread.join(); + } +} +``` + +et, en première ligne de `MacOSBluetoothConnector::connect(const std::string& addrStr)` : + +```objc + // A previous link's thread has stopped (markClosed) but may not have been joined yet. + if (uthread.joinable()) uthread.join(); +``` + +- dans `closeConnection()`, ajouter en première ligne `if (!rfcommchannel) return;`. + +- [ ] **Step 2 : Connexion par adresse dans le pont** + +`Client/macos/HeadphonesBridge.h`, sous `scanAndConnectWithCompletion:` : + +```objc +// Name heuristic for Sony headsets (WH-/WF-/WI-/MDR-/XB/LinkBuds). ++ (BOOL)looksLikeSonyHeadset:(NSString *)name NS_SWIFT_NAME(looksLikeSonyHeadset(_:)); +// Address of the first Sony headset currently connected to macOS, or nil. ++ (nullable NSString *)connectedSonyHeadsetAddress NS_SWIFT_NAME(connectedSonyHeadsetAddress()); +// YES if the device with this address is connected to macOS (its audio link is up). ++ (BOOL)isDeviceConnectedToMac:(NSString *)address NS_SWIFT_NAME(isDeviceConnectedToMac(_:)); +// Opens the control channel to a specific device, without the picker. Completion on the main thread. +- (void)connectToAddress:(NSString *)address + completion:(void (^)(BOOL ok, NSString * _Nullable error))completion NS_SWIFT_NAME(connect(toAddress:completion:)); +``` + +`Client/macos/HeadphonesBridge.mm` : dans `scanAndConnectWithCompletion:`, remplacer tout le code qui suit le +test `if (!device) { … return; }` (le `try { _bt->connect(…) }`, la boucle d'attente, et la création de `_hp` +jusqu'à `completion(YES, nil);`) par `[self connectDevice:device completion:completion];`, puis ajouter après +la méthode : + +```objc +- (void)connectDevice:(IOBluetoothDevice *)device completion:(void (^)(BOOL, NSString * _Nullable))completion { + try { + _bt->connect([[device addressString] UTF8String]); + } catch (RecoverableException &exc) { + completion(NO, @(exc.what())); + return; + } + + // A real RFCOMM open (SDP + link setup, sometimes with encryption renegotiation) can take a few + // seconds; pump the run loop until it lands or we give up. + int timeout = 80; + while (!_bt->isConnected() && timeout >= 0) { + [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; + timeout--; + } + + if (!_bt->isConnected()) { + _bt->disconnect(); + completion(NO, NSLocalizedString(@"Connection timed out.", nil)); + return; + } + + _deviceName = [device nameOrAddress]; + _deviceMac = [device addressString]; + _hp = std::make_unique(*_bt); + completion(YES, nil); +} + ++ (BOOL)looksLikeSonyHeadset:(NSString *)name { + return SHCLooksLikeSonyHeadset(name); +} + ++ (nullable NSString *)connectedSonyHeadsetAddress { + for (IOBluetoothDevice *paired in [IOBluetoothDevice pairedDevices]) { + if ([paired isConnected] && SHCLooksLikeSonyHeadset([paired name])) return [paired addressString]; + } + return nil; +} + ++ (BOOL)isDeviceConnectedToMac:(NSString *)address { + IOBluetoothDevice *device = [IOBluetoothDevice deviceWithAddressString:address]; + return device != nil && [device isConnected]; +} + +- (void)connectToAddress:(NSString *)address completion:(void (^)(BOOL, NSString * _Nullable))completion { + IOBluetoothDevice *device = [IOBluetoothDevice deviceWithAddressString:address]; + if (!device) { + completion(NO, NSLocalizedString(@"Not connected.", nil)); + return; + } + [self connectDevice:device completion:completion]; +} +``` + +- [ ] **Step 3 : Écrire `Client/macos/AppSettings.swift`** + +```swift +import Foundation +import ServiceManagement + +// The three user options, persisted in UserDefaults. Launch at login is backed by SMAppService (macOS 13+). +final class AppSettings: ObservableObject { + private enum Keys { + static let autoConnect = "autoConnect" + static let autoReconnect = "autoReconnect" + static let lastDeviceAddress = "lastDeviceAddress" + } + + private let defaults: UserDefaults + + @Published var autoConnect: Bool { + didSet { defaults.set(autoConnect, forKey: Keys.autoConnect) } + } + @Published var autoReconnect: Bool { + didSet { defaults.set(autoReconnect, forKey: Keys.autoReconnect) } + } + @Published private(set) var launchAtLogin: Bool + + var lastDeviceAddress: String? { + get { defaults.string(forKey: Keys.lastDeviceAddress) } + set { defaults.set(newValue, forKey: Keys.lastDeviceAddress) } + } + + init(defaults: UserDefaults = .standard) { + self.defaults = defaults + // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. + defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true]) + autoConnect = defaults.bool(forKey: Keys.autoConnect) + autoReconnect = defaults.bool(forKey: Keys.autoReconnect) + launchAtLogin = SMAppService.mainApp.status == .enabled + } + + // Returns an error message if macOS refused the change. + func setLaunchAtLogin(_ enabled: Bool) -> String? { + defer { launchAtLogin = SMAppService.mainApp.status == .enabled } + do { + if enabled { + try SMAppService.mainApp.register() + if SMAppService.mainApp.status == .requiresApproval { + SMAppService.openSystemSettingsLoginItems() + } + } else { + try SMAppService.mainApp.unregister() + } + return nil + } catch { + return error.localizedDescription + } + } +} +``` + +- [ ] **Step 4 : Écrire `Client/macos/DeviceWatcher.swift`** + +```swift +import Foundation +import IOBluetooth + +// Reports Bluetooth devices connecting to / disconnecting from macOS, as (address, name). +final class DeviceWatcher: NSObject { + var onConnect: ((_ address: String, _ name: String) -> Void)? + var onDisconnect: ((_ address: String) -> Void)? + + private var connectNotification: IOBluetoothUserNotification? + private var disconnectNotifications: [String: IOBluetoothUserNotification] = [:] + + func start() { + connectNotification = IOBluetoothDevice.register(forConnectNotifications: self, + selector: #selector(deviceConnected(_:device:))) + for case let device as IOBluetoothDevice in IOBluetoothDevice.pairedDevices() ?? [] where device.isConnected() { + if let address = device.addressString { watchDisconnect(device, address: address) } + } + } + + @objc private func deviceConnected(_ notification: IOBluetoothUserNotification, device: IOBluetoothDevice) { + guard let address = device.addressString else { return } + watchDisconnect(device, address: address) + onConnect?(address, device.name ?? "") + } + + @objc private func deviceDisconnected(_ notification: IOBluetoothUserNotification, device: IOBluetoothDevice) { + notification.unregister() + guard let address = device.addressString else { return } + disconnectNotifications[address] = nil + onDisconnect?(address) + } + + private func watchDisconnect(_ device: IOBluetoothDevice, address: String) { + guard disconnectNotifications[address] == nil else { return } + disconnectNotifications[address] = device.register(forDisconnectNotification: self, + selector: #selector(deviceDisconnected(_:device:))) + } +} +``` + +- [ ] **Step 5 : Connexion et reconnexion automatiques dans `Client/macos/HeadphonesModel.swift`** + +Ajouter sous `private var eqThrottle = SendThrottle()` : + +```swift + // Set by AppDelegate; nil means "no automatic behaviour". + var settings: AppSettings? + private var reconnectPolicy = ReconnectPolicy() + private var reconnectTimer: Timer? + private var reconnectAddress: String? + private var userDisconnected = false // after "Déconnecter": no auto-reconnect until the headset reconnects to macOS +``` + +Dans `connect()`, ajouter en première ligne : + +```swift + userDisconnected = false + cancelReconnect() +``` + +Remplacer `disconnect()`, `handleConnectResult(ok:error:userInitiated:)` et `linkLost()` par : + +```swift + func disconnect() { + userDisconnected = true + cancelReconnect() + stopTimers() + bridge.disconnect() + connectionState = .disconnected + } + + func handleConnectResult(ok: Bool, error: String?, userInitiated: Bool) { + guard ok else { + connectionState = .disconnected + if userInitiated, let error = error { errorMessage = error } + if !userInitiated && reconnectAddress != nil { scheduleReconnect() } + return + } + cancelReconnect() + connectionState = .connected + syncFromBridge() + settings?.lastDeviceAddress = deviceMac + bridge.refreshStatus { [weak self] in self?.syncFromBridge() } // called after reads, then after probes + startTimers() + } + + // The control link dropped on its own (idle power-save): retry while the headset is still connected to macOS. + func linkLost() { + stopTimers() + bridge.disconnect() // resets sequence numbers and buffers for the next connection + connectionState = .disconnected + guard settings?.autoReconnect == true, !userDisconnected, !deviceMac.isEmpty else { return } + reconnectAddress = deviceMac + scheduleReconnect() + } + + // MARK: - Automatic connection + + // Not user-initiated: failures stay silent (normal while the headset sleeps). + func autoConnect(toAddress address: String) { + guard connectionState == .disconnected else { return } + connectionState = .connecting + bridge.connect(toAddress: address) { ok, error in + self.handleConnectResult(ok: ok, error: error, userInitiated: false) + } + } + + // At launch: the last headset if macOS has it connected, else any connected Sony headset. + func autoConnectOnLaunch() { + let remembered = settings?.lastDeviceAddress.flatMap { HeadphonesBridge.isDeviceConnectedToMac($0) ? $0 : nil } + if let address = remembered ?? HeadphonesBridge.connectedSonyHeadsetAddress() { + autoConnect(toAddress: address) + } + } + + // DeviceWatcher: a device just connected to macOS. + func headsetConnectedToMac(address: String, name: String) { + guard settings?.autoConnect == true, HeadphonesBridge.looksLikeSonyHeadset(name), + connectionState == .disconnected else { return } + userDisconnected = false + cancelReconnect() + // Give the audio link ~2 s to settle before opening the control channel. + DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in self?.autoConnect(toAddress: address) } + } + + // DeviceWatcher: a device left macOS; stop retrying it (headsetConnectedToMac takes over when it's back). + func headsetDisconnectedFromMac(address: String) { + if address == reconnectAddress { cancelReconnect() } + } + + func cancelReconnect() { + reconnectTimer?.invalidate() + reconnectTimer = nil + reconnectAddress = nil + reconnectPolicy.reset() + } + + private func scheduleReconnect() { + guard let address = reconnectAddress else { return } + reconnectTimer?.invalidate() + let timer = Timer(timeInterval: reconnectPolicy.nextDelay(), repeats: false) { [weak self] _ in + guard let self = self else { return } + guard HeadphonesBridge.isDeviceConnectedToMac(address) else { self.cancelReconnect(); return } + self.autoConnect(toAddress: address) + } + RunLoop.main.add(timer, forMode: .common) + reconnectTimer = timer + } +``` + +- [ ] **Step 6 : Sous-menu « Options de SonyBridge » dans `Client/macos/HeadphonesMenu.swift`** + +- Remplacer `init(model: HeadphonesModel) {` / `self.model = model` par : + +```swift + init(model: HeadphonesModel, settings: AppSettings) { + self.model = model + self.settings = settings +``` + +- Ajouter les propriétés, sous `private let model: HeadphonesModel` : + +```swift + private let settings: AppSettings + private var launchAtLoginItem = NSMenuItem() + private var autoConnectItem = NSMenuItem() + private var autoReconnectItem = NSMenuItem() +``` + +- Dans `init`, après l'abonnement à `model.objectWillChange`, ajouter : + +```swift + settings.objectWillChange + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.update() } + .store(in: &cancellables) +``` + +- Dans `addAppSection()`, juste avant `connectItem = ActionMenuItem(…)`, ajouter : + +```swift + let optionsMenu = NSMenu() + optionsMenu.autoenablesItems = false + launchAtLoginItem = ActionMenuItem(tr("Launch at Login")) { [weak self] in self?.toggleLaunchAtLogin() } + autoConnectItem = ActionMenuItem(tr("Connect Automatically")) { [weak settings] in settings?.autoConnect.toggle() } + autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } + for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem] { optionsMenu.addItem(item) } + let optionsItem = NSMenuItem(title: tr("SonyBridge Options"), action: nil, keyEquivalent: "") + optionsItem.submenu = optionsMenu + menu.addItem(optionsItem) +``` + +- À la fin de `update()`, ajouter : + +```swift + launchAtLoginItem.state = settings.launchAtLogin ? .on : .off + autoConnectItem.state = settings.autoConnect ? .on : .off + autoReconnectItem.state = settings.autoReconnect ? .on : .off +``` + +- Ajouter la méthode : + +```swift + private func toggleLaunchAtLogin() { + if let error = settings.setLaunchAtLogin(!settings.launchAtLogin) { model.showError(error) } + } +``` + +- [ ] **Step 7 : Assembler dans `StatusItemController` et `AppDelegate`** + +`Client/macos/StatusItemController.swift` : remplacer `init(model: HeadphonesModel) {` par +`init(model: HeadphonesModel, settings: AppSettings) {` et `HeadphonesMenu(model: model)` par +`HeadphonesMenu(model: model, settings: settings)`. + +Réécrire `Client/macos/AppDelegate.swift` : + +```swift +import AppKit + +final class AppDelegate: NSObject, NSApplicationDelegate { + private let model = HeadphonesModel() + private let settings = AppSettings() + private let deviceWatcher = DeviceWatcher() + private var statusItemController: StatusItemController? + + func applicationDidFinishLaunching(_ notification: Notification) { + model.settings = settings + statusItemController = StatusItemController(model: model, settings: settings) + + deviceWatcher.onConnect = { [weak self] address, name in + self?.model.headsetConnectedToMac(address: address, name: name) + } + deviceWatcher.onDisconnect = { [weak self] address in + self?.model.headsetDisconnectedFromMac(address: address) + } + deviceWatcher.start() + + if settings.autoConnect { model.autoConnectOnLaunch() } + } + + func applicationWillTerminate(_ notification: Notification) { + model.disconnect() + } +} +``` + +- [ ] **Step 8 : Ajouter les clés à `Client/macos/fr.lproj/Localizable.strings`** + +``` +"SonyBridge Options" = "Options de SonyBridge"; +"Launch at Login" = "Lancer à l’ouverture de session"; +"Connect Automatically" = "Connexion automatique"; +"Reconnect Automatically" = "Reconnexion automatique"; +``` + +- [ ] **Step 9 : Tests et build** + +Run : `make test && make` +Attendu : tout passe, `Localization: 50 keys, all translated`, puis `OK -> …`. + +- [ ] **Step 10 : Vérifier avec l'utilisateur** (`make run DEBUG=1`) + +1. **Connexion au lancement** : XM6 connecté à macOS, quitter puis relancer l'app → elle se connecte seule, sans + clic (en-tête « Connecté · AAC »). +2. **Connexion auto** : éteindre le casque, puis le rallumer → environ 2 s après la connexion audio, l'app se + connecte seule. +3. **Déconnexion manuelle** : « Déconnecter » → pas de reconnexion ; éteindre puis rallumer le casque → l'app + se reconnecte. +4. **Reconnexion auto** : laisser le casque connecté sans audio jusqu'à ce que le canal de contrôle se coupe + (plusieurs minutes) → l'app **ne plante pas** et se reconnecte ; vérifier les essais avec + `grep -c '\[connect\] openRFCOMMChannelAsync' build/app.log`. +5. **Options** : décocher « Connexion automatique », quitter, relancer → l'option reste décochée et l'app ne + se connecte pas seule. +6. **Lancement à l'ouverture de session** : `cp -R build/SonyBridge.app /Applications/`, lancer la copie de + `/Applications`, cocher l'option → elle apparaît dans Réglages Système › Général › Ouverture ; fermer la + session puis la rouvrir → l'icône revient seule. Si macOS demande une approbation, les Réglages s'ouvrent + sur la bonne page. + +- [ ] **Step 11 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "feat(macos): auto-connect, auto-reconnect and launch at login (menu options)" +``` + +--- + +### Task 8: Expérimentations XM6 + écriture de l'égaliseur (spec §7) + +Tâche **avec l'utilisateur et le casque**. On confirme d'abord chaque format sur le matériel, puis on active +l'écriture de l'égaliseur. Un menu « Debug » (compilé seulement avec `make run DEBUG=1`) permet d'envoyer une +trame brute ; les réponses du casque arrivent dans `build/app.log`. Ce menu n'est qu'un outil de diagnostic, +en anglais : ses textes ne sont pas traduits. + +**Files:** +- Modify : `Client/macos/HeadphonesBridge.h/.mm` (`sendRawPayload:completion:`, `equalizerWritable`) +- Modify : `Client/macos/HeadphonesModel.swift` (`sendRaw(hex:)`), `Client/macos/HeadphonesMenu.swift` (menu Debug) +- Modify : `Client/ProtocolParsers.h/.cpp` (`buildCustomEqualizer`), `Client/Headphones.cpp` + (`setEqualizerCustom`), `Client/tests/ProtocolParsersTests.cpp` +- Create : `docs/xm6-protocol-notes.md` (résultats des expériences) + +**Interfaces:** +- Produces : `Buffer ProtocolParsers::buildCustomEqualizer(unsigned char manualPreset, bool hasClearBass, int clearBass, const std::vector& bands)` ; + `HeadphonesBridge.sendRawPayload(_:completion:)` ; `HeadphonesModel.sendRaw(hex:)` (seulement avec `DEBUG_PROTOCOL`). + +- [ ] **Step 1 : Envoi brut dans le pont** + +`Client/macos/HeadphonesBridge.h` : + +```objc +// Diagnostics: sends a raw payload (e.g. 56 00) and waits for the ACK; replies are hex-dumped to the log when +// built with DEBUG_PROTOCOL. Only reachable from the Debug menu of `make run DEBUG=1` builds. +- (void)sendRawPayload:(NSData *)payload completion:(void (^)(BOOL ok, NSString * _Nullable error))completion; +``` + +`Client/macos/HeadphonesBridge.mm` : + +```objc +- (void)sendRawPayload:(NSData *)payload completion:(void (^)(BOOL, NSString * _Nullable))completion { + if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } + std::vector bytes((const char *)payload.bytes, (const char *)payload.bytes + payload.length); + BluetoothWrapper *bt = _bt.get(); + dispatch_async(_cmdQueue, ^{ + NSString *error = nil; BOOL ok = YES; + try { bt->sendCommand(bytes); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } + dispatch_async(dispatch_get_main_queue(), ^{ completion(ok, error); }); + }); +} +``` + +- [ ] **Step 2 : Menu Debug** + +`Client/macos/HeadphonesModel.swift`, dans la section « Actions » : + +```swift + #if DEBUG_PROTOCOL + // Debug menu only: sends raw bytes like "56 00"; the replies are logged to build/app.log. + func sendRaw(hex: String) { + let bytes = hex.split(whereSeparator: { $0 == " " || $0 == "," }).compactMap { UInt8($0, radix: 16) } + guard !bytes.isEmpty else { return } + bridge.sendRawPayload(Data(bytes)) { [weak self] ok, error in self?.finish(ok, error) } + } + #endif +``` + +`Client/macos/HeadphonesMenu.swift` : dans `addAppSection()`, juste avant `menu.addItem(.separator())` qui +précède « Quitter », ajouter : + +```swift + #if DEBUG_PROTOCOL + menu.addItem(ActionMenuItem("Debug: send frame…") { [weak self] in self?.promptRawFrame() }) + #endif +``` + +et la méthode : + +```swift + #if DEBUG_PROTOCOL + // Diagnostics only (not localized): asks for a hex payload and sends it as-is. + private func promptRawFrame() { + let alert = NSAlert() + alert.messageText = "Send raw payload (hex)" + let field = NSTextField(frame: NSRect(x: 0, y: 0, width: 260, height: 24)) + field.placeholderString = "56 00" + alert.accessoryView = field + alert.addButton(withTitle: "Send") + alert.addButton(withTitle: "Cancel") + NSApp.activate(ignoringOtherApps: true) + if alert.runModal() == .alertFirstButtonReturn { model.sendRaw(hex: field.stringValue) } + } + #endif +``` + +Run : `make test && make run DEBUG=1` → le menu montre « Debug: send frame… ». Envoyer `56 00` → dans +`build/app.log`, une ligne `[recv] 3e 0c … 57 00 …`. + +- [ ] **Step 3 : Expérience E1, les 2 octets de plus du canal `0x19`** + +L'utilisateur passe par les trois modes **avec le bouton du casque**, en attendant 3 s entre chaque, puis : +`grep -E '\[recv\].* 6[79] 19' build/app.log | tail -6`. +Noter dans `docs/xm6-protocol-notes.md` la valeur des octets 8 et 9 pour chaque mode. Aucun changement de code +n'est prévu : ces octets ne servent qu'à documenter (par exemple une option de l'optimiseur NC, hors +périmètre). + +- [ ] **Step 4 : Expérience E2, lecture de l'égaliseur** + +L'utilisateur règle l'égaliseur dans l'app Sony (Sound Connect) sur son téléphone, puis envoie `56 00` depuis +« Debug: send frame… », pour chacun de ces réglages : « Désactivé », « Bass Boost » (Graves), « Bright » +(Brillant), puis « Manuel » avec **31 Hz au maximum, 16 kHz au minimum, le reste à 0**. +Pour chaque réglage : `grep '\[recv\].* 57 00' build/app.log | tail -1`. Noter l'identifiant de preset (octet 3) +et les 10 valeurs. Conclure : +- le décalage : avec 31 Hz au max, la 1ʳᵉ valeur doit valoir `0x14` (20) si la plage est −10…+10 (décalage 10), + ou `0x0c` (12) si elle est −6…+6 (décalage 6) ; +- les identifiants de presets du XM6 (comparer avec `0x00, 0x10…0x17, 0xa0`). +Si l'app Sony ne peut pas se connecter pendant que le Mac est connecté, fermer SonyBridge pendant chaque +réglage, puis relancer l'app et relire. + +- [ ] **Step 5 : Expérience E3, écriture d'un preset** + +Avec l'identifiant de « Bass Boost » trouvé en E2 (noté ``) : envoyer `58 00 00`. L'utilisateur doit +**entendre** plus de basses. Relire avec `56 00` : l'octet 3 de la réponse doit valoir ``. Remettre ensuite +le preset d'origine de la même façon. + +- [ ] **Step 6 : Expérience E4, écriture de l'égaliseur manuel 10 bandes** + +Volume modéré. Envoyer `58 00 a0 0a 0d 0a 0a 0a 0a 0a 0a 0a 0a 0a` (31 Hz à +3 si le décalage est 10, le reste +à 0 ; adapter les valeurs si E2 a trouvé un autre décalage). Relire avec `56 00`. Attendu : +`57 00 a0 0a 0d 0a 0a 0a 0a 0a 0a 0a 0a 0a`. Si l'octet 3 de la réponse n'est pas `a0` (par exemple `a1` pour +un « Personnalisé 1 »), noter cet identifiant : c'est le preset « Manuel » du XM6. + +- [ ] **Step 7 : Expérience E5, les autres écritures** + +Depuis le menu : basculer DSEE, changer « Arrêt automatique », basculer Speak-to-Chat. Après chaque +changement, relire avec respectivement `e6 01`, `26 05`, `f6 0c` : la réponse (`e7 01 …`, `27 05 …`, +`f7 0c …`) doit refléter la nouvelle valeur. + +- [ ] **Step 8 : Point de décision (avec l'utilisateur)** + +Écrire les résultats E1 à E5 dans `docs/xm6-protocol-notes.md` (un tableau : trame envoyée, trame reçue, +conclusion). **Si E3 ou E4 contredisent les hypothèses** (aucun effet audible, ou une relecture différente de +ce qui a été envoyé) : **arrêter**, présenter les trames à l'utilisateur et replanifier l'écriture de +l'égaliseur. Les étapes 9 à 13 supposent que E2 à E4 ont confirmé les formats. + +- [ ] **Step 9 : Test du constructeur de trame** — ajouter à `Client/tests/ProtocolParsersTests.cpp`, avant +le bloc `// --- Framing ---` : + +```cpp + // --- Custom equalizer write --- + // 5 bands + Clear Bass (verified WH-CH720N format): 58 00 a0 06 + CHECK(buildCustomEqualizer(0xa0, true, 3, { -2, -1, 0, 1, 2 }) == bytes({ 0x58, 0x00, 0xa0, 0x06, 13, 8, 9, 10, 11, 12 })); + // 10 bands (WH-1000XM6, confirmed by experiment E4): 58 00 a0 0a + CHECK(buildCustomEqualizer(0xa0, false, 0, { 3, 0, 0, 0, 0, 0, 0, 0, 0, -10 }) + == bytes({ 0x58, 0x00, 0xa0, 0x0a, 13, 10, 10, 10, 10, 10, 10, 10, 10, 0 })); + // Values are clamped to -10..10. + CHECK(buildCustomEqualizer(0xa0, false, 0, { 15, -15 }) == bytes({ 0x58, 0x00, 0xa0, 0x02, 20, 0 })); +``` + +Si E2 a trouvé un décalage différent de 10, ou E4 un autre identifiant « Manuel », adapter les octets attendus +de la 2ᵉ assertion aux trames réellement confirmées. +Run : `make test` → échec : `use of undeclared identifier 'buildCustomEqualizer'`. + +- [ ] **Step 10 : Écrire le constructeur** + +`Client/ProtocolParsers.h`, dans le namespace : + +```cpp + // "58 00 [] ", each value clamped to -10..10. + Buffer buildCustomEqualizer(unsigned char manualPreset, bool hasClearBass, int clearBass, const std::vector& bands); +``` + +`Client/ProtocolParsers.cpp`, dans le namespace : + +```cpp + Buffer buildCustomEqualizer(unsigned char manualPreset, bool hasClearBass, int clearBass, const std::vector& bands) + { + auto encode = [](int v) { return (char)(unsigned char)(std::max(-10, std::min(10, v)) + 10); }; + Buffer cmd = { (char)V2Command::EQ_SET, 0x00, (char)manualPreset, 0x00 }; + if (hasClearBass) cmd.push_back(encode(clearBass)); + for (int band : bands) cmd.push_back(encode(band)); + cmd[3] = (char)(cmd.size() - 4); + return cmd; + } +``` + +Run : `make test` → `ProtocolParsersTests: all passed`. + +- [ ] **Step 11 : Utiliser le constructeur et ouvrir l'écriture** + +`Client/Headphones.cpp`, dans `Headphones::setEqualizerCustom`, remplacer la construction manuelle de `cmd` (le +lambda `clamp`, le `Buffer cmd = { … }` et la boucle `push_back`) et l'envoi par : + +```cpp + this->_conn.sendCommand(ProtocolParsers::buildCustomEqualizer( + static_cast(EQ_PRESET::MANUAL), this->_eqHasClearBass, clearBass, bands)); +``` + +(garder la mise à jour de `_eqPreset`, `_eqClearBass` et `_eqBands` qui suit). + +`Client/macos/HeadphonesBridge.mm`, remplacer l'implémentation de `equalizerWritable` et son commentaire par : + +```objc +// Both layouts have a verified write format: 5 bands + Clear Bass (WH-CH720N) and 10 bands (WH-1000XM6, +// docs/xm6-protocol-notes.md). Nothing is writable before the first equalizer read. +- (BOOL)equalizerWritable { return self.supportsEqualizer && _hp && _hp->getEqualizerBandCount() > 0; } +``` + +Si E2 a montré que le XM6 utilise d'autres identifiants de presets, remplacer les codes de +`HeadphonesMenu.presets` par ceux trouvés, et retirer du tableau les presets que le XM6 n'a pas (avec leur +traduction s'ils ne servent plus). + +- [ ] **Step 12 : Tests, build, vérification avec l'utilisateur** + +Run : `make test && make run DEBUG=1`. Demander à l'utilisateur : +1. Dans « Égaliseur », les presets ne sont plus grisés, et la mention « bientôt disponible » a disparu. +2. Choisir « Graves » : le son change, et la coche suit. +3. Choisir « Manuel », puis faire glisser un curseur : le son change pendant le glissement, et la valeur + reste après le relâchement. +4. Déconnecter puis reconnecter : l'égaliseur relu est celui qui a été réglé. + +- [ ] **Step 13 : Commit** (par l'utilisateur) + +```bash +git add -A && git commit -m "feat(xm6): equalizer writes (presets + 10-band manual) confirmed on hardware; debug frame sender" +``` + +--- + +### Task 9: README, vérification finale et CI + +**Files:** +- Modify : `README.md` + +- [ ] **Step 1 : Mettre le README à jour** + +- Ligne d'accroche (en gras, sous la bannière) : + `**An unofficial, open-source macOS menu bar app for Sony headphones — Noise Cancelling, Ambient Sound, EQ, DSEE and battery, without the phone.**` +- Section « ✨ Features » : + - remplacer la ligne « 🎛️ **Equalizer** … » par + `- 🎛️ **Equalizer** — presets *and* a **Manual mode** (10 bands on WH-1000XM6, 5 bands + Clear Bass on older models)` + - remplacer la ligne « 🖼️ **Device hero image** … » par + `- 📍 **Lives in the menu bar** — a native macOS menu; the icon shows the current mode` + - remplacer la ligne « 🔌 **Auto-connect** … » par + `- 🔌 **Auto-connect & auto-reconnect**, plus **Launch at Login** — each one can be turned off` + - remplacer la ligne « 🌑 **Modern UI** … » par `- 🌍 **English & French**` +- Section « 🎧 Supported headphones » : si la tâche 8 a confirmé les formats, déplacer `WH-1000XM6` de la ligne + « Expected » vers la ligne « Verified ». + +- [ ] **Step 2 : Chercher les restes de l'ancienne app** + +Run : +`grep -rnE 'xcodeproj|xcodebuild|ContentView|Main\.storyboard|HeadphonesUIFactory' --exclude-dir=.git --exclude-dir=build --exclude-dir=superpowers . || echo clean` +Attendu : `clean`. Sinon, corriger chaque occurrence. + +- [ ] **Step 3 : Build de release** + +Run : `make clean && make test && make release && lipo -archs build/SonyBridge.app/Contents/MacOS/SonyBridge` +Attendu : tout passe, `build/SonyBridge.zip` existe, et `lipo` affiche `x86_64 arm64`. + +- [ ] **Step 4 : Checklist manuelle complète avec l'utilisateur** (spec §9), sur la version de release : + +`open build/SonyBridge.app`, puis vérifier avec lui : +1. Chaque élément du menu (spec §4), casque connecté puis déconnecté. +2. Le bouton physique NC du casque, menu fermé puis menu ouvert. +3. La coupure pour inactivité, puis la reconnexion automatique ; « Déconnecter » n'entraîne pas de reconnexion. +4. Le lancement à l'ouverture de session (depuis `/Applications`). +5. La barre des menus en thème clair puis sombre : l'icône reste lisible. +6. Le Mac en anglais : `open build/SonyBridge.app --args -AppleLanguages '(en)'`, tout le menu en anglais. + +- [ ] **Step 5 : Commit, puis CI** (par l'utilisateur) + +```bash +git add -A && git commit -m "docs: README for the menu bar app" +``` + +L'utilisateur pousse sa branche et ouvre une PR vers `main` : le workflow « macOS » doit passer (`make test` +puis `make release`) et publier l'artefact `SonyBridge-macOS`. + From cdae3718caa9e329513aad30ff9d97390f9508b0 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 15:18:18 +0200 Subject: [PATCH 05/50] feat(macos): menu bar agent app built with make (drop Xcode project and window UI) --- .github/workflows/build.yml | 19 + .github/workflows/xcodebuild.yml | 53 -- Client/macos/AppDelegate.h | 18 - Client/macos/AppDelegate.mm | 35 -- Client/macos/AppDelegate.swift | 14 + .../AppIcon.appiconset/Contents.json | 15 - Client/macos/Assets.xcassets/Contents.json | 3 - .../linkbuds-s.imageset/Contents.json | 12 - .../linkbuds-s.imageset/linkbuds-s.png | Bin 72807 -> 0 bytes .../mdr-xb950bt.imageset/Contents.json | 12 - .../mdr-xb950bt.imageset/mdr-xb950bt.png | Bin 107133 -> 0 bytes .../wf-1000xm4.imageset/Contents.json | 12 - .../wf-1000xm4.imageset/wf-1000xm4.png | Bin 63054 -> 0 bytes .../wf-1000xm5.imageset/Contents.json | 12 - .../wf-1000xm5.imageset/wf-1000xm5.png | Bin 63455 -> 0 bytes .../wf-c700n.imageset/Contents.json | 12 - .../wf-c700n.imageset/wf-c700n.png | Bin 65464 -> 0 bytes .../wh-1000xm2.imageset/Contents.json | 12 - .../wh-1000xm2.imageset/wh-1000xm2.png | Bin 120624 -> 0 bytes .../wh-1000xm3.imageset/Contents.json | 12 - .../wh-1000xm3.imageset/wh-1000xm3.png | Bin 69683 -> 0 bytes .../wh-1000xm4.imageset/Contents.json | 12 - .../wh-1000xm4.imageset/wh-1000xm4.png | Bin 77456 -> 0 bytes .../wh-1000xm5.imageset/Contents.json | 12 - .../wh-1000xm5.imageset/wh-1000xm5.png | Bin 76768 -> 0 bytes .../wh-1000xm6.imageset/Contents.json | 12 - .../wh-1000xm6.imageset/wh-1000xm6.png | Bin 112001 -> 0 bytes .../wh-ch520.imageset/Contents.json | 12 - .../wh-ch520.imageset/wh-ch520.png | Bin 68700 -> 0 bytes .../wh-ch720n.imageset/Contents.json | 12 - .../wh-ch720n.imageset/wh-ch720n.png | Bin 122300 -> 0 bytes .../wh-xb900n.imageset/Contents.json | 12 - .../wh-xb900n.imageset/wh-xb900n.png | Bin 72622 -> 0 bytes .../wh-xb910n.imageset/Contents.json | 12 - .../wh-xb910n.imageset/wh-xb910n.png | Bin 77342 -> 0 bytes Client/macos/ContentView.swift | 455 ------------------ Client/macos/HeadphonesMenu.swift | 68 +++ Client/macos/Localization.swift | 6 + Client/macos/Main.storyboard | 332 ------------- Client/macos/MenuSupport.swift | 31 ++ .../AppIcon.iconset/icon_128x128.png} | Bin .../AppIcon.iconset/icon_128x128@2x.png} | Bin .../AppIcon.iconset/icon_16x16.png} | Bin .../AppIcon.iconset/icon_16x16@2x.png} | Bin .../AppIcon.iconset/icon_256x256.png | Bin 0 -> 13651 bytes .../AppIcon.iconset/icon_256x256@2x.png} | Bin .../Resources/AppIcon.iconset/icon_32x32.png | Bin 0 -> 1180 bytes .../AppIcon.iconset/icon_32x32@2x.png} | Bin .../AppIcon.iconset/icon_512x512.png | Bin 0 -> 15795 bytes .../AppIcon.iconset/icon_512x512@2x.png} | Bin Client/macos/SonyBridgeApp.swift | 13 + .../project.pbxproj | 431 ----------------- .../xcshareddata/IDEWorkspaceChecks.plist | 8 - Client/macos/StatusItemController.swift | 21 + Client/macos/ViewController.h | 31 -- Client/macos/ViewController.mm | 51 -- Client/macos/exportOptions.plist | 8 - Client/macos/fr.lproj/Localizable.strings | 60 +-- Client/macos/info.plist | 20 +- Client/macos/main.mm | 9 - Makefile | 20 + README.md | 10 +- scripts/build.sh | 67 +++ 63 files changed, 289 insertions(+), 1677 deletions(-) create mode 100644 .github/workflows/build.yml delete mode 100644 .github/workflows/xcodebuild.yml delete mode 100644 Client/macos/AppDelegate.h delete mode 100644 Client/macos/AppDelegate.mm create mode 100644 Client/macos/AppDelegate.swift delete mode 100644 Client/macos/Assets.xcassets/AppIcon.appiconset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/Contents.json delete mode 100644 Client/macos/Assets.xcassets/linkbuds-s.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/linkbuds-s.imageset/linkbuds-s.png delete mode 100644 Client/macos/Assets.xcassets/mdr-xb950bt.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/mdr-xb950bt.imageset/mdr-xb950bt.png delete mode 100644 Client/macos/Assets.xcassets/wf-1000xm4.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wf-1000xm4.imageset/wf-1000xm4.png delete mode 100644 Client/macos/Assets.xcassets/wf-1000xm5.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wf-1000xm5.imageset/wf-1000xm5.png delete mode 100644 Client/macos/Assets.xcassets/wf-c700n.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wf-c700n.imageset/wf-c700n.png delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm2.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm2.imageset/wh-1000xm2.png delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm3.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm3.imageset/wh-1000xm3.png delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm4.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm4.imageset/wh-1000xm4.png delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm5.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm5.imageset/wh-1000xm5.png delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm6.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-1000xm6.imageset/wh-1000xm6.png delete mode 100644 Client/macos/Assets.xcassets/wh-ch520.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-ch520.imageset/wh-ch520.png delete mode 100644 Client/macos/Assets.xcassets/wh-ch720n.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-ch720n.imageset/wh-ch720n.png delete mode 100644 Client/macos/Assets.xcassets/wh-xb900n.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-xb900n.imageset/wh-xb900n.png delete mode 100644 Client/macos/Assets.xcassets/wh-xb910n.imageset/Contents.json delete mode 100644 Client/macos/Assets.xcassets/wh-xb910n.imageset/wh-xb910n.png delete mode 100644 Client/macos/ContentView.swift create mode 100644 Client/macos/HeadphonesMenu.swift create mode 100644 Client/macos/Localization.swift delete mode 100644 Client/macos/Main.storyboard create mode 100644 Client/macos/MenuSupport.swift rename Client/macos/{Assets.xcassets/AppIcon.appiconset/icon_128.png => Resources/AppIcon.iconset/icon_128x128.png} (100%) rename Client/macos/{Assets.xcassets/AppIcon.appiconset/icon_256.png => Resources/AppIcon.iconset/icon_128x128@2x.png} (100%) rename Client/macos/{Assets.xcassets/AppIcon.appiconset/icon_16.png => Resources/AppIcon.iconset/icon_16x16.png} (100%) rename Client/macos/{Assets.xcassets/AppIcon.appiconset/icon_32.png => Resources/AppIcon.iconset/icon_16x16@2x.png} (100%) create mode 100644 Client/macos/Resources/AppIcon.iconset/icon_256x256.png rename Client/macos/{Assets.xcassets/AppIcon.appiconset/icon_512.png => Resources/AppIcon.iconset/icon_256x256@2x.png} (100%) create mode 100644 Client/macos/Resources/AppIcon.iconset/icon_32x32.png rename Client/macos/{Assets.xcassets/AppIcon.appiconset/icon_64.png => Resources/AppIcon.iconset/icon_32x32@2x.png} (100%) create mode 100644 Client/macos/Resources/AppIcon.iconset/icon_512x512.png rename Client/macos/{Assets.xcassets/AppIcon.appiconset/icon_1024.png => Resources/AppIcon.iconset/icon_512x512@2x.png} (100%) create mode 100644 Client/macos/SonyBridgeApp.swift delete mode 100644 Client/macos/SonyHeadphonesClient.xcodeproj/project.pbxproj delete mode 100644 Client/macos/SonyHeadphonesClient.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist create mode 100644 Client/macos/StatusItemController.swift delete mode 100644 Client/macos/ViewController.h delete mode 100644 Client/macos/ViewController.mm delete mode 100644 Client/macos/exportOptions.plist delete mode 100644 Client/macos/main.mm create mode 100644 Makefile create mode 100755 scripts/build.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000..cbe01345 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,19 @@ +name: macOS + +on: + push: + branches: [main] + pull_request: + branches: [main] + +jobs: + build: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + - name: Build (release, universal) + run: make release + - uses: actions/upload-artifact@v4 + with: + name: SonyBridge-macOS + path: build/SonyBridge.zip diff --git a/.github/workflows/xcodebuild.yml b/.github/workflows/xcodebuild.yml deleted file mode 100644 index 97ddde40..00000000 --- a/.github/workflows/xcodebuild.yml +++ /dev/null @@ -1,53 +0,0 @@ -name: macOS - -on: - push: - branches: - - main - pull_request: - branches: - - main - -jobs: - build: - strategy: - matrix: - os: ["macos-latest"] - include: - - os: macos-latest - binary_path: Client/build/SonyHeadphonesClient.zip - artifact_name: "SonyHeadphonesClient-macOS.zip" - runs-on: ${{ matrix.os }} - - steps: - - uses: actions/checkout@v4 - - - name: Create build directory - working-directory: ${{github.workspace}}/Client - run: mkdir build - - - name: Build - working-directory: ${{github.workspace}}/Client/build - # Execute the build. - run: xcodebuild -project '../macos/SonyHeadphonesClient.xcodeproj' -config Release -scheme 'SonyHeadphonesClient' -archivePath ./archive archive | xcpretty - - - name: Export archive to .app - working-directory: ${{github.workspace}}/Client/build - # Exports the archive to a .app file - run: xcodebuild -exportArchive -archivePath ./archive.xcarchive -exportPath ./ -exportOptionsPlist ../macos/exportOptions.plist | xcpretty - - - name: Zip the exported file - working-directory: ${{github.workspace}}/Client/build - # Zip the application for easier downloading - run: zip -r SonyHeadphonesClient.zip SonyHeadphonesClient.app - - - name: Upload the zipped application - uses: actions/upload-artifact@v4 - with: - # Artifact name - name: ${{ matrix.artifact_name }} - # A file, directory or wildcard pattern that describes what to upload - path: ${{github.workspace}}/${{matrix.binary_path}} - # The desired behavior if no files are found using the provided path. - - diff --git a/Client/macos/AppDelegate.h b/Client/macos/AppDelegate.h deleted file mode 100644 index 02174374..00000000 --- a/Client/macos/AppDelegate.h +++ /dev/null @@ -1,18 +0,0 @@ -// -// AppDelegate.h -// SonyHeadphonesClient -// -// Created by Sem Visscher on 01/12/2020. -// - -#import -#import -#import -#import "BluetoothWrapper.h" -#import "Headphones.h" -#import "MacOSBluetoothConnector.h" - -@interface AppDelegate : NSObject - @property (weak) NSWindow* window; - -@end diff --git a/Client/macos/AppDelegate.mm b/Client/macos/AppDelegate.mm deleted file mode 100644 index 5d09dc3e..00000000 --- a/Client/macos/AppDelegate.mm +++ /dev/null @@ -1,35 +0,0 @@ -// -// AppDelegate.m -// SonyHeadphonesClient -// -// Created by Sem Visscher on 01/12/2020. -// - -#import "AppDelegate.h" - -@interface AppDelegate () - - -@end - -@implementation AppDelegate -- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { - _window = [[[NSApplication sharedApplication] windows] firstObject]; -} - -- (BOOL)applicationShouldHandleReopen:(NSApplication *)theApplication hasVisibleWindows:(BOOL)flag -{ - if (flag) { - return NO; - } - else { - [_window makeKeyAndOrderFront:self]; - return YES; - } -} - -- (void)applicationWillTerminate:(NSNotification *)aNotification { - // Insert code here to tear down your application -} - -@end diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift new file mode 100644 index 00000000..d8b38ef7 --- /dev/null +++ b/Client/macos/AppDelegate.swift @@ -0,0 +1,14 @@ +import AppKit + +final class AppDelegate: NSObject, NSApplicationDelegate { + private let model = HeadphonesModel() + private var statusItemController: StatusItemController? + + func applicationDidFinishLaunching(_ notification: Notification) { + statusItemController = StatusItemController(model: model) + } + + func applicationWillTerminate(_ notification: Notification) { + model.disconnect() + } +} diff --git a/Client/macos/Assets.xcassets/AppIcon.appiconset/Contents.json b/Client/macos/Assets.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 9dabd293..00000000 --- a/Client/macos/Assets.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "images" : [ - { "idiom" : "mac", "scale" : "1x", "size" : "16x16", "filename" : "icon_16.png" }, - { "idiom" : "mac", "scale" : "2x", "size" : "16x16", "filename" : "icon_32.png" }, - { "idiom" : "mac", "scale" : "1x", "size" : "32x32", "filename" : "icon_32.png" }, - { "idiom" : "mac", "scale" : "2x", "size" : "32x32", "filename" : "icon_64.png" }, - { "idiom" : "mac", "scale" : "1x", "size" : "128x128", "filename" : "icon_128.png" }, - { "idiom" : "mac", "scale" : "2x", "size" : "128x128", "filename" : "icon_256.png" }, - { "idiom" : "mac", "scale" : "1x", "size" : "256x256", "filename" : "icon_256.png" }, - { "idiom" : "mac", "scale" : "2x", "size" : "256x256", "filename" : "icon_512.png" }, - { "idiom" : "mac", "scale" : "1x", "size" : "512x512", "filename" : "icon_512.png" }, - { "idiom" : "mac", "scale" : "2x", "size" : "512x512", "filename" : "icon_1024.png" } - ], - "info" : { "author" : "xcode", "version" : 1 } -} diff --git a/Client/macos/Assets.xcassets/Contents.json b/Client/macos/Assets.xcassets/Contents.json deleted file mode 100644 index d8b757af..00000000 --- a/Client/macos/Assets.xcassets/Contents.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "info" : { "author" : "xcode", "version" : 1 } -} diff --git a/Client/macos/Assets.xcassets/linkbuds-s.imageset/Contents.json b/Client/macos/Assets.xcassets/linkbuds-s.imageset/Contents.json deleted file mode 100644 index 6dcd1d8f..00000000 --- a/Client/macos/Assets.xcassets/linkbuds-s.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "linkbuds-s.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/linkbuds-s.imageset/linkbuds-s.png b/Client/macos/Assets.xcassets/linkbuds-s.imageset/linkbuds-s.png deleted file mode 100644 index 89f98ed86e824ac4259a8f6e9964b11ad15de9af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 72807 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 z z%#%ry%rqEUPj4hilK<`Be(#UtKI9ZBlONEJoQhlpcqWN+Vb@spP7s(&mxfqN3OIsv z!mI(sg|(zKQc4erWCzz;pr^MoD}{z@g{Qd)mvI!n=Xtj8qI*h@$diNIh1vz}pFz!} zi2BO7hNf3AnDNB3a7eD5g}tN=L_4TzUpvB z5&>~`hb!-G!7wJLq63EYqwfh9DKaL5>yr44E9u(E#g}}X+GUZ`PdxckIxw3ZxgL7W z!8D`F^{mM2i^w98K>0j#FA~ABw4szRyKo@dxQmWUYHoNkDHxO|n#tRgh?TU**33Zv zX7l*tM{d9O-g|%281pCB!-Z5zDQ)zy7zbZl%_Hk0iFhRfy5s$Bx3%#tQJ zM-+`{t4N5b$*h5HO)8A>ok+c>#j6KVoI>BD*2Y4y^{@?{6~X2^;JjMLxi}dUc`)ld ztcrOE2BJNag`!teMd&#MmObGaknP}Roq<-Qy6vT%Mml9xFQuj1^Q+}IN`IyQ)*F?p z-18Js;QNR~FjKVpKFa6_LrQZM@=QHON@S_4i*9_0u;_k{2SUvyh0s34;OWz$qF9VQsOXGN(kykZU=lPX;~XJfnpXrL>JmIdS4&a{DAo$nU9> z;;LxA|5*IcQQpg-P6|-$wk4w`k z_MwG{Ty1ZQhsp6|i5-UMgPgHs0q9wWGl|teJJi(Zb4Gp5F~eu$tdm+2N~D5gNsZZv zi&OfP!Xt?&*fWWQa4n>YU7vr8m(sHjY_v)=V;;4IiT=b;gCyh89(3QTh{(5vB>6wYXRtKU#egskv zPf6FC=!2+E1n(hTg&C?JiRgBa=7L-Xeq%YLzkK~J?rsMSIr?Il&*wuhx{e$<0#)aQ zd_KQ?>C&YO+qP|6z0%Fs7#ojE=P&%&%U*P?Tv2ilM zm?V%i2TkIX#)(2eQR5{&C5dM2^@si)t8XLq3qwq4E@Ck`+(C^S$gzR4t75rV1)GHN zLduMBj@klRirR@NQjx;MNFot_UTC&15eY?KRd*Z&G|Ou$ECgL%o?=`7g@{0l2Q{@} zCw7{G6JQ>~jv0->vZjhCLu{NMv8fU-r2*|kH?ilHCzDzSz!?~1Fti}B1bwbdPI{&= z0Z5A_IlH6%>0Jdn?}OL-oG7_MA+}hqJ3loU6|s{nqaqP2(ry**&(4vDE~;RC)pU1v znqL6hCM5@wf_U_to^3;=0-aIomzqz@oxy2YtPoP$Ss^Vp{wz!Y- zhe1qUn)p|iJDzqRX(Q_NtZHZD5M_nC)Am6B z6UJ2?qn|d={(3o|x?Y2@UWAaQ@#=3s%J6?Q3aL|(ensbm0pkKN)*7O~kaIv!1^+nk zd#zYBYip3w&JwtehD0o@%{g`$CUInxfe3=2C6~*^OG`^T4!Nu1;9ZoMO}kTn&e(^6mM5=gnT?+Bdvl#M#q&6bL1noO%BH3)VXJ%$*_mLwd442IsF6sZ#3JsZzn^CVncNhbme8{s?PwWtGo#W zw#QQF(x6BTR!yWUkB_Jy*y1@17*>GEL0Ba*M0}3rhyX(AAZ^WBHaYCKh!Vm9F||}w zb49FCk{ObY)>;yl|A2$iXh>}kKxucM@=TwowXDQIQ3iD*Emug2gs>Ol&~TSSRkbB# zM5wr2K*@|OF2wT+gr&;7OtST=eaDkgTtlus<8+qdJbJD*-9@642}f^Ke?!R;=k$FW zg26gmd>+^dOKMFfuguO8>ai!}NKQ*>*_e>xyFv~ky!3TfP z81uR7av*3hbolV$nZ3LBpSW=0;{K(D<-S5wp%p1Iib9xRYdxY~JTCC56&|!y!K*wp z8$}D8xpJXeO7QWHrBQ8IdH$;@zir9 z^^SkT^RNMRcYSKE7A$qg>3*9*CB< z0qLgYhnP`mdr;EQxkWGav%@l(Fim5^uBJj++bTI>%dJNaB*Kyk@_STLD5 zwp<)Xy+#B-l_-l+MI?60z&sZeiVg8eIHJI-tS)ZGCG{X$e@4vp11KF_0>Mgh2vb1yOw(~o0*l{8@@mQr=0mr{g zw~yqL)O&KZH)A7~0i{2pd<(sQ>fA?yf$lY(Ed0o8gqQq2_vWA;$u-g=+_zkFowb@) zngdmRo%PgR_aj3js&eyDvdA6!` z6)u;KN^Yi>`j{rucoo=Z5~HS~sE&%7t#JWgW!*cManG1<}m)aMWb=Mvl0S}LB%O34647}CO4j){!FoiK{i(FjU19!ApZ zloAukcGefu9`L;XoOTqcc42KQn@*z}{7KiwdtSAk2I(wr|Ldix1#6;CkAB8R6+6TU za~~tGT0uoKtrJq_oa?!QWkCI(ot+Pk969#SuiJrO+;!Jo%lmfkK7U~U-eZ9=qoq=L zJ_rqpOKL2w;uE~XYOK>gA}&U=DQEE4y|&=EzE@l8QL|2OJ3h;z=BGB(W^Z;o)4>gj zw3RjTR|d`N&FXbVVjn8+9QfZ$|83WE1qZh}68N zkTaP=#)LWOPz1Iimi9MM=e<#s!~_cxL~71tGTjps6T8o!KY#1!=;*+O3m24g*cewB zK@i+HKR4f;%cF43-T!JJ^r?eWr^3>F&K!F55i>qMZnD|PtgbAR(vCE_ep^-3q6WBsn#3V_t{7SQ0Hew z`sdI@kfl(l{(*pJo~Rgamac__NVQTbhkAg^#7#sMRd)*&=}JB3N^dsOl%5vDg{Tb< zij}WX7s3Zf_=%+ZI8qZjtxs~X)Lmnhb(sNIJJG}X>6pBtL2VGFlWYDCpEssb3xMtw zZ8Jq%RCwWJL<&U<1TBkFiXl}e%&L!D`{4vJ`TXiVCxV)iPU9X)+_S#3qr)6IcKk<= zA3whNx*Z7mKJ@qZPu+CWO;2pyI{4&Tu{fSo%{*`_PFgt%m3n%OKz!%GKQ2;u%0D)g z*LAOVChH=Qn&`vL=4^U^A|Re6_(pakqw9aJHxB1aeTGzRDi zYbHygiuir{Vq4fR0 zeomjs*hRAf{_A^MC`atCD5T1H!UaeCrs7Vi!s2DdKhU|CHs!(4OQ7znn+vCQq{Pt^)OPoPYzOqSjhpxK_HEW0tY-} zh{7mJs@QIVO2ziEMV%-p?j%5rwF8_+bTwu=@ul;wt;TJZMB0y2D$7^%_HY`C;;OZ^ zBr4))I0_ja9_f7Gfd~KLHG}B>*uQ`O^7Qodxm$0&`O%4qsm*I^Yb}MQLQ{|g8IZx& zeW4~j#&e`4f*{uQQB|hX1+d zF@5Ts0@S|a@O82D`#MX}n>fwN@;~?grbF?7PyPE!`KIWeD1=93jos_%Dq<@ z!kmDpeM%&Fd!xDfgry+76{3XuwPVKGw5Nh-*-Ga5Q%jB} z3?{Pw9tRdkuSs2rpbQq@qSP8+AOHDPG6m1eIhxb`rf!O;)u~j?`HL6dX^eT_bwwaz zaN`JAoUCi^Q&swRowl78Ih6j*jk~n3%YsR4TP@ zaG4sz7<2yo`NHDT;%+Y1Wk!*`S3G79$%CL8nP&Bg*}m-tbIYx_nU>}jYHy2s4pqvV zHuanSP5m;v#&xUhNuv?CJ|h|pD6&aRBbvqY4=UD~sTEiw zPC|on9NO|01{;hhW>C2-0!I`oiy}pTn&#GtpH`WR(Pg<8eC`YqweKYd#7>sdY0_In zTYzY1K9(NgIv6sxR1he$d5T)3NfkB963{up`kXCL3`I!_?zwZXNz1ERVd^}XSipv) zqMnweZRxB54xi7H&3b@61}wz36nFN3@fv1c`S%V*d!AI36}yzKk9tpN?TM3w;%iuF zYBtA@op{;VvuAI)ZU=&~XV0F}jW-UA+B%hd#Y;ApOMxY z+l>q<|L{!0Itcr|uE)n(9KPWkOD$l&j%}rTM<-W+a};TLxm)^!D}+`A3LxFUTo*9E6=A%Rs7>rZ6s&H+n=At6G zzbKQ$6A>0q6t)+-Yr;@U8p}rADMq7BQxn+DlzP-hz+huA@Gf#HHVr19(LP1o^n*?r zX9Y-&)`Irz*qC|A$FBRM4vic&Ey8sYte`9PG15bWYgg!O*amgnSA(4Z8+Py6@_;7A zIv^LrPMs;ZbWY@2XxB-G0pu8@d`Gp*s8y9*2kq|2^+M9SNE|=bLwFAgPKCP5fVwcx zBsHg%^}hTPw+4<)YfF=vo125?-48z{2LhV^u3dL6?cKZg)JtD_*F!CBEvJ{4S0{`K zkdgrPffE0Gle$@hKm63xdLy?!;&88hFnK-BQR7&A=aNcu$&pyTHO++R#;jk|x6$u( z1fe&-R%uh{mzJKW<0y0nb0z1YJaJvWAHvp)Ha2=)Zyzwy*a?{zxw)w4wXl9D{h+fh z5A#T$2mgJ+Lr`GYR4f*IMn^|?&CJYff(-n%+;cC+ap}^?p817^0v>9L_Gq>))LCk& z%&lH^=8r~Ec;2W^XRT;^*x-8r+2M%LuN+Q9BLEvkkTH^|zys^qkm)m_j3|DX6|ki= zO+|4zi83gXk*qyQ!85?C_=E~IlA!~$Pa+R|RwT9QA|EHEfTVI-Q^S<9VR1q@Os-jy zXj}+4X!lELKLOeC1C<4S&e&OyOo=!hJs(^qz;;8yeQK-g2@hgt2)y_1ckLY?p;{l9 z$(pbf#W`c&NxMtWgB+VWA)gUN=USa`z-d1hB{C(M!S9%;wtU_>^;G6umIJ^A=dn^J zR2S#&K7*?vA@omNM-|oTO$uYy3rI_y$GpZ6q9C-T`eN9r_Bdd-GtSJ!hZBor-sFQ zjREPKTpY)ULIx%#CI*+5mYUaJmBzrBpPwH9b4okK@pV-BCw2OAy`<6^eO^dqS)@3$ zTAf?Nmdp*?Z!nuTZy{Ee0^XLL<98(V$S5k0p$3FZq@-pz!q7C4+ZW3aLbM??VK_S& zUj3V^u$cs-nrp1fBuc$_W{^tK!nP`}3qRDk&ub{9{n8!#kueWA1UgS5X`;`$Mg^!C zr%HE{UT2jZ!em5CiYxHFj)&3`TdBn)ph|cL_6w;YiOOUfq`jr0r}B(z1jKkO`nYgQ zU1gZ*g(mS<*>^sz!ib7lwHQls?VD?BOzRf*8#`D&K1*^?n%D@aW3Q%ENPW(;ZJdaXep)s+nvi%EWQp zYSVD8hl-4PMsNK`8|4lC1vgwT2R^l9T@-|quhBt$1LaQgGw^-9QR+jQ1C5T8AD zH3y);v_>@b^lhH%*vMJx-D%&UsTW%=-5TG#b?Q|%Ncl;1dWcpcVHh^8tgQ4+Pfu^1 zo11GBx%c&gVK4GAF)_JWYYkLxLh%mOX|nu%^xmixX?9o;$}N#11W?tufeHx|p7E0r zmf0l$Rh{u$dZ!foks%?l-RU&(M2-u5mFCI>6wdu4nxQ%fuR10PhCX&@l8c z<|?<2hyV?ph+!#rBK5F9n+P(xMJF#3LEX1(`@EBJl*kMQ9D_4}q9|<1EP6ajMqsC- z_y-p|vWy5x`q1{-xsgIIof8+0XAmifu%psvSuL5@#UMNHGxm$qN?gB#y(^WA)ZGwR zBd5XiTJZPPNs#P3F{WIqkNl+^LnUEm7t4b%0Pj+kk`aoDBqUF`s8EN4Aibs%| z$!n@f8CsOjOcfGtv=05ghOipd_^F|K`>C%tTIagdnK#356l-ZzBk4y+>r@>xX$9=j z2L1g=?}O*;kjBbaDwVF8nVBtfb93DnE?gLGu(8&U$;pYWoU-8jwWeRV*$_YYtf}M* zN~yXTxqk(5B}(B2MBLzsQzqhgK7%f=pNv{@QN9Ti`bOoLMi=6$h_O+*GcBH(nGMn&}f zgwwrv=83r_p_^qiQqE3h?p`6C(WpY}Fyubwbe*J-;J|60BTk>uvjNPcY8z###0i}@ zl4sY4Lu*Fx9OF&KG&CZiXoJ#$oC@P!Mi$%!!jHp^f#sdhVVQpn2C_cP&<{)l=w? zy;@xDxIA>Zxv9B17iFTLT8-f%{q|<;pW!TUUTtH1+?GyrjJkUFSPZYbeZ!b_txal2k`xSV}~6prji( z<1#woAfYAhpN=4tq7ABt;OKw=a>FSpswpC|T1l-4t(+QQkzwQ-4UWj!fzh#0w4zG9 zlIjt*my?>8MoX&ml>nF)d`8YU3Ig#LRk;&zEi-(1R;fj=L?bNa!dhWO#TAxTRi9&F znpLQ9616N2V`1!rCu&5c6*~aZ0%1V{zJqcN{V7VJAr+@;y;6-%*IrYP)GI#Y?gepf zN=?>hlKQGxbziBt*H*qH)+sho(ukzeE04Ca-MF~0YFe6`&G5*`E6$*p6%}4$BYd_;$t-iOB z;pB=}eqb0(uV-V^>8g4T#a}jUkkd6A>AH~gcQi$n{_&%Zr<1nQ@B2CKG;TqEbBt{J zMswCd!9J%Yq{n!*=*`<_yg=@xu)Mt7y}G*Ey|S``NOk^c9n=eOB#G%_Hj!}ibpoO} zaZ!x5Rmm!N$aEV6oor5fu++IGAbn;HhSm-6gvFTvmeim<5#U}5<}?i=fGbP5s}pne zDIi`b-l6(joD$=1rG!sNdQBTf*@|k>d!n?M-v3pkg^|`$Kpz+dJ3o?`7h?&-n?V|g zD7B_$HjjN+TU{j(n5nDWO_4GMq=CmZ5}w|RZLeF?_EpXo_5s_b>lCuMq84^)aU(OL zwD=KDh4C8O+)0KOC@KXy<4NhO-kC;EmQbT@X{pj)*=HQ-Ns+lkkHT(~p6^OAj@mGNJf%l&>r4m)@B-Ond9I94J`LEsg&2VaR zs@mMroCIOemBf_J(m9DdAYS@OX1Z6d;P4n$HNWdDExyC+RA7xC-{7u>;Yu_0dXY!H z&(~oADJSADUr)u>?sUp&a9W~r#r@gHq0~DT-KI@nN&Z%ctz?f~j{uF$&{>k1Sx!hN z9Z99reR`AXaRUbtvPQ04E_W_1E%hZy(jxds0|)WO!op&w+!(e}S?_zEIm4J}Zrdr% zYD-zY4m1Px(!VwhMQv}nAkJNX7#Ycn3z*8^;etb5Mk5{9(}Gh|G_w|!U1c#@84xM1 zgUt_uEGzE<=nWvJ4o9SuEjXSs_4>dJT!DIfBYL`Wr6Qu2jP&>hHo|N!>bv1J#bO+Z zyA?7cN%W``47bl1r@Hw$)a}>@h#VcKkrBn=Gts=G{Wpwf5Yx)F&82fD&y6;vL!mA| zI~+-n+`ZSJjamX{1T?R3ijLBIaMb80lFQjz7nWS-XIV1@6bVsLutclY0g0%ir1dCr z3B2AU>n51E?kc9~>f12j%;)A7%-M5iUuBH>IK5|{#(?1B>C>mjZoBQa2eFNBfBXK* z=)_puRA`E$FzPf(wFxpjY(P@8ckln##^1Vzu|WXBvzb~(l>LflOzWqp+>PbGU(a#W z8)~5ab=PdCj)cnfrl#sSj(W%9GpN$F9IBYAU^?GOIC@SO&;#uW)9HHseNrcwc3d2N z2ia=1+Pbo`(p@YT!NfwG-EbiO2$LLjjI#_IZxWzY!d`6#nLuvGEsOnJ9!(_zsX4*< zTPv>JVYg+T=GeP;Z*g#NaOBQAZ+q|ue&Dr#H@JE8cbAryFILLsi6D#?6O-6F5qBn? zke55TwXgh9pYW5Ue*870Q(s(=b1j}~y)&p^ELU&&bb6}ZOkY(=S+3qOwd#S=_4nt> z4okmZ4^*$a|Nil%j@z$LSJ{Si?TEiW^{^3nA2n`%2MBy%d<+ z`}&c>Q^7pyF`;Tg(~W*4J;ArSg!2Mu@*~FV6aVHxm%Tz#v(;!?q%(Grgx=@u^nMJFSQ+AO*%hgAPfl_Tt z%d=kc?}4UNi#AH&nYV`-D76-jAj2K~FssdE1jrWlo{Au<5gd6;Je=Jjo-a zJxVyja|M>ZU4d2>WMt^Pi|`_y0;#a4ej_&h3x_WgH4q?V=Fiu|rGoWYQj!B57s;8h z6DY-uk5tRj!(Quq6yMS&VifgA^eWBch+GjvhMsMuA4SnVg7GH~8OMxsy|}nM@Zf_F z9z^f6XG~TCP9#Z^v3x#XEEEch545$+9zXizOO{tw%FTtQN)VX#*i`d~#Jn`S3>QT> zyu|;jb~pjE+BMYTwyKTqS55Ph8##mY`{@f#OV7$VvG7=rg+f;a8BS zQ&~Lg5CEO!NO{JBf1)JnQYqI)Z%!Y#Vj|UQH7b|Ok@Qn<4DS-5oXRqbNPtj#MF>Ww z)J+fD(|RU0Or9JN861|PfpK;!4NmDbwCxU%>T%7D==ug+o5A~oq?Yu=kVZ;cOo-*V znG@Jfj9*YSxulO!7r`xZy>yc7i_;5qku60~VQ5xYR|tqF!zj@T6&+?XCW|()a{q#< zrGPIvT{WPRrt;TM$0qV4Bn1N2Q$EkzsJQ;`O47vs(QPV5mup<4f?v|lf$cd$;0C9P zR6SU>&w`Lz%f%R!VoKC;QX>P~?2A8BEXlIVBofr;RqvBb1nGaNs}V^SeeT$iL?jT& z1(8D95xfR8amArHI(5fniwp^mV;cheWqD;a%oYmITm<4{B1w`=#c^C}YHwd^Z|zum z^t<0(TU=Ny7Yc>GY%bGTP2y%$>zgEq$Ye=~Zr5>@SfifvsND(wYy5y|*y(hDt{h3E zqk^kBk*gWhD}BBZu5m4+9VE~C5j}BT1;yoJ zt0@YUh)=*JqwFk>;)oZ_`{C89;6qLa;WNcEB*mmB$X+k0;Z@IyTO$pY0PzS;lsI`r_><^}+{0+W|ga`_N)Y1vB z!eC1~mUNmc-Or>kYDYGcS@xM#ezBZJ*frNdPNm?v@?6JABw&*3J zRkf2A94DogsDfUiCEzGDJLhOdjWAV{>yxey(VO%@Ba76gJ@yd<28o$zGay`VVp)dn z&gSSDbrwj^p<-TS(v1M)L_xN|I`0GHI&8SLnUw2oBCTpQVv=KH2M_J7ij8!1mS87n za@Dy`NU6N~yo*zaWx_y?mTBJhnUzX(>qY;y1*5Mdfz>=?vK~?%5V4Iom z)ojWbvvldwr3-~ZVY#<=VEnt^ee|y5$Dh0ntxmJKTu(L=b(t_|HAw<-E>c;u*>bw} zwKU(W*Nk|KYZZ5KDnXM~5Qr+fWuJ&eCh|kVDx-7YO`KTbU20os-Qrk9k1L6|;F9c) zjka91H&=*r3W_wpw3bR}^_1448XqU&LhmV?&C;h;HA1WA;c$2#s3RkVcXYQ%Q!8;U zUh85mdd%32ghoZS2u!Y*)*W$Oh=_X1d7c=b7&v+IWb5}-T6^2JZL3L=47awnF7)^J zjBVXIICSXHW48~FjO;5Hi(B)Bd~Xy+?ItkINlbSP9Enb=d52R8EVZQ@G@WyFon5r` zgC=ck+qTo#wr!`e8{4*;_Uw{a%q^!}APC936_MKkI(9e0hXUBmAZ(o&8(z&47L`%rQzB7t|s|6)vY_T@fs~32L)e1;kuZUvT<<< z&aSPkz42d7ftd!TXjobv>v(uPUG()WPXM5@o`;h;v{nU0#Y>n0M^zvv9KNWI<6F{C z)FQ(#+X9bv-2M&yoSe?2GdZyxxIb>?V!ShkCGv~?&jOESg4M(qyfJPxIur;RrA)3b z7)@CVlGCa?O~!ysTWd}^ zf(QCuqOjpB_hS`oSoe8QV8?ml3Ns2S!VhPf^h9uP3pDE*U3FacC?_?8SNm*=n_E=n z^_1*o0i`BVv~R;wAPC+2w3Ht<;2v2}vdL6$gpI9r1hNo2c+)H)VwfQwaR?w@WsYAq zX4cMMEYeC6Q~au`okDTKu7t7(5TihHU2b4lj;GqOBCFtu2jA=^auTO78}e`rY!ium z?cVb4CJpmh3_r_CP}0FJWXixc#Yod4L{beDX_$MUZ)e+G)6wzfd**qYX=^h&07L29b47}O{WY@Qq-1On=&O5rdWJ4H0LJX!KR$nftm*$ODyNWa zE-o8I%ojimErBs|a|ZDwm2?u+EF){uMO*iv27kDUsf+zYeb$HPF#IRmDffI)USru) zPn_$k%v1dHYaaO{FD0g5@Oof&L=Gbsc__4XWklB2j_|xjwkGe9cVa{jk+?E`m@!B8 zR1GF!-EWDMAf+YCKcCsCITuPSsYTkrlxbND=tR^-8?b7^d|MiSx55IK@jw zA;cZj@_$A%Wc8s<1?h2u@Ia{PFgZuG-c;11F*NiO)1lx$jBqcI+x%f?&g}1twjc6{ z7?9QMBq?-9afV1~NULbh>&g*JM8Z<$%`fV!wo+n0QP#ZBP4ZqQ9w2rU{O{a`ZcyU( zFUe}68g}ma8J#?6=%*SITnb!9!)8q=On7c!nz=9^v3Hq*g6k1>A2gNQGQ}Zj^TgUB z3x11j#x`itTS!VuI(Tbz4v^pmnusQm(*d{uw(lN)yBuHdPrFCr^V?20+g;u)jx1U= zCW`aqI2Q;*jb*XFObvhGS!`}2ha-qB9`re{d6}a6(G6z8zvEGK<2tXt5?#LtIriZ3 z$}h-&5Y7Bb+$=%(OKXox-|I&a5(aL;F%-|>teKn`66TjHJO2>10@GK$l7Ekdh2-!9 z+);(j08hxu+By@OQKA79tIWo`zE0_y_9L~8VR?vMe|qRUF*ZurK*zOCc}bS@?0aVf zEXC$q&I$=w8$|hfn1(CaX#cEPE=E8*DEJ%(y$a!*#NnBZMZ>M7Be^3ji@G13YJ@GZ zRD-^fd#cUMUJV%)Xi-@nfd;M0&aM8!wd&vk}acm$vjiwkc}qJ`LCH zx0aRDU;DUPm3VKS8Cu%$?%#CpzNafiA989M68Vty!BRoXv=0P2Vv}+VD7JD5geJ}q z;zUvEkv%w)sNZF^#z+|STF7+RSx~W~8Vptj_;|cY*dVJpw9)Y+5gk1hkxaotvA=ysK(vp^{>Y9h_ zSyu_=5(+did135>U}B-|L~0nNEfZU5e8DDnIzk_FQ{ln;HiK~I<}1CKvSar7{1>EP zUc_y$6PCRrwPWR#z_L4|uu_H{@<(;#EIUfe;?r}2D+!eF-rgwRzQ7P;EjyqK=HTFv zA5&=6UJ%^u2PCP>9nNVhS`0X1(=Hj)fmGjr%E%`q-h*at3XISn^U?|Tf69AWMB`9* z+^Z*$7QtRtHF>MQ$1GsuJ|KVp3XK#d;fRDjy=x6xjCgzqBa0+G`*z~|k#j4oT)Rx- ze4{4j%fUbrQ}(&xC^rj9!Nom!-<;Jb@I>WK!5lDslZX=chUXfNn2rhF9XiK|C5 zb&E7jFQ}Qd8rTSKCNv#EgIQ_@q}Ck$sXsA(@KQ#LO5Nlcse5<5^3@-}of{?Y4!>Yh z7>lXUS}Jao23tyASmG}((_{)CDwH7vTUo97&M73fF^yW&rDC~Q zohG{!VmA-f7OAJM=4?Le8lQ&b2m8j?x+-ZW;@Skqn$i(emRrN+TXU9+=l}1+7iC$U zCwZ*O&DB+|rKw5I-OY^yw0Rx_j6duBu(mH(P@IvF4~3YrVoT~h&g8OHd*M#*X_*ez zlB&w83=1Lv!~celU@_4}&*41IJcNmggAVK>!>BFl^_?>}nMNsD9WlzK3MRn~}lux3d2msgDf#F0KoqmpyAwluvqg+X#j&x9^6= zWx^iGT~JFj}_nb13}yD2>F+A)Bm<7@!@690|g#UmggIduPgxkVT# zD%zkLDTT&L$K zoD;L-YkXX4?ek-wxJoWcMvX42a^%LnU4>LHOx366dAYtZhs?xqDu8ooPKrupDZS8A z{H&T@RF*;~ggQZ z5BwwEERnw+y95+KP+^$RM%rj;F}p!?psa%)CVVN{=H?XgvD%Mw3 z5kBErzQZ!{L-yZIWvdS{rTb>{jgR*}e(U4@hGdYJ1}DMCZOXgcvktf)&Fa_FCWOKm zAsEMe{K}GT2Bl=8JM?6Ruc=%FKbCR~U=dKP8S3|&x;mG0U-%9&{ z$9MZYF~0w1`kX&?u5V(nHWw9dbho}2{ne!W9xSZ$NV{nk)d@BZKR0g9ZR5@WwK4YQ z*xVw)u^u}cR=?2f;-=R0m@H27o@vQ(!$$gTE>4_frJ2O4~2=K%n=;;~U7?~J7s%vUoF{6u1 zoZB-PQfZazwI0^iiBhjFGu*YZhUIqw`vH(NH5mG<^#4wF(|U-ozd-B}IR}w|V7Xtf>(jjF)>7ky zpU~zcDU)d|STjQbGLr0{KYy@%yuC5;o=1j@N-Y;C{C?f^Iah;YO%zPzMiaCDDOyea z{)DOx$2$rUl9Q(#ki8kX*|`Weh-;ZoPr~Ej#_2p@<$(ML^W2JsAPr8jF@^VVvwaJV zeyOI>#0Zi31Y|7^J6JO3vU%q2xH_wNcfSi6O={10Kp-C)yN7oL1!YwJ-T!YwC^2zok#+-(Y5YP}{T> z`%rY{=hQXTUYDaiis9JV90lMrIHtouW^BVks!R_n|DUFomgTON7U;<9mczrtN8tBJ zrCd!*pW#SDGkp%K*4)pp2bj(&@o{!;Ff}$Vuyu25Ucz3;nz9J2WT%o2a@As#PKuF= zM>8PZDBXUzPCn1feCuU7lf=()=)ycMkTA&o#>h;F$Q^fhXx`Y+@S6=ck~N{Fa51&v zh8k;viv$B68V7ba((6#1-C9!l_;uCvQPrmGWz>w-9PFsNx*81<5|YZ>$0yv!$44{& zcIuiGyVK*6JH~I{kBd*;VkxKlEHiOVBwEY5zy@wkjYb33hGvSqnFMoF-M4LUPLe0} z(CU`Ms1BP5$S~lA8;*B^cCE8W&;j@D3FqM;Q!_b&$A8`jd|cdh-tXTxh(??Y z8Pm^U2I?SlZ}+&Tr6I}B#W+nI?eDjm-}RZ+|GQbGIMo#VHQ6~5JpezhuWOS^jBwus zJJoJ%NB8;GOTZN9wL_F6DUjZpDBtbdJj0tDHnDo03ew40OVZeR5lmU)#+(w z61%yn9rKTl(>{;>K^<+~qR)MDS;8-r`E*ME>|{|;b_IiSd@18#KTn&}7ULT1+PLC6 zf8^jMitzgQMz)e$1Eeyv1p484Fm36nXWzwCgrjrQ-OiIMaMKzNy!ELB8$Hmk*xb;j z@YGLiwHeZnWfbAEvl;;;F`p?Bh#s5SD4FjJwAXT{f}6=;D>NdOUB8R>b4=CbLViX{ z1zuMfR4jx_$ghfVa9XXP!$ixjX=w-mUU)}XY5bxkj)lY3Yq~~Qe^F~KC?p)&y%fxz z@RTgfD3!j#dp#1VzRY3*p(%1D%CbGUss+>ILuQtBMtr&pcwV729K42kI?f@??2@CB z`MdEzJra>fuJOvs;DR!9Z(cz`!EH_sjwRoly`gGAgV=TfINl!sl<&Js`=*dU{uM&d zFNU~%%Ab-#9)<43fd}XEhD(t7zAZ^m6+jm2hjeN6eX9u}FzjgI?!H__&$MCl(;43t z+U6XVxv#BIO@vZ*I+)1$IHl$Qejzb2y(Q@G*P=Rh7#whf$o^x40U%G09}{T|vMX-$ z1|g>Q_LnM>mLs>TCt9*3`Nuha@MIYr(ur{IKLgPJ9pirQ**QQTy}pi_BQl#EoK+nZ zdBS6B#pj;3*ECLOs*6v78QgIZEh!sTHeS_1x)(29u9OONI@k{$=deacxoZs5eH0Hg zsL4;D^|n30ZxPkek6r4j%|zW1YGCpHm%v@&b)|+rUaJ$8R3gND596)x8i5bX3r>oN2-GnD#&6H0 zpOmRrm^8{u<_uz>MXG3pq>{AR0BOB>P8JtVq$d#<)w}h(tw6ofU~OUCi^)v3{Z5ao z9?u1Nu3R8BfJ%|?^`xjZADDI80Ze8Hp&|u>$z!g;rx;PRu(H@GiomA#)KWNQRG<8j%B3`Z&FVw%B#yak^$_CQ}@BdAM8F zp<>Sn*3Al9g=L!qd!T567J1F6)8oan^%bD@jj%v7anz30I@m<178Xtids}tC43V65 z&0x}mpbEM>v^xYa?8@5}FjRRPO-X{g= zdObg1gs{VO0Ui>QO=rcD4LDScz^H-4^Yo$2aEn0)ZMAXn)r)fYC$yk`?pIPIP!%Q? z*3|QJ8vsgkWfz$;udGk}3d@CJ)uH_!-EhEXmAhCLeiQGF2-(CsBer2tW zwWmpkAU<}$xnMY>z#IMt3|(RkH=@SpVH1{hfyx}@%%oesI<0stKAurIrzS6xF}5RY z;i&u$8=WlOzSNa&C!vG0xad;wDc{_3b=OyXBpT@O7@`D$Omtk{atg(#@n{LVZG$^j;hugOWn7gaPn1F!H9+ECnVIk9@}6PQeI8!k#A0Ce#{~$=m2<*$Go(x zzrdGY)-@A_okKWh=8Q>t>1Y-xF|X;R8C2etwJM(O_g@oFju+bIrt?jYia(nB_WH{Wms?p9|JavL^!7>=+s>^9$hF?uui+OF$8@-^( z_jdg7lBEv&s>54am$-wEPoSA27OE{NqiIfC1}dSpA5X%f4KECC9dFW%UXgO+jE3r1 zuJ!weDzg|FhV`IYJIoGK*quln5dDR%%MimlfSiMHa@=HpYU%AFBBlNiKSdHBxgjW- z%#2LotT$zEP6rYEBG#5-A}CD-y!Oxgw*_MqQA&|A(uN9iD@~E*nR)8CepkgzEf(T< zg^5WT^HrW4$YAql3RsNe$`Mn7h%)%#-JvC#*h`nBB3q(Eix;$@$%GK64fylMoF|%)Yk^9`y5g}t}sNoY*Y^^m1?C8m*Ma!)LpagzWcsSD?T~ zQU=Y^C30w*Hd>_dV*64yC*sQHwfPo)VEhbkrDAh6#!H+VaoK&qA_-@V;Uwc=65teB z`ctTAUXLG%T?mh{t!)y(>EMjv$H(0Hl-*`c(ep>LS3mek{5P%C?H4;HcQd|%loQ5- z80fhG3?vMyiZ`*dL6+A2L({Z9=}pN+OTrA>F`#Bn`3l{VW5D=#3{J`4;3lJRK9RZy7_d%7$H9HUNF#F*Q2pcK#YV$+2`KoGfZjoGeOfbytfUjrV z*T@HV_zYIl8mby>3v5TX*XC@!%!*vug5T?r5JUeaj&U7ULsmEuu02eXb#H4zOb?AI zA0$p3Mk%8+95}b%0Ej4lr=7mQH;;=|CwJhm#4awm#reKH68!0P*gj3%P3%MmRS(vW z!G6=DY1}FBTil+EfNRdIvQ^MeQmI zK@d-oxuMNjr(&XBKQY|Wp85}0-YT`l-hz2M0>eI5kJPu zV=670mFnC{anw;@4V7e(e9LKq_EgvWhxAfP$&8rM@RYZ~;jyowK(s}j5_O0pq2D5S z9X>ISiU!&~nuWRBkczi#%;IG`gkq-j2SCN!Fkf% zDj?qOb8UI<`vSQ{JUu>7e{q~9W1R>fk1vXdJ|@BksJo(t_ae@)%RIO+o}BoDAG?hH zkVD(jJcxy56f?4y_Gejtn#p4cbe5fjGp zDuqUAe`5ug_+`_h0zNZuSYukKVm0;>kXuqkxsM+;pIJVaCPoa(xfmN!B@gutnFZlP z7Sd7>I+E`*6UJt#@u^ZgL_QLC&vI0Qpz>XFQ|!$js%&)i=)Rd2Vec4n=8l0N^s#8} zbWp!w<(ahC{AC2aQsE(jJ|Xd=LE|?5{{Jp&^g9{zcwC@ksv$*1MLS1EMp`kV#g+Uv z2AJ)l3cr!YE5XHmaipp-@4F$gk#SveL|4}q{L(%yjGU589tp)9pOu|`_wrK!OB{u# z#H1d(s=68~g14^$7|G;ZU|UGR3cH9nviRVmDJ}VeKI0f0PGtXFTRY?hB15v5g*zq* zc(J2Q#@PS_r$hi2@>03c>L9o|KR;jg;)z>S>#)GZ%gg(Ds8g>+wmt1-!x316^bHSB zD%i(N)`oAe8D|`{`xaV{YM}x1e1U^)E>}LVqCGTmey(&9PJHf??ab# z$`0uck)Wej_CT(4_lw6L^$k8?#Yvec4dQSAWW{=z0{raV4L1ROY!G+8VmVGV8%n?$ zOP1%O{Q0rMIb{uI`%F0c@tJRJs3#&HXdSy ze{yrt1V8r$d)6I^HL+QJB)i~@q-bc2oGt5YGi8tEbIPscJ1r2${dfYsg^n(XqyN7lsp zg@~~!dv=^~6@O7zHRR>xMS;5A?*ibMJPmjO-@$Q_LKdccLryFDt^OZ$Pl$1XUVCQ# z0$+0}r;;m$h*Yh4$cEVUSRY%KB`uTf`r35!5y;GNmZJ*SQ6Us6OGNCAIcl%6L`h^w zaBF2kWe=M!4GR~I+^tQ-GV>;gxg88ujaKs*eiZiwte7JdT{`?8PMepQAKC2X`dCCH z${J8iN`NEDWKL+sMq26z`zFaN9n+WuOB%VE;dJzxWeZ-ghZ`kGar?9GK)~VxEW<_P zDJmyB%rpGH!vYPk^2zbt;!XV9|y>(O#CYcjE05s6l?EAK#|z* zsIDw5zm`lH_?h8EVrHsSU5cQr@%>7r1N00$_rJX23iUT3hQ56}c&0}}Zv;3vINcA+ zx{81l_Y@Nob1$!;@B^2K=qf)e>+CYAhvR)Xablcz7p|RiKSOoQa>m8?JoB{uWP|? zIn!xG!cr5ET;LW&u!>8?a;s|UbFldI%r-d1k%J% z@K^11SD338K9o?GGEF2ax;v_i3YczO_TABAh3NB zOn(dmPlJh8z<3Rjo-K7Y&=T2(p>Mdeu*OYfC528yYZ62J(uS)@zr%i_yV*C<0_R90 zV-kY`moOvhZ@7(8)wwHFBS@;97&LeaWT{01U5Zd3zqkb$V`&Ku4dujsUs_V3c$SXLIF)W6zC>k9CQNfrV9j3H9tgB<+Xj>j1cvjT3K0X zmaCmjSu|e$;r}Bqjek5&KL@cx*eTY#up08uW4#N7~whK!; zIl!EAadjmKoVcy84qZ3HU*F!|W`OJ-$DTkhK9~I?T_nGoXv5dr@6xi;ueQiV;fwC= zB3g7vO}j`_!J*wDWna7{be>Dm4XdX$;6=nCq&0#;Qxo%OqVNeSt|%Nzw82GKzwuH? zWl&-!{iKpur&o+Ied8OkqMGXWgv7ly(?IYG3ns!G$@ zwJzF+-#kYCb8n(_w>%uGX`JnoCL(H}M6`XD8l&X0@e)i~Bl@pZ9BzO4ej>1(ePv3q z{)poh4(Gp7Uy=&MN13ML!7OI9ebaL~Qb|;-VwK*mPj;TeIL~h%)~On&v*QEEJKU_! z*@Z(#5r|dkLvkH?fB%}9m|UR7RqqPr?ImSx5X6(sPZ>6JqB#(?amHy50YF+5(wFa&-q|f47kLc0206p5XP|SeYRMRM@325 zqF%W)El0VKHD-Y_hb}~=ac$rc+0XSPR6-z=1x`7le6{-Rdc}`0!A$ZVJ&Z&}gAGu1 z2L5|v_4xnutGHVQZf4iO3l$S2)yR@paC6&v^=V^hcr|`KYUN^S8NSp+8cg`5M2is* z)Y?QqtE|xeF3DcHxO`iM&Zc1E6@V+NAnF~fnqpjU2-i^gVJter=J2i}IXqs=cs!GA zDF0UX<(tlK1^&`?V2_&iZ!hQ6wR8J z3%banSse`toT@MZrKB7F;u5FN!llW_q~88$81-P3rL;LeTeI36_DIy8c&%@B0@h}; zNzPXkDF=tAV%;C@htw?_j>I!vqoz~HI4K7@xu_tGtgI}hRqk$}1Z)KQfBfFJ2V;1O z`2yWOHa0en_V(2q*b9Kp1BYvaV|wdMP(G^M=d)gh6t`08p8nB@DB2@C$;{2+iW<@= zx(FWi11K@IfI2@D2(;yk%Lj}t|HUmd0v0b@>I*+4i2^0;j`Qj7y`FzJskX)0lb}suNXm}x3P;0*unQqt4#zaiVirGDaZJl z@C!y^^Z{w{Tn`GTxF!@^H?8Ju-j=-F01D1IllmbBk|xeL1C2sQo1=cm8@-RKlU!Hmc#GlUmHxXzDTt!NM0Iwr^ z;6MMz_whoz>9yO~+Pb_}rQ9`8!7j#HI3A70F-0H^Jy8p{{t&e@(Q~6n67Z67BXTz| z!z;f_o>r8Ulw<0Z!2fc z>-2aelqvJ;A?6?`?;6@%9HY%KB*Z`!rA17QdUWW$0*9dv`8bnkWf8Y_P!P5Ae2D~D zABD-hHx=i&2vOR&LuzR&uKGa=Icmb5OrAEJxaLU%W)l`X#6*E2B0=~Lw_GjLLh`_e z6ewx~aye3&PW?|n{;II_VaG-G@*p+MFl(vZ0<#n8D%X9+ZQR^=zt6pm`%wd5u4-z` zP1)qx^GWkX@})(Dt%|JLtm&L|f1l8{sdqdl{^*mxybMgn7!U`*2yF0=MF23x>Ula( z0e0CL79Q>)2TZOS=<8orYgF1x*#|;FA7SN0&PMUrUic*&qYmVgS8*s~@UoCni{S&2 z2<|nVojzTytxxl547$HSJ~rpe)yF{3W#sX4BivOTlG-1082EVgr`z)B`NnkQ&Bxov z-T=?-%dhM-8TdUF+;CiU+Oci$^FA_9UOJS3gKn6SU-w83(Xp9Gg?F9n!M~-=te~0- zadR*W&?7*$?|bYFuM1~h7466p$VW_motj+Sl2;)Zo<0eIrfX#d;p zxWsQ&nO8mjmI{Z9VCr8(R2UuWpn^TETjs!Wv)p}+6gFE(rJaEC3L6FABo*$*mll?$ zRrtEH=y)Isoqy6rswfhLqOL)R>4na3Q6uIdU-%ndQof0io1mPnASGFXEW`z35^Hnl zyz>W(BCiE4!oepoj&!(m(}+bs53-C?W*>ljqU7iQgLLA=fj@c&D$qzG9|Cgj81wkN zP#-W)aJKo`*c#0}Jw1;Bln(;H^~pXyI(nT|t5hj(`ZeXytOJ#c9ovAMs}v>sgFKd9 zMj0LB(6YL{-K)O2*{ubrxC((?ZFYAwbqoy+&Ddw{>gG0eF)k;Y29?581VK7Hu@d1<&F0+($w@c zp=9e2P!`Fb;0dy^EpP$7EjFOBQV)zND$`?rmnlYFH3GYb!2&OWRRF|ECJrvHnIM?u zt*y8S(+XgJ7gkonr9LMEc}R^wI~eZck|248 zzCa+iBYSBH!!|{$J0BtVQEnxNcTM87U;bVZLa*2|hJkqZsth`*q=Xw`U(GjEa(t3$ zqgR*ruQU<3eDZT>Y*g*@DN43V@^8N4VjG4CP2AI6&%FK?&w%IzY`JAz1kLTixdczrSQBX7fEmxN zV!UQ=I#6fq#|L9I(%Zi4Ac&*pl|^wtW+7LGduJWZU>HWyWS!Af-nJO!4N)|0wt~Kn1s!9gPuO*i=QE8TzH4By^* zd#?t$dR{IeUqlSpQ?+`;Hhv|YF><7v&@!I$bU$zjU2^WJ_mv&*mHKqJ7?()Za6Ai$L$YMyJSOe0z z=*?7Qq%uUi=(5G-VTc60FC|k@14`ZN;r*e9! ztg1HJj`W+DnxM!kC}yzkG?~)q`ZhOZ6NoUxF4S@#RRUwkQ_!5ID<7?na(3O&U7jxY` zZlQf`Psy{)7usFdiDw2H*~-^Sgi6=K-CRQ6CzV;LN!~&Q7qkA*WQAQ3pNJi<2q+-W z^r$2o5g!K^m-k{j{TvPwcOUAz8p3n?R{U_=r_%&OYfSIo=GvFarRKs3{f#D6Jkh_| z#$yGj4AdOU=erC;o_csG^;$t3YNWA+%`gJyi;9Piz6F&y1ua!Ah=G~v(?WN=c4DLf z9TLJiq>9aisN&@dv&Q|F7?9{|C@{))Uxj&Hhq%SUw){#dLyP@8D}Mg{Hx(yK*G~}F z*9KnyYmi5?%(e)WdriOtfZI=A%l$&d3H4>-pYTw~Pgc@+FL9igr&W}4;K&#n75eXH{D$wGRmtCU!+=nafhKpLL zV-bI5ZM@YF(~F5s2T3`+wr6IkjCk@g`Nbh`0GF^yAk!NJRKK!Y56X9fFTF3WU-o!)n=G+u^u!no-k!lwdOI26>pXVs z4IfT6r#2q-9q@hSQqqt$R=1BI)V(iYgY}0X-T+i_9;OT8HTYW9b8Iugkn-Yl z3qERn|H9Oh3-TB@@_=_wt$mti6k48{kzX+#9#H{p(53ja8 zns=C#dfdY1ed=2fYFkljMzKUeI!n0PLKPwpY-$)^Nil8=S9N0rP7}Skzbd+XMdC8D z49O6?I-NW7Ix0veL*;zdNKB|EdcnP-za)=?g>W%Og z&iy@6Qxm!Z9g4PRk4s4f#(h|ey#a!;KQZb|OM9Q`%39ahEgR7pNA~fCTuEdi|Va5|9@2Hf8zi55%C;+HUyuEfFf$~NXzmV7r{uP zMy7@S<>kriRtTDLtV((;~RBhqq8 zr?Q_LZl#tPPprBu0P*btUAwmyGcZZ_Yxi1qNfE6!Yg390f%Xxsx=*Z}jkDWpbABDz@4P zvi&e4%mviC{1pn6q-R4n30(blZ{*%qn0=xlm9dLItxtgfwdOGV>`(OnJs^-V^8Uv4 zxq}20Miv?tXVYN)$aNt+x918?@v4|PLEx(6SAkQ!O78-a@OIZ@eNh<&Xj&<_;QiWl zel{v$u|-&+J80}1>9~k1Z>07I&Ckk-(pW}=;l(f`&M9mjZU&; z*c#F|y+*=0JFtLO3=8hQ7x&h~qsP03rDiFh=ALiM&O%AXTS;;z|L)~@l*)BQ%4&9zTQ<#fiirZ5+Hb#X95=Gg zA?cf3T<#T4jWd#1hncnYnB5;%&zD$-pZld;9Z3K8jP94)57n(bmkfXio~J>;r@2o8 z)^bK>4W45oa7w>5eP(W=h$uX-#W!$t$ZigrjtH==HBMdjNg!%GWw19G>Z`8U#{>Q2gTaC;aY0w5 z!x?BYiDgC4XdSdSpH$wkwP(i6YF3%+dR?l0$rnbZw{s=p#FsK8$+|2>lgfZFMQaOvQ4ew;AuEQeq1u|sQOvimJHJ-{lGli5~N+f_vm z<4^<6B-v>hbBu3d#G!(ds>9BtA(I~NQaS!{bb7s>ULd$%a#7e5X6o#PUl#_+5^8|f z4J~V;HIvpj)Y!+b1AZ%v?wrG2W@$OZEPVGqEz}uNp({PxrQj^Ue9+GPLn<7MhB(Ygk z8J6Ce&|jFU1!^Rvh%AXl!vv<{ZE@>;woXoCU3(Zz|84^=WG9QzEH!n=ju!e+NW5zxc;)HH!X&&K%cJUMc8}s zxAWh%&6A<1T>XFFKYW06<^CN1c>8*d)Y-}Vy*hAF#wO`4?7*jI$A*j=V{llM z3<)0EyiyE_l8U69I2PFzCodNgbR6YA#JyA2=KqDQLCcPLFUspQQ^A@l>yQ;$4h5c< zMHNp+S{Q2B48<*iMbWjrN^Lrt#(dvam|!DI<4HBpeF#4z7y9Bi1{Lq|9+%Dh=rF?w z{~t7n-g@jW(6Rjfxcb*Tw4#eD_-tV!{5qrB3qB#!L>*|fC?dsAp*P}Ff?&TZUAt6? zTU<|IZ~6zFYz#eg+WDX2k8ig z?r0(h?**jZ<2%FWy-t7zDd*y%Dh~^3@8E_RkJGb9P>d>u)86t+g$8AH;sI8#l_ZzL z&b-5fsAeGF^#pC4rno-jkC-#|DkXd_JO3>n9?fTehmJ}WV;FAm(jkwEi9Nl$C;I7* z14~_m88X2dFB)qdeNe_j2>wzg?P{$u?02#?N*p&gzKYA;vH=WgEV#Csk;GA!MA7?} zB8W7-qP-4r+M(8#PqA;16-m(|vl$es&vp%aEOF7ea>Cl$ju~R1q`q^~1-cuqlqvxy z5@p9}_$_5{AqKCBC#w;wCJXcHHU=-_nxBu&n?C>d$UcvojwikUULCgHxcu+NeB7I_ z64a9Rz6FjQJ6o8W;~?B>3DxP9u!nX)S6324(lzPGyWr%1o)rh&H)9^O_ZnxQqJ{td zf~uj69TauGDrOg>U%7(2oS+e;nw`D=3T41q1%8XtfZPLds5Rv9E!xRjuVqiiI~lNE zxnajOA4-zy48;C~b;2HU21YhmI%|2~Vi{rm!i z5ULw?ruo$V&mlGd+t1_r?92DPyz2FyxxY`bwzf_+X^bjQktu1XaY(}is?=F{9c+1y zCXJbhbK8&0nVn{$PKRsT`__Z+oNnZOZGI!A3pVQQewuKI%@)Gx%^2Hzqv*Cu8mI>8 zGSf;6PhTd+EL@VtA$Dd)s^r`3m{5%+Nj?UgspX`0*i*J;^?NFz(j}a*t3fMGxKR`Y z6u1V$+Rm#?)xmSn%7Y?Bqr}WGI$G%kSS5)u@ppb# z!^QTth)|#8eFtus;s)9e4w9kuLT!Ehv~R&T$kfly#)XUgN@v5D-|N0;rcURAN2V!> zJ~-c=gk2LW)GEJDo-dh1zcww4kW1+eQlc`bpj)wEy`(*gt~6yCnw6ckuaga8ey5G> zJM*7gyN!Y>PC!MW(sD#qH~&2wBd?fE4DrNJvaz4?`5hswHkDqF^SYF%?{RS^|5m{dnl#=`SeTzZSOJ zHa@Y12H8H1Z0G&kXDT|U>N6z8E)tAg{u>@@hwB0Pm3orc*Oj_wmA89;?`k_5 zHw%HWiRLF2C@iOE+T>bU8u5)h!D;cSKwVJr66w+V77SdlDy+4An&Z;zG|0%{hw{d$_XTAh17%!C{;HjmtFQbxH5n`kjrsb z0@+p86L{>0`Tz1!IzyH;pbFatw z;JomBKcUp}D||uv9kE}J+Q&LiQ?_>tTH`A#jam6$it=|$rSZkMBzR?(qWu{eN4dYN zXIB$DJ!*D*K*b&PSZS=&+mZ8ZKdzZzcF%pykP${rePU>KT}r6zXcv)@b@u9#*;N?s z+$M8)+XV!0pDVnYrvLv-RWLm}dj$o^9{RILtGp97Ohk;8Zp4pz5fs=a;kA5Gtio{g zDW5lXWMSLMxfA`f$B>8p_7g2VN{inIygk3H4lUj<-zChd20R?^SQsiyTC2RP%uFP; z2`5uw`NB)2?4{de)WP%QMtc%75-;IkHSV%IYunFb{jtmJ&{nkf`~Oc^Mq*}nXRE4W#OD6~Ybj`^A<^#< z@^zW%h;DKsF-4Q73zH)A!!KtIvWqUs!fHo(??p65RaqanOjq*+nARyv?q;=TZ$uYT za|1|4_O>Y^&JAXkH@7!mKQ!j2MKfeX;}yO)rOaRj!3Ks=BpoS~&)X!d+HB#ps;EdE zsSuJ^mWl{Ic)e{j;fEIE*9tqii4pf6xWT)%Or`Py{I#<37N0YE|E;%sENF&ZULW*- zz{+{Z-@gd~LfN^w<3L!~Y8wy|e4)SosO1HyvYtn~pGSWkd$j^g4OS0VR~kTE60}|{ z8AmxICs2$yRmUlxPjj=RI$T;@?wZX+#!k!dO(q_Jt8X}2&Xh+R682xMMpAslEuT(nayKhsR1NZG zkxYku)qhNvY)kyf(RizFb1JDviQmwhu`W8NG}+9yarg2lytjD+UiaU&kH=;S|8FW{ ziU-o1Zvq}hjr|t@{vinve(_o?DM>K?ywb@~_$`rFP>UL?hMKTpejb0Qg%#l7TqtHK z?JWZ+%(93J5KCjMP#5qo=B&m4xP|;}zNM?Fytuf(E8*rpzaGX7DIgZ@J)D~C2K)js z*?Y%4caCgzb-Ij+vlsh^22W-AP2mj|V#J5o4}PcRb$E9b5pgAC^S?>umb@OG_5-w7 z-FD0KuU{I?zGjeL&3bua7=HIH%$gA7opb(v_A~nHcD3fMROOHMoRMW)yuKzn1IFO= z#wGKZV__*HQTW|$xKdtyJ$<@>zXY$xi~!Gak8{sDHXPnMcEA&VKoU#%Iy!}3_4OEF z!*p%|(wq(!!*(fkQiTqhkdiPH?pT`n&%t8|HheG}?su+V3 z5;`Ok&A^)}EinL?n!SVX&AtCK#LU8+)wZbX{ln{OFO9eRVcfX=xVGcPhIW>oYZ$|^;2(SVP!?>3DBu1P0MBb?Y!MOf&JD!Fhyk4SuJ+D=O^pe6;S5S z9~<7h8LGT9!&N`sQezp)kWo!gQ`M%Wy^G!gkDHQs8t1-G|K;_|wj^`I{O`7{?{BT5 zCvGwpAbG0poNxA!_fxq#Q@PB%d1^x6k* zRC6!*-VIkyUs*-j$w&9_qCEOrqJDl}9$f@Xf4a)yeG@60U2bmfH6WF-EC}Eh5wT=3 z>V&R6&bO$zdwB4Y341sGF5~a?hJEf4`>#j7H|suAR>1qCG9v~31$Bux689;{H>Zd9 zx=Vci&Nn>cEo+M;y5s(-q(4EuKEV;+%*+glIp7;pj-0l3hH!+4BzpIz&W3rT2-3d% zWP<>1oXN9-C;FQ}X|7KDy;{bV_2^h1Y7|mzBtnk>8%{c#nv+!J@rL$e`Fr>);V@A8 z(}YXHlM?>DZdF!pE+;edc*gqee89yKFxjmVjB|1k{|}k8j%W4VM0?WG(t6#-RVDR* z`tt`$fv%?E!Z{8x&17o;h_37ztj1g6qB9=tx|VP6_k!WyhfL#9g?(bwi40n#JEm_- zMYYU0JtZqRD?-gh-vL_1(1u~FW3LSBSHk1Egm1ANKeU+oiNo+1N6X=#IA6U5H2noW zVAvc#bz$F-Sr9i|6cbSts0c#Hj!rh%9H03p(2e#FUV!qGg1g?~QRhbJ>EP;`8q4%L z@AuP#o}PXab-$JIk#)Cx6FfaFCFYI!8 zT&%+F52I*DeeDVhJ|g{xQ+5MfyiJ*li$qHU4sW*(uT#prtJj~d(Boyu{$YI@q{dH6 z3!lH_<-HEq1-u-;S=!h{nk@nPu zTv+`*oKw_0AIXneaG}b6l_x;@uf%Hi&=rf!#b*AD>Nj&^MaXtnnW>I}| zZ7-m^vvzQxrw>{O7{fbI0NDvoEpEG-5FDSw^R8^nJUja=P!3Q!&~#iH9U?ISz!IV( zk4dt?ctORux_-@np%L6AdCgAwf+-txlB%supxma;rL0^-rOoRdeizVW?v- zA1EMwbZ_kPGFiNQB>(NX^G%$$)n{}@*oi7>H!FkO62B7@dHp(XDRCv7(KObpK&7FKLS_?113 zhy#5a7%ZYJLbzhpE!=L;LN-Ler+^!t#a!zHmysKxz>G>S?=5j|Nz9|C{;{sQf9Pg< zRUF&1{XHi7AgbjwATD@sA9nS6q}`o8!CC~$@saY16iV#tyTkU{STQ4E^%_<@Aco7HMX1_`Xo98#Sjj5y&*9O;cfK{U*=FnOG1Qd8 zbpGzYq}dp*>`9Wa);7OaYizA=HCcN(3%HIDeeQR73_1T5vIf?$iydek2qKP|^xNa? zem+!vJ4fz%7_WQ#0uc3h0r_|`b_lH1e$X7!@|V7-K-0Zw1!&4Bd;%xA8+*HaI0 z$*MBZn_gfCewAFvdi&>Jl5D=jbqTv0gn=(Yw|~scuZ{287u4{Ow!6HpETicfMNzs! zb`$d?5P}b|_BVHiQ+Dv`MGSEHJgd%w${}5K$7C|TY~>JD`vnmZvK55Fp1gs_SYmK`1_8OPnej35(O$j%BdJ$&av}WfoMaFlBK&ce7^`VMN`vy;6mMOIMrOn>+<@i!MgtHiNd8|1-ZHr#O zJKWQ&e%e3Mlc5g#O$dmP|4vC_{n&YZI)D4+;CHO=Aj?9;xonqS)!vlXi>$B+k;3zX zSc!;=TCs;q6h^)89Gc#yM1Fs^lv2h9S8R=~V#e@CVdkrm0?O0h$A#`SyT$KemUDAL z3Z&`8T-+))ja+Ue>ZgZungXbQHPm>7sn9vsP0E~5UTW1Xnm#Oh@Bqj{n(Xw=lN#o0 z`1GLF{$zeR#Rh@nA5V&7NpDp6c$i9hDGSfI1K5e(cXghKhVXo`fXZ!g2>y`SO@(*G z5&p+olWoQ-D<5%Zge@A=&dFlK{IrQ6p|`35M*lR3DOcipvisZ)?6q;9k+G+2Ym2-P z2R%i8SL`h6VPfm(D(G=S_*82ASnA>K?rzi~^>h;}g8-b~t69;=L~9I-rn z6RRuj1%GQbF~N~+uqSN&H^2f?zxo>6i-lxMxQFmj)`DU`sY$=)es+>S*_QFNh8?R8ZdU40UT~vd%SYqj6_%BK)|^nHTMLdczmjR zJ*w-vn<_l-!qn8A;{ChP=U8EyO29p!hfx4mFXzyM0wF^@0Ys>Yeah*}r3hy;C9;rH7e{P7AKj1Y_6ZdE#VN+%m-5Q>`( z?d>VBM0a-*TuWPxeS(tWqpt;D`ITj59mnJ-D4D}F@nBrjEQ4^xmQds0O(VfLmvZ$N zZge<)SkggLAy8uG!>v}NMk(p{l?{0@%ksTeH7$8Lj zd1e76v!2IQZ+`UZ+-c6!c-gJ#i1r@e5~>&(UCG`SC!eq1egJ}qb0HEe_x>PYS@qnW z&40b_eoZreNL$a%%9;T7?rHSNvad9&sYnrS6-iS5q(~SHtW2ujvUG)wQMvYJhBgG1 zybPnCrXHoGKUsf4EovZ%xNm85BufhKBLANELF$9Eu3NTnRu3_oM|a#KtAf8whN$ zACXZa3a2T%(Dr^8Cx|GFZe{l}1a`$Nf%%Yqu?Rt=XkF!Tts6>9fXF13Fy~!Y$hGd{ z{SDvqx1?fa*7I$KBe|(g)Lr5CLW8ejr7(?7q{|&^Hxv0C`*}XE3k^3PdDV3Q09dKX z{&m;*bvMEPzMsOM;?WsM_?nTdg>Z(fVn(hFfqFJJkOwL>KP++mj1Fvv;Xmw1jt{0b zeQ=oE0GX8!6v(~V^I`E-c>FjXgbG$@Ov#B?HR`hXZfD0_k2PyMh$@nu6z z3pLe5WH~@B@>K_!FNx-2Q`UHMadKfDpMpx2$5WW9g?W-+kM}-`>Rc~L?P`~bJTr7~|V_+;L za^KOGRl2A~5gZ9p!zfa!(Yj0E^m}~))fx#X0tJAZSn3!5Exg)CLW}XKDcY+tpSAnk zw@2f*(Qe;nioJiullACt4bV((x^Hc}-Ov5*{9b4?gSHB#b`p{DUes7$ir}$$UX6@& z@sWEVgFyDTUoDL1(jS{6g<0*95vpQb8U)moE6+i}VU%2valcZ7buj+>9o-)aArNP0 zh^zOTVSe<9fP3oO_GH=YbV%*wx{ScP(!oPnR_pDoiH9e(C;?nTt4=MOQ(RRc@rD5H z!%1%T`=A{m8?g;Jz@mn(PZ4a<^U$N#Gu?AwwvoNfX^7Q~C__?@`79#^Z-rJ*x&VtQ zf5(_Hik*qMjfswsZ}$Bo>&(Suz>i3#+_l;6CdyP9m#>5?zZc~P+iVvmhAE!Dc?eS< zwJ!(~W6PO!LI;iCZj9gVeb%n>x-+w~#?M#UiY@8#$(yXRmhe)r0y+5f-}M+q-zv~* zFx7e;l9_5RO1MajEt){SCh&^A?)9Im zZB0#s(vj`)kHzLt=&_LD-P1daZDJ^Aw^9#xYw?0MUe%jSG>at>H!wf}UFW{>+b#gmbT$3{q!|ZGUm| zJkBfxrK=Wv{~8w3Oz+5-VIKZ(F$nc?c=-%Z z;HkjA+P~rOr1mlWl=lEfg+zY({g5FfF`)~L=kSmzVr)Wt%Y9>X*pBwftb(FXXmeH0d03{ zKI;)f1py{KTV!1;KQ)N5s}@pmnn*CHHJH+MtryN4PD`sGgEf4}HL~dS0twn(muaa+ z;_WijaAZyQ5gL)dPoa%F8te_CpIHUmL$t)iS2j#fn zfbkRZ$LeJ8ZDB0~X3;IpD(}hYyrV>mRlTazy~VwXc2q~J)5J_aM2O=Lo5aV&uVXzl zm3-VNX7rZPg>+%K1<`$Awryf8_i&5A`cH6~o=M^=BRrQ#>{?a^30V@*Ik_! zM}l|$b#JdvD|hYoglo3Bs{a0WfQxY3{@UH++eCLB@E4+O?6+&2wNBZIwB;ne2~6=n zjYXa>sPlhP&>+azICBvA;h`>Pm8Crds&TMUhxOt4^n)r5*ipJ<&6BNHpro;v zpa|t3qsk=ecZJ`qIA(;^V><>h-iw_`NOo3B_Gs{l*Z*h9csJTbBmNO>T20qkXfAc< zDoHPbr9ndO6cG-WjuM|cbPt9T`?g=`7h*v=lXY`2{wwGUE<2B<=r+H^REX~dx|-MB z2xDF2Q^BVVUKlvIZyR0x^?#xbFqk@1*fw(popvH&6f;=H(;9l)F47?FXnTyAEd{V` zIXjOX8x2W%3R^onblgCH*$ad%r``=TaCVW1=1=lDf$EFKOO7#(o`?EbNt6HR zFnT9W?Cfu+`4MIo#3MT_UGk*io@|rEdmZe&HU_fkl zGg_9ba1_ML;arFrs)3_<3|vPDwi`eCZMk?EUk^6J^Z$z2kaL6U9YhV7#uXUA#l#p< zlBStcBMQARaG+-_g}P_&pQ$DV8AN@oJsNZu2neMdFjzq;6UugA(}K}M3gzYkjXi#& zXrr9sF|iD;|K;^Q6jT$mdpoVFGs}c-8lHf#9juFX2RPLjcdwC43SNh7Lseby$u0pk zyOv}qog@X?3!}Hahy2LQ9c6yj9C+6uMg)8^$X(aE72VA)4Fg;$8aV(9tp6QW^}md9 zt?r{>cS#F}F00+wg3W8b9^S%M)#;0Z@cq9}f1-*JW>UkU!}$-kfPwF?@;qug?fCe- zTI_U^PzgA>LFZ6$YOiKRCp0kqjvi4+9$o_ANmLHQB-3P;7fPzQ{RgR&zf4q|QGj!{ zsC5wq!4bm^1z~G$ExV z;+BCnP=1<;Z{PpjCUNL~xpl}B4d^0<>wl!yBw^Os1`{|lAf7g=Qb$jOO$Ex}gq?hE z{#2VUWumUJS>09ML9Zu?z^Q|`hc>PyAR%j&?vgKr1QlmRY(B%{v@#&k16i%iG?pO# zs80IzT7nX@F!zcl?;G2gT*gmsmJi{gJKjVbr`qIxNZHzjAa)qm80U_QAf*hd+llTLj!lVyQoGgKhA~yFGTP7kX zR!30zb>PyvL0~41H8zfRfAi^2qxCF-a#9a&(#ZFv zK`LSx6iy{&9-%lv7qeL#I5X&_gOp?^q%n4N+~hF9YAnR1O+)}<6~0X(LG1Rmx{X!u zEu^rOP;ja6C+Pd&CQbPw8ZlBNk_1_gzj@>A@HodQ1T{V^6h;)(<2L=5?C%;(Bl6~k zh@(A}+5kIw%AX)dWw4hVaxvf^#Y!5&UIFy_U zUf6}n@Usp;B|AJwpe&k_;KKe(YVB@HLS#ydqF_UBcTUB*s-Q9GI5p$ zsRm}>%pKE&^u0aYh7njkta)s-=ZC}>aZxtgUIP$E@EgK$NP#MpXv!dw1{4=OnYOs! z>ThLL?&r>BO8E^NFj_uHxhvv4wt5;X77Yrg-Z^|3>sJep}cgjh<|l;Rv^;a7uY8!?mvLYLXGAtg(a2paP= zO*JYO&Oi3;F~$52nE5Cj=FUgrd+i{5TYiemp zXlZH^Hi-rq!T;59-|w2Y@HCv z*oG^Sp-QTitGUoHBRD%Mb()Kd%fz0bBvOD}^)C)0^i1Y=mIKZ0`brG4QlY zu$ftq1K32EB{RDzsi}C2WpT_Y8b{J4w6omN`My-dIAnwYZ)4xzvS}W`KcTAqts)xv zy0+6W^Xmf&4)Rm{yxY1}G zCDC^oLPJmGw?UEhpQ^M@xuuc*Js}&0CBgH~tM1|zegbRf-ctJ=YRu1yGmcqJFf#Ah z7smz0DA5zs$feL^l`WK{h3B0kZA|zF2vG4nin7+`^&)vp4F=D_s)LG!8U7?dlK`h5v<^<4fSdQ7nYkmk$h%w6SRfLB#y0$m_B0 zdQR-`Ssg{E=)~wCWSLDH=7Ua&@Xg{1&X>C7&Tv#tkxA>Y7iW}U_-O)#Hs5fXZ zu9K6cXPS$Nh*4C}QRzro89kt&q5JNU06ft5tF$Dme5!h7morfh2I5D$#I@(Fhs%T- zsVfp%E`&Tax~xEfvS40bDf=W_axNLK93PQiSi_cu6-<<*Mu?@PP*I?0n!q!qw82=| zPh=kQ0#&q!k;eTtE?v|rLHQ`FCS$qWZx!snLD5SH-bIWpIaODIfQHilIj3*77; zg&*t8G;>(;wU3-=cqebR`2|rh&K(suDL-Z#KBz9jjN?Ph%V?~tc5CgN-p(C@IEHiJ zJT?nHw*{i;E%hUcJ>-CLh0?Lm)MN}onArrm7Y9Q~>_Q?pScBaAh;^Ct`;=V5U;Yz< zP$Yu5ad7kma-01EJ9YdBo^)mMrj7L^U3WtcJZ$3UEVXO&ZmJn1fD3%@W!|vZp5S+4 zmLKjYUO~53{4!0kd$J=Ythf-b#PAW;FiWeYyr+o{W3KLNHK<>8aG>VnS6xlB@9zdQ zHMRR({FBp^JJ3#ww09?oXCfg4QqOi|BGDmSijoV|Y{Xmmfi9 zBz-({jg1r%UqW@z)dY8%%KDB!UVQ6Bwp;{veHR|=n{<9oj=k2|%6Vu%L4E4s(-}pD zqnL0E9ic)+Q&Wo^=@UHm6!!_NgD>gHd1pg#f?L=*hq-awXxJZaEE_}SXp3rL^5u+Rv-hzcdAjqC00 z-HW(A`?31^O|Mr-gALoMET1nWH8wQKZ^-O>9G9R8v-3$^)HAYU0re5;PSShi2I*a; zA~Vtqd>-d!RzFH1ewt+POlOJJ^=(>~p8;K+{71*xsJKNzW&I^eAr}MA@sBhFrw18P z5iI|i>IeRgbU6-W)iZYyOUw@v0ki)S(18%2^n3orOb)std!ZZ#Cuu<7Gn*U(?qh|p z4ML_raT#usf>9pB)8SnR$Fw2D254p#@$>4)2UUUd!M3vmQ~@rRi^Ep6-SBNlptFvK zhAXQo?K*NUX;2;TAi4a3+3WS8S27}fetu3#a00FRv~XDBEGDKgd(;VrQ#*Ug#@4o| zel?asH9ZRj{(EmV&h8p@P*ItqlU`7K(Tqga_SCeFD^#D8$oDqsP%e9PXN;i0aUY$O z)8-xw5!*eA$Ts&9j!#oF%m%~Q-zML^zvJ9OF>PVvG%dqwz(rsRLJU)z`$PkJLTAV!A#i!jblD=%(=ED{WhYN25$`6Xj>IIlGY1%H!XJ^#_VL9H~P1-1E=KrFf4^`I}Uj z)_u+o3g$kjgW1{bQ*Ak@i0*K7C|pfuq4hbKb!ld)oLW%MTAwKqWZ{nAmbe+|5N;gi z19>jKa9ti>Fy0i*IODUD`V2Ao^1*u!zx)~5qVsoB;Y7k?$`JH>B2Uq3Pqab)g@-^+ zGRhx+B18(COeh-PrRxtqKqnt{uhR+~;$ipLRyfBEAP9-bDa512JK~vhY+gae2!oFH zL~(S(x;7ckNvy!qXQQ8l&jmRA-neL#0IRy%cRt6Bo-<%dbJvs&dn;o%+*hzACuT{8 zq0#+`9ZiF?NHH3$sjVGGStLnaHkO)2GcS^mtv~wCD2c8}nRvF067<*F7(Of>@4_jx z*W<8yzHhA5OD-QlThhD|(}proF(fg6*R3Q!>Sc6=C^v;lS)WvNv`W%Z@~Ou^GZh9( zNrMC>gko_dy%acrDbL{7(Ii~NNn2&XxIj;TDyqbwfpr$AaJ38Z43_)DsfrYem_ndr z?N~AjLG)53O`uT`mM?T~0aE6u0p5vp#+$e&MWn3!)}mED^V`2IH9t#Qh}pG#8TzGr zWzfEDa`!EAR%9y@VPPcfoGzsdsjy&*=X($X)<{`YKTlpRA3b8XYe5GB*Weiyc5{CP4e(gJUlX{ooQyN2H{c@ z-^vuHFoUCESq+~?T8^{=T%lO#hHw;(1Zc!=#ymK6SdUZd`H@WT&nOP1lVb0{gOs`G zrf?y~K#Z+;{dhIo*e#!S_%a7I=_?#j5^Y^o9er4tugr{Z8OneKoTQ*kn7E*r-v`j= zd)`c^iQjPYj`zxeP%+HdrQmSbzM%QwF39~i3@VuEjfW!P(J2!WzYufBw~OMBXuVY| zAGYJoAe<~p(h)*~wd0>^dtixD#V>o@^!4>)YJHs-<9N;-be2i@$kE6mva>!G&==rPkQ$= zhKr<4{p2N+VnXaz|dJAyVX1SicRjE}TRfIn;b{4&dj6?(gty#Fh>L zRqq8`_2=Lvradbk42St2t`|PPG&MHHHZ?cD#xVT%uWj?^2zhA8_Kw)Ac5vFCS@&JS6RzWl)@dQWP(#~N=vm#6t-ytY@>LH6>Id=Sv&VT zoQXsyrtZF;!WkFI*`cGIw0CM~NoKQMcrPnAz+i%3xo91nv|y#5naVaBQ5mIT5Auf6 zuzd@HfgF6pNWn!A9tz*%jU}5zvSb1I*@YysEhAS3x)Ro+6&0$6V7dsL6;3NDD=&5x z9zyic7LvQj9_(m`+x;b-w|bp`eeC@F=tuw>O$dzm3YdUV-ox60aljAa06PYDAH*%o zolC5RUHGV3ff9;eHxYGDMJ5)J@0GC&$44^F1+2eERd6{puGHLGL3_vimaOwQy(}#A zw%gx`IDNhZ@+~iH=&5}ap~(I|l|HSsM7n#qJVt06n;>hfE#hE3VDx`Az7~b**78R7pf`wzWD8; zdXsIDt&sr!S(SscH*D1+~1#A4ZGH~DHQj{{6k43fZ>oH-$+Nz}6Oe=ZrObWDzt zxw~BdE3w5X>ULpCixEj@G0a{90GtG+q<&nW%xz{_<+VKn=Zs%=D5`P_6?VRa4Q3T? zJvw4X9Q!_~aN=90&OZlvYaaFh3|4vMBzcAzu@bf<8p<$+1o=WtjzoJJ-5qKj;irAh zq`v$obCU2o4%6g#zYOcxZMUpHjkAW`1ROW@cHRK{$FF(ny%;Iio1-`#%y!9Qlr&hJ zZA#!{c4!$rl>7kqB~T8A?{FIHndDEnHQIiUx%**hhMqmL-*5rC*LpJE&AHOka(&!> z^fy;m*Jsz^WZH=Te-VY<-EVt;Zms!D-;7Ps`S5fhAf zDb0pi+Z4aOVBiw>1BnYKURK0m4QqWnk8xb9Q)EfJf4SbYe;rvIOkrh6^RIz&@OfUC zy!3`dyb4?O_82JZJV30L!y+Y6yITpy$qh)z0%tSazJEy6)Jf;6bp5d3J!O`($H)L} z!;irGnG7m5nIGi-3#D@6Ki}pedXyA{IE9X|w{a04@;cqHB7Pg~MBI3guG-WTKu3SPWQuQ)jrt0*pvlI_CM2J}a<1-ivt{e7xPQ!S;Fy>I- z(VBvVQd5p332vTSW9|j&JOihionj|{2UW%x^OTK{Rg&g0;PewB1WcA!S@GSJjP0U=4HmNZkI@r|{_~;f5w~ z9d$t!44IkrSpFzNE_^>sYlEA6S1@YvBhL|EdSb&|oLCJE6JMMyWcWs>k<8(@J|vK? z*RE$woKAPYv+moH3RwmmjlFh?VpzO?rNaE%CD2v!MPANZKje;u#)sg0Klswv=~s|# z;Gov(at+7{3awFwnjnd*^^bf<;ZlHK}XbkMGy z0dI6}^~U4^hXE6e&k6m}$h>jc;@Itbc1ij|y458aco)8or1Ys`E@nR##K1Sx_KNJ! zd+A?KvB$gu?=0&`!S#;n9DV`bRIH&_FcM)$YD?iK6ECS1&hNYTKjvK) zP7pmfAz6&)3-i;7mFN=>h26#A|+m?wEA`w&A#%3@6k+TPuMlxAe|GC-Z zGlF%GxQa5uX^F9|2(eAU2NJn`ew5Ix3lbi?KP^CX*`QJsfF{ezn|R)jEfvcq7+Its z7hk9`SKrv_e)+Gla->uqoGrKG#e$no8nH5f28Y_9A4}GE`@HB<_Pu%p_4{y?yhaj+ z3**kcp@fbNnfk_Yk>B?pb2^~P-_SnCRn9u<$z8$=q8E)Rj#2$^?$Q0CCX5WaUGFY+ zpP84D^DMJqq(1JM&1D#(kG6e(2vNsuziFZwjd}IHn2duTedM?)6G+@$DR)hRr@6^_9MC{aa+0M;=dQ0#l*Z^;OXq9ogpK~r_cF`$@USQp&UyL3 z1LW>DK2h`y4zH04rY^;9+^1h?lV}Uetxnt9fCV1oHo|r(2LJNBsI~}T+1eUyk`X?a%oc)=Sk!o%=QGNF$mEi92DBGI zPgX?|-^fG6WAG)clbxpiGOm>);%B2zhl@%>;B+vl$LaLL^?(_%iP2T-^C-`y;d#a~ zo;g?{4kM1ohtxK7ZhkI1YOKVqdVe7P8B8g+tJBy_n=s5le3|*m^n${#f&cm|6c*mD zoE!PU*9l!s1w4~;GkTnSeQ$7mf9-LAbI~p;zvfKptdHtyLuK%iK(qa!h~X*q$#q9B zCmeR@*jY4p&y(Hz^m3GS9T4*^AuC7q+Cs>sfl;B0831ZWQ-%-Uof`zpqLTELhROBz z@yr+$O{PS4l;O8#SC`ZU|9aR^s;jGQpsT5zOZ_dgHNYq@5pO&(f|lhDTC){M;X!#0 z*+47fX3<{6f2rP5^5#SG5qU;tk!|;Fek86v{?#;n_w~;DRQ_yX|LE%azGN|Ol3wMC zl56ooNC^UM4;~mO^${O{+v!f^ z>?)owpm?pwnoe4%*DRJ-k7PFuluLBSlh(0lB)AZXB_8YJ$+%j-XQ8Y^k%{L&gQQ_|9_l=bV0_0UxR$GHcH03J(}J+#@T#}g<4I{; z*aM}>l9{r~+UZzyj4zeLAJH~Fy}DxSlkfg(!Z!bo{8zUFfWZRyJCl-;D8Dr;*nn-XKc;FYrNHs4Z1HPVGd*X;~bj8?8vmZI>-^lT*r zK?;`9f?W$lWt0Sm3WWv-KCvXKBI=X-`-y(7AC46e*pIWWX#H5OeKyGAuRH*eqDQqs z+hsL_+P_V~hE%|{;_A;gGsd+@nT@5oVfd-C4}NwmmW*CqbdXivK^WNJi`8q*C9dDB z99a-sKgt;dY81{|hsAQ&m5xYpWXhe;VjVjLfOCRSONx7^xH)oRWB{KXIWJ_O2Wl}~ zZ-|lGX;VjY!H%A{sVE%ovdDjIV9`&G1W7a}AxJRC7WPkxWuk?e0ldSPk)z*L-9XU7 zTIjCY9G~yKU`b6UT%mzIb*MT9=vjM!T8Ka}c98GSLQ3e#N~TcVBJZ7pF?O~{y>DkVD5?dZhR zwvYmG%1LQqPtnmYoEU#8=HhQ1AT4Kra%Mb}9bD}w;$XDU7Mhc#MY`oOvfv@k(iY7D z4F21rciIL{Ul^SJcmL3_uohHRRJ2T&Esh`t4WAgq4DAi2G>1s3)_3`xjaQiTTS7ht zi4hSG5Wiz+sBlX1@;h-mCXi1ZXToARk0_yaA$46BT5tpK6S>~qs0}|%gf7wk7{C+y+RAy>Y%~Xj3muk7lSf}3{|SLB^W=-DTxiV z$`28Vm7K*I+dPGn(&^u^><66FJhMg{lDFNhKZVZUUOW9TMrN7HLA0k)L7RE9p!ioV zM*L}gKolX{P-;yzF*k`=b=I`N_OV`4o)F z?T-1p1KdLXn9{kMhG{z5Hr5HL;eBzcxjkBx(?LgThNTwqEg1O}KA1(V>}DOqj4&K= z$W#x&72bRM0c0IbW+TD@?M*rkFdj$J693)D8xP)T#&=f#W1}zdvBEscj>4l8Xtc|r zU5RYfxVE3QwYBs$<_~A#%S6%|EtDJUQ;GIjf~-lyuxaIod@@QH2AQnZh3NY8b{m+b zrXCl!J3`r{UGWLjW|k7r3DURCx|bpfqZG-_p7Tk_u^KhAn@%ulmmCExw_&Lt2Riq&_$TeQpl!w{9$NMx@&o<)K`4p2L z!urZX2Ptl41#u?&8QM`k>9wy0du#-~a{ndUHx4V<;AQ)|wxx*GSg}yo7I*~;U6B1# znri=xAaDR9F#P|ol_WQ@nOLi=OtQtD5yqq!`GX2}0`}3X3i)Yz ziC#t*1DF~=yvKYx#_8`Ghub<;NH<^~8kDU6plm_v3F9xoH8FYnBWcXPn z#t5ga>7eG)ZT*0RB~4ls?$794gVPa(`Sf+gRiDo%uGzAYv!t$hVV@`Mg+-X3o9cI+2*lgu3={H2=$b})NiK5qytj+jKfw{g> z!cO?pb~f2{(!rHM=+>oetCFu%7kXvdkVu6g+qcv%VqH{`$f1O3EeKZP1~4+uv;d-% zyT+E5w;3jr|9!;*m8sX4CxGyJXxV0rnkqp@&FtH_5qpC+R+uB$va7V_#`KwoWwMYJ zfq3E1eI^k_KAT$_w`FzZ8hS1nhxi9Ji$02?LFu63ZyJy#4qD6GU}b)ByM>SWUIAfT z?-&wq8a!6(d@)(Z!(LpbnG!+c`ZJTeRAMi>kLu9dovTE>$hi-HB6!p`X`>{cgg#J> zhr~z*+0}Mlj?e?@BaidSni^qCd_G_?#N(c?GY+T*vJATG>gxFO-3z0nC{mVdbsY<@ z3|aJ%CVn{ZI%mX$iPgNMklrSLg*IXepr zi*!DdX1Ic&&YK#CmrKAT|1(Cgi96yjA}BxVOl|G}K;9PC)?Pn^MpX@HQbJP*5UYIi z&lTyr+8QAQPIxn^Q>=~P&Lf+nzV~@!sq*IVvzou5BS)iS=7}6xl?RUltL3rgTmDSs z-1$CHK9X?! z(9_KaeE=K!@%7#tK+l->`eXg+N5Ts5M!p?NP-6YBl_cEW-V$h3&c%VLoZPYv`s`Vz z`Z^O~QeTdzKCK#y;AYx>(F29iJ4>33WRvD|{oeglR{M1V-6BHSo6lYe)wZ1e6wfhT zW;1hh&>COQ#mNHbMDOejhoue(3Zj&3cuocp`N@I7RET^Ko#KVsg)9X$cKO%N9Iljx zIwO43ITCm7{r@ZJy5p(-{=bZj2)B%Ekz|W}Z1FL&lfo@CBO`R}ab10I$==D8L`HU5 zA>3@@%8J}8vdNy8%XPo!{(krIct0NZuY2D2%-4Cno`bF-OP!NlTR3&t@6jV?!@6wA zCk-t@zx^kP!KS9B{gV2pF645}s+omF07WgVsX_4%ia0=o^*uAljt{uPp;MIH)Wbe$ z;uR@+tAbtn@pFRdQBMDOMycUM_Csf^5%q$IT86Bqm?PsLloK(I6sB~0J(>g~X5;5? zn`45!81ZZlXxNA$igU4EzNu*t%0t`c8>RT~70sjO3b`9{6VC505(P%lf?*0(o@xka zT&|0_?qi4Wu&`EWz5CC}f4pbldVtFkfe&mXA1AAyVGBJsu{d0e>03oJy;@zK`6v>c zx{)1)B;=UR`d&*HW*uzg=H~LuPIpR?IgC|KFEz?}n4+*Ymq9NgCldRJvAZz*wFsqy z_w9zeAK1s!?$cF1g3VUED&81Wen5cVDqNDSBsTKQH>>5*h_DXp?nK=0Rc8oxfAQdw zU}<9=V`b_pow(cgrwCeox1VK?h#>ie(NplAIb-v^@ZnSYXy*sI7dX!^#B~kQzJ|A# zw|DZP!(hqd4fuPcwYA-TlS`Yz?FhQ4SVur7mlygVRD2uiCNdaxZIBW7^U@d)r0Mza zX?$_RU)dV>@@?1;9r5>{bU0<{^i`^h!nN?Z+f%72g~bKE62^}nLi2HM`4l#qOY)Bfv;;96_`$S;br)pj9^yx$Ps9$L}3^$(9Val9}^l9DXAPL!V z(G2NgrqJv9g%AgQNKvAzdFFxt@VH~L1D&EJlV$WLk;v>MH`_?*Yx*~~bsDnprTSV8 z@pAPStQ{k{`iF;8?s#h&Qlt*ANrvBqJ*NNH2kP@KzX?7EXL$%58fG%ZEfFrKN1Mrm z1TE?NCZs|vc{BY4wYB<-%#v6Nv7g)r06 zf5dW&O6B3v(Y;A=i;ClzFD*-w<}?T~j;jF7YzFyQQ2__po~7!8!^6s`YnmKpep6#B z<;bq=GV9H~uy+H82mbQ}rw6=P$AH8KH%n+Q8i}PV9L8dYGty(@SQUhg-EVu=Tye|s z#pY-Zndl2Ib6O)cn90G zVjK5@*nuv~p$3m+j2Ei+`SrnYUBI|LL>I&VP$lpFy)t>+6bLD4p=?M+8ZN#!scBBYF2uuQlG0`!YlXlG<^o2c; zC!RV<J37yOu(<;i!DBtOx zsbgoS6xAc$x|fP)B4;;{LkkMjw+5vtqBiHd<2Pj$C&eQe#wMm+Z1X~XV|T>|%8X}vYq~%D%s&%Xm37^OWPFjH`9FUxqy{`CnJ;wvvt-j~+*8i|TsS#C?lgefo~ot& z+r?avb+Q$R{z{lV-<(y>0hkK#G_(=^mJh^4NALXQq|f<0nL6|6f($7PWCc@l|=+pm~G2#AY8)i zfzd*_`mODr94pT-DlMvL%+@a}Uql54<-I|6PQJXRItXQX&&$g@!3;Z}4i@jLyrPyu z)NPKkNp{C-JLj=gM}{BsL}_X`3uG@=^DoHBX8;GF3C~}j@;?K4{>_86F+)8)J?`F~9(V8&BgX-uThmQ7Wo2a> zV8Cv2b8+>ItsMk`;ku`z(|z*y@85+VU@I#HmNe~votN9G$)XgfiV!C+F`ve{Xznd? z2cE_NzxsMm;%WLt(s~pBFAjE_2?x8|~;REcS>Lch_f z<0ovy4Qhg7l$}$E4$GBqFcYTEnFP3R4%KFekmkotd+z*+VaE5@{=3)UJ$oLNO?91V z34RdbFSQbMw)JPADKvwp`Ri9Z;O+234KTt{pS9kx|AOV$N#(r~4>7!iZ_2nEm2SJHys{n6_(*TjnmDa_`!$I!aydpOmUXLu>tM%`nI=I_Ul-t;a6*LLGF%9T5JH z%klTI%~)kQB~~O}cdkhxAxr&oDfH87K|({E?OagQtWsQufpFSu)w@pXla*g$-te}8 z^%CBaGSSzVLS8?@;M9qmB&`BH(fBuWS}&R=(gghGxp94gt(#hJEg+L61F?C@@-uX+ zR~#HP50ImHI^P}zqsK3b?Z(4cwcI@G#=DNSt*(wpIdexJU}4(WKEEzD1ucxQLuW%V zeKeNVFvqA!>-rNkqV*2c;q>fe|Mg(i*R5vSnH{E(t9QtiFo~JNs=%-WQ3IbgRuL{;GYh}MyZd)%9X~iWY=Z~~ODB`C4<_<*S$P#< zjc~Xg_H>348CVdSArT?KsSHp?dhf!Hreau-)a{}JFl|qlR9(SZ$gVC;o2`>U_|RmD z$MlH+QH^C$ShB?`nun5i@phUCPPFol$Ar~vSM2$f28*lru3IMkMt!;OBYVa)U7ggF;Y)q6~;X|hE1i}PK&41ndLZseVeIeaIQ|IBU& zxw@o(!!N8{tC!(Kf1b`+sx7r~fA*CU#<{H4_Jy2zblNFTPn|W9*p-9j_Dpk|A+ga1^sSX&Z`x&jZ%mAQ^Owe!HItAWP&{ zIj2LnTSh}hJ=gk?}qh#-dE#yTfNgRc&u4b5ilUuC~&zh zwLjMNrrmThhd5R3j$pqdunIH%{i2hJA2ntSps67G{ro-!<5I3c7)e%#1JJQetMdT6 zc#7cFdY4qwE3sp$dv1bNMA?O$0ktk=;sTuSr7fjJH5JIKy7T%pS@O~s&pQ8n;?+5h zETbU%2%URWw;tJmYLl|rj))pNH7JesMo`{HTdO&M_?7>gZnh(4=DkeW2u@qA7h;!Fx{%VMrDB<|HGnlUJg=9n5H0o8_YQlP4bP zXLHOX8*s_YYb9=a^JkAGhJc;|(CL&DL1_??o%Zzhh93ZpjmoK(;954+Z9U544qa}%X#$J!y>%q5tzH#lI43Pp5FW^Swbz>?fs3n#y2hb1`U5{< zIOZG&lxe~mw`l0dFnWlZni{zc!>`{52Euo~Q88DdV_)5F$wtw?;=Ex1_HzuGyB@l}zOK;*a!(8U zXCbQWbmTeZ3Q+=qT>atUA!&y!v(9jpEvg9_%tAq=5WZkJp@>_(qg$shVWJXyX(UmI z-&j;iQov+C1(B>s>7Wvv(7R^zEIa|*q3+7_E1Y;Zsqq_!yHx2on{yTiR6@YP!7dNL zcP1{iQ@oOrk|aEkA_?c%3j=)QEl%iztWL^pna#c$4@3fW*VNHY&`Ecm(SgE6F@cDM7x%aMQj;sDz_!ib) zK|9}gJRhHj-uo`T-MZVujRxY32OaBte3!{T{%03R2+iy*@RN?!lGToWo!Y^7bqs}N zJTDm4e6YAad+W?*J3W1>iK6jil)aM%3>7VWncbqRnKuZ%m}Yo>DCr$M zU`dt^L?3d+^jd>NQ>Rb|aMx}?A7MR0+sJvnxseZg>-MAVjJcW5pm$~R6w;~}`ztim zY29{w1$`gp2cT4)San1m&d-35710FF2vZ=AM*0XM)wd+spg~$NgsN8wr>9Twn>hS` zwEXZLW?N8e^#{Qm+eduVVe6b#F-ubXukS0D`Z@fUu4gDdP3bM{ncwsNLnFz6f4K?F zK7fMvzBxJa(EiYUaJ90>ANJ5656@w6})A8MLJo-5PHL#Pt)9Khg?RlaiSq0F7CRBTQ4b^yUrQ*BVX-0afsG)) zWtH{GPI+}3VH8~Ii`Tyd1)W8c+gLCrLxpX=0Fi)la$P-B)&;Y>&}*5e5?B>%Z*Q-= zcy(WLr(jt?=<~6Z@dIH7sASg49eH^xrVkAbM~iz)1I(5d7Hz+P&g1sq@@m9$BH>W) zjAMNl7k!h3IeAv5?QBWfdt-eaH$FBtcCv0q3K8Pj1v++>k&%%Y@YIK>`84@lkEPPS zka*E4l8q|gM&fau>&N0^m-lUL=k>t4DiT=uNdtHC<-VmXyYmjR7MnOpC*+Lu|4rQ9 zLX*x3puRmJ{iLCys-&dE1HAapQuC76jEs!(iAhNo$%%=Ngdwp`BI)#ySZ#$|6H`gs zmY}lye1{6q&Wp9tqFxVocU#1A_A^`Xg$uB4)V>0-GFei0Fkl{@^V@%Lv?^%z`c45p N`Z^}sRa*8D{{yd7`56EJ diff --git a/Client/macos/Assets.xcassets/mdr-xb950bt.imageset/Contents.json b/Client/macos/Assets.xcassets/mdr-xb950bt.imageset/Contents.json deleted file mode 100644 index ee1bb8de..00000000 --- a/Client/macos/Assets.xcassets/mdr-xb950bt.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "mdr-xb950bt.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/mdr-xb950bt.imageset/mdr-xb950bt.png b/Client/macos/Assets.xcassets/mdr-xb950bt.imageset/mdr-xb950bt.png deleted file mode 100644 index 2362dacf7ecdb34b1142311f0977389f523fee05..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 107133 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

m|9z1&t@2oG+#uPvX!o}s1argAv zSgPg@oa11jEpKUaSH(a~{FgT1t4_1tTF61!JfhXVtaN$8rd<{Ufsw|lmR8oPF=F>~ z+Pl_CkU0?d@kL}Mig17NK&WT}aqq2iET5SzclcS)B1bQj>ueeE9XOwb3sEP(e6WoL zWTUqO3_Mlu%YtQd=Z`LWczMlO&wN$KdB{Lbm+Y%2N=wFiQq$6>C9l378&mLb^#qe( z@)&%2KE0I1KTPT;&@N*ZeuDup9jpBGx&H8_00o{k3K6d#Xig&USknkYcn4K6l+oTX zz9ToT{QFL1=ZhT4y5>$qM@H1f2UNMW-AeJM;5cZ_?={=5;Dc|?t-cAuiHZjjc4ylT zex-O4en<0Vtu}eCBWUSySx0L2RKgy%fk2?4arR@z@e)d?rh)v7RUM|z#@uojc8zaH zowY=VLz7dBJ*x=Q{L~7qe|GIjmApzgs$ixM|H+ew0}UC&9`|!013vnH+-QJ-lgrA+ zrsWd9(u)isMr%R!Ka3(CkZoX*RCJCiNw68hrflxjT%$fr#0Wn$;5nw1Nu7Mc$~Wmh zwb&Olz4cVa-+1EemG2e*bRhv3vwRBd^iEq%Ji`KE62Oee*ePeoQpiOe#bBr&wk|GV z%xr=+VX~N7{6CJ)GAgRRi{e9fmvo1u(%msbgGeJCGB9*^N_V%Ef^>({-QC?t2}pyy z_jy0eVy*eaz3`87&ffdi1`3T`N5cp70xZe&mlW=rqH3UB>|V-Lrbg`Pt9IAokm^e} zst~!{rIO3_`}Qe#x=-5yzb$~N`bC%9zP!9n_z8MKlFHzv%oNUVa)YQN)vvVa$xN`H zqqpBg7#_D#_}_C2@#5LWCq- zdUbnpIta=JlD0NBy69o1P+Y^U^D0hS|M)q|)H?LL0ud`|&l8(CnUd`m;P~+FjLS`by2?ZuU3tfqR1sjLPH;eQ{E~l(D~#fBp~L8odrUf>h3WH zW?LBlU&`F4n=30>t$=Uu<5E8$!ndyaxx;-;lK&K=OE?(UnB6Cfn{XSx*duuY4R7`7nNh{*e+d?wqMr)<7HO}J``x|pP=J9BGK?XCz<)G%zUD_3;my-mwsF~E2>J8(kHR@ zt4)65B0Oicjn-9Y%?%A%4SyTDqDb@Kq<_YFr*kv$H8n80a9sPDrYDfNbStzV<=sgu z{j_GGT9r&iEf|`VkI32r1-gDcYM_i7rCw3_P}M^Yw1D|lwtTqb-}-S~jBBr~pKfQR z^L)-*+5WRVr-8Ow@hq$@Gvne^mxnUkX}v?Sz+n?^7BR#sU`8cr8?56wJS+>dTAFVV z4P<{}z6Uz{5-FRrg!WKeUz)aXl@LM>hSI^K+tFvL=V&Z~suKV_VtmD${TU66^#zB^ zA2u3J4IrUJF|Wu*b73=#hH?FQZ#=5f>Y`jnI)Dpr59FkmJ9hCyNJgN_=l~FyO!dlXFks1O2d3S5 z7j>T{a?lYNgG=D$nk?>Fgi9?Bh=G;Ukc#qnc9oJksj|cR?v8d~hjUa$CNh z6#obb3FkWLNbY#k{u4J(0t3p_E_u5tgqA&BBzI12Y$B(@%c62 zLOAjlYh)5__cBBtZo6dS?QD8TQnHPQ@!GTp| zqum>;c3k$}j*gB}3ui(_fwx@K8GuYcTx+5iS+T>>{sdnd%QTgew7J+YtiFdwLRjCHXC*tkVr>3SZ z+l{vTv{>$Nc`5-UwB`-UQ>AGobiiv)Suw+_`KnaBpvG<)$EK;WOb4rUE8=hXwSVx& zPK$LrX(0oYR{rmc%_v&iS$p!5?=m<6MkYl>kyy(1=hGVdirH)%8ul4LP4e{xI%BcS zMP~oKafNW_hTsGoGB;V;H33S$KQbk4RVeKw>~tXf6#N`Kuw5WX#aowCxOYXO6q!{e z51O=!!gwZpD+AHr)++9>>a>54hd;0;FsXy z`hInX@xe`mtcr0_cTq@n#gl2PLnZGP4rKZb)&70GHcXmPz;*&cu*vX)mW&2Yc;#vV zmgV@vHe@cxw!#F1y&t%rwvR(b8W4-8Yo{sp$erH)$>5MfQx!HWzkc6vQpx%`U2kzfA(|v-Pyz6 zoMp=^AE57M_~AF&%zIY?o;FkAcq|i{sRVub1CC?tM6~Y%@yhOl>rW7Emt2I=LCZ4& zi-y$xMaIqHQMMhQjNqQXpsT)6MIviWiX?Mnm_gCkLWiqyB~Z#Vv(97HkKWE z=)#hV9D&P7q0P`oKw3b~#=#NGEY~3`r2FgDTu&(TVCRMeQiW%`xYaWhipQ5nCh-qf z{WsFzP)@uGw)G0Ew(nAAF=z5xy*$6Aw$R(gdFJKzeG9;U;>%Vtj%+9xY|y`9)cq=J zX?y6*uijg0T>qh6Sx2v9qNm11gX^hwF8n)eJ`D?`XTBCDbGd<+ z&kG599R35#?K%WJt-d}I8n%6Y`*i!U@9xwPvlNogNpTS|>ESPLn8J zE>CdJ%6ZE0(unwl*7LMaq~N8jMOR#@FAl8+Lydk@UMJJQb1FI{&h*48yCk}f26L9! z!m^J#N%q5rF4j!eJ$i+uX{@(!x(<9=W1++3h5{WjXTaP#Rty;rIX!P}POL9wbb zP@h4chz1hLiWBF}vV32Tqmg3Z4EKg_NlKD+$Eu?LJE-d}(Yohw$xQZyQA8gZM(sKS z$I(HOy$!f^n=16`4^p(?l-p+#r>BE7LnXI;KF|^1;jUll64S~5K$3v!KkfeA1}urB zVY#xlzjKGPu2_yyl{8Avi^lJyZ8)Fy_`?Pj&=8{RZ~8D4ot>jd$tZZw&L~}sXJm)PJIO!$dN=A{9MoTN~O7)u0?LK%kY*18I3#g2bTLD@E&B<_KPKbQpqu?SW zu#dj*Gm#S(0>)cH{Ddx*>S#AKc|`o&f*(bn>w=cKvJiu3q)AMQ;F;FCjz*9WTk4Kz z^|=rfyWl7g2Zewb00)tei@qyxGgDJw4PG~DJS<1q31*#PD6Yh!v_k7q9BmK0Tv)26 zXwi^`m1V>O#vM-e>{ycs_V4ThT>hls1bZ$|ra5v(rp&*ttJdT_sNn}y_Y{*j3wZc+ z-L&1V$kxR~XgIad!@a$M`Ud0RQxWeym%$Z%6;)W3E;xfMIXl}t%6jY_;NM|_==(lL zGBc2-Y6`oQ7VDYVt2=;&1EKKSDr)a~0vs!uK*TkoJ&{)MkI2w|KUMu@>2!*>=ME`F z^lw1892xs})8#YEJHnJw4sCN#_&lbbmkJlu`_Y*h&HrRQIa=?0^D%e7fkS)OqsL?9v>A zL_$xn^mcBYi!*~7R$E{yTuqI49wiN(`Ls=?N~khwg!z@2;}3i|LdW?v`7jE4IMVb! zj9(zn+G^tUcX4jaU(XMhkB8m^ErAu*-n*JcbQYWzsE)DU%>;1Fd{~HdeT19&V*^w7 z33?5y=%)*9I;GLz5gxh=LgOeh##b&>PN^B6-nx|%GRc(O{{1^!&WU@5N7>t|?fB?4 zsYb$Co4dZg&+qre1p$rJFH-jUlwykyIoVL|nb|)3J~|Kg!e2x0;aGenD&FO?qXcOd zjH6ZXoDcjx2{9~nS`}m$5m}6*i5x{6jjJ?p0CK7?CX^?~8rI@=t=oLOi$md`rw3w< zk|OlQ9jf$dpD|swkq$EfCbi2RI9JHGMc%uP8rsY;=2GXPJRL*lbW(Gx`yrzS#B8TI zRUMk3NxBiSflN;Gy33LldJyp!D&hI3=J@NlHQBPc(Z z#pq{&Tl2_n$3Oqs_4&`?jB+Mg>{PfrDzUNng<;uY^mjLZhro<1a6__zDQ5xZaE`97 zeSdF*l^gI9FE2G_S7zuyR=v%%$!U4E=vUV&{e}IdMZbC*3Hra6!j?aN2|x2tFoZ9y zqD$}O3Pv0@T@%~|oYYR($8!G-hJQc3dfsK~>1A@dthC+X@t6v?+r3u&`vS!9WlWR6@7#bo7 zNGPIAFQ~izqFg>>z2qYukD#DJP;WSi$NC5w)C<~0pZlAV1cChIoZkbGUKuJds-pD5Vi>r!2A0x8NMK@cfL+WHS0`N$TLH%?1sh4HTs0JjK)4IGICxS7Ix{0l6D>TB$HKKSzivAAJlV=sno1uwlB8N6aZ;)y+ zwzN8eIFAZc|ISO{QLb&DN_QX|{n`q~@V8K{Rc4bc2RwLGRAeJ)JvR{3LMpRzDx`Y5U`R?+2JjX+|5h;BvM^HY*+XNkIG2nmTZD^4jM z*8coa2Wcr!VK8^iC|*QZf6i|K*w8Ka@po$vRxNwPmW2r92CFMZ6D0g^$aAser0c@d zLal`GLg;EF?E)D7t^isuoVBBVB8>4XOC^9iZ$y{Ne0L#Xf=wxImz8a>=Yd+`EL(eZ zeZ?5q!wa&Du-j4lfx3w&JNy%GG1;4`?2$L^i=+hseS9(UhlI7X1<~`T6%pa$`Jw;N zMga$eqYd!IK|w(|U$?ilPE7zbi!|6_qi+3lsdbSdGZB}Q8_kI+sxU4K3t|#eMN?MYcaC_U{uZRXk{@boVUB%rA_%9&g zn(aUjVf{@SVi!fly0=54$-@FCUnT|4DBlFkTe$0-<2nCqTfvT!l5MK_4kiQ9Wx&@I zk~7OTI8V!q>ZmcFMu{BR3Yf+wN6#V9xv9a7oO=$ps*D`Fk(xVGq!PFoX3-M{zJ!k? z;rB8X)pX4*Q1JzLyC;_kIcq8ZnVYltU@*&GMGABOgJSBG&Mo`EV1O9byk(CopV}q> z!X#d^{AKn<8aomc#|ut2Jm zp{$9q-;_KdAw}>7{A2m7TWPt;Y!r*rkKsvxpFr<2E|H5Ju)C=EY;{QZl12V#hztBj zN_u?Ys8VUCwdEx}0k5hmg(_xYYkSfMAI#Y9XYx(2{Z<*0Lh+{I`o6e26oE-s3y*?i zi-A6hNg2c2MWA^|KJ;&Fqjlx`AKIMh%Yk2@w(J+KM>T(2dvHMTMYRbR4E>E%e~z*Q z?85EFCViQRC!^-~424Nis%)2N*db`brovDR&V4|vqW0M}_UgIH_*?B9mGGa-RsZWB z7xv3dtEbh%3}_Az)0nZU_c90}b-0c}HPNPr!Q@ElLC$qe5r%~cb9feAE26l6Bt3^G zR;0V>h^ePBSMzA!zSTg5Wq;a2Mp86DzrVH1p|by@ie&YHeblY{)Lj&QO=ql4JU;33;@+efbT}2ri`9JJ${x`t$)!ie!`t~jFv0Z_x=ho}alYI>$?&Z>TZyZE&Th4BUi4w_0~5X2yrJLC$GT-2-0daC_R=`( zy2KekhJ1~;C@4W|;apeGh(~Y;!oZw^*U#7bNR2trD3jn0KN`8ac)WnL&TKRS??nr9 zulVwJ7UHU!ly4ZB(+nuv++G22&JaczqMlkAuw6ZF07+?c%^f#q(F63f$v8d0;CLmT zlAutC4~tVR3!WLvf zE_1Fy>u%X;F#@{AfM%mxFnc4DG$O$*?1fDsh%U$5L#Bk8)wenn=XQ2Fp2C{C|2An7 z5yS3yhSBQfF*+b%{-chs2T(l4cVHGDREgVa{;XlfNB}=a&{N+r?>fQqL#jGR9X27^EA&M zAtWjwSj9DT88g{Pus~y#8nTkq;?8JxE{uU%MbUoVZ6-A$A$?{Sh|Ti`1jmNq3unms z2fgkCL^_+Y8S@92DX$==UpZrsVNnTfmYt5EheVcnZ{;Giu*Z_HCK#YOSC%(uWjjV@ zqXmgmkn_3Re{!VR%AJzmO;Y0Y+KOW1d>sH9xzv2sPX8H-0HuKt5Ivh25)$%XIPmt~ z-ri3jEyJ}Tq5lK|;CX@XcY&XH427jYoIEyWjO)RkMNCO)DgWW&;T>?{`Kx?G34~BQ zudR1>UT4?Du^(FV6eqI%1=>!Tz_?_XCuu`&D$%jf%e|M0*3+qWnfuKH1U%m2`GRC+ z1*s(^>$#`5uwH$p9_}EXa!T9)Wv^)~oD7ST+IgRDft22mV;PF%kT29%o@H1>nWMYN znDe6J{3^X+XjLt@Kom`EamS8$=0s|Xsye~dakqTeTX z-j8-Z@8))P`s_bnd6~TcUTai`knMymgQTPnMw!U&h&sz$ISDRh#Tio(&``=Gl5u_6 zX)wALmdG3ZttdtYvDEDl9>zeG`ARoLq+b3AS)tIQL3w!uXl&JLmt?+g9-kVB8f~A> z_KTw(x@``7B$~KPp&P1L`|;a*ZVPgkV(vAZzy9#Y=u|t;7+k(b0QLMK9*`=(T+Ztk z{WpvT9Ip?64q*T6?5uw<&W-Tq)_wBy=qLv;Bx(X!^t8qK`P9|T&3sEJLZYk<6mj`p zSrG3~``u?;5a=8`ae6E!=6r1}XJRHPsVQk@CIm=9YLt_EP`N(Tpyt0GqWL|yG-Xmwf%bB6QiTUH z9~>}r^zN0hD(Kv_w;72|yx~s*#nj7m-1ce?znA z6~^+!G{yoyrKC-yTw8K8J#ivsuCxhDg}n$hQ6fIwEE*f%^iuzG93Cyf_{K*A*#9bD zr@lxyFUC=dToZHXTac0e9e{_CV zY%1}4&JI3XmUF6E@CX@Hha2{@*Lf^PSu2|Udj34AMQ>{WsfsEP6Aw2sYbla(j0bKB zGzSVF^2%~NB%oxW(v z;v)SP);0FAs=nr(Eo|vG(x6A3TIg)qWiRs_y}?(-88r5o(7#?FuWnv6*k9Q@JdAX6 z-P$q*AQ^ZT+%AE;GB^^fi&y18s_=s!0s?N>;BrPee=Ut=XfOnzbddCdh_%`Id{~>a zfr)G_j9!z3-vSvK#ZZQK^nE##krdnN@LIC>_`hvz(Sbb&DJKsp{~*JnCiB7KiK@~j zZAHC=OEsw{GF{acl0O1A{=*mR{U>n$j>tFf2M!&8{2Yf4!$+qT_!*!chk3rDh`Tbg zZtGNkvcEkqOF_en$fFgF>qmK$SWypC=heikd{*EL-?tsmon#WCg;@37w8J?vek+dR zgyd(xbDt(0zQ<-ZQ;v%@sWEMr<Ss~M1|{cM z%wkbY22o;~pyZ9*8rI#Y!xvQ9fxbfDvbrAznlIlnn+_XGA6%}rUXKy!7+szzEmXe( zFQM@JZC)tg%d6f1w2o~ue0)Ek*pwY69+vy)vQge`K6^e+l(RfD_Ak`z+6>uk|HKh9 zyHabVxRkccuTe|gmh3(^U2LhyEv|H+Tu|enf4>x2v#`^2Xg}sS7+*9t2UcMSroWx= zP!%#ToMDs|G(}i-f%A$PB57e%)X?}EdI5*Y9m~*-?UAF?q0S$hcdiOo+|lvrfzo?= zdfKY4&bbet>hyvK0u#nMwa555!P-OO3CkV-B{w(G5i%)b{KuoWWOQ_#DEAE+8LvVd z1s_&ytkp%w3-@DolCipp6(ModeyC>VI{{_6K>9ONf3JtWfak-215Q8}k#aQ909X89 z+H^1V%hBK~M*G=MAs6KjF3Bv^5vM>CK$Z}zKdP<(b-&#ZJ6uiUC@Pyc4aZ$K{NJ{W zxi!MKzFan&X>or{>*n2O#(TCjQ& zY%;6XNBS7c9w>kLmzm)Aho#Hd=@H-I<`|k0H44-lMzUkK?eeLf1a{Wo^aa!YjyQ=D z3zN{$wb;&=hyRDzc9;O75%W8ipn$OSUq1@YLXMGM>va+!_p7R0tM~Zm_OVfyY3s<@ z1)yjq@PU|nnXWh^Q<#FsJsm+sD}6)ywZAv)$!?LGPFQ-$b4Kk~M^g&k@>kfMZ9-NzKjE&v}Vk$9uP3EB16iCc53`>U=hnBg?`|c+8M?xp3vYCl#u*b(~x2cGSxZU^F2o^kn zAm21Bf>mTEz%^kGE=<0~M>DOB0cj3#B~gu<{nArK7Z5c}?X%cZEg8)ZVo*HwOk;aP zavlQz2hnkO6XC~jYYym>D|wewb;slHr;X=>lULt?7}CKrVN$!?5Vd#Tzt!3MTcYse>HHiH3QxumM~W~c3oUV{Fi~lVa+_aH z{ypYi(NM!aSUi}#YEB7t5C9h1_`y#%sEUgcw1&xb7yxF!=Xoc16k(_E_?soOSf?1m z&nH;;>*+RXzguHf*V+)l(7K8XgbMReb4Z_qz-OR5J}H~g*;0K`hAPzqY~-ZI0bw2_ z&_Z!VV+tLu)MBuQ9k(dIWMozQ^V=9lX@4Rh9&CJ$s*GUqeClf!=qFqfAVti1Lq(PL z`IiKMxYgz~YIAM&BHafn(*GcDqd+j>)9Ys|y-eN_Vb`rdmM}MjBxOZ?{dXcpL%)Yw z_AOcv+7IsMbXf=rkV6X+rc`UY_m^NX+7LVWla@?JP|)D12!dqLJbZy<6#*#BO&&y% zahI0U(5~U&5dV{jSk}2NW{XN5QGvU5Is*d_zhO(Ryi?3Ut7MhQL|cl7N3tQ9hwk#+ zHWfFu*9#76G@&U8pNxv!dVwC;-tIHj6D9ZGD8oSFKbvxZn(@hhC`8QW`ydqRHrQfS zF2?WQaU*K zV=T<-f56^b^Kn!GwbfgvX5FoON9$(On->M8e$>@6aX(+P%=2;&86F2R^Vs17IEXZO79&9LGdbTRcq(Rbx z36gDB`r-bwN(26vsv-g*85;CHA+_e2h$ za|r2ge>*KhW3oqb+hG^1mI4~tZw0BJa`xS|s|01PBK03vgKxT+g0kvEzSyn}bkCr* zMW)r`{UOPz%c1hO5DVc<82T1_OHijBi#OBW{7oSc{~T{YL4PAIHtHnJSlz~IGShlx zML+C|ew}NpquS@=nhLy;W=49j-dmOoQ*ZCK&^PG?3eHKG-%!yl8bwID-JG^42;mG= z@i{5bgZ6W{xmEgm!e%znCeM~yc^a#$9o(IqF5jM@d+FP{2H%103+rNEpidRk_G`**i)2dZN1I(hCp`hMr9u!0=qzex8`KXF`G- zRzr}qgnEa0j!RayJVZif$v7N`sh;reajM41FoS9WUkbmZ#R2b+YSY8h)>OeCc@W5z{q)AE6CfTDxVgwO1y(b3|?g_7H zWxO`&B%euUX64WYkf-XP%OhM%Fx)sro{N%^lb2MXv&M zLLTag?QO*Xwc5}SVje~wZcEo?2g?34lwzDf=?VhlR?!csC7jo7GBIRad0hv~Dg_I{ z_O$jiTMJe7h3=^`vwp*dXo%p>GkvJt-Bphh5Jf*Dm^%<>L&KCU`5Q=hSX+*dXSV&G z#lS}{d;IHy`e-?bKDT;5`lIY%_B^J+&hP^taI%4o3dzQPRvbkk8UM|L?!Riuf!y?h za+l?tm*cT=NPZ;MXxkVb!Fvu46=!>=*i0Q{53B(Cdj(e?8{3NX(2a>WcQ0&cxLX)B z-B{g1IIc1C{9F}k`K@?F09Vin?dmQTeQ=|60_J707`E71bP4?D{lx0L12uzHe3}7=0-fyL*>8iYpB_*Yu&5J-* zoy^rcXJ_aA@NT;9l>MF6_4)a??;TiZEt0})kf?bqhV7QeIeg&Q5Vk^7UZ%HA7cJJW z2vB!>b^?)lj6Ti07%?mQqM)kqZadi8)L^|NCym9B_QS3s8AsaN+YtqI5z*v&J?I~q zu3HC~_rxOpZSjFvp8aK?aXEsA<2!4+_#W}AkS+MH924v^vzYdrJ*>a2(_RXQB#~2~ zvvca=g0t*ku%wl@Ai4^!TeG?wk7?rXg8YM5x^b*o+ja^H2F=Rse8qebO6D9y6>uQ7 zA#M+|lgFHrOvzyw#5 zN65s6L{^#uI=!~Kzc3Z;-kiG2kMMpRaV%D)bx6N0b#X{!8>sf4u~-Gk?BG+ys&1P>W|| zYzamoVUU2K$PKY)$47*?Bg3`!#!duV74=0jo~UaTx;AeMC@BTL*1W_`U!w6W ziQD{+Ul>-=6f7Fr+oyHnU?`zzDT8A&$~CHTi{RU}-05A)ARUqIZ>ddo8ywv812`>p z3llMB9}Er6Sc$okhUpRfwwS$v(%oE|{cwL@2{tL)Ic`B*gRx9pjwl|QQA^&`Or89l z;2z7Dmc6^MM|$-!1>!sdLl9wh&NKWnu94DNP#K0~2Fge{uPQgBYA64|J=BZFB$UIx zeA+UAf17?q@#JA%UyE4tqUdgk=}GEA=Zf&quKUw@QO{#UeuW(u&8DXF0 z6CZxv%+2tQDZObwIiZT zH~&_e323^0$Q04n!C4;eMfNj}gG$06hpz`}W?Xlr=v7Z0jHz?sPp0zlc%QIM^Tiesn*pyj> z728zZ;A%*bEXTr{LrX$siN~T}xzee2pP^TOD0nxf4{93gNg9L)qms1a<8^%yv}5+c z#QqE6CM(oyF=ftaXY}Gk=2`vHry0lgK08_;=5k@qL~Ql zb!r}Np8w9?efdzKSVP7QhO{>dM;pP(`$lwT?}IJ^p+VX3!|Cc)gm#4>!bN!4M@^4( z3IvmPMJ>A0=QMI~XTNKkh_&)UcdU&Wq2d4tGHF90GMrIUiPg(XGWSL? zq8k`)!5#Y^u`30d{K*OoJ{yAs(#32qt&9D#>JE0U_nelV-PkxT^yU1$t*_SEf6;5(!~EOBe{*xgR86y~bym$^KRTkU`l)K%B3^ff z+S_qE?C^D+EfS$xm`3bo?t{RZ|C2+i(uUW3UUUjO-79gJx%Kh$9C99V+M1AB14IlfzxlhlnqF_Rfys%5~$ zCK+gqNw}qj$D}vY+hVHiYovUL&PGy<4-0p}rb4-~;r_=$m}F-mtEf0S0@U$`YyK4~ zU05)DLwtTq1Zxwv2crc+u-c+2$b?>_Bhgf+CYmxp3shQEuWBfu>mD&f6N%5^Y3jGN z0$k|O19vD)IOys^)>u-ewoo#6TCf=gonjd;XA;Lx`Cua0OX03P(Sq>Cu!X$@U8Joa zh%|IIXm*iS`da+T_Jg;|H0$t{+UhK)R*8|&UBeHMC1uHg>-Wj*&W z54a(;&sir&(QdL|euw=F(R(%>c7kZ^g+zM}^B)PdO@1#32L$=|8NA2w?iLN3T|?A{ zbkGOW(3|gpy!<4xgZ{5i?c;uT66{;SZ@HI;g|3Pg789EwJZUK18p zUB8HZ{CQ*qL`jwV<3|)_mk-hEl&kJ`M1Dafh-8J0Wy^acL|JH#Us*&x+rK9mia1h3hCP=w8q8DVOdr9@zVdC4-L_JD zXkPN1O4`!5yEW(u`thjxvM{Q5?^_;fF=QNhs6-Z+u-XqMvaPSKF%ToBKC8jRNl49z z`Pq4dnw0KCkOC`AS=wF8WX}^%dv>kH^xm`t6>ka@()7Gt3Kjahgj|b*fzBzdVVW3d zW^W&xgCf4TxyZ#yRfWg>t(zbaXjIX7`?s&_6n?^6-3ArJ+ys^&nOGh~%bsd}C{Ct> z308cij4?wq3f~kmR=vt)U`F#uuM|O0XOca2Ix`eKaMEK_&}3S}dP6y3B7mr;qtiTK z66P23H2CoceS?^_d)Zqy4!p%pXU$uRWPE%Tqjfx|7p{)KK|P*gfJxQsbFt3bTUM#o9f2#H9jC*fozPifVV88|#sg>1D)*ufp|b@*vQZDk8>mxz)zYTnM$)vUt3k>0u8c5$zvW{So{;*h~bZXTa0 z;#o?>ekUqS7b-&UVIwiUvOveFZz`4e+1{R5S|8ml_k;zVZTn+cAP*WS*y)J^(;ZC? z1CI<}RVe~OA`}d!tzwyKk%gF4?6v_00(Rck2Li+dNBg+Bg$SRtwPf}*TzAtPHruA+ zKO_rib>rKd;ea(-S;MV<-6__NJ0I;}I&$?8nS5u3xs?`~U!NaFFESLKfSOsk*n3wT zYCreEu%pI4ENC)5)|sNA(bHtudFw0EyXRQ`w{x5}4Fl|;N|T-%w*|XJWDGkZj1hYe z)xootLLvrA)Qj5z=!6g4S${Yp#v6;4Cl9-^y}e1^fS<2$5SAPspQ`7x7*@0T+A3yt z<6`py7#HO}BM+=~Kh43&_mVOHc{={zlTkD=hxfvp>xz@{2FJ<#F=eA;tg`%% zPbekU@AS>UMrqj#w#he3`m;$L>a-aREf8!i9kjBX>}2NtiXs z8=63`+SXlagG#wKw+L+E(3d(CY^D&BWIhLr&MvQ?X^Ip_sl{Q51w{c?7xbeB-i2sR z+DN>`M3tLM54}7bOA%d#$S)AA)nqkMd(EWFI|a5Q-KZWnruR5HKV7ZL5S4)C9f<_Q z)h+!=&VSxJp}y}z>4>=FGVXY$fgc~ppaxDeBA{9ABH+6}YW%n%TTF`v7!J6(Et1n( zgSIy8lqJ4jn0KVSs0Ip_mKFneYWQL19~Bjd)@hb* zvd};5Lt?A|JzW%x0=POy{dtt7mNWrrMlUq*BPxwPL?l-6#-(2h50I`4AHC+Ew9P*hJwGMl`0YhH_#GNtsH&+sOx>vh8FHUAren;Dis;e6 z3psk4baLH}?F9i_-}}OdM@*cZnc6{);J$z5tWMkMT*juHg0F^fB?u_kZ6{Vrwt!)Y z;Nh{;zsM0-&XfnP^$B!|;NPA8FDISPqmu!*l|$!ZyD=^*ZZ~lCP>&MBpMZVNWDNbo z>$d!s2c}7166}9S2lypS-;gu=7!u*ohs)kdk)rwxpuVM4Oo$-Q`awH`((@+pEmoT$R6o1O z!omA{Gi7G4D3QSuo4+Wk@!OyNF)s56U#%sx{E&x8(L{Jdt+=jQ zcHd{0*gi?O2f?Q4OvaItK@I#F#u_xePne`PM+AJrLEjB|;}y)b9MkEmh@zqDTsz@h z%2A=UJ|PG+h%5T+#H7S6qk5xdiPC6kYn-TF-&v3jN# zBbAxk$4S^yV+s}wX^poPFVx&TN>*7L9iOg^B_6Al`0Z9|tT#LS9E{ssk7b?>#IG|a zpQ%hj2ZxG!CWAu0jI9aPt1MS=lkSI|a16J0+wlzsDz%~-!pJf8{0B&_&exU?D(V-| ztM38u=d%CBc?TTczc`PM>i}b{cizh!#X#_bP{6B4z|#;tj)YdN**>}xBQOrJvyG?V z141>@{=ElLExdw!9nE0qpKCRZbrJUk3-mw*#o5_NQ6ode{xDS;aXg`2yEOgmmiLha)0ZPRV=W+} zo0DjIF=T2v&ZyJv6_YHT#qfxG$32_GfypJ z%T@}=BsYhUALDQmuO=DU?MQS>zX}Kka=QEYvE4Zfu~t0f3f&_c@j*2iMulNpfSJ&# z)oPuuTOg%Tsq58bviSQe+wDi6UTaQ+lmY%gUcT=);DYSIPGmjZoPs(q|^H*zs?|=3fOg5=Vs~Teyu8fsThtMx``% zuYTwFPk0z*rKMKu%o3NiC;;&&+h?N9WiQ<8ep^Ascr#G1$u4t^u<838Jct-EQop4v z+L|!y`B})yRg{h!Wv}C!INZlD(slKKIhFQCiYTnF z25$0gLD;+cW(y0!c)Sca!`QHTfll1ZD&`>i494cZuyF+x9 zYW+e6{{}x11lH_!gyRWWF2c3c-mj-|bm1d)bCRd#$nZ*OtkI?)B0ihOB~=dA6Q@)X zxrlvT&u})7Je#0iP*JS&x@wKZPwV`f6y2YjSn63v8uZf&w;XehM(zkuyI0hA{)_%7Mr-(2@am{z`YE$ zC;YD;lR`ibTj_ajc2d!7`-*53NiuQml>AMsdJqFT(L2KdRkHG`SAZm8b7W%pGw1rGCoZpLvv2P;WhD)5# z$zqUAU(FyAff!cl47TU>OruGo@P^LjLKD`ma|L&^K%P%ACg|b|Ia~4v!)w97ghngF zqyh`(RWM~YXn`USv$S1VT8J$%dTuJPOuoM(VgXe=XTZ2b)rOuzzypN5T#a z7-~qXy1#m|>OzNzCQzV?UmFQ2_iXZU zORl(7TwYi~ zb`XRGUi-nIcZxk{TuXO;s0)Suo`3#DuV^CV%MM7jwY8Vt`e*Nc3_H!)XP<-7#4^)r zW@)LQzf95)4#(E|)YjAr!M$e9Dzk7wxoK=_HGB6RupJXI^UUR$NJV&ZipkE(wgreu zFt;&k3~{zPvD^i@4_BE!ZliB(Qg1=j61c8(J@}j0 z&X(N-OJ>fL^auQHcESi6fw@9fSAh@y2c*2Xg@}v+ge3YCG2;l4$+fj@V*wPf8bo)6 zSFjcVtQFg*Db);5z&*6NMCiLDqrzSBsPuN0YIWT72?F-G&e2}pmU|1hJy)|OmYcIK z*f)s<(b9;{S#CBT%o4Cdy4wrsi1z5Z%cNkL6l2#wcs|K(vKvcsdYWl%X)_Nz@Q^w8 z+;hyD)vKikb#yMCz5ZcW_{((+1~R(y7OpZOLAp3dNe5J9vn!E*h>k^f-BfxEP zYl0-u-hA^rcU^G71<#pRQQVzzYNY1Cfpb6lkqT%ym|9XN%72}#fVghJD!NdtXNYnB53GSZXnPyt+1 z01SCal$6K>6KSM}=5xssJirg~rO+A{X%+Y`P4ZaRkSPk*TH$8F)Cx9$3p=-&#mlHj zIG#kw_vmwoKBGAyLj1OYf7Gg_yDZ)Y8|1+{8XA=MUUvBvUpB9@oH7fkuC8vuXFmPO zKQ%Pen={Wm%N#s-&}`VaSx9GuLM7?SHAhE*?2+19v*xVTX3eSr&DK0IO zn_IG}8D4c+y>=H$4>F(^F062KrEG4F5YEye5#x%TQZm;bu7evvJv?kH`Eg8Xss)UK z3jz?7o727zH;(L9xWQa$32r*voHFz=HN}pv4uwov*=z~6?6S*VwNY576p$Jk8q)vaAHMph z>guZSnl)#dx+6!-#?4#J{DlhzjHCw44KZw}Z;(djSHJNpQ;?f$?z;02rn|Ra8mn2p zVRBDu6SN7jIV&i8KofFAB9In<=a6t0ZN_E$L|ag?v$^cz!ySN9+Z`(<(T<^(;f|xD zW}w@aQeamCNr?<^R6Hjn*;+V6wWKadMrhj%azrKIMk3z_35dvDvf*u5N0zg&(KJ^x zr4siH|F7m?$#WW%f|jl!GlGbniAYTxT9;sFhE;?cj8Pzfvu!P6BUrNQ0-)q?c2)Cm zPhCk35;5T_;p@OTNb@(iObHXx8)!TM=jI}gu=r3!E3T3Qilk(*IJh>^(K&9U6v<`R z5<||M zn1X^l=>P$MgAV5B=bFrnbg2nMAcXB&Vd2t6j7(ULNi3Cwh!haZl?_KN9vAPkZa2I! zyifAFkXnH;)_VF$wAe-duXsaFK9-G&)}o1aq_jC#FB}BdJQBuP0mNEbTIBBprzmAX zDFCJ(Su21uGrjTM;102=z2WLNe)U`5{*E~<0O?o%`-}S?d-SoAGtWHJbab=_ZW`*O zXbQuf0AGZDz;C(n&1QID(EQ(RzcGoaX=dpeXSk9O*YlW(WNtU*&_9X3jMy>*u!y+W zHnGkn&VdlcF>q74FuyGcfy;+-g`{AokXdZ5?n(-FQFbyiV*2~ga6QrX+s1#wL)#lj z#v7%;GU^u#0f2;BH2_e5pY28<6H7*2_}*DR@^=ITtW`+%0Ae<;<^t%e$&D`4aM97w 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 oC--@Uw>g7I{>0&tG`{YB;7AfxeqWE}_< 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 Ukhem<6BBS58JOu;-FJ%nA5qa>R{#J2 diff --git a/Client/macos/Assets.xcassets/wf-1000xm4.imageset/Contents.json b/Client/macos/Assets.xcassets/wf-1000xm4.imageset/Contents.json deleted file mode 100644 index f8ee5538..00000000 --- a/Client/macos/Assets.xcassets/wf-1000xm4.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wf-1000xm4.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wf-1000xm4.imageset/wf-1000xm4.png b/Client/macos/Assets.xcassets/wf-1000xm4.imageset/wf-1000xm4.png deleted file mode 100644 index 418be7ef2e35106995515c8b55ca06423d659295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63054 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%0Driw(q7E$Fh5?IVMnXa& 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 diff --git a/Client/macos/Assets.xcassets/wf-1000xm5.imageset/Contents.json b/Client/macos/Assets.xcassets/wf-1000xm5.imageset/Contents.json deleted file mode 100644 index 550d4f2d..00000000 --- a/Client/macos/Assets.xcassets/wf-1000xm5.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wf-1000xm5.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wf-1000xm5.imageset/wf-1000xm5.png b/Client/macos/Assets.xcassets/wf-1000xm5.imageset/wf-1000xm5.png deleted file mode 100644 index 413f582dd4874443fe352baef7eacddd69f7eb32..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63455 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

vdu@Z&y;no> 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 U=jMj9-$5QJF?rEyVZ)&R14!mIL;wH) diff --git a/Client/macos/Assets.xcassets/wf-c700n.imageset/Contents.json b/Client/macos/Assets.xcassets/wf-c700n.imageset/Contents.json deleted file mode 100644 index 5de1cafe..00000000 --- a/Client/macos/Assets.xcassets/wf-c700n.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wf-c700n.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wf-c700n.imageset/wf-c700n.png b/Client/macos/Assets.xcassets/wf-c700n.imageset/wf-c700n.png deleted file mode 100644 index 1e183ff2576ca94388f91155de050edc2e73a63d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65464 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 xK0%rr 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 Uvmk}mMF0Q*07*qoM6N<$f^=zemjD0& diff --git a/Client/macos/Assets.xcassets/wh-1000xm2.imageset/Contents.json b/Client/macos/Assets.xcassets/wh-1000xm2.imageset/Contents.json deleted file mode 100644 index 8bc7fefc..00000000 --- a/Client/macos/Assets.xcassets/wh-1000xm2.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wh-1000xm2.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wh-1000xm2.imageset/wh-1000xm2.png b/Client/macos/Assets.xcassets/wh-1000xm2.imageset/wh-1000xm2.png deleted file mode 100644 index dd502bb5a5deda69c05e4c51055bc0689bb3321a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 120624 zcmX6^Q+Op^(~WK0wkA2TZQC{{wrzXjlVoDs#>AZ1*2MVpet$nt-}KGy-n(km>RPL! zloTWp;qc%qfDr! zf=OV&#IEf(zVfnopSD`f>|`Klqc)R-KsIi-{9G+(a=FoqV$CnitxQc#mp(oQ;lsnB zawJAZZOY5bWJG@{aU@AmjE;=LkB*GcTbk4ln317MQ>jK(U))G>Q2VxZRr_8iQ^L3A zHJS`RD$!sB)PKb{PKz)XD?T8Cq{{V?*1wA-(S$by}nx8*hIUyxX|Fm z-D%RLl~gNXg(ALd>_CB*@P$ifL|s z!H^83pxlFv*NIele>P(i*Iv`UFtV_;q@kzJL5m7?79pLO7|_HDBS-zr&&ZK2r7TS) zoGA!3HYez@sw2TZ@XJynda^vV>6O5d=+u2B?9VHbY24#x$BX1ib)M&`Y zZ5k$;BznT=n(**GY)=7siBzg1Jw5#)%&E|u|N84DCtglw;Spqv)#<#3&L2L) z%c1t6;r2e^k{d(1;W>m{SOVlCB3KJE?m<{-2(fn@KnaB)^>9LhgzNLq-7d0Sm~snD z%tH`$KJ$?662npA06D0LcuLfmYx`&KHLbrBstuBVBn2$&g**T>p`adyR(DB|9t*- zV&#Zz-*rK^-gc`JJw4N4IyEtKl)%D^Uz{|joSlVw+-T&#kiJ|x>0sDsGR_E(&E!kg z*cJR=l=IrVFU~npE5{Rdb3GwO=@7_456XQIyiw+h)^XlNF$9N-Mi3p zVmv-LxPzPlVdaf4iL!9|h0co#m6`$uH@HT!BoY`BDN&{I%s-VBB_{7Acaht*G7y4t zNHRQNs%&z7B_NVR>=pTq%BSm^-SNxS+z}%Zl8DO?NGL@VQ4=^NoCN`HcCl3DWffi3 zu~^J{H)GMu=B?FQEf+J8@OTCMx*7T-yJi=u>&w4&4gW=beGIfdwlt>|zlO$Sj(cef zxl_^wfeVl8RLPE;4cu5cu}07kCEU6KDnYAO`JkV`8+WY+#qgZOJPCB+)aj(>b{0MR zUEwIVK}8zD_bX_Il##Av2Tl(TRg{0F9^7UQ=H)${kRvY~TwrvcH9HoH!(%TzuU5Pu zjGP8uqffY84+=1du{ZYlN^pPBF)LJ7MY(iPHMKi+pKA)yPFdzj3{J%Twrs3 zeUuBn4Sx*{>ltc}mhhRePsIs$U?{TSA_G&(Xl}J)Z&CHy`Yd)lcS3jMD0Gq$`juIx5b)O5$cjO$z5!I4n4lN&AlC&0j z2Du(wEc6?nK6Wu&TwGVze$h4i95b!IKJ2Rr2B7Nud{nJQ?Oykv*QxH(K-1;}2xO%= zl2BMTQ_KZdPF4Z(atdrm?6pAS*#^p(E1mAje@E)Se?NtbkRm?{urquE0cUx-OzA+t zlOl23W&Yb$ueY!(yLd5b$bu9%K6bm4`3_DpREBi@!rTMY4AdNSE-cd#imU4l-|oha zS8Q+Q10*V1FK5Oy55uOTC)VG(0Yvh#ikT-8Z6XA7W|PP0e{|+M>_TvphJ6=>K>>;= zZBqN_=&3m=qVjS72!At9I_S1{9UlFx(%f_{b8E5u4w<7V2}w!%t^3w5&+TRV4NYb} zz%~FZ0TAc!KiHJUzAc=T`_pgY`!s5aFPftkiU-tqNhB0?uAA z>u_pzL4J{<4L~z8(3I%0Bo9WeqPZD;`Fmd^ zK?BR`qd4{bF?ppFVC6B24_(A8FHQ!WoSZ7rPOY#z%QRnc4=v*Z5Fk>EqQ+@!Ja_M> zY;6F(w~)vF*JqQ=9|c84MH%{&5iuQEODBAA({q;-N_p ziU=st*Y7-NDB|g`_K!(F_78Zn zp0DJ|_61)P-%T-Y7j4$axacg7@+6_jP*auUaJrUWy~wFFrvV z*YCMw#365Li9#j~j9f*PUXr0Rjr2{m4SAA0(}?t^2LxW&@vQ$9O%S*vF&8J>`~)cn zi8w_E3p*#5FE>W#f63;5?z#gYe<_a^3pMf(LKZeQSXp_7=FNWB0((dQh4bys%AcpT z21v5p-}(L+{JW~E>TvdR@2?^vA~N<=&dN|4x!%~oYn-baXdhNQ1S9A~ukZmGNWBp| zLS>l>C)<3utQbk~_?UPE9j0Mdq(1;GY2$}W5W19?H}_s%?om;w zS!GKy9e%X#=OiRafmghX(8vZU6{hpRDci?~$J_djE6j|5bL8#2&Hy5~FsDMp1`8Y& z+{xAZ#{B&Juz=T@UVmRJvy#I4U-`~hM=L`nSe-$%zZ5}`idN+qXsDA!aD7LNIHb~U z^i~wZHdM9en_#yTa`!f?rNfmO_*K!ursSl}QqZT9Y;ZJtZUD|kK!~ni0B(m;7VKIy zB-C4)>Ey8_U&r*uqTdQ zyp$$@43B9%B62)%;9pcD_~5;h;64-75SD!&#^EuxlDIjgq@(JBYLmw-k@suVbW`0= zNJi~t8C4Q+ox1|H=}hQU%7Bm^?mq7WG_`jL!q`0k8lrS+F>1nNs`Xd;JowFr(+cXz z>(J++^g^YnFd$%{mAVU@qK+UE(af@6NZ7mUH8HBT|Z z0Wd)o!bSp5NID*76qGoifUxZU2!<5qQCsUpqbyaC@;LZ0jX&{rYAPp)QSLfdp;jGB zZkh!j@?`Zou!(a|!~$SsjN0FekmlyI&K#e&Q8rK(#>7n1^TRtKE|etlPm~yuIO&3C zYCtOw-Zvv977-D{<1XdcnBDLN98kR;Rrn|5L~*^N-EQEb;4G zuiySe8Y5TtV!FqF*ygp?x%JUwneTZAbPZf1`KhGL(1PL23q}yhDN6^8!$_$|f&!vk ziH4M^88uPM6ijL%YPSF3XTqeX)tBV~i-3$ck`$a*M%lajQAE{+roxb3wM(G4olG}N3$GBUDCd~9u=>*43M5}t&!F{n!{D=)JX z3#GQ+5F4{qN-I+ZC(GHe8!~Z-XiSpHAVtTMlYHizuMHdBzo#Ku5@Z=WJ`xmouXWT~ z>v$+k8m5mjRp9>A9HOzH?A=0wuCa%ES2fhAO>EbKOC3pg@znXxE|>9$M= zUMjtzHly1PykQcqkd)hgJ^5NS?Yg>($a(^p`h>VRmC?@+4gr2)+vNi0P|=eU1`G< zI})`iwb}Ojqle&U)@;D($9+!D@9?<9H(@3JPgc zcV`XvOlG$^6)ek91u_Q2A{0+an;&d!1BUyircL(e3u^k?LbAFVe-<(72vR1pQsIs= zhxg<*Gx6ECMyl*iXD5!8TN)nhVXulon#7bV;`>hz{v_oSRaRE#K2KN*)Rz<%7Umd$ zr2|#WFIv~-d%F%lh+l7ddjsYMAiIiP&`aBQP}8QSjLj4=z#dJh95aNBRfr>YD13 z$N2c*-j8x*{$!cb^av4BZe`}8|2V&YvHe=ZVYuMueeWwkX4?u;h?+~&KGpzHlG1lh zb|NIt)6Gmwgvb@2iK@h?qiVmN0n?Za*@$s-J2h@4g{`$kU%`fS>i69jzwSeM2WYJG91EE504Gc6*wNli@Plk_5@Tb z6Dn&A{0Q%W%N)$vIlAS}!80n|OI0AlZ*TkOfAQX?rHpmF3=Tw|q=357+8Ju2>=(zF zXibvo980n})z9Hgt1B-$&tA6n35|9HiiJslzv9$9W^U2zO`Qdbt&_!&aVxtEJa@{- zOlqlsjY2I|-rhQ&ou41}-uCr$bMW(u{-$5SAxiY^*_1*m*Y-rX_h*U5IrMaEZG=kX z$b0RWsr+3WuUdrL?sj=y=2D8?1h#p$Xw><1Rh;nk79sGEt!ePIi|so8AM=j41**|K zq_=i=n>y<1E(}1zTX}m=@Zi)C& z$7>{sv5DjcJ9)`1O#pb?nI}tZM_{e92Z#+iXX8LJn0}@>IIB|e(zqh;^CTa!mYFb_ ziRsZnjU;0qiHwlXO?`LbM#cJqgGGAkeBQjReSKpk!o$~2IhYOP)R&q${%p%et>G~0 zbj7~D`dGV|Y^JUwQh_^V9~TaS!b(O~S*2fIOgygRR2Jm)n{B+)2ITAso@L&y{c7f8 zW0UE9zx9~4cW~IcGhuv_lS!-JUzhw2&Vcrx8!cs}G1v=>izWJttgdN&r*-bJ{T3Jq zBVpC8t`wmg%Hm*()Rd^u`{aD+bPTE}7M9#+sB+?TOj4vn+P`#l4P@uZr1@1m1D!=G zON)1Cy(k3DQL9RT8X>FgxT8?Z4LoHf_BldLsAVWzDH4$uQE1w*@h+(`#lNB1*;P|B zG-vWIBi-QO;MkH1DWj(W-iqUKeShzarWjYmPt`8fc64CYr7T=O{Z z4ic8-)m^!FE-qHyCc#uA64rKRnIn>t&j9BbXh|oerjgrS(_%x|CqfQz(7pYOMbgQ+ z%|)rFkJtWJ$AD{S;(&TAAF9#`tv()}j*PD@-7h0(_w(drlXwX`AJEz3bQOS`frVw+ z%YbS`i4lVwH4RH&7NikQseOCmk}`MPccwPR70(Nh`ZMzy%FGk``RN|j|7ie^`u9RN zHY}f&4zx{uykQ`BsgbiX|CpGR#VB5)F_J|fVee;(A(YqmBgf3ZXcP^UAuf|8;9noq z-&{yZY4TV>nxGvkUk|6M(M!X~_!F&utQ4@VjE75DzeI_%1>LPpM-@Jfnu*n~l{UAQ zlpb66p(4yua7<2!9N)O_@J&8jOs+h(UEkhc8yeyly5HGp)knY{KLcJPctMd&2f%t7 z(OCl-$dIiSBUKrYHBObt<>Cp`)gS-p!CDSXXYbiPw`6W2%@Y#Amk;k9XEWhi zE9V7JW2XXW^BgSk@#RVi36FGwm!13H0VszUgRDq@I2E$TMrvU|MU#>SrK1)tSl%77 z%gRl2Ur9}*r>VGYXz7?NB%@5j)abaF3({Tzm=hC4$@40eH8o|=7YKyho6;|kkZM|L z7dIsP7`MFn5vG4uX&9~s2FP&FGUWaY4M8YI_3alvfgdN#g4QI8S+93OT~nYE%`?2@ zP{a+jGtkkMT=IG>d{YQhL6V{v#izSjF#vAkV|_xv9rX6|#yXgd z6hebe%i&V;pf8kDesB|X>EtDREA4UcT4Z?EK7D@A_>$oftfrGK6lxk8%J%x*ZdufO zddLbR&V`$(7S>{rVjx@qDL^h<@a_v zQ}Ffv1KYrph$U~qA`6Dv)UNff*KtAj_4Vh=v@A9=n$T)$_bvg%b6SPa0=0c6hQ4ue zjb#z07}Il;dI_{32sUC@kF@g-y&ON)#1eMW-3=rHAy z#pG%l2K@vC?~IvkQMAa<8`;^%3mvYr#gsAWD*gtb-#?%#qN3#L%Zn^!V9=cKIv{;} zS-8M6^N4ov?f|1eFYfh!@o>h<%B*Q=X)evQ%*+K}P-6VgK1#HraM0x;v)SeXT$=T% z5Y|wL!Hy6Dm}Je!z7NHQltuq_=1!YGB9NK=7Vx+34$ms-WMfs=6qtl9&9$qcu#HV5 zhMLMOL#HADp<%UX(j%-OSdG4x6gI5b?tCpp5D}!xDg>A~kEH8Kh-d}vYHyO#!Lt@}}hi5_uMpLg^`V1Q~B>vnC~yX|*AD9^&SZ z(*?bO>yKBZA(zk<6=s2OF>u|q7|s*SG$n`hnhT#F_DxowCOTUU!9)Qj?1%^tIX%Bw z4!?V<{>s0s-UDTfh7P~wxHaV>oiI}XJNrO^si$Y;0#7cqTF1_+k(F`ZaY$o`YkpqV zuaYxP$>O^gZ9#23kz0>lzoQ=W>dFV?}p_h>L^Y3IU5GEHLSgjIl|;e+tt_D^Y+$RfO7<7ArxD@ z4E*|$NR@Q-Kwy2;SRQ!pHDO$EoGQQTbvgpr!^soClHM)Oc3rmlQ&H&4Hztc&> zk7sIukF{aO$#gb}!X9B}-*^pAjTA9nDagg0(7;J2W(<$e92#n_2oD?5*C_NkD{x?h z;?ey-SDX_$SEYf$BrDN%kkkW9Dk8J2#c@u7j&RA$r5x7QTS&)BZI*t%T#5>R1%=;J zrl!t;hw)MX4nDcGG~=dL)nd1`{R9c*`8dEjQ1+LbXZIxy3t>M#4(tEOLd_O|p$kQ4Ac2~K zCcA#+cJ7LHb$M<^#g#Ur0ow2pl&zoPc|WdMx_<5Ne|_|dJsg*tcAFE-XxsU$Z|H8_ zymIyS*4LAgd=-MJkW{etQZOfYXfBoY2ajA;T^J-SBCzr!Vl(8IFQ6?tQ=*m0IfSoe zc{d*(oWNk_+*xI9(EHhDv>r}6@djI=<3p+rQn~*rK~rO2J>I8*RgCgY_Qr{V zTR19IP+`8?+A@H0Jf1C3Bp)PST>2R*e01~z-`>H&$04=v1BVN9e{_}hRFy$v9*z*Os@24?Y zc0`J>_VirUI6=W2N%W>n=5XBNdp+ao{jlWvxUlpw`07~kqsM?l%%Av?@f`>Ceh=it zZ;)6u!{e@iqt!{f?v7skV+gxcfR5TA*k7d#rsrS}J5{WpnkYpBp(xKhXKfqQiaX zbW6rgoB%S#s8?tau{KLuCb6=+I}(RS$I1ppfzdM2R_;_IbMORlXW*o91NU<#q}?{K zboBJa4Gk{t{?+_erFy2R1qHI?#rqHC0gv&DSB@L^l44C~YBlW$3(pMAwf^@T#J* z-M4;DPKor|SOsiQ<>)zCrCpnPl{L17hVOevX&bGMy^m@&opPbBSUTUbe$h(z>60MD zIIIIMi#lyQ!jyQv+>n)xTpO9jSrG6+1ZX)r6s$R~YF2KC*SGS>mc=1QuNJ+w3YU_{ z2E-eaVEGH9xh9h=L1jIiStMxJ6oTlg6&1|0B25_EB=XE&;M9p!!@k6XyfBC4ptkY6 z7dLFx|9*6EnBnlcREp31sysOYAE1s27q`2>_q16Pvi;VdumuA8(}*z=kGny3$lA&( z(Z=@7Gm)rLzAt=;BYMF??w26@=m;6oD@;4LBH3*)@4 zPzetfcao(6TB~A;ffJiv$b>TMmkU{?KS*TM9tos{s5@A+KN(w%Yia6`#pzSNLVXLR zmgJEL7QNz`PH$Z6Z7i&v#aP~$3=Umy{B*Nt?1Sd*$J7_9uSA;=oemRr!B%;40Z7KK zFRKX`Uc$n}A^oG_&*3shgO1yx>!p%gQgJ9aID}NKGk_ zoa@q~qoKp-nVmw|7mO9GHw!y|c;ZTNG64Pi^Xc#L#otbk!TC~IVnIw><`k7Y^T$Er z?T4BOF2Rnn`d|H4YdBFdAVqp;*oA7W_;D6mgOC?SjPf~FB5gkh&M=en0Vw7mw%KL0 zX?rBmF((MloD1v+6YFi!xqWW@X88<<_c<0p#}OXsF56wZS~>bh*JK_UQP2=M=z=i3yXeD2@c(d>8fQ}DN#-{Wak99v;iOgYG3s9fjja78E31GT8l&LDpk>*Ivf^H$;Z z7b(XreGdEW37PrEiW%ZHTm6&n)1s>_KieC=~8i?j)k zkOa1sL>j!U<6m{|X4`&Q4u-oremn>G9)!kUm&tN{mYh{>Kl3&*2U;`!hFH4*No?T! z!O41`_2tjrGNQ3!r)N5K0*@Od);=n*>_sR59?iR9YDNQf3y909zyM(8DmwTx4a38W zEje+H-2agb52wk_nIw-v{kP?M&A;;S@W4><`?q~LcgufRu=eG9V7d(!sHLW7RzkJe zMg3m0fUIRVSt5o8M2R>M>4mOR2bkyuvCT+NO!1rz18-@|p%PL)88pwZoYqesZLU*( z@8IOeoWoV)CC4 zMg`peN($UCYYwdO73^=!&)+RprcL@NvyHOO0g;^+zg18*RsBhFTQ`XM7gN0^)AN@Z zuM^gXw^0nF{ZRPNkx9UBgsK;Pfe?^!ka$q{;-bjZs*37R8~ih1Sy^~=bTkb$TIt-a z^Ln=>^WT8$?f~)fzW>s`-te#gTUEg8yC(&2FIaNM4!2% zoI>Cci->d8vn7>%_As-IFVxPD>nir4fB!CE3>-^p`Sf{#Q@t%kWY5tCo@~PX9~Wi# zFg4`pjQSH6vWIl-)~Ww+5aK1)#*N|^!tZA{?tuvb7rzT$4g&18di|&2q2y7JX8`wegu?sTlLjd@gkq& z)@p$7iQ)Fw@T`C3;k+#K=hisU`M1gIfcoU82*AaQ$rRNC`&baXzT9}jiuWkyU1UR zX)@9a%LLjZySb2$QHlYN=y`b&vfoM{4vtt;Fvf(!fEc8dKZT(<_-G|OeO%i zA4@A!7V|Mype`-;rY9M0o$(gd|XOO8gn3g}Ht1XQJJ{+cM0iJb$$D#tG( zC{-IeasK6(d~y7m?0sHv^u5+K)PFtG+`frw=UJxLtm*O@FA7ry2M5Q}ix3^!tfUzk zQ&ZD5X2BF)VU`yZ9hGg4x0Rtz+52Qair!nxg`pf>kN|x~V08 zUzx1w?)mWhdY;|(d5EH}$&T4i`KD@Zm+MOcUpd>aGd{MJRa(3_RdHS<2C5}ZRA#L1 zgYjci9~KeCFb%_p}=;GUt_HHCbC0=H0fLMJ7|3dZftl`zLNHiL?a9rKMB4&LI->k5Y zRzsKSddr;TI$Ek39(Luqqf3-`m8(21;-@c6 z>~(pYdK#AILZo%pxcONFWn$MjLt7kRVvK!O2)A+OM6r5dWu)_njI^nbdZd)1kd=-1 zEaJuO4|4%uJA(e70fJurXUogb3QMex_V!+x!tNlWRO{cZ@trZWY@TP`7cHHp71lcY z=JAq@_o|jqnqPAQll#y*&}k!vca;HGhz}*!55=y-e3qg2$$9dahlforUi9CVl5hUq z^WsSDWA_a?2rV1e9p|qb*KM}@d`--mxAZ(U;-KmeZ#yC=La3OSVt{NLV0OM*tsAzR z3TDyWvF#+m6WLtFa96}3oX>CABP`_FUm#hE|E%pghV9I1tA9`U<@#rFt1xUQ7CweV zoZL-v^8eg_>h+q@-Fhhd;#(T+Hn*NM{R5B~<(n7rB@&BINl8&t*Phl&{&qQxIzKor zb%Hy`LR#r9O}NTF{^a<1r^-pcb|oniE@|$864wNV*w}ZI%n@L~e!1CgDQ{?K_;;Kj z=NnQ&E*A=3-dE~HOBapnf^$!xU86bJ2M>)f!$cYjWWs{;qQlB6T{SW{Pqr#H%Qfm# z`^p&+V)t?SnV^2~dnw^=kZHve?w|jYqy;c=;kXT649VOzCj8jM`_QKp`8CSU$0h?F zBKq+8^!cy6_v0UPL95g5!0+*<02dp+ER)i2HCWy?tGDdYeRrcD znZ7qKv%Y7uTTfg8ANdPj7ctS%uXuQ8Pw{c_H`f;=sub*1cktgH&_B5;AaJIj`m)l0 z)THu$W51MYRy9G-q)m0ZO+v?a%cPl}ujT?^#C&Fr$&AT_75P3MFsWVt7i3LpbZKwH zwf>jr>gt&Dd3JP)T5?jXg}1OM>X`c&y}P%a?ChXrbrL`Lx@OLAIIm5`JH+WkG};r` zpUc<_n>1x~F+vr|(J4#+3JIBg{>Aqq>%toBWW}ym(EU@XMwValZ3USN!`7?2A0ZA1 z_^7Js#p>uT|BLnAl4E#?c<~$*A$8yi{A3*&j;s#fpB_U-QcW@pL5-8(UN^eppH_Qr zTK;L*VLl#sM2x?HBTvo=zuTshk!O`H<9vV0K5N%~XBIE}jp#v-h6V2hiUe1Dx$t>d z>3&KV!#Vhn)WMY)1W0OUMr_V1^8`Bpt(|p5rlbV44+LxEC0gcYl~{3kT{w*6Bq^yJ zDt+?_;6qS~DGQ$Jl{+)lw%UH?23afwL@v2^rP4hA{I>@1NFDH=LLBg=Ta`Xl@Ws(B z)nep--*{r199441l@OOuzYs=Hq0XpQZsP9_Osg7zrDdB&%~Bd6B<;PUNVs!A+A;Nx z=!qY+lT*uCuBB8&u8(}H;qN?0Cgf?l3nR+-&XqyC?H)h*?awRZt)<0PD~wAqxYQug z8~Z{<(=xUlj~#B>2SHrR!AochqBaDhlnU}4JGt%T>;(!=b7x|77CP^B3SjFg3r~Dv zY+||z3l`H-jiXxaqBE-!gB}4c6t(`ARZDJWZdro=f$0Bu^p5;5rLnjcU)1V$>n(SH zwOSN1^!uDNe1lWlb8#smb15AXa4?q2igyGm-Eu$_ zKTzjwGNnFp1F$k!NovnyWMpcQCKfCjf-0fb3-!y5@#IGS$$L#1DjrRV>!7Y|^uKe>-l! zPeQKs8P_bQz|&+QXZtQ<<(o>6W$G>Evr;J_h79;8AS=D3-7 z=_PrOn#~sW4R)xgpAoZ)F89WQHe;=w2ym^+yM@a1gMKRmO>C<>#Bc%q8!sZ0y!xw_PUf zX>+p4j0TV9!(>Sa_8b7Cd>CY^MM1mQJEAn}oIOhji4z+0&O8(2+Uz4h2oXK>BFKDG;91!QV8v^J+m(1!hY7wbk4W3tLG#N-LVtGapDg=?%+vt68= zZl#8d#{#rc%JPIeS_w5J@EP>Au}SK8_dR#JyIMJnlSfE0gewArQ1)ZVT3yms{?_b2H&axQ4G1di;G` z{&w{*2gVytu?Cyg?Q0{TRH&fD?qp(wpCxkyzH|VTae7tST6~A}6UYQShC< zOXSIdfh{LfN0;^ygU~;q{X-Qk4KYQEsngVX zOC{v9B*U4cWQ~gt$Dpwmod+GH${PqGoOaNi_X0u>(K$jtoC8(Gvuf)irfZ>oJW00v6;+AtxZZ*094WN}rsW zNRz^Wwcs}yVRL`UQnv^foG(xZv~(72W~I_(RLPEJ`jVU?Jh0AbP7WY{3$@!sr|=G6 zR_Ye}u;(gET4L)5{QaTZ^Yyznk9Q?5!`1%hkLF8;IlPSaQ`*P^Ma7saC$)8ayX#B| zMuXRbr?mETWKGVD4gQ7_>3WQJ{?80oqZ;qS)pe7eoea?D+v3}VNWG_vwa%+Bf)oU+ zceYkFI!v#B=K)WHRx_y$KPNaWC&XuYt8o{CVI;7;I4M>C^dwb=L|3>LU@{?*0~4ht zA~Eo1a%3>!OWAo>cK|vfKavaHwH)UxeUc05$__E*aCqxB@xgO>CVEX#iO=}tYJD!N zh`%PV1$5ia@>ifgz~L2`8CY2a2nNZ}`!a{#Ssgflt~(jR0Y zFF1jEAehLtwk7}837!jX?(P-D(T-qFnDd6f5~>SIaJ|tR@DHAwDhuY=-0th+^qU`S z#&BI;@UQ0>e!IZI*3kwAgCZO7>EzBrIl}tw-*K3Op2iJz&@woLzIP0#rn5nU&7$0l zlAGKS2rR_-T!0keQ9gZ{6cT|d=bVBZ3#}#T+0_b zp2hZCHTU`90YNg!%d0&;?a~F0mpEp6u-ERabS@727Dnje$c8&U^)Bzds7;bhttSDq z=E=MDojsJWf6$vm(z~Lu@#JkN(A zQ8{@+|2BC3^bbw_j{~mnVuvlq=~G`_RAkcBR#A~NI+B@cZlN&(LS8zr%%!t??~H3` zp?(T>nxO1b5~l?wpYKrdEA9CPzuGsV$a_=+ieefTa-BRBjg^yC;SHH!43OK{PZV$l z6ztls>BI($w9j9W3sY}yvfXIpV5Q3hf%nX@>gPlzdxf#gp^`(bOJ-dkpu!@GPgN5~ zmTXpPvY|BpXQv8x4C=;XvLg3WZIm4E2U%t*YT`_61HVw&0{+)nDr7B2ZkjlEd;8+t zob>rh?e^ElweLq!hN{`VuCuc;b2vO3Og>?~x`4D9yxw*MJ-vmjj0WaM3jGkBd<(*-e_3?37 zo#l0zRLn9z`_9X-xKy|)jiq?wV-oO@{=K-} zzk^J|jWlz0O-Uy_>dYE`aZe;VKm@YKT=tJDWd9G@g0RLUz8iBZ@vvdPsU1!s&&`Ks z;m}FJkx|}w1)O~TkQgIhS~yoG3X_K-vTHr7pVEZl%g(ZgZkvxV$98V*V>08jlMxV7 zP=nkHm)Km}kGqmYK3!<0dd_Fc7I9_~*5lc(R=#$j>yH;L3>r9OcsIr+gSrOfS*b67 z=|pN)5ub#!Y8)3123zUNNcQDbF5DpKQ8*jYMfC2=GMV{7e zxVc7NARwmXXmyK=Kt@bqa{WutNpQqyi|xU+No!n3op@$X>K#m2(M zep;B^jE;eSbA!^1d{LO+jHXdoppuVz7|0M{OOdgLk1U1FWd4m*X37VJuL@1IO_0CO zl4Fz;Ql;#zAa6Lh4|94R-GGAQq%Zzs?PMRZzO~VWWbR<89I);dkD96yf<7(7D3bO`CRw+ru${vs- zXzbWlf497x?CtIg-)j_Lr~;i9HQJw_2$CQm9S=9QKi4VYu@(tS*!$pOV&24s=fqMN zK9Y72MX6P3prwlu&GDgcu(r8@AtrKDYR&V9qTLVUry|g-q*^3JGT^1)bE$+*G+)Av zxOczx_4Q>7W^cz(z6_|Ax3-qGB@af+*5Ixg_DZ%3UeO4AI+LI+CA^$=rh^2^b8DmsZuJHYJf+lM=N`$ z4<#p@N{|zFvNW92c>~uSusQhN9*=bZ{?T2Fn;&#kFkSu?&+yW(y8Gi}uOY$9nTA*X zyT?_W!nH10nSJU_K#ntj8U1bDqvvIKch|VGx-vDn)fh%Lm3%H5fepPpM10Y&Fz&6i z()Jve;;3SHhl`Gw_RN1?ct(#%VUWTlSti{WbH68XcRTY*1Xpi+Wn}{PBAx`IXpoOL z$Kz+Fm`J2|$yB_Xy^&F(z{mKP{|aUf=U)lS#54>nq-eRS67@>*Z^MiV89E|a#|;HF z&Jz zWFlXKw942)FWl8fexDhid*b&w^DyzSffQq^I;70OnKAwB2AJuGq3CEhYd5=%$pOWs zX2dQKP!f8293;^oBmL^&T8gz7tMS~f;ol14%n-B@yo{J`-t-b7a%5=ZRK9Gxn^NjB z%ygK1*ML>&Yromf-kbDopMC5TgvPF}Z?-mL#^fMSvzd6Nf`u=PGlSj<->pxcEhHN` z)ocRoNFOc%KZ=iPH~eSXl~I1-A=SyR4}qCD7EMEgY+%guJNNo1EnU$)Ozp&?e}2JQTicA4jIq9SE5B36}O)< zG`T(e9nr)MrnU;S5?x`{B^2L6bd@3+rFNbP`mR%LT2%Z&H$tIZe(k<;W(Hc)XT^C< z=MgaA^V>R(ofo8`l*kS>I(urB4nRqF{}Fsgw{xr+L-Dg-MmW7{FqfKqx)POw7hIHA zYSi$3L)~~T0J%4XASvD6Q>x0Sl#BPo^iK;b3(G^-k=nO(FT0uVW$`xLy6v?x3<(Ko zL7iHeT*3nkloL~$BN0ncO-V(ET^J~3Ox4vJ5V}(`B;NiHL-5T1MgA>Rn7tSM5tG)Ta~R(5ji%YUy|!3M2Qb`1_5e)Jc9 z+!)(NNkiX^Cuim_gw+?l5n&d;K8@T(>F1fj^MpNDlLKD9h@vHWznb(3$`RNWg;iAk z*UTokbVJT3?a7xHuf^?c!vdL71%T?rH%)5uJJj8N2m7862;~2To&|D@)7k8QsM;Hi<|5K}X z+oqphrUXqno%sO{u4bStz5TYV$t(;HlJ^TMPJ)^&NlGLfuI%D=S^I=Vp0T;|KxTEK zYuP5{sgW_uhw^6v@N#v$tf+$RH&hPn=CQ}|f};sTj)T9eKWQT?ADhbe;IX<-(J1-8 zlfl5_O>u&O$8{~SmcE*nRTa!c)m)^+u}{o)(p{B;a-#B1kv%*Ak8v5-xEL%|VQp?i zBt)eEM`TKLXWD`sSY$1^D@$h)meeIe%~6{BdYXvT{WGK93`&tozUkNy{Qzvq4PZrINWZsvY01 zwX^xb9dYI@E3-JIE?{}f$3jBBolW^%%0!R%X|^=*&p9V2Cl($a9*=QE3TT|+z~fgWJ>CK|z;iHco%^|K9ei3(r6Q z`*eoe*jUMQI2@ji#bZUbgv}a5K}N4ss%){y0=HZ+&q@WfaqL(geutni4tlNhet8e6 zJle?B!Nzi4@w+OKs^MWtt;=gQ%YfLXITV01O5;;AGt@skoN+iWXS?N&yZ>_6uH74d z`ioyI1n{eoi$)8YGC6LB{%lr`T|M68tU6zk$NB=atgNkLAbEUbn8wCNSdA|~zku=z z3M?s2g}MB+Nf^ZCb9L+Mdu^9FD4rEfQm#cmG8{hr%Pk(v)XYYIP!QaI~ zi00<-NoBUGtxlPr4WUd)yO-`^AsI0B0n#OrlR9;Rqv03Wt z?V+LmK9RF9VL6_Q9nBxl%k2|pfy3zlr%-CXN}VdkfF7x6Btj!2BhtHBK->O0bDq(vF+4m}eWJ%BlTy8e?9ib@^>2H}U;o+l*IY}pGvn0R*~wVP zu};KyCWaRwKUlL4NUK*S0%1hPj+s^M;~1By%PXs?yt0bMM@MOFbeM4-8tCV!CpSNj z7Z@A|Dp=fnsVxmGvQGRO{>RV@My7kl>G07W>e#oBR-Aj@*nfQR18;q~N=`g)3x#Ig zQAznt+OAj1L>Qt)gs136V%j3~*@$uw87cn;kIh!Tjv?@QIGYd%r832EoW7TmGd0~p z>IIUZp*g5nmrh!>=@ru)jAjx~LCvPY;o+(iJro&-^AfV3{_6JsMCbS6uEW&b)5Fb- zc9NxHH~tqt%S)?lsN*mlcaLAqQl&m&vof7MktEDef^#S>ub}d(Do(xNd=LqZjE>U4 zzyL+UVU{My&C8?wf&z+glq1?W=u$_Tg-A&8irCC74Gj%Y-{2rk&CF6|<2?HISHJl7 zv&PvFQEns}8yTAnh|voeuWEcU{7wcCdb7UaC=9uejnBF28$0FCW6Wz!;Kvw8BUO2M zUCUIqDVdheg_vny3Rsf4&x)AfwM@E&b3HOPQhB1sBI9sgBG%Q_)%4Ey{QX-OFIq_L z2ivKuyPI;OQFb~!rq@fS>;lwzQwerj@(9Y}6o zE|tz}=3NeeGukF5#>WVwgeOOaXmEJQmS=&}z**@9gbON`h%-?UE3~4rnwD1A(4YSC zA3c8V+OUzfHIW%`Dve*Ut3?m!|)^;l9i(~_i)}vN5(2n_*k6evCP;U+0Smi{o^PX zV_ZxBKtG`rj*Ay5_8UziO{IZiXuMfuJ^- z9Op%qpO;5vrKOYwnm#5-PEBz{G&McVc#zIt;@1rkMWQ)Wl%GeXC8bndRZZn(Wjs^+ zO~3bsxBlgyzx}LQH_22grW-quZY6Mh9wxjEfNnuZO|R3sIowx8T&SUJ%sjZco3o#?U1IGmS& zb#)Ci{pI`L`+JRz4RoZti`x=#BEc>m8XV%ZDnCEp4x?i}hv}oTL*(?ktyF2BmFJjv zk!UnzDk91V4(O#wq{EKKfR8dYa+kayl9Dz$%Pcz-W)edJp3C4+Vv`VJcM4f}uAPg^yds95! zdPG1Py=cFtEurfq4O`WcwZIfAZ&sCVPOjfmQ#4bSXRjpg2ZYp#@yXH?Jr-wtmEh%I zx7>cqe@snIvtt1RSE%p_?xHR(DdB1nI>oiT?4lM;r)0I+hE6YK@}r_)=zXqm#=SCuW5CM(9}6Y~riP%BPSRnnB$wJP|n5Lwx#cgvT5wGFgJiP5$% zc$z!PX0}BD*K)ztM?^Ri6D23w-jH!PFS7OZ_0`||z{7vgP+vz!dwXemYT9*M8;u$` zos^Mqa2?&=F67|?wqWJ3V+T%p`MTwIc;qt`b@Jy*Ddpa(`kTe4-vu)g+CH2MoTPN1 zOIe(|&XY-c)0`&mMA;mHq;E zJDXxS$29k;Ah$Azy%q+gyTde6LMsC_m)ERbHL~fVi~jR$T?yLk8q&xkCFDPG@TP&& zIv5c&Qz10l;-C{Uyokr!F)WeL^;gMj*%|KMx%J1#$a(YIDYS9assC9{j@J~b>jCFD z7Mm@Yn3yO$p<{7s4|T?VlciFrg8LqLli3Tbx7I>ylRx8!ed-)ad8PxY(#p6 z(Id*{Rs2Mv4O8Lp*vGCU?mUrg6!gWq14G%oPGfJOYs-V>0?CWXH;;Ixiyz#a-+kR{ z-*Yyv1SfWtvKOw7-;q`jU@yKi@w>BwGOm{3=S3TS^pd_oSfZe(d+dmP$EIu6nQ028 zjiBnt>_{8=3|ND)*;r_Ne7xX9jzz}dyoh$o?RUQK@Zlqoa5Tc$jiyRWr1SfujN?Hi z2tYC_SdgB;Z0bOY_Qx$n4l{z zyL9X7)hoV9XR#$xMtmz}O3JLfmui#BOY#Ior#Nh^gd-7>-kYE&PrAo zlAdeM^dcVXs7wdDw;o(doi^RU+z##)*v1pHvzZ9zrEH+}-*)G{e_K;sMFWHVT$y6^ zJfGla+8J!)9;Ik@HpXE%q8;2nIy%Dgp?1`7pj@tR7VHML`b=hF>5k}fdPj@ba9dIW z!nrNSSZd$xFQu5<@9^6f8E(t13!+1AWCfXokOM~$SIY%U=_5LbD>Tl+e>dD zj%BKbT=Moi!9_evTOF)$x`}*(vK20c4s@Ic+9-@OPqVBoCiAgHKI{bFWWEWRi140 z#6s?#evbBb*>h?fk5|R?ofcz`GKMJsM2L7e2;mv?n08`oncrn># z6f+ipGK_`!i$_XX-Dwf)rV`}NNMxc6bLo5I_b}Sk%o&t|89NnSTf*-#C)>!v0)bI( zmk>O4j#&yD-U&IJ42JU}*p@BN{?7KDyBkVMN~o_-21^E|LUn;SQ{Y$H8ys8%rvia3 zv?1`k>QssedT>4fny@Thc5_7JTo&xuesrs z-^$C&Yd?*L^(AXK4gOSxEOgdme6p<&`nu14rO1K1oL2c!iYcW#SyA_8Q)7;lJT8t+ zhuF7xsgaj_iTQ0JgX~HzJ;=;Fq}gvd`7eJnH1fL>*GCx+DQ05 zH947kBF7>V;hbjMzJ2!<+ji`nUr|}kl_{Og9Z>5ti%uK(*p!m)QO^TaDDzFyDB`Bi z+}vEwv4IyLghy!|4gzwawqoId!*=)5vMFB(?xL{4x)oe^gfTcxU^ieM-*C+}p9qCQ z!>9MizH}`fPlPp<$}+$%np%N(1tJ%VnW+;OjKpF#W@CWk5juk_U0c?18oAFF0KDp? zdybn95zy5!JRti#PajA4K0%Nff7i@ROoopA7Ry99r`c}1=bnE7=7Ope2!C9e(lkoD z!Oa|RHp{8uy8}+g?-sVXHwand%0jg=De^LAHn^sD zfyoX^05oAbq9`xj7Kvn9 zis^X3jxAf8p?N$9DMER<`8-QVCoiC!4kj?dd-xDUC~!bp`B1`|v5ijlV&CAP^lq)QQ@i0yXpA8NO zKV$y25CCPtWrwA7uAw(}XGCg@+r(z6tNRFTy5!>am94GcKAp$(rEaNIDjJI?a#V;u z40bpsX~cy)Wt(LcKsI2$&Zjyy&2nD~2HSGG=X8|Q6JU!gsO){W@}V&6Pz->r!}!vO zp_X)LQa)^G6B84W6FD9khjSX+7=HcG!~d_griS|Zds)!RPGVHpga(j}zEd+KZa5HD18PrLPsD`pneXx%)x0~SDIXvyJvOl}Z7ZVU25zvkA_zjl9 za88rm{Hr_u{OHlXaARY=*Q6QLC=OJlOnXA0OzwFW^*NeK`C?p-iQzOT11w`JtS#ZN z%p1?5XgF$zvf*{1cPvoQSC+&M>eK)5(~s#AoX0w&zLCzah++Ze6J$IZ#(6N~QnKi~#1PfsI9G zU&$K73^7*w5(i`CAvppw<7-l0Ym7__RY_D+-84pZ?KHRIZbxogAcu@ zva*~81_xP!0w612(8pjeekx_m3T}DTtn~H;V=5JF$Gd9xwy)lA7LE?7SAGUw8S)Zp zjOkzio>w~O^or9dh-*bTrOM5V(Dm0{^WIZ)O7$7xwe7uHe^jn%X9cr~{1&g;cd=AX_H*Qkg$TeMLmMGQ;9R{Uw#{#By!F%_!I!VaVzInLB9SE#M~W+hIF=x5Mj||<8V%~_4fAG zKK9hpud1r7puxexW4SXP&qi){g{lCzhVS$vAFs7j9fAn=2WLiWq~lc}B=q*F>~7KP zXH!jFd45oq0%;WViYKO~=<-dMJl9xTd+(_}jxSf6oSZB`REP^bl_E~5W@cwNrNS`` z%Dn1Dj1=Wqc@Vd01S?gxxzhAz1sn*M($#V4T2R?oEq7~q+^IbBm(C$iCkuK4UA|D) ziCD(roMOBE?)(2@Vq%gP8KzEhDcl#YGC=I{G$kap@-Q5)zd|btMf94j6)+%;feX9GK6+2@bmRSfqgz2PQo>@{`}^ z}Jy?8+SD{G~9ivkKxPNrlw{K?a(_S zibf;saPS+mjxA?OKzadS%}jUh#&()SQkvGtM9ve-QLu!m7nvBWM)@-4P7}2_`3d}E zMcTcNe=AkNw;5++$Njp9$nmmxEv0q$9p5qz=M>s~_dW3H&cjElu#g}_f#^o`iaipa z$DIlGN$D7m0QcNd)_px1*NzZW=5xTHr%mfss+=aS|Caimo>;owMWsO#KbMpg(<`rg z#Xp|P<98<5)XZcNi*1=>7zsydW_DUqQ$#pAN8CGC>_D`-$joFXs^w!hQZjdXH!%M` zh3|0AobHZ`OlUzMh_r`|dU_STgRFH-Cd=%HpTc?tbvW_ZAly(csV! zGkCcao`?rem}_SHGzuFpwxbe#(g^ToC_Y)2GK>>sglCW6kF9rox4Jq20|%P7@7TQwkpP-BwXey7!QMP6zszlGQ7XP= ze)ke4Z5(%vcQyr5V9``9R2tHcQUXjz*j3|rwxIQYFwj|*y=}C1f4jq7 z6-lw&co)9iTbu!ZllJ~t`u-FEq=VQw6Uh`^d(D*}KT(kIY`3Y&iBbUV@pzH}V`$(^ zO-|W9Dy8{aX;4m;f`bkXe>m{EGIB;PcB=-d{dXEM6_TsS)N(m|a+&wJbzw<{lqB7r#87)?j(OL3B=dUB|_w&8PBM z$5vF`L^y%9q2+cHaane9+Uo^Kgz9q)_+5}!fLi}=wM>L_3haSL9)BN*enZ1UtS^k{ zfXCk+Cq<%T_%t3dQ13UDDZhzIoq`RdwKYNeq&#*1K=n$6vArl=-_I>9W9C9Y`Ig6l z#AoQbS6uPsP$)EUDvsNkXcLoDWoU8*ewUk@%d#I(3MeWrwirw@ORzncLYWFBi=dn6 zM%m?df`&vERxFGAH|4oD%F$E_y;YnWrOA*gK<&LgH+J#^O!}0DG2-?38F)?82Zq~8$nnTTICE@Uw{Bh8wtwH6f`WXmPQe9;D!*nRftVuLw3!ym*ihM`#OVY-H+?~! ziPbRi(x{+zmLCaurFgT>?ZWWpTO$pC1VzizC3OBJmwarlkJ*`Q;}eK*1T@ag$z{8XgQtlH`+Uv*JFr!Kg-R8a_moPq*M#AB43n@6*8h}*{rX_lV~E4G4DCan+>xrny88}Eb1_z^IJ&Dhk;i)5jM zZh&BXXU72PQeW1>%3;W7MEP4QlDJ>+9Y?qDpRXkco8Friih|tSsS`OKnFwbNEtN_| zo_u=iA3z{|aA=S_tpn}c9*0kxC%y2-``sdlCIZpwmZso#_)sus4~$~CI)dFmIErZAye7K(icKG$%j0#XTW4oy-puSw831Bj{JFV#JhTue4_)JO4f{P& zPS#V~5S0BZ7k~QbWpxUUvf!uGDj{Ldtx@Q+#Q<;pxB`I^MD=#-g}saRQ@>{ zojj3al5se5Xt&&X&#MOqhq+k~BVa%~58yWG*i2f8;qFUo+B6QvR+((|A`KL_jzcjV z7v%)$#3tR6cMUi%`EKSUnK@G+EnalthHZs~h0o39@jBCOY;3G_dUm!1DJc$iZcYxX zCE`4DgyZ$Mv3bYe=T*tM^3S20Ddlf8_C7B~(lz09lbu|Nrrp}|VAqZ1+Nf5N(Kco< z*>Qppy<_bFqs+}jIH%t>Kl<2T6c-mVb^}E>Rn&958()*y1LHh0;PFPrq?;ekTGF1D zz`cbOjCSOizBGk8KHDf^iC|8;62F&MRM0h7UGag_a}>`U>+kO`i^t+&srH39s$ou+ z0pUfO#5oq`$uMwi=8&7aaG_g`VLP5#qmgvNrY1dlqx(GSl&sLYAN?vOXh+hx2*x#x zI-Oy7L6JHzdcX)|xP@GR#h&7)b(6ht@SY?_*!rpqq581kXNn5$!T zw%FL%SS4Cna2nXjL?SdkF(%`A&?aCW=h7EVn_M(vna1XnD(hSMIxcE4X|T6ZXysCz zRj?OIrbif-vyFmWRTJhq(5+0rJl0}^vVPg&`A){MYvdkB#PK5@mxsB=OFy-eh(-ZllV|(tfBt*8(1y)|%wCADA#`C; zA-&>?EB<4yj?>v>!((HWyq_dN`paSB+{oytI2Tbxx-0YSy(>Q$cq}bus9CWi)YeinK@ zU|@RBlrN3p>z`n!LtYM|-?{77jxJg>|GTI4V4fj1G%`|y-5(nf+8RQk5N}2p$E+-2 zm;-fdY?aw%0@I^3gx(1MnDas_}T8fI|t@ZSva<*&Tcs7xsHS=BZ{qvn?~1Q zp7Y<9GoF{1H+CY&B$HCjfjzi+^QO+jU5!XV02W)3Eq{(wn)Bg>VF6|1pwiPP_dv5^ zG~c$rI~L^VGU+c7 zhaeZ_<>q;fyTR%cEBATLlS*%}d@5T-G!-J#$*;5F*#W6cD6bV)snS$j&v~$#>B{2A zR6P9#PmkG*@9|`UqB+s=%F4=2N_D#I;muFJ15|Z{%Me#m-5b9g&UlTcM#m98M{^%P z)L=fGA1nLQ)jvI2x+jkA$x~{26{t$-htU3-bRb&s0mDufR&ktKTUzMC^Ulk(F}y$< z9vQ2JbAiLb_u1K5nx2{FA%uL61F5kJ>kD@Vn#Ynl={R5Ql`^LcIyYvDgFc7xKy&IP zjnV;%;%0QTi&i@W(XM%t=LRE*3XS0h`G_|NJfC`G;%GT+qV7nrKKe_ zGCC5J4oz!E&>T8Y6Av9*n%0Vu-fyYvwkqLsYtnfX-i~EvP}{UhU(8m)w1lp^qyUE? zE`nKn$we355(rgsf4<`PR4snyR$;RSEDGE5VyoKZFDAxw_!)^2%;OB@O1_t`&=0rzN z^q6E)s*|*5p4;)d!J**@!evaVvT z#P1yU7OD3<3s#%RN$*p=Vky_A2opjty7+=mo$T>Bn{8rzvN|s}mm?3%b)T9P4h|w5 zJ6O&Gh!um;O+x3pbGh6f>!MAV@05sz$QWMY5m6EGC`a;mgw6 zUOf3MXw}He%O5_`W0G+=Cuxs9`ShPc)ei#cvoo`HhYD1q{8Y*-cl#x2jYWK(j=e8X zX$m?USE2H{dTq7JVL7&8)SEwUUd$4{SRg7pn=5S>oPTb6T~*cnCwqL(W}BLtszc)@ z&Ji5X_{5kTV=#|>Eo(3BWoEHAdPN0^DupK}<_AqbgIotH!^=`*Y>*c>1o zy3Tcf!@^@-|CW3nv}xq#<_w(ZG08ZbldwaF4%P44z56nhjz`BvO)1fgWA!4HV7lyA zqJqL&J{L!wlRibkUZ14ps!{1O0&aoWbj-Yv4_@o*XjsqMx7pd0pPx^cZ`zo_Zcf7P z*u1%XYIdfM=>-_86ODqG!_!KkYpgt)pd5uxUGUh$mYXA~k3DmqHjRSB{_E+aRX-ZC z>(f5pOXZD(sCj$uH9YwW{(O!LhQ}kq$If+ zijh{XtY%KoiD}BDYbfBzys4X70TXk$P!KnCg73h5AeWk-SI~c=$0ZZtoP<5`^fP~i z*-S$t!(55rrJ_ha7LVm}dFhkEQ5=?%?uh)ERqnL{7>zfu%;(tH@YnWPnZ+A$Uy3Cu zkm$z0@P&{}(x#0UeLtglb8^-{G*-`}kyE1dhvPjtIZ65X1+I*3q)S{XtWm7j8^zt* za=+^1sQI(ub$@fLW9M`Pkaimsvysj3ZsT*U3))8|TpO>%ZZIT%JsWYQsHnKG??jJF z#^Jm`d+xdCR_#A)$H%B3zraK@nhJR} zOuutnCuaCjtl{J+z%QGMmoj-g8dteOB!Yo^4)^2owpO^zgiVVbdSp^{Vm>EF*R&ms z7Yb2PK|#jhoNBx4frtMBIwIra6WmSB>6FE6jv?B}!t(0ft^qT6zpy53eN!G|G*6Bt zVi{7Gw?o-E;a&yGi;nH@`g|S_%V2SsFa!I-4d-UM!soz7hDPS0oq;iqf&%8N%*@VE zQDKqbD8@P16h^C!W>iT)U~7$ww=JK zl`UHo6IQxgvneXhIGj^!sZ=WanP;E-gYt@U8XF%o7FF&7K9W=G^aTrdoG!0Uwx$<8Oag-%Ob;C&4$1!P+pQc%oU)mbdzB~R|CvckT zluYY%xFI`6o<;A+3JX`SM4=_@J+HYUG4# z(L0!KX_ZPNpFpdDM+9`z0q(n%A@Eto3Ot$!%T>X&MkW6`{*EjjRHwi!Ub&(**1Bw2 zX8g+>*yz|qb3uN-;o#)a#P~Qn1N2d;Gw~@4(ywHq3=0f#YpK2E4o zG5y>dTIZL6e7=R#z44ef78~@+=(e=wac}G*3pU>AJ%I*21sSc=3Vwd;Y|LzEFpKg2 z8!x`-#~HAAZftyFq8X)dT+|@?jg6s8JcmWNLN zj>B}E195C)ohRjD)jld5@NvZ!s}gyUz}DT`8_ipS!#X7#Gk zh4bhC`1u@*jQ!s>I5fB<5{dG$Ehs2p+5}4C#YH7DN8Bm^IE+ub_5F)mqoHG9VNbh8 z(;Lyxk;k!`pcPOz{Zwg`3Lyg$cY|B!Wm(3i?ZU%u+~z3Xuy!B_UsPOt`1!1bjKg^z z_S}wLuNoa4%L1zy-W`N0e>QJ=TBKBU*Sa7llmGRx8;di0QHamS@Kp8#fU(K{H59h1 z!7Hr>K98rFtJ5@b_xb0qzcC}SHFq{NJhC`HKaXZ&GfXv@o}S|KkYA8*dzmy9QoKc= z8J{668-jg|*+~RwmUF7*a!t{M{s0*pSz9_tPao%tx@DyaqU$_!>)_0&U#(8rXvy|b z$*i*CqJqxnb8IpW=XuzctMXeLlw_W53x32Zt8}AZFf8ULFmP z3{yB9;d$Z-47t;b*0vYmLe?`S4v8l^*q%8D=1Mdoj>4bb0Vkv2uOAbo@jcCJn^L$& z;fnwGeR&pZa=OQgANevGbu~2ypU-;8IGhu--rnBAUAy*PTTocQGNLLn?IFRzR4J_# zozA&AuBpRHBWLNDm%s=Qd(vGc>v-?ymok*##RKlbSrnU%(Yfo+*;iRv`NWAHhm8GZ zOQlkw!QtVhh;R@=V7%|>=m<-U=H}#jc%RM=_fj0=Dr}X=E($X)+AxzP9dhZHjaZC2 zpev{A;|#0VL`>NxRabViP3sh&@x~0v-=zOIp)hc8qLDB)H#TNcs#9T4Zh7`qL&GBx z>`+tFQ+(lyNMP)j?09awyg0rJC=aws7-WuZPTL9Rxk6rVpHhh}>OFx`>FP{;uEM&B5L?e+{ zMMXvT^Ep152P5DT|*9-Qrz)+paGvETr+VG1ok2CNAiXq?B>j7v)Ogx*%-c zoGwA(5dx3j(jbcdsx|ANA|tZyVMl(kQ{Tp~Iv~1<$76K<`gL~~Wi*TD)Y=aoJ|7h- zY)WX$5R4<1`b=mwtoU?4(n^iGwQl+gtn&i%^s zSu7d*?bbiozow+Lgk>oT3yZk97gk(c!V(n<61&r=SWeb)N45Cjv(g;`9pJhaEUpve z&;%(NhG3{zOjdA{vd{1uMqSY4@FfVffyh`?m~l9##Gcu<{WSpn(5M-U$K*u0Fedn5 zpOfQSqK-+Yf=_coNPe4w1rhD&SKoOA`(J_|!0{!NsVurD!VpEHW=qS`$;As6WXAW- zu?-K8wSq_q0|#ehWQY*)6ciLv(ulPAn!tJy2MK)c^a-fzn8>yT!6SvLyo7?n0j*=N z*-}RUyE3^%I|>pj>ZffM#}EpYG#Cyuk+G!Y`EhXgwNCEvo*lM#@4o9eothZ8fE!yt z_r{fkv{O8Q(|BzR{-ZVJQeKTCXn9_X&CGWWRH>9}6HKN25Xvz}Wx-{eR*d!Q*8CzA z3dK*`K|Bj=`}Xa%L&GEUA)F456WSUE2M5^kpoJvC3V=>z&1S&?^+)3*RGf`R_KIc= zQZAVVt~0FM2BeX#P20`;XnJHB$~FyG{cSfsh5=%BN)k!=&PhM6;y;M=%Swy8p6@Zr zIGo>N4?OV5rM-Q9l{hn;PMJB(>60}B3x|J^Q)J~uy%bBGgVWD(!D~Q-$+Auzxl5y= z;MB~t1WkLjED)_De6yMRQBhGr8`iDORHx?Hx_Ww6O-xQ^;aEeG0_UuMV1UX>%dP5O zn3V8)E|husPw8QSr6Xqh>k?ty+7q-*i)3Wi@0i=X&I5!;m$n0>W$TnW~q$3n4 zmSrf9m$l%}q>}VX)`^)dZ&dzt&1!1J+RWBLYNKb8s>;is7t0uyaX7!lw(s8a8i0T( zhuaj&4=7Xu!oyC|9gHZnyY+`MhaH*DA&9+#9YME=ZKwlVA#EOcFjKi5r zd*sO{S03r^S%A_crY7=K10Sog>5*l^cqMRG3J+AlO$HQfH&A@eac*2G+~xb;+)hh6 zv@6rAP6bNqMv8)UZ&E~cb+vTvy0zb)(*u<;w!=NW>&r^Z_`)tMETo~KL3Z*W{V{%% z^qOcrlBY_*>Z;H=^V;NT_qp_{qaR}{_r`CDF^)%HU!`P|iJ-`vZ+I-HRP116;i@*W zjs-@UKPM;Jf6h7QWH6k$v}d2)@fz$XNT=Y{HKesOr`Upyg>O*?vNvJVfxCWcCs)CkisE=qJsQGp-?FHe2-HmrTPu_)Rw2;QeIxlLPNnS zkYi!`mR@;sG-CH~FRt-67$*my3(`6rGtb#y9D2L|is^+jH!;z1Z!ltZ{W)tg>C`E( zeeLb%Vq?PbMs$O-&_B>el@*nIUJ>Dhtn{nD3OI4La<9@#V45b)1DpVtOQ|gOW1=NH ztj=oYxaX?MfCYeo{eTnXK>&dXp!(Ttb7|7f(L!pDR*llql8zU0oH7pQ|FB25Y-v5x z-Lo7QDWnutLcpGsH1@Dquy4xT;+Y@YIP=S-b{F!(W&sz|$X;3nv(lm7dzdZIjt()4 zv%ap5RxV%jlNYj3GWMIT$iXLT%A7K{ z7KF?0p37zO^bJtgk1ZmY_{P^^x9dqGW4}XOu^$I6b40D0JLa<>MT8)HSxLs>%&BdA zZs)6U+))Y#J>3q5w`q|{tvq&UIyR$WvgFah?rp!U?Q(Iq8~Kfzx?RcZseqG**95eY zg9}Vr8NwVAuUyf(qpGTS&)goVjKK~bKD42%yo_5KN{UN33P5B~TvEbhQ7J8l94KqZ ze69o@l#BHR)LaB3D@VSmOET-m8zp10JQdP6z_d@l@S`mu7b+$x>&Wl5l4%n1L9(+W zjNw#Ol()Z-GoOiY{tw%}W5=sYi%V#HazZHSwv_E*Hj2~O>;BjX#?P&Nm!P1b>yvZj zEW1@^VS33JR&G zr<>WuXm0>##cot7pL=E63=9|?NQLzLTgRa1+)IJHlu6fuoj)!Qw0y4Mx-nI+fCNR5 z2j*8^^*-$sk0)Z#!8!0kj#b9t9LM(T*;9G&(BX?9o-{Q%<(+UJr_nSfO$#Rg9DDxB zXBqqHkS$FH%aD$=rKyz*mmLJ)(kmUtXSq5$mBA1do98vrd6~}eQ(~JpZ(iF!I8=&K zaeiJtAN!u8-Bejo#baR*UE=&Cl>r?V2?|nzI9xv4FMhJ9ueXc{z{UK~-vGc$m336_u6DPB*K7{M1*0;*i1j z6l1Yzm7aPnhkLCs3ijHy;c;~IIYJH;97rSTQ2JC(`zFD3&-Qz|JNYLxZ4M3%Qejcy z{-&m;sTZ;gGAUJ>rBbQLzWoQTDJ;@vO^-9-rA|6iNWG5RvGkk2#Efo^hv&Frf>smU ztfKTPm4eE)^y%S2>f~G$B|9OLyiop35iM9SKe=wrs!V72DVj5XsPpipl@;ae+%cKq z@R3f&Z}2l@D%>(jnP<5&fe<*w>9}cE{6v%0xz7m@v#`JLMrjL$ytw`d;b8 zLy5+do^Fmw+cfI-nnaPF4-O7eWqJ9&7ka!h4kyj-d+@;v2Zx4=K}DaOn6wOCZ-LpJ z;~2A$N_v!|xJwYj@mZo8cI)rL@$=b$PRi7k#(hGeBN8HwlF1C&{8?LDmOc~;g@#_} zBFWhQZ4W%~z`B8<;WFSFMFmA19d!2`p~}i?<~=16@c{cf6)0!>w@bfLI#XO9t@w%` z$!Hp;z@0w?Pv49;Dg}}~(Js4|G-X%famuYNNzN*mEt$ zvx0jAPK9G}`eM_D2jT4=7P~R{jbEM&l*(O|+d3j$Cd>-tx`C^*fw<f*rURRzS$kaG4-w6)tK0oT*G0zRc(!fZwx+JGBdelOu#2bUMEJ3=&n`|A*V6N& zx4YcgZ})VjuW0VW*mz z!Pm4c2g(`ruo=D3-TCzdxq__@$Ifl=n)d>H2<@fudZ+@=G7~!WbpzZU=a9H}DlFA0 z;0kM3F3&_ar^wpcAG=~~VloG5OnF&3m%|Tt9j3avI)mSc9E86FQfBy}-?VFS9gCyj zwzTG5PhON4j*Xz5l!TozWw}0H#%=jF@`ir-T^y6=@4PReSO5=Y!u#ATW2Y8NnO?92oo^k6! zBbg)%sRMTrY(#{uJieAzL_O|>vW68)bgeCd*ZA6i0{>}SjBzry2~*aRZgT49R6$T1 zHCZ#qO#0MxFdPX}|3E)gR+jHPnRStIIDR?2z2hp3Xa&1icME?Z__>iET^w7lGG)#{ zWg-~)_-s#GCikjW77+B}oB-ia(PsCw0ND@S$*s$l?yjmTe!&1=#(uN4?cet*=nLU^ z7Zw!Jq0SB}E-t3BvI>?najhucq|GchVpj_benCQU7)gn=sZ(y(61wBd$OZ)mp~7Cl zqPVH5YI4Z7T zS=qY$=95_*8T-HO&O7g0-#0K^pA(I;x*yJU$DwwruW#hBzVTSxO=h(%2;_iWzjCF` zl@303Sc+BR^ZT51fq5)qkE`Ru0FG;H7nJ$Y^i109Mi$!Kc3^z*S11PHq`a}DhhuDa+rC#66&KOO)D-90!Me78q04CxL^o-VJzmLE zbx0&iF_RdKH*t}R3t=37q|f(0h`)>Ji8OPcxjL0h(b7eWh8i0iA3B-Ek+J{Vw(s8k z#-_$bb{6QL>g+s3xw-jNQC`U#mUSLH8b(tZ;&TIs#3@t4iIX$m&f8#cpGu9&X?IbQ zkL$6Ng{D)s1g?%s?{lBU^2f{u7T|c9UM?Sd#Ab$QA95Q7`T4`ESFb*)6g}f`Fy5o9 ztFp86@cFqpxipP(cv^KzBN#a`=G>b5oP4M+zNJq!C+`??l{bgVa3v)AaqSB(4?qZC;l8@2etS(={f5Ihgl6OdOK?aop7 z+#Y?r%&!t$j~hiTOW74d0Cho%zHBvA-Y~G4>YOT+_EF*=K!vKJ{G{+3SjORiExLQp zRZR9{{ASi5|G|q~!83Dif+22NH}5g&l?NEx4slNsz&yh1m$J;0wI8q?8VJv{O!QE>%_4a9P|>cdfRK4+^K8 zBhd&20}6$O>;~C!>ZMJc9HmHGM9Qmzs$=p?;Tn+3+OH}uD&};`1rfoKEBB9OMlmkNwtag!x&fsk z4mnXr$&xe3C2p0Y_0FuvAodFmn64r1DN?0!C)@$N0j4l-kW&5@2WMI+ya>t1Ykao4 ztgJLl(0)dVkkIiCTytJsT_(agS=+N`Ps@=bJ5EP5hU_rx}68mAM~GEu=MJ^Q}mpjSInM`cE{Lc16{ZEI_5raE<#OML&vBBA;C=9$kYSkgi}~=-;nSS$dcAjL`MY$%!QA&!3-hI45hn_8izWH9f<9 zFX;GX(ACRj17thT0#S~U_jIM|bTjCT30;niqkz_BkWDxvm+2Uu3LqC%=udcOU_0Sj!Iww0urz^POQ zbxeNBrBn$e^SSdc>6um}wJdJ2A8&%DIw(%7@SY~Ra?P6_8PVc|!IV$m3l*xu{QQH9 z7ccHT*=2For&N2|_H4?{&0(!pkhOfKrYkWz5cil~sWgY=gULR32PI4ASklJ#dfK+~ zJRiQ%#il8or;BU;0mzNgB^LIgg$uf?s;ZvO_=~x>JMOvX+FNe^<&vrCNt)N#Ovyx& z+S>L~eSHI0r;v6iJ6L#J?p*m1O){0RgXN?Ms%t1IQ!(v?POUMB)3RW+`B~PBTXzf^ zbFY*~N>w>g6A2x&aT-U(>6lizJOnWuj?mHGUMepyIjNQgwX@#gw6%9!j{d2sscC!S zZ0kUvl2>)hKlkhJRxf|Fm2DIJ2k%k&J#a@BKY?F}@?6!q2TOOYWSD zg^{si?bHAB*^hMY-xGS^zPoApij~wq*iXZwL)6$f&)^)M6VScJa}uev%8(`Q>31!6 zn+QeEwhtV$;|Pq9@yMhc>4@Xd!h}B_+NNmy7&rV5&QDF9oidz}s`vHxQEgTANwqYn zoz)KKneE%p>F(~SjYK0XmM)#Na-Sb!!Yun!9nEoca9lOXBg(MpR^>*K(^yp zm}ee?9r=+FPiDYm&8%!HDJh|4OPAbr8V=oAXPY-~ZYi&8Jh#4~k#;=0g&ug|KI-W| zN{bgQrP`W0nx3BW@H>~%;M{5t6nSFj!RXecM+tzvZUf_aMbvAE~p<#&zdrUOkJs#;V7>T&o(TK%wz&wU$<5$GI0c8#Y z@<3_NIl0+Gm_0?*(z0Z8C=}{H=>wCofc5tF7H;3U_id>}oR+n&q${s^CEvbp=XUzm zmp?}z|Mw5l&u;tywe8zO*^vm<)YMT$MHLg~6qjS7ADMG#S?ONKxW|FvN12U|+Z=35 zLa;&Dtp%-0xd_UF!&y4T(@3VIy@swcpKz$_4(n=UWR!Aqb0+82%{!?cDz)(0y0-fI z`ikED_y2M(xDx||gAOzCO5Fme;bv)sb7a3XnFuw0j{f5MStOInI>rGV^WE#_4S;(d z7N8|_HSM25hw`fBD}H>+58PR3zr5wvch1J+;bbyS6Jw+F=kI(sb#-;po*mmbIzG6+ zjlXXF#Z5GC;UZerx`JAlucC#EmQYnq9mQs+X<}lWHI_JHF$7OndXQ8@qoQExTF<$x zCt)9}w5THl>J#`mI>;R9oRzIG&WtNnh6u>7WnR~k3gvNFjwnR*^!89mapCTUhK9+x zIF@Iv!`au~zF}~1C<;B3X{h`0>~KkWlE%5P9mD+#AjsAi=;LK#f|<+gRiFIyM?29~ zhuEJ*Bt0zwF0ors@~cUwvTbw&;JLP@nwBnJkilH_c^zt6;4Kx4!QQbl4zi))>_WzDZol&uKDP@NETq+|*V6eHZKOj7+iCZXZM1vmcG}-2*XNPWL;Q8u zt-s{Rr*-)%TH3Oln&&U1%E~H!%*@mjO-)a6q{IocGLlV!K^eumGGtvEvY)9mN!i<^ z+jx%Qh9%gA7=0bHaj~z`=42yJA(6R6SK9oG-|@JSkzuN>Sv_a#>a2A*`}enREGQ_T zX^{TnaSCULDV6eMDQun`_{ZB3)Dg*djAI!c8KLgOhbTFVhT3C`5qPbL1 zSU|-krBqg4LB+)-qC3L9I07Q-P*`0wR>;c`$85xul|@UJEWGD59=@~2?z;ci9|4OP z0^+MzuHl*C9fvyT!V5R@+_HiGeu_q;v~b~KTDAHdX5}94?4Vscw$aY*&(YppJ9v#~ zp($=Q!4i}+<0CZKbA%2>bEv$cn(7)GsiLxq zcRQ3>gS}kd)I>-Zu+UaEH*7-Ia`B>t_s!`+${5{u-$NTd{@Ks3TX)VHKF39cMRf1| zcXKrgbEh~mh6s5)PJ;veG&D5G5o<%^Ja#76-S9f<>g=FByLZseZO`#{2)y+j?cuM@ zzrL4>N=j()vR00M7A;xEB*OBdN=nA#JmX4IFXtd^ZeK00#S9+4aC!Oxu)b6 zAZE>EVW!*OD{WXdkqtIAk=iAi-_(?GI45JzJ-2IJZ(n~gdSNi7LCb_NpVQ!@`zkA7 z9wgs%*T~A^LG}oZDVjr}Xbz=7rsA*{GeVL?XzEKhtzgW~P=9wP^>-hp%DM(>TCj*p zcsAA~C6h+X$;LKHAata^#`=0JihDCYVs7o`J8u6(U2PqWkB?F7vgJH;3c5Gz*PTa^ zNR*{$87nbUF=d@3X>4?azi@tP>gs99vQ~Pk3-Btd-_3Si~C;A`h$uI4d-V!s(#9T+<+i1B_GRDwPGBP0hlR zR24TgX_JKzw6(!8pYfV~eSK73Ryw$P_38|Ub28SpfB!|`7hrL~QP@eE3L1M%&UF5Z zs|dJM3(*a#7m0X+sv4UZzX8CAu3w~UtlpN0Q3|~_h=9DRLV836r_o`dvKAl-;SGCf?D)*;G+lM$=P>OhidP78j=j=M#eiip^32&Te*^2&05y*deVQI&Re@+2jZ$oOmQy`^=N>7e zyTqR*B+;19A9D(o&KL_yC24wQifZd>=5)-^S?6#L9Xhn=J^%Q@#=^ovnjM-oy0K|2 z;dCNZph?q}$z`FzN5uF97nPQBxm2@dt|Y-Z0CQnpgoL$N2yi}Jl8?nWG@gmg(#&j( z;xp4k_)1Ede4wk7s;X;7H){ZBdV#XeB?zqlxM8{@MpjH+R~*n1GliK#~p*=gd(}8_^sq@f5eooh+4*q)h{(GsUyqrmf3l}e?MT?hG zV^cGgS61>eMDYRGk8S$2fU}u>mB7p?mwxHzjm6-gvLL#(Z!VARS?6%}>}%gJHa1Rh zIJkgWSLC=QYzc29KX#GBP7IUF8o{=&s9?v9iU?+4xw{sxY!t&9eisIRw^&8cK=Zj|QDo0o}j zPR91PAG`ppVw5ydnr7ft+y9T3&zj}MyOfa_(0lNOML9h=!A}O6FPVtD@_>{GY@?@E z5b#8V(UB-ZToq7~Ze9R_s6sqD(q9SGH%* zo`(1Q;|D*ydi5Hbm>8q;&%Kc4Ll3m?qYE}%EFIhlDH}_r$ZRaAG8;f2xXr}m6h$K0 z)YwqZj~f~qp{c1Ef+_*lo6hxCj*P4)5m@KwH5;!lYX>;vWH-7BQWTBka3r&G)j2d9 zo2A~PJ=A_+AMM?}lcS%52lnx6D&g?q`|hD=P7cjmu#lSPFQP?@m(V;go~vspCnt}R z@ffFHD82JWsU7TDAsQMQqN1Y0BMl7=hvw`6pN$btd&j{I(7%DR@tMUY6A%36%R*Q< zSw)mQO%af_!jY&rpZKge1%0J}422tlr*25w6e!!!%fm^ErlM3*T1H0?A7VgSO$Dv7 z8{(^^q?i`Yo1d9IHAnWT&wcr(s_GilH)M5BQ3Vc?q<$S@I{& z&-mmd)l^kd%hLIDxa%;*XJ@IQ7TU*Q>gepDiOFdyD$Ez|i_t?;ZjCPy;rCc6aSu*m zczB2g2M1)laA6UH&Kobig2u;2sk^(2D_?D>bnV^E4hdM%zTLa{3zdbu!a^>$FIc#k zzv>&CxX~2ERaD8Qrle(RXn2@PON$TC99#HoYuNmofB4sP(C9ccJS4fRS9LmWYGrX8 z$11i{5>2ffA!=@3zRBVJ5x$NL;W!YgTY`LA77`fFvhae6Y#|dh=@OUTDaXHQXsD<9 z`kIGN)8RX#?Hk|v{(Ek^<+cmftzE+MJdf|s-NCw)(3@QujSJG{X zc$`$Jq~@V)tx$?Oz~sa@H-$>0Wti&f8))g$7P{uTSJS{iA00Y$kRu#T^)`IIdA<1bhPg% zJ@V*7)Us?j<>wc0+97>L4)ah_okSpF$#{~6M@MPtqWSc?S6xpB4j!i7{y}=`**$dC zWf#(_ux`S*kQsFWi9Amz&H_!E20eFscH4B^{ zENb-YwY03Dwd>B~wayNx;~+;soPO=!$2iT{@G$KhewKDV_bk6oS!ESnbm^w4*Ia+) z_uly0*L>oG|MZVEmv&Y;oc$f`=Sy`+crA!3xWO%uSEb7p1%LB8oA|;hmV-<)+0r=#QWdZbg}z91Ums!<9jQwNY4 zf5YLesg8T2J%qF1e$UDdGwKg#fE*Zrad5z$6WMY8jL$ne zGcCAK$l*7@p&FYSpL`Jx;~8at_s<{rNh*}xP+eKh8&T`h<#hX9w^Db{5!!J6MZB3H zb&@FwlJ+3=WqyrGje*a=AXD42bO9ae?4n!mdVtywcGBuqt#sbH)wFE!Lc0H_jAF88@YgjvOJv5t{vNH+qSK_?|Se1 zZce3AYeU@KId^teIh=!?ht9)1Xz*U_OfZdKl#Ao(-Ec;3cnREP;sO#w!b1-gv~+}w z2Np5&dT^geDg`QC+Lqu|Q-fXTHg-aOKEV|Rx6l#!NQDXp{hNk)4H<{?8*F4`q`ae} zqoKFAx1n!vuy$;8v}S5%rgC&-q-=6>yl8Z6vc7L#fbYCqINhr4@e+m1c7Y2yWS z@dfMHsrB@Z(8}eDXhrK{`tA>Iq`mtN6DniibM4xDh-zwTXwB-S^vGjdDK?9yQAnCV zC~lNyW@4-)=&(R67)0qt7bhvy2^r4l6mD!al({zv#(uD=X^N`t?%iwK_U~WOb@=e&%dWn+Yi!_o_=a=T~4#$_k==JkY7NDyL##3 z4Qr^lFqeA!$0-(@pbO4hL+7nsMUOnTg$9PksQ^5o>}(pJm}JgRL4F=PMxGvF)~6~2 z`kKiWYXbAxEO;TJqCz#r#KxYZJv6_$xjhsL&8f3FyBtnu=LKWq69k77n+4%7+sZ1! z8VgC6fB*bMb_Tlp1Z59?b0V7fBY3sZ{2#u)vvsM?V*kib}Z1R0Y@n> zHiVU;E zc@lvuRE(Ipn-tsz(I=D#AXnQzI8KvOGgMYmM1=*_v}92u)z((i&9~h_M|%gUzP^b+ z=~M#j!{l@mgdi^rf@iy zx{n^E>FHVie9(A`Mk5pnYcH28zq=BCuwm2b7-w8iBoiz@pZGZduQdNpE zhQsAd#*0nLWZM_~J}Jkq@MK6#_L2}dY5H=ms{h;o>yfQuT(4Uq+o`SMk3sJf<_`udJiRb>^eUU3fnqLpP$RG2ZG>&<|2wl!Zb8A%(^uVb=7pF`v?Qe zH(YlOwRdz;M`tfhPQ_{MniVuQK1w@wZlkJ-YFfQ&IgN}>GU$x82PY_s1u@>Nw2CU* z9Xicj)2ZqoLx-oVyrlb7oWrxm;dC7A*Z{$F4wE&FG0k^@u^a)HlRlrpv2}pifFyu2Igs8l%jOuIax6oN)4?p(U z1$W$b+Z!(0wCRmIcJ7>qb68edMhg}!pl~+uj4Uo)XR~7w$qtyb52P4}8AU%)C`9Ye z+d#Fowbb9=OGSmnbnyk3(!KZJMUQNLh*m6L#mAfhTJEt^`3Wg0Sam%vRZGMP2W0h# z&4z~O<`?8qb{5)a;&ilclpW#x=7k(N;qlLH-$S`M5eAN*d2TO_j!iHQR9jO?mtC@f zo_hKz>gw*LhKBi6URFX~M>=T7t^>63!iyOD={nL&1qJ0aK0ZO4AAO3dtD2b4g;e~S zD=wn#JNMAt_dP%*rBzf>R>Bkuq>P|vFqOk@WIFj%)-R5w9N*F-r{Y|O&z3PC@B60@ zt_5HW{Dyffe6Vq#U9=I1N_2_~X~U@l9`9H99)N zJwdI@TA9_&(Oy`-Ggbi{g0TqG!(`F~+z*@$jO`58{$_!yUv8|oUEfEO|oDtKUFN=n73?D)gnd@K#l zW_)ana&mKMu zp(_ZeI-aKGz+Ef~h}Sqye_kq-qP*N3N+hDR@4yktiDpwleh%OF%+{^c+dD)xHT6_h zRzel!r5p(%O+s%L(y1j2n`zaG7Mh-!rJcKW^QMX3s_g6#jgF4f{`NyOud$xW%gZS* zub5hwEv5$^dW81w>tM%=(zao?#p$7e-^bD*-cCGzm~P%K0&vw@Dmp*>|a6++VcSn47kqoUF> zQ(YjB@FzMrb+xr~DvI=C+xG3-=l$fSoBsTU-}#-l@7lGqCMTLhjg5^|T3SK5Ik_z7 z$*lx9hu9QiCVkaO1%4#Thg_nYk)dHKE-j@?FS~*&Dk`YAw}-{+FT3Ol>NwO+-}%8e z`J#j)Vtryx$8c`V=v_)u7NSrSt=iM5g#kPHKrUR-0`?xl8yKQkT-2(C<2uE$1fXYx z_Zx$L@$@wFu9hup;qp0H!v%R+G+Pj+qQX2H86BkT>>S#?_W)gf=>?p6|N6nr+*8HJ z2A?52n>xFCsJW?@F23+QPA4CF>;9;#t1E&gNr1L+3g}IPBNxCkIK?29R$;M?w&*D`7{&1LFf}&Kqf0Kk zj7!ZZ^+ILuvW-`82lzL?^Hu&G(T(kt<_JksBB@ZR=y)m_q7>39K8b?cAW{-8jB4JP z&xLblKCL(+w;83p-aM=kE;fLvo|{93+|)_zB(R>4IwAr>d3|znlyRfFx^n91?56&K zK^hwyX6&c2v63})xc4q6LOs3xG&LQkriL2&=68Nb(=#b*S=K@`v(sGN(iR^6JhCX2 z7(z4CqM(plTs&|p&iPpp;dC78yf8m6U*;r($6|084TC8Sa=`(oNQ6%WDhdd-!BM~$ z(kO^+A=iyhPtq{d_0is77ATwo@Rvw5hs&~VS)~uy-&pV%wZC6(pM>3l>UQSz|dzQZQ{co@n zs;h0_O@o^sv%-AwhjnI?VmLaxNq^?^>?)D2H_kkdQ)k12!4_qNxM0a7Dql#!<*|Wk zmyQEAw{ibmR*0);u);z_Lg38A+0i}x=oUJ9^f0e0Y=$^qI=j5Qtdz=1i|D7nyqU%) z6SQpUVnQ`f%KENVCopHtM2noxN5ZL+ygVtD&as{G4yUuTbIE)E@dHh{`S~<4FwT*J z9iO3!Z6Wv<@E)>x0YVF9sCR&dhlXfkY|H|YFdff=5VWMCic;)AW+{~|3ksnvPFgB9 zL_o)W#wiDRWVmp04(YRMi}yIus^l(MW`fr8aTMnD$2{KvaDpz#&(=e zd*+#E&iVSczV&yned8P6j3z}8-bzZ!xO|P{ieqPwwIQy_1?^Q5%?zag{%$T<5d7e< zHeGQgEo*6I{HA}PpX%!x=;8}5p+`19NI$yi2VCL8AUf5F7EDjl5l(lYdE@mgS!~Fs zX&Imu&ymPTr)5f%WT!lvb_i`hfVn9OI`#*65%h56eVsFtj&ud0b?$ghPLzg6#wkfT zR90HT5fNTzHiqh2f)+GYa~g-P?}^Ez=WHCM6`ISwn7TT0r1M!>*%Ji?1>0TSsN(Y z(JmiXW(ynO*LaAK>Be_puc<(>qDWB2gy%S6O_=lKbd3X0vru@lRGk2kk5K>&L~iC8 zMg>p{8EOhxBl>{~B&x1DffKKZ>KDj=Tet6_y$3odK08fgV?$J3U2n_r^6rY=z{v@J zOjAKboO!u96D1`jB5gRwcIG>rwzi9LK(U*tH)j?m<_gWs@T?$o%ntYW^1^|XWZjab zJP|XJo6E0(6bcIzc`_m(QRg$ep0_9^R~P&SX%)hDU_Cm{7m^br!^1oTt+(?ae-&5M zP}BVR?0E1T>{eW%GQ-GZp&AWigxFP;ZJ|);lbsb&nfx}kX1M`}u0JhFBnQz_tbNQk?+SART>-p<1 zAk3Be-VeV`k39M?gTsXdh3uf1*JNZRw8SkEn<#T9d6GuT(=B3D#_(wKe53kq}xbjI#-{-j!bA9AJJv$f8La92}#m=}9j2vugo! zI&E_l*<640k+eAgMnc0modP@K9nQ|(d#)`h7JdbQV`v#q&P>zpJ-euF=MIWZO;B-J z1+}hRMU^#m6wS>OiO-1%+hU+|!nK45(=gZZFEo_a2Dv27(kydB5S_s36ciRwSw$r^ z&0oL~PtTFVtm?O8;3!qpHPVunR(>T!QwXu;!V>%juK|ZtU0FG&8ndUuQmIt;HaqY%H>J#VV>OucBy9E??Xn&Db5?Tzm!$*5k?$3Xjh*+Cwbep*$D4IKa(` zMf~H1nmv}!WXnxG2})# zQ||W8uTu!{w2XKNp7R5 zX@C2EdiJR&DKfVy z5tmm~yrdn@op;{(s*5k%^vNw-wk%nNsAJs*{@mOk2&~K7!Nr0pN-(7|IaS(ycpcyp z)wOlB?%eY@g#z9-GCD#{4fE*Sb?4Lm1N-O)KmINa4-ZmZUA?Jz0iVbc#y4NAh*Y!e zMUb8%J0ho4a&X=RxWy)dlt&~X;H1Psi0HnKg3;H|=p>{fZ>E(1=Bokd@eqfkqi6i7 zuXZSnlYz53I7aASawWlIFwVx{MCK2awhc|KIHEH@o4><2qf_E+&UlBjv#o6-s!S!N zC3Nu6L3;Yh$7!VRDAhGJ)3Qr8QE5db1H9v-V}iNxVsPbZJ@ITFA=%1USj1mP@S4uz ztRziEawrNJ(1|gM5Ybp(K8@xTP(EZSxf>i6uPMfsR<2!7eZ5C%&vVbP90B@YP!f&v z$QfO*Au22^psLF9mt;x2qoZTtzyIgQKK^@ed+X~#qPzO)>o~lZ2?jH6_vU~63Q#I= zAs!?3YH%HmasUJ)@>#uh9ksMB=i}bf-OU@s`g6{urp9@6_q}(}op;~HoD-x`7JOB_ zgnfu1e43BLpfUc_$1r`t_jc~0<;Y8aHf<{`%moQhEw8KazHtnA?UZq#>NuUV^`$1f z9xZueOBj^`mX_~5+{b7)`BEyb^ew5Pm9I6&o_}YGhpSX^(Idf;wVQoC$96_LoIShS zE=6@}^P`*Ti3jeb@~RrT{F+yCL<5j^ba=?CJ_zgBCwJK$E?_>AX|Ev9Bc*6E9Ho-j zEUh2tqxzXCb~sZxIkdN;n)a7tUQmj%&BX@wH7wGqs%k2__)-zP-iEG)B+YA_$8)Ph z%Qzc!b1JQr)2&SKcUf(dAg~fSt_a-eH7s07$Ty)Z-`RyR8A_Dip=GR z-?PHu^z;vG8t6Mp&u)2=)}DVMwX9styY0yEkQvE=EL~83KZw-bBgjY(?z%SGHw%n^ z1i%a)P9j0)_I6X%%nWU>s-a{gLiJMdScMugJ`F1*ACjZ zZ7Yw6frNrqQOZh7V+E1ODQT*EA@=y=k6-wKfBWzkKKP*zozv2?oYt&a&kd9u(Rj_Q z_W1Y{9&O-gFcR-|6|YgJGdVua7s~RLt7vIU3#TlQl|Xdbvb2?!EM7)iw>?Y0yya)a z?GTmKTmaB%m#Y7(QBvT2b#xDp$2HY24L1zO#-Ehv;s%5H7-FXV-GINrNgdhQ@VBU(bB3H<4ppMk=4?-kbQCUgLmam}N>RNWpgF}OSOfK4RF-HbB{`5!m_>-Fn z0{jku5}czoBOE)4L|#ir)!_Bxv3Sw+ z^fZ`;qjSA(&RB=@%+?*(wjXRKDDjVujxtZf&i+x5*FkT`$(&?I@Ria6SQUbXrhnwgnpX6)5h zzJf`CCB;QOr>c5zqIT%eq58ji&wIY}(T{!X%5~?gXOVH9=!ljK&kT^ktCp{#rp9L4y>}PgcKglTkckuu6a*Dj#^Lb6z~o4#?%@-mYmRMiD81SMvDdk5Na*L0Y}$ z94am@L4@<7*^NK_>8r1O)eYa7oSG?l#Z}i*Zm#G<>$D0hL?3vT)`in^jnqer`$=D&9JdVb7}Km8#+^XwMN&B@`CyGBhGQ?ak?(jWbV zn3$;qP2DUwbuya~h=1BrqWOu%QSemmT6ZKrT|@k{FcNu3Q&zkE(?d$$^P(r^!1$^r z#sR80oMO0I9fe60B~77lZbIM_m_X!1y~AxG044YZ3nEJT!$;xS>64R~yxB-ZGCO7t z?TmFe)m2q}B_%yPAYSuiS&T*+lA9_uln-`#2NYU|I?qp^Bo^uwrn|_du}TO!Yn}M9RvREKgp15yd!1r(u>KKc$0`~#wnVc z%b;-c{Q2DK(9_e+yEE9r3+FGUXSZ&lTW)eYjr0$9YcX*y^vjM zV~Ccf(Ndx<dRmG>PI(jyquOSZsGO|koWXBIbB4Tis-g#fm+LHaSmLnI?xrG;a#=1v4Pf~ zzk%k@pU=D+jLJoc{qjq%q>`c%`u>l<&D>kqTq7<=4yrvPSCV5Ud*{sJIDXTt zYsAzI3HNDvT%Cq1Sc)*Yb3%UUO)q38xUSfdg1DUNWPft=Y z8WY1|+FU=6v7CI+`pr)3Q+@m@3hO4v<5XKy!|#=slXF^As@reB{k$u$z4oTr*~Gjn zuDF^%r$jYDo`)^Z;_opkAAU7TD^7ZWaFmb*X@)orj|@>kQ86uDv4UrKBV9Vwd5GD< z8!x<+htWO#>{E2_ukU8H#?s;v-arK8GeUGg=q=Hak_z!cETf`jeg)t8 z`NV8^adZi9L`;y+BY(drrDDT_*<;B}|mDtkiwJufAej2xvb03wRFK*T;FAAdy2;G`^j1u7p?I^FLj%1Q@Q%RbR zL@5!@7H4zJdwRQ_acEe`JQbp(lmXP)MB8mJ?k^_-?8;z8pkr#PG@xwJ`X77jm3KiZz-QryK%ZnOY0-{&?`OHx%QW2uJv znnukMpfbJ^Nh&QZrOw0M=RmZ6u1Ce3kq&2fTiX@IMMVr~VsQt`+@{-Dt5wRA5M1B! z8yq*sl@x>JL?3)}3qWf~h^N3PjzT*poJ|vuc0?5*CXIsfqTV7grqqAATRtba5rqZ$ zaAc>YB>q=_^EaRR6|{QYdaAFlr?Js7I@H-gl@*mNBZ0s9);n&YC!Tzik3~gUr7Z_rr^45ji!9^^ zzaph+iuxJn&|P$^4>Q<{Hyy){RyGdBIuCYAZax@K;iT-~{eg0}ZfcU6DdrNWZ<)0u zy-ad+{kive0kl8>Z;>?6+-@8gIMUX6v6z;V%+=2%$IhjGjN9O66RE1>LDX4NgwezM z%G=u7R?RhVe8xGP?(XiYzk2^aor}fWKhVdeQvbqsTo5y>$FPf)?B!!OTG~}93VTm* z&;px;xGuMH3pm6jSlMk=lh@%jLZg?3Bo~MQDZR7`@(s|?Day+`B`R!cot>R|fA>%S z@bf$GzVDh#H(thnBT^_n2I-hc@S9i3OXJw2Ae#{3mbNUX*5%7Nt?KOT zN&u-gx4QBFW zRinf@!|Yx5^ysHCU?58m;DjjCS1rKs+0FokkeCz~eOj~Yy;a5Gf=FeTy0kt0-FS5Ir#pG$T1_0-?r$1BdpqUj=2JyQr8r`(GP^>tCdUpG(l^uhRYIL{JbHmii-?>D2drxJVp|o^iAx+m56S9D_RHWoH+MWuJXegeBKdV1aN(qAO zQ1r+s_Xm?EWCppkEy%HmgMTCaQWi9Z<5Gw~$boUz>VEpU?N<=d=jU>ropBM)Guw7v zhe2`N8SE_v{10AMGKqz1(o&O3Su&=%(7A~%HY*aB=nUplj@^pWq4K<6_pML?ZShAN z&-ZV-_;M;OE2GViK1laJa37zuin0pJzQy^mq)a8TxyrV=P+hbj`qW;aX%zznOjfYg zRePM&ge(VfNVrhBGG*`|JJTHw0mI}BZX{`sT*x}@!Ij|^>oMt?Dhq@Rv)GpARY%)I zKjyg#=qhf+>?>!yywrEi`CvK1$ncGv*ORGl~y^}t+-cEq`83gxgMk&n<+OYuI@mv&K;vXJ$C zY!%eM5&KI8vI!>-SCzUIypaJ_5 z@pcR9xU|ajSCy5O(vF=wO15m-auH?`&eeK5qa4oGty?eo*Z=rL<@|X~)ZKkVssTEv zBaQJXtqs_<(A7Liv(u9_J2fdFAl6(Y%8M7?p1Yp4>sa$^gseEq#$FFO3>u^42_SC(C~0S{mTbG^uC*KyY1_1R;+lexw(1h zWRKTJKlZVI{Pbr({~xW(S5a;>%414kejiYvY0=^`KGDzY>PY(_R6jFKTc3S~n>a7I z>W=rMs_%eaI~z=EK3tE;yfXO!NoBzVm4%2X*9g~TSG>o^m>FdDrn`#=I4U2p8XqvEPNu!Yw z^Qduqbyd~qiWMt1Z``oq)~l|%>Xzlpmv=nhWA*-j_=hjvarb@iXl+@}7YL4v4`i$P zJyG^H539k?aO_C?Iy(+hcTW#3ZE2;8H(p8@t=x5_i%Ej$>Rz;P3AMNHr@QXGgN`2U zq0*94cG^p99AF$Z$qpXg@MK zN{0_0rdbS~udGa6^@>;A@#^cY``Oi3Uww0JZS8MlBd1cS(4V~H9k)EYb;m20EnQ~0 zN-m-amc0Gj{OX3_3MtCV&tsNw+nzm?lb1&qUVI5xpoWG9F=CnLKCN1@n$_nXdgRwE zBLM|K;A~RmHsVmqel_pOBsRsp%!f#$-vnA2v{_PlH&ztgl$80{Vd92yAcD(;tz%(F zgt5($C~s8YJppIJmpGZQJ%^!VCNJpg!EwnXR*ss0(c$$?gdI0)i$@GG7t77PQnM`! z9=4(mReRR>_}B`SAq*N1geX~$A=aukW%Alpx!fciPF&`Vv*U?#B~*tn^5hZBaDxQN zlTXkWKJ|&WzUGD-zDILlXN<$ywrkgA|N7zoynlXk6RQ9cLG8ZhF&h;se$XQ3h$1WC zXyjyw1L5%`CZfT~fSxfg5HmlDPn3yr^u$??l~+x$PC*@w87af}dH3sut0LTZyhc>| zc)TB)7!@aAFxiCua8x5hLtIH192}&+?rwM{TDf}lX)y&{`zlRe);A1q#vWB zM~~M0<$K<9$H9YL=PX^iRL0rJA7RDI?IM@I&T*1lHpTZNBEUu2aqs|Mms*yuq>C@P zlrPw>BZv7ST)koq)zs9`&Yj!ofrsy>@reoMcnBz}q%%ZU=&Luovqmz8bt@OPlH7t- zGRN?Bj$Y{w5`8%OgE$%2bcrv_4nq`HP*6k#g#}!`$2y43Vh-6P>+qnz3n?Kw_~BTw zkzvj^q5@8R&1aSpyPO*w7est$94;&@rs9$k{wgUcqmt56o*IGoRR(+l7kVrvBZJb_ z2h8uPmje@Q(IuS1pMhgBTpELe37OCREYXZOJiG=XPdFG{2QhUv<~tsjNW?Hik}kgJ zf+xQExzB8vi|h1^aX6p<%GbYl_x%t4esiM?tB1qU1r1DQW@dsH4QBVi3GoGP*p-;X zpiT!TOmQ2T`iL@O@T6(QBG8AU;kXP8Sc>D}>NLb)o(gFOg5to)Y zvD5N}5{a<-9X?k=R~cwcD8U??BJ-wQWv*!+8MeB-BH``XvugwOZnlTTj!fq(nR z&&MZbs+yadx$LbMy=Eu@jKs@aoa2$7uDEOqQt^@Gh*b}+Pbm#WdJpOFvqEx1?_!d|0*5hu4 z!Hw8ead8Qc|Aj-qI>6>KGBn6zWzYtLpT|Z=c&+f@!Sy}9ODk`d2kGZz4 zff}2dSmFbUkHEO_UP$%fd^oi>ZeANUeSA$MCtS~(h;PZUf)iJVgWF~Em9-qlZJbs~ z>V(H)GKu^y&QDW&+;_0!Al>}qAFf=oWXX<`Jp^Zj!%3x5`S19f_YXme22o5-ZXPcd zjAe;Nz{i=Q@$m_XYRrOHXQGSW9$<44^k>~Y>_uXnhR^zQ;GyAqq(wEBWTg$BmS3Ul zWvBM$?{N5Cqbqv>nb*hTaIq8?6>%hn&xFS!9l-9{*VjjrQ&aS&*T4Se3opLlfg5l9 z`6p*);usUm+BJF++g(%_wwE%cSEum)`33o0Z9-|gb;T;WWYcBr0Kp!{>zuQCEmc?7 z(w3*6pv{jx#D@vahNoWGk+OzRX;M_YpK1>K-OM7nphptN-hLX3+1RqTkKq^sC5|ne z97^w{CFK-P#As-sp9cE-XrQl;zr(>mINwHl4D^aqM{49(pv+neR3-V-*;2df)zT8Z z{;iVE#2J|Pdw^j%`T5k)*hKReF6OUg%UXGO9~>k;7oH>Ol;O^KH3ktV$NFR;z;zTc2d07=TG&J#T zu{bJju5H8an4WWS)eR?b&H#2aLi_i%(ZIkEPq$pR9^&u4Jl(Ros+!JSdp=D~Ptomn z{)$@_pk>2pgSQhqP}5JHoTjcgb>%SWZSIiR&t<6wjzp(XV?kjdm6umC=@Y5Z@ZbRT z_x94!o+EVhNEb_6@Ub-Q7C43)VM?kb=YOsY$4>cFVa%vE&YK;;>@266z7>_0(X!U% zv|`mc)Vh2n)z>#tG#p{keYA$a8OTOqnlEjax09eq_>PAoX{>cksU)(NsNQX^_^z|p z9G;V4DgzV(?z-g{Wo2b$!*sSgoR56`Q_uAc46d3O8DjniI0yOpxqMO(`Uj#3#bFGf z#s}GWc?HV^Xfqg&o=g>)w&XI$m$0NT<9O8U1#81zL+J8*yZm|CUO8Rg*J3_!CaCDx z@xK^6FF8MUV|;cv8U>q?S~N5?P;>Jl$_j;PdS)u^0(KFO9v~|#VW%W0i7$_FuN^zK zQ&CANU46}UoC2U#0mo?d%5yl4dT#qxdgze{__ISAM5Gv8|BrMti_@{7r@19iiHJeqKSTfU{`dUvyWjcFzj=WNEbXYh zOl{x6!&iLdKRluK?l3(~ zOIwz)b`8j1Xz@@`IK3L=eb8gbcKCeID(>kyLI>LqQp@rcbm?VRFh>aGZs;wayKVzN z_WlR%rG5MNQc+>CI6xD^`=xC^#;%QML%VgRdmj} zbLspGH*(sQ6V0LV(NUUWoXMnH<~Ry`Am>2kMa3aH>_*cn{4AIy91)^?~qcmd&n%5~|C+Un|^$E6G9G6>@mCYBDNU)6K!uag>XdR{G__W|YL?S=i6%xzMrnL}R6y&IVVWEtbFKLJ ze31x?!s9b3UI)5_8m4<(e92|BcHMc5ks(dQX2TUf?i)0ltpSTQ0UqkK^P!1lR* zI_3kP;BaV_O94Nec-*IH6LWVAKrHjhr}(w8dxNmHYSk*5H*X=$&c3Db#Om|t#eaGNHjQKfwcF1zv?TDSgu zu5w{A32-!yW;`5+BN@X1(&C9$rcfToZ4#w9;-6wXx?xOCPC<=?S*S2@rb=SXwPvqFxc%ah52in_VwFJ%wJ(1uGl!0T-gDr^0 z-Iq4?VzW(ig44j9qMO$!sDwa2welh#HH}8_Ijr`I357AZ&(hq@uBhA_`3Um*_#KNC ze+MuN@JLp!TuHUHO{bWGLBt4_IQ)D-Wk*m3vl-c5^^E~Cq@yo!&@kt1DH zSy@FFoOcn8jgQjZ_ua)MaBxbbEy2*^O(Y`6-g7`!w9K$%O~pkWlR7I&C0+UptfREN zf-F2g-Q8IjJtVK4SYJXvN;{ZcpyYxEIE;lR49+rEc{JKhro40RSyva zS}qXT;o{eBeo^8RC(M;JwDBh6e4OyUO4h{RqJ&RZWlI{qQdBmC>}=~aly9YuN7E=A zM>q|nUtNa}(NRnljXRPrWJ<(2CLnZfZ*N+-h%UeK8oKbJOE@(fK;eXkEXwCl%tkj? zI3#u~T#XWtm~l*Vy8y_B7GjvnIBwf^?xgFlzVgv8{O_mHV|C^`oO|wn=!V~W%kTfJ zxF|nz+2xne=*Sp{no1$(klc=Ib-Sh#qu8sP1J6KWmdIG>z;{3F)cz+wRr1-Uwi(cv zR*4k!O~-TC!6^C6q*Lm+{5A-L<(d)#3t+afNvo#K?^twL7z6$N6pcn`?YebTSy9U= zC5UUTed4BA*wx z;e7$D!=d5#EIp4PHeyN#GtWcEv^R*5yEtq(CtYuh<)xA|I55c0u&29=x;i^-+Er9k z$W=JJHe^23mb5OXYhL*pI_I4A9Q|VR0FbTD-Gb%pOgyHsEsL87Cx(c~F{71ih|l}X z)@SKQ-}&a7F1zHCpPbPS=cZr&>W|;}#^3$=+O@0b-1Y0IufLCTbPME~?-mE}D^gni zHf3`4;I0H{v|r4{qXe{c7O~0%*fMsY3C@hQ)#-`0telj}h=~HUKSwQ4@xtVXygZ?@ zn^Xdy8z7~YZc#PRGCrysix)4U>Z&@LnU#>(rY+`zaM70Elask2u)0mb5w(w-Ov@@+Xi5`Fwp(3Wp9mE>}^KR##K)o7_5(1ColMo99t0c z60taS9y~yu?FYCR0DJ-9Ic9aGTTWg+)zs8cVR1>IF_txq%y|F<8j%E?0WKamOWF0& zjUQrZ5XQ;aiHYOS&K4#xV>sqBbF`VA&1(t{1x#doXApU6ntx^-C6q-4`T3^%-f8rN z49!5abaV~Ld1ZMCBMgsoi`PPQgeeMm98wxEyAK`QPg4`){I^5dk|VX58JWFi?7~e~ z&})C^O;lM?MZJAJte(KtE5kNsXXCZ=IMSc6kC~y**9ss8O^eagnN5egj!;E;>G-|3 z{i^u+&PjXOIGpeO;3t3c2XA}Zr#76wp4P5gL%qFy0mU=FbnWIONmQZvDW@o=46Xn% zLTYVQuo}o7*bCE(%Q_gJVXU*7J#bnd&unAWGx5S~+@{a>HCZ^q0pGw{S?&G8w-xDUH3sxo_b@1p6M7+rV6tEjfFjt(8_ z;3(>%4IBA_yXXJ2_aAVUWmk1DekxaWbyZhYSL&R*rzc0vjAk@RIiZLI2q9sD3<6BD zvHf8i8%O*RjKRj3Phb-TD2Gu_BWWbfXmaW>onv*Z>R44>RsY{wYp-+8s~!mf%KR^k zy1T-A_uYHXK6|gd*4m%=2>CW};nU~9b*&h}#L414qJ(p{nA_r&22G#E=cAv8ohdTS zeY z^K~7hXVm4wl|i`!{7BF690M4F9>y8(*|jt6*|j5`M?gadtG|z*4;dMB(~>gHmfXs}8O3%u-reM@38r86<;}jOXf(FM{`%zI=cB*Z=&Ne*3L&`LTcU zT^DeE?+@PgAOG=>zU5!sc*~9H>T9k_MbTdTqyplYI7V z8ar}0ed;rx;B|wHLKYI`JsPA6b#|x^D@-if@njBr7E8C}A%2?0V2>3 zmRS5L;&!nqxjbu*=UJJN$~#a$4j$N-wr_nZO#!b#kXbyy+l_3;8}GF@-ke_cir3J> z6-x>>*MIrDCgA+~Z~gcG z^9w)wGe30WEw`jAueu@~J$kIvzx*F-YNB(~z(c4yPf=@|Nt}VPz-t;XpX#+6THqBU zIL#}&8e|HUMX1@s-XV#b(v&wAyV`@L&L6zEa%9f!>OygD{a1Hb6VKb$Fv_0 zc46lh+~nf&DgKFIgH(NLDn0h-qiNOJb?JF8cp*VXNEBADUQ3VR$De#G-T%Os(t-sG z2^d<{ZH$KH(rjsKTZ$lDCQ2$^Fl0c54`NIQnF)^FJDyHEwm!u`gV)2NGCSNyPu~D7 zO7R~S+{qKis3-F^WX1wK?)-UPCjs%wYH+Wy(2bMe+9P|>b?(x=jPpfD2xS|tKgurP zCmbOR=SR9Swi6pc2`ay5$vte?kIV=M7A!hf$QtSrdbSEKbO`9|$haK-a|YzLyE8ik zId4*u+@SL&P7s3bp4~gs&ZoCA@N{){vU7Ou{CRFpIJy=tOs{_38`86Hy)B)fZtNIu zjXP1fH6G-@(ohk1$JfVMJT}B_Pwz;pS1v#B;rG6K*>^?2`R(8Ry|@3&TYvI(*WPeL zy6%Q+(~09Jcp{FTEmd+Hgtw;(hm~t=qS|e! zWyVdQG3I=e$ma=<%+@*?0Cw-(!9WA7#^nR>iu&ju98RlNuStvg1|+CFdzNiqx%0Wi zE%p??w#WcLV56_^>`cfC+W7ml#)wOT_e6GN+YtO5b&!pyhp!^2)&*-=Nt)Gg@PG%4V#Ob2g6WK%~H_oM7XAg6)j9 z`mUW%r=8oj=-T!5@jUT$!w)yzc4vC!YhKTDJ$PWh$bS$sXNw91An}*XG;YvmMHx&w zKwEqI;{ErbwE7P}{S$BbC zK;wtrz$Cw}56fK;BEi+nge*G{K!O{QL%){BY2zm z8o-KhATwYvz@qN#kY`c=!w8xPTGU&?pE>MFYR8 zsFnge7N4tZ4Dcal>4_nVZ3-^DhBQYP_lE%kffc?xkhM%=@@X-NmuXlF1J9uY2h!H3 zo=7K;A7RFZlJ(4)v&zU)O3PQTNpE=bkEW5~(X?~t4wh7w`4~u-id<9?Z64*`)|(l! zC`{h?`1{|pdhOb^yT2m?&U-&__g{YB5B$*g_AlyAcRu$HJ_w@c7nwlj+ZeA2a-VS< zGdq1Dog$VxwUl2CKye(k7<2xS*~9bx%o?b;usMCs(+x|D-j4tIy=;vc9WAt-one8O z(LXSdF1zf~)Yb-5sP5cVcqS3%eAY1koSkFp53iu7pWcz~c;55VC6{bY`}gf-JNed| zpTkA;sn33r3#WTQcj-E%a((qttFf?|XH!NOKhu8;7NP_>mmYig!L;r1N7E??Pg`3r zDxF4`u1KratYxslTzKf9u=tUQkaGih0{<;wo!&;kMzHe-i4Z}-##_K(WQ!s299hr8 z9+h&)R9sRaVBy)o`>-q6(aGQQy~58TP#IJvm`YL}Bo61|J!OGma2nYG$|C#IbaZs^ z8sK2Y>UKF$k-&K9s}q@x0=KXpWb7*K!k8@6G@6<5wX==i#_SA)Mx4{0-MiD4Cm*Bl z@xZ_UU(YS{_O7nT5argb$7s|5aGib3doe+e$pWV@G=NOJAPWtX-RS@7l=)cl&ehq!{p?&wqwL z4}dfWl?Yy3G%>0~e=kDNoNimKT(OC%X7B7wPjB0j9=h*~lpxr;p}wx2UES&0>z|c| zMn)NA#tt8f)^MkMiz^QyJNMOt;p*VcG9-dRwib<2#y^XUK+jP-gAGbbc;(=n077Hh zDX}CxD>y&kLRj4A&a#97E{Iag6FKb~Xf7DbA=`{L1Cvs>%-J9gGMM9jm3H`4!!%9= zqPm=NCrh_i-b7d*%#c}jU&!Z#z=KTniN_vE2t1>^ zg^h#M3U<^?ik0rFGzW?lMP1pJbpMy{Pk;Eo{>RI|=cO-w|94El*}iMnfBmr^f9o%P z_MT6tTW-0DL+#yKbc)Juf&tjzwz%AJL^eo_-NalLvxu>PePo}Ts!NnX+$gK+pu&I8 zE0_HJhSqnG5B=~NG;~Tj-`y{}0#>CPc^x4(y!N_l*_G*NM<7VWV!|>7n`gyCnjeNZ zVE~-SWOnb~onG*gm!)-U*QK4ib};q7?b&yvW5M& zg-Y%U+tuRT@H(U1YHQ>L*d0gZBqG{*(%_JBxyo#Ng^Hxa=H z_zc_O#B0KPIwTCZ221YD-I+-vfuVzf+F&qo{Dp2)bSavy-T$%Rb1 z^K*lZlP!8=M!^_oGlHGWNuIN3p5gtrZ{3pi?A%7uB*rFBoH~`2@-KeHYtmiMdr{i4 zV|$tyKf%u;ep(1T!?rYYtN5%3W*F-b{H?|PeS1Ik;k#FUwKd*|ihc`^{Ra>K>wo_r ze(e|U{rudF9V3S+;@iR_Qoyy{%^kQm?Wfa}=+C>I5v9As` z0tXs1hB#GbHhXsON(T-eOfP%Is~E&Fs~ZO9cisNHv~U03^o9HGu$r`1 zjLVB8B40xe8f+%V1pdZPJoa$<(0ksI9{KWp`E%95=F%&!NiTopt2tYIV*F%!dfQgE zdfjR!juLaBY$V0jG!|E6co~ci(je|D7A?WfDD!CL5#1gvT4X=YUXZaMuprn_?1`>S zbl~v1EaRr2pq}J=0|Rrpgau20HxnL_sX;m+ma^~`wXhkOT0tPR?{eut){uZpZ5z3h zKbGdG1#>_#j>C?XP5tvd7uG}k1?LzOM=rhmigf)=&q-6$v-Fz=dDDUO?)SVSz3)AL zl~%1;le)UP8!S6K{j~vas7h-;`^%OrNsm7M#ESp*wzvJvw|$0l;J~3@{=GkV+pqrb z|NRFXQg`#SpOxA>Id&XEuD&uYTfRKCwZZ~H^?!}i1E&ZY6@JzR2?1~NzcCNR$6~P_T-}sHs+XQThB_@#N9KCD{5lw#&JVR4~Ef(Oll1zqL(%_%Fw z>r&x;VLC1B?g^YwT`e5MWzL?>78W|susw|_9LDIHA}9mM)+iuFbo?C{j2#}!^wmPW z@Mkuu5?IgFq%u5ZY$6KcS^$Kex}ac)*F;v2&jNU2d}5q9+QiA@>|z1*^?0D0Z@Ys; z!7Wcd&Mqd;$2Jy~&F(Wk^Jy-fJUNc@IRE9(ex|RfscG`tGQ-)kZ{IKcS$9B9}c52mSS_hjA;-aId=(oMpVc{B}5>x#xd zuQYN%tTUe)(Kl}6O`^67K#;7xi!I7qw|*^0;-VYX(a}XO}Z zXT$8)wLx5}KHN*#{+(a>w#;z$??3p%cYpY!Z~O4aKAt}O zp}W(XH7nAkmtLB6O&Jdent$&8R6fK0IZrsSwS=Af3>u5rRJ?F%!C^zNnb(=Be?O~5o9e6bTYD1%1>TQ7lfiB zr{VXokSt9Axal!3*pacgYbLaCk+PWao+#I`_~>a9_W)%VTF4*|V!=81fb#;oR9qE& zPS|AFNs_H^T3U!9Y#R!Eh6Py2Ec3Lvv{1{X5{VlqgPz9YAv;u{)9>P1yG5=H-kFcM zK6p+1EY6<k|gQxJr?|En6(9qDSZ=1=RhYlTi*+)M9@wcI+cJJptmwI{@ zq}6LyXZ0}-@+_*dWqyj9=INhu3ojNW9w4{L*`2sg@csjUmZ{EQiY(|!@NLOETT^b%4NxOFKV2huGyjEm13-~kBn0!jr zwmLO@FJ~*kHBq-nZCD)mS+U7u1P}yl z1iNW=)?Ah&J3wZE>jR}aI$1a-r_QH=fyFG>@pA}{<^mb7LAhd{5QF1fA@sTI!q1cJ z*WxT$Wg3E>%(`GtB9^z<$gOD(9Wt<`0~|&0)6Q*AQ3Pr#$tOPa0hV8vU3qnS_`xrW<*Wy+Ja&0K1kWn&IfB=Nk38J` zSMPe)zep+l%WsR4YJ7bBSs(t`$KH2%>`403m+oUra{c;sY{%9S)Q9IimwDWQ=L9Aq zEFmT_WM{RK7CYTeHCS8``SQZ5*uFI$;|`chmipZM-VNlz>NB{!!(nowgILxcL6CRy zWEvhFN!LB=dOG#>^!D>%6DV5vJ~;%qg!KQ-&T;2LH)`z2k@TXMzMK!y-aWh1`nBuR z6_;L_9(d?J1{-8HGJ^6%NYCN6GQKLLDv_yiBRu55eLyn%+-E+O-ust-#$dyF+tq#E zcg(@I4?Xw*4cD5^>XMKGCxL}i2T zMJ~6a6NK-3swW!-k&WSZ08k?RYs!XH>cc5o)TYRKxj3>l?zny?ghi z=e^*?slUIUitkk`*Q6^hyDB~K@crq?u_FvN{v5SMhF{E#Twxr+si|xf@H-&Dojrdx z-Tl6Ir+YsB5%HR0KpT$c*7kJsbM8!6TzM5qWnaGUK7#cqMQHpUW?Q(nSiD|TUcAI6 z7(mLf!%46Wp2+Bcfj_m78mDY#9v(P2)b=jhNj+npnGHT0 z0=03O*l2A)W{QO8sp++)fzm`!T{q67vReT;KQd!SV`9y^O=KhcI^+1uKlvkOM9WvK zV#6ZC1Gza-o*O;W+8l=#52lA7d#vljpZLTZzojMB+}vE(yWabOdygGE)_wNe`SiKZ zeJ-`Pw=%nFkoZ^ZTi3Iu`kOsWjzWN#wgs)hTQ35;=GFehCfPM!wdf={^Kq6_n|b+j zR1*grh%#Hbs&5TkH}HJ$z7?MV*b~nA*4u8Q1!i~mBBu0bPM@k;o$~-fV&HDZs!c7!${PQYHX^ zb72p`=Z}8yy)?xtKcQpE@>S`MyPn6dLKuqI>*>YptZ4a%g4+Z_1RHjh_`J>#@Wcx? z*mdGLfb=0cH~3kWDkvLJT2-T&v)^;@R`7fvNFXq1$H(gyg+9Srkn6a}B~|dIV3l_6 zETIfT=769Cqb@LpJ3A>e;Lo+l?t>DA_71xC;W&Fnwj*<4M+%OS%Y19AWY(_^C9$;V zlF{INQus^FIl}u;l3*q>nj^5yhzy9CVoQM2u}1JcSX`)qf$T{{!jt1C((1MASfY&` z*vk?PKY#A*ne_HQ{iF1TH~%t&%&SV^r@_Ta;X|(F~H{O_f7WJm))W!@1 z-2{0Dp_rXNmmSqmPi2 zf{r6o@}NPp`_zudZZ5Spx23iPz!X4Rh;oE8;A5a5f=W|>^Q|gF7&yS(^&EJ1oJ{gl zhNI357I0nG~IXK7gBS^5^HKmBTWSBXZf9hCVyMD`-EjMi1wCTQYdcgVECqDDZhaP_T zI?${4A2^uqzwb+F(IOZ~EoW+1r}&xYQCmVpnN$Y~mQT0=cwo+k0WiCC$?|l~mDi>xo_dTdVgP_5z&X}M zOFKTeBm%O!G$>APN3a8s8DR>*CqDk+bkD~=+>lA)=oXLEl)Q~8blcqb=5l0>j$;aLe>U8*8T7W_?F4;H3$R;}su*$D;_EHo@& z=%A<+2f$22dKuH#8^TP*`SFBIXBECBCi7{Y)?C(v*~AM(OSGJ?d)7_qsmC5kBTJU1 z#~%JNHy7}Z0NBGEYw^HfT0AHl)tbdi5hfNqAGD&$6VXtazBWGzHi3f?Os*K>$bM)+ zib)Q5Rw9skN&|kLMs)DL4oqiua*kFdQ`3`_LXe5w-ku)#(!FW*y7g(}rp@WGM;>Cp zgwbEaEclR^cufI=gW3BBKK#)i#H8tODu(l^&wTdohaP_T4(u%FCa2Qlk3W%)92uj{ z0={N?wAib$<5s)`mnyc0a6mCOV*@Sx9kr%^#}6ZX-*}FK78nmuk(Y~1T zMQm=<*TE*Uo%JFagOa=2H0Md7uD{~ytJ3uJY#JF^O0JEvq6!SIcD))u!fpzx{!>pq znVxm?Eose~HQZH)21nAhS6!F3Zr_r|j*b!B&FAh>w2ouZ6^WD7HIB5{is(gs{b}O# zsr1gj{Im3#kAA4(x>#)a>hFC$%eY4#eu!2G0EuzP_CVBlEFgA(C=HNbjm*}Sf#7?{ zCa^>6^=04SjF&T>K>v?!BeAA9f0tekRycQ;PWF$n=ge&AgJ4IB%*)se_&*$j8^-5Z zyBGJ+v!^ZuMqJjf{?_*S+CQX?S=zU4G>?=>;!;6+zgsLkH59 z#~(>gKK>Xd5vixQSynNx)Z#gZwIdFcQaBrorM0R( zx25Ygc-}d5b7?y{JCmM#^2v0?RoA9VHg8V5_v~hy79(7C?Ao3V9X>#?vKEqNLSw_{ zE38)ksZ64sCgzYn{Q3X=|I*_RJ#f*z-LU!cbnESRu!MT_kwEpGhnS&ecexZqmV?)WGy`}VRM?9L7N_l7pG>DG#?$w_ z>U&v^VDiQ7&wCM{x8p|-r5#Ui-%gFC@x%;$ z_5!X;_^E5*$r1+4#ikao2~-jS#jDn&);3snOcNu-{IgGf^zO87{l+5ys8&qDJ&S?< z;NpSw*b`4If8vQJuKlJ2oChCy^z9FR`JtB+-DeAOGClRw7CxY>RhQT9n{`}XZ6bN8kjZccmm z?Mep@9bnh0L{GDzRnJ=+Wp;ASuvYfeP9yWjAAcnM*&qGyba3yUhU?ba-kF~J!k49+ zpM48WyS8rK!g~o!0-q1Ki0S*Cq&jF*purZiQ`^4IWj>898BiMA($xzutKpl)Z}Bt% zx6d_IGP*hZT?Gtju#|-$Ly(9vgr65Ka3LeWFcYF2LKuP24m=BLki-FE?Eb$iE zTu=i>j14XDP=Yf6it&tRftzl44+BqPHWPwZmYBg*hBc@%DG5)V{o{9y4dG98=|Hg< zS-PBl(paMisEH96Wq3 z4fGJ}Tor8k(}NG(m;UmP|1eFQkb2lhN7usi+Sh$wTC;Wy{Z?q7(bi5TuC-72@v~<% z5mfK31%vw}94^r+0gGcIhPug3PWTB`;306V?+F410s{gCUeCa{$_p((m5m|fC00?| z!U)27$0wOjpfIO3aBR?7Vm?@uC|7M}fBw99Ebc6U^J2ROx6Ii#4ny?CL&ND~A9`O} zzItt1yKY1J_=n$166bSY^s=;X@9wl?+m`g)7rca{f?DG9;B$BenI$j4sA!EE%xg#_ zENUgWF|xiIrxZm%8L&SeEhmDpY|muF6<%A!$|BRj=f=Gn92!pji-);U;km$pEC-pd zWEPddT3G>wAPNtruCDau2Oqxk8yawS?Arg<&)xf_p9Y%~q@>B{D8O_XbCi}W8C9gM zJY&2VbBj63D+8=%3~R!dZ*;44fM) z#q;aO&*XE8;DiVA+8eG{uvt9J2ix`zu~C)`DW9`a5u~IE~jOXdI$O29O57`UsxH zP~y3WjYlnHxdIAjR;P;=6>&dMlHqgWduY8|_1#>7v9yT@OvUPKXQu$rt^TG!6jm1K z5RnrD`_c3Knd@)5HGSq&AE!0PWmjI4o_*V$>9e2uSX#DxCB1eqb%9LlC}Z)vrL#8I zfD5`MPdf}^SNLo?FXDbIDKYs$8>|f78>J<6_RMY;GQK>WQvzLUt}NEXdn0(ltH_jt z!v_zfo!hpiwQD!1`&dm>)idjgLTg~4zdt>-b?dW0iQ$?~U*}`r!6PsI%suz~4lFCN z80Zi`JCjbIIm_&(v#ULgE*WW{`xC$lo`e^sQ|da)kcOo2X%K}?g7PBI=2SJvTM_o= z>w{{olYSxWB&rso#+Aq8EO3t$G>suV-Nv0bDgx+uNqD6*> zbMNlm>BRUrJ5pFA@Cv%&nj1*z-?``M>|Q52e+ek+0+k0L3pFeIQ!GN*e}3}gA7!wy z@sy7>8!kz&dF}V|XSZ$J8g>qFiIe+3vrUrk0B)+2gv`JUW&DXuteqB}+QG#-me3Jp zH%Muhj|u{ZMaLdqLX0XHVCc z9(ds9uY155A0OZFsZZbYe#{3VW-~Pz^)M_b4su-V$jDGJm98l1c`zC+1;WrM{_PHy z#hC6MxD(`sZBCBa!MQ%E2ina8rE6TL=GN58@SM3sAgVK=ntxE^O*Me&*ITk|89hhf z+y@!QxpSH+bL1Prj7{VXCdxhpGCXz^Lrb7DlMTweqs;Ca3Mi!;UH z__3ob3qcl~V%MyYQ*}fZ9humv)2Gv;k3N3m*OiBJA4*F)3l?otM(ol{h0i!&C_ z|H*#Gbr$2Y&;QM{uJFHY#>LMFd;u)b_V#qyl~>R&X3?U7MkaB+E9A042HL2d@xbof zwKF~YId`P~zW%g#-=1{Y=F8LK#fxb(;gK`i>9s)3$em{&mRUz`enH$hJu{R3>M#B@ z-T(P}8gFV-OSxg~)8f z(iNx1i3bo4#;9K13SSP{ zA%r4UWNDz5fd4dG;0y-hS+vDt-aRqB2)Z*fobL_~o#}AQy#L59|OQxrl)o{j50JbMjoFvsA{ES6?i?Zg%-5b@v zsvrH~J+U&kMk8y{OrFNoc{9fwf=mS<`{sxz z5@2PV!=;yBo(2bpQ+Ibyo*LoZD%w%G%Zy7u5C8zy>q$gGROp@F;2$O|z}jKOiWOa`rbi_C_jXtAr;a80GL5}t9f0vti9r$@o&oqzRb7X_QPj;?g;?RT;?c=D+y zIkgd)mNHg7RQNm0-LVMK*#H2J#Y+Ga3m>j^Ew=qsHxUaEr$S~dGM%uez;&gqXIEF~ zf)uFKC9)1mr9&ni22PX9Wg+@{W@5k_A98lU$`~4Ue=wwu?=7I3ow6ph^%ukl7I*@8 zbF(xsi_d|;Bk`nwBn3v`9aVE97A!Ip{0uBDI4`TCBlRv?ls0U-gj^RaL=f+AevlJb zK`wk#pGQ~|=oFCNOz$FZYhY5(56Y30h*?68)jKmravXb^1Qx${cii}ZCkzHr~ezqx<^{_8JH zpHJt`PjSXI>)8tchtfnkwCXFs#n$~aJm^wNZWUw-q zba~uuxm|ugJSE&tv{=IbT+pun9+Og|tdYI79C6wPfO6lY^h(GI* z!Z^@XLiX`jfBq-wfiK+KaIM#14{dxu(*6#7SJYjM^q0*^5n9^9J8ci(n z9|DESs~86yU^0D*Ny$e*&~?Z2V(t|%ADMXvp)Jalj6q~pxOg`9@TJ9QaC!JXpc2F) z#_uuMw0AJr;asUaN4WxhQK+oq+k z>79chbkLKmX2t7>v!wnV$AWuHEtV5%4;`xsID7d0{ zK2h7{`RC@4&CI0!fkEOnKER#^1t16gx>r>-X3(iRaPZ)|Q>RW1{k;Ru?%n&I`}h-2 z{cKAU9yS2Q3O05|L)yA?$4-jIhKGi-9!cPxfMN$9GA4tMq0T{BBn|`&ELFKhAh~Kq zySvoD9-cP^)0s|vVd}5>>opcLKci~MimGf1524SS^?gTsy8Nmu(!zzk!fno~tI*K? zuJus{iMzYg(@$@wH}Lg0+?Wm@KA3tI_NJ?^yp~zc_=Mcr@@Z$2LVL&*%D+Kk{|Bi9 z%F@67i$6{e-~Yvi``O;PAiew*uS&~TtY8VHy5A4Kx*;g>uxJ>7n9}RLkmX>PM%Keo zD&fCED~i}vrP0yrAd@gogO^~C3MqpoW@^_ZAk6D32D)&)P*#JX94&ovslpBw*^_NR zQBJ8Pj>U;=Lb@i8QO0ZF*+Y4Q5xF!V2Zx2W6)OMip)C!UY)OfgMVF0PnOo1*0=6+a z=Z7cpj_PM0nI1L`x5dRLD}b-ATWMxEi}r?$fP!EI4A1&EWR_%1x3)6-kSqcnIb9de zUCSAH_y#E>E15mJjASC~TyTH-7Y~-TzvJn2Y-}toS-LEXrAra&J(}j*Je4M{JB{jV!!v2_nZZ22jH>xLH6~MAhq^=M-?i4tH>}2V_^?&3Yd8<^ zZAM3z(F9#~mNh9bU&;EKGB9CS-1x+)bmPsp$V`52E?sfimDENZKXIIDT<%m1CTeRs z4Y$Xw&d(MT`urTy)|Aq_-|_bJ@cmzExStDq`_ijk^SZQb+4A)0qmK~y#CtC3jVekR&V9LFu3*d`j(F)ubr9n~^Wo8<;f-=&>*bro# z=G*VrbbPXr0|(3{wTI4;pVJ(f7R$m9piejut_7BQ?SJD%@#8h<1C-ce6#YJ zB^zg#F35Mt9E|6Ptf%`xsX`1goT=LUAi?6uout^@5PZZd3Z6|h;@6)apW9p-1TqbX zga%7|B0bWwPsQgIV0=N23l*(I0kC)qNg@%!C<2cF^fGyKVDV5x^|5X1lVr-{e);!I z+O?v2R{E?&S>UiLG#87 zlcRtdJX);O{$Rr6qD3sF5Nx>11nJFrxdVa`e%IXSfIzBn-Lr0FDKar}k~S0ArS|UM zqurJ345@4t41-N-usC<-DC(PKz`%LF=be9W?zNQEzVFV?kxk?J zJ6p1cj`s(grzR&Ti(w#`REcOtvUxtmY;CsT`IXU@q!FH)VPKb8N@UFB&2S@E=_U3w zJdM?s=SGiG5nZ-m9*Y<#j#NEd&jL?e7jA;oV^umUmPjSx_c`OU;XV%xjpXaS3#2cN4odZpKSPE|KLb^$xC0x-$NON&w>mF z3!dJ?QGOs0QU_K6_@2##zn?m#EEf+w*|?FVfZu~IlD&U@XQ14sSd%;;fwj&eJo?sN zzn-{&&nnt~vFp@~DuKdo7;vFMg&o*}f`cAF&uBN_$D&qti#Ro+joBM;9*yypCXA%P z&Mr-SsALobieo+$&If^m)Q-r`@bjFr)#S`vt$J@h($LY$u69<&%6 zw>?JaB3RTs*}NZ_l-GbdTv~@v(USugnVu(GP~eteCvcF8sUh9@UGm#%;=?uT~D;5>)e zLE5`I)27XvQ*Up71_r%bm;Q*ngM!9msCMRJL!h z{bF27xD-(kD)-Cyg9&OXmxDGDU@d|Wr#eLUtG0wNVpBemH2b|NV zPmezG#P(nAS-61AVO%H~D~aUgDGEsK4j(?0Iy%}&a>`2O%J;@u4%^)^FIx3yU@8Hm z@#_&pI8iVFW0qLiSC;h!4C6}cWCt>Y)DtB}IP?*wJ z2WwN+z1UF7!7Th^ANe4i`0Jy)w?Ex+*K-M`Lf;0TV(gd>YEIGdfYV$mIyROJ;B#rQ zit>*4#gqczDJ1iSYy-i97!CxAvvSKb27|?fof7W{5va_wwD_?wDE37AIZ7p2ZyLl@ zS>gqNZlJ6`unFnfBFIR|ZDVz9Vg$6qE&~C;xJ{N0%*}DMjx8^obs&?G#}CRk;8qKG z&bGa^9*QjQ;0xu^y;1(ngbE!8uWe*|;>##lYJ7~E0Km^!&P{>Q+#v}-#XxY@}7JD7YR$}&T=8t;4eW!_W4sfbLI@qm@qlO(bfyytwS!< z;CRrN7~GTCRc5LMja`>xF(OU3DjY|){jAjG+1hg+!?-5x)ee63pP4aS0mV5Js>G#C zKQX7;778&|q^G|xZNBuf)YaL25lB}PZtReT#R_Z$#$@2@VC*d%^DfkKTO66-K*jw)0Pq4-n_4^>o3uLsp`20h5T^wJ6$d&=;tEaX*Ts9{ z-0<4?y;?$IX-zf=3*b0+)aGhS*Fs<(Qy8u5PWCaqev zDlK2WI(E&e2LItKG;pUXc9)K>?sVe#v2^zIDOyjC3=OBgMg8nZnJJosP2A3G_Fi}8 z0)WPKgoVJPk3GV1A9V@W-nB5@e#dhuQ5ZWsM!X0c2s%=DKoBT!-H~zlVI`d*ra8zq z0YXe=6uACy1$6h&1k3@vo+k}0U| zj3Wc(XtQ(1lsHNVn37d!vL+7TG#n>HAQ-lw3q#eeKtT+OaufwXa#5OFND{>R;NBwx z^+tuyhHQu>OT{yzM~wk~p4W7?0>OLZv!PTnM&sueKj)w*Y%50MM3>HEY-BW#&ZshL z<3jQtDnZKCLxWd0hub+Q1+^liC7JLV=Pl8!0BkoS@O#i$<$!Z^Onjp3vDDb80T<`= znKK=KtAO+IPk;VxSp3jS!N)}2uw`@$S)jqZJa+6DFOhnjrWR*Y-9M`S%YC>j%t;D?2D&ss=`87MgD;2;u9>4_)yU7T~ zjX_rCaVT|AFpgt3>(OIJ(~{*Y(#~yLn4XV}j8eL=@8G_CW4Rj!2%L@1t5VSt3b)u7 z^$(<7yLP6({


E7Ni`r(2$L8!azEDg;g;QKB#n0;Pc|(EV<5l3<`RN0Hc|my+PJ zg+Jfc+Roh#!5_OG77$GGab56?Sct0ULK6tc4GPvS8w`~@fU{7O>}ouLfi?$tl_A#a zIja!yOh7M5bqG8dM?*%jI%oi@asD_D1Wqg>e4pgGn2^cL^UN8(FStdTFwrgoVfgZx zV}tISvk`;&@0)l5Gs2E$B;nKfQ;qrIZ{Q`JQ2&< zB2R9(rVB)w=Z>%0()6*3XGL5$@q^g@j!vf;$KD*J%n$4`&Ix2zA4iWI7JeD6{k#S% zPpjFv+4+NszVfkq-@fPW-n0Lv-kycbZpgz3yoM-z{D%*M2o1s?ZxGt6_6|0-68e_h zB6ll19yUeuSuR?qceWzPv!5d?ax1R>a5ZMrpna;pKF>nb*-ZX>4JcQHK+iC8a3nVa z5B!Dcbm`?+q>)jvE(KgxM8oV!tS16^tLVO%B!zSn>K7pM~@%j!j{dY zTlaDEbNgGbqf)9|N0^smN(07woHz<2>~h@p+~>2^4k0KO0|ErzLtPh%{J0=uhXZEA z=>);<#R49VsROvbG$AL@91{;BZ~<>XFhW^|g^8U{ovs#YiLwD&DF2atU_hLCN;n5( z3<6)nFDG~9B2`DW6)oOchM?hbZJ9a&I)J^BjI-gjU=RkCw#1V1J2r6?coQ=Y_}?tR zM3G4bN(5od630D|ak^N}eCC5`i-1e1L5yz6!81nuP6P8H>sPb@5?Y~Rr!+&Gn6MrX zUW|K7?`3%$yM$KvO#xS}>#}(|Xqk%Vjj|fK7P5?L5=r*cR(4`cFlUv_RNY9K(NvC* zIvhKCgw`Hlv8VYPzP+cL=94wP%5m=(zWnQGZ$ssbhfN0GbsM%X;P)~VDTC1)muuTafIu1ckvhvT2iM87IK zF$s_y2e%fZC3z0Q#o?iJ#g$ic2O;w_e%+lfKQy*Yzz%$Je1g9NXMY^nNs(7z3};wO+vEpj<^45+P7$#|l3`J~5tWs^b}0uwWry6J$UHHt25f*+@|9 zP@t1-YBTLFTsDfG934nE8Jy_=C?@qnslTRLhB`mHISSW7pmTd3i_!i&c?e!~kz6+N z&pb*7X74J?44M)sZ`K4$Jojbnik<`6u}qa`(?E9=!n2Vns%%td!C>qR1n(bKs4i(t zBD4w|KgU^K%*vo*@1Prjr_K_mK{*wrp}mmUk&DTw`pnYtX*xvl&k;k+yQG7ZI&Q8> zxc=fAp`7M(IV<4b8F7C0Y}~KXZ0>6cIJ@`nzh&p{y;ltm^t1D1ONqRzM4Qbw4`eZX z9S>sRN~o$^7WZCt+4SSHox=sCJq z_)TR$>VRVnOm4fIgw@iLuDs^j)YG#l%NMdbsseIdO5rA+IB}BWL+~KjAJKuCj^%lqE**XfCeA8fdP*WGXvr(kZ|x1Bm^oUL&vPED~2#y%$hiRs8utT85&ma?`!~@r!K(abt<_&q_1Jw02&gQ^l zyeMm#K#@&Ixz2S3J`6QvA^OdZe8qh;3_$6Gsir^bR;qXi*HJn(Sv{9#h76 zNL^wzIm@wKh4GkqS*4cZ91MaWgV^j$8Xg(Zd@2Cg(eZPlPt2vSPi$s% z;7*@ra6r2kPZUZpVT+-{W(HeE-OxX|r9}eWX0ynf=p>jk(K(UwP<~Rfb0IO~q^Y?} zoFFaI)U5LS;iwuoL`GRnuO6(6iu{+E#SG%Y$GFKyi#r=7MPMnww*X^?hpLQ~CytkK zMK_5I3T2fyLkW82z2kPcH(YFBJqvp#|HcewY;0`9_8mL#92^|r5HFWdwcyNzCxc}Z z6X1=s@u73nbo(&lDYcj~x)nIID-?Nv9pO-qW{=@IONoeHd(Su$`|ovI(4}1F*Hmrr zhOW=N&J=E@)XatS$6dO!BVBsg6||nfLsED!N?UVaAT}Xz^4#QP8eOu4vi-fgc3gDL z|M2&ICw=aoPp4%oR>tRwjEUJy$=*a+Z>H(_7ryYh^x^lttKoH4tX`jPyX}s2a{MGc ziLj9IAHhqqTPKN=`5pj6VK;`XR+K^tNS?XP(IwC(r6!tx;r?O)+LFOs7RVZ)|I(t> zgih?H=wKm$xxs+o>z$Bup~6SWpN-_cm>KS8N6&^9IqyMWL-roV15XFT_I74jqobpw z2jKhg>%le0YawHy|4nBnLElbHWN4Bh*{M^fGhT;40Nj%Dl<>46oguVO2wYv5qPcJ( ze-}(cAGF;FQXhi{ zu_~2eRE9^EqjED^=V5PQ(|XGmJnPHdC2hpvkQp1SSjlMK;9kqrU)@Jdps0y|^;!=v z=`(+0hV$^_PyIY1^vv{yba?D=wvx=+rR*i66X#6ga~O&aUWMA7xwdwosYH-&?{Y*b zy;+;m1#lw*gtJQ=AHd*pc-J@JWrx0M^UpUig4+1 zp68~f(()C{)2dZ#L^BT~rb5cYuND{^JH+_-L|QyN!kdIv|GquDpYgi?@gMw8enw2R z+!te7jJnvs4CjK~7agbh?e9ecL+RPK+^R)>@+8k+GK6*p2sz+2a|$Hez*Iglx@mvnKq-Vb^a{N4Q4YZPQ*g)W#F|Jl18aCG26hRfuh{3aX&x!JDwS<-H}~E z5O`r)7z0`A)dYj&ku9-XdsH+j6g@qfqjdf}TmN`pEaIU-S)+gzjlh7#%n}FzBt`<` zIYRd5`QrE!T%0p!&IaxV$AT$ll=ki6%q`lgfQKauQ_3gsQ94w*;n~15I5{~fa%F3b ze+kbYlKsrCk8CgFCOA)EQNdLr-6F=+a1C3(YcV?FmSTsZMnGn~1(xz;UPpZ>um zqoe8g@nh-qsndmTlR@I*2g8dBW1-1OMs<^&%$&>sZB@2phxy1N$WjiVnCjlpXgT8M zKs9ehcoB@1OvZsH53Dm@Q$F8C|M_=P)gq@ccszt8qp<}kAa}!tO{ueUflS98Y~lq9 znGgZBjSIiMtBY-EliVplzRYCOH?ul^#P4eLjK z{Fb(K>vL}BV%WJ;9VurB=qS0g!{VfxnSf$5cYhjC#i)?hNZAoH$`8r#7AYI*=?!>5PJFopv0TAUeY||wfDyE! zgbYhowyT4ygwJYh(=v%-)lp$Efz=dANK_!9B@<_^wyPCBDq4ol&%RY6(~2L31NR-l zO2k4BS1cL%!rtzaUp3%7`oxykpB$f9h`RpJ;e(Opg%*SS8`aA>)0ve+KG>u3zA4<7 z+!n7!_Bt!EkFX^6Q=-emrs2$)JR-)y#Vko9_6A`KtXR5B7hy6L_a+CUnnm0gZ1aC@ zmDYzhCwM}GgM%CjhKIHmga)!3f74B7YxTl~G%~tGL&Tbz(yCRf(+xM@`qgeh`h(y7 zt@O|X_otE3r3G&a;Ip~4ExqrZf1P&k*j|32xh36jZ$%~f z(SQ+dPv}#pPce|VwTW|vAd{08qQph^fCXke4J8xq1KRE2w;VfilvoZvGXPlx8jq|c zKW0k4yXF@;i^Q{qE{8EVJXd%x1Zr$N-kn`K0kFku zuT$Z7xDT*Rz%aiPCr_~Sq~LhsR62g_IC(_qo}D;;f`11#gH0D32XIQX$dUcvnV&c{ zq3-PYb0Em_8ln6&V>l10YgH*myWI#rHbuu_rMEL3{15J%iLmM-iGT^88M{|n-(@wr z1hoRItpW3OHOIz8QI%q)VPnwV0^ndHg=506l&hc%s$6b%gpGasgh))zqjwm zS1qX?f8wdPVo@R8rPU;<=MwC>j52;>Pgu<*5>uGiLvtB)CtZpL(;EOpJ?QjrGMJ{= zLCh$|e|X@q8~TFQe`XKiDo|wPzm_vpK`v)PwUnU>RDKqJ+P;UJ(e%od|6ts zpoc=soY@qLOb)idKaQO|n)><&nE7Fz)W(gMkZW_t^Iw?u@7t3enrDWk(-*1m4}b5s z(+~aFThley-H;9)*sm6NPjC9zM?aLl{Dsdo{0?SVUwzHB1ov@mNZF5(GT=mM(45rY zYOzY5u^>7|?1Ugdo||OGF*$_|q|siK_7K5z#l1&%f#8Lf_u$YFiGOxB!~r0gx~0fi z&HXXCP~%4gvI75ME893jY*5&NiS^*QiVhd<4*~P8E?#3{O`5jJDGw}T&PSFUi_Ru- zc%B%TWOM3s%^a`RRt6F4_~5W;D^e{W&5IH#F8qrzJFIH~AGK2loL~f~=$oj2k{VsO4^U^9yc)IBk}jZRi%ufh`H>-FbD{l4SgiVcG=w(` z+E$|oM7a|xtgHzMbsl0M?V2ZlS|CdwpP&yAz`lTrKnjEg!shHO*zAYCV!%0g@ZjpV z{mEb6eA(tp>7`31ZMVc{vNH5;;d#OeKn5K7Acu{FCm1lWSVLj}sw#VIre(Z`qQD>) z7JypsZN5%!b5|b24Q=;${hFVXvzLkijE)vBZ5@n4$((m#JoK$ zT)&z8N%SY`Z+324+qf99I|95!i}k>Py`D_tU#s_{0_8zQ3@feBWA(uRVjOOi!x6HGz1=8FUVS~`SC-Cg@-ODgIQkS(w{Y> zlw&~Z;QKg}$ph+OKN=RASbPRs7lODLxCUGK!5@-$4F>JuPZ93C+1Wcr8;a=q4dr?z z1opL{B?tX=rnxEFhnr1;+@@ESWvm4Uf)K8YfN5#d+!}Xh3)KUj5dQR^&srw>!NszTfhT8ip9-sSEXX9h&}`M2&io9= z;!$8X)_1x5!_7mh8CeFv(#U-CjnF^!^LRkco;#mLmo1lbe|ra|3uqZ5kRr>$PW0nH z^|R?W{`0SvD*#Xi2)F|Fpwwy-pQaZ)n`s6yEQmmC7+ewD z>`#2|oZR4WJrOj-jX}1`J1jTBD3dtpBaHD?%IexvDUXt=tDB#LQ~^!@U$lN zAoNfzFe#(&PrMH?tYYWl@jJw1LN~`Ae$^3{-bzvpF|1`p;tYr9#X#Cx)&NGw%&HV0 z9U9*I6$8#wTeiP()ykFJ5g}!uk4e}9xK4CLGw?*fmtrxcU1Y9e2b|}^m!%Bz=5n(} ztu$2xp+lWZS^d1J4)oJ8AIAYB+IpPM@C;&1<25eF94qRdb2em$H7j$iH^M;rb?Y{% ze4MWdGdDbV9b-qv*qK4C4uR&TO`Ewuk?GI@FEtU6hlc7W|H&_=|Mx%q3fbH~4}S&( zH#`UTeC&g%d(k2;W*@C>9qINv?&SF#IByq}*eGQa;rWwEhJ3LiXV6$*wZF9n_28R_WCAFIOwH`B1f9m* z7^XcDgdlctgK!oVD_wk@sp+(6QEwU@9oqGbpz*Ft9iIi+3m(bA;gK{xeu6;-Spr-V zvFH@Ql@5=M9VW5tCx7mr@x6U+@~DXkmlzSes5i}_3%H;+EeP@4&9~l8FdBkQJjhf< zM~z3&m7{GZbH@e`2tFIi9Aq=dShDv_uuo}l9y_dkR=jvv(lTr6&@_XY3luf7JUf4$ zfyZPtoR0*AqWhy;WHK0j7GJ|+s_hXF6#aUAef>E@!|xj8M!AG65oH<}&+dM4H@7i( zl(x?7{Ji=(%-5Nc4w+QZu9PKAc*6t)z^+?#X{2DEZRi|&ws*!vVy>7ypm0wv#I*#_ zj?aNi6#t>@LKn&&$YvB{lR~M8vKs>sJu%Z8VnZod>78UIhH_NF(Y!gax1*ebdD&dG z*#~)3m2wEK3jKBPg=EVt=h|_fu75%nniv3%$d~F zi}tKiPy`$Rk(PMqfpKl!oDLn_pH{3~mHyE`{^@)=<{()DfCu}?$qC|37&L$N^*5yr z8#mC`1~*@m6*L9XXJd^U@Bu6&oP*r{#dQK#1Z9s5w$y@^@Xs~7?gbV<&Ik7qrGZ(> z$Re;Hfg3T)>45S3c-H+OOGU>? z(z$bN!E&Zm7+hK0ilE~`d@hw(3dJ)hX#ot{V;Em#R9bXFJ`K;El6{vEF!Cdg(MF+L zLRO)LZy%n*hR<`M*l?K^O@!H__-g13qDuzc%MJq$#Aey|^emLcMn@;F39ccH(IXSI zm1{k!#m@}7M$%*{3$Z}d!3C*G=Fxc-Mj7TcYtJG5ezd%!qekA&Z21{40F`Ar8$t>r zqdS|Lnx2_yy#LUl*LHTavsH*1o`N)_WC1357+Hz-0*>ty%PE?%&~s{9**qv7M1-!? z;0{(e5M0Fdh#(grvO81`ROSL@eNzOQXEH|593XQOLdIWXJy})j7JfxAM5G4EZ!tP| z06=r5=3p0fJ(S?%;}lKy_xG`-3U6Wr9V|+XLMe6~x-NQPA!oSsvMbZ~z3E5t4L6-0 z0OR2!$I{f4Mt%T%zUr#0Y1oBK#oZ3=(%~%=rG|qFeO@rHh#AdP<`fy26oE`-mEK>T zEqI{tIdBa056A#(aw;1};q?rjA3k)D?R2)#&zz1$7~BmDZ`m$ZAdGS6Tuh#6g(p|^ ze-RRK4G^T_W&662R+`A6!3S78XejNlBj{=^J*Kx*&Ke2gEoSxvbfotpu36bqp1RzM?DGGEHV@U#U9sPc3x+) z%aKxk&C1zh5RThDIe?ka%EFPT|L_ z9V@cTc;DDPPGjbFf4^J+7xqvDh?!EgYTggu{E`lB@>_4aGri=MujbcC7;JB+;Pb#i zu)U=uU$<@@J5Zo3c;_>ij|UQ&hWQ+Ps83DgEDzTX<&HnIfJ?PiUBVexz{1Dp$2ox9 z2iyca6cX%u7vxzo=f3czydKAo9ZUQ6AIxRuvSrJ-SoiPW&qZy|75c%1zc12tlph|aBL0xxSM#ew zZA=m+N>&6_l~rE6xb_HmyzY>eoH@fl0#YCDv&n+qVR>J|)LZh18DcCbfv|hy=W*V6 zF!3i^=?sq17RT35O^h>;V&Nl;(q>XXUO5iv7qs^7;n(4gr|pEom6?3i2jI>rqclh|P~1Wne^jKXzZkDUVsh1!tX}2qM~qo&!@y zFv0ee$b~1zgPWs?w(hK1z9Ai#M%WDdi_;vSj$G|=oR4&+S40c zGMP4@@ihu)co7W>2-SXcqzxH#cP~imSFd~c83WFvk3atE`|kfjTD@uwS(OSjmG4c} zn)Xd|y*!(5e9W}TZRAF_Z}!-zl&x8>5uPL_DY;c?5hoe5NaF$+tV^`q+OEEygIjGh zR7)7DpYy|pi{)_{BsAh7nVIF_cBHfpj^6o#QX+4hb7#}^>}(nu8X}G{G&D@$k3onX zhsKVWjga!r9bX5&a{lbubmOhh;qQZ*AiK;q+9ve(FHSpl?qJYGfW+@|sC)p;$PN%N zfT@FL33irow0g#%(?KnJA^Q^0V^ zkLzH7Ssk0^e7-*S`dL()T?}88sK`j+J%wzkCdA@AaZl-=6qzhbBdotL{&E(mgjQA_ z{9Iv@=e4XXN12*3ArJbqm8*g_&z}|>x}KC%JG4UI8Me0DM*VKP_ zh_TSoRj_*=a29Y=YQmX6mouA&36l}Pp+G)2c|N_1Iw`lHo9HKl$qp!MkQD%A^^9y} z2)<6kL&N+mZXMIkAX0dc4DtT*(bar*;sJq2U^he70@^;kdQp-g*nue6-X4O-aA$05 z<&KOQR_H9@8p2qeHmm2(Mh8h96XF`p7#-8a0E0h`0U`+aTxGhZj-*9}2Knm|Ee-OP z7({0rL-c!P1PI=FNSmqt#Bj<)O1z&p8MTXx2^bESzwF|nbfJF9Q!-Q@)-%!oXlwH= z263}&+l$mkQDo&2#mz1JlZ%j2lT6WkIDY&@;BwMT;qxNMBj`vfA}y38Ldx!pwao7< z^GQM(>ao6IJ!g%YT0*+HpJ}hnVN@bdv#^IbF;HizZ$Z4>#klp%RX9iZ_ozX3E zV>lZ5D!*2P$#pw0Gns23I)X;69M73f<*PhD3-az_7OO2O@p|V@pH8b+uca|LclpYn z*zbhvgzJTv43#pQU5Nk_y8z7Ea+Ma}3%+AYmnj8+bz9?F?TP)?iH?|DY><_X_lT1HGyku6(K zq3|`rflLASihP_PBLXx>Y2mm`4}DjB<;H6M74IVQG1ad~NjFP3Fw5yv1q3S31@?Cj{u&wpW{o2R91M%MNva}dbO031^&#`_V0}|XC~9pO|Dj)Y=fV0O z6Z0(UbWqCvv{t}YBC*=3ufgA@0VGtFi3_hoJ&bCZN;FQS>t_x5_kl`qm zaIvGhd~!0KJbog6UgwRU173sl-(`T*;%aj%TTn`0G&pKsE9g|F_OTG$;o;bs_I56G z+hDp2QS>8qaKXcb^FdLaR)4GqO4?ghe6~t?XGU`+E~5D zKb*Fee^!j+>T6{|H-2wEmSbEf170y-X~~i$X=r$az;UK%R{!Clkhyj<$$KDj0mH$= zOl=u$2mD^P9B_767|PxSaos-t;SUhQ@v*SCKW*5sk)4bju*v2HCq)(u)GUSFCFh2n zK3ztmV4A|hg?va1zGJcm${})gRF7t|7w#3wb}>dKmoe~cX2~O*4Ktg(=yAVbx8Y6> zZ8x!i$*hHM%0kUn3ceQfc`BWBj+`^Dhb=li0!s4+QDHU+q_WB^S+&akGR9V|XN^z6 zQMfdv+hPXJ#Rv=z zc?1_z*p<>61o%}9)C)`#P=bAt{hYzL@2X2L{p>{n=g5&GOaJ=4ANc*27I~{1t8fbK zomi!jB?9=bEFwjEA^O><++!kmv4e76nW-zHD$T?9{oq>9W4?_Y@bO_SgtJ7U4lK3I zq2}o109oNWbou$ivE@g}|(q!PxLkc9#xafyHj6~RZmDW%uk z9piIh0l0HwyHD(ju!!|*x>f7ZB=~)k{h0N%A()9_jjth#!y?6~nEiYAMi!-WrZ}{# zldoy4jesc4$kmC&HPti%?DCP_RG5t!s}y?1giGR1F*wn*{ZxUO zv(Cf#n@dbn6g&c0S)ab{#)p9Q((YBqN{r$n8;J42v3a??YL2<*wnJ5rF@~n{&QloN ziMUWr>f{C(n+xs%yPh64aA7)cDr8&7_+kV_o~LKE$Md9aS|jkF3=Se?4erxerWl7D z_!hERQDA~jK%7k1#?%aZ;UE)RzjodJl`B_1c2U6DvSZh)kDoXphq9^jOv6?7Xt5a3 zvGU^I2KE}RqCFklP zx^{8@Em1O)I@_X0P|ZL&0?xwT+)=~#$0tsuE3dq~!DKrJoI?i=U+;l(K=px+ixJys z!D**3cdT;2nb+R4)daq-aUkJ~6TB8@Hxzt^*Nvt1xFG<-GzVFpC-%cJ){|M0wRUP= zx#gYGatsE+EI=!V+u`J(1f?7|5Ms#1gG2lecA5>^g}9G+h`|}bjfSFo@xWsKF8E89 z?_2wl!QzSut!o;XR8v#>#791mP6h7;N8jLZTEAgaIgo?aW5C&W=-_pf%|qyi5h1Z# z)}@pqyustll#Mqh)jKp#t_96&$yrfEd>nN43(yM@-KI=T>Ct8jzZMhyM5mwR#f6EN z5PcKEiYPS4125{DuvkeOe6T}Rkqw;{;qxqAvMhVt76&xFiv*g&b-*i;-e@3AoH~_v z(gK_doA5QPK}g(eWKxel{9tL@d2TGT#TUAE~^QroR!@oL8c!%^HPdD z!ESHrwkQRcC8mb42{@+X-s}t=0?mU#dFYu##JFZvn&Ed(PfUrhkZpMWi%;c~bx~K|I^y>>)mg>9izOf6)dxVWy zw2khbh1oV14X0Hrm!<2jzOte7!8p)il z*Y$zfQl6xV_rZmO1?1?`WjepAG>R;g4wITVaCL&L2L*N zcxdkV#77#=Y3;_%)NO$@NH(!$2Z1Gcr$HHmEDO9D@K5k3${A)q97v}bOemE^%xe!) zn(RM3M2+%-t}aR?kftLD;=E8A!Z6H?X5ctbn1f%Wu7yeiWO)?5M)v~uiI%Z3kWOhm zN;%y>N?`K*Y>0G~VIrF`UWWgplOG;*Frm@*txVdKy^3ptYr;tq=gz3Cr-n#6F)pAW z^X0%(b&mY3ad$R3FWY|VI!kLlft~Y|$|%pPoOj=^0T5d7=b@wmrj*J84cP!ViOLLC9L z8WPAhZ#e9`hQ~s`?@OOg$Bt+|6^^d%9?mHT{{k5TGCTl+%=QBK1;LIBfjb@;z_5!@ zmje$9L0#}{XhyD%4<{2~l0gIt|LI`L(J-yese8e~taMiUIEJ&$&C%l*{2$l+CLGH0 zVuAEX5b?%bZTuW{S|KekSH&7E0>&&`L{8+S$N+`$H7r*AK26R;JL1 zE^cs85S_rYwiH;!dExuTpg&IwbwDEVunHK?)+hs+MX9aq5||+HoVtwEX8{4jnx}H_ z9e8|x&X66%GMH~qs<+Vu)*NR?x8c#@=pE&>cmYYf^FVp?p8-@}5yJK=YVfOVDfpIh#4yp;HlEcGrJ@cfTn6P%}gsx;Y5q3G7`ld z$N2#tEp}!J*quXd%`&EXrfR|LGy}_-ky`4q?=+7{oSn!X z!=BY00xQ!+PL#(FUWknhW(67nZE1r(pXduxxCg7bGEPHAVW|RsTmf0xm&RL*Aeg^K zuvv4sa$6mNGMXs2AsoVM>c!5lcOarmYKtuV-V3WvlS~6o5)Q%X_Lol zb5w8OawjuoPRb?f$&9$wjT$4 zMccKzw>J$BkHq4tJ5&03Tx47;`OnOffQxW@K(o2ojLQLlY9huPD^r9u_A) znz9+`wX^{$^D0JF3?R%%w5j4?xx{i$nE;1Cc)tq|k5Z{NQwB?B71nPFgOsgC<;|m4 z;QOJ(MK=}ga?O(xpe`>Qc@tZXkcF2Dr$x>XJR@yB3Ygv`q(3v}C1y1Bd*RJQUR7&b zI&yR@-FU-w7nM^u_>N;^M>m;O%dQb>&x&Yd&^RxgDx)Yt2iFS=19EzR!n#Oxo0_{_ zZh=;^2T;Ak)!u|QJmkO-+*R>3KnIMrd2HmI{?@!2bAVz8R( zXU1#>fYsdqSnN6$SWngv(G04%Ao6;J|A@g)i(b)n+PPzUdi){k+VZh(JuEQ7rzBht zIl1EeBmAw8Gpp=pNq}Q(5?d0bslz zTd){(M!-LOayb=KnTQvt0a&V|Bkgx*QTJQH3_v#qECv{s?+dasXMft1f||in0l`F@ zf|S>4NC2D4Cj9|GV^d?9M*riE+~uU7i*-T)-qJHU*vo47M}UlS&smYONCkeDvCLjj zGOJv5`RH!zEI2{UuLcolBRCQbNy68~i`2+kQDU|Nr?YBPX zPv-}l9B_`EIJue&JubS9wOu~cfu~?M29Qf&(ro3JQCyV~M)DmfjI;Rbc`kHJ6%>gI z{>Zu@3$6-vh0e@vMVZp4;s7@@lfL-5&orp%FT3(uPIrK*mg{y-A&9I3E$RywFpLee zr`7t@?p!8=dO9Y)kFv|W6#PECX*_}irGZ{22GE1ov#5`O3fPgaBLHGNOf-^;L1$E{ z!^pgQfv^%v38EXAyBruIC+iB&%XUYR?Pe_0Fz+@9ir_)Ud3YcBGr5)Q^3UMDY&LYa z-B57p<>J*uKwLxeTex#02#cHK&#r5y43`;!0orQwFsSTj%fVdaLuuFuw$jtMU?z6U zoQVyxo_=CrSIG+W`x)=2JE#h1%jQQTQVZ(*HZol=fo-yFe&CT_k z96!0zz^%ClUX*ze*I16nqPSC4EnuXn27^8MfDc&JmS&XqXRnKMV5O8yXv^tvo_EiAp4ZUQ<^208UOhYNp8D}#$kVKVuaa8vJH z%BY$c=?BJ{QhR4-+WOQJY1j5``P|@9ynN*<`t8ua8N2x`*q-XnwRcz;r|V2TlDkYZ z>VnW?DEK*S*$2rD!I3*sw6}3Zn6Z%T7PbtSauD_q0A%r*RaR*tg1dwOh9yJ5gDIA- z%45k>M0aS38RjZkd~Z0yISjvJHD_afHv!~}E%IXCW!vyN*a%BE)8#!&t02|Uc@nr( z(C_JDfG!nq8qXL5*)Jw8h@BkMC8JajUZX6^KF89X0gDP}ywG@MF=*J1ihC8@DthRs z^vSY{nJ{(pluL7v;vA&Q!!<2FKCt=lsA*-N>Q143jB6~wTVBIzTThaOZqOO8!NG}E zr#lyjEV4nDHTXdQVeR)9Ggn zIEM}$S}}3z^a9u90w+trnGdj9(VRiQy4+xz)tSznJD-i9^9<#xj&)nyDWwTToVH2+ zk3Mwv(y9E7HU46nsXlIkyI9VC{F*f>D~mjh&{xXy{3F%48+yo)iz3ZY&g^1`!30ey zuxEtbfM*i+9WFX$$131ZuMzs7@bJZT`SKS(-*7W7z2Yj~NQm@IM#O`R&&m>ET0k$( zOa9SXq__^kWHi;lT|B%N$I_Z=5FjK10$y9$q}t~usqy=5ty%Yk;EMm)6kt~*jM+hc zBNKcoh@09S)ee?`H1kuU+)ydy7PA0ZT0R5@!!jXwTll`gOIxM#;phDpF*9cyd7>m1 zW0-Bt!*LAA)*Fp^O}W7kd@N?_@mz8?6m4^%Ojn@hW|Qqq8%q%S?u6*nhV!|@H5VJA zg^wJd*W92O&%q-;yMn3B#KIku=ckSmH=qnMTA40kr{`M%nlQ*~7fl>2t)j*6&CnY? z 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 b3p)M-hx9PKU2Z{`00000NkvXXu0mjf7GeJS diff --git a/Client/macos/Assets.xcassets/wh-1000xm3.imageset/Contents.json b/Client/macos/Assets.xcassets/wh-1000xm3.imageset/Contents.json deleted file mode 100644 index 9f33fc0a..00000000 --- a/Client/macos/Assets.xcassets/wh-1000xm3.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wh-1000xm3.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wh-1000xm3.imageset/wh-1000xm3.png b/Client/macos/Assets.xcassets/wh-1000xm3.imageset/wh-1000xm3.png deleted file mode 100644 index febf92e19438fe9266ed23430587e4d88c931d62..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69683 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%0Aod4!eEO!w=3Q1Yg%<(mo3@^LMSGTA3qt} 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 KMNUMnLSTYw-Eckt diff --git a/Client/macos/Assets.xcassets/wh-1000xm5.imageset/Contents.json b/Client/macos/Assets.xcassets/wh-1000xm5.imageset/Contents.json deleted file mode 100644 index f487aaa7..00000000 --- a/Client/macos/Assets.xcassets/wh-1000xm5.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wh-1000xm5.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wh-1000xm5.imageset/wh-1000xm5.png b/Client/macos/Assets.xcassets/wh-1000xm5.imageset/wh-1000xm5.png deleted file mode 100644 index 5c58b84416c855981db3fc96f86a5a6cca64b8e7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 76768 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¬s?iV%>x7LR!s9on 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�t!!{=jh1j2QecRrxqPB>X7uu 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 diff --git a/Client/macos/Assets.xcassets/wh-1000xm6.imageset/Contents.json b/Client/macos/Assets.xcassets/wh-1000xm6.imageset/Contents.json deleted file mode 100644 index 10909c00..00000000 --- a/Client/macos/Assets.xcassets/wh-1000xm6.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wh-1000xm6.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wh-1000xm6.imageset/wh-1000xm6.png b/Client/macos/Assets.xcassets/wh-1000xm6.imageset/wh-1000xm6.png deleted file mode 100644 index 61f2e586afe131a69a5e25e766d4ed100b333118..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 112001 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

-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

1RU+lg(kf5f6jLs&ZFPDb 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 String { - NSLocalizedString(key, comment: "") -} - -@available(macOS 11.0, *) -struct ContentView: View { - @StateObject private var model = HeadphonesModel() - @State private var showAbout = false - - var body: some View { - ZStack { - Theme.bg.ignoresSafeArea() - if model.connected { - connectedView - } else { - disconnectedView - } - } - .frame(minWidth: 360, minHeight: 500) - } - - // MARK: - Disconnected - - private var disconnectedView: some View { - VStack(spacing: 24) { - Spacer() - Image(systemName: "headphones") - .font(.system(size: 64, weight: .thin)) - .foregroundColor(Theme.secondary) - Text("No headphones connected") - .font(.system(size: 15, weight: .medium)) - .foregroundColor(Theme.secondary) - if let error = model.errorMessage { - Text(error) - .font(.system(size: 12)) - .foregroundColor(.red.opacity(0.9)) - .multilineTextAlignment(.center) - .padding(.horizontal, 32) - } - Button(action: model.connect) { - Text(model.connecting ? LocalizedStringKey("Connecting…") : LocalizedStringKey("Connect headphones")) - .font(.system(size: 14, weight: .semibold)) - .foregroundColor(.white) - .frame(maxWidth: .infinity) - .padding(.vertical, 12) - .background(Theme.accent) - .clipShape(RoundedRectangle(cornerRadius: 12, style: .continuous)) - } - .buttonStyle(PlainButtonStyle()) - .disabled(model.connecting) - .padding(.horizontal, 40) - Spacer() - } - } - - // MARK: - Connected - - private var connectedView: some View { - ScrollView(showsIndicators: false) { - VStack(spacing: 16) { - deviceHero - ambientCard - if model.mode == .ambientSound { - ambientLevelCard - } - if model.supportsEqualizer { - equalizerCard - dseeCard - } - if model.hasAdaptiveVolume || model.hasSpeakToChat || model.hasAutoPowerOff { - settingsCard - } - if let error = model.errorMessage { - Text(error) - .font(.system(size: 12)) - .foregroundColor(.red.opacity(0.9)) - } - } - .padding(20) - } - } - - private var deviceHero: some View { - VStack(spacing: 12) { - HStack(spacing: 10) { - Spacer() - Button(action: { showAbout = true }) { - Image(systemName: "ellipsis") - .font(.system(size: 15, weight: .semibold)) - .foregroundColor(Theme.secondary) - .frame(width: 32, height: 32) - .background(Theme.card) - .clipShape(Circle()) - } - .buttonStyle(PlainButtonStyle()) - .popover(isPresented: $showAbout, arrowEdge: .bottom) { aboutView } - Button(action: model.disconnect) { - Image(systemName: "power") - .font(.system(size: 14, weight: .semibold)) - .foregroundColor(Theme.secondary) - .frame(width: 32, height: 32) - .background(Theme.card) - .clipShape(Circle()) - } - .buttonStyle(PlainButtonStyle()) - } - - // Product-style banner. Generic headphone graphic (device-specific Sony renders are - // copyrighted and can't be bundled) over a soft accent halo, mirroring Sony's app layout. - ZStack { - // Soft accent glow behind the product for depth. - Circle() - .fill( - RadialGradient( - gradient: Gradient(colors: [Theme.accent.opacity(0.22), Theme.accent.opacity(0.0)]), - center: .center, startRadius: 4, endRadius: 104 - ) - ) - .frame(width: 210, height: 210) - - if let image = deviceImage() { - // Background-removed product cutout floating on the dark UI. - Image(nsImage: image) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 190, height: 190) - } else { - Image(systemName: "headphones") - .font(.system(size: 92, weight: .thin)) - .foregroundColor(.white) - } - } - - Text(model.deviceName) - .font(.system(size: 24, weight: .bold)) - .foregroundColor(.white) - - HStack(spacing: 7) { - if model.hasDualBattery { - Image(systemName: "battery.100") - .font(.system(size: 13)) - .foregroundColor(Theme.accent) - Text(String(format: tr("L %ld%% R %ld%%"), model.batteryLeft, model.batteryRight)) - .font(.system(size: 13, weight: .semibold)) - .foregroundColor(Theme.secondary) - } else if model.batteryLevel >= 0 { - Image(systemName: model.batteryCharging ? "bolt.fill" : batterySymbol(model.batteryLevel)) - .font(.system(size: 13)) - .foregroundColor(model.batteryLevel <= 20 ? .red.opacity(0.9) : Theme.accent) - Text("\(model.batteryLevel)%") - .font(.system(size: 14, weight: .semibold)) - .foregroundColor(Theme.secondary) - } else { - Circle().fill(Theme.accent).frame(width: 7, height: 7) - Text("Connected") - .font(.system(size: 13, weight: .medium)) - .foregroundColor(Theme.secondary) - } - if !model.codec.isEmpty { - Text("·").foregroundColor(Theme.secondary) - Text(model.codec) - .font(.system(size: 12, weight: .semibold)) - .foregroundColor(Theme.secondary) - } - } - } - .padding(.bottom, 4) - } - - private var ambientCard: some View { - VStack(alignment: .leading, spacing: 16) { - Text("Ambient Sound Control") - .font(.system(size: 15, weight: .semibold)) - .foregroundColor(.white) - HStack(spacing: 0) { - modeButton(.noiseCanceling, "speaker.slash.fill", "Noise\nCanceling") - modeButton(.ambientSound, "wind", "Ambient\nSound") - modeButton(.off, "circle", "Off") - } - } - .padding(18) - .frame(maxWidth: .infinity, alignment: .leading) - .background(Theme.card) - .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous)) - } - - private func modeButton(_ mode: SHCAmbientMode, _ symbol: String, _ label: LocalizedStringKey) -> some View { - let selected = model.mode == mode - return Button(action: { model.setMode(mode) }) { - VStack(spacing: 8) { - ZStack { - Circle() - .fill(selected ? Theme.accent : Theme.cardHi) - .frame(width: 58, height: 58) - Image(systemName: symbol) - .font(.system(size: 22, weight: .medium)) - .foregroundColor(selected ? .white : Theme.secondary) - } - Text(label) - .font(.system(size: 11, weight: .medium)) - .multilineTextAlignment(.center) - .foregroundColor(selected ? .white : Theme.secondary) - } - .frame(maxWidth: .infinity) - } - .buttonStyle(.plain) - } - - private var ambientLevelCard: some View { - VStack(alignment: .leading, spacing: 14) { - HStack { - Text("Ambient Sound Level") - .font(.system(size: 13, weight: .medium)) - .foregroundColor(Theme.secondary) - Spacer() - Text("\(model.ambientLevel)") - .font(.system(size: 20, weight: .bold, design: .rounded)) - .foregroundColor(Theme.accent) - } - Slider( - value: Binding( - get: { Double(model.ambientLevel) }, - set: { model.setLevel(Int($0.rounded())) } - ), - in: 1...Double(model.maxAmbientLevel), - step: 1 - ) - .accentColor(Theme.accent) - - if model.focusOnVoiceAvailable { - Toggle(isOn: Binding( - get: { model.focusOnVoice }, - set: { model.setFocusOnVoice($0) } - )) { - Text("Focus on Voice") - .font(.system(size: 13, weight: .medium)) - .foregroundColor(.white) - } - .toggleStyle(SwitchToggleStyle(tint: Theme.accent)) - } - } - .padding(18) - .frame(maxWidth: .infinity, alignment: .leading) - .background(Theme.card) - .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous)) - } - - private let eqPresets: [(String, Int)] = [ - ("Off", 0x00), ("Bright", 0x10), ("Excited", 0x11), - ("Mellow", 0x12), ("Relaxed", 0x13), ("Vocal", 0x14), - ("Treble", 0x15), ("Bass", 0x16), ("Speech", 0x17), - ("Manual", 0xA0) - ] - private let eqBandLabels = ["400", "1k", "2.5k", "6.3k", "16k"] - - private var equalizerCard: some View { - VStack(alignment: .leading, spacing: 14) { - Text("Equalizer") - .font(.system(size: 15, weight: .semibold)) - .foregroundColor(.white) - LazyVGrid(columns: [GridItem(.flexible()), GridItem(.flexible()), GridItem(.flexible())], spacing: 10) { - ForEach(eqPresets, id: \.1) { preset in - eqChip(preset.0, preset.1) - } - } - if model.eqPreset == 0xA0 { - Divider().background(Theme.cardHi) - ForEach(0..<5, id: \.self) { i in - eqBandRow(eqBandLabels[i], value: Binding( - get: { Double(model.eqBands[i]) }, - set: { model.eqBands[i] = Int($0.rounded()); model.applyCustomEq() } - ), display: model.eqBands[i]) - } - eqBandRow("Bass", value: Binding( - get: { Double(model.clearBass) }, - set: { model.clearBass = Int($0.rounded()); model.applyCustomEq() } - ), display: model.clearBass, accent: true) - } - } - .padding(18) - .frame(maxWidth: .infinity, alignment: .leading) - .background(Theme.card) - .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous)) - } - - private func eqBandRow(_ label: String, value: Binding, display: Int, accent: Bool = false) -> some View { - HStack(spacing: 10) { - Text(LocalizedStringKey(label)) - .font(.system(size: 11, weight: .medium)) - .foregroundColor(accent ? Theme.accent : Theme.secondary) - .frame(width: 34, alignment: .leading) - Slider(value: value, in: -10...10, step: 1).accentColor(Theme.accent) - Text("\(display > 0 ? "+" : "")\(display)") - .font(.system(size: 11, weight: .semibold, design: .monospaced)) - .foregroundColor(.white) - .frame(width: 26, alignment: .trailing) - } - } - - private var dseeCard: some View { - Toggle(isOn: Binding(get: { model.dsee }, set: { model.setDsee($0) })) { - VStack(alignment: .leading, spacing: 2) { - Text("DSEE").font(.system(size: 14, weight: .semibold)).foregroundColor(.white) - Text("Upscale compressed audio").font(.system(size: 11)).foregroundColor(Theme.secondary) - } - } - .toggleStyle(SwitchToggleStyle(tint: Theme.accent)) - .padding(18) - .frame(maxWidth: .infinity, alignment: .leading) - .background(Theme.card) - .clipShape(RoundedRectangle(cornerRadius: 16, style: .continuous)) - } - - private func eqChip(_ name: String, _ code: Int) -> some View { - let selected = model.eqPreset == code - return Button(action: { model.setEqualizer(code) }) { - Text(LocalizedStringKey(name)) - .font(.system(size: 12, weight: .medium)) - .foregroundColor(selected ? .white : Theme.secondary) - .frame(maxWidth: .infinity) - .padding(.vertical, 8) - .background(selected ? Theme.accent : Theme.cardHi) - .clipShape(RoundedRectangle(cornerRadius: 9, style: .continuous)) - } - .buttonStyle(PlainButtonStyle()) - } - - private let apoOptions = ["Off", "5 min", "30 min", "1 hour", "3 hours", "When taken off"] - - private var settingsCard: some View { - VStack(alignment: .leading, spacing: 14) { - Text("Settings") - .font(.system(size: 15, weight: .semibold)) - .foregroundColor(.white) - if model.hasAdaptiveVolume { - settingToggle("Adaptive Volume", "Auto-adjust volume by surroundings", - on: model.adaptiveVolume) { model.setAdaptiveVolume($0) } - } - if model.hasSpeakToChat { - settingToggle("Speak-to-Chat", "Pause music when you talk", - on: model.speakToChat) { model.setSpeakToChat($0) } - } - if model.hasAutoPowerOff { - HStack { - VStack(alignment: .leading, spacing: 2) { - Text("Auto Power-Off").font(.system(size: 14, weight: .semibold)).foregroundColor(.white) - Text("Turn off when idle").font(.system(size: 11)).foregroundColor(Theme.secondary) - } - Spacer() - Picker("", selection: Binding( - get: { model.autoPowerOff }, - set: { model.setAutoPowerOff($0) } - )) { - ForEach(0.. Void) -> some View { - Toggle(isOn: Binding(get: { on }, set: { action($0) })) { - VStack(alignment: .leading, spacing: 2) { - Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(.white) - Text(subtitle).font(.system(size: 11)).foregroundColor(Theme.secondary) - } - } - .toggleStyle(SwitchToggleStyle(tint: Theme.accent)) - } - - // ⋯ About / device info popover. - private var aboutView: some View { - VStack(alignment: .leading, spacing: 0) { - Text(model.deviceName) - .font(.system(size: 15, weight: .bold)) - .foregroundColor(.white) - .padding(.bottom, 10) - aboutRow("Status", tr(model.connected ? "Connected" : "Disconnected")) - if model.hasDualBattery { - aboutRow("Battery L / R", "\(model.batteryLeft)% / \(model.batteryRight)%") - if model.batteryCase >= 0 { aboutRow("Case", "\(model.batteryCase)%") } - } else if model.batteryLevel >= 0 { - aboutRow("Battery", model.batteryCharging - ? String(format: tr("%ld%% (charging)"), model.batteryLevel) - : "\(model.batteryLevel)%") - } - if !model.codec.isEmpty { aboutRow("Codec", model.codec) } - if !model.firmware.isEmpty { aboutRow("Firmware", model.firmware) } - if !model.protocolVersion.isEmpty { aboutRow("Protocol", model.protocolVersion) } - if !model.deviceMac.isEmpty { aboutRow("Bluetooth", model.deviceMac) } - Divider().background(Theme.cardHi).padding(.vertical, 10) - Text("SonyBridge · not affiliated with Sony") - .font(.system(size: 10)) - .foregroundColor(Theme.secondary.opacity(0.7)) - } - .padding(18) - .frame(width: 260) - .background(Theme.card) - } - - private func aboutRow(_ label: LocalizedStringKey, _ value: String) -> some View { - HStack { - Text(label).font(.system(size: 12)).foregroundColor(Theme.secondary) - Spacer() - Text(value).font(.system(size: 12, weight: .medium)).foregroundColor(.white) - } - .padding(.vertical, 3) - } - - // Matches the connected device name to a bundled product image (e.g. "WH-CH720N" -> "wh-ch720n"). - private func deviceImage() -> NSImage? { - let slug = model.deviceName.lowercased().replacingOccurrences(of: " ", with: "-") - return NSImage(named: slug) - } - - private func batterySymbol(_ level: Int) -> String { - switch level { - case ...15: return "battery.0" - case ...50: return "battery.25" - default: return "battery.100" - } - } -} - -// Factory so the Obj-C++ ViewController can instantiate the SwiftUI hierarchy. -@available(macOS 11.0, *) -@objc final class HeadphonesUIFactory: NSObject { - @objc static func makeViewController() -> NSViewController { - return NSHostingController(rootView: ContentView()) - } -} diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift new file mode 100644 index 00000000..56a8c929 --- /dev/null +++ b/Client/macos/HeadphonesMenu.swift @@ -0,0 +1,68 @@ +import AppKit +import Combine + +// The status item's menu. Minimal for now: header, modes, connect/disconnect, quit. +final class HeadphonesMenu { + let menu = NSMenu() + private let model: HeadphonesModel + private var cancellables = Set() + private let headerItem = NSMenuItem() + private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] + private var connectItem: ActionMenuItem! + + init(model: HeadphonesModel) { + self.model = model + menu.autoenablesItems = false + + headerItem.isEnabled = false + menu.addItem(headerItem) + menu.addItem(.separator()) + + menu.addItem(sectionHeader(tr("Ambient Sound Control"))) + let modes: [(SHCAmbientMode, String)] = [ + (.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off")), + ] + for (mode, title) in modes { + let item = ActionMenuItem(title) { [weak model] in model?.setMode(mode) } + modeItems.append((mode, item)) + menu.addItem(item) + } + menu.addItem(.separator()) + + connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } + menu.addItem(connectItem) + menu.addItem(.separator()) + menu.addItem(ActionMenuItem(tr("Quit SonyBridge"), key: "q") { NSApp.terminate(nil) }) + + // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. + model.objectWillChange + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.update() } + .store(in: &cancellables) + update() + } + + private func update() { + let connected = model.connected + var header = model.deviceName.isEmpty ? "SonyBridge" : model.deviceName + if connected && model.batteryLevel >= 0 { + header += " — " + String(format: tr("%ld%%"), model.batteryLevel) + } + headerItem.title = header + for (mode, item) in modeItems { + item.state = connected && model.mode == mode ? .on : .off + item.isEnabled = connected + } + connectItem.title = connected ? tr("Disconnect") : (model.connecting ? tr("Connecting…") : tr("Connect…")) + connectItem.isEnabled = !model.connecting + } + + private func toggleConnection() { + if model.connected { + model.disconnect() + } else { + NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window + model.connect() + } + } +} diff --git a/Client/macos/Localization.swift b/Client/macos/Localization.swift new file mode 100644 index 00000000..93336f3a --- /dev/null +++ b/Client/macos/Localization.swift @@ -0,0 +1,6 @@ +import Foundation + +// Looks up a UI string in Localizable.strings. Every user-facing string goes through this (checked by make test). +func tr(_ key: String) -> String { + NSLocalizedString(key, comment: "") +} diff --git a/Client/macos/Main.storyboard b/Client/macos/Main.storyboard deleted file mode 100644 index 6241e88e..00000000 --- a/Client/macos/Main.storyboard +++ /dev/null @@ -1,332 +0,0 @@ - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ! This product is not affiliated with Sony. Use at your own risk. ! -Source: https://github.com/Plutoberth/SonyHeadphonesClient - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Client/macos/MenuSupport.swift b/Client/macos/MenuSupport.swift new file mode 100644 index 00000000..f70dbfe2 --- /dev/null +++ b/Client/macos/MenuSupport.swift @@ -0,0 +1,31 @@ +import AppKit + +// A menu item that runs a closure (NSMenuItem only supports target/selector natively). +final class ActionMenuItem: NSMenuItem { + private let handler: () -> Void + + init(_ title: String, key: String = "", handler: @escaping () -> Void) { + self.handler = handler + super.init(title: title, action: #selector(fire), keyEquivalent: key) + target = self + } + + required init(coder: NSCoder) { + fatalError("init(coder:) is not supported") + } + + @objc private func fire() { + handler() + } +} + +// A small grey, non-clickable title above a group of items (like "Contrôle du son ambiant"). +func sectionHeader(_ title: String) -> NSMenuItem { + let item = NSMenuItem() + item.attributedTitle = NSAttributedString(string: title, attributes: [ + .font: NSFont.systemFont(ofSize: NSFont.smallSystemFontSize, weight: .semibold), + .foregroundColor: NSColor.secondaryLabelColor, + ]) + item.isEnabled = false + return item +} diff --git a/Client/macos/Assets.xcassets/AppIcon.appiconset/icon_128.png b/Client/macos/Resources/AppIcon.iconset/icon_128x128.png similarity index 100% rename from Client/macos/Assets.xcassets/AppIcon.appiconset/icon_128.png rename to Client/macos/Resources/AppIcon.iconset/icon_128x128.png diff --git a/Client/macos/Assets.xcassets/AppIcon.appiconset/icon_256.png b/Client/macos/Resources/AppIcon.iconset/icon_128x128@2x.png similarity index 100% rename from Client/macos/Assets.xcassets/AppIcon.appiconset/icon_256.png rename to Client/macos/Resources/AppIcon.iconset/icon_128x128@2x.png diff --git a/Client/macos/Assets.xcassets/AppIcon.appiconset/icon_16.png b/Client/macos/Resources/AppIcon.iconset/icon_16x16.png similarity index 100% rename from Client/macos/Assets.xcassets/AppIcon.appiconset/icon_16.png rename to Client/macos/Resources/AppIcon.iconset/icon_16x16.png diff --git a/Client/macos/Assets.xcassets/AppIcon.appiconset/icon_32.png b/Client/macos/Resources/AppIcon.iconset/icon_16x16@2x.png similarity index 100% rename from Client/macos/Assets.xcassets/AppIcon.appiconset/icon_32.png rename to Client/macos/Resources/AppIcon.iconset/icon_16x16@2x.png diff --git a/Client/macos/Resources/AppIcon.iconset/icon_256x256.png b/Client/macos/Resources/AppIcon.iconset/icon_256x256.png new file mode 100644 index 0000000000000000000000000000000000000000..f4b375c0b5391b4453a01010f7e9ca3071ae273d GIT binary patch literal 13651 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 SH#z{}dZePITz%g<{C@ywVw{Ws literal 0 HcmV?d00001 diff --git a/Client/macos/Assets.xcassets/AppIcon.appiconset/icon_512.png b/Client/macos/Resources/AppIcon.iconset/icon_256x256@2x.png similarity index 100% rename from Client/macos/Assets.xcassets/AppIcon.appiconset/icon_512.png rename to Client/macos/Resources/AppIcon.iconset/icon_256x256@2x.png diff --git a/Client/macos/Resources/AppIcon.iconset/icon_32x32.png b/Client/macos/Resources/AppIcon.iconset/icon_32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..c2ca3816a8630176168458f1ab2850cb28af5e92 GIT binary patch literal 1180 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 wwHgF9ftDcz=^BDxRVV-dpZ~A - - - - IDEDidComputeMac32BitWarning - - - diff --git a/Client/macos/StatusItemController.swift b/Client/macos/StatusItemController.swift new file mode 100644 index 00000000..e35e28c9 --- /dev/null +++ b/Client/macos/StatusItemController.swift @@ -0,0 +1,21 @@ +import AppKit +import Combine + +// Owns the menu bar icon and attaches the headphones menu to it. +final class StatusItemController { + private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) + private let headphonesMenu: HeadphonesMenu + private var cancellables = Set() + + init(model: HeadphonesModel) { + headphonesMenu = HeadphonesMenu(model: model) + statusItem.menu = headphonesMenu.menu + let image = NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") + image?.isTemplate = true + statusItem.button?.image = image + model.$connected + .receive(on: DispatchQueue.main) + .sink { [weak self] connected in self?.statusItem.button?.appearsDisabled = !connected } + .store(in: &cancellables) + } +} diff --git a/Client/macos/ViewController.h b/Client/macos/ViewController.h deleted file mode 100644 index df90ee30..00000000 --- a/Client/macos/ViewController.h +++ /dev/null @@ -1,31 +0,0 @@ -// -// ViewController.h -// SonyHeadphonesClient -// -// Created by Sem Visscher on 01/12/2020. -// - -#import -#import "AppDelegate.h" - -BluetoothWrapper bt = (BluetoothWrapper)nil; -Headphones* headphones; -NSStatusItem* statusItem; - -@interface ViewController : NSViewController -@property (weak, nonatomic) IBOutlet NSTextField *connectedLabel; -@property (weak, nonatomic) IBOutlet NSTextField *ANCValuePrefixLabel; -@property (weak, nonatomic) IBOutlet NSTextField *ANCValueLabel; -@property (weak, nonatomic) IBOutlet NSButton *focusOnVoice; -@property (weak, nonatomic) IBOutlet NSButton *connectButton; -@property (weak, nonatomic) IBOutlet NSSlider *ANCSlider; -@property (weak, nonatomic) IBOutlet NSButton *ANCEnabled; -@property (weak, nonatomic) IBOutlet NSTextField *virtualSoundLabel; -@property (weak, nonatomic) IBOutlet NSTextField *soundPositionLabel; -@property (weak, nonatomic) IBOutlet NSTextField *surroundLabel; -@property (weak, nonatomic) IBOutlet NSPopUpButton *soundPosition; -@property (weak, nonatomic) IBOutlet NSPopUpButton *surround; - -@property (strong, nonatomic) NSView *vptCard; -@end - diff --git a/Client/macos/ViewController.mm b/Client/macos/ViewController.mm deleted file mode 100644 index 6577dc7e..00000000 --- a/Client/macos/ViewController.mm +++ /dev/null @@ -1,51 +0,0 @@ -// -// ViewController.mm -// Thin AppKit host: the storyboard instantiates this controller; it swaps its content for the -// SwiftUI interface (built in ContentView.swift, exposed via the generated -Swift.h header). -// - -#import "ViewController.h" -#import "SonyHeadphonesClient-Swift.h" - -@implementation ViewController - -- (void)viewDidLoad { - [super viewDidLoad]; - - // Drop the legacy storyboard controls; the SwiftUI view takes over the whole content area. - for (NSView *subview in [self.view.subviews copy]) { - [subview removeFromSuperview]; - } - - NSViewController *ui = [HeadphonesUIFactory makeViewController]; - [self addChildViewController:ui]; - ui.view.frame = self.view.bounds; - ui.view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable; - [self.view addSubview:ui.view]; -} - -- (void)viewWillAppear { - [super viewWillAppear]; - - NSWindow *window = self.view.window; - if (!window) return; - - // The storyboard pins the window to a small fixed size; open it up to a portrait layout. - window.contentMinSize = NSMakeSize(360, 500); - window.contentMaxSize = NSMakeSize(560, 900); - window.styleMask |= NSWindowStyleMaskResizable; - [window setContentSize:NSMakeSize(380, 560)]; - window.titlebarAppearsTransparent = YES; - window.titleVisibility = NSWindowTitleHidden; - window.appearance = [NSAppearance appearanceNamed:NSAppearanceNameDarkAqua]; -} - -// Legacy storyboard action connections resolve to these no-op stubs (their controls are removed above). -- (IBAction)connectToDevice:(id)sender {} -- (IBAction)ANCSliderChanged:(id)sender {} -- (IBAction)ANCEnabledButtonChanged:(id)sender {} -- (IBAction)focusOnVoiceChanged:(id)sender {} -- (IBAction)surroundChanged:(id)sender {} -- (IBAction)soundPositionChanged:(id)sender {} - -@end diff --git a/Client/macos/exportOptions.plist b/Client/macos/exportOptions.plist deleted file mode 100644 index c1e8fb69..00000000 --- a/Client/macos/exportOptions.plist +++ /dev/null @@ -1,8 +0,0 @@ - - - - - method - mac-application - - diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 6376a68e..2edc3350 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -1,59 +1,17 @@ /* SonyBridge — French UI strings. Keys are the English source strings; missing keys fall back to English. */ -/* Connection */ -"No headphones connected" = "Aucun casque connecté"; -"Connecting…" = "Connexion…"; -"Connect headphones" = "Connecter le casque"; -"Connected" = "Connecté"; -"Disconnected" = "Déconnecté"; - -/* Battery (L/R = left/right earbud) */ -"L %ld%% R %ld%%" = "G %ld %% D %ld %%"; -"%ld%% (charging)" = "%ld %% (en charge)"; - -/* Ambient sound control */ +/* Menu */ "Ambient Sound Control" = "Contrôle du son ambiant"; -"Noise\nCanceling" = "Réduction\nde bruit"; -"Ambient\nSound" = "Son\nambiant"; +"Noise Canceling" = "Réduction de bruit"; +"Ambient Sound" = "Son ambiant"; "Off" = "Désactivé"; -"Ambient Sound Level" = "Niveau du son ambiant"; -"Focus on Voice" = "Focalisation sur la voix"; - -/* Equalizer */ -"Equalizer" = "Égaliseur"; -"Bright" = "Brillant"; -"Excited" = "Dynamique"; -"Mellow" = "Doux"; -"Relaxed" = "Détendu"; -"Vocal" = "Voix"; -"Treble" = "Aigus"; -"Bass" = "Graves"; -"Speech" = "Parole"; -"Manual" = "Manuel"; - -/* DSEE */ -"Upscale compressed audio" = "Améliore l’audio compressé"; - -/* Settings */ -"Settings" = "Réglages"; -"Adaptive Volume" = "Volume adaptatif"; -"Auto-adjust volume by surroundings" = "Ajuste le volume selon l’environnement"; -"Pause music when you talk" = "Met la musique en pause quand vous parlez"; -"Auto Power-Off" = "Arrêt automatique"; -"Turn off when idle" = "S’éteint en cas d’inactivité"; -"1 hour" = "1 heure"; -"3 hours" = "3 heures"; -"When taken off" = "Quand le casque est retiré"; - -/* About popover */ -"Status" = "État"; -"Battery" = "Batterie"; -"Battery L / R" = "Batterie G / D"; -"Case" = "Boîtier"; -"Protocol" = "Protocole"; -"SonyBridge · not affiliated with Sony" = "SonyBridge · non affilié à Sony"; +"Connect…" = "Connecter…"; +"Connecting…" = "Connexion…"; +"Disconnect" = "Déconnecter"; +"Quit SonyBridge" = "Quitter SonyBridge"; +"%ld%%" = "%ld %%"; -/* Errors */ +/* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ "Headphones disconnected." = "Casque déconnecté."; "No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; "Connection timed out." = "Délai de connexion dépassé."; diff --git a/Client/macos/info.plist b/Client/macos/info.plist index 642d8c1d..95887553 100644 --- a/Client/macos/info.plist +++ b/Client/macos/info.plist @@ -10,23 +10,33 @@ fr CFBundleExecutable - SonyHeadphonesClient + SonyBridge CFBundleIdentifier com.semvis123.SonyHeadphonesClient CFBundleInfoDictionaryVersion 6.0 CFBundleName - SonyHeadphonesClient + SonyBridge + CFBundleDisplayName + SonyBridge CFBundlePackageType APPL + CFBundleShortVersionString + 0.5.0 + CFBundleVersion + 1 + CFBundleIconFile + AppIcon LSApplicationCategoryType public.app-category.utilities + LSMinimumSystemVersion + 13.0 + LSUIElement + NSHighResolutionCapable - True + NSBluetoothAlwaysUsageDescription This app uses Bluetooth in order to connect to your headphones. - NSMainStoryboardFile - Main NSPrincipalClass NSApplication diff --git a/Client/macos/main.mm b/Client/macos/main.mm deleted file mode 100644 index 0eb47947..00000000 --- a/Client/macos/main.mm +++ /dev/null @@ -1,9 +0,0 @@ -#include -#import -#include "MacOSBluetoothConnector.h" -#include "BluetoothWrapper.h" - -int main(int argc, const char * argv[]) -{ - return NSApplicationMain(argc, argv); -} diff --git a/Makefile b/Makefile new file mode 100644 index 00000000..54be4fd9 --- /dev/null +++ b/Makefile @@ -0,0 +1,20 @@ +# SonyBridge — build without Xcode. See scripts/build.sh for the knobs. +DEBUG ?= 0 + +.PHONY: all build run release clean + +all: build + +build: + DEBUG_PROTOCOL=$(DEBUG) ./scripts/build.sh + +run: build + -pkill -x SonyBridge + open --stdout build/app.log --stderr build/app.log build/SonyBridge.app + +release: + CONFIG=release ARCHS="arm64 x86_64" ./scripts/build.sh + cd build && rm -f SonyBridge.zip && ditto -c -k --keepParent SonyBridge.app SonyBridge.zip + +clean: + rm -rf build diff --git a/README.md b/README.md index 4a9727ff..f7f9d5be 100644 --- a/README.md +++ b/README.md @@ -111,16 +111,18 @@ first time (`brew trust AmitRajput-Dev/tap`). ## 🚀 Build from source
-macOS (native SwiftUI app) +macOS (menu bar app) -Requires **Xcode 14+**. +Requires the **Xcode Command Line Tools** (`xcode-select --install`) — the full Xcode app is not needed. ```sh git clone https://github.com/AmitRajput-Dev/SonyBridge.git -open SonyBridge/Client/macos/SonyHeadphonesClient.xcodeproj +cd SonyBridge +make run # builds build/SonyBridge.app and launches it ``` -Then ⌘R. +`make test` runs the unit tests, `make release` builds a universal (Apple Silicon + Intel) zip, and +`make run DEBUG=1` logs every frame exchanged with the headphones to `build/app.log`.
## 🔬 How it works diff --git a/scripts/build.sh b/scripts/build.sh new file mode 100755 index 00000000..ad37a600 --- /dev/null +++ b/scripts/build.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# Builds build/SonyBridge.app with the Command Line Tools only (no Xcode needed). +# CONFIG=debug|release (default: debug) +# ARCHS="arm64 x86_64" (default: this Mac's architecture; several = universal binary via lipo) +# DEBUG_PROTOCOL=1 (hex-dumps every frame exchanged with the headphones to stderr) +set -euo pipefail +shopt -s nullglob + +ROOT=$(cd "$(dirname "$0")/.." && pwd) +CORE=$ROOT/Client +MAC=$CORE/macos +OUT=$ROOT/build +APP=$OUT/SonyBridge.app +SDK=$(xcrun --show-sdk-path) +CONFIG=${CONFIG:-debug} +ARCHS=${ARCHS:-$(uname -m)} +MIN_MACOS=13.0 + +if [ "$CONFIG" = release ]; then SWIFT_OPT="-O"; CXX_OPT="-O2"; else SWIFT_OPT="-Onone -g"; CXX_OPT="-O0 -g"; fi +SWIFT_DEFINES=""; CXX_DEFINES="" +if [ "${DEBUG_PROTOCOL:-0}" = 1 ]; then SWIFT_DEFINES="-D DEBUG_PROTOCOL"; CXX_DEFINES="-DSHC_DEBUG_PROTOCOL"; fi + +SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift) +CXX_SOURCES=("$CORE"/*.cpp) +OBJCXX_SOURCES=("$MAC"/*.mm) + +rm -rf "$APP" +mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" +BINARIES="" + +for ARCH in $ARCHS; do + OBJ=$OUT/obj/$CONFIG-$ARCH + rm -rf "$OBJ"; mkdir -p "$OBJ" + TARGET=$ARCH-apple-macos$MIN_MACOS + CXXFLAGS="-target $TARGET -isysroot $SDK -std=c++17 $CXX_OPT $CXX_DEFINES -I $CORE -I $MAC" + + echo "== [$ARCH] Swift" + swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 $SWIFT_OPT $SWIFT_DEFINES -wmo -parse-as-library \ + -module-name SonyBridge \ + -import-objc-header "$MAC/SonyHeadphonesClient-Bridging-Header.h" -I "$MAC" -I "$CORE" \ + -c "${SWIFT_SOURCES[@]}" -o "$OBJ/swift.o" + + echo "== [$ARCH] C++" + for f in "${CXX_SOURCES[@]}"; do clang++ $CXXFLAGS -c "$f" -o "$OBJ/$(basename "$f" .cpp).o"; done + + echo "== [$ARCH] Obj-C++" + for f in "${OBJCXX_SOURCES[@]}"; do + clang++ $CXXFLAGS -fobjc-arc -fmodules -fcxx-modules -c "$f" -o "$OBJ/$(basename "$f" .mm).o" + done + + echo "== [$ARCH] Link" + swiftc -target "$TARGET" -sdk "$SDK" "$OBJ"/*.o -o "$OBJ/SonyBridge" -lc++ \ + -framework AppKit -framework SwiftUI -framework Combine -framework IOBluetooth \ + -framework IOBluetoothUI -framework ServiceManagement + BINARIES="$BINARIES $OBJ/SonyBridge" +done + +lipo -create $BINARIES -output "$APP/Contents/MacOS/SonyBridge" + +echo "== Resources" +cp "$MAC/info.plist" "$APP/Contents/Info.plist" +cp -R "$MAC"/*.lproj "$APP/Contents/Resources/" +iconutil -c icns "$MAC/Resources/AppIcon.iconset" -o "$APP/Contents/Resources/AppIcon.icns" + +echo "== Sign (ad-hoc)" +codesign --force --sign - --entitlements "$MAC/SonyHeadphonesClient.entitlements" "$APP" +echo "OK -> $APP" From 02ac5599257d859deb58fc54a20617404131e73e Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 15:45:17 +0200 Subject: [PATCH 06/50] test: reconnect/poll-guard/throttle logic, localization check, make test --- .github/workflows/build.yml | 2 ++ Client/macos/PollGuard.swift | 21 ++++++++++++++ Client/macos/ReconnectPolicy.swift | 18 ++++++++++++ Client/macos/SendThrottle.swift | 19 ++++++++++++ Client/tests/LogicTests/main.swift | 46 ++++++++++++++++++++++++++++++ Makefile | 5 +++- scripts/check_localization.py | 38 ++++++++++++++++++++++++ scripts/test.sh | 20 +++++++++++++ 8 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 Client/macos/PollGuard.swift create mode 100644 Client/macos/ReconnectPolicy.swift create mode 100644 Client/macos/SendThrottle.swift create mode 100644 Client/tests/LogicTests/main.swift create mode 100755 scripts/check_localization.py create mode 100755 scripts/test.sh diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cbe01345..e2afbf92 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -11,6 +11,8 @@ jobs: runs-on: macos-latest steps: - uses: actions/checkout@v4 + - name: Test + run: make test - name: Build (release, universal) run: make release - uses: actions/upload-artifact@v4 diff --git a/Client/macos/PollGuard.swift b/Client/macos/PollGuard.swift new file mode 100644 index 00000000..0fc4af32 --- /dev/null +++ b/Client/macos/PollGuard.swift @@ -0,0 +1,21 @@ +import Foundation + +// Ignores a polled value for a setting the user changed less than `window` seconds ago, so a read-back that +// raced the user's command doesn't briefly flip the menu back to the old state. +struct PollGuard { + let window: TimeInterval + private var lastUserChange: [Key: Date] = [:] + + init(window: TimeInterval = 3) { + self.window = window + } + + mutating func userChanged(_ key: Key, at date: Date = Date()) { + lastUserChange[key] = date + } + + func shouldAcceptPoll(for key: Key, at date: Date = Date()) -> Bool { + guard let changed = lastUserChange[key] else { return true } + return date.timeIntervalSince(changed) >= window + } +} diff --git a/Client/macos/ReconnectPolicy.swift b/Client/macos/ReconnectPolicy.swift new file mode 100644 index 00000000..dd54bd3a --- /dev/null +++ b/Client/macos/ReconnectPolicy.swift @@ -0,0 +1,18 @@ +import Foundation + +// Delays between automatic reconnection attempts: 3 s, 10 s, 30 s, then every 60 s. +struct ReconnectPolicy { + static let delays: [TimeInterval] = [3, 10, 30, 60] + private(set) var attempt = 0 + + // Delay before the next attempt; each call advances the schedule. + mutating func nextDelay() -> TimeInterval { + let delay = Self.delays[min(attempt, Self.delays.count - 1)] + attempt += 1 + return delay + } + + mutating func reset() { + attempt = 0 + } +} diff --git a/Client/macos/SendThrottle.swift b/Client/macos/SendThrottle.swift new file mode 100644 index 00000000..2ada2b71 --- /dev/null +++ b/Client/macos/SendThrottle.swift @@ -0,0 +1,19 @@ +import Foundation + +// Rate-limits slider commands: at most one every `interval` while dragging; the final value always goes out. +struct SendThrottle { + let interval: TimeInterval + private var lastSend: Date? + + init(interval: TimeInterval = 0.15) { + self.interval = interval + } + + mutating func shouldSend(at date: Date = Date(), final: Bool) -> Bool { + if !final, let last = lastSend, date.timeIntervalSince(last) < interval { + return false + } + lastSend = date + return true + } +} diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift new file mode 100644 index 00000000..993b34c5 --- /dev/null +++ b/Client/tests/LogicTests/main.swift @@ -0,0 +1,46 @@ +import Foundation + +// Minimal test runner (XCTest isn't available without Xcode). Exit code 1 on any failure. +var failures = 0 +func check(_ condition: Bool, _ message: String, line: Int = #line) { + if !condition { + failures += 1 + print("FAIL line \(line): \(message)") + } +} + +// ReconnectPolicy: 3 s, 10 s, 30 s, then every 60 s; reset restarts. +do { + var policy = ReconnectPolicy() + let delays = (0..<6).map { _ in policy.nextDelay() } + check(delays == [3, 10, 30, 60, 60, 60], "reconnect schedule was \(delays)") + policy.reset() + check(policy.nextDelay() == 3, "reset restarts the schedule") +} + +// PollGuard: a poll is ignored for 3 s after the user changed that setting. +do { + var pollGuard = PollGuard(window: 3) + let t0 = Date(timeIntervalSince1970: 1_000) + check(pollGuard.shouldAcceptPoll(for: "ambient", at: t0), "no user change: accept") + pollGuard.userChanged("ambient", at: t0) + check(!pollGuard.shouldAcceptPoll(for: "ambient", at: t0.addingTimeInterval(2.9)), "inside the window: reject") + check(pollGuard.shouldAcceptPoll(for: "ambient", at: t0.addingTimeInterval(3)), "after the window: accept") + check(pollGuard.shouldAcceptPoll(for: "eq", at: t0.addingTimeInterval(1)), "other keys are unaffected") +} + +// SendThrottle: at most one send per 150 ms while dragging; the final value always goes out. +do { + var throttle = SendThrottle(interval: 0.15) + let t0 = Date(timeIntervalSince1970: 1_000) + check(throttle.shouldSend(at: t0, final: false), "first drag event sends") + check(!throttle.shouldSend(at: t0.addingTimeInterval(0.10), final: false), "too soon: skip") + check(throttle.shouldSend(at: t0.addingTimeInterval(0.16), final: false), "after the interval: send") + check(throttle.shouldSend(at: t0.addingTimeInterval(0.17), final: true), "final value always sends") +} + +if failures > 0 { + print("LogicTests: \(failures) failure(s)") + exit(1) +} +print("LogicTests: all passed") diff --git a/Makefile b/Makefile index 54be4fd9..a50b440e 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SonyBridge — build without Xcode. See scripts/build.sh for the knobs. DEBUG ?= 0 -.PHONY: all build run release clean +.PHONY: all build run test release clean all: build @@ -12,6 +12,9 @@ run: build -pkill -x SonyBridge open --stdout build/app.log --stderr build/app.log build/SonyBridge.app +test: + ./scripts/test.sh + release: CONFIG=release ARCHS="arm64 x86_64" ./scripts/build.sh cd build && rm -f SonyBridge.zip && ditto -c -k --keepParent SonyBridge.app SonyBridge.zip diff --git a/scripts/check_localization.py b/scripts/check_localization.py new file mode 100755 index 00000000..7631cb5a --- /dev/null +++ b/scripts/check_localization.py @@ -0,0 +1,38 @@ +#!/usr/bin/env python3 +"""Every tr("…") / NSLocalizedString("…") key must have a French translation, and every French key must be used.""" +import json +import pathlib +import re +import subprocess +import sys + +ROOT = pathlib.Path(__file__).resolve().parent.parent +MAC = ROOT / "Client" / "macos" +STRINGS = MAC / "fr.lproj" / "Localizable.strings" +LITERAL = r'"((?:[^"\\]|\\.)*)"' +PATTERNS = [re.compile(r"\btr\(" + LITERAL + r"\)"), re.compile(r"NSLocalizedString\(@?" + LITERAL)] + +def unescape_source_literal(key): + r"""Unescape source string literals: \n → newline, \t → tab, and any other \X → X.""" + def replace_escape(match): + char = match.group(1) + escapes = {'n': '\n', 't': '\t', 'r': '\r', '"': '"', '\\': '\\'} + return escapes.get(char, char) + return re.sub(r"\\(.)", replace_escape, key) + +french = set(json.loads(subprocess.check_output(["plutil", "-convert", "json", "-o", "-", str(STRINGS)]))) +used = set() +for path in sorted(MAC.rglob("*.swift")) + sorted(MAC.rglob("*.mm")): + text = path.read_text(encoding="utf-8") + for pattern in PATTERNS: + used.update(unescape_source_literal(key) for key in pattern.findall(text)) + +missing = sorted(used - french) +unused = sorted(french - used) +for key in missing: + print(f"missing French translation: {key!r}") +for key in unused: + print(f"unused French key: {key!r}") +if missing or unused: + sys.exit(1) +print(f"Localization: {len(used)} keys, all translated") diff --git a/scripts/test.sh b/scripts/test.sh new file mode 100755 index 00000000..3eff7a02 --- /dev/null +++ b/scripts/test.sh @@ -0,0 +1,20 @@ +#!/bin/bash +# Builds and runs the unit test executables (plain asserts, no XCTest), then checks the translations. +set -euo pipefail + +ROOT=$(cd "$(dirname "$0")/.." && pwd) +MAC=$ROOT/Client/macos +OUT=$ROOT/build/tests +SDK=$(xcrun --show-sdk-path) +TARGET=$(uname -m)-apple-macos13.0 +mkdir -p "$OUT" + +echo "== LogicTests" +swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ + "$ROOT/Client/tests/LogicTests/main.swift" \ + "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ + -o "$OUT/LogicTests" +"$OUT/LogicTests" + +echo "== Localization" +python3 "$ROOT/scripts/check_localization.py" From 886ba74d269bfcc463567c8b16b7eab7762bf080 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 15:45:21 +0200 Subject: [PATCH 07/50] fix(xm6): read NC/ASM state on channel 0x19, decode 10-band equalizer (read-only) --- Client/Headphones.cpp | 59 ++++++++++---------- Client/Headphones.h | 9 ++- Client/ProtocolParsers.cpp | 45 +++++++++++++++ Client/ProtocolParsers.h | 33 +++++++++++ Client/macos/HeadphonesBridge.h | 4 ++ Client/macos/HeadphonesBridge.mm | 10 +++- Client/tests/ProtocolParsersTests.cpp | 80 +++++++++++++++++++++++++++ scripts/test.sh | 7 +++ 8 files changed, 216 insertions(+), 31 deletions(-) create mode 100644 Client/ProtocolParsers.cpp create mode 100644 Client/ProtocolParsers.h create mode 100644 Client/tests/ProtocolParsersTests.cpp diff --git a/Client/Headphones.cpp b/Client/Headphones.cpp index 54d010f2..67b8c252 100644 --- a/Client/Headphones.cpp +++ b/Client/Headphones.cpp @@ -1,5 +1,6 @@ #include "Headphones.h" #include "CommandSerializer.h" +#include "ProtocolParsers.h" #include #include @@ -136,27 +137,24 @@ int Headphones::getBatteryCase() { return this->_batteryCase; } void Headphones::requestEqualizer() { - // GET: 56 00 -> RET: 57 00 06 - auto resp = this->_conn.sendCommandAndReadResponse( - { (char)V2Command::EQ_GET, 0x00 }, - V2Command::EQ_RET - ); - if (resp.size() >= 3) + // GET: 56 00 -> RET: 57 00 (decoded by ProtocolParsers::parseEqualizer) + auto resp = this->_conn.sendCommandAndReadResponse({ (char)V2Command::EQ_GET, 0x00 }, V2Command::EQ_RET); + if (auto eq = ProtocolParsers::parseEqualizer(resp)) { std::lock_guard guard(this->_propertyMtx); - this->_eqPreset = static_cast((unsigned char)resp[2]); - // When band data is present (57 00 06 ), decode the -10..10 values. - if (resp.size() >= 10) + this->_eqPreset = static_cast(eq->preset); + if (!eq->bands.empty()) { - this->_eqClearBass = (unsigned char)resp[4] - 10; - for (int i = 0; i < 5; i++) - { - this->_eqBands[i] = (unsigned char)resp[5 + i] - 10; - } + this->_eqBands = eq->bands; + this->_eqHasClearBass = eq->hasClearBass; + this->_eqClearBass = eq->clearBass; } } } +int Headphones::getEqualizerBandCount() { return (int)this->_eqBands.size(); } +bool Headphones::equalizerHasClearBass() { return this->_eqHasClearBass; } + EQ_PRESET Headphones::getEqualizerPreset() { return this->_eqPreset; @@ -195,10 +193,7 @@ void Headphones::setEqualizerCustom(int clearBass, const std::vector& bands std::lock_guard guard(this->_propertyMtx); this->_eqPreset = EQ_PRESET::MANUAL; this->_eqClearBass = clearBass; - for (int i = 0; i < 5; i++) - { - this->_eqBands[i] = i < (int)bands.size() ? bands[i] : 0; - } + this->_eqBands.assign(bands.begin(), bands.end()); } int Headphones::getClearBass() @@ -249,19 +244,15 @@ void Headphones::requestAmbientState() auto protocolVersion = this->_conn.getProtocolVersion(); if (protocolVersion == SonyProtocolVersion::V2) { - // GET: 66 17 -> RET: 67 17 01 - auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, 0x17 }, 0x67); - if (resp.size() >= 7) + // GET: 66 -> RET: 67 01 <0=NC/1=Ambient> [2 more bytes on 0x19] + auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, (char)this->_ncAsmInquiryType }, 0x67, this->_ncAsmInquiryType); + if (auto state = ProtocolParsers::parseNcAsmState(resp)) { - bool on = resp[3] != 0; - bool ambient = resp[4] != 0; - bool voice = resp[5] != 0; - int level = (unsigned char)resp[6]; std::lock_guard guard(this->_propertyMtx); // Update both current and desired so the UI reflects reality and isChanged() stays false. - this->_ambientSoundControl.current = this->_ambientSoundControl.desired = on; - this->_asmLevel.current = this->_asmLevel.desired = ambient ? level : 0; - this->_focusOnVoice.current = this->_focusOnVoice.desired = voice; + this->_ambientSoundControl.current = this->_ambientSoundControl.desired = state->enabled; + this->_asmLevel.current = this->_asmLevel.desired = state->ambient ? state->level : 0; + this->_focusOnVoice.current = this->_focusOnVoice.desired = state->focusOnVoice; } } else @@ -276,6 +267,18 @@ void Headphones::requestAmbientState() } } +void Headphones::probeNcAsmInquiryType() +{ + // The WH-1000XM6 answers the legacy 0x17 inquiry with all zeros and reports its real state on 0x19. + // Setting the mode still goes through 68 17, which the XM6 accepts. + try + { + auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, 0x19 }, 0x67, 0x19); + if (ProtocolParsers::parseNcAsmState(resp)) this->_ncAsmInquiryType = 0x19; + } + catch (...) {} +} + // --- Optional features (auto power off, firmware, codec, speak-to-chat, adaptive volume) --- namespace diff --git a/Client/Headphones.h b/Client/Headphones.h index be3fa52b..e18b8d6b 100644 --- a/Client/Headphones.h +++ b/Client/Headphones.h @@ -54,6 +54,8 @@ class Headphones { void setEqualizerCustom(int clearBass, const std::vector& bands); int getClearBass(); int getEqualizerBand(int index); // 0..4 + int getEqualizerBandCount(); // 0 until read, then 5 (+ Clear Bass) or 10 + bool equalizerHasClearBass(); // DSEE / audio upsampling (v2). void requestDsee(); @@ -64,6 +66,9 @@ class Headphones { // changes made with the headphone's own button are reflected in the app). void requestAmbientState(); + // Picks the NC/ASM inquiry channel: 0x19 when the device answers it (WH-1000XM6), else the legacy 0x17. + void probeNcAsmInquiryType(); + // Optional features. probeCapabilities() sends each GET on connect; a feature is "supported" only if // the device answers (otherwise we must never send its SET - see the WH-1000XM4 power-off incident). void probeCapabilities(); @@ -101,7 +106,9 @@ class Headphones { int _batteryRight = -1; int _batteryCase = -1; EQ_PRESET _eqPreset = EQ_PRESET::OFF; - std::vector _eqBands = { 0, 0, 0, 0, 0 }; + std::vector _eqBands; // empty until the first read; 5 or 10 values + bool _eqHasClearBass = false; + unsigned char _ncAsmInquiryType = 0x17; // 0x19 on the WH-1000XM6, see probeNcAsmInquiryType() int _eqClearBass = 0; bool _dsee = false; diff --git a/Client/ProtocolParsers.cpp b/Client/ProtocolParsers.cpp new file mode 100644 index 00000000..b1b2e9e0 --- /dev/null +++ b/Client/ProtocolParsers.cpp @@ -0,0 +1,45 @@ +#include "ProtocolParsers.h" + +#include + +namespace ProtocolParsers +{ + std::optional parseNcAsmState(const Buffer& payload) + { + if (payload.size() < 7) return std::nullopt; + auto opcode = (unsigned char)payload[0]; + auto type = (unsigned char)payload[1]; + if ((opcode != 0x67 && opcode != 0x69) || (type != 0x17 && type != 0x19)) return std::nullopt; + if (std::all_of(payload.begin() + 2, payload.end(), [](char b) { return b == 0; })) return std::nullopt; + + NcAsmState state; + state.enabled = payload[3] != 0; + state.ambient = payload[4] != 0; + state.focusOnVoice = payload[5] != 0; + state.level = (unsigned char)payload[6]; + return state; + } + + std::optional parseEqualizer(const Buffer& payload) + { + if (payload.size() < 3 || (unsigned char)payload[0] != 0x57) return std::nullopt; + + EqualizerState state{ (unsigned char)payload[2], false, 0, {} }; + if (payload.size() < 4) return state; + size_t count = (unsigned char)payload[3]; + if (payload.size() < 4 + count) return state; + + auto value = [&](size_t i) { return (int)(unsigned char)payload[4 + i] - 10; }; + if (count == 6) + { + state.hasClearBass = true; + state.clearBass = value(0); + for (size_t i = 1; i < 6; i++) state.bands.push_back(value(i)); + } + else if (count == 10) + { + for (size_t i = 0; i < 10; i++) state.bands.push_back(value(i)); + } + return state; + } +} diff --git a/Client/ProtocolParsers.h b/Client/ProtocolParsers.h new file mode 100644 index 00000000..f4bf5fc1 --- /dev/null +++ b/Client/ProtocolParsers.h @@ -0,0 +1,33 @@ +#pragma once + +#include +#include +#include "Constants.h" + +// Pure decoders for v2 inquiry replies. `payload` is the frame's field, starting with the reply opcode. +namespace ProtocolParsers +{ + struct NcAsmState + { + bool enabled; // NC/ASM effect on + bool ambient; // true = Ambient Sound, false = Noise Cancelling + bool focusOnVoice; + int level; // ambient level (meaningful when ambient) + }; + + // Accepts "67|69 17 01 " and the WH-1000XM6 "67|69 19 01 + // ". Returns nullopt when too short, for other opcodes, and for the all-zero body the XM6 sends + // back on the channel it doesn't use (67 17 00 00 00 00 00). + std::optional parseNcAsmState(const Buffer& payload); + + struct EqualizerState + { + unsigned char preset; // raw preset id (EQ_PRESET values, or ids we don't know yet like 0x30) + bool hasClearBass; // 5-band layout only + int clearBass; // -10..10 when hasClearBass + std::vector bands; // 5 or 10 values in -10..10; empty when the reply carried no band data + }; + + // "57 00 06 " (5 bands + Clear Bass) or "57 00 0a ". + std::optional parseEqualizer(const Buffer& payload); +} diff --git a/Client/macos/HeadphonesBridge.h b/Client/macos/HeadphonesBridge.h index dfbdd039..e7492326 100644 --- a/Client/macos/HeadphonesBridge.h +++ b/Client/macos/HeadphonesBridge.h @@ -39,6 +39,10 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { @property (nonatomic, readonly) NSInteger batteryCase; @property (nonatomic, readonly) NSInteger eqPreset; // raw preset byte (EQ_PRESET) @property (nonatomic, readonly) BOOL supportsEqualizer; // v2 devices only +@property (nonatomic, readonly) NSInteger equalizerBandCount; // 0 until read, then 5 or 10 +@property (nonatomic, readonly) BOOL equalizerHasClearBass; // 5-band layout +// NO while this device's equalizer write format is unverified (the WH-1000XM6's 10-band layout, spec §7). +@property (nonatomic, readonly) BOOL equalizerWritable; @property (nonatomic, readonly) NSInteger clearBass; // -10..10 @property (nonatomic, readonly) BOOL dsee; // DSEE / audio upsampling diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index 6cf092a7..4c4549ff 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -103,6 +103,11 @@ - (NSInteger)clearBass { return _hp ? _hp->getClearBass() : 0; } +- (NSInteger)equalizerBandCount { return _hp ? _hp->getEqualizerBandCount() : 0; } +- (BOOL)equalizerHasClearBass { return _hp && _hp->equalizerHasClearBass(); } +// Only the 5-band + Clear Bass layout (WH-CH720N family) has a verified write format. +- (BOOL)equalizerWritable { return self.supportsEqualizer && _hp && _hp->equalizerHasClearBass(); } + - (BOOL)dsee { return _hp ? _hp->getDsee() : NO; } @@ -213,6 +218,7 @@ - (void)refreshStatusWithCompletion:(void (^)(void))completion { try { if (!self->_initialized) { hp->initDevice(); + hp->probeNcAsmInquiryType(); self->_initialized = YES; } hp->requestBattery(); @@ -245,7 +251,7 @@ - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL, NSString return; } // The v2 EQ SET opcode differs from v1; only issue it on confirmed v2 devices. - if (_bt->getProtocolVersion() != SonyProtocolVersion::V2) { + if (!self.equalizerWritable) { completion(NO, NSLocalizedString(@"Equalizer control isn't supported on this device yet.", nil)); return; } @@ -266,7 +272,7 @@ - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL, NSString } - (void)setCustomEqualizerBass:(NSInteger)bass bands:(NSArray *)bands completion:(void (^)(BOOL, NSString * _Nullable))completion { - if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { + if (!_hp || !self.connected || !self.equalizerWritable) { completion(NO, NSLocalizedString(@"Equalizer control isn't supported on this device yet.", nil)); return; } diff --git a/Client/tests/ProtocolParsersTests.cpp b/Client/tests/ProtocolParsersTests.cpp new file mode 100644 index 00000000..5c356aae --- /dev/null +++ b/Client/tests/ProtocolParsersTests.cpp @@ -0,0 +1,80 @@ +#include "ProtocolParsers.h" +#include "CommandSerializer.h" +#include +#include + +// Minimal test runner (no framework). Exit code 1 on any failure. +static int failures = 0; +#define CHECK(cond) do { if (!(cond)) { failures++; std::printf("FAIL %s:%d: %s\n", __FILE__, __LINE__, #cond); } } while (0) + +static Buffer bytes(std::initializer_list values) +{ + Buffer b; + for (int v : values) b.push_back((char)v); + return b; +} + +int main() +{ + using namespace ProtocolParsers; + + // --- NC/ASM state --- + // WH-1000XM6 answer to the legacy 0x17 inquiry: all zeros = "not this channel". + CHECK(!parseNcAsmState(bytes({ 0x67, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00 })).has_value()); + // WH-1000XM6 notify on 0x19: Ambient Sound on, level 10, no voice focus. + { + auto s = parseNcAsmState(bytes({ 0x69, 0x19, 0x01, 0x01, 0x01, 0x00, 0x0a, 0x00, 0x00 })); + CHECK(s && s->enabled && s->ambient && !s->focusOnVoice && s->level == 10); + } + // WH-1000XM6 reply on 0x19: Noise Cancelling (ambient byte = 0). + { + auto s = parseNcAsmState(bytes({ 0x67, 0x19, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00 })); + CHECK(s && s->enabled && !s->ambient); + } + // Legacy 0x17 layout (WH-CH720N): effect off. + { + auto s = parseNcAsmState(bytes({ 0x67, 0x17, 0x01, 0x00, 0x00, 0x00, 0x01 })); + CHECK(s && !s->enabled); + } + CHECK(!parseNcAsmState(bytes({ 0x67, 0x17, 0x01 })).has_value()); // too short + CHECK(!parseNcAsmState(bytes({ 0x57, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0a })).has_value()); // wrong opcode + + // --- Equalizer --- + // WH-1000XM6: unknown preset 0x30, 10 bands (offset +10 hypothesis, spec §7). + { + auto e = parseEqualizer(bytes({ 0x57, 0x00, 0x30, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 })); + CHECK(e && e->preset == 0x30 && !e->hasClearBass && e->bands.size() == 10); + CHECK(e && e->bands[0] == 0 && e->bands[2] == -5 && e->bands[9] == -4); + } + // 5 bands + Clear Bass (WH-CH720N): Manual, bass +3, bands -2..+2. + { + auto e = parseEqualizer(bytes({ 0x57, 0x00, 0xa0, 0x06, 13, 8, 9, 10, 11, 12 })); + CHECK(e && e->preset == 0xa0 && e->hasClearBass && e->clearBass == 3); + CHECK(e && e->bands == std::vector({ -2, -1, 0, 1, 2 })); + } + // Preset only, no band data. + { + auto e = parseEqualizer(bytes({ 0x57, 0x00, 0x16 })); + CHECK(e && e->preset == 0x16 && e->bands.empty()); + } + CHECK(!parseEqualizer(bytes({ 0x23, 0x00, 0x44, 0x00 })).has_value()); // battery reply + + // --- Framing --- + // Round trip, with a payload byte (0x3c = END_MARKER) that must be escaped. + { + Buffer payload = bytes({ 0x68, 0x17, 0x01, 0x01, 0x01, 0x00, 0x3c }); + auto frame = CommandSerializer::packageDataForBt(payload, DATA_TYPE::DATA_MDR, 1); + CHECK(frame.front() == START_MARKER && frame.back() == END_MARKER); + auto msg = CommandSerializer::unpackBtMessage(Buffer(frame.begin() + 1, frame.end() - 1)); + CHECK(msg.dataType == DATA_TYPE::DATA_MDR && msg.seqNumber == 1 && msg.payload == payload); + } + // Real WH-1000XM6 battery frame (68 %), between the 3e/3c markers. + { + auto msg = CommandSerializer::unpackBtMessage(bytes({ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x04, 0x23, 0x00, 0x44, 0x00, 0x77 })); + CHECK(msg.payload == bytes({ 0x23, 0x00, 0x44, 0x00 })); + } + + if (failures) { std::printf("ProtocolParsersTests: %d failure(s)\n", failures); return 1; } + std::printf("ProtocolParsersTests: all passed\n"); + return 0; +} diff --git a/scripts/test.sh b/scripts/test.sh index 3eff7a02..dee43690 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -16,5 +16,12 @@ swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ -o "$OUT/LogicTests" "$OUT/LogicTests" +echo "== ProtocolParsersTests" +clang++ -target "$TARGET" -isysroot "$SDK" -std=c++17 -I "$ROOT/Client" \ + "$ROOT/Client/tests/ProtocolParsersTests.cpp" "$ROOT/Client/ProtocolParsers.cpp" \ + "$ROOT/Client/CommandSerializer.cpp" "$ROOT/Client/ByteMagic.cpp" \ + -o "$OUT/ProtocolParsersTests" +"$OUT/ProtocolParsersTests" + echo "== Localization" python3 "$ROOT/scripts/check_localization.py" From b5e6228a0e55d12f0d0d0be42aeb7858298c7d3f Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 16:04:20 +0200 Subject: [PATCH 08/50] fix(xm6): read NC/ASM state on channel 0x19, decode 10-band equalizer (read-only) --- Client/macos/HeadphonesBridge.mm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index 4c4549ff..d4f0cf43 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -221,6 +221,8 @@ - (void)refreshStatusWithCompletion:(void (^)(void))completion { hp->probeNcAsmInquiryType(); self->_initialized = YES; } + // Current NC/ASM state, on the channel probeNcAsmInquiryType() picked. + hp->requestAmbientState(); hp->requestBattery(); hp->requestEqualizer(); hp->requestDsee(); From bdb28814d07105d419de179fe17a06302953bb91 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 16:17:45 +0200 Subject: [PATCH 09/50] refactor(macos): menu-oriented HeadphonesModel (connection state, common-mode timers, poll guard, battery polling) --- Client/macos/HeadphonesBridge.h | 3 + Client/macos/HeadphonesBridge.mm | 10 + Client/macos/HeadphonesMenu.swift | 4 +- Client/macos/HeadphonesModel.swift | 369 ++++++++++++---------- Client/macos/StatusItemController.swift | 4 +- Client/macos/fr.lproj/Localizable.strings | 1 - 6 files changed, 220 insertions(+), 171 deletions(-) diff --git a/Client/macos/HeadphonesBridge.h b/Client/macos/HeadphonesBridge.h index e7492326..d413e725 100644 --- a/Client/macos/HeadphonesBridge.h +++ b/Client/macos/HeadphonesBridge.h @@ -93,6 +93,9 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { // own button show up in the app. Called on a timer while connected. - (void)refreshDynamicWithCompletion:(void (^)(void))completion; +// Re-reads the battery level (v2 devices only). Completion on the main thread. +- (void)refreshBatteryWithCompletion:(void (^)(void))completion; + @end NS_ASSUME_NONNULL_END diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index d4f0cf43..17bfab41 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -247,6 +247,16 @@ - (void)refreshDynamicWithCompletion:(void (^)(void))completion { }); } +- (void)refreshBatteryWithCompletion:(void (^)(void))completion { + // CRITICAL: 0x22 is BATTERY_LEVEL_REQUEST on v2 but POWER_OFF on v1 - never send it to a v1 device. + if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { completion(); return; } + Headphones *hp = _hp.get(); + dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + try { hp->requestBattery(); } catch (std::exception &exc) {} + dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); + }); +} + - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 56a8c929..7fb185b7 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -53,8 +53,8 @@ final class HeadphonesMenu { item.state = connected && model.mode == mode ? .on : .off item.isEnabled = connected } - connectItem.title = connected ? tr("Disconnect") : (model.connecting ? tr("Connecting…") : tr("Connect…")) - connectItem.isEnabled = !model.connecting + connectItem.title = connected ? tr("Disconnect") : (model.connectionState == .connecting ? tr("Connecting…") : tr("Connect…")) + connectItem.isEnabled = model.connectionState != .connecting } private func toggleConnection() { diff --git a/Client/macos/HeadphonesModel.swift b/Client/macos/HeadphonesModel.swift index 82b66c8a..4925fabf 100644 --- a/Client/macos/HeadphonesModel.swift +++ b/Client/macos/HeadphonesModel.swift @@ -1,227 +1,264 @@ -// -// HeadphonesModel.swift -// Observable view model wrapping the Obj-C++ HeadphonesBridge for SwiftUI. -// - import Foundation import Combine +enum ConnectionState { + case disconnected, connecting, connected +} + +// Observable state of the headphones and the actions the menu triggers. Wraps the Obj-C++ HeadphonesBridge. final class HeadphonesModel: ObservableObject { + private enum PolledSetting { case ambient } + private let bridge = HeadphonesBridge() - @Published var connected = false - @Published var connecting = false - @Published var deviceName = "" - @Published var supportsVpt = false - @Published var maxAmbientLevel = 20 - - @Published var mode: SHCAmbientMode = .off - @Published var ambientLevel = 10 - @Published var focusOnVoice = false - @Published var focusOnVoiceAvailable = false - - @Published var batteryLevel = -1 - @Published var batteryCharging = false - @Published var hasDualBattery = false - @Published var batteryLeft = -1 - @Published var batteryRight = -1 - @Published var batteryCase = -1 - @Published var eqPreset = 0 - @Published var supportsEqualizer = false - @Published var eqBands = [0, 0, 0, 0, 0] - @Published var clearBass = 0 - @Published var dsee = false - - @Published var hasAutoPowerOff = false - @Published var autoPowerOff = 0 - @Published var firmware = "" - @Published var codec = "" - @Published var hasSpeakToChat = false - @Published var speakToChat = false - @Published var hasAdaptiveVolume = false - @Published var adaptiveVolume = false - @Published var deviceMac = "" - @Published var protocolVersion = "" - - @Published var errorMessage: String? - - private var pollTimer: Timer? - private var dynamicTimer: Timer? + @Published private(set) var connectionState: ConnectionState = .disconnected + var connected: Bool { connectionState == .connected } + + // Kept after a disconnect so the header still names the last headset. + @Published private(set) var deviceName = "" + @Published private(set) var deviceMac = "" + @Published private(set) var protocolVersion = "" + @Published private(set) var firmware = "" + @Published private(set) var codec = "" + @Published private(set) var maxAmbientLevel = 20 + + @Published private(set) var mode: SHCAmbientMode = .off + @Published private(set) var ambientLevel = 10 + @Published private(set) var focusOnVoice = false + + @Published private(set) var batteryLevel = -1 + @Published private(set) var batteryCharging = false + @Published private(set) var hasDualBattery = false + @Published private(set) var batteryLeft = -1 + @Published private(set) var batteryRight = -1 + @Published private(set) var batteryCase = -1 + + @Published private(set) var supportsEqualizer = false + @Published private(set) var equalizerWritable = false + @Published private(set) var eqPreset = 0 + @Published private(set) var eqBands: [Int] = [] + @Published private(set) var eqHasClearBass = false + @Published private(set) var clearBass = 0 + @Published private(set) var dsee = false + + @Published private(set) var hasAutoPowerOff = false + @Published private(set) var autoPowerOff = 0 + @Published private(set) var hasSpeakToChat = false + @Published private(set) var speakToChat = false + @Published private(set) var hasAdaptiveVolume = false + @Published private(set) var adaptiveVolume = false + + // Last error from a user action; cleared by the next successful one. + @Published private(set) var errorMessage: String? + private var timers: [Timer] = [] + private var pollGuard = PollGuard() + private var levelThrottle = SendThrottle() + private var eqThrottle = SendThrottle() + + // MARK: - Connection + + // User-initiated: uses the already-connected Sony headset, else the macOS Bluetooth picker. func connect() { - connecting = true + connectionState = .connecting errorMessage = nil - // Defer so SwiftUI can render the "Connecting…" state before the modal picker blocks the main thread. + // Defer so the menu can show "Connecting…" before a modal picker blocks the main thread. DispatchQueue.main.async { self.bridge.scanAndConnect { ok, error in - self.connecting = false - if ok { - self.syncFromBridge() - self.startWatchingConnection() - self.refreshStatus() - self.startDynamicPolling() - } else if let error = error { - self.errorMessage = error - } + self.handleConnectResult(ok: ok, error: error, userInitiated: true) } } } - func refreshStatus() { - bridge.refreshStatus { - self.batteryLevel = self.bridge.batteryLevel - self.batteryCharging = self.bridge.batteryCharging - self.hasDualBattery = self.bridge.hasDualBattery - self.batteryLeft = self.bridge.batteryLeft - self.batteryRight = self.bridge.batteryRight - self.batteryCase = self.bridge.batteryCase - self.eqPreset = self.bridge.eqPreset - self.clearBass = self.bridge.clearBass - self.dsee = self.bridge.dsee - self.eqBands = (0..<5).map { self.bridge.equalizerBand(at: $0) } - self.hasAutoPowerOff = self.bridge.hasAutoPowerOff - self.autoPowerOff = self.bridge.autoPowerOff - self.firmware = self.bridge.firmware ?? "" - self.codec = self.bridge.codec ?? "" - self.hasSpeakToChat = self.bridge.hasSpeakToChat - self.speakToChat = self.bridge.speakToChat - self.hasAdaptiveVolume = self.bridge.hasAdaptiveVolume - self.adaptiveVolume = self.bridge.adaptiveVolume + func disconnect() { + stopTimers() + bridge.disconnect() + connectionState = .disconnected + } + + func handleConnectResult(ok: Bool, error: String?, userInitiated: Bool) { + guard ok else { + connectionState = .disconnected + if userInitiated, let error = error { errorMessage = error } + return } + connectionState = .connected + syncFromBridge() + bridge.refreshStatus { [weak self] in self?.syncFromBridge() } // called after reads, then after probes + startTimers() + } + + // The control link dropped on its own (idle power-save). Task 7 adds the automatic reconnection here. + func linkLost() { + stopTimers() + connectionState = .disconnected + } + + // MARK: - Actions + + func setMode(_ newMode: SHCAmbientMode) { + mode = newMode + pollGuard.userChanged(.ambient) + pushAmbient() + } + + func setLevel(_ level: Int, final: Bool) { + ambientLevel = level + pollGuard.userChanged(.ambient) + if mode == .ambientSound && levelThrottle.shouldSend(final: final) { pushAmbient() } + } + + func setFocusOnVoice(_ on: Bool) { + focusOnVoice = on + pollGuard.userChanged(.ambient) + pushAmbient() + } + + func setEqualizerPreset(_ preset: Int) { + eqPreset = preset + bridge.setEqualizerPreset(preset) { [weak self] ok, error in self?.finish(ok, error) } + } + + func setEqualizerBand(_ index: Int, value: Int, final: Bool) { + guard eqBands.indices.contains(index) else { return } + eqBands[index] = value + eqPreset = 0xA0 + if eqThrottle.shouldSend(final: final) { pushCustomEqualizer() } + } + + func setClearBass(_ value: Int, final: Bool) { + clearBass = value + eqPreset = 0xA0 + if eqThrottle.shouldSend(final: final) { pushCustomEqualizer() } + } + + func resetEqualizer() { + eqBands = Array(repeating: 0, count: eqBands.count) + clearBass = 0 + eqPreset = 0xA0 + pushCustomEqualizer() + } + + func setDsee(_ on: Bool) { + dsee = on + bridge.setDsee(on) { [weak self] ok, error in self?.finish(ok, error) } } func setAutoPowerOff(_ index: Int) { autoPowerOff = index - errorMessage = nil - bridge.setAutoPowerOff(index) { ok, error in if !ok, let e = error { self.errorMessage = e } } + bridge.setAutoPowerOff(index) { [weak self] ok, error in self?.finish(ok, error) } } func setSpeakToChat(_ on: Bool) { speakToChat = on - errorMessage = nil - bridge.setSpeakToChat(on) { ok, error in if !ok, let e = error { self.errorMessage = e } } + bridge.setSpeakToChat(on) { [weak self] ok, error in self?.finish(ok, error) } } func setAdaptiveVolume(_ on: Bool) { adaptiveVolume = on - errorMessage = nil - bridge.setAdaptiveVolume(on) { ok, error in if !ok, let e = error { self.errorMessage = e } } - } - - // Poll the button-changeable state so the app stays in sync when you use the headphone's own controls. - private func startDynamicPolling() { - stopDynamicPolling() - dynamicTimer = Timer.scheduledTimer(withTimeInterval: 2.0, repeats: true) { [weak self] _ in - guard let self = self, self.connected else { return } - self.bridge.refreshDynamic { - self.mode = self.bridge.mode - let level = self.bridge.ambientLevel - if level > 0 { self.ambientLevel = level } - self.eqPreset = self.bridge.eqPreset - self.clearBass = self.bridge.clearBass - self.dsee = self.bridge.dsee - self.eqBands = (0..<5).map { self.bridge.equalizerBand(at: $0) } - } - } + bridge.setAdaptiveVolume(on) { [weak self] ok, error in self?.finish(ok, error) } } - private func stopDynamicPolling() { - dynamicTimer?.invalidate() - dynamicTimer = nil + func showError(_ message: String) { + errorMessage = message } - func setEqualizer(_ preset: Int) { - eqPreset = preset - errorMessage = nil - bridge.setEqualizerPreset(preset) { ok, error in - if !ok, let error = error { self.errorMessage = error } + private func pushAmbient() { + bridge.applyMode(mode, level: ambientLevel, focusVoice: focusOnVoice) { [weak self] ok, error in + self?.finish(ok, error) } } - // Manual EQ (preset byte 0xA0 = 160). Called as the user drags a band or clear-bass slider. - func applyCustomEq() { - eqPreset = 0xA0 - errorMessage = nil - bridge.setCustomEqualizerBass(clearBass, bands: eqBands.map { NSNumber(value: $0) }) { ok, error in - if !ok, let error = error { self.errorMessage = error } + private func pushCustomEqualizer() { + bridge.setCustomEqualizerBass(clearBass, bands: eqBands.map { NSNumber(value: $0) }) { [weak self] ok, error in + self?.finish(ok, error) } } - func setDsee(_ on: Bool) { - dsee = on - errorMessage = nil - bridge.setDsee(on) { ok, error in - if !ok, let error = error { self.errorMessage = error } - } + private func finish(_ ok: Bool, _ error: String?) { + errorMessage = ok ? nil : error } - func disconnect() { - stopWatchingConnection() - stopDynamicPolling() - bridge.disconnect() - connected = false - deviceName = "" - } - - // The headset can drop the RFCOMM link on its own (idle power-save). Poll so the UI reflects reality - // instead of showing a stale "Connected" state. - private func startWatchingConnection() { - stopWatchingConnection() - pollTimer = Timer.scheduledTimer(withTimeInterval: 1.5, repeats: true) { [weak self] _ in - guard let self = self else { return } - if self.connected && !self.bridge.connected { - self.connected = false - self.deviceName = "" - self.errorMessage = NSLocalizedString("Headphones disconnected.", comment: "") - self.stopWatchingConnection() - self.stopDynamicPolling() - } - } - } + // MARK: - Polling - private func stopWatchingConnection() { - pollTimer?.invalidate() - pollTimer = nil + private func startTimers() { + stopTimers() + timers = [ + repeating(every: 1.5) { [weak self] in self?.checkLink() }, + repeating(every: 2) { [weak self] in self?.pollAmbient() }, + repeating(every: 60) { [weak self] in self?.pollBattery() }, + ] } - func setMode(_ newMode: SHCAmbientMode) { - mode = newMode - pushState() + private func stopTimers() { + timers.forEach { $0.invalidate() } + timers = [] } - func setLevel(_ level: Int) { - ambientLevel = level - if mode == .ambientSound { pushState() } + // Added in .common mode so they keep firing while the menu is open (menus run the event-tracking mode). + private func repeating(every interval: TimeInterval, _ block: @escaping () -> Void) -> Timer { + let timer = Timer(timeInterval: interval, repeats: true) { _ in block() } + RunLoop.main.add(timer, forMode: .common) + return timer } - func setFocusOnVoice(_ on: Bool) { - focusOnVoice = on - pushState() + private func checkLink() { + if connected && !bridge.connected { linkLost() } } - private func pushState() { - errorMessage = nil - bridge.applyMode(mode, level: ambientLevel, focusVoice: focusOnVoice) { ok, error in - if ok { - self.syncFromBridge() - } else if let error = error { - self.errorMessage = error - } + // Follows the headset's own NC button, unless the user just changed the mode from the menu. + private func pollAmbient() { + guard connected, pollGuard.shouldAcceptPoll(for: .ambient) else { return } + bridge.refreshDynamic { [weak self] in + guard let self = self, self.pollGuard.shouldAcceptPoll(for: .ambient) else { return } + self.readAmbientFromBridge() } } + private func pollBattery() { + guard connected else { return } + bridge.refreshBattery { [weak self] in self?.readBatteryFromBridge() } + } + + // MARK: - Reading the bridge + private func syncFromBridge() { - connected = bridge.connected - deviceName = bridge.deviceName ?? "" - deviceMac = bridge.deviceMac ?? "" + deviceName = bridge.deviceName ?? deviceName + deviceMac = bridge.deviceMac ?? deviceMac protocolVersion = bridge.protocolVersionString ?? "" - supportsVpt = bridge.supportsVpt - supportsEqualizer = bridge.supportsEqualizer maxAmbientLevel = bridge.maxAmbientLevel + readAmbientFromBridge() + readBatteryFromBridge() + supportsEqualizer = bridge.supportsEqualizer + equalizerWritable = bridge.equalizerWritable + eqPreset = bridge.eqPreset + eqHasClearBass = bridge.equalizerHasClearBass + clearBass = bridge.clearBass + eqBands = (0.. 0 { ambientLevel = level } focusOnVoice = bridge.focusOnVoice - focusOnVoiceAvailable = bridge.focusOnVoiceAvailable + } + + private func readBatteryFromBridge() { + batteryLevel = bridge.batteryLevel + batteryCharging = bridge.batteryCharging + hasDualBattery = bridge.hasDualBattery + batteryLeft = bridge.batteryLeft + batteryRight = bridge.batteryRight + batteryCase = bridge.batteryCase } } diff --git a/Client/macos/StatusItemController.swift b/Client/macos/StatusItemController.swift index e35e28c9..8f3dde2b 100644 --- a/Client/macos/StatusItemController.swift +++ b/Client/macos/StatusItemController.swift @@ -13,9 +13,9 @@ final class StatusItemController { let image = NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") image?.isTemplate = true statusItem.button?.image = image - model.$connected + model.$connectionState .receive(on: DispatchQueue.main) - .sink { [weak self] connected in self?.statusItem.button?.appearsDisabled = !connected } + .sink { [weak self] state in self?.statusItem.button?.appearsDisabled = state != .connected } .store(in: &cancellables) } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 2edc3350..c9f02f89 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -12,7 +12,6 @@ "%ld%%" = "%ld %%"; /* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ -"Headphones disconnected." = "Casque déconnecté."; "No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; "Connection timed out." = "Délai de connexion dépassé."; "Not connected." = "Non connecté."; From f19743c0d83eefbf063987c55cb8a2840329b88e Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 16:56:37 +0200 Subject: [PATCH 10/50] fix(bt): wait for the real ACK, ACK MDR_NO2 frames, keep 1-bit sequence numbers --- Client/BluetoothWrapper.cpp | 30 +++- Client/tests/BluetoothWrapperTests.cpp | 234 +++++++++++++++++++++++++ scripts/test.sh | 7 + 3 files changed, 264 insertions(+), 7 deletions(-) create mode 100644 Client/tests/BluetoothWrapperTests.cpp diff --git a/Client/BluetoothWrapper.cpp b/Client/BluetoothWrapper.cpp index cd3cb744..f5d5435e 100644 --- a/Client/BluetoothWrapper.cpp +++ b/Client/BluetoothWrapper.cpp @@ -27,7 +27,9 @@ BluetoothWrapper& BluetoothWrapper::operator=(BluetoothWrapper&& other) noexcept int BluetoothWrapper::sendCommand(const std::vector& bytes) { std::lock_guard guard(this->_connectorMtx); - auto data = CommandSerializer::packageDataForBt(bytes, DATA_TYPE::DATA_MDR, this->_seqNumber++); + // Use the current seq, don't advance it here: the next seq comes from the device's ACK + // (_waitForAck), so if this frame goes unanswered its seq is simply reused on the next call. + auto data = CommandSerializer::packageDataForBt(bytes, DATA_TYPE::DATA_MDR, this->_seqNumber); auto bytesSent = this->_connector->send(data.data(), data.size()); this->_waitForAck(); @@ -68,7 +70,9 @@ SonyProtocolVersion BluetoothWrapper::getProtocolVersion() noexcept Buffer BluetoothWrapper::sendCommandAndReadResponse(const std::vector& bytes, unsigned char retCommandId, int retSubType) { std::lock_guard guard(this->_connectorMtx); - auto data = CommandSerializer::packageDataForBt(bytes, DATA_TYPE::DATA_MDR, this->_seqNumber++); + // Use the current seq, don't advance it here: the next seq comes from the device's ACK + // (handled below), so if this frame goes unanswered its seq is simply reused on the next call. + auto data = CommandSerializer::packageDataForBt(bytes, DATA_TYPE::DATA_MDR, this->_seqNumber); this->_connector->send(data.data(), data.size()); // The device replies with an ACK and then the RET frame; unrelated notifications may interleave. @@ -92,8 +96,19 @@ Buffer BluetoothWrapper::sendCommandAndReadResponse(const std::vector& byt void BluetoothWrapper::_waitForAck() { - auto msg = this->_readMessage(); - this->_seqNumber = msg.seqNumber; + // The device may send its own DATA_MDR notifications (already ACKed inside _readMessage) before + // the ACK for our frame arrives; skip those and keep reading until we see the actual ACK, so + // _seqNumber never gets set from an unrelated message's seq. + for (int i = 0; i < 16; i++) + { + auto msg = this->_readMessage(); + if (msg.dataType == DATA_TYPE::ACK) + { + this->_seqNumber = msg.seqNumber; + return; + } + } + throw RecoverableException("No ACK received from device", true); } CommandSerializer::Message BluetoothWrapper::_readMessage() @@ -150,9 +165,10 @@ CommandSerializer::Message BluetoothWrapper::_readMessage() auto msg = CommandSerializer::unpackBtMessage(msgBytes); - // The device retransmits any DATA_MDR frame it sends until the host ACKs it. The ack carries the - // toggled 1-bit sequence number (1 - deviceSeq), matching the device's own ack-to-us behaviour. - if (msg.dataType == DATA_TYPE::DATA_MDR) + // The device retransmits any DATA_MDR or DATA_MDR_NO2 frame it sends until the host ACKs it (e.g. + // slider drags are echoed as DATA_MDR_NO2). The ack carries the toggled 1-bit sequence number + // (1 - deviceSeq), matching the device's own ack-to-us behaviour. + if (msg.dataType == DATA_TYPE::DATA_MDR || msg.dataType == DATA_TYPE::DATA_MDR_NO2) { auto ack = CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, (unsigned char)(1 - msg.seqNumber)); this->_connector->send(ack.data(), ack.size()); diff --git a/Client/tests/BluetoothWrapperTests.cpp b/Client/tests/BluetoothWrapperTests.cpp new file mode 100644 index 00000000..21475789 --- /dev/null +++ b/Client/tests/BluetoothWrapperTests.cpp @@ -0,0 +1,234 @@ +#include "BluetoothWrapper.h" +#include "CommandSerializer.h" +#include "IBluetoothConnector.h" +#include "Exceptions.h" +#include +#include +#include +#include +#include + +// Minimal test runner (no framework). Exit code 1 on any failure. +static int failures = 0; +#define CHECK(cond) do { if (!(cond)) { failures++; std::printf("FAIL %s:%d: %s\n", __FILE__, __LINE__, #cond); } } while (0) + +static Buffer bytes(std::initializer_list values) +{ + Buffer b; + for (int v : values) b.push_back((char)v); + return b; +} + +// Records every frame handed to send() and hands back scripted incoming frames one whole frame per +// recv() call. When the script is exhausted, recv() throws like the real macOS connector does after +// its 2.5s timeout. +class FakeBluetoothConnector : public IBluetoothConnector +{ +public: + std::vector sentFrames; + std::deque incomingFrames; + + int send(char* buf, size_t length) noexcept(false) override + { + this->sentFrames.emplace_back(buf, buf + length); + return static_cast(length); + } + + int recv(char* buf, size_t length) noexcept(false) override + { + if (this->incomingFrames.empty()) + { + throw RecoverableException("recv timed out", false); + } + auto frame = this->incomingFrames.front(); + this->incomingFrames.pop_front(); + if (frame.size() > length) + { + throw std::runtime_error("scripted frame too large for buffer"); + } + std::copy(frame.begin(), frame.end(), buf); + return static_cast(frame.size()); + } + + void connect(const std::string&) noexcept(false) override {} + void disconnect() noexcept override {} + bool isConnected() noexcept override { return true; } + std::vector getConnectedDevices() override { return {}; } + SonyProtocolVersion getProtocolVersion() noexcept override { return SonyProtocolVersion::V1; } +}; + +// Decodes a frame previously recorded by FakeBluetoothConnector::send (includes START_MARKER/END_MARKER). +static CommandSerializer::Message unpackSentFrame(const Buffer& frame) +{ + return CommandSerializer::unpackBtMessage(Buffer(frame.begin() + 1, frame.end() - 1)); +} + +static void testNotificationBeforeAck() +{ + auto fakeOwned = std::make_unique(); + FakeBluetoothConnector* fake = fakeOwned.get(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + + // Device sends its own DATA_MDR notification (seq 0) before ACKing (seq 1) the host's frame. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt( + bytes({ 0x69, 0x19, 0x01, 0x01, 0x01, 0x00, 0x0a, 0x00, 0x00 }), DATA_TYPE::DATA_MDR, 0)); + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 1)); + + wrapper.sendCommand(bytes({ 0x68, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0a })); + + // First sent frame is the command itself (seq 0); the second must be the host's ACK for the + // notification (ACK type, seq = 1 - notification's seq = 1). + CHECK(fake->sentFrames.size() >= 2); + auto firstMsg = unpackSentFrame(fake->sentFrames[0]); + CHECK(firstMsg.dataType == DATA_TYPE::DATA_MDR && firstMsg.seqNumber == 0); + auto ackMsg = unpackSentFrame(fake->sentFrames[1]); + CHECK(ackMsg.dataType == DATA_TYPE::ACK && ackMsg.seqNumber == 1); + + // Next sendCommand must use seq 1 (from the ACK), not repeat/skip because of the notification. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 0)); + wrapper.sendCommand(bytes({ 0x68, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0b })); + + CHECK(fake->sentFrames.size() >= 3); + auto secondMsg = unpackSentFrame(fake->sentFrames.back()); + CHECK(secondMsg.dataType == DATA_TYPE::DATA_MDR && secondMsg.seqNumber == 1); +} + +static void testPlainAcksToggleSeq() +{ + auto fakeOwned = std::make_unique(); + FakeBluetoothConnector* fake = fakeOwned.get(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + + // Three round trips: seq goes 0 -> 1 -> 0, each answered by an ACK carrying 1 - sent seq. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 1)); + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + CHECK(unpackSentFrame(fake->sentFrames[0]).seqNumber == 0); + + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 0)); + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + CHECK(unpackSentFrame(fake->sentFrames[1]).seqNumber == 1); + + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 1)); + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + CHECK(unpackSentFrame(fake->sentFrames[2]).seqNumber == 0); +} + +static void testNoAckThrows() +{ + auto fakeOwned = std::make_unique(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + + // No scripted incoming frames at all: recv() throws immediately, sendCommand must not hang. + bool threw = false; + try + { + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + } + catch (const std::exception&) + { + threw = true; + } + CHECK(threw); +} + +static void testDataMdrNo2IsAcked() +{ + auto fakeOwned = std::make_unique(); + FakeBluetoothConnector* fake = fakeOwned.get(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + + // Device sends a DATA_MDR_NO2 frame (seq 0, e.g. a slider echo) before ACKing (seq 1) the host's frame. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt( + bytes({ 0x25, 0x02, 0x01 }), DATA_TYPE::DATA_MDR_NO2, 0)); + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 1)); + + wrapper.sendCommand(bytes({ 0x68, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0a })); + + // First sent frame is the command itself (seq 0); the second must be the host's ACK for the + // DATA_MDR_NO2 frame (ACK type, seq = 1 - frame's seq = 1). + CHECK(fake->sentFrames.size() >= 2); + auto firstMsg = unpackSentFrame(fake->sentFrames[0]); + CHECK(firstMsg.dataType == DATA_TYPE::DATA_MDR && firstMsg.seqNumber == 0); + if (fake->sentFrames.size() >= 2) + { + auto ackMsg = unpackSentFrame(fake->sentFrames[1]); + CHECK(ackMsg.dataType == DATA_TYPE::ACK && ackMsg.seqNumber == 1); + } + + // Next sendCommand must use seq 1 (from the device's real ACK), not skip because of the NO2 frame. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 0)); + wrapper.sendCommand(bytes({ 0x68, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0b })); + + CHECK(fake->sentFrames.size() >= 3); + auto secondMsg = unpackSentFrame(fake->sentFrames.back()); + CHECK(secondMsg.dataType == DATA_TYPE::DATA_MDR && secondMsg.seqNumber == 1); +} + +static void testSeqStays1BitAfterTimeout() +{ + auto fakeOwned = std::make_unique(); + FakeBluetoothConnector* fake = fakeOwned.get(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + + // Command #1: seq 0, ACKed with seq 1. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 1)); + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + CHECK(unpackSentFrame(fake->sentFrames[0]).seqNumber == 0); + + // Command #2: seq 1, no ACK arrives (recv throws) -> sendCommand must throw. + bool threw = false; + try + { + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + } + catch (const std::exception&) + { + threw = true; + } + CHECK(threw); + CHECK(unpackSentFrame(fake->sentFrames[1]).seqNumber == 1); + + // Command #3 must reuse seq 1 (the unanswered frame's seq), never advance to 2. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 0)); + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + CHECK(unpackSentFrame(fake->sentFrames[2]).seqNumber == 1); +} + +static void testSendCommandAndReadResponseSeqStays1Bit() +{ + auto fakeOwned = std::make_unique(); + FakeBluetoothConnector* fake = fakeOwned.get(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + + // No scripted incoming frames: the response never arrives, sendCommandAndReadResponse throws. + bool threw = false; + try + { + wrapper.sendCommandAndReadResponse(bytes({ 0x67, 0x17 }), 0x69); + } + catch (const std::exception&) + { + threw = true; + } + CHECK(threw); + CHECK(unpackSentFrame(fake->sentFrames[0]).seqNumber == 0); + + // Next command must reuse seq 0 (the unanswered frame's seq), not advance to 1. + fake->incomingFrames.push_back(CommandSerializer::packageDataForBt({}, DATA_TYPE::ACK, 1)); + wrapper.sendCommand(bytes({ 0x67, 0x17 })); + CHECK(unpackSentFrame(fake->sentFrames[1]).seqNumber == 0); +} + +int main() +{ + testNotificationBeforeAck(); + testPlainAcksToggleSeq(); + testNoAckThrows(); + testDataMdrNo2IsAcked(); + testSeqStays1BitAfterTimeout(); + testSendCommandAndReadResponseSeqStays1Bit(); + + if (failures) { std::printf("BluetoothWrapperTests: %d failure(s)\n", failures); return 1; } + std::printf("BluetoothWrapperTests: all passed\n"); + return 0; +} diff --git a/scripts/test.sh b/scripts/test.sh index dee43690..980624d3 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -23,5 +23,12 @@ clang++ -target "$TARGET" -isysroot "$SDK" -std=c++17 -I "$ROOT/Client" \ -o "$OUT/ProtocolParsersTests" "$OUT/ProtocolParsersTests" +echo "== BluetoothWrapperTests" +clang++ -target "$TARGET" -isysroot "$SDK" -std=c++17 -I "$ROOT/Client" \ + "$ROOT/Client/tests/BluetoothWrapperTests.cpp" "$ROOT/Client/BluetoothWrapper.cpp" \ + "$ROOT/Client/CommandSerializer.cpp" "$ROOT/Client/ByteMagic.cpp" \ + -o "$OUT/BluetoothWrapperTests" +"$OUT/BluetoothWrapperTests" + echo "== Localization" python3 "$ROOT/scripts/check_localization.py" From 06e6325bc042708a4604145a623847c3c81598ee Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 16:56:41 +0200 Subject: [PATCH 11/50] feat(macos): SwiftUI menu rows (header, level slider, switches, equalizer) --- Client/macos/HeadphonesMenu.swift | 16 ++--- Client/macos/MenuRows/AmbientLevelRow.swift | 29 ++++++++ Client/macos/MenuRows/EqualizerRow.swift | 80 +++++++++++++++++++++ Client/macos/MenuRows/HeaderRow.swift | 65 +++++++++++++++++ Client/macos/MenuRows/ToggleRow.swift | 26 +++++++ Client/macos/MenuSupport.swift | 18 +++++ Client/macos/fr.lproj/Localizable.strings | 6 ++ 7 files changed, 232 insertions(+), 8 deletions(-) create mode 100644 Client/macos/MenuRows/AmbientLevelRow.swift create mode 100644 Client/macos/MenuRows/EqualizerRow.swift create mode 100644 Client/macos/MenuRows/HeaderRow.swift create mode 100644 Client/macos/MenuRows/ToggleRow.swift diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 7fb185b7..db836eea 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -6,7 +6,6 @@ final class HeadphonesMenu { let menu = NSMenu() private let model: HeadphonesModel private var cancellables = Set() - private let headerItem = NSMenuItem() private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] private var connectItem: ActionMenuItem! @@ -14,8 +13,7 @@ final class HeadphonesMenu { self.model = model menu.autoenablesItems = false - headerItem.isEnabled = false - menu.addItem(headerItem) + menu.addItem(hostingMenuItem { HeaderRow(model: model) }) menu.addItem(.separator()) menu.addItem(sectionHeader(tr("Ambient Sound Control"))) @@ -26,6 +24,13 @@ final class HeadphonesMenu { let item = ActionMenuItem(title) { [weak model] in model?.setMode(mode) } modeItems.append((mode, item)) menu.addItem(item) + if mode == .ambientSound { + menu.addItem(hostingMenuItem { AmbientLevelRow(model: model) }) + menu.addItem(hostingMenuItem { + ToggleRow(model: model, title: tr("Focus on Voice"), indent: MenuMetrics.indent, + isOn: { $0.focusOnVoice }, set: { $0.setFocusOnVoice($1) }) + }) + } } menu.addItem(.separator()) @@ -44,11 +49,6 @@ final class HeadphonesMenu { private func update() { let connected = model.connected - var header = model.deviceName.isEmpty ? "SonyBridge" : model.deviceName - if connected && model.batteryLevel >= 0 { - header += " — " + String(format: tr("%ld%%"), model.batteryLevel) - } - headerItem.title = header for (mode, item) in modeItems { item.state = connected && model.mode == mode ? .on : .off item.isEnabled = connected diff --git a/Client/macos/MenuRows/AmbientLevelRow.swift b/Client/macos/MenuRows/AmbientLevelRow.swift new file mode 100644 index 00000000..9f33137e --- /dev/null +++ b/Client/macos/MenuRows/AmbientLevelRow.swift @@ -0,0 +1,29 @@ +import SwiftUI + +// Ambient Sound level slider (1…max), shown under "Son ambiant". +struct AmbientLevelRow: View { + @ObservedObject var model: HeadphonesModel + + var body: some View { + HStack(spacing: 8) { + Slider( + value: Binding(get: { Double(model.ambientLevel) }, + set: { model.setLevel(Int($0.rounded()), final: false) }), + in: 1...Double(max(model.maxAmbientLevel, 2)), + step: 1, + onEditingChanged: { editing in + if !editing { model.setLevel(model.ambientLevel, final: true) } + } + ) + .controlSize(.small) + Text(verbatim: "\(model.ambientLevel)") + .font(.system(size: 11, weight: .medium).monospacedDigit()) + .foregroundColor(.secondary) + .frame(width: 20, alignment: .trailing) + } + .padding(.leading, MenuMetrics.indent) + .padding(.trailing, MenuMetrics.leading) + .padding(.vertical, 2) + .disabled(!model.connected) + } +} diff --git a/Client/macos/MenuRows/EqualizerRow.swift b/Client/macos/MenuRows/EqualizerRow.swift new file mode 100644 index 00000000..e08ddd7c --- /dev/null +++ b/Client/macos/MenuRows/EqualizerRow.swift @@ -0,0 +1,80 @@ +import AppKit +import SwiftUI + +// Manual equalizer: 10 vertical sliders (WH-1000XM6) or Clear Bass + 5 (older models). Active only on "Manual" +// and when the device's write format is verified (model.equalizerWritable). +struct EqualizerRow: View { + @ObservedObject var model: HeadphonesModel + + private static let labels5 = ["400", "1k", "2.5k", "6.3k", "16k"] + private static let labels10 = ["31", "63", "125", "250", "500", "1k", "2k", "4k", "8k", "16k"] + + private var editable: Bool { model.connected && model.equalizerWritable && model.eqPreset == 0xA0 } + private var labels: [String] { model.eqBands.count == 10 ? Self.labels10 : Self.labels5 } + + var body: some View { + HStack(alignment: .top, spacing: 0) { + if model.eqHasClearBass { + band(tr("Clear Bass"), value: model.clearBass) { model.setClearBass($0, final: $1) } + } + ForEach(Array(model.eqBands.enumerated()), id: \.offset) { index, value in + band(index < labels.count ? labels[index] : "", value: value) { + model.setEqualizerBand(index, value: $0, final: $1) + } + } + } + .padding(.horizontal, MenuMetrics.leading) + .padding(.vertical, 6) + } + + private func band(_ label: String, value: Int, onChange: @escaping (Int, Bool) -> Void) -> some View { + VStack(spacing: 3) { + VerticalBandSlider(value: value, enabled: editable, onChange: onChange) + .frame(width: 20, height: 72) + Text(verbatim: label) + .font(.system(size: 9)) + .foregroundColor(.secondary) + .lineLimit(1) + } + .frame(maxWidth: .infinity) + } +} + +// A native vertical NSSlider in -10…10. onChange(value, final): final is true on mouse-up. +struct VerticalBandSlider: NSViewRepresentable { + let value: Int + let enabled: Bool + let onChange: (Int, Bool) -> Void + + func makeCoordinator() -> Coordinator { + Coordinator(onChange: onChange) + } + + func makeNSView(context: Context) -> NSSlider { + let slider = NSSlider(value: Double(value), minValue: -10, maxValue: 10, + target: context.coordinator, action: #selector(Coordinator.changed(_:))) + slider.isVertical = true + slider.isContinuous = true + slider.controlSize = .small + return slider + } + + func updateNSView(_ slider: NSSlider, context: Context) { + context.coordinator.onChange = onChange + if Int(slider.doubleValue.rounded()) != value { slider.doubleValue = Double(value) } + slider.isEnabled = enabled + } + + final class Coordinator: NSObject { + var onChange: (Int, Bool) -> Void + + init(onChange: @escaping (Int, Bool) -> Void) { + self.onChange = onChange + } + + @objc func changed(_ sender: NSSlider) { + let final = NSApp.currentEvent?.type == .leftMouseUp + onChange(Int(sender.doubleValue.rounded()), final) + } + } +} diff --git a/Client/macos/MenuRows/HeaderRow.swift b/Client/macos/MenuRows/HeaderRow.swift new file mode 100644 index 00000000..17199f5c --- /dev/null +++ b/Client/macos/MenuRows/HeaderRow.swift @@ -0,0 +1,65 @@ +import SwiftUI + +// Menu header: headset name, connection state + codec, battery. +struct HeaderRow: View { + @ObservedObject var model: HeadphonesModel + + var body: some View { + HStack(alignment: .center, spacing: 8) { + VStack(alignment: .leading, spacing: 1) { + Text(model.deviceName.isEmpty ? "SonyBridge" : model.deviceName) + .font(.system(size: 13, weight: .semibold)) + Text(statusLine) + .font(.system(size: 11)) + .foregroundColor(.secondary) + } + Spacer(minLength: 8) + if model.connected { battery } + } + .padding(.horizontal, MenuMetrics.leading) + .padding(.vertical, 4) + } + + private var statusLine: String { + switch model.connectionState { + case .connecting: return tr("Connecting…") + case .disconnected: return tr("Not connected") + case .connected: return model.codec.isEmpty ? tr("Connected") : "\(tr("Connected")) · \(model.codec)" + } + } + + @ViewBuilder private var battery: some View { + if model.hasDualBattery { + Text(dualBatteryText) + .font(.system(size: 12)) + .foregroundColor(.secondary) + } else if model.batteryLevel >= 0 { + HStack(spacing: 4) { + Text(String(format: tr("%ld%%"), model.batteryLevel)) + .font(.system(size: 12)) + .foregroundColor(.secondary) + Image(systemName: batterySymbol) + .foregroundColor(model.batteryLevel <= 20 && !model.batteryCharging ? .red : .secondary) + } + } + } + + private var dualBatteryText: String { + var text = String(format: tr("L %ld%% R %ld%%"), model.batteryLeft, model.batteryRight) + if model.batteryCase >= 0 { + text += " " + String(format: tr("Case %ld%%"), model.batteryCase) + } + return text + } + + private var batterySymbol: String { + if model.batteryCharging { return "battery.100.bolt" } + switch model.batteryLevel { + case ..<13: return "battery.0" + case ..<38: return "battery.25" + case ..<63: return "battery.50" + case ..<88: return "battery.75" + default: return "battery.100" + } + } +} diff --git a/Client/macos/MenuRows/ToggleRow.swift b/Client/macos/MenuRows/ToggleRow.swift new file mode 100644 index 00000000..f44513c9 --- /dev/null +++ b/Client/macos/MenuRows/ToggleRow.swift @@ -0,0 +1,26 @@ +import SwiftUI + +// A title with a switch on the right (Focus on Voice, DSEE, Speak-to-Chat, Adaptive Volume). +struct ToggleRow: View { + @ObservedObject var model: HeadphonesModel + let title: String + var indent: CGFloat = MenuMetrics.leading + let isOn: (HeadphonesModel) -> Bool + let set: (HeadphonesModel, Bool) -> Void + + var body: some View { + HStack { + Text(title).font(.system(size: 13)) + Spacer(minLength: 8) + Toggle("", isOn: Binding(get: { isOn(model) }, set: { set(model, $0) })) + .labelsHidden() + .toggleStyle(.switch) + .controlSize(.mini) + } + .padding(.leading, indent) + .padding(.trailing, MenuMetrics.leading) + .padding(.vertical, 2) + .disabled(!model.connected) + .opacity(model.connected ? 1 : 0.5) + } +} diff --git a/Client/macos/MenuSupport.swift b/Client/macos/MenuSupport.swift index f70dbfe2..b09e8534 100644 --- a/Client/macos/MenuSupport.swift +++ b/Client/macos/MenuSupport.swift @@ -1,4 +1,5 @@ import AppKit +import SwiftUI // A menu item that runs a closure (NSMenuItem only supports target/selector natively). final class ActionMenuItem: NSMenuItem { @@ -29,3 +30,20 @@ func sectionHeader(_ title: String) -> NSMenuItem { item.isEnabled = false return item } + +enum MenuMetrics { + static let width: CGFloat = 280 // main menu rows + static let equalizerWidth: CGFloat = 300 // equalizer submenu + static let leading: CGFloat = 14 // lines up with native item titles + static let indent: CGFloat = 36 // rows nested under "Son ambiant" +} + +// Wraps a SwiftUI view in a menu item, for rows a plain NSMenuItem can't express (sliders, switches, header). +// Rows keep a fixed height: optional lines (the error line, notes) are separate plain items instead. +func hostingMenuItem(width: CGFloat = MenuMetrics.width, @ViewBuilder _ content: () -> Content) -> NSMenuItem { + let host = NSHostingView(rootView: content().frame(width: width, alignment: .leading)) + host.frame = NSRect(origin: .zero, size: host.fittingSize) + let item = NSMenuItem() + item.view = host + return item +} diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index c9f02f89..de9c1a68 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -10,6 +10,12 @@ "Disconnect" = "Déconnecter"; "Quit SonyBridge" = "Quitter SonyBridge"; "%ld%%" = "%ld %%"; +"Not connected" = "Non connecté"; +"Connected" = "Connecté"; +"L %ld%% R %ld%%" = "G %ld %% D %ld %%"; +"Case %ld%%" = "Boîtier %ld %%"; +"Clear Bass" = "Clear Bass"; +"Focus on Voice" = "Focalisation sur la voix"; /* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ "No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; From e0beefbecfecbcfcbdfcb0111f97c3aa82587b4c Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 10 Sep 2026 17:10:18 +0200 Subject: [PATCH 12/50] feat(macos): full headphones menu with per-mode status icon --- Client/macos/HeadphonesMenu.swift | 180 ++++++++++++++++++++-- Client/macos/MenuSupport.swift | 14 ++ Client/macos/StatusIcon.swift | 20 +++ Client/macos/StatusItemController.swift | 13 +- Client/macos/fr.lproj/Localizable.strings | 27 ++++ 5 files changed, 232 insertions(+), 22 deletions(-) create mode 100644 Client/macos/StatusIcon.swift diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index db836eea..c4c717ea 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -1,62 +1,210 @@ import AppKit import Combine -// The status item's menu. Minimal for now: header, modes, connect/disconnect, quit. +// The status item's menu (spec §4). Built once; update() refreshes states, visibility and values in place, +// including while the menu is open. final class HeadphonesMenu { let menu = NSMenu() private let model: HeadphonesModel private var cancellables = Set() + + private let errorItem = NSMenuItem() private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] - private var connectItem: ActionMenuItem! + private var ambientRows: [NSMenuItem] = [] // level slider + focus on voice + private let equalizerItem = NSMenuItem() + private var presetItems: [(Int, NSMenuItem)] = [] + private let equalizerNoteItem = NSMenuItem() + private var equalizerResetItem = NSMenuItem() + private var dseeItem = NSMenuItem() + private var speakToChatItem = NSMenuItem() + private var adaptiveVolumeItem = NSMenuItem() + private let autoPowerOffItem = NSMenuItem() + private var autoPowerOffItems: [NSMenuItem] = [] + private let aboutItem = NSMenuItem() + private let aboutMenu = NSMenu() + private var aboutValues: [String] = [] // cache to avoid rebuilding About menu on every slider drag + private var connectItem = NSMenuItem() + + private static var presets: [(Int, String)] { + [(0x00, tr("Off")), (0x10, tr("Bright")), (0x11, tr("Excited")), (0x12, tr("Mellow")), + (0x13, tr("Relaxed")), (0x14, tr("Vocal")), (0x15, tr("Treble")), (0x16, tr("Bass")), + (0x17, tr("Speech")), (0xA0, tr("Manual"))] + } + + // Index = the bridge's auto power-off option (0=Off, 1=5 min, 2=30 min, 3=1 h, 4=3 h, 5=when taken off). + private static var autoPowerOffOptions: [String] { + [tr("Off"), tr("5 min"), tr("30 min"), tr("1 hour"), tr("3 hours"), tr("When taken off")] + } init(model: HeadphonesModel) { self.model = model menu.autoenablesItems = false menu.addItem(hostingMenuItem { HeaderRow(model: model) }) + errorItem.isEnabled = false + menu.addItem(errorItem) + menu.addItem(.separator()) + addAmbientSection() + menu.addItem(.separator()) + addSoundSection() menu.addItem(.separator()) + addAppSection() + + // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. + model.objectWillChange + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.update() } + .store(in: &cancellables) + update() + } + // MARK: - Building + + private func addAmbientSection() { menu.addItem(sectionHeader(tr("Ambient Sound Control"))) let modes: [(SHCAmbientMode, String)] = [ (.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off")), ] for (mode, title) in modes { let item = ActionMenuItem(title) { [weak model] in model?.setMode(mode) } + item.image = NSImage(systemSymbolName: StatusIcon.symbolName(for: mode), accessibilityDescription: nil) modeItems.append((mode, item)) menu.addItem(item) if mode == .ambientSound { - menu.addItem(hostingMenuItem { AmbientLevelRow(model: model) }) - menu.addItem(hostingMenuItem { - ToggleRow(model: model, title: tr("Focus on Voice"), indent: MenuMetrics.indent, - isOn: { $0.focusOnVoice }, set: { $0.setFocusOnVoice($1) }) - }) + ambientRows = [ + hostingMenuItem { AmbientLevelRow(model: model) }, + hostingMenuItem { + ToggleRow(model: model, title: tr("Focus on Voice"), indent: MenuMetrics.indent, + isOn: { $0.focusOnVoice }, set: { $0.setFocusOnVoice($1) }) + }, + ] + ambientRows.forEach { menu.addItem($0) } } } - menu.addItem(.separator()) + } + + private func addSoundSection() { + let equalizerMenu = NSMenu() + equalizerMenu.autoenablesItems = false + for (code, title) in Self.presets { + let item = ActionMenuItem(title) { [weak model] in model?.setEqualizerPreset(code) } + presetItems.append((code, item)) + equalizerMenu.addItem(item) + } + equalizerMenu.addItem(.separator()) + equalizerMenu.addItem(hostingMenuItem(width: MenuMetrics.equalizerWidth) { EqualizerRow(model: model) }) + equalizerNoteItem.title = tr("Manual equalizer coming soon for this model") + equalizerNoteItem.isEnabled = false + equalizerMenu.addItem(equalizerNoteItem) + equalizerResetItem = ActionMenuItem(tr("Reset")) { [weak model] in model?.resetEqualizer() } + equalizerMenu.addItem(equalizerResetItem) + equalizerItem.submenu = equalizerMenu + menu.addItem(equalizerItem) + + dseeItem = hostingMenuItem { + ToggleRow(model: model, title: tr("DSEE"), isOn: { $0.dsee }, set: { $0.setDsee($1) }) + } + speakToChatItem = hostingMenuItem { + ToggleRow(model: model, title: tr("Speak-to-Chat"), isOn: { $0.speakToChat }, set: { $0.setSpeakToChat($1) }) + } + adaptiveVolumeItem = hostingMenuItem { + ToggleRow(model: model, title: tr("Adaptive Volume"), isOn: { $0.adaptiveVolume }, set: { $0.setAdaptiveVolume($1) }) + } + for item in [dseeItem, speakToChatItem, adaptiveVolumeItem] { menu.addItem(item) } + + let autoPowerOffMenu = NSMenu() + autoPowerOffMenu.autoenablesItems = false + for (index, title) in Self.autoPowerOffOptions.enumerated() { + let item = ActionMenuItem(title) { [weak model] in model?.setAutoPowerOff(index) } + autoPowerOffItems.append(item) + autoPowerOffMenu.addItem(item) + } + autoPowerOffItem.submenu = autoPowerOffMenu + menu.addItem(autoPowerOffItem) + } + private func addAppSection() { + aboutItem.title = tr("About the Headphones") + aboutMenu.autoenablesItems = false + aboutItem.submenu = aboutMenu + menu.addItem(aboutItem) connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } menu.addItem(connectItem) menu.addItem(.separator()) menu.addItem(ActionMenuItem(tr("Quit SonyBridge"), key: "q") { NSApp.terminate(nil) }) - - // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. - model.objectWillChange - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.update() } - .store(in: &cancellables) - update() } + // MARK: - Updating + private func update() { let connected = model.connected + + errorItem.isHidden = model.errorMessage == nil + errorItem.title = "⚠︎ " + (model.errorMessage ?? "") + for (mode, item) in modeItems { item.state = connected && model.mode == mode ? .on : .off item.isEnabled = connected } - connectItem.title = connected ? tr("Disconnect") : (model.connectionState == .connecting ? tr("Connecting…") : tr("Connect…")) + ambientRows.forEach { $0.isHidden = model.mode != .ambientSound } + + equalizerItem.isHidden = !model.supportsEqualizer + equalizerItem.isEnabled = connected + equalizerItem.attributedTitle = titleWithValue(tr("Equalizer"), Self.presetName(model.eqPreset)) + for (code, item) in presetItems { + item.state = model.eqPreset == code ? .on : .off + item.isEnabled = connected && model.equalizerWritable + } + equalizerNoteItem.isHidden = model.equalizerWritable || model.eqBands.isEmpty + equalizerResetItem.isEnabled = connected && model.equalizerWritable && model.eqPreset == 0xA0 + + dseeItem.isHidden = !model.supportsEqualizer + speakToChatItem.isHidden = !model.hasSpeakToChat + adaptiveVolumeItem.isHidden = !model.hasAdaptiveVolume + + let options = Self.autoPowerOffOptions + autoPowerOffItem.isHidden = !model.hasAutoPowerOff + autoPowerOffItem.isEnabled = connected + autoPowerOffItem.attributedTitle = titleWithValue( + tr("Auto Power-Off"), options.indices.contains(model.autoPowerOff) ? options[model.autoPowerOff] : "") + for (index, item) in autoPowerOffItems.enumerated() { + item.state = index == model.autoPowerOff ? .on : .off + } + + updateAbout() + aboutItem.isEnabled = connected + + switch model.connectionState { + case .connected: connectItem.title = tr("Disconnect") + case .connecting: connectItem.title = tr("Connecting…") + case .disconnected: connectItem.title = tr("Connect…") + } connectItem.isEnabled = model.connectionState != .connecting } + private func updateAbout() { + // update() runs on every model change (slider drags included); rebuild only when a value changed. + let values = [model.firmware, model.codec, model.protocolVersion, model.deviceMac] + guard values != aboutValues else { return } + aboutValues = values + + aboutMenu.removeAllItems() + let rows: [(String, String)] = [ + (tr("Firmware"), model.firmware), (tr("Codec"), model.codec), + (tr("Protocol"), model.protocolVersion), (tr("Bluetooth"), model.deviceMac), + ] + for (title, value) in rows where !value.isEmpty { + let item = NSMenuItem() + item.attributedTitle = titleWithValue(title, value) + item.isEnabled = false + aboutMenu.addItem(item) + } + } + + private static func presetName(_ code: Int) -> String { + presets.first { $0.0 == code }?.1 ?? tr("Custom") + } + private func toggleConnection() { if model.connected { model.disconnect() diff --git a/Client/macos/MenuSupport.swift b/Client/macos/MenuSupport.swift index b09e8534..62c9f831 100644 --- a/Client/macos/MenuSupport.swift +++ b/Client/macos/MenuSupport.swift @@ -47,3 +47,17 @@ func hostingMenuItem(width: CGFloat = MenuMetrics.width, @ViewBui item.view = host return item } + +// "Title value": the value right-aligned in the secondary color, like "Égaliseur Graves ›". +func titleWithValue(_ title: String, _ value: String, width: CGFloat = MenuMetrics.width - 60) -> NSAttributedString { + let paragraph = NSMutableParagraphStyle() + paragraph.tabStops = [NSTextTab(textAlignment: .right, location: width)] + let font = NSFont.menuFont(ofSize: 0) + let text = NSMutableAttributedString(string: title, attributes: [.font: font, .paragraphStyle: paragraph]) + if !value.isEmpty { + text.append(NSAttributedString(string: "\t" + value, attributes: [ + .font: font, .paragraphStyle: paragraph, .foregroundColor: NSColor.secondaryLabelColor, + ])) + } + return text +} diff --git a/Client/macos/StatusIcon.swift b/Client/macos/StatusIcon.swift new file mode 100644 index 00000000..fe938bbb --- /dev/null +++ b/Client/macos/StatusIcon.swift @@ -0,0 +1,20 @@ +import AppKit + +// Menu bar icon: one monochrome SF Symbol per mode, dimmed when disconnected (spec §6.6). +enum StatusIcon { + static func symbolName(for mode: SHCAmbientMode) -> String { + switch mode { + case .noiseCanceling: return "headphones.circle.fill" + case .ambientSound: return "ear.and.waveform" + default: return "headphones" + } + } + + static func image(connected: Bool, mode: SHCAmbientMode) -> NSImage? { + let name = connected ? symbolName(for: mode) : "headphones" + let image = NSImage(systemSymbolName: name, accessibilityDescription: "SonyBridge") + ?? NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") + image?.isTemplate = true // macOS tints it for light/dark menu bars + return image + } +} diff --git a/Client/macos/StatusItemController.swift b/Client/macos/StatusItemController.swift index 8f3dde2b..88373090 100644 --- a/Client/macos/StatusItemController.swift +++ b/Client/macos/StatusItemController.swift @@ -1,7 +1,7 @@ import AppKit import Combine -// Owns the menu bar icon and attaches the headphones menu to it. +// Owns the menu bar icon (it follows the mode and connection state) and attaches the headphones menu to it. final class StatusItemController { private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) private let headphonesMenu: HeadphonesMenu @@ -10,12 +10,13 @@ final class StatusItemController { init(model: HeadphonesModel) { headphonesMenu = HeadphonesMenu(model: model) statusItem.menu = headphonesMenu.menu - let image = NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") - image?.isTemplate = true - statusItem.button?.image = image - model.$connectionState + model.$connectionState.combineLatest(model.$mode) .receive(on: DispatchQueue.main) - .sink { [weak self] state in self?.statusItem.button?.appearsDisabled = state != .connected } + .sink { [weak self] state, mode in + let connected = state == .connected + self?.statusItem.button?.image = StatusIcon.image(connected: connected, mode: mode) + self?.statusItem.button?.appearsDisabled = !connected + } .store(in: &cancellables) } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index de9c1a68..a1d02c4f 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -16,6 +16,33 @@ "Case %ld%%" = "Boîtier %ld %%"; "Clear Bass" = "Clear Bass"; "Focus on Voice" = "Focalisation sur la voix"; +"Equalizer" = "Égaliseur"; +"Bright" = "Brillant"; +"Excited" = "Dynamique"; +"Mellow" = "Doux"; +"Relaxed" = "Détendu"; +"Vocal" = "Voix"; +"Treble" = "Aigus"; +"Bass" = "Graves"; +"Speech" = "Parole"; +"Manual" = "Manuel"; +"Custom" = "Personnalisé"; +"Manual equalizer coming soon for this model" = "Égaliseur manuel bientôt disponible pour ce modèle"; +"Reset" = "Réinitialiser"; +"DSEE" = "DSEE"; +"Speak-to-Chat" = "Speak-to-Chat"; +"Adaptive Volume" = "Volume adaptatif"; +"Auto Power-Off" = "Arrêt automatique"; +"5 min" = "5 min"; +"30 min" = "30 min"; +"1 hour" = "1 heure"; +"3 hours" = "3 heures"; +"When taken off" = "Quand le casque est retiré"; +"About the Headphones" = "À propos du casque"; +"Firmware" = "Firmware"; +"Codec" = "Codec"; +"Protocol" = "Protocole"; +"Bluetooth" = "Bluetooth"; /* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ "No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; From cda1c3e3b2d566b61d71ac103b23734bdfab62ad Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 10:34:01 +0200 Subject: [PATCH 13/50] fix(build): make run launches via open --args; sandboxed app logs to ~/Library/Logs/SonyBridge (build/app.log symlink) --- Client/macos/SonyBridgeApp.swift | 17 +++++++++++++++++ Client/macos/SonyHeadphonesClient.entitlements | 4 ++++ Makefile | 9 +++++++-- 3 files changed, 28 insertions(+), 2 deletions(-) diff --git a/Client/macos/SonyBridgeApp.swift b/Client/macos/SonyBridgeApp.swift index 92aab910..746d012b 100644 --- a/Client/macos/SonyBridgeApp.swift +++ b/Client/macos/SonyBridgeApp.swift @@ -4,6 +4,23 @@ import AppKit @main enum SonyBridgeApp { static func main() { + // The app is sandboxed, so it can only write inside the folder allowed by the + // temporary-exception entitlement. `make run` points it at + // ~/Library/Logs/SonyBridge/app.log (allowed by that exception); `open --stderr` + // fails on recent macOS, so the path is passed as a launch argument instead. + // Redirect stderr to the log file in append mode (unbuffered for live DEBUG hex + // dumps). freopen() closes stderr before it knows whether the reopen will + // succeed, so a sandbox denial would leave stderr closed with nothing to fall + // back to; open()+dup2() only touches stderr once we know the fd is valid. + if let logPath = UserDefaults.standard.string(forKey: "SonyBridgeLogFile") { + let fd = open(logPath, O_WRONLY | O_CREAT | O_APPEND, 0o644) + if fd >= 0 { + dup2(fd, STDERR_FILENO) + close(fd) + setvbuf(stderr, nil, _IONBF, 0) + } + } + let app = NSApplication.shared let delegate = AppDelegate() app.delegate = delegate diff --git a/Client/macos/SonyHeadphonesClient.entitlements b/Client/macos/SonyHeadphonesClient.entitlements index e9da8e18..70cb01d7 100644 --- a/Client/macos/SonyHeadphonesClient.entitlements +++ b/Client/macos/SonyHeadphonesClient.entitlements @@ -8,5 +8,9 @@ com.apple.security.files.user-selected.read-only + com.apple.security.temporary-exception.files.home-relative-path.read-write + + /Library/Logs/SonyBridge/ + diff --git a/Makefile b/Makefile index a50b440e..b02f7ded 100644 --- a/Makefile +++ b/Makefile @@ -8,9 +8,14 @@ all: build build: DEBUG_PROTOCOL=$(DEBUG) ./scripts/build.sh +LOG_FILE := $(HOME)/Library/Logs/SonyBridge/app.log + run: build - -pkill -x SonyBridge - open --stdout build/app.log --stderr build/app.log build/SonyBridge.app + -pkill -x SonyBridge; while pgrep -x SonyBridge >/dev/null; do sleep 0.2; done + @mkdir -p "$(dir $(LOG_FILE))" + @ln -sfn "$(LOG_FILE)" "$(CURDIR)/build/app.log" + @echo "=== SonyBridge session $$(date '+%Y-%m-%d %H:%M:%S') ===" >> "$(LOG_FILE)" + open "$(CURDIR)/build/SonyBridge.app" --args -SonyBridgeLogFile "$(LOG_FILE)" test: ./scripts/test.sh From cb877f7dacfebc6252d32a06f5dfe0ae05a1ef31 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 10:34:05 +0200 Subject: [PATCH 14/50] fix(macos): menu layout (widths, insets, short values), EQ row height, single-battery detection, robust first reads --- Client/Headphones.cpp | 14 ++- Client/Headphones.h | 4 + Client/macos/HeadphonesBridge.mm | 27 +++-- Client/macos/HeadphonesMenu.swift | 22 +++- Client/macos/MenuRows/AmbientLevelRow.swift | 2 +- Client/macos/MenuRows/EqualizerRow.swift | 4 +- Client/macos/MenuRows/HeaderRow.swift | 7 +- Client/macos/MenuRows/ToggleRow.swift | 2 +- Client/macos/MenuSupport.swift | 17 ++- Client/macos/fr.lproj/Localizable.strings | 1 + Client/tests/BluetoothWrapperTests.cpp | 49 +------- Client/tests/FakeConnector.h | 54 +++++++++ Client/tests/HeadphonesTests.cpp | 122 ++++++++++++++++++++ scripts/test.sh | 7 ++ 14 files changed, 260 insertions(+), 72 deletions(-) create mode 100644 Client/tests/FakeConnector.h create mode 100644 Client/tests/HeadphonesTests.cpp diff --git a/Client/Headphones.cpp b/Client/Headphones.cpp index 67b8c252..57722862 100644 --- a/Client/Headphones.cpp +++ b/Client/Headphones.cpp @@ -95,9 +95,21 @@ void Headphones::requestBattery() std::lock_guard guard(this->_propertyMtx); this->_batteryLevel = (unsigned char)resp[2]; this->_batteryCharging = resp[3] == 1; + this->_singleBatteryKnown = true; + this->_hasDualBattery = false; return; // found a single battery; don't waste time probing the TWS types } - } catch (...) {} + } catch (...) { + // A device whose 22 00 has already succeeded once shouldn't fall back to probing the TWS + // commands on a later transient timeout - that would wrongly flip _hasDualBattery to true + // and it's never reset afterwards. Keep the last known values and bail out. + // Read under the lock: requestBattery() can run concurrently (connect + the 60s poll each + // dispatch it), and _singleBatteryKnown is otherwise only ever written under _propertyMtx. + { + std::lock_guard guard(this->_propertyMtx); + if (this->_singleBatteryKnown) return; + } + } // TWS earbuds: dual L/R (22 09 -> 23 09 ) and case (22 0a -> 23 0a ). try { diff --git a/Client/Headphones.h b/Client/Headphones.h index e18b8d6b..2f1ce99d 100644 --- a/Client/Headphones.h +++ b/Client/Headphones.h @@ -102,6 +102,10 @@ class Headphones { int _batteryLevel = -1; bool _batteryCharging = false; bool _hasDualBattery = false; + // Set once GET 22 00 succeeds. Guards requestBattery() against a later transient timeout on 22 00 + // falling through to the TWS probes (22 09/22 0a), which would wrongly flip _hasDualBattery to true + // and never reset it - see requestBattery(). + bool _singleBatteryKnown = false; int _batteryLeft = -1; int _batteryRight = -1; int _batteryCase = -1; diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index 17bfab41..ac36442f 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -215,18 +215,23 @@ - (void)refreshStatusWithCompletion:(void (^)(void))completion { // per-call the connector mutex still serializes actual I/O. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // Fast, always-supported reads first, then update the UI immediately... - try { - if (!self->_initialized) { - hp->initDevice(); - hp->probeNcAsmInquiryType(); - self->_initialized = YES; + // Each read is independent: one lost frame (recv timeout) must not skip the others, or a fresh + // connection stays half-initialized (no battery, no EQ, NC/ASM polled on the wrong channel). + if (!self->_initialized) { + for (int attempt = 0; attempt < 2 && !self->_initialized; attempt++) { + try { + hp->initDevice(); + self->_initialized = YES; + } catch (std::exception &exc) {} } - // Current NC/ASM state, on the channel probeNcAsmInquiryType() picked. - hp->requestAmbientState(); - hp->requestBattery(); - hp->requestEqualizer(); - hp->requestDsee(); - } catch (std::exception &exc) {} + // Probe even if init never answered, so the NC/ASM channel is still picked (catches internally). + hp->probeNcAsmInquiryType(); + } + // Current NC/ASM state, on the channel probeNcAsmInquiryType() picked. + try { hp->requestAmbientState(); } catch (std::exception &exc) {} + try { hp->requestBattery(); } catch (std::exception &exc) {} + try { hp->requestEqualizer(); } catch (std::exception &exc) {} + try { hp->requestDsee(); } catch (std::exception &exc) {} dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); // ...then the optional-feature probes, which can each take a couple seconds to time out on a diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index c4c717ea..1aaea6f5 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -12,6 +12,7 @@ final class HeadphonesMenu { private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] private var ambientRows: [NSMenuItem] = [] // level slider + focus on voice private let equalizerItem = NSMenuItem() + private var equalizerRowItem = NSMenuItem() private var presetItems: [(Int, NSMenuItem)] = [] private let equalizerNoteItem = NSMenuItem() private var equalizerResetItem = NSMenuItem() @@ -32,13 +33,24 @@ final class HeadphonesMenu { } // Index = the bridge's auto power-off option (0=Off, 1=5 min, 2=30 min, 3=1 h, 4=3 h, 5=when taken off). + // Used for the submenu's item titles (long form). private static var autoPowerOffOptions: [String] { [tr("Off"), tr("5 min"), tr("30 min"), tr("1 hour"), tr("3 hours"), tr("When taken off")] } + // Same options, but with a short last label - used for the value shown at the right of "Auto Power-Off" + // itself, since the full "Quand le casque est retiré" collides with the title (spec §4 shows a short + // value; the submenu keeps the long label). + private static var autoPowerOffShortOptions: [String] { + var options = autoPowerOffOptions + options[options.count - 1] = tr("Taken off") + return options + } + init(model: HeadphonesModel) { self.model = model menu.autoenablesItems = false + menu.minimumWidth = MenuMetrics.width menu.addItem(hostingMenuItem { HeaderRow(model: model) }) errorItem.isEnabled = false @@ -86,13 +98,15 @@ final class HeadphonesMenu { private func addSoundSection() { let equalizerMenu = NSMenu() equalizerMenu.autoenablesItems = false + equalizerMenu.minimumWidth = MenuMetrics.equalizerWidth for (code, title) in Self.presets { let item = ActionMenuItem(title) { [weak model] in model?.setEqualizerPreset(code) } presetItems.append((code, item)) equalizerMenu.addItem(item) } equalizerMenu.addItem(.separator()) - equalizerMenu.addItem(hostingMenuItem(width: MenuMetrics.equalizerWidth) { EqualizerRow(model: model) }) + equalizerRowItem = hostingMenuItem(width: MenuMetrics.equalizerWidth) { EqualizerRow(model: model) } + equalizerMenu.addItem(equalizerRowItem) equalizerNoteItem.title = tr("Manual equalizer coming soon for this model") equalizerNoteItem.isEnabled = false equalizerMenu.addItem(equalizerNoteItem) @@ -156,17 +170,19 @@ final class HeadphonesMenu { item.isEnabled = connected && model.equalizerWritable } equalizerNoteItem.isHidden = model.equalizerWritable || model.eqBands.isEmpty + equalizerRowItem.isHidden = model.eqBands.isEmpty equalizerResetItem.isEnabled = connected && model.equalizerWritable && model.eqPreset == 0xA0 dseeItem.isHidden = !model.supportsEqualizer speakToChatItem.isHidden = !model.hasSpeakToChat adaptiveVolumeItem.isHidden = !model.hasAdaptiveVolume - let options = Self.autoPowerOffOptions + let shortOptions = Self.autoPowerOffShortOptions autoPowerOffItem.isHidden = !model.hasAutoPowerOff autoPowerOffItem.isEnabled = connected autoPowerOffItem.attributedTitle = titleWithValue( - tr("Auto Power-Off"), options.indices.contains(model.autoPowerOff) ? options[model.autoPowerOff] : "") + tr("Auto Power-Off"), + shortOptions.indices.contains(model.autoPowerOff) ? shortOptions[model.autoPowerOff] : "") for (index, item) in autoPowerOffItems.enumerated() { item.state = index == model.autoPowerOff ? .on : .off } diff --git a/Client/macos/MenuRows/AmbientLevelRow.swift b/Client/macos/MenuRows/AmbientLevelRow.swift index 9f33137e..4e062b7b 100644 --- a/Client/macos/MenuRows/AmbientLevelRow.swift +++ b/Client/macos/MenuRows/AmbientLevelRow.swift @@ -22,7 +22,7 @@ struct AmbientLevelRow: View { .frame(width: 20, alignment: .trailing) } .padding(.leading, MenuMetrics.indent) - .padding(.trailing, MenuMetrics.leading) + .padding(.trailing, MenuMetrics.trailing) .padding(.vertical, 2) .disabled(!model.connected) } diff --git a/Client/macos/MenuRows/EqualizerRow.swift b/Client/macos/MenuRows/EqualizerRow.swift index e08ddd7c..7563c7ae 100644 --- a/Client/macos/MenuRows/EqualizerRow.swift +++ b/Client/macos/MenuRows/EqualizerRow.swift @@ -23,8 +23,10 @@ struct EqualizerRow: View { } } } - .padding(.horizontal, MenuMetrics.leading) + .padding(.leading, MenuMetrics.leading) + .padding(.trailing, MenuMetrics.trailing) .padding(.vertical, 6) + .frame(height: MenuMetrics.equalizerHeight) } private func band(_ label: String, value: Int, onChange: @escaping (Int, Bool) -> Void) -> some View { diff --git a/Client/macos/MenuRows/HeaderRow.swift b/Client/macos/MenuRows/HeaderRow.swift index 17199f5c..95e2ab48 100644 --- a/Client/macos/MenuRows/HeaderRow.swift +++ b/Client/macos/MenuRows/HeaderRow.swift @@ -16,7 +16,8 @@ struct HeaderRow: View { Spacer(minLength: 8) if model.connected { battery } } - .padding(.horizontal, MenuMetrics.leading) + .padding(.leading, MenuMetrics.leading) + .padding(.trailing, MenuMetrics.trailing) .padding(.vertical, 4) } @@ -33,11 +34,15 @@ struct HeaderRow: View { Text(dualBatteryText) .font(.system(size: 12)) .foregroundColor(.secondary) + .lineLimit(1) + .fixedSize() } else if model.batteryLevel >= 0 { HStack(spacing: 4) { Text(String(format: tr("%ld%%"), model.batteryLevel)) .font(.system(size: 12)) .foregroundColor(.secondary) + .lineLimit(1) + .fixedSize() Image(systemName: batterySymbol) .foregroundColor(model.batteryLevel <= 20 && !model.batteryCharging ? .red : .secondary) } diff --git a/Client/macos/MenuRows/ToggleRow.swift b/Client/macos/MenuRows/ToggleRow.swift index f44513c9..23291c8d 100644 --- a/Client/macos/MenuRows/ToggleRow.swift +++ b/Client/macos/MenuRows/ToggleRow.swift @@ -18,7 +18,7 @@ struct ToggleRow: View { .controlSize(.mini) } .padding(.leading, indent) - .padding(.trailing, MenuMetrics.leading) + .padding(.trailing, MenuMetrics.trailing) .padding(.vertical, 2) .disabled(!model.connected) .opacity(model.connected ? 1 : 0.5) diff --git a/Client/macos/MenuSupport.swift b/Client/macos/MenuSupport.swift index 62c9f831..02543115 100644 --- a/Client/macos/MenuSupport.swift +++ b/Client/macos/MenuSupport.swift @@ -34,22 +34,29 @@ func sectionHeader(_ title: String) -> NSMenuItem { enum MenuMetrics { static let width: CGFloat = 280 // main menu rows static let equalizerWidth: CGFloat = 300 // equalizer submenu - static let leading: CGFloat = 14 // lines up with native item titles - static let indent: CGFloat = 36 // rows nested under "Son ambiant" + static let equalizerHeight: CGFloat = 100 // slider 72 + spacing 3 + label ~11 + vertical paddings 2×6 ~98 + static let leading: CGFloat = 24 // lines up with native item titles + static let indent: CGFloat = 45 // rows nested under "Son ambiant", aligned with mode titles' text + static let trailing: CGFloat = 14 // right padding (mirrors the submenu-arrow column) } // Wraps a SwiftUI view in a menu item, for rows a plain NSMenuItem can't express (sliders, switches, header). // Rows keep a fixed height: optional lines (the error line, notes) are separate plain items instead. +// `width` only seeds the initial layout pass used to compute the row's fitting height; the hosted view is +// then made horizontally resizable so it follows the menu's actual width (NSMenu.minimumWidth) instead of +// staying pinned at that initial width while native items stretch the menu wider (or narrower). func hostingMenuItem(width: CGFloat = MenuMetrics.width, @ViewBuilder _ content: () -> Content) -> NSMenuItem { - let host = NSHostingView(rootView: content().frame(width: width, alignment: .leading)) - host.frame = NSRect(origin: .zero, size: host.fittingSize) + let host = NSHostingView(rootView: content().frame(maxWidth: .infinity, alignment: .leading)) + host.frame = NSRect(x: 0, y: 0, width: width, height: 0) + host.frame.size.height = host.fittingSize.height + host.autoresizingMask = [.width] let item = NSMenuItem() item.view = host return item } // "Title value": the value right-aligned in the secondary color, like "Égaliseur Graves ›". -func titleWithValue(_ title: String, _ value: String, width: CGFloat = MenuMetrics.width - 60) -> NSAttributedString { +func titleWithValue(_ title: String, _ value: String, width: CGFloat = MenuMetrics.width - 40) -> NSAttributedString { let paragraph = NSMutableParagraphStyle() paragraph.tabStops = [NSTextTab(textAlignment: .right, location: width)] let font = NSFont.menuFont(ofSize: 0) diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index a1d02c4f..889593f3 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -38,6 +38,7 @@ "1 hour" = "1 heure"; "3 hours" = "3 heures"; "When taken off" = "Quand le casque est retiré"; +"Taken off" = "Quand retiré"; "About the Headphones" = "À propos du casque"; "Firmware" = "Firmware"; "Codec" = "Codec"; diff --git a/Client/tests/BluetoothWrapperTests.cpp b/Client/tests/BluetoothWrapperTests.cpp index 21475789..f21e6a84 100644 --- a/Client/tests/BluetoothWrapperTests.cpp +++ b/Client/tests/BluetoothWrapperTests.cpp @@ -1,10 +1,7 @@ #include "BluetoothWrapper.h" #include "CommandSerializer.h" -#include "IBluetoothConnector.h" -#include "Exceptions.h" -#include +#include "FakeConnector.h" #include -#include #include #include @@ -19,50 +16,6 @@ static Buffer bytes(std::initializer_list values) return b; } -// Records every frame handed to send() and hands back scripted incoming frames one whole frame per -// recv() call. When the script is exhausted, recv() throws like the real macOS connector does after -// its 2.5s timeout. -class FakeBluetoothConnector : public IBluetoothConnector -{ -public: - std::vector sentFrames; - std::deque incomingFrames; - - int send(char* buf, size_t length) noexcept(false) override - { - this->sentFrames.emplace_back(buf, buf + length); - return static_cast(length); - } - - int recv(char* buf, size_t length) noexcept(false) override - { - if (this->incomingFrames.empty()) - { - throw RecoverableException("recv timed out", false); - } - auto frame = this->incomingFrames.front(); - this->incomingFrames.pop_front(); - if (frame.size() > length) - { - throw std::runtime_error("scripted frame too large for buffer"); - } - std::copy(frame.begin(), frame.end(), buf); - return static_cast(frame.size()); - } - - void connect(const std::string&) noexcept(false) override {} - void disconnect() noexcept override {} - bool isConnected() noexcept override { return true; } - std::vector getConnectedDevices() override { return {}; } - SonyProtocolVersion getProtocolVersion() noexcept override { return SonyProtocolVersion::V1; } -}; - -// Decodes a frame previously recorded by FakeBluetoothConnector::send (includes START_MARKER/END_MARKER). -static CommandSerializer::Message unpackSentFrame(const Buffer& frame) -{ - return CommandSerializer::unpackBtMessage(Buffer(frame.begin() + 1, frame.end() - 1)); -} - static void testNotificationBeforeAck() { auto fakeOwned = std::make_unique(); diff --git a/Client/tests/FakeConnector.h b/Client/tests/FakeConnector.h new file mode 100644 index 00000000..08de21ec --- /dev/null +++ b/Client/tests/FakeConnector.h @@ -0,0 +1,54 @@ +#pragma once + +#include "BluetoothWrapper.h" +#include "CommandSerializer.h" +#include "IBluetoothConnector.h" +#include "Exceptions.h" +#include +#include +#include +#include + +// Records every frame handed to send() and hands back scripted incoming frames one whole frame per +// recv() call. When the script is exhausted, recv() throws like the real macOS connector does after +// its 2.5s timeout. Shared by BluetoothWrapperTests.cpp and HeadphonesTests.cpp. +class FakeBluetoothConnector : public IBluetoothConnector +{ +public: + std::vector sentFrames; + std::deque incomingFrames; + + int send(char* buf, size_t length) noexcept(false) override + { + this->sentFrames.emplace_back(buf, buf + length); + return static_cast(length); + } + + int recv(char* buf, size_t length) noexcept(false) override + { + if (this->incomingFrames.empty()) + { + throw RecoverableException("recv timed out", false); + } + auto frame = this->incomingFrames.front(); + this->incomingFrames.pop_front(); + if (frame.size() > length) + { + throw std::runtime_error("scripted frame too large for buffer"); + } + std::copy(frame.begin(), frame.end(), buf); + return static_cast(frame.size()); + } + + void connect(const std::string&) noexcept(false) override {} + void disconnect() noexcept override {} + bool isConnected() noexcept override { return true; } + std::vector getConnectedDevices() override { return {}; } + SonyProtocolVersion getProtocolVersion() noexcept override { return SonyProtocolVersion::V1; } +}; + +// Decodes a frame previously recorded by FakeBluetoothConnector::send (includes START_MARKER/END_MARKER). +inline CommandSerializer::Message unpackSentFrame(const Buffer& frame) +{ + return CommandSerializer::unpackBtMessage(Buffer(frame.begin() + 1, frame.end() - 1)); +} diff --git a/Client/tests/HeadphonesTests.cpp b/Client/tests/HeadphonesTests.cpp new file mode 100644 index 00000000..c987b7ea --- /dev/null +++ b/Client/tests/HeadphonesTests.cpp @@ -0,0 +1,122 @@ +#include "Headphones.h" +#include "BluetoothWrapper.h" +#include "CommandSerializer.h" +#include "Constants.h" +#include "FakeConnector.h" +#include +#include + +// Minimal test runner (no framework). Exit code 1 on any failure. +static int failures = 0; +#define CHECK(cond) do { if (!(cond)) { failures++; std::printf("FAIL %s:%d: %s\n", __FILE__, __LINE__, #cond); } } while (0) + +static Buffer bytes(std::initializer_list values) +{ + Buffer b; + for (int v : values) b.push_back((char)v); + return b; +} + +// Scripts a single DATA_MDR reply so sendCommandAndReadResponse's read loop matches it directly - +// BluetoothWrapper ACKs DATA_MDR frames itself, so no separate scripted ACK frame is needed. +static void scriptResponse(FakeBluetoothConnector& fake, std::initializer_list payload) +{ + fake.incomingFrames.push_back(CommandSerializer::packageDataForBt(bytes(payload), DATA_TYPE::DATA_MDR, 0)); +} + +// A connector that answers only the specific (opcode, subtype) requests it's told to, and times out (throws) +// for everything else - including requests it was never asked about. The plain FIFO FakeBluetoothConnector +// can't model "this one inquiry never answers, but a later different inquiry does" because it hands back +// whatever's queued regardless of which request is asking; a device really just never replies to an +// unsupported inquiry rather than replying out of order to an unrelated one. +class SelectiveFakeConnector : public FakeBluetoothConnector +{ +public: + void scriptReplyTo(unsigned char opcode, unsigned char subtype, std::initializer_list payload) + { + this->replies.push_back({ { opcode, subtype }, bytes(payload) }); + } + + int recv(char* buf, size_t length) noexcept(false) override + { + if (this->sentFrames.empty()) throw RecoverableException("recv timed out", false); + auto lastSent = unpackSentFrame(this->sentFrames.back()); + for (const auto& entry : this->replies) + { + if (lastSent.payload.size() >= 2 + && (unsigned char)lastSent.payload[0] == entry.first.first + && (unsigned char)lastSent.payload[1] == entry.first.second) + { + auto frame = CommandSerializer::packageDataForBt(entry.second, DATA_TYPE::DATA_MDR, 0); + if (frame.size() > length) throw std::runtime_error("scripted frame too large for buffer"); + std::copy(frame.begin(), frame.end(), buf); + return static_cast(frame.size()); + } + } + throw RecoverableException("recv timed out", false); + } + +private: + std::vector, Buffer>> replies; +}; + +// Cases (1) + (2): a real WH-1000XM6 answers the single-battery inquiry once (55%, not charging), then a +// later poll's 22 00 times out (no scripted reply). The transient timeout must NOT fall back to probing +// the TWS commands (22 09 / 22 0a) - that flips hasDualBattery() to true forever, which is the header's +// "G 0 % D 9 % Boîtier 0 %" bug on a single-battery device. +static void testTransientBatteryTimeoutKeepsSingleBattery() +{ + auto fakeOwned = std::make_unique(); + FakeBluetoothConnector* fake = fakeOwned.get(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + Headphones phones(wrapper); + + // (1) 22 00 answered -> 23 00 37 00 (level 55, not charging). + scriptResponse(*fake, { 0x23, 0x00, 0x37, 0x00 }); + phones.requestBattery(); + CHECK(phones.getBatteryLevel() == 55); + CHECK(phones.hasDualBattery() == false); + + // (2) 22 00 now times out (no scripted reply queued) - must not probe 22 09 / 22 0a, and the last + // known values must be kept. + fake->sentFrames.clear(); + phones.requestBattery(); + + for (const auto& frame : fake->sentFrames) + { + auto msg = unpackSentFrame(frame); + bool isBatteryGet = msg.payload.size() >= 2 && (unsigned char)msg.payload[0] == V2Command::BATTERY_GET; + bool isTwsProbe = isBatteryGet + && ((unsigned char)msg.payload[1] == 0x09 || (unsigned char)msg.payload[1] == 0x0a); + CHECK(!isTwsProbe); + } + CHECK(phones.hasDualBattery() == false); + CHECK(phones.getBatteryLevel() == 55); +} + +// Case (3): a TWS device whose 22 00 never answers must still pick up its dual battery from 22 09 - the +// fix must not break the existing TWS probing path for devices that have no single-battery inquiry at all. +static void testTwsDeviceWithNoSingleBatteryStillProbes() +{ + auto fakeOwned = std::make_unique(); + SelectiveFakeConnector* fake = fakeOwned.get(); + BluetoothWrapper wrapper(std::move(fakeOwned)); + Headphones phones(wrapper); + + // 22 00 has no scripted reply at all (times out); only 22 09 answers, L=50% (not charging), + // R=50% (not charging); 22 0a (case) has no scripted reply either. + fake->scriptReplyTo(V2Command::BATTERY_GET, 0x09, { 0x23, 0x09, 0x32, 0x00, 0x32, 0x00 }); + phones.requestBattery(); + + CHECK(phones.hasDualBattery() == true); +} + +int main() +{ + testTransientBatteryTimeoutKeepsSingleBattery(); + testTwsDeviceWithNoSingleBatteryStillProbes(); + + if (failures) { std::printf("HeadphonesTests: %d failure(s)\n", failures); return 1; } + std::printf("HeadphonesTests: all passed\n"); + return 0; +} diff --git a/scripts/test.sh b/scripts/test.sh index 980624d3..22d92079 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -30,5 +30,12 @@ clang++ -target "$TARGET" -isysroot "$SDK" -std=c++17 -I "$ROOT/Client" \ -o "$OUT/BluetoothWrapperTests" "$OUT/BluetoothWrapperTests" +echo "== HeadphonesTests" +clang++ -target "$TARGET" -isysroot "$SDK" -std=c++17 -I "$ROOT/Client" \ + "$ROOT/Client/tests/HeadphonesTests.cpp" "$ROOT/Client/Headphones.cpp" "$ROOT/Client/ProtocolParsers.cpp" \ + "$ROOT/Client/BluetoothWrapper.cpp" "$ROOT/Client/CommandSerializer.cpp" "$ROOT/Client/ByteMagic.cpp" \ + -o "$OUT/HeadphonesTests" +"$OUT/HeadphonesTests" + echo "== Localization" python3 "$ROOT/scripts/check_localization.py" From fd905d6c29302dbe15cafbdefdd670efc6a5f704 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 10:34:08 +0200 Subject: [PATCH 15/50] feat(macos): auto-connect, auto-reconnect and launch at login (menu options) --- Client/macos/AppDelegate.swift | 15 +++- Client/macos/AppSettings.swift | 53 +++++++++++++++ Client/macos/DeviceWatcher.swift | 38 +++++++++++ Client/macos/HeadphonesBridge.h | 10 +++ Client/macos/HeadphonesBridge.mm | 75 ++++++++++++++++---- Client/macos/HeadphonesMenu.swift | 28 +++++++- Client/macos/HeadphonesModel.swift | 83 ++++++++++++++++++++++- Client/macos/MacOSBluetoothConnector.h | 6 +- Client/macos/MacOSBluetoothConnector.mm | 27 +++++--- Client/macos/StatusItemController.swift | 4 +- Client/macos/fr.lproj/Localizable.strings | 4 ++ 11 files changed, 313 insertions(+), 30 deletions(-) create mode 100644 Client/macos/AppSettings.swift create mode 100644 Client/macos/DeviceWatcher.swift diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index d8b38ef7..20f7ea57 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -2,10 +2,23 @@ import AppKit final class AppDelegate: NSObject, NSApplicationDelegate { private let model = HeadphonesModel() + private let settings = AppSettings() + private let deviceWatcher = DeviceWatcher() private var statusItemController: StatusItemController? func applicationDidFinishLaunching(_ notification: Notification) { - statusItemController = StatusItemController(model: model) + model.settings = settings + statusItemController = StatusItemController(model: model, settings: settings) + + deviceWatcher.onConnect = { [weak self] address, name in + self?.model.headsetConnectedToMac(address: address, name: name) + } + deviceWatcher.onDisconnect = { [weak self] address in + self?.model.headsetDisconnectedFromMac(address: address) + } + deviceWatcher.start() + + if settings.autoConnect { model.autoConnectOnLaunch() } } func applicationWillTerminate(_ notification: Notification) { diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift new file mode 100644 index 00000000..7f1b4566 --- /dev/null +++ b/Client/macos/AppSettings.swift @@ -0,0 +1,53 @@ +import Foundation +import ServiceManagement + +// The three user options, persisted in UserDefaults. Launch at login is backed by SMAppService (macOS 13+). +final class AppSettings: ObservableObject { + private enum Keys { + static let autoConnect = "autoConnect" + static let autoReconnect = "autoReconnect" + static let lastDeviceAddress = "lastDeviceAddress" + } + + private let defaults: UserDefaults + + @Published var autoConnect: Bool { + didSet { defaults.set(autoConnect, forKey: Keys.autoConnect) } + } + @Published var autoReconnect: Bool { + didSet { defaults.set(autoReconnect, forKey: Keys.autoReconnect) } + } + @Published private(set) var launchAtLogin: Bool + + var lastDeviceAddress: String? { + get { defaults.string(forKey: Keys.lastDeviceAddress) } + set { defaults.set(newValue, forKey: Keys.lastDeviceAddress) } + } + + init(defaults: UserDefaults = .standard) { + self.defaults = defaults + // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. + defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true]) + autoConnect = defaults.bool(forKey: Keys.autoConnect) + autoReconnect = defaults.bool(forKey: Keys.autoReconnect) + launchAtLogin = SMAppService.mainApp.status == .enabled + } + + // Returns an error message if macOS refused the change. + func setLaunchAtLogin(_ enabled: Bool) -> String? { + defer { launchAtLogin = SMAppService.mainApp.status == .enabled } + do { + if enabled { + try SMAppService.mainApp.register() + if SMAppService.mainApp.status == .requiresApproval { + SMAppService.openSystemSettingsLoginItems() + } + } else { + try SMAppService.mainApp.unregister() + } + return nil + } catch { + return error.localizedDescription + } + } +} diff --git a/Client/macos/DeviceWatcher.swift b/Client/macos/DeviceWatcher.swift new file mode 100644 index 00000000..e0a203d8 --- /dev/null +++ b/Client/macos/DeviceWatcher.swift @@ -0,0 +1,38 @@ +import Foundation +import IOBluetooth + +// Reports Bluetooth devices connecting to / disconnecting from macOS, as (address, name). +final class DeviceWatcher: NSObject { + var onConnect: ((_ address: String, _ name: String) -> Void)? + var onDisconnect: ((_ address: String) -> Void)? + + private var connectNotification: IOBluetoothUserNotification? + private var disconnectNotifications: [String: IOBluetoothUserNotification] = [:] + + func start() { + connectNotification = IOBluetoothDevice.register(forConnectNotifications: self, + selector: #selector(deviceConnected(_:device:))) + for case let device as IOBluetoothDevice in IOBluetoothDevice.pairedDevices() ?? [] where device.isConnected() { + if let address = device.addressString { watchDisconnect(device, address: address) } + } + } + + @objc private func deviceConnected(_ notification: IOBluetoothUserNotification, device: IOBluetoothDevice) { + guard let address = device.addressString else { return } + watchDisconnect(device, address: address) + onConnect?(address, device.name ?? "") + } + + @objc private func deviceDisconnected(_ notification: IOBluetoothUserNotification, device: IOBluetoothDevice) { + notification.unregister() + guard let address = device.addressString else { return } + disconnectNotifications[address] = nil + onDisconnect?(address) + } + + private func watchDisconnect(_ device: IOBluetoothDevice, address: String) { + guard disconnectNotifications[address] == nil else { return } + disconnectNotifications[address] = device.register(forDisconnectNotification: self, + selector: #selector(deviceDisconnected(_:device:))) + } +} diff --git a/Client/macos/HeadphonesBridge.h b/Client/macos/HeadphonesBridge.h index d413e725..1f5adadd 100644 --- a/Client/macos/HeadphonesBridge.h +++ b/Client/macos/HeadphonesBridge.h @@ -62,6 +62,16 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { // completion is called on the main thread. - (void)scanAndConnectWithCompletion:(void (^)(BOOL ok, NSString * _Nullable error))completion; +// Name heuristic for Sony headsets (WH-/WF-/WI-/MDR-/XB/LinkBuds). ++ (BOOL)looksLikeSonyHeadset:(NSString *)name NS_SWIFT_NAME(looksLikeSonyHeadset(_:)); +// Address of the first Sony headset currently connected to macOS, or nil. ++ (nullable NSString *)connectedSonyHeadsetAddress NS_SWIFT_NAME(connectedSonyHeadsetAddress()); +// YES if the device with this address is connected to macOS (its audio link is up). ++ (BOOL)isDeviceConnectedToMac:(NSString *)address NS_SWIFT_NAME(isDeviceConnectedToMac(_:)); +// Opens the control channel to a specific device, without the picker. Completion on the main thread. +- (void)connectToAddress:(NSString *)address + completion:(void (^)(BOOL ok, NSString * _Nullable error))completion NS_SWIFT_NAME(connect(toAddress:completion:)); + - (void)disconnect; // Pushes the desired ambient/NC state to the device on a background thread; completion on main thread. diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index ac36442f..9f61462d 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -16,7 +16,9 @@ @implementation HeadphonesBridge { std::unique_ptr _bt; - std::unique_ptr _hp; + // shared_ptr: background blocks capture their own copy so a disconnect()-triggered _hp.reset() on the + // main thread can't free the object while a queued block is still mid-way through a read/write. + std::shared_ptr _hp; NSString *_deviceName; NSString *_deviceMac; BOOL _initialized; @@ -162,6 +164,10 @@ - (void)scanAndConnectWithCompletion:(void (^)(BOOL, NSString * _Nullable))compl return; } + [self connectDevice:device completion:completion]; +} + +- (void)connectDevice:(IOBluetoothDevice *)device completion:(void (^)(BOOL, NSString * _Nullable))completion { try { _bt->connect([[device addressString] UTF8String]); } catch (RecoverableException &exc) { @@ -185,10 +191,35 @@ - (void)scanAndConnectWithCompletion:(void (^)(BOOL, NSString * _Nullable))compl _deviceName = [device nameOrAddress]; _deviceMac = [device addressString]; - _hp = std::make_unique(*_bt); + _hp = std::make_shared(*_bt); completion(YES, nil); } ++ (BOOL)looksLikeSonyHeadset:(NSString *)name { + return SHCLooksLikeSonyHeadset(name); +} + ++ (nullable NSString *)connectedSonyHeadsetAddress { + for (IOBluetoothDevice *paired in [IOBluetoothDevice pairedDevices]) { + if ([paired isConnected] && SHCLooksLikeSonyHeadset([paired name])) return [paired addressString]; + } + return nil; +} + ++ (BOOL)isDeviceConnectedToMac:(NSString *)address { + IOBluetoothDevice *device = [IOBluetoothDevice deviceWithAddressString:address]; + return device != nil && [device isConnected]; +} + +- (void)connectToAddress:(NSString *)address completion:(void (^)(BOOL, NSString * _Nullable))completion { + IOBluetoothDevice *device = [IOBluetoothDevice deviceWithAddressString:address]; + if (!device) { + completion(NO, NSLocalizedString(@"Not connected.", nil)); + return; + } + [self connectDevice:device completion:completion]; +} + - (void)disconnect { if (_bt) _bt->disconnect(); _hp.reset(); @@ -199,7 +230,9 @@ - (void)disconnect { - (void)refreshStatusWithCompletion:(void (^)(void))completion { if (!_hp || !self.connected) { completion(); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; // CRITICAL: the init/battery/EQ inquiries below use v2 opcodes. Opcode 0x22 is BATTERY_LEVEL_REQUEST // on v2 but POWER_OFF on v1 - sending it to a v1 device (e.g. WH-1000XM4) powers the headphones off. // A v1 device still needs *some* valid handshake traffic right after connect or it drops/powers off on @@ -243,7 +276,9 @@ - (void)refreshStatusWithCompletion:(void (^)(void))completion { - (void)refreshDynamicWithCompletion:(void (^)(void))completion { if (!_hp || !self.connected) { completion(); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // The headphone's physical button only changes ambient/NC, so that's all we poll (keeps traffic low). // requestAmbientState() is protocol-aware (v2 uses 66 17, v1 uses 66 02), so this is safe on both. @@ -255,7 +290,9 @@ - (void)refreshDynamicWithCompletion:(void (^)(void))completion { - (void)refreshBatteryWithCompletion:(void (^)(void))completion { // CRITICAL: 0x22 is BATTERY_LEVEL_REQUEST on v2 but POWER_OFF on v1 - never send it to a v1 device. if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { completion(); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ try { hp->requestBattery(); } catch (std::exception &exc) {} dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); @@ -272,7 +309,9 @@ - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL, NSString completion(NO, NSLocalizedString(@"Equalizer control isn't supported on this device yet.", nil)); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; @@ -296,7 +335,9 @@ - (void)setCustomEqualizerBass:(NSInteger)bass bands:(NSArray *)band std::vector cbands; for (NSNumber *n in bands) cbands.push_back((int)n.integerValue); int cbass = (int)bass; - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; try { @@ -311,7 +352,9 @@ - (void)setDsee:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))c completion(NO, NSLocalizedString(@"Not supported on this device.", nil)); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; try { @@ -346,7 +389,9 @@ - (void)applyMode:(SHCAmbientMode)mode break; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; @@ -367,7 +412,9 @@ - (void)applyMode:(SHCAmbientMode)mode - (void)setAutoPowerOff:(NSInteger)index completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; try { hp->setAutoPowerOff((int)index); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } @@ -377,7 +424,9 @@ - (void)setAutoPowerOff:(NSInteger)index completion:(void (^)(BOOL, NSString * _ - (void)setSpeakToChat:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; try { hp->setSpeakToChat(enabled); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } @@ -387,7 +436,9 @@ - (void)setSpeakToChat:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Null - (void)setAdaptiveVolume:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } - Headphones *hp = _hp.get(); + // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main + // thread) resets _hp while this block is still running. + std::shared_ptr hp = _hp; dispatch_async(_cmdQueue, ^{ NSString *error = nil; BOOL ok = YES; try { hp->setAdaptiveVolume(enabled); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 1aaea6f5..99ec9bc0 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -6,6 +6,7 @@ import Combine final class HeadphonesMenu { let menu = NSMenu() private let model: HeadphonesModel + private let settings: AppSettings private var cancellables = Set() private let errorItem = NSMenuItem() @@ -25,6 +26,9 @@ final class HeadphonesMenu { private let aboutMenu = NSMenu() private var aboutValues: [String] = [] // cache to avoid rebuilding About menu on every slider drag private var connectItem = NSMenuItem() + private var launchAtLoginItem = NSMenuItem() + private var autoConnectItem = NSMenuItem() + private var autoReconnectItem = NSMenuItem() private static var presets: [(Int, String)] { [(0x00, tr("Off")), (0x10, tr("Bright")), (0x11, tr("Excited")), (0x12, tr("Mellow")), @@ -47,8 +51,9 @@ final class HeadphonesMenu { return options } - init(model: HeadphonesModel) { + init(model: HeadphonesModel, settings: AppSettings) { self.model = model + self.settings = settings menu.autoenablesItems = false menu.minimumWidth = MenuMetrics.width @@ -67,6 +72,10 @@ final class HeadphonesMenu { .receive(on: DispatchQueue.main) .sink { [weak self] _ in self?.update() } .store(in: &cancellables) + settings.objectWillChange + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.update() } + .store(in: &cancellables) update() } @@ -142,6 +151,15 @@ final class HeadphonesMenu { aboutMenu.autoenablesItems = false aboutItem.submenu = aboutMenu menu.addItem(aboutItem) + let optionsMenu = NSMenu() + optionsMenu.autoenablesItems = false + launchAtLoginItem = ActionMenuItem(tr("Launch at Login")) { [weak self] in self?.toggleLaunchAtLogin() } + autoConnectItem = ActionMenuItem(tr("Connect Automatically")) { [weak settings] in settings?.autoConnect.toggle() } + autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } + for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem] { optionsMenu.addItem(item) } + let optionsItem = NSMenuItem(title: tr("SonyBridge Options"), action: nil, keyEquivalent: "") + optionsItem.submenu = optionsMenu + menu.addItem(optionsItem) connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } menu.addItem(connectItem) menu.addItem(.separator()) @@ -196,6 +214,10 @@ final class HeadphonesMenu { case .disconnected: connectItem.title = tr("Connect…") } connectItem.isEnabled = model.connectionState != .connecting + + launchAtLoginItem.state = settings.launchAtLogin ? .on : .off + autoConnectItem.state = settings.autoConnect ? .on : .off + autoReconnectItem.state = settings.autoReconnect ? .on : .off } private func updateAbout() { @@ -221,6 +243,10 @@ final class HeadphonesMenu { presets.first { $0.0 == code }?.1 ?? tr("Custom") } + private func toggleLaunchAtLogin() { + if let error = settings.setLaunchAtLogin(!settings.launchAtLogin) { model.showError(error) } + } + private func toggleConnection() { if model.connected { model.disconnect() diff --git a/Client/macos/HeadphonesModel.swift b/Client/macos/HeadphonesModel.swift index 4925fabf..fb46f93a 100644 --- a/Client/macos/HeadphonesModel.swift +++ b/Client/macos/HeadphonesModel.swift @@ -56,10 +56,19 @@ final class HeadphonesModel: ObservableObject { private var levelThrottle = SendThrottle() private var eqThrottle = SendThrottle() + // Set by AppDelegate; nil means "no automatic behaviour". + var settings: AppSettings? + private var reconnectPolicy = ReconnectPolicy() + private var reconnectTimer: Timer? + private var reconnectAddress: String? + private var userDisconnected = false // after "Déconnecter": no auto-reconnect until the headset reconnects to macOS + // MARK: - Connection // User-initiated: uses the already-connected Sony headset, else the macOS Bluetooth picker. func connect() { + userDisconnected = false + cancelReconnect() connectionState = .connecting errorMessage = nil // Defer so the menu can show "Connecting…" before a modal picker blocks the main thread. @@ -71,6 +80,8 @@ final class HeadphonesModel: ObservableObject { } func disconnect() { + userDisconnected = true + cancelReconnect() stopTimers() bridge.disconnect() connectionState = .disconnected @@ -80,18 +91,88 @@ final class HeadphonesModel: ObservableObject { guard ok else { connectionState = .disconnected if userInitiated, let error = error { errorMessage = error } + if !userInitiated && reconnectAddress != nil { + // Only keep retrying while the option is still on; the user may have turned it off meanwhile. + if settings?.autoReconnect == true { scheduleReconnect() } else { cancelReconnect() } + } return } + cancelReconnect() connectionState = .connected syncFromBridge() + settings?.lastDeviceAddress = deviceMac bridge.refreshStatus { [weak self] in self?.syncFromBridge() } // called after reads, then after probes startTimers() } - // The control link dropped on its own (idle power-save). Task 7 adds the automatic reconnection here. + // The control link dropped on its own (idle power-save): retry while the headset is still connected to macOS. func linkLost() { stopTimers() + bridge.disconnect() // resets sequence numbers and buffers for the next connection connectionState = .disconnected + guard settings?.autoReconnect == true, !userDisconnected, !deviceMac.isEmpty else { return } + reconnectAddress = deviceMac + scheduleReconnect() + } + + // MARK: - Automatic connection + + // Not user-initiated: failures stay silent (normal while the headset sleeps). + func autoConnect(toAddress address: String) { + guard connectionState == .disconnected else { return } + connectionState = .connecting + bridge.connect(toAddress: address) { ok, error in + self.handleConnectResult(ok: ok, error: error, userInitiated: false) + } + } + + // At launch: the last headset if macOS has it connected, else any connected Sony headset. + func autoConnectOnLaunch() { + let remembered = settings?.lastDeviceAddress.flatMap { HeadphonesBridge.isDeviceConnectedToMac($0) ? $0 : nil } + if let address = remembered ?? HeadphonesBridge.connectedSonyHeadsetAddress() { + autoConnect(toAddress: address) + } + } + + // DeviceWatcher: a device just connected to macOS. + func headsetConnectedToMac(address: String, name: String) { + guard settings?.autoConnect == true, HeadphonesBridge.looksLikeSonyHeadset(name), + connectionState == .disconnected else { return } + userDisconnected = false + cancelReconnect() + // Give the audio link ~2 s to settle before opening the control channel. + DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in + guard let self = self else { return } + // The option or the device's own connection may have changed during the delay; re-check both. + guard self.settings?.autoConnect == true, HeadphonesBridge.isDeviceConnectedToMac(address) else { return } + self.autoConnect(toAddress: address) + } + } + + // DeviceWatcher: a device left macOS; stop retrying it (headsetConnectedToMac takes over when it's back). + func headsetDisconnectedFromMac(address: String) { + if address == reconnectAddress { cancelReconnect() } + } + + func cancelReconnect() { + reconnectTimer?.invalidate() + reconnectTimer = nil + reconnectAddress = nil + reconnectPolicy.reset() + } + + private func scheduleReconnect() { + guard let address = reconnectAddress else { return } + reconnectTimer?.invalidate() + let timer = Timer(timeInterval: reconnectPolicy.nextDelay(), repeats: false) { [weak self] _ in + guard let self = self else { return } + // The user may have turned the option off while this attempt was pending. + guard self.settings?.autoReconnect == true else { self.cancelReconnect(); return } + guard HeadphonesBridge.isDeviceConnectedToMac(address) else { self.cancelReconnect(); return } + self.autoConnect(toAddress: address) + } + RunLoop.main.add(timer, forMode: .common) + reconnectTimer = timer } // MARK: - Actions diff --git a/Client/macos/MacOSBluetoothConnector.h b/Client/macos/MacOSBluetoothConnector.h index 186b06a4..ea7c7f77 100644 --- a/Client/macos/MacOSBluetoothConnector.h +++ b/Client/macos/MacOSBluetoothConnector.h @@ -22,6 +22,8 @@ class MacOSBluetoothConnector final : public IBluetoothConnector virtual void disconnect() noexcept; virtual bool isConnected() noexcept; virtual void closeConnection(); + // Called from the channel-closed callback, on the connector thread: stops that thread's loop without joining it. + void markClosed() noexcept; virtual SonyProtocolVersion getProtocolVersion() noexcept; virtual std::vector getConnectedDevices() noexcept(false); @@ -36,7 +38,7 @@ class MacOSBluetoothConnector final : public IBluetoothConnector SonyProtocolVersion protocolVersion = SonyProtocolVersion::V1; private: - void *rfcommDevice; - void *rfcommchannel; + void *rfcommDevice = nullptr; + void *rfcommchannel = nullptr; std::thread uthread; }; diff --git a/Client/macos/MacOSBluetoothConnector.mm b/Client/macos/MacOSBluetoothConnector.mm index bd2db624..c02a373f 100644 --- a/Client/macos/MacOSBluetoothConnector.mm +++ b/Client/macos/MacOSBluetoothConnector.mm @@ -6,10 +6,7 @@ } MacOSBluetoothConnector::~MacOSBluetoothConnector() { - // onclose event - if (isConnected()){ - disconnect(); - } + disconnect(); } @interface AsyncCommDelegate : NSObject { @@ -24,7 +21,7 @@ - (void)rfcommChannelClosed:(IOBluetoothRFCOMMChannel *)rfcommChannel{ #ifdef SHC_DEBUG_PROTOCOL fprintf(stderr, "[connect] rfcommChannelClosed\n"); #endif - delegateCPP->disconnect(); + delegateCPP->markClosed(); } #ifdef SHC_DEBUG_PROTOCOL @@ -148,6 +145,8 @@ static void _debugHexDump(const char* label, const char* buf, size_t length) lk.unlock(); } void MacOSBluetoothConnector::connect(const std::string& addrStr){ + // A previous link's thread has stopped (markClosed) but may not have been joined yet. + if (uthread.joinable()) uthread.join(); // convert mac address to nsstring NSString *addressNSString = [NSString stringWithCString:addrStr.c_str() encoding:[NSString defaultCStringEncoding]]; // get device based on mac address @@ -223,17 +222,23 @@ static void _debugHexDump(const char* label, const char* buf, size_t length) return res; } -void MacOSBluetoothConnector::disconnect() noexcept +void MacOSBluetoothConnector::markClosed() noexcept { - // close connection - closeConnection(); running = false; - // notify the other thread that we are done disconnecting disconnectionConditionVariable.notify_all(); - // wait for the thread to finish - uthread.join(); +} + +void MacOSBluetoothConnector::disconnect() noexcept +{ + closeConnection(); + markClosed(); + // Never join from the connector thread itself (the channel-closed callback runs there). + if (uthread.joinable() && uthread.get_id() != std::this_thread::get_id()) { + uthread.join(); + } } void MacOSBluetoothConnector::closeConnection() { + if (!rfcommchannel) return; // get the channel IOBluetoothRFCOMMChannel *chan = (__bridge IOBluetoothRFCOMMChannel*) rfcommchannel; [chan setDelegate: nil]; diff --git a/Client/macos/StatusItemController.swift b/Client/macos/StatusItemController.swift index 88373090..d46c7764 100644 --- a/Client/macos/StatusItemController.swift +++ b/Client/macos/StatusItemController.swift @@ -7,8 +7,8 @@ final class StatusItemController { private let headphonesMenu: HeadphonesMenu private var cancellables = Set() - init(model: HeadphonesModel) { - headphonesMenu = HeadphonesMenu(model: model) + init(model: HeadphonesModel, settings: AppSettings) { + headphonesMenu = HeadphonesMenu(model: model, settings: settings) statusItem.menu = headphonesMenu.menu model.$connectionState.combineLatest(model.$mode) .receive(on: DispatchQueue.main) diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 889593f3..9db07cec 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -44,6 +44,10 @@ "Codec" = "Codec"; "Protocol" = "Protocole"; "Bluetooth" = "Bluetooth"; +"SonyBridge Options" = "Options de SonyBridge"; +"Launch at Login" = "Lancer à l’ouverture de session"; +"Connect Automatically" = "Connexion automatique"; +"Reconnect Automatically" = "Reconnexion automatique"; /* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ "No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; From 00fc2f7076b4f1f498ee8f79a0a28f85cb565640 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 10:49:31 +0200 Subject: [PATCH 16/50] add new shared --- Makefile | 8 ++- README.md | 157 +++++++++++++++++++++++++++++------------------------- 2 files changed, 91 insertions(+), 74 deletions(-) diff --git a/Makefile b/Makefile index b02f7ded..19abe9ef 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ # SonyBridge — build without Xcode. See scripts/build.sh for the knobs. DEBUG ?= 0 -.PHONY: all build run test release clean +.PHONY: all build run test release install clean all: build @@ -24,5 +24,11 @@ release: CONFIG=release ARCHS="arm64 x86_64" ./scripts/build.sh cd build && rm -f SonyBridge.zip && ditto -c -k --keepParent SonyBridge.app SonyBridge.zip +install: release + -pkill -x SonyBridge; while pgrep -x SonyBridge >/dev/null; do sleep 0.2; done + rm -rf "/Applications/SonyBridge.app" + ditto "$(CURDIR)/build/SonyBridge.app" "/Applications/SonyBridge.app" + open "/Applications/SonyBridge.app" + clean: rm -rf build diff --git a/README.md b/README.md index f7f9d5be..d3a9ccd9 100644 --- a/README.md +++ b/README.md @@ -4,32 +4,23 @@
-**An unofficial, open-source desktop app for Sony headphones — Noise Cancelling, Ambient Sound, EQ, DSEE and battery, without the phone.** +**An unofficial, open-source macOS menu bar app for Sony headphones — Noise Cancelling, Ambient Sound, EQ, DSEE and battery, without the phone.**
-[![Build](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/xcodebuild.yml/badge.svg)](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/xcodebuild.yml) +[![Build](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/build.yml/badge.svg)](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/build.yml) [![Release](https://img.shields.io/github/v/release/AmitRajput-Dev/SonyBridge?include_prereleases&sort=semver)](https://github.com/AmitRajput-Dev/SonyBridge/releases) -[![Downloads](https://img.shields.io/github/downloads/AmitRajput-Dev/SonyBridge/total?color=success)](https://github.com/AmitRajput-Dev/SonyBridge/releases) [![Stars](https://img.shields.io/github/stars/AmitRajput-Dev/SonyBridge?style=flat)](https://github.com/AmitRajput-Dev/SonyBridge/stargazers) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) ![Platforms](https://img.shields.io/badge/platform-macOS-blue)
-[![Download for macOS](https://img.shields.io/badge/Download-macOS-000000?style=for-the-badge&logo=apple&logoColor=white)](https://github.com/AmitRajput-Dev/SonyBridge/releases/latest) -[![Sponsor](https://img.shields.io/badge/Sponsor-%E2%9D%A4-EA4AAA?style=for-the-badge&logo=githubsponsors&logoColor=white)](https://github.com/sponsors/AmitRajput-Dev) -[![Donate via Razorpay](https://img.shields.io/badge/Donate-Razorpay-3395FF?style=for-the-badge&logo=razorpay&logoColor=white)](https://razorpay.me/@amitpratapsingrajput) +**[Features](#-features)** · **[Install](#-install)** · **[Usage](#-usage)** · **[Supported headphones](#-supported-headphones)** · **[Build from source](#-build-from-source)** · **[Contributing](#-contributing)** · **[Credits](#-credits)**
-**[Features](#-features)** · **[Download](#-download)** · **[How it works](#-how-it-works)** · **[Contributing](#-contributing)** · **[Credits](#-credits)** - -
- -SonyBridge connected to a WH-CH720N -   -SonyBridge disconnected state +*Screenshots of the menu bar app are coming — for now, see the [Usage](#-usage) section below for what to expect.*

C*91?Z#Uh3zgk#0 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 diff --git a/Client/macos/Assets.xcassets/wh-ch520.imageset/Contents.json b/Client/macos/Assets.xcassets/wh-ch520.imageset/Contents.json deleted file mode 100644 index 6d4b0a1b..00000000 --- a/Client/macos/Assets.xcassets/wh-ch520.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wh-ch520.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wh-ch520.imageset/wh-ch520.png b/Client/macos/Assets.xcassets/wh-ch520.imageset/wh-ch520.png deleted file mode 100644 index 3d308711da860e8e950ab0a11956a9bc8979610b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68700 zcmW(+WmuDM7a!f-xdBQ`4rv(D-2zHW${*=&kdj8ayGt6RLAqOs(JiAJ_Rjai_F-HX z&$;jC+~=HM+>sh;@_5+P*Z=?kPfm^@0oZR*HO6BYeinIy!#jl^vv4eEU{<^w|!`$;s*4-qhmp=(B#2GDy+R zsU|QIqF`*Salb{;?KxNz7PbUiZM(dsrlFZa0p!h)fB_&d6!N2M`4Qm?qVBdYFx zc8lJc`aI^ItT!F&#;B@l11OV|lWqIa`-hRSkx`K>t4!bR1rziXb##cO3ptrTs5}ii z0my4m0(EtCUL})}i7F{63nrzcNW68s*a5nwB#F5{+8NJz8)EN}riexC?0y}!K5hLp z!k_uJ(_w6}+Tr;0l&cUH{DPOk`nlvxlDe&)h(4sumcME>1wD>P0o2sgRGuCJy#qj4 z6=;BI?*J{|zI}UM(AAa96tNujLy?t@Q_lq-wv456!;}Zx{w;(>rVIWIQ-8XDzJ*WR z{9S?0{rU3&dm~SH^FIb0TtiZoLB>(zyQ-X=oTM0)3^1EG{{EZ5uT`kXfy#jYwx(6H zo3F14bd!>w+Y2g=tX-_e?>0TrlKutXIu-yw?)JBqmhKM-*h{zGOG!?C?dIktpT>!b zYQN)+zh%0)WRsEc-ZdAQA`rEQ$8t33DnL(fsZKJ?Ha@v1kZ-{E>}O*m7%i#3zCK1^ zVSzwB4SbkcZDbVJ3A^;z#XNeKW#&+jT-it!4hfsHlDO8bomkH zeURy4+jYkxOF$vlpy6_>-&NQYNSmQdMoo`4WSeZLR4qFLS^DG070jU;6zp6SwjNl% zSkF~?dAV&>rqKDy$i_y1YA)aIP_6L9GwZ)Zc1nPsOTzcV>HY6E(w^i*@igza5v zy>*+VBr&8=OoPzz+yQgQK!4crUsdnNhgby++rrI|-6H&%(b1yzc9CZ_!aRZj+1}78 z45py%Cd6T;Oq+-I`CfLtGh;(#dqS5kuP!$*(bT;j8~M%>;PPi@L{gLv@fgIWrj1%l zT&AO`OFUm$dz>sgX*($@j!I~uGgyVyqt)XE4)lg#Xlo+_eI;EFrp?X{j%m8$fIwvC zyy;S82vXX#(>Ewlno!xMSdO6mpT;Yy>gwvl0Ko=Y4G=ansyt?nk+CMPzP3@P)5CnZ zNo7@42h6S3XN_sZmhs=(dB1b}T~|7^-O5Wo>~#4(GUp5G&Hb7nLyNt+xhX0vWI`hV zV5DJe%MNp$ZF;2Py85#-ZIt264PsQGFZB_iKzg4o#7_k^wJ~ld(s-FvfzhZ_v|qp% zTxb{K<}44IrT?vc#q!WiPKA4}cX*lj{2nu2^kT0xqnEk3=&=0tjqKOY+mrjd#p;i6 z${188Itzk7Wy2x>S^(Z19VWfa83162qm7J5&x}P)OD!=@R!?YOb$YB3fHR8%O4!_> zt|tKyPcV9%B_?d}+bvds9fmnBHt;thvW3!GVax&^0A@0>;jt3M?<`O~EgjdPOz6`d zOQN>Mzckx_eG3hM_rY%`9Q>XBW(bTOA0N-jRdjZQVCZA0pax?27ba|bgSli9`mP{M z@**||rhs+Ag&(7EYWXc-AW|BdK7KDMAe3P0Q2{@@dYB?`rzZ&I@Oe0{zEaAI>(v<1 zaTke@IYxL`OagO{^Pl;0j|KItyO>4Us8j!?*Qr-I>=o%42_3XezPlVIZHE|=Pn&uf znVF@1;dz}R;qQ>>ZF~<#K7RNxJE$Ou(LaqO5kZd@F>Pp8o4ugnH}G2L%lY>*cmZ)LW)n0F6*M4Gn>M<&1`JM5c^?Oarl?hYkBoD!B;>4d?xY%+nulQE6F_DI4)QF*P7g7#h|Ew^>7U{lKBK&l3BaXm5h9;x z>vc*KXr){fs!L&m17{@^a5?KM13lZD6*x~A{Uet+F+y%%Z|zpMN|16~22 zGrR9+pKqb?N5`Dcg(3BYKYDcn50TFhAIK)|2f*ZbI=}W@;JEamxJ-DkJnQF;hKMx9 z_XCyu7?!WEk^z)LNE*3AO-hdV(H8KR=l(+Z_#YX%FCQ<9nS`*JebHl=7Ux~nb40G! zWiR*PwR#;}WGoYePKf;HV>W2|tb0vx+O`i3IPXDe8P66MWn+6oXIzN_tS7h=NA$2+ zxse$numleQZhD{Xk&E^!r$#_HLFYrnI1#qJ1XeHvmGA2NMu;!5f@zJ77#6Ho007wm z!iL)<*)vM3eC7K44Xp6}q`f=pD?U3SmIBS;vmD(wzRXy9(z`%b{uf2X(^aWt_H{1w z<;Ek|`>0%bZ!$ZR{*!vN9At=%n*0ffO7Iju!sl~yGXE9HMH8b?u-WERnTv1+D$>7% z)Gx2(`zqYFr-~t-M@cvI9wjrl9DPw&ON;nHRt{XxJC0+%?m51#jLDp38O^e&qsL;M zBKj+)iv1(-q+*%L+QUodLWWGj!@ksWl6UrbN!|Z6%f)ICA8g>gPl${L^4P zMTEl=8pDYK7K1;;N^n+5kk-r(@>Nt;i-QrRqE=TW=V{5o>#v>q-ROUaTBuyI>UX>5 z0{7b;g$bPeX(9~-n5kd{er4ju!^5-Xp421=9PIGA)FKHx=~pGk!*=PRv}dj%D7U(o z^p$yaoW)Oqj3sYIJFo$i^6K%mb8wJk%n%s$S-i|rl!Y%i6hO9Omm^77zKGv;T)vz% zwXA#ZN9r6STEOchhblv_!GJXnD1o5Ex-U84c(0<LHT+2$)Iu^IP+t1QmzavyrTWmnVoJjzikc4{}U zhZtCxcGi7h*_RH8((Jd=Y%gjznI+sW-KwDjrp(|rWhA7Pt`!S-d2+o9Wg?&C1X8*NS zP6*bD7+2&VnnBUU)tq|j%P~dwUBAim!xFbat7$LhB@!Mgpx)>9lvD*I6c*SZ8%18+ z-}e*CQm)o}O?qxc7-jA8QET3!K{>#i{N%(a5 zOSf+2`_9vohAA}~jASCE2u#)3p1j*o6N`tdL$<)cSvwTRQd{tvF;ed@gDAC}!pMYQ z|J74hHV|=rihxIJ>4KajQFBnHcO1m=k#M$GK>{(Lwlu{Z{oQjzXdyfSCFS@>9ttZr zx5IOYN5}R9M@{Qi8j2#KI3+%9vq;{j*ZOVK1b8l{TgRr2AvK_F9-D%2=~3c)Zk-0H ztc$)6WUb4qAZ=Ck(v_dGYA(hn)^5iIf-D&stZ z+1s$<&CO9}OiXINNiiorP!Q1)fbiUje`talqaY}Mh6aE&iqlpG|05iQSu`IE6f22bntt5n&FH4j&mL{;xOz z6BvlhjMYclD~h7uTB2yd2%@VaLTl*DHy9HNdyJ=-8hEB>pW1DSJ37-JFz%=tIcfLt zPBh@RX0}_Z>1?fSx#d?(?BExcOSER(*6Dg&gBf4m2i&JVV&mY9@zjQjvr=Lr51aNO z3U@02ghS3rX?&*dM@od^1jsML>JN=1g{0BLbcYz|QcoFkC2?bb|nu(w&A5G85%9Dw#iojGy%__Jn9Q-5zLQYtW_C z6NfKq>vv&-9mlu+u-mRPv4w*(msnZEkkhmi$&w=k??;3u2|GTnlnSl`IagFP==uT0N(*t@U(0}rRQ3GyHXtE;!od->#8XgT?mO`NTH|a! zp6K=-nVDUx^UYD4&$GDroj|L*KCB4^Jxm%8t~$qVHH%4^B`=W|liE-I3EcB8PEJm@ zG|;m!oG+c%i`Vki3M!BH%<-w(%FSQaKD?;szFc)TH8(FZ4F&;%XE3fbY#>)bfhGMI z!4SSRn~yXdC=l{8$82rmkip?5xw9EFV*%|m!!-57W}MyKLkD#Cd&272W>!%rNsQ3@ zcZJ~_Mh>l;VLN>|+$tg>f3zWI44-q;F!Fx~-sUx=C+?zb3U|Mas+Q?rpK&SBx7xYvUM5hx6S2R2wz(&4Vx z)Dgkq$mp=$=H&n8k7#ul^8tlcm`E~G^3U{LO6WhO^MaUtI8sS_&g*^GW@<1@t^Q$682*4GPU1o==Y(&jhoEZ=W_W0{mc|w>i(g zSL}$5k~wWZu33UUKf~Z;zMzxrnfM>XRMc4GR5vAoG*TH!Q2}}`WaS*fymEwQJQG>E&S~!M!FpNVZ=0}N2n4Ns25|Wn>U9gB$ zNi8d#DtLaN^C}J@g9Kk~xLS#f%AvoCi1nGX;l%wlk;ba-ZNxP@s4GXRyJS5%PY@8c6|F#nYimGT7PgZbn|OO8>`J*%^p{ zv9xU!z7YcNaDa9x*AeT%H5y-sJ7a;eCJ6vR*;Sn8l$7JXRJ{^k&5BfHeSsB?sMwZt z*tAE$^JM}$vvac#s-o2E>oM)SHRm1I;6yv7Kd(|ts+GS)!26zM3tpKp0*`l zwnbqb$2BcxNuf6qzCcsZ-3H}>AoXhis+9E+XN(F3tdqf%9-9%Hhw$dlXLpFJ8y5y4 z9@lo~>G9cPr<9$st+x!m%ATgV&V$moC|GS(&5OCB+2%IP_i<(E!bsu*foWtb{cjpL zCJ_%JUG@&A9bgwi@5UUL#)zEhirf9*fp7h0hcp?ZR+JHfcPT>+(Mt8JnTO0LlYJH$`byqO3BZ9+zS-F+{|#}N7v~4#Gq+m*YnbHu z07>_HgNMV!i9th{$MxJDNg9|3tCRQfG96mwf=#S>5<#yQ?>May8CzJj@%X#TWj`Ge z=v_cRe))(?e21_L^=K@eD0`RBk`a`hjjN_F14tM<5EukG&ll2g$KCClHv==%B#FE$ z^x`9=^K+WRDBuiM=?fVF(G%{)&JJIltAmp=c424v2L%NMITaNZ0crYr9t%MD3~=qG z_qOX+(BSyHvGd65<1YbYAJ;>K`App``S1XJJf5)|2bTiC)01nlcEu7rC{;Lr|L|($ zlejlG%9a1)ymo;9l=v;Je>txb;$TSMkMB#|o?p`l=7_osMw?j$Dq5L>@|FpOw0M)E zgn2dSWA>--@aZ&X21^4s$I%LyIR4x@Nrv<$^GcDBs`S+X>uY4~hg->RI&z0Uwi*V+tmAmh0#{tD3*ZlmleX%bXG}f)b%#NBdtTd%Ggho5p_@t9}!~4@V}yL@^o`PWYX(N2tHfP zpJ-}}$6rE|5^53E5U7!sdS%Y=`Ly*?NB$$2M`gc>Q00JI^Ac?@hP`tzuGLm%PAb%E z@rtNe6hS9-`%d|+yY%Zn(|;nu4K)sUz6S34GR0_bI`U>$Vq;F`6%bK(;Y|5_n%Y&K z*~YIDE2Rs5RE*yr6!-DJMIeletRG3zh*N=bf9lcgbL!D`nGFxU<`n7&#k`#Rv)Wu7 z{BMCzy-;9WeL(-Q3A}oYtNY1pJlLK8tLfgJH0j^U{rWH$rrdD29y&2nOev9YC~s*= zTXAuHTibopC$AtC*{?4PigErcGUM97K0$*fH|yX(M;UIKRsvt1McQSavi zO~3|7ea}?=YARRb?keG5lI=Zt(nYn|{!p&Yj9EKMOb$FeC|KSN?oQjc5t2)UWMCws$&=J+_-6c?)uTvqhg zB@r#G^$FGuf9zgGkPl?~k|f9_5J^my38{QSjj(w4>i|c!=z6?w4|1-jxH5G4Pi3m& zCo6$eOjfb=M8UCKMO7#Lhn_WqzwEH+9oeT45t+OkJj1$Q1Zuq|nzxNGQce8t3*mne zGqW}Zk>^`drapsCR(?Rs!xv{^@q4v|dt$#S=Zx4r&ui<$Gr^KK5WO4lTjTp$_(Lr> z_21`9kTdp}k>p+P>sthhmuHz@c#S5lG`4Aon&jlC^R@F+Gc#3aCXWHb-$@nFD5)={ z9?GbzffNCcwpCw_I?Lp_@TtQ11>KpKr@x!3s`DO|_0!?s7U)aP4(ezY75|I-&B<>X zg2v{OdsIgd<=-De^vV>zj3I@vh>h|>BX%NbC&+L+*O)C0?>J`9Mv}ZAB>e4{wTFk9 zb#cVjl~ozG)gR;lpEepoLPClU1VGu@M&(#2l9;3wEGO9eYHArpfql6A%I>Z94se_;M)c>Dk@T;j{SIXEZljG9_}^& zs80P(Z#RYuuaVcOxDK9ZQeJrytcG6#ao)SAkpyYpj`fPVShm{K#D|0ghtY3~8!$n< z@p9G{7vE2>EL_hTf)WL-5%DbwcAaxqW8lw27|gmEg)nhtQiWtVG4}=!G`=+EX^?i+ zbP*1pnL{)vF9XV^q^ZKuW6K*ziPuVVIWx0^oGhdq^SBHfZPs=k9yp*6i!EJw0OWKr zvp(&WTrVpc!1Fhb8imV=iK;Y@=Z!Vq&*%YUVNl-oFoIMfNGafw6l&0dYpNZYCR;N@ zX&qvq_Hps!C+)cyp4{)aBO$|V%s}|vkV&`uLnhKxa*2KB-j95DjzCF{woHZLW==LrYTeww!| zEJ40IOhDT<-{1A>+(zx-2|@h`0&SlV+2_C@M_KTl{KhtNSsoK$*s(?8PRo>fvshQ!lkDfm)Ja`p?SpUBTa#mfYm)buU8U(4851VD{4ncfdWH4rd^844pWgK4wz< zaR`W=?9$v>bwN+|#*~k4bb;YxLabw3YVE{d2*h}teEMQeQyQoDUI3bkfFISElH zp#!AULpKeLfHJ=oz+Wlfh!ug5XVU8uT;>fT27?Zq$dDDl>OeZ5;C0mPm~{6=V>uhC%``fK6i^px5Z~ zf44ja5d9#wIvE}D~oc>g6A2=*WD0$-OnQywT=f}gkr** zDdSO9)Yau**HKj^NUd8yMJ}M_zXYu!!63K%uZrI?6$T{`d1F_NXk z5pm2QAta1t?)L}!QI*Et(vtxQy7TgHk7Xd_Ty9soORV$<$Dy0_;Y7A*%k8e<`km4U8nJQq9jrAfhu9xi9lOX8rj>`Z7rwONT|gI~Yu=+}-DcnTXMU)#NqHkNL%g z>dV0zOQK}ko&REFdPT>&rKIki3VAUhsJLh)1YO%=s%Az6i&Wn-D^(wFxuY&pFcQ8S z()&G~tGl|oFBa-ag%)m|=i5h*q6Y?^+UZmf9KRzKODc{&GsDD$&|>Am5WPb z2-y9fFLnd23!=EN<C9fKFalDf zw_M)h8N6jSB06h|rQ%)u@r?-tMwKxi|62ZyDfrzgGLJK(N&A-Ente2|QIj{o)L4)6 zqx(?PlJTR*2pgj|v&!-ZL|A2kBYY9#sl!v7TY0p_n}?P`@!#Bq%Jk|;d;y%(+<{mk zY&B#!MhKaQyS%Kdb>K1$u}L}zXp;_w);Vpzc1(MR1Q9*7l>b#wAa#w!BXRt8EV4p; z^NiFltZ}<{CQM^*F0i$&@SL`y&NqyY(IhP4P_ulKwBwEyg40&L5I?%u>ihjERi##K@tW-@;Nj-5V7>D~m zufyx5?t+?{8ew6y;=DZ5?AoTj`fXaKA9eu-9!nRq* z8YJSaYpLP`xjTnaQHIHIwq5`NKS35+*4bWG&ixm=-I9oI95cek{`&Q6QNNt%;J0zI zCrErLX3z+?yIaGhm_dKTX{XH`w(l$~x9c8IAcC|6((uk_A`(Q!|K&0lZfPwqFZ(R*36VvtqgbNs6-f>UV{;?H!b*rgd{xcbQ&DxD8u{ zSQmc9RJxgr6{-5WJTqfYl~f81kT4iL>U#X9#rN?al#kpYP0eU;&*nk8rZccIh*{kh zEm%%C&?ncP5!R5n=b~;q?}#1@6cG_2KRQPwg3QIvc3dqbB_(T*l`_vqn?Zos#_Mpb z5PDG#<^g$&tYTKjGHxcjZ!c#aG<3rkK4(-FcLtXhTA4pfS^Q3;OrEv`C`^3MSH90d zj_f`+C#NLSP3sd`GGcRjOGM$7SqOX)r&yy%SMdIibJB=kcWV9;v24X1xbMaHmjC`V z9?Dg%#-gK>zvBOu(Dzxt`TNrznciXT&>BB>S?&6*h9C)qM&m?ezfBIdsv>;Q; zmekV0!MS&~_)V&z@A>i3@o{*#oVq1~gz$5*bvpkN7oz!H^R?a1fFEVTJ(1DaRU^K0 z5CLq)b=7s&bpv*Ia3Z#k0HWSxwTMwru^wrm7U=JZ20$snhM?pRgFkKHY_4K>q$p9F z>HnP5K|^A1-?dzhp7F`TFCBV=K0p>ry8g_!y!6WG(PA=d$HVyXkH;IM_N$`IWS_=* z@9WRwJL2XRBgYKRfmZ3Ph3OOtSOeSs4m%|0);9Eo)<7{&$1Q}1V(;?bAdh@My3}>^ z6CvccrEMPbd;-wge7%c9k0EpfFWWe0ztu94U+`m?A$&7+o`xKvUK5oxX&ty%aNOFA z*nYgkpZ9y2-Ho2-TW}RMru!)b`}s0^aq$ec&SH@HPo}oeLRgKdTXxaoI>zGuz1&#T zlHdgtx}>+ZyeihA?m#bNY}&S;<1^~-3-t@YK@U!#s3}(DNADuKlUhxu7Sp3|&UkfZ%WeU3;`Fx+#sNmqBVI)u8Jr0zK zo(|YIC)a#1n4-fW`PLJbJ&G_)MLqcVP+a={d+P5-+qs|ae^z zZ4WxEsn8T`Y=E|^P@p>H@^@0p{b)G6rTZ>*RC`R=%$LXK{;j7SE>o&Ctta&aIRP*C z;h(D2`O7P6)??uK?MXAfqzSE1CMB0Dd@Uf+>?O8Xj)yy?w207&;Y7$V4(sijhsm0B z_tS2!%N%2L4?qZHh(ybb9|mb?_EF#<9r`a5!^6>ejldG8Tni$l(w5ZAx?ywhlf9b5 z>b)4|g`oB6>dvam)bmw2PZQjxxU8&f#!psa{=pFGwK;JDP~9q zAwxqZiV8;DD)i~CxA3K{SpWkFX*}^)6#3sAu+tXwRp}2MU7eFpj@cn$+}}OHiN9Wf zzPuAY9yg~<5ZcxR3A>(cG?H<=FNzx3OCQF0MIe5q@l2vFb{;fZQQ`WFua3|c6pa@| z)o=Skm`lSC0u?lTq9aTaJ{bMmuS9vJ!K5E;57`Bkcx_+a&Bzx0PrLW@LKe~Wz|&Y~hrd1vVu*YVcZxRBq|uQRTUMf>%(R`eHS zHhY#3WQEBLanbUcvb)}6V;|?}=;__+s-&F_jR?g{hvPS; zrlio%GrW(e&8jW1yz`x)Qx{a4q8hfr9hq1~{GDt{ayuI95cVl$r6by4vFhV3%i}F9 z*HG`HD6PJn3xE@KK38;AmKQXGETbmKK-3@TXhM3!-jSk|+q7i&Sp;wQdzIn@Ync0` zD1hkvjc4jsa4`Jxbj3l^(t2NlBAw4tN#4xNtTH3@Pn7%%ODdPQ zicHv*sx}E1fAZJA%5K_r%p#e7v-4fOiw+Vr7#)V5+Z&&qezO{(Qv7K$IlL$Tqj`Ow zt}hXTaiQqq`A>dgJx^eMei`s9v<)3?nN%*jjzUdceJadyEalmaPpzn~uCBAJ>>w}` zTcllXWLHoVFzlQpM~tM7iuuB+-mgltfaDAPX{}D(l!1{z!g(C zvyPIA{F@vU_+(!wj&}Tsjosr5{AH#4dD2rWpR8qVQQJ_*6%(56#>y%`sbfv+&DG8= zlKV@DF;8Q^916Q_x1EPB2~zDNm^b8IJp|LAnL$lc3KAjP=oQd5FvAqmt_!q9K{6b9{p;rquF8HxpMQS24cs*|S^eaOO=PL=(v))qVfceUGrRk&6pJP~pjz07KB~ zQM?4PQPQwSb)ikaM?m;#?(vHF!H^#amAoW>s(`gpYQ0ASVe0s{b3O!A-y6?)zHjN+ zeWT8@t%03bB{;zA(B@nPosKY zes|ihNUCJNwcpQY062vO{fglENv3?oe}`-Ojxe8XySd3oUyWh zvg6~wtf_L+%dg#D-Ara7Tv{&Z^C9On}fNq~RNWA^z$ zQ#rJzrKK5RGM3AU%mR2_jIcmkUG^tsS$&0Qx!VsI$JaxrK(_z=r$Pe)Ai>S>IX^VA zq7gnZD{qGBnsU3glaq=6l*g6okvAjtT{U!)+bRSTVvy%Xg+Nyaw<;=YlukP?CyV^I z21-qw*W64L27k;i%!5Dqt^B}Ek6pB(b7gE`!GYA*#GQ_qzn=8Hu1;M1?V0^A0XD9hg@`eQogbt1VMvFW?uM7f-o+p(!mN3=ye0=N?vex9qNWeqs z(&-nQRsfPk(X+b5y~XF|o&Z4Ia=oQ;{imVWd5Xjuv)?lb8KP-=D4^UX?kYP1Vt z_r*}(j(7(~5Aqn&+Q^~c#4SX=y6BB&9*qZcALc=%q>TRU)_<#Yn<#19eP}7a(^?#$ zIq$K1&|H)OlmH?gVjHOLc_$C=N@IeT(Snv))UU7cla_~9+2tR?s|3VYbxe(3r!O$SFdV!VhB0m!p3w9{sYJ*TIV+(!HD@{6YY7mlfb8`vv8`nW!h*|42AvGf^ zb~uBvO#K!$?a+ED<>@bs{TT%$_Eriq%=hmkvHh4m@neZ}cpO6W-m$#drbxH9If zh<}4q;*dnnzP_}zvm1+>q*XU)v6{g6>Eko^%M*ZWa}s@OAuSi8(xOg@jQSMjg=`f( zgTERcnu)|p*@Tq0L9JmKh(d|o6Mp=|nUxZ%IRan;VAkx5-w7R?5|lGxd#hzPdZJ%o zKqnEF%WSdhdF_!<3Zwb1r}krshpF7hRi`&|+OiKA=(7>J3SjCjy!048kD@97RC=`H$#X-G50!iUz;2kVrfmAR$W>@SUGu$AFwOos@Nml*u!@kK zJLff{JB-{9i%nYpHm|tT)n14#6g3qW6IfEd*(8h<{POn5#tq!b!pG~(OVF(cn@Z;P zz$DnOZf%tyKt%M`Z~#v2n7h>K>5q=Af+$A&tJs}aPF zhCGcVv>_?M69iziU^7(B0iY4~hW7-2^287K7gwPNeZ2~}_?}x-sKjH75EX7s+JSxw{_|rX#3E86YAM!pvZv>(SOhHw!W6P_ z^3Pk@qO1451Z`s44LU0&si|HR4M4V%3VU~h1PKaE?^*4&!IJQ#SET@;NFN=FGAK)V zqhg|wt;+{sUr6nr7RE_rNNh(V3d-LpvG1!di!CqP|I}*np+Zh|-SoF!&d`kfWGEx^ z)({;kBV3WoMPW*wS(z)0SaIiTObyimtadbH*eRYR*Z-j!!6pk(y5*yQKgcthGsN4J z#VYk67zhAexy=rbC8Zv+BZR3Gh-O6)h_MlPe3yUN&tL(-mH^uyR=pe4_l0kw;>Bg;Qw621876r5fM6PSOJf4+jT?t1;IcCL$Ib9C*76q8*fe~4vf78jDU(I4}P(G?Z6iwIAz`^&Iw`t!cTQL_)kxd{1lnv#sz@G`I$-mA~TP*8Re z*gUNM^Fqaz!^=>>6NB~OEPNx6=w8}6=2*Vp6*bz1HNGe0(&8Oq#%n`a`aP^3bO^FW zj{;7i={e9gup037jBW`fut#Yl%kMr$(BB*Z8^S$SM#nJO*x0DXE0pP{7Mv{bU=Jmx z31wd6u$L#pt~kzsZ}6egmKH(8+O^)=uiR7^{d9jL+s}k!mc)*;K9PZW=)#r*cR!o? zb`u(Uuo3E5gdmEUI9usC(M*v81A%COMntQ1B}HF)SE82P9spbK?Bs60+bTgo>n8Y9 zFMGZKSgjv{9CZUa9j8{MVtOw<<3(#qem5WOlfXUnu9XJ)`3WhDFjSohZRen^bIu&u3^hx z3=nNl&KZGAb3KL-*XZn3?d=~j=Wdh3taLL(=C7V?Mhl?HZU-VvU3(D^24G3ro8o?Q zCNPg54>cDZ(^-g6jiV>H6p?Stn{)oN;%?5O~a><;&Vfp5P$eU{_vCG>l2xnQJZK z@WJqx#=fjAx$!<97Bm7&I(9X;>(&~9cPyOaG@OkMt|N(W90FEWPDRNrJ=&FYb#15WW<8PQH%?jaU*jWg2PClao6q4U>P|4u4VXGwH}D z?4e+MV{$*-i(InP2{-WG5Fs?mMbj~`(&93Tx(HQY|M4KUtDXBWkC1{_+faXyuxijP z7Mlh!pt?)hkd(UU@)W+enwfo?`4ymHA1XaY){e5k@gd+c?NPxQNxhNm7p5FPPrRYu zgg~z3<4J@3$!SU|Q?V0l-F$K@M*nME+KzLLe8H^`U8PKRR0hvXr$HB)y5IsuTBmUB z_*hxJ-~OaW4^||Ai!MQtsJ&GPPjF~99DpSg(C5(C^9J2}^MhJS{}cISfhq@8vTd{7 zdxF$mods6;ZYWvSQiVDiEa)yl7Kh@kvF~Q6$!O)T11)`h{el;sV0lu|u-)oc*S81w z)5GJDu8e%vE=GdXfoD0ca(q`zwS@BA9C|fk#~(TL){#viy>l)3$cE9z%Ox3}8|7cAc;ba1=`}~cBZl&dl9Cd%a&8%` z<1G{(Kp|xNUj~Je zzj@~&w&zgm$zZZ{GH$RFkXi_RFE9*G8_mvvHBe|FI?K|~5VPQ;yeTip$c_vW3J1p= zC^MAtsOlEjuzT(3_Xh+H<1HcVMhF6-Rx}^Y_uJTx;`h-F0w!%;tF&L3^;wx;_GBKm zO-T+@QG!YZ$V-Tkv=MW_JO8UfVD{}l*E~fjQHAsm25gYcjwv?c<`O+RDjHEs%yZg% z;<%tlNGk<5<>=MnoOT{kJV2*M3t-$DZi>9INgS>)b=hm}6(La*YGU=!Xd6PoY4i{f zSCTc@kd&Odq`|_vKFmPWD#WCr;n;J=5O9qU3YsiNY)Ujyoe}*P+iNS5#lHn{R|Yjk zpGoIX0qgoNubDNe)rNWhNKOH042?vAV{oZj-qfPC&}u zv3>xfd)1cR_Z_-Qc?J{s!&2qxBSN<(5EmD0xS`54MbUqaiwofF6%75x-p3(=E%J?& zaKBgUESDq6%wDe!w1ZcIPl>IM20=S?j?o1~4HmO1OJ#V5Qy|0PyhBG|K@77F#!G&YGaDa#T1c86pYq0 zppUrab5^EI9usYKNWa-b{q4iGk}h@C3;vf6vKnc^E>;h{PCHS`OmD$p+(-Kj+Cf(0 z@OUKl#~YaXzoeV_hj1jtGMuSlvrB76N7wYSwH0h66VsCy39U@v_C+a{F{k5h7hW2{ zrrF8kG9??@vGyiA=;)i*ZaKI#!qhC(Ox|8!hI%gJnIN*H?@;=}f>3X*zLp(3bjD$i zWM6|!*#Hu05{7Pgf$zR!6e=R_)5&2on!W+#S?U?5n@C=>76&-iB?*w+gLSO$#4Dv| zU~S8aJK&hKFFOHIIfoCs-Qgj0an13Ag}%=pp(54@jLsco5=62;{7xfpwE{`Jdoa3{ zjjzM7pf38=U9Pbt=|fI2WZmUnz~Z$hvkC`5rv2GWQSm6vsNL1}qJW~46)&t`7yxay zUrD^26!#drNAUdnSe)x~N(cz0bZ_)bV*tuigBdct?ogkLxngnNcyJA$IUTVaWd-a> z?FbJyt7fjx&(3Ngl?1)Bc)|c6raq0jgL5RFqo;4I|KsQ^!=h@tC`^OoAU!llcf$Px< zMLz1zC5*_0BY=eifCxIgJJ{bHQCQ#H|2FN4;51H6uhKws3D`Tp2Up#k_u(0Q_?A;U z(-4Moz5vb{>P7sc^1a1#*LpjzH|NZw_N&ACfKBBp`&Uy}oSGsIr=={jANB=@(+{_j z5)fLjwt$b9)pqtyP{09;k zNVW`M`T~`fQ|aGpafFeHa_;oBx^~VSSML`gOj$P#oS~^C7Vh1msto|R6F7SnDGL(O&*P`&;yyw$-MTR)qBCc=d zz1sme>K?}pMi{ti|9g8lxVQ`6lm~u9wxn6&J-ETt=s1f+BN!6EX(0kJHr1@iSQFf< zx#BHHY6_Tuu2&}F;#`Dv>_;?M4mA2d3+o6Z&e_uw$*{?!45U(^2z0HId~D1}(TXfLkdoT+ zFHfg80>=bm#$UqbDi^A>*DRr4Iz>&DdNaal!)&9 zDA)987q2=~O&j%mqP&z6emzPD#|P$b!jBQmmCzxRw^K=*hTPVioqxAwNZ5`4oEN4j zn8~Lh0}lexP6f&(kadN4Iq~7wh3xfS$l||@u)$<6bb@}k6|A!=WGWE*Xjke@_Vs#4i{SkhoEhqYcX8ezfWHD5OP~dfWwm#L3 zcDl~@lSm|0h+gpuiU6PlS!zS)ns9EVc_^7J%LHeNrmV_O_o>+^mDLEIy#5&jP;EYP07J?rd^Y70|R9QYQ-ML*e7Ftd0h`hYpWszisy2x#6DHoG%Y` zgy$CK^(dg4r&YHeGJc%OPP3!|Vp>V`+B8>|EyFMYoeK9eAK7|__thvEwzXA4nu9x% z#6d=H?d{i@5*a+#+!q_feDBtgzH~>eeHh8B<2J;ph*ZrKJjFOVuv5Pj(2LiBud)xM zbcg?aYGVt336uExl9guSxwfcaPvY&3JF^Vz*4`(vKbDFo2R+zD9DjQhcxr~{``{zS z97mfUyP$Nx0pyIj-;pJ`ox1?}z@2D!cd5b4t12d}rI3c_k!V8iEVS_=h3Q)ML357<($m*dy9S?}j~}pUc!y2-t^T+adX8%isP+ z*gg?ZcJn7Y&Eo$l0;!&iF;GZF7E)!CfFyAM+pa*>^QjY)wdFWe3~e-A-GMN#e&HG0 zTg)?3=s-k$+FXJ@kXE*#P_F@v-uQkFP`RZP{X3 zW-GqrL21;2X{uTCaJjuaqsp7<`^t+a`mu(Bg3hM{6`GBIFLxx48;z$%e{nPnZbBvb z1yS(J#s4vkhRtC{_z?$W&%SFiU$go1NRK)rAh4xj>Nh|(EJtGYcRmZ8nzsK&Xe?8I zWpPpeJo+t5rVbPQk(b60F}xh=qvp=RTjK4{&%z(QE4vpTKz;TtD(Y%aMR4G68sZ~@2-DzGco@Mx*a#b!^LzrR0UL)_e96=Nl|jUJ>?zhoGm6Hm!F9+RLO8)-i6fo;A|f9 z*_0u+b;|0Tu$)2PcdrH`2^im`aT%wY^Zh1Oc6GfT128kZIP8}GvcKGgNlVGL+z%28 zThdF8q}j6K^!ow?qGe|2uF^&E3=qN*;8YU=+ zierl^EJ*k)vJHODE{2Xc((x_jlDjKGAcTmq$DGwNOe?d$eq{jv@pp2e^@ZtaO&ti~ z>nb=lCIO<&Dpnf5E|%Dpsoj?C_d?kE=RHuhYyb7lt&sH_r{cg_C3KAKRlqgoy9hY0 zYlQI72lZNUDa$7_P6SOR$(-q`_~wwUku-(dc+p<|&|2CKRHfl-Pj67Eb*ljj6Rt^F z9Y8ZSoST}u7zxe~n;>grx5M6jPis>}UeN1dwAt#Vq6KJ*4M3yJlk^9kT5KAxQ5t)+LmI9HI@mB3PZ z4z~>w+J{99y)-tG2=Mcp=m_vzrq#RHk03~PtB{iOu0l~73-p|1X@6|fE0Kxxx)Cz7 z2@m%k-&5X)vxImy-^?fn`uE}pRgSDtT)FViEN)1kyDF_VSlAY}ZpyTS8LMxH=O5_* ze6vPUfXA0mBBpOtWUt^qM8C}f9%3xM9%t>lQ~5G-q~2Sd97PeOik0NS-u$BRVKCk> z8YgCc{a{i=At@a)y1`2EUYXOiRp;Gc7D4ZsqW_FvPkXM8l-^{SgoNx?R`t~c1^-;{ zIYo_NtwcQfiZ?NpUJ2~aW4m6lSHli$qa#;)*t>DiGv?(VzIUp!0ohC;mM8r@ti29l zZ0n3h-VCpQ3`%R$*AM!VHx=t57Tgnn+OhNsC9cQ#pc7_wzuRE3G+YWCKvV!VJ3D*U zUj*Y>JY$FVJ&fw;3F2m~s1JPvU+waaS zXhH0>!atLPs^1NLem&jy?wT&I_((gFxs+9p(`b0-B{TTR(g1wlc@@QW*1BB~-MCx3 zy)^otv9k3nCr3%>(~oH%%GiS#ByD~$EHdDFWysIDD?I+7^f#|BVMACP&cedNp48W? z-`eUOR~nw4AIiDMOtFXy!AtkJg}ez}KiMYOWPQo>zQU`;zOhMiW*iOb*n8usk|Au? zjdD#+CW)xcOi%N4JWl0Du5cfwFOuS0<4p77iGLo^x4%2kwIzGNK9Zg5kyV?IIF)C& zI(T_me>04CDXsV2NVgqGf9t2EBp1Elm`0GL#FMpgTXS13K7)+Nrv1W)K5jXu3m>@- z?LOhPh+g@76&KF2$%$S$6;^Y3Ib@1`_AXbNy`&-%JQO21Q6kS zQ`5DJ36BxR)y(fvy*mk0eUVGbRx-X^M7lL>*petorx(EOezNN^7>o13j}wQU%Q9`4 zfN4T9e8)zn>fy%0L_h2FLw3danV;%sS#W=bqsb_haL?7aC z%HSu1;^DQSKwn>%b?^P>y_9Od-Rd06wxLniZ~n2dSoSV8RL$57lsA|c6R-U)_e!rL z+(z7gN-5t)J?vvMy(h=@%h6CQ+Gaz8UM1}^Vho19y*sfxH`OA4hVte+7uB&?Pd`jo<(gW_c zmcHr!=Rw>f(5c+f0`lV~uE0~3%!ujaTYJc5{BcMoEv5<>2kYHQf`{5l4}Of>$XDcO zPqzdvhWEU?DJi~*m$-C5da-Hp)924!$%VXbr7nR+m4%r360)#}Ur~hU$lo{ZtXaAy zV3EH{rr{gV?UKus#F;?p8P^ZMO9dl@)ohtGBSc3Tj=Y5hpf%NI`6$OI$s$w z^weCEv}*M#j0ZzQ#mP>`ZXnimRMo#LU;Sfq_;5v2=kffIx$^5*^nCJk4rL*)K}XEX z>*C-Q?b7c@J!YWQ$%NN;pX`c16hn_SW*M($j-CA!+*l=l1D5R%W!d7-;gc1izpZta zYklwTJN*3*8;g!)J^zIYT9{TP-tMs{--2QE6QU-zHxm7-dv;$3qcqxJ zy%ysARaLoc1hHHo!8%O}hAN%bULFB8tpo$cvv9`57Qt;IE#8Xn;L0T&oULd)3k z6IiHzt>+y6?NN+Er|yZ4p}1JA4RC*3Je*vX<4~HKavdI>R9YdBJ=3!L@k@`TY?a1@ zlh<3UCG0jbu*s$I{{C?`>NK!5vaQAwr6;(7Dl>~k!m(m(Z2VYAVA8Oo1z_fgFQCgD zvX(OKwXK1plNG~1-MmfvDCqX20+p?(>MaX6 z#P)qB+j3;=^B@^ga)<06Ud{oudjvGGv9Y!k5Vz8>XdU}!*@|gzTYMO^W1_6j<_id3 z_^U&!K){ebH^bBH%yz4Ol$G^Q6%g^)c)%SNP7VqVuK2a`>-gY&YVEW+m~4zRoo|BG zWjuYHSLOyn&AKNN;Py3QcBqi5Cq99)C*LRUJBMMb)$qi~$jB4p8j~cXwRO+kGd@c? zxOEnn_K37@OuuWupJ@&;DpLX%bHa=nmvq8}2G^oD$YysJJ#6;vK>o+&_Ir8uH?k#Z zabp%dbYniDEQQ-ds$eD7a&m)9A9QLVYrkF3CIwo@tG{$Y8B9gt?Uvqm*JtdHS*zxnWDUaTuYOR}e2)psfCh+EG5C zR=ykFJDpIUde{@c@Ac;;O_flHEpKcVC*e#N49NpVkXxvwLpL#KecBcs$3qtfVzN31bOWNOCcxkn~EjIGZfgn&P` zG(SM5DV3}B{kTMn(8})z8!Bo^6*wLKT2oh-|2HMJLr;O+M%%+t#jkj6{5`qf2?|t( zQ`766-Ku055c+6GGa35q0ydt#v zYq%z~8y3GX3%F}&=t<|f$h~7|9Us0PQCxjhvZzH0-m9ZrO~=zualAmW1wAU#?34z)?L_FQ-h%ZcPeZ-i>SuFW^S{_+g9_M(O3;F&|yLIiB8v zG#RHX%f{)J^ymz^HRB-KoSqJ&l9<$Z0u0Z4O&Gx&AO#`-3=7ek=#|P3T|?sThAO8K zG)GvLl*i6@p??*zXXlS$cz9H<1C`!8-U9ii|K^@JSvl1f@yR@C>YRa#3ewgJ*VomL zH~134j0fr&LKE)|wHZ2zs7ADb3{)kZ7)(z)arK>=!HZRTiQ@lx<2rNvl?YsK&s_!5 zw2$g`J#m)yhX=w<_4TgsD%yh9{8)qM&nwPeJE5ibm5X*J-|F7Y^BqOy6gJd%dk(g3pOB6NqlutEj78z!*&Pqoh zRUMI9S|#P}Xy?H#yuiUrnV8eyo4MZsiqcMwn6d>L0r%39zg52~NJ!PcNL?yypH|$; z_iNWrl@GjcA~IKSReaQPhaGOcOx6TuasLqwHKFRr?^ zD)hVEy+h1x3>l*tr`st65_}*w1=z40e|@6->E5Gr#OjRq&OC-+0-p z#kT&j?_y16d(H63#ubICTnJ!>Acs82-!vUH?DgDw+V#~n`OFmI?BL3ZKQ2$^Y^+Z^ z!yjdq94rv&o(4;?nbf4{KpK1um>4s8eCL{fO^ImBH%k>p>ORk|ohm6M0U8CGQ{==Yfy*J?3GY|+ibBb6^$V}CTS2E;n?L&uw9n?2-b{yS^>m07!!@H;|~ zIn%r^p*YlGpoUZI%MTgWii#vGu6Aw-R#&852lL03BIMIkSN8w{_aJ2zNgV}#Y%?gT zXM;mY?_+zA!%6@(R5)O<{ZbsgYY2TmTW@4lS;^z$Qcb?=YS55m;J3xiN-ucvUD?~8ZZtmZNHn^y{UpN8wpuFs0D}76?p=yV?aa(d zD~gd0d+*ahUY@o|lfI>hm)Z`bjv{vi$wf7AY9icT+bh0~@{~fX@#~>|_%1t^mXTSf zCGh$G;V`a}LrqOfjWbYA35Hc$&}y=W6Bktl>`8u!(%RK%ENDng`TlQyS_%$1W`|97|*3vD~iws;aX^rUs3{765FmCN{O;5qI~59G-?l zkRd^TiD1ihr>CK};QggLC=G6$5>Hgf^#BjOpkprfJ z7=SRanE(Dqo_%2f)1W5`>@Wg{tw&~OjcH5D=B(^4f72wT$U*4<<8?n#*u>^?z3oO5 zkO=ABYVsDL1@fW+0l+dU#qnxgLdSeg;Jdlsex;MVa>YMYSXtPQ-i^>}Oi9q0V&2IT zl<5dF@RK+9o4Fov5rBrCqR6mFVI!@1ug%uowNo_v6X-FP4zgzbgU6FE?M5k zdojek=ZkX2t7kgbeLYC8@AV14P`FWip}E*q$rR)eIbU_XhL62U1*T(Vkd=G~%eSzS z$2Dm`gOokofQlsZaazyj9ho(h8t!h@Ud;9$88>7fq2inL46cO8-kp91hDY&>AiRcH zHqdg{=M8seCtkE4IGRBS34o-4pBxvPLv+^LdN%LzYheevy1(_3%*?Gi8#6}TPEha> zNK4lS0&f72{ZN#Z9gagsKCG1~<)ZmpgWMw=o{to9&vr#_>$iGa%q((ER`^`b+Ww8* zk|YW|Y{&Vh%;{8=8f2ol7=?3pYm z1ednWbqrDVx=;+&k5khUyLsno z$YxL2$cOo4hCD(d5~kawbzQi=2C#nf_fUj4lS4GkZ6(!P07H934f247&lii-w?|S7+hoESyPoe@70Faac59z6f zX7VXHot?^UzCLjneXN|ER0{$Rat$Pl?ob*lruMKG(0Yk7DICHroL-kalbATir6plM z!(CH4p<%aO8pt(@9^5Yb0(uF@tE#O0IJtd)J%|@!!S(I?uSV1D2^I`YVmP*sn@(7G ziHsr_%UOrswLCfGTvsEK!aVMZ5VdYd2nmsU`xjvQr0V>gsGO4>o|Cr233#U}4?cbl z#2+yy|M>ayXG|p0b-=N{K+{^XhqXUmYN+CGX}OPqy^J$P^4H`))+V6!TiQujPfr1~ zYh-k+Q<@YxHu_7$?r-?s(5!P?fd1bUlkVjS{AdA>YE~mMy4hE0+n_Q_0(O+2IBhJI zZr?HP;6QRR{1+W-*_R$#q1>)QH$4^xUxGh^2%QVa=rtaSiMdXm+q;Zg+h&(!Ph@KyNJRh~g}rbnoIN~g>9Ov|%V-`4-5iMwt6j;pG=0iUgu zQo>8}JMnozI3CegLH#Yj8xj<9w&-Tf-o@$JuNMhES1s<=zD()>mP)--m=Q< z<%Tj-LI0urXWgh?m6b%Etkmv+HMsvg#GORo^?Ze%axB#dG?*@biCXXd>ESA?N<_^G z|Lt;cnj_U)FHRB}j|`9#?7 zjasO^2_RAHibF$&7)PLzU98$G7*Fy&1>KsE%F?|09OuZiZ%GAhcCF$la-a!Ah0WD!N@Z}l{ z4|ojXViHTw6}w^~+E_4UJ*cB?=OH*#N5BjBSBH;I`kq-P_zP+*(TV)fBWQklOmFw& zwbO(`jdB9QC z@4xi%)7{zHp&cc8dmI%jjpUp;k|x1wc)ITX=*Wm5U#AOZ9#!JwJR*NjZJ`J1DU(?wGC!l!QdPeb(U+^$XV~ z!qqqJqf z@}-X6bCvZ`Z}#o=Nd9rp8*hFxE*h<;&5(K{W21@7dtMMB9hh5ub;>v!4ram7+>DU_ zaFex?VMObg#OfOv7Mp^3e5;``wP09pi-(Ji3)rDhMzz(&-24BFZBKo?eCt^(V}qt( zTB_bD3&%ZVQ@$mA9WnW`*5aTKp+U&&9-@~*JKVZ&jX^!9{c-_;??d2>O?8F&wl_G~ zxM!q7G+LV4u4cBjwv;;(gob2RVbbrPBEnJIkab{R1TQKv-$6bYL&U7(cj$RB?J$)T z@h~x6ZPr&?9ywbM3ZCZv5wHV?r1r++%^rFrOhgo5Z0~I?HnuT~D*6+^(aA!qplBGAGp!mn((H!vUn6G&sWfx$jPXYusoWT1a zJpNd6;ItL^@7|CQe*=*&%MD!nx3kJi;*0?%!I+;u8!{)3ovAbwv&&(2W_&)q8mt)){0?_8GX&Sq%Yfg6s1z4Y+R=;FWd;~SG@+r z+Ch1?!dXVO|2iscsZNeE(6rIE)j0mjXuLzgx26Hv62&bX`Ne)z?l4PX1#`wR7w^m1 ze*m6ME(^=HLTQA=dpC*uyGx@FKOE9#H}Yfs?0o!?K(sq~mN|dERrf5$DQa{GUMF|1N^r44XaxTk$ z@9KCYxdx^eSO1X+vZBH8fQrZ+TprZdlsU7QGyG3x9rE!a1U~~c^eA!#T=%qrU1{~z zB`uTJ(Ldnp`5eKxnje5b_e|^_wZkpIACtZ4fP4#-bQDNMDiZL}{5@H%r3Wwo+8^3OB9Q* z#vO*O01tf>TvaGw@24z@dvY9*^`5bGoZwbv#!kK+>yM^3tbH%{$8Ecv!WAIxbR0<< z|1yDW`xByk%+q);Gsjf$rGWkG-3N*U_2KZU;6q9C+Hwi$U(S?IbguhjZ*xZlRKZ{{ zZZ(f3lm}9%>+jly>$bh-`Y4kTmQAoeJ&(4I%*4?4wBo! zkDIgLG3M|?2R8}bQVC_!mDs1g?cKqM3*iOMtmg@q<}LtV4WK@FqmEgaH-w8xJkugK zvSm-;E)uQMit`o*5aPWqT;DQM=``jJ4A3&x7kXL+&|pkJ|B-^51qdl4!-z_#xKMNs zN-0+k0QH1YPYuf}Ep zf48%~gy^EcL)J0GmH`hl9?-C}k1aMaT6>KT_GXF(m!|tKC}pLjj+XZkoAltGKp-yB>@{&OIGI4_xOPamAHt zSRfWw4zY^Dii&~WnEPD8a?X*;&CNZfH|u}1LrZ5>5vBVNivkzhw@hcOv3z{~lXX79 zpq`EsUvk?ijLWh`@3X{w|FBPoRu~9np{gYncfSvCyOALaSJYG zRe3EPIm8)}Lsx3%N(&AXv9k?YOr&WmiH?abD5>VEGTy~8P%dOM39D!6$~lTmDd_2O zFfukCMI;7&`f7!h^>Ohtu75VV%=G|rA5AM4u+CpQ#62#3k4VQ3tP2*?faDqO`HG_0 z_H~)i2psm=wqpgc9QU1AzT#i7V#4uzuWHEC&CX&OE~p{>IGt zbucC8!+F7^g^%GK_a~xigYOn-gtXnIMMb~!2{dB7@s~Rs7I8|29;gk>Kc2L9x#n|l zU})Cl*{zlH>5iLlvL_GZ<;^17QLd+p3z$1ms$Q3Am%!nz8NDlL>5U34@}1C5>W$he zxXrWq^St>fCCUFq?$*YR!X0*%G{#Jg#vml={MoQud;&$ie4Be=iskxLw2MbV13>$% zf6I~2UlU%UmXREfClcfWWcJn8YF+nJtYu`{j1(vYBKL-|SHi4D2v_?&o;CM=M*5S+ z_C#3&)AsOFi)&K-1cdEBngJLsUO=~H1o}+PpEOrAa~oVZg|=rcyN@AZsXL#}iBQ zajfa+VIB@P<3C+M_CWkSJ+%t2@`V`wT^v?9zR(atK}u>M<|tWIR(5z26ci-=0By)G zsOgp_Ed!6|#ExO=VpBt+5kl{z=VZ?8ZG#emi6@FDZNUvbQ(a&ceZ_ysX&z^rZ$H&r8Ra zRql4l-yQPXSj)uE33wV7hPCAi?g1Vd50i+0(@w-+ea{NE4^chq`^L%PLP&ODamVgw zeYXu1l8SuKK4yjXbQ>DUWl2o?`=eQ#`D^|F)a>pr6)r$h2)><}oMM_id4+jlEwV#n zoTonV?1HI>K=}9a&-sQ#aG3=qeq}`zLPNwWd{MXL@X4w1x>fXoy-5v?Jvg5KfsDf- zPJ|mZciIbt5E4(jqHMYUJ`T!bfP6VA*^1TJdawB3WYZqHa2O@BZS zyt`;dOaO$aVoJcOB;q(RqKOh_8cD-vi}11LtTyh2jbpdg1pDjZm8afAg1u}!WWBJn zvort45BJ4atP|}Psu})|VYa6q_NBtU41AYqLPmN`Mey_C&L{pR{sn|UNKtCbX_f_X z;t3%kI7QII+MiU9FNSX6aLf<+iO`hQFJ8aS)~_$M0T$1_vcThO;y?Gsgp1jX$ScOz zs4$W5uK&>fwf&Pd44IX&md3w0a9v~S-Jp2P6>;5zvuMMAo9MD~4XOb_=kxIu;Cc?_ z7vX;i*+cCeqs7K1Pk!ae+sgC47@B)SrV3N^=j`tvE(pb%#VOl-Tx$Ak-YV=`9vd1u zT$KNv*SEikxYm&JbSu#MNK~FCSn`~emDS^h5^|HJa-i+w1`o8@{J2sE!b3vlklmdf zJ)8DBd%E%FW5wicPu(W+`pV7WTO|=LM#H!!wKti0H}|P&?N4PRPyFB8m}{y5WucGeUbFD+3pWnDYCyCZ#~&H%@u8^74u#4&%n606ci4T!hU;M#>Q{ zM6L$^q`d)wGCjd+3b)Ygdo#f1g&`!pc&^O$t`Q??bCsy&@ZGNUxd=KxRPtNj8Lo&@TW#q%d4sD!$r9!&Hsybzen@2U#kb8?Q@fo z`z*3hX4^i9dFbJc$@{OYRZ`i#c#VLCsOa5f&Ropa6RFDm#^PKuT266~;}!cNZBenS z{f%gk+A||7kZ!px;-Mge=853Xm?*i;tb!)Lw+Lp-P8?JT;D=wn&UPxfBsod1Ln!bX>M6&1L*SQ%D0y&Kz?Z6m zUQ2`1=2^0*azDlDpQRmwVUrM7holLhQ4`=0KA z<`80 zxD>)^uJ4(_)WKmYd)@XA{RQTb81Q&z5GV#1$^%Gh;@s}T^Y`uh>@%ol1e1oKZvY;A z_W1i{l-}*cM1KM%H9w!#FN$xy??nL1{4ND-+D=T5)eno5SbIMKNp-=gGU`#i4lv+z zf;ksN5BPp49G;%3!PQ`O=L^Q4$K%JcXuKZ|OU#k3^|OmB>2Xi5Osuwv701w2DS2@+ zNE{o{F3AqtiOjvoc;|+~{h28G>C;&rr}t$azCR3l1pNcN`|1G)GSnlh&5sSp34aoq{&%0kpI>8-eTA1b5??QYC+W`9n6xR?fI?9)f z_%2qsRFZU2OWPOLf3|U)KT7$7_EDUOi?Kx`GnZ@H#J!Kxl=NZK)pr8%VAL6hU>7(mdg?x5L>+ zEw}R&h4`>JbuBhF?R=vv5UgrRgn$mAd*JcQ-Tz6EDOE=G&9M1xJ|j-!k&4Xg4<8cw zCWHa`xW7PW$<+=>O20i0LbhLx;0zs7Gz?CiP}KjTO&xP2>MydpyL%eFH}31U%AIgM zDbdy0)a02kAv1+!=>+OnY5koQO@C|0zO(F*gNpcF6qPwJE(E=+qB}k$Gy<-k+j*8w zY-Gl}E2%s>4~*9A7eu{Fe@Tl+S{K&aydv@?{R|P}+BN=(ie^*eo_n}^F#gAsx!@3l z{~WQo25!N`W0`3*^T5fza zZR-NoT6Id?&&~I=6@m-iS*va!GPon%{h`ZxNmDQmD=8AGuWs>vC3F^MCu1Enb6=!* zx`!r5-a^bB$fhCci<^7$&Fjwn;2IXETn_M_E$EB`A7*nKsY|v;qZI+0=jxj8ACrM} zY@!Fgx#|H;{A?FtG zRWdc~n*Pi8h8vO{Oj%q?(PqiT-HYJgA8Z<|FHL>@sK4jSZuTfSBY;V}&*_;qSV|@7 zxHUnuzNGR0HJI80a~IFd8X$1feLp=-b9Zw~cHn3IiW3vltsraA6uM0?y`^hb(t4P5 zz4Yxe*Wp{ySWB10@(+haZezse15Q5_-l(ID2T`5eTcg{3?9;(H4Fdz=y_7LEELR&R zCr||}mYauP4P`K5^~~4lT8aVOIDTa!exmnTuhyU5z@?b>{)qlXbP=Ff|MyBN(tkAl;6N_c$+J+8|7U?$`NP?gk}tu#2ym4g(e~X}vwGAKeDBZ+&QC;htPd#9 z1I2f}MuLWN#C-SMfd=F`wDUde!JYX_FwXwo!-2rlnVMnL9~H-3h@^E89uY!RLsxC> z)>onf;Z$IX<8ZY9BnCB|_diI_Omz&lLxAyaNLeCJNn|h|>Fn~+aMwFXsoHRNZ1v_|0#`(Xi2_Z)TWHme;1G=P?77Nb##?`)AE-$64OE^pnv^=MLPge zC0XQYVc`huGfYwF*frGDX2fI)obQM9@nM{X$x|?e1p!<$pH-=H08U!m)O1%GwsLi~ zYV}xU`hP>)>W&|cNw~bPPsG5xiw8vGoTP#iDKdoWUOr+@lk@=ddXGO6!(O7v{7g{S_chA##KilCii ze+dowS7YlwUpBOS$S+7j5Gk+Y!UNk9wf#6fypx58cu`SN@k`U#xNYY@g;;**WniF1 zoFNA%Df?T!f$0KhhKa38Tc@O38s{7Mk+_KB5$-e8J$;LqueZhZ;R4)7-)yFb2FK($!6BiOO2QTU?k5 z!^&5e_I(P*t~Y{`3Hj&ca;I>2Y)Kj$AF0SC^M=8ktL!&AZ>UaO!jBP|A=L_q(v;sv zqU!vdnsexbfcX*{o%p-Q8I=yWib~H8PO{GFIX--rcB>`fn8Uy*p#3$y6s4c6OgweK zW6MOLc0x^R5NLwQ#igJq6&Q#brrqJ}vJDpu_|A8fR+Vi8kT3g!WN#zX0xL@}H_%ZE z`4kC)tTFrtr_O*lxz=oZN1>%`r+^sFXA6~Rap;VvAA(A~&A8DmQ{WX-xKOP(m5UN; zrn`rS8gyy?2e-p^_Joa&EsPH>3R=dDE1Dn?a(7S1{a`-3BVhRR$NT8$=-g``+>*lo zh+UOt9j(8Cj7C2Y4+3VDepKKrZ;zOooP3j(mevcKegtB^rRR2^9tPm>#>9dG{IQU{ z?hZ@QH?<9!{Fo1arSuX>~Y1=|dSSYOLb)zA7t` z|0uT=@GZX%+~ea$3ZqOOh@D!^74^P~kCQXa)}pBc;8m|On;gGSM*_0Ul;B*xa9Tu4 z^Q^#o?tttE>zk|+0HaT59Lyjel*x` zJwMHZabUjr*lmT)Uw=u?L&wJh=4;r}Rd#Rymtn4%x($%Au=PZp1NGqaH>*(LJ+}99 z?ee|5h;%@?_oFflpc7`jwZdO^4bi_03cdiOKqPw5(hebxs)(5_b4G=PJg)0x&j?- z^%slI&dzv0k`3pv#Yh*~pn_RP&~BlGVR50+&M~`hljyAR<>U^>787S?=H5n*H!CYC zwF1TO;K0@o^KpQq{}Yk5b>{KW5fx0_|6%s__VyQ7%gqeaS?6(8570%91fl$q|A2Y+ zt&~*8X z6-&1ow+3Ay-t(#ePNwT`bk`E!ndE;xy0)*M*YKqCg^bhcqE)aW;x8@&`^@MhBI-%e zqYeV1^o3a);qW~m??Iq$&v^CxcxEi@Ka$J`zB@5&bX}~9rtl@n3Z2$Qmuos%=iTuY0$3;0*TZtN^m$;l0$ ze%0<=GUa-`|26XOZ~P1JvA>UnSQ~vC3fw);#YOQ2Uz*|JT0(?z7kY+{J{dQ`J>Uuw&*wJ~K^pwRt$9y!AoJ@P5BlYq~} zvw5;#zHu_X9viszRp1N%OMX{89W5a62trQDlKwv;>G|<)qq(}}{_5u&!#@`xcxEee zbNu)fF3yG$fBMV@Ft1iHXj&uUGGAl90cBKW#sB>07Psx|psc)7o7V$GS>^==1x)n~ zHJ#V8L|kXa>!)}4BvuC%$&2dNnK6?K0$y3;f&|zQT)YN9{c6NHerp~Wc!b=e!PP_> z#BGk!$c)Q?72~hy6)`NtWzu|+Vzf_U;SU<>--u; zto`79>-+a!X4U&Y>~~YsBwT-eYN9mT+Iy4wA0`#XZ9g-Ayin!8HVG8lYyw#AjBg(L{#8reaIIP`0&R9l%M$QfS1_b!}b(SH4#KKnz+@MjAYQp$IQmfs3^ zUy1ixa-n_fBHI(lP%oqpJ2`0XXS2n$G{#^L!XQ9{lW!#88bzfhDD{=zQ`*x!1IokG zLH4Mz1UJ*u8^HJEV68*cN^Tsc3Y@H04pF1~Y3?AeWX>t9t$ju?x7zHnl44 zR>3l#m8rgCK)Tqn(Z0F66ls?@`nyVd5&#h*xfK7K<+@ zNz%MCi>05iTt@k(oaXr~h3AP{NmCb{jS57b(0W;!g-{^q8Zj)9}3nnnM_lxUOcRJ*ovbd>b| z&zY&`n!xw#srpeD zzuuNq-JC)T#oIRkrYWwq*4GGS@E8wPN9lW4=9hqS*G{wuq)Jbl&Sud0>_4j9f^)d! zklSS^AV05*1wIW1u4cq2fb8u*=kjuMYrOUzr_?b>Uy&&j_L5C0!kjfXNY|k{QDVjO zU|h4_eXFnQuC+3obd#LIB=Cvjt(H!@o8BS=s((k>@Q%HFcfp_qR`35PI?J%8`Y;Y} zbTg#85fr4mMt2DaD5ZdOgEWjr8tIPFE#fO6jRMjsAzhMYn=Z%=Xrj= z`}Wb*e{&m#l@oN9yPCJUw0QGdCHO4&8-T1dhLv4gVs&etc=$9HDIUu2Nh3om7mB?r z`Dxm<=gxJfV+M>@T^?Gli-=6_ROql^?f?|w7Z7irw#w^e3@zGEYp~wgK$aG*?Ia?^ zUr*@{Yth&F7n;Mj3qGLP*q{qm=sYTW#BZm8Q%V~E#!@#_qM%U8o)vQl^NEY#zA)=p zanX%`YEM|Nbx{$Y4Sl-VUo{mivnf46<|>(qPhOcu9OzW$LSHyvLheTyK9e!MG`SAr zOKAwXKR^JgpNA7t9oZm_vxocXX)#(SHZv1HjC@8%-zN^R7w27tpEaKr)n%tDRVQ!B2cE@s+Xlcu>?v$BfkRr{^l4>ZkFBV0AHt+_BiN5ev!e_O}08E8M)g`jfU(RLU9S?yte0Y5iBl9Zg>#w(u*M5??KC zQK*^=UAkPGX=5xX+A1qP>fk*fJ*hSM!f~%9I2>dX_@6*>XuNdJeK01}yrOSjb2{_s zgb-c#l9N{|E}}L1ctddf?v)4K7Vy=Kg=3S@NQY6VY`jnSGxK_)4K3$S%AzM30TG*7 z*|r)X&<*%6uJW&)#-gKxK9oxpE4AdIQ?G{=|L!;s2rLyi(~2@Muu6}e)=46zJVW%S z3!N65wo$n`IqG=PbYI&l+B_{jGj)r%e=^TULPUU}&|%3&S2u}zNwHJ((k?VkM!oD% zVU!532*8tNSUPlV;)y&_0YKa_u- z*g;B0Cizh=C1yrfj5B3Lv=&rZRMJ~o_TimCaR+ zL+BQ%yFNByQFXP$YA8B(TcR!XiXXB=Uot1>!EST$D-w85%pXjsUVwc4Hj_fIL(NE( z@2E3&;63eN-UooH=dJOsk|dzx#1$MNUqYY5*OR$XPr@dws_}Bb@By{Uc0k-wTMZ4uz^JCLuaWi^5-xo9wuVBSj(#eC|Q|lf!LafmD zZhZNef$N{xSKI!vJQExtYIyh+*DTHE)X}_>rdhg*-qmu@S$8@jp=Bb_5K;5{JE#zc zh0sJMnz9BVtW=m#tY-I66AS;-%p_hRj`5Hkw_=h)<(8qLA)%n{n3P+dI`4H)Qn1%; zl=s1dKR_iso9<6sXjJIL`}S+u>10KJxSus_*}$5*4+&F_y^vh@h8Xi%bk$uhI0ZRriyWLmu3M(#R1nL29cP?(iF?^K1*~~5TbFQq2~NzZ4nL;L#^G5vZ&yhQ#T{KwzhTz|k{##w&^*XUBl%&yTe@mMRkvA+OHl_KQv*x?!>6$tl48Omxcch_ z)z-G^{Ve60m5|4KQj~~rklo)X!jRyiuV0fnFoMtvRCx5CwIucWB8NRDZ8-J%K|nCk zhZwcff^8G8Oq{ID8o4(pP=>2eq>5N3s1uJ{6^pjD#J~)g27c>Pu565p@auKS)Ke7> z^w3lr*cdh}VigA({)PM?h>7tv)|fmKO-gmi`~SudJc>LKb>V(nZ{o5({^&V3Z?XRM zsGSJUd%|>@Jsw!@#iTaGT8JK@&Hjq$S2=q;*(_4%P+ zo<|cueWH@mu4Gm}MCotlHH`wJnG}}%V!W-V_@kFnO>vCcGv@!WIG^*%zSo`&IO;%= z>ol00ear{^mo=T37ldMUQJlW}J{I3o2juQg80;*wkf8$DzC|bnzh2SL*1tZb2}3GV zuwfX+xHR0IoBn~u%KKetmQ3^*5k1JzO*=Zf-D+ZA;xrz)Pw}c+lsC=>fp%Hkc&OqP z5vTcN0mhu(#bZC$w`+=MSi^$13ag z@WF@s+hMGmTa7$+0#OfY`7MTytH(d94HINdM`G69bwao zlf@q@=@pXx#fvTQ&Pg%joQCH3Vm*Tl4L%OCs^F~QcdLSEhzq_qRB1EgJ%oma7=Q7C*1Y9P=nfb zmp6(YO_gZ~&LQb>3jL`x)wQp^3_Q5doSFirN2K+#e-?zkuxxg&I zrCAn^j?R9B?~aGF6Uu;x=Lf{b%Z6eKAdz@wHc8PJ+`D7Jf()gg}Ex7tfve*LVa}|#j78MwskLKuCMdwI*#&1R|C)1l}raDW4wHPG6^`;_-UIc z7%F+v$Roc4t`st%F|p0~W^9F|ZvZy789O3B(NX+x@MoMUzc2-CT(>&QTa%WdYr0&e zjA(R93rxg8L9+y~CR6{>#O>iyh}thME>2EMfZcHh(H^;z1b~=j&AtcU4}3r_8Y=#V zcUO|V=@NWg(WsUuuIow>c@M+dmF}hixdEAd4#2ege*d7`6FlLjJeBst)^3Xnld_TQ zPNk2HsYZt!PJ||aq~^Jbzj#bH zb}OT2KgE1v!$%a;E-Jvqno;82kLv#Z&iCfO)$9Dn6M%f{X6S*&CVBkG_UVsnSCBTM zC%o$ri7fnCfSEv=$a~(VyW`mK{RJj5*#__xz5J8Mie^nqBM9X?IYAA&E7_c_#Kj_t zdRNQ?L@&4Kq~*iG6Fu(Oh2Sv&!{DP?DB^q(zc>BZ(a?Yl{TWAzSjs*uj%KJ{1=@p; z%~rRUqM@^vt!SO_ey7Ih)0AhfAg7kW=L;Z^+jP0s9`@>IENp-4!zCpt^t8t7J(_mQ7675nUYcKal?6npuB71ziau9g|M{`}5+q_-E z;&LA9d?|6foh^Vp?ZKOb{sRcdU=b)Z<^JpM*|TEYlzf8)C7SD#%d=9zEd@kVX57pE z<7D^vU~hBdMoWusLL>u{6Y6CCBkXJq-0)|CQBkAXQOFf>&Iyz6*dKbH`o^V|JzK^~*`eW` z+#f)8TrQ2C7MBuxH&O7O_y=*sVP61xj39xJuhPhmamOTh*DtKW+MrN~~V%4VM(vnENIT3E<#E+hSo zJa$ZM%hc}xvkHTVeH2>4?%7(joQ5@%0UsLv^Fj2F?WgJKigUUplSGeyhsp>GIIzP% z9~VAE&{joZumq3J zmBfp--IC^%HPI~WA)0cQdF%o(BbhOFApPKT^#5i=OOcf_=s7qTA~!@HgmD7Wn0R#x zIH5|LZ^;bo`uU& z@xkMG+m90ghA8SD5%PdYdAmGdqKyl=KF#csDr^0E@%fEQr=Q5>hVRu}mo^RRh`!#7 zuyE%!1dnB3)ew)GAL4pt1&-w2-(Qs`?9dtCOXfGmT_LTtULZGOGt1BCBJB=%u3Ft> z@2@_YUw~ej+%E{Q;&a0I#Q$-V5}kT3Ra(*bj)C}|j^)P&SWp`Q~Uhgh9PB^1a3nW7Gbj*LT;t z(0Fd+6#+wi&L z1qrDJ?}10n=uqeL1HKZ&Ad#}NvOZS1k*87TU^YvRU7TZDMw#*a&hj%Aj4~3Yl&5Jy z?(Xj6)V6sie}Vl#*VTxv%vsor_uenVRe_?{fr#_UT{dB^$mqPJkW(elUN;rCA`@Gp zNOaQt`}az6_-?|nWQDDyV81YCDsF^>lRfVzpUukMj%Y0fD^ zUquKFMgpS73!XJJDg%W&?gE3KB@NyVA>lX447Ps+%EMvh*RS}Fd9?ERPqJ3v-EeQX zV2iLA#P8jY=O)BTwjff)E2-eQEXGmv=!|qZh_0o4QSIw!dF(;h>_FLx0whg%o>l@A zgx6!LB_xWt3cN`I-uVCfJu`E6nDe~h?j{t`TzuT1yy28$5W zSo!Q%(LuBYv5sPYZj7FMrXJMRE^an%HrND09eO0G@V@WH&>}oTFk2JDoCI#oDNZZ1 z`VYg!Rpdta#3diByD7PMEFqUh3ITJNiv3ba%Uh-(BO~}HRp>nO2|@XE<>o1ROojfd z3myUw-NAc%!j3LWiEjJ9e>cm|U_;AT?JB=$25|aRN;oHur0;$U=)Z3p-1=y&?UfWx zPL>EdP4sDJrGKdipYutebEWxFnu@zX3J>Jl2qT_Sj^NUy5>n+O7Bf5nQ$eJT>1~p( zAf;f-^_O_oTvv_!```UHFPdOt&x`vqEztlGbbW%v814&hK^|93o}HiQoxaX5NDb&G zMjA5eT+$4M(l~~)i^7PzsYfFH-gPeEPPJnw6z_!-10oB|MmY)FLhs)SNZ;E(4Hk`- zJ;hsWDXGu2OM!*=qBpI`-Jkv08e8}Y)ZH#u`Gmd}C)fz&{xsu;(10ZsE6FzP zhFN9}##a}J&tUo1iK6vP;76?%1P|b(nsgc)io}W%A&2@(Mm)H#T6Y{APwWtI6&f`*O_F3m~HT46J zwLuCvE9i_w0n-awOp_p`EpnNRXkhsEZ}0UesP^g2r&L948jh)%ne+aHT+tAli~ZR$ zDs48{u5X6`K7G)ns-pj@w~#Vd^CANN86wL7jtZE*=4Kdv$2R6R2<0=q0aALr&P#l6 z#WuDqskTiDRYEXfVTYST&l@xsFh*EmLfz<(V4SSV7+X@QqIRl}p)BZ95Xmqheu3~5 z+I;H2GWhv9NaWbMsfe+SdZnk3fcDt*?5vQJ8Fkb^=T%J7PWXnl1#!0(4Gm7YUlix` zK_+HudPk+-&q*#2-aIaX)V(a^#ap@Qs8mrC8LzbsD&=YOyA8_6q^_Gml~-&}L-WX( znjFUqzPSQMojAAiVoPfGY9d7&hQmoQiK5R>yh^KWgSlZOdPq}ECFJx$kg4q4nIBzj zs5u_dH{b>C-d+>yJ=4K$qn;vD`C+u2BOe$bb>=^NK0i8^KWcPggyD(DDZ+ zYJ))vA1`5rZ0;VoXKB(38{>6jjjt!aI4h~?vCj*?Tq`|t$|I;zF{_Yi7#nMje&wkg zT`t_IxcY}u_Z>r1lur6vKKcZ&g!yuvlIbQ!vW`i1R$(1$@qM?lLR=(~E;WribwNk% zo8TvkCL-30qRSq`v#vMGt3iC!NTz>$c$90$f$MtANhLbUd#?p@Zowx*I zZY<`#MtF}5v<|G97ZkU`5RZ1kw2OHXC}Ht77ykBf->6I7gaB>mpTbKhMAvumct~VM z2NH@Kgj;%OO+QFFLQya$E=1;f9vIbx-@t1zr!+jaz?|gB#E|s8@Z*g#Y2UpQ=Bq9` z5`Cu0EQS}9p$EE1Q-LR4;@p}dy|x|(1lvX?CapX4U5~fJ^_@5Sm)7k!iU9BJZXGD3 z-b?rXMv016oG?m=4+n%?cvg}c0#ff*MZ!NlT&F&}K`AV!68C=*T#EsIwdiDM=M?Y% z6h7<~mLpFFS(8c;LZ{OKYIp%MIEY->TM*}(5qP*;kdFl&D{OOj&-}6}vkY-!%14f+ zwk}Hrff87HOlygjk<{oKOBi`?vH9EH$TdfoJ10ezI94?>?^V8hm2cgn^@uyxE$rHeT4hQy zAUZYX9$~6Tw0cqMA7zj!acWVG>ze9iF~`?tA2HZ_{3z~dC>;e6fvo~#{tRH z0sph`>=wGPA3<(SEYTp|Mq-RK<`^gC`8)S9rh^f3pd;g#2L$lGh#w#9fLX##3G0c>oxieSD7Y) z0+D-vdCb4KEZe5CwMtR*YFY!3^l!C)8rP3_-hAWux8EhtX-=5YqBmr~@6`hn-gDqj z>e{PY*C-Pi*sz;lYkyp3^Y~a$)j=^88BPBXE84NA_3K~bw7KFp>X<+B&j*-)6jxunTWIM4aFF_R+&jD8%6qhhs{+tgLmj}074+sm zmpV%-$^6PvyVzqfZ3N3GWj@o-N$L`xt+O>B`hqwoovS17VhYVsiZZXwy;PHv|s7-ye1+ zRZ_7T0{Kk-@p2OYV6EHCvmOQd3L4pBzqj0Ywsitzc?v(g(j2ILyEAU{W(JDJy$d4+ zhBygrC{tV`$|)kor&=h0)~js|`hOO$w9jsACHA|f{ActOX9IX_>jES`@cS!UkRDal z)%*#WZL+cLxcu56UH%;_&tOLr$c}9NyDF1_qsH)X^_wdO%x(nsDtYmfOTQiFEyOMZ z8UEz{_h!mV2miYQ4Jkr2b{fIFT%goSJKfF0_e7NfRw@4(%;GGj4wf$*+j@L&x$w-@wlrZs}9<5YkaqxS@ZS#svO`_{sQw>b{L(6YdF zSaBe25vMLIT_ID6QBg^NT1e#=ZpNf^?10^ik>AdLI==#~5EEx?qEdxc0yceiH%TM> z*NC5u9!r-a4qHdWzrGqLF~l9Zxz69vZb;)kZkoe5l%JXdT84@)k};wac6>6;W`g+` zk}fa^tZG>$!v|`lZG2+-9iVcg?ZFa2P|Nqg=Q8l3#zJel?H&~(i^-TnKO{DfLp4^f ztvF^Vmjfb{BK2GMq%z%>?)qIP`m8~eerm^^F6kce5dzQWN`73FOnk*Wt<#z=wM z-RQry&jg-!+Fkt~UdoQ#4;3+XuJza23Rx4zi*Wc*=~sdrloI5L9f+*t(q~Fok^}Y% z?F3imGK*y1ig!tl_8uNp6UC}qB^3+-hgNEzmeTUHHUHIob_i)jgQ@Uw!!PAq#h)m| zHjMG{1m1CsR&e6GM;p8ljGU_yJNpRZI0&|d`fG;5hQMcpa1LWqiZkO0P!L=HLNqb^ z6DWi;>X&EUTBH~xqJ-6#U>wa@VND8C;cCpMGu3IOnagj~(L5CmnBBfl%#i#U;46YB z!L%1GXA4#Cb(F4~{E>}Yh$J%Lu>k5d68l#+5{tJASDhmbxf1(`3IB8IX}osGEaRxC zBsA#)R@sWsH2yjI>|uZ(i?ZZllBpOKMI&{{;FH{ zLr?7bq3x6g5_Rbfa0;pVUfC2qyS9`b(6PPaaL5FQzh!Z)`fw7gbnOc2KV{(qbJ(tw?IAX=!u2Bw|*%bqU( zg~S2*tLkx3_UWNq%ir)sA?pM;yVf?Y?#)HG3O8oSwP(;tR5jDa4n&f7+{)Tx@3uvp zEZaJK=iqqVN`OY<^>sett5gSf$4K&vJ7%${HfAd4l@^lDlxcKD5tqgD5K)&Esnoa@ zH^Wozh}p0iu182dY3h5anAh<%YcZLG6ns1PCLMMZFhx+g-z!@_8rcylK9Vdlmkg!7 z%90XPG!hNYlf|Zj6-G=!iY6$>iin!Y3J7gUVSG4_-ji;)&0m%4*Izs7FJ?sH!)(?h zl>KJ1#f$aU40`m|rJWqojzKKFi|Vs9AuM7kg!NkSGN_jS)<)M2!d-HOU0au8{1|X7y>9pMC<` zCBJcH2Cz5WUtDSThuY}_qEYPUa;49oj=5)cL^Jqv=7aC1GCPI53rdKJt~!4|(;^Sc zsi({Ezl*-(5v%wmErea!k;~ICUL)c9&1=%_o(;%zA)L>c`MzL z)R&#`d!guO>h5*Sul=t#+9ZOB#>qM6fks4=eWg9e$fJBo*{}qXRQ>diPA)F>Z*FJw z3ti^FJT*&+?~9kGug5wL z{Q2BGMF3MwmYE@?+Oexz9)1%3lj#%L*)y>;yf2V7m>&;;1)_Y*t?1q9@;|WE%r)Mb zQvUpn3kJXQos*O$BZxQ9XrL-1DbtT4Yv*0em}Z*zl~3%ANSa|~c!qsj_Ta(S0-;!u z{k`keQFhF5v^UDopclYQ-Tds3$Z9mC{?xEP(jSdhZH`ae&GH)XQ{I2tGO%H(d-E;W z30QOHT^2_=dlL=~t`^mXCg5#6prM2--yMsxzq|olYDqMD?uLps#4eA|40nP+psQz= zFD>8Yh9%s}2|aS+yS%|I>W;1jJ-+SjPEmh_4wB2Mc~z%wf*Z)2M@*{cfWmJ4_A~m- zc~Bs1+mB#kX{Ia-NwtB}i7rb(h1VJWbrfra(~{7N1qcZXeo3TM1y3X%a~NIwbWd`%>?UuL7E zA363W4;AG8wKmU0ai}gBhbI72U07>oe1l2h1W`%dedZ8s2hEn`HuTaI)gaZ3!RK6E^Znbz+n&(FG8NZ~I{+Qa8JB zl`I1dN;11Pq>y#~uU1e4&;ODM1h^ zvi5WnYyQN_iU`G8#h>>E3{M(%;!(#Bff?*3IMW;Npm=t#S6j^GBHAihIfvev+G0Bk z4a&)%m8X0g>ZI!q{GoXvow*QxkisER{E_r2#b0L!f0a*cNG)wlj#Cul?L6c8#YG+L zjJSAiS%D)SD?yHhZBE?=eT=53sHJYtz6Q;om?Ws8@|QelCMf7y+Z5;H^%i!RG7&Z< z+IPO{;$iY*=`?1$BurV1PITy+4)_*EjgI|HldAq%l$&ko?Iz=+7$!taFGXc6YZi4% zJtj6rKG9-KGIpS>VbW2E-kizL=9ne&PDn}{tLN4)>6T0AKP3}_Z%mk1$^jjA_x>Fo zv%X=(a}wM4re_A<3M^MlUA^b?5G4X`A4os%R|dkhC*h1?R4x_QGq#S){!nlRDj zN;d$1j%YhWT>nex48S6O@fo{&gQjq0TD;|eUwS}@KADwN&%TqWYX9pI=yyR@LKbMy zj}4Oc97F+wVMRPHEsgl##q1}IM8ZnnWTQd(ZbDb-dNx+R-z&70lxH7gG~wCEawB8B zb(iM)+XJu<$CZMkGkWuyf&BCz;5t+EXbKy&N|F{qj?11GH;iZT!;fnP$2Eg5zZ4Q0 z734m3VU#Z^uEXIhSxH`{Z#9!^hvoa%?3Fz4zb#*Dg`tO`&|%sI0_+J4O60vb_Z~ZlW`90na=1j!k`R*jkF**+s(f)?^UgusecGjw)`k(U?HLJ<;`R~B z!K^XbNN{L6hKdFGGdhm!OSqi4RdeiZyPGiIi`+e#idr$U(S`%6!cj!(auJcG`aY2l z#AZC1`;yT8zmep?xz)=S#4PJfCMzBg@3bkC?Nmpb{et| zA9e0-|AoO%0JiSSoVVxYc_j_+RevyWYNOx#zbb7a{X5ITG}(ONPmawh;w5afi%lK3 zX5NT-#R0z*4Ds2=EBEDvKgBN3~ znI+e;npkQ4H0%WpgkS&rPb7f|s|ekoTjsj6HlVx$U)=G2Hzw&;k)?m#>8AX=0BE+v1zt=|Z~LOU+JH^?XQ4L|?_f+%ojLdMLn~iC>z-&WjjZ2^P8x#J zL9;q#hXaaKaLKymthdk9 zrz*vg9qp~?9^26zVa!Z(|Gfhp3CQ)RYw(wI*N012*)Ret2g%>4Qfm16DvdkMXF^#7 ztxhYkd{4M^b}r3p5)%%h>6e}w`OenTR$vHDK{N_m5=xx(*&mzOh$e7C*Nw46r`XQa z7L%3VR5D!##JxcPfsvB$dEDy<$qLibL&a`NIx++mkoR}@h9<0MkpoNDyPA6W6{hl_ zZQ_aU5rezv?B0Hbfhx4lCJG7J)(9s0Y7An+T%({V4RPRrwmwyvqA-x@D=Ers%OYl+@*I`uetAuPulsB zcuZF0rMOB8yb(}7P$&?aN!JsMg7d~;hL(8xODn&F#uYb<5n=w&1}G1fb&wswxX?zu zBE4d6Fw<2+!J7pLk~Z#(*gHsy{bqtee!W!Us+YNZcjxiZRgskLgVU8)XA@m(%M+As zagzME6@&NkCnV2;cz4Ve@XxRWl>+={a8KiIb}kFd6mE|;WL^wL-1OZ1N0lFL4$|cF z!Monhcv>q-ygS`wP~Ox2U9ED%vezT{@MOT&JZRQXlugaU)wq3}qMO+Bqg8n5pmG_|k&oc?M6!p?(JnP_u`e}6t-E;I}XcZ)u z2vfz6&owZEcQwYdsHcVDoDvj@g;9pdsbI2@3MJup3LX`nE49J;X_zbfQY0_Bq{Q4n z4=xZ72&;$eeb`J!6a%zv$UubWiD5E^l=k?<5 zxmk(!fF!Z47KZQ)<(-kQIclO&qJj-%>_&(D7|0r8iDv4}=-3U?Jtm?-TklMap>E3e zRY{IZU!yw>^)UbDzImX72U+-RrSj8O_VM~Ld^DlH^>VS9k1^ozGs$Jh55+XF9T`iK z_#Y-Q-=yAy<^LiTBX=LK&B(RxnMrs?*jp&@2)40f-1x1N+)q&Gc55`6wdj`6UlT2B zlY2h0z%05r6Tdmzml5)7^kA0V^cHO10%BPl8m2M0-n#7065kBH z{q2T`%Ml5*#keWwc}{dpx?P(&5lQ3+sGco<h6E`qjOh6CzYO6ox z82?D2-%C;^v{`NtH6b6X?x`*0ifLIPm3xm0YpthL$;^Y)HSm~$z*M0FO%p;8Jv~ zvg)F5R74oNMWV_`OeJ|GI5%#SrEd%fD+W{>X-@L~gf{gnqiEzI&*o!yf4wg^ArM-@lt@42=L8WJykt_TPgnTe``pcos1z zEiW(O9A#*+VTp*OiPX?U7i)1ZIliV6Yt z#8i0TBo<*o!vGYRrdixA6v&Zl=pxRt4vFxhDGceo*Y|*7V%t#N0LVn1g`*vGUvZaz z^apdo?9ntqWX33T?~x9e8^Z{xO?3Lc?t8k*W1=2v{TJ`+S8E&{_yT3>Iy&xi*wi}n z^Hd=wUma!vZQ$G^wUbW~2ZVGeF_SHZ6Y9Hj{U!hl&_R+h(tcV&%%qk${UGmF@sy(H z@!Gky)1}0J? zQNn1?Pw-O#BNldVKKT_rtbZNtdxk^%J)Fp@FyKOE+Ff5xQ}Y|&@AxjrS8+YY68M?9 zLz^D;j0ARdU5VhudF5nFWBsaDW9GTUTNoEbGFmuh_u6Y1?>QO)nT>J=qc@D`VdYng zMFhV*vDEp*=)e=j{vXSzqvcy$;CVe2f`P#vec$hgM|FABWX+A*G^Rss_pymvW!g1OIw};Zbe|xC{m@q+jT94VhH%pm zq|x!#d0H>!eT)*hHbbNyZwtxKAkRSjT8__w`R=wp%&DqYAjn)JR{CTZIeMk~zSMj2km*+O3EhIk z#IPW8N$57~27!6e(}eE{R7^_R9Us#7-*-69%-{J?>^ipYiuVUv(m#oRVL20;dR=s9 z`36vI>vPh!=PI+;a23IxfP3vebnWQh(^WH)u)4h}_R|geeJhuOmh5XOh23N9Km5mrz)H3A0v#l>Lw6MhS;& z0!~aC>XH|&PAq}ws^K#sz|wG!U)Pjq@_i`lSPG`Hbh&8v; zyd$(;7<1t%OdldxJtk<=gkcfG%wiB_4x<pq zv9zPE?g<{aI-%E6RYVKIGgA9@xsv%f*i1zC`7< zqcF{Ep$3Hcxg0i{NUR>+J~@W{!lzPQ2B zq}~KK_W6GX$u|+-4XC2sF@m5%Xh9j%ce@KK@O^QVtKG8SgP${5Z$X@RrP`D9bU|s+ z0W85&a&L2UR|mY5Wx*V3lJ!GNy@&ZLg0(sgnVZT~8QvQ6R!cn{i&c%p=P^=W{Vyzl zf?ZMGf!oG5)QGuxl!aIrU$Exs7XDdQF1URaAIfD@oY%jua0vE|ezI*uD|;X^Ma!dr`e=8p z#LZfh8ledLL@xIiiu?8&tXd?>>pvM6^@oN=Hfmx$uEgY*KOK*lZsD-cVn+Z<1DG2o z+E&OimPORr{$2cPTW|7ZhsP_5x%$Z!`rTnDb%wZ@u~xIX))MGN_x8rGyS-SU9@D?-Z&566icoE5zW&m||6N;rdgiwM zZOxaL^yiwQCHHrA*K>LWc1!@VRd-%zrpf_e+bl3hIWdO$19^E;v`wpf_(*HTm-?ff z@$=I;6dj%u_bQN6Y1%RlA5@kQGI}gXFRWCE&+3O|A#yk_dK=CXnfz6hMXaiDqcC6#EN$eg z!clBPw&yaCUBp91hDNFtAqzb{J>$~ygl_L!js9>&M+Ifo+E}uS7c0Y@XO@cv^)hq7 z__{tPx)Kyr&R;LxenSei-ufCn9rT;gW8R5I)r9zig>0Z!t=(?f-BG5&XPLZBzK@C15%;(P5db7b4DEilckA zOtKOn#_Oey@$6Z3^7%(P^WWO}VSQZjSE3UkSqw%*b+5OPMa8@ERqL;*^Bnt@clZ!d z4-woMWe0xBgdF~>m7+;x^TUKTAQ%icJa9U`R|p%1GeI2oJo{vY$#VPVwTq*ZQ(iY_CbO=kbr#bG^~uT@Z9vA93X$OrrPtt0UnDF0 zX+k!_Y^K7?xX?Rv7 z7f(OMj%|a5c;TVS28<-r>#mD~z7!zEZ|jO{R4R#CbCv7+g4fGhiIsZx=FN$4p|ouW zldDJWjyNpvor#If!40K&G=5lfyHj)DjDXmP9+=aqIW=@z%-!%!;+AMRs=+fuo%CuG% zn3jB6dwlrkK_BpDB-)YjCfJRHdxl(s-Ro7`r;rSWUH&c7i{+ICKbKP}>lQX7P|oxG z@OPzS1kpUf+e=>2#IbaZe~TJi(*3Z;Dj;J`LmoK8>c_tAUtXSoWnp5HPBz>>K3;zB z6iPy%3#R!v=-6t*s{C$HRg4Tfln@`Ao%NM;h=JydIVw!;y+>8kbvQ!~vRA1XLh_4> zERZiE&d2h~yMFym23!CW)87{Ix|75zW@S>2IZp35DNK^HOiWQe< zRGzQW2G*}|8WC3&)=o0i5nM(jUXg^Uco|P$pkQvF*J8ai6p>odQ<(+1gbK0*W>K(@ z6Rkt-Vd-m9{wO;u?jYhEev|U>3_XMXhfZ@D1FAcK^L%>i|!-Is-!bxxjA}3 zZ!j9w7rLFf=9RRdH8!~ryo*#2LuC`T6nl|1(awOPQS7rBYa5}@0q(*1<|llkUI zI3j34Ub& zWp=Yw@S;`qh3?4;8D4a904HMr-^d>jIy05Sf)agf1=5=~G)YojT6!*_mb(2l_86qS zr*f})PLX6dMMmlRv?)}vn-pw^A@Xd+M1KCnjo%d}L$?yh@LoS)#;yJX9`$0b-x$!S zt9YuyWqwVBPv&wQ}q!dy&<$@Uhgx|dmgep<-h z(sr7F7XR<1l}XVC>gv{ae9U7)V%o~2JZ$B_X3buCC-DpRc)%+-Z=Cnx9EFFo~~n*RQNjX!_>*fQz8NUlvU zeSj>Uv}u^t_cMUi6#Y8ZO4R&PjB>lA|8nyBuYerDmtYEW-ml@q&amG^9l5OA!>yU>Ssg6w1AXu?t1WuOiF>s_@O zx259Bv5Cr&lBlZMo~jT7q#m*$Zo!Uv=ba*+SpB!x^_bLgW(VJuF4j2`Rw%#X+P=1~ zG5+vmpvdUBm4vR@oTaCg8NyY-_g21*aAZ=ox(a}wA>999OT4^L67$Sduh&-MEvo!B zQVo5)y3o_vcJ$s-7xeEer(fvt6%}gADYk4Xg~h2;a@?awhp(~z$&(>=QLSVCC8a{4 z0GSN@tZA>l^Q8%S?lmN*{qq(sG&v|lc3{8!mA(fh@gFN(DKKQMf? zDDX$8@1Kr9H(Xa{M8TKrk{kgvN3u)m7 z3{()Hi(ymYs`?KQILlaMO3Y-wg!F_++yx4;@9Q*>QDr6Hq*+t8Br z%N9x`ZfsUl)Jmt&9pkq%KM6IBvj}CJLTqq`JJV7cK59=jAs4r;?A;5d^Hn(4i{X^_ zWW8nAW5&*eU)+13%|}5GYOf051tJbYcMRS_{x7O|wT!@0Q~0(*DFxz#e*XhWLAJgg zv+}IJok!dUA=s8{n`fLX^M6+_+5KL8Y_T((qb-AsrZANmGlBUqn(Xpi8 z{1K{9+_9ZZ1j3=9l=W z#5ZGgd8Ps2p?^i+n;SJ{l^4?SxRG4FR#e`aC%+Hp0cscukh>4k606b>-Ape4&2Ttybc)01)mnqp^b9WcP)#ojwua_?CHVi zOl}h*Lke43T4r{2byc$`g^(8MFeQ5lpdL3<;x)OH!dXCsg1H)o`d)k(PYc{5AGJcX zQlrWzcxV{@;hwuZsjr`$PR>i2*w84izbhmExceK@Q9lx{)uA`dpN`0k76*~VP~4y3 zjDbuNEQIF)AOJef4%X`(u%rAqpnHSoCpwj7$I;uX?3=}e!D`%TE`yaHL)+Hj-%`*%I&!0L@1AhKh}j^QwRZu`O6!J3wq zZ>k^`FXZ|3y3u#`-rcX^f9+JFMv~R3WcA=tS$WUhv)|blPMQd(tLP2 zUS3(xh;#_;l*>)PxvEnbveM@L{r&y*7hG_`;n;=eD2459ZD;oP_gCpla5!=(@wCSx zO-E15)yU}=(ZY#_CiR7*?@`YbA++}##6?=VCb#Q}O4jUPd6G@8mHg&c3`uD+ua18ir=t%)35Q^&tW%UaLMLeJ0a{uHyY* z&M+WtGyoY&bHafG2aam>_rm_c!P$L%eQBwwQ`J57r0HA`h4BSsELjy8RfZS7R-7xN z0)s1?UhkFZQIY<x<~6V*E@Q{${OBQ7Nxoq>1YHho~Nwm z4A>T@&NfuCoTXXdOm^$}G}1Io+cW_?x!4%+y$!o$7Xy`G}ZBYMZI zdZp;7m9vgq?9F>`y(bqN&@#;he1jRRAOZ!iLw&EP++1g)vetLtdNl}^#BtQS>th7& zL(eIkJ$v?1&7UbOEiJ9^o>yn`vQcsP2*AOm0-&TERnV7ny6U}47S;70BMU_Qo~S@Q zFM40(z|#t(lbIj-M*yUVtKevr_E0oqNLSU&!*4P-%@@wmA**@y{ObP*n7vH#9B%c& z2u9=`0cDKyiIhI-arr%R@OfUd&M}=Vrt0qLi@kUQ%xa)nGo&MSo25?$IY1(+ zvna2whyI+Xt|P#wPNJ>iH<*Zz3VQkwh8{fe+uuGr>E<~|VRcPSVGpJg2h-#AH|CU3 z5s)d^+31x)i`fvokQ_|BK>1sT-?A7D8)^hV{w%jgbFH}=ffmm()Srw5g`I}P4{al= z@55*KJMlM73q7w6RhLN7{J5WU^Ap3lw2LuqoaWPLX|bHLhLpW*J>OZ^WiduQ?;U~X zEvmbyp)n2WPA<^U2B~@Wjw%B1!9eHz8D6egY#>UTqGo;ct}0-g>_l|=IR8z zAv4eFTxO@Ex)yaZJP#e^#_GNkp#w+?9z*To;$_R8?O~pS6xL6i*r8$H5o+=w=!Jo9 zP*Qk*kwLDCr7ssLM=li4Lh}fn`8yh2(KJ;VJsL4eFH(L22-yft7VX`5t?r`d4T9i< zbQqPY%qnVV`YyS8pR67jdna>$8~8%FcujPl_eu&Z&hT>8Npvhr*}c(5&-VuA%Fq9~ z0F3$O{n0Rg1U{-OQ53Q3USTlhKZ-NS0^Nv>dVYPLkkokc8vJ3&^c`D+aaRyaKT{+&SRp_;XPZ5 zhqn=M%H%JeHAB@4OeO1F7DLfqBJ0=Fj#gt1~UWYL1m8riQ>IL8qum^B)W$>)B&Q<1Kk6xY;Sm?F>@n?C%_VUm=8cj$1m@^mc#kF(c zF`salRX0(23}%c%MdhL8#%ps$Dtnvq_x8{T9;54lX1D{B`v?n*irVVy>km(=dX7?9 zUR}LDDJbaDxiV0CfP)HcEqM9Sn{sPNC@7Q_$29gJVj@{RieEDtONrP+)XQbv?~Ydm z3r)|@k&SqyuKssr;W0+P0z_Dzxyr=LCMpweeDu3ujtm5Axsuk71*E-NX3EJg-riMk8l_eH1%05SV=a?5MmQnEY9uuc#a#9(c)npbNMb z=FDh*#B|W0sHkP*#*HJl78s)xmQ`18C@wB;*9>sHIjVd(=%A?RS<&0kq(NptqupeQ zs9bbjkLk-sqJ`i+mY>V2RR7M8FTTw8XIi>gwdQBE;X>SpMvYM|UGE{fC+gYsy`3fS z92gGL2cQEyxRz^_zL#ah)}pfZI*P83zy;z{0lX)VBm%#P-FTk7k*iUIr^I7@QdZJ0gsB%ps65Ll>TDqsMuI{h{nUoyUcdStxzf*K z7g0U4F>0B3gYxo;%1b*OFXQOh&PetBv&txvtkv?JvGG}2hFPE-y({lS-BTx&WqCLS z%e1(pq+!L171?Vl=8(bjJanf*$abpfR;l!0Vn_w^sG3B#-$q{ zskp-Nm=;D8P8RU#@5Ab-4f~7fXl$#LdVoFo{@2F2)iu3I857z+7eO z=|syR__GHy7@mUAXwUSHPw$D|CF`BJa=#8svks2v7_s7AdHLbq=O`r2acNoEIs}_R z7&t}{(ZXWm!jK_17RL36M*#Anm&IbS5%T)l3R%6b7Mk~RSp}A>$5SO7EwITQs-Dhp zp$|EqdEA|L-pez6G-@yeEJuiG`Hw&Tcp7hma^rFfyf1q9hywHZ_z%+(N`p}}#tCR| z;|(=edFpYGS;%UDQLmbdMMZhY>Zv23it0EjJI`~};dnVHQ&l$L^;}?pqN9UePg!-~ z9o1+|gLRPwifY2?Ib|Xv-Ww6k)zuBjQA+xhqQb(pd?ChxkP3N)q9MR9!rx#Zh>XN> z4E@4i!j;Zl>HQ@*0+gjxN5f8BQTaU!`6Gbv@BR#Y*Jx9HC%wk=j$<(Su$mY)hXMev zU%x&zZ{W*7nW6D>0-rnkyd0Q!4(kHI@tyVK6x==XQQ1a4s-JTwr317+Pv1SNlU(&V z76##9;c0k4WAwhfPDT9|M>M(shzo)|ja59Y2yiv8%wJSaOfQNl@pmUU;@XD0^TO6Y_oO7xCShQ^Cq-`dYSn8djy>II>U>tGlPll;tgPc% z@8$XRci{0{AP`;8dROp?>X2y@5Tlq9=wx+GO+!y-=icP`fJkd&+mJ768axs~#=ebiaS6(#wRcWps!*^XC zlE_dZxj|t_5G6RqxmV`lRWOpc2?g7j?;AUC47Qew>rcRwY?5|OP z_V>r)$0%D0FEf#(aK{qAdVPN z^iKFdhsc7$IG4e}q^7EB)8GBw-!(ih5W&#S`#<=>-)`EpX(@xEbdE<>j|Sz(_5)ld z0F)Xm1^@$4!TcJ0=ZTn});J0-yn?L{ku4^qr$#ReyWkM`?OPjsQFB zIg$AgHE3^Go}Z}UdE?dh&vh(|c}461;>R86Ag%)tbzG~A2K2cY2#@KaMyhu_j|JN6 zCQNuLc^)#n2+8a@a~}NBkACzP?zh6toc-msQNb^QwL1Y4_zp^rhQQGQP;*dn9crSC z#t5>m%R*_*V^+aCC_0L(UF*Gg1PU-2I2^8y=q#nxz#lIQ`dE-h058|d1k*$L(wCw` zcDR;%2m{Db<}_m>h7gsBn_i=Vxi|1A{m5)}5b%4mdh4vbYX=c^a{lfPnBI`R-nH}b z{P<|qV4!oJ7wus5w_cmYtn^)?PS}ADA3FZYUVWYxkEJ85y}eH)#{xuVOr82rQc%!a zQ&Urt73CQ9CZNw)eh*3vryzVI03rYhMs3ie;yZg%A93&njYb0$&(~Ofdk@BUVSb|E zBd;{?Wmr)h>efYvvfd>Exk!;XWgo}V-S}#1hVS)fXgM;(Ia2JXVR-}g$jYqVZ?u?+ zNFp%ue0lyTY69vrp9?F{bDsAojV!hmy^B9L(t|9}a&Xi8G_5SKqd42(UP7EhqvE$o~ufm~K-1R~JVmyvU1O|cz1mM9)4IPB=mq7W! zMs!xNr{l2)Sq;`JC6cHYbM)nV>3@p%o*G={9||WPf(3;4un_z&C7|z8&*~$^#;N`XO)>Na8?5w4Pc^UxxglBl$2cTC3-*q?V#rG z>F*VROyo23^!?o^g&FIYdOA_ek>@7@e!o8gaW6+4BN5=}p$j|y$@TU3qwOcpLq>RV z`uh4F11MyLN_$U@|HueHgwxx>Ou#<4OaOocjy|r*8Y#wDdMy1ODN5FH1)W^r;Yz5A zr3*JJh~NVs1l|qz=~RKNg=`}B5dlILpkMuFudqx24br99R*PEM+gQJ*$UbYeAi8{orI`aFKjo>(RkIQ)gMEu#jb|~KK z=gISw5g<}uU;nd7_4T_oP)T3PUzCN3%wkh$fCWZ&7`uQ51_vQ170eu78x@u|@?40V zm6u4op!Jv@k0LphZBVI{jgVDSr{N)Q0QjkoCN*GVnUgVqRVrQD;T{@Ur0d0a=G9D{U{Etag=EuUWd0RR@ei zLc4>%j>olw8(NjHxuB}*7s;^%k@vp$y)Ba_P5R-%p&jm`7mHAoGgOgjWDdR&G%Pq) zkq*op029~=ml*KIk%g}QZ2hkV>jkcj&>ItvxpzIHrmEcPchKbkFp|ZQ6|LaWsP1!- zEMSSsA?sf4L8IQ?%gB#=qkb;$jFUHm6MP(X^ zhXxFqgEL|mTIN}is}ZO~<&xC~aEv=u(kH1VHm~c0Nj^B3%$zmrd&x17BS2*K?AiBE znlxz*OcNhbiC$P=4nTp7gN1;Z;AH?LoScV72D1j~`tplJQE%)#u9C%2G_9;2H0xRZ zOjlO^r#YkNVA22}`Cid5Y_7aV;O6-q?ftz@qV#wy8q)S_vU+08n<~2>k7Tq4>b-h& z|7bw$4QwpssA;;c>9rAf4hBpkOUA;kqP#iq=Mv-}9W`fjNAKL*)00f7t2zLoqC{w+M;lXMH>%=h!6$KN_e*yY)4O%T9{~eW|AJ1ycQN!@Yp4FpyFUd4q zNwXAsw8k9)qAPy{R8inmlx~#gEP%^(PT$GX%!=`F;Pvzi0)L^Gb(C%vxMkIO^p2hn zbmE+dNgdTr6M8yz%9ID*_rCY-NREMouzTKl=Y6}Xs;Wa5U)C3h6p4ifaDZ6@iq9cl zI9b7L@M2t>l}iMwpCMuf&JITF9ir>`KPyN|0mUaPd7x9|Cjs~X{Q;PqEa!R5^*-K! zqj!uNxr0wuW6xqKeoa;{ngsySy$)cJzId;l#hS7@6n{tmpR3V%c|^eMWtH{Lx&9aA zU=9xK-oZuBjXGJ+Gj*8LP2fg|f)CTp%;wDb_v9E!2qHJ%eDjub&N}Npuo2C0REQM5 z95RiqCIKd3Brt2xzz`mfb1-Z0a&WpbELR(|7oZkWE=BizM0wQnuBeg1Dl5^6Z`wPl zcOG+x=u67gduw?{(TY(Sj3!Zhh^LeF?ooMV_2RC$4rpG^UXMN!mNn%*i&g1&FXO1O z>-j9nx;}d6Tr!wrL@mmv-lt3_3w*Pl!Q%i2Fnx5;3<6c(7CO73S^B%rT(szz_(LGE z0hlDok_#{V9QQ{VO*yn6IG9c?!3)CZJj2eg@*Ru2;FJc_Ip6NkW z-dNmx$SR9m9htL==>Di9(%-5hK8odOj-@@gNt0Esyf16Ps4Vb~(nT8Z&EY>{x4hn< z+vwQm&ztx4TW`Jf@U{cT6GYzqj(7ZY(fs+p;%ZsZOJyOYZXk`hGXN317(fH*aV2tq z3>>Y#J%tx+F3DAi5xdZQ>b((=@SMlCc*9^?eZ9S@>83rbJ}Vlz$?EZQF%bvbtZV$e zojGKcmtPyDIok6gkj#2sR^#^a$oiiJIJp|3-kZguqCDneJh{p)dT#V=o{zrgN}GBL z-yGOJ+MIS|(7kjoqRPs_sZ*wWJvoMw2_lel&pr23aKbS7j4$C5RT^Gk=FFKX6T#>O z*a!Y^-@bi#1ujr7I9bV9C{Y7aKp71<{CKY4Q3KOTQ6EXfbolOMBV1PnK$)c+QA5rJ zmi|uB;xbV^j0I@?|5(5!VlP@Ynx;Q1IyV-RY&7uAmA_o?tjG2FQIJ}cufdG6i^|B~ z$FGanQr3HT9`PUT3#JU(9p`fCd7L|A(W39Y?|tuEo17>RnKy6VcNZ;Mv<~Rzy)iS! z|5?2}RyXImtqg&Oe+1{@JqBaJFfbdTH`1)eo7E#_0Y-FR^c)8bnrF&Vm>((~X)Bil z*t&J=@O{GtZNEJa5d+Brf?SFh)q{gebgkE$UOO7tY5io;_UIX2r~ZCX1NDX-4Oc&x z#^~h{<=>x~D~*91;qqR$kZ5^==viJ)dY-;TxD4)*i)H$;tly&@_xu)QbY9VW@japme_8M8z@hj1C?Hrp!YI(r7zjyyM(2I@ zS!ey?O>cVBPm^OTxwSe;l9#{qrQck-WXZZlVI!mUlzNWH2*v?0!b{>9Km+~}fC|hS z^x!xKL}mKXXpQz55feIEwxZWWEQIe)fZ<#jy$|ojFk`YU?O}4QHm2p6t2}clcf>ZL z^JBd~D}P#MQNE&gi9m>D7Bw`lUya>~IuUo+X6dC$G$Nw;_m4hL{|{#5ITwq}rN_BI zJo2}3O&BPA{Nvq20c6ZLGp7G3N;UZs2ts4D zC;TH|HrT|8vwPua#dq}L=)tpqBnu$?`)CRj(afka6*TzK(HkFG;-1AC3qu9VGH3Mu zvE+9w=c3+xwBB_zfXV{8sKMpx@%cRp|MqA4^Lc+RcIEFqR;HJ$9HaADOc|o(kOj!O z09KEAIr%lvG0vJtc!jQO1D!)>yr0m|UA+g9rxKAF zy*$KU7!3_Ch+$vQDl{^fIRFhfTDbxf7JSBN4jN#VW0J?z%*ZlfvW{h)S7q?IHv|%% z*9CCZ0SiIT007}|FYobi|40c(V;p*ZtPOB1lBMiXnq%o01rlzStV~6RhzTq(&yXhu{pg~(T7Fj6At*+@WfllU>0~wDh+&Mz zTD-pXdVJS_JkM*Ce$@NwyXHzu-!;lt)_b}slPhluP*FJ!W|%yBPxL&me}9LpcBa>J zL=eZx_B9WPUR`qDc|U!_8{Y84gLP z9qBm5THEQ^sZ5vkvBdE~b&zTmOKDX^SXQ(uV8bI22sD7Nk_QCH%}q!$>pSGj`u)52 zxhKdYK>oGvy7!*5&p!L?v;S{@|G)peH_jve3R6uGAHr}9Z=|p}pEJ%r`(ASxB`}CU zuDbHdyEseN6|U{-$#6{iN1$XdX9y$!4fsQ#aB#wcwV)@5!w3{jH(DK4svEAWk*8xK zdWctEC!MVNw=``aa2VqSgJsdA!3WRh0tQ=Sww2qK#-;$8f%v@}+kab~y2RG2`}Lqf zsJcwAmC*%MT5NUgrNxui(8Y6Cig3)&buDhRdZW=ttnP0`Qq2 zR2LPd8@CMv{1lPp)aP{r(~VAomRD(N)JFc6L&IQE=q12LSbmP^xEc_}Pf7ehMza^& zd$3V&S6$esx-B1D-T9dlu6(qD+LYG?z%G`h*N5?QSjwK?uU*;dNsH^5{TPo6VDW;5YP0PW-XhiCpM;GYuq;0VgmxL$bKN|>cL%X%kSB2 zpygtEe&Aut-^GsPaT}QG4$vjKo){So<_-V>3*p*7Xm@+|?ls->^H+Dz%lnBr0@7*_ zflQx1{mDraC%y}>u(sLKRS46tCkH^lN5a4}^xhbj0%*_-fN29pf*zgD)^y6`*Hid` zjeZ8(H5y!WED1+%a18z&E`>l4k&H^$onIOJD7|z_59qMaa0|G(* z+n!rKkDmBuyO#|(T&9hFPF;SU*J;wRDA#pOKF{w5z(D{8$IuZ0G%#%hECjm2c`=9! zL1g)u^Ur_i=IgKj(py0sb`ZJv;)~Z!pFaJ*>gGLVT+_<@|QXLogEuJigHE|zKotB|AZ z`>{+LxM`NfYoP~d|IiT(>%!*-@j@jkDop)aGcw90*&dY^d3g7LdJXeu@3%rDX3IH7sF|( zOvOs%d>gPRIHLi602Pkbr0f0t%B}%IHa6zT3AL|pZu%VA?fw)?xlj_3H_w(hCC zkIqwrlda6Qd+T!B>MrDSZ$ELhLmSYc{ll3G{U|6XXld`Bjn1vC2f>vsTI zj*zr$=zTB}3WXZitXVU)yuAFQva+&{Kt?=F5c^QRBo6)JIM@h;i>q+`QUD2}T`|Xo z`)P1-WSBy5$jWt3Tol!1gW8l%_5`*DB+uLS6_Js&cn*|x%a$!3n_}3%zDC!ZtEbjw zfp8Z>U1k>xbk&2aPF&ZfW1xQZ>`Ldlmkh*mDRYoIv#}&UhGlCHLBP1l0;2L7*BYz( zdGLX5L03kP9_{G>1{xR*jm~LOVd4F^-g@g1Gh+@36M>8vF`{(Fv}t!lV=>R{;GVk_ zRtz^5wr!_CC1ei{Ac1)Ue+ZNfBOII=3kE_H0n7!8NHak$Y^3iY%c2>DPN&Oe>mm59 zovYg9k@ITsEDZC9vsf>qsO!u&;^e3NnvKYEq@(P%XG^E-wsO1jwAHaIKR?Ez!O^cQ zuHQEE!PdFCj_Gqv2f;jSfRc`tpo4%ej2JPZh0VgGPuA9^MxJ}_legb~`)qR*MSs*meq@*ZAAI)<2ej?V=kfpZvP|M2nHb|(q9w z{BP_1TqcN38U2`rOTk<$%TKBFwX*zv_wi#%x-P#A05+)(Dv0UhDyM!%v}<;*MMXvC z4~rMKoZGy4Glp{?oc*I8%`itv4he`rzB^;at>ed!-?)9pjxSUO_hDJFVudL#F7}j& zz@jTlGZFv<7Bm8o0C7R#a1BD_!AkHOpn-Jg)d3_>PJoMc^y)^SSp$zTy}nL=G-&W! zJ682@Fhk(+@=;EdU$YS#(78ZEH&Q(rQ7XFbfwd_n#a4GZKb=;KOX*zTWlLkrUti}c zi>x2pJRlnY$~1CHy{|@ zIip6sYL23ODW8axL4yXRRoZEQo&`{J>5=8>yBO%7j%{IBzL0i^toGNFwFK+yRjMBtor&S_a@G?A5MZo2Wt z*;8-4@dI-dC7AoY74r1Fc~c&H?6DUR@X`%iY3|?eHEP&zt5>f!TT4sL$kC&{xibV3 zn-BwufSxW(ka95%I|C}bR(@B9;JT+Sk6(FR z_0wqCh)dU3I^cEXPxG9E4S28I*$!*_4Cvqg`JeveCpVa*EQidTp?vG6n-V!N~jC%8>3EZFQ=Drz^7r&(=JTO>{k>lc7n^cL_Z}`zhJ9 z$@Dwrl;scHfB#LU4agw}5y+IUfBoO5O`rZ!d1a;NXyv9kkh9J@%Nu!FwQ7}jOz%1K zg~ElyEsjT2Ae0S2g5LlKjBwx>Djd#AI9(w?Z`=cb!X*Z9AGzCJYXL!vt4DDyQD6&t z1Gpjn1+0pWV_h!Uz-*vrOHbhCwYtm_wEfHlDYmpOM&ZXMT=}Hyt^LkvHlx$K0L5iW zXjbK7O}Y$PTxGJ=gUp)|sPKVst6Aufw+v!Mg*o}8lXgt~<~MIZh=pkba>&gY%BD@5 z;`5$+?zNX+e)&RH1}XkuJ$i639nQ4@eMkOaELf}-;DY~P zD)2vW#D|fv1Sc(iJ*xa~>-lug>({F>4SO8K*x)&2xzd?6uDYUt4bro(C5Rc3PFj17 zW=wwP{J=z-H%!~w`vfV!Ev<_kg?yZ=exRt$F*0qiX_zep6m$w;+c~+ppMCe1TgHtZ zJ$jRABXU@n2pz2xF1h6TF=NJ*!bd?gg#x2O;K$%7jTCKP>s|`i0EpmF1=Ry10T992 zgnR)krKP2wUj)bTA^;xv4W`1aDi~8@V;;7iUB`oHcA(Qq2BPzm*Pt9|D0)3s$zFJk zERX)yjUDM_etwb;^jz1t0M{ky&b0)@Uwj}^LtW1RR%>4O-U;o1&mabd3t~VS+tT_2%Y*C1=UJ}O{ zYXaqiDZo8zXy(97!ZjG#!9Ag<057l=to9^X30|7+{auYkp118C!g8it5ZK0AP!2FN zmQ{)_i_MJCdGbHl2-!|+Bxo6l%q*;sWUaod%E067&n=C#n zTUlhAC&Na227sX5GWy!<7%>u)k+E+=Vc})hAHj)rZ3aXj^XJb$_mx*)UAA%K#st_y zkTn!2Oee3AR2DA-CJW3P00<|$QF*{bU@CBLQkV?zLjY)i_IPPfFr?MWuff9)ROE5l zkTgKL>|lNaNFZEfMuUedY+u(G>x?5?x>3tA=rRYT`#O(wX>9r06jPVSl~1~RAB?%; zcQ2XF@0?9soeBS=K8e+M1%mFHdM4Z^Y@uJbmak>?<6yJ(+a$DDgcR-MSmNRAmZX3Df_(-xUFDn|@N zAg?W1QuyQ(PrSPIZ-2|c5G|dmn%V~yz9jlq00LkjFmJe*4HyTVu5h*@b_Dl^089Wh z+zSUUlJO>dncDn<*vtnTYw>Hu5(uS`J)t~uGNTPdT#QKn$8S8R%gGuP5d4%vpAX7T zT;Ezam--m^SJKE-$4|Sfazz}*m`*V+mC^NFvzy2Kr>>%mxDf6Q*4(wQ(Flcue#?9;2t?K+SW3Im8h8x;6fE*PN zf&A%>H!gW`!GeWFYt|&7w2WzxisyQnbx+l zx&S1o(!0{9Q$8s{dVJe+>U#wRF59^v%*OUULY8OLV8jS&gd)HPMn^i{Ifik2_Uu`9 z*%en@ap@(O6q#c{jtYoCo__l2ac?eLws7;NO`Sm9p)f%iiOc?^&>w+x01f~NSP7H| zfCZ)kWx{!Y7+48F1J@xv&e0hOUkRgQ=`+#yB><47>fbK*A=#4@<|k)8YnG$UA#E1g zm>RAF8^QDIB^$K3dU)O|D43)Z7m)d-3(BNy?ZXBFtubp{_Y0)~H3B`_7wR5sqk?VX zUC_h?$oJ{f=k3eC`qgX3jT`r=IY#8Dfe2*IoH?V)wrzWP#e47d%n~zN{Td1<^l{ZQ zqPVTs;EM$lf%3q_!AoR}2!I0r8CDN4fm0LL!1Td+yjZ+sfC-oh!36j9TTM(Wv>v6A z>9nI&p3@-W$9Qc2r4UFElY%Z;?)~8p|HT}G za@0Wt^1I*tuIu^@8x|~Hy!c{NFjxV^)-a*Gn83Hatju)F&-bQABfWMSYAR0!#0Q`O zRsvvPWGBIdOou~m02Aa1e+fr&poq99>{(D!-WPdLS!_KepG7LZtHJ8^V$q8+>eqI? z6dNOwW)FY^Op8Dw7c$a$_|bGf`Lfr!Sb|HTUFM7JoUM$0=XH#di{VIN8U{WhRtX&t z!`ks4(Oxn$GgD`udFGunX3Til9HY`EKm@X4#fr>TAAK};;lhR2@2jaX*<$e`2v`GW z{&vsLHw#~R#XEjVzkX)Osi%6%jF%#VwDim6njP#J03wJh!8h`Sa^a-|OgIf2y$8%3 z0vo`D%mn#xbu}(`Nb|`C5b`$xO^3zHo?et&hJfrP%sRUTWqbnL;Fj{p725#)J8&3T}0pgp2}V2TIYk6hygb)T6?l$qt( zg!|*rcS2C{v#DiIr>F2!sN^Us%gJZ3QEWb|Yb1yOg=d6`hq6i^iJt^v6#8EJI+p^r z#@AqDBI(RAeVo_2?&(*4d96Ig(L8i6U?4Oh85xahh720?LL?IT=R5Dbv)mlx(&j(} z^2j5Pd}Cd4@uMHET-h~|nc1?)GZb^>%9UP-`{c=!y}+@zmM%3#fBma>U4HlOX6UJ> zn*1I;%>IT3Q;UUp96Q62m9P;22rz;Jg`x)?ib`g}WeWfzXdEzi7-A1*0x;o-4|*TQ zn{Z`%-iHlLZYKd@+4O=tWGfJks9Xf^xAx~}tYMV$H)ZFm9PM%9w#@4V7*Y$o* zVb?u^K4YjkKQ2%X(--Um?E%LanF_|-@8px;$<59E!5w$pvC14r(q=&fvUu_0_=l@j z{j_M!nwi_m%38MAgaV^C#^TS|d$e%E1XD02T!L}|bo`ds`V5X6!$b4iuUB_JFD$~I@QDr)t zDd%D=L47FcgeEBJv#zer0|~rWjJ%*j;fNjbtVt&E-s^`99{itYopHubFS_WWBf7Da zInhCcvT)(TYu|k9tp`6`x$-0oi*cJxDD%2?>&zA`o8PminJ{6Z$<56+OWs&wHWU|o z*Y@ny%M=VB?kW0y43i?(M9hnU$ZzSRU?TxwKv_Beg!}1oLnY z^q)u{3eNEwJQErq{*ztEJ!>Fnm;?gu^~=3@xOAQzxk+c^OEXV8R{?&~Phy+Y7L)+;mq}y0r|Vv}-!3zZCZGQAa-5=F0CW?HglD>-1L1K97b)-AtJiy{^y_!eEmNm1 zGsmeM6CeV4>7|!WTDN}vgR54rz7|Tu*{)DH#C^cTsjR3lr=4+z`O1YCdh-wdxOlOt zs;u;`2P?q_$av9=0f92RMn`a5Zf$||TqO-az-1qyyiCIdmys6b0^2~$3Cte!RNO9u zW)Xo24NtNiFbe`D8YxGPz(5#vi!$OKI0sgSkIg3{pGo)J1R4zz^phY@Zb(KzbLH)) zoI!g2);M3&Qg6K~y~ihgH$LZ`iQGlx^LLmuV(l`c=~* z7BfrVTw+Q}N?P(5K4OH&T59&~`$FDqG_nUGh)DB-Jr0#0CIExgXlg*|81+i_!SmdV z3m^zni^~vjdqkQiawwViHxynAuh5OnfVRi2>dt3=TWLf|-usz0<5V*7i z0hS=(VaqS58Kuv;d?dC!blK===T;2>4){Gd!<&AO`sR1it!vl!d-v+~z^%95+9nqd zI$Uy0f(Yf|habMSWb@|xii?W}LwV>|z>7trU$=IxsVFZu=Z+d>&OZC>1A%3jfR;*` zk3adu3>-MnyGG7~k-f3}O`&p0=NcE5VN@&q9*kDhE7~JZoP(k>5|yk1V1OQuYl@)p z^1}&vjAfDR2=|Aw^WMXT4fCE2{~0r*dv*PsE^5#6qmDV5ksIiEQ_0JrFn;+apa<&UaxjA=hU~BobRYcj@x;&N(^rzVn^$98>dN%!v*nkYD}k zSMkQi#{XDdRP=+=&6_(y(V#qB?Hzm4z@+JrkzqzOJ6JKQ0fj&9w9{Jl#nEBrvT;K6 zzB2?72u%z&EPNQ*3dM%<(N`k#r9VYR(vm?iow$U1!VoK1kEni8Xg5X)e?zmefsoI%n2^X4Twl$SD&DYR zB6>?uQ1r@Z_;US9j_=F(5DgwKz<}_)W+?p4o>?**>DR!A`{e*sxaSPdv4Km!g=?gO z%1uT9h2TgI!|~Cpa`=&PEV9hJhxVaJrX(G)bRx?+INXSf8-_vW zwrlkewghdyBeV_F594=GR=y)XFPDqR$jB(k%F22=5(>?oHEY&RXJJn;IqpD&^3=1> zUbS}3n(uDdu%Qq=CK^1PmeP;mVjui1=dtK0QXZq?$p$Nb%kXvyED$+SPqG#^Vm5fj zhv*&hq%zYt!59{frR5*N1<|J8`1}m0N zj~FpcI=_h&J`)|#eAnDXku$IX9QcoN5y0hwPc(Bo<>V~S>D1}P>fGG9v!_ly?t;a> ztQ@x>LV4ylzq$0o4?g(e#~*(@rn)gcvH4~F-&)Qbi=O*%~6LcN`4t((L=_n>} zNK=K=^uv)zb(hYa7j?|Zd8$XZZf_m$u^wMWj(ZTH{9?|WiJyG@@%KLa^wTRo|NQe1 z8Y>zY*V3^0LMRd>AX@3=S{)J~w8#ZLR4)V1U_DTIxAA z2M-zI1%#EAm6@?)$9kg(P*V1yaOwg$upcodEg~)Qd0@-{va^@&sjq+HzPs-}u(@-)_{s?bB9uqx&K>*7_U%`cm6d(3va&Lpio?ccqtX%- zB&8;sp>KtOX7V~4=*Tr#HAUBZB;8_k-vYrUTIyz|a8pMUn5S-W8WidnTf>KtVCj7C>;Lt z-FM#k#vyEOCxo1EAVPWKi6>6lQ&V$!NlD4ns>;f6! zlfVpPEC`HQrI_CVU&WhmzUk!;b7sWw;mbRB?fSFtef!(5@%bK{Gv~B@)z#PS+O_Lz zO-)Uw?%%&ZLKBUOY8w@?jj%{x48#Tq5@58?iP!VD%d8<_@LR80DtF7TTfF}+L z-#kJB>W;8?xlwvSL4lVZ`GI}>0eJ+5`+m_PFWmp)@#BBrqeqYDr`~+?e7|~m;O9Rt ztgWe;(Ad;8df(o?=ku8)06_F855?xJWqs&#Hm9xY8VzDHZ4-b>tQ<$c&xpq>G7^cm zL&g+kXJx(q{qKMOonWn_UD8QAhzNP~(MR*ktExut*}ePnojZ44nXIkNr{fL1H-|K3 zkQo%8qa1Q;3GJZ8c?7`$EQ*SXT0-QJmgW?IfPqcin*>7o&XE^_5gdhFqXgG6LKWb| zEg75Fk!{Gx$auSZ_wN7KH7~Dt>PB+l$M^=F&-bjv$Ar0V?)EJhK7by z8XFs?dxv!yl9-7dkT9Yh@R&_fS(ipS$)|5jFZ^}b~Cw7u2UXQt}v!jh%Xc}UQZqbAx6 z0zkl=z{+eiRS=iJMU4OkdOAPO<3E-#fHXG8EbxAk!lOL!o4~Ar`GWh^*VnI4WM=*) zuSbu^Z@=xf_d}sj`pB;U^2=ZTGBXm16x5_rr>9b>(P3i-r|Rl@H8eDwY>bIFfB|6i z1r1Er1L{SMglUsSG7Fk6EwM8AG+!rtNBcU&V%sB;$ln_p8%yKy_y;+iJFo2!3ay(l zW5$6g-0gB$r5!{9%8!5i;|r3h)R`s}8oj%!YIIF9*^hAq^m#BQgFUijA&7zmfGk_K z%yWtYJfQ42FBh?a5M(xP+-S;o?mPfg`}doD$)uOp$dMyG(}lbFMWRt}%~|+F1`Zs! zKAxHRdaAbey{?@)y*hK|%%nL2^7!MA=kD6IYskLZ+TO8PEI%HL4XjP2`ZhE)bZ=~G z$~DI1G&VGJZfa`EX>4o^6Zr7#-uf!hsKHX0bgDMjWo+vOjn9YhX7X3w6TAB{%)M`E$FDk>^QHq_Uj zTep9Ix4OEzeDp6t(7|)4 za*|;r5~+$sqdQ}<*osDDmUr#csW_QTmfUmCJyoU+&26eMCf+fX%1EVBnR$76nW0dq zONT_FV{vhDyhr!$vEf69dcL8*eE4BQ&tARiyLIc9EdT7YT~#$T)fu5sZ6c9K#^dq2 zyu7?*d%Q;5lXeg}MDolt&-DKI^UqJOtf)9O7LE3fMxz7w?%Q`tV?#q;C=|*~rBVs{ zJ^&sZp7f|a;upX`njNAH#PSv~0{Dc(wV_aGS1cO+EE0`w-m_;v}=#+V`1d-wK?gu}V@jg6W6_U`Qv z4Tq!g%uGZ=HPxh2jT!NHT{Ien39>g9i~T)2E30_-?%mtM;c#{D-o1C;eDlp;TmYqA d+Ql4Q`F~g(=|RgETqOVi002ovPDHLkV1ioGX0!kR diff --git a/Client/macos/Assets.xcassets/wh-ch720n.imageset/Contents.json b/Client/macos/Assets.xcassets/wh-ch720n.imageset/Contents.json deleted file mode 100644 index d0874cdd..00000000 --- a/Client/macos/Assets.xcassets/wh-ch720n.imageset/Contents.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "images": [ - { - "idiom": "universal", - "filename": "wh-ch720n.png" - } - ], - "info": { - "author": "xcode", - "version": 1 - } -} \ No newline at end of file diff --git a/Client/macos/Assets.xcassets/wh-ch720n.imageset/wh-ch720n.png b/Client/macos/Assets.xcassets/wh-ch720n.imageset/wh-ch720n.png deleted file mode 100644 index e885a9b32957ee48018508b59ecff196363af807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122300 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

@@ -39,62 +30,83 @@ Sony locks headphone settings behind their mobile-only *Sound Connect* app. If you live on a laptop, you're stuck. SonyBridge talks to the headphones directly over Bluetooth RFCOMM using Sony's -reverse-engineered binary protocol — no phone required. +reverse-engineered binary protocol — no phone required. It lives entirely in your macOS menu bar: no +Dock icon, no window, just a native menu. The original [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) only spoke Sony's **first-generation** protocol, so newer headsets (WH-CH720N, XM4/XM5, WF-series, LinkBuds…) just timed -out on connect. SonyBridge adds full **second-generation ("v2") protocol** support and a native SwiftUI -app for macOS. +out on connect. SonyBridge adds full **second-generation ("v2") protocol** support and a native macOS +menu bar app, built with AppKit/SwiftUI. ## ✨ Features -- 🎚️ **Ambient Sound Control** — Noise Cancelling · Ambient Sound (0–20 levels) · Off -- 🗣️ **Focus on Voice** passthrough -- 🎛️ **Equalizer** — presets *and* a full **Manual mode** with 5 bands + Clear Bass -- ✨ **DSEE** — Sony's audio upscaling for compressed sources -- 🔋 **Battery level** — live percentage, including **per-earbud + case** for TWS models -- 🎧 **Codec & firmware** readout -- 🧩 **Capability-gated extras** — Auto Power-Off · Speak-to-Chat · Adaptive Volume (only shown when your device supports them) -- 🖼️ **Device hero image** — your headphones' official Sony product render -- 🔄 **Live button sync** — changes made on the headset reflect in the app -- 🔌 **Auto-connect** to your already-paired Sony headset -- 🧬 **Dual-protocol** — auto-detects and speaks either protocol generation -- 🌑 **Modern UI** — dark, minimal, shaped after Sony's own app, in native SwiftUI +**Sound modes** +- 🎚️ **Ambient Sound Control** — Noise Cancelling · Ambient Sound (with a 1–20 level slider and a Focus on Voice switch) · Off +- 🔄 **Live button sync** — following the headset's own NC button live, even while the menu is open + +**Equalizer** +- 🎛️ **Equalizer** — presets *and* a **Manual mode** with vertical sliders (5 bands + Clear Bass on older models). The **WH-1000XM6**'s 10-band equalizer is read and displayed, but changing it isn't available yet — its write format isn't verified, so the sliders are greyed out with a "coming soon" note -## 📥 Download +**Other settings** *(each shown only if your headset supports it)* +- ✨ **DSEE** — Sony's audio upscaling for compressed sources +- 🗣️ **Speak-to-Chat** and **Adaptive Volume** +- ⏱️ **Auto Power-Off** — Off, 5 min, 30 min, 1 hour, 3 hours, or when taken off - - - - - - - - - -
PlatformGet itNotes
macOS +**Battery & info** +- 🔋 **Battery level** — live percentage, including **per-earbud + case** for TWS models +- 🎧 **About the Headphones** — firmware, codec, protocol, and Bluetooth address -`brew tap AmitRajput-Dev/tap && brew install --cask sonybridge` +**Automatic connection** +- 📍 **Lives in the menu bar** — a native macOS menu; the icon shows the current mode and dims when disconnected +- 🔌 **Connect Automatically** (on by default) — at launch and whenever your headset connects to the Mac +- 🔁 **Reconnect Automatically** (on by default) — retries if the control link drops while the headset is still connected, backing off from 3 s up to every 60 s +- 🚀 **Launch at Login** (off by default) — uses macOS Login Items -or [**Download .app**](https://github.com/AmitRajput-Dev/SonyBridge/releases/latest) +**Languages** +- 🌍 **English & French** — follows your macOS language -macOS 11+ · Apple Silicon & Intel
+## 📥 Install -> 💡 After launching, **connect your headphones in your macOS Bluetooth settings first**, then open SonyBridge and hit *Connect*. Keep audio playing — Sony headsets drop the control link when idle to save power. +**Requirements:** macOS 13 or later, and the Xcode **Command Line Tools** (no full Xcode app needed): -
-macOS install notes (Gatekeeper) +```sh +xcode-select --install +``` -The app is ad-hoc signed (not notarized — no paid Apple Developer account). The Homebrew cask clears the -quarantine flag for you. For a direct download, allow it once: +Then: ```sh -xattr -dr com.apple.quarantine /Applications/SonyBridge.app +git clone https://github.com/AmitRajput-Dev/SonyBridge.git +cd SonyBridge +make install ``` -…or right-click the app → **Open** → **Open**. Homebrew also asks you to trust the third-party tap the -first time (`brew trust AmitRajput-Dev/tap`). -
+`make install` builds a release version, quits SonyBridge if it's running, and installs it to +`/Applications/SonyBridge.app`. Afterwards, launch it from Launchpad, Spotlight, or Finder. + +> 💡 On first launch, macOS asks for **Bluetooth permission** — allow it, otherwise SonyBridge can't +> talk to your headphones. Pair and connect your headphones in macOS **Bluetooth settings** first. + +**To update:** pull the latest changes and run `make install` again. + +**To uninstall:** quit SonyBridge, then drag `/Applications/SonyBridge.app` to the Trash. If you turned +on **Launch at Login**, turn it off first (from the SonyBridge Options menu) so macOS doesn't keep a +stale login item around. + +## 🕹️ Usage + +Click the SonyBridge icon in the menu bar to open the menu. If nothing is connected yet, choose +**Connect…** — it uses the Sony headset already connected to macOS, or opens the macOS Bluetooth picker +if none is connected yet. + +From the menu you can: +- switch **sound modes** (Noise Cancelling / Ambient Sound / Off) and, in Ambient Sound, adjust the level and Focus on Voice; +- pick an **Equalizer** preset or dial in a **Manual** curve; +- toggle **DSEE**, **Speak-to-Chat**, and **Adaptive Volume** (only the ones your model supports); +- set **Auto Power-Off**; +- check battery and firmware under **About the Headphones**; +- turn **Launch at Login**, **Connect Automatically**, and **Reconnect Automatically** on or off under **SonyBridge Options**; +- **Disconnect** (auto-reconnect stays off until the headset reconnects on its own or you click **Connect…** again) or **Quit SonyBridge** (⌘Q). ## 🎧 Supported headphones @@ -107,23 +119,29 @@ first time (`brew trust AmitRajput-Dev/tap`). > Only the WH-CH720N is fully hardware-verified. Others share the same protocol family, so the basics > should work — per-model quirks are untested. Reports and PRs for other devices are very welcome. +> +> On the **WH-1000XM6**, everything works as listed above except changing the equalizer in Manual mode +> (reading its 10-band equalizer already works) — that's coming in a later update. ## 🚀 Build from source -
-macOS (menu bar app) - Requires the **Xcode Command Line Tools** (`xcode-select --install`) — the full Xcode app is not needed. ```sh git clone https://github.com/AmitRajput-Dev/SonyBridge.git cd SonyBridge -make run # builds build/SonyBridge.app and launches it +make # debug build → build/SonyBridge.app +make run # builds and launches the app (add DEBUG=1 to log every protocol frame) +make test # unit tests + translation check +make release # universal (Apple Silicon + Intel) build, zipped to build/SonyBridge.zip +make clean # remove build/ ``` -`make test` runs the unit tests, `make release` builds a universal (Apple Silicon + Intel) zip, and -`make run DEBUG=1` logs every frame exchanged with the headphones to `build/app.log`. -
+`make run DEBUG=1` logs every frame exchanged with the headphones to +`~/Library/Logs/SonyBridge/app.log` (`build/app.log` is a symlink to it). + +> ⚠️ Always launch SonyBridge through `open`, Finder, or `make run`/`make install` — never by running +> `Contents/MacOS/SonyBridge` directly, or macOS's privacy protection can close the app. ## 🔬 How it works @@ -143,6 +161,14 @@ init handshake and per-frame host-ACK the newer devices require, plus battery, E Protocol byte layouts were cross-referenced against [**GadgetBridge**](https://codeberg.org/Freeyourgadget/Gadgetbridge)'s Sony implementation. +## 🛠️ Troubleshooting + +- **SonyBridge doesn't see my headphones** — pair and connect them in macOS **Bluetooth settings** first, then use **Connect…** in the menu. +- **No Bluetooth permission prompt, or you denied it** — macOS asks for Bluetooth access on first launch; allow it, or SonyBridge can't talk to your headphones. +- **The menu bar icon is missing** — on MacBooks with a notch, the icon can be hidden when the menu bar is full. Free up some room (quit or hide other menu bar icons). +- **Controls stopped responding** — click **Disconnect** then **Connect…** in the menu, or turn the headphones off and on. +- **The app quits itself right after opening** — launch it through `open`, Finder, Launchpad, Spotlight, or `make run`/`make install`, not by running `Contents/MacOS/SonyBridge` directly; macOS's privacy protection can close apps launched that way. + ## 🤝 Contributing Contributions are very welcome — especially **device reports** and **testing on real hardware**. @@ -159,21 +185,6 @@ SonyBridge builds directly on the work of: - [**semvis123**](https://github.com/semvis123) — the original macOS port - [**GadgetBridge**](https://codeberg.org/Freeyourgadget/Gadgetbridge) — reverse-engineered v2 protocol reference -**Community contributors & testers:** - -- [**@CrisProCrack**](https://github.com/CrisProCrack) — WH-1000XM4 (v1) connect fix -- [**@Sebsdnl**](https://github.com/Sebsdnl) — Linux/Wayland crash fix & ULT WEAR support -- **u/More_Way_6784**, **@joelslaby** — WH-1000XM4 hardware testing - -## ❤️ Support - -If SonyBridge is useful to you, consider supporting it — it keeps the reverse-engineering going: - -- 🌍 [**GitHub Sponsors**](https://github.com/sponsors/AmitRajput-Dev) — worldwide (cards, one-off or monthly) -- 🇮🇳 [**Razorpay / UPI**](https://razorpay.me/@amitpratapsingrajput) — for supporters in India - -Starring the repo helps too. ⭐ - ## ⚠️ Disclaimer This project is **not affiliated with, endorsed by, or connected to Sony**. It talks to your headphones From 2aceb82a3f222e33ebe125c25b4744fdc8f2ddd0 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 11:03:54 +0200 Subject: [PATCH 17/50] docs(readme): XM6 verified, drop release/stars badges, build-from-source contributing --- README.md | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index d3a9ccd9..86dcbeef 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,6 @@
[![Build](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/build.yml/badge.svg)](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/build.yml) -[![Release](https://img.shields.io/github/v/release/AmitRajput-Dev/SonyBridge?include_prereleases&sort=semver)](https://github.com/AmitRajput-Dev/SonyBridge/releases) -[![Stars](https://img.shields.io/github/stars/AmitRajput-Dev/SonyBridge?style=flat)](https://github.com/AmitRajput-Dev/SonyBridge/stargazers) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) ![Platforms](https://img.shields.io/badge/platform-macOS-blue) @@ -41,7 +39,7 @@ menu bar app, built with AppKit/SwiftUI. ## ✨ Features **Sound modes** -- 🎚️ **Ambient Sound Control** — Noise Cancelling · Ambient Sound (with a 1–20 level slider and a Focus on Voice switch) · Off +- 🎚️ **Ambient Sound Control** — Noise Cancelling · Ambient Sound (with a 1–20 level slider (1–19 on older models) and a Focus on Voice switch) · Off - 🔄 **Live button sync** — following the headset's own NC button live, even while the menu is open **Equalizer** @@ -112,16 +110,16 @@ From the menu you can: | Status | Devices | |--------|---------| -| ✅ **Verified** | WH-CH720N, Sony ULT WEAR (WH-ULT900N) | -| 🟢 **Expected** (v2, over-ear — NC/Ambient/battery/EQ) | WH-1000XM5, WH-1000XM6, WH-XB910N, WH-CH520 | +| ✅ **Verified** | WH-CH720N, Sony ULT WEAR (WH-ULT900N), WH-1000XM6 | +| 🟢 **Expected** (v2, over-ear — NC/Ambient/battery/EQ) | WH-1000XM5, WH-XB910N, WH-CH520 | | 🟡 **v2 earbuds** (controls work; battery format differs) | WF-1000XM4, WF-1000XM5, WF-C700N, LinkBuds S | | 🔵 **Legacy** (v1 protocol — NC/Ambient only) | WH-1000XM4, WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | -> Only the WH-CH720N is fully hardware-verified. Others share the same protocol family, so the basics -> should work — per-model quirks are untested. Reports and PRs for other devices are very welcome. +> The Verified models are hardware-tested. Others share the same protocol family, so the basics should +> work — per-model quirks are untested. Reports and PRs for other devices are very welcome. > -> On the **WH-1000XM6**, everything works as listed above except changing the equalizer in Manual mode -> (reading its 10-band equalizer already works) — that's coming in a later update. +> On the **WH-1000XM6**, changing the equalizer in Manual mode is coming in a later update (reading its +> 10-band equalizer already works). ## 🚀 Build from source @@ -174,7 +172,7 @@ Protocol byte layouts were cross-referenced against Contributions are very welcome — especially **device reports** and **testing on real hardware**. - 🐛 **Found a bug / have a device to report?** [Open an issue](https://github.com/AmitRajput-Dev/SonyBridge/issues/new) with your model and what happened. -- 🧪 **Want to test?** Grab a [release](https://github.com/AmitRajput-Dev/SonyBridge/releases) and tell us how it behaves on your headset (a screenshot helps a lot). +- 🧪 **Want to test?** Build it from source (`make install`) and tell us how it behaves on your headset (a screenshot helps a lot). - 🔧 **Code?** Fork, branch, and open a PR against `main`. CI builds the macOS app on every PR. ## 🙏 Credits From 23ec865b20b9102aa28a30b5875449b0f4765ceb Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 14:17:13 +0200 Subject: [PATCH 18/50] add --- Client/Headphones.cpp | 38 ++++ Client/Headphones.h | 17 +- Client/macos/HeadphonesBridge.h | 26 ++- Client/macos/HeadphonesBridge.mm | 212 ++++++++++++++-------- Client/macos/HeadphonesMenu.swift | 4 +- Client/macos/HeadphonesModel.swift | 10 +- Client/macos/MacOSBluetoothConnector.mm | 5 + Client/macos/fr.lproj/Localizable.strings | 4 +- Client/tests/FakeConnector.h | 5 +- Client/tests/HeadphonesTests.cpp | 93 ++++++++++ README.md | 28 +-- 11 files changed, 337 insertions(+), 105 deletions(-) diff --git a/Client/Headphones.cpp b/Client/Headphones.cpp index 57722862..f41f5e92 100644 --- a/Client/Headphones.cpp +++ b/Client/Headphones.cpp @@ -76,18 +76,32 @@ int Headphones::getVptType() return this->_vptType.current; } +bool Headphones::isV2() +{ + return this->_conn.getProtocolVersion() == SonyProtocolVersion::V2; +} + void Headphones::initDevice() { + if (!this->isV2()) return; // v2-only (see Headphones.h) // v2 devices expect an init handshake before they answer GET inquiries. Best-effort: the reply // (INIT_REPLY, 8 bytes on v2) is ignored here - we only need the device to enter the ready state. this->_conn.sendCommandAndReadResponse( { (char)V2Command::INIT_REQUEST, 0x00 }, V2Command::INIT_REPLY ); + this->_initialized = true; +} + +bool Headphones::isInitialized() +{ + return this->_initialized; } void Headphones::requestBattery() { + // CRITICAL: 0x22 is POWER_OFF on v1 - never send it on a v1 link (see Headphones.h). + if (!this->isV2()) return; // Single battery (over-ear and most models): GET 22 00 -> RET 23 00 try { auto resp = this->_conn.sendCommandAndReadResponse({ (char)V2Command::BATTERY_GET, 0x00 }, V2Command::BATTERY_RET, 0x00); @@ -112,6 +126,8 @@ void Headphones::requestBattery() } // TWS earbuds: dual L/R (22 09 -> 23 09 ) and case (22 0a -> 23 0a ). + // Re-check the live link before each 0x22 frame: any 0x22 is POWER_OFF on v1, whatever the subtype. + if (!this->isV2()) return; try { auto resp = this->_conn.sendCommandAndReadResponse({ (char)V2Command::BATTERY_GET, 0x09 }, V2Command::BATTERY_RET, 0x09); if (resp.size() >= 6) { @@ -123,6 +139,7 @@ void Headphones::requestBattery() } } catch (...) {} + if (!this->isV2()) return; try { auto resp = this->_conn.sendCommandAndReadResponse({ (char)V2Command::BATTERY_GET, 0x0a }, V2Command::BATTERY_RET, 0x0a); if (resp.size() >= 4) { @@ -149,6 +166,7 @@ int Headphones::getBatteryCase() { return this->_batteryCase; } void Headphones::requestEqualizer() { + if (!this->isV2()) return; // v2-only (see Headphones.h) // GET: 56 00 -> RET: 57 00 (decoded by ProtocolParsers::parseEqualizer) auto resp = this->_conn.sendCommandAndReadResponse({ (char)V2Command::EQ_GET, 0x00 }, V2Command::EQ_RET); if (auto eq = ProtocolParsers::parseEqualizer(resp)) @@ -174,6 +192,7 @@ EQ_PRESET Headphones::getEqualizerPreset() void Headphones::setEqualizerPreset(EQ_PRESET preset) { + if (!this->isV2()) return; // v2-only (see Headphones.h) // SET preset: 58 00 00 this->_conn.sendCommand({ (char)V2Command::EQ_SET, @@ -187,6 +206,7 @@ void Headphones::setEqualizerPreset(EQ_PRESET preset) void Headphones::setEqualizerCustom(int clearBass, const std::vector& bands) { + if (!this->isV2()) return; // v2-only (see Headphones.h) // SET custom: 58 00 A0 06 (0xA0 = MANUAL preset; values clamped to [-10,10]) auto clamp = [](int v) { return (char)(unsigned char)(std::max(-10, std::min(10, v)) + 10); }; Buffer cmd = { @@ -220,6 +240,7 @@ int Headphones::getEqualizerBand(int index) void Headphones::requestDsee() { + if (!this->isV2()) return; // v2-only (see Headphones.h) // GET: e6 01 -> RET: e7 01 auto resp = this->_conn.sendCommandAndReadResponse( { (char)V2Command::DSEE_GET, 0x01 }, @@ -229,9 +250,15 @@ void Headphones::requestDsee() { std::lock_guard guard(this->_propertyMtx); this->_dsee = resp[2] != 0; + this->_hasDsee = true; } } +bool Headphones::hasDsee() +{ + return this->_hasDsee; +} + bool Headphones::getDsee() { return this->_dsee; @@ -239,6 +266,7 @@ bool Headphones::getDsee() void Headphones::setDsee(bool enabled) { + if (!this->isV2()) return; // v2-only (see Headphones.h) // SET: e8 01 this->_conn.sendCommand({ (char)V2Command::DSEE_SET, @@ -283,6 +311,7 @@ void Headphones::probeNcAsmInquiryType() { // The WH-1000XM6 answers the legacy 0x17 inquiry with all zeros and reports its real state on 0x19. // Setting the mode still goes through 68 17, which the XM6 accepts. + if (!this->isV2()) return; // v2-only (see Headphones.h) try { auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, 0x19 }, 0x67, 0x19); @@ -327,26 +356,32 @@ void Headphones::probeCapabilities() { // Each GET is best-effort: an unsupported feature times out (recv timeout -> throw) and stays unsupported, // so we never expose or send a command the device can't handle. + if (!this->isV2()) return; // v2-only (see Headphones.h) try { auto r = this->_conn.sendCommandAndReadResponse({ (char)V2Command::FW_GET, 0x02 }, V2Command::FW_RET); if (r.size() > 3) { std::lock_guard g(this->_propertyMtx); this->_firmware = std::string(r.begin() + 3, r.end()); this->_hasFirmware = true; } } catch (...) {} + // The live link is re-checked before each probe: this sequence can take ~12 s to time out. + if (!this->isV2()) return; try { auto r = this->_conn.sendCommandAndReadResponse({ (char)V2Command::CODEC_GET, 0x02 }, V2Command::CODEC_RET); if (r.size() >= 3) { auto n = codecName((unsigned char)r[2]); if (!n.empty()) { std::lock_guard g(this->_propertyMtx); this->_codec = n; this->_hasCodec = true; } } } catch (...) {} + if (!this->isV2()) return; try { auto r = this->_conn.sendCommandAndReadResponse({ (char)V2Command::APO_GET, 0x05 }, V2Command::APO_RET); if (r.size() >= 4) { std::lock_guard g(this->_propertyMtx); this->_autoPowerOff = apoIndexFromCode((unsigned char)r[2], (unsigned char)r[3]); this->_hasAutoPowerOff = true; } } catch (...) {} + if (!this->isV2()) return; try { auto r = this->_conn.sendCommandAndReadResponse({ (char)V2Command::BTNMODE_GET, (char)V2Command::SUB_ADAPTIVE_VOLUME }, V2Command::BTNMODE_RET, V2Command::SUB_ADAPTIVE_VOLUME); if (r.size() >= 3) { std::lock_guard g(this->_propertyMtx); this->_adaptiveVolume = (r[2] == 0); this->_hasAdaptiveVolume = true; } } catch (...) {} + if (!this->isV2()) return; try { auto r = this->_conn.sendCommandAndReadResponse({ (char)V2Command::BTNMODE_GET, (char)V2Command::SUB_SPEAK_TO_CHAT }, V2Command::BTNMODE_RET, V2Command::SUB_SPEAK_TO_CHAT); if (r.size() >= 3) { std::lock_guard g(this->_propertyMtx); this->_speakToChat = (r[2] == 0); this->_hasSpeakToChat = true; } @@ -358,6 +393,7 @@ int Headphones::getAutoPowerOff() { return this->_autoPowerOff; } void Headphones::setAutoPowerOff(int index) { if (index < 0 || index > 5) return; + if (!this->isV2()) return; // v2-only (see Headphones.h) this->_conn.sendCommand({ (char)V2Command::APO_SET, 0x05, (char)APO_CODES[index].first, (char)APO_CODES[index].second }); std::lock_guard guard(this->_propertyMtx); this->_autoPowerOff = index; @@ -372,6 +408,7 @@ bool Headphones::hasSpeakToChat() { return this->_hasSpeakToChat; } bool Headphones::getSpeakToChat() { return this->_speakToChat; } void Headphones::setSpeakToChat(bool enabled) { + if (!this->isV2()) return; // v2-only (see Headphones.h) // SET: f8 0c 01 (enable bit is inverted on v2) this->_conn.sendCommand({ (char)V2Command::BTNMODE_SET, (char)V2Command::SUB_SPEAK_TO_CHAT, (char)(enabled ? 0x00 : 0x01), 0x01 }); std::lock_guard guard(this->_propertyMtx); @@ -382,6 +419,7 @@ bool Headphones::hasAdaptiveVolume() { return this->_hasAdaptiveVolume; } bool Headphones::getAdaptiveVolume() { return this->_adaptiveVolume; } void Headphones::setAdaptiveVolume(bool enabled) { + if (!this->isV2()) return; // v2-only (see Headphones.h) // SET: f8 0a (inverted) this->_conn.sendCommand({ (char)V2Command::BTNMODE_SET, (char)V2Command::SUB_ADAPTIVE_VOLUME, (char)(enabled ? 0x00 : 0x01) }); std::lock_guard guard(this->_propertyMtx); diff --git a/Client/Headphones.h b/Client/Headphones.h index 2f1ce99d..635728c5 100644 --- a/Client/Headphones.h +++ b/Client/Headphones.h @@ -1,6 +1,7 @@ #include "BluetoothWrapper.h" #include "Constants.h" +#include #include template @@ -33,8 +34,15 @@ class Headphones { void setVptType(int val); int getVptType(); + // SAFETY: every v2-only inquiry/setter below (init, battery, equalizer, DSEE, NC/ASM probe, capability + // probes and their setters) returns WITHOUT sending anything when the live link isn't v2 - opcode 0x22 + // (BATTERY_GET on v2) is POWER_OFF on v1. This guards against a stale session's queued work reaching a + // v1 headset that got connected on the same BluetoothWrapper right after. + // Handshake the device expects before it answers inquiry (GET) commands on the v2 protocol. void initDevice(); + // True once initDevice() got its reply. Per object, i.e. per connection session. + bool isInitialized(); // Battery (v2 inquiry). getBatteryLevel() returns -1 until requestBattery() succeeds. // For TWS earbuds requestBattery() also fills the per-earbud + case levels (hasDualBattery()). @@ -53,12 +61,13 @@ class Headphones { // Custom (manual) EQ: 5 band values + clear bass, each in [-10, 10]. Selects the MANUAL preset. void setEqualizerCustom(int clearBass, const std::vector& bands); int getClearBass(); - int getEqualizerBand(int index); // 0..4 + int getEqualizerBand(int index); // 0..4 (5-band layout) or 0..9 (10-band layout) int getEqualizerBandCount(); // 0 until read, then 5 (+ Clear Bass) or 10 bool equalizerHasClearBass(); // DSEE / audio upsampling (v2). void requestDsee(); + bool hasDsee(); // true once the device answered requestDsee() bool getDsee(); void setDsee(bool enabled); @@ -93,6 +102,11 @@ class Headphones { bool isChanged(); void setChanges(); private: + // Checked on every v2-only call (not cached): the wrapper's link can change under a long-lived object. + bool isV2(); + + std::atomic _initialized{ false }; + Property _ambientSoundControl = { 0 }; Property _focusOnVoice = { 0 }; Property _asmLevel = { 0 }; @@ -115,6 +129,7 @@ class Headphones { unsigned char _ncAsmInquiryType = 0x17; // 0x19 on the WH-1000XM6, see probeNcAsmInquiryType() int _eqClearBass = 0; bool _dsee = false; + bool _hasDsee = false; bool _hasAutoPowerOff = false; int _autoPowerOff = 0; bool _hasFirmware = false; std::string _firmware; diff --git a/Client/macos/HeadphonesBridge.h b/Client/macos/HeadphonesBridge.h index 1f5adadd..3019aa22 100644 --- a/Client/macos/HeadphonesBridge.h +++ b/Client/macos/HeadphonesBridge.h @@ -44,6 +44,7 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { // NO while this device's equalizer write format is unverified (the WH-1000XM6's 10-band layout, spec §7). @property (nonatomic, readonly) BOOL equalizerWritable; @property (nonatomic, readonly) NSInteger clearBass; // -10..10 +@property (nonatomic, readonly) BOOL hasDsee; // the device answered the DSEE inquiry @property (nonatomic, readonly) BOOL dsee; // DSEE / audio upsampling // Optional features (present only if the device answered the capability probe on connect). @@ -58,8 +59,13 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { @property (nonatomic, readonly) BOOL hasAdaptiveVolume; @property (nonatomic, readonly) BOOL adaptiveVolume; -// Runs the native Bluetooth device picker (modal, main thread) and connects to the chosen device. -// completion is called on the main thread. +// Background work and sessions: every async call below captures the current connection session; once it +// ends (disconnect, or a new connection) its queued work stops before the next headphones call and its +// completion is NOT called, so a previous session can never touch the next link or overwrite the model. + +// Uses the Sony headset already connected to macOS, else runs the native Bluetooth picker (modal), then +// connects. Call on the main thread; completion runs synchronously on it, after nested run-loop pumping +// while the link opens. - (void)scanAndConnectWithCompletion:(void (^)(BOOL ok, NSString * _Nullable error))completion; // Name heuristic for Sony headsets (WH-/WF-/WI-/MDR-/XB/LinkBuds). @@ -68,7 +74,8 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { + (nullable NSString *)connectedSonyHeadsetAddress NS_SWIFT_NAME(connectedSonyHeadsetAddress()); // YES if the device with this address is connected to macOS (its audio link is up). + (BOOL)isDeviceConnectedToMac:(NSString *)address NS_SWIFT_NAME(isDeviceConnectedToMac(_:)); -// Opens the control channel to a specific device, without the picker. Completion on the main thread. +// Opens the control channel to a specific device, without the picker. Call on the main thread; completion +// runs synchronously on the caller's thread, after nested run-loop pumping while the link opens. - (void)connectToAddress:(NSString *)address completion:(void (^)(BOOL ok, NSString * _Nullable error))completion NS_SWIFT_NAME(connect(toAddress:completion:)); @@ -80,16 +87,19 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { focusVoice:(BOOL)focusVoice completion:(void (^)(BOOL ok, NSString * _Nullable error))completion; -// Runs the init handshake (once) then reads battery + equalizer on a background thread; completion on main. +// On a background thread: v2 devices get the init handshake + NC/ASM channel probe (once per session), then +// NC/ASM, battery, equalizer and DSEE reads - completion on main - then the optional-feature probes - +// completion on main again. v1 devices only get the NC/ASM read (completion called once). - (void)refreshStatusWithCompletion:(void (^)(void))completion; // Pushes an equalizer preset (raw EQ_PRESET byte) to the device; completion on main. - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL ok, NSString * _Nullable error))completion; -// Current custom EQ band value (-10..10) for band 0..4. +// Current custom EQ band value (-10..10) for band 0..4 (5-band layout) or 0..9 (10-band layout). - (NSInteger)equalizerBandAtIndex:(NSInteger)index; -// Pushes manual/custom EQ (clear bass + 5 bands, each -10..10) to the device. +// Pushes manual/custom EQ (clear bass + 5 bands, each -10..10) to the device - 5-band layout only +// (equalizerWritable). - (void)setCustomEqualizerBass:(NSInteger)bass bands:(NSArray *)bands completion:(void (^)(BOOL ok, NSString * _Nullable error))completion; // Toggles DSEE / audio upsampling. @@ -99,8 +109,8 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { - (void)setSpeakToChat:(BOOL)enabled completion:(void (^)(BOOL ok, NSString * _Nullable error))completion; - (void)setAdaptiveVolume:(BOOL)enabled completion:(void (^)(BOOL ok, NSString * _Nullable error))completion; -// Re-reads the fast-changing state (ambient/NC, level, EQ, DSEE) so changes made with the headphone's -// own button show up in the app. Called on a timer while connected. +// Re-reads the NC/ASM state only (mode, ambient level, focus on voice) so changes made with the headphone's +// own button show up in the app. Called on a timer while connected. Completion on the main thread. - (void)refreshDynamicWithCompletion:(void (^)(void))completion; // Re-reads the battery level (v2 devices only). Completion on the main thread. diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index 9f61462d..f62f3fcb 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -7,6 +7,9 @@ #import #import +#include +#include +#include #include #include "MacOSBluetoothConnector.h" #include "BluetoothWrapper.h" @@ -14,14 +17,56 @@ // RecoverableException comes in transitively via BluetoothWrapper.h -> IBluetoothConnector.h -> Exceptions.h. // (Exceptions.h isn't a project file reference, so it can't be #included directly from this directory.) +// What a background block captures: the session's Headphones object plus the bridge's session generation at +// dispatch time. One BluetoothWrapper serves the whole app lifetime, so after a disconnect a previous +// session's queued work would otherwise keep running on whatever link comes next (possibly a v1 headset, +// where the v2 battery inquiry 0x22 is POWER_OFF). Blocks call isCurrent() before every headphones call and +// stop once the session ended. +struct SHCSession { + std::shared_ptr hp; + std::shared_ptr> generation; + uint64_t token; + bool isCurrent() const { return generation->load() == token; } +}; + +// Runs a finished block's completion on the main queue, unless its session ended meanwhile: the data it +// would publish belongs to a previous connection. No caller waits on these completions. +static void SHCCompleteOnMain(SHCSession session, void (^completion)(void)) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (session.isCurrent()) completion(); + }); +} + +static void SHCFinishOnMain(SHCSession session, BOOL ok, NSString * _Nullable error, + void (^completion)(BOOL, NSString * _Nullable)) { + dispatch_async(dispatch_get_main_queue(), ^{ + if (session.isCurrent()) completion(ok, error); + }); +} + +// Core exceptions carry English developer text ("recv timed out", "No ACK received from device", ...): log it, +// show a translated message instead. +static NSString *SHCCommandError(const std::exception &exc) { + fprintf(stderr, "[error] %s\n", exc.what()); + return NSLocalizedString(@"The headphones didn't respond.", nil); +} + +static NSString *SHCConnectionError(const std::exception &exc) { + fprintf(stderr, "[error] %s\n", exc.what()); + return NSLocalizedString(@"Couldn't open the control channel.", nil); +} + @implementation HeadphonesBridge { std::unique_ptr _bt; // shared_ptr: background blocks capture their own copy so a disconnect()-triggered _hp.reset() on the // main thread can't free the object while a queued block is still mid-way through a read/write. + // One Headphones object per connection session (it also holds that session's "initialized" flag). std::shared_ptr _hp; + // Session generation, bumped when a session ends or starts; see SHCSession. shared_ptr so blocks can + // hold it without retaining self. + std::shared_ptr> _generation; NSString *_deviceName; NSString *_deviceMac; - BOOL _initialized; // All user-initiated commands run on this SERIAL queue so quick successive taps reach the device in // order (a concurrent queue let them race and land out of order). dispatch_queue_t _cmdQueue; @@ -30,11 +75,22 @@ @implementation HeadphonesBridge { - (instancetype)init { if ((self = [super init])) { _bt = std::make_unique(std::make_unique()); + _generation = std::make_shared>(0); _cmdQueue = dispatch_queue_create("com.sonybridge.commands", DISPATCH_QUEUE_SERIAL); } return self; } +// Main thread only (reads _hp). +- (SHCSession)currentSession { + return SHCSession{ _hp, _generation, _generation->load() }; +} + +// Invalidates every block captured so far: they stop before their next headphones call. +- (void)bumpSession { + _generation->fetch_add(1); +} + - (BOOL)connected { return _bt && _bt->isConnected(); } @@ -110,6 +166,8 @@ - (BOOL)equalizerHasClearBass { return _hp && _hp->equalizerHasClearBass(); } // Only the 5-band + Clear Bass layout (WH-CH720N family) has a verified write format. - (BOOL)equalizerWritable { return self.supportsEqualizer && _hp && _hp->equalizerHasClearBass(); } +- (BOOL)hasDsee { return _hp && _hp->hasDsee(); } + - (BOOL)dsee { return _hp ? _hp->getDsee() : NO; } @@ -168,10 +226,15 @@ - (void)scanAndConnectWithCompletion:(void (^)(BOOL, NSString * _Nullable))compl } - (void)connectDevice:(IOBluetoothDevice *)device completion:(void (^)(BOOL, NSString * _Nullable))completion { + // A connection attempt ends whatever session came before: its queued work stops before its next call, + // and no refresh can pair the new link with the old Headphones object while the link opens. + _hp.reset(); + [self bumpSession]; + try { _bt->connect([[device addressString] UTF8String]); - } catch (RecoverableException &exc) { - completion(NO, @(exc.what())); + } catch (std::exception &exc) { + completion(NO, SHCConnectionError(exc)); return; } @@ -191,7 +254,9 @@ - (void)connectDevice:(IOBluetoothDevice *)device completion:(void (^)(BOOL, NSS _deviceName = [device nameOrAddress]; _deviceMac = [device addressString]; + // New session: a fresh Headphones object (not initialized yet) and a new generation. _hp = std::make_shared(*_bt); + [self bumpSession]; completion(YES, nil); } @@ -221,81 +286,86 @@ - (void)connectToAddress:(NSString *)address completion:(void (^)(BOOL, NSString } - (void)disconnect { + // First, so this session's queued work stops before its next headphones call. + [self bumpSession]; if (_bt) _bt->disconnect(); _hp.reset(); _deviceName = nil; _deviceMac = nil; - _initialized = NO; } - (void)refreshStatusWithCompletion:(void (^)(void))completion { if (!_hp || !self.connected) { completion(); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; // CRITICAL: the init/battery/EQ inquiries below use v2 opcodes. Opcode 0x22 is BATTERY_LEVEL_REQUEST // on v2 but POWER_OFF on v1 - sending it to a v1 device (e.g. WH-1000XM4) powers the headphones off. // A v1 device still needs *some* valid handshake traffic right after connect or it drops/powers off on // its own, so read its ambient state (read-only 66 02) instead of sending nothing. + // This dispatch-time check only picks the path: the session check stops the block once this session + // ended, and Headphones re-checks the live protocol before every v2-only frame. if (_bt->getProtocolVersion() != SonyProtocolVersion::V2) { dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - try { hp->requestAmbientState(); } catch (std::exception &exc) {} - dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); + if (!session.isCurrent()) return; + try { session.hp->requestAmbientState(); } catch (std::exception &) {} + SHCCompleteOnMain(session, completion); }); return; } // Reads run on the global queue (not the serial command queue) so they don't block quick user taps; // per-call the connector mutex still serializes actual I/O. dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ + Headphones *hp = session.hp.get(); // kept alive by the block's session copy // Fast, always-supported reads first, then update the UI immediately... // Each read is independent: one lost frame (recv timeout) must not skip the others, or a fresh // connection stays half-initialized (no battery, no EQ, NC/ASM polled on the wrong channel). - if (!self->_initialized) { - for (int attempt = 0; attempt < 2 && !self->_initialized; attempt++) { - try { - hp->initDevice(); - self->_initialized = YES; - } catch (std::exception &exc) {} + if (!hp->isInitialized()) { + for (int attempt = 0; attempt < 2 && !hp->isInitialized(); attempt++) { + if (!session.isCurrent()) return; + try { hp->initDevice(); } catch (std::exception &) {} } // Probe even if init never answered, so the NC/ASM channel is still picked (catches internally). + if (!session.isCurrent()) return; hp->probeNcAsmInquiryType(); } // Current NC/ASM state, on the channel probeNcAsmInquiryType() picked. - try { hp->requestAmbientState(); } catch (std::exception &exc) {} - try { hp->requestBattery(); } catch (std::exception &exc) {} - try { hp->requestEqualizer(); } catch (std::exception &exc) {} - try { hp->requestDsee(); } catch (std::exception &exc) {} - dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); + if (!session.isCurrent()) return; + try { hp->requestAmbientState(); } catch (std::exception &) {} + if (!session.isCurrent()) return; + try { hp->requestBattery(); } catch (std::exception &) {} + if (!session.isCurrent()) return; + try { hp->requestEqualizer(); } catch (std::exception &) {} + if (!session.isCurrent()) return; + try { hp->requestDsee(); } catch (std::exception &) {} + SHCCompleteOnMain(session, completion); // ...then the optional-feature probes, which can each take a couple seconds to time out on a // device that doesn't support them. Update the UI again once they've settled. - try { hp->probeCapabilities(); } catch (std::exception &exc) {} - dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); + if (!session.isCurrent()) return; + try { hp->probeCapabilities(); } catch (std::exception &) {} + SHCCompleteOnMain(session, completion); }); } - (void)refreshDynamicWithCompletion:(void (^)(void))completion { if (!_hp || !self.connected) { completion(); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ // The headphone's physical button only changes ambient/NC, so that's all we poll (keeps traffic low). // requestAmbientState() is protocol-aware (v2 uses 66 17, v1 uses 66 02), so this is safe on both. - try { hp->requestAmbientState(); } catch (std::exception &exc) {} - dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); + if (!session.isCurrent()) return; + try { session.hp->requestAmbientState(); } catch (std::exception &) {} + SHCCompleteOnMain(session, completion); }); } - (void)refreshBatteryWithCompletion:(void (^)(void))completion { // CRITICAL: 0x22 is BATTERY_LEVEL_REQUEST on v2 but POWER_OFF on v1 - never send it to a v1 device. if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { completion(); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - try { hp->requestBattery(); } catch (std::exception &exc) {} - dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); + if (!session.isCurrent()) return; + try { session.hp->requestBattery(); } catch (std::exception &) {} + SHCCompleteOnMain(session, completion); }); } @@ -309,21 +379,18 @@ - (void)setEqualizerPreset:(NSInteger)preset completion:(void (^)(BOOL, NSString completion(NO, NSLocalizedString(@"Equalizer control isn't supported on this device yet.", nil)); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(_cmdQueue, ^{ + if (!session.isCurrent()) return; NSString *error = nil; BOOL ok = YES; try { - hp->setEqualizerPreset(static_cast((unsigned char)preset)); + session.hp->setEqualizerPreset(static_cast((unsigned char)preset)); } catch (std::exception &exc) { ok = NO; - error = @(exc.what()); + error = SHCCommandError(exc); } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(ok, error); - }); + SHCFinishOnMain(session, ok, error, completion); }); } @@ -335,15 +402,14 @@ - (void)setCustomEqualizerBass:(NSInteger)bass bands:(NSArray *)band std::vector cbands; for (NSNumber *n in bands) cbands.push_back((int)n.integerValue); int cbass = (int)bass; - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(_cmdQueue, ^{ + if (!session.isCurrent()) return; NSString *error = nil; BOOL ok = YES; try { - hp->setEqualizerCustom(cbass, cbands); - } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } - dispatch_async(dispatch_get_main_queue(), ^{ completion(ok, error); }); + session.hp->setEqualizerCustom(cbass, cbands); + } catch (std::exception &exc) { ok = NO; error = SHCCommandError(exc); } + SHCFinishOnMain(session, ok, error, completion); }); } @@ -352,15 +418,14 @@ - (void)setDsee:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))c completion(NO, NSLocalizedString(@"Not supported on this device.", nil)); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(_cmdQueue, ^{ + if (!session.isCurrent()) return; NSString *error = nil; BOOL ok = YES; try { - hp->setDsee(enabled); - } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } - dispatch_async(dispatch_get_main_queue(), ^{ completion(ok, error); }); + session.hp->setDsee(enabled); + } catch (std::exception &exc) { ok = NO; error = SHCCommandError(exc); } + SHCFinishOnMain(session, ok, error, completion); }); } @@ -389,60 +454,51 @@ - (void)applyMode:(SHCAmbientMode)mode break; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(_cmdQueue, ^{ + if (!session.isCurrent()) return; NSString *error = nil; BOOL ok = YES; try { - if (hp->isChanged()) hp->setChanges(); - } catch (RecoverableException &exc) { - ok = NO; - error = @(exc.what()); + if (session.hp->isChanged()) session.hp->setChanges(); } catch (std::exception &exc) { ok = NO; - error = @(exc.what()); + error = SHCCommandError(exc); } - dispatch_async(dispatch_get_main_queue(), ^{ - completion(ok, error); - }); + SHCFinishOnMain(session, ok, error, completion); }); } - (void)setAutoPowerOff:(NSInteger)index completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(_cmdQueue, ^{ + if (!session.isCurrent()) return; NSString *error = nil; BOOL ok = YES; - try { hp->setAutoPowerOff((int)index); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } - dispatch_async(dispatch_get_main_queue(), ^{ completion(ok, error); }); + try { session.hp->setAutoPowerOff((int)index); } catch (std::exception &exc) { ok = NO; error = SHCCommandError(exc); } + SHCFinishOnMain(session, ok, error, completion); }); } - (void)setSpeakToChat:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(_cmdQueue, ^{ + if (!session.isCurrent()) return; NSString *error = nil; BOOL ok = YES; - try { hp->setSpeakToChat(enabled); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } - dispatch_async(dispatch_get_main_queue(), ^{ completion(ok, error); }); + try { session.hp->setSpeakToChat(enabled); } catch (std::exception &exc) { ok = NO; error = SHCCommandError(exc); } + SHCFinishOnMain(session, ok, error, completion); }); } - (void)setAdaptiveVolume:(BOOL)enabled completion:(void (^)(BOOL, NSString * _Nullable))completion { if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } - // Capture a shared_ptr copy so the background block keeps the object alive even if disconnect() (main - // thread) resets _hp while this block is still running. - std::shared_ptr hp = _hp; + SHCSession session = [self currentSession]; dispatch_async(_cmdQueue, ^{ + if (!session.isCurrent()) return; NSString *error = nil; BOOL ok = YES; - try { hp->setAdaptiveVolume(enabled); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } - dispatch_async(dispatch_get_main_queue(), ^{ completion(ok, error); }); + try { session.hp->setAdaptiveVolume(enabled); } catch (std::exception &exc) { ok = NO; error = SHCCommandError(exc); } + SHCFinishOnMain(session, ok, error, completion); }); } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 99ec9bc0..4db3faed 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -116,7 +116,7 @@ final class HeadphonesMenu { equalizerMenu.addItem(.separator()) equalizerRowItem = hostingMenuItem(width: MenuMetrics.equalizerWidth) { EqualizerRow(model: model) } equalizerMenu.addItem(equalizerRowItem) - equalizerNoteItem.title = tr("Manual equalizer coming soon for this model") + equalizerNoteItem.title = tr("Equalizer changes coming soon for this model") equalizerNoteItem.isEnabled = false equalizerMenu.addItem(equalizerNoteItem) equalizerResetItem = ActionMenuItem(tr("Reset")) { [weak model] in model?.resetEqualizer() } @@ -191,7 +191,7 @@ final class HeadphonesMenu { equalizerRowItem.isHidden = model.eqBands.isEmpty equalizerResetItem.isEnabled = connected && model.equalizerWritable && model.eqPreset == 0xA0 - dseeItem.isHidden = !model.supportsEqualizer + dseeItem.isHidden = !model.hasDsee speakToChatItem.isHidden = !model.hasSpeakToChat adaptiveVolumeItem.isHidden = !model.hasAdaptiveVolume diff --git a/Client/macos/HeadphonesModel.swift b/Client/macos/HeadphonesModel.swift index fb46f93a..e8156646 100644 --- a/Client/macos/HeadphonesModel.swift +++ b/Client/macos/HeadphonesModel.swift @@ -39,6 +39,7 @@ final class HeadphonesModel: ObservableObject { @Published private(set) var eqBands: [Int] = [] @Published private(set) var eqHasClearBass = false @Published private(set) var clearBass = 0 + @Published private(set) var hasDsee = false @Published private(set) var dsee = false @Published private(set) var hasAutoPowerOff = false @@ -99,6 +100,7 @@ final class HeadphonesModel: ObservableObject { } cancelReconnect() connectionState = .connected + errorMessage = nil // a failed manual attempt's error must not stay under a "Connected" header syncFromBridge() settings?.lastDeviceAddress = deviceMac bridge.refreshStatus { [weak self] in self?.syncFromBridge() } // called after reads, then after probes @@ -120,6 +122,9 @@ final class HeadphonesModel: ObservableObject { // Not user-initiated: failures stay silent (normal while the headset sleeps). func autoConnect(toAddress address: String) { guard connectionState == .disconnected else { return } + // With Reconnect Automatically on, a failed attempt (launch, DeviceWatcher) is retried by the failure + // path's scheduleReconnect() while the headset stays connected to macOS. + if settings?.autoReconnect == true { reconnectAddress = address } connectionState = .connecting bridge.connect(toAddress: address) { ok, error in self.handleConnectResult(ok: ok, error: error, userInitiated: false) @@ -308,7 +313,9 @@ final class HeadphonesModel: ObservableObject { deviceMac = bridge.deviceMac ?? deviceMac protocolVersion = bridge.protocolVersionString ?? "" maxAmbientLevel = bridge.maxAmbientLevel - readAmbientFromBridge() + // refreshStatus calls this twice (the second ~12 s after connect): don't undo a mode change the user + // made meanwhile. + if pollGuard.shouldAcceptPoll(for: .ambient) { readAmbientFromBridge() } readBatteryFromBridge() supportsEqualizer = bridge.supportsEqualizer equalizerWritable = bridge.equalizerWritable @@ -316,6 +323,7 @@ final class HeadphonesModel: ObservableObject { eqHasClearBass = bridge.equalizerHasClearBass clearBass = bridge.clearBass eqBands = (0.. g(receiveDataMutex); + receivedBytes.clear(); + } // convert mac address to nsstring NSString *addressNSString = [NSString stringWithCString:addrStr.c_str() encoding:[NSString defaultCStringEncoding]]; // get device based on mac address diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 9db07cec..faa8245b 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -27,7 +27,7 @@ "Speech" = "Parole"; "Manual" = "Manuel"; "Custom" = "Personnalisé"; -"Manual equalizer coming soon for this model" = "Égaliseur manuel bientôt disponible pour ce modèle"; +"Equalizer changes coming soon for this model" = "Réglage de l’égaliseur bientôt disponible pour ce modèle"; "Reset" = "Réinitialiser"; "DSEE" = "DSEE"; "Speak-to-Chat" = "Speak-to-Chat"; @@ -55,3 +55,5 @@ "Not connected." = "Non connecté."; "Equalizer control isn't supported on this device yet." = "Le réglage de l’égaliseur n’est pas encore pris en charge sur cet appareil."; "Not supported on this device." = "Non pris en charge sur cet appareil."; +"The headphones didn't respond." = "Le casque n’a pas répondu."; +"Couldn't open the control channel." = "Impossible d’ouvrir le canal de contrôle."; diff --git a/Client/tests/FakeConnector.h b/Client/tests/FakeConnector.h index 08de21ec..d16dfa13 100644 --- a/Client/tests/FakeConnector.h +++ b/Client/tests/FakeConnector.h @@ -17,6 +17,9 @@ class FakeBluetoothConnector : public IBluetoothConnector public: std::vector sentFrames; std::deque incomingFrames; + // What getProtocolVersion() reports. V1 by default (BluetoothWrapperTests don't care); tests that model a + // v2 headset set V2. + SonyProtocolVersion protocolVersion = SonyProtocolVersion::V1; int send(char* buf, size_t length) noexcept(false) override { @@ -44,7 +47,7 @@ class FakeBluetoothConnector : public IBluetoothConnector void disconnect() noexcept override {} bool isConnected() noexcept override { return true; } std::vector getConnectedDevices() override { return {}; } - SonyProtocolVersion getProtocolVersion() noexcept override { return SonyProtocolVersion::V1; } + SonyProtocolVersion getProtocolVersion() noexcept override { return this->protocolVersion; } }; // Decodes a frame previously recorded by FakeBluetoothConnector::send (includes START_MARKER/END_MARKER). diff --git a/Client/tests/HeadphonesTests.cpp b/Client/tests/HeadphonesTests.cpp index c987b7ea..3f69f249 100644 --- a/Client/tests/HeadphonesTests.cpp +++ b/Client/tests/HeadphonesTests.cpp @@ -68,6 +68,7 @@ static void testTransientBatteryTimeoutKeepsSingleBattery() { auto fakeOwned = std::make_unique(); FakeBluetoothConnector* fake = fakeOwned.get(); + fake->protocolVersion = SonyProtocolVersion::V2; // the WH-1000XM6 is a v2 device BluetoothWrapper wrapper(std::move(fakeOwned)); Headphones phones(wrapper); @@ -100,6 +101,7 @@ static void testTwsDeviceWithNoSingleBatteryStillProbes() { auto fakeOwned = std::make_unique(); SelectiveFakeConnector* fake = fakeOwned.get(); + fake->protocolVersion = SonyProtocolVersion::V2; // TWS earbuds are v2 devices BluetoothWrapper wrapper(std::move(fakeOwned)); Headphones phones(wrapper); @@ -111,10 +113,101 @@ static void testTwsDeviceWithNoSingleBatteryStillProbes() CHECK(phones.hasDualBattery() == true); } +// Safety (final review I1): on a v1 link the v2-only inquiries and setters must send nothing at all. Opcode +// 0x22 (BATTERY_GET on v2) is POWER_OFF on v1 - a stale session's queued read landing on a v1 headset +// (e.g. WH-1000XM4) connected right after would power it off. +static void testV1ConnectionSendsNoV2OnlyFrame() +{ + auto fakeOwned = std::make_unique(); + FakeBluetoothConnector* fake = fakeOwned.get(); + fake->protocolVersion = SonyProtocolVersion::V1; + BluetoothWrapper wrapper(std::move(fakeOwned)); + Headphones phones(wrapper); + + // Each call must return (or throw) without having sent a single frame. + auto sendsNothing = [&](const char* name, auto&& call) { + fake->sentFrames.clear(); + try { call(); } catch (...) {} + if (!fake->sentFrames.empty()) std::printf(" %s sent %zu frame(s) on a v1 link\n", name, fake->sentFrames.size()); + CHECK(fake->sentFrames.empty()); + }; + sendsNothing("requestBattery", [&] { phones.requestBattery(); }); + sendsNothing("requestEqualizer", [&] { phones.requestEqualizer(); }); + sendsNothing("requestDsee", [&] { phones.requestDsee(); }); + sendsNothing("initDevice", [&] { phones.initDevice(); }); + sendsNothing("probeNcAsmInquiryType", [&] { phones.probeNcAsmInquiryType(); }); + sendsNothing("probeCapabilities", [&] { phones.probeCapabilities(); }); + sendsNothing("setEqualizerPreset", [&] { phones.setEqualizerPreset(EQ_PRESET::OFF); }); + sendsNothing("setEqualizerCustom", [&] { phones.setEqualizerCustom(0, { 0, 0, 0, 0, 0 }); }); + sendsNothing("setDsee", [&] { phones.setDsee(true); }); + sendsNothing("setAutoPowerOff", [&] { phones.setAutoPowerOff(1); }); + sendsNothing("setSpeakToChat", [&] { phones.setSpeakToChat(true); }); + sendsNothing("setAdaptiveVolume", [&] { phones.setAdaptiveVolume(true); }); + + CHECK(!phones.isInitialized()); + CHECK(!phones.hasDsee()); + CHECK(phones.getBatteryLevel() == -1); +} + +// A link that turns v1 right after the first frame goes out - models a v1 headset connected on the same +// BluetoothWrapper while a stale multi-frame call (battery TWS probes, capability probes) is still running. +class FlipsToV1AfterFirstSend : public FakeBluetoothConnector +{ +public: + int send(char* buf, size_t length) noexcept(false) override + { + int sent = FakeBluetoothConnector::send(buf, length); + this->protocolVersion = SonyProtocolVersion::V1; + return sent; + } +}; + +// The live protocol is re-checked before every v2-only frame, not only on entry: 22 09 / 22 0a are +// POWER_OFF on v1 too (the opcode, 0x22, is what matters). +static void testLinkTurningV1MidCallStopsSending() +{ + auto onlyFirstFrameSent = [](const char* name, auto&& call) { + auto fakeOwned = std::make_unique(); + FlipsToV1AfterFirstSend* fake = fakeOwned.get(); + fake->protocolVersion = SonyProtocolVersion::V2; + BluetoothWrapper wrapper(std::move(fakeOwned)); + Headphones phones(wrapper); + try { call(phones); } catch (...) {} + if (fake->sentFrames.size() != 1) std::printf(" %s sent %zu frame(s), expected 1\n", name, fake->sentFrames.size()); + CHECK(fake->sentFrames.size() == 1); + }; + onlyFirstFrameSent("requestBattery", [](Headphones& p) { p.requestBattery(); }); + onlyFirstFrameSent("probeCapabilities", [](Headphones& p) { p.probeCapabilities(); }); +} + +// A v2 device that answers the handshake is marked initialized (per Headphones object = per session), and one +// that answers the DSEE inquiry reports the capability. +static void testV2InitAndDseeCapability() +{ + auto fakeOwned = std::make_unique(); + SelectiveFakeConnector* fake = fakeOwned.get(); + fake->protocolVersion = SonyProtocolVersion::V2; + BluetoothWrapper wrapper(std::move(fakeOwned)); + Headphones phones(wrapper); + + CHECK(!phones.isInitialized()); + CHECK(!phones.hasDsee()); + fake->scriptReplyTo(V2Command::INIT_REQUEST, 0x00, { V2Command::INIT_REPLY, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }); + fake->scriptReplyTo(V2Command::DSEE_GET, 0x01, { V2Command::DSEE_RET, 0x01, 0x01 }); + phones.initDevice(); + phones.requestDsee(); + CHECK(phones.isInitialized()); + CHECK(phones.hasDsee()); + CHECK(phones.getDsee()); +} + int main() { testTransientBatteryTimeoutKeepsSingleBattery(); testTwsDeviceWithNoSingleBatteryStillProbes(); + testV1ConnectionSendsNoV2OnlyFrame(); + testLinkTurningV1MidCallStopsSending(); + testV2InitAndDseeCapability(); if (failures) { std::printf("HeadphonesTests: %d failure(s)\n", failures); return 1; } std::printf("HeadphonesTests: all passed\n"); diff --git a/README.md b/README.md index 86dcbeef..86e7ac97 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@
-[![Build](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/build.yml/badge.svg)](https://github.com/AmitRajput-Dev/SonyBridge/actions/workflows/build.yml) +[![Build](https://github.com/flotttt/SonyBridge/actions/workflows/build.yml/badge.svg)](https://github.com/flotttt/SonyBridge/actions/workflows/build.yml) [![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) ![Platforms](https://img.shields.io/badge/platform-macOS-blue) @@ -32,7 +32,7 @@ reverse-engineered binary protocol — no phone required. It lives entirely in y Dock icon, no window, just a native menu. The original [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) only spoke Sony's -**first-generation** protocol, so newer headsets (WH-CH720N, XM4/XM5, WF-series, LinkBuds…) just timed +**first-generation** protocol, so newer headsets (WH-CH720N, WH-1000XM5/XM6, WF-series, LinkBuds…) just timed out on connect. SonyBridge adds full **second-generation ("v2") protocol** support and a native macOS menu bar app, built with AppKit/SwiftUI. @@ -43,7 +43,7 @@ menu bar app, built with AppKit/SwiftUI. - 🔄 **Live button sync** — following the headset's own NC button live, even while the menu is open **Equalizer** -- 🎛️ **Equalizer** — presets *and* a **Manual mode** with vertical sliders (5 bands + Clear Bass on older models). The **WH-1000XM6**'s 10-band equalizer is read and displayed, but changing it isn't available yet — its write format isn't verified, so the sliders are greyed out with a "coming soon" note +- 🎛️ **Equalizer** — presets *and* a **Manual mode** with vertical sliders (5 bands + Clear Bass on older models). The **WH-1000XM6**'s 10-band equalizer is read and displayed; changing the equalizer (presets and Manual) is coming in a later update — its write format isn't verified yet, so the presets and sliders are greyed out with a "coming soon" note **Other settings** *(each shown only if your headset supports it)* - ✨ **DSEE** — Sony's audio upscaling for compressed sources @@ -74,7 +74,7 @@ xcode-select --install Then: ```sh -git clone https://github.com/AmitRajput-Dev/SonyBridge.git +git clone https://github.com/flotttt/SonyBridge.git cd SonyBridge make install ``` @@ -102,9 +102,9 @@ From the menu you can: - pick an **Equalizer** preset or dial in a **Manual** curve; - toggle **DSEE**, **Speak-to-Chat**, and **Adaptive Volume** (only the ones your model supports); - set **Auto Power-Off**; -- check battery and firmware under **About the Headphones**; +- check the battery level in the menu's header, and the firmware, codec and protocol under **About the Headphones**; - turn **Launch at Login**, **Connect Automatically**, and **Reconnect Automatically** on or off under **SonyBridge Options**; -- **Disconnect** (auto-reconnect stays off until the headset reconnects on its own or you click **Connect…** again) or **Quit SonyBridge** (⌘Q). +- **Disconnect** (SonyBridge then stays disconnected until you click **Connect…** again or — with **Connect Automatically** on — the headset reconnects to your Mac) or **Quit SonyBridge** (⌘Q). ## 🎧 Supported headphones @@ -118,15 +118,15 @@ From the menu you can: > The Verified models are hardware-tested. Others share the same protocol family, so the basics should > work — per-model quirks are untested. Reports and PRs for other devices are very welcome. > -> On the **WH-1000XM6**, changing the equalizer in Manual mode is coming in a later update (reading its -> 10-band equalizer already works). +> On the **WH-1000XM6**, changing the equalizer (presets and Manual) is coming in a later update (reading +> its 10-band equalizer already works). ## 🚀 Build from source Requires the **Xcode Command Line Tools** (`xcode-select --install`) — the full Xcode app is not needed. ```sh -git clone https://github.com/AmitRajput-Dev/SonyBridge.git +git clone https://github.com/flotttt/SonyBridge.git cd SonyBridge make # debug build → build/SonyBridge.app make run # builds and launches the app (add DEBUG=1 to log every protocol frame) @@ -151,10 +151,11 @@ Sony headphones expose a vendor RFCOMM/SPP service. Commands are framed as: Two protocol generations exist, distinguished by their SDP service UUID: -- **v1** — `96CC203E-…` — WH-1000XM3 and older -- **v2** — `956C7B26-…` — WH-CH720N, Sony ULT WEAR, XM4/XM5, WF-series, LinkBuds… +- **v1** — `96CC203E-…` — WH-1000XM4 and older (WH-1000XM3, WH-1000XM2, WH-XB900N…) +- **v2** — `956C7B26-…` — WH-CH720N, Sony ULT WEAR, WH-1000XM5/XM6, WF-series, LinkBuds… -SonyBridge tries v1 first, falls back to v2, and remembers which succeeded. The v2 path adds the mandatory +On every connect, SonyBridge looks for the v1 service first and falls back to v2 (it probes again each +time rather than remembering the result). The v2 path adds the mandatory init handshake and per-frame host-ACK the newer devices require, plus battery, EQ and DSEE inquiry commands. Protocol byte layouts were cross-referenced against [**GadgetBridge**](https://codeberg.org/Freeyourgadget/Gadgetbridge)'s Sony implementation. @@ -171,7 +172,7 @@ Protocol byte layouts were cross-referenced against Contributions are very welcome — especially **device reports** and **testing on real hardware**. -- 🐛 **Found a bug / have a device to report?** [Open an issue](https://github.com/AmitRajput-Dev/SonyBridge/issues/new) with your model and what happened. +- 🐛 **Found a bug / have a device to report?** [Open an issue](https://github.com/flotttt/SonyBridge/issues/new) with your model and what happened. - 🧪 **Want to test?** Build it from source (`make install`) and tell us how it behaves on your headset (a screenshot helps a lot). - 🔧 **Code?** Fork, branch, and open a PR against `main`. CI builds the macOS app on every PR. @@ -179,6 +180,7 @@ Contributions are very welcome — especially **device reports** and **testing o SonyBridge builds directly on the work of: +- [**SonyBridge**](https://github.com/AmitRajput-Dev/SonyBridge) by AmitRajput-Dev — the original SonyBridge project this fork builds on - [**SonyHeadphonesClient**](https://github.com/Plutoberth/SonyHeadphonesClient) by Plutoberth, Mr-M33533K5 & contributors — the original cross-platform client and protocol foundation - [**semvis123**](https://github.com/semvis123) — the original macOS port - [**GadgetBridge**](https://codeberg.org/Freeyourgadget/Gadgetbridge) — reverse-engineered v2 protocol reference From b36aa299abe1bcfca88987559361da4a5ebd8bd4 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 15:09:35 +0200 Subject: [PATCH 19/50] docs: notch + local Spotify design spec (step 1) --- .../specs/2026-09-11-notch-design.md | 278 ++++++++++++++++++ 1 file changed, 278 insertions(+) create mode 100644 docs/superpowers/specs/2026-09-11-notch-design.md diff --git a/docs/superpowers/specs/2026-09-11-notch-design.md b/docs/superpowers/specs/2026-09-11-notch-design.md new file mode 100644 index 00000000..ce92ed38 --- /dev/null +++ b/docs/superpowers/specs/2026-09-11-notch-design.md @@ -0,0 +1,278 @@ +# SonyBridge dans l'encoche — spec de design (étape 1) + +- **Date :** 2026-09-11 +- **Statut :** validé en discussion, à relire avant le plan d'implémentation +- **Casque de référence :** WH-1000XM6 (protocole v2) +- **Découpage :** étape 1 (cette spec) = encoche + onglet Casque + Spotify local ; étape 2 (spec séparée, plus + tard) = connexion Spotify (SSO) + source Web + changement d'appareil. + +## 1. Objectif + +Ajouter à SonyBridge une **encoche interactive** en haut de l'écran, dans l'esprit de « Dynamic Island » : +au repos, elle montre discrètement la musique en cours et le mode du casque ; au survol, elle s'ouvre et +permet de piloter la musique (Spotify) et le mode du casque sans ouvrir le menu. + +Le menu de la barre des menus reste l'interface complète ; l'encoche est un accès rapide. + +## 2. Périmètre + +**Inclus (étape 1)** +- L'encoche (panneau au-dessus de la barre des menus), sur l'écran intégré à encoche, ou une pastille + simulée sur un écran sans encoche. +- Onglet **Musique** : pochette, titre, artiste, barre de progression avec temps écoulé et restant (on peut + la glisser pour avancer), précédent / lecture-pause / suivant, volume Spotify, appareil (« Ce Mac »). +- Onglet **Casque** : NC / Ambiant / Off, curseur de niveau ambiant, Focus voix. +- La source **Spotify local** : l'app Spotify du Mac, lue et pilotée sans compte. +- L'option « Afficher l'encoche » dans les options de SonyBridge. +- Le français et l'anglais (mécanisme `tr()` existant). + +**Exclu de l'étape 1** +- Connexion au compte Spotify (SSO), source Web, changement d'appareil Spotify Connect → étape 2 (§10). +- « J'aime » (ajout aux Titres likés) : non retenu. +- Autres lecteurs (Apple Music, navigateurs…) : l'API privée d'Apple (MediaRemote) est verrouillée depuis + macOS 15.4, trop fragile. +- Batterie et égaliseur dans l'encoche : restent dans le menu. + +## 3. Décisions + +| Sujet | Décision | Raison | +|---|---|---| +| Licence | Implémentation originale à partir de la documentation Apple ; aucun code ni visuel copié de boring.notch (GPL-3.0) | SonyBridge reste sous licence MIT ; l'idée d'une encoche n'est pas protégée, le code l'est | +| Disposition ouverte | Onglets **Musique \| Casque** (maquette « B ») | Encoche compacte | +| Ouverture | Au survol, fermeture quand la souris sort | Rapide, comme boring.notch | +| Écran sans encoche | Pastille simulée en haut au centre de l'écran principal | Même comportement partout | +| Source musique | Spotify local (AppleScript + signaux Spotify) à l'étape 1 ; Spotify Web (SSO) à l'étape 2, avec repli local | Utilisable par tous sans compte développeur ; le SSO n'est possible qu'avec un Client ID par utilisateur (§10) | +| Extras Musique | Volume, avancer dans le morceau ; changer d'appareil à l'étape 2 | Choix de l'utilisateur | +| Réglages casque dans l'encoche | Mode NC/Ambiant/Off, niveau ambiant + Focus voix | Choix de l'utilisateur ; le reste est dans le menu | +| Technique | `NSPanel` sans bordure, non activant, contenu SwiftUI (`NSHostingView`) | Pas de vol du focus clavier ; SwiftUI déjà utilisé pour les lignes du menu | + +## 4. L'encoche + +### 4.1 États au repos + +« Musique présente » = Spotify est ouvert **et** son état est lecture ou pause avec un morceau courant. +« Casque connecté » = `HeadphonesModel.connectionState == .connected` (« Connexion… » compte comme non connecté). + +| # | Musique | Casque | Au repos | +|---|---|---|---| +| 1 | oui | oui | Pochette à gauche, mode du casque à droite (◉ NC, ◎ Ambiant, ○ Off) | +| 2 | oui | non | Pochette à gauche, petites barres à droite, animées en lecture, figées en pause | +| 3 | non | oui | Icône casque à gauche, mode à droite | +| 4 | non | non | Encoche nue, sans extension. Sur un écran **sans** encoche, la pastille simulée est masquée | + +Dans les états 1 à 3, l'encoche s'élargit d'environ 36 pt de chaque côté pour loger ces éléments. +Le survol ouvre l'encoche dans tous les états où elle est visible, y compris l'état 4 sur un écran à encoche. + +### 4.2 État ouvert + +``` +╭──────────────────────────────────╮ Onglet Musique +│ Musique Casque │ +│ ┌────┐ Midnight City │ +│ │ ♪ │ M83 │ +│ └────┘ ━━━━━━━●────── 1:32 −2:31│ ← barre de progression (glissable) +│ ⏮ ⏸ ⏭ │ +│ 🔈 ───────●──── 🔊 │ ← volume Spotify +│ 🔊 Ce Mac │ ← appareil +╰──────────────────────────────────╯ + +╭──────────────────────────────────╮ Onglet Casque +│ Musique Casque │ +│ [ NC | Ambiant | Off ] │ ← choix exclusifs +│ Niveau ─────●───── 12 │ ← grisé hors mode Ambiant +│ Focus voix [ ● ] │ ← grisé hors mode Ambiant +╰──────────────────────────────────╯ +``` + +- Taille ouverte fixe (environ 360 × 160 pt, à ajuster à la vérification visuelle), la même pour les deux + onglets : pas de saut de taille en changeant d'onglet. +- Coins inférieurs arrondis ; le haut se confond avec l'encoche. +- **Casque non connecté** : « Non connecté » + bouton « Connecter », qui appelle `HeadphonesModel.connect()` + (même comportement que « Connecter… » dans le menu). Pendant la connexion : « Connexion… ». +- **Spotify non ouvert** : « Spotify n'est pas ouvert » + bouton « Ouvrir Spotify » (lance l'app). +- **Autorisation refusée** : « SonyBridge n'a pas l'autorisation de contrôler Spotify » + bouton + « Ouvrir les réglages » (Réglages Système › Confidentialité et sécurité › Automatisation). +- **Spotify ouvert mais rien en cours** (état stopped) : « Rien en cours de lecture ». +- Le curseur de niveau va de 1 à `maxAmbientLevel` (20, ou 19 sur les anciens modèles), comme dans le menu. + +### 4.3 Comportement + +- **Ouverture** après ~0,15 s de survol ; **fermeture** ~0,4 s après la sortie de la souris. Ces délais sont + des constantes, testées dans la logique pure (§8). +- **Animation** : ouverture et fermeture en ressort, à partir de la forme de l'encoche ; fondu simple si + « Réduire les animations » est activé (`NSWorkspace.shared.accessibilityDisplayShouldReduceMotion`). +- **Focus** : le panneau ne devient jamais la fenêtre active (non activant) ; les clics y fonctionnent + sans voler le clavier à l'app courante. +- **Zone de clic** : repliée, la fenêtre fait exactement la taille de l'encoche (élargie ou non) ; elle ne + prend la taille ouverte que pendant l'ouverture. Elle ne bloque donc jamais la barre des menus en dehors + de l'encoche. +- **Onglet à l'ouverture** : au premier survol de la session, Musique si une musique est présente, sinon + Casque ; ensuite le dernier onglet choisi (en mémoire seulement, pas enregistré). +- **Écrans** : l'écran intégré à encoche s'il existe, sinon l'écran principal avec la pastille simulée. + L'encoche se replace à chaque changement d'écrans (`NSApplication.didChangeScreenParametersNotification`) : + écran branché/débranché, capot fermé, résolution changée. +- **Bureaux et plein écran** : visible sur tous les bureaux et par-dessus les apps en plein écran. +- **Option** « Afficher l'encoche » décochée : le panneau est retiré ; aucune lecture Spotify n'est faite. +- **Synchronisation** avec le menu : les deux lisent le même `HeadphonesModel` ; un changement de mode dans + l'encoche apparaît aussitôt dans le menu et l'icône, et inversement. + +## 5. Architecture + +### 5.1 Fichiers (`Client/macos/`) + +Nouveaux dossiers `Notch/` et `Music/`. Les fichiers marqués **pur** n'importent que Foundation : ils sont +compilés dans `LogicTests`. + +| Fichier | Rôle | Dépend de | +|---|---|---| +| `Notch/NotchGeometry.swift` | **Pur.** À partir du cadre de l'écran, de `safeAreaInsets.top` et des zones `auxiliaryTopLeftArea` / `auxiliaryTopRightArea` (passés en valeurs), calcule le rectangle de l'encoche, sa version élargie, le rectangle ouvert, ou la pastille simulée | — | +| `Notch/NotchContent.swift` | **Pur.** Choisit l'état au repos (§4.1) à partir de « musique présente » et « casque connecté », et l'onglet à l'ouverture ; contient les délais d'ouverture/fermeture | — | +| `Notch/NotchPanel.swift` | `NSPanel` sans bordure, transparent, non activant, niveau au-dessus de la barre des menus, présent sur tous les bureaux et en plein écran | AppKit | +| `Notch/NotchController.swift` | Possède le panneau ; choisit l'écran ; suit les changements d'écrans ; gère le survol (zone de suivi + délais) et la taille du panneau ; suit `AppSettings.showNotch` | `NotchPanel`, `NotchGeometry`, `NotchContent`, `HeadphonesModel`, `MusicController`, `AppSettings` | +| `Notch/NotchView.swift` | Vue SwiftUI racine : état au repos, état ouvert avec les onglets | `MusicTab`, `HeadphonesTab` | +| `Notch/MusicTab.swift` | Onglet Musique (§4.2) | `MusicController` | +| `Notch/HeadphonesTab.swift` | Onglet Casque (§4.2) ; appelle `setMode` / `setLevel(_:final:)` / `setFocusOnVoice` / `connect` du modèle | `HeadphonesModel` | +| `Music/NowPlaying.swift` | **Pur.** Structure : titre, artiste, album, identifiant du morceau, URL de la pochette, durée, position + date de cette position, lecture/pause, volume, nom de l'appareil, capacités (`canSeek`, `canSetVolume`, `canChangeDevice`) | — | +| `Music/PlaybackClock.swift` | **Pur.** Position affichée à un instant donné : avance pendant la lecture, figée en pause, bornée à la durée | `NowPlaying` | +| `Music/SpotifyPlaybackInfo.swift` | **Pur.** Transforme le `userInfo` du signal Spotify en `NowPlaying` (durée en ms → s, champs manquants, état « Stopped ») | `NowPlaying` | +| `Music/MusicSource.swift` | Protocole commun : état publié (`NowPlaying?` + état de la source : non ouvert / autorisation refusée / prêt), `playPause`, `next`, `previous`, `seek(to:)`, `setVolume(_:)`, `refresh()` | `NowPlaying` | +| `Music/SpotifyLocalSource.swift` | Implémentation locale (§6) | `MusicSource`, `SpotifyPlaybackInfo`, AppKit | +| `Music/MusicController.swift` | `ObservableObject` lu par l'encoche : expose l'état de la source active, la pochette téléchargée, et relaie les commandes (avec `SendThrottle` pour le volume et la position). Étape 1 : une seule source, la locale | `MusicSource`, `SendThrottle` | + +**Fichiers modifiés** +- `AppSettings.swift` : `showNotch` (`UserDefaults`, **activé** par défaut). +- `AppDelegate.swift` : crée `MusicController` et `NotchController`. +- `HeadphonesMenu.swift` : case « Afficher l'encoche » dans « Options de SonyBridge ». +- `scripts/build.sh` : ajoute `Notch/*.swift` et `Music/*.swift` aux sources Swift. +- `scripts/test.sh` : compile les fichiers purs avec `LogicTests`. +- `Client/tests/LogicTests/main.swift` : nouveaux tests (§8). +- `fr.lproj/Localizable.strings` : nouveaux textes. +- `SonyHeadphonesClient.entitlements` et `info.plist` (§5.2). + +### 5.2 Bac à sable et autorisations + +- `com.apple.security.temporary-exception.apple-events` = `["com.spotify.client"]` : envoyer des Apple Events + à Spotify depuis l'app en bac à sable. (Si le runtime renforcé est activé un jour, il faudra aussi + `com.apple.security.automation.apple-events`.) +- `com.apple.security.network.client` : télécharger la pochette (et, à l'étape 2, parler à l'API Spotify). +- `info.plist` : `NSAppleEventsUsageDescription`, texte affiché par macOS à la première demande. + +### 5.3 Flux de données + +``` +Spotify (app du Mac) ──signal PlaybackStateChanged──▶ SpotifyLocalSource ──NowPlaying──▶ MusicController ──▶ NotchView + ▲ │ │ + └──────────── Apple Events (lecture, volume…) ◀───┴──────────── commandes ◀───────────┘ + +HeadphonesModel (existant) ◀──── setMode / setLevel / setFocusOnVoice ──── HeadphonesTab + └──────── @Published mode, niveau, voix, connexion ──────────▶ NotchView + menu +``` + +## 6. Source Spotify locale + +### 6.1 Lecture de l'état + +- **Signal** `com.spotify.client.PlaybackStateChanged` (`DistributedNotificationCenter`) : Spotify l'émet à + chaque changement de morceau, lecture ou pause. Si le signal contient ses informations (`userInfo` : + titre, artiste, album, durée, position, état), `SpotifyPlaybackInfo` les décode ; sinon (par exemple si le + bac à sable les retire), le signal sert seulement de déclencheur et on relit l'état par Apple Events. +- **Relecture par Apple Events** (`player state`, `current track` : nom, artiste, album, id, durée, + `artwork url` ; `player position` ; `sound volume`) : + - au lancement de SonyBridge si Spotify est déjà ouvert ; + - quand Spotify s'ouvre (`NSWorkspace.didLaunchApplicationNotification`) ; + - toutes les 5 s **uniquement quand l'encoche est ouverte** (le volume ne déclenche pas de signal) ; + - juste après une commande de position ou de volume. +- **Position** : `PlaybackClock` calcule la position affichée à partir de la dernière position connue et de + l'heure ; l'interface se redessine environ une fois par seconde **seulement quand l'encoche est ouverte**. +- **Pochette** : téléchargée depuis `artwork url` (`URLSession`), gardée en mémoire pour les derniers morceaux. +- Spotify quitte (`NSWorkspace.didTerminateApplicationNotification`) → état « non ouvert », `NowPlaying` vidé. + +### 6.2 Commandes + +- `playpause`, `next track`, `previous track`, `set player position`, `set sound volume` (volume de Spotify, + 0–100, pas celui du Mac). +- Volume et position : la valeur affichée change tout de suite ; l'envoi passe par `SendThrottle` + (au plus une commande par 150 ms pendant qu'on glisse, la valeur finale toujours envoyée). +- Les Apple Events partent d'une file série en arrière-plan, avec un délai maximal de 2 s : l'interface ne se + fige jamais si Spotify ne répond pas. + +### 6.3 Protections et erreurs + +- **Aucun Apple Event n'est envoyé si Spotify n'est pas ouvert** (vérifié avec + `NSRunningApplication.runningApplications(withBundleIdentifier: "com.spotify.client")`) : un Apple Event + vers une app fermée la lancerait. Seul le bouton « Ouvrir Spotify » lance l'app. +- **Autorisation** : la première commande ou relecture déclenche la demande de macOS. Si elle est refusée + (`errAEEventNotPermitted`, -1743), la source passe à l'état « autorisation refusée » (§4.2) et arrête ses + relectures ; elle réessaie une seule fois à chaque ouverture de l'encoche (macOS ne redemande pas, l'échec + est immédiat), pour voir si l'autorisation a été accordée entre-temps dans les réglages. +- **Échec ou délai dépassé** : on garde le dernier état connu et on relit au prochain signal ; aucune + alerte, les erreurs sont seulement écrites dans le journal (stderr). + +## 7. Réglages et traductions + +- « Options de SonyBridge » gagne une case **Afficher l'encoche** (activée par défaut). +- Tous les nouveaux textes passent par `tr()` et ont leur traduction dans `fr.lproj/Localizable.strings` ; + `make test` le vérifie (`check_localization.py` parcourt déjà tous les `.swift` sous `Client/macos/`). + +## 8. Tests + +**Automatiques** (ajoutés à `LogicTests`, lancés par `make test`) +- `NotchGeometry` : écran avec encoche → rectangle de l'encoche, version élargie et rectangle ouvert centrés + sous le haut de l'écran ; écran sans encoche → pastille centrée ; cas limites (zones auxiliaires absentes, + écran décalé dans l'espace global). +- `NotchContent` : les 4 états au repos ; onglet à l'ouverture (premier survol puis dernier onglet) ; délais. +- `PlaybackClock` : avance en lecture, figée en pause, bornée à la durée, remise à zéro au changement de morceau. +- `SpotifyPlaybackInfo` : décodage complet, champs manquants, durée en ms, état « Stopped » → pas de musique. + +**Manuels** (par l'utilisateur, sur son Mac et son WH-1000XM6) +1. Survol : ouverture, fermeture, pas de clignotement ; l'app active garde le clavier. +2. Les 4 états au repos. +3. Onglet Casque : changer de mode → le casque change, le menu et l'icône suivent ; bouton NC du casque → + l'encoche suit. +4. Onglet Musique : lecture/pause, suivant, précédent, glisser la position, volume ; changer de morceau dans + Spotify → l'encoche suit. +5. Demande d'autorisation Spotify ; refus → message et bouton des réglages. +6. Spotify fermé → message et bouton « Ouvrir Spotify » ; SonyBridge ne relance jamais Spotify tout seul. +7. Écran externe, capot fermé, rebranchement : l'encoche se replace (pastille simulée sur l'écran externe). +8. Option « Afficher l'encoche » décochée → plus d'encoche ; recochée → elle revient. + +## 9. Risques + +- **Autorisation redemandée après chaque `make`** : macOS rattache l'autorisation d'automatisation à la + signature de l'app, qui change à chaque build ad hoc. Gênant en développement, pas pour l'app installée. +- **API Spotify locale non documentée** : le signal et le dictionnaire AppleScript de Spotify n'ont pas de + garantie officielle (stables depuis des années). En cas de casse, seul l'onglet Musique local est touché. +- **`userInfo` du signal en bac à sable** : non garanti ; le design relit l'état par Apple Events si besoin (§6.1). +- **Extension au repos** : les ~36 pt de chaque côté de l'encoche peuvent recouvrir un élément de la barre + des menus collé à l'encoche ; à vérifier visuellement, largeur ajustable. +- **Pastille simulée** : elle recouvre le centre de la barre des menus sur un écran sans encoche (zone + habituellement vide) ; masquée quand il n'y a rien à afficher. + +## 10. Étape 2 (aperçu, spec séparée) + +Connexion au compte Spotify (Authorization Code + PKCE, sans secret ; jetons dans le Trousseau), source +`SpotifyWebSource` (`/me/player`, interrogé pendant la lecture), changement d'appareil (Spotify Connect), +fenêtre « Spotify… » pour saisir le Client ID. `MusicController` choisira la source Web si l'utilisateur est +connecté, sinon la locale. + +Contraintes Spotify vérifiées le 2026-09-11 : +- une app en mode développement accepte **5 utilisateurs** au plus, ajoutés à la main, et son propriétaire + doit avoir **Premium** (depuis février 2026) ; +- le quota étendu est réservé aux entreprises (≥ 250 000 utilisateurs actifs par mois) depuis mai 2025 ; +- les commandes de lecture restent disponibles en mode développement ; +- adresse de retour : `http://127.0.0.1:` ou un schéma personnalisé (`localhost` refusé). + +Conséquence : pour un repo public, **chaque utilisateur crée sa propre app développeur Spotify** et colle son +Client ID dans SonyBridge ; sans cela, l'encoche reste sur la source locale. + +Sources : [quotas Spotify](https://developer.spotify.com/documentation/web-api/concepts/quota-modes), +[migration février 2026](https://developer.spotify.com/documentation/web-api/tutorials/february-2026-migration-guide), +[adresses de retour](https://developer.spotify.com/documentation/web-api/concepts/redirect_uri). + +## 11. Ordre de construction (indicatif, le plan fait foi) + +1. Logique pure + tests (`NotchGeometry`, `NotchContent`, `NowPlaying`, `PlaybackClock`, `SpotifyPlaybackInfo`). +2. Panneau + contrôleur : l'encoche apparaît au bon endroit, s'ouvre et se ferme au survol, suit les écrans. +3. Onglet Casque branché sur `HeadphonesModel` + option « Afficher l'encoche ». +4. Source Spotify locale + `MusicController` + onglet Musique + autorisations. +5. États au repos complets, animations, vérification visuelle et matérielle. From 61cf297310f3792fe36bb57f09994a16412e3d8b Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 15:32:43 +0200 Subject: [PATCH 20/50] docs: notch step 1 implementation plan Co-Authored-By: Claude Opus 5 --- docs/superpowers/plans/2026-09-11-notch.md | 1985 +++++++++++++++++ .../specs/2026-09-11-notch-design.md | 2 +- 2 files changed, 1986 insertions(+), 1 deletion(-) create mode 100644 docs/superpowers/plans/2026-09-11-notch.md diff --git a/docs/superpowers/plans/2026-09-11-notch.md b/docs/superpowers/plans/2026-09-11-notch.md new file mode 100644 index 00000000..c87750e9 --- /dev/null +++ b/docs/superpowers/plans/2026-09-11-notch.md @@ -0,0 +1,1985 @@ +# SonyBridge dans l'encoche (étape 1) — plan d'implémentation + +> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. + +**Goal :** ajouter une encoche interactive en haut de l'écran : au repos elle montre la pochette Spotify et le +mode du casque ; au survol elle s'ouvre sur deux onglets, Musique (Spotify local) et Casque (NC / Ambiant / Off). + +**Architecture :** un `NSPanel` sans bordure et non activant, placé au-dessus de la barre des menus et calé sur +l'encoche (`NotchGeometry`), héberge une vue SwiftUI (`NotchView`). La musique vient d'une interface commune +`MusicSource` ; l'étape 1 n'a que `SpotifyLocalSource` (signal `PlaybackStateChanged` + Apple Events via +`NSAppleScript`), exposée à l'interface par `MusicController`. L'onglet Casque appelle le `HeadphonesModel` existant. +Toute la logique décidable sans AppKit (géométrie, état au repos, horloge de lecture, décodage Spotify) est dans +des fichiers purs testés par `LogicTests`. + +**Tech Stack :** Swift 5 (mode de langage), SwiftUI, AppKit, Combine, Foundation (`NSAppleScript`, +`DistributedNotificationCenter`, `URLSession`) ; build `swiftc` via `scripts/build.sh` et `Makefile` ; tests +`scripts/test.sh` ; Python 3 (vérification des traductions). + +**Spec :** `docs/superpowers/specs/2026-09-11-notch-design.md` + +## Global Constraints + +- macOS minimum : **13.0** (pas d'API macOS 14+ : par exemple pas de `UnevenRoundedRectangle`, pas d'`onChange` à deux paramètres). +- Pas de Xcode : tout se compile avec les Command Line Tools (`make`, `make test`, `make run`, `make release`). +- Swift compilé avec `-swift-version 5`. +- Licence : **aucun code ni visuel copié de boring.notch (GPL-3.0)**, ni d'un autre projet GPL. Tout est écrit ici, + à partir de la documentation Apple. SonyBridge reste sous licence MIT. +- Textes : **tout texte affiché** passe par `tr("…")`, avec la clé en anglais et sa traduction dans + `Client/macos/fr.lproj/Localizable.strings` (apostrophe typographique `’` dans les traductions françaises). + `make test` le vérifie. Les textes non traduisibles (chiffres, « − ») utilisent `Text(verbatim:)`. +- Spotify : **ne jamais envoyer d'Apple Event à Spotify s'il n'est pas ouvert** (un Apple Event lancerait l'app). + Seul le bouton « Ouvrir Spotify » lance Spotify. +- Casque : l'encoche n'envoie **aucune nouvelle commande** au casque ; elle appelle uniquement + `setMode`, `setLevel(_:final:)`, `setFocusOnVoice` et `connect` du `HeadphonesModel` existant. +- Lancement de l'app : **uniquement** `make run` (qui passe par `open … --args`). Ne jamais lancer + `build/SonyBridge.app/Contents/MacOS/SonyBridge` directement (crash TCC), ne jamais utiliser `open --stdout`. + Le journal est `~/Library/Logs/SonyBridge/app.log` (lien `build/app.log`). +- Git : c'est **l'utilisateur** qui committe. À chaque étape « Commit », afficher la commande proposée et attendre + qu'il la lance. +- Test visuel et matériel : l'agent ne voit pas l'écran. Chaque vérification visuelle est demandée à + l'utilisateur, avec une liste précise de choses à regarder. + +## Carte des fichiers + +| Fichier | Tâche | Responsabilité | +|---|---|---| +| `Client/macos/Notch/NotchGeometry.swift` | 1 | **Pur.** `ScreenMetrics`, `NotchGeometry` : rectangles de l'encoche, élargi, ouvert, pastille | +| `Client/macos/Notch/NotchContent.swift` | 1 | **Pur.** `NotchRestingState`, `NotchTab`, `NotchContent` : état au repos, onglet, délais | +| `Client/macos/Music/NowPlaying.swift` | 2 | **Pur.** `MusicCapabilities`, `NowPlaying` | +| `Client/macos/Music/PlaybackClock.swift` | 2 | **Pur.** Position en direct et format « m:ss » | +| `Client/macos/Music/SpotifyPlaybackInfo.swift` | 2 | **Pur.** `SpotifyState`, décodage du signal et de la réponse AppleScript | +| `Client/macos/Music/MusicSource.swift` | 3 | `MusicSourceStatus`, protocole `MusicSource` | +| `Client/macos/Music/SpotifyScript.swift` | 3 | Textes AppleScript et exécution d'un `NSAppleScript` | +| `Client/macos/Music/SpotifyLocalSource.swift` | 3 | Source Spotify locale | +| `Client/macos/Music/MusicController.swift` | 3 | État musique publié pour l'encoche, pochette, limitation des curseurs | +| `Client/macos/Notch/NotchPanel.swift` | 4 | `NotchPanel`, `NotchContainerView` (survol), `NotchHostingView` (premier clic) | +| `Client/macos/Notch/NotchController.swift` | 4 | Écran, placement, taille, survol, option | +| `Client/macos/Notch/NotchView.swift` | 4, 5, 6 | `NotchViewState`, `NotchShape`, `NotchView`, `ArtworkView`, `LevelBars` | +| `Client/macos/Notch/HeadphonesTab.swift` | 5 | Onglet Casque | +| `Client/macos/Notch/MusicTab.swift` | 6 | Onglet Musique | +| `Client/macos/AppSettings.swift` | 3 | Option `showNotch` | +| `Client/macos/HeadphonesMenu.swift` | 3 | Case « Afficher l'encoche » | +| `Client/macos/AppDelegate.swift` | 3, 4 | Crée `MusicController` et `NotchController` | +| `Client/macos/SonyHeadphonesClient.entitlements` | 3 | Apple Events vers Spotify, réseau sortant | +| `Client/macos/info.plist`, `*.lproj/InfoPlist.strings` | 3 | `NSAppleEventsUsageDescription` | +| `Client/macos/fr.lproj/Localizable.strings` | 3–6 | Traductions | +| `scripts/build.sh` | 1 | Compile aussi `Notch/*.swift` et `Music/*.swift` | +| `scripts/test.sh` | 1, 2 | Ajoute les fichiers purs à `LogicTests` | +| `Client/tests/LogicTests/main.swift` | 1, 2 | Nouveaux tests | +| `README.md` | 6 | Fonction encoche, autorisation Spotify | + +`SpotifyScript.swift` n'est pas dans le tableau §5.1 de la spec : c'est un découpage de `SpotifyLocalSource` +(les textes AppleScript à part), sans nouvelle responsabilité. + +Nombre de clés de traduction attendu par `make test` : **54** aujourd'hui → 55 (tâche 3) → 57 (tâche 4) → +58 (tâche 5) → 67 (tâche 6). + +--- + +### Task 1: Logique pure de l'encoche + câblage du build et des tests + +**Files:** +- Create: `Client/macos/Notch/NotchGeometry.swift`, `Client/macos/Notch/NotchContent.swift` +- Modify: `Client/tests/LogicTests/main.swift` (nouveaux blocs avant `if failures > 0`) +- Modify: `scripts/test.sh` (bloc `LogicTests`), `scripts/build.sh:23` (`SWIFT_SOURCES`) + +**Interfaces:** +- Produces : + - `struct ScreenMetrics: Equatable { var frame: CGRect; var safeAreaTop: CGFloat; var auxiliaryTopLeft: CGRect?; var auxiliaryTopRight: CGRect?; var menuBarHeight: CGFloat }` + - `struct NotchGeometry: Equatable { static let sideExtension: CGFloat /* 36 */; static let simulatedWidth: CGFloat /* 190 */; static let fallbackMenuBarHeight: CGFloat /* 24 */; static let openSize: CGSize /* 380 × 190 */; let hasNotch: Bool; let notch: CGRect; init(screen: ScreenMetrics); var extended: CGRect; var open: CGRect; func restingFrame(for state: NotchRestingState) -> CGRect? }` + - `enum NotchRestingState: Equatable { case musicAndHeadphones, musicOnly, headphonesOnly, empty }` + - `enum NotchTab: Equatable { case music, headphones }` + - `enum NotchContent { static let openDelay: TimeInterval /* 0.15 */; static let closeDelay: TimeInterval /* 0.4 */; static func restingState(hasMusic: Bool, headphonesConnected: Bool) -> NotchRestingState; static func tabOnOpen(lastChosen: NotchTab?, hasMusic: Bool) -> NotchTab }` + +- [ ] **Step 1 : Écrire les tests** — dans `Client/tests/LogicTests/main.swift`, ajouter `import CoreGraphics` + sous `import Foundation` (les initialiseurs `CGRect(x:y:width:height:)` en viennent), puis insérer ces blocs + juste avant `if failures > 0 {` : + +```swift +// NotchGeometry: a 14" MacBook Pro screen (1512 × 982 pt, notch 188 pt wide, 32 pt high). +do { + let screen = ScreenMetrics(frame: CGRect(x: 0, y: 0, width: 1512, height: 982), safeAreaTop: 32, + auxiliaryTopLeft: CGRect(x: 0, y: 950, width: 662, height: 32), + auxiliaryTopRight: CGRect(x: 850, y: 950, width: 662, height: 32), + menuBarHeight: 32) + let geometry = NotchGeometry(screen: screen) + check(geometry.hasNotch, "notched screen detected") + check(geometry.notch == CGRect(x: 662, y: 950, width: 188, height: 32), "notch rect was \(geometry.notch)") + check(geometry.extended == CGRect(x: 626, y: 950, width: 260, height: 32), "extended rect was \(geometry.extended)") + check(geometry.open == CGRect(x: 566, y: 792, width: 380, height: 190), "open rect was \(geometry.open)") + check(geometry.restingFrame(for: .empty) == geometry.notch, "empty state: bare notch") + check(geometry.restingFrame(for: .musicOnly) == geometry.extended, "music: extended notch") +} + +// NotchGeometry: an external screen without a notch, right of the primary screen. +do { + let frame = CGRect(x: 1512, y: 0, width: 2560, height: 1440) + let geometry = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 0, auxiliaryTopLeft: nil, + auxiliaryTopRight: nil, menuBarHeight: 25)) + check(!geometry.hasNotch, "no notch") + check(geometry.notch == CGRect(x: 2697, y: 1415, width: 190, height: 25), "simulated pill was \(geometry.notch)") + check(geometry.restingFrame(for: .empty) == nil, "empty state hides the pill") + check(geometry.restingFrame(for: .headphonesOnly) == geometry.extended, "headphones: extended pill") + + let autoHidden = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 0, auxiliaryTopLeft: nil, + auxiliaryTopRight: nil, menuBarHeight: 0)) + check(autoHidden.notch.height == 24, "auto-hidden menu bar: fallback pill height") + let partial = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 32, auxiliaryTopLeft: nil, + auxiliaryTopRight: nil, menuBarHeight: 32)) + check(!partial.hasNotch, "safe area without auxiliary areas: no notch") +} + +// NotchContent: resting state (spec §4.1), tab on opening, hover delays. +do { + check(NotchContent.restingState(hasMusic: true, headphonesConnected: true) == .musicAndHeadphones, "state 1") + check(NotchContent.restingState(hasMusic: true, headphonesConnected: false) == .musicOnly, "state 2") + check(NotchContent.restingState(hasMusic: false, headphonesConnected: true) == .headphonesOnly, "state 3") + check(NotchContent.restingState(hasMusic: false, headphonesConnected: false) == .empty, "state 4") + check(NotchContent.tabOnOpen(lastChosen: nil, hasMusic: true) == .music, "first open with music: Music") + check(NotchContent.tabOnOpen(lastChosen: nil, hasMusic: false) == .headphones, "first open without music: Headphones") + check(NotchContent.tabOnOpen(lastChosen: .headphones, hasMusic: true) == .headphones, "then the last chosen tab") + check(NotchContent.openDelay == 0.15 && NotchContent.closeDelay == 0.4, "hover delays") +} +``` + +- [ ] **Step 2 : Ajouter les fichiers purs à `LogicTests`** — dans `scripts/test.sh`, remplacer le bloc + `LogicTests` par : + +```bash +echo "== LogicTests" +swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ + "$ROOT/Client/tests/LogicTests/main.swift" \ + "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ + "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" \ + -o "$OUT/LogicTests" +"$OUT/LogicTests" +``` + +- [ ] **Step 3 : Lancer les tests pour les voir échouer** + +Run : `make test` +Attendu : échec de `swiftc`, `error: no such file or directory: '…/Client/macos/Notch/NotchGeometry.swift'`. + +- [ ] **Step 4 : Écrire `Client/macos/Notch/NotchContent.swift`** + +```swift +import Foundation + +// What the notch shows while resting (spec §4.1) and which tab it opens on. Pure logic, tested in LogicTests. +enum NotchRestingState: Equatable { + case musicAndHeadphones // 1: artwork left, headphones mode right + case musicOnly // 2: artwork left, level bars right + case headphonesOnly // 3: headphones glyph left, mode right + case empty // 4: bare notch (hidden on a screen without a notch) +} + +enum NotchTab: Equatable { + case music, headphones +} + +enum NotchContent { + static let openDelay: TimeInterval = 0.15 // hover time before opening + static let closeDelay: TimeInterval = 0.4 // time after the pointer leaves before closing + + static func restingState(hasMusic: Bool, headphonesConnected: Bool) -> NotchRestingState { + switch (hasMusic, headphonesConnected) { + case (true, true): return .musicAndHeadphones + case (true, false): return .musicOnly + case (false, true): return .headphonesOnly + case (false, false): return .empty + } + } + + // The first opening of the session follows the music; afterwards the last tab the user picked wins. + static func tabOnOpen(lastChosen: NotchTab?, hasMusic: Bool) -> NotchTab { + lastChosen ?? (hasMusic ? .music : .headphones) + } +} +``` + +- [ ] **Step 5 : Écrire `Client/macos/Notch/NotchGeometry.swift`** + +```swift +import CoreGraphics + +// The NSScreen values NotchGeometry needs, copied out so this file stays AppKit-free (tested in LogicTests). +// Rects are in global screen coordinates (origin at the bottom-left of the primary screen). +struct ScreenMetrics: Equatable { + var frame: CGRect + var safeAreaTop: CGFloat // NSScreen.safeAreaInsets.top (0 without a notch) + var auxiliaryTopLeft: CGRect? // NSScreen.auxiliaryTopLeftArea (nil without a notch) + var auxiliaryTopRight: CGRect? // NSScreen.auxiliaryTopRightArea + var menuBarHeight: CGFloat // frame.maxY - visibleFrame.maxY (0 when the menu bar auto-hides) +} + +// Where the notch panel goes (spec §4): the real notch, or a simulated pill centred at the top of a screen +// without one. Every rect shares the notch's horizontal centre and touches the top edge of the screen. +struct NotchGeometry: Equatable { + static let sideExtension: CGFloat = 36 // resting widening on each side (states 1-3) + static let simulatedWidth: CGFloat = 190 // pill width on a screen without a notch + static let fallbackMenuBarHeight: CGFloat = 24 // pill height when the menu bar auto-hides + static let openSize = CGSize(width: 380, height: 190) + + let hasNotch: Bool + let notch: CGRect + + init(screen: ScreenMetrics) { + let top = screen.frame.maxY + if screen.safeAreaTop > 0, let left = screen.auxiliaryTopLeft, let right = screen.auxiliaryTopRight, + screen.frame.width - left.width - right.width > 0 { + // Only the widths of the auxiliary areas are used, so their coordinate space doesn't matter. + hasNotch = true + notch = CGRect(x: screen.frame.minX + left.width, y: top - screen.safeAreaTop, + width: screen.frame.width - left.width - right.width, height: screen.safeAreaTop) + } else { + hasNotch = false + let height = screen.menuBarHeight > 0 ? screen.menuBarHeight : Self.fallbackMenuBarHeight + notch = CGRect(x: screen.frame.midX - Self.simulatedWidth / 2, y: top - height, + width: Self.simulatedWidth, height: height) + } + } + + // The notch widened on both sides, to hold the resting artwork / mode icons. + var extended: CGRect { + notch.insetBy(dx: -Self.sideExtension, dy: 0) + } + + var open: CGRect { + let width = max(Self.openSize.width, extended.width) + let height = max(Self.openSize.height, notch.height) + return CGRect(x: notch.midX - width / 2, y: notch.maxY - height, width: width, height: height) + } + + // Panel frame while resting; nil = hidden (nothing to show on a screen without a notch). + func restingFrame(for state: NotchRestingState) -> CGRect? { + switch state { + case .empty: return hasNotch ? notch : nil + default: return extended + } + } +} +``` + +- [ ] **Step 6 : Compiler les nouveaux dossiers dans l'app** — `scripts/build.sh:23`, remplacer la ligne par : + +```bash +SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift "$MAC"/Notch/*.swift "$MAC"/Music/*.swift) +``` + +(`shopt -s nullglob` est déjà actif : `Music/` vide ne gêne pas.) + +- [ ] **Step 7 : Lancer les tests et le build** + +Run : `make test && make` +Attendu : `LogicTests: all passed`, les 3 autres suites passent, `Localization: 54 keys, all translated`, puis +`OK -> …/build/SonyBridge.app`, sans avertissement Swift. + +- [ ] **Step 8 : Commit (par l'utilisateur)** + +```bash +git add Client/macos/Notch Client/tests/LogicTests/main.swift scripts/test.sh scripts/build.sh && git commit -m "feat(notch): notch geometry and resting-state logic" -m "Co-Authored-By: Claude Opus 5 " +``` + +--- + +### Task 2: Logique pure de la musique + +**Files:** +- Create: `Client/macos/Music/NowPlaying.swift`, `Client/macos/Music/PlaybackClock.swift`, + `Client/macos/Music/SpotifyPlaybackInfo.swift` +- Modify: `Client/tests/LogicTests/main.swift` (nouveaux blocs avant `if failures > 0`), `scripts/test.sh` + +**Interfaces:** +- Produces : + - `struct MusicCapabilities: Equatable { var canSeek: Bool; var canSetVolume: Bool; var canChangeDevice: Bool }` + - `struct NowPlaying: Equatable { var trackID: String; var title: String; var artist: String; var album: String; var artworkURL: URL?; var duration: TimeInterval; var position: TimeInterval; var positionDate: Date; var isPlaying: Bool; var volume: Int?; var deviceName: String?; var capabilities: MusicCapabilities }` (memberwise init, arguments dans cet ordre ; `deviceName == nil` = « Ce Mac ») + - `enum PlaybackClock { static func position(of track: NowPlaying, at date: Date) -> TimeInterval; static func format(_ seconds: TimeInterval) -> String }` + - `enum SpotifyState: Equatable { case stopped; case track(NowPlaying); case incomplete }` + - `enum SpotifyPlaybackInfo { static let localCapabilities: MusicCapabilities; static let fieldSeparator: Character /* U+001F */; static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> SpotifyState; static func parse(scriptResult text: String, at date: Date) -> SpotifyState }` + +- [ ] **Step 1 : Écrire les tests** — dans `Client/tests/LogicTests/main.swift`, insérer avant `if failures > 0 {` : + +```swift +// PlaybackClock: live position from the last known one; display format. +do { + let t0 = Date(timeIntervalSince1970: 1_000) + var track = NowPlaying(trackID: "spotify:track:1", title: "A", artist: "B", album: "C", artworkURL: nil, + duration: 200, position: 30, positionDate: t0, isPlaying: true, volume: 50, + deviceName: nil, + capabilities: MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false)) + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 42, "playing: advances") + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 200, "bounded by the duration") + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(-40)) == 0, "never negative") + track.isPlaying = false + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 30, "paused: frozen") + track.isPlaying = true + track.duration = 0 + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 530, "unknown duration: not bounded") + let nextTrack = NowPlaying(trackID: "spotify:track:2", title: "D", artist: "E", album: "F", artworkURL: nil, + duration: 180, position: 0, positionDate: t0.addingTimeInterval(100), isPlaying: true, + volume: 50, deviceName: nil, capabilities: track.capabilities) + check(PlaybackClock.position(of: nextTrack, at: t0.addingTimeInterval(100)) == 0, "track change: starts from 0") + check(PlaybackClock.format(65) == "1:05", "format 1:05 was \(PlaybackClock.format(65))") + check(PlaybackClock.format(754.9) == "12:34", "format rounds down") + check(PlaybackClock.format(3723) == "1:02:03", "format with hours") + check(PlaybackClock.format(-3) == "0:00", "format never negative") +} + +// SpotifyPlaybackInfo: the PlaybackStateChanged signal (spec §6.1). +do { + let t0 = Date(timeIntervalSince1970: 1_000) + let signal: [AnyHashable: Any] = [ + "Player State": "Playing", "Track ID": "spotify:track:42", "Name": "Midnight City", "Artist": "M83", + "Album": "Hurry Up, We're Dreaming", "Duration": NSNumber(value: 243_000), "Playback Position": NSNumber(value: 12.5), + ] + if case .track(let track) = SpotifyPlaybackInfo.parse(signal: signal, at: t0) { + check(track.trackID == "spotify:track:42" && track.title == "Midnight City" && track.artist == "M83", "signal: names") + check(track.duration == 243 && track.position == 12.5 && track.positionDate == t0 && track.isPlaying, "signal: timing") + check(track.artworkURL == nil && track.volume == nil && track.deviceName == nil, "signal: no artwork or volume, this Mac") + check(track.capabilities == SpotifyPlaybackInfo.localCapabilities, "signal: local capabilities") + } else { + check(false, "signal with full info decodes to a track") + } + var paused = signal + paused["Player State"] = "Paused" + paused["Playback Position"] = nil + if case .track(let track) = SpotifyPlaybackInfo.parse(signal: paused, at: t0) { + check(!track.isPlaying && track.position == 0, "paused, no position: 0") + } else { + check(false, "paused signal decodes to a track") + } + check(SpotifyPlaybackInfo.parse(signal: ["Player State": "Stopped"], at: t0) == .stopped, "signal: stopped") + check(SpotifyPlaybackInfo.parse(signal: nil, at: t0) == .incomplete, "signal without userInfo: incomplete") + check(SpotifyPlaybackInfo.parse(signal: ["Player State": "Playing"], at: t0) == .incomplete, "signal without track id: incomplete") +} + +// SpotifyPlaybackInfo: the text SpotifyScript.readState returns (fields separated by U+001F). +do { + let t0 = Date(timeIntervalSince1970: 1_000) + let sep = "\u{1F}" + let text = ["paused", "spotify:track:7", "Title", "Artist", "Album", "180000", "61500", + "https://i.scdn.co/image/ab", "70"].joined(separator: sep) + if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: text, at: t0) { + check(!track.isPlaying && track.duration == 180 && track.position == 61.5, "script: timing") + check(track.artworkURL == URL(string: "https://i.scdn.co/image/ab") && track.volume == 70, "script: artwork and volume") + check(track.title == "Title" && track.album == "Album" && track.positionDate == t0, "script: names") + } else { + check(false, "script result decodes to a track") + } + let local = ["playing", "spotify:local:x", "T", "", "", "1000", "0", "", "101"].joined(separator: sep) + if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: local, at: t0) { + check(track.artworkURL == nil && track.volume == 100 && track.artist.isEmpty, "script: empty fields, volume clamped") + } else { + check(false, "script result with empty fields decodes to a track") + } + check(SpotifyPlaybackInfo.parse(scriptResult: "stopped", at: t0) == .stopped, "script: stopped") + check(SpotifyPlaybackInfo.parse(scriptResult: "garbage", at: t0) == .incomplete, "script: malformed") +} +``` + +- [ ] **Step 2 : Ajouter les fichiers à `LogicTests`** — dans `scripts/test.sh`, bloc `LogicTests`, ajouter une + ligne après celle de `Notch/` : + +```bash + "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ +``` + +- [ ] **Step 3 : Lancer les tests pour les voir échouer** + +Run : `make test` +Attendu : échec de `swiftc`, `error: no such file or directory: '…/Client/macos/Music/NowPlaying.swift'`. + +- [ ] **Step 4 : Écrire `Client/macos/Music/NowPlaying.swift`** + +```swift +import Foundation + +// What a music source can do with the current track (the Web source of step 2 depends on the device). +struct MusicCapabilities: Equatable { + var canSeek: Bool + var canSetVolume: Bool + var canChangeDevice: Bool +} + +// The track a music source is playing (or paused on). `position` was true at `positionDate`; PlaybackClock +// derives the live position from it, so nothing polls while a track plays. +struct NowPlaying: Equatable { + var trackID: String + var title: String + var artist: String + var album: String + var artworkURL: URL? + var duration: TimeInterval // seconds; 0 when unknown + var position: TimeInterval // seconds, at positionDate + var positionDate: Date + var isPlaying: Bool + var volume: Int? // 0...100; nil until known + var deviceName: String? // nil = this Mac + var capabilities: MusicCapabilities +} +``` + +- [ ] **Step 5 : Écrire `Client/macos/Music/PlaybackClock.swift`** + +```swift +import Foundation + +// Live playback position and its display, from the last known position (spec §6.1). +enum PlaybackClock { + static func position(of track: NowPlaying, at date: Date) -> TimeInterval { + var position = track.position + if track.isPlaying { position += date.timeIntervalSince(track.positionDate) } + if track.duration > 0 { position = min(position, track.duration) } + return max(0, position) + } + + // "1:05", "12:34", "1:02:03". + static func format(_ seconds: TimeInterval) -> String { + let total = max(0, Int(seconds.rounded(.down))) + let hours = total / 3600, minutes = total / 60 % 60, secs = total % 60 + return hours > 0 + ? String(format: "%d:%02d:%02d", hours, minutes, secs) + : String(format: "%d:%02d", minutes, secs) + } +} +``` + +- [ ] **Step 6 : Écrire `Client/macos/Music/SpotifyPlaybackInfo.swift`** + +```swift +import Foundation + +// Result of decoding what the local Spotify app reports. +enum SpotifyState: Equatable { + case stopped // Spotify is open with nothing loaded + case track(NowPlaying) + case incomplete // not enough information: read the state through Apple Events instead +} + +// Decodes the local Spotify app's signal and Apple Events replies (spec §6.1). Pure, tested in LogicTests. +enum SpotifyPlaybackInfo { + static let localCapabilities = MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false) + static let fieldSeparator: Character = "\u{1F}" + + // com.spotify.client.PlaybackStateChanged userInfo: "Player State" (Playing / Paused / Stopped), "Track ID", + // "Name", "Artist", "Album", "Duration" (ms), "Playback Position" (s). It never carries artwork or volume. + static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> SpotifyState { + guard let info = userInfo, let state = info["Player State"] as? String else { return .incomplete } + if state == "Stopped" { return .stopped } + guard state == "Playing" || state == "Paused", + let trackID = info["Track ID"] as? String, !trackID.isEmpty else { return .incomplete } + return .track(NowPlaying( + trackID: trackID, + title: info["Name"] as? String ?? "", + artist: info["Artist"] as? String ?? "", + album: info["Album"] as? String ?? "", + artworkURL: nil, + duration: ((info["Duration"] as? NSNumber)?.doubleValue ?? 0) / 1000, + position: (info["Playback Position"] as? NSNumber)?.doubleValue ?? 0, + positionDate: date, + isPlaying: state == "Playing", + volume: nil, + deviceName: nil, + capabilities: localCapabilities)) + } + + // SpotifyScript.readState's reply: "stopped", or 9 fields separated by U+001F — state, track id, name, + // artist, album, duration (ms), position (ms), artwork URL, volume. + static func parse(scriptResult text: String, at date: Date) -> SpotifyState { + if text == "stopped" { return .stopped } + let fields = text.split(separator: fieldSeparator, omittingEmptySubsequences: false).map(String.init) + guard fields.count == 9, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { + return .incomplete + } + return .track(NowPlaying( + trackID: fields[1], + title: fields[2], + artist: fields[3], + album: fields[4], + artworkURL: URL(string: fields[7]), + duration: (Double(fields[5]) ?? 0) / 1000, + position: (Double(fields[6]) ?? 0) / 1000, + positionDate: date, + isPlaying: fields[0] == "playing", + volume: Int(fields[8]).map { min(100, max(0, $0)) }, + deviceName: nil, + capabilities: localCapabilities)) + } +} +``` + +- [ ] **Step 7 : Lancer les tests et le build** + +Run : `make test && make` +Attendu : `LogicTests: all passed`, `Localization: 54 keys, all translated`, build `OK`, sans avertissement. + +- [ ] **Step 8 : Commit (par l'utilisateur)** + +```bash +git add Client/macos/Music Client/tests/LogicTests/main.swift scripts/test.sh && git commit -m "feat(music): now-playing model, playback clock and Spotify info decoding" -m "Co-Authored-By: Claude Opus 5 " +``` + +--- + +### Task 3: Source Spotify locale + `MusicController` + option « Afficher l'encoche » + +Pas de test unitaire ici (AppKit, Apple Events, signaux système) : la logique décidable est déjà testée en +tâche 2. La vérification se fait dans le journal, sur le Mac de l'utilisateur, avant que l'encoche existe. + +**Files:** +- Create: `Client/macos/Music/MusicSource.swift`, `Client/macos/Music/SpotifyScript.swift`, + `Client/macos/Music/SpotifyLocalSource.swift`, `Client/macos/Music/MusicController.swift` +- Modify: `Client/macos/AppSettings.swift`, `Client/macos/HeadphonesMenu.swift`, `Client/macos/AppDelegate.swift` +- Modify: `Client/macos/SonyHeadphonesClient.entitlements`, `Client/macos/info.plist`, + `Client/macos/en.lproj/InfoPlist.strings`, `Client/macos/fr.lproj/InfoPlist.strings`, + `Client/macos/fr.lproj/Localizable.strings` + +**Interfaces:** +- Consumes (tâche 2) : `NowPlaying`, `PlaybackClock.position(of:at:)`, `SpotifyState`, + `SpotifyPlaybackInfo.parse(signal:at:)`, `SpotifyPlaybackInfo.parse(scriptResult:at:)` ; existant : `SendThrottle`. +- Produces : + - `enum MusicSourceStatus: Equatable { case notRunning, permissionDenied, ready }` + - `protocol MusicSource: AnyObject { var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? { get set }; func start(); func stop(); func refresh(); func playPause(); func next(); func previous(); func seek(to seconds: TimeInterval); func setVolume(_ volume: Int); func launchPlayer() }` + - `final class MusicController: ObservableObject { @Published private(set) var status: MusicSourceStatus; @Published private(set) var nowPlaying: NowPlaying?; @Published private(set) var artwork: NSImage?; var hasMusic: Bool; init(source: MusicSource = SpotifyLocalSource()); func start(); func stop(); func notchDidOpen(); func notchDidClose(); func playPause(); func next(); func previous(); func seek(to seconds: TimeInterval, final: Bool); func setVolume(_ volume: Int, final: Bool); func launchPlayer(); func openAutomationSettings() }` + - `AppSettings.showNotch: Bool` (`@Published`, activée par défaut) + - `AppDelegate` : propriété `music: MusicController`, démarrée / arrêtée selon `settings.showNotch` + +- [ ] **Step 1 : Écrire `Client/macos/Music/MusicSource.swift`** + +```swift +import Foundation + +enum MusicSourceStatus: Equatable { + case notRunning // the player app isn't open + case permissionDenied // macOS refused SonyBridge the right to control it + case ready +} + +// Where the music comes from (spec §5.1). Step 1: SpotifyLocalSource; step 2 adds the Spotify Web API. +// Called on the main thread; onChange is called on the main thread. +protocol MusicSource: AnyObject { + var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? { get set } + func start() + func stop() + func refresh() + func playPause() + func next() + func previous() + func seek(to seconds: TimeInterval) + func setVolume(_ volume: Int) + func launchPlayer() +} +``` + +- [ ] **Step 2 : Écrire `Client/macos/Music/SpotifyScript.swift`** + +```swift +import Foundation + +// AppleScript sent to the local Spotify app (spec §6). Only ever run on SpotifyLocalSource's script queue. +enum SpotifyScript { + enum Result: Equatable { + case success(String) + case failure(Int) // AppleScript / Apple Event error number + } + + // Fields joined by U+001F; times as integer milliseconds so no locale decimal separator shows up. + // Parsed by SpotifyPlaybackInfo.parse(scriptResult:at:). + static let readState = """ + with timeout of 2 seconds + tell application id "com.spotify.client" + set playerState to (player state as text) + if playerState is "stopped" then return "stopped" + set t to current track + set sep to (character id 31) + set art to artwork url of t + if art is missing value then set art to "" + return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) + end tell + end timeout + """ + + // One command, e.g. "playpause", "next track", "set sound volume to 40". + static func command(_ body: String) -> String { + """ + with timeout of 2 seconds + tell application id "com.spotify.client" to \(body) + end timeout + """ + } + + static func run(_ script: NSAppleScript?) -> Result { + guard let script = script else { return .failure(-2700) } + var error: NSDictionary? + let output = script.executeAndReturnError(&error) + if let error = error { + return .failure((error[NSAppleScript.errorNumber] as? NSNumber)?.intValue ?? -2700) + } + return .success(output.stringValue ?? "") + } +} +``` + +- [ ] **Step 3 : Écrire `Client/macos/Music/SpotifyLocalSource.swift`** + +```swift +import AppKit + +// Reads and controls the Spotify app of this Mac (spec §6): its PlaybackStateChanged signal, plus Apple Events. +// Never sends an Apple Event while Spotify isn't running: one would launch it. +final class SpotifyLocalSource: MusicSource { + static let bundleIdentifier = "com.spotify.client" + private static let signalName = Notification.Name("com.spotify.client.PlaybackStateChanged") + private static let permissionDeniedError = -1743 // errAEEventNotPermitted + private static let notRunningErrors: Set = [-600, -609] // procNotFound, connectionInvalid + private static let launchSettleDelay: TimeInterval = 2 // Spotify answers Apple Events a moment after launch + + var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? + + // Main thread only. + private var status: MusicSourceStatus = .notRunning + private var nowPlaying: NowPlaying? + private var signalObserver: NSObjectProtocol? + private var workspaceObservers: [NSObjectProtocol] = [] + + // Every NSAppleScript is created and run on this serial queue, one at a time. + private let scriptQueue = DispatchQueue(label: "com.sonybridge.spotify") + private var readScript: NSAppleScript? // scriptQueue only + + // Checked before queuing, and again on the script queue right before an Apple Event goes out, so a Spotify + // quit in between is never relaunched. + private static var spotifyIsRunning: Bool { + !NSRunningApplication.runningApplications(withBundleIdentifier: bundleIdentifier).isEmpty + } + + private var isRunning: Bool { Self.spotifyIsRunning } + + func start() { + guard signalObserver == nil else { return } + signalObserver = DistributedNotificationCenter.default().addObserver( + forName: Self.signalName, object: nil, queue: .main + ) { [weak self] note in + self?.handleSignal(note.userInfo) + } + let center = NSWorkspace.shared.notificationCenter + workspaceObservers = [ + center.addObserver(forName: NSWorkspace.didLaunchApplicationNotification, object: nil, queue: .main) { [weak self] note in + guard Self.isSpotify(note) else { return } + DispatchQueue.main.asyncAfter(deadline: .now() + Self.launchSettleDelay) { self?.refresh() } + }, + center.addObserver(forName: NSWorkspace.didTerminateApplicationNotification, object: nil, queue: .main) { [weak self] note in + if Self.isSpotify(note) { self?.publish(.notRunning, nil) } + }, + ] + if isRunning { refresh() } else { publish(.notRunning, nil) } + } + + func stop() { + if let observer = signalObserver { DistributedNotificationCenter.default().removeObserver(observer) } + signalObserver = nil + workspaceObservers.forEach { NSWorkspace.shared.notificationCenter.removeObserver($0) } + workspaceObservers = [] + status = .notRunning + nowPlaying = nil + } + + func refresh() { + guard signalObserver != nil else { return } + guard isRunning else { publish(.notRunning, nil); return } + scriptQueue.async { [weak self] in + guard let self = self, Self.spotifyIsRunning else { return } + if self.readScript == nil { self.readScript = NSAppleScript(source: SpotifyScript.readState) } + let result = SpotifyScript.run(self.readScript) + DispatchQueue.main.async { self.applyRead(result) } + } + } + + func playPause() { + // Optimistic: the signal confirms a moment later. + if var track = nowPlaying { + track.position = PlaybackClock.position(of: track, at: Date()) + track.positionDate = Date() + track.isPlaying.toggle() + publish(status, track) + } + send("playpause") + } + + func next() { send("next track") } + + func previous() { send("previous track") } + + func seek(to seconds: TimeInterval) { + if var track = nowPlaying { + track.position = seconds + track.positionDate = Date() + publish(status, track) + } + // String(format:) isn't localized: always a "." decimal separator, as AppleScript source needs. + send(String(format: "set player position to %.3f", seconds)) + } + + func setVolume(_ volume: Int) { + let clamped = min(100, max(0, volume)) + if var track = nowPlaying { + track.volume = clamped + publish(status, track) + } + send("set sound volume to \(clamped)") + } + + func launchPlayer() { + guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.bundleIdentifier) else { + fputs("[spotify] Spotify isn't installed\n", stderr) + return + } + NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration(), + completionHandler: nil) + } + + // MARK: - Private + + private func send(_ command: String) { + guard signalObserver != nil else { return } + guard isRunning else { publish(.notRunning, nil); return } + scriptQueue.async { [weak self] in + guard Self.spotifyIsRunning else { return } + let result = SpotifyScript.run(NSAppleScript(source: SpotifyScript.command(command))) + if case .failure(let code) = result { + DispatchQueue.main.async { self?.applyFailure(code) } + } + } + } + + private func handleSignal(_ userInfo: [AnyHashable: Any]?) { + let denied = status == .permissionDenied + switch SpotifyPlaybackInfo.parse(signal: userInfo, at: Date()) { + case .stopped: + publish(denied ? .permissionDenied : .ready, nil) + case .track(var track): + // Artwork and volume only come from Apple Events: keep them for the same track, read them otherwise. + if let current = nowPlaying, current.trackID == track.trackID { + track.artworkURL = current.artworkURL + track.volume = current.volume + } + publish(denied ? .permissionDenied : .ready, track) + if track.artworkURL == nil && !denied { refresh() } + case .incomplete: + if !denied { refresh() } + } + } + + private func applyRead(_ result: SpotifyScript.Result) { + guard signalObserver != nil else { return } // stopped meanwhile + switch result { + case .success(let text): + switch SpotifyPlaybackInfo.parse(scriptResult: text, at: Date()) { + case .stopped: publish(.ready, nil) + case .track(let track): publish(.ready, track) + case .incomplete: fputs("[spotify] unexpected reply: \(text)\n", stderr) + } + case .failure(let code): + applyFailure(code) + } + } + + // Spec §6.3: a refusal stops the reads (the controller retries once per notch opening); anything else + // (timeout, busy) keeps the last known state until the next signal. + private func applyFailure(_ code: Int) { + guard signalObserver != nil else { return } + if code == Self.permissionDeniedError { + publish(.permissionDenied, nowPlaying) + } else if Self.notRunningErrors.contains(code) { + publish(.notRunning, nil) + } else { + fputs("[spotify] Apple Event failed (\(code))\n", stderr) + } + } + + private func publish(_ newStatus: MusicSourceStatus, _ track: NowPlaying?) { + status = newStatus + nowPlaying = track + onChange?(newStatus, track) + } + + private static func isSpotify(_ note: Notification) -> Bool { + (note.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication)?.bundleIdentifier == bundleIdentifier + } +} +``` + +- [ ] **Step 4 : Écrire `Client/macos/Music/MusicController.swift`** + +```swift +import AppKit +import Combine + +// The music state the notch shows, from the active MusicSource (spec §5.1). Step 1: the local Spotify app. +final class MusicController: ObservableObject { + static let openRefreshInterval: TimeInterval = 5 // re-read while the notch is open (volume isn't signalled) + private static let artworkCacheSize = 8 + + @Published private(set) var status: MusicSourceStatus = .notRunning + @Published private(set) var nowPlaying: NowPlaying? + @Published private(set) var artwork: NSImage? + + // Something to show: a track, playing or paused (even without the right to control it). + var hasMusic: Bool { status != .notRunning && nowPlaying != nil } + + private let source: MusicSource + private var running = false + private var refreshTimer: Timer? + private var seekThrottle = SendThrottle() + private var volumeThrottle = SendThrottle() + private var artworkCache: [URL: NSImage] = [:] + private var artworkOrder: [URL] = [] + private var artworkRequest: URL? + private var lastLogLine = "" + + init(source: MusicSource = SpotifyLocalSource()) { + self.source = source + source.onChange = { [weak self] status, track in self?.apply(status, track) } + } + + func start() { + guard !running else { return } + running = true + source.start() + } + + // "Show Notch" off: no Spotify reads at all (spec §4.3). + func stop() { + guard running else { return } + running = false + notchDidClose() + source.stop() + status = .notRunning + nowPlaying = nil + artwork = nil + artworkRequest = nil + log("stopped") + } + + // Opening reads once (which also retries a refused permission, spec §6.3), then every 5 s while open. + func notchDidOpen() { + guard running else { return } + source.refresh() + refreshTimer?.invalidate() + let timer = Timer(timeInterval: Self.openRefreshInterval, repeats: true) { [weak self] _ in + guard let self = self, self.status == .ready else { return } + self.source.refresh() + } + RunLoop.main.add(timer, forMode: .common) + refreshTimer = timer + } + + func notchDidClose() { + refreshTimer?.invalidate() + refreshTimer = nil + } + + func playPause() { source.playPause() } + + func next() { source.next() } + + func previous() { source.previous() } + + // Sliders: at most one command per 150 ms while dragging, the final value always, then a read-back. + func seek(to seconds: TimeInterval, final: Bool) { + if seekThrottle.shouldSend(final: final) { source.seek(to: seconds) } + if final { source.refresh() } + } + + func setVolume(_ volume: Int, final: Bool) { + if volumeThrottle.shouldSend(final: final) { source.setVolume(volume) } + if final { source.refresh() } + } + + func launchPlayer() { source.launchPlayer() } + + func openAutomationSettings() { + if let url = URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Automation") { + NSWorkspace.shared.open(url) + } + } + + // MARK: - Private + + private func apply(_ newStatus: MusicSourceStatus, _ track: NowPlaying?) { + guard running else { return } + status = newStatus + nowPlaying = track + loadArtwork(track?.artworkURL) + switch (newStatus, track) { + case (.notRunning, _): log("not running") + case (.permissionDenied, _): log("permission denied") + case (.ready, nil): log("nothing playing") + case (.ready, let track?): + log("\(track.isPlaying ? "playing" : "paused") \(track.trackID) vol \(track.volume.map(String.init) ?? "?")") + } + } + + // One line per actual change (the 5 s re-reads stay quiet). + private func log(_ line: String) { + guard line != lastLogLine else { return } + lastLogLine = line + fputs("[spotify] \(line)\n", stderr) + } + + private func loadArtwork(_ url: URL?) { + guard let url = url else { + artwork = nil + artworkRequest = nil + return + } + if let cached = artworkCache[url] { + artwork = cached + artworkRequest = nil + return + } + guard artworkRequest != url else { return } // already downloading + artworkRequest = url + URLSession.shared.dataTask(with: url) { [weak self] data, _, _ in + let image = data.flatMap { NSImage(data: $0) } + DispatchQueue.main.async { + guard let self = self, self.artworkRequest == url else { return } + self.artworkRequest = nil + guard let image = image else { return } + self.remember(image, for: url) + self.artwork = image + } + }.resume() + } + + private func remember(_ image: NSImage, for url: URL) { + artworkCache[url] = image + artworkOrder.removeAll { $0 == url } + artworkOrder.append(url) + if artworkOrder.count > Self.artworkCacheSize { + artworkCache[artworkOrder.removeFirst()] = nil + } + } +} +``` + +- [ ] **Step 5 : Option `showNotch` dans `Client/macos/AppSettings.swift`** + +Remplacer le commentaire de tête, l'enum `Keys`, ajouter la propriété et compléter `init` : + +```swift +// The user options, persisted in UserDefaults. Launch at login is backed by SMAppService (macOS 13+). +final class AppSettings: ObservableObject { + private enum Keys { + static let autoConnect = "autoConnect" + static let autoReconnect = "autoReconnect" + static let lastDeviceAddress = "lastDeviceAddress" + static let showNotch = "showNotch" + } +``` + +Après la propriété `autoReconnect` : + +```swift + @Published var showNotch: Bool { + didSet { defaults.set(showNotch, forKey: Keys.showNotch) } + } +``` + +Dans `init`, remplacer les lignes `register` et suivantes jusqu'à `launchAtLogin = …` exclu par : + +```swift + // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. + // Notch spec §7: the notch is shown by default. + defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true, Keys.showNotch: true]) + autoConnect = defaults.bool(forKey: Keys.autoConnect) + autoReconnect = defaults.bool(forKey: Keys.autoReconnect) + showNotch = defaults.bool(forKey: Keys.showNotch) +``` + +- [ ] **Step 6 : Case « Afficher l'encoche » dans `Client/macos/HeadphonesMenu.swift`** + +Après `private var autoReconnectItem = NSMenuItem()` (ligne 31) : + +```swift + private var showNotchItem = NSMenuItem() +``` + +Dans `addAppSection()`, remplacer les lignes de `autoReconnectItem = …` et la boucle `for item in […]` par : + +```swift + autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } + showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } + for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } +``` + +À la fin de `update()`, après `autoReconnectItem.state = …` : + +```swift + showNotchItem.state = settings.showNotch ? .on : .off +``` + +- [ ] **Step 7 : Démarrer / arrêter la musique selon l'option** — remplacer `Client/macos/AppDelegate.swift` par : + +```swift +import AppKit +import Combine + +final class AppDelegate: NSObject, NSApplicationDelegate { + private let model = HeadphonesModel() + private let settings = AppSettings() + private let music = MusicController() + private let deviceWatcher = DeviceWatcher() + private var statusItemController: StatusItemController? + private var cancellables = Set() + + func applicationDidFinishLaunching(_ notification: Notification) { + model.settings = settings + statusItemController = StatusItemController(model: model, settings: settings) + + // Spotify is only read while the notch is on (notch spec §4.3). $showNotch emits the current value first. + settings.$showNotch + .receive(on: DispatchQueue.main) + .sink { [weak self] show in + if show { self?.music.start() } else { self?.music.stop() } + } + .store(in: &cancellables) + + deviceWatcher.onConnect = { [weak self] address, name in + self?.model.headsetConnectedToMac(address: address, name: name) + } + deviceWatcher.onDisconnect = { [weak self] address in + self?.model.headsetDisconnectedFromMac(address: address) + } + deviceWatcher.start() + + if settings.autoConnect { model.autoConnectOnLaunch() } + } + + func applicationWillTerminate(_ notification: Notification) { + model.disconnect() + } +} +``` + +- [ ] **Step 8 : Autorisations** — remplacer `Client/macos/SonyHeadphonesClient.entitlements` par : + +```xml + + + + + com.apple.security.app-sandbox + + com.apple.security.device.bluetooth + + com.apple.security.files.user-selected.read-only + + com.apple.security.network.client + + com.apple.security.temporary-exception.apple-events + + com.spotify.client + + com.apple.security.temporary-exception.files.home-relative-path.read-write + + /Library/Logs/SonyBridge/ + + + +``` + +Dans `Client/macos/info.plist`, après la valeur de `NSBluetoothAlwaysUsageDescription` : + +```xml + NSAppleEventsUsageDescription + SonyBridge shows and controls the music playing in Spotify. +``` + +Ajouter à la fin de `Client/macos/en.lproj/InfoPlist.strings` : + +``` +"NSAppleEventsUsageDescription" = "SonyBridge shows and controls the music playing in Spotify."; +``` + +Ajouter à la fin de `Client/macos/fr.lproj/InfoPlist.strings` : + +``` +"NSAppleEventsUsageDescription" = "SonyBridge affiche et contrôle la musique en cours dans Spotify."; +``` + +- [ ] **Step 9 : Traduction** — dans `Client/macos/fr.lproj/Localizable.strings`, après la ligne + `"Reconnect Automatically" = "Reconnexion automatique";` : + +``` +"Show Notch" = "Afficher l’encoche"; +``` + +- [ ] **Step 10 : Tests et build** + +Run : `make test && make` +Attendu : toutes les suites passent, `Localization: 55 keys, all translated`, build `OK` sans avertissement. +Vérifier aussi les droits signés : `codesign -d --entitlements - build/SonyBridge.app` doit lister +`com.apple.security.network.client` et `com.apple.security.temporary-exception.apple-events`. + +- [ ] **Step 11 : Vérification avec l'utilisateur** (l'agent lance `make run`, l'utilisateur regarde) + +Lancer : `make run`. Suivre le journal : `tail -f ~/Library/Logs/SonyBridge/app.log | grep spotify`. +Demander à l'utilisateur, Spotify ouvert et en lecture avant le lancement : +1. macOS demande si « SonyBridge » peut contrôler « Spotify » → Autoriser. Attendu dans le journal : + `[spotify] playing spotify:track:… vol NN`. +2. Pause dans Spotify → `[spotify] paused spotify:track:…`. Morceau suivant → nouvel identifiant. +3. Quitter Spotify → `[spotify] not running`. Rouvrir Spotify et lancer un morceau → `playing …`. + SonyBridge ne doit **jamais** rouvrir Spotify tout seul après l'avoir quitté. +4. Menu › Options de SonyBridge › décocher « Afficher l'encoche » → `[spotify] stopped`, puis plus aucune ligne + en changeant de morceau. Recocher → une ligne `playing …`. +5. (Facultatif, par l'utilisateur) refus : `tccutil reset AppleEvents com.semvis123.SonyHeadphonesClient`, + `make run`, cliquer « Ne pas autoriser » → `[spotify] permission denied`. Réautoriser ensuite dans Réglages + Système › Confidentialité et sécurité › Automatisation › SonyBridge › Spotify. + +Note : l'autorisation peut être redemandée après chaque `make` (signature ad hoc qui change, spec §9). + +- [ ] **Step 12 : Commit (par l'utilisateur)** + +```bash +git add Client/macos && git commit -m "feat(music): local Spotify source, music controller and Show Notch option" -m "Co-Authored-By: Claude Opus 5 " +``` + +--- + +### Task 4: Panneau de l'encoche — placement, états au repos, survol + +**Files:** +- Create: `Client/macos/Notch/NotchPanel.swift`, `Client/macos/Notch/NotchView.swift`, + `Client/macos/Notch/NotchController.swift` +- Modify: `Client/macos/AppDelegate.swift`, `Client/macos/fr.lproj/Localizable.strings` + +**Interfaces:** +- Consumes : `NotchGeometry`, `ScreenMetrics`, `NotchRestingState`, `NotchTab`, `NotchContent` (tâche 1) ; + `MusicController` (`status`, `nowPlaying`, `artwork`, `hasMusic`, `notchDidOpen()`, `notchDidClose()`) (tâche 3) ; + `AppSettings.showNotch` (tâche 3) ; existant : `HeadphonesModel` (`connectionState`, `connected`, `mode`). +- Produces : + - `final class NotchViewState: ObservableObject { @Published var isOpen: Bool; @Published var resting: NotchRestingState; @Published var tab: NotchTab; @Published var restingSize: CGSize; @Published var openSize: CGSize; @Published var notchHeight: CGFloat }` + - `struct NotchView: View { init(state:model:music:selectTab:) }` avec un `tabContent` que les tâches 5 et 6 complètent + - `struct ArtworkView: View { let image: NSImage?; let size: CGFloat; let cornerRadius: CGFloat }` (réutilisée en tâche 6) + - `final class NotchController { init(model: HeadphonesModel, music: MusicController, settings: AppSettings) }` + +- [ ] **Step 1 : Écrire `Client/macos/Notch/NotchPanel.swift`** + +```swift +import AppKit +import SwiftUI + +// Borderless transparent panel above the menu bar (spec §4.3). It never becomes key or main, so the frontmost +// app keeps the keyboard; clicks still reach its controls through NotchHostingView. +final class NotchPanel: NSPanel { + // A factory rather than a custom init: NSWindow subclasses that declare their own initializer must also + // deal with NSWindow's required/unavailable initializers. + static func make() -> NotchPanel { + let panel = NotchPanel(contentRect: .zero, styleMask: [.borderless, .nonactivatingPanel], + backing: .buffered, defer: false) + panel.isOpaque = false + panel.backgroundColor = .clear + panel.hasShadow = false + panel.isMovable = false + panel.hidesOnDeactivate = false + panel.level = NSWindow.Level(rawValue: NSWindow.Level.mainMenu.rawValue + 2) + panel.collectionBehavior = [.canJoinAllSpaces, .stationary, .fullScreenAuxiliary, .ignoresCycle] + return panel + } + + override var canBecomeKey: Bool { false } + override var canBecomeMain: Bool { false } +} + +// Reports the pointer entering or leaving the panel, whichever app is active. +final class NotchContainerView: NSView { + var onHoverChange: (() -> Void)? + + override func updateTrackingAreas() { + super.updateTrackingAreas() + trackingAreas.forEach { removeTrackingArea($0) } + addTrackingArea(NSTrackingArea(rect: .zero, options: [.mouseEnteredAndExited, .activeAlways, .inVisibleRect], + owner: self, userInfo: nil)) + } + + override func mouseEntered(with event: NSEvent) { onHoverChange?() } + override func mouseExited(with event: NSEvent) { onHoverChange?() } +} + +// The panel is never key: without this, the first click would only be swallowed by the window. +final class NotchHostingView: NSHostingView { + override func acceptsFirstMouse(for event: NSEvent?) -> Bool { true } +} +``` + +- [ ] **Step 2 : Écrire `Client/macos/Notch/NotchView.swift`** + +```swift +import AppKit +import SwiftUI + +// Written by NotchController, read by NotchView. +final class NotchViewState: ObservableObject { + @Published var isOpen = false + @Published var resting: NotchRestingState = .empty + @Published var tab: NotchTab = .music + @Published var restingSize: CGSize = .zero + @Published var openSize: CGSize = .zero + @Published var notchHeight: CGFloat = 32 +} + +// Square top (it merges with the notch), rounded bottom corners. +struct NotchShape: Shape { + var bottomRadius: CGFloat + + var animatableData: CGFloat { + get { bottomRadius } + set { bottomRadius = newValue } + } + + func path(in rect: CGRect) -> Path { + let radius = min(bottomRadius, rect.width / 2, rect.height) + var path = Path() + path.move(to: CGPoint(x: rect.minX, y: rect.minY)) + path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY)) + path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY - radius)) + path.addQuadCurve(to: CGPoint(x: rect.maxX - radius, y: rect.maxY), control: CGPoint(x: rect.maxX, y: rect.maxY)) + path.addLine(to: CGPoint(x: rect.minX + radius, y: rect.maxY)) + path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.maxY - radius), control: CGPoint(x: rect.minX, y: rect.maxY)) + path.closeSubpath() + return path + } +} + +// Root view of the notch panel (spec §4): the resting strip, or the open panel with its two tabs. The panel +// can be larger than the shape while it animates; the shape stays centred at the top. +struct NotchView: View { + @ObservedObject var state: NotchViewState + @ObservedObject var model: HeadphonesModel + @ObservedObject var music: MusicController + let selectTab: (NotchTab) -> Void + + var body: some View { + let size = state.isOpen ? state.openSize : state.restingSize + ZStack(alignment: .top) { + NotchShape(bottomRadius: state.isOpen ? 22 : 10).fill(Color.black) + if state.isOpen { + openContent + .padding(.top, state.notchHeight) + .transition(.opacity) + } else { + restingContent + .transition(.opacity) + } + } + .frame(width: size.width, height: size.height) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .environment(\.colorScheme, .dark) + } + + // MARK: - Resting (spec §4.1) + + private var restingContent: some View { + HStack(spacing: 0) { + leadingItem.frame(width: NotchGeometry.sideExtension) + Spacer(minLength: 0) + trailingItem.frame(width: NotchGeometry.sideExtension) + } + .frame(height: state.notchHeight) + } + + @ViewBuilder private var leadingItem: some View { + switch state.resting { + case .musicAndHeadphones, .musicOnly: + ArtworkView(image: music.artwork, size: 20, cornerRadius: 5) + case .headphonesOnly: + Image(systemName: "headphones").font(.system(size: 13)).foregroundColor(.white) + case .empty: + EmptyView() + } + } + + @ViewBuilder private var trailingItem: some View { + switch state.resting { + case .musicAndHeadphones, .headphonesOnly: + Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13)).foregroundColor(.white) + case .musicOnly: + LevelBars(animating: music.nowPlaying?.isPlaying == true) + case .empty: + EmptyView() + } + } + + private static func modeSymbol(_ mode: SHCAmbientMode) -> String { + switch mode { + case .noiseCanceling: return "headphones.circle.fill" + case .ambientSound: return "ear.and.waveform" + default: return "circle.slash" + } + } + + // MARK: - Open (spec §4.2) + + private var openContent: some View { + VStack(spacing: 10) { + tabBar + tabContent.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + } + .padding(.horizontal, 18) + .padding(.bottom, 14) + } + + private var tabBar: some View { + HStack(spacing: 18) { + tabButton(.music, title: tr("Music")) + tabButton(.headphones, title: tr("Headphones")) + } + .padding(.top, 6) + } + + private func tabButton(_ tab: NotchTab, title: String) -> some View { + let selected = state.tab == tab + return Button { selectTab(tab) } label: { + Text(title) + .font(.system(size: 12, weight: selected ? .semibold : .regular)) + .foregroundColor(selected ? .white : .gray) + .padding(.bottom, 3) + .overlay(alignment: .bottom) { + if selected { Rectangle().fill(Color.white).frame(height: 2) } + } + } + .buttonStyle(.plain) + } + + @ViewBuilder private var tabContent: some View { + switch state.tab { + case .music: Spacer() // Task 6: MusicTab + case .headphones: Spacer() // Task 5: HeadphonesTab + } + } +} + +// Album artwork, or a placeholder note while it loads (or for tracks without one). +struct ArtworkView: View { + let image: NSImage? + let size: CGFloat + let cornerRadius: CGFloat + + var body: some View { + Group { + if let image = image { + Image(nsImage: image).resizable().aspectRatio(contentMode: .fill) + } else { + ZStack { + Color(white: 0.2) + Image(systemName: "music.note").font(.system(size: size * 0.45)).foregroundColor(.gray) + } + } + } + .frame(width: size, height: size) + .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) + } +} + +// Four small bars, moving while music plays (resting state 2), frozen when paused. +struct LevelBars: View { + let animating: Bool + + var body: some View { + TimelineView(.animation(minimumInterval: 1.0 / 20, paused: !animating)) { context in + let time = context.date.timeIntervalSinceReferenceDate + HStack(alignment: .bottom, spacing: 2) { + ForEach(0..<4, id: \.self) { index in + Capsule() + .fill(Color.green) + .frame(width: 3, height: animating ? 4 + 10 * abs(sin(time * 3 + Double(index) * 1.3)) : 4) + } + } + .frame(height: 14, alignment: .bottom) + } + } +} +``` + +- [ ] **Step 3 : Écrire `Client/macos/Notch/NotchController.swift`** + +```swift +import AppKit +import Combine +import SwiftUI + +// Owns the notch panel (spec §4.3): picks the screen, places and resizes the panel, opens it on hover and +// follows the "Show Notch" option. +final class NotchController { + private static let shrinkDelay: TimeInterval = 0.35 // lets the closing animation end before the panel shrinks + + private let model: HeadphonesModel + private let music: MusicController + private let settings: AppSettings + private let state = NotchViewState() + private let panel = NotchPanel.make() + private var geometry: NotchGeometry? + private var lastChosenTab: NotchTab? + private var hoverTimer: Timer? + private var shrinkWork: DispatchWorkItem? + private var cancellables = Set() + + init(model: HeadphonesModel, music: MusicController, settings: AppSettings) { + self.model = model + self.music = music + self.settings = settings + + let container = NotchContainerView() + let host = NotchHostingView(rootView: NotchView(state: state, model: model, music: music, + selectTab: { [weak self] tab in self?.select(tab) })) + host.autoresizingMask = [.width, .height] + container.addSubview(host) + container.onHoverChange = { [weak self] in self?.scheduleHoverCheck() } + panel.contentView = container + + NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.relayout() } + .store(in: &cancellables) + // receive(on:) hops after @Published stored the new value, so the sinks read current state. + settings.$showNotch + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.relayout() } + .store(in: &cancellables) + model.$connectionState.combineLatest(music.$status, music.$nowPlaying) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.updateResting() } + .store(in: &cancellables) + } + + // MARK: - Placement + + private func relayout() { + guard settings.showNotch, let screen = Self.preferredScreen() else { + geometry = nil + if state.isOpen { + state.isOpen = false + music.notchDidClose() + } + shrinkWork?.cancel() + panel.orderOut(nil) + return + } + let geometry = NotchGeometry(screen: ScreenMetrics(screen)) + self.geometry = geometry + state.notchHeight = geometry.notch.height + state.openSize = geometry.open.size + if state.isOpen { panel.setFrame(geometry.open, display: true) } + updateResting() + } + + // The built-in notched screen if there is one, else the primary screen (the one with the menu bar). + private static func preferredScreen() -> NSScreen? { + NSScreen.screens.first { $0.safeAreaInsets.top > 0 } ?? NSScreen.screens.first + } + + private func updateResting() { + guard let geometry = geometry else { return } + let resting = NotchContent.restingState(hasMusic: music.hasMusic, headphonesConnected: model.connected) + let frame = geometry.restingFrame(for: resting) + if state.resting != resting || (frame != nil && state.restingSize != frame?.size) { + withAnimation(animation) { + state.resting = resting + if let frame = frame { state.restingSize = frame.size } + } + } + guard !state.isOpen else { return } // close() re-applies the resting frame + if let frame = frame { + setPanelFrame(frame) + panel.orderFrontRegardless() + } else { + hidePanel(after: panel.isVisible ? Self.shrinkDelay : 0) + } + } + + // Grows at once (the shape then animates inside the larger panel) or shrinks once the animation is over, + // so the transparent panel never blocks the menu bar longer than needed. + private func setPanelFrame(_ target: CGRect) { + shrinkWork?.cancel() + let current = panel.frame + if !panel.isVisible || (target.width >= current.width && target.height >= current.height) { + panel.setFrame(target, display: true) + } else { + let work = DispatchWorkItem { [weak self] in self?.panel.setFrame(target, display: true) } + shrinkWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + Self.shrinkDelay, execute: work) + } + } + + private func hidePanel(after delay: TimeInterval) { + shrinkWork?.cancel() + let work = DispatchWorkItem { [weak self] in self?.panel.orderOut(nil) } + shrinkWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: work) + } + + // MARK: - Hover + + // Enter/exit events only schedule a check; the check reads the real pointer position, so a missed event + // can't leave the notch stuck open or closed. + private func scheduleHoverCheck() { + hoverTimer?.invalidate() + let inside = hoverZone.contains(NSEvent.mouseLocation) + let delay = inside ? NotchContent.openDelay : NotchContent.closeDelay + let timer = Timer(timeInterval: delay, repeats: false) { [weak self] _ in self?.hoverCheck() } + RunLoop.main.add(timer, forMode: .common) + hoverTimer = timer + } + + private func hoverCheck() { + let inside = panel.isVisible && hoverZone.contains(NSEvent.mouseLocation) + if inside && !state.isOpen { + open() + } else if !inside && state.isOpen { + close() + } + } + + private var hoverZone: CGRect { + guard let geometry = geometry else { return .zero } + return state.isOpen ? geometry.open : (geometry.restingFrame(for: state.resting) ?? .zero) + } + + private func open() { + guard let geometry = geometry else { return } + state.tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) + setPanelFrame(geometry.open) + panel.orderFrontRegardless() + withAnimation(animation) { state.isOpen = true } + music.notchDidOpen() + } + + private func close() { + withAnimation(animation) { state.isOpen = false } + music.notchDidClose() + updateResting() + } + + private func select(_ tab: NotchTab) { + lastChosenTab = tab + state.tab = tab + } + + // Spring, or a short fade-like ease when "Reduce motion" is on. + private var animation: Animation { + NSWorkspace.shared.accessibilityDisplayShouldReduceMotion + ? .easeInOut(duration: 0.15) + : .spring(response: 0.35, dampingFraction: 0.82) + } +} + +private extension ScreenMetrics { + init(_ screen: NSScreen) { + self.init(frame: screen.frame, + safeAreaTop: screen.safeAreaInsets.top, + auxiliaryTopLeft: screen.auxiliaryTopLeftArea, + auxiliaryTopRight: screen.auxiliaryTopRightArea, + menuBarHeight: screen.frame.maxY - screen.visibleFrame.maxY) + } +} +``` + +Si le SDK déclare `auxiliaryTopLeftArea` / `auxiliaryTopRightArea` comme `NSRect` non optionnel, passer +`screen.auxiliaryTopLeftArea.isEmpty ? nil : screen.auxiliaryTopLeftArea` (idem à droite). + +- [ ] **Step 4 : Créer le contrôleur** — dans `Client/macos/AppDelegate.swift`, après + `private var statusItemController: StatusItemController?` : + +```swift + private var notchController: NotchController? +``` + +et après `statusItemController = StatusItemController(model: model, settings: settings)` : + +```swift + notchController = NotchController(model: model, music: music, settings: settings) +``` + +- [ ] **Step 5 : Traductions** — ajouter à la fin de `Client/macos/fr.lproj/Localizable.strings` : + +``` + +/* Notch (Notch/*.swift) */ +"Music" = "Musique"; +"Headphones" = "Casque"; +``` + +- [ ] **Step 6 : Tests et build** + +Run : `make test && make` +Attendu : toutes les suites passent, `Localization: 57 keys, all translated`, build `OK` sans avertissement. + +- [ ] **Step 7 : Vérification avec l'utilisateur** (l'agent lance `make run`) + +Demander à l'utilisateur de regarder : +1. Casque connecté, Spotify fermé → autour de l'encoche : icône casque à gauche, icône du mode à droite (état 3). +2. Spotify en lecture → pochette à gauche, mode à droite (état 1). +3. Menu › Déconnecter → pochette + petites barres vertes qui bougent ; pause dans Spotify → barres figées (état 2). +4. Spotify quitté et casque déconnecté → encoche nue ; le survol l'ouvre quand même (état 4). +5. Survol : ouverture après un court instant, fermeture en sortant, pas de clignotement en passant vite + par-dessus ; pendant que l'encoche est ouverte, taper dans une autre app (TextEdit) : le texte va bien à + cette app. +6. Onglets : cliquer « Casque » / « Musique » ; le contenu est vide pour l'instant (normal, tâches 5 et 6) ; + après un choix, la réouverture revient sur le dernier onglet. +7. Barre des menus : encoche fermée, les menus d'app et les icônes de la barre à côté de l'encoche restent + cliquables. +8. Écran externe (ou capot fermé) : pastille noire en haut au centre de l'écran principal ; dans l'état 4, + plus de pastille. Débrancher → l'encoche revient sur l'écran intégré. +9. Options › décocher « Afficher l'encoche » → elle disparaît ; recocher → elle revient. + +- [ ] **Step 8 : Commit (par l'utilisateur)** + +```bash +git add Client/macos && git commit -m "feat(notch): notch panel with resting states and hover to open" -m "Co-Authored-By: Claude Opus 5 " +``` + +--- + +### Task 5: Onglet Casque + +**Files:** +- Create: `Client/macos/Notch/HeadphonesTab.swift` +- Modify: `Client/macos/Notch/NotchView.swift` (`tabContent`), `Client/macos/fr.lproj/Localizable.strings` + +**Interfaces:** +- Consumes : `HeadphonesModel` (`connectionState`, `mode`, `ambientLevel`, `maxAmbientLevel`, `focusOnVoice`, + `setMode(_:)`, `setLevel(_:final:)`, `setFocusOnVoice(_:)`, `connect()`) ; `NotchView.tabContent` (tâche 4). +- Produces : `struct HeadphonesTab: View { init(model: HeadphonesModel) }` + +- [ ] **Step 1 : Écrire `Client/macos/Notch/HeadphonesTab.swift`** + +```swift +import AppKit +import SwiftUI + +// Notch tab: NC / Ambient / Off, ambient level and Focus on Voice (spec §4.2). It calls the same model methods +// as the menu, so the poll guard and the send throttle apply here too, and both stay in sync. +struct HeadphonesTab: View { + @ObservedObject var model: HeadphonesModel + + var body: some View { + switch model.connectionState { + case .connected: + controls + case .connecting: + Text(tr("Connecting…")).font(.system(size: 12)).foregroundColor(.gray).padding(.top, 16) + case .disconnected: + VStack(spacing: 10) { + Text(tr("Not connected")).font(.system(size: 12)).foregroundColor(.gray) + Button(tr("Connect…")) { + NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window + model.connect() + } + .controlSize(.small) + } + .padding(.top, 16) + } + } + + private var controls: some View { + let ambient = model.mode == .ambientSound + return VStack(spacing: 12) { + Picker("", selection: Binding(get: { model.mode }, set: { model.setMode($0) })) { + Text(tr("Noise Canceling")).tag(SHCAmbientMode.noiseCanceling) + Text(tr("Ambient Sound")).tag(SHCAmbientMode.ambientSound) + Text(tr("Off")).tag(SHCAmbientMode.off) + } + .pickerStyle(.segmented) + .labelsHidden() + + HStack(spacing: 8) { + Text(tr("Level")).font(.system(size: 12)) + Slider( + value: Binding(get: { Double(model.ambientLevel) }, + set: { model.setLevel(Int($0.rounded()), final: false) }), + in: 1...Double(max(model.maxAmbientLevel, 2)), + step: 1, + onEditingChanged: { editing in + if !editing { model.setLevel(model.ambientLevel, final: true) } + } + ) + .controlSize(.small) + Text(verbatim: "\(model.ambientLevel)") + .font(.system(size: 11, weight: .medium).monospacedDigit()) + .foregroundColor(.gray) + .frame(width: 20, alignment: .trailing) + } + .disabled(!ambient) + .opacity(ambient ? 1 : 0.4) + + HStack { + Text(tr("Focus on Voice")).font(.system(size: 12)) + Spacer() + Toggle("", isOn: Binding(get: { model.focusOnVoice }, set: { model.setFocusOnVoice($0) })) + .labelsHidden() + .toggleStyle(.switch) + .controlSize(.mini) + } + .disabled(!ambient) + .opacity(ambient ? 1 : 0.4) + } + } +} +``` + +- [ ] **Step 2 : Brancher l'onglet** — dans `Client/macos/Notch/NotchView.swift`, `tabContent`, remplacer la ligne + `case .headphones: Spacer() // Task 5: HeadphonesTab` par : + +```swift + case .headphones: HeadphonesTab(model: model) +``` + +- [ ] **Step 3 : Traduction** — ajouter à la fin de `Client/macos/fr.lproj/Localizable.strings` : + +``` +"Level" = "Niveau"; +``` + +- [ ] **Step 4 : Tests et build** + +Run : `make test && make` +Attendu : toutes les suites passent, `Localization: 58 keys, all translated`, build `OK` sans avertissement. + +- [ ] **Step 5 : Vérification avec l'utilisateur, sur le WH-1000XM6** (l'agent lance `make run DEBUG=1`) + +1. Onglet Casque, casque connecté : choisir Réduction de bruit / Son ambiant / Désactivé → le casque change ; le + menu (coche) et l'icône de la barre suivent. +2. Bouton NC du casque → l'encoche suit en ~2 s (ouverte ou non). +3. En Son ambiant : glisser le niveau → le casque suit sans à-coups ; « Focalisation sur la voix » bascule. + Hors Son ambiant, curseur et interrupteur sont grisés. +4. Menu › Déconnecter → l'onglet affiche « Non connecté » et « Connecter… » ; le bouton reconnecte le casque. +5. Le journal (`build/app.log`) ne montre que des trames déjà connues (`68 17`/`68 19` NC/ASM), toutes acquittées. + +- [ ] **Step 6 : Commit (par l'utilisateur)** + +```bash +git add Client/macos && git commit -m "feat(notch): headphones tab" -m "Co-Authored-By: Claude Opus 5 " +``` + +--- + +### Task 6: Onglet Musique + README + vérification finale + +**Files:** +- Create: `Client/macos/Notch/MusicTab.swift` +- Modify: `Client/macos/Notch/NotchView.swift` (`tabContent`), `Client/macos/fr.lproj/Localizable.strings`, + `README.md` + +**Interfaces:** +- Consumes : `MusicController` (`status`, `nowPlaying`, `artwork`, `playPause()`, `next()`, `previous()`, + `seek(to:final:)`, `setVolume(_:final:)`, `launchPlayer()`, `openAutomationSettings()`) (tâche 3) ; + `NowPlaying`, `PlaybackClock` (tâche 2) ; `ArtworkView`, `NotchView.tabContent` (tâche 4). +- Produces : `struct MusicTab: View { init(music: MusicController) }` + +- [ ] **Step 1 : Écrire `Client/macos/Notch/MusicTab.swift`** + +```swift +import SwiftUI + +// Notch tab: the track, its controls, Spotify's volume and the device it plays on (spec §4.2). +struct MusicTab: View { + @ObservedObject var music: MusicController + @State private var seekValue: Double? // while dragging the progress bar + @State private var volumeValue: Double? // while dragging the volume slider + + // Explicit: the private @State properties would otherwise make the memberwise init private. + init(music: MusicController) { + _music = ObservedObject(wrappedValue: music) + } + + var body: some View { + switch music.status { + case .notRunning: + message(tr("Spotify isn't open"), button: tr("Open Spotify")) { music.launchPlayer() } + case .permissionDenied: + message(tr("SonyBridge isn't allowed to control Spotify."), button: tr("Open Settings")) { + music.openAutomationSettings() + } + case .ready: + if let track = music.nowPlaying { + player(track) + } else { + message(tr("Nothing playing"), button: nil) {} + } + } + } + + private func message(_ text: String, button: String?, action: @escaping () -> Void) -> some View { + VStack(spacing: 10) { + Text(text).font(.system(size: 12)).foregroundColor(.gray).multilineTextAlignment(.center) + if let button = button { + Button(button, action: action).controlSize(.small) + } + } + .frame(maxWidth: .infinity) + .padding(.top, 16) + } + + private func player(_ track: NowPlaying) -> some View { + VStack(spacing: 8) { + HStack(spacing: 12) { + ArtworkView(image: music.artwork, size: 56, cornerRadius: 9) + VStack(alignment: .leading, spacing: 2) { + Text(track.title).font(.system(size: 13, weight: .semibold)).lineLimit(1) + Text(track.artist).font(.system(size: 11)).foregroundColor(.gray).lineLimit(1) + progress(track) + } + } + HStack(spacing: 28) { + controlButton("backward.fill", label: tr("Previous track")) { music.previous() } + controlButton(track.isPlaying ? "pause.fill" : "play.fill", size: 18, label: tr("Play or pause")) { + music.playPause() + } + controlButton("forward.fill", label: tr("Next track")) { music.next() } + } + HStack(spacing: 6) { + Image(systemName: "speaker.fill").font(.system(size: 9)).foregroundColor(.gray) + volumeSlider(track).frame(width: 110) + Image(systemName: "speaker.wave.3.fill").font(.system(size: 9)).foregroundColor(.gray) + Spacer() + Image(systemName: "hifispeaker").font(.system(size: 10)).foregroundColor(.green) + Text(track.deviceName ?? tr("This Mac")).font(.system(size: 10)).foregroundColor(.green).lineLimit(1) + } + } + } + + // Redrawn once a second, only while the notch is open (this view only exists then). + private func progress(_ track: NowPlaying) -> some View { + TimelineView(.periodic(from: .now, by: 1)) { context in + let position = seekValue ?? PlaybackClock.position(of: track, at: context.date) + VStack(spacing: 1) { + Slider( + value: Binding(get: { position }, set: { value in + seekValue = value + music.seek(to: value, final: false) + }), + in: 0...max(track.duration, 1), + onEditingChanged: { editing in + if !editing, let value = seekValue { + music.seek(to: value, final: true) + seekValue = nil + } + } + ) + .controlSize(.mini) + .disabled(!track.capabilities.canSeek || track.duration <= 0) + HStack { + Text(verbatim: PlaybackClock.format(position)) + Spacer() + Text(verbatim: "−" + PlaybackClock.format(max(0, track.duration - position))) + } + .font(.system(size: 9).monospacedDigit()) + .foregroundColor(.gray) + } + } + } + + private func volumeSlider(_ track: NowPlaying) -> some View { + Slider( + value: Binding(get: { volumeValue ?? Double(track.volume ?? 0) }, set: { value in + volumeValue = value + music.setVolume(Int(value.rounded()), final: false) + }), + in: 0...100, + onEditingChanged: { editing in + if !editing, let value = volumeValue { + music.setVolume(Int(value.rounded()), final: true) + volumeValue = nil + } + } + ) + .controlSize(.mini) + .disabled(!track.capabilities.canSetVolume || track.volume == nil) + } + + private func controlButton(_ symbol: String, size: CGFloat = 14, label: String, + action: @escaping () -> Void) -> some View { + Button(action: action) { + Image(systemName: symbol) + .font(.system(size: size)) + .foregroundColor(.white) + .frame(width: 28, height: 24) + } + .buttonStyle(.plain) + .accessibilityLabel(label) + } +} +``` + +- [ ] **Step 2 : Brancher l'onglet** — dans `Client/macos/Notch/NotchView.swift`, `tabContent`, remplacer la ligne + `case .music: Spacer() // Task 6: MusicTab` par : + +```swift + case .music: MusicTab(music: music) +``` + +- [ ] **Step 3 : Traductions** — ajouter à la fin de `Client/macos/fr.lproj/Localizable.strings` : + +``` +"Spotify isn't open" = "Spotify n’est pas ouvert"; +"Open Spotify" = "Ouvrir Spotify"; +"SonyBridge isn't allowed to control Spotify." = "SonyBridge n’a pas l’autorisation de contrôler Spotify."; +"Open Settings" = "Ouvrir les réglages"; +"Nothing playing" = "Rien en cours de lecture"; +"This Mac" = "Ce Mac"; +"Previous track" = "Morceau précédent"; +"Play or pause" = "Lecture ou pause"; +"Next track" = "Morceau suivant"; +``` + +- [ ] **Step 4 : README** — dans `README.md` : + +Après le bloc **Sound modes** (après la ligne « 🔄 **Live button sync** … »), insérer : + +```markdown + +**Notch** +- 🏝️ **Notch panel** — hover the MacBook notch (or a black pill at the top of screens without one) to control the music playing in **Spotify** (artwork, play/pause, previous/next, seek, volume) and switch Noise Cancelling / Ambient Sound / Off. Turn it off with **Show Notch** under **SonyBridge Options** +``` + +Après le paragraphe « 💡 On first launch, macOS asks for **Bluetooth permission** … », insérer : + +```markdown +> +> 🎵 With the notch on, macOS also asks whether SonyBridge may **control Spotify** — allow it to see and +> control your music from the notch (Spotify's own desktop app, no account needed). +``` + +Dans **Usage**, remplacer la ligne « - turn **Launch at Login**, **Connect Automatically**, and **Reconnect +Automatically** on or off under **SonyBridge Options**; » par : + +```markdown +- hover the **notch** to control Spotify and switch sound modes without opening the menu; +- turn **Launch at Login**, **Connect Automatically**, **Reconnect Automatically**, and **Show Notch** on or off under **SonyBridge Options**; +``` + +- [ ] **Step 5 : Tests, build et build de release** + +Run : `make test && make && make release` +Attendu : toutes les suites passent, `Localization: 67 keys, all translated`, les deux builds `OK` sans +avertissement ; `lipo -archs build/SonyBridge.app/Contents/MacOS/SonyBridge` → `x86_64 arm64`. + +- [ ] **Step 6 : Vérification finale avec l'utilisateur** (spec §8, l'agent lance `make run DEBUG=1`) + +1. Survol : ouverture, fermeture, pas de clignotement ; l'app active garde le clavier. +2. Les 4 états au repos. +3. Onglet Casque : changer de mode → le casque change, le menu et l'icône suivent ; bouton NC du casque → + l'encoche suit. +4. Onglet Musique : lecture/pause, précédent, suivant, glisser la position (le temps affiché suit, Spotify saute + au bon endroit), volume (Spotify suit) ; changer de morceau dans Spotify → l'encoche suit (titre, pochette). +5. Autorisation Spotify ; refus → message + « Ouvrir les réglages » (ouvre Automatisation). +6. Spotify fermé → « Spotify n'est pas ouvert » + « Ouvrir Spotify » ; SonyBridge ne relance jamais Spotify tout seul. +7. Écran externe, capot fermé, rebranchement : l'encoche se replace. +8. « Afficher l'encoche » décochée → plus d'encoche et plus de ligne `[spotify]` dans le journal ; recochée → elle revient. + +- [ ] **Step 7 : Commit (par l'utilisateur)** + +```bash +git add Client/macos README.md && git commit -m "feat(notch): music tab and README" -m "Co-Authored-By: Claude Opus 5 " +``` diff --git a/docs/superpowers/specs/2026-09-11-notch-design.md b/docs/superpowers/specs/2026-09-11-notch-design.md index ce92ed38..54cea139 100644 --- a/docs/superpowers/specs/2026-09-11-notch-design.md +++ b/docs/superpowers/specs/2026-09-11-notch-design.md @@ -84,7 +84,7 @@ Le survol ouvre l'encoche dans tous les états où elle est visible, y compris l ╰──────────────────────────────────╯ ``` -- Taille ouverte fixe (environ 360 × 160 pt, à ajuster à la vérification visuelle), la même pour les deux +- Taille ouverte fixe (environ 380 × 190 pt, encoche comprise, à ajuster à la vérification visuelle), la même pour les deux onglets : pas de saut de taille en changeant d'onglet. - Coins inférieurs arrondis ; le haut se confond avec l'encoche. - **Casque non connecté** : « Non connecté » + bouton « Connecter », qui appelle `HeadphonesModel.connect()` From 5840cefbcbca302668bc4a660821d0b937bb6091 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 11 Sep 2026 15:43:08 +0200 Subject: [PATCH 21/50] feat(notch): notch geometry and resting-state logic Co-Authored-By: Claude Opus 5 --- Client/macos/Notch/NotchContent.swift | 32 ++++++++++++++ Client/macos/Notch/NotchGeometry.swift | 58 ++++++++++++++++++++++++++ Client/tests/LogicTests/main.swift | 46 ++++++++++++++++++++ scripts/build.sh | 2 +- scripts/test.sh | 1 + 5 files changed, 138 insertions(+), 1 deletion(-) create mode 100644 Client/macos/Notch/NotchContent.swift create mode 100644 Client/macos/Notch/NotchGeometry.swift diff --git a/Client/macos/Notch/NotchContent.swift b/Client/macos/Notch/NotchContent.swift new file mode 100644 index 00000000..6ee7e60d --- /dev/null +++ b/Client/macos/Notch/NotchContent.swift @@ -0,0 +1,32 @@ +import Foundation + +// What the notch shows while resting (spec §4.1) and which tab it opens on. Pure logic, tested in LogicTests. +enum NotchRestingState: Equatable { + case musicAndHeadphones // 1: artwork left, headphones mode right + case musicOnly // 2: artwork left, level bars right + case headphonesOnly // 3: headphones glyph left, mode right + case empty // 4: bare notch (hidden on a screen without a notch) +} + +enum NotchTab: Equatable { + case music, headphones +} + +enum NotchContent { + static let openDelay: TimeInterval = 0.15 // hover time before opening + static let closeDelay: TimeInterval = 0.4 // time after the pointer leaves before closing + + static func restingState(hasMusic: Bool, headphonesConnected: Bool) -> NotchRestingState { + switch (hasMusic, headphonesConnected) { + case (true, true): return .musicAndHeadphones + case (true, false): return .musicOnly + case (false, true): return .headphonesOnly + case (false, false): return .empty + } + } + + // The first opening of the session follows the music; afterwards the last tab the user picked wins. + static func tabOnOpen(lastChosen: NotchTab?, hasMusic: Bool) -> NotchTab { + lastChosen ?? (hasMusic ? .music : .headphones) + } +} diff --git a/Client/macos/Notch/NotchGeometry.swift b/Client/macos/Notch/NotchGeometry.swift new file mode 100644 index 00000000..baa4802f --- /dev/null +++ b/Client/macos/Notch/NotchGeometry.swift @@ -0,0 +1,58 @@ +import CoreGraphics + +// The NSScreen values NotchGeometry needs, copied out so this file stays AppKit-free (tested in LogicTests). +// Rects are in global screen coordinates (origin at the bottom-left of the primary screen). +struct ScreenMetrics: Equatable { + var frame: CGRect + var safeAreaTop: CGFloat // NSScreen.safeAreaInsets.top (0 without a notch) + var auxiliaryTopLeft: CGRect? // NSScreen.auxiliaryTopLeftArea (nil without a notch) + var auxiliaryTopRight: CGRect? // NSScreen.auxiliaryTopRightArea + var menuBarHeight: CGFloat // frame.maxY - visibleFrame.maxY (0 when the menu bar auto-hides) +} + +// Where the notch panel goes (spec §4): the real notch, or a simulated pill centred at the top of a screen +// without one. Every rect shares the notch's horizontal centre and touches the top edge of the screen. +struct NotchGeometry: Equatable { + static let sideExtension: CGFloat = 36 // resting widening on each side (states 1-3) + static let simulatedWidth: CGFloat = 190 // pill width on a screen without a notch + static let fallbackMenuBarHeight: CGFloat = 24 // pill height when the menu bar auto-hides + static let openSize = CGSize(width: 380, height: 190) + + let hasNotch: Bool + let notch: CGRect + + init(screen: ScreenMetrics) { + let top = screen.frame.maxY + if screen.safeAreaTop > 0, let left = screen.auxiliaryTopLeft, let right = screen.auxiliaryTopRight, + screen.frame.width - left.width - right.width > 0 { + // Only the widths of the auxiliary areas are used, so their coordinate space doesn't matter. + hasNotch = true + notch = CGRect(x: screen.frame.minX + left.width, y: top - screen.safeAreaTop, + width: screen.frame.width - left.width - right.width, height: screen.safeAreaTop) + } else { + hasNotch = false + let height = screen.menuBarHeight > 0 ? screen.menuBarHeight : Self.fallbackMenuBarHeight + notch = CGRect(x: screen.frame.midX - Self.simulatedWidth / 2, y: top - height, + width: Self.simulatedWidth, height: height) + } + } + + // The notch widened on both sides, to hold the resting artwork / mode icons. + var extended: CGRect { + notch.insetBy(dx: -Self.sideExtension, dy: 0) + } + + var open: CGRect { + let width = max(Self.openSize.width, extended.width) + let height = max(Self.openSize.height, notch.height) + return CGRect(x: notch.midX - width / 2, y: notch.maxY - height, width: width, height: height) + } + + // Panel frame while resting; nil = hidden (nothing to show on a screen without a notch). + func restingFrame(for state: NotchRestingState) -> CGRect? { + switch state { + case .empty: return hasNotch ? notch : nil + default: return extended + } + } +} diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 993b34c5..6c86bc50 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -1,4 +1,5 @@ import Foundation +import CoreGraphics // Minimal test runner (XCTest isn't available without Xcode). Exit code 1 on any failure. var failures = 0 @@ -39,6 +40,51 @@ do { check(throttle.shouldSend(at: t0.addingTimeInterval(0.17), final: true), "final value always sends") } +// NotchGeometry: a 14" MacBook Pro screen (1512 × 982 pt, notch 188 pt wide, 32 pt high). +do { + let screen = ScreenMetrics(frame: CGRect(x: 0, y: 0, width: 1512, height: 982), safeAreaTop: 32, + auxiliaryTopLeft: CGRect(x: 0, y: 950, width: 662, height: 32), + auxiliaryTopRight: CGRect(x: 850, y: 950, width: 662, height: 32), + menuBarHeight: 32) + let geometry = NotchGeometry(screen: screen) + check(geometry.hasNotch, "notched screen detected") + check(geometry.notch == CGRect(x: 662, y: 950, width: 188, height: 32), "notch rect was \(geometry.notch)") + check(geometry.extended == CGRect(x: 626, y: 950, width: 260, height: 32), "extended rect was \(geometry.extended)") + check(geometry.open == CGRect(x: 566, y: 792, width: 380, height: 190), "open rect was \(geometry.open)") + check(geometry.restingFrame(for: .empty) == geometry.notch, "empty state: bare notch") + check(geometry.restingFrame(for: .musicOnly) == geometry.extended, "music: extended notch") +} + +// NotchGeometry: an external screen without a notch, right of the primary screen. +do { + let frame = CGRect(x: 1512, y: 0, width: 2560, height: 1440) + let geometry = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 0, auxiliaryTopLeft: nil, + auxiliaryTopRight: nil, menuBarHeight: 25)) + check(!geometry.hasNotch, "no notch") + check(geometry.notch == CGRect(x: 2697, y: 1415, width: 190, height: 25), "simulated pill was \(geometry.notch)") + check(geometry.restingFrame(for: .empty) == nil, "empty state hides the pill") + check(geometry.restingFrame(for: .headphonesOnly) == geometry.extended, "headphones: extended pill") + + let autoHidden = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 0, auxiliaryTopLeft: nil, + auxiliaryTopRight: nil, menuBarHeight: 0)) + check(autoHidden.notch.height == 24, "auto-hidden menu bar: fallback pill height") + let partial = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 32, auxiliaryTopLeft: nil, + auxiliaryTopRight: nil, menuBarHeight: 32)) + check(!partial.hasNotch, "safe area without auxiliary areas: no notch") +} + +// NotchContent: resting state (spec §4.1), tab on opening, hover delays. +do { + check(NotchContent.restingState(hasMusic: true, headphonesConnected: true) == .musicAndHeadphones, "state 1") + check(NotchContent.restingState(hasMusic: true, headphonesConnected: false) == .musicOnly, "state 2") + check(NotchContent.restingState(hasMusic: false, headphonesConnected: true) == .headphonesOnly, "state 3") + check(NotchContent.restingState(hasMusic: false, headphonesConnected: false) == .empty, "state 4") + check(NotchContent.tabOnOpen(lastChosen: nil, hasMusic: true) == .music, "first open with music: Music") + check(NotchContent.tabOnOpen(lastChosen: nil, hasMusic: false) == .headphones, "first open without music: Headphones") + check(NotchContent.tabOnOpen(lastChosen: .headphones, hasMusic: true) == .headphones, "then the last chosen tab") + check(NotchContent.openDelay == 0.15 && NotchContent.closeDelay == 0.4, "hover delays") +} + if failures > 0 { print("LogicTests: \(failures) failure(s)") exit(1) diff --git a/scripts/build.sh b/scripts/build.sh index ad37a600..1908714f 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -20,7 +20,7 @@ if [ "$CONFIG" = release ]; then SWIFT_OPT="-O"; CXX_OPT="-O2"; else SWIFT_OPT=" SWIFT_DEFINES=""; CXX_DEFINES="" if [ "${DEBUG_PROTOCOL:-0}" = 1 ]; then SWIFT_DEFINES="-D DEBUG_PROTOCOL"; CXX_DEFINES="-DSHC_DEBUG_PROTOCOL"; fi -SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift) +SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift "$MAC"/Notch/*.swift "$MAC"/Music/*.swift) CXX_SOURCES=("$CORE"/*.cpp) OBJCXX_SOURCES=("$MAC"/*.mm) diff --git a/scripts/test.sh b/scripts/test.sh index 22d92079..1037f618 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -13,6 +13,7 @@ echo "== LogicTests" swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$ROOT/Client/tests/LogicTests/main.swift" \ "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ + "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" \ -o "$OUT/LogicTests" "$OUT/LogicTests" From 2d07accf6ef0ac0bdcb91c9974862b4a7252b728 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 10:20:39 +0200 Subject: [PATCH 22/50] feat(music): pure playback logic (now playing, clock, Spotify parsing) --- Client/macos/Music/NowPlaying.swift | 25 +++++++ Client/macos/Music/PlaybackClock.swift | 20 ++++++ Client/macos/Music/SpotifyPlaybackInfo.swift | 59 +++++++++++++++ Client/tests/LogicTests/main.swift | 76 ++++++++++++++++++++ scripts/test.sh | 1 + 5 files changed, 181 insertions(+) create mode 100644 Client/macos/Music/NowPlaying.swift create mode 100644 Client/macos/Music/PlaybackClock.swift create mode 100644 Client/macos/Music/SpotifyPlaybackInfo.swift diff --git a/Client/macos/Music/NowPlaying.swift b/Client/macos/Music/NowPlaying.swift new file mode 100644 index 00000000..02beb0fa --- /dev/null +++ b/Client/macos/Music/NowPlaying.swift @@ -0,0 +1,25 @@ +import Foundation + +// What a music source can do with the current track (the Web source of step 2 depends on the device). +struct MusicCapabilities: Equatable { + var canSeek: Bool + var canSetVolume: Bool + var canChangeDevice: Bool +} + +// The track a music source is playing (or paused on). `position` was true at `positionDate`; PlaybackClock +// derives the live position from it, so nothing polls while a track plays. +struct NowPlaying: Equatable { + var trackID: String + var title: String + var artist: String + var album: String + var artworkURL: URL? + var duration: TimeInterval // seconds; 0 when unknown + var position: TimeInterval // seconds, at positionDate + var positionDate: Date + var isPlaying: Bool + var volume: Int? // 0...100; nil until known + var deviceName: String? // nil = this Mac + var capabilities: MusicCapabilities +} diff --git a/Client/macos/Music/PlaybackClock.swift b/Client/macos/Music/PlaybackClock.swift new file mode 100644 index 00000000..b06e3e7d --- /dev/null +++ b/Client/macos/Music/PlaybackClock.swift @@ -0,0 +1,20 @@ +import Foundation + +// Live playback position and its display, from the last known position (spec §6.1). +enum PlaybackClock { + static func position(of track: NowPlaying, at date: Date) -> TimeInterval { + var position = track.position + if track.isPlaying { position += date.timeIntervalSince(track.positionDate) } + if track.duration > 0 { position = min(position, track.duration) } + return max(0, position) + } + + // "1:05", "12:34", "1:02:03". + static func format(_ seconds: TimeInterval) -> String { + let total = max(0, Int(seconds.rounded(.down))) + let hours = total / 3600, minutes = total / 60 % 60, secs = total % 60 + return hours > 0 + ? String(format: "%d:%02d:%02d", hours, minutes, secs) + : String(format: "%d:%02d", minutes, secs) + } +} diff --git a/Client/macos/Music/SpotifyPlaybackInfo.swift b/Client/macos/Music/SpotifyPlaybackInfo.swift new file mode 100644 index 00000000..3f3fde01 --- /dev/null +++ b/Client/macos/Music/SpotifyPlaybackInfo.swift @@ -0,0 +1,59 @@ +import Foundation + +// Result of decoding what the local Spotify app reports. +enum SpotifyState: Equatable { + case stopped // Spotify is open with nothing loaded + case track(NowPlaying) + case incomplete // not enough information: read the state through Apple Events instead +} + +// Decodes the local Spotify app's signal and Apple Events replies (spec §6.1). Pure, tested in LogicTests. +enum SpotifyPlaybackInfo { + static let localCapabilities = MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false) + static let fieldSeparator: Character = "\u{1F}" + + // com.spotify.client.PlaybackStateChanged userInfo: "Player State" (Playing / Paused / Stopped), "Track ID", + // "Name", "Artist", "Album", "Duration" (ms), "Playback Position" (s). It never carries artwork or volume. + static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> SpotifyState { + guard let info = userInfo, let state = info["Player State"] as? String else { return .incomplete } + if state == "Stopped" { return .stopped } + guard state == "Playing" || state == "Paused", + let trackID = info["Track ID"] as? String, !trackID.isEmpty else { return .incomplete } + return .track(NowPlaying( + trackID: trackID, + title: info["Name"] as? String ?? "", + artist: info["Artist"] as? String ?? "", + album: info["Album"] as? String ?? "", + artworkURL: nil, + duration: ((info["Duration"] as? NSNumber)?.doubleValue ?? 0) / 1000, + position: (info["Playback Position"] as? NSNumber)?.doubleValue ?? 0, + positionDate: date, + isPlaying: state == "Playing", + volume: nil, + deviceName: nil, + capabilities: localCapabilities)) + } + + // SpotifyScript.readState's reply: "stopped", or 9 fields separated by U+001F — state, track id, name, + // artist, album, duration (ms), position (ms), artwork URL, volume. + static func parse(scriptResult text: String, at date: Date) -> SpotifyState { + if text == "stopped" { return .stopped } + let fields = text.split(separator: fieldSeparator, omittingEmptySubsequences: false).map(String.init) + guard fields.count == 9, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { + return .incomplete + } + return .track(NowPlaying( + trackID: fields[1], + title: fields[2], + artist: fields[3], + album: fields[4], + artworkURL: URL(string: fields[7]), + duration: (Double(fields[5]) ?? 0) / 1000, + position: (Double(fields[6]) ?? 0) / 1000, + positionDate: date, + isPlaying: fields[0] == "playing", + volume: Int(fields[8]).map { min(100, max(0, $0)) }, + deviceName: nil, + capabilities: localCapabilities)) + } +} diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 6c86bc50..727d5131 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -85,6 +85,82 @@ do { check(NotchContent.openDelay == 0.15 && NotchContent.closeDelay == 0.4, "hover delays") } +// PlaybackClock: live position from the last known one; display format. +do { + let t0 = Date(timeIntervalSince1970: 1_000) + var track = NowPlaying(trackID: "spotify:track:1", title: "A", artist: "B", album: "C", artworkURL: nil, + duration: 200, position: 30, positionDate: t0, isPlaying: true, volume: 50, + deviceName: nil, + capabilities: MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false)) + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 42, "playing: advances") + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 200, "bounded by the duration") + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(-40)) == 0, "never negative") + track.isPlaying = false + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 30, "paused: frozen") + track.isPlaying = true + track.duration = 0 + check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 530, "unknown duration: not bounded") + let nextTrack = NowPlaying(trackID: "spotify:track:2", title: "D", artist: "E", album: "F", artworkURL: nil, + duration: 180, position: 0, positionDate: t0.addingTimeInterval(100), isPlaying: true, + volume: 50, deviceName: nil, capabilities: track.capabilities) + check(PlaybackClock.position(of: nextTrack, at: t0.addingTimeInterval(100)) == 0, "track change: starts from 0") + check(PlaybackClock.format(65) == "1:05", "format 1:05 was \(PlaybackClock.format(65))") + check(PlaybackClock.format(754.9) == "12:34", "format rounds down") + check(PlaybackClock.format(3723) == "1:02:03", "format with hours") + check(PlaybackClock.format(-3) == "0:00", "format never negative") +} + +// SpotifyPlaybackInfo: the PlaybackStateChanged signal (spec §6.1). +do { + let t0 = Date(timeIntervalSince1970: 1_000) + let signal: [AnyHashable: Any] = [ + "Player State": "Playing", "Track ID": "spotify:track:42", "Name": "Midnight City", "Artist": "M83", + "Album": "Hurry Up, We're Dreaming", "Duration": NSNumber(value: 243_000), "Playback Position": NSNumber(value: 12.5), + ] + if case .track(let track) = SpotifyPlaybackInfo.parse(signal: signal, at: t0) { + check(track.trackID == "spotify:track:42" && track.title == "Midnight City" && track.artist == "M83", "signal: names") + check(track.duration == 243 && track.position == 12.5 && track.positionDate == t0 && track.isPlaying, "signal: timing") + check(track.artworkURL == nil && track.volume == nil && track.deviceName == nil, "signal: no artwork or volume, this Mac") + check(track.capabilities == SpotifyPlaybackInfo.localCapabilities, "signal: local capabilities") + } else { + check(false, "signal with full info decodes to a track") + } + var paused = signal + paused["Player State"] = "Paused" + paused["Playback Position"] = nil + if case .track(let track) = SpotifyPlaybackInfo.parse(signal: paused, at: t0) { + check(!track.isPlaying && track.position == 0, "paused, no position: 0") + } else { + check(false, "paused signal decodes to a track") + } + check(SpotifyPlaybackInfo.parse(signal: ["Player State": "Stopped"], at: t0) == .stopped, "signal: stopped") + check(SpotifyPlaybackInfo.parse(signal: nil, at: t0) == .incomplete, "signal without userInfo: incomplete") + check(SpotifyPlaybackInfo.parse(signal: ["Player State": "Playing"], at: t0) == .incomplete, "signal without track id: incomplete") +} + +// SpotifyPlaybackInfo: the text SpotifyScript.readState returns (fields separated by U+001F). +do { + let t0 = Date(timeIntervalSince1970: 1_000) + let sep = "\u{1F}" + let text = ["paused", "spotify:track:7", "Title", "Artist", "Album", "180000", "61500", + "https://i.scdn.co/image/ab", "70"].joined(separator: sep) + if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: text, at: t0) { + check(!track.isPlaying && track.duration == 180 && track.position == 61.5, "script: timing") + check(track.artworkURL == URL(string: "https://i.scdn.co/image/ab") && track.volume == 70, "script: artwork and volume") + check(track.title == "Title" && track.album == "Album" && track.positionDate == t0, "script: names") + } else { + check(false, "script result decodes to a track") + } + let local = ["playing", "spotify:local:x", "T", "", "", "1000", "0", "", "101"].joined(separator: sep) + if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: local, at: t0) { + check(track.artworkURL == nil && track.volume == 100 && track.artist.isEmpty, "script: empty fields, volume clamped") + } else { + check(false, "script result with empty fields decodes to a track") + } + check(SpotifyPlaybackInfo.parse(scriptResult: "stopped", at: t0) == .stopped, "script: stopped") + check(SpotifyPlaybackInfo.parse(scriptResult: "garbage", at: t0) == .incomplete, "script: malformed") +} + if failures > 0 { print("LogicTests: \(failures) failure(s)") exit(1) diff --git a/scripts/test.sh b/scripts/test.sh index 1037f618..580f7ab1 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -14,6 +14,7 @@ swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$ROOT/Client/tests/LogicTests/main.swift" \ "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" \ + "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ -o "$OUT/LogicTests" "$OUT/LogicTests" From eed95e273ab31d043135406620e5f2e6669c2a6a Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 10:26:25 +0200 Subject: [PATCH 23/50] feat(music): local Spotify source, music controller and Show Notch option --- Client/macos/AppDelegate.swift | 11 + Client/macos/AppSettings.swift | 10 +- Client/macos/HeadphonesMenu.swift | 5 +- Client/macos/Music/MusicController.swift | 149 +++++++++++++ Client/macos/Music/MusicSource.swift | 22 ++ Client/macos/Music/SpotifyLocalSource.swift | 206 ++++++++++++++++++ Client/macos/Music/SpotifyScript.swift | 44 ++++ .../macos/SonyHeadphonesClient.entitlements | 6 + Client/macos/en.lproj/InfoPlist.strings | 1 + Client/macos/fr.lproj/InfoPlist.strings | 1 + Client/macos/fr.lproj/Localizable.strings | 1 + Client/macos/info.plist | 2 + 12 files changed, 455 insertions(+), 3 deletions(-) create mode 100644 Client/macos/Music/MusicController.swift create mode 100644 Client/macos/Music/MusicSource.swift create mode 100644 Client/macos/Music/SpotifyLocalSource.swift create mode 100644 Client/macos/Music/SpotifyScript.swift diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index 20f7ea57..966993e1 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -1,15 +1,26 @@ import AppKit +import Combine final class AppDelegate: NSObject, NSApplicationDelegate { private let model = HeadphonesModel() private let settings = AppSettings() + private let music = MusicController() private let deviceWatcher = DeviceWatcher() private var statusItemController: StatusItemController? + private var cancellables = Set() func applicationDidFinishLaunching(_ notification: Notification) { model.settings = settings statusItemController = StatusItemController(model: model, settings: settings) + // Spotify is only read while the notch is on (notch spec §4.3). $showNotch emits the current value first. + settings.$showNotch + .receive(on: DispatchQueue.main) + .sink { [weak self] show in + if show { self?.music.start() } else { self?.music.stop() } + } + .store(in: &cancellables) + deviceWatcher.onConnect = { [weak self] address, name in self?.model.headsetConnectedToMac(address: address, name: name) } diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 7f1b4566..afbd71ec 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -1,12 +1,13 @@ import Foundation import ServiceManagement -// The three user options, persisted in UserDefaults. Launch at login is backed by SMAppService (macOS 13+). +// The user options, persisted in UserDefaults. Launch at login is backed by SMAppService (macOS 13+). final class AppSettings: ObservableObject { private enum Keys { static let autoConnect = "autoConnect" static let autoReconnect = "autoReconnect" static let lastDeviceAddress = "lastDeviceAddress" + static let showNotch = "showNotch" } private let defaults: UserDefaults @@ -17,6 +18,9 @@ final class AppSettings: ObservableObject { @Published var autoReconnect: Bool { didSet { defaults.set(autoReconnect, forKey: Keys.autoReconnect) } } + @Published var showNotch: Bool { + didSet { defaults.set(showNotch, forKey: Keys.showNotch) } + } @Published private(set) var launchAtLogin: Bool var lastDeviceAddress: String? { @@ -27,9 +31,11 @@ final class AppSettings: ObservableObject { init(defaults: UserDefaults = .standard) { self.defaults = defaults // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. - defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true]) + // Notch spec §7: the notch is shown by default. + defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true, Keys.showNotch: true]) autoConnect = defaults.bool(forKey: Keys.autoConnect) autoReconnect = defaults.bool(forKey: Keys.autoReconnect) + showNotch = defaults.bool(forKey: Keys.showNotch) launchAtLogin = SMAppService.mainApp.status == .enabled } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 4db3faed..fcbb8886 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -29,6 +29,7 @@ final class HeadphonesMenu { private var launchAtLoginItem = NSMenuItem() private var autoConnectItem = NSMenuItem() private var autoReconnectItem = NSMenuItem() + private var showNotchItem = NSMenuItem() private static var presets: [(Int, String)] { [(0x00, tr("Off")), (0x10, tr("Bright")), (0x11, tr("Excited")), (0x12, tr("Mellow")), @@ -156,7 +157,8 @@ final class HeadphonesMenu { launchAtLoginItem = ActionMenuItem(tr("Launch at Login")) { [weak self] in self?.toggleLaunchAtLogin() } autoConnectItem = ActionMenuItem(tr("Connect Automatically")) { [weak settings] in settings?.autoConnect.toggle() } autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } - for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem] { optionsMenu.addItem(item) } + showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } + for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } let optionsItem = NSMenuItem(title: tr("SonyBridge Options"), action: nil, keyEquivalent: "") optionsItem.submenu = optionsMenu menu.addItem(optionsItem) @@ -218,6 +220,7 @@ final class HeadphonesMenu { launchAtLoginItem.state = settings.launchAtLogin ? .on : .off autoConnectItem.state = settings.autoConnect ? .on : .off autoReconnectItem.state = settings.autoReconnect ? .on : .off + showNotchItem.state = settings.showNotch ? .on : .off } private func updateAbout() { diff --git a/Client/macos/Music/MusicController.swift b/Client/macos/Music/MusicController.swift new file mode 100644 index 00000000..f8ebc4d6 --- /dev/null +++ b/Client/macos/Music/MusicController.swift @@ -0,0 +1,149 @@ +import AppKit +import Combine + +// The music state the notch shows, from the active MusicSource (spec §5.1). Step 1: the local Spotify app. +final class MusicController: ObservableObject { + static let openRefreshInterval: TimeInterval = 5 // re-read while the notch is open (volume isn't signalled) + private static let artworkCacheSize = 8 + + @Published private(set) var status: MusicSourceStatus = .notRunning + @Published private(set) var nowPlaying: NowPlaying? + @Published private(set) var artwork: NSImage? + + // Something to show: a track, playing or paused (even without the right to control it). + var hasMusic: Bool { status != .notRunning && nowPlaying != nil } + + private let source: MusicSource + private var running = false + private var refreshTimer: Timer? + private var seekThrottle = SendThrottle() + private var volumeThrottle = SendThrottle() + private var artworkCache: [URL: NSImage] = [:] + private var artworkOrder: [URL] = [] + private var artworkRequest: URL? + private var lastLogLine = "" + + init(source: MusicSource = SpotifyLocalSource()) { + self.source = source + source.onChange = { [weak self] status, track in self?.apply(status, track) } + } + + func start() { + guard !running else { return } + running = true + source.start() + } + + // "Show Notch" off: no Spotify reads at all (spec §4.3). + func stop() { + guard running else { return } + running = false + notchDidClose() + source.stop() + status = .notRunning + nowPlaying = nil + artwork = nil + artworkRequest = nil + log("stopped") + } + + // Opening reads once (which also retries a refused permission, spec §6.3), then every 5 s while open. + func notchDidOpen() { + guard running else { return } + source.refresh() + refreshTimer?.invalidate() + let timer = Timer(timeInterval: Self.openRefreshInterval, repeats: true) { [weak self] _ in + guard let self = self, self.status == .ready else { return } + self.source.refresh() + } + RunLoop.main.add(timer, forMode: .common) + refreshTimer = timer + } + + func notchDidClose() { + refreshTimer?.invalidate() + refreshTimer = nil + } + + func playPause() { source.playPause() } + + func next() { source.next() } + + func previous() { source.previous() } + + // Sliders: at most one command per 150 ms while dragging, the final value always, then a read-back. + func seek(to seconds: TimeInterval, final: Bool) { + if seekThrottle.shouldSend(final: final) { source.seek(to: seconds) } + if final { source.refresh() } + } + + func setVolume(_ volume: Int, final: Bool) { + if volumeThrottle.shouldSend(final: final) { source.setVolume(volume) } + if final { source.refresh() } + } + + func launchPlayer() { source.launchPlayer() } + + func openAutomationSettings() { + if let url = URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Automation") { + NSWorkspace.shared.open(url) + } + } + + // MARK: - Private + + private func apply(_ newStatus: MusicSourceStatus, _ track: NowPlaying?) { + guard running else { return } + status = newStatus + nowPlaying = track + loadArtwork(track?.artworkURL) + switch (newStatus, track) { + case (.notRunning, _): log("not running") + case (.permissionDenied, _): log("permission denied") + case (.ready, nil): log("nothing playing") + case (.ready, let track?): + log("\(track.isPlaying ? "playing" : "paused") \(track.trackID) vol \(track.volume.map(String.init) ?? "?")") + } + } + + // One line per actual change (the 5 s re-reads stay quiet). + private func log(_ line: String) { + guard line != lastLogLine else { return } + lastLogLine = line + fputs("[spotify] \(line)\n", stderr) + } + + private func loadArtwork(_ url: URL?) { + guard let url = url else { + artwork = nil + artworkRequest = nil + return + } + if let cached = artworkCache[url] { + artwork = cached + artworkRequest = nil + return + } + guard artworkRequest != url else { return } // already downloading + artworkRequest = url + URLSession.shared.dataTask(with: url) { [weak self] data, _, _ in + let image = data.flatMap { NSImage(data: $0) } + DispatchQueue.main.async { + guard let self = self, self.artworkRequest == url else { return } + self.artworkRequest = nil + guard let image = image else { return } + self.remember(image, for: url) + self.artwork = image + } + }.resume() + } + + private func remember(_ image: NSImage, for url: URL) { + artworkCache[url] = image + artworkOrder.removeAll { $0 == url } + artworkOrder.append(url) + if artworkOrder.count > Self.artworkCacheSize { + artworkCache[artworkOrder.removeFirst()] = nil + } + } +} diff --git a/Client/macos/Music/MusicSource.swift b/Client/macos/Music/MusicSource.swift new file mode 100644 index 00000000..9d837dba --- /dev/null +++ b/Client/macos/Music/MusicSource.swift @@ -0,0 +1,22 @@ +import Foundation + +enum MusicSourceStatus: Equatable { + case notRunning // the player app isn't open + case permissionDenied // macOS refused SonyBridge the right to control it + case ready +} + +// Where the music comes from (spec §5.1). Step 1: SpotifyLocalSource; step 2 adds the Spotify Web API. +// Called on the main thread; onChange is called on the main thread. +protocol MusicSource: AnyObject { + var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? { get set } + func start() + func stop() + func refresh() + func playPause() + func next() + func previous() + func seek(to seconds: TimeInterval) + func setVolume(_ volume: Int) + func launchPlayer() +} diff --git a/Client/macos/Music/SpotifyLocalSource.swift b/Client/macos/Music/SpotifyLocalSource.swift new file mode 100644 index 00000000..2f09087e --- /dev/null +++ b/Client/macos/Music/SpotifyLocalSource.swift @@ -0,0 +1,206 @@ +import AppKit + +// Reads and controls the Spotify app of this Mac (spec §6): its PlaybackStateChanged signal, plus Apple Events. +// Never sends an Apple Event while Spotify isn't running: one would launch it. +final class SpotifyLocalSource: MusicSource { + static let bundleIdentifier = "com.spotify.client" + private static let signalName = Notification.Name("com.spotify.client.PlaybackStateChanged") + private static let permissionDeniedError = -1743 // errAEEventNotPermitted + private static let notRunningErrors: Set = [-600, -609] // procNotFound, connectionInvalid + private static let launchSettleDelay: TimeInterval = 2 // Spotify answers Apple Events a moment after launch + + var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? + + // Main thread only. + private var status: MusicSourceStatus = .notRunning + private var nowPlaying: NowPlaying? + private var signalObserver: NSObjectProtocol? + private var workspaceObservers: [NSObjectProtocol] = [] + + // Every NSAppleScript is created and run on this serial queue, one at a time. + private let scriptQueue = DispatchQueue(label: "com.sonybridge.spotify") + private var readScript: NSAppleScript? // scriptQueue only + private var consentGranted = false // scriptQueue only + + // Checked before queuing, and again on the script queue right before an Apple Event goes out, so a Spotify + // quit in between is never relaunched. + private static var spotifyIsRunning: Bool { + !NSRunningApplication.runningApplications(withBundleIdentifier: bundleIdentifier).isEmpty + } + + private var isRunning: Bool { Self.spotifyIsRunning } + + func start() { + guard signalObserver == nil else { return } + signalObserver = DistributedNotificationCenter.default().addObserver( + forName: Self.signalName, object: nil, queue: .main + ) { [weak self] note in + self?.handleSignal(note.userInfo) + } + let center = NSWorkspace.shared.notificationCenter + workspaceObservers = [ + center.addObserver(forName: NSWorkspace.didLaunchApplicationNotification, object: nil, queue: .main) { [weak self] note in + guard Self.isSpotify(note) else { return } + DispatchQueue.main.asyncAfter(deadline: .now() + Self.launchSettleDelay) { self?.refresh() } + }, + center.addObserver(forName: NSWorkspace.didTerminateApplicationNotification, object: nil, queue: .main) { [weak self] note in + if Self.isSpotify(note) { self?.publish(.notRunning, nil) } + }, + ] + if isRunning { refresh() } else { publish(.notRunning, nil) } + } + + func stop() { + if let observer = signalObserver { DistributedNotificationCenter.default().removeObserver(observer) } + signalObserver = nil + workspaceObservers.forEach { NSWorkspace.shared.notificationCenter.removeObserver($0) } + workspaceObservers = [] + status = .notRunning + nowPlaying = nil + } + + func refresh() { + guard signalObserver != nil else { return } + guard isRunning else { publish(.notRunning, nil); return } + scriptQueue.async { [weak self] in + guard let self = self, Self.spotifyIsRunning else { return } + if let code = self.consentError() { + DispatchQueue.main.async { self.applyFailure(code) } + return + } + if self.readScript == nil { self.readScript = NSAppleScript(source: SpotifyScript.readState) } + let result = SpotifyScript.run(self.readScript) + DispatchQueue.main.async { self.applyRead(result) } + } + } + + func playPause() { + // Optimistic: the signal confirms a moment later. + if var track = nowPlaying { + track.position = PlaybackClock.position(of: track, at: Date()) + track.positionDate = Date() + track.isPlaying.toggle() + publish(status, track) + } + send("playpause") + } + + func next() { send("next track") } + + func previous() { send("previous track") } + + func seek(to seconds: TimeInterval) { + if var track = nowPlaying { + track.position = seconds + track.positionDate = Date() + publish(status, track) + } + // String(format:) isn't localized: always a "." decimal separator, as AppleScript source needs. + send(String(format: "set player position to %.3f", seconds)) + } + + func setVolume(_ volume: Int) { + let clamped = min(100, max(0, volume)) + if var track = nowPlaying { + track.volume = clamped + publish(status, track) + } + send("set sound volume to \(clamped)") + } + + func launchPlayer() { + guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.bundleIdentifier) else { + fputs("[spotify] Spotify isn't installed\n", stderr) + return + } + NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration(), + completionHandler: nil) + } + + // MARK: - Private + + private func send(_ command: String) { + guard signalObserver != nil else { return } + guard isRunning else { publish(.notRunning, nil); return } + scriptQueue.async { [weak self] in + guard let self = self, Self.spotifyIsRunning else { return } + if let code = self.consentError() { + DispatchQueue.main.async { self.applyFailure(code) } + return + } + let result = SpotifyScript.run(NSAppleScript(source: SpotifyScript.command(command))) + if case .failure(let code) = result { + DispatchQueue.main.async { self.applyFailure(code) } + } + } + } + + private func handleSignal(_ userInfo: [AnyHashable: Any]?) { + let denied = status == .permissionDenied + switch SpotifyPlaybackInfo.parse(signal: userInfo, at: Date()) { + case .stopped: + publish(denied ? .permissionDenied : .ready, nil) + case .track(var track): + // Artwork and volume only come from Apple Events: keep them for the same track, read them otherwise. + if let current = nowPlaying, current.trackID == track.trackID { + track.artworkURL = current.artworkURL + track.volume = current.volume + } + publish(denied ? .permissionDenied : .ready, track) + if track.artworkURL == nil && !denied { refresh() } + case .incomplete: + if !denied { refresh() } + } + } + + private func applyRead(_ result: SpotifyScript.Result) { + guard signalObserver != nil else { return } // stopped meanwhile + switch result { + case .success(let text): + switch SpotifyPlaybackInfo.parse(scriptResult: text, at: Date()) { + case .stopped: publish(.ready, nil) + case .track(let track): publish(.ready, track) + case .incomplete: fputs("[spotify] unexpected reply: \(text)\n", stderr) + } + case .failure(let code): + applyFailure(code) + } + } + + // Spec §6.3: a refusal stops the reads (the controller retries once per notch opening); anything else + // (timeout, busy) keeps the last known state until the next signal. + private func applyFailure(_ code: Int) { + guard signalObserver != nil else { return } + if code == Self.permissionDeniedError { + publish(.permissionDenied, nowPlaying) + } else if Self.notRunningErrors.contains(code) { + publish(.notRunning, nil) + } else { + fputs("[spotify] Apple Event failed (\(code))\n", stderr) + } + } + + // scriptQueue only. Asks for macOS's automation consent without a timeout: otherwise the scripts' own 2 s + // timeout cancels the first Apple Event while the consent prompt still waits for the user, and the read is + // lost. nil = allowed; otherwise the error to handle (-1743 refused, -600 Spotify not running). + private func consentError() -> Int? { + if consentGranted { return nil } + let target = NSAppleEventDescriptor(bundleIdentifier: Self.bundleIdentifier) + let status = AEDeterminePermissionToAutomateTarget(target.aeDesc, AEEventClass(typeWildCard), AEEventID(typeWildCard), true) + if status == noErr { + consentGranted = true + return nil + } + return Int(status) + } + + private func publish(_ newStatus: MusicSourceStatus, _ track: NowPlaying?) { + status = newStatus + nowPlaying = track + onChange?(newStatus, track) + } + + private static func isSpotify(_ note: Notification) -> Bool { + (note.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication)?.bundleIdentifier == bundleIdentifier + } +} diff --git a/Client/macos/Music/SpotifyScript.swift b/Client/macos/Music/SpotifyScript.swift new file mode 100644 index 00000000..406cb44e --- /dev/null +++ b/Client/macos/Music/SpotifyScript.swift @@ -0,0 +1,44 @@ +import Foundation + +// AppleScript sent to the local Spotify app (spec §6). Only ever run on SpotifyLocalSource's script queue. +enum SpotifyScript { + enum Result: Equatable { + case success(String) + case failure(Int) // AppleScript / Apple Event error number + } + + // Fields joined by U+001F; times as integer milliseconds so no locale decimal separator shows up. + // Parsed by SpotifyPlaybackInfo.parse(scriptResult:at:). + static let readState = """ + with timeout of 2 seconds + tell application id "com.spotify.client" + set playerState to (player state as text) + if playerState is "stopped" then return "stopped" + set t to current track + set sep to (character id 31) + set art to artwork url of t + if art is missing value then set art to "" + return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) + end tell + end timeout + """ + + // One command, e.g. "playpause", "next track", "set sound volume to 40". + static func command(_ body: String) -> String { + """ + with timeout of 2 seconds + tell application id "com.spotify.client" to \(body) + end timeout + """ + } + + static func run(_ script: NSAppleScript?) -> Result { + guard let script = script else { return .failure(-2700) } + var error: NSDictionary? + let output = script.executeAndReturnError(&error) + if let error = error { + return .failure((error[NSAppleScript.errorNumber] as? NSNumber)?.intValue ?? -2700) + } + return .success(output.stringValue ?? "") + } +} diff --git a/Client/macos/SonyHeadphonesClient.entitlements b/Client/macos/SonyHeadphonesClient.entitlements index 70cb01d7..c16fee2a 100644 --- a/Client/macos/SonyHeadphonesClient.entitlements +++ b/Client/macos/SonyHeadphonesClient.entitlements @@ -8,6 +8,12 @@ com.apple.security.files.user-selected.read-only + com.apple.security.network.client + + com.apple.security.temporary-exception.apple-events + + com.spotify.client + com.apple.security.temporary-exception.files.home-relative-path.read-write /Library/Logs/SonyBridge/ diff --git a/Client/macos/en.lproj/InfoPlist.strings b/Client/macos/en.lproj/InfoPlist.strings index 63b393f3..42826841 100644 --- a/Client/macos/en.lproj/InfoPlist.strings +++ b/Client/macos/en.lproj/InfoPlist.strings @@ -1,2 +1,3 @@ /* Localized Info.plist values (English). Keeps an en.lproj in the bundle so non-French systems fall back to English. */ "NSBluetoothAlwaysUsageDescription" = "This app uses Bluetooth in order to connect to your headphones."; +"NSAppleEventsUsageDescription" = "SonyBridge shows and controls the music playing in Spotify."; diff --git a/Client/macos/fr.lproj/InfoPlist.strings b/Client/macos/fr.lproj/InfoPlist.strings index 82760dbe..0f9a918a 100644 --- a/Client/macos/fr.lproj/InfoPlist.strings +++ b/Client/macos/fr.lproj/InfoPlist.strings @@ -1,2 +1,3 @@ /* Localized Info.plist values (French). */ "NSBluetoothAlwaysUsageDescription" = "SonyBridge utilise le Bluetooth pour se connecter à votre casque."; +"NSAppleEventsUsageDescription" = "SonyBridge affiche et contrôle la musique en cours dans Spotify."; diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index faa8245b..29bf065a 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -48,6 +48,7 @@ "Launch at Login" = "Lancer à l’ouverture de session"; "Connect Automatically" = "Connexion automatique"; "Reconnect Automatically" = "Reconnexion automatique"; +"Show Notch" = "Afficher l’encoche"; /* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ "No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; diff --git a/Client/macos/info.plist b/Client/macos/info.plist index 95887553..7ff9eb65 100644 --- a/Client/macos/info.plist +++ b/Client/macos/info.plist @@ -37,6 +37,8 @@ NSBluetoothAlwaysUsageDescription This app uses Bluetooth in order to connect to your headphones. + NSAppleEventsUsageDescription + SonyBridge shows and controls the music playing in Spotify. NSPrincipalClass NSApplication From d6613e4018e1256bc36ebfc331a84e66169885dd Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 10:32:17 +0200 Subject: [PATCH 24/50] feat(notch): notch panel with resting states and hover to open --- Client/macos/AppDelegate.swift | 2 + Client/macos/Notch/NotchController.swift | 178 +++++++++++++++++++++ Client/macos/Notch/NotchPanel.swift | 44 ++++++ Client/macos/Notch/NotchView.swift | 184 ++++++++++++++++++++++ Client/macos/fr.lproj/Localizable.strings | 4 + 5 files changed, 412 insertions(+) create mode 100644 Client/macos/Notch/NotchController.swift create mode 100644 Client/macos/Notch/NotchPanel.swift create mode 100644 Client/macos/Notch/NotchView.swift diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index 966993e1..3b6d4509 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -7,11 +7,13 @@ final class AppDelegate: NSObject, NSApplicationDelegate { private let music = MusicController() private let deviceWatcher = DeviceWatcher() private var statusItemController: StatusItemController? + private var notchController: NotchController? private var cancellables = Set() func applicationDidFinishLaunching(_ notification: Notification) { model.settings = settings statusItemController = StatusItemController(model: model, settings: settings) + notchController = NotchController(model: model, music: music, settings: settings) // Spotify is only read while the notch is on (notch spec §4.3). $showNotch emits the current value first. settings.$showNotch diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift new file mode 100644 index 00000000..0f9c8f59 --- /dev/null +++ b/Client/macos/Notch/NotchController.swift @@ -0,0 +1,178 @@ +import AppKit +import Combine +import SwiftUI + +// Owns the notch panel (spec §4.3): picks the screen, places and resizes the panel, opens it on hover and +// follows the "Show Notch" option. +final class NotchController { + private static let shrinkDelay: TimeInterval = 0.35 // lets the closing animation end before the panel shrinks + + private let model: HeadphonesModel + private let music: MusicController + private let settings: AppSettings + private let state = NotchViewState() + private let panel = NotchPanel.make() + private var geometry: NotchGeometry? + private var lastChosenTab: NotchTab? + private var hoverTimer: Timer? + private var shrinkWork: DispatchWorkItem? + private var cancellables = Set() + + init(model: HeadphonesModel, music: MusicController, settings: AppSettings) { + self.model = model + self.music = music + self.settings = settings + + let container = NotchContainerView() + let host = NotchHostingView(rootView: NotchView(state: state, model: model, music: music, + selectTab: { [weak self] tab in self?.select(tab) })) + host.autoresizingMask = [.width, .height] + container.addSubview(host) + container.onHoverChange = { [weak self] in self?.scheduleHoverCheck() } + panel.contentView = container + + NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.relayout() } + .store(in: &cancellables) + // receive(on:) hops after @Published stored the new value, so the sinks read current state. + settings.$showNotch + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.relayout() } + .store(in: &cancellables) + model.$connectionState.combineLatest(music.$status, music.$nowPlaying) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.updateResting() } + .store(in: &cancellables) + } + + // MARK: - Placement + + private func relayout() { + guard settings.showNotch, let screen = Self.preferredScreen() else { + geometry = nil + if state.isOpen { + state.isOpen = false + music.notchDidClose() + } + shrinkWork?.cancel() + panel.orderOut(nil) + return + } + let geometry = NotchGeometry(screen: ScreenMetrics(screen)) + self.geometry = geometry + state.notchHeight = geometry.notch.height + state.openSize = geometry.open.size + if state.isOpen { panel.setFrame(geometry.open, display: true) } + updateResting() + } + + // The built-in notched screen if there is one, else the primary screen (the one with the menu bar). + private static func preferredScreen() -> NSScreen? { + NSScreen.screens.first { $0.safeAreaInsets.top > 0 } ?? NSScreen.screens.first + } + + private func updateResting() { + guard let geometry = geometry else { return } + let resting = NotchContent.restingState(hasMusic: music.hasMusic, headphonesConnected: model.connected) + let frame = geometry.restingFrame(for: resting) + if state.resting != resting || (frame != nil && state.restingSize != frame?.size) { + withAnimation(animation) { + state.resting = resting + if let frame = frame { state.restingSize = frame.size } + } + } + guard !state.isOpen else { return } // close() re-applies the resting frame + if let frame = frame { + setPanelFrame(frame) + panel.orderFrontRegardless() + } else { + hidePanel(after: panel.isVisible ? Self.shrinkDelay : 0) + } + } + + // Grows at once (the shape then animates inside the larger panel) or shrinks once the animation is over, + // so the transparent panel never blocks the menu bar longer than needed. + private func setPanelFrame(_ target: CGRect) { + shrinkWork?.cancel() + let current = panel.frame + if !panel.isVisible || (target.width >= current.width && target.height >= current.height) { + panel.setFrame(target, display: true) + } else { + let work = DispatchWorkItem { [weak self] in self?.panel.setFrame(target, display: true) } + shrinkWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + Self.shrinkDelay, execute: work) + } + } + + private func hidePanel(after delay: TimeInterval) { + shrinkWork?.cancel() + let work = DispatchWorkItem { [weak self] in self?.panel.orderOut(nil) } + shrinkWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: work) + } + + // MARK: - Hover + + // Enter/exit events only schedule a check; the check reads the real pointer position, so a missed event + // can't leave the notch stuck open or closed. + private func scheduleHoverCheck() { + hoverTimer?.invalidate() + let inside = hoverZone.contains(NSEvent.mouseLocation) + let delay = inside ? NotchContent.openDelay : NotchContent.closeDelay + let timer = Timer(timeInterval: delay, repeats: false) { [weak self] _ in self?.hoverCheck() } + RunLoop.main.add(timer, forMode: .common) + hoverTimer = timer + } + + private func hoverCheck() { + let inside = panel.isVisible && hoverZone.contains(NSEvent.mouseLocation) + if inside && !state.isOpen { + open() + } else if !inside && state.isOpen { + close() + } + } + + private var hoverZone: CGRect { + guard let geometry = geometry else { return .zero } + return state.isOpen ? geometry.open : (geometry.restingFrame(for: state.resting) ?? .zero) + } + + private func open() { + guard let geometry = geometry else { return } + state.tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) + setPanelFrame(geometry.open) + panel.orderFrontRegardless() + withAnimation(animation) { state.isOpen = true } + music.notchDidOpen() + } + + private func close() { + withAnimation(animation) { state.isOpen = false } + music.notchDidClose() + updateResting() + } + + private func select(_ tab: NotchTab) { + lastChosenTab = tab + state.tab = tab + } + + // Spring, or a short fade-like ease when "Reduce motion" is on. + private var animation: Animation { + NSWorkspace.shared.accessibilityDisplayShouldReduceMotion + ? .easeInOut(duration: 0.15) + : .spring(response: 0.35, dampingFraction: 0.82) + } +} + +private extension ScreenMetrics { + init(_ screen: NSScreen) { + self.init(frame: screen.frame, + safeAreaTop: screen.safeAreaInsets.top, + auxiliaryTopLeft: screen.auxiliaryTopLeftArea, + auxiliaryTopRight: screen.auxiliaryTopRightArea, + menuBarHeight: screen.frame.maxY - screen.visibleFrame.maxY) + } +} diff --git a/Client/macos/Notch/NotchPanel.swift b/Client/macos/Notch/NotchPanel.swift new file mode 100644 index 00000000..ad942c59 --- /dev/null +++ b/Client/macos/Notch/NotchPanel.swift @@ -0,0 +1,44 @@ +import AppKit +import SwiftUI + +// Borderless transparent panel above the menu bar (spec §4.3). It never becomes key or main, so the frontmost +// app keeps the keyboard; clicks still reach its controls through NotchHostingView. +final class NotchPanel: NSPanel { + // A factory rather than a custom init: NSWindow subclasses that declare their own initializer must also + // deal with NSWindow's required/unavailable initializers. + static func make() -> NotchPanel { + let panel = NotchPanel(contentRect: .zero, styleMask: [.borderless, .nonactivatingPanel], + backing: .buffered, defer: false) + panel.isOpaque = false + panel.backgroundColor = .clear + panel.hasShadow = false + panel.isMovable = false + panel.hidesOnDeactivate = false + panel.level = NSWindow.Level(rawValue: NSWindow.Level.mainMenu.rawValue + 2) + panel.collectionBehavior = [.canJoinAllSpaces, .stationary, .fullScreenAuxiliary, .ignoresCycle] + return panel + } + + override var canBecomeKey: Bool { false } + override var canBecomeMain: Bool { false } +} + +// Reports the pointer entering or leaving the panel, whichever app is active. +final class NotchContainerView: NSView { + var onHoverChange: (() -> Void)? + + override func updateTrackingAreas() { + super.updateTrackingAreas() + trackingAreas.forEach { removeTrackingArea($0) } + addTrackingArea(NSTrackingArea(rect: .zero, options: [.mouseEnteredAndExited, .activeAlways, .inVisibleRect], + owner: self, userInfo: nil)) + } + + override func mouseEntered(with event: NSEvent) { onHoverChange?() } + override func mouseExited(with event: NSEvent) { onHoverChange?() } +} + +// The panel is never key: without this, the first click would only be swallowed by the window. +final class NotchHostingView: NSHostingView { + override func acceptsFirstMouse(for event: NSEvent?) -> Bool { true } +} diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift new file mode 100644 index 00000000..2bc9e461 --- /dev/null +++ b/Client/macos/Notch/NotchView.swift @@ -0,0 +1,184 @@ +import AppKit +import SwiftUI + +// Written by NotchController, read by NotchView. +final class NotchViewState: ObservableObject { + @Published var isOpen = false + @Published var resting: NotchRestingState = .empty + @Published var tab: NotchTab = .music + @Published var restingSize: CGSize = .zero + @Published var openSize: CGSize = .zero + @Published var notchHeight: CGFloat = 32 +} + +// Square top (it merges with the notch), rounded bottom corners. +struct NotchShape: Shape { + var bottomRadius: CGFloat + + var animatableData: CGFloat { + get { bottomRadius } + set { bottomRadius = newValue } + } + + func path(in rect: CGRect) -> Path { + let radius = min(bottomRadius, rect.width / 2, rect.height) + var path = Path() + path.move(to: CGPoint(x: rect.minX, y: rect.minY)) + path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY)) + path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY - radius)) + path.addQuadCurve(to: CGPoint(x: rect.maxX - radius, y: rect.maxY), control: CGPoint(x: rect.maxX, y: rect.maxY)) + path.addLine(to: CGPoint(x: rect.minX + radius, y: rect.maxY)) + path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.maxY - radius), control: CGPoint(x: rect.minX, y: rect.maxY)) + path.closeSubpath() + return path + } +} + +// Root view of the notch panel (spec §4): the resting strip, or the open panel with its two tabs. The panel +// can be larger than the shape while it animates; the shape stays centred at the top. +struct NotchView: View { + @ObservedObject var state: NotchViewState + @ObservedObject var model: HeadphonesModel + @ObservedObject var music: MusicController + let selectTab: (NotchTab) -> Void + + var body: some View { + let size = state.isOpen ? state.openSize : state.restingSize + ZStack(alignment: .top) { + NotchShape(bottomRadius: state.isOpen ? 22 : 10).fill(Color.black) + if state.isOpen { + openContent + .padding(.top, state.notchHeight) + .transition(.opacity) + } else { + restingContent + .transition(.opacity) + } + } + .frame(width: size.width, height: size.height) + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .environment(\.colorScheme, .dark) + } + + // MARK: - Resting (spec §4.1) + + private var restingContent: some View { + HStack(spacing: 0) { + leadingItem.frame(width: NotchGeometry.sideExtension) + Spacer(minLength: 0) + trailingItem.frame(width: NotchGeometry.sideExtension) + } + .frame(height: state.notchHeight) + } + + @ViewBuilder private var leadingItem: some View { + switch state.resting { + case .musicAndHeadphones, .musicOnly: + ArtworkView(image: music.artwork, size: 20, cornerRadius: 5) + case .headphonesOnly: + Image(systemName: "headphones").font(.system(size: 13)).foregroundColor(.white) + case .empty: + EmptyView() + } + } + + @ViewBuilder private var trailingItem: some View { + switch state.resting { + case .musicAndHeadphones, .headphonesOnly: + Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13)).foregroundColor(.white) + case .musicOnly: + LevelBars(animating: music.nowPlaying?.isPlaying == true) + case .empty: + EmptyView() + } + } + + private static func modeSymbol(_ mode: SHCAmbientMode) -> String { + switch mode { + case .noiseCanceling: return "headphones.circle.fill" + case .ambientSound: return "ear.and.waveform" + default: return "circle.slash" + } + } + + // MARK: - Open (spec §4.2) + + private var openContent: some View { + VStack(spacing: 10) { + tabBar + tabContent.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + } + .padding(.horizontal, 18) + .padding(.bottom, 14) + } + + private var tabBar: some View { + HStack(spacing: 18) { + tabButton(.music, title: tr("Music")) + tabButton(.headphones, title: tr("Headphones")) + } + .padding(.top, 6) + } + + private func tabButton(_ tab: NotchTab, title: String) -> some View { + let selected = state.tab == tab + return Button { selectTab(tab) } label: { + Text(title) + .font(.system(size: 12, weight: selected ? .semibold : .regular)) + .foregroundColor(selected ? .white : .gray) + .padding(.bottom, 3) + .overlay(alignment: .bottom) { + if selected { Rectangle().fill(Color.white).frame(height: 2) } + } + } + .buttonStyle(.plain) + } + + @ViewBuilder private var tabContent: some View { + switch state.tab { + case .music: Spacer() // Task 6: MusicTab + case .headphones: Spacer() // Task 5: HeadphonesTab + } + } +} + +// Album artwork, or a placeholder note while it loads (or for tracks without one). +struct ArtworkView: View { + let image: NSImage? + let size: CGFloat + let cornerRadius: CGFloat + + var body: some View { + Group { + if let image = image { + Image(nsImage: image).resizable().aspectRatio(contentMode: .fill) + } else { + ZStack { + Color(white: 0.2) + Image(systemName: "music.note").font(.system(size: size * 0.45)).foregroundColor(.gray) + } + } + } + .frame(width: size, height: size) + .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) + } +} + +// Four small bars, moving while music plays (resting state 2), frozen when paused. +struct LevelBars: View { + let animating: Bool + + var body: some View { + TimelineView(.animation(minimumInterval: 1.0 / 20, paused: !animating)) { context in + let time = context.date.timeIntervalSinceReferenceDate + HStack(alignment: .bottom, spacing: 2) { + ForEach(0..<4, id: \.self) { index in + Capsule() + .fill(Color.green) + .frame(width: 3, height: animating ? 4 + 10 * abs(sin(time * 3 + Double(index) * 1.3)) : 4) + } + } + .frame(height: 14, alignment: .bottom) + } + } +} diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 29bf065a..ef0048aa 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -58,3 +58,7 @@ "Not supported on this device." = "Non pris en charge sur cet appareil."; "The headphones didn't respond." = "Le casque n’a pas répondu."; "Couldn't open the control channel." = "Impossible d’ouvrir le canal de contrôle."; + +/* Notch (Notch/*.swift) */ +"Music" = "Musique"; +"Headphones" = "Casque"; From e7226e5e17fd9e749b2d3a184b441344a084a574 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 10:41:19 +0200 Subject: [PATCH 25/50] feat(notch): headphones tab --- Client/macos/Notch/HeadphonesTab.swift | 99 +++++++++++++++++++++++ Client/macos/Notch/NotchView.swift | 24 +++++- Client/macos/fr.lproj/Localizable.strings | 1 + 3 files changed, 120 insertions(+), 4 deletions(-) create mode 100644 Client/macos/Notch/HeadphonesTab.swift diff --git a/Client/macos/Notch/HeadphonesTab.swift b/Client/macos/Notch/HeadphonesTab.swift new file mode 100644 index 00000000..c0a64e2c --- /dev/null +++ b/Client/macos/Notch/HeadphonesTab.swift @@ -0,0 +1,99 @@ +import AppKit +import SwiftUI + +// Notch tab: NC / Ambient / Off, ambient level and Focus on Voice (spec §4.2). It calls the same model methods +// as the menu, so the poll guard and the send throttle apply here too, and both stay in sync. +struct HeadphonesTab: View { + @ObservedObject var model: HeadphonesModel + + var body: some View { + switch model.connectionState { + case .connected: + controls + case .connecting: + Text(tr("Connecting…")).font(.system(size: 12)).foregroundColor(.gray).padding(.top, 16) + case .disconnected: + VStack(spacing: 10) { + Text(tr("Not connected")).font(.system(size: 12)).foregroundColor(.gray) + Button(tr("Connect…")) { + NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window + model.connect() + } + .controlSize(.small) + } + .padding(.top, 16) + } + } + + private var controls: some View { + let ambient = model.mode == .ambientSound + return VStack(spacing: 12) { + ModePicker(selection: model.mode, select: { model.setMode($0) }) + + HStack(spacing: 8) { + Text(tr("Level")).font(.system(size: 12)) + Slider( + value: Binding(get: { Double(model.ambientLevel) }, + set: { model.setLevel(Int($0.rounded()), final: false) }), + in: 1...Double(max(model.maxAmbientLevel, 2)), + step: 1, + onEditingChanged: { editing in + if !editing { model.setLevel(model.ambientLevel, final: true) } + } + ) + .controlSize(.small) + Text(verbatim: "\(model.ambientLevel)") + .font(.system(size: 11, weight: .medium).monospacedDigit()) + .foregroundColor(.gray) + .frame(width: 20, alignment: .trailing) + } + .disabled(!ambient) + .opacity(ambient ? 1 : 0.4) + + HStack { + Text(tr("Focus on Voice")).font(.system(size: 12)) + Spacer() + Toggle("", isOn: Binding(get: { model.focusOnVoice }, set: { model.setFocusOnVoice($0) })) + .labelsHidden() + .toggleStyle(.switch) + .controlSize(.mini) + } + .disabled(!ambient) + .opacity(ambient ? 1 : 0.4) + } + } +} + +// Segmented NC / Ambient / Off control drawn in SwiftUI. The AppKit segmented picker insists on its natural +// width, wider than the notch in French, and only shrank on the next model update (~2 s later). +private struct ModePicker: View { + let selection: SHCAmbientMode + let select: (SHCAmbientMode) -> Void + + private static var options: [(SHCAmbientMode, String)] { + [(.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off"))] + } + + var body: some View { + HStack(spacing: 2) { + ForEach(Self.options, id: \.0.rawValue) { mode, title in + let selected = selection == mode + Button { select(mode) } label: { + Text(title) + .font(.system(size: 11, weight: selected ? .semibold : .regular)) + .foregroundColor(selected ? .white : .gray) + .lineLimit(1) + .minimumScaleFactor(0.8) + .frame(maxWidth: .infinity) + .padding(.vertical, 5) + .background(RoundedRectangle(cornerRadius: 6).fill(selected ? Color(white: 0.3) : Color.clear)) + .contentShape(Rectangle()) + } + .buttonStyle(.plain) + .accessibilityAddTraits(selected ? .isSelected : []) + } + } + .padding(2) + .background(RoundedRectangle(cornerRadius: 8).fill(Color(white: 0.15))) + } +} diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 2bc9e461..456f8acb 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -47,8 +47,11 @@ struct NotchView: View { ZStack(alignment: .top) { NotchShape(bottomRadius: state.isOpen ? 22 : 10).fill(Color.black) if state.isOpen { + // Laid out at the final size and clipped by the growing shape, so text never reflows (or spills + // past the edges) while the spring animates. openContent .padding(.top, state.notchHeight) + .frame(width: state.openSize.width, height: state.openSize.height) .transition(.opacity) } else { restingContent @@ -56,6 +59,7 @@ struct NotchView: View { } } .frame(width: size.width, height: size.height) + .clipShape(NotchShape(bottomRadius: state.isOpen ? 22 : 10)) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) .environment(\.colorScheme, .dark) } @@ -134,12 +138,24 @@ struct NotchView: View { .buttonStyle(.plain) } - @ViewBuilder private var tabContent: some View { - switch state.tab { - case .music: Spacer() // Task 6: MusicTab - case .headphones: Spacer() // Task 5: HeadphonesTab + // Both tabs stay in the hierarchy: the menu-style controls (segmented picker, slider, switch) are AppKit + // views that appear at their natural width for a frame before SwiftUI sizes them, so inserting a tab on + // each switch made its content spill past the edges. + private var tabContent: some View { + ZStack(alignment: .top) { + tabPage(.music) { Spacer() } // Task 6: MusicTab + tabPage(.headphones) { HeadphonesTab(model: model) } } } + + private func tabPage(_ tab: NotchTab, @ViewBuilder content: () -> Content) -> some View { + let selected = state.tab == tab + return content() + .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .opacity(selected ? 1 : 0) + .allowsHitTesting(selected) + .accessibilityHidden(!selected) + } } // Album artwork, or a placeholder note while it loads (or for tracks without one). diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index ef0048aa..fb0e5df8 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -62,3 +62,4 @@ /* Notch (Notch/*.swift) */ "Music" = "Musique"; "Headphones" = "Casque"; +"Level" = "Niveau"; From 2e184608c8ac47f5d3bdeccda2a4b8fa2952d8ba Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 13:21:23 +0200 Subject: [PATCH 26/50] feat(notch): music player and headphones page, shuffle, smooth notch animations, README --- Client/macos/Music/MusicController.swift | 28 ++- Client/macos/Music/MusicSource.swift | 1 + Client/macos/Music/NowPlaying.swift | 1 + Client/macos/Music/SpotifyLocalSource.swift | 10 ++ Client/macos/Music/SpotifyPlaybackInfo.swift | 8 +- Client/macos/Music/SpotifyScript.swift | 2 +- Client/macos/Notch/FlatSlider.swift | 58 +++++++ Client/macos/Notch/HeadphonesTab.swift | 104 ++++++----- Client/macos/Notch/MusicTab.swift | 164 ++++++++++++++++++ Client/macos/Notch/NotchController.swift | 132 ++++++++------ Client/macos/Notch/NotchControls.swift | 50 ++++++ Client/macos/Notch/NotchGeometry.swift | 2 +- Client/macos/Notch/NotchMotion.swift | 63 +++++++ Client/macos/Notch/NotchView.swift | 124 ++++++------- Client/macos/fr.lproj/Localizable.strings | 15 +- Client/tests/LogicTests/main.swift | 21 ++- README.md | 9 +- .../specs/2026-09-11-notch-design.md | 22 +++ 18 files changed, 641 insertions(+), 173 deletions(-) create mode 100644 Client/macos/Notch/FlatSlider.swift create mode 100644 Client/macos/Notch/MusicTab.swift create mode 100644 Client/macos/Notch/NotchControls.swift create mode 100644 Client/macos/Notch/NotchMotion.swift diff --git a/Client/macos/Music/MusicController.swift b/Client/macos/Music/MusicController.swift index f8ebc4d6..cd48768e 100644 --- a/Client/macos/Music/MusicController.swift +++ b/Client/macos/Music/MusicController.swift @@ -8,7 +8,10 @@ final class MusicController: ObservableObject { @Published private(set) var status: MusicSourceStatus = .notRunning @Published private(set) var nowPlaying: NowPlaying? - @Published private(set) var artwork: NSImage? + @Published private(set) var artwork: NSImage? { + didSet { artworkTint = artwork.flatMap(Self.tint(of:)) } + } + @Published private(set) var artworkTint: NSColor? // vivid average colour of the artwork // Something to show: a track, playing or paused (even without the right to control it). var hasMusic: Bool { status != .notRunning && nowPlaying != nil } @@ -82,6 +85,11 @@ final class MusicController: ObservableObject { if final { source.refresh() } } + func toggleShuffle() { + guard let shuffling = nowPlaying?.isShuffling else { return } + source.setShuffling(!shuffling) + } + func launchPlayer() { source.launchPlayer() } func openAutomationSettings() { @@ -138,6 +146,24 @@ final class MusicController: ObservableObject { }.resume() } + // The artwork's average colour, pushed bright and saturated enough to read on black. + private static func tint(of image: NSImage) -> NSColor? { + guard let cgImage = image.cgImage(forProposedRect: nil, context: nil, hints: nil), + let context = CGContext(data: nil, width: 1, height: 1, bitsPerComponent: 8, bytesPerRow: 4, + space: CGColorSpaceCreateDeviceRGB(), + bitmapInfo: CGImageAlphaInfo.premultipliedLast.rawValue), + let data = context.data else { return nil } + context.interpolationQuality = .medium + context.draw(cgImage, in: CGRect(x: 0, y: 0, width: 1, height: 1)) + let pixel = data.assumingMemoryBound(to: UInt8.self) + let average = NSColor(srgbRed: CGFloat(pixel[0]) / 255, green: CGFloat(pixel[1]) / 255, + blue: CGFloat(pixel[2]) / 255, alpha: 1) + // A grey artwork has no meaningful hue (it would come out red): keep it light grey. + guard average.saturationComponent >= 0.12 else { return NSColor(white: 0.85, alpha: 1) } + return NSColor(hue: average.hueComponent, saturation: max(average.saturationComponent, 0.55), + brightness: max(average.brightnessComponent, 0.85), alpha: 1) + } + private func remember(_ image: NSImage, for url: URL) { artworkCache[url] = image artworkOrder.removeAll { $0 == url } diff --git a/Client/macos/Music/MusicSource.swift b/Client/macos/Music/MusicSource.swift index 9d837dba..567cdff0 100644 --- a/Client/macos/Music/MusicSource.swift +++ b/Client/macos/Music/MusicSource.swift @@ -18,5 +18,6 @@ protocol MusicSource: AnyObject { func previous() func seek(to seconds: TimeInterval) func setVolume(_ volume: Int) + func setShuffling(_ on: Bool) func launchPlayer() } diff --git a/Client/macos/Music/NowPlaying.swift b/Client/macos/Music/NowPlaying.swift index 02beb0fa..b9a75fff 100644 --- a/Client/macos/Music/NowPlaying.swift +++ b/Client/macos/Music/NowPlaying.swift @@ -20,6 +20,7 @@ struct NowPlaying: Equatable { var positionDate: Date var isPlaying: Bool var volume: Int? // 0...100; nil until known + var isShuffling: Bool? // nil until known var deviceName: String? // nil = this Mac var capabilities: MusicCapabilities } diff --git a/Client/macos/Music/SpotifyLocalSource.swift b/Client/macos/Music/SpotifyLocalSource.swift index 2f09087e..14ee7b4d 100644 --- a/Client/macos/Music/SpotifyLocalSource.swift +++ b/Client/macos/Music/SpotifyLocalSource.swift @@ -108,6 +108,14 @@ final class SpotifyLocalSource: MusicSource { send("set sound volume to \(clamped)") } + func setShuffling(_ on: Bool) { + if var track = nowPlaying { + track.isShuffling = on + publish(status, track) + } + send("set shuffling to \(on)") + } + func launchPlayer() { guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.bundleIdentifier) else { fputs("[spotify] Spotify isn't installed\n", stderr) @@ -142,10 +150,12 @@ final class SpotifyLocalSource: MusicSource { publish(denied ? .permissionDenied : .ready, nil) case .track(var track): // Artwork and volume only come from Apple Events: keep them for the same track, read them otherwise. + // Shuffle belongs to the player, not the track: always keep it. if let current = nowPlaying, current.trackID == track.trackID { track.artworkURL = current.artworkURL track.volume = current.volume } + track.isShuffling = nowPlaying?.isShuffling publish(denied ? .permissionDenied : .ready, track) if track.artworkURL == nil && !denied { refresh() } case .incomplete: diff --git a/Client/macos/Music/SpotifyPlaybackInfo.swift b/Client/macos/Music/SpotifyPlaybackInfo.swift index 3f3fde01..9a2442dc 100644 --- a/Client/macos/Music/SpotifyPlaybackInfo.swift +++ b/Client/macos/Music/SpotifyPlaybackInfo.swift @@ -30,16 +30,17 @@ enum SpotifyPlaybackInfo { positionDate: date, isPlaying: state == "Playing", volume: nil, + isShuffling: nil, deviceName: nil, capabilities: localCapabilities)) } - // SpotifyScript.readState's reply: "stopped", or 9 fields separated by U+001F — state, track id, name, - // artist, album, duration (ms), position (ms), artwork URL, volume. + // SpotifyScript.readState's reply: "stopped", or 10 fields separated by U+001F — state, track id, name, + // artist, album, duration (ms), position (ms), artwork URL, volume, shuffling ("true" / "false"). static func parse(scriptResult text: String, at date: Date) -> SpotifyState { if text == "stopped" { return .stopped } let fields = text.split(separator: fieldSeparator, omittingEmptySubsequences: false).map(String.init) - guard fields.count == 9, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { + guard fields.count == 10, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { return .incomplete } return .track(NowPlaying( @@ -53,6 +54,7 @@ enum SpotifyPlaybackInfo { positionDate: date, isPlaying: fields[0] == "playing", volume: Int(fields[8]).map { min(100, max(0, $0)) }, + isShuffling: fields[9] == "true" ? true : fields[9] == "false" ? false : nil, deviceName: nil, capabilities: localCapabilities)) } diff --git a/Client/macos/Music/SpotifyScript.swift b/Client/macos/Music/SpotifyScript.swift index 406cb44e..f52dd930 100644 --- a/Client/macos/Music/SpotifyScript.swift +++ b/Client/macos/Music/SpotifyScript.swift @@ -18,7 +18,7 @@ enum SpotifyScript { set sep to (character id 31) set art to artwork url of t if art is missing value then set art to "" - return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) + return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) & sep & (shuffling as text) end tell end timeout """ diff --git a/Client/macos/Notch/FlatSlider.swift b/Client/macos/Notch/FlatSlider.swift new file mode 100644 index 00000000..a9104b25 --- /dev/null +++ b/Client/macos/Notch/FlatSlider.swift @@ -0,0 +1,58 @@ +import SwiftUI + +// A thick flat bar without a knob (progress, volume, level). Click or drag anywhere on it; `onChange` gets the +// value while dragging (final: false) and once more when the pointer is released (final: true). `smoothing` +// glides the fill between values that arrive once a second (playback progress). +struct FlatSlider: View { + let value: Double + var range: ClosedRange = 0...1 + var step: Double? + var height: CGFloat = 5 + var smoothing = false + let onChange: (Double, Bool) -> Void + + @Environment(\.isEnabled) private var isEnabled + @State private var dragging = false + @State private var hovering = false + + var body: some View { + GeometryReader { geometry in + let width = max(geometry.size.width, 1) + let span = range.upperBound - range.lowerBound + let fraction = span > 0 ? min(1, max(0, (value - range.lowerBound) / span)) : 0 + let barHeight = dragging || hovering ? height + 2 : height + ZStack(alignment: .leading) { + Capsule().fill(Color(white: 0.25)) + Capsule() + .fill(Color(white: dragging || hovering ? 1 : 0.75)) + .frame(width: max(barHeight, width * fraction)) + .opacity(fraction > 0 ? 1 : 0) + .animation(smoothing && !dragging ? .linear(duration: 1) : .easeOut(duration: 0.08), value: fraction) + } + .frame(height: barHeight) + .frame(maxHeight: .infinity) + .contentShape(Rectangle()) + .gesture( + DragGesture(minimumDistance: 0) + .onChanged { drag in + dragging = true + onChange(Self.value(at: drag.location.x / width, range: range, step: step), false) + } + .onEnded { drag in + dragging = false + onChange(Self.value(at: drag.location.x / width, range: range, step: step), true) + } + ) + .onHover { hovering = isEnabled && $0 } + .animation(.easeOut(duration: 0.12), value: barHeight) + } + .frame(height: height + 8) + .opacity(isEnabled ? 1 : 0.4) + } + + private static func value(at fraction: CGFloat, range: ClosedRange, step: Double?) -> Double { + let raw = range.lowerBound + Double(min(1, max(0, fraction))) * (range.upperBound - range.lowerBound) + guard let step = step, step > 0 else { return raw } + return (raw / step).rounded() * step + } +} diff --git a/Client/macos/Notch/HeadphonesTab.swift b/Client/macos/Notch/HeadphonesTab.swift index c0a64e2c..06cb5641 100644 --- a/Client/macos/Notch/HeadphonesTab.swift +++ b/Client/macos/Notch/HeadphonesTab.swift @@ -1,77 +1,88 @@ import AppKit import SwiftUI -// Notch tab: NC / Ambient / Off, ambient level and Focus on Voice (spec §4.2). It calls the same model methods -// as the menu, so the poll guard and the send throttle apply here too, and both stay in sync. +// Notch headphones page: NC / Ambient / Off, ambient level and Focus on Voice (spec §4.2). It calls the same +// model methods as the menu, so the poll guard and the send throttle apply here too, and both stay in sync. struct HeadphonesTab: View { @ObservedObject var model: HeadphonesModel + let back: () -> Void var body: some View { - switch model.connectionState { - case .connected: - controls - case .connecting: - Text(tr("Connecting…")).font(.system(size: 12)).foregroundColor(.gray).padding(.top, 16) - case .disconnected: - VStack(spacing: 10) { - Text(tr("Not connected")).font(.system(size: 12)).foregroundColor(.gray) - Button(tr("Connect…")) { - NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window - model.connect() + VStack(alignment: .leading, spacing: 12) { + HStack(spacing: 6) { + Button(action: back) { + Image(systemName: "chevron.left") + .font(.system(size: 13, weight: .semibold)) + .foregroundColor(.gray) + .frame(width: 24, height: 24) + .contentShape(Rectangle()) + } + .buttonStyle(PressableButtonStyle()) + .accessibilityLabel(tr("Back")) + Image(systemName: "headphones").font(.system(size: 13)).foregroundColor(.white) + Text(model.deviceName.isEmpty ? tr("Headphones") : model.deviceName) + .font(.system(size: 13, weight: .semibold)) + .foregroundColor(.white) + .lineLimit(1) + } + switch model.connectionState { + case .connected: + controls + case .connecting: + Text(tr("Connecting…")) + .font(.system(size: 12)) + .foregroundColor(.gray) + .frame(maxWidth: .infinity) + .padding(.top, 8) + case .disconnected: + HStack(spacing: 10) { + Text(tr("Not connected")).font(.system(size: 12)).foregroundColor(.gray) + NotchPillButton(title: tr("Connect…")) { + NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window + model.connect() + } } - .controlSize(.small) + .frame(maxWidth: .infinity) + .padding(.top, 8) } - .padding(.top, 16) } } private var controls: some View { let ambient = model.mode == .ambientSound - return VStack(spacing: 12) { + return VStack(spacing: 10) { ModePicker(selection: model.mode, select: { model.setMode($0) }) HStack(spacing: 8) { - Text(tr("Level")).font(.system(size: 12)) - Slider( - value: Binding(get: { Double(model.ambientLevel) }, - set: { model.setLevel(Int($0.rounded()), final: false) }), - in: 1...Double(max(model.maxAmbientLevel, 2)), - step: 1, - onEditingChanged: { editing in - if !editing { model.setLevel(model.ambientLevel, final: true) } - } - ) - .controlSize(.small) + Text(tr("Level")).font(.system(size: 12)).foregroundColor(.gray) + FlatSlider(value: Double(model.ambientLevel), range: 1...Double(max(model.maxAmbientLevel, 2)), + step: 1) { value, final in + model.setLevel(Int(value.rounded()), final: final) + } Text(verbatim: "\(model.ambientLevel)") .font(.system(size: 11, weight: .medium).monospacedDigit()) .foregroundColor(.gray) .frame(width: 20, alignment: .trailing) + Text(tr("Voice")).font(.system(size: 12)).foregroundColor(.gray).padding(.leading, 6) + NotchSwitch(isOn: model.focusOnVoice, label: tr("Focus on Voice")) { model.setFocusOnVoice($0) } } .disabled(!ambient) .opacity(ambient ? 1 : 0.4) - - HStack { - Text(tr("Focus on Voice")).font(.system(size: 12)) - Spacer() - Toggle("", isOn: Binding(get: { model.focusOnVoice }, set: { model.setFocusOnVoice($0) })) - .labelsHidden() - .toggleStyle(.switch) - .controlSize(.mini) - } - .disabled(!ambient) - .opacity(ambient ? 1 : 0.4) + .animation(.easeInOut(duration: 0.2), value: ambient) } } } // Segmented NC / Ambient / Off control drawn in SwiftUI. The AppKit segmented picker insists on its natural -// width, wider than the notch in French, and only shrank on the next model update (~2 s later). +// width, wider than the notch in French, and only shrank on the next model update (~2 s later). Short labels: +// the full ones ("Réduction de bruit") don't fit a third of the notch. private struct ModePicker: View { let selection: SHCAmbientMode let select: (SHCAmbientMode) -> Void + @Namespace private var pill private static var options: [(SHCAmbientMode, String)] { - [(.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off"))] + [(.noiseCanceling, tr("NC")), (.ambientSound, tr("Ambient")), (.off, tr("Off"))] } var body: some View { @@ -83,17 +94,24 @@ private struct ModePicker: View { .font(.system(size: 11, weight: selected ? .semibold : .regular)) .foregroundColor(selected ? .white : .gray) .lineLimit(1) - .minimumScaleFactor(0.8) .frame(maxWidth: .infinity) .padding(.vertical, 5) - .background(RoundedRectangle(cornerRadius: 6).fill(selected ? Color(white: 0.3) : Color.clear)) + .background { + if selected { + RoundedRectangle(cornerRadius: 6) + .fill(Color(white: 0.3)) + .matchedGeometryEffect(id: "pill", in: pill) + } + } .contentShape(Rectangle()) } - .buttonStyle(.plain) + .buttonStyle(PressableButtonStyle()) .accessibilityAddTraits(selected ? .isSelected : []) } } .padding(2) .background(RoundedRectangle(cornerRadius: 8).fill(Color(white: 0.15))) + // The selection comes back from the headset (menu, NC button), so animate on the value, not the click. + .animation(.spring(response: 0.3, dampingFraction: 0.8), value: selection) } } diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift new file mode 100644 index 00000000..7b6d4f5f --- /dev/null +++ b/Client/macos/Notch/MusicTab.swift @@ -0,0 +1,164 @@ +import SwiftUI + +// Notch player page (spec §4.2): artwork, title and artist; progress; headphones, previous, play/pause, next, +// shuffle. The volume button swaps the progress bar for Spotify's volume bar for a few seconds. +struct MusicTab: View { + private static let volumeAutoHide: TimeInterval = 4 + + @ObservedObject var music: MusicController + let showHeadphones: () -> Void + @State private var seekValue: Double? // while dragging the progress bar + @State private var volumeValue: Double? // while dragging the volume bar + @State private var showVolume = false + @State private var volumeHideWork: DispatchWorkItem? + + // Explicit: the private @State properties would otherwise make the memberwise init private. + init(music: MusicController, showHeadphones: @escaping () -> Void) { + _music = ObservedObject(wrappedValue: music) + self.showHeadphones = showHeadphones + } + + var body: some View { + switch music.status { + case .notRunning: + message(tr("Spotify isn't open"), button: tr("Open Spotify")) { music.launchPlayer() } + case .permissionDenied: + message(tr("SonyBridge isn't allowed to control Spotify."), button: tr("Open Settings")) { + music.openAutomationSettings() + } + case .ready: + if let track = music.nowPlaying { + player(track) + } else { + message(tr("Nothing playing"), button: nil) {} + } + } + } + + private func message(_ text: String, button: String?, action: @escaping () -> Void) -> some View { + VStack(spacing: 10) { + Text(text).font(.system(size: 12)).foregroundColor(.gray).multilineTextAlignment(.center) + if let button = button { + NotchPillButton(title: button, action: action) + } + Spacer(minLength: 0) + HStack { + iconButton("headphones", label: tr("Headphones"), action: showHeadphones) + Spacer() + } + } + .frame(maxWidth: .infinity) + .padding(.top, 6) + } + + private func player(_ track: NowPlaying) -> some View { + VStack(spacing: 0) { + HStack(spacing: 12) { + ArtworkView(image: music.artwork, size: 50, cornerRadius: 10) + VStack(alignment: .leading, spacing: 2) { + Text(track.title).font(.system(size: 14, weight: .semibold)).foregroundColor(.white) + Text(track.artist).font(.system(size: 13)).foregroundColor(.gray) + } + .lineLimit(1) + .id(track.trackID) + .transition(.asymmetric(insertion: .opacity.combined(with: .offset(y: 6)), removal: .opacity)) + Spacer(minLength: 6) + LevelBars(animating: track.isPlaying, color: music.artworkTint) + } + .animation(NotchMotion.content, value: track.trackID) + Spacer(minLength: 8) + ZStack { + progress(track) + .modifier(FadeScale(amount: showVolume ? 1 : 0)) + .allowsHitTesting(!showVolume) + volume(track) + .modifier(FadeScale(amount: showVolume ? 0 : 1)) + .allowsHitTesting(showVolume) + } + .animation(NotchMotion.content, value: showVolume) + Spacer(minLength: 6) + HStack(spacing: 0) { + iconButton("headphones", label: tr("Headphones"), action: showHeadphones) + Spacer() + iconButton("backward.fill", size: 17, color: .white, label: tr("Previous track")) { music.previous() } + Spacer() + iconButton(track.isPlaying ? "pause.fill" : "play.fill", size: 21, color: .white, + label: tr("Play or pause")) { music.playPause() } + .animation(NotchMotion.content, value: track.isPlaying) + Spacer() + iconButton("forward.fill", size: 17, color: .white, label: tr("Next track")) { music.next() } + Spacer() + iconButton("shuffle", color: track.isShuffling == true ? .white : .gray, label: tr("Shuffle")) { + music.toggleShuffle() + } + .disabled(track.isShuffling == nil) + Spacer() + iconButton(showVolume ? "speaker.wave.2.fill" : "speaker.wave.2", color: showVolume ? .white : .gray, + label: tr("Spotify volume")) { toggleVolume() } + .disabled(!track.capabilities.canSetVolume || track.volume == nil) + } + } + } + + // Redrawn once a second, only while the notch is open (this view only exists then). + private func progress(_ track: NowPlaying) -> some View { + TimelineView(.periodic(from: .now, by: 1)) { context in + let position = seekValue ?? PlaybackClock.position(of: track, at: context.date) + HStack(spacing: 8) { + timeLabel(PlaybackClock.format(position)) + FlatSlider(value: position, range: 0...max(track.duration, 1), smoothing: seekValue == nil) { value, final in + seekValue = final ? nil : value + music.seek(to: value, final: final) + } + .disabled(!track.capabilities.canSeek || track.duration <= 0) + timeLabel(PlaybackClock.format(track.duration)) + } + } + } + + private func volume(_ track: NowPlaying) -> some View { + HStack(spacing: 8) { + Image(systemName: "speaker.fill").font(.system(size: 10)).foregroundColor(.gray).frame(width: 34) + FlatSlider(value: volumeValue ?? Double(track.volume ?? 0), range: 0...100) { value, final in + volumeValue = final ? nil : value + music.setVolume(Int(value.rounded()), final: final) + scheduleVolumeHide() + } + Image(systemName: "speaker.wave.3.fill").font(.system(size: 10)).foregroundColor(.gray).frame(width: 34) + } + } + + private func timeLabel(_ text: String) -> some View { + Text(verbatim: text) + .font(.system(size: 11).monospacedDigit()) + .foregroundColor(.gray) + .frame(width: 34) + } + + private func iconButton(_ symbol: String, size: CGFloat = 14, color: Color = .gray, label: String, + action: @escaping () -> Void) -> some View { + Button(action: action) { + Image(systemName: symbol) + .font(.system(size: size)) + .foregroundColor(color) + .symbolReplaceTransition() + .frame(width: 28, height: 26) + .contentShape(Rectangle()) + } + .buttonStyle(PressableButtonStyle()) + .accessibilityLabel(label) + } + + private func toggleVolume() { + withAnimation(NotchMotion.content) { showVolume.toggle() } + if showVolume { scheduleVolumeHide() } else { volumeHideWork?.cancel() } + } + + // The volume bar folds back once it hasn't been touched for a few seconds. + private func scheduleVolumeHide() { + volumeHideWork?.cancel() + let work = DispatchWorkItem { withAnimation(NotchMotion.content) { showVolume = false } } + volumeHideWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + Self.volumeAutoHide, execute: work) + } +} diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index 0f9c8f59..c6ea9525 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -2,10 +2,15 @@ import AppKit import Combine import SwiftUI -// Owns the notch panel (spec §4.3): picks the screen, places and resizes the panel, opens it on hover and -// follows the "Show Notch" option. +// Owns the notch panel (spec §4.3): picks the screen, places the panel, opens it on hover and follows the +// "Show Notch" option. +// +// The panel always keeps the open size: only the SwiftUI shape inside animates. Resizing the window on open +// and close showed a frame of stale content at the new size (things jumped outward, then back). While +// closed, the panel lets every click through, and hover is followed from the pointer position instead of +// tracking areas. final class NotchController { - private static let shrinkDelay: TimeInterval = 0.35 // lets the closing animation end before the panel shrinks + private static let unmountDelay: TimeInterval = 0.4 // lets the closing spring settle first private let model: HeadphonesModel private let music: MusicController @@ -14,8 +19,11 @@ final class NotchController { private let panel = NotchPanel.make() private var geometry: NotchGeometry? private var lastChosenTab: NotchTab? + private var pointerInside = false private var hoverTimer: Timer? - private var shrinkWork: DispatchWorkItem? + private var hideWork: DispatchWorkItem? + private var unmountWork: DispatchWorkItem? + private var mouseMonitors: [Any] = [] private var cancellables = Set() init(model: HeadphonesModel, music: MusicController, settings: AppSettings) { @@ -28,8 +36,23 @@ final class NotchController { selectTab: { [weak self] tab in self?.select(tab) })) host.autoresizingMask = [.width, .height] container.addSubview(host) - container.onHoverChange = { [weak self] in self?.scheduleHoverCheck() } + container.onHoverChange = { [weak self] in self?.pointerMoved() } panel.contentView = container + panel.acceptsMouseMovedEvents = true + panel.ignoresMouseEvents = true + + // Global: the pointer over other apps (the notch is closed, the panel ignores the mouse). Local: over + // our own windows, the open panel included. + let events: NSEvent.EventTypeMask = [.mouseMoved, .leftMouseDragged] + if let global = NSEvent.addGlobalMonitorForEvents(matching: events, handler: { [weak self] _ in self?.pointerMoved() }) { + mouseMonitors.append(global) + } + if let local = NSEvent.addLocalMonitorForEvents(matching: events, handler: { [weak self] event in + self?.pointerMoved() + return event + }) { + mouseMonitors.append(local) + } NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification) .receive(on: DispatchQueue.main) @@ -46,6 +69,10 @@ final class NotchController { .store(in: &cancellables) } + deinit { + mouseMonitors.forEach(NSEvent.removeMonitor) + } + // MARK: - Placement private func relayout() { @@ -55,7 +82,10 @@ final class NotchController { state.isOpen = false music.notchDidClose() } - shrinkWork?.cancel() + unmountWork?.cancel() + state.openContentMounted = false + panel.ignoresMouseEvents = true + hideWork?.cancel() panel.orderOut(nil) return } @@ -63,7 +93,7 @@ final class NotchController { self.geometry = geometry state.notchHeight = geometry.notch.height state.openSize = geometry.open.size - if state.isOpen { panel.setFrame(geometry.open, display: true) } + panel.setFrame(geometry.open, display: true) updateResting() } @@ -77,48 +107,34 @@ final class NotchController { let resting = NotchContent.restingState(hasMusic: music.hasMusic, headphonesConnected: model.connected) let frame = geometry.restingFrame(for: resting) if state.resting != resting || (frame != nil && state.restingSize != frame?.size) { - withAnimation(animation) { + withAnimation(state.isOpen ? NotchMotion.open : NotchMotion.close) { state.resting = resting if let frame = frame { state.restingSize = frame.size } } } - guard !state.isOpen else { return } // close() re-applies the resting frame - if let frame = frame { - setPanelFrame(frame) + hideWork?.cancel() + if frame != nil || state.isOpen { panel.orderFrontRegardless() - } else { - hidePanel(after: panel.isVisible ? Self.shrinkDelay : 0) - } - } - - // Grows at once (the shape then animates inside the larger panel) or shrinks once the animation is over, - // so the transparent panel never blocks the menu bar longer than needed. - private func setPanelFrame(_ target: CGRect) { - shrinkWork?.cancel() - let current = panel.frame - if !panel.isVisible || (target.width >= current.width && target.height >= current.height) { - panel.setFrame(target, display: true) - } else { - let work = DispatchWorkItem { [weak self] in self?.panel.setFrame(target, display: true) } - shrinkWork = work - DispatchQueue.main.asyncAfter(deadline: .now() + Self.shrinkDelay, execute: work) + } else if panel.isVisible { + // Nothing to show on a screen without a notch: hide once the shape has shrunk away. + let work = DispatchWorkItem { [weak self] in + guard let self = self, !self.state.isOpen else { return } + self.panel.orderOut(nil) + } + hideWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + Self.unmountDelay, execute: work) } } - private func hidePanel(after delay: TimeInterval) { - shrinkWork?.cancel() - let work = DispatchWorkItem { [weak self] in self?.panel.orderOut(nil) } - shrinkWork = work - DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: work) - } - // MARK: - Hover - // Enter/exit events only schedule a check; the check reads the real pointer position, so a missed event - // can't leave the notch stuck open or closed. - private func scheduleHoverCheck() { + // Only a change of side (in / out) starts the timer, so moving inside doesn't keep postponing the opening; + // the timer then reads the real pointer position, so a missed event can't leave the notch stuck. + private func pointerMoved() { + let inside = isPointerInHoverZone + guard inside != pointerInside else { return } + pointerInside = inside hoverTimer?.invalidate() - let inside = hoverZone.contains(NSEvent.mouseLocation) let delay = inside ? NotchContent.openDelay : NotchContent.closeDelay let timer = Timer(timeInterval: delay, repeats: false) { [weak self] _ in self?.hoverCheck() } RunLoop.main.add(timer, forMode: .common) @@ -126,7 +142,8 @@ final class NotchController { } private func hoverCheck() { - let inside = panel.isVisible && hoverZone.contains(NSEvent.mouseLocation) + let inside = isPointerInHoverZone + pointerInside = inside if inside && !state.isOpen { open() } else if !inside && state.isOpen { @@ -134,36 +151,41 @@ final class NotchController { } } - private var hoverZone: CGRect { - guard let geometry = geometry else { return .zero } - return state.isOpen ? geometry.open : (geometry.restingFrame(for: state.resting) ?? .zero) + private var isPointerInHoverZone: Bool { + guard panel.isVisible, let geometry = geometry else { return false } + let zone = state.isOpen ? geometry.open : (geometry.restingFrame(for: state.resting) ?? .zero) + return zone.contains(NSEvent.mouseLocation) } private func open() { - guard let geometry = geometry else { return } - state.tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) - setPanelFrame(geometry.open) + unmountWork?.cancel() + hideWork?.cancel() + if !state.openContentMounted { state.tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) } + state.openContentMounted = true + panel.ignoresMouseEvents = false panel.orderFrontRegardless() - withAnimation(animation) { state.isOpen = true } + withAnimation(NotchMotion.open) { state.isOpen = true } music.notchDidOpen() } private func close() { - withAnimation(animation) { state.isOpen = false } + panel.ignoresMouseEvents = true // clicks reach the apps below while the shape shrinks + withAnimation(NotchMotion.close) { state.isOpen = false } music.notchDidClose() updateResting() + // The open content shrinks and fades with the shape (it stays mounted while closing), then leaves the + // hierarchy so its timelines stop. + let work = DispatchWorkItem { [weak self] in + guard let self = self, !self.state.isOpen else { return } + self.state.openContentMounted = false + } + unmountWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + Self.unmountDelay, execute: work) } private func select(_ tab: NotchTab) { lastChosenTab = tab - state.tab = tab - } - - // Spring, or a short fade-like ease when "Reduce motion" is on. - private var animation: Animation { - NSWorkspace.shared.accessibilityDisplayShouldReduceMotion - ? .easeInOut(duration: 0.15) - : .spring(response: 0.35, dampingFraction: 0.82) + withAnimation(NotchMotion.content) { state.tab = tab } } } diff --git a/Client/macos/Notch/NotchControls.swift b/Client/macos/Notch/NotchControls.swift new file mode 100644 index 00000000..c9e06f06 --- /dev/null +++ b/Client/macos/Notch/NotchControls.swift @@ -0,0 +1,50 @@ +import SwiftUI + +// Controls drawn in SwiftUI for the notch. The AppKit-backed ones (Toggle .switch, bordered Button, segmented +// Picker) are separate views that ignore SwiftUI's scale and clip: while the notch closed, they stayed full +// size past the shrinking shape. + +// A small on/off switch. +struct NotchSwitch: View { + let isOn: Bool + let label: String + let set: (Bool) -> Void + + @Environment(\.isEnabled) private var isEnabled + + var body: some View { + Button { set(!isOn) } label: { + ZStack(alignment: isOn ? .trailing : .leading) { + Capsule().fill(isOn ? Color.green : Color(white: 0.3)) + Circle().fill(Color.white).padding(2) + } + .frame(width: 30, height: 18) + .animation(.spring(response: 0.25, dampingFraction: 0.8), value: isOn) + } + .buttonStyle(PressableButtonStyle()) + .opacity(isEnabled ? 1 : 0.5) + .accessibilityLabel(label) + .accessibilityValue(isOn ? Text(verbatim: "1") : Text(verbatim: "0")) + .accessibilityAddTraits(.isButton) + } +} + +// A rounded grey text button ("Connect…", "Open Spotify"). +struct NotchPillButton: View { + let title: String + let action: () -> Void + + var body: some View { + Button(action: action) { + Text(title) + .font(.system(size: 12, weight: .medium)) + .foregroundColor(.white) + .lineLimit(1) + .padding(.horizontal, 12) + .padding(.vertical, 5) + .background(Capsule().fill(Color(white: 0.22))) + .contentShape(Capsule()) + } + .buttonStyle(PressableButtonStyle()) + } +} diff --git a/Client/macos/Notch/NotchGeometry.swift b/Client/macos/Notch/NotchGeometry.swift index baa4802f..24c6d6b4 100644 --- a/Client/macos/Notch/NotchGeometry.swift +++ b/Client/macos/Notch/NotchGeometry.swift @@ -16,7 +16,7 @@ struct NotchGeometry: Equatable { static let sideExtension: CGFloat = 36 // resting widening on each side (states 1-3) static let simulatedWidth: CGFloat = 190 // pill width on a screen without a notch static let fallbackMenuBarHeight: CGFloat = 24 // pill height when the menu bar auto-hides - static let openSize = CGSize(width: 380, height: 190) + static let openSize = CGSize(width: 300, height: 166) let hasNotch: Bool let notch: CGRect diff --git a/Client/macos/Notch/NotchMotion.swift b/Client/macos/Notch/NotchMotion.swift new file mode 100644 index 00000000..f9795df2 --- /dev/null +++ b/Client/macos/Notch/NotchMotion.swift @@ -0,0 +1,63 @@ +import AppKit +import SwiftUI + +// Shared motion for the notch: springs, how content follows the shape, and button press feedback. +// With "Reduce motion" on, springs become short eases and nothing scales or moves. +enum NotchMotion { + static var reduceMotion: Bool { NSWorkspace.shared.accessibilityDisplayShouldReduceMotion } + + static var open: Animation { reduceMotion ? .easeInOut(duration: 0.15) : .spring(response: 0.36, dampingFraction: 0.74) } + static var close: Animation { reduceMotion ? .easeInOut(duration: 0.15) : .spring(response: 0.28, dampingFraction: 1) } + static var content: Animation { reduceMotion ? .easeInOut(duration: 0.15) : .spring(response: 0.3, dampingFraction: 0.85) } + + static let morphScale: CGFloat = 0.6 + + // The open panel's content grows out of the notch with the shape (same spring, no delay), instead of + // popping in after it: video at 60 fps showed a blurred panel appearing ~6 frames late. Closing is driven + // by NotchView (FadeScale on isOpen), and the content is unmounted once the shape has shrunk. + static var morph: AnyTransition { + .asymmetric( + insertion: .modifier(active: FadeScale(amount: 1, scale: morphScale), identity: FadeScale(amount: 0, scale: morphScale)), + removal: .identity) + } + + // The resting icons leave at once when the shape grows, and come back once it has shrunk. + static func resting(open: Bool) -> Animation { + open ? .easeOut(duration: 0.06) : .easeOut(duration: 0.2).delay(reduceMotion ? 0 : 0.12) + } +} + +// amount 0 = shown; 1 = transparent and scaled down to `scale` (anchored at the top, towards the notch). +// Opacity and transforms only: cheap to animate at 120 Hz, unlike blur. +struct FadeScale: ViewModifier { + let amount: CGFloat + var scale: CGFloat = 0.94 + + func body(content: Content) -> some View { + let motion = !NotchMotion.reduceMotion + return content + .opacity(Double(1 - amount)) + .scaleEffect(motion ? 1 - (1 - scale) * amount : 1, anchor: .top) + } +} + +// Buttons shrink a little while pressed, and spring back. +struct PressableButtonStyle: ButtonStyle { + func makeBody(configuration: Configuration) -> some View { + configuration.label + .scaleEffect(configuration.isPressed && !NotchMotion.reduceMotion ? 0.84 : 1) + .opacity(configuration.isPressed ? 0.7 : 1) + .animation(.spring(response: 0.25, dampingFraction: 0.6), value: configuration.isPressed) + } +} + +extension View { + // SF Symbol swaps (play ↔ pause) morph on macOS 14+; older systems cross-fade. + @ViewBuilder func symbolReplaceTransition() -> some View { + if #available(macOS 14.0, *) { + contentTransition(.symbolEffect(.replace)) + } else { + self + } + } +} diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 456f8acb..303b3181 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -4,6 +4,7 @@ import SwiftUI // Written by NotchController, read by NotchView. final class NotchViewState: ObservableObject { @Published var isOpen = false + @Published var openContentMounted = false // true while open, and while the closing animation plays @Published var resting: NotchRestingState = .empty @Published var tab: NotchTab = .music @Published var restingSize: CGSize = .zero @@ -11,32 +12,41 @@ final class NotchViewState: ObservableObject { @Published var notchHeight: CGFloat = 32 } -// Square top (it merges with the notch), rounded bottom corners. +// Merges with the notch: the top corners flare out into the menu bar (concave, `topRadius` wide on each side, +// inside the rect), the bottom corners are rounded. struct NotchShape: Shape { + var topRadius: CGFloat var bottomRadius: CGFloat - var animatableData: CGFloat { - get { bottomRadius } - set { bottomRadius = newValue } + var animatableData: AnimatablePair { + get { AnimatablePair(topRadius, bottomRadius) } + set { (topRadius, bottomRadius) = (newValue.first, newValue.second) } } func path(in rect: CGRect) -> Path { - let radius = min(bottomRadius, rect.width / 2, rect.height) + let top = min(topRadius, rect.width / 4, rect.height / 2) + let body = rect.insetBy(dx: top, dy: 0) + let bottom = min(bottomRadius, body.width / 2, rect.height - top) var path = Path() path.move(to: CGPoint(x: rect.minX, y: rect.minY)) path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY)) - path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY - radius)) - path.addQuadCurve(to: CGPoint(x: rect.maxX - radius, y: rect.maxY), control: CGPoint(x: rect.maxX, y: rect.maxY)) - path.addLine(to: CGPoint(x: rect.minX + radius, y: rect.maxY)) - path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.maxY - radius), control: CGPoint(x: rect.minX, y: rect.maxY)) + path.addQuadCurve(to: CGPoint(x: body.maxX, y: rect.minY + top), control: CGPoint(x: body.maxX, y: rect.minY)) + path.addLine(to: CGPoint(x: body.maxX, y: rect.maxY - bottom)) + path.addQuadCurve(to: CGPoint(x: body.maxX - bottom, y: rect.maxY), control: CGPoint(x: body.maxX, y: rect.maxY)) + path.addLine(to: CGPoint(x: body.minX + bottom, y: rect.maxY)) + path.addQuadCurve(to: CGPoint(x: body.minX, y: rect.maxY - bottom), control: CGPoint(x: body.minX, y: rect.maxY)) + path.addLine(to: CGPoint(x: body.minX, y: rect.minY + top)) + path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.minY), control: CGPoint(x: body.minX, y: rect.minY)) path.closeSubpath() return path } } -// Root view of the notch panel (spec §4): the resting strip, or the open panel with its two tabs. The panel +// Root view of the notch panel (spec §4): the resting strip, or the open panel (player or headphones page). The panel // can be larger than the shape while it animates; the shape stays centred at the top. struct NotchView: View { + static let openFlare: CGFloat = 10 + @ObservedObject var state: NotchViewState @ObservedObject var model: HeadphonesModel @ObservedObject var music: MusicController @@ -44,22 +54,31 @@ struct NotchView: View { var body: some View { let size = state.isOpen ? state.openSize : state.restingSize + let shape = NotchShape(topRadius: state.isOpen ? Self.openFlare : 0, bottomRadius: state.isOpen ? 24 : 10) ZStack(alignment: .top) { - NotchShape(bottomRadius: state.isOpen ? 22 : 10).fill(Color.black) - if state.isOpen { + shape.fill(Color.black) + if state.openContentMounted { // Laid out at the final size and clipped by the growing shape, so text never reflows (or spills - // past the edges) while the spring animates. + // past the edges) while the spring animates. Grows in with a transition; shrinks out through the + // modifier below, since SwiftUI skipped the removal transition (content vanished at once). openContent .padding(.top, state.notchHeight) .frame(width: state.openSize.width, height: state.openSize.height) - .transition(.opacity) - } else { - restingContent - .transition(.opacity) + .modifier(FadeScale(amount: state.isOpen ? 0 : 1, scale: NotchMotion.morphScale)) + .allowsHitTesting(state.isOpen) + .transition(NotchMotion.morph) } + // Always mounted and faded on isOpen: an inserted resting strip (transition) didn't come back after + // a close while the open content was still mounted. + restingContent + .opacity(state.isOpen ? 0 : 1) + .animation(NotchMotion.resting(open: state.isOpen), value: state.isOpen) + .allowsHitTesting(!state.isOpen) } - .frame(width: size.width, height: size.height) - .clipShape(NotchShape(bottomRadius: state.isOpen ? 22 : 10)) + // Top-aligned: the open content is taller than the shape while it grows, and the default (centred) + // alignment pushed it up past the top of the screen, then slid it down — the bar seemed to jump. + .frame(width: size.width, height: size.height, alignment: .top) + .clipShape(shape) .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) .environment(\.colorScheme, .dark) } @@ -72,7 +91,9 @@ struct NotchView: View { Spacer(minLength: 0) trailingItem.frame(width: NotchGeometry.sideExtension) } - .frame(height: state.notchHeight) + // Explicit width: while the (wider) open content is still mounted during a close, the strip otherwise + // took the open width, so the artwork and mode icon sat outside the shape (cut off), then jumped back. + .frame(width: state.restingSize.width, height: state.notchHeight) } @ViewBuilder private var leadingItem: some View { @@ -91,7 +112,7 @@ struct NotchView: View { case .musicAndHeadphones, .headphonesOnly: Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13)).foregroundColor(.white) case .musicOnly: - LevelBars(animating: music.nowPlaying?.isPlaying == true) + LevelBars(animating: music.nowPlaying?.isPlaying == true, color: music.artworkTint) case .empty: EmptyView() } @@ -108,50 +129,26 @@ struct NotchView: View { // MARK: - Open (spec §4.2) private var openContent: some View { - VStack(spacing: 10) { - tabBar - tabContent.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) - } - .padding(.horizontal, 18) - .padding(.bottom, 14) - } - - private var tabBar: some View { - HStack(spacing: 18) { - tabButton(.music, title: tr("Music")) - tabButton(.headphones, title: tr("Headphones")) - } - .padding(.top, 6) - } - - private func tabButton(_ tab: NotchTab, title: String) -> some View { - let selected = state.tab == tab - return Button { selectTab(tab) } label: { - Text(title) - .font(.system(size: 12, weight: selected ? .semibold : .regular)) - .foregroundColor(selected ? .white : .gray) - .padding(.bottom, 3) - .overlay(alignment: .bottom) { - if selected { Rectangle().fill(Color.white).frame(height: 2) } - } - } - .buttonStyle(.plain) - } - - // Both tabs stay in the hierarchy: the menu-style controls (segmented picker, slider, switch) are AppKit - // views that appear at their natural width for a frame before SwiftUI sizes them, so inserting a tab on - // each switch made its content spill past the edges. - private var tabContent: some View { + // Both pages stay in the hierarchy (switching is then a cross-slide, not an insertion), the hidden one + // neither drawn, clickable nor read by VoiceOver. ZStack(alignment: .top) { - tabPage(.music) { Spacer() } // Task 6: MusicTab - tabPage(.headphones) { HeadphonesTab(model: model) } + page(.music) { MusicTab(music: music, showHeadphones: { selectTab(.headphones) }) } + page(.headphones) { HeadphonesTab(model: model, back: { selectTab(.music) }) } } + .padding(.top, 8) + .padding(.horizontal, Self.openFlare + 16) + .padding(.bottom, 14) } - private func tabPage(_ tab: NotchTab, @ViewBuilder content: () -> Content) -> some View { + // The player slides off to the left, the headphones page comes in from the right (and back). No blur: it + // made each frame of the switch expensive. + private func page(_ tab: NotchTab, @ViewBuilder content: () -> Content) -> some View { let selected = state.tab == tab + let motion = !NotchMotion.reduceMotion return content() .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) + .scaleEffect(selected || !motion ? 1 : 0.96) + .offset(x: selected || !motion ? 0 : (tab == .music ? -24 : 24)) .opacity(selected ? 1 : 0) .allowsHitTesting(selected) .accessibilityHidden(!selected) @@ -168,6 +165,8 @@ struct ArtworkView: View { Group { if let image = image { Image(nsImage: image).resizable().aspectRatio(contentMode: .fill) + .id(ObjectIdentifier(image)) + .transition(.opacity) } else { ZStack { Color(white: 0.2) @@ -177,24 +176,27 @@ struct ArtworkView: View { } .frame(width: size, height: size) .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) + .animation(.easeInOut(duration: 0.3), value: image.map(ObjectIdentifier.init)) } } -// Four small bars, moving while music plays (resting state 2), frozen when paused. +// Four small bars in the artwork's colour, moving while music plays, frozen when paused. struct LevelBars: View { let animating: Bool + var color: NSColor? var body: some View { - TimelineView(.animation(minimumInterval: 1.0 / 20, paused: !animating)) { context in + TimelineView(.animation(minimumInterval: 1.0 / 30, paused: !animating)) { context in let time = context.date.timeIntervalSinceReferenceDate HStack(alignment: .bottom, spacing: 2) { ForEach(0..<4, id: \.self) { index in Capsule() - .fill(Color.green) + .fill(color.map(Color.init(nsColor:)) ?? Color(white: 0.85)) .frame(width: 3, height: animating ? 4 + 10 * abs(sin(time * 3 + Double(index) * 1.3)) : 4) } } .frame(height: 14, alignment: .bottom) + .animation(.easeOut(duration: 0.3), value: animating) } } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index fb0e5df8..e797f057 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -60,6 +60,19 @@ "Couldn't open the control channel." = "Impossible d’ouvrir le canal de contrôle."; /* Notch (Notch/*.swift) */ -"Music" = "Musique"; "Headphones" = "Casque"; "Level" = "Niveau"; +"Spotify isn't open" = "Spotify n’est pas ouvert"; +"Open Spotify" = "Ouvrir Spotify"; +"SonyBridge isn't allowed to control Spotify." = "SonyBridge n’a pas l’autorisation de contrôler Spotify."; +"Open Settings" = "Ouvrir les réglages"; +"Nothing playing" = "Rien en cours de lecture"; +"Previous track" = "Morceau précédent"; +"Play or pause" = "Lecture ou pause"; +"Next track" = "Morceau suivant"; +"Shuffle" = "Lecture aléatoire"; +"Spotify volume" = "Volume de Spotify"; +"Back" = "Retour"; +"Voice" = "Voix"; +"NC" = "Réduction"; +"Ambient" = "Ambiant"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 727d5131..a218394b 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -50,7 +50,7 @@ do { check(geometry.hasNotch, "notched screen detected") check(geometry.notch == CGRect(x: 662, y: 950, width: 188, height: 32), "notch rect was \(geometry.notch)") check(geometry.extended == CGRect(x: 626, y: 950, width: 260, height: 32), "extended rect was \(geometry.extended)") - check(geometry.open == CGRect(x: 566, y: 792, width: 380, height: 190), "open rect was \(geometry.open)") + check(geometry.open == CGRect(x: 606, y: 816, width: 300, height: 166), "open rect was \(geometry.open)") check(geometry.restingFrame(for: .empty) == geometry.notch, "empty state: bare notch") check(geometry.restingFrame(for: .musicOnly) == geometry.extended, "music: extended notch") } @@ -90,7 +90,7 @@ do { let t0 = Date(timeIntervalSince1970: 1_000) var track = NowPlaying(trackID: "spotify:track:1", title: "A", artist: "B", album: "C", artworkURL: nil, duration: 200, position: 30, positionDate: t0, isPlaying: true, volume: 50, - deviceName: nil, + isShuffling: nil, deviceName: nil, capabilities: MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false)) check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 42, "playing: advances") check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 200, "bounded by the duration") @@ -102,7 +102,7 @@ do { check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 530, "unknown duration: not bounded") let nextTrack = NowPlaying(trackID: "spotify:track:2", title: "D", artist: "E", album: "F", artworkURL: nil, duration: 180, position: 0, positionDate: t0.addingTimeInterval(100), isPlaying: true, - volume: 50, deviceName: nil, capabilities: track.capabilities) + volume: 50, isShuffling: nil, deviceName: nil, capabilities: track.capabilities) check(PlaybackClock.position(of: nextTrack, at: t0.addingTimeInterval(100)) == 0, "track change: starts from 0") check(PlaybackClock.format(65) == "1:05", "format 1:05 was \(PlaybackClock.format(65))") check(PlaybackClock.format(754.9) == "12:34", "format rounds down") @@ -120,7 +120,8 @@ do { if case .track(let track) = SpotifyPlaybackInfo.parse(signal: signal, at: t0) { check(track.trackID == "spotify:track:42" && track.title == "Midnight City" && track.artist == "M83", "signal: names") check(track.duration == 243 && track.position == 12.5 && track.positionDate == t0 && track.isPlaying, "signal: timing") - check(track.artworkURL == nil && track.volume == nil && track.deviceName == nil, "signal: no artwork or volume, this Mac") + check(track.artworkURL == nil && track.volume == nil && track.isShuffling == nil && track.deviceName == nil, + "signal: no artwork, volume or shuffle, this Mac") check(track.capabilities == SpotifyPlaybackInfo.localCapabilities, "signal: local capabilities") } else { check(false, "signal with full info decodes to a track") @@ -143,22 +144,30 @@ do { let t0 = Date(timeIntervalSince1970: 1_000) let sep = "\u{1F}" let text = ["paused", "spotify:track:7", "Title", "Artist", "Album", "180000", "61500", - "https://i.scdn.co/image/ab", "70"].joined(separator: sep) + "https://i.scdn.co/image/ab", "70", "true"].joined(separator: sep) if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: text, at: t0) { check(!track.isPlaying && track.duration == 180 && track.position == 61.5, "script: timing") check(track.artworkURL == URL(string: "https://i.scdn.co/image/ab") && track.volume == 70, "script: artwork and volume") + check(track.isShuffling == true, "script: shuffle on") check(track.title == "Title" && track.album == "Album" && track.positionDate == t0, "script: names") } else { check(false, "script result decodes to a track") } - let local = ["playing", "spotify:local:x", "T", "", "", "1000", "0", "", "101"].joined(separator: sep) + let local = ["playing", "spotify:local:x", "T", "", "", "1000", "0", "", "101", "false"].joined(separator: sep) if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: local, at: t0) { check(track.artworkURL == nil && track.volume == 100 && track.artist.isEmpty, "script: empty fields, volume clamped") + check(track.isShuffling == false, "script: shuffle off") } else { check(false, "script result with empty fields decodes to a track") } check(SpotifyPlaybackInfo.parse(scriptResult: "stopped", at: t0) == .stopped, "script: stopped") check(SpotifyPlaybackInfo.parse(scriptResult: "garbage", at: t0) == .incomplete, "script: malformed") + let unknownShuffle = ["playing", "spotify:track:8", "T", "A", "B", "1000", "0", "", "50", "?"].joined(separator: sep) + if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: unknownShuffle, at: t0) { + check(track.isShuffling == nil, "script: unreadable shuffle is unknown") + } else { + check(false, "script result with an unreadable shuffle decodes to a track") + } } if failures > 0 { diff --git a/README.md b/README.md index 86e7ac97..db26a7d5 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,9 @@ menu bar app, built with AppKit/SwiftUI. - 🎚️ **Ambient Sound Control** — Noise Cancelling · Ambient Sound (with a 1–20 level slider (1–19 on older models) and a Focus on Voice switch) · Off - 🔄 **Live button sync** — following the headset's own NC button live, even while the menu is open +**Notch** +- 🏝️ **Notch panel** — hover the MacBook notch (or a black pill at the top of screens without one) to control the music playing in **Spotify** (artwork, play/pause, previous/next, seek, shuffle, volume) and, behind its headphones button, switch Noise Cancelling / Ambient Sound / Off. Turn it off with **Show Notch** under **SonyBridge Options** + **Equalizer** - 🎛️ **Equalizer** — presets *and* a **Manual mode** with vertical sliders (5 bands + Clear Bass on older models). The **WH-1000XM6**'s 10-band equalizer is read and displayed; changing the equalizer (presets and Manual) is coming in a later update — its write format isn't verified yet, so the presets and sliders are greyed out with a "coming soon" note @@ -84,6 +87,9 @@ make install > 💡 On first launch, macOS asks for **Bluetooth permission** — allow it, otherwise SonyBridge can't > talk to your headphones. Pair and connect your headphones in macOS **Bluetooth settings** first. +> +> 🎵 With the notch on, macOS also asks whether SonyBridge may **control Spotify** — allow it to see and +> control your music from the notch (Spotify's own desktop app, no account needed). **To update:** pull the latest changes and run `make install` again. @@ -103,7 +109,8 @@ From the menu you can: - toggle **DSEE**, **Speak-to-Chat**, and **Adaptive Volume** (only the ones your model supports); - set **Auto Power-Off**; - check the battery level in the menu's header, and the firmware, codec and protocol under **About the Headphones**; -- turn **Launch at Login**, **Connect Automatically**, and **Reconnect Automatically** on or off under **SonyBridge Options**; +- hover the **notch** to control Spotify and switch sound modes without opening the menu; +- turn **Launch at Login**, **Connect Automatically**, **Reconnect Automatically**, and **Show Notch** on or off under **SonyBridge Options**; - **Disconnect** (SonyBridge then stays disconnected until you click **Connect…** again or — with **Connect Automatically** on — the headset reconnects to your Mac) or **Quit SonyBridge** (⌘Q). ## 🎧 Supported headphones diff --git a/docs/superpowers/specs/2026-09-11-notch-design.md b/docs/superpowers/specs/2026-09-11-notch-design.md index 54cea139..93cdb087 100644 --- a/docs/superpowers/specs/2026-09-11-notch-design.md +++ b/docs/superpowers/specs/2026-09-11-notch-design.md @@ -276,3 +276,25 @@ Sources : [quotas Spotify](https://developer.spotify.com/documentation/web-api/c 3. Onglet Casque branché sur `HeadphonesModel` + option « Afficher l'encoche ». 4. Source Spotify locale + `MusicController` + onglet Musique + autorisations. 5. États au repos complets, animations, vérification visuelle et matérielle. + +## 12. Changements pendant l'implémentation (2026-09-17) + +Décidés avec l'utilisateur sur l'app en marche ; ils remplacent §4.2 et une partie de §4.3. + +- **Plus d'onglets.** L'encoche ouverte est un lecteur façon « Dynamic Island » (maquette fournie par + l'utilisateur) : pochette, titre, artiste et petites barres à la couleur de la pochette ; temps écoulé, barre + plate, durée totale ; boutons 🎧 ⏮ ⏯ ⏭ 🔀 🔊. 🎧 fait glisser le lecteur vers le panneau Casque (‹ retour) ; + 🔊 remplace la progression par la barre de volume Spotify, repliée après 4 s sans action. Le lecteur + s'ouvre sur la page choisie en dernier (première ouverture : Musique s'il y a une musique, sinon Casque). +- **Lecture aléatoire** : `shuffling` lu par `readState` (10ᵉ champ, `NowPlaying.isShuffling`) et basculé + par `set shuffling to …`. « J'aime » n'existe pas en local (étape 2). +- **Taille ouverte 300 × 166 pt** ; coins du haut évasés vers la barre des menus. +- **Aucun contrôle AppKit dans l'encoche** (sélecteur segmenté, `Slider`, `Toggle`, bouton bordé) : ils + ignorent l'échelle et le découpage SwiftUI et débordaient à l'ouverture, au changement de page et à la + fermeture. Remplacés par `ModePicker`, `FlatSlider`, `NotchSwitch`, `NotchPillButton`. +- **Fenêtre de taille fixe** : le panneau garde la taille ouverte, seule la forme s'anime ; fermé, il laisse + passer les clics (`ignoresMouseEvents`) et le survol suit la position du pointeur (moniteurs d'événements + global et local). Redimensionner la fenêtre affichait une image de contenu décalé. +- **Animations** (`NotchMotion`) : le contenu grandit et rétrécit avec la forme (même ressort, sans flou) ; + il reste monté pendant la fermeture puis est retiré ; la bande du repos a une largeur fixe et revient en + fondu. Vérifié par captures d'écran à 60/120 images par seconde. From e6d70d4377606da5da59ef6cca5b5baf4a0b0f78 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 13:44:13 +0200 Subject: [PATCH 27/50] feat(notch): resting music control, notch size options, rewritten README --- Client/macos/AppSettings.swift | 42 +++- Client/macos/HeadphonesMenu.swift | 39 ++++ Client/macos/MenuRows/NotchSizeRow.swift | 28 +++ Client/macos/Notch/FlatSlider.swift | 5 +- Client/macos/Notch/HeadphonesTab.swift | 48 ++--- Client/macos/Notch/MusicTab.swift | 53 +++-- Client/macos/Notch/NotchController.swift | 94 ++++++++- Client/macos/Notch/NotchControls.swift | 12 +- Client/macos/Notch/NotchGeometry.swift | 64 +++++- Client/macos/Notch/NotchMotion.swift | 12 ++ Client/macos/Notch/NotchView.swift | 67 ++++-- Client/macos/fr.lproj/Localizable.strings | 7 + Client/tests/LogicTests/main.swift | 30 +++ README.md | 240 ++++++++++------------ 14 files changed, 526 insertions(+), 215 deletions(-) create mode 100644 Client/macos/MenuRows/NotchSizeRow.swift diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index afbd71ec..2214b651 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -8,6 +8,11 @@ final class AppSettings: ObservableObject { static let autoReconnect = "autoReconnect" static let lastDeviceAddress = "lastDeviceAddress" static let showNotch = "showNotch" + static let notchWidth = "notchOpenWidth" + static let notchHeight = "notchOpenHeight" + static let notchSide = "notchSideWidth" + static let notchZoom = "notchZoom" + static let notchArtwork = "notchRestingArtwork" } private let defaults: UserDefaults @@ -23,6 +28,21 @@ final class AppSettings: ObservableObject { } @Published private(set) var launchAtLogin: Bool + // Notch Size submenu. Stored as the user set them; NotchLayout clamps. + @Published var notchWidth: Double { didSet { defaults.set(notchWidth, forKey: Keys.notchWidth) } } + @Published var notchHeight: Double { didSet { defaults.set(notchHeight, forKey: Keys.notchHeight) } } + @Published var notchSideWidth: Double { didSet { defaults.set(notchSideWidth, forKey: Keys.notchSide) } } + @Published var notchZoom: Double { didSet { defaults.set(notchZoom, forKey: Keys.notchZoom) } } + @Published var notchArtwork: Double { didSet { defaults.set(notchArtwork, forKey: Keys.notchArtwork) } } + // True while the Notch Size submenu is open: the notch stays open as a live preview. Not persisted. + @Published var notchPreviewing = false + + var notchLayout: NotchLayout { + NotchLayout(openSize: CGSize(width: notchWidth, height: notchHeight), + sideExtension: CGFloat(notchSideWidth), zoom: CGFloat(notchZoom), + restingArtwork: CGFloat(notchArtwork)) + } + var lastDeviceAddress: String? { get { defaults.string(forKey: Keys.lastDeviceAddress) } set { defaults.set(newValue, forKey: Keys.lastDeviceAddress) } @@ -32,13 +52,33 @@ final class AppSettings: ObservableObject { self.defaults = defaults // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. // Notch spec §7: the notch is shown by default. - defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true, Keys.showNotch: true]) + let layout = NotchLayout.default + defaults.register(defaults: [ + Keys.autoConnect: true, Keys.autoReconnect: true, Keys.showNotch: true, + Keys.notchWidth: Double(layout.openSize.width), Keys.notchHeight: Double(layout.openSize.height), + Keys.notchSide: Double(layout.sideExtension), Keys.notchZoom: Double(layout.zoom), + Keys.notchArtwork: Double(layout.restingArtwork), + ]) autoConnect = defaults.bool(forKey: Keys.autoConnect) autoReconnect = defaults.bool(forKey: Keys.autoReconnect) showNotch = defaults.bool(forKey: Keys.showNotch) + notchWidth = defaults.double(forKey: Keys.notchWidth) + notchHeight = defaults.double(forKey: Keys.notchHeight) + notchSideWidth = defaults.double(forKey: Keys.notchSide) + notchZoom = defaults.double(forKey: Keys.notchZoom) + notchArtwork = defaults.double(forKey: Keys.notchArtwork) launchAtLogin = SMAppService.mainApp.status == .enabled } + func resetNotchSize() { + let layout = NotchLayout.default + notchWidth = Double(layout.openSize.width) + notchHeight = Double(layout.openSize.height) + notchSideWidth = Double(layout.sideExtension) + notchZoom = Double(layout.zoom) + notchArtwork = Double(layout.restingArtwork) + } + // Returns an error message if macOS refused the change. func setLaunchAtLogin(_ enabled: Bool) -> String? { defer { launchAtLogin = SMAppService.mainApp.status == .enabled } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index fcbb8886..c459501c 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -30,6 +30,8 @@ final class HeadphonesMenu { private var autoConnectItem = NSMenuItem() private var autoReconnectItem = NSMenuItem() private var showNotchItem = NSMenuItem() + private let notchSizeItem = NSMenuItem() + private let notchSizeMenuDelegate = NotchSizeMenuDelegate() private static var presets: [(Int, String)] { [(0x00, tr("Off")), (0x10, tr("Bright")), (0x11, tr("Excited")), (0x12, tr("Mellow")), @@ -159,6 +161,7 @@ final class HeadphonesMenu { autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } + optionsMenu.addItem(makeNotchSizeItem()) let optionsItem = NSMenuItem(title: tr("SonyBridge Options"), action: nil, keyEquivalent: "") optionsItem.submenu = optionsMenu menu.addItem(optionsItem) @@ -221,6 +224,34 @@ final class HeadphonesMenu { autoConnectItem.state = settings.autoConnect ? .on : .off autoReconnectItem.state = settings.autoReconnect ? .on : .off showNotchItem.state = settings.showNotch ? .on : .off + notchSizeItem.isEnabled = settings.showNotch + } + + // Options › Notch Size: sliders applied live, the notch staying open as a preview while the submenu is open. + private func makeNotchSizeItem() -> NSMenuItem { + let sizeMenu = NSMenu() + sizeMenu.autoenablesItems = false + notchSizeMenuDelegate.settings = settings + sizeMenu.delegate = notchSizeMenuDelegate + let points: (Double) -> String = { String(Int($0.rounded())) } + let percent: (Double) -> String = { "\(Int(($0 * 100).rounded())) %" } + let rows: [(String, ReferenceWritableKeyPath, ClosedRange, (Double) -> String)] = [ + (tr("Open Width"), \.notchWidth, NotchLayout.widthRange, points), + (tr("Open Height"), \.notchHeight, NotchLayout.heightRange, points), + (tr("Closed Width"), \.notchSideWidth, NotchLayout.sideRange, points), + (tr("Closed Artwork"), \.notchArtwork, NotchLayout.artworkRange, points), + (tr("Text Size"), \.notchZoom, NotchLayout.zoomRange, percent), + ] + for (title, keyPath, range, format) in rows { + sizeMenu.addItem(hostingMenuItem(width: MenuMetrics.width + 40) { + NotchSizeRow(settings: settings, title: title, keyPath: keyPath, range: range, format: format) + }) + } + sizeMenu.addItem(.separator()) + sizeMenu.addItem(ActionMenuItem(tr("Reset Size")) { [weak settings] in settings?.resetNotchSize() }) + notchSizeItem.title = tr("Notch Size") + notchSizeItem.submenu = sizeMenu + return notchSizeItem } private func updateAbout() { @@ -259,3 +290,11 @@ final class HeadphonesMenu { } } } + +// Opens the notch as a live preview while the Notch Size submenu is open. +private final class NotchSizeMenuDelegate: NSObject, NSMenuDelegate { + weak var settings: AppSettings? + + func menuWillOpen(_ menu: NSMenu) { settings?.notchPreviewing = true } + func menuDidClose(_ menu: NSMenu) { settings?.notchPreviewing = false } +} diff --git a/Client/macos/MenuRows/NotchSizeRow.swift b/Client/macos/MenuRows/NotchSizeRow.swift new file mode 100644 index 00000000..8ff83e36 --- /dev/null +++ b/Client/macos/MenuRows/NotchSizeRow.swift @@ -0,0 +1,28 @@ +import SwiftUI + +// One Notch Size slider ("Open Width ━━━●━━ 300"), bound to an AppSettings value. +struct NotchSizeRow: View { + @ObservedObject var settings: AppSettings + let title: String + let keyPath: ReferenceWritableKeyPath + let range: ClosedRange + let format: (Double) -> String + + var body: some View { + HStack(spacing: 8) { + Text(title) + .lineLimit(1) + .frame(width: 104, alignment: .leading) + Slider(value: Binding(get: { settings[keyPath: keyPath] }, set: { settings[keyPath: keyPath] = $0 }), + in: Double(range.lowerBound)...Double(range.upperBound)) + .controlSize(.small) + Text(verbatim: format(settings[keyPath: keyPath])) + .font(.system(size: 11, weight: .medium).monospacedDigit()) + .foregroundColor(.secondary) + .frame(width: 38, alignment: .trailing) + } + .padding(.leading, MenuMetrics.leading) + .padding(.trailing, MenuMetrics.trailing) + .padding(.vertical, 3) + } +} diff --git a/Client/macos/Notch/FlatSlider.swift b/Client/macos/Notch/FlatSlider.swift index a9104b25..c490749e 100644 --- a/Client/macos/Notch/FlatSlider.swift +++ b/Client/macos/Notch/FlatSlider.swift @@ -12,6 +12,7 @@ struct FlatSlider: View { let onChange: (Double, Bool) -> Void @Environment(\.isEnabled) private var isEnabled + @Environment(\.notchScale) private var s @State private var dragging = false @State private var hovering = false @@ -20,7 +21,7 @@ struct FlatSlider: View { let width = max(geometry.size.width, 1) let span = range.upperBound - range.lowerBound let fraction = span > 0 ? min(1, max(0, (value - range.lowerBound) / span)) : 0 - let barHeight = dragging || hovering ? height + 2 : height + let barHeight = (dragging || hovering ? height + 2 : height) * s ZStack(alignment: .leading) { Capsule().fill(Color(white: 0.25)) Capsule() @@ -46,7 +47,7 @@ struct FlatSlider: View { .onHover { hovering = isEnabled && $0 } .animation(.easeOut(duration: 0.12), value: barHeight) } - .frame(height: height + 8) + .frame(height: (height + 8) * s) .opacity(isEnabled ? 1 : 0.4) } diff --git a/Client/macos/Notch/HeadphonesTab.swift b/Client/macos/Notch/HeadphonesTab.swift index 06cb5641..3aca2854 100644 --- a/Client/macos/Notch/HeadphonesTab.swift +++ b/Client/macos/Notch/HeadphonesTab.swift @@ -6,22 +6,23 @@ import SwiftUI struct HeadphonesTab: View { @ObservedObject var model: HeadphonesModel let back: () -> Void + @Environment(\.notchScale) private var s var body: some View { - VStack(alignment: .leading, spacing: 12) { - HStack(spacing: 6) { + VStack(alignment: .leading, spacing: 12 * s) { + HStack(spacing: 6 * s) { Button(action: back) { Image(systemName: "chevron.left") - .font(.system(size: 13, weight: .semibold)) + .font(.system(size: 13 * s, weight: .semibold)) .foregroundColor(.gray) - .frame(width: 24, height: 24) + .frame(width: 24 * s, height: 24 * s) .contentShape(Rectangle()) } .buttonStyle(PressableButtonStyle()) .accessibilityLabel(tr("Back")) - Image(systemName: "headphones").font(.system(size: 13)).foregroundColor(.white) + Image(systemName: "headphones").font(.system(size: 13 * s)).foregroundColor(.white) Text(model.deviceName.isEmpty ? tr("Headphones") : model.deviceName) - .font(.system(size: 13, weight: .semibold)) + .font(.system(size: 13 * s, weight: .semibold)) .foregroundColor(.white) .lineLimit(1) } @@ -30,40 +31,40 @@ struct HeadphonesTab: View { controls case .connecting: Text(tr("Connecting…")) - .font(.system(size: 12)) + .font(.system(size: 12 * s)) .foregroundColor(.gray) .frame(maxWidth: .infinity) - .padding(.top, 8) + .padding(.top, 8 * s) case .disconnected: - HStack(spacing: 10) { - Text(tr("Not connected")).font(.system(size: 12)).foregroundColor(.gray) + HStack(spacing: 10 * s) { + Text(tr("Not connected")).font(.system(size: 12 * s)).foregroundColor(.gray) NotchPillButton(title: tr("Connect…")) { NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window model.connect() } } .frame(maxWidth: .infinity) - .padding(.top, 8) + .padding(.top, 8 * s) } } } private var controls: some View { let ambient = model.mode == .ambientSound - return VStack(spacing: 10) { + return VStack(spacing: 10 * s) { ModePicker(selection: model.mode, select: { model.setMode($0) }) - HStack(spacing: 8) { - Text(tr("Level")).font(.system(size: 12)).foregroundColor(.gray) + HStack(spacing: 8 * s) { + Text(tr("Level")).font(.system(size: 12 * s)).foregroundColor(.gray) FlatSlider(value: Double(model.ambientLevel), range: 1...Double(max(model.maxAmbientLevel, 2)), step: 1) { value, final in model.setLevel(Int(value.rounded()), final: final) } Text(verbatim: "\(model.ambientLevel)") - .font(.system(size: 11, weight: .medium).monospacedDigit()) + .font(.system(size: 11 * s, weight: .medium).monospacedDigit()) .foregroundColor(.gray) - .frame(width: 20, alignment: .trailing) - Text(tr("Voice")).font(.system(size: 12)).foregroundColor(.gray).padding(.leading, 6) + .frame(width: 20 * s, alignment: .trailing) + Text(tr("Voice")).font(.system(size: 12 * s)).foregroundColor(.gray).padding(.leading, 6 * s) NotchSwitch(isOn: model.focusOnVoice, label: tr("Focus on Voice")) { model.setFocusOnVoice($0) } } .disabled(!ambient) @@ -79,6 +80,7 @@ struct HeadphonesTab: View { private struct ModePicker: View { let selection: SHCAmbientMode let select: (SHCAmbientMode) -> Void + @Environment(\.notchScale) private var s @Namespace private var pill private static var options: [(SHCAmbientMode, String)] { @@ -86,19 +88,19 @@ private struct ModePicker: View { } var body: some View { - HStack(spacing: 2) { + HStack(spacing: 2 * s) { ForEach(Self.options, id: \.0.rawValue) { mode, title in let selected = selection == mode Button { select(mode) } label: { Text(title) - .font(.system(size: 11, weight: selected ? .semibold : .regular)) + .font(.system(size: 11 * s, weight: selected ? .semibold : .regular)) .foregroundColor(selected ? .white : .gray) .lineLimit(1) .frame(maxWidth: .infinity) - .padding(.vertical, 5) + .padding(.vertical, 5 * s) .background { if selected { - RoundedRectangle(cornerRadius: 6) + RoundedRectangle(cornerRadius: 6 * s) .fill(Color(white: 0.3)) .matchedGeometryEffect(id: "pill", in: pill) } @@ -109,8 +111,8 @@ private struct ModePicker: View { .accessibilityAddTraits(selected ? .isSelected : []) } } - .padding(2) - .background(RoundedRectangle(cornerRadius: 8).fill(Color(white: 0.15))) + .padding(2 * s) + .background(RoundedRectangle(cornerRadius: 8 * s).fill(Color(white: 0.15))) // The selection comes back from the headset (menu, NC button), so animate on the value, not the click. .animation(.spring(response: 0.3, dampingFraction: 0.8), value: selection) } diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index 7b6d4f5f..8cad91aa 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -1,12 +1,14 @@ import SwiftUI // Notch player page (spec §4.2): artwork, title and artist; progress; headphones, previous, play/pause, next, -// shuffle. The volume button swaps the progress bar for Spotify's volume bar for a few seconds. +// shuffle. The volume button swaps the progress bar for Spotify's volume bar for a few seconds. Sizes follow +// the notch zoom; extra height grows the artwork. struct MusicTab: View { private static let volumeAutoHide: TimeInterval = 4 @ObservedObject var music: MusicController let showHeadphones: () -> Void + @Environment(\.notchScale) private var s @State private var seekValue: Double? // while dragging the progress bar @State private var volumeValue: Double? // while dragging the volume bar @State private var showVolume = false @@ -36,8 +38,8 @@ struct MusicTab: View { } private func message(_ text: String, button: String?, action: @escaping () -> Void) -> some View { - VStack(spacing: 10) { - Text(text).font(.system(size: 12)).foregroundColor(.gray).multilineTextAlignment(.center) + VStack(spacing: 10 * s) { + Text(text).font(.system(size: 12 * s)).foregroundColor(.gray).multilineTextAlignment(.center) if let button = button { NotchPillButton(title: button, action: action) } @@ -48,25 +50,36 @@ struct MusicTab: View { } } .frame(maxWidth: .infinity) - .padding(.top, 6) + .padding(.top, 6 * s) } private func player(_ track: NowPlaying) -> some View { + GeometryReader { proxy in + player(track, artwork: artworkSize(forHeight: proxy.size.height)) + } + } + + // 50 pt at the default height; each extra point of height gives the artwork 0.6 pt, within 44...88 (× zoom). + private func artworkSize(forHeight height: CGFloat) -> CGFloat { + min(88 * s, max(44 * s, 50 * s + (height - 112 * s) * 0.6)) + } + + private func player(_ track: NowPlaying, artwork: CGFloat) -> some View { VStack(spacing: 0) { - HStack(spacing: 12) { - ArtworkView(image: music.artwork, size: 50, cornerRadius: 10) - VStack(alignment: .leading, spacing: 2) { - Text(track.title).font(.system(size: 14, weight: .semibold)).foregroundColor(.white) - Text(track.artist).font(.system(size: 13)).foregroundColor(.gray) + HStack(spacing: 12 * s) { + ArtworkView(image: music.artwork, size: artwork, cornerRadius: artwork * 0.2) + VStack(alignment: .leading, spacing: 2 * s) { + Text(track.title).font(.system(size: 14 * s, weight: .semibold)).foregroundColor(.white) + Text(track.artist).font(.system(size: 13 * s)).foregroundColor(.gray) } .lineLimit(1) .id(track.trackID) .transition(.asymmetric(insertion: .opacity.combined(with: .offset(y: 6)), removal: .opacity)) - Spacer(minLength: 6) + Spacer(minLength: 6 * s) LevelBars(animating: track.isPlaying, color: music.artworkTint) } .animation(NotchMotion.content, value: track.trackID) - Spacer(minLength: 8) + Spacer(minLength: 8 * s) ZStack { progress(track) .modifier(FadeScale(amount: showVolume ? 1 : 0)) @@ -76,7 +89,7 @@ struct MusicTab: View { .allowsHitTesting(showVolume) } .animation(NotchMotion.content, value: showVolume) - Spacer(minLength: 6) + Spacer(minLength: 6 * s) HStack(spacing: 0) { iconButton("headphones", label: tr("Headphones"), action: showHeadphones) Spacer() @@ -104,7 +117,7 @@ struct MusicTab: View { private func progress(_ track: NowPlaying) -> some View { TimelineView(.periodic(from: .now, by: 1)) { context in let position = seekValue ?? PlaybackClock.position(of: track, at: context.date) - HStack(spacing: 8) { + HStack(spacing: 8 * s) { timeLabel(PlaybackClock.format(position)) FlatSlider(value: position, range: 0...max(track.duration, 1), smoothing: seekValue == nil) { value, final in seekValue = final ? nil : value @@ -117,32 +130,32 @@ struct MusicTab: View { } private func volume(_ track: NowPlaying) -> some View { - HStack(spacing: 8) { - Image(systemName: "speaker.fill").font(.system(size: 10)).foregroundColor(.gray).frame(width: 34) + HStack(spacing: 8 * s) { + Image(systemName: "speaker.fill").font(.system(size: 10 * s)).foregroundColor(.gray).frame(width: 34 * s) FlatSlider(value: volumeValue ?? Double(track.volume ?? 0), range: 0...100) { value, final in volumeValue = final ? nil : value music.setVolume(Int(value.rounded()), final: final) scheduleVolumeHide() } - Image(systemName: "speaker.wave.3.fill").font(.system(size: 10)).foregroundColor(.gray).frame(width: 34) + Image(systemName: "speaker.wave.3.fill").font(.system(size: 10 * s)).foregroundColor(.gray).frame(width: 34 * s) } } private func timeLabel(_ text: String) -> some View { Text(verbatim: text) - .font(.system(size: 11).monospacedDigit()) + .font(.system(size: 11 * s).monospacedDigit()) .foregroundColor(.gray) - .frame(width: 34) + .frame(width: 36 * s) } private func iconButton(_ symbol: String, size: CGFloat = 14, color: Color = .gray, label: String, action: @escaping () -> Void) -> some View { Button(action: action) { Image(systemName: symbol) - .font(.system(size: size)) + .font(.system(size: size * s)) .foregroundColor(color) .symbolReplaceTransition() - .frame(width: 28, height: 26) + .frame(width: 28 * s, height: 26 * s) .contentShape(Rectangle()) } .buttonStyle(PressableButtonStyle()) diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index c6ea9525..d184b4e4 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -5,12 +5,14 @@ import SwiftUI // Owns the notch panel (spec §4.3): picks the screen, places the panel, opens it on hover and follows the // "Show Notch" option. // -// The panel always keeps the open size: only the SwiftUI shape inside animates. Resizing the window on open +// The panel always keeps the largest open size the Notch Size options allow: only the SwiftUI shape inside +// animates, including while the size is changed. Resizing the window on open // and close showed a frame of stale content at the new size (things jumped outward, then back). While // closed, the panel lets every click through, and hover is followed from the pointer position instead of // tracking areas. final class NotchController { private static let unmountDelay: TimeInterval = 0.4 // lets the closing spring settle first + private static let closedPreviewTime: TimeInterval = 1 // closed-width preview, then back to the open notch private let model: HeadphonesModel private let music: MusicController @@ -20,6 +22,8 @@ final class NotchController { private var geometry: NotchGeometry? private var lastChosenTab: NotchTab? private var pointerInside = false + private var previewing = false // Notch Size submenu open: the pointer neither opens nor closes the notch + private var reopenWork: DispatchWorkItem? private var hoverTimer: Timer? private var hideWork: DispatchWorkItem? private var unmountWork: DispatchWorkItem? @@ -63,6 +67,21 @@ final class NotchController { .receive(on: DispatchQueue.main) .sink { [weak self] _ in self?.relayout() } .store(in: &cancellables) + // A size slider shows what it changes: the open notch for its width, height and text size, the closed + // notch for the closed width. + Publishers.Merge3(settings.$notchWidth.dropFirst(), settings.$notchHeight.dropFirst(), settings.$notchZoom.dropFirst()) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.sizeChanged(showOpen: true) } + .store(in: &cancellables) + settings.$notchSideWidth.dropFirst().merge(with: settings.$notchArtwork.dropFirst()) + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.sizeChanged(showOpen: false) } + .store(in: &cancellables) + settings.$notchPreviewing + .dropFirst() + .receive(on: DispatchQueue.main) + .sink { [weak self] on in self?.setPreviewing(on) } + .store(in: &cancellables) model.$connectionState.combineLatest(music.$status, music.$nowPlaying) .receive(on: DispatchQueue.main) .sink { [weak self] _ in self?.updateResting() } @@ -89,11 +108,21 @@ final class NotchController { panel.orderOut(nil) return } - let geometry = NotchGeometry(screen: ScreenMetrics(screen)) + let metrics = ScreenMetrics(screen) + let layout = settings.notchLayout + let geometry = NotchGeometry(screen: metrics, layout: layout) self.geometry = geometry state.notchHeight = geometry.notch.height state.openSize = geometry.open.size - panel.setFrame(geometry.open, display: true) + state.sideExtension = layout.sideExtension + state.contentScale = layout.contentScale + state.restingScale = layout.restingScale + state.restingArtworkSize = layout.restingArtworkSize(notchHeight: geometry.notch.height) + let largest = NotchLayout(openSize: CGSize(width: NotchLayout.widthRange.upperBound, + height: NotchLayout.heightRange.upperBound), + sideExtension: NotchLayout.sideRange.upperBound, zoom: 1) + let panelFrame = NotchGeometry(screen: metrics, layout: largest).open + if panel.frame != panelFrame { panel.setFrame(panelFrame, display: true) } updateResting() } @@ -112,6 +141,7 @@ final class NotchController { if let frame = frame { state.restingSize = frame.size } } } + updateTrailingHover() hideWork?.cancel() if frame != nil || state.isOpen { panel.orderFrontRegardless() @@ -131,6 +161,7 @@ final class NotchController { // Only a change of side (in / out) starts the timer, so moving inside doesn't keep postponing the opening; // the timer then reads the real pointer position, so a missed event can't leave the notch stuck. private func pointerMoved() { + updateTrailingHover() let inside = isPointerInHoverZone guard inside != pointerInside else { return } pointerInside = inside @@ -144,17 +175,35 @@ final class NotchController { private func hoverCheck() { let inside = isPointerInHoverZone pointerInside = inside - if inside && !state.isOpen { + if inside && !state.isOpen && !previewing { open() - } else if !inside && state.isOpen { + } else if !inside && state.isOpen && !previewing { close() } } private var isPointerInHoverZone: Bool { guard panel.isVisible, let geometry = geometry else { return false } - let zone = state.isOpen ? geometry.open : (geometry.restingFrame(for: state.resting) ?? .zero) - return zone.contains(NSEvent.mouseLocation) + let pointer = NSEvent.mouseLocation + if state.isOpen { return geometry.open.contains(pointer) } + // The resting music control is clicked, not a way to open the notch. + if hasRestingMusicControl && geometry.restingTrailingZone.contains(pointer) { return false } + return geometry.restingFrame(for: state.resting)?.contains(pointer) ?? false + } + + private var hasRestingMusicControl: Bool { + state.resting == .musicAndHeadphones || state.resting == .musicOnly + } + + // While closed, the pointer over the right widening swaps the level bars for next / play, and the panel + // takes the mouse there (and only there) so the button can be clicked. + private func updateTrailingHover() { + let hovered = !state.isOpen && panel.isVisible && hasRestingMusicControl + && (geometry?.restingTrailingZone.contains(NSEvent.mouseLocation) ?? false) + if hovered != state.trailingHovered { + withAnimation(NotchMotion.content) { state.trailingHovered = hovered } + } + panel.ignoresMouseEvents = !(state.isOpen || hovered) } private func open() { @@ -162,6 +211,7 @@ final class NotchController { hideWork?.cancel() if !state.openContentMounted { state.tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) } state.openContentMounted = true + state.trailingHovered = false panel.ignoresMouseEvents = false panel.orderFrontRegardless() withAnimation(NotchMotion.open) { state.isOpen = true } @@ -183,6 +233,36 @@ final class NotchController { DispatchQueue.main.asyncAfter(deadline: .now() + Self.unmountDelay, execute: work) } + // The Notch Size submenu opens the notch as a live preview; closing the menu hands it back to the pointer. + private func setPreviewing(_ on: Bool) { + previewing = on + reopenWork?.cancel() + if on { + if geometry != nil && !state.isOpen { open() } + } else { + hoverCheck() + } + } + + // Width, height and text size show on the open notch. The closed width and artwork close it while they move, + // then reopens it a second after the last change, so the other sliders find it open again. + private func sizeChanged(showOpen: Bool) { + withAnimation(NotchMotion.content) { relayout() } + guard previewing, geometry != nil else { return } + reopenWork?.cancel() + if showOpen { + if !state.isOpen { open() } + return + } + if state.isOpen { close() } + let work = DispatchWorkItem { [weak self] in + guard let self = self, self.previewing, !self.state.isOpen else { return } + self.open() + } + reopenWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + Self.closedPreviewTime, execute: work) + } + private func select(_ tab: NotchTab) { lastChosenTab = tab withAnimation(NotchMotion.content) { state.tab = tab } diff --git a/Client/macos/Notch/NotchControls.swift b/Client/macos/Notch/NotchControls.swift index c9e06f06..87622534 100644 --- a/Client/macos/Notch/NotchControls.swift +++ b/Client/macos/Notch/NotchControls.swift @@ -11,14 +11,15 @@ struct NotchSwitch: View { let set: (Bool) -> Void @Environment(\.isEnabled) private var isEnabled + @Environment(\.notchScale) private var s var body: some View { Button { set(!isOn) } label: { ZStack(alignment: isOn ? .trailing : .leading) { Capsule().fill(isOn ? Color.green : Color(white: 0.3)) - Circle().fill(Color.white).padding(2) + Circle().fill(Color.white).padding(2 * s) } - .frame(width: 30, height: 18) + .frame(width: 30 * s, height: 18 * s) .animation(.spring(response: 0.25, dampingFraction: 0.8), value: isOn) } .buttonStyle(PressableButtonStyle()) @@ -33,15 +34,16 @@ struct NotchSwitch: View { struct NotchPillButton: View { let title: String let action: () -> Void + @Environment(\.notchScale) private var s var body: some View { Button(action: action) { Text(title) - .font(.system(size: 12, weight: .medium)) + .font(.system(size: 12 * s, weight: .medium)) .foregroundColor(.white) .lineLimit(1) - .padding(.horizontal, 12) - .padding(.vertical, 5) + .padding(.horizontal, 12 * s) + .padding(.vertical, 5 * s) .background(Capsule().fill(Color(white: 0.22))) .contentShape(Capsule()) } diff --git a/Client/macos/Notch/NotchGeometry.swift b/Client/macos/Notch/NotchGeometry.swift index 24c6d6b4..8f413c58 100644 --- a/Client/macos/Notch/NotchGeometry.swift +++ b/Client/macos/Notch/NotchGeometry.swift @@ -10,18 +10,65 @@ struct ScreenMetrics: Equatable { var menuBarHeight: CGFloat // frame.maxY - visibleFrame.maxY (0 when the menu bar auto-hides) } +// The sizes the user can set under Options › Notch Size, clamped to what the notch content can hold. +struct NotchLayout: Equatable { + static let widthRange: ClosedRange = 280...480 + static let heightRange: ClosedRange = 156...260 + static let sideRange: ClosedRange = 28...60 + static let zoomRange: ClosedRange = 0.85...1.3 + static let artworkRange: ClosedRange = 16...30 + static let `default` = NotchLayout(openSize: CGSize(width: 300, height: 166), sideExtension: 36, zoom: 1, + restingArtwork: 24) + + // The open size the player needs at zoom 1, and the side width a resting icon needs. + private static let contentMinimum = CGSize(width: 280, height: 156) + private static let restingItemMinimum: CGFloat = 30 + + let openSize: CGSize // open notch, notch height included + let sideExtension: CGFloat // resting widening on each side + let zoom: CGFloat // text and icon size asked for + let restingArtwork: CGFloat // artwork size on the closed notch, asked for + + init(openSize: CGSize, sideExtension: CGFloat, zoom: CGFloat, restingArtwork: CGFloat = 24) { + self.openSize = CGSize(width: Self.clamp(openSize.width, Self.widthRange), + height: Self.clamp(openSize.height, Self.heightRange)) + self.sideExtension = Self.clamp(sideExtension, Self.sideRange) + self.zoom = Self.clamp(zoom, Self.zoomRange) + self.restingArtwork = Self.clamp(restingArtwork, Self.artworkRange) + } + + // Closed-notch artwork size actually drawn: 2 pt clear of the notch's top and bottom, 3 pt of each side. + func restingArtworkSize(notchHeight: CGFloat) -> CGFloat { + min(restingArtwork, notchHeight - 4, sideExtension - 6) + } + + // Zoom applied to the open content: lowered when the chosen size couldn't hold the content at that zoom. + var contentScale: CGFloat { + min(zoom, openSize.width / Self.contentMinimum.width, openSize.height / Self.contentMinimum.height) + } + + // Zoom applied to the resting artwork and icons, lowered to fit the side width. + var restingScale: CGFloat { + min(zoom, sideExtension / Self.restingItemMinimum) + } + + private static func clamp(_ value: CGFloat, _ range: ClosedRange) -> CGFloat { + min(range.upperBound, max(range.lowerBound, value)) + } +} + // Where the notch panel goes (spec §4): the real notch, or a simulated pill centred at the top of a screen // without one. Every rect shares the notch's horizontal centre and touches the top edge of the screen. struct NotchGeometry: Equatable { - static let sideExtension: CGFloat = 36 // resting widening on each side (states 1-3) static let simulatedWidth: CGFloat = 190 // pill width on a screen without a notch static let fallbackMenuBarHeight: CGFloat = 24 // pill height when the menu bar auto-hides - static let openSize = CGSize(width: 300, height: 166) let hasNotch: Bool let notch: CGRect + let layout: NotchLayout - init(screen: ScreenMetrics) { + init(screen: ScreenMetrics, layout: NotchLayout = .default) { + self.layout = layout let top = screen.frame.maxY if screen.safeAreaTop > 0, let left = screen.auxiliaryTopLeft, let right = screen.auxiliaryTopRight, screen.frame.width - left.width - right.width > 0 { @@ -39,12 +86,17 @@ struct NotchGeometry: Equatable { // The notch widened on both sides, to hold the resting artwork / mode icons. var extended: CGRect { - notch.insetBy(dx: -Self.sideExtension, dy: 0) + notch.insetBy(dx: -layout.sideExtension, dy: 0) + } + + // The right widening while resting: the music control (level bars, next / play on hover). + var restingTrailingZone: CGRect { + CGRect(x: extended.maxX - layout.sideExtension, y: notch.minY, width: layout.sideExtension, height: notch.height) } var open: CGRect { - let width = max(Self.openSize.width, extended.width) - let height = max(Self.openSize.height, notch.height) + let width = max(layout.openSize.width, extended.width) + let height = max(layout.openSize.height, notch.height) return CGRect(x: notch.midX - width / 2, y: notch.maxY - height, width: width, height: height) } diff --git a/Client/macos/Notch/NotchMotion.swift b/Client/macos/Notch/NotchMotion.swift index f9795df2..36700c70 100644 --- a/Client/macos/Notch/NotchMotion.swift +++ b/Client/macos/Notch/NotchMotion.swift @@ -51,6 +51,18 @@ struct PressableButtonStyle: ButtonStyle { } } +// Text and icon zoom inside the notch (Options › Notch Size › Text Size, already limited to what fits). +private struct NotchScaleKey: EnvironmentKey { + static let defaultValue: CGFloat = 1 +} + +extension EnvironmentValues { + var notchScale: CGFloat { + get { self[NotchScaleKey.self] } + set { self[NotchScaleKey.self] = newValue } + } +} + extension View { // SF Symbol swaps (play ↔ pause) morph on macOS 14+; older systems cross-fade. @ViewBuilder func symbolReplaceTransition() -> some View { diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 303b3181..947be91c 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -5,11 +5,16 @@ import SwiftUI final class NotchViewState: ObservableObject { @Published var isOpen = false @Published var openContentMounted = false // true while open, and while the closing animation plays + @Published var trailingHovered = false // pointer over the resting music control @Published var resting: NotchRestingState = .empty @Published var tab: NotchTab = .music @Published var restingSize: CGSize = .zero @Published var openSize: CGSize = .zero @Published var notchHeight: CGFloat = 32 + @Published var sideExtension = NotchLayout.default.sideExtension + @Published var contentScale: CGFloat = 1 // text and icon zoom, open notch + @Published var restingScale: CGFloat = 1 // same, resting icons + @Published var restingArtworkSize = NotchLayout.default.restingArtwork } // Merges with the notch: the top corners flare out into the menu bar (concave, `topRadius` wide on each side, @@ -62,6 +67,7 @@ struct NotchView: View { // past the edges) while the spring animates. Grows in with a transition; shrinks out through the // modifier below, since SwiftUI skipped the removal transition (content vanished at once). openContent + .environment(\.notchScale, state.contentScale) .padding(.top, state.notchHeight) .frame(width: state.openSize.width, height: state.openSize.height) .modifier(FadeScale(amount: state.isOpen ? 0 : 1, scale: NotchMotion.morphScale)) @@ -71,6 +77,7 @@ struct NotchView: View { // Always mounted and faded on isOpen: an inserted resting strip (transition) didn't come back after // a close while the open content was still mounted. restingContent + .environment(\.notchScale, state.restingScale) .opacity(state.isOpen ? 0 : 1) .animation(NotchMotion.resting(open: state.isOpen), value: state.isOpen) .allowsHitTesting(!state.isOpen) @@ -87,9 +94,9 @@ struct NotchView: View { private var restingContent: some View { HStack(spacing: 0) { - leadingItem.frame(width: NotchGeometry.sideExtension) + leadingItem.frame(width: state.sideExtension) Spacer(minLength: 0) - trailingItem.frame(width: NotchGeometry.sideExtension) + trailingItem.frame(width: state.sideExtension) } // Explicit width: while the (wider) open content is still mounted during a close, the strip otherwise // took the open width, so the artwork and mode icon sat outside the shape (cut off), then jumped back. @@ -99,9 +106,9 @@ struct NotchView: View { @ViewBuilder private var leadingItem: some View { switch state.resting { case .musicAndHeadphones, .musicOnly: - ArtworkView(image: music.artwork, size: 20, cornerRadius: 5) + ArtworkView(image: music.artwork, size: state.restingArtworkSize, cornerRadius: state.restingArtworkSize * 0.25) case .headphonesOnly: - Image(systemName: "headphones").font(.system(size: 13)).foregroundColor(.white) + Image(systemName: "headphones").font(.system(size: 13 * state.restingScale)).foregroundColor(.white) case .empty: EmptyView() } @@ -109,10 +116,10 @@ struct NotchView: View { @ViewBuilder private var trailingItem: some View { switch state.resting { - case .musicAndHeadphones, .headphonesOnly: - Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13)).foregroundColor(.white) - case .musicOnly: - LevelBars(animating: music.nowPlaying?.isPlaying == true, color: music.artworkTint) + case .musicAndHeadphones, .musicOnly: + RestingMusicControl(music: music, hovered: state.trailingHovered) + case .headphonesOnly: + Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13 * state.restingScale)).foregroundColor(.white) case .empty: EmptyView() } @@ -135,9 +142,9 @@ struct NotchView: View { page(.music) { MusicTab(music: music, showHeadphones: { selectTab(.headphones) }) } page(.headphones) { HeadphonesTab(model: model, back: { selectTab(.music) }) } } - .padding(.top, 8) - .padding(.horizontal, Self.openFlare + 16) - .padding(.bottom, 14) + .padding(.top, 8 * state.contentScale) + .padding(.horizontal, Self.openFlare + 16 * state.contentScale) + .padding(.bottom, 14 * state.contentScale) } // The player slides off to the left, the headphones page comes in from the right (and back). No blur: it @@ -180,22 +187,54 @@ struct ArtworkView: View { } } +// Right side of the resting notch while music is loaded: the level bars in the artwork's colour, replaced on +// hover by "next track" while playing, or "play" while paused. +struct RestingMusicControl: View { + @ObservedObject var music: MusicController + let hovered: Bool + @Environment(\.notchScale) private var s + + var body: some View { + let playing = music.nowPlaying?.isPlaying == true + ZStack { + LevelBars(animating: playing && !hovered, color: music.artworkTint) + .modifier(FadeScale(amount: hovered ? 1 : 0, scale: 0.6)) + Button { + if playing { music.next() } else { music.playPause() } + } label: { + Image(systemName: playing ? "forward.fill" : "play.fill") + .font(.system(size: 13 * s)) + .foregroundColor(.white) + .symbolReplaceTransition() + .frame(width: 30 * s, height: 26 * s) + .contentShape(Rectangle()) + } + .buttonStyle(PressableButtonStyle()) + .accessibilityLabel(playing ? tr("Next track") : tr("Play or pause")) + .modifier(FadeScale(amount: hovered ? 0 : 1, scale: 0.6)) + .allowsHitTesting(hovered) + .animation(NotchMotion.content, value: playing) + } + } +} + // Four small bars in the artwork's colour, moving while music plays, frozen when paused. struct LevelBars: View { let animating: Bool var color: NSColor? + @Environment(\.notchScale) private var s var body: some View { TimelineView(.animation(minimumInterval: 1.0 / 30, paused: !animating)) { context in let time = context.date.timeIntervalSinceReferenceDate - HStack(alignment: .bottom, spacing: 2) { + HStack(alignment: .bottom, spacing: 2 * s) { ForEach(0..<4, id: \.self) { index in Capsule() .fill(color.map(Color.init(nsColor:)) ?? Color(white: 0.85)) - .frame(width: 3, height: animating ? 4 + 10 * abs(sin(time * 3 + Double(index) * 1.3)) : 4) + .frame(width: 3 * s, height: (animating ? 4 + 10 * abs(sin(time * 3 + Double(index) * 1.3)) : 4) * s) } } - .frame(height: 14, alignment: .bottom) + .frame(height: 14 * s, alignment: .bottom) .animation(.easeOut(duration: 0.3), value: animating) } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index e797f057..e73489ba 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -76,3 +76,10 @@ "Voice" = "Voix"; "NC" = "Réduction"; "Ambient" = "Ambiant"; +"Notch Size" = "Taille de l’encoche"; +"Open Width" = "Largeur ouverte"; +"Open Height" = "Hauteur ouverte"; +"Closed Width" = "Largeur fermée"; +"Text Size" = "Taille du texte"; +"Reset Size" = "Réinitialiser"; +"Closed Artwork" = "Pochette (fermée)"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index a218394b..19e53cbc 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -53,6 +53,36 @@ do { check(geometry.open == CGRect(x: 606, y: 816, width: 300, height: 166), "open rect was \(geometry.open)") check(geometry.restingFrame(for: .empty) == geometry.notch, "empty state: bare notch") check(geometry.restingFrame(for: .musicOnly) == geometry.extended, "music: extended notch") + check(geometry.restingTrailingZone == CGRect(x: 850, y: 950, width: 36, height: 32), + "resting trailing zone was \(geometry.restingTrailingZone)") +} + +// NotchLayout: user sizes are clamped; the zoom never lays the open content out smaller than it needs. +do { + let clamped = NotchLayout(openSize: CGSize(width: 100, height: 1000), sideExtension: 5, zoom: 3) + check(clamped.openSize == CGSize(width: 280, height: 260), "open size clamped, was \(clamped.openSize)") + check(clamped.sideExtension == 28 && clamped.zoom == 1.3, "side and zoom clamped") + check(clamped.contentScale == 1, "zoom limited by the width, was \(clamped.contentScale)") + let roomy = NotchLayout(openSize: CGSize(width: 400, height: 240), sideExtension: 60, zoom: 1.2) + check(roomy.contentScale == 1.2 && roomy.restingScale == 1.2, "zoom applied when the notch is large enough") + let narrowSides = NotchLayout(openSize: NotchLayout.default.openSize, sideExtension: 30, zoom: 1.3) + check(narrowSides.restingScale == 1, "resting icons limited by the side width, was \(narrowSides.restingScale)") + check(NotchLayout.default.contentScale == 1 && NotchLayout.default.restingScale == 1, "default: no zoom") + check(NotchLayout.default.restingArtworkSize(notchHeight: 32) == 24, "default resting artwork") + let bigArtwork = NotchLayout(openSize: NotchLayout.default.openSize, sideExtension: 36, zoom: 1, restingArtwork: 40) + check(bigArtwork.restingArtwork == 30, "resting artwork clamped, was \(bigArtwork.restingArtwork)") + check(bigArtwork.restingArtworkSize(notchHeight: 32) == 28, "resting artwork fits the notch height") + let thinSides = NotchLayout(openSize: NotchLayout.default.openSize, sideExtension: 28, zoom: 1, restingArtwork: 30) + check(thinSides.restingArtworkSize(notchHeight: 32) == 22, "resting artwork fits the side width") + + let screen = ScreenMetrics(frame: CGRect(x: 0, y: 0, width: 1512, height: 982), safeAreaTop: 32, + auxiliaryTopLeft: CGRect(x: 0, y: 950, width: 662, height: 32), + auxiliaryTopRight: CGRect(x: 850, y: 950, width: 662, height: 32), + menuBarHeight: 32) + let geometry = NotchGeometry(screen: screen, layout: roomy) + check(geometry.extended == CGRect(x: 602, y: 950, width: 308, height: 32), "custom extended was \(geometry.extended)") + check(geometry.open == CGRect(x: 556, y: 742, width: 400, height: 240), "custom open was \(geometry.open)") + check(geometry.restingTrailingZone == CGRect(x: 850, y: 950, width: 60, height: 32), "custom trailing zone") } // NotchGeometry: an external screen without a notch, right of the primary screen. diff --git a/README.md b/README.md index db26a7d5..2c15888d 100644 --- a/README.md +++ b/README.md @@ -1,80 +1,74 @@ -
+# SonyBridge -SonyBridge +**Control your Sony headphones from your Mac's menu bar and notch, without the phone app.** -
+SonyBridge is a native macOS app for Sony Bluetooth headphones: noise cancelling, ambient sound, equalizer, +battery and more, from a menu bar menu, plus a notch panel that shows the music playing in Spotify and your +headphones' sound mode. -**An unofficial, open-source macOS menu bar app for Sony headphones — Noise Cancelling, Ambient Sound, EQ, DSEE and battery, without the phone.** +It talks to the headphones directly over Bluetooth, so you don't need Sony's *Sound Connect* phone app. -
+[Features](#features) · [The notch](#the-notch) · [Install](#install) · [Supported headphones](#supported-headphones) · [Build from source](#build-from-source) · [How it works](#how-it-works) · [Troubleshooting](#troubleshooting) -[![Build](https://github.com/flotttt/SonyBridge/actions/workflows/build.yml/badge.svg)](https://github.com/flotttt/SonyBridge/actions/workflows/build.yml) -[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE) -![Platforms](https://img.shields.io/badge/platform-macOS-blue) - -
- -**[Features](#-features)** · **[Install](#-install)** · **[Usage](#-usage)** · **[Supported headphones](#-supported-headphones)** · **[Build from source](#-build-from-source)** · **[Contributing](#-contributing)** · **[Credits](#-credits)** - -
- -*Screenshots of the menu bar app are coming — for now, see the [Usage](#-usage) section below for what to expect.* +--- -
+## Features ---- +### In the menu bar -## Why +- **Sound modes:** Noise Cancelling, Ambient Sound (level slider and Focus on Voice) and Off. The menu follows + the headphones' own NC button live. +- **Equalizer:** presets and a Manual mode with one slider per band (5 bands + Clear Bass on older models). + On the WH-1000XM6 the 10-band equalizer is shown but read-only for now. +- **Other settings**, only when your model has them: DSEE, Speak-to-Chat, Adaptive Volume, Auto Power-Off. +- **Battery:** live percentage, per earbud and case on true-wireless models. +- **About the Headphones:** firmware, codec, protocol version and Bluetooth address. +- **Connection:** connects automatically at launch and when the headphones join the Mac, reconnects if the + link drops, and can launch at login. +- **Languages:** English and French, following your macOS language. -Sony locks headphone settings behind their mobile-only *Sound Connect* app. If you live on a laptop, -you're stuck. SonyBridge talks to the headphones directly over Bluetooth RFCOMM using Sony's -reverse-engineered binary protocol — no phone required. It lives entirely in your macOS menu bar: no -Dock icon, no window, just a native menu. +The menu bar icon shows the current sound mode and dims while disconnected. -The original [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) only spoke Sony's -**first-generation** protocol, so newer headsets (WH-CH720N, WH-1000XM5/XM6, WF-series, LinkBuds…) just timed -out on connect. SonyBridge adds full **second-generation ("v2") protocol** support and a native macOS -menu bar app, built with AppKit/SwiftUI. +### The notch -## ✨ Features +Hover the notch at the top of a MacBook screen and it unfolds into a small player. On a screen without a +notch, the same panel sits in a black pill at the top centre. -**Sound modes** -- 🎚️ **Ambient Sound Control** — Noise Cancelling · Ambient Sound (with a 1–20 level slider (1–19 on older models) and a Focus on Voice switch) · Off -- 🔄 **Live button sync** — following the headset's own NC button live, even while the menu is open +**Closed**, the notch shows what's going on at a glance: -**Notch** -- 🏝️ **Notch panel** — hover the MacBook notch (or a black pill at the top of screens without one) to control the music playing in **Spotify** (artwork, play/pause, previous/next, seek, shuffle, volume) and, behind its headphones button, switch Noise Cancelling / Ambient Sound / Off. Turn it off with **Show Notch** under **SonyBridge Options** +- the album artwork on the left; +- on the right, small bars in the artwork's colour that move while music plays. Hover them for a + **next track** button, or a **play** button when the music is paused; +- without music, a headphones icon on the left and the current sound mode on the right. -**Equalizer** -- 🎛️ **Equalizer** — presets *and* a **Manual mode** with vertical sliders (5 bands + Clear Bass on older models). The **WH-1000XM6**'s 10-band equalizer is read and displayed; changing the equalizer (presets and Manual) is coming in a later update — its write format isn't verified yet, so the presets and sliders are greyed out with a "coming soon" note +**Open**, it's a music player for the **Spotify** desktop app: -**Other settings** *(each shown only if your headset supports it)* -- ✨ **DSEE** — Sony's audio upscaling for compressed sources -- 🗣️ **Speak-to-Chat** and **Adaptive Volume** -- ⏱️ **Auto Power-Off** — Off, 5 min, 30 min, 1 hour, 3 hours, or when taken off +- artwork, title and artist; +- elapsed time, a progress bar you can click or drag to seek, and the track length; +- previous, play/pause, next and shuffle; +- a volume button that swaps the progress bar for Spotify's volume for a few seconds; +- a headphones button that slides to the **headphones page**: Noise Cancelling / Ambient / Off, ambient + level and Focus on Voice. -**Battery & info** -- 🔋 **Battery level** — live percentage, including **per-earbud + case** for TWS models -- 🎧 **About the Headphones** — firmware, codec, protocol, and Bluetooth address +It opens and closes with a spring animation and never takes the keyboard from the app you're using. -**Automatic connection** -- 📍 **Lives in the menu bar** — a native macOS menu; the icon shows the current mode and dims when disconnected -- 🔌 **Connect Automatically** (on by default) — at launch and whenever your headset connects to the Mac -- 🔁 **Reconnect Automatically** (on by default) — retries if the control link drops while the headset is still connected, backing off from 3 s up to every 60 s -- 🚀 **Launch at Login** (off by default) — uses macOS Login Items +**Make it yours** under **SonyBridge Options › Notch Size**: open width and height, closed width, artwork +size on the closed notch, and text size. Changes apply live and are remembered; the layout adapts so +nothing overlaps (the artwork grows with the height, text size is capped to what fits). **Show Notch** +turns the whole thing off. -**Languages** -- 🌍 **English & French** — follows your macOS language +Spotify is controlled locally through macOS automation. No Spotify account or login is involved, and +SonyBridge never opens Spotify by itself. -## 📥 Install +## Install -**Requirements:** macOS 13 or later, and the Xcode **Command Line Tools** (no full Xcode app needed): +You need **macOS 13 or later** and Apple's **Command Line Tools** (the full Xcode app isn't needed): ```sh xcode-select --install ``` -Then: +Then build and install: ```sh git clone https://github.com/flotttt/SonyBridge.git @@ -82,121 +76,93 @@ cd SonyBridge make install ``` -`make install` builds a release version, quits SonyBridge if it's running, and installs it to -`/Applications/SonyBridge.app`. Afterwards, launch it from Launchpad, Spotlight, or Finder. - -> 💡 On first launch, macOS asks for **Bluetooth permission** — allow it, otherwise SonyBridge can't -> talk to your headphones. Pair and connect your headphones in macOS **Bluetooth settings** first. -> -> 🎵 With the notch on, macOS also asks whether SonyBridge may **control Spotify** — allow it to see and -> control your music from the notch (Spotify's own desktop app, no account needed). - -**To update:** pull the latest changes and run `make install` again. +`make install` builds a release version, quits SonyBridge if it's running, and copies it to +`/Applications/SonyBridge.app`. Open it from Spotlight, Launchpad or Finder. -**To uninstall:** quit SonyBridge, then drag `/Applications/SonyBridge.app` to the Trash. If you turned -on **Launch at Login**, turn it off first (from the SonyBridge Options menu) so macOS doesn't keep a -stale login item around. +On first launch: -## 🕹️ Usage +1. Pair and connect your headphones in **System Settings › Bluetooth**. +2. Allow **Bluetooth** access when macOS asks, or SonyBridge can't reach the headphones. +3. With Spotify open, allow SonyBridge to **control Spotify** when macOS asks, for the notch player. -Click the SonyBridge icon in the menu bar to open the menu. If nothing is connected yet, choose -**Connect…** — it uses the Sony headset already connected to macOS, or opens the macOS Bluetooth picker -if none is connected yet. +**Update:** `git pull`, then `make install` again. -From the menu you can: -- switch **sound modes** (Noise Cancelling / Ambient Sound / Off) and, in Ambient Sound, adjust the level and Focus on Voice; -- pick an **Equalizer** preset or dial in a **Manual** curve; -- toggle **DSEE**, **Speak-to-Chat**, and **Adaptive Volume** (only the ones your model supports); -- set **Auto Power-Off**; -- check the battery level in the menu's header, and the firmware, codec and protocol under **About the Headphones**; -- hover the **notch** to control Spotify and switch sound modes without opening the menu; -- turn **Launch at Login**, **Connect Automatically**, **Reconnect Automatically**, and **Show Notch** on or off under **SonyBridge Options**; -- **Disconnect** (SonyBridge then stays disconnected until you click **Connect…** again or — with **Connect Automatically** on — the headset reconnects to your Mac) or **Quit SonyBridge** (⌘Q). +**Uninstall:** turn off **Launch at Login** if you enabled it, quit SonyBridge, and move +`/Applications/SonyBridge.app` to the Trash. -## 🎧 Supported headphones +## Supported headphones -| Status | Devices | -|--------|---------| -| ✅ **Verified** | WH-CH720N, Sony ULT WEAR (WH-ULT900N), WH-1000XM6 | -| 🟢 **Expected** (v2, over-ear — NC/Ambient/battery/EQ) | WH-1000XM5, WH-XB910N, WH-CH520 | -| 🟡 **v2 earbuds** (controls work; battery format differs) | WF-1000XM4, WF-1000XM5, WF-C700N, LinkBuds S | -| 🔵 **Legacy** (v1 protocol — NC/Ambient only) | WH-1000XM4, WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | +| Status | Models | +|---|---| +| Tested on real hardware | WH-1000XM6, WH-CH720N, Sony ULT WEAR (WH-ULT900N) | +| Expected to work (same protocol) | WH-1000XM5, WH-XB910N, WH-CH520 | +| Earbuds: controls work, battery format differs | WF-1000XM4, WF-1000XM5, WF-C700N, LinkBuds S | +| Older protocol: sound modes only | WH-1000XM4, WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | -> The Verified models are hardware-tested. Others share the same protocol family, so the basics should -> work — per-model quirks are untested. Reports and PRs for other devices are very welcome. -> -> On the **WH-1000XM6**, changing the equalizer (presets and Manual) is coming in a later update (reading -> its 10-band equalizer already works). +Only the first row has been tested. If you try another model, an issue telling how it went is very welcome. -## 🚀 Build from source - -Requires the **Xcode Command Line Tools** (`xcode-select --install`) — the full Xcode app is not needed. +## Build from source ```sh -git clone https://github.com/flotttt/SonyBridge.git -cd SonyBridge make # debug build → build/SonyBridge.app -make run # builds and launches the app (add DEBUG=1 to log every protocol frame) +make run # build and launch (add DEBUG=1 to log every Bluetooth frame) make test # unit tests + translation check -make release # universal (Apple Silicon + Intel) build, zipped to build/SonyBridge.zip +make release # universal build (Apple Silicon + Intel), zipped to build/SonyBridge.zip +make install # release build installed to /Applications make clean # remove build/ ``` -`make run DEBUG=1` logs every frame exchanged with the headphones to -`~/Library/Logs/SonyBridge/app.log` (`build/app.log` is a symlink to it). +The log goes to `~/Library/Logs/SonyBridge/app.log` (`build/app.log` links to it). + +Always start the app through `open`, Finder or the `make` targets. Running +`Contents/MacOS/SonyBridge` directly makes macOS's privacy protection close it on its first Bluetooth access. -> ⚠️ Always launch SonyBridge through `open`, Finder, or `make run`/`make install` — never by running -> `Contents/MacOS/SonyBridge` directly, or macOS's privacy protection can close the app. +The app is Swift (AppKit + SwiftUI) on top of a C++ protocol core. The code is in `Client/`: `Client/macos` +holds the app, and the notch lives in `Client/macos/Notch` and `Client/macos/Music`. -## 🔬 How it works +## How it works -Sony headphones expose a vendor RFCOMM/SPP service. Commands are framed as: +Sony headphones expose a vendor Bluetooth serial (RFCOMM) service. Every command is a small binary frame: ``` - ESCAPE( <4-byte BE length> ) + ESCAPE( <4-byte big-endian length> ) ``` -Two protocol generations exist, distinguished by their SDP service UUID: - -- **v1** — `96CC203E-…` — WH-1000XM4 and older (WH-1000XM3, WH-1000XM2, WH-XB900N…) -- **v2** — `956C7B26-…` — WH-CH720N, Sony ULT WEAR, WH-1000XM5/XM6, WF-series, LinkBuds… - -On every connect, SonyBridge looks for the v1 service first and falls back to v2 (it probes again each -time rather than remembering the result). The v2 path adds the mandatory -init handshake and per-frame host-ACK the newer devices require, plus battery, EQ and DSEE inquiry commands. -Protocol byte layouts were cross-referenced against -[**GadgetBridge**](https://codeberg.org/Freeyourgadget/Gadgetbridge)'s Sony implementation. - -## 🛠️ Troubleshooting +There are two generations of this protocol, told apart by their service UUID: -- **SonyBridge doesn't see my headphones** — pair and connect them in macOS **Bluetooth settings** first, then use **Connect…** in the menu. -- **No Bluetooth permission prompt, or you denied it** — macOS asks for Bluetooth access on first launch; allow it, or SonyBridge can't talk to your headphones. -- **The menu bar icon is missing** — on MacBooks with a notch, the icon can be hidden when the menu bar is full. Free up some room (quit or hide other menu bar icons). -- **Controls stopped responding** — click **Disconnect** then **Connect…** in the menu, or turn the headphones off and on. -- **The app quits itself right after opening** — launch it through `open`, Finder, Launchpad, Spotlight, or `make run`/`make install`, not by running `Contents/MacOS/SonyBridge` directly; macOS's privacy protection can close apps launched that way. +- **v1** (`96CC203E-…`): WH-1000XM4 and older; +- **v2** (`956C7B26-…`): WH-1000XM5/XM6, WH-CH720N, ULT WEAR, WF series, LinkBuds. -## 🤝 Contributing +SonyBridge looks for v1 first and falls back to v2. The v2 path adds the start-up handshake and the +acknowledgement every frame needs, plus the battery, equalizer and DSEE commands. Byte layouts were +cross-checked against [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge)'s Sony support. -Contributions are very welcome — especially **device reports** and **testing on real hardware**. +The notch reads Spotify through the notification the Spotify app posts on every playback change and +through AppleScript for artwork, volume and shuffle. Nothing is polled while the notch is closed. -- 🐛 **Found a bug / have a device to report?** [Open an issue](https://github.com/flotttt/SonyBridge/issues/new) with your model and what happened. -- 🧪 **Want to test?** Build it from source (`make install`) and tell us how it behaves on your headset (a screenshot helps a lot). -- 🔧 **Code?** Fork, branch, and open a PR against `main`. CI builds the macOS app on every PR. +## Troubleshooting -## 🙏 Credits +- **SonyBridge doesn't find the headphones:** connect them in macOS Bluetooth settings first, then choose + **Connect…** in the menu. +- **Nothing happens, no Bluetooth prompt:** check System Settings › Privacy & Security › Bluetooth. +- **The notch shows "SonyBridge isn't allowed to control Spotify":** click **Open Settings** and enable + Spotify under Automation › SonyBridge. +- **The menu bar icon is missing:** on notched MacBooks a crowded menu bar hides icons; quit or hide a few. +- **Controls stopped responding:** **Disconnect** then **Connect…**, or turn the headphones off and on. +- **The app closes right after opening:** launch it through Finder, Spotlight or `make run`, not the binary. -SonyBridge builds directly on the work of: +## Origins -- [**SonyBridge**](https://github.com/AmitRajput-Dev/SonyBridge) by AmitRajput-Dev — the original SonyBridge project this fork builds on -- [**SonyHeadphonesClient**](https://github.com/Plutoberth/SonyHeadphonesClient) by Plutoberth, Mr-M33533K5 & contributors — the original cross-platform client and protocol foundation -- [**semvis123**](https://github.com/semvis123) — the original macOS port -- [**GadgetBridge**](https://codeberg.org/Freeyourgadget/Gadgetbridge) — reverse-engineered v2 protocol reference +SonyBridge started as a fork of [AmitRajput-Dev/SonyBridge](https://github.com/AmitRajput-Dev/SonyBridge), +itself based on [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) (Plutoberth, +semvis123's macOS port and contributors). It has since been reworked into its own app: menu bar interface, +v2 protocol support, automatic connection, the notch and Spotify player. -## ⚠️ Disclaimer +## Disclaimer -This project is **not affiliated with, endorsed by, or connected to Sony**. It talks to your headphones -using a reverse-engineered protocol, for interoperability. Use at your own risk. +Not affiliated with, endorsed by or connected to Sony. SonyBridge uses a reverse-engineered protocol for +interoperability; use it at your own risk. -## 📄 License +## License -[MIT](LICENSE) — original copyright retained; see [Credits](#-credits). +[MIT](LICENSE). The original copyright notice is kept as the license requires. From 4f758f19f6106c6d16c52f436c7e6d079f4574d8 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 14:00:31 +0200 Subject: [PATCH 28/50] chore: rename to SonyNotch, automatic releases, README rewrite Co-Authored-By: Claude Opus 5 (1M context) --- .github/workflows/build.yml | 4 +- .github/workflows/release.yml | 45 ++ Client/Constants.h | 2 +- Client/macos/HeadphonesBridge.mm | 2 +- Client/macos/HeadphonesMenu.swift | 4 +- Client/macos/MenuRows/HeaderRow.swift | 2 +- Client/macos/Music/MusicSource.swift | 2 +- Client/macos/Music/SpotifyLocalSource.swift | 2 +- Client/macos/Notch/MusicTab.swift | 2 +- .../macos/SonyHeadphonesClient.entitlements | 2 +- ...SonyBridgeApp.swift => SonyNotchApp.swift} | 6 +- Client/macos/StatusIcon.swift | 4 +- Client/macos/en.lproj/InfoPlist.strings | 2 +- Client/macos/fr.lproj/InfoPlist.strings | 4 +- Client/macos/fr.lproj/Localizable.strings | 8 +- Client/macos/info.plist | 8 +- Makefile | 21 +- README.md | 213 ++++----- docs/banner.svg | 34 -- docs/connected.png | Bin 259275 -> 0 bytes docs/disconnected.png | Bin 57505 -> 0 bytes docs/index.html | 427 ------------------ scripts/build.sh | 12 +- 23 files changed, 189 insertions(+), 617 deletions(-) create mode 100644 .github/workflows/release.yml rename Client/macos/{SonyBridgeApp.swift => SonyNotchApp.swift} (90%) delete mode 100644 docs/banner.svg delete mode 100644 docs/connected.png delete mode 100644 docs/disconnected.png delete mode 100644 docs/index.html diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e2afbf92..e4cdc568 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -17,5 +17,5 @@ jobs: run: make release - uses: actions/upload-artifact@v4 with: - name: SonyBridge-macOS - path: build/SonyBridge.zip + name: SonyNotch-macOS + path: build/SonyNotch.zip diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..6c14e9ee --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,45 @@ +name: Release + +# Push a version tag to publish a release: +# git tag v1.0.0 && git push origin v1.0.0 +# The app gets its version from the tag, is tested and built for Apple Silicon and Intel, and the zip is attached +# to a GitHub release with its SHA-256 (used by the Homebrew cask). + +on: + push: + tags: ["v*.*.*"] + +permissions: + contents: write + +jobs: + release: + runs-on: macos-latest + steps: + - uses: actions/checkout@v4 + + - name: Set the app version from the tag + run: | + VERSION="${GITHUB_REF_NAME#v}" + echo "VERSION=$VERSION" >> "$GITHUB_ENV" + /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION" Client/macos/info.plist + /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${{ github.run_number }}" Client/macos/info.plist + + - name: Test + run: make test + + - name: Build (release, universal) + run: make release + + - name: Checksum + run: | + cd build + shasum -a 256 SonyNotch.zip | tee SonyNotch.zip.sha256 + + - name: Publish the release + env: + GH_TOKEN: ${{ github.token }} + run: | + gh release create "$GITHUB_REF_NAME" build/SonyNotch.zip build/SonyNotch.zip.sha256 \ + --title "SonyNotch $VERSION" \ + --generate-notes diff --git a/Client/Constants.h b/Client/Constants.h index 839e7f54..e033218c 100644 --- a/Client/Constants.h +++ b/Client/Constants.h @@ -72,7 +72,7 @@ enum class EQ_PRESET : unsigned char MANUAL = 0xa0 }; -#define APP_NAME "SonyBridge " __HEADPHONES_APP_VERSION__ +#define APP_NAME "SonyNotch " __HEADPHONES_APP_VERSION__ #define APP_NAME_W (L"" APP_NAME) using Buffer = std::vector; diff --git a/Client/macos/HeadphonesBridge.mm b/Client/macos/HeadphonesBridge.mm index f62f3fcb..d24da393 100644 --- a/Client/macos/HeadphonesBridge.mm +++ b/Client/macos/HeadphonesBridge.mm @@ -76,7 +76,7 @@ - (instancetype)init { if ((self = [super init])) { _bt = std::make_unique(std::make_unique()); _generation = std::make_shared>(0); - _cmdQueue = dispatch_queue_create("com.sonybridge.commands", DISPATCH_QUEUE_SERIAL); + _cmdQueue = dispatch_queue_create("com.sonynotch.commands", DISPATCH_QUEUE_SERIAL); } return self; } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index c459501c..2d6d3750 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -162,13 +162,13 @@ final class HeadphonesMenu { showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } optionsMenu.addItem(makeNotchSizeItem()) - let optionsItem = NSMenuItem(title: tr("SonyBridge Options"), action: nil, keyEquivalent: "") + let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") optionsItem.submenu = optionsMenu menu.addItem(optionsItem) connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } menu.addItem(connectItem) menu.addItem(.separator()) - menu.addItem(ActionMenuItem(tr("Quit SonyBridge"), key: "q") { NSApp.terminate(nil) }) + menu.addItem(ActionMenuItem(tr("Quit SonyNotch"), key: "q") { NSApp.terminate(nil) }) } // MARK: - Updating diff --git a/Client/macos/MenuRows/HeaderRow.swift b/Client/macos/MenuRows/HeaderRow.swift index 95e2ab48..8ef09511 100644 --- a/Client/macos/MenuRows/HeaderRow.swift +++ b/Client/macos/MenuRows/HeaderRow.swift @@ -7,7 +7,7 @@ struct HeaderRow: View { var body: some View { HStack(alignment: .center, spacing: 8) { VStack(alignment: .leading, spacing: 1) { - Text(model.deviceName.isEmpty ? "SonyBridge" : model.deviceName) + Text(model.deviceName.isEmpty ? "SonyNotch" : model.deviceName) .font(.system(size: 13, weight: .semibold)) Text(statusLine) .font(.system(size: 11)) diff --git a/Client/macos/Music/MusicSource.swift b/Client/macos/Music/MusicSource.swift index 567cdff0..9172d791 100644 --- a/Client/macos/Music/MusicSource.swift +++ b/Client/macos/Music/MusicSource.swift @@ -2,7 +2,7 @@ import Foundation enum MusicSourceStatus: Equatable { case notRunning // the player app isn't open - case permissionDenied // macOS refused SonyBridge the right to control it + case permissionDenied // macOS refused SonyNotch the right to control it case ready } diff --git a/Client/macos/Music/SpotifyLocalSource.swift b/Client/macos/Music/SpotifyLocalSource.swift index 14ee7b4d..d17b98d6 100644 --- a/Client/macos/Music/SpotifyLocalSource.swift +++ b/Client/macos/Music/SpotifyLocalSource.swift @@ -18,7 +18,7 @@ final class SpotifyLocalSource: MusicSource { private var workspaceObservers: [NSObjectProtocol] = [] // Every NSAppleScript is created and run on this serial queue, one at a time. - private let scriptQueue = DispatchQueue(label: "com.sonybridge.spotify") + private let scriptQueue = DispatchQueue(label: "com.sonynotch.spotify") private var readScript: NSAppleScript? // scriptQueue only private var consentGranted = false // scriptQueue only diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index 8cad91aa..df81f42f 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -25,7 +25,7 @@ struct MusicTab: View { case .notRunning: message(tr("Spotify isn't open"), button: tr("Open Spotify")) { music.launchPlayer() } case .permissionDenied: - message(tr("SonyBridge isn't allowed to control Spotify."), button: tr("Open Settings")) { + message(tr("SonyNotch isn't allowed to control Spotify."), button: tr("Open Settings")) { music.openAutomationSettings() } case .ready: diff --git a/Client/macos/SonyHeadphonesClient.entitlements b/Client/macos/SonyHeadphonesClient.entitlements index c16fee2a..cbf07bf3 100644 --- a/Client/macos/SonyHeadphonesClient.entitlements +++ b/Client/macos/SonyHeadphonesClient.entitlements @@ -16,7 +16,7 @@
com.apple.security.temporary-exception.files.home-relative-path.read-write - /Library/Logs/SonyBridge/ + /Library/Logs/SonyNotch/ diff --git a/Client/macos/SonyBridgeApp.swift b/Client/macos/SonyNotchApp.swift similarity index 90% rename from Client/macos/SonyBridgeApp.swift rename to Client/macos/SonyNotchApp.swift index 746d012b..d1d47bc7 100644 --- a/Client/macos/SonyBridgeApp.swift +++ b/Client/macos/SonyNotchApp.swift @@ -2,17 +2,17 @@ import AppKit // Entry point: a menu bar-only app (LSUIElement), no window and no Dock icon. @main -enum SonyBridgeApp { +enum SonyNotchApp { static func main() { // The app is sandboxed, so it can only write inside the folder allowed by the // temporary-exception entitlement. `make run` points it at - // ~/Library/Logs/SonyBridge/app.log (allowed by that exception); `open --stderr` + // ~/Library/Logs/SonyNotch/app.log (allowed by that exception); `open --stderr` // fails on recent macOS, so the path is passed as a launch argument instead. // Redirect stderr to the log file in append mode (unbuffered for live DEBUG hex // dumps). freopen() closes stderr before it knows whether the reopen will // succeed, so a sandbox denial would leave stderr closed with nothing to fall // back to; open()+dup2() only touches stderr once we know the fd is valid. - if let logPath = UserDefaults.standard.string(forKey: "SonyBridgeLogFile") { + if let logPath = UserDefaults.standard.string(forKey: "SonyNotchLogFile") { let fd = open(logPath, O_WRONLY | O_CREAT | O_APPEND, 0o644) if fd >= 0 { dup2(fd, STDERR_FILENO) diff --git a/Client/macos/StatusIcon.swift b/Client/macos/StatusIcon.swift index fe938bbb..478e9074 100644 --- a/Client/macos/StatusIcon.swift +++ b/Client/macos/StatusIcon.swift @@ -12,8 +12,8 @@ enum StatusIcon { static func image(connected: Bool, mode: SHCAmbientMode) -> NSImage? { let name = connected ? symbolName(for: mode) : "headphones" - let image = NSImage(systemSymbolName: name, accessibilityDescription: "SonyBridge") - ?? NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") + let image = NSImage(systemSymbolName: name, accessibilityDescription: "SonyNotch") + ?? NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyNotch") image?.isTemplate = true // macOS tints it for light/dark menu bars return image } diff --git a/Client/macos/en.lproj/InfoPlist.strings b/Client/macos/en.lproj/InfoPlist.strings index 42826841..ab254ce7 100644 --- a/Client/macos/en.lproj/InfoPlist.strings +++ b/Client/macos/en.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ /* Localized Info.plist values (English). Keeps an en.lproj in the bundle so non-French systems fall back to English. */ "NSBluetoothAlwaysUsageDescription" = "This app uses Bluetooth in order to connect to your headphones."; -"NSAppleEventsUsageDescription" = "SonyBridge shows and controls the music playing in Spotify."; +"NSAppleEventsUsageDescription" = "SonyNotch shows and controls the music playing in Spotify."; diff --git a/Client/macos/fr.lproj/InfoPlist.strings b/Client/macos/fr.lproj/InfoPlist.strings index 0f9a918a..54eb41d6 100644 --- a/Client/macos/fr.lproj/InfoPlist.strings +++ b/Client/macos/fr.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ /* Localized Info.plist values (French). */ -"NSBluetoothAlwaysUsageDescription" = "SonyBridge utilise le Bluetooth pour se connecter à votre casque."; -"NSAppleEventsUsageDescription" = "SonyBridge affiche et contrôle la musique en cours dans Spotify."; +"NSBluetoothAlwaysUsageDescription" = "SonyNotch utilise le Bluetooth pour se connecter à votre casque."; +"NSAppleEventsUsageDescription" = "SonyNotch affiche et contrôle la musique en cours dans Spotify."; diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index e73489ba..a7276685 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -1,4 +1,4 @@ -/* SonyBridge — French UI strings. Keys are the English source strings; missing keys fall back to English. */ +/* SonyNotch — French UI strings. Keys are the English source strings; missing keys fall back to English. */ /* Menu */ "Ambient Sound Control" = "Contrôle du son ambiant"; @@ -8,7 +8,7 @@ "Connect…" = "Connecter…"; "Connecting…" = "Connexion…"; "Disconnect" = "Déconnecter"; -"Quit SonyBridge" = "Quitter SonyBridge"; +"Quit SonyNotch" = "Quitter SonyNotch"; "%ld%%" = "%ld %%"; "Not connected" = "Non connecté"; "Connected" = "Connecté"; @@ -44,7 +44,7 @@ "Codec" = "Codec"; "Protocol" = "Protocole"; "Bluetooth" = "Bluetooth"; -"SonyBridge Options" = "Options de SonyBridge"; +"SonyNotch Options" = "Options de SonyNotch"; "Launch at Login" = "Lancer à l’ouverture de session"; "Connect Automatically" = "Connexion automatique"; "Reconnect Automatically" = "Reconnexion automatique"; @@ -64,7 +64,7 @@ "Level" = "Niveau"; "Spotify isn't open" = "Spotify n’est pas ouvert"; "Open Spotify" = "Ouvrir Spotify"; -"SonyBridge isn't allowed to control Spotify." = "SonyBridge n’a pas l’autorisation de contrôler Spotify."; +"SonyNotch isn't allowed to control Spotify." = "SonyNotch n’a pas l’autorisation de contrôler Spotify."; "Open Settings" = "Ouvrir les réglages"; "Nothing playing" = "Rien en cours de lecture"; "Previous track" = "Morceau précédent"; diff --git a/Client/macos/info.plist b/Client/macos/info.plist index 7ff9eb65..08b26b13 100644 --- a/Client/macos/info.plist +++ b/Client/macos/info.plist @@ -10,15 +10,15 @@ fr CFBundleExecutable - SonyBridge + SonyNotch CFBundleIdentifier com.semvis123.SonyHeadphonesClient CFBundleInfoDictionaryVersion 6.0 CFBundleName - SonyBridge + SonyNotch CFBundleDisplayName - SonyBridge + SonyNotch CFBundlePackageType APPL CFBundleShortVersionString @@ -38,7 +38,7 @@ NSBluetoothAlwaysUsageDescription This app uses Bluetooth in order to connect to your headphones. NSAppleEventsUsageDescription - SonyBridge shows and controls the music playing in Spotify. + SonyNotch shows and controls the music playing in Spotify. NSPrincipalClass NSApplication diff --git a/Makefile b/Makefile index 19abe9ef..cf99bb94 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# SonyBridge — build without Xcode. See scripts/build.sh for the knobs. +# SonyNotch — build without Xcode. See scripts/build.sh for the knobs. DEBUG ?= 0 .PHONY: all build run test release install clean @@ -8,27 +8,28 @@ all: build build: DEBUG_PROTOCOL=$(DEBUG) ./scripts/build.sh -LOG_FILE := $(HOME)/Library/Logs/SonyBridge/app.log +LOG_FILE := $(HOME)/Library/Logs/SonyNotch/app.log run: build - -pkill -x SonyBridge; while pgrep -x SonyBridge >/dev/null; do sleep 0.2; done + -pkill -x SonyNotch; while pgrep -x SonyNotch >/dev/null; do sleep 0.2; done @mkdir -p "$(dir $(LOG_FILE))" @ln -sfn "$(LOG_FILE)" "$(CURDIR)/build/app.log" - @echo "=== SonyBridge session $$(date '+%Y-%m-%d %H:%M:%S') ===" >> "$(LOG_FILE)" - open "$(CURDIR)/build/SonyBridge.app" --args -SonyBridgeLogFile "$(LOG_FILE)" + @echo "=== SonyNotch session $$(date '+%Y-%m-%d %H:%M:%S') ===" >> "$(LOG_FILE)" + open "$(CURDIR)/build/SonyNotch.app" --args -SonyNotchLogFile "$(LOG_FILE)" test: ./scripts/test.sh release: CONFIG=release ARCHS="arm64 x86_64" ./scripts/build.sh - cd build && rm -f SonyBridge.zip && ditto -c -k --keepParent SonyBridge.app SonyBridge.zip + cd build && rm -f SonyNotch.zip && ditto -c -k --keepParent SonyNotch.app SonyNotch.zip install: release - -pkill -x SonyBridge; while pgrep -x SonyBridge >/dev/null; do sleep 0.2; done - rm -rf "/Applications/SonyBridge.app" - ditto "$(CURDIR)/build/SonyBridge.app" "/Applications/SonyBridge.app" - open "/Applications/SonyBridge.app" + -pkill -x SonyNotch; while pgrep -x SonyNotch >/dev/null; do sleep 0.2; done + -pkill -x SonyBridge; rm -rf "/Applications/SonyBridge.app" # the app's former name + rm -rf "/Applications/SonyNotch.app" + ditto "$(CURDIR)/build/SonyNotch.app" "/Applications/SonyNotch.app" + open "/Applications/SonyNotch.app" clean: rm -rf build diff --git a/README.md b/README.md index 2c15888d..65a21af1 100644 --- a/README.md +++ b/README.md @@ -1,168 +1,155 @@ -# SonyBridge +# SonyNotch -**Control your Sony headphones from your Mac's menu bar and notch, without the phone app.** +Control your Sony headphones from your Mac, right from the menu bar and the notch. No phone app needed. -SonyBridge is a native macOS app for Sony Bluetooth headphones: noise cancelling, ambient sound, equalizer, -battery and more, from a menu bar menu, plus a notch panel that shows the music playing in Spotify and your -headphones' sound mode. +SonyNotch is a native macOS app for Sony Bluetooth headphones. It switches noise cancelling and ambient sound, +sets the equalizer and shows the battery from a menu bar menu. It also turns the MacBook notch into a small +player for the music playing in Spotify. -It talks to the headphones directly over Bluetooth, so you don't need Sony's *Sound Connect* phone app. - -[Features](#features) · [The notch](#the-notch) · [Install](#install) · [Supported headphones](#supported-headphones) · [Build from source](#build-from-source) · [How it works](#how-it-works) · [Troubleshooting](#troubleshooting) - ---- +It talks to the headphones directly over Bluetooth, so Sony's Sound Connect app isn't needed. ## Features -### In the menu bar - -- **Sound modes:** Noise Cancelling, Ambient Sound (level slider and Focus on Voice) and Off. The menu follows - the headphones' own NC button live. -- **Equalizer:** presets and a Manual mode with one slider per band (5 bands + Clear Bass on older models). - On the WH-1000XM6 the 10-band equalizer is shown but read-only for now. -- **Other settings**, only when your model has them: DSEE, Speak-to-Chat, Adaptive Volume, Auto Power-Off. -- **Battery:** live percentage, per earbud and case on true-wireless models. -- **About the Headphones:** firmware, codec, protocol version and Bluetooth address. -- **Connection:** connects automatically at launch and when the headphones join the Mac, reconnects if the - link drops, and can launch at login. -- **Languages:** English and French, following your macOS language. - -The menu bar icon shows the current sound mode and dims while disconnected. +### Menu bar -### The notch +- Noise Cancelling, Ambient Sound and Off, with the ambient level and Focus on Voice +- Follows the NC button on the headphones in real time +- Equalizer presets and a manual mode (read only on the WH-1000XM6 for now) +- DSEE, Speak-to-Chat, Adaptive Volume and Auto Power-Off when your model has them +- Battery level, per earbud and case on true wireless models +- Firmware, codec and Bluetooth address in About the Headphones +- Connects by itself when the headphones join the Mac and reconnects if the link drops +- Optional launch at login +- English and French -Hover the notch at the top of a MacBook screen and it unfolds into a small player. On a screen without a -notch, the same panel sits in a black pill at the top centre. +The menu bar icon shows the current sound mode and dims when the headphones are disconnected. -**Closed**, the notch shows what's going on at a glance: +### Notch -- the album artwork on the left; -- on the right, small bars in the artwork's colour that move while music plays. Hover them for a - **next track** button, or a **play** button when the music is paused; -- without music, a headphones icon on the left and the current sound mode on the right. +Move the pointer over the notch and it opens into a player. On a screen without a notch it appears as a black +pill at the top of the screen. -**Open**, it's a music player for the **Spotify** desktop app: +When the notch is closed you see the album artwork on the left and little bars on the right that move with the +music, in the colour of the artwork. Hover the bars to skip to the next track, or to resume the music when +it's paused. Without music, the notch shows your headphones and their current sound mode instead. -- artwork, title and artist; -- elapsed time, a progress bar you can click or drag to seek, and the track length; -- previous, play/pause, next and shuffle; -- a volume button that swaps the progress bar for Spotify's volume for a few seconds; -- a headphones button that slides to the **headphones page**: Noise Cancelling / Ambient / Off, ambient - level and Focus on Voice. +When it's open you get: -It opens and closes with a spring animation and never takes the keyboard from the app you're using. +- the artwork, title and artist +- a progress bar you can click or drag +- previous, play/pause, next and shuffle +- a volume button that shows Spotify's volume for a few seconds +- a headphones button that opens the headphones controls (sound mode, ambient level, Focus on Voice) -**Make it yours** under **SonyBridge Options › Notch Size**: open width and height, closed width, artwork -size on the closed notch, and text size. Changes apply live and are remembered; the layout adapts so -nothing overlaps (the artwork grows with the height, text size is capped to what fits). **Show Notch** -turns the whole thing off. +You can resize everything in SonyNotch Options › Notch Size: open width and height, closed width, artwork +size and text size. Changes show live on the notch and are saved. Show Notch turns the notch off completely. -Spotify is controlled locally through macOS automation. No Spotify account or login is involved, and -SonyBridge never opens Spotify by itself. +The player works with the Spotify desktop app. It uses macOS automation, so no Spotify account or login is +involved, and SonyNotch never opens Spotify on its own. ## Install -You need **macOS 13 or later** and Apple's **Command Line Tools** (the full Xcode app isn't needed): - -```sh -xcode-select --install -``` - -Then build and install: - -```sh -git clone https://github.com/flotttt/SonyBridge.git -cd SonyBridge -make install -``` - -`make install` builds a release version, quits SonyBridge if it's running, and copies it to -`/Applications/SonyBridge.app`. Open it from Spotlight, Launchpad or Finder. - -On first launch: +You need macOS 13 or later. -1. Pair and connect your headphones in **System Settings › Bluetooth**. -2. Allow **Bluetooth** access when macOS asks, or SonyBridge can't reach the headphones. -3. With Spotify open, allow SonyBridge to **control Spotify** when macOS asks, for the notch player. +1. Download `SonyNotch.zip` from the [latest release](https://github.com/flotttt/SonyNotch/releases/latest). +2. Unzip it and move `SonyNotch.app` to your Applications folder. +3. Open it. The app isn't signed with an Apple developer account yet, so macOS blocks it the first time. + Go to System Settings › Privacy & Security, scroll down and click Open Anyway. -**Update:** `git pull`, then `make install` again. +Then pair your headphones in System Settings › Bluetooth if they aren't already. SonyNotch asks for Bluetooth +access on first launch, and for permission to control Spotify the first time Spotify is open. Allow both. -**Uninstall:** turn off **Launch at Login** if you enabled it, quit SonyBridge, and move -`/Applications/SonyBridge.app` to the Trash. +To update, download the new release and replace the app. To uninstall, turn off Launch at Login if you +enabled it, quit SonyNotch and move it to the Trash. ## Supported headphones -| Status | Models | +| | Models | |---|---| -| Tested on real hardware | WH-1000XM6, WH-CH720N, Sony ULT WEAR (WH-ULT900N) | -| Expected to work (same protocol) | WH-1000XM5, WH-XB910N, WH-CH520 | -| Earbuds: controls work, battery format differs | WF-1000XM4, WF-1000XM5, WF-C700N, LinkBuds S | -| Older protocol: sound modes only | WH-1000XM4, WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | +| Tested | WH-1000XM6, WH-CH720N, ULT WEAR (WH-ULT900N) | +| Should work | WH-1000XM5, WH-XB910N, WH-CH520 | +| Earbuds, controls work but battery may not | WF-1000XM4, WF-1000XM5, WF-C700N, LinkBuds S | +| Older protocol, sound modes only | WH-1000XM4, WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | -Only the first row has been tested. If you try another model, an issue telling how it went is very welcome. +If you try a model that isn't tested, please open an issue and say how it went. ## Build from source +You need Apple's Command Line Tools. The full Xcode app isn't required. + +```sh +xcode-select --install +git clone https://github.com/flotttt/SonyNotch.git +cd SonyNotch +make install +``` + +`make install` builds the app and copies it to Applications. Other commands: + ```sh -make # debug build → build/SonyBridge.app -make run # build and launch (add DEBUG=1 to log every Bluetooth frame) -make test # unit tests + translation check -make release # universal build (Apple Silicon + Intel), zipped to build/SonyBridge.zip -make install # release build installed to /Applications -make clean # remove build/ +make # debug build in build/SonyNotch.app +make run # build and launch, add DEBUG=1 to log the Bluetooth traffic +make test # unit tests and translation check +make release # universal build zipped in build/SonyNotch.zip +make clean # delete build/ ``` -The log goes to `~/Library/Logs/SonyBridge/app.log` (`build/app.log` links to it). +Logs go to `~/Library/Logs/SonyNotch/app.log`. Always launch the app with `open`, Finder or `make`. Running the +binary inside the app bundle directly gets it closed by macOS when it first uses Bluetooth. -Always start the app through `open`, Finder or the `make` targets. Running -`Contents/MacOS/SonyBridge` directly makes macOS's privacy protection close it on its first Bluetooth access. +The app is written in Swift with AppKit and SwiftUI, on top of a C++ core that handles the headphones +protocol. Everything lives in `Client/`, with the notch in `Client/macos/Notch` and `Client/macos/Music`. -The app is Swift (AppKit + SwiftUI) on top of a C++ protocol core. The code is in `Client/`: `Client/macos` -holds the app, and the notch lives in `Client/macos/Notch` and `Client/macos/Music`. +To publish a release, push a version tag. GitHub Actions tests and builds the app and attaches the zip to the +release. + +```sh +git tag v1.0.0 +git push origin v1.0.0 +``` ## How it works -Sony headphones expose a vendor Bluetooth serial (RFCOMM) service. Every command is a small binary frame: +Sony headphones expose a Bluetooth serial (RFCOMM) service and accept small binary frames: ``` - ESCAPE( <4-byte big-endian length> ) +<0x3e> escaped( type, sequence, 4-byte length, payload, checksum ) <0x3c> ``` -There are two generations of this protocol, told apart by their service UUID: +There are two versions of this protocol. Older headphones up to the WH-1000XM4 use the first one, newer ones +like the WH-1000XM5 and XM6, the WF series and LinkBuds use the second. SonyNotch detects which one the +headphones speak when it connects. The byte layouts were checked against the Sony support in +[Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge). -- **v1** (`96CC203E-…`): WH-1000XM4 and older; -- **v2** (`956C7B26-…`): WH-1000XM5/XM6, WH-CH720N, ULT WEAR, WF series, LinkBuds. +For the notch, Spotify announces every playback change with a system notification, and SonyNotch asks the +app for the artwork, volume and shuffle state with AppleScript. Nothing is polled while the notch is closed. -SonyBridge looks for v1 first and falls back to v2. The v2 path adds the start-up handshake and the -acknowledgement every frame needs, plus the battery, equalizer and DSEE commands. Byte layouts were -cross-checked against [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge)'s Sony support. +## Troubleshooting -The notch reads Spotify through the notification the Spotify app posts on every playback change and -through AppleScript for artwork, volume and shuffle. Nothing is polled while the notch is closed. +**The headphones aren't found.** Connect them in the macOS Bluetooth settings first, then click Connect in the +menu. -## Troubleshooting +**No Bluetooth prompt appeared.** Check System Settings › Privacy & Security › Bluetooth. + +**The notch says SonyNotch isn't allowed to control Spotify.** Click Open Settings and turn on Spotify under +Automation › SonyNotch. + +**The menu bar icon is missing.** A crowded menu bar hides icons behind the notch. Quit or hide a few others. -- **SonyBridge doesn't find the headphones:** connect them in macOS Bluetooth settings first, then choose - **Connect…** in the menu. -- **Nothing happens, no Bluetooth prompt:** check System Settings › Privacy & Security › Bluetooth. -- **The notch shows "SonyBridge isn't allowed to control Spotify":** click **Open Settings** and enable - Spotify under Automation › SonyBridge. -- **The menu bar icon is missing:** on notched MacBooks a crowded menu bar hides icons; quit or hide a few. -- **Controls stopped responding:** **Disconnect** then **Connect…**, or turn the headphones off and on. -- **The app closes right after opening:** launch it through Finder, Spotlight or `make run`, not the binary. +**The controls stopped responding.** Disconnect and connect again from the menu, or turn the headphones off +and on. ## Origins -SonyBridge started as a fork of [AmitRajput-Dev/SonyBridge](https://github.com/AmitRajput-Dev/SonyBridge), -itself based on [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) (Plutoberth, -semvis123's macOS port and contributors). It has since been reworked into its own app: menu bar interface, -v2 protocol support, automatic connection, the notch and Spotify player. +SonyNotch started as a fork of [AmitRajput-Dev/SonyBridge](https://github.com/AmitRajput-Dev/SonyBridge), +which builds on [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) by Plutoberth, +semvis123 and their contributors. It has since been renamed and largely rewritten. ## Disclaimer -Not affiliated with, endorsed by or connected to Sony. SonyBridge uses a reverse-engineered protocol for -interoperability; use it at your own risk. +SonyNotch isn't affiliated with or endorsed by Sony. It uses a reverse engineered protocol. Use it at your own +risk. ## License -[MIT](LICENSE). The original copyright notice is kept as the license requires. +MIT, see [LICENSE](LICENSE). The original copyright notice is kept as the license requires. diff --git a/docs/banner.svg b/docs/banner.svg deleted file mode 100644 index 071e1f43..00000000 --- a/docs/banner.svg +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - SonyBridge - Control your Sony headphones from your desktop. - - - - macOS - - diff --git a/docs/connected.png b/docs/connected.png deleted file mode 100644 index f5766a04bda59f3b38122adc1e908658e8a1b989..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259275 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
- - - -
-
- -
-
- Open-source · macOS -

Your Sony headphones,
finally on your desktop.

-

Noise cancelling, ambient sound, EQ, DSEE and battery — controlled straight from your Mac. No phone, no Sony account.

- -
- $brew install --cask sonybridge - -
-
MIT licensed · builds on the community SonyHeadphonesClient
-
-
-
-
SonyBridge connected to a WH-CH720N, showing noise-cancelling and ambient controls
-
-
-
- -
-
    -
  • WH-1000XM4
  • WH-1000XM5
  • WH-1000XM6
  • WH-CH720N
  • -
  • WF-1000XM5
  • ULT WEAR
  • WF-C700N
  • LinkBuds S
  • -
  • WH-XB910N
  • WH-CH520
  • MDR-XB950BT
  • WH-1000XM3
  • -
- -
- -
-
- Everything the app hides -

Full control, minus the phone.

-

SonyBridge talks to your headset over Bluetooth using Sony's own protocol — so every setting you'd expect from the mobile app is right on your desktop.

-
-
-
-
-
-

Ambient Sound Control

-

Switch between Noise Cancelling, Ambient Sound with 20 levels, and Focus-on-Voice — with live sync when you press the button on the headset.

-
- -
-
-
-

Equalizer + Manual

-

Presets, or a full 5-band manual mode with Clear Bass.

-
-
-
-

DSEE upscaling

-

Restore detail lost to compressed audio, one toggle.

-
-
-
-

Battery, incl. TWS

-

Live percentage — left, right and case for earbuds.

-
-
-
-

Only what fits

-

Auto power-off, Speak-to-Chat & Adaptive Volume appear only when your device supports them.

-
-
-
-

Dual-protocol

-

Auto-detects v1 & v2 headsets — old and new, same app.

-
-
-
- -
-
-
- How it works -

Speaks Sony's binary protocol.

-

Sony headphones expose a vendor RFCOMM/SPP service. SonyBridge frames commands on the wire, handles the v2 init handshake and per-frame ACK the newer devices require, and reads state straight back from the headset.

-
- -
-
- -
-
- Compatibility -

Works across the Sony lineup.

-

The WH-CH720N is fully hardware-verified. The rest share the same protocol family — the basics should just work.

-
-
- Verified - Expected · v2 - v2 earbuds - Legacy · v1 -
-
- WH-CH720N - ULT WEAR - WH-1000XM5 - WH-1000XM6 - WH-XB910N - WH-CH520 - WF-1000XM4 - WF-1000XM5 - WF-C700N - LinkBuds S - WH-1000XM4 - WH-1000XM3 - WH-XB900N - MDR-XB950BT -
-
- -
-
- Get started -

Install in a minute.

-

Pair your headphones in your macOS Bluetooth settings first, then open SonyBridge and hit Connect.

-
-
-
-
macOS
-
$brew install --cask sonybridge
-
macOS 11+ · Apple Silicon & Intel · or download the .app
- -
-
-
- -
-
- Free & open-source -

Keep the reverse-engineering going.

-

SonyBridge is free forever. If it saved you from Sony's app, a sponsorship or a star keeps new devices and features coming.

- -
-
- - -
- -
Copied to clipboard
- - - - - diff --git a/scripts/build.sh b/scripts/build.sh index 1908714f..119115e7 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -1,5 +1,5 @@ #!/bin/bash -# Builds build/SonyBridge.app with the Command Line Tools only (no Xcode needed). +# Builds build/SonyNotch.app with the Command Line Tools only (no Xcode needed). # CONFIG=debug|release (default: debug) # ARCHS="arm64 x86_64" (default: this Mac's architecture; several = universal binary via lipo) # DEBUG_PROTOCOL=1 (hex-dumps every frame exchanged with the headphones to stderr) @@ -10,7 +10,7 @@ ROOT=$(cd "$(dirname "$0")/.." && pwd) CORE=$ROOT/Client MAC=$CORE/macos OUT=$ROOT/build -APP=$OUT/SonyBridge.app +APP=$OUT/SonyNotch.app SDK=$(xcrun --show-sdk-path) CONFIG=${CONFIG:-debug} ARCHS=${ARCHS:-$(uname -m)} @@ -36,7 +36,7 @@ for ARCH in $ARCHS; do echo "== [$ARCH] Swift" swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 $SWIFT_OPT $SWIFT_DEFINES -wmo -parse-as-library \ - -module-name SonyBridge \ + -module-name SonyNotch \ -import-objc-header "$MAC/SonyHeadphonesClient-Bridging-Header.h" -I "$MAC" -I "$CORE" \ -c "${SWIFT_SOURCES[@]}" -o "$OBJ/swift.o" @@ -49,13 +49,13 @@ for ARCH in $ARCHS; do done echo "== [$ARCH] Link" - swiftc -target "$TARGET" -sdk "$SDK" "$OBJ"/*.o -o "$OBJ/SonyBridge" -lc++ \ + swiftc -target "$TARGET" -sdk "$SDK" "$OBJ"/*.o -o "$OBJ/SonyNotch" -lc++ \ -framework AppKit -framework SwiftUI -framework Combine -framework IOBluetooth \ -framework IOBluetoothUI -framework ServiceManagement - BINARIES="$BINARIES $OBJ/SonyBridge" + BINARIES="$BINARIES $OBJ/SonyNotch" done -lipo -create $BINARIES -output "$APP/Contents/MacOS/SonyBridge" +lipo -create $BINARIES -output "$APP/Contents/MacOS/SonyNotch" echo "== Resources" cp "$MAC/info.plist" "$APP/Contents/Info.plist" From 3c43394878b9179ef2ed2a36c15c2220c5c7dce4 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 14:16:33 +0200 Subject: [PATCH 29/50] add realese --- .github/workflows/release.yml | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 6c14e9ee..b2f31a20 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -36,10 +36,15 @@ jobs: cd build shasum -a 256 SonyNotch.zip | tee SonyNotch.zip.sha256 + # A release already made by hand for this tag (title and notes written on GitHub) only gets the files. - name: Publish the release env: GH_TOKEN: ${{ github.token }} run: | - gh release create "$GITHUB_REF_NAME" build/SonyNotch.zip build/SonyNotch.zip.sha256 \ - --title "SonyNotch $VERSION" \ - --generate-notes + if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then + gh release upload "$GITHUB_REF_NAME" build/SonyNotch.zip build/SonyNotch.zip.sha256 --clobber + else + gh release create "$GITHUB_REF_NAME" build/SonyNotch.zip build/SonyNotch.zip.sha256 \ + --title "SonyNotch $VERSION" \ + --generate-notes + fi From 8da50bc7b2eafba729b72ffe86ec05de35e5cb92 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 14:20:05 +0200 Subject: [PATCH 30/50] docs: user-first README --- README.md | 179 +++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 88 deletions(-) diff --git a/README.md b/README.md index 65a21af1..53deca17 100644 --- a/README.md +++ b/README.md @@ -2,65 +2,69 @@ Control your Sony headphones from your Mac, right from the menu bar and the notch. No phone app needed. -SonyNotch is a native macOS app for Sony Bluetooth headphones. It switches noise cancelling and ambient sound, -sets the equalizer and shows the battery from a menu bar menu. It also turns the MacBook notch into a small -player for the music playing in Spotify. +SonyNotch switches noise cancelling and ambient sound, sets the equalizer and shows the battery of your Sony +Bluetooth headphones. It also turns the MacBook notch into a small player for the music playing in Spotify. -It talks to the headphones directly over Bluetooth, so Sony's Sound Connect app isn't needed. +## Install -## Features +1. Download **SonyNotch.zip** from the [latest release](https://github.com/flotttt/SonyNotch/releases/latest) +2. Open the zip and drag **SonyNotch** into your Applications folder +3. Open SonyNotch. The first time, macOS says it can't check the app because it isn't signed with an Apple + developer account yet. Click Done, then go to System Settings › Privacy & Security, scroll down and click + **Open Anyway** -### Menu bar +SonyNotch then appears in the menu bar. Allow Bluetooth access when macOS asks, and allow SonyNotch to control +Spotify for the notch player. -- Noise Cancelling, Ambient Sound and Off, with the ambient level and Focus on Voice -- Follows the NC button on the headphones in real time -- Equalizer presets and a manual mode (read only on the WH-1000XM6 for now) -- DSEE, Speak-to-Chat, Adaptive Volume and Auto Power-Off when your model has them -- Battery level, per earbud and case on true wireless models -- Firmware, codec and Bluetooth address in About the Headphones -- Connects by itself when the headphones join the Mac and reconnects if the link drops -- Optional launch at login -- English and French +If your headphones aren't connected to the Mac yet, pair them in System Settings › Bluetooth first. -The menu bar icon shows the current sound mode and dims when the headphones are disconnected. +Works on macOS 13 or later, on Apple Silicon and Intel Macs. -### Notch +## Update -Move the pointer over the notch and it opens into a player. On a screen without a notch it appears as a black -pill at the top of the screen. +Download the new SonyNotch.zip from the [latest release](https://github.com/flotttt/SonyNotch/releases/latest), +quit SonyNotch and replace the app in Applications. Your settings are kept. macOS may ask for the Bluetooth and +Spotify permissions again. -When the notch is closed you see the album artwork on the left and little bars on the right that move with the -music, in the colour of the artwork. Hover the bars to skip to the next track, or to resume the music when -it's paused. Without music, the notch shows your headphones and their current sound mode instead. +## Uninstall -When it's open you get: +If you turned on Launch at Login, turn it off first. Then quit SonyNotch and move it to the Trash. -- the artwork, title and artist -- a progress bar you can click or drag -- previous, play/pause, next and shuffle -- a volume button that shows Spotify's volume for a few seconds -- a headphones button that opens the headphones controls (sound mode, ambient level, Focus on Voice) +## What it does -You can resize everything in SonyNotch Options › Notch Size: open width and height, closed width, artwork -size and text size. Changes show live on the notch and are saved. Show Notch turns the notch off completely. +### Menu bar -The player works with the Spotify desktop app. It uses macOS automation, so no Spotify account or login is -involved, and SonyNotch never opens Spotify on its own. +Click the headphones icon in the menu bar to: -## Install +- switch between Noise Cancelling, Ambient Sound and Off, and set the ambient level and Focus on Voice +- pick an equalizer preset or make your own (read only on the WH-1000XM6 for now) +- turn DSEE, Speak-to-Chat and Adaptive Volume on or off, and set Auto Power-Off, when your model has them +- see the battery level, for each earbud and the case on true wireless models +- see the firmware, codec and Bluetooth address in About the Headphones -You need macOS 13 or later. +The icon shows the current sound mode and follows the NC button on your headphones. SonyNotch connects on its +own when the headphones join the Mac, reconnects if the link drops, and can launch at login. It's available in +English and French. -1. Download `SonyNotch.zip` from the [latest release](https://github.com/flotttt/SonyNotch/releases/latest). -2. Unzip it and move `SonyNotch.app` to your Applications folder. -3. Open it. The app isn't signed with an Apple developer account yet, so macOS blocks it the first time. - Go to System Settings › Privacy & Security, scroll down and click Open Anyway. +### Notch -Then pair your headphones in System Settings › Bluetooth if they aren't already. SonyNotch asks for Bluetooth -access on first launch, and for permission to control Spotify the first time Spotify is open. Allow both. +Move the pointer over the notch and it opens into a player with: -To update, download the new release and replace the app. To uninstall, turn off Launch at Login if you -enabled it, quit SonyNotch and move it to the Trash. +- the artwork, title and artist +- a progress bar you can click or drag +- previous, play/pause, next and shuffle +- a volume button for Spotify's volume +- a headphones button to change the sound mode without opening the menu + +When the notch is closed, it shows the album artwork and little bars that move with the music. Hover the bars +to skip to the next track, or to resume the music when it's paused. + +To change its size, open the menu and go to SonyNotch Options › Notch Size. You can set the width and height, +the size of the closed notch, the artwork and the text. You see the result live and it's saved. To hide the +notch, turn off Show Notch in the same menu. + +The player works with the Spotify app for Mac, without any account or login. On a screen without a notch, it +shows up as a black pill at the top of the screen. ## Supported headphones @@ -69,46 +73,63 @@ enabled it, quit SonyNotch and move it to the Trash. | Tested | WH-1000XM6, WH-CH720N, ULT WEAR (WH-ULT900N) | | Should work | WH-1000XM5, WH-XB910N, WH-CH520 | | Earbuds, controls work but battery may not | WF-1000XM4, WF-1000XM5, WF-C700N, LinkBuds S | -| Older protocol, sound modes only | WH-1000XM4, WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | +| Older models, sound modes only | WH-1000XM4, WH-1000XM3, WH-1000XM2, WH-XB900N, MDR-XB950BT | -If you try a model that isn't tested, please open an issue and say how it went. +If you try a model that isn't tested, please [open an issue](https://github.com/flotttt/SonyNotch/issues/new) +and say how it went. -## Build from source +## Troubleshooting -You need Apple's Command Line Tools. The full Xcode app isn't required. +**macOS won't open the app.** Go to System Settings › Privacy & Security and click Open Anyway, as in the +install steps. -```sh -xcode-select --install -git clone https://github.com/flotttt/SonyNotch.git -cd SonyNotch -make install -``` +**The headphones aren't found.** Connect them in System Settings › Bluetooth, then click Connect in the +SonyNotch menu. -`make install` builds the app and copies it to Applications. Other commands: +**Nothing happens after opening the app.** Check that SonyNotch is allowed in System Settings › Privacy & +Security › Bluetooth. + +**The notch says SonyNotch isn't allowed to control Spotify.** Click Open Settings and turn on Spotify under +Automation › SonyNotch. + +**The menu bar icon is missing.** When the menu bar is full, macOS hides icons behind the notch. Quit or hide a +few other menu bar apps. + +**The controls stopped responding.** Click Disconnect then Connect in the menu, or turn the headphones off and +on. + +## For developers + +### Build from source + +You need Apple's Command Line Tools (`xcode-select --install`). The full Xcode app isn't required. ```sh -make # debug build in build/SonyNotch.app +git clone https://github.com/flotttt/SonyNotch.git +cd SonyNotch +make install # build and install to Applications make run # build and launch, add DEBUG=1 to log the Bluetooth traffic make test # unit tests and translation check make release # universal build zipped in build/SonyNotch.zip -make clean # delete build/ ``` -Logs go to `~/Library/Logs/SonyNotch/app.log`. Always launch the app with `open`, Finder or `make`. Running the -binary inside the app bundle directly gets it closed by macOS when it first uses Bluetooth. +Logs go to `~/Library/Logs/SonyNotch/app.log`. Launch the app with `open`, Finder or `make`, not by running the +binary inside the bundle, or macOS closes it when it first uses Bluetooth. + +The app is written in Swift with AppKit and SwiftUI, on top of a C++ core for the headphones protocol. The code +is in `Client/`, and the notch is in `Client/macos/Notch` and `Client/macos/Music`. -The app is written in Swift with AppKit and SwiftUI, on top of a C++ core that handles the headphones -protocol. Everything lives in `Client/`, with the notch in `Client/macos/Notch` and `Client/macos/Music`. +### Publish a release -To publish a release, push a version tag. GitHub Actions tests and builds the app and attaches the zip to the -release. +Push a version tag. GitHub Actions runs the tests, builds the app with that version number and attaches +SonyNotch.zip to the release. ```sh -git tag v1.0.0 -git push origin v1.0.0 +git tag v1.1.0 +git push origin v1.1.0 ``` -## How it works +### How it talks to the headphones Sony headphones expose a Bluetooth serial (RFCOMM) service and accept small binary frames: @@ -116,28 +137,12 @@ Sony headphones expose a Bluetooth serial (RFCOMM) service and accept small bina <0x3e> escaped( type, sequence, 4-byte length, payload, checksum ) <0x3c> ``` -There are two versions of this protocol. Older headphones up to the WH-1000XM4 use the first one, newer ones -like the WH-1000XM5 and XM6, the WF series and LinkBuds use the second. SonyNotch detects which one the -headphones speak when it connects. The byte layouts were checked against the Sony support in +Headphones up to the WH-1000XM4 use a first version of this protocol, newer ones use a second. SonyNotch +detects which one when it connects. The byte layouts were checked against the Sony support in [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge). -For the notch, Spotify announces every playback change with a system notification, and SonyNotch asks the -app for the artwork, volume and shuffle state with AppleScript. Nothing is polled while the notch is closed. - -## Troubleshooting - -**The headphones aren't found.** Connect them in the macOS Bluetooth settings first, then click Connect in the -menu. - -**No Bluetooth prompt appeared.** Check System Settings › Privacy & Security › Bluetooth. - -**The notch says SonyNotch isn't allowed to control Spotify.** Click Open Settings and turn on Spotify under -Automation › SonyNotch. - -**The menu bar icon is missing.** A crowded menu bar hides icons behind the notch. Quit or hide a few others. - -**The controls stopped responding.** Disconnect and connect again from the menu, or turn the headphones off -and on. +For the notch, Spotify posts a system notification on every playback change, and SonyNotch asks the app for +the artwork, volume and shuffle state with AppleScript. Nothing is polled while the notch is closed. ## Origins @@ -145,10 +150,8 @@ SonyNotch started as a fork of [AmitRajput-Dev/SonyBridge](https://github.com/Am which builds on [SonyHeadphonesClient](https://github.com/Plutoberth/SonyHeadphonesClient) by Plutoberth, semvis123 and their contributors. It has since been renamed and largely rewritten. -## Disclaimer - -SonyNotch isn't affiliated with or endorsed by Sony. It uses a reverse engineered protocol. Use it at your own -risk. +SonyNotch isn't affiliated with or endorsed by Sony. It uses a reverse engineered protocol, so use it at your +own risk. ## License From ce02468d1c6fa60041b2b211090994c1154eba1a Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 14:23:37 +0200 Subject: [PATCH 31/50] fix(notch): centre the playback controls, remove shuffle --- Client/macos/Music/MusicController.swift | 5 ---- Client/macos/Music/MusicSource.swift | 1 - Client/macos/Music/NowPlaying.swift | 1 - Client/macos/Music/SpotifyLocalSource.swift | 10 ------- Client/macos/Music/SpotifyPlaybackInfo.swift | 8 +++--- Client/macos/Music/SpotifyScript.swift | 2 +- Client/macos/Notch/MusicTab.swift | 26 ++++++++----------- Client/macos/fr.lproj/Localizable.strings | 1 - Client/tests/LogicTests/main.swift | 20 +++++--------- README.md | 4 +-- .../specs/2026-09-11-notch-design.md | 4 +-- 11 files changed, 25 insertions(+), 57 deletions(-) diff --git a/Client/macos/Music/MusicController.swift b/Client/macos/Music/MusicController.swift index cd48768e..44589200 100644 --- a/Client/macos/Music/MusicController.swift +++ b/Client/macos/Music/MusicController.swift @@ -85,11 +85,6 @@ final class MusicController: ObservableObject { if final { source.refresh() } } - func toggleShuffle() { - guard let shuffling = nowPlaying?.isShuffling else { return } - source.setShuffling(!shuffling) - } - func launchPlayer() { source.launchPlayer() } func openAutomationSettings() { diff --git a/Client/macos/Music/MusicSource.swift b/Client/macos/Music/MusicSource.swift index 9172d791..b8e31266 100644 --- a/Client/macos/Music/MusicSource.swift +++ b/Client/macos/Music/MusicSource.swift @@ -18,6 +18,5 @@ protocol MusicSource: AnyObject { func previous() func seek(to seconds: TimeInterval) func setVolume(_ volume: Int) - func setShuffling(_ on: Bool) func launchPlayer() } diff --git a/Client/macos/Music/NowPlaying.swift b/Client/macos/Music/NowPlaying.swift index b9a75fff..02beb0fa 100644 --- a/Client/macos/Music/NowPlaying.swift +++ b/Client/macos/Music/NowPlaying.swift @@ -20,7 +20,6 @@ struct NowPlaying: Equatable { var positionDate: Date var isPlaying: Bool var volume: Int? // 0...100; nil until known - var isShuffling: Bool? // nil until known var deviceName: String? // nil = this Mac var capabilities: MusicCapabilities } diff --git a/Client/macos/Music/SpotifyLocalSource.swift b/Client/macos/Music/SpotifyLocalSource.swift index d17b98d6..d4f8b906 100644 --- a/Client/macos/Music/SpotifyLocalSource.swift +++ b/Client/macos/Music/SpotifyLocalSource.swift @@ -108,14 +108,6 @@ final class SpotifyLocalSource: MusicSource { send("set sound volume to \(clamped)") } - func setShuffling(_ on: Bool) { - if var track = nowPlaying { - track.isShuffling = on - publish(status, track) - } - send("set shuffling to \(on)") - } - func launchPlayer() { guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.bundleIdentifier) else { fputs("[spotify] Spotify isn't installed\n", stderr) @@ -150,12 +142,10 @@ final class SpotifyLocalSource: MusicSource { publish(denied ? .permissionDenied : .ready, nil) case .track(var track): // Artwork and volume only come from Apple Events: keep them for the same track, read them otherwise. - // Shuffle belongs to the player, not the track: always keep it. if let current = nowPlaying, current.trackID == track.trackID { track.artworkURL = current.artworkURL track.volume = current.volume } - track.isShuffling = nowPlaying?.isShuffling publish(denied ? .permissionDenied : .ready, track) if track.artworkURL == nil && !denied { refresh() } case .incomplete: diff --git a/Client/macos/Music/SpotifyPlaybackInfo.swift b/Client/macos/Music/SpotifyPlaybackInfo.swift index 9a2442dc..3f3fde01 100644 --- a/Client/macos/Music/SpotifyPlaybackInfo.swift +++ b/Client/macos/Music/SpotifyPlaybackInfo.swift @@ -30,17 +30,16 @@ enum SpotifyPlaybackInfo { positionDate: date, isPlaying: state == "Playing", volume: nil, - isShuffling: nil, deviceName: nil, capabilities: localCapabilities)) } - // SpotifyScript.readState's reply: "stopped", or 10 fields separated by U+001F — state, track id, name, - // artist, album, duration (ms), position (ms), artwork URL, volume, shuffling ("true" / "false"). + // SpotifyScript.readState's reply: "stopped", or 9 fields separated by U+001F — state, track id, name, + // artist, album, duration (ms), position (ms), artwork URL, volume. static func parse(scriptResult text: String, at date: Date) -> SpotifyState { if text == "stopped" { return .stopped } let fields = text.split(separator: fieldSeparator, omittingEmptySubsequences: false).map(String.init) - guard fields.count == 10, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { + guard fields.count == 9, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { return .incomplete } return .track(NowPlaying( @@ -54,7 +53,6 @@ enum SpotifyPlaybackInfo { positionDate: date, isPlaying: fields[0] == "playing", volume: Int(fields[8]).map { min(100, max(0, $0)) }, - isShuffling: fields[9] == "true" ? true : fields[9] == "false" ? false : nil, deviceName: nil, capabilities: localCapabilities)) } diff --git a/Client/macos/Music/SpotifyScript.swift b/Client/macos/Music/SpotifyScript.swift index f52dd930..406cb44e 100644 --- a/Client/macos/Music/SpotifyScript.swift +++ b/Client/macos/Music/SpotifyScript.swift @@ -18,7 +18,7 @@ enum SpotifyScript { set sep to (character id 31) set art to artwork url of t if art is missing value then set art to "" - return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) & sep & (shuffling as text) + return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) end tell end timeout """ diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index df81f42f..ebbaa4eb 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -1,7 +1,7 @@ import SwiftUI // Notch player page (spec §4.2): artwork, title and artist; progress; headphones, previous, play/pause, next, -// shuffle. The volume button swaps the progress bar for Spotify's volume bar for a few seconds. Sizes follow +// volume. The volume button swaps the progress bar for Spotify's volume bar for a few seconds. Sizes follow // the notch zoom; extra height grows the artwork. struct MusicTab: View { private static let volumeAutoHide: TimeInterval = 4 @@ -90,25 +90,21 @@ struct MusicTab: View { } .animation(NotchMotion.content, value: showVolume) Spacer(minLength: 6 * s) + // The side buttons take equal flexible widths, so previous / play / next stay centred on the notch. HStack(spacing: 0) { iconButton("headphones", label: tr("Headphones"), action: showHeadphones) - Spacer() - iconButton("backward.fill", size: 17, color: .white, label: tr("Previous track")) { music.previous() } - Spacer() - iconButton(track.isPlaying ? "pause.fill" : "play.fill", size: 21, color: .white, - label: tr("Play or pause")) { music.playPause() } - .animation(NotchMotion.content, value: track.isPlaying) - Spacer() - iconButton("forward.fill", size: 17, color: .white, label: tr("Next track")) { music.next() } - Spacer() - iconButton("shuffle", color: track.isShuffling == true ? .white : .gray, label: tr("Shuffle")) { - music.toggleShuffle() + .frame(maxWidth: .infinity, alignment: .leading) + HStack(spacing: 22 * s) { + iconButton("backward.fill", size: 17, color: .white, label: tr("Previous track")) { music.previous() } + iconButton(track.isPlaying ? "pause.fill" : "play.fill", size: 21, color: .white, + label: tr("Play or pause")) { music.playPause() } + .animation(NotchMotion.content, value: track.isPlaying) + iconButton("forward.fill", size: 17, color: .white, label: tr("Next track")) { music.next() } } - .disabled(track.isShuffling == nil) - Spacer() iconButton(showVolume ? "speaker.wave.2.fill" : "speaker.wave.2", color: showVolume ? .white : .gray, label: tr("Spotify volume")) { toggleVolume() } - .disabled(!track.capabilities.canSetVolume || track.volume == nil) + .disabled(!track.capabilities.canSetVolume || track.volume == nil) + .frame(maxWidth: .infinity, alignment: .trailing) } } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index a7276685..fa89187e 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -70,7 +70,6 @@ "Previous track" = "Morceau précédent"; "Play or pause" = "Lecture ou pause"; "Next track" = "Morceau suivant"; -"Shuffle" = "Lecture aléatoire"; "Spotify volume" = "Volume de Spotify"; "Back" = "Retour"; "Voice" = "Voix"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 19e53cbc..3da79df4 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -120,7 +120,7 @@ do { let t0 = Date(timeIntervalSince1970: 1_000) var track = NowPlaying(trackID: "spotify:track:1", title: "A", artist: "B", album: "C", artworkURL: nil, duration: 200, position: 30, positionDate: t0, isPlaying: true, volume: 50, - isShuffling: nil, deviceName: nil, + deviceName: nil, capabilities: MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false)) check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 42, "playing: advances") check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 200, "bounded by the duration") @@ -132,7 +132,7 @@ do { check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 530, "unknown duration: not bounded") let nextTrack = NowPlaying(trackID: "spotify:track:2", title: "D", artist: "E", album: "F", artworkURL: nil, duration: 180, position: 0, positionDate: t0.addingTimeInterval(100), isPlaying: true, - volume: 50, isShuffling: nil, deviceName: nil, capabilities: track.capabilities) + volume: 50, deviceName: nil, capabilities: track.capabilities) check(PlaybackClock.position(of: nextTrack, at: t0.addingTimeInterval(100)) == 0, "track change: starts from 0") check(PlaybackClock.format(65) == "1:05", "format 1:05 was \(PlaybackClock.format(65))") check(PlaybackClock.format(754.9) == "12:34", "format rounds down") @@ -150,8 +150,8 @@ do { if case .track(let track) = SpotifyPlaybackInfo.parse(signal: signal, at: t0) { check(track.trackID == "spotify:track:42" && track.title == "Midnight City" && track.artist == "M83", "signal: names") check(track.duration == 243 && track.position == 12.5 && track.positionDate == t0 && track.isPlaying, "signal: timing") - check(track.artworkURL == nil && track.volume == nil && track.isShuffling == nil && track.deviceName == nil, - "signal: no artwork, volume or shuffle, this Mac") + check(track.artworkURL == nil && track.volume == nil && track.deviceName == nil, + "signal: no artwork or volume, this Mac") check(track.capabilities == SpotifyPlaybackInfo.localCapabilities, "signal: local capabilities") } else { check(false, "signal with full info decodes to a track") @@ -174,30 +174,22 @@ do { let t0 = Date(timeIntervalSince1970: 1_000) let sep = "\u{1F}" let text = ["paused", "spotify:track:7", "Title", "Artist", "Album", "180000", "61500", - "https://i.scdn.co/image/ab", "70", "true"].joined(separator: sep) + "https://i.scdn.co/image/ab", "70"].joined(separator: sep) if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: text, at: t0) { check(!track.isPlaying && track.duration == 180 && track.position == 61.5, "script: timing") check(track.artworkURL == URL(string: "https://i.scdn.co/image/ab") && track.volume == 70, "script: artwork and volume") - check(track.isShuffling == true, "script: shuffle on") check(track.title == "Title" && track.album == "Album" && track.positionDate == t0, "script: names") } else { check(false, "script result decodes to a track") } - let local = ["playing", "spotify:local:x", "T", "", "", "1000", "0", "", "101", "false"].joined(separator: sep) + let local = ["playing", "spotify:local:x", "T", "", "", "1000", "0", "", "101"].joined(separator: sep) if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: local, at: t0) { check(track.artworkURL == nil && track.volume == 100 && track.artist.isEmpty, "script: empty fields, volume clamped") - check(track.isShuffling == false, "script: shuffle off") } else { check(false, "script result with empty fields decodes to a track") } check(SpotifyPlaybackInfo.parse(scriptResult: "stopped", at: t0) == .stopped, "script: stopped") check(SpotifyPlaybackInfo.parse(scriptResult: "garbage", at: t0) == .incomplete, "script: malformed") - let unknownShuffle = ["playing", "spotify:track:8", "T", "A", "B", "1000", "0", "", "50", "?"].joined(separator: sep) - if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: unknownShuffle, at: t0) { - check(track.isShuffling == nil, "script: unreadable shuffle is unknown") - } else { - check(false, "script result with an unreadable shuffle decodes to a track") - } } if failures > 0 { diff --git a/README.md b/README.md index 53deca17..a562ba25 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ Move the pointer over the notch and it opens into a player with: - the artwork, title and artist - a progress bar you can click or drag -- previous, play/pause, next and shuffle +- previous, play/pause and next - a volume button for Spotify's volume - a headphones button to change the sound mode without opening the menu @@ -142,7 +142,7 @@ detects which one when it connects. The byte layouts were checked against the So [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge). For the notch, Spotify posts a system notification on every playback change, and SonyNotch asks the app for -the artwork, volume and shuffle state with AppleScript. Nothing is polled while the notch is closed. +the artwork and volume with AppleScript. Nothing is polled while the notch is closed. ## Origins diff --git a/docs/superpowers/specs/2026-09-11-notch-design.md b/docs/superpowers/specs/2026-09-11-notch-design.md index 93cdb087..77458583 100644 --- a/docs/superpowers/specs/2026-09-11-notch-design.md +++ b/docs/superpowers/specs/2026-09-11-notch-design.md @@ -286,8 +286,8 @@ Décidés avec l'utilisateur sur l'app en marche ; ils remplacent §4.2 et une p plate, durée totale ; boutons 🎧 ⏮ ⏯ ⏭ 🔀 🔊. 🎧 fait glisser le lecteur vers le panneau Casque (‹ retour) ; 🔊 remplace la progression par la barre de volume Spotify, repliée après 4 s sans action. Le lecteur s'ouvre sur la page choisie en dernier (première ouverture : Musique s'il y a une musique, sinon Casque). -- **Lecture aléatoire** : `shuffling` lu par `readState` (10ᵉ champ, `NowPlaying.isShuffling`) et basculé - par `set shuffling to …`. « J'aime » n'existe pas en local (étape 2). +- **Lecture aléatoire** : ajoutée puis retirée (le bouton décentrait lecture/pause). « J'aime » n'existe pas + en local (étape 2). - **Taille ouverte 300 × 166 pt** ; coins du haut évasés vers la barre des menus. - **Aucun contrôle AppKit dans l'encoche** (sélecteur segmenté, `Slider`, `Toggle`, bouton bordé) : ils ignorent l'échelle et le découpage SwiftUI et débordaient à l'ouverture, au changement de page et à la From 6bffc79abc587239e3d43a2232a9db5b6919ce45 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 14:38:38 +0200 Subject: [PATCH 32/50] feat: update notice in the menu, Homebrew cask updated on release --- Client/macos/Updates/ReleaseInfo.swift | 61 ++++++++++++++++++++++++ Client/macos/Updates/UpdateChecker.swift | 46 ++++++++++++++++++ 2 files changed, 107 insertions(+) create mode 100644 Client/macos/Updates/ReleaseInfo.swift create mode 100644 Client/macos/Updates/UpdateChecker.swift diff --git a/Client/macos/Updates/ReleaseInfo.swift b/Client/macos/Updates/ReleaseInfo.swift new file mode 100644 index 00000000..c48dc0c7 --- /dev/null +++ b/Client/macos/Updates/ReleaseInfo.swift @@ -0,0 +1,61 @@ +import Foundation + +// A "1.2.3" version, compared number by number. A leading "v" and a pre-release suffix ("-beta.1") are ignored, +// missing numbers count as 0. Pure, tested in LogicTests. +struct AppVersion: Comparable { + let numbers: [Int] + + init?(_ text: String) { + var core = text.trimmingCharacters(in: .whitespaces) + if core.hasPrefix("v") || core.hasPrefix("V") { core.removeFirst() } + if let dash = core.firstIndex(of: "-") { core = String(core[.. Bool { + lhs.padded(to: rhs) == rhs.padded(to: lhs) + } + + static func < (lhs: AppVersion, rhs: AppVersion) -> Bool { + lhs.padded(to: rhs).lexicographicallyPrecedes(rhs.padded(to: lhs)) + } + + private func padded(to other: AppVersion) -> [Int] { + numbers + Array(repeating: 0, count: max(0, other.numbers.count - numbers.count)) + } +} + +// The latest published release on GitHub. +struct LatestRelease: Equatable { + let version: AppVersion + let tag: String + let pageURL: URL +} + +// Reads GitHub's "latest release" reply and decides whether it's an update for this app. +enum ReleaseInfo { + static let latestURL = URL(string: "https://api.github.com/repos/flotttt/SonyNotch/releases/latest")! + + private struct Reply: Decodable { + let tag_name: String + let html_url: URL + let draft: Bool? + let prerelease: Bool? + } + + // nil for drafts, pre-releases and anything unreadable. + static func parse(json: Data) -> LatestRelease? { + guard let reply = try? JSONDecoder().decode(Reply.self, from: json), + reply.draft != true, reply.prerelease != true, + let version = AppVersion(reply.tag_name) else { return nil } + return LatestRelease(version: version, tag: reply.tag_name, pageURL: reply.html_url) + } + + // The release, only when it's newer than the running app (whose version must be readable). + static func update(currentVersion: String, latest: LatestRelease?) -> LatestRelease? { + guard let latest = latest, let current = AppVersion(currentVersion), latest.version > current else { return nil } + return latest + } +} diff --git a/Client/macos/Updates/UpdateChecker.swift b/Client/macos/Updates/UpdateChecker.swift new file mode 100644 index 00000000..be468a3d --- /dev/null +++ b/Client/macos/Updates/UpdateChecker.swift @@ -0,0 +1,46 @@ +import AppKit +import Combine + +// Asks GitHub for the latest release at launch and then once a day, and publishes it when it's newer than this +// app. Only reads a public URL; downloading and installing stays with the user (or Homebrew). +final class UpdateChecker: ObservableObject { + private static let interval: TimeInterval = 24 * 60 * 60 + + @Published private(set) var available: LatestRelease? + + private var timer: Timer? + + private var currentVersion: String { + Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "" + } + + func start() { + guard timer == nil else { return } + check() + let timer = Timer(timeInterval: Self.interval, repeats: true) { [weak self] _ in self?.check() } + RunLoop.main.add(timer, forMode: .common) + self.timer = timer + } + + func openReleasePage() { + if let url = available?.pageURL { NSWorkspace.shared.open(url) } + } + + private func check() { + var request = URLRequest(url: ReleaseInfo.latestURL) + request.setValue("application/vnd.github+json", forHTTPHeaderField: "Accept") + URLSession.shared.dataTask(with: request) { [weak self] data, response, _ in + // A failed check (offline, rate limit) keeps what we knew; the next one tries again. + guard let data = data, (response as? HTTPURLResponse)?.statusCode == 200 else { + fputs("[updates] check failed (\((response as? HTTPURLResponse)?.statusCode ?? 0))\n", stderr) + return + } + let latest = ReleaseInfo.parse(json: data) + DispatchQueue.main.async { + guard let self = self else { return } + self.available = ReleaseInfo.update(currentVersion: self.currentVersion, latest: latest) + fputs("[updates] running \(self.currentVersion), latest \(latest?.tag ?? "?")\(self.available != nil ? ", update available" : "")\n", stderr) + } + }.resume() + } +} From 6882830ff0350bbcc4b8dd6cc9945e5e95e63939 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 14:38:52 +0200 Subject: [PATCH 33/50] add --- .github/workflows/release.yml | 22 +++++++++++++- Client/macos/AppDelegate.swift | 4 ++- Client/macos/HeadphonesMenu.swift | 15 +++++++++- Client/macos/StatusItemController.swift | 4 +-- Client/macos/fr.lproj/Localizable.strings | 1 + Client/macos/info.plist | 28 +++++++++--------- Client/tests/LogicTests/main.swift | 24 ++++++++++++++++ README.md | 35 +++++++++++++++++------ scripts/build.sh | 2 +- scripts/test.sh | 1 + 10 files changed, 107 insertions(+), 29 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index b2f31a20..ae39ff53 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -3,7 +3,8 @@ name: Release # Push a version tag to publish a release: # git tag v1.0.0 && git push origin v1.0.0 # The app gets its version from the tag, is tested and built for Apple Silicon and Intel, and the zip is attached -# to a GitHub release with its SHA-256 (used by the Homebrew cask). +# to a GitHub release with its SHA-256. The Homebrew cask in flotttt/homebrew-tap is then pointed at the new +# version (needs the HOMEBREW_TAP_TOKEN secret, skipped without it). on: push: @@ -48,3 +49,22 @@ jobs: --title "SonyNotch $VERSION" \ --generate-notes fi + + - name: Update the Homebrew cask + env: + GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }} + run: | + if [ -z "$GH_TOKEN" ]; then + echo "HOMEBREW_TAP_TOKEN isn't set, the Homebrew cask isn't updated." + exit 0 + fi + FILE=Casks/sonynotch.rb + SHA256=$(cut -d ' ' -f 1 build/SonyNotch.zip.sha256) + gh api "repos/flotttt/homebrew-tap/contents/$FILE" > current.json + jq -r .content current.json | base64 -D > sonynotch.rb + sed -i '' -E "s/^ version \".*\"/ version \"$VERSION\"/; s/^ sha256 \".*\"/ sha256 \"$SHA256\"/" sonynotch.rb + gh api -X PUT "repos/flotttt/homebrew-tap/contents/$FILE" \ + -f message="sonynotch $VERSION" \ + -f content="$(base64 -i sonynotch.rb)" \ + -f sha="$(jq -r .sha current.json)" > /dev/null + echo "Homebrew cask updated to $VERSION" diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index 3b6d4509..908af662 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -6,13 +6,14 @@ final class AppDelegate: NSObject, NSApplicationDelegate { private let settings = AppSettings() private let music = MusicController() private let deviceWatcher = DeviceWatcher() + private let updates = UpdateChecker() private var statusItemController: StatusItemController? private var notchController: NotchController? private var cancellables = Set() func applicationDidFinishLaunching(_ notification: Notification) { model.settings = settings - statusItemController = StatusItemController(model: model, settings: settings) + statusItemController = StatusItemController(model: model, settings: settings, updates: updates) notchController = NotchController(model: model, music: music, settings: settings) // Spotify is only read while the notch is on (notch spec §4.3). $showNotch emits the current value first. @@ -32,6 +33,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate { deviceWatcher.start() if settings.autoConnect { model.autoConnectOnLaunch() } + updates.start() } func applicationWillTerminate(_ notification: Notification) { diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 2d6d3750..604e5219 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -7,6 +7,7 @@ final class HeadphonesMenu { let menu = NSMenu() private let model: HeadphonesModel private let settings: AppSettings + private let updates: UpdateChecker private var cancellables = Set() private let errorItem = NSMenuItem() @@ -31,6 +32,7 @@ final class HeadphonesMenu { private var autoReconnectItem = NSMenuItem() private var showNotchItem = NSMenuItem() private let notchSizeItem = NSMenuItem() + private var updateItem = NSMenuItem() private let notchSizeMenuDelegate = NotchSizeMenuDelegate() private static var presets: [(Int, String)] { @@ -54,9 +56,10 @@ final class HeadphonesMenu { return options } - init(model: HeadphonesModel, settings: AppSettings) { + init(model: HeadphonesModel, settings: AppSettings, updates: UpdateChecker) { self.model = model self.settings = settings + self.updates = updates menu.autoenablesItems = false menu.minimumWidth = MenuMetrics.width @@ -79,6 +82,10 @@ final class HeadphonesMenu { .receive(on: DispatchQueue.main) .sink { [weak self] _ in self?.update() } .store(in: &cancellables) + updates.objectWillChange + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.update() } + .store(in: &cancellables) update() } @@ -168,6 +175,8 @@ final class HeadphonesMenu { connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } menu.addItem(connectItem) menu.addItem(.separator()) + updateItem = ActionMenuItem("") { [weak updates] in updates?.openReleasePage() } + menu.addItem(updateItem) menu.addItem(ActionMenuItem(tr("Quit SonyNotch"), key: "q") { NSApp.terminate(nil) }) } @@ -225,6 +234,10 @@ final class HeadphonesMenu { autoReconnectItem.state = settings.autoReconnect ? .on : .off showNotchItem.state = settings.showNotch ? .on : .off notchSizeItem.isEnabled = settings.showNotch + updateItem.isHidden = updates.available == nil + if let release = updates.available { + updateItem.title = String(format: tr("Update Available: SonyNotch %@…"), release.tag.hasPrefix("v") ? String(release.tag.dropFirst()) : release.tag) + } } // Options › Notch Size: sliders applied live, the notch staying open as a preview while the submenu is open. diff --git a/Client/macos/StatusItemController.swift b/Client/macos/StatusItemController.swift index d46c7764..ddd2771b 100644 --- a/Client/macos/StatusItemController.swift +++ b/Client/macos/StatusItemController.swift @@ -7,8 +7,8 @@ final class StatusItemController { private let headphonesMenu: HeadphonesMenu private var cancellables = Set() - init(model: HeadphonesModel, settings: AppSettings) { - headphonesMenu = HeadphonesMenu(model: model, settings: settings) + init(model: HeadphonesModel, settings: AppSettings, updates: UpdateChecker) { + headphonesMenu = HeadphonesMenu(model: model, settings: settings, updates: updates) statusItem.menu = headphonesMenu.menu model.$connectionState.combineLatest(model.$mode) .receive(on: DispatchQueue.main) diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index fa89187e..e21c808c 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -82,3 +82,4 @@ "Text Size" = "Taille du texte"; "Reset Size" = "Réinitialiser"; "Closed Artwork" = "Pochette (fermée)"; +"Update Available: SonyNotch %@…" = "Mise à jour disponible : SonyNotch %@…"; diff --git a/Client/macos/info.plist b/Client/macos/info.plist index 08b26b13..d2e05080 100644 --- a/Client/macos/info.plist +++ b/Client/macos/info.plist @@ -4,41 +4,41 @@ CFBundleDevelopmentRegion en - CFBundleLocalizations - - en - fr - + CFBundleDisplayName + SonyNotch CFBundleExecutable SonyNotch + CFBundleIconFile + AppIcon CFBundleIdentifier com.semvis123.SonyHeadphonesClient CFBundleInfoDictionaryVersion 6.0 + CFBundleLocalizations + + en + fr + CFBundleName SonyNotch - CFBundleDisplayName - SonyNotch CFBundlePackageType APPL CFBundleShortVersionString - 0.5.0 + 1.0.0 CFBundleVersion 1 - CFBundleIconFile - AppIcon LSApplicationCategoryType public.app-category.utilities LSMinimumSystemVersion 13.0 LSUIElement - NSHighResolutionCapable - - NSBluetoothAlwaysUsageDescription - This app uses Bluetooth in order to connect to your headphones. NSAppleEventsUsageDescription SonyNotch shows and controls the music playing in Spotify. + NSBluetoothAlwaysUsageDescription + This app uses Bluetooth in order to connect to your headphones. + NSHighResolutionCapable + NSPrincipalClass NSApplication diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 3da79df4..570d1608 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -115,6 +115,30 @@ do { check(NotchContent.openDelay == 0.15 && NotchContent.closeDelay == 0.4, "hover delays") } +// AppVersion / ReleaseInfo: is the latest GitHub release newer than this app? +do { + check(AppVersion("1.0.0")! < AppVersion("1.0.1")!, "patch is newer") + check(AppVersion("1.10.0")! > AppVersion("1.9.9")!, "numeric, not alphabetical") + check(AppVersion("v1.2")! == AppVersion("1.2.0")!, "leading v and missing zeros") + check(AppVersion("2.0.0-beta.1")! == AppVersion("2.0.0")!, "pre-release suffix ignored") + check(AppVersion("abc") == nil && AppVersion("") == nil, "not a version") + + let json = """ + {"tag_name": "v1.1.0", "html_url": "https://github.com/flotttt/SonyNotch/releases/tag/v1.1.0", + "draft": false, "prerelease": false, "name": "SonyNotch 1.1.0"} + """ + let latest = ReleaseInfo.parse(json: Data(json.utf8)) + check(latest?.version == AppVersion("1.1.0") && latest?.tag == "v1.1.0", "release parsed") + check(latest?.pageURL == URL(string: "https://github.com/flotttt/SonyNotch/releases/tag/v1.1.0"), "release page") + check(ReleaseInfo.update(currentVersion: "1.0.0", latest: latest) == latest, "older app: update available") + check(ReleaseInfo.update(currentVersion: "1.1.0", latest: latest) == nil, "same version: no update") + check(ReleaseInfo.update(currentVersion: "1.2.0", latest: latest) == nil, "newer app: no update") + check(ReleaseInfo.update(currentVersion: "dev", latest: latest) == nil, "unknown app version: no update") + let prerelease = json.replacingOccurrences(of: "\"prerelease\": false", with: "\"prerelease\": true") + check(ReleaseInfo.parse(json: Data(prerelease.utf8)) == nil, "pre-releases ignored") + check(ReleaseInfo.parse(json: Data("{}".utf8)) == nil, "malformed reply") +} + // PlaybackClock: live position from the last known one; display format. do { let t0 = Date(timeIntervalSince1970: 1_000) diff --git a/README.md b/README.md index a562ba25..b57c102a 100644 --- a/README.md +++ b/README.md @@ -7,28 +7,44 @@ Bluetooth headphones. It also turns the MacBook notch into a small player for th ## Install +### With Homebrew + +If you use [Homebrew](https://brew.sh), run: + +```sh +brew install --cask flotttt/tap/sonynotch +``` + +That's it. Open SonyNotch from your Applications folder. + +### Without Homebrew + 1. Download **SonyNotch.zip** from the [latest release](https://github.com/flotttt/SonyNotch/releases/latest) 2. Open the zip and drag **SonyNotch** into your Applications folder 3. Open SonyNotch. The first time, macOS says it can't check the app because it isn't signed with an Apple developer account yet. Click Done, then go to System Settings › Privacy & Security, scroll down and click **Open Anyway** -SonyNotch then appears in the menu bar. Allow Bluetooth access when macOS asks, and allow SonyNotch to control -Spotify for the notch player. +### First launch -If your headphones aren't connected to the Mac yet, pair them in System Settings › Bluetooth first. +SonyNotch appears in the menu bar. Allow Bluetooth access when macOS asks, and allow SonyNotch to control +Spotify for the notch player. If your headphones aren't connected to the Mac yet, pair them in System Settings › +Bluetooth first. Works on macOS 13 or later, on Apple Silicon and Intel Macs. ## Update -Download the new SonyNotch.zip from the [latest release](https://github.com/flotttt/SonyNotch/releases/latest), -quit SonyNotch and replace the app in Applications. Your settings are kept. macOS may ask for the Bluetooth and -Spotify permissions again. +SonyNotch checks once a day for a new version. When one is out, an Update Available item shows up in its menu. + +With Homebrew, run `brew upgrade --cask sonynotch`. Without Homebrew, click Update Available to open the +download page, then replace the app in Applications as when you installed it. Your settings are kept, but +macOS may ask for the Bluetooth and Spotify permissions again. ## Uninstall -If you turned on Launch at Login, turn it off first. Then quit SonyNotch and move it to the Trash. +If you turned on Launch at Login, turn it off first. Then run `brew uninstall --cask sonynotch`, or quit +SonyNotch and move it to the Trash. ## What it does @@ -121,8 +137,9 @@ is in `Client/`, and the notch is in `Client/macos/Notch` and `Client/macos/Musi ### Publish a release -Push a version tag. GitHub Actions runs the tests, builds the app with that version number and attaches -SonyNotch.zip to the release. +Push a version tag. GitHub Actions runs the tests, builds the app with that version number, attaches +SonyNotch.zip to the release and updates the Homebrew cask in +[flotttt/homebrew-tap](https://github.com/flotttt/homebrew-tap). ```sh git tag v1.1.0 diff --git a/scripts/build.sh b/scripts/build.sh index 119115e7..9e8e0ca9 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -20,7 +20,7 @@ if [ "$CONFIG" = release ]; then SWIFT_OPT="-O"; CXX_OPT="-O2"; else SWIFT_OPT=" SWIFT_DEFINES=""; CXX_DEFINES="" if [ "${DEBUG_PROTOCOL:-0}" = 1 ]; then SWIFT_DEFINES="-D DEBUG_PROTOCOL"; CXX_DEFINES="-DSHC_DEBUG_PROTOCOL"; fi -SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift "$MAC"/Notch/*.swift "$MAC"/Music/*.swift) +SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift "$MAC"/Notch/*.swift "$MAC"/Updates/*.swift "$MAC"/Music/*.swift) CXX_SOURCES=("$CORE"/*.cpp) OBJCXX_SOURCES=("$MAC"/*.mm) diff --git a/scripts/test.sh b/scripts/test.sh index 580f7ab1..dd88093f 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -15,6 +15,7 @@ swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" \ "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ + "$MAC/Updates/ReleaseInfo.swift" \ -o "$OUT/LogicTests" "$OUT/LogicTests" From f38d74c61746a77822662204bf00f8749445e988 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 15:22:55 +0200 Subject: [PATCH 34/50] feat: one-click update from the menu, launch at login in the main menu --- Client/macos/AppSettings.swift | 17 +++ Client/macos/HeadphonesMenu.swift | 18 ++- .../macos/SonyHeadphonesClient.entitlements | 18 +-- Client/macos/SonyNotchApp.swift | 6 +- Client/macos/Updates/ReleaseInfo.swift | 22 +++- Client/macos/Updates/UpdateChecker.swift | 118 +++++++++++++++++- Client/macos/fr.lproj/Localizable.strings | 7 +- Client/tests/LogicTests/main.swift | 17 ++- README.md | 21 +--- 9 files changed, 195 insertions(+), 49 deletions(-) diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 2214b651..9daea655 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -50,6 +50,7 @@ final class AppSettings: ObservableObject { init(defaults: UserDefaults = .standard) { self.defaults = defaults + Self.importSandboxedSettings(into: defaults) // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. // Notch spec §7: the notch is shown by default. let layout = NotchLayout.default @@ -70,6 +71,22 @@ final class AppSettings: ObservableObject { launchAtLogin = SMAppService.mainApp.status == .enabled } + // Up to 1.1.0 the app was sandboxed and kept its settings in its container. The first unsandboxed launch + // copies them over, without overwriting anything already set. + private static func importSandboxedSettings(into defaults: UserDefaults) { + let doneKey = "importedSandboxedSettings" + guard !defaults.bool(forKey: doneKey), let bundleID = Bundle.main.bundleIdentifier else { return } + defaults.set(true, forKey: doneKey) + let container = FileManager.default.homeDirectoryForCurrentUser + .appendingPathComponent("Library/Containers/\(bundleID)/Data/Library/Preferences/\(bundleID).plist") + guard let old = NSDictionary(contentsOf: container) as? [String: Any] else { return } + let keys = [Keys.autoConnect, Keys.autoReconnect, Keys.lastDeviceAddress, Keys.showNotch, Keys.notchWidth, + Keys.notchHeight, Keys.notchSide, Keys.notchZoom, Keys.notchArtwork] + for key in keys where defaults.object(forKey: key) == nil { + if let value = old[key] { defaults.set(value, forKey: key) } + } + } + func resetNotchSize() { let layout = NotchLayout.default notchWidth = Double(layout.openSize.width) diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 604e5219..b46398fc 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -167,7 +167,7 @@ final class HeadphonesMenu { autoConnectItem = ActionMenuItem(tr("Connect Automatically")) { [weak settings] in settings?.autoConnect.toggle() } autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } - for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } + for item in [autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } optionsMenu.addItem(makeNotchSizeItem()) let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") optionsItem.submenu = optionsMenu @@ -175,7 +175,8 @@ final class HeadphonesMenu { connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } menu.addItem(connectItem) menu.addItem(.separator()) - updateItem = ActionMenuItem("") { [weak updates] in updates?.openReleasePage() } + menu.addItem(launchAtLoginItem) + updateItem = ActionMenuItem("") { [weak updates] in updates?.install() } menu.addItem(updateItem) menu.addItem(ActionMenuItem(tr("Quit SonyNotch"), key: "q") { NSApp.terminate(nil) }) } @@ -234,9 +235,18 @@ final class HeadphonesMenu { autoReconnectItem.state = settings.autoReconnect ? .on : .off showNotchItem.state = settings.showNotch ? .on : .off notchSizeItem.isEnabled = settings.showNotch - updateItem.isHidden = updates.available == nil + // Always shown: greyed out while this is the latest version. if let release = updates.available { - updateItem.title = String(format: tr("Update Available: SonyNotch %@…"), release.tag.hasPrefix("v") ? String(release.tag.dropFirst()) : release.tag) + let version = release.tag.hasPrefix("v") ? String(release.tag.dropFirst()) : release.tag + switch updates.state { + case .idle: updateItem.title = String(format: tr("Update to SonyNotch %@"), version) + case .installing: updateItem.title = tr("Updating SonyNotch…") + case .failed: updateItem.title = String(format: tr("Update Failed, Download SonyNotch %@…"), version) + } + updateItem.isEnabled = updates.state != .installing + } else { + updateItem.title = String(format: tr("SonyNotch Is Up to Date (%@)"), updates.currentVersion) + updateItem.isEnabled = false } } diff --git a/Client/macos/SonyHeadphonesClient.entitlements b/Client/macos/SonyHeadphonesClient.entitlements index cbf07bf3..572f79fe 100644 --- a/Client/macos/SonyHeadphonesClient.entitlements +++ b/Client/macos/SonyHeadphonesClient.entitlements @@ -1,22 +1,8 @@ + - com.apple.security.app-sandbox - - com.apple.security.device.bluetooth - - com.apple.security.files.user-selected.read-only - - com.apple.security.network.client - - com.apple.security.temporary-exception.apple-events - - com.spotify.client - - com.apple.security.temporary-exception.files.home-relative-path.read-write - - /Library/Logs/SonyNotch/ - diff --git a/Client/macos/SonyNotchApp.swift b/Client/macos/SonyNotchApp.swift index d1d47bc7..37968777 100644 --- a/Client/macos/SonyNotchApp.swift +++ b/Client/macos/SonyNotchApp.swift @@ -4,13 +4,11 @@ import AppKit @main enum SonyNotchApp { static func main() { - // The app is sandboxed, so it can only write inside the folder allowed by the - // temporary-exception entitlement. `make run` points it at - // ~/Library/Logs/SonyNotch/app.log (allowed by that exception); `open --stderr` + // `make run` points the log at ~/Library/Logs/SonyNotch/app.log; `open --stderr` // fails on recent macOS, so the path is passed as a launch argument instead. // Redirect stderr to the log file in append mode (unbuffered for live DEBUG hex // dumps). freopen() closes stderr before it knows whether the reopen will - // succeed, so a sandbox denial would leave stderr closed with nothing to fall + // succeed, so a failed open would leave stderr closed with nothing to fall // back to; open()+dup2() only touches stderr once we know the fd is valid. if let logPath = UserDefaults.standard.string(forKey: "SonyNotchLogFile") { let fd = open(logPath, O_WRONLY | O_CREAT | O_APPEND, 0o644) diff --git a/Client/macos/Updates/ReleaseInfo.swift b/Client/macos/Updates/ReleaseInfo.swift index c48dc0c7..65262766 100644 --- a/Client/macos/Updates/ReleaseInfo.swift +++ b/Client/macos/Updates/ReleaseInfo.swift @@ -32,17 +32,26 @@ struct LatestRelease: Equatable { let version: AppVersion let tag: String let pageURL: URL + let appZipURL: URL? // SonyNotch.zip, nil if the release doesn't have it (then only the page can be opened) + let checksumURL: URL? // SonyNotch.zip.sha256 } // Reads GitHub's "latest release" reply and decides whether it's an update for this app. enum ReleaseInfo { static let latestURL = URL(string: "https://api.github.com/repos/flotttt/SonyNotch/releases/latest")! + static let appZipName = "SonyNotch.zip" private struct Reply: Decodable { + struct Asset: Decodable { + let name: String + let browser_download_url: URL + } + let tag_name: String let html_url: URL let draft: Bool? let prerelease: Bool? + let assets: [Asset]? } // nil for drafts, pre-releases and anything unreadable. @@ -50,7 +59,18 @@ enum ReleaseInfo { guard let reply = try? JSONDecoder().decode(Reply.self, from: json), reply.draft != true, reply.prerelease != true, let version = AppVersion(reply.tag_name) else { return nil } - return LatestRelease(version: version, tag: reply.tag_name, pageURL: reply.html_url) + let assets = reply.assets ?? [] + func asset(_ name: String) -> URL? { assets.first { $0.name == name }?.browser_download_url } + return LatestRelease(version: version, tag: reply.tag_name, pageURL: reply.html_url, + appZipURL: asset(appZipName), checksumURL: asset(appZipName + ".sha256")) + } + + // The hash in a `shasum -a 256` output ("<64 hex> SonyNotch.zip"), lowercased; nil if there isn't one. + static func checksum(fromFile text: String) -> String? { + guard let first = text.split(whereSeparator: { $0 == " " || $0 == "\n" }).first else { return nil } + let hash = first.lowercased() + guard hash.count == 64, hash.allSatisfy({ $0.isHexDigit }) else { return nil } + return hash } // The release, only when it's newer than the running app (whose version must be readable). diff --git a/Client/macos/Updates/UpdateChecker.swift b/Client/macos/Updates/UpdateChecker.swift index be468a3d..a2d1aea9 100644 --- a/Client/macos/Updates/UpdateChecker.swift +++ b/Client/macos/Updates/UpdateChecker.swift @@ -1,16 +1,32 @@ import AppKit import Combine +import CryptoKit // Asks GitHub for the latest release at launch and then once a day, and publishes it when it's newer than this -// app. Only reads a public URL; downloading and installing stays with the user (or Homebrew). +// app. install() downloads it, checks its SHA-256, replaces this app and relaunches it. When that isn't possible +// (no zip in the release, app folder not writable), the release page opens instead. final class UpdateChecker: ObservableObject { + enum State: Equatable { + case idle + case installing + case failed + } + + private enum InstallError: Error { + case download(Int) + case checksum + case unexpectedApp + case command(String) + } + private static let interval: TimeInterval = 24 * 60 * 60 @Published private(set) var available: LatestRelease? + @Published private(set) var state: State = .idle private var timer: Timer? - private var currentVersion: String { + var currentVersion: String { Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String ?? "" } @@ -26,6 +42,36 @@ final class UpdateChecker: ObservableObject { if let url = available?.pageURL { NSWorkspace.shared.open(url) } } + // Main thread. + func install() { + guard let release = available, state != .installing else { return } + guard state != .failed, let zipURL = release.appZipURL, let checksumURL = release.checksumURL, + canReplaceApp else { + openReleasePage() + return + } + state = .installing + fputs("[updates] installing \(release.tag)\n", stderr) + // The download and the swap run off the main actor (downloadAndReplace isn't isolated); the result comes back + // here. + Task { @MainActor [weak self] in + do { + let app = try await Self.downloadAndReplace(release, zipURL: zipURL, checksumURL: checksumURL) + Self.relaunch(app) + } catch { + fputs("[updates] install failed: \(error)\n", stderr) + self?.state = .failed + } + } + } + + // The folder holding the app must be writable (not the case for a translocated or read-only copy). + private var canReplaceApp: Bool { + let app = Bundle.main.bundleURL + return app.pathExtension == "app" + && FileManager.default.isWritableFile(atPath: app.deletingLastPathComponent().path) + } + private func check() { var request = URLRequest(url: ReleaseInfo.latestURL) request.setValue("application/vnd.github+json", forHTTPHeaderField: "Accept") @@ -37,10 +83,72 @@ final class UpdateChecker: ObservableObject { } let latest = ReleaseInfo.parse(json: data) DispatchQueue.main.async { - guard let self = self else { return } - self.available = ReleaseInfo.update(currentVersion: self.currentVersion, latest: latest) - fputs("[updates] running \(self.currentVersion), latest \(latest?.tag ?? "?")\(self.available != nil ? ", update available" : "")\n", stderr) + guard let self = self, self.state != .installing else { return } + let update = ReleaseInfo.update(currentVersion: self.currentVersion, latest: latest) + if update != self.available { self.state = .idle } + self.available = update + fputs("[updates] running \(self.currentVersion), latest \(latest?.tag ?? "?")\(update != nil ? ", update available" : "")\n", stderr) } }.resume() } + + // Downloads the zip, checks it against the release's .sha256, unzips it next to the app (same volume, so the + // swap is a rename) and swaps the bundles. Returns the installed app. + private static func downloadAndReplace(_ release: LatestRelease, zipURL: URL, checksumURL: URL) async throws -> URL { + let (checksumData, checksumResponse) = try await URLSession.shared.data(from: checksumURL) + try requireOK(checksumResponse) + guard let expected = ReleaseInfo.checksum(fromFile: String(decoding: checksumData, as: UTF8.self)) else { + throw InstallError.checksum + } + + let (downloaded, zipResponse) = try await URLSession.shared.download(from: zipURL) + try requireOK(zipResponse) + let actual = SHA256.hash(data: try Data(contentsOf: downloaded)).map { String(format: "%02x", $0) }.joined() + guard actual == expected else { throw InstallError.checksum } + + let fileManager = FileManager.default + let current = Bundle.main.bundleURL + let work = try fileManager.url(for: .itemReplacementDirectory, in: .userDomainMask, + appropriateFor: current, create: true) + defer { try? fileManager.removeItem(at: work) } + let zip = work.appendingPathComponent(ReleaseInfo.appZipName) + try fileManager.moveItem(at: downloaded, to: zip) + try run("/usr/bin/ditto", ["-x", "-k", zip.path, work.path]) + + // Only ever install SonyNotch itself, in the version announced. + let newApp = work.appendingPathComponent("SonyNotch.app") + guard let bundle = Bundle(url: newApp), bundle.bundleIdentifier == Bundle.main.bundleIdentifier, + let version = bundle.object(forInfoDictionaryKey: "CFBundleShortVersionString") as? String, + AppVersion(version) == release.version else { + throw InstallError.unexpectedApp + } + try? run("/usr/bin/xattr", ["-dr", "com.apple.quarantine", newApp.path]) + return try fileManager.replaceItemAt(current, withItemAt: newApp) ?? current + } + + private static func requireOK(_ response: URLResponse) throws { + let status = (response as? HTTPURLResponse)?.statusCode ?? 0 + guard status == 200 else { throw InstallError.download(status) } + } + + private static func run(_ tool: String, _ arguments: [String]) throws { + let process = Process() + process.executableURL = URL(fileURLWithPath: tool) + process.arguments = arguments + try process.run() + process.waitUntilExit() + guard process.terminationStatus == 0 else { throw InstallError.command(tool) } + } + + // A shell waits for this process to exit, then opens the new app through LaunchServices. + private static func relaunch(_ app: URL) { + let pid = ProcessInfo.processInfo.processIdentifier + let process = Process() + process.executableURL = URL(fileURLWithPath: "/bin/sh") + process.arguments = ["-c", "while /bin/kill -0 \(pid) 2>/dev/null; do /bin/sleep 0.2; done; /usr/bin/open \"$0\"", + app.path] + try? process.run() + fputs("[updates] installed, relaunching\n", stderr) + NSApp.terminate(nil) + } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index e21c808c..c5aa9fa7 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -45,7 +45,7 @@ "Protocol" = "Protocole"; "Bluetooth" = "Bluetooth"; "SonyNotch Options" = "Options de SonyNotch"; -"Launch at Login" = "Lancer à l’ouverture de session"; +"Launch at Login" = "Lancer au démarrage"; "Connect Automatically" = "Connexion automatique"; "Reconnect Automatically" = "Reconnexion automatique"; "Show Notch" = "Afficher l’encoche"; @@ -82,4 +82,7 @@ "Text Size" = "Taille du texte"; "Reset Size" = "Réinitialiser"; "Closed Artwork" = "Pochette (fermée)"; -"Update Available: SonyNotch %@…" = "Mise à jour disponible : SonyNotch %@…"; +"Update to SonyNotch %@" = "Mettre à jour vers SonyNotch %@"; +"Updating SonyNotch…" = "Mise à jour de SonyNotch…"; +"Update Failed, Download SonyNotch %@…" = "Échec de la mise à jour, télécharger SonyNotch %@…"; +"SonyNotch Is Up to Date (%@)" = "SonyNotch est à jour (%@)"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 570d1608..c81e2a13 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -125,11 +125,26 @@ do { let json = """ {"tag_name": "v1.1.0", "html_url": "https://github.com/flotttt/SonyNotch/releases/tag/v1.1.0", - "draft": false, "prerelease": false, "name": "SonyNotch 1.1.0"} + "draft": false, "prerelease": false, "name": "SonyNotch 1.1.0", + "assets": [ + {"name": "SonyNotch.zip.sha256", "browser_download_url": "https://github.com/flotttt/SonyNotch/releases/download/v1.1.0/SonyNotch.zip.sha256"}, + {"name": "SonyNotch.zip", "browser_download_url": "https://github.com/flotttt/SonyNotch/releases/download/v1.1.0/SonyNotch.zip"} + ]} """ let latest = ReleaseInfo.parse(json: Data(json.utf8)) check(latest?.version == AppVersion("1.1.0") && latest?.tag == "v1.1.0", "release parsed") check(latest?.pageURL == URL(string: "https://github.com/flotttt/SonyNotch/releases/tag/v1.1.0"), "release page") + check(latest?.appZipURL == URL(string: "https://github.com/flotttt/SonyNotch/releases/download/v1.1.0/SonyNotch.zip"), + "app zip asset") + check(latest?.checksumURL?.lastPathComponent == "SonyNotch.zip.sha256", "checksum asset") + let noAssets = json.replacingOccurrences(of: "SonyNotch.zip", with: "Other.zip") + let withoutZip = ReleaseInfo.parse(json: Data(noAssets.utf8)) + check(withoutZip != nil && withoutZip?.appZipURL == nil && withoutZip?.checksumURL == nil, + "release without the app zip: still an update, not installable") + let hash = "46e1ca5c5edf50a61338cde32ddc2b34ed447a42afc79452cf0d3afa41a53299" + check(ReleaseInfo.checksum(fromFile: "\(hash) SonyNotch.zip\n") == hash, "checksum file read") + check(ReleaseInfo.checksum(fromFile: hash.uppercased()) == hash, "checksum lowercased") + check(ReleaseInfo.checksum(fromFile: "not a hash SonyNotch.zip") == nil, "invalid checksum file") check(ReleaseInfo.update(currentVersion: "1.0.0", latest: latest) == latest, "older app: update available") check(ReleaseInfo.update(currentVersion: "1.1.0", latest: latest) == nil, "same version: no update") check(ReleaseInfo.update(currentVersion: "1.2.0", latest: latest) == nil, "newer app: no update") diff --git a/README.md b/README.md index b57c102a..254b5dce 100644 --- a/README.md +++ b/README.md @@ -35,15 +35,15 @@ Works on macOS 13 or later, on Apple Silicon and Intel Macs. ## Update -SonyNotch checks once a day for a new version. When one is out, an Update Available item shows up in its menu. +SonyNotch checks once a day for a new version. When one is out, click **Update to SonyNotch** in its menu: it +downloads the new version, replaces itself and restarts. When you're up to date, the item is greyed out. Your +settings are kept, but macOS may ask for the Bluetooth and Spotify permissions again. -With Homebrew, run `brew upgrade --cask sonynotch`. Without Homebrew, click Update Available to open the -download page, then replace the app in Applications as when you installed it. Your settings are kept, but -macOS may ask for the Bluetooth and Spotify permissions again. +With Homebrew you can also run `brew upgrade --cask sonynotch`. ## Uninstall -If you turned on Launch at Login, turn it off first. Then run `brew uninstall --cask sonynotch`, or quit +If you turned on Launch at Login in the menu, turn it off first. Then run `brew uninstall --cask sonynotch`, or quit SonyNotch and move it to the Trash. ## What it does @@ -135,17 +135,6 @@ binary inside the bundle, or macOS closes it when it first uses Bluetooth. The app is written in Swift with AppKit and SwiftUI, on top of a C++ core for the headphones protocol. The code is in `Client/`, and the notch is in `Client/macos/Notch` and `Client/macos/Music`. -### Publish a release - -Push a version tag. GitHub Actions runs the tests, builds the app with that version number, attaches -SonyNotch.zip to the release and updates the Homebrew cask in -[flotttt/homebrew-tap](https://github.com/flotttt/homebrew-tap). - -```sh -git tag v1.1.0 -git push origin v1.1.0 -``` - ### How it talks to the headphones Sony headphones expose a Bluetooth serial (RFCOMM) service and accept small binary frames: From 23bfee5c853f9cc53b963b12b2be53737e35e999 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 15:31:27 +0200 Subject: [PATCH 35/50] ci: build releases created from the GitHub UI, with or without a v prefix --- .github/workflows/release.yml | 46 ++++++++++++++++++++++++++--------- 1 file changed, 34 insertions(+), 12 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae39ff53..396c39e3 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,27 +1,43 @@ name: Release -# Push a version tag to publish a release: -# git tag v1.0.0 && git push origin v1.0.0 -# The app gets its version from the tag, is tested and built for Apple Silicon and Intel, and the zip is attached -# to a GitHub release with its SHA-256. The Homebrew cask in flotttt/homebrew-tap is then pointed at the new -# version (needs the HOMEBREW_TAP_TOKEN secret, skipped without it). +# Publishing a release (on GitHub: Releases › Draft a new release › new tag like 1.2.0 or v1.2.0 › Publish, or +# `git tag v1.2.0 && git push origin v1.2.0`) creates a version tag, which runs this workflow. The app gets its +# version from the tag, is tested and built for Apple Silicon and Intel, and the zip is attached to the release +# with its SHA-256. The Homebrew cask in flotttt/homebrew-tap is then pointed at it (needs the +# HOMEBREW_TAP_TOKEN secret, skipped without it). +# +# To build a release whose tag didn't run the workflow: Actions › Release › Run workflow, with that tag. on: push: - tags: ["v*.*.*"] + tags: ["v[0-9]+.[0-9]+.[0-9]+", "[0-9]+.[0-9]+.[0-9]+"] + workflow_dispatch: + inputs: + tag: + description: "Tag of the release to build (e.g. 1.2.0 or v1.2.0)" + required: true permissions: contents: write +env: + TAG: ${{ inputs.tag || github.ref_name }} + jobs: release: runs-on: macos-latest steps: - uses: actions/checkout@v4 + with: + ref: ${{ env.TAG }} - name: Set the app version from the tag run: | - VERSION="${GITHUB_REF_NAME#v}" + VERSION="${TAG#v}" + if ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "The tag $TAG isn't a version like 1.2.0 or v1.2.0." + exit 1 + fi echo "VERSION=$VERSION" >> "$GITHUB_ENV" /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $VERSION" Client/macos/info.plist /usr/libexec/PlistBuddy -c "Set :CFBundleVersion ${{ github.run_number }}" Client/macos/info.plist @@ -37,19 +53,20 @@ jobs: cd build shasum -a 256 SonyNotch.zip | tee SonyNotch.zip.sha256 - # A release already made by hand for this tag (title and notes written on GitHub) only gets the files. + # A release already made on GitHub for this tag (title and notes written there) only gets the files. - name: Publish the release env: GH_TOKEN: ${{ github.token }} run: | - if gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1; then - gh release upload "$GITHUB_REF_NAME" build/SonyNotch.zip build/SonyNotch.zip.sha256 --clobber + if gh release view "$TAG" >/dev/null 2>&1; then + gh release upload "$TAG" build/SonyNotch.zip build/SonyNotch.zip.sha256 --clobber else - gh release create "$GITHUB_REF_NAME" build/SonyNotch.zip build/SonyNotch.zip.sha256 \ + gh release create "$TAG" build/SonyNotch.zip build/SonyNotch.zip.sha256 \ --title "SonyNotch $VERSION" \ --generate-notes fi + # The download URL uses the exact tag, since tags may or may not start with "v". - name: Update the Homebrew cask env: GH_TOKEN: ${{ secrets.HOMEBREW_TAP_TOKEN }} @@ -60,9 +77,14 @@ jobs: fi FILE=Casks/sonynotch.rb SHA256=$(cut -d ' ' -f 1 build/SonyNotch.zip.sha256) + URL="https://github.com/flotttt/SonyNotch/releases/download/$TAG/SonyNotch.zip" gh api "repos/flotttt/homebrew-tap/contents/$FILE" > current.json jq -r .content current.json | base64 -D > sonynotch.rb - sed -i '' -E "s/^ version \".*\"/ version \"$VERSION\"/; s/^ sha256 \".*\"/ sha256 \"$SHA256\"/" sonynotch.rb + sed -i '' -E \ + -e "s|^ version \".*\"| version \"$VERSION\"|" \ + -e "s|^ sha256 \".*\"| sha256 \"$SHA256\"|" \ + -e "s|^ url \".*\"| url \"$URL\"|" \ + sonynotch.rb gh api -X PUT "repos/flotttt/homebrew-tap/contents/$FILE" \ -f message="sonynotch $VERSION" \ -f content="$(base64 -i sonynotch.rb)" \ From 115be2be10741dba2ee30b52e6ca76931c24f0a2 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 15:53:50 +0200 Subject: [PATCH 36/50] chore: remove inherited funding link and internal planning docs --- .github/FUNDING.yml | 2 - .gitignore | 2 +- Client/macos/AppDelegate.swift | 2 +- Client/macos/AppSettings.swift | 3 +- Client/macos/HeadphonesBridge.h | 2 +- Client/macos/HeadphonesMenu.swift | 6 +- Client/macos/Music/MusicController.swift | 6 +- Client/macos/Music/MusicSource.swift | 2 +- Client/macos/Music/PlaybackClock.swift | 2 +- Client/macos/Music/SpotifyLocalSource.swift | 4 +- Client/macos/Music/SpotifyPlaybackInfo.swift | 2 +- Client/macos/Music/SpotifyScript.swift | 2 +- Client/macos/Notch/HeadphonesTab.swift | 2 +- Client/macos/Notch/MusicTab.swift | 2 +- Client/macos/Notch/NotchContent.swift | 2 +- Client/macos/Notch/NotchController.swift | 2 +- Client/macos/Notch/NotchGeometry.swift | 2 +- Client/macos/Notch/NotchPanel.swift | 2 +- Client/macos/Notch/NotchView.swift | 6 +- Client/macos/StatusIcon.swift | 2 +- Client/tests/LogicTests/main.swift | 4 +- Client/tests/ProtocolParsersTests.cpp | 2 +- .../plans/2026-09-10-menu-bar-app.md | 2958 ----------------- docs/superpowers/plans/2026-09-11-notch.md | 1985 ----------- .../specs/2026-09-10-menu-bar-app-design.md | 254 -- .../specs/2026-09-11-notch-design.md | 300 -- 26 files changed, 29 insertions(+), 5529 deletions(-) delete mode 100644 .github/FUNDING.yml delete mode 100644 docs/superpowers/plans/2026-09-10-menu-bar-app.md delete mode 100644 docs/superpowers/plans/2026-09-11-notch.md delete mode 100644 docs/superpowers/specs/2026-09-10-menu-bar-app-design.md delete mode 100644 docs/superpowers/specs/2026-09-11-notch-design.md diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml deleted file mode 100644 index 34cb4d9b..00000000 --- a/.github/FUNDING.yml +++ /dev/null @@ -1,2 +0,0 @@ -github: [AmitRajput-Dev] -custom: ['https://razorpay.me/@amitpratapsingrajput'] diff --git a/.gitignore b/.gitignore index 4cb044e7..0aee43ff 100644 --- a/.gitignore +++ b/.gitignore @@ -527,5 +527,5 @@ MigrationBackup/ # vscode .vscode/ -# brainstorming mockups (superpowers visual companion) +# local working notes .superpowers/ diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index 908af662..472087be 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -16,7 +16,7 @@ final class AppDelegate: NSObject, NSApplicationDelegate { statusItemController = StatusItemController(model: model, settings: settings, updates: updates) notchController = NotchController(model: model, music: music, settings: settings) - // Spotify is only read while the notch is on (notch spec §4.3). $showNotch emits the current value first. + // Spotify is only read while the notch is on. $showNotch emits the current value first. settings.$showNotch .receive(on: DispatchQueue.main) .sink { [weak self] show in diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 9daea655..6994efda 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -51,8 +51,7 @@ final class AppSettings: ObservableObject { init(defaults: UserDefaults = .standard) { self.defaults = defaults Self.importSandboxedSettings(into: defaults) - // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. - // Notch spec §7: the notch is shown by default. + // Auto-connect, auto-reconnect and the notch default on; launch at login stays off until the user asks. let layout = NotchLayout.default defaults.register(defaults: [ Keys.autoConnect: true, Keys.autoReconnect: true, Keys.showNotch: true, diff --git a/Client/macos/HeadphonesBridge.h b/Client/macos/HeadphonesBridge.h index 3019aa22..b147fc75 100644 --- a/Client/macos/HeadphonesBridge.h +++ b/Client/macos/HeadphonesBridge.h @@ -41,7 +41,7 @@ typedef NS_ENUM(NSInteger, SHCAmbientMode) { @property (nonatomic, readonly) BOOL supportsEqualizer; // v2 devices only @property (nonatomic, readonly) NSInteger equalizerBandCount; // 0 until read, then 5 or 10 @property (nonatomic, readonly) BOOL equalizerHasClearBass; // 5-band layout -// NO while this device's equalizer write format is unverified (the WH-1000XM6's 10-band layout, spec §7). +// NO while this device's equalizer write format is unverified (the WH-1000XM6's 10-band layout). @property (nonatomic, readonly) BOOL equalizerWritable; @property (nonatomic, readonly) NSInteger clearBass; // -10..10 @property (nonatomic, readonly) BOOL hasDsee; // the device answered the DSEE inquiry diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index b46398fc..3bec2195 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -1,7 +1,7 @@ import AppKit import Combine -// The status item's menu (spec §4). Built once; update() refreshes states, visibility and values in place, +// The status item's menu. Built once; update() refreshes states, visibility and values in place, // including while the menu is open. final class HeadphonesMenu { let menu = NSMenu() @@ -48,8 +48,8 @@ final class HeadphonesMenu { } // Same options, but with a short last label - used for the value shown at the right of "Auto Power-Off" - // itself, since the full "Quand le casque est retiré" collides with the title (spec §4 shows a short - // value; the submenu keeps the long label). + // itself, since the full "Quand le casque est retiré" collides with the title (the submenu keeps the long + // label). private static var autoPowerOffShortOptions: [String] { var options = autoPowerOffOptions options[options.count - 1] = tr("Taken off") diff --git a/Client/macos/Music/MusicController.swift b/Client/macos/Music/MusicController.swift index 44589200..91a33d8c 100644 --- a/Client/macos/Music/MusicController.swift +++ b/Client/macos/Music/MusicController.swift @@ -1,7 +1,7 @@ import AppKit import Combine -// The music state the notch shows, from the active MusicSource (spec §5.1). Step 1: the local Spotify app. +// The music state the notch shows, from the active MusicSource. Step 1: the local Spotify app. final class MusicController: ObservableObject { static let openRefreshInterval: TimeInterval = 5 // re-read while the notch is open (volume isn't signalled) private static let artworkCacheSize = 8 @@ -37,7 +37,7 @@ final class MusicController: ObservableObject { source.start() } - // "Show Notch" off: no Spotify reads at all (spec §4.3). + // "Show Notch" off: no Spotify reads at all. func stop() { guard running else { return } running = false @@ -50,7 +50,7 @@ final class MusicController: ObservableObject { log("stopped") } - // Opening reads once (which also retries a refused permission, spec §6.3), then every 5 s while open. + // Opening reads once (which also retries a refused permission), then every 5 s while open. func notchDidOpen() { guard running else { return } source.refresh() diff --git a/Client/macos/Music/MusicSource.swift b/Client/macos/Music/MusicSource.swift index b8e31266..dd3cc7fd 100644 --- a/Client/macos/Music/MusicSource.swift +++ b/Client/macos/Music/MusicSource.swift @@ -6,7 +6,7 @@ enum MusicSourceStatus: Equatable { case ready } -// Where the music comes from (spec §5.1). Step 1: SpotifyLocalSource; step 2 adds the Spotify Web API. +// Where the music comes from. Step 1: SpotifyLocalSource; step 2 adds the Spotify Web API. // Called on the main thread; onChange is called on the main thread. protocol MusicSource: AnyObject { var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? { get set } diff --git a/Client/macos/Music/PlaybackClock.swift b/Client/macos/Music/PlaybackClock.swift index b06e3e7d..89c24dcc 100644 --- a/Client/macos/Music/PlaybackClock.swift +++ b/Client/macos/Music/PlaybackClock.swift @@ -1,6 +1,6 @@ import Foundation -// Live playback position and its display, from the last known position (spec §6.1). +// Live playback position and its display, from the last known position. enum PlaybackClock { static func position(of track: NowPlaying, at date: Date) -> TimeInterval { var position = track.position diff --git a/Client/macos/Music/SpotifyLocalSource.swift b/Client/macos/Music/SpotifyLocalSource.swift index d4f8b906..bc7d75ef 100644 --- a/Client/macos/Music/SpotifyLocalSource.swift +++ b/Client/macos/Music/SpotifyLocalSource.swift @@ -1,6 +1,6 @@ import AppKit -// Reads and controls the Spotify app of this Mac (spec §6): its PlaybackStateChanged signal, plus Apple Events. +// Reads and controls the Spotify app of this Mac: its PlaybackStateChanged signal, plus Apple Events. // Never sends an Apple Event while Spotify isn't running: one would launch it. final class SpotifyLocalSource: MusicSource { static let bundleIdentifier = "com.spotify.client" @@ -167,7 +167,7 @@ final class SpotifyLocalSource: MusicSource { } } - // Spec §6.3: a refusal stops the reads (the controller retries once per notch opening); anything else + // A refusal stops the reads (the controller retries once per notch opening); anything else // (timeout, busy) keeps the last known state until the next signal. private func applyFailure(_ code: Int) { guard signalObserver != nil else { return } diff --git a/Client/macos/Music/SpotifyPlaybackInfo.swift b/Client/macos/Music/SpotifyPlaybackInfo.swift index 3f3fde01..f3108e65 100644 --- a/Client/macos/Music/SpotifyPlaybackInfo.swift +++ b/Client/macos/Music/SpotifyPlaybackInfo.swift @@ -7,7 +7,7 @@ enum SpotifyState: Equatable { case incomplete // not enough information: read the state through Apple Events instead } -// Decodes the local Spotify app's signal and Apple Events replies (spec §6.1). Pure, tested in LogicTests. +// Decodes the local Spotify app's signal and Apple Events replies. Pure, tested in LogicTests. enum SpotifyPlaybackInfo { static let localCapabilities = MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false) static let fieldSeparator: Character = "\u{1F}" diff --git a/Client/macos/Music/SpotifyScript.swift b/Client/macos/Music/SpotifyScript.swift index 406cb44e..5e0580ba 100644 --- a/Client/macos/Music/SpotifyScript.swift +++ b/Client/macos/Music/SpotifyScript.swift @@ -1,6 +1,6 @@ import Foundation -// AppleScript sent to the local Spotify app (spec §6). Only ever run on SpotifyLocalSource's script queue. +// AppleScript sent to the local Spotify app. Only ever run on SpotifyLocalSource's script queue. enum SpotifyScript { enum Result: Equatable { case success(String) diff --git a/Client/macos/Notch/HeadphonesTab.swift b/Client/macos/Notch/HeadphonesTab.swift index 3aca2854..899c1556 100644 --- a/Client/macos/Notch/HeadphonesTab.swift +++ b/Client/macos/Notch/HeadphonesTab.swift @@ -1,7 +1,7 @@ import AppKit import SwiftUI -// Notch headphones page: NC / Ambient / Off, ambient level and Focus on Voice (spec §4.2). It calls the same +// Notch headphones page: NC / Ambient / Off, ambient level and Focus on Voice. It calls the same // model methods as the menu, so the poll guard and the send throttle apply here too, and both stay in sync. struct HeadphonesTab: View { @ObservedObject var model: HeadphonesModel diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index ebbaa4eb..a1def2b7 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -1,6 +1,6 @@ import SwiftUI -// Notch player page (spec §4.2): artwork, title and artist; progress; headphones, previous, play/pause, next, +// Notch player page: artwork, title and artist; progress; headphones, previous, play/pause, next, // volume. The volume button swaps the progress bar for Spotify's volume bar for a few seconds. Sizes follow // the notch zoom; extra height grows the artwork. struct MusicTab: View { diff --git a/Client/macos/Notch/NotchContent.swift b/Client/macos/Notch/NotchContent.swift index 6ee7e60d..a54980cb 100644 --- a/Client/macos/Notch/NotchContent.swift +++ b/Client/macos/Notch/NotchContent.swift @@ -1,6 +1,6 @@ import Foundation -// What the notch shows while resting (spec §4.1) and which tab it opens on. Pure logic, tested in LogicTests. +// What the notch shows while resting and which tab it opens on. Pure logic, tested in LogicTests. enum NotchRestingState: Equatable { case musicAndHeadphones // 1: artwork left, headphones mode right case musicOnly // 2: artwork left, level bars right diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index d184b4e4..d458cc89 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -2,7 +2,7 @@ import AppKit import Combine import SwiftUI -// Owns the notch panel (spec §4.3): picks the screen, places the panel, opens it on hover and follows the +// Owns the notch panel: picks the screen, places the panel, opens it on hover and follows the // "Show Notch" option. // // The panel always keeps the largest open size the Notch Size options allow: only the SwiftUI shape inside diff --git a/Client/macos/Notch/NotchGeometry.swift b/Client/macos/Notch/NotchGeometry.swift index 8f413c58..93f0eb23 100644 --- a/Client/macos/Notch/NotchGeometry.swift +++ b/Client/macos/Notch/NotchGeometry.swift @@ -57,7 +57,7 @@ struct NotchLayout: Equatable { } } -// Where the notch panel goes (spec §4): the real notch, or a simulated pill centred at the top of a screen +// Where the notch panel goes: the real notch, or a simulated pill centred at the top of a screen // without one. Every rect shares the notch's horizontal centre and touches the top edge of the screen. struct NotchGeometry: Equatable { static let simulatedWidth: CGFloat = 190 // pill width on a screen without a notch diff --git a/Client/macos/Notch/NotchPanel.swift b/Client/macos/Notch/NotchPanel.swift index ad942c59..bed0303a 100644 --- a/Client/macos/Notch/NotchPanel.swift +++ b/Client/macos/Notch/NotchPanel.swift @@ -1,7 +1,7 @@ import AppKit import SwiftUI -// Borderless transparent panel above the menu bar (spec §4.3). It never becomes key or main, so the frontmost +// Borderless transparent panel above the menu bar. It never becomes key or main, so the frontmost // app keeps the keyboard; clicks still reach its controls through NotchHostingView. final class NotchPanel: NSPanel { // A factory rather than a custom init: NSWindow subclasses that declare their own initializer must also diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 947be91c..114bf0b9 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -47,7 +47,7 @@ struct NotchShape: Shape { } } -// Root view of the notch panel (spec §4): the resting strip, or the open panel (player or headphones page). The panel +// Root view of the notch panel: the resting strip, or the open panel (player or headphones page). The panel // can be larger than the shape while it animates; the shape stays centred at the top. struct NotchView: View { static let openFlare: CGFloat = 10 @@ -90,7 +90,7 @@ struct NotchView: View { .environment(\.colorScheme, .dark) } - // MARK: - Resting (spec §4.1) + // MARK: - Resting private var restingContent: some View { HStack(spacing: 0) { @@ -133,7 +133,7 @@ struct NotchView: View { } } - // MARK: - Open (spec §4.2) + // MARK: - Open private var openContent: some View { // Both pages stay in the hierarchy (switching is then a cross-slide, not an insertion), the hidden one diff --git a/Client/macos/StatusIcon.swift b/Client/macos/StatusIcon.swift index 478e9074..cf96ced9 100644 --- a/Client/macos/StatusIcon.swift +++ b/Client/macos/StatusIcon.swift @@ -1,6 +1,6 @@ import AppKit -// Menu bar icon: one monochrome SF Symbol per mode, dimmed when disconnected (spec §6.6). +// Menu bar icon: one monochrome SF Symbol per mode, dimmed when disconnected. enum StatusIcon { static func symbolName(for mode: SHCAmbientMode) -> String { switch mode { diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index c81e2a13..4fa855d7 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -103,7 +103,7 @@ do { check(!partial.hasNotch, "safe area without auxiliary areas: no notch") } -// NotchContent: resting state (spec §4.1), tab on opening, hover delays. +// NotchContent: resting state, tab on opening, hover delays. do { check(NotchContent.restingState(hasMusic: true, headphonesConnected: true) == .musicAndHeadphones, "state 1") check(NotchContent.restingState(hasMusic: true, headphonesConnected: false) == .musicOnly, "state 2") @@ -179,7 +179,7 @@ do { check(PlaybackClock.format(-3) == "0:00", "format never negative") } -// SpotifyPlaybackInfo: the PlaybackStateChanged signal (spec §6.1). +// SpotifyPlaybackInfo: the PlaybackStateChanged signal. do { let t0 = Date(timeIntervalSince1970: 1_000) let signal: [AnyHashable: Any] = [ diff --git a/Client/tests/ProtocolParsersTests.cpp b/Client/tests/ProtocolParsersTests.cpp index 5c356aae..dbc8560c 100644 --- a/Client/tests/ProtocolParsersTests.cpp +++ b/Client/tests/ProtocolParsersTests.cpp @@ -40,7 +40,7 @@ int main() CHECK(!parseNcAsmState(bytes({ 0x57, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0a })).has_value()); // wrong opcode // --- Equalizer --- - // WH-1000XM6: unknown preset 0x30, 10 bands (offset +10 hypothesis, spec §7). + // WH-1000XM6: unknown preset 0x30, 10 bands (offset +10 hypothesis). { auto e = parseEqualizer(bytes({ 0x57, 0x00, 0x30, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 })); CHECK(e && e->preset == 0x30 && !e->hasClearBass && e->bands.size() == 10); diff --git a/docs/superpowers/plans/2026-09-10-menu-bar-app.md b/docs/superpowers/plans/2026-09-10-menu-bar-app.md deleted file mode 100644 index 6a47c700..00000000 --- a/docs/superpowers/plans/2026-09-10-menu-bar-app.md +++ /dev/null @@ -1,2958 +0,0 @@ -# SonyBridge barre des menus — plan d'implémentation - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal :** transformer SonyBridge (app à fenêtre SwiftUI) en app de barre des menus native, avec toutes les -fonctions existantes, les corrections WH-1000XM6, les options de connexion automatique, et un build sans Xcode. - -**Architecture :** `NSStatusItem` + `NSMenu` (AppKit). Les lignes riches (en-tête, curseurs, interrupteurs, -égaliseur) sont des vues SwiftUI hébergées dans des `NSMenuItem` (`NSHostingView`). Le modèle -`HeadphonesModel` (Swift, observable) pilote le pont Obj-C++ `HeadphonesBridge`, qui pilote le cœur C++ -existant. La logique pure (reconnexion, anti-retour d'affichage, limitation d'envoi, décodage des trames) est -isolée dans de petits fichiers testés par des exécutables de test. - -**Tech Stack :** Swift 5 (mode de langage), SwiftUI, AppKit, Combine, IOBluetooth, ServiceManagement ; -C++17 et Obj-C++ (ARC) ; build `swiftc` + `clang++` via `scripts/build.sh` et `Makefile` ; Python 3 (vérif. des -traductions). - -**Spec :** `docs/superpowers/specs/2026-09-10-menu-bar-app-design.md` - -## Global Constraints - -- macOS minimum : **13.0** (`LSMinimumSystemVersion`, cible `-apple-macos13.0`). -- Pas de Xcode : tout se compile avec les Command Line Tools (`make`, `make test`, `make run`, `make release`). -- Swift compilé avec `-swift-version 5` ; C++ en `-std=c++17` ; Obj-C++ avec `-fobjc-arc`. -- Bundle : `SonyBridge.app`, exécutable `SonyBridge`, identifiant **`com.semvis123.SonyHeadphonesClient`** - (inchangé), `LSUIElement = YES`. -- Textes : **tout texte affiché** passe par `tr("…")` en Swift ou `NSLocalizedString(@"…", nil)` en Obj-C++, - avec la clé en anglais et sa traduction dans `Client/macos/fr.lproj/Localizable.strings`. Pas de texte affiché - en dur ailleurs. `make test` le vérifie (à partir de la tâche 2). -- Sécurité XM6 : **ne jamais envoyer au casque une commande dont le format n'est pas vérifié** (spec §7). En - particulier, aucune écriture d'égaliseur sur la disposition 10 bandes avant la tâche 8. -- Git : c'est **l'utilisateur** qui committe. À chaque étape « Commit », afficher la commande proposée et - attendre qu'il la lance. -- Test matériel : l'agent ne voit pas l'écran. Chaque vérification visuelle est demandée à l'utilisateur, avec - une liste précise de choses à regarder. Les échanges avec le casque se lisent dans `build/app.log` - (`make run DEBUG=1`). - -## Carte des fichiers - -| Fichier | Tâche | Responsabilité | -|---|---|---| -| `scripts/build.sh` | 1 | Compile et assemble `build/SonyBridge.app` | -| `scripts/test.sh` | 2 | Compile et lance les exécutables de test + vérif. des traductions | -| `scripts/check_localization.py` | 2 | Chaque clé `tr()` a sa traduction, aucune traduction inutilisée | -| `Makefile` | 1, 2 | `make`, `run`, `test`, `release`, `clean` | -| `.github/workflows/build.yml` | 1, 2 | CI : tests + build universel | -| `Client/macos/info.plist` | 1 | App d'agent, macOS 13, nom SonyBridge | -| `Client/macos/Resources/AppIcon.iconset/` | 1 | Icône de l'app (compilée par `iconutil`) | -| `Client/macos/SonyBridgeApp.swift` | 1 | Point d'entrée `@main` | -| `Client/macos/AppDelegate.swift` | 1, 7 | Assemble modèle, réglages, surveillance Bluetooth, icône de barre | -| `Client/macos/Localization.swift` | 1 | `tr(_:)` | -| `Client/macos/MenuSupport.swift` | 1, 5, 6 | `ActionMenuItem`, `sectionHeader`, `hostingMenuItem`, `MenuMetrics`, `titleWithValue` | -| `Client/macos/StatusItemController.swift` | 1, 4, 7 | L'icône de la barre et son menu | -| `Client/macos/StatusIcon.swift` | 6 | Choix du symbole selon le mode | -| `Client/macos/HeadphonesMenu.swift` | 1, 6, 7, 8 | Construit le `NSMenu` et le synchronise avec le modèle | -| `Client/macos/MenuRows/*.swift` | 5 | `HeaderRow`, `AmbientLevelRow`, `ToggleRow`, `EqualizerRow` | -| `Client/macos/HeadphonesModel.swift` | 4, 7, 8 | État observable + actions + minuteurs + reconnexion | -| `Client/macos/ReconnectPolicy.swift` | 2 | Délais de reconnexion | -| `Client/macos/PollGuard.swift` | 2 | Ignore les relectures 3 s après un changement | -| `Client/macos/SendThrottle.swift` | 2 | Limite les envois des curseurs à 1 / 150 ms | -| `Client/macos/AppSettings.swift` | 7 | Les 3 options + lancement à l'ouverture de session | -| `Client/macos/DeviceWatcher.swift` | 7 | Connexions / déconnexions Bluetooth de macOS | -| `Client/macos/HeadphonesBridge.h/.mm` | 3, 4, 7, 8 | Pont Obj-C++ | -| `Client/ProtocolParsers.h/.cpp` | 3, 8 | Décodage / encodage purs des trames | -| `Client/Headphones.h/.cpp` | 3, 8 | Utilise `ProtocolParsers`, canal NC `0x19` | -| `Client/tests/LogicTests/main.swift` | 2 | Tests de la logique Swift | -| `Client/tests/ProtocolParsersTests.cpp` | 3, 8 | Tests du décodage avec les trames réelles | -| `Client/macos/fr.lproj/Localizable.strings` | toutes | Traductions | -| `README.md` | 1, 9 | Build, description | - -**Supprimés en tâche 1 :** `Client/macos/{main.mm, AppDelegate.h, AppDelegate.mm, ViewController.h, -ViewController.mm, Main.storyboard, ContentView.swift, exportOptions.plist}`, -`Client/macos/SonyHeadphonesClient.xcodeproj/`, `Client/macos/Assets.xcassets/`, -`.github/workflows/xcodebuild.yml`. - ---- - -### Task 1: Build par script + app d'agent avec un menu minimal - -Remplace le projet Xcode et la fenêtre par un build en ligne de commande et une icône de barre des menus. Le -menu minimal contient l'en-tête, les trois modes, Connecter/Déconnecter et Quitter. Il utilise le modèle -**existant** (`HeadphonesModel` actuel, avec `connected`, `connecting`, `mode`, `setMode`, `connect`, `disconnect`). - -**Files:** -- Create: `scripts/build.sh`, `Makefile`, `.github/workflows/build.yml` -- Create: `Client/macos/SonyBridgeApp.swift`, `Client/macos/AppDelegate.swift`, `Client/macos/Localization.swift`, - `Client/macos/MenuSupport.swift`, `Client/macos/StatusItemController.swift`, `Client/macos/HeadphonesMenu.swift` -- Create: `Client/macos/Resources/AppIcon.iconset/*.png` (copiés depuis `Assets.xcassets`) -- Modify: `Client/macos/info.plist`, `Client/macos/fr.lproj/Localizable.strings`, `README.md` (section build) -- Delete: la liste « Supprimés en tâche 1 » ci-dessus - -**Interfaces:** -- Consumes : `HeadphonesModel` actuel (`@Published connected/connecting/mode/deviceName/batteryLevel`, - `connect()`, `disconnect()`, `setMode(_:)`), `SHCAmbientMode` (`.off/.noiseCanceling/.ambientSound`). -- Produces : - - `func tr(_ key: String) -> String` - - `final class ActionMenuItem: NSMenuItem { init(_ title: String, key: String = "", handler: @escaping () -> Void) }` - - `func sectionHeader(_ title: String) -> NSMenuItem` - - `final class StatusItemController { init(model: HeadphonesModel) }` - - `final class HeadphonesMenu { let menu: NSMenu; init(model: HeadphonesModel) }` - - commandes `make`, `make run [DEBUG=1]`, `make release`, `make clean` ; app dans `build/SonyBridge.app` - -- [ ] **Step 1 : Copier l'icône dans un `.iconset`, puis supprimer les anciens fichiers** - -```bash -S=Client/macos/Assets.xcassets/AppIcon.appiconset; D=Client/macos/Resources/AppIcon.iconset -mkdir -p "$D" -for s in 16 32 128 256 512; do - cp "$S/icon_$s.png" "$D/icon_${s}x${s}.png" - cp "$S/icon_$((s*2)).png" "$D/icon_${s}x${s}@2x.png" -done -ls "$D" | wc -l # attendu : 10 -git rm -r -q Client/macos/main.mm Client/macos/AppDelegate.h Client/macos/AppDelegate.mm \ - Client/macos/ViewController.h Client/macos/ViewController.mm Client/macos/Main.storyboard \ - Client/macos/ContentView.swift Client/macos/exportOptions.plist \ - Client/macos/SonyHeadphonesClient.xcodeproj Client/macos/Assets.xcassets .github/workflows/xcodebuild.yml -``` - -- [ ] **Step 2 : Écrire `scripts/build.sh`** (puis `chmod +x scripts/build.sh`) - -`/bin/bash` sur macOS est la version 3.2 : pas de tableau vide avec `set -u`, d'où les options passées en chaînes. - -```bash -#!/bin/bash -# Builds build/SonyBridge.app with the Command Line Tools only (no Xcode needed). -# CONFIG=debug|release (default: debug) -# ARCHS="arm64 x86_64" (default: this Mac's architecture; several = universal binary via lipo) -# DEBUG_PROTOCOL=1 (hex-dumps every frame exchanged with the headphones to stderr) -set -euo pipefail -shopt -s nullglob - -ROOT=$(cd "$(dirname "$0")/.." && pwd) -CORE=$ROOT/Client -MAC=$CORE/macos -OUT=$ROOT/build -APP=$OUT/SonyBridge.app -SDK=$(xcrun --show-sdk-path) -CONFIG=${CONFIG:-debug} -ARCHS=${ARCHS:-$(uname -m)} -MIN_MACOS=13.0 - -if [ "$CONFIG" = release ]; then SWIFT_OPT="-O"; CXX_OPT="-O2"; else SWIFT_OPT="-Onone -g"; CXX_OPT="-O0 -g"; fi -SWIFT_DEFINES=""; CXX_DEFINES="" -if [ "${DEBUG_PROTOCOL:-0}" = 1 ]; then SWIFT_DEFINES="-D DEBUG_PROTOCOL"; CXX_DEFINES="-DSHC_DEBUG_PROTOCOL"; fi - -SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift) -CXX_SOURCES=("$CORE"/*.cpp) -OBJCXX_SOURCES=("$MAC"/*.mm) - -rm -rf "$APP" -mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" -BINARIES="" - -for ARCH in $ARCHS; do - OBJ=$OUT/obj/$CONFIG-$ARCH - rm -rf "$OBJ"; mkdir -p "$OBJ" - TARGET=$ARCH-apple-macos$MIN_MACOS - CXXFLAGS="-target $TARGET -isysroot $SDK -std=c++17 $CXX_OPT $CXX_DEFINES -I $CORE -I $MAC" - - echo "== [$ARCH] Swift" - swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 $SWIFT_OPT $SWIFT_DEFINES -wmo -parse-as-library \ - -module-name SonyBridge \ - -import-objc-header "$MAC/SonyHeadphonesClient-Bridging-Header.h" -I "$MAC" -I "$CORE" \ - -c "${SWIFT_SOURCES[@]}" -o "$OBJ/swift.o" - - echo "== [$ARCH] C++" - for f in "${CXX_SOURCES[@]}"; do clang++ $CXXFLAGS -c "$f" -o "$OBJ/$(basename "$f" .cpp).o"; done - - echo "== [$ARCH] Obj-C++" - for f in "${OBJCXX_SOURCES[@]}"; do - clang++ $CXXFLAGS -fobjc-arc -fmodules -fcxx-modules -c "$f" -o "$OBJ/$(basename "$f" .mm).o" - done - - echo "== [$ARCH] Link" - swiftc -target "$TARGET" -sdk "$SDK" "$OBJ"/*.o -o "$OBJ/SonyBridge" -lc++ \ - -framework AppKit -framework SwiftUI -framework Combine -framework IOBluetooth \ - -framework IOBluetoothUI -framework ServiceManagement - BINARIES="$BINARIES $OBJ/SonyBridge" -done - -lipo -create $BINARIES -output "$APP/Contents/MacOS/SonyBridge" - -echo "== Resources" -cp "$MAC/info.plist" "$APP/Contents/Info.plist" -cp -R "$MAC"/*.lproj "$APP/Contents/Resources/" -iconutil -c icns "$MAC/Resources/AppIcon.iconset" -o "$APP/Contents/Resources/AppIcon.icns" - -echo "== Sign (ad-hoc)" -codesign --force --sign - --entitlements "$MAC/SonyHeadphonesClient.entitlements" "$APP" -echo "OK -> $APP" -``` - -- [ ] **Step 3 : Écrire le `Makefile`** - -```make -# SonyBridge — build without Xcode. See scripts/build.sh for the knobs. -DEBUG ?= 0 - -.PHONY: all build run release clean - -all: build - -build: - DEBUG_PROTOCOL=$(DEBUG) ./scripts/build.sh - -run: build - -pkill -x SonyBridge - open --stdout build/app.log --stderr build/app.log build/SonyBridge.app - -release: - CONFIG=release ARCHS="arm64 x86_64" ./scripts/build.sh - cd build && rm -f SonyBridge.zip && ditto -c -k --keepParent SonyBridge.app SonyBridge.zip - -clean: - rm -rf build -``` - -- [ ] **Step 4 : Écrire `.github/workflows/build.yml`** (la tâche 2 y ajoutera `make test`) - -```yaml -name: macOS - -on: - push: - branches: [main] - pull_request: - branches: [main] - -jobs: - build: - runs-on: macos-latest - steps: - - uses: actions/checkout@v4 - - name: Build (release, universal) - run: make release - - uses: actions/upload-artifact@v4 - with: - name: SonyBridge-macOS - path: build/SonyBridge.zip -``` - -- [ ] **Step 5 : Réécrire `Client/macos/info.plist`** - -```xml - - - - - CFBundleDevelopmentRegion - en - CFBundleLocalizations - - en - fr - - CFBundleExecutable - SonyBridge - CFBundleIdentifier - com.semvis123.SonyHeadphonesClient - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - SonyBridge - CFBundleDisplayName - SonyBridge - CFBundlePackageType - APPL - CFBundleShortVersionString - 0.5.0 - CFBundleVersion - 1 - CFBundleIconFile - AppIcon - LSApplicationCategoryType - public.app-category.utilities - LSMinimumSystemVersion - 13.0 - LSUIElement - - NSHighResolutionCapable - - NSBluetoothAlwaysUsageDescription - This app uses Bluetooth in order to connect to your headphones. - NSPrincipalClass - NSApplication - - -``` - -Run : `plutil -lint Client/macos/info.plist` → `OK`. - -- [ ] **Step 6 : Écrire les fichiers Swift de base** - -`Client/macos/SonyBridgeApp.swift` : - -```swift -import AppKit - -// Entry point: a menu bar-only app (LSUIElement), no window and no Dock icon. -@main -enum SonyBridgeApp { - static func main() { - let app = NSApplication.shared - let delegate = AppDelegate() - app.delegate = delegate - app.setActivationPolicy(.accessory) - withExtendedLifetime(delegate) { app.run() } - } -} -``` - -`Client/macos/AppDelegate.swift` : - -```swift -import AppKit - -final class AppDelegate: NSObject, NSApplicationDelegate { - private let model = HeadphonesModel() - private var statusItemController: StatusItemController? - - func applicationDidFinishLaunching(_ notification: Notification) { - statusItemController = StatusItemController(model: model) - } - - func applicationWillTerminate(_ notification: Notification) { - model.disconnect() - } -} -``` - -`Client/macos/Localization.swift` : - -```swift -import Foundation - -// Looks up a UI string in Localizable.strings. Every user-facing string goes through this (checked by make test). -func tr(_ key: String) -> String { - NSLocalizedString(key, comment: "") -} -``` - -`Client/macos/MenuSupport.swift` : - -```swift -import AppKit - -// A menu item that runs a closure (NSMenuItem only supports target/selector natively). -final class ActionMenuItem: NSMenuItem { - private let handler: () -> Void - - init(_ title: String, key: String = "", handler: @escaping () -> Void) { - self.handler = handler - super.init(title: title, action: #selector(fire), keyEquivalent: key) - target = self - } - - required init(coder: NSCoder) { - fatalError("init(coder:) is not supported") - } - - @objc private func fire() { - handler() - } -} - -// A small grey, non-clickable title above a group of items (like "Contrôle du son ambiant"). -func sectionHeader(_ title: String) -> NSMenuItem { - let item = NSMenuItem() - item.attributedTitle = NSAttributedString(string: title, attributes: [ - .font: NSFont.systemFont(ofSize: NSFont.smallSystemFontSize, weight: .semibold), - .foregroundColor: NSColor.secondaryLabelColor, - ]) - item.isEnabled = false - return item -} -``` - -`Client/macos/StatusItemController.swift` (icône provisoire ; la tâche 6 ajoute `StatusIcon`) : - -```swift -import AppKit -import Combine - -// Owns the menu bar icon and attaches the headphones menu to it. -final class StatusItemController { - private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) - private let headphonesMenu: HeadphonesMenu - private var cancellables = Set() - - init(model: HeadphonesModel) { - headphonesMenu = HeadphonesMenu(model: model) - statusItem.menu = headphonesMenu.menu - let image = NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") - image?.isTemplate = true - statusItem.button?.image = image - model.$connected - .receive(on: DispatchQueue.main) - .sink { [weak self] connected in self?.statusItem.button?.appearsDisabled = !connected } - .store(in: &cancellables) - } -} -``` - -`Client/macos/HeadphonesMenu.swift` (version minimale, remplacée entièrement en tâche 6) : - -```swift -import AppKit -import Combine - -// The status item's menu. Minimal for now: header, modes, connect/disconnect, quit. -final class HeadphonesMenu { - let menu = NSMenu() - private let model: HeadphonesModel - private var cancellables = Set() - private let headerItem = NSMenuItem() - private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] - private var connectItem: ActionMenuItem! - - init(model: HeadphonesModel) { - self.model = model - menu.autoenablesItems = false - - headerItem.isEnabled = false - menu.addItem(headerItem) - menu.addItem(.separator()) - - menu.addItem(sectionHeader(tr("Ambient Sound Control"))) - let modes: [(SHCAmbientMode, String)] = [ - (.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off")), - ] - for (mode, title) in modes { - let item = ActionMenuItem(title) { [weak model] in model?.setMode(mode) } - modeItems.append((mode, item)) - menu.addItem(item) - } - menu.addItem(.separator()) - - connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } - menu.addItem(connectItem) - menu.addItem(.separator()) - menu.addItem(ActionMenuItem(tr("Quit SonyBridge"), key: "q") { NSApp.terminate(nil) }) - - // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. - model.objectWillChange - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.update() } - .store(in: &cancellables) - update() - } - - private func update() { - let connected = model.connected - var header = model.deviceName.isEmpty ? "SonyBridge" : model.deviceName - if connected && model.batteryLevel >= 0 { - header += " — " + String(format: tr("%ld%%"), model.batteryLevel) - } - headerItem.title = header - for (mode, item) in modeItems { - item.state = connected && model.mode == mode ? .on : .off - item.isEnabled = connected - } - connectItem.title = connected ? tr("Disconnect") : (model.connecting ? tr("Connecting…") : tr("Connect…")) - connectItem.isEnabled = !model.connecting - } - - private func toggleConnection() { - if model.connected { - model.disconnect() - } else { - NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window - model.connect() - } - } -} -``` - -- [ ] **Step 7 : Remplacer `Client/macos/fr.lproj/Localizable.strings`** par les seules clés utilisées maintenant - -``` -/* SonyBridge — French UI strings. Keys are the English source strings; missing keys fall back to English. */ - -/* Menu */ -"Ambient Sound Control" = "Contrôle du son ambiant"; -"Noise Canceling" = "Réduction de bruit"; -"Ambient Sound" = "Son ambiant"; -"Off" = "Désactivé"; -"Connect…" = "Connecter…"; -"Connecting…" = "Connexion…"; -"Disconnect" = "Déconnecter"; -"Quit SonyBridge" = "Quitter SonyBridge"; -"%ld%%" = "%ld %%"; - -/* Errors (HeadphonesBridge.mm, HeadphonesModel.swift) */ -"Headphones disconnected." = "Casque déconnecté."; -"No connected Sony headset found. Connect your headphones in macOS Bluetooth settings first." = "Aucun casque Sony connecté. Connectez d’abord votre casque dans les réglages Bluetooth de macOS."; -"Connection timed out." = "Délai de connexion dépassé."; -"Not connected." = "Non connecté."; -"Equalizer control isn't supported on this device yet." = "Le réglage de l’égaliseur n’est pas encore pris en charge sur cet appareil."; -"Not supported on this device." = "Non pris en charge sur cet appareil."; -``` - -Run : `plutil -lint Client/macos/fr.lproj/Localizable.strings` → `OK`. - -- [ ] **Step 8 : Mettre à jour la section build du `README.md`** - -Remplacer le bloc `
` « macOS (native SwiftUI app) » de « 🚀 Build from source » par : - -````markdown -
-macOS (menu bar app) - -Requires the **Xcode Command Line Tools** (`xcode-select --install`) — the full Xcode app is not needed. - -```sh -git clone https://github.com/AmitRajput-Dev/SonyBridge.git -cd SonyBridge -make run # builds build/SonyBridge.app and launches it -``` - -`make test` runs the unit tests, `make release` builds a universal (Apple Silicon + Intel) zip, and -`make run DEBUG=1` logs every frame exchanged with the headphones to `build/app.log`. -
-```` - -- [ ] **Step 9 : Compiler** - -Run : `make` -Attendu : les étapes `== [arm64] Swift`, `C++`, `Obj-C++`, `Link`, `Resources`, `Sign`, puis -`OK -> …/build/SonyBridge.app`, sans erreur. - -- [ ] **Step 10 : Lancer et vérifier avec l'utilisateur** - -Run : `make run DEBUG=1 && pgrep -x SonyBridge` -Attendu : un PID. Demander à l'utilisateur de vérifier : -1. Une icône de casque est dans la barre des menus, grisée, et **rien dans le Dock**. -2. Le menu s'ouvre : « SonyBridge », « Contrôle du son ambiant », les 3 modes (grisés), « Connecter… », - « Quitter SonyBridge ⌘Q », en français. -3. « Connecter… » connecte le XM6 : l'icône n'est plus grisée, et l'en-tête affiche « WH-1000XM6 — 68 % ». -4. Cliquer sur « Son ambiant » change bien le mode dans le casque. **Connu, corrigé en tâche 3** : la coche - peut revenir sur « Désactivé » au bout de 2 s (mauvaise relecture du XM6). -5. « Quitter » ferme l'app. - -- [ ] **Step 11 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "feat(macos): menu bar agent app built with make (drop Xcode project and window UI)" -``` - ---- - -### Task 2: Logique pure (reconnexion, anti-retour, limitation) + `make test` - -**Files:** -- Create: `Client/macos/ReconnectPolicy.swift`, `Client/macos/PollGuard.swift`, `Client/macos/SendThrottle.swift` -- Create: `Client/tests/LogicTests/main.swift`, `scripts/test.sh`, `scripts/check_localization.py` -- Modify: `Makefile` (cible `test`), `.github/workflows/build.yml` (étape `make test`) - -**Interfaces:** -- Produces : - - `struct ReconnectPolicy { static let delays: [TimeInterval]; private(set) var attempt: Int; mutating func nextDelay() -> TimeInterval; mutating func reset() }` - - `struct PollGuard { init(window: TimeInterval = 3); mutating func userChanged(_ key: Key, at date: Date = Date()); func shouldAcceptPoll(for key: Key, at date: Date = Date()) -> Bool }` - - `struct SendThrottle { init(interval: TimeInterval = 0.15); mutating func shouldSend(at date: Date = Date(), final: Bool) -> Bool }` - - `make test` : lance `LogicTests` puis `check_localization.py` (la tâche 3 ajoute les tests C++) - -- [ ] **Step 1 : Écrire les tests** `Client/tests/LogicTests/main.swift` - -```swift -import Foundation - -// Minimal test runner (XCTest isn't available without Xcode). Exit code 1 on any failure. -var failures = 0 -func check(_ condition: Bool, _ message: String, line: Int = #line) { - if !condition { - failures += 1 - print("FAIL line \(line): \(message)") - } -} - -// ReconnectPolicy: 3 s, 10 s, 30 s, then every 60 s; reset restarts. -do { - var policy = ReconnectPolicy() - let delays = (0..<6).map { _ in policy.nextDelay() } - check(delays == [3, 10, 30, 60, 60, 60], "reconnect schedule was \(delays)") - policy.reset() - check(policy.nextDelay() == 3, "reset restarts the schedule") -} - -// PollGuard: a poll is ignored for 3 s after the user changed that setting. -do { - var pollGuard = PollGuard(window: 3) - let t0 = Date(timeIntervalSince1970: 1_000) - check(pollGuard.shouldAcceptPoll(for: "ambient", at: t0), "no user change: accept") - pollGuard.userChanged("ambient", at: t0) - check(!pollGuard.shouldAcceptPoll(for: "ambient", at: t0.addingTimeInterval(2.9)), "inside the window: reject") - check(pollGuard.shouldAcceptPoll(for: "ambient", at: t0.addingTimeInterval(3)), "after the window: accept") - check(pollGuard.shouldAcceptPoll(for: "eq", at: t0.addingTimeInterval(1)), "other keys are unaffected") -} - -// SendThrottle: at most one send per 150 ms while dragging; the final value always goes out. -do { - var throttle = SendThrottle(interval: 0.15) - let t0 = Date(timeIntervalSince1970: 1_000) - check(throttle.shouldSend(at: t0, final: false), "first drag event sends") - check(!throttle.shouldSend(at: t0.addingTimeInterval(0.10), final: false), "too soon: skip") - check(throttle.shouldSend(at: t0.addingTimeInterval(0.16), final: false), "after the interval: send") - check(throttle.shouldSend(at: t0.addingTimeInterval(0.17), final: true), "final value always sends") -} - -if failures > 0 { - print("LogicTests: \(failures) failure(s)") - exit(1) -} -print("LogicTests: all passed") -``` - -- [ ] **Step 2 : Écrire `scripts/test.sh`** (puis `chmod +x scripts/test.sh`) - -```bash -#!/bin/bash -# Builds and runs the unit test executables (plain asserts, no XCTest), then checks the translations. -set -euo pipefail - -ROOT=$(cd "$(dirname "$0")/.." && pwd) -MAC=$ROOT/Client/macos -OUT=$ROOT/build/tests -SDK=$(xcrun --show-sdk-path) -TARGET=$(uname -m)-apple-macos13.0 -mkdir -p "$OUT" - -echo "== LogicTests" -swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ - "$ROOT/Client/tests/LogicTests/main.swift" \ - "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ - -o "$OUT/LogicTests" -"$OUT/LogicTests" - -echo "== Localization" -python3 "$ROOT/scripts/check_localization.py" -``` - -- [ ] **Step 3 : Ajouter la cible `test` au `Makefile`** - -Remplacer la ligne `.PHONY` et ajouter la cible : - -```make -.PHONY: all build run test release clean - -test: - ./scripts/test.sh -``` - -- [ ] **Step 4 : Lancer les tests pour les voir échouer** - -Run : `make test` -Attendu : échec de compilation, `cannot find 'ReconnectPolicy' in scope` (et `PollGuard`, `SendThrottle`). - -- [ ] **Step 5 : Écrire les trois fichiers de logique** - -`Client/macos/ReconnectPolicy.swift` : - -```swift -import Foundation - -// Delays between automatic reconnection attempts: 3 s, 10 s, 30 s, then every 60 s. -struct ReconnectPolicy { - static let delays: [TimeInterval] = [3, 10, 30, 60] - private(set) var attempt = 0 - - // Delay before the next attempt; each call advances the schedule. - mutating func nextDelay() -> TimeInterval { - let delay = Self.delays[min(attempt, Self.delays.count - 1)] - attempt += 1 - return delay - } - - mutating func reset() { - attempt = 0 - } -} -``` - -`Client/macos/PollGuard.swift` : - -```swift -import Foundation - -// Ignores a polled value for a setting the user changed less than `window` seconds ago, so a read-back that -// raced the user's command doesn't briefly flip the menu back to the old state. -struct PollGuard { - let window: TimeInterval - private var lastUserChange: [Key: Date] = [:] - - init(window: TimeInterval = 3) { - self.window = window - } - - mutating func userChanged(_ key: Key, at date: Date = Date()) { - lastUserChange[key] = date - } - - func shouldAcceptPoll(for key: Key, at date: Date = Date()) -> Bool { - guard let changed = lastUserChange[key] else { return true } - return date.timeIntervalSince(changed) >= window - } -} -``` - -`Client/macos/SendThrottle.swift` : - -```swift -import Foundation - -// Rate-limits slider commands: at most one every `interval` while dragging; the final value always goes out. -struct SendThrottle { - let interval: TimeInterval - private var lastSend: Date? - - init(interval: TimeInterval = 0.15) { - self.interval = interval - } - - mutating func shouldSend(at date: Date = Date(), final: Bool) -> Bool { - if !final, let last = lastSend, date.timeIntervalSince(last) < interval { - return false - } - lastSend = date - return true - } -} -``` - -- [ ] **Step 6 : Écrire `scripts/check_localization.py`** - -```python -#!/usr/bin/env python3 -"""Every tr("…") / NSLocalizedString("…") key must have a French translation, and every French key must be used.""" -import json -import pathlib -import re -import subprocess -import sys - -ROOT = pathlib.Path(__file__).resolve().parent.parent -MAC = ROOT / "Client" / "macos" -STRINGS = MAC / "fr.lproj" / "Localizable.strings" -LITERAL = r'"((?:[^"\\]|\\.)*)"' -PATTERNS = [re.compile(r"\btr\(" + LITERAL + r"\)"), re.compile(r"NSLocalizedString\(@?" + LITERAL)] - -french = set(json.loads(subprocess.check_output(["plutil", "-convert", "json", "-o", "-", str(STRINGS)]))) -used = set() -for path in sorted(MAC.rglob("*.swift")) + sorted(MAC.rglob("*.mm")): - text = path.read_text(encoding="utf-8") - for pattern in PATTERNS: - used.update(key.replace("\\n", "\n") for key in pattern.findall(text)) - -missing = sorted(used - french) -unused = sorted(french - used) -for key in missing: - print(f"missing French translation: {key!r}") -for key in unused: - print(f"unused French key: {key!r}") -if missing or unused: - sys.exit(1) -print(f"Localization: {len(used)} keys, all translated") -``` - -- [ ] **Step 7 : Relancer les tests** - -Run : `make test` -Attendu : `LogicTests: all passed` puis `Localization: 15 keys, all translated` (les 15 clés de la tâche 1). -Si la vérif. des traductions échoue, corriger `Localizable.strings` : la tâche 1 doit être propre. - -- [ ] **Step 8 : Ajouter les tests à la CI** - -Dans `.github/workflows/build.yml`, avant l'étape « Build (release, universal) » : - -```yaml - - name: Test - run: make test -``` - -- [ ] **Step 9 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "test: reconnect/poll-guard/throttle logic, localization check, make test" -``` - ---- - -### Task 3: Décodage des trames + corrections XM6 (canal `0x19`, égaliseur 10 bandes en lecture) - -**Files:** -- Create: `Client/ProtocolParsers.h`, `Client/ProtocolParsers.cpp`, `Client/tests/ProtocolParsersTests.cpp` -- Modify: `Client/Headphones.h`, `Client/Headphones.cpp` (`requestAmbientState`, `requestEqualizer`, - `setEqualizerCustom`, nouvelles méthodes), `Client/macos/HeadphonesBridge.h/.mm`, `scripts/test.sh` - -**Interfaces:** -- Produces (C++) : - - `namespace ProtocolParsers { struct NcAsmState { bool enabled; bool ambient; bool focusOnVoice; int level; }; std::optional parseNcAsmState(const Buffer&); struct EqualizerState { unsigned char preset; bool hasClearBass; int clearBass; std::vector bands; }; std::optional parseEqualizer(const Buffer&); }` - - `Headphones::probeNcAsmInquiryType()`, `int Headphones::getEqualizerBandCount()`, `bool Headphones::equalizerHasClearBass()` -- Produces (Obj-C, visible en Swift) : `equalizerBandCount: Int`, `equalizerHasClearBass: Bool`, - `equalizerWritable: Bool` sur `HeadphonesBridge`. - -- [ ] **Step 1 : Écrire les tests** `Client/tests/ProtocolParsersTests.cpp` (trames réelles du XM6, spec §7) - -```cpp -#include "ProtocolParsers.h" -#include "CommandSerializer.h" -#include -#include - -// Minimal test runner (no framework). Exit code 1 on any failure. -static int failures = 0; -#define CHECK(cond) do { if (!(cond)) { failures++; std::printf("FAIL %s:%d: %s\n", __FILE__, __LINE__, #cond); } } while (0) - -static Buffer bytes(std::initializer_list values) -{ - Buffer b; - for (int v : values) b.push_back((char)v); - return b; -} - -int main() -{ - using namespace ProtocolParsers; - - // --- NC/ASM state --- - // WH-1000XM6 answer to the legacy 0x17 inquiry: all zeros = "not this channel". - CHECK(!parseNcAsmState(bytes({ 0x67, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00 })).has_value()); - // WH-1000XM6 notify on 0x19: Ambient Sound on, level 10, no voice focus. - { - auto s = parseNcAsmState(bytes({ 0x69, 0x19, 0x01, 0x01, 0x01, 0x00, 0x0a, 0x00, 0x00 })); - CHECK(s && s->enabled && s->ambient && !s->focusOnVoice && s->level == 10); - } - // WH-1000XM6 reply on 0x19: Noise Cancelling (ambient byte = 0). - { - auto s = parseNcAsmState(bytes({ 0x67, 0x19, 0x01, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00 })); - CHECK(s && s->enabled && !s->ambient); - } - // Legacy 0x17 layout (WH-CH720N): effect off. - { - auto s = parseNcAsmState(bytes({ 0x67, 0x17, 0x01, 0x00, 0x00, 0x00, 0x01 })); - CHECK(s && !s->enabled); - } - CHECK(!parseNcAsmState(bytes({ 0x67, 0x17, 0x01 })).has_value()); // too short - CHECK(!parseNcAsmState(bytes({ 0x57, 0x17, 0x01, 0x01, 0x01, 0x00, 0x0a })).has_value()); // wrong opcode - - // --- Equalizer --- - // WH-1000XM6: unknown preset 0x30, 10 bands (offset +10 hypothesis, spec §7). - { - auto e = parseEqualizer(bytes({ 0x57, 0x00, 0x30, 0x0a, 0x0a, 0x0a, 0x05, 0x05, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06 })); - CHECK(e && e->preset == 0x30 && !e->hasClearBass && e->bands.size() == 10); - CHECK(e && e->bands[0] == 0 && e->bands[2] == -5 && e->bands[9] == -4); - } - // 5 bands + Clear Bass (WH-CH720N): Manual, bass +3, bands -2..+2. - { - auto e = parseEqualizer(bytes({ 0x57, 0x00, 0xa0, 0x06, 13, 8, 9, 10, 11, 12 })); - CHECK(e && e->preset == 0xa0 && e->hasClearBass && e->clearBass == 3); - CHECK(e && e->bands == std::vector({ -2, -1, 0, 1, 2 })); - } - // Preset only, no band data. - { - auto e = parseEqualizer(bytes({ 0x57, 0x00, 0x16 })); - CHECK(e && e->preset == 0x16 && e->bands.empty()); - } - CHECK(!parseEqualizer(bytes({ 0x23, 0x00, 0x44, 0x00 })).has_value()); // battery reply - - // --- Framing --- - // Round trip, with a payload byte (0x3c = END_MARKER) that must be escaped. - { - Buffer payload = bytes({ 0x68, 0x17, 0x01, 0x01, 0x01, 0x00, 0x3c }); - auto frame = CommandSerializer::packageDataForBt(payload, DATA_TYPE::DATA_MDR, 1); - CHECK(frame.front() == START_MARKER && frame.back() == END_MARKER); - auto msg = CommandSerializer::unpackBtMessage(Buffer(frame.begin() + 1, frame.end() - 1)); - CHECK(msg.dataType == DATA_TYPE::DATA_MDR && msg.seqNumber == 1 && msg.payload == payload); - } - // Real WH-1000XM6 battery frame (68 %), between the 3e/3c markers. - { - auto msg = CommandSerializer::unpackBtMessage(bytes({ 0x0c, 0x00, 0x00, 0x00, 0x00, 0x04, 0x23, 0x00, 0x44, 0x00, 0x77 })); - CHECK(msg.payload == bytes({ 0x23, 0x00, 0x44, 0x00 })); - } - - if (failures) { std::printf("ProtocolParsersTests: %d failure(s)\n", failures); return 1; } - std::printf("ProtocolParsersTests: all passed\n"); - return 0; -} -``` - -- [ ] **Step 2 : Brancher le test dans `scripts/test.sh`**, juste avant `echo "== Localization"` : - -```bash -echo "== ProtocolParsersTests" -clang++ -target "$TARGET" -isysroot "$SDK" -std=c++17 -I "$ROOT/Client" \ - "$ROOT/Client/tests/ProtocolParsersTests.cpp" "$ROOT/Client/ProtocolParsers.cpp" \ - "$ROOT/Client/CommandSerializer.cpp" "$ROOT/Client/ByteMagic.cpp" \ - -o "$OUT/ProtocolParsersTests" -"$OUT/ProtocolParsersTests" -``` - -- [ ] **Step 3 : Voir le test échouer** - -Run : `make test` -Attendu : échec, `'ProtocolParsers.h' file not found`. - -- [ ] **Step 4 : Écrire `Client/ProtocolParsers.h`** - -```cpp -#pragma once - -#include -#include -#include "Constants.h" - -// Pure decoders for v2 inquiry replies. `payload` is the frame's field, starting with the reply opcode. -namespace ProtocolParsers -{ - struct NcAsmState - { - bool enabled; // NC/ASM effect on - bool ambient; // true = Ambient Sound, false = Noise Cancelling - bool focusOnVoice; - int level; // ambient level (meaningful when ambient) - }; - - // Accepts "67|69 17 01 " and the WH-1000XM6 "67|69 19 01 - // ". Returns nullopt when too short, for other opcodes, and for the all-zero body the XM6 sends - // back on the channel it doesn't use (67 17 00 00 00 00 00). - std::optional parseNcAsmState(const Buffer& payload); - - struct EqualizerState - { - unsigned char preset; // raw preset id (EQ_PRESET values, or ids we don't know yet like 0x30) - bool hasClearBass; // 5-band layout only - int clearBass; // -10..10 when hasClearBass - std::vector bands; // 5 or 10 values in -10..10; empty when the reply carried no band data - }; - - // "57 00 06 " (5 bands + Clear Bass) or "57 00 0a ". - std::optional parseEqualizer(const Buffer& payload); -} -``` - -- [ ] **Step 5 : Écrire `Client/ProtocolParsers.cpp`** - -```cpp -#include "ProtocolParsers.h" - -#include - -namespace ProtocolParsers -{ - std::optional parseNcAsmState(const Buffer& payload) - { - if (payload.size() < 7) return std::nullopt; - auto opcode = (unsigned char)payload[0]; - auto type = (unsigned char)payload[1]; - if ((opcode != 0x67 && opcode != 0x69) || (type != 0x17 && type != 0x19)) return std::nullopt; - if (std::all_of(payload.begin() + 2, payload.end(), [](char b) { return b == 0; })) return std::nullopt; - - NcAsmState state; - state.enabled = payload[3] != 0; - state.ambient = payload[4] != 0; - state.focusOnVoice = payload[5] != 0; - state.level = (unsigned char)payload[6]; - return state; - } - - std::optional parseEqualizer(const Buffer& payload) - { - if (payload.size() < 3 || (unsigned char)payload[0] != 0x57) return std::nullopt; - - EqualizerState state{ (unsigned char)payload[2], false, 0, {} }; - if (payload.size() < 4) return state; - size_t count = (unsigned char)payload[3]; - if (payload.size() < 4 + count) return state; - - auto value = [&](size_t i) { return (int)(unsigned char)payload[4 + i] - 10; }; - if (count == 6) - { - state.hasClearBass = true; - state.clearBass = value(0); - for (size_t i = 1; i < 6; i++) state.bands.push_back(value(i)); - } - else if (count == 10) - { - for (size_t i = 0; i < 10; i++) state.bands.push_back(value(i)); - } - return state; - } -} -``` - -- [ ] **Step 6 : Relancer les tests** - -Run : `make test` -Attendu : `LogicTests: all passed`, `ProtocolParsersTests: all passed`, `Localization: 15 keys, all translated`. - -- [ ] **Step 7 : Brancher les décodeurs dans `Client/Headphones.h`** - -Sous `void requestEqualizer();` / `EQ_PRESET getEqualizerPreset();`, ajouter : - -```cpp - int getEqualizerBandCount(); // 0 until read, then 5 (+ Clear Bass) or 10 - bool equalizerHasClearBass(); -``` - -Sous `void requestAmbientState();`, ajouter : - -```cpp - // Picks the NC/ASM inquiry channel: 0x19 when the device answers it (WH-1000XM6), else the legacy 0x17. - void probeNcAsmInquiryType(); -``` - -Remplacer le membre `std::vector _eqBands = { 0, 0, 0, 0, 0 };` par : - -```cpp - std::vector _eqBands; // empty until the first read; 5 or 10 values - bool _eqHasClearBass = false; - unsigned char _ncAsmInquiryType = 0x17; // 0x19 on the WH-1000XM6, see probeNcAsmInquiryType() -``` - -- [ ] **Step 8 : Modifier `Client/Headphones.cpp`** - -Ajouter `#include "ProtocolParsers.h"` après `#include "CommandSerializer.h"`. - -Remplacer tout le corps de `Headphones::requestEqualizer()` par : - -```cpp -void Headphones::requestEqualizer() -{ - // GET: 56 00 -> RET: 57 00 (decoded by ProtocolParsers::parseEqualizer) - auto resp = this->_conn.sendCommandAndReadResponse({ (char)V2Command::EQ_GET, 0x00 }, V2Command::EQ_RET); - if (auto eq = ProtocolParsers::parseEqualizer(resp)) - { - std::lock_guard guard(this->_propertyMtx); - this->_eqPreset = static_cast(eq->preset); - if (!eq->bands.empty()) - { - this->_eqBands = eq->bands; - this->_eqHasClearBass = eq->hasClearBass; - this->_eqClearBass = eq->clearBass; - } - } -} - -int Headphones::getEqualizerBandCount() { return (int)this->_eqBands.size(); } -bool Headphones::equalizerHasClearBass() { return this->_eqHasClearBass; } -``` - -Dans `Headphones::setEqualizerCustom`, remplacer la boucle finale qui écrit `this->_eqBands[i]` par : - -```cpp - this->_eqBands.assign(bands.begin(), bands.end()); -``` - -Dans `Headphones::requestAmbientState()`, remplacer le bloc `if (protocolVersion == SonyProtocolVersion::V2) { … }` par : - -```cpp - if (protocolVersion == SonyProtocolVersion::V2) - { - // GET: 66 -> RET: 67 01 <0=NC/1=Ambient> [2 more bytes on 0x19] - auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, (char)this->_ncAsmInquiryType }, 0x67, this->_ncAsmInquiryType); - if (auto state = ProtocolParsers::parseNcAsmState(resp)) - { - std::lock_guard guard(this->_propertyMtx); - // Update both current and desired so the UI reflects reality and isChanged() stays false. - this->_ambientSoundControl.current = this->_ambientSoundControl.desired = state->enabled; - this->_asmLevel.current = this->_asmLevel.desired = state->ambient ? state->level : 0; - this->_focusOnVoice.current = this->_focusOnVoice.desired = state->focusOnVoice; - } - } -``` - -Ajouter après `requestAmbientState()` : - -```cpp -void Headphones::probeNcAsmInquiryType() -{ - // The WH-1000XM6 answers the legacy 0x17 inquiry with all zeros and reports its real state on 0x19. - // Setting the mode still goes through 68 17, which the XM6 accepts. - try - { - auto resp = this->_conn.sendCommandAndReadResponse({ 0x66, 0x19 }, 0x67, 0x19); - if (ProtocolParsers::parseNcAsmState(resp)) this->_ncAsmInquiryType = 0x19; - } - catch (...) {} -} -``` - -- [ ] **Step 9 : Exposer l'égaliseur dans `Client/macos/HeadphonesBridge.h`** - -Sous `@property (nonatomic, readonly) BOOL supportsEqualizer;`, ajouter : - -```objc -@property (nonatomic, readonly) NSInteger equalizerBandCount; // 0 until read, then 5 or 10 -@property (nonatomic, readonly) BOOL equalizerHasClearBass; // 5-band layout -// NO while this device's equalizer write format is unverified (the WH-1000XM6's 10-band layout, spec §7). -@property (nonatomic, readonly) BOOL equalizerWritable; -``` - -- [ ] **Step 10 : Modifier `Client/macos/HeadphonesBridge.mm`** - -Après `- (NSInteger)clearBass { … }`, ajouter : - -```objc -- (NSInteger)equalizerBandCount { return _hp ? _hp->getEqualizerBandCount() : 0; } -- (BOOL)equalizerHasClearBass { return _hp && _hp->equalizerHasClearBass(); } -// Only the 5-band + Clear Bass layout (WH-CH720N family) has a verified write format. -- (BOOL)equalizerWritable { return self.supportsEqualizer && _hp && _hp->equalizerHasClearBass(); } -``` - -Dans `refreshStatusWithCompletion:`, remplacer : - -```objc - if (!self->_initialized) { - hp->initDevice(); - self->_initialized = YES; - } -``` - -par : - -```objc - if (!self->_initialized) { - hp->initDevice(); - hp->probeNcAsmInquiryType(); - self->_initialized = YES; - } -``` - -Dans `setEqualizerPreset:completion:`, remplacer la condition -`if (_bt->getProtocolVersion() != SonyProtocolVersion::V2) {` par `if (!self.equalizerWritable) {`. -Dans `setCustomEqualizerBass:bands:completion:`, remplacer -`if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) {` par -`if (!_hp || !self.connected || !self.equalizerWritable) {`. - -- [ ] **Step 11 : Compiler et tester** - -Run : `make test && make` -Attendu : les trois lignes « all passed / all translated », puis `OK -> …/build/SonyBridge.app`. - -- [ ] **Step 12 : Vérifier sur le XM6 avec l'utilisateur** - -Run : `make run DEBUG=1`, demander à l'utilisateur de cliquer sur « Connecter… », puis -`grep -E '\[send\].* 66 19|\[recv\].* 67 19' build/app.log | head -4` -Attendu : une demande `66 19` et une réponse `67 19 …` non nulle. -Demander ensuite à l'utilisateur : -1. Choisir « Son ambiant » dans le menu : la coche **reste** sur « Son ambiant » (plus de retour sur - « Désactivé »). -2. Appuyer sur le bouton NC du casque : en 2 s environ, la coche suit le mode du casque (menu fermé puis - rouvert ; les mises à jour menu ouvert viennent en tâche 4). - -- [ ] **Step 13 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "fix(xm6): read NC/ASM state on channel 0x19, decode 10-band equalizer (read-only)" -``` - ---- - -### Task 4: Nouveau `HeadphonesModel` (état, minuteurs menu ouvert, anti-retour, limitation, batterie) - -Réécrit le modèle pour le menu : un état de connexion unique, les propriétés en lecture seule, les minuteurs -en mode `.common`, `PollGuard` et `SendThrottle`, la relecture de la batterie toutes les 60 s, et les erreurs -affichées seulement pour les actions de l'utilisateur. - -**Files:** -- Modify (réécriture complète) : `Client/macos/HeadphonesModel.swift` -- Modify : `Client/macos/HeadphonesBridge.h/.mm` (`refreshBatteryWithCompletion:`), - `Client/macos/StatusItemController.swift`, `Client/macos/HeadphonesMenu.swift`, - `Client/macos/fr.lproj/Localizable.strings` - -**Interfaces:** -- Consumes : `PollGuard`, `SendThrottle` (tâche 2) ; `equalizerBandCount`, `equalizerHasClearBass`, - `equalizerWritable` (tâche 3). -- Produces (utilisé par les tâches 5 à 8) : - - `enum ConnectionState { case disconnected, connecting, connected }` - - `HeadphonesModel` : `connectionState`, `connected` (calculé), `deviceName`, `deviceMac`, `protocolVersion`, - `firmware`, `codec`, `maxAmbientLevel`, `mode`, `ambientLevel`, `focusOnVoice`, `batteryLevel`, - `batteryCharging`, `hasDualBattery`, `batteryLeft`, `batteryRight`, `batteryCase`, `supportsEqualizer`, - `equalizerWritable`, `eqPreset: Int`, `eqBands: [Int]`, `eqHasClearBass`, `clearBass`, `dsee`, - `hasAutoPowerOff`, `autoPowerOff`, `hasSpeakToChat`, `speakToChat`, `hasAdaptiveVolume`, `adaptiveVolume`, - `errorMessage: String?` (tous `@Published private(set)`) - - Actions : `connect()`, `disconnect()`, `setMode(_:)`, `setLevel(_:final:)`, `setFocusOnVoice(_:)`, - `setEqualizerPreset(_:)`, `setEqualizerBand(_:value:final:)`, `setClearBass(_:final:)`, `resetEqualizer()`, - `setDsee(_:)`, `setAutoPowerOff(_:)`, `setSpeakToChat(_:)`, `setAdaptiveVolume(_:)`, `showError(_:)` - - Point d'extension pour la tâche 7 : `handleConnectResult(ok:error:userInitiated:)` et `linkLost()` - -- [ ] **Step 1 : Ajouter la relecture de la batterie au pont** - -`Client/macos/HeadphonesBridge.h`, sous `refreshDynamicWithCompletion:` : - -```objc -// Re-reads the battery level (v2 devices only). Completion on the main thread. -- (void)refreshBatteryWithCompletion:(void (^)(void))completion; -``` - -`Client/macos/HeadphonesBridge.mm`, après `refreshDynamicWithCompletion:` : - -```objc -- (void)refreshBatteryWithCompletion:(void (^)(void))completion { - // CRITICAL: 0x22 is BATTERY_LEVEL_REQUEST on v2 but POWER_OFF on v1 - never send it to a v1 device. - if (!_hp || !self.connected || _bt->getProtocolVersion() != SonyProtocolVersion::V2) { completion(); return; } - Headphones *hp = _hp.get(); - dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ - try { hp->requestBattery(); } catch (std::exception &exc) {} - dispatch_async(dispatch_get_main_queue(), ^{ completion(); }); - }); -} -``` - -- [ ] **Step 2 : Réécrire `Client/macos/HeadphonesModel.swift`** - -```swift -import Foundation -import Combine - -enum ConnectionState { - case disconnected, connecting, connected -} - -// Observable state of the headphones and the actions the menu triggers. Wraps the Obj-C++ HeadphonesBridge. -final class HeadphonesModel: ObservableObject { - private enum PolledSetting { case ambient } - - private let bridge = HeadphonesBridge() - - @Published private(set) var connectionState: ConnectionState = .disconnected - var connected: Bool { connectionState == .connected } - - // Kept after a disconnect so the header still names the last headset. - @Published private(set) var deviceName = "" - @Published private(set) var deviceMac = "" - @Published private(set) var protocolVersion = "" - @Published private(set) var firmware = "" - @Published private(set) var codec = "" - @Published private(set) var maxAmbientLevel = 20 - - @Published private(set) var mode: SHCAmbientMode = .off - @Published private(set) var ambientLevel = 10 - @Published private(set) var focusOnVoice = false - - @Published private(set) var batteryLevel = -1 - @Published private(set) var batteryCharging = false - @Published private(set) var hasDualBattery = false - @Published private(set) var batteryLeft = -1 - @Published private(set) var batteryRight = -1 - @Published private(set) var batteryCase = -1 - - @Published private(set) var supportsEqualizer = false - @Published private(set) var equalizerWritable = false - @Published private(set) var eqPreset = 0 - @Published private(set) var eqBands: [Int] = [] - @Published private(set) var eqHasClearBass = false - @Published private(set) var clearBass = 0 - @Published private(set) var dsee = false - - @Published private(set) var hasAutoPowerOff = false - @Published private(set) var autoPowerOff = 0 - @Published private(set) var hasSpeakToChat = false - @Published private(set) var speakToChat = false - @Published private(set) var hasAdaptiveVolume = false - @Published private(set) var adaptiveVolume = false - - // Last error from a user action; cleared by the next successful one. - @Published private(set) var errorMessage: String? - - private var timers: [Timer] = [] - private var pollGuard = PollGuard() - private var levelThrottle = SendThrottle() - private var eqThrottle = SendThrottle() - - // MARK: - Connection - - // User-initiated: uses the already-connected Sony headset, else the macOS Bluetooth picker. - func connect() { - connectionState = .connecting - errorMessage = nil - // Defer so the menu can show "Connecting…" before a modal picker blocks the main thread. - DispatchQueue.main.async { - self.bridge.scanAndConnect { ok, error in - self.handleConnectResult(ok: ok, error: error, userInitiated: true) - } - } - } - - func disconnect() { - stopTimers() - bridge.disconnect() - connectionState = .disconnected - } - - func handleConnectResult(ok: Bool, error: String?, userInitiated: Bool) { - guard ok else { - connectionState = .disconnected - if userInitiated, let error = error { errorMessage = error } - return - } - connectionState = .connected - syncFromBridge() - bridge.refreshStatus { [weak self] in self?.syncFromBridge() } // called after reads, then after probes - startTimers() - } - - // The control link dropped on its own (idle power-save). Task 7 adds the automatic reconnection here. - func linkLost() { - stopTimers() - connectionState = .disconnected - } - - // MARK: - Actions - - func setMode(_ newMode: SHCAmbientMode) { - mode = newMode - pollGuard.userChanged(.ambient) - pushAmbient() - } - - func setLevel(_ level: Int, final: Bool) { - ambientLevel = level - pollGuard.userChanged(.ambient) - if mode == .ambientSound && levelThrottle.shouldSend(final: final) { pushAmbient() } - } - - func setFocusOnVoice(_ on: Bool) { - focusOnVoice = on - pollGuard.userChanged(.ambient) - pushAmbient() - } - - func setEqualizerPreset(_ preset: Int) { - eqPreset = preset - bridge.setEqualizerPreset(preset) { [weak self] ok, error in self?.finish(ok, error) } - } - - func setEqualizerBand(_ index: Int, value: Int, final: Bool) { - guard eqBands.indices.contains(index) else { return } - eqBands[index] = value - eqPreset = 0xA0 - if eqThrottle.shouldSend(final: final) { pushCustomEqualizer() } - } - - func setClearBass(_ value: Int, final: Bool) { - clearBass = value - eqPreset = 0xA0 - if eqThrottle.shouldSend(final: final) { pushCustomEqualizer() } - } - - func resetEqualizer() { - eqBands = Array(repeating: 0, count: eqBands.count) - clearBass = 0 - eqPreset = 0xA0 - pushCustomEqualizer() - } - - func setDsee(_ on: Bool) { - dsee = on - bridge.setDsee(on) { [weak self] ok, error in self?.finish(ok, error) } - } - - func setAutoPowerOff(_ index: Int) { - autoPowerOff = index - bridge.setAutoPowerOff(index) { [weak self] ok, error in self?.finish(ok, error) } - } - - func setSpeakToChat(_ on: Bool) { - speakToChat = on - bridge.setSpeakToChat(on) { [weak self] ok, error in self?.finish(ok, error) } - } - - func setAdaptiveVolume(_ on: Bool) { - adaptiveVolume = on - bridge.setAdaptiveVolume(on) { [weak self] ok, error in self?.finish(ok, error) } - } - - func showError(_ message: String) { - errorMessage = message - } - - private func pushAmbient() { - bridge.applyMode(mode, level: ambientLevel, focusVoice: focusOnVoice) { [weak self] ok, error in - self?.finish(ok, error) - } - } - - private func pushCustomEqualizer() { - bridge.setCustomEqualizerBass(clearBass, bands: eqBands.map { NSNumber(value: $0) }) { [weak self] ok, error in - self?.finish(ok, error) - } - } - - private func finish(_ ok: Bool, _ error: String?) { - errorMessage = ok ? nil : error - } - - // MARK: - Polling - - private func startTimers() { - stopTimers() - timers = [ - repeating(every: 1.5) { [weak self] in self?.checkLink() }, - repeating(every: 2) { [weak self] in self?.pollAmbient() }, - repeating(every: 60) { [weak self] in self?.pollBattery() }, - ] - } - - private func stopTimers() { - timers.forEach { $0.invalidate() } - timers = [] - } - - // Added in .common mode so they keep firing while the menu is open (menus run the event-tracking mode). - private func repeating(every interval: TimeInterval, _ block: @escaping () -> Void) -> Timer { - let timer = Timer(timeInterval: interval, repeats: true) { _ in block() } - RunLoop.main.add(timer, forMode: .common) - return timer - } - - private func checkLink() { - if connected && !bridge.connected { linkLost() } - } - - // Follows the headset's own NC button, unless the user just changed the mode from the menu. - private func pollAmbient() { - guard connected, pollGuard.shouldAcceptPoll(for: .ambient) else { return } - bridge.refreshDynamic { [weak self] in - guard let self = self, self.pollGuard.shouldAcceptPoll(for: .ambient) else { return } - self.readAmbientFromBridge() - } - } - - private func pollBattery() { - guard connected else { return } - bridge.refreshBattery { [weak self] in self?.readBatteryFromBridge() } - } - - // MARK: - Reading the bridge - - private func syncFromBridge() { - deviceName = bridge.deviceName ?? deviceName - deviceMac = bridge.deviceMac ?? deviceMac - protocolVersion = bridge.protocolVersionString ?? "" - maxAmbientLevel = bridge.maxAmbientLevel - readAmbientFromBridge() - readBatteryFromBridge() - supportsEqualizer = bridge.supportsEqualizer - equalizerWritable = bridge.equalizerWritable - eqPreset = bridge.eqPreset - eqHasClearBass = bridge.equalizerHasClearBass - clearBass = bridge.clearBass - eqBands = (0.. 0 { ambientLevel = level } - focusOnVoice = bridge.focusOnVoice - } - - private func readBatteryFromBridge() { - batteryLevel = bridge.batteryLevel - batteryCharging = bridge.batteryCharging - hasDualBattery = bridge.hasDualBattery - batteryLeft = bridge.batteryLeft - batteryRight = bridge.batteryRight - batteryCase = bridge.batteryCase - } -} -``` - -- [ ] **Step 3 : Adapter l'icône et le menu minimal au nouvel état** - -`Client/macos/StatusItemController.swift` : remplacer le bloc `model.$connected … .store(in: &cancellables)` par : - -```swift - model.$connectionState - .receive(on: DispatchQueue.main) - .sink { [weak self] state in self?.statusItem.button?.appearsDisabled = state != .connected } - .store(in: &cancellables) -``` - -`Client/macos/HeadphonesMenu.swift`, dans `update()` : remplacer -`(model.connecting ? tr("Connecting…") : tr("Connect…"))` par -`(model.connectionState == .connecting ? tr("Connecting…") : tr("Connect…"))`, et -`connectItem.isEnabled = !model.connecting` par `connectItem.isEnabled = model.connectionState != .connecting`. - -- [ ] **Step 4 : Retirer la clé devenue inutile** - -Dans `Client/macos/fr.lproj/Localizable.strings`, supprimer la ligne `"Headphones disconnected." = …;` (le -modèle n'affiche plus d'erreur quand la liaison se coupe d'elle-même). - -- [ ] **Step 5 : Tests et build** - -Run : `make test && make` -Attendu : tout passe, `Localization: 14 keys, all translated`, puis `OK -> …`. - -- [ ] **Step 6 : Vérifier avec l'utilisateur** - -Run : `make run DEBUG=1`. Demander à l'utilisateur de : -1. Se connecter, **ouvrir le menu et le laisser ouvert**, puis appuyer sur le bouton NC du casque : la coche - change pendant que le menu est ouvert (les minuteurs tournent en mode `.common`). -2. Choisir « Son ambiant » : la coche ne revient pas en arrière. -Après au moins 2 minutes connecté : `grep -c '\[send\].* 22 00' build/app.log` → au moins 2 (lecture à la -connexion + relecture toutes les 60 s). - -- [ ] **Step 7 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "refactor(macos): menu-oriented HeadphonesModel (connection state, common-mode timers, poll guard, battery polling)" -``` - ---- - -### Task 5: Lignes riches du menu (vues SwiftUI hébergées) - -Crée les quatre vues et les vérifie tôt dans le vrai menu : c'est le risque technique principal (spec §11). -Les curseurs de l'égaliseur sont des `NSSlider` natifs verticaux (via `NSViewRepresentable`) : les contrôles -AppKit suivent la souris de façon fiable dans un menu. - -**Files:** -- Modify : `Client/macos/MenuSupport.swift` (`MenuMetrics`, `hostingMenuItem`) -- Create : `Client/macos/MenuRows/HeaderRow.swift`, `AmbientLevelRow.swift`, `ToggleRow.swift`, `EqualizerRow.swift` -- Modify : `Client/macos/HeadphonesMenu.swift` (branchement provisoire de l'en-tête et du curseur), - `Client/macos/fr.lproj/Localizable.strings` - -**Interfaces:** -- Consumes : l'API `HeadphonesModel` de la tâche 4. -- Produces : - - `enum MenuMetrics { static let width: CGFloat; static let equalizerWidth: CGFloat; static let leading: CGFloat; static let indent: CGFloat }` - - `func hostingMenuItem(width: CGFloat = MenuMetrics.width, @ViewBuilder _ content: () -> Content) -> NSMenuItem` - - `struct HeaderRow: View { init(model:) }`, `struct AmbientLevelRow: View { init(model:) }`, - `struct ToggleRow: View { init(model:title:indent:isOn:set:) }`, `struct EqualizerRow: View { init(model:) }` - -- [ ] **Step 1 : Ajouter à `Client/macos/MenuSupport.swift`** (ajouter `import SwiftUI` en tête du fichier) - -```swift -enum MenuMetrics { - static let width: CGFloat = 280 // main menu rows - static let equalizerWidth: CGFloat = 300 // equalizer submenu - static let leading: CGFloat = 14 // lines up with native item titles - static let indent: CGFloat = 36 // rows nested under "Son ambiant" -} - -// Wraps a SwiftUI view in a menu item, for rows a plain NSMenuItem can't express (sliders, switches, header). -// Rows keep a fixed height: optional lines (the error line, notes) are separate plain items instead. -func hostingMenuItem(width: CGFloat = MenuMetrics.width, @ViewBuilder _ content: () -> Content) -> NSMenuItem { - let host = NSHostingView(rootView: content().frame(width: width, alignment: .leading)) - host.frame = NSRect(origin: .zero, size: host.fittingSize) - let item = NSMenuItem() - item.view = host - return item -} -``` - -- [ ] **Step 2 : Écrire `Client/macos/MenuRows/HeaderRow.swift`** - -```swift -import SwiftUI - -// Menu header: headset name, connection state + codec, battery. -struct HeaderRow: View { - @ObservedObject var model: HeadphonesModel - - var body: some View { - HStack(alignment: .center, spacing: 8) { - VStack(alignment: .leading, spacing: 1) { - Text(model.deviceName.isEmpty ? "SonyBridge" : model.deviceName) - .font(.system(size: 13, weight: .semibold)) - Text(statusLine) - .font(.system(size: 11)) - .foregroundColor(.secondary) - } - Spacer(minLength: 8) - if model.connected { battery } - } - .padding(.horizontal, MenuMetrics.leading) - .padding(.vertical, 4) - } - - private var statusLine: String { - switch model.connectionState { - case .connecting: return tr("Connecting…") - case .disconnected: return tr("Not connected") - case .connected: return model.codec.isEmpty ? tr("Connected") : "\(tr("Connected")) · \(model.codec)" - } - } - - @ViewBuilder private var battery: some View { - if model.hasDualBattery { - Text(String(format: tr("L %ld%% R %ld%%"), model.batteryLeft, model.batteryRight)) - .font(.system(size: 12)) - .foregroundColor(.secondary) - } else if model.batteryLevel >= 0 { - HStack(spacing: 4) { - Text(String(format: tr("%ld%%"), model.batteryLevel)) - .font(.system(size: 12)) - .foregroundColor(.secondary) - Image(systemName: batterySymbol) - .foregroundColor(model.batteryLevel <= 20 && !model.batteryCharging ? .red : .secondary) - } - } - } - - private var batterySymbol: String { - if model.batteryCharging { return "battery.100.bolt" } - switch model.batteryLevel { - case ..<13: return "battery.0" - case ..<38: return "battery.25" - case ..<63: return "battery.50" - case ..<88: return "battery.75" - default: return "battery.100" - } - } -} -``` - -- [ ] **Step 3 : Écrire `Client/macos/MenuRows/AmbientLevelRow.swift`** - -```swift -import SwiftUI - -// Ambient Sound level slider (1…max), shown under "Son ambiant". -struct AmbientLevelRow: View { - @ObservedObject var model: HeadphonesModel - - var body: some View { - HStack(spacing: 8) { - Slider( - value: Binding(get: { Double(model.ambientLevel) }, - set: { model.setLevel(Int($0.rounded()), final: false) }), - in: 1...Double(max(model.maxAmbientLevel, 2)), - step: 1, - onEditingChanged: { editing in - if !editing { model.setLevel(model.ambientLevel, final: true) } - } - ) - .controlSize(.small) - Text(verbatim: "\(model.ambientLevel)") - .font(.system(size: 11, weight: .medium).monospacedDigit()) - .foregroundColor(.secondary) - .frame(width: 20, alignment: .trailing) - } - .padding(.leading, MenuMetrics.indent) - .padding(.trailing, MenuMetrics.leading) - .padding(.vertical, 2) - .disabled(!model.connected) - } -} -``` - -- [ ] **Step 4 : Écrire `Client/macos/MenuRows/ToggleRow.swift`** - -```swift -import SwiftUI - -// A title with a switch on the right (Focus on Voice, DSEE, Speak-to-Chat, Adaptive Volume). -struct ToggleRow: View { - @ObservedObject var model: HeadphonesModel - let title: String - var indent: CGFloat = MenuMetrics.leading - let isOn: (HeadphonesModel) -> Bool - let set: (HeadphonesModel, Bool) -> Void - - var body: some View { - HStack { - Text(title).font(.system(size: 13)) - Spacer(minLength: 8) - Toggle("", isOn: Binding(get: { isOn(model) }, set: { set(model, $0) })) - .labelsHidden() - .toggleStyle(.switch) - .controlSize(.mini) - } - .padding(.leading, indent) - .padding(.trailing, MenuMetrics.leading) - .padding(.vertical, 2) - .disabled(!model.connected) - .opacity(model.connected ? 1 : 0.5) - } -} -``` - -- [ ] **Step 5 : Écrire `Client/macos/MenuRows/EqualizerRow.swift`** - -```swift -import AppKit -import SwiftUI - -// Manual equalizer: 10 vertical sliders (WH-1000XM6) or Clear Bass + 5 (older models). Active only on "Manual" -// and when the device's write format is verified (model.equalizerWritable). -struct EqualizerRow: View { - @ObservedObject var model: HeadphonesModel - - private static let labels5 = ["400", "1k", "2.5k", "6.3k", "16k"] - private static let labels10 = ["31", "63", "125", "250", "500", "1k", "2k", "4k", "8k", "16k"] - - private var editable: Bool { model.connected && model.equalizerWritable && model.eqPreset == 0xA0 } - private var labels: [String] { model.eqBands.count == 10 ? Self.labels10 : Self.labels5 } - - var body: some View { - HStack(alignment: .top, spacing: 0) { - if model.eqHasClearBass { - band(tr("Clear Bass"), value: model.clearBass) { model.setClearBass($0, final: $1) } - } - ForEach(Array(model.eqBands.enumerated()), id: \.offset) { index, value in - band(index < labels.count ? labels[index] : "", value: value) { - model.setEqualizerBand(index, value: $0, final: $1) - } - } - } - .padding(.horizontal, MenuMetrics.leading) - .padding(.vertical, 6) - } - - private func band(_ label: String, value: Int, onChange: @escaping (Int, Bool) -> Void) -> some View { - VStack(spacing: 3) { - VerticalBandSlider(value: value, enabled: editable, onChange: onChange) - .frame(width: 20, height: 72) - Text(verbatim: label) - .font(.system(size: 9)) - .foregroundColor(.secondary) - .lineLimit(1) - } - .frame(maxWidth: .infinity) - } -} - -// A native vertical NSSlider in -10…10. onChange(value, final): final is true on mouse-up. -struct VerticalBandSlider: NSViewRepresentable { - let value: Int - let enabled: Bool - let onChange: (Int, Bool) -> Void - - func makeCoordinator() -> Coordinator { - Coordinator(onChange: onChange) - } - - func makeNSView(context: Context) -> NSSlider { - let slider = NSSlider(value: Double(value), minValue: -10, maxValue: 10, - target: context.coordinator, action: #selector(Coordinator.changed(_:))) - slider.isVertical = true - slider.isContinuous = true - slider.controlSize = .small - return slider - } - - func updateNSView(_ slider: NSSlider, context: Context) { - context.coordinator.onChange = onChange - if Int(slider.doubleValue.rounded()) != value { slider.doubleValue = Double(value) } - slider.isEnabled = enabled - } - - final class Coordinator: NSObject { - var onChange: (Int, Bool) -> Void - - init(onChange: @escaping (Int, Bool) -> Void) { - self.onChange = onChange - } - - @objc func changed(_ sender: NSSlider) { - let final = NSApp.currentEvent?.type == .leftMouseUp - onChange(Int(sender.doubleValue.rounded()), final) - } - } -} -``` - -- [ ] **Step 6 : Ajouter les nouvelles clés à `Client/macos/fr.lproj/Localizable.strings`** (section « Menu ») - -``` -"Not connected" = "Non connecté"; -"Connected" = "Connecté"; -"L %ld%% R %ld%%" = "G %ld %% D %ld %%"; -"Clear Bass" = "Clear Bass"; -``` - -- [ ] **Step 7 : Branchement provisoire dans le menu minimal** (remplacé entièrement en tâche 6) - -Dans `Client/macos/HeadphonesMenu.swift` : -- Remplacer `headerItem.isEnabled = false` / `menu.addItem(headerItem)` par - `menu.addItem(hostingMenuItem { HeaderRow(model: model) })`, supprimer la propriété `headerItem` et, dans - `update()`, les lignes qui construisent `header` et affectent `headerItem.title`. -- Dans la boucle des modes, juste après `menu.addItem(item)`, ajouter : - -```swift - if mode == .ambientSound { - menu.addItem(hostingMenuItem { AmbientLevelRow(model: model) }) - menu.addItem(hostingMenuItem { - ToggleRow(model: model, title: tr("Focus on Voice"), indent: MenuMetrics.indent, - isOn: { $0.focusOnVoice }, set: { $0.setFocusOnVoice($1) }) - }) - } -``` - -et la clé `"Focus on Voice" = "Focalisation sur la voix";` dans `Localizable.strings`. - -- [ ] **Step 8 : Tests et build** - -Run : `make test && make` -Attendu : tout passe, `Localization: 19 keys, all translated` (la clé `"%ld%%"` sert maintenant à -`HeaderRow` ; `update()` ne l'utilise plus), puis `OK -> …`. - -- [ ] **Step 9 : Vérifier avec l'utilisateur** - -Run : `make run`. Demander à l'utilisateur, casque connecté : -1. L'en-tête montre le nom, « Connecté · AAC » et la batterie avec son icône, bien alignés, sans être coupés. -2. Le curseur de niveau se **fait glisser** dans le menu ouvert, et le son ambiant change dans le casque - pendant le glissement (au plus toutes les 150 ms) et au relâchement. -3. L'interrupteur « Focalisation sur la voix » bascule, et le menu reste ouvert. -Si le glissement ou l'interrupteur ne réagissent pas dans le menu : **arrêter** et remonter le problème avant -la tâche 6. Toute l'approche en dépend. - -- [ ] **Step 10 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "feat(macos): SwiftUI menu rows (header, level slider, switches, equalizer)" -``` - ---- - -### Task 6: Menu complet (spec §4) + icône selon le mode - -**Files:** -- Modify (réécriture complète) : `Client/macos/HeadphonesMenu.swift`, `Client/macos/StatusItemController.swift` -- Create : `Client/macos/StatusIcon.swift` -- Modify : `Client/macos/MenuSupport.swift` (`titleWithValue`), `Client/macos/fr.lproj/Localizable.strings` - -**Interfaces:** -- Consumes : tâches 1, 4 et 5. -- Produces : - - `enum StatusIcon { static func symbolName(for: SHCAmbientMode) -> String; static func image(connected: Bool, mode: SHCAmbientMode) -> NSImage? }` - - `func titleWithValue(_ title: String, _ value: String, width: CGFloat = MenuMetrics.width - 60) -> NSAttributedString` - - `HeadphonesMenu` : `private var connectItem` et la méthode `addAppSection()`, où la tâche 7 insère le - sous-menu des options. - -- [ ] **Step 1 : Ajouter `titleWithValue` à `Client/macos/MenuSupport.swift`** - -```swift -// "Title value": the value right-aligned in the secondary color, like "Égaliseur Graves ›". -func titleWithValue(_ title: String, _ value: String, width: CGFloat = MenuMetrics.width - 60) -> NSAttributedString { - let paragraph = NSMutableParagraphStyle() - paragraph.tabStops = [NSTextTab(textAlignment: .right, location: width)] - let font = NSFont.menuFont(ofSize: 0) - let text = NSMutableAttributedString(string: title, attributes: [.font: font, .paragraphStyle: paragraph]) - if !value.isEmpty { - text.append(NSAttributedString(string: "\t" + value, attributes: [ - .font: font, .paragraphStyle: paragraph, .foregroundColor: NSColor.secondaryLabelColor, - ])) - } - return text -} -``` - -- [ ] **Step 2 : Écrire `Client/macos/StatusIcon.swift`** - -```swift -import AppKit - -// Menu bar icon: one monochrome SF Symbol per mode, dimmed when disconnected (spec §6.6). -enum StatusIcon { - static func symbolName(for mode: SHCAmbientMode) -> String { - switch mode { - case .noiseCanceling: return "headphones.circle.fill" - case .ambientSound: return "ear.and.waveform" - default: return "headphones" - } - } - - static func image(connected: Bool, mode: SHCAmbientMode) -> NSImage? { - let name = connected ? symbolName(for: mode) : "headphones" - let image = NSImage(systemSymbolName: name, accessibilityDescription: "SonyBridge") - ?? NSImage(systemSymbolName: "headphones", accessibilityDescription: "SonyBridge") - image?.isTemplate = true // macOS tints it for light/dark menu bars - return image - } -} -``` - -- [ ] **Step 3 : Réécrire `Client/macos/StatusItemController.swift`** - -```swift -import AppKit -import Combine - -// Owns the menu bar icon (it follows the mode and connection state) and attaches the headphones menu to it. -final class StatusItemController { - private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) - private let headphonesMenu: HeadphonesMenu - private var cancellables = Set() - - init(model: HeadphonesModel) { - headphonesMenu = HeadphonesMenu(model: model) - statusItem.menu = headphonesMenu.menu - model.$connectionState.combineLatest(model.$mode) - .receive(on: DispatchQueue.main) - .sink { [weak self] state, mode in - let connected = state == .connected - self?.statusItem.button?.image = StatusIcon.image(connected: connected, mode: mode) - self?.statusItem.button?.appearsDisabled = !connected - } - .store(in: &cancellables) - } -} -``` - -- [ ] **Step 4 : Réécrire `Client/macos/HeadphonesMenu.swift`** - -```swift -import AppKit -import Combine - -// The status item's menu (spec §4). Built once; update() refreshes states, visibility and values in place, -// including while the menu is open. -final class HeadphonesMenu { - let menu = NSMenu() - private let model: HeadphonesModel - private var cancellables = Set() - - private let errorItem = NSMenuItem() - private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] - private var ambientRows: [NSMenuItem] = [] // level slider + focus on voice - private let equalizerItem = NSMenuItem() - private var presetItems: [(Int, NSMenuItem)] = [] - private let equalizerNoteItem = NSMenuItem() - private var equalizerResetItem = NSMenuItem() - private var dseeItem = NSMenuItem() - private var speakToChatItem = NSMenuItem() - private var adaptiveVolumeItem = NSMenuItem() - private let autoPowerOffItem = NSMenuItem() - private var autoPowerOffItems: [NSMenuItem] = [] - private let aboutItem = NSMenuItem() - private let aboutMenu = NSMenu() - private var connectItem = NSMenuItem() - - private static var presets: [(Int, String)] { - [(0x00, tr("Off")), (0x10, tr("Bright")), (0x11, tr("Excited")), (0x12, tr("Mellow")), - (0x13, tr("Relaxed")), (0x14, tr("Vocal")), (0x15, tr("Treble")), (0x16, tr("Bass")), - (0x17, tr("Speech")), (0xA0, tr("Manual"))] - } - - // Index = the bridge's auto power-off option (0=Off, 1=5 min, 2=30 min, 3=1 h, 4=3 h, 5=when taken off). - private static var autoPowerOffOptions: [String] { - [tr("Off"), tr("5 min"), tr("30 min"), tr("1 hour"), tr("3 hours"), tr("When taken off")] - } - - init(model: HeadphonesModel) { - self.model = model - menu.autoenablesItems = false - - menu.addItem(hostingMenuItem { HeaderRow(model: model) }) - errorItem.isEnabled = false - menu.addItem(errorItem) - menu.addItem(.separator()) - addAmbientSection() - menu.addItem(.separator()) - addSoundSection() - menu.addItem(.separator()) - addAppSection() - - // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. - model.objectWillChange - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.update() } - .store(in: &cancellables) - update() - } - - // MARK: - Building - - private func addAmbientSection() { - menu.addItem(sectionHeader(tr("Ambient Sound Control"))) - let modes: [(SHCAmbientMode, String)] = [ - (.noiseCanceling, tr("Noise Canceling")), (.ambientSound, tr("Ambient Sound")), (.off, tr("Off")), - ] - for (mode, title) in modes { - let item = ActionMenuItem(title) { [weak model] in model?.setMode(mode) } - item.image = NSImage(systemSymbolName: StatusIcon.symbolName(for: mode), accessibilityDescription: nil) - modeItems.append((mode, item)) - menu.addItem(item) - if mode == .ambientSound { - ambientRows = [ - hostingMenuItem { AmbientLevelRow(model: model) }, - hostingMenuItem { - ToggleRow(model: model, title: tr("Focus on Voice"), indent: MenuMetrics.indent, - isOn: { $0.focusOnVoice }, set: { $0.setFocusOnVoice($1) }) - }, - ] - ambientRows.forEach { menu.addItem($0) } - } - } - } - - private func addSoundSection() { - let equalizerMenu = NSMenu() - equalizerMenu.autoenablesItems = false - for (code, title) in Self.presets { - let item = ActionMenuItem(title) { [weak model] in model?.setEqualizerPreset(code) } - presetItems.append((code, item)) - equalizerMenu.addItem(item) - } - equalizerMenu.addItem(.separator()) - equalizerMenu.addItem(hostingMenuItem(width: MenuMetrics.equalizerWidth) { EqualizerRow(model: model) }) - equalizerNoteItem.title = tr("Manual equalizer coming soon for this model") - equalizerNoteItem.isEnabled = false - equalizerMenu.addItem(equalizerNoteItem) - equalizerResetItem = ActionMenuItem(tr("Reset")) { [weak model] in model?.resetEqualizer() } - equalizerMenu.addItem(equalizerResetItem) - equalizerItem.submenu = equalizerMenu - menu.addItem(equalizerItem) - - dseeItem = hostingMenuItem { - ToggleRow(model: model, title: tr("DSEE"), isOn: { $0.dsee }, set: { $0.setDsee($1) }) - } - speakToChatItem = hostingMenuItem { - ToggleRow(model: model, title: tr("Speak-to-Chat"), isOn: { $0.speakToChat }, set: { $0.setSpeakToChat($1) }) - } - adaptiveVolumeItem = hostingMenuItem { - ToggleRow(model: model, title: tr("Adaptive Volume"), isOn: { $0.adaptiveVolume }, set: { $0.setAdaptiveVolume($1) }) - } - for item in [dseeItem, speakToChatItem, adaptiveVolumeItem] { menu.addItem(item) } - - let autoPowerOffMenu = NSMenu() - autoPowerOffMenu.autoenablesItems = false - for (index, title) in Self.autoPowerOffOptions.enumerated() { - let item = ActionMenuItem(title) { [weak model] in model?.setAutoPowerOff(index) } - autoPowerOffItems.append(item) - autoPowerOffMenu.addItem(item) - } - autoPowerOffItem.submenu = autoPowerOffMenu - menu.addItem(autoPowerOffItem) - } - - private func addAppSection() { - aboutItem.title = tr("About the Headphones") - aboutMenu.autoenablesItems = false - aboutItem.submenu = aboutMenu - menu.addItem(aboutItem) - connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } - menu.addItem(connectItem) - menu.addItem(.separator()) - menu.addItem(ActionMenuItem(tr("Quit SonyBridge"), key: "q") { NSApp.terminate(nil) }) - } - - // MARK: - Updating - - private func update() { - let connected = model.connected - - errorItem.isHidden = model.errorMessage == nil - errorItem.title = "⚠︎ " + (model.errorMessage ?? "") - - for (mode, item) in modeItems { - item.state = connected && model.mode == mode ? .on : .off - item.isEnabled = connected - } - ambientRows.forEach { $0.isHidden = model.mode != .ambientSound } - - equalizerItem.isHidden = !model.supportsEqualizer - equalizerItem.isEnabled = connected - equalizerItem.attributedTitle = titleWithValue(tr("Equalizer"), Self.presetName(model.eqPreset)) - for (code, item) in presetItems { - item.state = model.eqPreset == code ? .on : .off - item.isEnabled = connected && model.equalizerWritable - } - equalizerNoteItem.isHidden = model.equalizerWritable || model.eqBands.isEmpty - equalizerResetItem.isEnabled = connected && model.equalizerWritable && model.eqPreset == 0xA0 - - dseeItem.isHidden = !model.supportsEqualizer - speakToChatItem.isHidden = !model.hasSpeakToChat - adaptiveVolumeItem.isHidden = !model.hasAdaptiveVolume - - let options = Self.autoPowerOffOptions - autoPowerOffItem.isHidden = !model.hasAutoPowerOff - autoPowerOffItem.isEnabled = connected - autoPowerOffItem.attributedTitle = titleWithValue( - tr("Auto Power-Off"), options.indices.contains(model.autoPowerOff) ? options[model.autoPowerOff] : "") - for (index, item) in autoPowerOffItems.enumerated() { - item.state = index == model.autoPowerOff ? .on : .off - } - - updateAbout() - aboutItem.isEnabled = connected - - switch model.connectionState { - case .connected: connectItem.title = tr("Disconnect") - case .connecting: connectItem.title = tr("Connecting…") - case .disconnected: connectItem.title = tr("Connect…") - } - connectItem.isEnabled = model.connectionState != .connecting - } - - private func updateAbout() { - aboutMenu.removeAllItems() - let rows: [(String, String)] = [ - (tr("Firmware"), model.firmware), (tr("Codec"), model.codec), - (tr("Protocol"), model.protocolVersion), (tr("Bluetooth"), model.deviceMac), - ] - for (title, value) in rows where !value.isEmpty { - let item = NSMenuItem() - item.attributedTitle = titleWithValue(title, value) - item.isEnabled = false - aboutMenu.addItem(item) - } - } - - private static func presetName(_ code: Int) -> String { - presets.first { $0.0 == code }?.1 ?? tr("Custom") - } - - private func toggleConnection() { - if model.connected { - model.disconnect() - } else { - NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window - model.connect() - } - } -} -``` - -- [ ] **Step 5 : Ajouter les clés à `Client/macos/fr.lproj/Localizable.strings`** (section « Menu ») - -``` -"Equalizer" = "Égaliseur"; -"Bright" = "Brillant"; -"Excited" = "Dynamique"; -"Mellow" = "Doux"; -"Relaxed" = "Détendu"; -"Vocal" = "Voix"; -"Treble" = "Aigus"; -"Bass" = "Graves"; -"Speech" = "Parole"; -"Manual" = "Manuel"; -"Custom" = "Personnalisé"; -"Manual equalizer coming soon for this model" = "Égaliseur manuel bientôt disponible pour ce modèle"; -"Reset" = "Réinitialiser"; -"DSEE" = "DSEE"; -"Speak-to-Chat" = "Speak-to-Chat"; -"Adaptive Volume" = "Volume adaptatif"; -"Auto Power-Off" = "Arrêt automatique"; -"5 min" = "5 min"; -"30 min" = "30 min"; -"1 hour" = "1 heure"; -"3 hours" = "3 heures"; -"When taken off" = "Quand le casque est retiré"; -"About the Headphones" = "À propos du casque"; -"Firmware" = "Firmware"; -"Codec" = "Codec"; -"Protocol" = "Protocole"; -"Bluetooth" = "Bluetooth"; -``` - -- [ ] **Step 6 : Tests et build** - -Run : `make test && make` -Attendu : tout passe, `Localization: 46 keys, all translated`, puis `OK -> …`. - -- [ ] **Step 7 : Vérifier avec l'utilisateur** (casque connecté, `make run`) - -Parcourir le menu avec lui, dans l'ordre de la spec §4 : -1. L'icône de la barre change avec le mode (réduction de bruit / son ambiant / désactivé) et se grise une - fois déconnecté. **Lui montrer les 3 glyphes** et demander s'ils lui conviennent (sinon, changer les noms de - symboles dans `StatusIcon.symbolName`). -2. Le curseur et « Focalisation sur la voix » n'apparaissent qu'en « Son ambiant ». -3. « Égaliseur » affiche « Personnalisé » à droite (preset `0x30` du XM6). Le sous-menu montre les presets - grisés, 10 curseurs grisés, et « Égaliseur manuel bientôt disponible pour ce modèle ». -4. DSEE et Speak-to-Chat sont présents ; Volume adaptatif est absent (le XM6 ne le gère pas). -5. « Arrêt automatique » affiche l'option en cours à droite ; changer d'option déplace la coche. -6. « À propos du casque » : Firmware 3.1.5, Codec AAC, Protocole v2, adresse Bluetooth. -7. Déconnecter : les réglages restent affichés mais grisés, et l'en-tête dit « Non connecté ». -8. Les valeurs à droite sont bien alignées et le menu n'est pas trop large (sinon, ajuster - `MenuMetrics.width` et le `width` de `titleWithValue`). - -- [ ] **Step 8 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "feat(macos): full headphones menu with per-mode status icon" -``` - ---- - -### Task 7: Options — connexion auto, reconnexion auto, lancement à l'ouverture de session - -**Files:** -- Create : `Client/macos/AppSettings.swift`, `Client/macos/DeviceWatcher.swift` -- Modify : `Client/macos/MacOSBluetoothConnector.h/.mm` (coupure de liaison sûre), - `Client/macos/HeadphonesBridge.h/.mm` (connexion par adresse, aides de classe), - `Client/macos/HeadphonesModel.swift`, `Client/macos/HeadphonesMenu.swift`, - `Client/macos/StatusItemController.swift`, `Client/macos/AppDelegate.swift`, - `Client/macos/fr.lproj/Localizable.strings` - -**Interfaces:** -- Consumes : `ReconnectPolicy` (tâche 2), `HeadphonesModel.handleConnectResult(ok:error:userInitiated:)` et - `linkLost()` (tâche 4), `HeadphonesMenu.addAppSection()` (tâche 6). -- Produces : - - `final class AppSettings: ObservableObject { var autoConnect: Bool; var autoReconnect: Bool; private(set) var launchAtLogin: Bool; var lastDeviceAddress: String?; func setLaunchAtLogin(_ enabled: Bool) -> String? }` - - `final class DeviceWatcher { var onConnect: ((String, String) -> Void)?; var onDisconnect: ((String) -> Void)?; func start() }` (adresse, nom) - - `HeadphonesBridge` (Swift) : `looksLikeSonyHeadset(_:)`, `connectedSonyHeadsetAddress()`, - `isDeviceConnectedToMac(_:)`, `connect(toAddress:completion:)` - - `HeadphonesModel` : `var settings: AppSettings?`, `autoConnectOnLaunch()`, `autoConnect(toAddress:)`, - `headsetConnectedToMac(address:name:)`, `headsetDisconnectedFromMac(address:)`, `cancelReconnect()` - - `StatusItemController(model:settings:)`, `HeadphonesMenu(model:settings:)` - -- [ ] **Step 1 : Rendre la coupure de liaison sûre dans `MacOSBluetoothConnector`** - -Aujourd'hui, quand le casque ferme le canal, `rfcommChannelClosed` appelle `disconnect()` **sur le fil du -connecteur lui-même**, et `disconnect()` fait `uthread.join()` : un fil qui s'attend lui-même lève une -exception dans une fonction `noexcept`, donc l'app plante. Une reconnexion ferait aussi `uthread = std::thread(…)` -sur un fil encore « joignable », ce qui plante aussi. À corriger avant toute reconnexion automatique. - -`Client/macos/MacOSBluetoothConnector.h` : -- ajouter, sous `virtual void closeConnection();` : - -```cpp - // Called from the channel-closed callback, on the connector thread: stops that thread's loop without joining it. - void markClosed() noexcept; -``` - -- initialiser les pointeurs privés : `void *rfcommDevice = nullptr;` et `void *rfcommchannel = nullptr;`. - -`Client/macos/MacOSBluetoothConnector.mm` : -- dans `rfcommChannelClosed:`, remplacer `delegateCPP->disconnect();` par `delegateCPP->markClosed();` -- remplacer le destructeur, `disconnect()` et le début de `connect()` : - -```objc -MacOSBluetoothConnector::~MacOSBluetoothConnector() -{ - disconnect(); -} - -void MacOSBluetoothConnector::markClosed() noexcept -{ - running = false; - disconnectionConditionVariable.notify_all(); -} - -void MacOSBluetoothConnector::disconnect() noexcept -{ - closeConnection(); - markClosed(); - // Never join from the connector thread itself (the channel-closed callback runs there). - if (uthread.joinable() && uthread.get_id() != std::this_thread::get_id()) { - uthread.join(); - } -} -``` - -et, en première ligne de `MacOSBluetoothConnector::connect(const std::string& addrStr)` : - -```objc - // A previous link's thread has stopped (markClosed) but may not have been joined yet. - if (uthread.joinable()) uthread.join(); -``` - -- dans `closeConnection()`, ajouter en première ligne `if (!rfcommchannel) return;`. - -- [ ] **Step 2 : Connexion par adresse dans le pont** - -`Client/macos/HeadphonesBridge.h`, sous `scanAndConnectWithCompletion:` : - -```objc -// Name heuristic for Sony headsets (WH-/WF-/WI-/MDR-/XB/LinkBuds). -+ (BOOL)looksLikeSonyHeadset:(NSString *)name NS_SWIFT_NAME(looksLikeSonyHeadset(_:)); -// Address of the first Sony headset currently connected to macOS, or nil. -+ (nullable NSString *)connectedSonyHeadsetAddress NS_SWIFT_NAME(connectedSonyHeadsetAddress()); -// YES if the device with this address is connected to macOS (its audio link is up). -+ (BOOL)isDeviceConnectedToMac:(NSString *)address NS_SWIFT_NAME(isDeviceConnectedToMac(_:)); -// Opens the control channel to a specific device, without the picker. Completion on the main thread. -- (void)connectToAddress:(NSString *)address - completion:(void (^)(BOOL ok, NSString * _Nullable error))completion NS_SWIFT_NAME(connect(toAddress:completion:)); -``` - -`Client/macos/HeadphonesBridge.mm` : dans `scanAndConnectWithCompletion:`, remplacer tout le code qui suit le -test `if (!device) { … return; }` (le `try { _bt->connect(…) }`, la boucle d'attente, et la création de `_hp` -jusqu'à `completion(YES, nil);`) par `[self connectDevice:device completion:completion];`, puis ajouter après -la méthode : - -```objc -- (void)connectDevice:(IOBluetoothDevice *)device completion:(void (^)(BOOL, NSString * _Nullable))completion { - try { - _bt->connect([[device addressString] UTF8String]); - } catch (RecoverableException &exc) { - completion(NO, @(exc.what())); - return; - } - - // A real RFCOMM open (SDP + link setup, sometimes with encryption renegotiation) can take a few - // seconds; pump the run loop until it lands or we give up. - int timeout = 80; - while (!_bt->isConnected() && timeout >= 0) { - [[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - timeout--; - } - - if (!_bt->isConnected()) { - _bt->disconnect(); - completion(NO, NSLocalizedString(@"Connection timed out.", nil)); - return; - } - - _deviceName = [device nameOrAddress]; - _deviceMac = [device addressString]; - _hp = std::make_unique(*_bt); - completion(YES, nil); -} - -+ (BOOL)looksLikeSonyHeadset:(NSString *)name { - return SHCLooksLikeSonyHeadset(name); -} - -+ (nullable NSString *)connectedSonyHeadsetAddress { - for (IOBluetoothDevice *paired in [IOBluetoothDevice pairedDevices]) { - if ([paired isConnected] && SHCLooksLikeSonyHeadset([paired name])) return [paired addressString]; - } - return nil; -} - -+ (BOOL)isDeviceConnectedToMac:(NSString *)address { - IOBluetoothDevice *device = [IOBluetoothDevice deviceWithAddressString:address]; - return device != nil && [device isConnected]; -} - -- (void)connectToAddress:(NSString *)address completion:(void (^)(BOOL, NSString * _Nullable))completion { - IOBluetoothDevice *device = [IOBluetoothDevice deviceWithAddressString:address]; - if (!device) { - completion(NO, NSLocalizedString(@"Not connected.", nil)); - return; - } - [self connectDevice:device completion:completion]; -} -``` - -- [ ] **Step 3 : Écrire `Client/macos/AppSettings.swift`** - -```swift -import Foundation -import ServiceManagement - -// The three user options, persisted in UserDefaults. Launch at login is backed by SMAppService (macOS 13+). -final class AppSettings: ObservableObject { - private enum Keys { - static let autoConnect = "autoConnect" - static let autoReconnect = "autoReconnect" - static let lastDeviceAddress = "lastDeviceAddress" - } - - private let defaults: UserDefaults - - @Published var autoConnect: Bool { - didSet { defaults.set(autoConnect, forKey: Keys.autoConnect) } - } - @Published var autoReconnect: Bool { - didSet { defaults.set(autoReconnect, forKey: Keys.autoReconnect) } - } - @Published private(set) var launchAtLogin: Bool - - var lastDeviceAddress: String? { - get { defaults.string(forKey: Keys.lastDeviceAddress) } - set { defaults.set(newValue, forKey: Keys.lastDeviceAddress) } - } - - init(defaults: UserDefaults = .standard) { - self.defaults = defaults - // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. - defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true]) - autoConnect = defaults.bool(forKey: Keys.autoConnect) - autoReconnect = defaults.bool(forKey: Keys.autoReconnect) - launchAtLogin = SMAppService.mainApp.status == .enabled - } - - // Returns an error message if macOS refused the change. - func setLaunchAtLogin(_ enabled: Bool) -> String? { - defer { launchAtLogin = SMAppService.mainApp.status == .enabled } - do { - if enabled { - try SMAppService.mainApp.register() - if SMAppService.mainApp.status == .requiresApproval { - SMAppService.openSystemSettingsLoginItems() - } - } else { - try SMAppService.mainApp.unregister() - } - return nil - } catch { - return error.localizedDescription - } - } -} -``` - -- [ ] **Step 4 : Écrire `Client/macos/DeviceWatcher.swift`** - -```swift -import Foundation -import IOBluetooth - -// Reports Bluetooth devices connecting to / disconnecting from macOS, as (address, name). -final class DeviceWatcher: NSObject { - var onConnect: ((_ address: String, _ name: String) -> Void)? - var onDisconnect: ((_ address: String) -> Void)? - - private var connectNotification: IOBluetoothUserNotification? - private var disconnectNotifications: [String: IOBluetoothUserNotification] = [:] - - func start() { - connectNotification = IOBluetoothDevice.register(forConnectNotifications: self, - selector: #selector(deviceConnected(_:device:))) - for case let device as IOBluetoothDevice in IOBluetoothDevice.pairedDevices() ?? [] where device.isConnected() { - if let address = device.addressString { watchDisconnect(device, address: address) } - } - } - - @objc private func deviceConnected(_ notification: IOBluetoothUserNotification, device: IOBluetoothDevice) { - guard let address = device.addressString else { return } - watchDisconnect(device, address: address) - onConnect?(address, device.name ?? "") - } - - @objc private func deviceDisconnected(_ notification: IOBluetoothUserNotification, device: IOBluetoothDevice) { - notification.unregister() - guard let address = device.addressString else { return } - disconnectNotifications[address] = nil - onDisconnect?(address) - } - - private func watchDisconnect(_ device: IOBluetoothDevice, address: String) { - guard disconnectNotifications[address] == nil else { return } - disconnectNotifications[address] = device.register(forDisconnectNotification: self, - selector: #selector(deviceDisconnected(_:device:))) - } -} -``` - -- [ ] **Step 5 : Connexion et reconnexion automatiques dans `Client/macos/HeadphonesModel.swift`** - -Ajouter sous `private var eqThrottle = SendThrottle()` : - -```swift - // Set by AppDelegate; nil means "no automatic behaviour". - var settings: AppSettings? - private var reconnectPolicy = ReconnectPolicy() - private var reconnectTimer: Timer? - private var reconnectAddress: String? - private var userDisconnected = false // after "Déconnecter": no auto-reconnect until the headset reconnects to macOS -``` - -Dans `connect()`, ajouter en première ligne : - -```swift - userDisconnected = false - cancelReconnect() -``` - -Remplacer `disconnect()`, `handleConnectResult(ok:error:userInitiated:)` et `linkLost()` par : - -```swift - func disconnect() { - userDisconnected = true - cancelReconnect() - stopTimers() - bridge.disconnect() - connectionState = .disconnected - } - - func handleConnectResult(ok: Bool, error: String?, userInitiated: Bool) { - guard ok else { - connectionState = .disconnected - if userInitiated, let error = error { errorMessage = error } - if !userInitiated && reconnectAddress != nil { scheduleReconnect() } - return - } - cancelReconnect() - connectionState = .connected - syncFromBridge() - settings?.lastDeviceAddress = deviceMac - bridge.refreshStatus { [weak self] in self?.syncFromBridge() } // called after reads, then after probes - startTimers() - } - - // The control link dropped on its own (idle power-save): retry while the headset is still connected to macOS. - func linkLost() { - stopTimers() - bridge.disconnect() // resets sequence numbers and buffers for the next connection - connectionState = .disconnected - guard settings?.autoReconnect == true, !userDisconnected, !deviceMac.isEmpty else { return } - reconnectAddress = deviceMac - scheduleReconnect() - } - - // MARK: - Automatic connection - - // Not user-initiated: failures stay silent (normal while the headset sleeps). - func autoConnect(toAddress address: String) { - guard connectionState == .disconnected else { return } - connectionState = .connecting - bridge.connect(toAddress: address) { ok, error in - self.handleConnectResult(ok: ok, error: error, userInitiated: false) - } - } - - // At launch: the last headset if macOS has it connected, else any connected Sony headset. - func autoConnectOnLaunch() { - let remembered = settings?.lastDeviceAddress.flatMap { HeadphonesBridge.isDeviceConnectedToMac($0) ? $0 : nil } - if let address = remembered ?? HeadphonesBridge.connectedSonyHeadsetAddress() { - autoConnect(toAddress: address) - } - } - - // DeviceWatcher: a device just connected to macOS. - func headsetConnectedToMac(address: String, name: String) { - guard settings?.autoConnect == true, HeadphonesBridge.looksLikeSonyHeadset(name), - connectionState == .disconnected else { return } - userDisconnected = false - cancelReconnect() - // Give the audio link ~2 s to settle before opening the control channel. - DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in self?.autoConnect(toAddress: address) } - } - - // DeviceWatcher: a device left macOS; stop retrying it (headsetConnectedToMac takes over when it's back). - func headsetDisconnectedFromMac(address: String) { - if address == reconnectAddress { cancelReconnect() } - } - - func cancelReconnect() { - reconnectTimer?.invalidate() - reconnectTimer = nil - reconnectAddress = nil - reconnectPolicy.reset() - } - - private func scheduleReconnect() { - guard let address = reconnectAddress else { return } - reconnectTimer?.invalidate() - let timer = Timer(timeInterval: reconnectPolicy.nextDelay(), repeats: false) { [weak self] _ in - guard let self = self else { return } - guard HeadphonesBridge.isDeviceConnectedToMac(address) else { self.cancelReconnect(); return } - self.autoConnect(toAddress: address) - } - RunLoop.main.add(timer, forMode: .common) - reconnectTimer = timer - } -``` - -- [ ] **Step 6 : Sous-menu « Options de SonyBridge » dans `Client/macos/HeadphonesMenu.swift`** - -- Remplacer `init(model: HeadphonesModel) {` / `self.model = model` par : - -```swift - init(model: HeadphonesModel, settings: AppSettings) { - self.model = model - self.settings = settings -``` - -- Ajouter les propriétés, sous `private let model: HeadphonesModel` : - -```swift - private let settings: AppSettings - private var launchAtLoginItem = NSMenuItem() - private var autoConnectItem = NSMenuItem() - private var autoReconnectItem = NSMenuItem() -``` - -- Dans `init`, après l'abonnement à `model.objectWillChange`, ajouter : - -```swift - settings.objectWillChange - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.update() } - .store(in: &cancellables) -``` - -- Dans `addAppSection()`, juste avant `connectItem = ActionMenuItem(…)`, ajouter : - -```swift - let optionsMenu = NSMenu() - optionsMenu.autoenablesItems = false - launchAtLoginItem = ActionMenuItem(tr("Launch at Login")) { [weak self] in self?.toggleLaunchAtLogin() } - autoConnectItem = ActionMenuItem(tr("Connect Automatically")) { [weak settings] in settings?.autoConnect.toggle() } - autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } - for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem] { optionsMenu.addItem(item) } - let optionsItem = NSMenuItem(title: tr("SonyBridge Options"), action: nil, keyEquivalent: "") - optionsItem.submenu = optionsMenu - menu.addItem(optionsItem) -``` - -- À la fin de `update()`, ajouter : - -```swift - launchAtLoginItem.state = settings.launchAtLogin ? .on : .off - autoConnectItem.state = settings.autoConnect ? .on : .off - autoReconnectItem.state = settings.autoReconnect ? .on : .off -``` - -- Ajouter la méthode : - -```swift - private func toggleLaunchAtLogin() { - if let error = settings.setLaunchAtLogin(!settings.launchAtLogin) { model.showError(error) } - } -``` - -- [ ] **Step 7 : Assembler dans `StatusItemController` et `AppDelegate`** - -`Client/macos/StatusItemController.swift` : remplacer `init(model: HeadphonesModel) {` par -`init(model: HeadphonesModel, settings: AppSettings) {` et `HeadphonesMenu(model: model)` par -`HeadphonesMenu(model: model, settings: settings)`. - -Réécrire `Client/macos/AppDelegate.swift` : - -```swift -import AppKit - -final class AppDelegate: NSObject, NSApplicationDelegate { - private let model = HeadphonesModel() - private let settings = AppSettings() - private let deviceWatcher = DeviceWatcher() - private var statusItemController: StatusItemController? - - func applicationDidFinishLaunching(_ notification: Notification) { - model.settings = settings - statusItemController = StatusItemController(model: model, settings: settings) - - deviceWatcher.onConnect = { [weak self] address, name in - self?.model.headsetConnectedToMac(address: address, name: name) - } - deviceWatcher.onDisconnect = { [weak self] address in - self?.model.headsetDisconnectedFromMac(address: address) - } - deviceWatcher.start() - - if settings.autoConnect { model.autoConnectOnLaunch() } - } - - func applicationWillTerminate(_ notification: Notification) { - model.disconnect() - } -} -``` - -- [ ] **Step 8 : Ajouter les clés à `Client/macos/fr.lproj/Localizable.strings`** - -``` -"SonyBridge Options" = "Options de SonyBridge"; -"Launch at Login" = "Lancer à l’ouverture de session"; -"Connect Automatically" = "Connexion automatique"; -"Reconnect Automatically" = "Reconnexion automatique"; -``` - -- [ ] **Step 9 : Tests et build** - -Run : `make test && make` -Attendu : tout passe, `Localization: 50 keys, all translated`, puis `OK -> …`. - -- [ ] **Step 10 : Vérifier avec l'utilisateur** (`make run DEBUG=1`) - -1. **Connexion au lancement** : XM6 connecté à macOS, quitter puis relancer l'app → elle se connecte seule, sans - clic (en-tête « Connecté · AAC »). -2. **Connexion auto** : éteindre le casque, puis le rallumer → environ 2 s après la connexion audio, l'app se - connecte seule. -3. **Déconnexion manuelle** : « Déconnecter » → pas de reconnexion ; éteindre puis rallumer le casque → l'app - se reconnecte. -4. **Reconnexion auto** : laisser le casque connecté sans audio jusqu'à ce que le canal de contrôle se coupe - (plusieurs minutes) → l'app **ne plante pas** et se reconnecte ; vérifier les essais avec - `grep -c '\[connect\] openRFCOMMChannelAsync' build/app.log`. -5. **Options** : décocher « Connexion automatique », quitter, relancer → l'option reste décochée et l'app ne - se connecte pas seule. -6. **Lancement à l'ouverture de session** : `cp -R build/SonyBridge.app /Applications/`, lancer la copie de - `/Applications`, cocher l'option → elle apparaît dans Réglages Système › Général › Ouverture ; fermer la - session puis la rouvrir → l'icône revient seule. Si macOS demande une approbation, les Réglages s'ouvrent - sur la bonne page. - -- [ ] **Step 11 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "feat(macos): auto-connect, auto-reconnect and launch at login (menu options)" -``` - ---- - -### Task 8: Expérimentations XM6 + écriture de l'égaliseur (spec §7) - -Tâche **avec l'utilisateur et le casque**. On confirme d'abord chaque format sur le matériel, puis on active -l'écriture de l'égaliseur. Un menu « Debug » (compilé seulement avec `make run DEBUG=1`) permet d'envoyer une -trame brute ; les réponses du casque arrivent dans `build/app.log`. Ce menu n'est qu'un outil de diagnostic, -en anglais : ses textes ne sont pas traduits. - -**Files:** -- Modify : `Client/macos/HeadphonesBridge.h/.mm` (`sendRawPayload:completion:`, `equalizerWritable`) -- Modify : `Client/macos/HeadphonesModel.swift` (`sendRaw(hex:)`), `Client/macos/HeadphonesMenu.swift` (menu Debug) -- Modify : `Client/ProtocolParsers.h/.cpp` (`buildCustomEqualizer`), `Client/Headphones.cpp` - (`setEqualizerCustom`), `Client/tests/ProtocolParsersTests.cpp` -- Create : `docs/xm6-protocol-notes.md` (résultats des expériences) - -**Interfaces:** -- Produces : `Buffer ProtocolParsers::buildCustomEqualizer(unsigned char manualPreset, bool hasClearBass, int clearBass, const std::vector& bands)` ; - `HeadphonesBridge.sendRawPayload(_:completion:)` ; `HeadphonesModel.sendRaw(hex:)` (seulement avec `DEBUG_PROTOCOL`). - -- [ ] **Step 1 : Envoi brut dans le pont** - -`Client/macos/HeadphonesBridge.h` : - -```objc -// Diagnostics: sends a raw payload (e.g. 56 00) and waits for the ACK; replies are hex-dumped to the log when -// built with DEBUG_PROTOCOL. Only reachable from the Debug menu of `make run DEBUG=1` builds. -- (void)sendRawPayload:(NSData *)payload completion:(void (^)(BOOL ok, NSString * _Nullable error))completion; -``` - -`Client/macos/HeadphonesBridge.mm` : - -```objc -- (void)sendRawPayload:(NSData *)payload completion:(void (^)(BOOL, NSString * _Nullable))completion { - if (!_hp || !self.connected) { completion(NO, NSLocalizedString(@"Not connected.", nil)); return; } - std::vector bytes((const char *)payload.bytes, (const char *)payload.bytes + payload.length); - BluetoothWrapper *bt = _bt.get(); - dispatch_async(_cmdQueue, ^{ - NSString *error = nil; BOOL ok = YES; - try { bt->sendCommand(bytes); } catch (std::exception &exc) { ok = NO; error = @(exc.what()); } - dispatch_async(dispatch_get_main_queue(), ^{ completion(ok, error); }); - }); -} -``` - -- [ ] **Step 2 : Menu Debug** - -`Client/macos/HeadphonesModel.swift`, dans la section « Actions » : - -```swift - #if DEBUG_PROTOCOL - // Debug menu only: sends raw bytes like "56 00"; the replies are logged to build/app.log. - func sendRaw(hex: String) { - let bytes = hex.split(whereSeparator: { $0 == " " || $0 == "," }).compactMap { UInt8($0, radix: 16) } - guard !bytes.isEmpty else { return } - bridge.sendRawPayload(Data(bytes)) { [weak self] ok, error in self?.finish(ok, error) } - } - #endif -``` - -`Client/macos/HeadphonesMenu.swift` : dans `addAppSection()`, juste avant `menu.addItem(.separator())` qui -précède « Quitter », ajouter : - -```swift - #if DEBUG_PROTOCOL - menu.addItem(ActionMenuItem("Debug: send frame…") { [weak self] in self?.promptRawFrame() }) - #endif -``` - -et la méthode : - -```swift - #if DEBUG_PROTOCOL - // Diagnostics only (not localized): asks for a hex payload and sends it as-is. - private func promptRawFrame() { - let alert = NSAlert() - alert.messageText = "Send raw payload (hex)" - let field = NSTextField(frame: NSRect(x: 0, y: 0, width: 260, height: 24)) - field.placeholderString = "56 00" - alert.accessoryView = field - alert.addButton(withTitle: "Send") - alert.addButton(withTitle: "Cancel") - NSApp.activate(ignoringOtherApps: true) - if alert.runModal() == .alertFirstButtonReturn { model.sendRaw(hex: field.stringValue) } - } - #endif -``` - -Run : `make test && make run DEBUG=1` → le menu montre « Debug: send frame… ». Envoyer `56 00` → dans -`build/app.log`, une ligne `[recv] 3e 0c … 57 00 …`. - -- [ ] **Step 3 : Expérience E1, les 2 octets de plus du canal `0x19`** - -L'utilisateur passe par les trois modes **avec le bouton du casque**, en attendant 3 s entre chaque, puis : -`grep -E '\[recv\].* 6[79] 19' build/app.log | tail -6`. -Noter dans `docs/xm6-protocol-notes.md` la valeur des octets 8 et 9 pour chaque mode. Aucun changement de code -n'est prévu : ces octets ne servent qu'à documenter (par exemple une option de l'optimiseur NC, hors -périmètre). - -- [ ] **Step 4 : Expérience E2, lecture de l'égaliseur** - -L'utilisateur règle l'égaliseur dans l'app Sony (Sound Connect) sur son téléphone, puis envoie `56 00` depuis -« Debug: send frame… », pour chacun de ces réglages : « Désactivé », « Bass Boost » (Graves), « Bright » -(Brillant), puis « Manuel » avec **31 Hz au maximum, 16 kHz au minimum, le reste à 0**. -Pour chaque réglage : `grep '\[recv\].* 57 00' build/app.log | tail -1`. Noter l'identifiant de preset (octet 3) -et les 10 valeurs. Conclure : -- le décalage : avec 31 Hz au max, la 1ʳᵉ valeur doit valoir `0x14` (20) si la plage est −10…+10 (décalage 10), - ou `0x0c` (12) si elle est −6…+6 (décalage 6) ; -- les identifiants de presets du XM6 (comparer avec `0x00, 0x10…0x17, 0xa0`). -Si l'app Sony ne peut pas se connecter pendant que le Mac est connecté, fermer SonyBridge pendant chaque -réglage, puis relancer l'app et relire. - -- [ ] **Step 5 : Expérience E3, écriture d'un preset** - -Avec l'identifiant de « Bass Boost » trouvé en E2 (noté ``) : envoyer `58 00 00`. L'utilisateur doit -**entendre** plus de basses. Relire avec `56 00` : l'octet 3 de la réponse doit valoir ``. Remettre ensuite -le preset d'origine de la même façon. - -- [ ] **Step 6 : Expérience E4, écriture de l'égaliseur manuel 10 bandes** - -Volume modéré. Envoyer `58 00 a0 0a 0d 0a 0a 0a 0a 0a 0a 0a 0a 0a` (31 Hz à +3 si le décalage est 10, le reste -à 0 ; adapter les valeurs si E2 a trouvé un autre décalage). Relire avec `56 00`. Attendu : -`57 00 a0 0a 0d 0a 0a 0a 0a 0a 0a 0a 0a 0a`. Si l'octet 3 de la réponse n'est pas `a0` (par exemple `a1` pour -un « Personnalisé 1 »), noter cet identifiant : c'est le preset « Manuel » du XM6. - -- [ ] **Step 7 : Expérience E5, les autres écritures** - -Depuis le menu : basculer DSEE, changer « Arrêt automatique », basculer Speak-to-Chat. Après chaque -changement, relire avec respectivement `e6 01`, `26 05`, `f6 0c` : la réponse (`e7 01 …`, `27 05 …`, -`f7 0c …`) doit refléter la nouvelle valeur. - -- [ ] **Step 8 : Point de décision (avec l'utilisateur)** - -Écrire les résultats E1 à E5 dans `docs/xm6-protocol-notes.md` (un tableau : trame envoyée, trame reçue, -conclusion). **Si E3 ou E4 contredisent les hypothèses** (aucun effet audible, ou une relecture différente de -ce qui a été envoyé) : **arrêter**, présenter les trames à l'utilisateur et replanifier l'écriture de -l'égaliseur. Les étapes 9 à 13 supposent que E2 à E4 ont confirmé les formats. - -- [ ] **Step 9 : Test du constructeur de trame** — ajouter à `Client/tests/ProtocolParsersTests.cpp`, avant -le bloc `// --- Framing ---` : - -```cpp - // --- Custom equalizer write --- - // 5 bands + Clear Bass (verified WH-CH720N format): 58 00 a0 06 - CHECK(buildCustomEqualizer(0xa0, true, 3, { -2, -1, 0, 1, 2 }) == bytes({ 0x58, 0x00, 0xa0, 0x06, 13, 8, 9, 10, 11, 12 })); - // 10 bands (WH-1000XM6, confirmed by experiment E4): 58 00 a0 0a - CHECK(buildCustomEqualizer(0xa0, false, 0, { 3, 0, 0, 0, 0, 0, 0, 0, 0, -10 }) - == bytes({ 0x58, 0x00, 0xa0, 0x0a, 13, 10, 10, 10, 10, 10, 10, 10, 10, 0 })); - // Values are clamped to -10..10. - CHECK(buildCustomEqualizer(0xa0, false, 0, { 15, -15 }) == bytes({ 0x58, 0x00, 0xa0, 0x02, 20, 0 })); -``` - -Si E2 a trouvé un décalage différent de 10, ou E4 un autre identifiant « Manuel », adapter les octets attendus -de la 2ᵉ assertion aux trames réellement confirmées. -Run : `make test` → échec : `use of undeclared identifier 'buildCustomEqualizer'`. - -- [ ] **Step 10 : Écrire le constructeur** - -`Client/ProtocolParsers.h`, dans le namespace : - -```cpp - // "58 00 [] ", each value clamped to -10..10. - Buffer buildCustomEqualizer(unsigned char manualPreset, bool hasClearBass, int clearBass, const std::vector& bands); -``` - -`Client/ProtocolParsers.cpp`, dans le namespace : - -```cpp - Buffer buildCustomEqualizer(unsigned char manualPreset, bool hasClearBass, int clearBass, const std::vector& bands) - { - auto encode = [](int v) { return (char)(unsigned char)(std::max(-10, std::min(10, v)) + 10); }; - Buffer cmd = { (char)V2Command::EQ_SET, 0x00, (char)manualPreset, 0x00 }; - if (hasClearBass) cmd.push_back(encode(clearBass)); - for (int band : bands) cmd.push_back(encode(band)); - cmd[3] = (char)(cmd.size() - 4); - return cmd; - } -``` - -Run : `make test` → `ProtocolParsersTests: all passed`. - -- [ ] **Step 11 : Utiliser le constructeur et ouvrir l'écriture** - -`Client/Headphones.cpp`, dans `Headphones::setEqualizerCustom`, remplacer la construction manuelle de `cmd` (le -lambda `clamp`, le `Buffer cmd = { … }` et la boucle `push_back`) et l'envoi par : - -```cpp - this->_conn.sendCommand(ProtocolParsers::buildCustomEqualizer( - static_cast(EQ_PRESET::MANUAL), this->_eqHasClearBass, clearBass, bands)); -``` - -(garder la mise à jour de `_eqPreset`, `_eqClearBass` et `_eqBands` qui suit). - -`Client/macos/HeadphonesBridge.mm`, remplacer l'implémentation de `equalizerWritable` et son commentaire par : - -```objc -// Both layouts have a verified write format: 5 bands + Clear Bass (WH-CH720N) and 10 bands (WH-1000XM6, -// docs/xm6-protocol-notes.md). Nothing is writable before the first equalizer read. -- (BOOL)equalizerWritable { return self.supportsEqualizer && _hp && _hp->getEqualizerBandCount() > 0; } -``` - -Si E2 a montré que le XM6 utilise d'autres identifiants de presets, remplacer les codes de -`HeadphonesMenu.presets` par ceux trouvés, et retirer du tableau les presets que le XM6 n'a pas (avec leur -traduction s'ils ne servent plus). - -- [ ] **Step 12 : Tests, build, vérification avec l'utilisateur** - -Run : `make test && make run DEBUG=1`. Demander à l'utilisateur : -1. Dans « Égaliseur », les presets ne sont plus grisés, et la mention « bientôt disponible » a disparu. -2. Choisir « Graves » : le son change, et la coche suit. -3. Choisir « Manuel », puis faire glisser un curseur : le son change pendant le glissement, et la valeur - reste après le relâchement. -4. Déconnecter puis reconnecter : l'égaliseur relu est celui qui a été réglé. - -- [ ] **Step 13 : Commit** (par l'utilisateur) - -```bash -git add -A && git commit -m "feat(xm6): equalizer writes (presets + 10-band manual) confirmed on hardware; debug frame sender" -``` - ---- - -### Task 9: README, vérification finale et CI - -**Files:** -- Modify : `README.md` - -- [ ] **Step 1 : Mettre le README à jour** - -- Ligne d'accroche (en gras, sous la bannière) : - `**An unofficial, open-source macOS menu bar app for Sony headphones — Noise Cancelling, Ambient Sound, EQ, DSEE and battery, without the phone.**` -- Section « ✨ Features » : - - remplacer la ligne « 🎛️ **Equalizer** … » par - `- 🎛️ **Equalizer** — presets *and* a **Manual mode** (10 bands on WH-1000XM6, 5 bands + Clear Bass on older models)` - - remplacer la ligne « 🖼️ **Device hero image** … » par - `- 📍 **Lives in the menu bar** — a native macOS menu; the icon shows the current mode` - - remplacer la ligne « 🔌 **Auto-connect** … » par - `- 🔌 **Auto-connect & auto-reconnect**, plus **Launch at Login** — each one can be turned off` - - remplacer la ligne « 🌑 **Modern UI** … » par `- 🌍 **English & French**` -- Section « 🎧 Supported headphones » : si la tâche 8 a confirmé les formats, déplacer `WH-1000XM6` de la ligne - « Expected » vers la ligne « Verified ». - -- [ ] **Step 2 : Chercher les restes de l'ancienne app** - -Run : -`grep -rnE 'xcodeproj|xcodebuild|ContentView|Main\.storyboard|HeadphonesUIFactory' --exclude-dir=.git --exclude-dir=build --exclude-dir=superpowers . || echo clean` -Attendu : `clean`. Sinon, corriger chaque occurrence. - -- [ ] **Step 3 : Build de release** - -Run : `make clean && make test && make release && lipo -archs build/SonyBridge.app/Contents/MacOS/SonyBridge` -Attendu : tout passe, `build/SonyBridge.zip` existe, et `lipo` affiche `x86_64 arm64`. - -- [ ] **Step 4 : Checklist manuelle complète avec l'utilisateur** (spec §9), sur la version de release : - -`open build/SonyBridge.app`, puis vérifier avec lui : -1. Chaque élément du menu (spec §4), casque connecté puis déconnecté. -2. Le bouton physique NC du casque, menu fermé puis menu ouvert. -3. La coupure pour inactivité, puis la reconnexion automatique ; « Déconnecter » n'entraîne pas de reconnexion. -4. Le lancement à l'ouverture de session (depuis `/Applications`). -5. La barre des menus en thème clair puis sombre : l'icône reste lisible. -6. Le Mac en anglais : `open build/SonyBridge.app --args -AppleLanguages '(en)'`, tout le menu en anglais. - -- [ ] **Step 5 : Commit, puis CI** (par l'utilisateur) - -```bash -git add -A && git commit -m "docs: README for the menu bar app" -``` - -L'utilisateur pousse sa branche et ouvre une PR vers `main` : le workflow « macOS » doit passer (`make test` -puis `make release`) et publier l'artefact `SonyBridge-macOS`. - diff --git a/docs/superpowers/plans/2026-09-11-notch.md b/docs/superpowers/plans/2026-09-11-notch.md deleted file mode 100644 index c87750e9..00000000 --- a/docs/superpowers/plans/2026-09-11-notch.md +++ /dev/null @@ -1,1985 +0,0 @@ -# SonyBridge dans l'encoche (étape 1) — plan d'implémentation - -> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. - -**Goal :** ajouter une encoche interactive en haut de l'écran : au repos elle montre la pochette Spotify et le -mode du casque ; au survol elle s'ouvre sur deux onglets, Musique (Spotify local) et Casque (NC / Ambiant / Off). - -**Architecture :** un `NSPanel` sans bordure et non activant, placé au-dessus de la barre des menus et calé sur -l'encoche (`NotchGeometry`), héberge une vue SwiftUI (`NotchView`). La musique vient d'une interface commune -`MusicSource` ; l'étape 1 n'a que `SpotifyLocalSource` (signal `PlaybackStateChanged` + Apple Events via -`NSAppleScript`), exposée à l'interface par `MusicController`. L'onglet Casque appelle le `HeadphonesModel` existant. -Toute la logique décidable sans AppKit (géométrie, état au repos, horloge de lecture, décodage Spotify) est dans -des fichiers purs testés par `LogicTests`. - -**Tech Stack :** Swift 5 (mode de langage), SwiftUI, AppKit, Combine, Foundation (`NSAppleScript`, -`DistributedNotificationCenter`, `URLSession`) ; build `swiftc` via `scripts/build.sh` et `Makefile` ; tests -`scripts/test.sh` ; Python 3 (vérification des traductions). - -**Spec :** `docs/superpowers/specs/2026-09-11-notch-design.md` - -## Global Constraints - -- macOS minimum : **13.0** (pas d'API macOS 14+ : par exemple pas de `UnevenRoundedRectangle`, pas d'`onChange` à deux paramètres). -- Pas de Xcode : tout se compile avec les Command Line Tools (`make`, `make test`, `make run`, `make release`). -- Swift compilé avec `-swift-version 5`. -- Licence : **aucun code ni visuel copié de boring.notch (GPL-3.0)**, ni d'un autre projet GPL. Tout est écrit ici, - à partir de la documentation Apple. SonyBridge reste sous licence MIT. -- Textes : **tout texte affiché** passe par `tr("…")`, avec la clé en anglais et sa traduction dans - `Client/macos/fr.lproj/Localizable.strings` (apostrophe typographique `’` dans les traductions françaises). - `make test` le vérifie. Les textes non traduisibles (chiffres, « − ») utilisent `Text(verbatim:)`. -- Spotify : **ne jamais envoyer d'Apple Event à Spotify s'il n'est pas ouvert** (un Apple Event lancerait l'app). - Seul le bouton « Ouvrir Spotify » lance Spotify. -- Casque : l'encoche n'envoie **aucune nouvelle commande** au casque ; elle appelle uniquement - `setMode`, `setLevel(_:final:)`, `setFocusOnVoice` et `connect` du `HeadphonesModel` existant. -- Lancement de l'app : **uniquement** `make run` (qui passe par `open … --args`). Ne jamais lancer - `build/SonyBridge.app/Contents/MacOS/SonyBridge` directement (crash TCC), ne jamais utiliser `open --stdout`. - Le journal est `~/Library/Logs/SonyBridge/app.log` (lien `build/app.log`). -- Git : c'est **l'utilisateur** qui committe. À chaque étape « Commit », afficher la commande proposée et attendre - qu'il la lance. -- Test visuel et matériel : l'agent ne voit pas l'écran. Chaque vérification visuelle est demandée à - l'utilisateur, avec une liste précise de choses à regarder. - -## Carte des fichiers - -| Fichier | Tâche | Responsabilité | -|---|---|---| -| `Client/macos/Notch/NotchGeometry.swift` | 1 | **Pur.** `ScreenMetrics`, `NotchGeometry` : rectangles de l'encoche, élargi, ouvert, pastille | -| `Client/macos/Notch/NotchContent.swift` | 1 | **Pur.** `NotchRestingState`, `NotchTab`, `NotchContent` : état au repos, onglet, délais | -| `Client/macos/Music/NowPlaying.swift` | 2 | **Pur.** `MusicCapabilities`, `NowPlaying` | -| `Client/macos/Music/PlaybackClock.swift` | 2 | **Pur.** Position en direct et format « m:ss » | -| `Client/macos/Music/SpotifyPlaybackInfo.swift` | 2 | **Pur.** `SpotifyState`, décodage du signal et de la réponse AppleScript | -| `Client/macos/Music/MusicSource.swift` | 3 | `MusicSourceStatus`, protocole `MusicSource` | -| `Client/macos/Music/SpotifyScript.swift` | 3 | Textes AppleScript et exécution d'un `NSAppleScript` | -| `Client/macos/Music/SpotifyLocalSource.swift` | 3 | Source Spotify locale | -| `Client/macos/Music/MusicController.swift` | 3 | État musique publié pour l'encoche, pochette, limitation des curseurs | -| `Client/macos/Notch/NotchPanel.swift` | 4 | `NotchPanel`, `NotchContainerView` (survol), `NotchHostingView` (premier clic) | -| `Client/macos/Notch/NotchController.swift` | 4 | Écran, placement, taille, survol, option | -| `Client/macos/Notch/NotchView.swift` | 4, 5, 6 | `NotchViewState`, `NotchShape`, `NotchView`, `ArtworkView`, `LevelBars` | -| `Client/macos/Notch/HeadphonesTab.swift` | 5 | Onglet Casque | -| `Client/macos/Notch/MusicTab.swift` | 6 | Onglet Musique | -| `Client/macos/AppSettings.swift` | 3 | Option `showNotch` | -| `Client/macos/HeadphonesMenu.swift` | 3 | Case « Afficher l'encoche » | -| `Client/macos/AppDelegate.swift` | 3, 4 | Crée `MusicController` et `NotchController` | -| `Client/macos/SonyHeadphonesClient.entitlements` | 3 | Apple Events vers Spotify, réseau sortant | -| `Client/macos/info.plist`, `*.lproj/InfoPlist.strings` | 3 | `NSAppleEventsUsageDescription` | -| `Client/macos/fr.lproj/Localizable.strings` | 3–6 | Traductions | -| `scripts/build.sh` | 1 | Compile aussi `Notch/*.swift` et `Music/*.swift` | -| `scripts/test.sh` | 1, 2 | Ajoute les fichiers purs à `LogicTests` | -| `Client/tests/LogicTests/main.swift` | 1, 2 | Nouveaux tests | -| `README.md` | 6 | Fonction encoche, autorisation Spotify | - -`SpotifyScript.swift` n'est pas dans le tableau §5.1 de la spec : c'est un découpage de `SpotifyLocalSource` -(les textes AppleScript à part), sans nouvelle responsabilité. - -Nombre de clés de traduction attendu par `make test` : **54** aujourd'hui → 55 (tâche 3) → 57 (tâche 4) → -58 (tâche 5) → 67 (tâche 6). - ---- - -### Task 1: Logique pure de l'encoche + câblage du build et des tests - -**Files:** -- Create: `Client/macos/Notch/NotchGeometry.swift`, `Client/macos/Notch/NotchContent.swift` -- Modify: `Client/tests/LogicTests/main.swift` (nouveaux blocs avant `if failures > 0`) -- Modify: `scripts/test.sh` (bloc `LogicTests`), `scripts/build.sh:23` (`SWIFT_SOURCES`) - -**Interfaces:** -- Produces : - - `struct ScreenMetrics: Equatable { var frame: CGRect; var safeAreaTop: CGFloat; var auxiliaryTopLeft: CGRect?; var auxiliaryTopRight: CGRect?; var menuBarHeight: CGFloat }` - - `struct NotchGeometry: Equatable { static let sideExtension: CGFloat /* 36 */; static let simulatedWidth: CGFloat /* 190 */; static let fallbackMenuBarHeight: CGFloat /* 24 */; static let openSize: CGSize /* 380 × 190 */; let hasNotch: Bool; let notch: CGRect; init(screen: ScreenMetrics); var extended: CGRect; var open: CGRect; func restingFrame(for state: NotchRestingState) -> CGRect? }` - - `enum NotchRestingState: Equatable { case musicAndHeadphones, musicOnly, headphonesOnly, empty }` - - `enum NotchTab: Equatable { case music, headphones }` - - `enum NotchContent { static let openDelay: TimeInterval /* 0.15 */; static let closeDelay: TimeInterval /* 0.4 */; static func restingState(hasMusic: Bool, headphonesConnected: Bool) -> NotchRestingState; static func tabOnOpen(lastChosen: NotchTab?, hasMusic: Bool) -> NotchTab }` - -- [ ] **Step 1 : Écrire les tests** — dans `Client/tests/LogicTests/main.swift`, ajouter `import CoreGraphics` - sous `import Foundation` (les initialiseurs `CGRect(x:y:width:height:)` en viennent), puis insérer ces blocs - juste avant `if failures > 0 {` : - -```swift -// NotchGeometry: a 14" MacBook Pro screen (1512 × 982 pt, notch 188 pt wide, 32 pt high). -do { - let screen = ScreenMetrics(frame: CGRect(x: 0, y: 0, width: 1512, height: 982), safeAreaTop: 32, - auxiliaryTopLeft: CGRect(x: 0, y: 950, width: 662, height: 32), - auxiliaryTopRight: CGRect(x: 850, y: 950, width: 662, height: 32), - menuBarHeight: 32) - let geometry = NotchGeometry(screen: screen) - check(geometry.hasNotch, "notched screen detected") - check(geometry.notch == CGRect(x: 662, y: 950, width: 188, height: 32), "notch rect was \(geometry.notch)") - check(geometry.extended == CGRect(x: 626, y: 950, width: 260, height: 32), "extended rect was \(geometry.extended)") - check(geometry.open == CGRect(x: 566, y: 792, width: 380, height: 190), "open rect was \(geometry.open)") - check(geometry.restingFrame(for: .empty) == geometry.notch, "empty state: bare notch") - check(geometry.restingFrame(for: .musicOnly) == geometry.extended, "music: extended notch") -} - -// NotchGeometry: an external screen without a notch, right of the primary screen. -do { - let frame = CGRect(x: 1512, y: 0, width: 2560, height: 1440) - let geometry = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 0, auxiliaryTopLeft: nil, - auxiliaryTopRight: nil, menuBarHeight: 25)) - check(!geometry.hasNotch, "no notch") - check(geometry.notch == CGRect(x: 2697, y: 1415, width: 190, height: 25), "simulated pill was \(geometry.notch)") - check(geometry.restingFrame(for: .empty) == nil, "empty state hides the pill") - check(geometry.restingFrame(for: .headphonesOnly) == geometry.extended, "headphones: extended pill") - - let autoHidden = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 0, auxiliaryTopLeft: nil, - auxiliaryTopRight: nil, menuBarHeight: 0)) - check(autoHidden.notch.height == 24, "auto-hidden menu bar: fallback pill height") - let partial = NotchGeometry(screen: ScreenMetrics(frame: frame, safeAreaTop: 32, auxiliaryTopLeft: nil, - auxiliaryTopRight: nil, menuBarHeight: 32)) - check(!partial.hasNotch, "safe area without auxiliary areas: no notch") -} - -// NotchContent: resting state (spec §4.1), tab on opening, hover delays. -do { - check(NotchContent.restingState(hasMusic: true, headphonesConnected: true) == .musicAndHeadphones, "state 1") - check(NotchContent.restingState(hasMusic: true, headphonesConnected: false) == .musicOnly, "state 2") - check(NotchContent.restingState(hasMusic: false, headphonesConnected: true) == .headphonesOnly, "state 3") - check(NotchContent.restingState(hasMusic: false, headphonesConnected: false) == .empty, "state 4") - check(NotchContent.tabOnOpen(lastChosen: nil, hasMusic: true) == .music, "first open with music: Music") - check(NotchContent.tabOnOpen(lastChosen: nil, hasMusic: false) == .headphones, "first open without music: Headphones") - check(NotchContent.tabOnOpen(lastChosen: .headphones, hasMusic: true) == .headphones, "then the last chosen tab") - check(NotchContent.openDelay == 0.15 && NotchContent.closeDelay == 0.4, "hover delays") -} -``` - -- [ ] **Step 2 : Ajouter les fichiers purs à `LogicTests`** — dans `scripts/test.sh`, remplacer le bloc - `LogicTests` par : - -```bash -echo "== LogicTests" -swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ - "$ROOT/Client/tests/LogicTests/main.swift" \ - "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ - "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" \ - -o "$OUT/LogicTests" -"$OUT/LogicTests" -``` - -- [ ] **Step 3 : Lancer les tests pour les voir échouer** - -Run : `make test` -Attendu : échec de `swiftc`, `error: no such file or directory: '…/Client/macos/Notch/NotchGeometry.swift'`. - -- [ ] **Step 4 : Écrire `Client/macos/Notch/NotchContent.swift`** - -```swift -import Foundation - -// What the notch shows while resting (spec §4.1) and which tab it opens on. Pure logic, tested in LogicTests. -enum NotchRestingState: Equatable { - case musicAndHeadphones // 1: artwork left, headphones mode right - case musicOnly // 2: artwork left, level bars right - case headphonesOnly // 3: headphones glyph left, mode right - case empty // 4: bare notch (hidden on a screen without a notch) -} - -enum NotchTab: Equatable { - case music, headphones -} - -enum NotchContent { - static let openDelay: TimeInterval = 0.15 // hover time before opening - static let closeDelay: TimeInterval = 0.4 // time after the pointer leaves before closing - - static func restingState(hasMusic: Bool, headphonesConnected: Bool) -> NotchRestingState { - switch (hasMusic, headphonesConnected) { - case (true, true): return .musicAndHeadphones - case (true, false): return .musicOnly - case (false, true): return .headphonesOnly - case (false, false): return .empty - } - } - - // The first opening of the session follows the music; afterwards the last tab the user picked wins. - static func tabOnOpen(lastChosen: NotchTab?, hasMusic: Bool) -> NotchTab { - lastChosen ?? (hasMusic ? .music : .headphones) - } -} -``` - -- [ ] **Step 5 : Écrire `Client/macos/Notch/NotchGeometry.swift`** - -```swift -import CoreGraphics - -// The NSScreen values NotchGeometry needs, copied out so this file stays AppKit-free (tested in LogicTests). -// Rects are in global screen coordinates (origin at the bottom-left of the primary screen). -struct ScreenMetrics: Equatable { - var frame: CGRect - var safeAreaTop: CGFloat // NSScreen.safeAreaInsets.top (0 without a notch) - var auxiliaryTopLeft: CGRect? // NSScreen.auxiliaryTopLeftArea (nil without a notch) - var auxiliaryTopRight: CGRect? // NSScreen.auxiliaryTopRightArea - var menuBarHeight: CGFloat // frame.maxY - visibleFrame.maxY (0 when the menu bar auto-hides) -} - -// Where the notch panel goes (spec §4): the real notch, or a simulated pill centred at the top of a screen -// without one. Every rect shares the notch's horizontal centre and touches the top edge of the screen. -struct NotchGeometry: Equatable { - static let sideExtension: CGFloat = 36 // resting widening on each side (states 1-3) - static let simulatedWidth: CGFloat = 190 // pill width on a screen without a notch - static let fallbackMenuBarHeight: CGFloat = 24 // pill height when the menu bar auto-hides - static let openSize = CGSize(width: 380, height: 190) - - let hasNotch: Bool - let notch: CGRect - - init(screen: ScreenMetrics) { - let top = screen.frame.maxY - if screen.safeAreaTop > 0, let left = screen.auxiliaryTopLeft, let right = screen.auxiliaryTopRight, - screen.frame.width - left.width - right.width > 0 { - // Only the widths of the auxiliary areas are used, so their coordinate space doesn't matter. - hasNotch = true - notch = CGRect(x: screen.frame.minX + left.width, y: top - screen.safeAreaTop, - width: screen.frame.width - left.width - right.width, height: screen.safeAreaTop) - } else { - hasNotch = false - let height = screen.menuBarHeight > 0 ? screen.menuBarHeight : Self.fallbackMenuBarHeight - notch = CGRect(x: screen.frame.midX - Self.simulatedWidth / 2, y: top - height, - width: Self.simulatedWidth, height: height) - } - } - - // The notch widened on both sides, to hold the resting artwork / mode icons. - var extended: CGRect { - notch.insetBy(dx: -Self.sideExtension, dy: 0) - } - - var open: CGRect { - let width = max(Self.openSize.width, extended.width) - let height = max(Self.openSize.height, notch.height) - return CGRect(x: notch.midX - width / 2, y: notch.maxY - height, width: width, height: height) - } - - // Panel frame while resting; nil = hidden (nothing to show on a screen without a notch). - func restingFrame(for state: NotchRestingState) -> CGRect? { - switch state { - case .empty: return hasNotch ? notch : nil - default: return extended - } - } -} -``` - -- [ ] **Step 6 : Compiler les nouveaux dossiers dans l'app** — `scripts/build.sh:23`, remplacer la ligne par : - -```bash -SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift "$MAC"/Notch/*.swift "$MAC"/Music/*.swift) -``` - -(`shopt -s nullglob` est déjà actif : `Music/` vide ne gêne pas.) - -- [ ] **Step 7 : Lancer les tests et le build** - -Run : `make test && make` -Attendu : `LogicTests: all passed`, les 3 autres suites passent, `Localization: 54 keys, all translated`, puis -`OK -> …/build/SonyBridge.app`, sans avertissement Swift. - -- [ ] **Step 8 : Commit (par l'utilisateur)** - -```bash -git add Client/macos/Notch Client/tests/LogicTests/main.swift scripts/test.sh scripts/build.sh && git commit -m "feat(notch): notch geometry and resting-state logic" -m "Co-Authored-By: Claude Opus 5 " -``` - ---- - -### Task 2: Logique pure de la musique - -**Files:** -- Create: `Client/macos/Music/NowPlaying.swift`, `Client/macos/Music/PlaybackClock.swift`, - `Client/macos/Music/SpotifyPlaybackInfo.swift` -- Modify: `Client/tests/LogicTests/main.swift` (nouveaux blocs avant `if failures > 0`), `scripts/test.sh` - -**Interfaces:** -- Produces : - - `struct MusicCapabilities: Equatable { var canSeek: Bool; var canSetVolume: Bool; var canChangeDevice: Bool }` - - `struct NowPlaying: Equatable { var trackID: String; var title: String; var artist: String; var album: String; var artworkURL: URL?; var duration: TimeInterval; var position: TimeInterval; var positionDate: Date; var isPlaying: Bool; var volume: Int?; var deviceName: String?; var capabilities: MusicCapabilities }` (memberwise init, arguments dans cet ordre ; `deviceName == nil` = « Ce Mac ») - - `enum PlaybackClock { static func position(of track: NowPlaying, at date: Date) -> TimeInterval; static func format(_ seconds: TimeInterval) -> String }` - - `enum SpotifyState: Equatable { case stopped; case track(NowPlaying); case incomplete }` - - `enum SpotifyPlaybackInfo { static let localCapabilities: MusicCapabilities; static let fieldSeparator: Character /* U+001F */; static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> SpotifyState; static func parse(scriptResult text: String, at date: Date) -> SpotifyState }` - -- [ ] **Step 1 : Écrire les tests** — dans `Client/tests/LogicTests/main.swift`, insérer avant `if failures > 0 {` : - -```swift -// PlaybackClock: live position from the last known one; display format. -do { - let t0 = Date(timeIntervalSince1970: 1_000) - var track = NowPlaying(trackID: "spotify:track:1", title: "A", artist: "B", album: "C", artworkURL: nil, - duration: 200, position: 30, positionDate: t0, isPlaying: true, volume: 50, - deviceName: nil, - capabilities: MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false)) - check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 42, "playing: advances") - check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 200, "bounded by the duration") - check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(-40)) == 0, "never negative") - track.isPlaying = false - check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(12)) == 30, "paused: frozen") - track.isPlaying = true - track.duration = 0 - check(PlaybackClock.position(of: track, at: t0.addingTimeInterval(500)) == 530, "unknown duration: not bounded") - let nextTrack = NowPlaying(trackID: "spotify:track:2", title: "D", artist: "E", album: "F", artworkURL: nil, - duration: 180, position: 0, positionDate: t0.addingTimeInterval(100), isPlaying: true, - volume: 50, deviceName: nil, capabilities: track.capabilities) - check(PlaybackClock.position(of: nextTrack, at: t0.addingTimeInterval(100)) == 0, "track change: starts from 0") - check(PlaybackClock.format(65) == "1:05", "format 1:05 was \(PlaybackClock.format(65))") - check(PlaybackClock.format(754.9) == "12:34", "format rounds down") - check(PlaybackClock.format(3723) == "1:02:03", "format with hours") - check(PlaybackClock.format(-3) == "0:00", "format never negative") -} - -// SpotifyPlaybackInfo: the PlaybackStateChanged signal (spec §6.1). -do { - let t0 = Date(timeIntervalSince1970: 1_000) - let signal: [AnyHashable: Any] = [ - "Player State": "Playing", "Track ID": "spotify:track:42", "Name": "Midnight City", "Artist": "M83", - "Album": "Hurry Up, We're Dreaming", "Duration": NSNumber(value: 243_000), "Playback Position": NSNumber(value: 12.5), - ] - if case .track(let track) = SpotifyPlaybackInfo.parse(signal: signal, at: t0) { - check(track.trackID == "spotify:track:42" && track.title == "Midnight City" && track.artist == "M83", "signal: names") - check(track.duration == 243 && track.position == 12.5 && track.positionDate == t0 && track.isPlaying, "signal: timing") - check(track.artworkURL == nil && track.volume == nil && track.deviceName == nil, "signal: no artwork or volume, this Mac") - check(track.capabilities == SpotifyPlaybackInfo.localCapabilities, "signal: local capabilities") - } else { - check(false, "signal with full info decodes to a track") - } - var paused = signal - paused["Player State"] = "Paused" - paused["Playback Position"] = nil - if case .track(let track) = SpotifyPlaybackInfo.parse(signal: paused, at: t0) { - check(!track.isPlaying && track.position == 0, "paused, no position: 0") - } else { - check(false, "paused signal decodes to a track") - } - check(SpotifyPlaybackInfo.parse(signal: ["Player State": "Stopped"], at: t0) == .stopped, "signal: stopped") - check(SpotifyPlaybackInfo.parse(signal: nil, at: t0) == .incomplete, "signal without userInfo: incomplete") - check(SpotifyPlaybackInfo.parse(signal: ["Player State": "Playing"], at: t0) == .incomplete, "signal without track id: incomplete") -} - -// SpotifyPlaybackInfo: the text SpotifyScript.readState returns (fields separated by U+001F). -do { - let t0 = Date(timeIntervalSince1970: 1_000) - let sep = "\u{1F}" - let text = ["paused", "spotify:track:7", "Title", "Artist", "Album", "180000", "61500", - "https://i.scdn.co/image/ab", "70"].joined(separator: sep) - if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: text, at: t0) { - check(!track.isPlaying && track.duration == 180 && track.position == 61.5, "script: timing") - check(track.artworkURL == URL(string: "https://i.scdn.co/image/ab") && track.volume == 70, "script: artwork and volume") - check(track.title == "Title" && track.album == "Album" && track.positionDate == t0, "script: names") - } else { - check(false, "script result decodes to a track") - } - let local = ["playing", "spotify:local:x", "T", "", "", "1000", "0", "", "101"].joined(separator: sep) - if case .track(let track) = SpotifyPlaybackInfo.parse(scriptResult: local, at: t0) { - check(track.artworkURL == nil && track.volume == 100 && track.artist.isEmpty, "script: empty fields, volume clamped") - } else { - check(false, "script result with empty fields decodes to a track") - } - check(SpotifyPlaybackInfo.parse(scriptResult: "stopped", at: t0) == .stopped, "script: stopped") - check(SpotifyPlaybackInfo.parse(scriptResult: "garbage", at: t0) == .incomplete, "script: malformed") -} -``` - -- [ ] **Step 2 : Ajouter les fichiers à `LogicTests`** — dans `scripts/test.sh`, bloc `LogicTests`, ajouter une - ligne après celle de `Notch/` : - -```bash - "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ -``` - -- [ ] **Step 3 : Lancer les tests pour les voir échouer** - -Run : `make test` -Attendu : échec de `swiftc`, `error: no such file or directory: '…/Client/macos/Music/NowPlaying.swift'`. - -- [ ] **Step 4 : Écrire `Client/macos/Music/NowPlaying.swift`** - -```swift -import Foundation - -// What a music source can do with the current track (the Web source of step 2 depends on the device). -struct MusicCapabilities: Equatable { - var canSeek: Bool - var canSetVolume: Bool - var canChangeDevice: Bool -} - -// The track a music source is playing (or paused on). `position` was true at `positionDate`; PlaybackClock -// derives the live position from it, so nothing polls while a track plays. -struct NowPlaying: Equatable { - var trackID: String - var title: String - var artist: String - var album: String - var artworkURL: URL? - var duration: TimeInterval // seconds; 0 when unknown - var position: TimeInterval // seconds, at positionDate - var positionDate: Date - var isPlaying: Bool - var volume: Int? // 0...100; nil until known - var deviceName: String? // nil = this Mac - var capabilities: MusicCapabilities -} -``` - -- [ ] **Step 5 : Écrire `Client/macos/Music/PlaybackClock.swift`** - -```swift -import Foundation - -// Live playback position and its display, from the last known position (spec §6.1). -enum PlaybackClock { - static func position(of track: NowPlaying, at date: Date) -> TimeInterval { - var position = track.position - if track.isPlaying { position += date.timeIntervalSince(track.positionDate) } - if track.duration > 0 { position = min(position, track.duration) } - return max(0, position) - } - - // "1:05", "12:34", "1:02:03". - static func format(_ seconds: TimeInterval) -> String { - let total = max(0, Int(seconds.rounded(.down))) - let hours = total / 3600, minutes = total / 60 % 60, secs = total % 60 - return hours > 0 - ? String(format: "%d:%02d:%02d", hours, minutes, secs) - : String(format: "%d:%02d", minutes, secs) - } -} -``` - -- [ ] **Step 6 : Écrire `Client/macos/Music/SpotifyPlaybackInfo.swift`** - -```swift -import Foundation - -// Result of decoding what the local Spotify app reports. -enum SpotifyState: Equatable { - case stopped // Spotify is open with nothing loaded - case track(NowPlaying) - case incomplete // not enough information: read the state through Apple Events instead -} - -// Decodes the local Spotify app's signal and Apple Events replies (spec §6.1). Pure, tested in LogicTests. -enum SpotifyPlaybackInfo { - static let localCapabilities = MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false) - static let fieldSeparator: Character = "\u{1F}" - - // com.spotify.client.PlaybackStateChanged userInfo: "Player State" (Playing / Paused / Stopped), "Track ID", - // "Name", "Artist", "Album", "Duration" (ms), "Playback Position" (s). It never carries artwork or volume. - static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> SpotifyState { - guard let info = userInfo, let state = info["Player State"] as? String else { return .incomplete } - if state == "Stopped" { return .stopped } - guard state == "Playing" || state == "Paused", - let trackID = info["Track ID"] as? String, !trackID.isEmpty else { return .incomplete } - return .track(NowPlaying( - trackID: trackID, - title: info["Name"] as? String ?? "", - artist: info["Artist"] as? String ?? "", - album: info["Album"] as? String ?? "", - artworkURL: nil, - duration: ((info["Duration"] as? NSNumber)?.doubleValue ?? 0) / 1000, - position: (info["Playback Position"] as? NSNumber)?.doubleValue ?? 0, - positionDate: date, - isPlaying: state == "Playing", - volume: nil, - deviceName: nil, - capabilities: localCapabilities)) - } - - // SpotifyScript.readState's reply: "stopped", or 9 fields separated by U+001F — state, track id, name, - // artist, album, duration (ms), position (ms), artwork URL, volume. - static func parse(scriptResult text: String, at date: Date) -> SpotifyState { - if text == "stopped" { return .stopped } - let fields = text.split(separator: fieldSeparator, omittingEmptySubsequences: false).map(String.init) - guard fields.count == 9, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { - return .incomplete - } - return .track(NowPlaying( - trackID: fields[1], - title: fields[2], - artist: fields[3], - album: fields[4], - artworkURL: URL(string: fields[7]), - duration: (Double(fields[5]) ?? 0) / 1000, - position: (Double(fields[6]) ?? 0) / 1000, - positionDate: date, - isPlaying: fields[0] == "playing", - volume: Int(fields[8]).map { min(100, max(0, $0)) }, - deviceName: nil, - capabilities: localCapabilities)) - } -} -``` - -- [ ] **Step 7 : Lancer les tests et le build** - -Run : `make test && make` -Attendu : `LogicTests: all passed`, `Localization: 54 keys, all translated`, build `OK`, sans avertissement. - -- [ ] **Step 8 : Commit (par l'utilisateur)** - -```bash -git add Client/macos/Music Client/tests/LogicTests/main.swift scripts/test.sh && git commit -m "feat(music): now-playing model, playback clock and Spotify info decoding" -m "Co-Authored-By: Claude Opus 5 " -``` - ---- - -### Task 3: Source Spotify locale + `MusicController` + option « Afficher l'encoche » - -Pas de test unitaire ici (AppKit, Apple Events, signaux système) : la logique décidable est déjà testée en -tâche 2. La vérification se fait dans le journal, sur le Mac de l'utilisateur, avant que l'encoche existe. - -**Files:** -- Create: `Client/macos/Music/MusicSource.swift`, `Client/macos/Music/SpotifyScript.swift`, - `Client/macos/Music/SpotifyLocalSource.swift`, `Client/macos/Music/MusicController.swift` -- Modify: `Client/macos/AppSettings.swift`, `Client/macos/HeadphonesMenu.swift`, `Client/macos/AppDelegate.swift` -- Modify: `Client/macos/SonyHeadphonesClient.entitlements`, `Client/macos/info.plist`, - `Client/macos/en.lproj/InfoPlist.strings`, `Client/macos/fr.lproj/InfoPlist.strings`, - `Client/macos/fr.lproj/Localizable.strings` - -**Interfaces:** -- Consumes (tâche 2) : `NowPlaying`, `PlaybackClock.position(of:at:)`, `SpotifyState`, - `SpotifyPlaybackInfo.parse(signal:at:)`, `SpotifyPlaybackInfo.parse(scriptResult:at:)` ; existant : `SendThrottle`. -- Produces : - - `enum MusicSourceStatus: Equatable { case notRunning, permissionDenied, ready }` - - `protocol MusicSource: AnyObject { var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? { get set }; func start(); func stop(); func refresh(); func playPause(); func next(); func previous(); func seek(to seconds: TimeInterval); func setVolume(_ volume: Int); func launchPlayer() }` - - `final class MusicController: ObservableObject { @Published private(set) var status: MusicSourceStatus; @Published private(set) var nowPlaying: NowPlaying?; @Published private(set) var artwork: NSImage?; var hasMusic: Bool; init(source: MusicSource = SpotifyLocalSource()); func start(); func stop(); func notchDidOpen(); func notchDidClose(); func playPause(); func next(); func previous(); func seek(to seconds: TimeInterval, final: Bool); func setVolume(_ volume: Int, final: Bool); func launchPlayer(); func openAutomationSettings() }` - - `AppSettings.showNotch: Bool` (`@Published`, activée par défaut) - - `AppDelegate` : propriété `music: MusicController`, démarrée / arrêtée selon `settings.showNotch` - -- [ ] **Step 1 : Écrire `Client/macos/Music/MusicSource.swift`** - -```swift -import Foundation - -enum MusicSourceStatus: Equatable { - case notRunning // the player app isn't open - case permissionDenied // macOS refused SonyBridge the right to control it - case ready -} - -// Where the music comes from (spec §5.1). Step 1: SpotifyLocalSource; step 2 adds the Spotify Web API. -// Called on the main thread; onChange is called on the main thread. -protocol MusicSource: AnyObject { - var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? { get set } - func start() - func stop() - func refresh() - func playPause() - func next() - func previous() - func seek(to seconds: TimeInterval) - func setVolume(_ volume: Int) - func launchPlayer() -} -``` - -- [ ] **Step 2 : Écrire `Client/macos/Music/SpotifyScript.swift`** - -```swift -import Foundation - -// AppleScript sent to the local Spotify app (spec §6). Only ever run on SpotifyLocalSource's script queue. -enum SpotifyScript { - enum Result: Equatable { - case success(String) - case failure(Int) // AppleScript / Apple Event error number - } - - // Fields joined by U+001F; times as integer milliseconds so no locale decimal separator shows up. - // Parsed by SpotifyPlaybackInfo.parse(scriptResult:at:). - static let readState = """ - with timeout of 2 seconds - tell application id "com.spotify.client" - set playerState to (player state as text) - if playerState is "stopped" then return "stopped" - set t to current track - set sep to (character id 31) - set art to artwork url of t - if art is missing value then set art to "" - return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) - end tell - end timeout - """ - - // One command, e.g. "playpause", "next track", "set sound volume to 40". - static func command(_ body: String) -> String { - """ - with timeout of 2 seconds - tell application id "com.spotify.client" to \(body) - end timeout - """ - } - - static func run(_ script: NSAppleScript?) -> Result { - guard let script = script else { return .failure(-2700) } - var error: NSDictionary? - let output = script.executeAndReturnError(&error) - if let error = error { - return .failure((error[NSAppleScript.errorNumber] as? NSNumber)?.intValue ?? -2700) - } - return .success(output.stringValue ?? "") - } -} -``` - -- [ ] **Step 3 : Écrire `Client/macos/Music/SpotifyLocalSource.swift`** - -```swift -import AppKit - -// Reads and controls the Spotify app of this Mac (spec §6): its PlaybackStateChanged signal, plus Apple Events. -// Never sends an Apple Event while Spotify isn't running: one would launch it. -final class SpotifyLocalSource: MusicSource { - static let bundleIdentifier = "com.spotify.client" - private static let signalName = Notification.Name("com.spotify.client.PlaybackStateChanged") - private static let permissionDeniedError = -1743 // errAEEventNotPermitted - private static let notRunningErrors: Set = [-600, -609] // procNotFound, connectionInvalid - private static let launchSettleDelay: TimeInterval = 2 // Spotify answers Apple Events a moment after launch - - var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? - - // Main thread only. - private var status: MusicSourceStatus = .notRunning - private var nowPlaying: NowPlaying? - private var signalObserver: NSObjectProtocol? - private var workspaceObservers: [NSObjectProtocol] = [] - - // Every NSAppleScript is created and run on this serial queue, one at a time. - private let scriptQueue = DispatchQueue(label: "com.sonybridge.spotify") - private var readScript: NSAppleScript? // scriptQueue only - - // Checked before queuing, and again on the script queue right before an Apple Event goes out, so a Spotify - // quit in between is never relaunched. - private static var spotifyIsRunning: Bool { - !NSRunningApplication.runningApplications(withBundleIdentifier: bundleIdentifier).isEmpty - } - - private var isRunning: Bool { Self.spotifyIsRunning } - - func start() { - guard signalObserver == nil else { return } - signalObserver = DistributedNotificationCenter.default().addObserver( - forName: Self.signalName, object: nil, queue: .main - ) { [weak self] note in - self?.handleSignal(note.userInfo) - } - let center = NSWorkspace.shared.notificationCenter - workspaceObservers = [ - center.addObserver(forName: NSWorkspace.didLaunchApplicationNotification, object: nil, queue: .main) { [weak self] note in - guard Self.isSpotify(note) else { return } - DispatchQueue.main.asyncAfter(deadline: .now() + Self.launchSettleDelay) { self?.refresh() } - }, - center.addObserver(forName: NSWorkspace.didTerminateApplicationNotification, object: nil, queue: .main) { [weak self] note in - if Self.isSpotify(note) { self?.publish(.notRunning, nil) } - }, - ] - if isRunning { refresh() } else { publish(.notRunning, nil) } - } - - func stop() { - if let observer = signalObserver { DistributedNotificationCenter.default().removeObserver(observer) } - signalObserver = nil - workspaceObservers.forEach { NSWorkspace.shared.notificationCenter.removeObserver($0) } - workspaceObservers = [] - status = .notRunning - nowPlaying = nil - } - - func refresh() { - guard signalObserver != nil else { return } - guard isRunning else { publish(.notRunning, nil); return } - scriptQueue.async { [weak self] in - guard let self = self, Self.spotifyIsRunning else { return } - if self.readScript == nil { self.readScript = NSAppleScript(source: SpotifyScript.readState) } - let result = SpotifyScript.run(self.readScript) - DispatchQueue.main.async { self.applyRead(result) } - } - } - - func playPause() { - // Optimistic: the signal confirms a moment later. - if var track = nowPlaying { - track.position = PlaybackClock.position(of: track, at: Date()) - track.positionDate = Date() - track.isPlaying.toggle() - publish(status, track) - } - send("playpause") - } - - func next() { send("next track") } - - func previous() { send("previous track") } - - func seek(to seconds: TimeInterval) { - if var track = nowPlaying { - track.position = seconds - track.positionDate = Date() - publish(status, track) - } - // String(format:) isn't localized: always a "." decimal separator, as AppleScript source needs. - send(String(format: "set player position to %.3f", seconds)) - } - - func setVolume(_ volume: Int) { - let clamped = min(100, max(0, volume)) - if var track = nowPlaying { - track.volume = clamped - publish(status, track) - } - send("set sound volume to \(clamped)") - } - - func launchPlayer() { - guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.bundleIdentifier) else { - fputs("[spotify] Spotify isn't installed\n", stderr) - return - } - NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration(), - completionHandler: nil) - } - - // MARK: - Private - - private func send(_ command: String) { - guard signalObserver != nil else { return } - guard isRunning else { publish(.notRunning, nil); return } - scriptQueue.async { [weak self] in - guard Self.spotifyIsRunning else { return } - let result = SpotifyScript.run(NSAppleScript(source: SpotifyScript.command(command))) - if case .failure(let code) = result { - DispatchQueue.main.async { self?.applyFailure(code) } - } - } - } - - private func handleSignal(_ userInfo: [AnyHashable: Any]?) { - let denied = status == .permissionDenied - switch SpotifyPlaybackInfo.parse(signal: userInfo, at: Date()) { - case .stopped: - publish(denied ? .permissionDenied : .ready, nil) - case .track(var track): - // Artwork and volume only come from Apple Events: keep them for the same track, read them otherwise. - if let current = nowPlaying, current.trackID == track.trackID { - track.artworkURL = current.artworkURL - track.volume = current.volume - } - publish(denied ? .permissionDenied : .ready, track) - if track.artworkURL == nil && !denied { refresh() } - case .incomplete: - if !denied { refresh() } - } - } - - private func applyRead(_ result: SpotifyScript.Result) { - guard signalObserver != nil else { return } // stopped meanwhile - switch result { - case .success(let text): - switch SpotifyPlaybackInfo.parse(scriptResult: text, at: Date()) { - case .stopped: publish(.ready, nil) - case .track(let track): publish(.ready, track) - case .incomplete: fputs("[spotify] unexpected reply: \(text)\n", stderr) - } - case .failure(let code): - applyFailure(code) - } - } - - // Spec §6.3: a refusal stops the reads (the controller retries once per notch opening); anything else - // (timeout, busy) keeps the last known state until the next signal. - private func applyFailure(_ code: Int) { - guard signalObserver != nil else { return } - if code == Self.permissionDeniedError { - publish(.permissionDenied, nowPlaying) - } else if Self.notRunningErrors.contains(code) { - publish(.notRunning, nil) - } else { - fputs("[spotify] Apple Event failed (\(code))\n", stderr) - } - } - - private func publish(_ newStatus: MusicSourceStatus, _ track: NowPlaying?) { - status = newStatus - nowPlaying = track - onChange?(newStatus, track) - } - - private static func isSpotify(_ note: Notification) -> Bool { - (note.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication)?.bundleIdentifier == bundleIdentifier - } -} -``` - -- [ ] **Step 4 : Écrire `Client/macos/Music/MusicController.swift`** - -```swift -import AppKit -import Combine - -// The music state the notch shows, from the active MusicSource (spec §5.1). Step 1: the local Spotify app. -final class MusicController: ObservableObject { - static let openRefreshInterval: TimeInterval = 5 // re-read while the notch is open (volume isn't signalled) - private static let artworkCacheSize = 8 - - @Published private(set) var status: MusicSourceStatus = .notRunning - @Published private(set) var nowPlaying: NowPlaying? - @Published private(set) var artwork: NSImage? - - // Something to show: a track, playing or paused (even without the right to control it). - var hasMusic: Bool { status != .notRunning && nowPlaying != nil } - - private let source: MusicSource - private var running = false - private var refreshTimer: Timer? - private var seekThrottle = SendThrottle() - private var volumeThrottle = SendThrottle() - private var artworkCache: [URL: NSImage] = [:] - private var artworkOrder: [URL] = [] - private var artworkRequest: URL? - private var lastLogLine = "" - - init(source: MusicSource = SpotifyLocalSource()) { - self.source = source - source.onChange = { [weak self] status, track in self?.apply(status, track) } - } - - func start() { - guard !running else { return } - running = true - source.start() - } - - // "Show Notch" off: no Spotify reads at all (spec §4.3). - func stop() { - guard running else { return } - running = false - notchDidClose() - source.stop() - status = .notRunning - nowPlaying = nil - artwork = nil - artworkRequest = nil - log("stopped") - } - - // Opening reads once (which also retries a refused permission, spec §6.3), then every 5 s while open. - func notchDidOpen() { - guard running else { return } - source.refresh() - refreshTimer?.invalidate() - let timer = Timer(timeInterval: Self.openRefreshInterval, repeats: true) { [weak self] _ in - guard let self = self, self.status == .ready else { return } - self.source.refresh() - } - RunLoop.main.add(timer, forMode: .common) - refreshTimer = timer - } - - func notchDidClose() { - refreshTimer?.invalidate() - refreshTimer = nil - } - - func playPause() { source.playPause() } - - func next() { source.next() } - - func previous() { source.previous() } - - // Sliders: at most one command per 150 ms while dragging, the final value always, then a read-back. - func seek(to seconds: TimeInterval, final: Bool) { - if seekThrottle.shouldSend(final: final) { source.seek(to: seconds) } - if final { source.refresh() } - } - - func setVolume(_ volume: Int, final: Bool) { - if volumeThrottle.shouldSend(final: final) { source.setVolume(volume) } - if final { source.refresh() } - } - - func launchPlayer() { source.launchPlayer() } - - func openAutomationSettings() { - if let url = URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Automation") { - NSWorkspace.shared.open(url) - } - } - - // MARK: - Private - - private func apply(_ newStatus: MusicSourceStatus, _ track: NowPlaying?) { - guard running else { return } - status = newStatus - nowPlaying = track - loadArtwork(track?.artworkURL) - switch (newStatus, track) { - case (.notRunning, _): log("not running") - case (.permissionDenied, _): log("permission denied") - case (.ready, nil): log("nothing playing") - case (.ready, let track?): - log("\(track.isPlaying ? "playing" : "paused") \(track.trackID) vol \(track.volume.map(String.init) ?? "?")") - } - } - - // One line per actual change (the 5 s re-reads stay quiet). - private func log(_ line: String) { - guard line != lastLogLine else { return } - lastLogLine = line - fputs("[spotify] \(line)\n", stderr) - } - - private func loadArtwork(_ url: URL?) { - guard let url = url else { - artwork = nil - artworkRequest = nil - return - } - if let cached = artworkCache[url] { - artwork = cached - artworkRequest = nil - return - } - guard artworkRequest != url else { return } // already downloading - artworkRequest = url - URLSession.shared.dataTask(with: url) { [weak self] data, _, _ in - let image = data.flatMap { NSImage(data: $0) } - DispatchQueue.main.async { - guard let self = self, self.artworkRequest == url else { return } - self.artworkRequest = nil - guard let image = image else { return } - self.remember(image, for: url) - self.artwork = image - } - }.resume() - } - - private func remember(_ image: NSImage, for url: URL) { - artworkCache[url] = image - artworkOrder.removeAll { $0 == url } - artworkOrder.append(url) - if artworkOrder.count > Self.artworkCacheSize { - artworkCache[artworkOrder.removeFirst()] = nil - } - } -} -``` - -- [ ] **Step 5 : Option `showNotch` dans `Client/macos/AppSettings.swift`** - -Remplacer le commentaire de tête, l'enum `Keys`, ajouter la propriété et compléter `init` : - -```swift -// The user options, persisted in UserDefaults. Launch at login is backed by SMAppService (macOS 13+). -final class AppSettings: ObservableObject { - private enum Keys { - static let autoConnect = "autoConnect" - static let autoReconnect = "autoReconnect" - static let lastDeviceAddress = "lastDeviceAddress" - static let showNotch = "showNotch" - } -``` - -Après la propriété `autoReconnect` : - -```swift - @Published var showNotch: Bool { - didSet { defaults.set(showNotch, forKey: Keys.showNotch) } - } -``` - -Dans `init`, remplacer les lignes `register` et suivantes jusqu'à `launchAtLogin = …` exclu par : - -```swift - // Spec §4: auto-connect and auto-reconnect default on; launch at login stays off until the user asks. - // Notch spec §7: the notch is shown by default. - defaults.register(defaults: [Keys.autoConnect: true, Keys.autoReconnect: true, Keys.showNotch: true]) - autoConnect = defaults.bool(forKey: Keys.autoConnect) - autoReconnect = defaults.bool(forKey: Keys.autoReconnect) - showNotch = defaults.bool(forKey: Keys.showNotch) -``` - -- [ ] **Step 6 : Case « Afficher l'encoche » dans `Client/macos/HeadphonesMenu.swift`** - -Après `private var autoReconnectItem = NSMenuItem()` (ligne 31) : - -```swift - private var showNotchItem = NSMenuItem() -``` - -Dans `addAppSection()`, remplacer les lignes de `autoReconnectItem = …` et la boucle `for item in […]` par : - -```swift - autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } - showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } - for item in [launchAtLoginItem, autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } -``` - -À la fin de `update()`, après `autoReconnectItem.state = …` : - -```swift - showNotchItem.state = settings.showNotch ? .on : .off -``` - -- [ ] **Step 7 : Démarrer / arrêter la musique selon l'option** — remplacer `Client/macos/AppDelegate.swift` par : - -```swift -import AppKit -import Combine - -final class AppDelegate: NSObject, NSApplicationDelegate { - private let model = HeadphonesModel() - private let settings = AppSettings() - private let music = MusicController() - private let deviceWatcher = DeviceWatcher() - private var statusItemController: StatusItemController? - private var cancellables = Set() - - func applicationDidFinishLaunching(_ notification: Notification) { - model.settings = settings - statusItemController = StatusItemController(model: model, settings: settings) - - // Spotify is only read while the notch is on (notch spec §4.3). $showNotch emits the current value first. - settings.$showNotch - .receive(on: DispatchQueue.main) - .sink { [weak self] show in - if show { self?.music.start() } else { self?.music.stop() } - } - .store(in: &cancellables) - - deviceWatcher.onConnect = { [weak self] address, name in - self?.model.headsetConnectedToMac(address: address, name: name) - } - deviceWatcher.onDisconnect = { [weak self] address in - self?.model.headsetDisconnectedFromMac(address: address) - } - deviceWatcher.start() - - if settings.autoConnect { model.autoConnectOnLaunch() } - } - - func applicationWillTerminate(_ notification: Notification) { - model.disconnect() - } -} -``` - -- [ ] **Step 8 : Autorisations** — remplacer `Client/macos/SonyHeadphonesClient.entitlements` par : - -```xml - - - - - com.apple.security.app-sandbox - - com.apple.security.device.bluetooth - - com.apple.security.files.user-selected.read-only - - com.apple.security.network.client - - com.apple.security.temporary-exception.apple-events - - com.spotify.client - - com.apple.security.temporary-exception.files.home-relative-path.read-write - - /Library/Logs/SonyBridge/ - - - -``` - -Dans `Client/macos/info.plist`, après la valeur de `NSBluetoothAlwaysUsageDescription` : - -```xml - NSAppleEventsUsageDescription - SonyBridge shows and controls the music playing in Spotify. -``` - -Ajouter à la fin de `Client/macos/en.lproj/InfoPlist.strings` : - -``` -"NSAppleEventsUsageDescription" = "SonyBridge shows and controls the music playing in Spotify."; -``` - -Ajouter à la fin de `Client/macos/fr.lproj/InfoPlist.strings` : - -``` -"NSAppleEventsUsageDescription" = "SonyBridge affiche et contrôle la musique en cours dans Spotify."; -``` - -- [ ] **Step 9 : Traduction** — dans `Client/macos/fr.lproj/Localizable.strings`, après la ligne - `"Reconnect Automatically" = "Reconnexion automatique";` : - -``` -"Show Notch" = "Afficher l’encoche"; -``` - -- [ ] **Step 10 : Tests et build** - -Run : `make test && make` -Attendu : toutes les suites passent, `Localization: 55 keys, all translated`, build `OK` sans avertissement. -Vérifier aussi les droits signés : `codesign -d --entitlements - build/SonyBridge.app` doit lister -`com.apple.security.network.client` et `com.apple.security.temporary-exception.apple-events`. - -- [ ] **Step 11 : Vérification avec l'utilisateur** (l'agent lance `make run`, l'utilisateur regarde) - -Lancer : `make run`. Suivre le journal : `tail -f ~/Library/Logs/SonyBridge/app.log | grep spotify`. -Demander à l'utilisateur, Spotify ouvert et en lecture avant le lancement : -1. macOS demande si « SonyBridge » peut contrôler « Spotify » → Autoriser. Attendu dans le journal : - `[spotify] playing spotify:track:… vol NN`. -2. Pause dans Spotify → `[spotify] paused spotify:track:…`. Morceau suivant → nouvel identifiant. -3. Quitter Spotify → `[spotify] not running`. Rouvrir Spotify et lancer un morceau → `playing …`. - SonyBridge ne doit **jamais** rouvrir Spotify tout seul après l'avoir quitté. -4. Menu › Options de SonyBridge › décocher « Afficher l'encoche » → `[spotify] stopped`, puis plus aucune ligne - en changeant de morceau. Recocher → une ligne `playing …`. -5. (Facultatif, par l'utilisateur) refus : `tccutil reset AppleEvents com.semvis123.SonyHeadphonesClient`, - `make run`, cliquer « Ne pas autoriser » → `[spotify] permission denied`. Réautoriser ensuite dans Réglages - Système › Confidentialité et sécurité › Automatisation › SonyBridge › Spotify. - -Note : l'autorisation peut être redemandée après chaque `make` (signature ad hoc qui change, spec §9). - -- [ ] **Step 12 : Commit (par l'utilisateur)** - -```bash -git add Client/macos && git commit -m "feat(music): local Spotify source, music controller and Show Notch option" -m "Co-Authored-By: Claude Opus 5 " -``` - ---- - -### Task 4: Panneau de l'encoche — placement, états au repos, survol - -**Files:** -- Create: `Client/macos/Notch/NotchPanel.swift`, `Client/macos/Notch/NotchView.swift`, - `Client/macos/Notch/NotchController.swift` -- Modify: `Client/macos/AppDelegate.swift`, `Client/macos/fr.lproj/Localizable.strings` - -**Interfaces:** -- Consumes : `NotchGeometry`, `ScreenMetrics`, `NotchRestingState`, `NotchTab`, `NotchContent` (tâche 1) ; - `MusicController` (`status`, `nowPlaying`, `artwork`, `hasMusic`, `notchDidOpen()`, `notchDidClose()`) (tâche 3) ; - `AppSettings.showNotch` (tâche 3) ; existant : `HeadphonesModel` (`connectionState`, `connected`, `mode`). -- Produces : - - `final class NotchViewState: ObservableObject { @Published var isOpen: Bool; @Published var resting: NotchRestingState; @Published var tab: NotchTab; @Published var restingSize: CGSize; @Published var openSize: CGSize; @Published var notchHeight: CGFloat }` - - `struct NotchView: View { init(state:model:music:selectTab:) }` avec un `tabContent` que les tâches 5 et 6 complètent - - `struct ArtworkView: View { let image: NSImage?; let size: CGFloat; let cornerRadius: CGFloat }` (réutilisée en tâche 6) - - `final class NotchController { init(model: HeadphonesModel, music: MusicController, settings: AppSettings) }` - -- [ ] **Step 1 : Écrire `Client/macos/Notch/NotchPanel.swift`** - -```swift -import AppKit -import SwiftUI - -// Borderless transparent panel above the menu bar (spec §4.3). It never becomes key or main, so the frontmost -// app keeps the keyboard; clicks still reach its controls through NotchHostingView. -final class NotchPanel: NSPanel { - // A factory rather than a custom init: NSWindow subclasses that declare their own initializer must also - // deal with NSWindow's required/unavailable initializers. - static func make() -> NotchPanel { - let panel = NotchPanel(contentRect: .zero, styleMask: [.borderless, .nonactivatingPanel], - backing: .buffered, defer: false) - panel.isOpaque = false - panel.backgroundColor = .clear - panel.hasShadow = false - panel.isMovable = false - panel.hidesOnDeactivate = false - panel.level = NSWindow.Level(rawValue: NSWindow.Level.mainMenu.rawValue + 2) - panel.collectionBehavior = [.canJoinAllSpaces, .stationary, .fullScreenAuxiliary, .ignoresCycle] - return panel - } - - override var canBecomeKey: Bool { false } - override var canBecomeMain: Bool { false } -} - -// Reports the pointer entering or leaving the panel, whichever app is active. -final class NotchContainerView: NSView { - var onHoverChange: (() -> Void)? - - override func updateTrackingAreas() { - super.updateTrackingAreas() - trackingAreas.forEach { removeTrackingArea($0) } - addTrackingArea(NSTrackingArea(rect: .zero, options: [.mouseEnteredAndExited, .activeAlways, .inVisibleRect], - owner: self, userInfo: nil)) - } - - override func mouseEntered(with event: NSEvent) { onHoverChange?() } - override func mouseExited(with event: NSEvent) { onHoverChange?() } -} - -// The panel is never key: without this, the first click would only be swallowed by the window. -final class NotchHostingView: NSHostingView { - override func acceptsFirstMouse(for event: NSEvent?) -> Bool { true } -} -``` - -- [ ] **Step 2 : Écrire `Client/macos/Notch/NotchView.swift`** - -```swift -import AppKit -import SwiftUI - -// Written by NotchController, read by NotchView. -final class NotchViewState: ObservableObject { - @Published var isOpen = false - @Published var resting: NotchRestingState = .empty - @Published var tab: NotchTab = .music - @Published var restingSize: CGSize = .zero - @Published var openSize: CGSize = .zero - @Published var notchHeight: CGFloat = 32 -} - -// Square top (it merges with the notch), rounded bottom corners. -struct NotchShape: Shape { - var bottomRadius: CGFloat - - var animatableData: CGFloat { - get { bottomRadius } - set { bottomRadius = newValue } - } - - func path(in rect: CGRect) -> Path { - let radius = min(bottomRadius, rect.width / 2, rect.height) - var path = Path() - path.move(to: CGPoint(x: rect.minX, y: rect.minY)) - path.addLine(to: CGPoint(x: rect.maxX, y: rect.minY)) - path.addLine(to: CGPoint(x: rect.maxX, y: rect.maxY - radius)) - path.addQuadCurve(to: CGPoint(x: rect.maxX - radius, y: rect.maxY), control: CGPoint(x: rect.maxX, y: rect.maxY)) - path.addLine(to: CGPoint(x: rect.minX + radius, y: rect.maxY)) - path.addQuadCurve(to: CGPoint(x: rect.minX, y: rect.maxY - radius), control: CGPoint(x: rect.minX, y: rect.maxY)) - path.closeSubpath() - return path - } -} - -// Root view of the notch panel (spec §4): the resting strip, or the open panel with its two tabs. The panel -// can be larger than the shape while it animates; the shape stays centred at the top. -struct NotchView: View { - @ObservedObject var state: NotchViewState - @ObservedObject var model: HeadphonesModel - @ObservedObject var music: MusicController - let selectTab: (NotchTab) -> Void - - var body: some View { - let size = state.isOpen ? state.openSize : state.restingSize - ZStack(alignment: .top) { - NotchShape(bottomRadius: state.isOpen ? 22 : 10).fill(Color.black) - if state.isOpen { - openContent - .padding(.top, state.notchHeight) - .transition(.opacity) - } else { - restingContent - .transition(.opacity) - } - } - .frame(width: size.width, height: size.height) - .frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) - .environment(\.colorScheme, .dark) - } - - // MARK: - Resting (spec §4.1) - - private var restingContent: some View { - HStack(spacing: 0) { - leadingItem.frame(width: NotchGeometry.sideExtension) - Spacer(minLength: 0) - trailingItem.frame(width: NotchGeometry.sideExtension) - } - .frame(height: state.notchHeight) - } - - @ViewBuilder private var leadingItem: some View { - switch state.resting { - case .musicAndHeadphones, .musicOnly: - ArtworkView(image: music.artwork, size: 20, cornerRadius: 5) - case .headphonesOnly: - Image(systemName: "headphones").font(.system(size: 13)).foregroundColor(.white) - case .empty: - EmptyView() - } - } - - @ViewBuilder private var trailingItem: some View { - switch state.resting { - case .musicAndHeadphones, .headphonesOnly: - Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13)).foregroundColor(.white) - case .musicOnly: - LevelBars(animating: music.nowPlaying?.isPlaying == true) - case .empty: - EmptyView() - } - } - - private static func modeSymbol(_ mode: SHCAmbientMode) -> String { - switch mode { - case .noiseCanceling: return "headphones.circle.fill" - case .ambientSound: return "ear.and.waveform" - default: return "circle.slash" - } - } - - // MARK: - Open (spec §4.2) - - private var openContent: some View { - VStack(spacing: 10) { - tabBar - tabContent.frame(maxWidth: .infinity, maxHeight: .infinity, alignment: .top) - } - .padding(.horizontal, 18) - .padding(.bottom, 14) - } - - private var tabBar: some View { - HStack(spacing: 18) { - tabButton(.music, title: tr("Music")) - tabButton(.headphones, title: tr("Headphones")) - } - .padding(.top, 6) - } - - private func tabButton(_ tab: NotchTab, title: String) -> some View { - let selected = state.tab == tab - return Button { selectTab(tab) } label: { - Text(title) - .font(.system(size: 12, weight: selected ? .semibold : .regular)) - .foregroundColor(selected ? .white : .gray) - .padding(.bottom, 3) - .overlay(alignment: .bottom) { - if selected { Rectangle().fill(Color.white).frame(height: 2) } - } - } - .buttonStyle(.plain) - } - - @ViewBuilder private var tabContent: some View { - switch state.tab { - case .music: Spacer() // Task 6: MusicTab - case .headphones: Spacer() // Task 5: HeadphonesTab - } - } -} - -// Album artwork, or a placeholder note while it loads (or for tracks without one). -struct ArtworkView: View { - let image: NSImage? - let size: CGFloat - let cornerRadius: CGFloat - - var body: some View { - Group { - if let image = image { - Image(nsImage: image).resizable().aspectRatio(contentMode: .fill) - } else { - ZStack { - Color(white: 0.2) - Image(systemName: "music.note").font(.system(size: size * 0.45)).foregroundColor(.gray) - } - } - } - .frame(width: size, height: size) - .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) - } -} - -// Four small bars, moving while music plays (resting state 2), frozen when paused. -struct LevelBars: View { - let animating: Bool - - var body: some View { - TimelineView(.animation(minimumInterval: 1.0 / 20, paused: !animating)) { context in - let time = context.date.timeIntervalSinceReferenceDate - HStack(alignment: .bottom, spacing: 2) { - ForEach(0..<4, id: \.self) { index in - Capsule() - .fill(Color.green) - .frame(width: 3, height: animating ? 4 + 10 * abs(sin(time * 3 + Double(index) * 1.3)) : 4) - } - } - .frame(height: 14, alignment: .bottom) - } - } -} -``` - -- [ ] **Step 3 : Écrire `Client/macos/Notch/NotchController.swift`** - -```swift -import AppKit -import Combine -import SwiftUI - -// Owns the notch panel (spec §4.3): picks the screen, places and resizes the panel, opens it on hover and -// follows the "Show Notch" option. -final class NotchController { - private static let shrinkDelay: TimeInterval = 0.35 // lets the closing animation end before the panel shrinks - - private let model: HeadphonesModel - private let music: MusicController - private let settings: AppSettings - private let state = NotchViewState() - private let panel = NotchPanel.make() - private var geometry: NotchGeometry? - private var lastChosenTab: NotchTab? - private var hoverTimer: Timer? - private var shrinkWork: DispatchWorkItem? - private var cancellables = Set() - - init(model: HeadphonesModel, music: MusicController, settings: AppSettings) { - self.model = model - self.music = music - self.settings = settings - - let container = NotchContainerView() - let host = NotchHostingView(rootView: NotchView(state: state, model: model, music: music, - selectTab: { [weak self] tab in self?.select(tab) })) - host.autoresizingMask = [.width, .height] - container.addSubview(host) - container.onHoverChange = { [weak self] in self?.scheduleHoverCheck() } - panel.contentView = container - - NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification) - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.relayout() } - .store(in: &cancellables) - // receive(on:) hops after @Published stored the new value, so the sinks read current state. - settings.$showNotch - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.relayout() } - .store(in: &cancellables) - model.$connectionState.combineLatest(music.$status, music.$nowPlaying) - .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.updateResting() } - .store(in: &cancellables) - } - - // MARK: - Placement - - private func relayout() { - guard settings.showNotch, let screen = Self.preferredScreen() else { - geometry = nil - if state.isOpen { - state.isOpen = false - music.notchDidClose() - } - shrinkWork?.cancel() - panel.orderOut(nil) - return - } - let geometry = NotchGeometry(screen: ScreenMetrics(screen)) - self.geometry = geometry - state.notchHeight = geometry.notch.height - state.openSize = geometry.open.size - if state.isOpen { panel.setFrame(geometry.open, display: true) } - updateResting() - } - - // The built-in notched screen if there is one, else the primary screen (the one with the menu bar). - private static func preferredScreen() -> NSScreen? { - NSScreen.screens.first { $0.safeAreaInsets.top > 0 } ?? NSScreen.screens.first - } - - private func updateResting() { - guard let geometry = geometry else { return } - let resting = NotchContent.restingState(hasMusic: music.hasMusic, headphonesConnected: model.connected) - let frame = geometry.restingFrame(for: resting) - if state.resting != resting || (frame != nil && state.restingSize != frame?.size) { - withAnimation(animation) { - state.resting = resting - if let frame = frame { state.restingSize = frame.size } - } - } - guard !state.isOpen else { return } // close() re-applies the resting frame - if let frame = frame { - setPanelFrame(frame) - panel.orderFrontRegardless() - } else { - hidePanel(after: panel.isVisible ? Self.shrinkDelay : 0) - } - } - - // Grows at once (the shape then animates inside the larger panel) or shrinks once the animation is over, - // so the transparent panel never blocks the menu bar longer than needed. - private func setPanelFrame(_ target: CGRect) { - shrinkWork?.cancel() - let current = panel.frame - if !panel.isVisible || (target.width >= current.width && target.height >= current.height) { - panel.setFrame(target, display: true) - } else { - let work = DispatchWorkItem { [weak self] in self?.panel.setFrame(target, display: true) } - shrinkWork = work - DispatchQueue.main.asyncAfter(deadline: .now() + Self.shrinkDelay, execute: work) - } - } - - private func hidePanel(after delay: TimeInterval) { - shrinkWork?.cancel() - let work = DispatchWorkItem { [weak self] in self?.panel.orderOut(nil) } - shrinkWork = work - DispatchQueue.main.asyncAfter(deadline: .now() + delay, execute: work) - } - - // MARK: - Hover - - // Enter/exit events only schedule a check; the check reads the real pointer position, so a missed event - // can't leave the notch stuck open or closed. - private func scheduleHoverCheck() { - hoverTimer?.invalidate() - let inside = hoverZone.contains(NSEvent.mouseLocation) - let delay = inside ? NotchContent.openDelay : NotchContent.closeDelay - let timer = Timer(timeInterval: delay, repeats: false) { [weak self] _ in self?.hoverCheck() } - RunLoop.main.add(timer, forMode: .common) - hoverTimer = timer - } - - private func hoverCheck() { - let inside = panel.isVisible && hoverZone.contains(NSEvent.mouseLocation) - if inside && !state.isOpen { - open() - } else if !inside && state.isOpen { - close() - } - } - - private var hoverZone: CGRect { - guard let geometry = geometry else { return .zero } - return state.isOpen ? geometry.open : (geometry.restingFrame(for: state.resting) ?? .zero) - } - - private func open() { - guard let geometry = geometry else { return } - state.tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) - setPanelFrame(geometry.open) - panel.orderFrontRegardless() - withAnimation(animation) { state.isOpen = true } - music.notchDidOpen() - } - - private func close() { - withAnimation(animation) { state.isOpen = false } - music.notchDidClose() - updateResting() - } - - private func select(_ tab: NotchTab) { - lastChosenTab = tab - state.tab = tab - } - - // Spring, or a short fade-like ease when "Reduce motion" is on. - private var animation: Animation { - NSWorkspace.shared.accessibilityDisplayShouldReduceMotion - ? .easeInOut(duration: 0.15) - : .spring(response: 0.35, dampingFraction: 0.82) - } -} - -private extension ScreenMetrics { - init(_ screen: NSScreen) { - self.init(frame: screen.frame, - safeAreaTop: screen.safeAreaInsets.top, - auxiliaryTopLeft: screen.auxiliaryTopLeftArea, - auxiliaryTopRight: screen.auxiliaryTopRightArea, - menuBarHeight: screen.frame.maxY - screen.visibleFrame.maxY) - } -} -``` - -Si le SDK déclare `auxiliaryTopLeftArea` / `auxiliaryTopRightArea` comme `NSRect` non optionnel, passer -`screen.auxiliaryTopLeftArea.isEmpty ? nil : screen.auxiliaryTopLeftArea` (idem à droite). - -- [ ] **Step 4 : Créer le contrôleur** — dans `Client/macos/AppDelegate.swift`, après - `private var statusItemController: StatusItemController?` : - -```swift - private var notchController: NotchController? -``` - -et après `statusItemController = StatusItemController(model: model, settings: settings)` : - -```swift - notchController = NotchController(model: model, music: music, settings: settings) -``` - -- [ ] **Step 5 : Traductions** — ajouter à la fin de `Client/macos/fr.lproj/Localizable.strings` : - -``` - -/* Notch (Notch/*.swift) */ -"Music" = "Musique"; -"Headphones" = "Casque"; -``` - -- [ ] **Step 6 : Tests et build** - -Run : `make test && make` -Attendu : toutes les suites passent, `Localization: 57 keys, all translated`, build `OK` sans avertissement. - -- [ ] **Step 7 : Vérification avec l'utilisateur** (l'agent lance `make run`) - -Demander à l'utilisateur de regarder : -1. Casque connecté, Spotify fermé → autour de l'encoche : icône casque à gauche, icône du mode à droite (état 3). -2. Spotify en lecture → pochette à gauche, mode à droite (état 1). -3. Menu › Déconnecter → pochette + petites barres vertes qui bougent ; pause dans Spotify → barres figées (état 2). -4. Spotify quitté et casque déconnecté → encoche nue ; le survol l'ouvre quand même (état 4). -5. Survol : ouverture après un court instant, fermeture en sortant, pas de clignotement en passant vite - par-dessus ; pendant que l'encoche est ouverte, taper dans une autre app (TextEdit) : le texte va bien à - cette app. -6. Onglets : cliquer « Casque » / « Musique » ; le contenu est vide pour l'instant (normal, tâches 5 et 6) ; - après un choix, la réouverture revient sur le dernier onglet. -7. Barre des menus : encoche fermée, les menus d'app et les icônes de la barre à côté de l'encoche restent - cliquables. -8. Écran externe (ou capot fermé) : pastille noire en haut au centre de l'écran principal ; dans l'état 4, - plus de pastille. Débrancher → l'encoche revient sur l'écran intégré. -9. Options › décocher « Afficher l'encoche » → elle disparaît ; recocher → elle revient. - -- [ ] **Step 8 : Commit (par l'utilisateur)** - -```bash -git add Client/macos && git commit -m "feat(notch): notch panel with resting states and hover to open" -m "Co-Authored-By: Claude Opus 5 " -``` - ---- - -### Task 5: Onglet Casque - -**Files:** -- Create: `Client/macos/Notch/HeadphonesTab.swift` -- Modify: `Client/macos/Notch/NotchView.swift` (`tabContent`), `Client/macos/fr.lproj/Localizable.strings` - -**Interfaces:** -- Consumes : `HeadphonesModel` (`connectionState`, `mode`, `ambientLevel`, `maxAmbientLevel`, `focusOnVoice`, - `setMode(_:)`, `setLevel(_:final:)`, `setFocusOnVoice(_:)`, `connect()`) ; `NotchView.tabContent` (tâche 4). -- Produces : `struct HeadphonesTab: View { init(model: HeadphonesModel) }` - -- [ ] **Step 1 : Écrire `Client/macos/Notch/HeadphonesTab.swift`** - -```swift -import AppKit -import SwiftUI - -// Notch tab: NC / Ambient / Off, ambient level and Focus on Voice (spec §4.2). It calls the same model methods -// as the menu, so the poll guard and the send throttle apply here too, and both stay in sync. -struct HeadphonesTab: View { - @ObservedObject var model: HeadphonesModel - - var body: some View { - switch model.connectionState { - case .connected: - controls - case .connecting: - Text(tr("Connecting…")).font(.system(size: 12)).foregroundColor(.gray).padding(.top, 16) - case .disconnected: - VStack(spacing: 10) { - Text(tr("Not connected")).font(.system(size: 12)).foregroundColor(.gray) - Button(tr("Connect…")) { - NSApp.activate(ignoringOtherApps: true) // the fallback Bluetooth picker is a modal window - model.connect() - } - .controlSize(.small) - } - .padding(.top, 16) - } - } - - private var controls: some View { - let ambient = model.mode == .ambientSound - return VStack(spacing: 12) { - Picker("", selection: Binding(get: { model.mode }, set: { model.setMode($0) })) { - Text(tr("Noise Canceling")).tag(SHCAmbientMode.noiseCanceling) - Text(tr("Ambient Sound")).tag(SHCAmbientMode.ambientSound) - Text(tr("Off")).tag(SHCAmbientMode.off) - } - .pickerStyle(.segmented) - .labelsHidden() - - HStack(spacing: 8) { - Text(tr("Level")).font(.system(size: 12)) - Slider( - value: Binding(get: { Double(model.ambientLevel) }, - set: { model.setLevel(Int($0.rounded()), final: false) }), - in: 1...Double(max(model.maxAmbientLevel, 2)), - step: 1, - onEditingChanged: { editing in - if !editing { model.setLevel(model.ambientLevel, final: true) } - } - ) - .controlSize(.small) - Text(verbatim: "\(model.ambientLevel)") - .font(.system(size: 11, weight: .medium).monospacedDigit()) - .foregroundColor(.gray) - .frame(width: 20, alignment: .trailing) - } - .disabled(!ambient) - .opacity(ambient ? 1 : 0.4) - - HStack { - Text(tr("Focus on Voice")).font(.system(size: 12)) - Spacer() - Toggle("", isOn: Binding(get: { model.focusOnVoice }, set: { model.setFocusOnVoice($0) })) - .labelsHidden() - .toggleStyle(.switch) - .controlSize(.mini) - } - .disabled(!ambient) - .opacity(ambient ? 1 : 0.4) - } - } -} -``` - -- [ ] **Step 2 : Brancher l'onglet** — dans `Client/macos/Notch/NotchView.swift`, `tabContent`, remplacer la ligne - `case .headphones: Spacer() // Task 5: HeadphonesTab` par : - -```swift - case .headphones: HeadphonesTab(model: model) -``` - -- [ ] **Step 3 : Traduction** — ajouter à la fin de `Client/macos/fr.lproj/Localizable.strings` : - -``` -"Level" = "Niveau"; -``` - -- [ ] **Step 4 : Tests et build** - -Run : `make test && make` -Attendu : toutes les suites passent, `Localization: 58 keys, all translated`, build `OK` sans avertissement. - -- [ ] **Step 5 : Vérification avec l'utilisateur, sur le WH-1000XM6** (l'agent lance `make run DEBUG=1`) - -1. Onglet Casque, casque connecté : choisir Réduction de bruit / Son ambiant / Désactivé → le casque change ; le - menu (coche) et l'icône de la barre suivent. -2. Bouton NC du casque → l'encoche suit en ~2 s (ouverte ou non). -3. En Son ambiant : glisser le niveau → le casque suit sans à-coups ; « Focalisation sur la voix » bascule. - Hors Son ambiant, curseur et interrupteur sont grisés. -4. Menu › Déconnecter → l'onglet affiche « Non connecté » et « Connecter… » ; le bouton reconnecte le casque. -5. Le journal (`build/app.log`) ne montre que des trames déjà connues (`68 17`/`68 19` NC/ASM), toutes acquittées. - -- [ ] **Step 6 : Commit (par l'utilisateur)** - -```bash -git add Client/macos && git commit -m "feat(notch): headphones tab" -m "Co-Authored-By: Claude Opus 5 " -``` - ---- - -### Task 6: Onglet Musique + README + vérification finale - -**Files:** -- Create: `Client/macos/Notch/MusicTab.swift` -- Modify: `Client/macos/Notch/NotchView.swift` (`tabContent`), `Client/macos/fr.lproj/Localizable.strings`, - `README.md` - -**Interfaces:** -- Consumes : `MusicController` (`status`, `nowPlaying`, `artwork`, `playPause()`, `next()`, `previous()`, - `seek(to:final:)`, `setVolume(_:final:)`, `launchPlayer()`, `openAutomationSettings()`) (tâche 3) ; - `NowPlaying`, `PlaybackClock` (tâche 2) ; `ArtworkView`, `NotchView.tabContent` (tâche 4). -- Produces : `struct MusicTab: View { init(music: MusicController) }` - -- [ ] **Step 1 : Écrire `Client/macos/Notch/MusicTab.swift`** - -```swift -import SwiftUI - -// Notch tab: the track, its controls, Spotify's volume and the device it plays on (spec §4.2). -struct MusicTab: View { - @ObservedObject var music: MusicController - @State private var seekValue: Double? // while dragging the progress bar - @State private var volumeValue: Double? // while dragging the volume slider - - // Explicit: the private @State properties would otherwise make the memberwise init private. - init(music: MusicController) { - _music = ObservedObject(wrappedValue: music) - } - - var body: some View { - switch music.status { - case .notRunning: - message(tr("Spotify isn't open"), button: tr("Open Spotify")) { music.launchPlayer() } - case .permissionDenied: - message(tr("SonyBridge isn't allowed to control Spotify."), button: tr("Open Settings")) { - music.openAutomationSettings() - } - case .ready: - if let track = music.nowPlaying { - player(track) - } else { - message(tr("Nothing playing"), button: nil) {} - } - } - } - - private func message(_ text: String, button: String?, action: @escaping () -> Void) -> some View { - VStack(spacing: 10) { - Text(text).font(.system(size: 12)).foregroundColor(.gray).multilineTextAlignment(.center) - if let button = button { - Button(button, action: action).controlSize(.small) - } - } - .frame(maxWidth: .infinity) - .padding(.top, 16) - } - - private func player(_ track: NowPlaying) -> some View { - VStack(spacing: 8) { - HStack(spacing: 12) { - ArtworkView(image: music.artwork, size: 56, cornerRadius: 9) - VStack(alignment: .leading, spacing: 2) { - Text(track.title).font(.system(size: 13, weight: .semibold)).lineLimit(1) - Text(track.artist).font(.system(size: 11)).foregroundColor(.gray).lineLimit(1) - progress(track) - } - } - HStack(spacing: 28) { - controlButton("backward.fill", label: tr("Previous track")) { music.previous() } - controlButton(track.isPlaying ? "pause.fill" : "play.fill", size: 18, label: tr("Play or pause")) { - music.playPause() - } - controlButton("forward.fill", label: tr("Next track")) { music.next() } - } - HStack(spacing: 6) { - Image(systemName: "speaker.fill").font(.system(size: 9)).foregroundColor(.gray) - volumeSlider(track).frame(width: 110) - Image(systemName: "speaker.wave.3.fill").font(.system(size: 9)).foregroundColor(.gray) - Spacer() - Image(systemName: "hifispeaker").font(.system(size: 10)).foregroundColor(.green) - Text(track.deviceName ?? tr("This Mac")).font(.system(size: 10)).foregroundColor(.green).lineLimit(1) - } - } - } - - // Redrawn once a second, only while the notch is open (this view only exists then). - private func progress(_ track: NowPlaying) -> some View { - TimelineView(.periodic(from: .now, by: 1)) { context in - let position = seekValue ?? PlaybackClock.position(of: track, at: context.date) - VStack(spacing: 1) { - Slider( - value: Binding(get: { position }, set: { value in - seekValue = value - music.seek(to: value, final: false) - }), - in: 0...max(track.duration, 1), - onEditingChanged: { editing in - if !editing, let value = seekValue { - music.seek(to: value, final: true) - seekValue = nil - } - } - ) - .controlSize(.mini) - .disabled(!track.capabilities.canSeek || track.duration <= 0) - HStack { - Text(verbatim: PlaybackClock.format(position)) - Spacer() - Text(verbatim: "−" + PlaybackClock.format(max(0, track.duration - position))) - } - .font(.system(size: 9).monospacedDigit()) - .foregroundColor(.gray) - } - } - } - - private func volumeSlider(_ track: NowPlaying) -> some View { - Slider( - value: Binding(get: { volumeValue ?? Double(track.volume ?? 0) }, set: { value in - volumeValue = value - music.setVolume(Int(value.rounded()), final: false) - }), - in: 0...100, - onEditingChanged: { editing in - if !editing, let value = volumeValue { - music.setVolume(Int(value.rounded()), final: true) - volumeValue = nil - } - } - ) - .controlSize(.mini) - .disabled(!track.capabilities.canSetVolume || track.volume == nil) - } - - private func controlButton(_ symbol: String, size: CGFloat = 14, label: String, - action: @escaping () -> Void) -> some View { - Button(action: action) { - Image(systemName: symbol) - .font(.system(size: size)) - .foregroundColor(.white) - .frame(width: 28, height: 24) - } - .buttonStyle(.plain) - .accessibilityLabel(label) - } -} -``` - -- [ ] **Step 2 : Brancher l'onglet** — dans `Client/macos/Notch/NotchView.swift`, `tabContent`, remplacer la ligne - `case .music: Spacer() // Task 6: MusicTab` par : - -```swift - case .music: MusicTab(music: music) -``` - -- [ ] **Step 3 : Traductions** — ajouter à la fin de `Client/macos/fr.lproj/Localizable.strings` : - -``` -"Spotify isn't open" = "Spotify n’est pas ouvert"; -"Open Spotify" = "Ouvrir Spotify"; -"SonyBridge isn't allowed to control Spotify." = "SonyBridge n’a pas l’autorisation de contrôler Spotify."; -"Open Settings" = "Ouvrir les réglages"; -"Nothing playing" = "Rien en cours de lecture"; -"This Mac" = "Ce Mac"; -"Previous track" = "Morceau précédent"; -"Play or pause" = "Lecture ou pause"; -"Next track" = "Morceau suivant"; -``` - -- [ ] **Step 4 : README** — dans `README.md` : - -Après le bloc **Sound modes** (après la ligne « 🔄 **Live button sync** … »), insérer : - -```markdown - -**Notch** -- 🏝️ **Notch panel** — hover the MacBook notch (or a black pill at the top of screens without one) to control the music playing in **Spotify** (artwork, play/pause, previous/next, seek, volume) and switch Noise Cancelling / Ambient Sound / Off. Turn it off with **Show Notch** under **SonyBridge Options** -``` - -Après le paragraphe « 💡 On first launch, macOS asks for **Bluetooth permission** … », insérer : - -```markdown -> -> 🎵 With the notch on, macOS also asks whether SonyBridge may **control Spotify** — allow it to see and -> control your music from the notch (Spotify's own desktop app, no account needed). -``` - -Dans **Usage**, remplacer la ligne « - turn **Launch at Login**, **Connect Automatically**, and **Reconnect -Automatically** on or off under **SonyBridge Options**; » par : - -```markdown -- hover the **notch** to control Spotify and switch sound modes without opening the menu; -- turn **Launch at Login**, **Connect Automatically**, **Reconnect Automatically**, and **Show Notch** on or off under **SonyBridge Options**; -``` - -- [ ] **Step 5 : Tests, build et build de release** - -Run : `make test && make && make release` -Attendu : toutes les suites passent, `Localization: 67 keys, all translated`, les deux builds `OK` sans -avertissement ; `lipo -archs build/SonyBridge.app/Contents/MacOS/SonyBridge` → `x86_64 arm64`. - -- [ ] **Step 6 : Vérification finale avec l'utilisateur** (spec §8, l'agent lance `make run DEBUG=1`) - -1. Survol : ouverture, fermeture, pas de clignotement ; l'app active garde le clavier. -2. Les 4 états au repos. -3. Onglet Casque : changer de mode → le casque change, le menu et l'icône suivent ; bouton NC du casque → - l'encoche suit. -4. Onglet Musique : lecture/pause, précédent, suivant, glisser la position (le temps affiché suit, Spotify saute - au bon endroit), volume (Spotify suit) ; changer de morceau dans Spotify → l'encoche suit (titre, pochette). -5. Autorisation Spotify ; refus → message + « Ouvrir les réglages » (ouvre Automatisation). -6. Spotify fermé → « Spotify n'est pas ouvert » + « Ouvrir Spotify » ; SonyBridge ne relance jamais Spotify tout seul. -7. Écran externe, capot fermé, rebranchement : l'encoche se replace. -8. « Afficher l'encoche » décochée → plus d'encoche et plus de ligne `[spotify]` dans le journal ; recochée → elle revient. - -- [ ] **Step 7 : Commit (par l'utilisateur)** - -```bash -git add Client/macos README.md && git commit -m "feat(notch): music tab and README" -m "Co-Authored-By: Claude Opus 5 " -``` diff --git a/docs/superpowers/specs/2026-09-10-menu-bar-app-design.md b/docs/superpowers/specs/2026-09-10-menu-bar-app-design.md deleted file mode 100644 index 5a4b6e98..00000000 --- a/docs/superpowers/specs/2026-09-10-menu-bar-app-design.md +++ /dev/null @@ -1,254 +0,0 @@ -# SonyBridge dans la barre des menus — spec de design - -- **Date :** 2026-09-10 -- **Statut :** validé en discussion, à relire avant le plan d'implémentation -- **Casque de référence :** WH-1000XM6 (firmware 3.1.5, protocole v2) - -## 1. Objectif - -Transformer SonyBridge, aujourd'hui une app à fenêtre, en **app de barre des menus** sobre, dans l'esprit -des menus système d'Apple (Bluetooth, Wi-Fi). L'app donne accès à toutes les fonctions déjà gérées, et -corrige ce qui est faux sur le WH-1000XM6. - -## 2. Périmètre - -**Inclus** -- Toutes les fonctions existantes, dans un menu natif : mode NC / Son ambiant / Désactivé, niveau ambiant, - focalisation sur la voix, égaliseur (presets + manuel), DSEE, Speak-to-Chat, volume adaptatif, arrêt - automatique, batterie, codec, firmware. -- Les corrections XM6 : relecture de l'état NC/Ambiant, égaliseur 10 bandes. -- Trois options activables : lancer à l'ouverture de session, connexion automatique, reconnexion automatique. -- Un build par script (`make`), sans Xcode, et la CI correspondante. -- Le français et l'anglais (mécanisme de traduction existant). - -**Exclu** (projets séparés, plus tard) -- Les fonctions du XM6 encore inconnues du projet (multipoint, optimiseur NC, commandes tactiles…), qui - demandent de la rétro-ingénierie. -- L'écoute des notifications que le casque envoie de lui-même : on garde la relecture périodique. -- La mise à jour des captures d'écran du README et du site (à refaire après l'implémentation). - -## 3. Décisions - -| Sujet | Décision | Raison | -|---|---|---| -| Forme de l'interface | Menu natif (maquette « B ») | Le plus proche des menus système d'Apple | -| Égaliseur manuel | Curseurs dans le sous-menu « Égaliseur », sous les presets (option « 1 ») | Tout reste dans le menu, sans fenêtre en plus | -| Technique | `NSStatusItem` + `NSMenu` (AppKit), vues SwiftUI (`NSHostingView`) pour les lignes riches | `MenuBarExtra` n'accepte pas de curseurs en style menu ; un popover serait un faux menu | -| Icône de la barre | Monochrome, une par mode, grisée si déconnecté | Mode visible d'un coup d'œil, style système | -| Build | Script + `Makefile`, suppression du `.xcodeproj` | Pas de Xcode sur la machine de dev ; une seule façon de compiler | -| Version minimale | macOS 13 (au lieu de 11) | `SMAppService` pour le lancement à l'ouverture de session | - -## 4. Structure du menu - -``` -┌ WH-1000XM6 68 % ▭ ← en-tête (vue SwiftUI) -│ Connecté · AAC (ou « Connexion… » / « Non connecté ») -│ ⚠︎ ← seulement s'il y a une erreur -├────────── -│ Contrôle du son ambiant ← titre de section (inactif) -│ ◉ Réduction de bruit ← choix exclusifs -│ ◉ Son ambiant -│ ─────●───── 10 ← curseur 1…20 (visible en Son ambiant) -│ Focalisation sur la voix [ ] ← interrupteur (visible en Son ambiant) -│ ◉ Désactivé -├────────── -│ Égaliseur Graves › -│ ✓ Désactivé / Brillant / Dynamique / Doux / Détendu / Voix / Aigus / Graves / Parole / Manuel -│ ────────── -│ [10 curseurs verticaux] ou [5 curseurs + Clear Bass] ← actifs si « Manuel » -│ Réinitialiser -│ DSEE [ ] ← chaque ligne n'apparaît que si le casque -│ Speak-to-Chat [ ] gère la fonction -│ Volume adaptatif [ ] -│ Arrêt automatique Quand retiré › -│ ✓ Désactivé / 5 min / 30 min / 1 heure / 3 heures / Quand le casque est retiré -├────────── -│ À propos du casque › → Firmware, Codec, Protocole, Bluetooth (lignes d'info) -│ Options de SonyBridge › → ✓ Lancer à l'ouverture de session -│ ✓ Connexion automatique -│ ✓ Reconnexion automatique -│ Connecter… | Déconnecter -├────────── -└ Quitter SonyBridge ⌘Q -``` - -- La valeur courante (« Graves », « Quand retiré ») s'affiche à droite du titre du sous-menu. -- Casque déconnecté : le menu garde sa forme, les réglages sont désactivés (grisés), et l'en-tête affiche - « Non connecté ». L'élément « Connecter… » essaie d'abord le casque Sony déjà connecté à macOS - (comportement existant de `scanAndConnect`), sinon il ouvre le sélecteur Bluetooth de macOS. -- Valeurs par défaut des options : connexion auto **activée**, reconnexion auto **activée**, lancement à - l'ouverture de session **désactivé** (Apple demande que l'utilisateur l'active lui-même). - -## 5. Architecture - -### 5.1 Type d'app - -- `LSUIElement = YES` : pas d'icône dans le Dock, pas de fenêtre ni de menu d'app. -- `LSMinimumSystemVersion = 13.0`. -- Le bundle s'appelle `SonyBridge.app` (exécutable `SonyBridge`). L'identifiant - `com.semvis123.SonyHeadphonesClient` est conservé, pour que macOS ne redemande pas l'autorisation - Bluetooth. - -### 5.2 Fichiers (`Client/macos/`) - -| Fichier | Rôle | Dépend de | -|---|---|---| -| `main.swift` | Crée `NSApplication`, installe `AppDelegate`, lance la boucle | `AppDelegate` | -| `AppDelegate.swift` | Crée le modèle, les réglages et le contrôleur de barre ; démarre la connexion auto | tous les suivants | -| `StatusItemController.swift` | Possède le `NSStatusItem`, choisit l'icône selon l'état, attache le menu | `HeadphonesModel`, `HeadphonesMenu` | -| `HeadphonesMenu.swift` | Construit le `NSMenu` et le garde synchronisé avec le modèle (abonnement Combine) : états des choix, visibilité, valeurs à droite, actif/inactif | `HeadphonesModel`, `AppSettings`, `MenuRows` | -| `MenuRows/HeaderRow.swift` | En-tête : nom, état de connexion, codec, batterie (simple ou G/D/boîtier) | `HeadphonesModel` | -| `MenuRows/SliderRow.swift` | Curseur du niveau ambiant | `HeadphonesModel` | -| `MenuRows/ToggleRow.swift` | Ligne titre + interrupteur (focalisation, DSEE, Speak-to-Chat, volume adaptatif) | — (valeur + action en paramètres) | -| `MenuRows/EqualizerRow.swift` | Curseurs verticaux, 10 bandes ou 5 + Clear Bass selon le casque | `HeadphonesModel` | -| `HeadphonesModel.swift` | Existe déjà. État observable du casque et actions ; gagne la connexion/reconnexion auto et les relectures périodiques | `HeadphonesBridge`, `AppSettings`, `ReconnectPolicy`, `PollGuard` | -| `ReconnectPolicy.swift` | Logique pure : délai avant le prochain essai (3 s, 10 s, 30 s, puis 60 s) | — | -| `PollGuard.swift` | Logique pure : ignorer une relecture si l'utilisateur a changé ce réglage il y a moins de 3 s | — | -| `AppSettings.swift` | Les 3 options dans `UserDefaults` ; le lancement à l'ouverture passe par `SMAppService.mainApp` | — | -| `DeviceWatcher.swift` | Écoute les connexions Bluetooth (`IOBluetoothDevice.register(forConnectNotifications:)`) et signale qu'un casque Sony vient de se connecter | IOBluetooth | -| `HeadphonesBridge.h/.mm` | Existe déjà. Pont Obj-C++ ; s'adapte aux corrections XM6 (§7) | cœur C++ | -| `fr.lproj/`, `en.lproj/` | Traductions : textes du menu ajoutés, textes de l'ancienne fenêtre retirés | — | - -**Supprimés :** `ContentView.swift`, `main.mm`, `AppDelegate.h/.mm`, `ViewController.h/.mm`, `Main.storyboard`, -`SonyHeadphonesClient.xcodeproj`, `exportOptions.plist`, et les images des casques dans `Assets.xcassets` -(elles ne sont plus affichées). L'icône de l'app est déplacée dans `Client/macos/Resources/AppIcon.iconset`, -d'où `iconutil` la compile directement. - -### 5.3 Cœur C++ (`Client/`) - -- Nouveau `ProtocolParsers.h/.cpp` : des fonctions pures qui transforment la réponse du casque en valeurs. - - `parseNcAsmState(payload)` : gère les réponses `0x17` et `0x19`. - - `parseEqualizer(payload)` : gère 5 bandes + Clear Bass, et 10 bandes. - - `Headphones.cpp` les appelle, au lieu de décoder les octets lui-même. -- Le reste du cœur (mise en trame, ACK, connexion RFCOMM) ne change pas. - -## 6. Fonctionnement - -### 6.1 Connexion automatique (option activée) - -1. L'app retient l'adresse du dernier casque connecté (`UserDefaults`). -2. Au lancement : si ce casque est connecté à macOS, l'app ouvre le canal de contrôle. À défaut, elle prend le - premier casque connecté dont le nom ressemble à un Sony (règle existante `SHCLooksLikeSonyHeadset`). -3. Ensuite, `DeviceWatcher` signale chaque connexion Bluetooth. Pour un casque Sony, l'app attend 2 s (le - temps que l'audio s'établisse) puis ouvre le canal. - -### 6.2 Reconnexion automatique (option activée) - -- Si le canal se coupe alors que le casque est toujours connecté à macOS, l'app réessaie selon - `ReconnectPolicy` : 3 s, 10 s, 30 s, puis toutes les 60 s. -- L'app arrête d'essayer quand le casque se déconnecte de macOS (la connexion auto prendra le relais). -- Après un clic sur **Déconnecter**, pas de reconnexion auto jusqu'au prochain branchement du casque ou au - prochain clic sur « Connecter… ». - -### 6.3 Relectures périodiques - -- État NC/Ambiant : toutes les 2 s (suit le bouton physique du casque). Batterie : toutes les 60 s. -- Les minuteurs sont ajoutés en mode `RunLoop.Mode.common`, pour continuer à tourner **pendant que le menu - est ouvert**. Le menu se met alors à jour en direct. - -### 6.4 Commandes - -- Une action met à jour l'affichage tout de suite, puis la commande part sur la file série existante, dans - l'ordre des clics. -- `PollGuard` ignore les relectures d'un réglage pendant 3 s après que l'utilisateur l'a modifié : sans ça, - l'affichage reviendrait brièvement en arrière. -- Les curseurs (niveau ambiant, égaliseur) envoient une commande quand on relâche, et au plus toutes les - 150 ms pendant le glissement, pour ne pas saturer la liaison. - -### 6.5 Erreurs - -- La dernière erreur s'affiche sur une ligne « ⚠︎ message » sous l'en-tête. Elle disparaît à la prochaine - action réussie. Pas de fenêtre d'alerte. -- Les échecs de connexion automatique ne s'affichent pas (ils sont normaux quand le casque dort). Seuls les - échecs d'une action de l'utilisateur s'affichent. - -### 6.6 Icône - -- Des images modèles (*template*) monochromes, que macOS colore selon la barre (clair ou sombre) : une par - mode (réduction de bruit, son ambiant, désactivé), plus une version grisée quand le casque est déconnecté. -- On part de symboles SF (`SF Symbols`) ; les glyphes exacts sont montrés pour validation pendant - l'implémentation. - -## 7. Corrections WH-1000XM6 - -Constats tirés des trames réelles capturées le 2026-09-10 : - -| Fonction | Trame reçue | Constat | -|---|---|---| -| État NC/ASM, demande `66 17` | `67 17 00 00 00 00 00` | Tout à zéro : ce canal n'est pas celui du XM6 | -| Changement de mode `68 17 01 01 01 00 0a` | accepté, puis notification `69 19 01 01 01 00 0a 00 00` | Le changement marche ; le vrai état arrive sur le canal `0x19`, avec 2 octets de plus | -| Égaliseur, demande `56 00` | `57 00 30 0a 0a 0a 05 05 06 06 06 06 06 06` | Preset `0x30` inconnu ; `0x0a` = 10 valeurs de bandes | -| Volume adaptatif, demande `f6 0a` | aucune réponse | Pas géré : la ligne est masquée | - -**Correction de la relecture NC/Ambiant** -- À la connexion, l'app envoie `66 19`. Si la réponse fait au moins 7 octets, elle relit l'état par `0x19`. - Sinon, elle garde `0x17` (anciens modèles). -- L'envoi des changements continue par `68 17`, dont le fonctionnement est vérifié sur le XM6. - -**Correction de l'égaliseur** -- `parseEqualizer` lit l'octet de nombre de valeurs : - - `0x06` → Clear Bass + 5 bandes (existant) ; - - `0x0a` → 10 bandes, sans Clear Bass. -- Le sous-menu affiche les curseurs qui correspondent. Un preset inconnu est affiché « Personnalisé » ; aucun - preset n'est coché. - -**Points à déterminer par expérimentation** (étape 3 de la construction, avec l'utilisateur et le casque) -1. Le sens des 2 octets de plus de `0x19` : changer de mode avec le bouton du casque et lire les trames. -2. Le décalage des valeurs des bandes (hypothèse −10…+10 avec un décalage de 10, à confirmer) et les - identifiants des presets du XM6 : comparer avec l'app Sony, puis envoyer un preset et relire. -3. Le format d'envoi de l'égaliseur manuel à 10 bandes (hypothèse `58 00 a0 0a <10 valeurs>`) : essai pas à - pas, l'utilisateur à l'écoute. - -**Règle de sécurité :** tant qu'un format n'est pas confirmé, la commande correspondante n'est **jamais** -envoyée au XM6. Les curseurs 10 bandes restent inactifs, avec la mention « bientôt disponible ». - -## 8. Build et CI - -- `scripts/build.sh` : compile le Swift (`swiftc`, avec l'en-tête de pont), le C++ et l'Obj-C++ - (`clang++`, C++17, ARC), fait l'édition de liens, assemble `build/SonyBridge.app` (plist, `.lproj`, icône - via `iconutil`) et signe en ad hoc avec les entitlements existants. - - Variables : `CONFIG=debug|release` ; `ARCHS="arm64 x86_64"` pour une app universelle (fusion avec `lipo`) ; - `DEBUG_PROTOCOL=1` pour activer `SHC_DEBUG_PROTOCOL`. -- `Makefile` : - - `make` : compile ; - - `make run` : compile, relance l'app, et envoie les logs dans `build/app.log` ; - - `make test` : lance les tests ; - - `make release` : app universelle zippée ; - - `make clean`. -- CI : `.github/workflows/build.yml` (sur `main` et les PR) exécute `make test` et `make release`, puis publie - le zip comme artefact. `xcodebuild.yml` est supprimé. -- README : section « Build from source » réécrite (`make run`), description de l'app de barre des menus. - -## 9. Tests - -- **`make test`** compile et lance deux petits exécutables de test (assertions simples, sans XCTest, qui n'est - pas disponible sans Xcode) : - - `Client/tests/ProtocolParsersTests.cpp` : `parseNcAsmState` et `parseEqualizer` avec les trames réelles - du XM6 (§7) et des trames des anciens formats (`0x17`, 5 bandes + Clear Bass) ; aller-retour mise en trame - / décodage (`packageDataForBt` / `unpackBtMessage`), échappement et somme de contrôle. - - `Client/tests/LogicTests.swift` : `ReconnectPolicy` (suite des délais, remise à zéro) et `PollGuard` - (fenêtre de 3 s). -- **Checklist manuelle** avec le XM6 : chaque élément du menu, synchronisation avec le bouton physique, menu - ouvert pendant un changement, coupure pour inactivité puis reconnexion, déconnexion manuelle (pas de - reconnexion), lancement à l'ouverture de session, bascule clair/sombre de la barre, français et anglais. - -## 10. Ordre de construction - -1. **Base** : `scripts/build.sh` + `Makefile`, point d'entrée Swift, app d'agent, icône et menu minimal - (en-tête + modes + Quitter), sur le cœur existant. -2. **Menu complet** : toutes les lignes de §4, avec les fonctions actuelles ; `ContentView.swift` supprimé. -3. **Corrections XM6** : `ProtocolParsers` + tests, relecture `0x19`, égaliseur 10 bandes, puis les - expérimentations de §7. -4. **Options** : `AppSettings`, `DeviceWatcher`, connexion et reconnexion auto, lancement à l'ouverture de - session. -5. **Nettoyage** : suppression du `.xcodeproj` et des fichiers morts, CI, README, traductions. - -## 11. Risques - -| Risque | Parade | -|---|---| -| Taille et surbrillance des vues SwiftUI dans un `NSMenu` | Taille fixée par ligne ; vérifié dès l'étape 1 avec le curseur | -| Minuteurs gelés pendant l'ouverture du menu | Mode `RunLoop.Mode.common` (§6.3) | -| La connexion bloque le fil principal quelques secondes (boucle d'attente existante dans `HeadphonesBridge`) | Acceptable en arrière-plan ; l'en-tête affiche « Connexion… » | -| Formats XM6 non confirmés | Règle de sécurité §7 ; fonctions désactivées tant qu'elles ne sont pas vérifiées | -| Autorisation Bluetooth redemandée | Identifiant de bundle conservé | diff --git a/docs/superpowers/specs/2026-09-11-notch-design.md b/docs/superpowers/specs/2026-09-11-notch-design.md deleted file mode 100644 index 77458583..00000000 --- a/docs/superpowers/specs/2026-09-11-notch-design.md +++ /dev/null @@ -1,300 +0,0 @@ -# SonyBridge dans l'encoche — spec de design (étape 1) - -- **Date :** 2026-09-11 -- **Statut :** validé en discussion, à relire avant le plan d'implémentation -- **Casque de référence :** WH-1000XM6 (protocole v2) -- **Découpage :** étape 1 (cette spec) = encoche + onglet Casque + Spotify local ; étape 2 (spec séparée, plus - tard) = connexion Spotify (SSO) + source Web + changement d'appareil. - -## 1. Objectif - -Ajouter à SonyBridge une **encoche interactive** en haut de l'écran, dans l'esprit de « Dynamic Island » : -au repos, elle montre discrètement la musique en cours et le mode du casque ; au survol, elle s'ouvre et -permet de piloter la musique (Spotify) et le mode du casque sans ouvrir le menu. - -Le menu de la barre des menus reste l'interface complète ; l'encoche est un accès rapide. - -## 2. Périmètre - -**Inclus (étape 1)** -- L'encoche (panneau au-dessus de la barre des menus), sur l'écran intégré à encoche, ou une pastille - simulée sur un écran sans encoche. -- Onglet **Musique** : pochette, titre, artiste, barre de progression avec temps écoulé et restant (on peut - la glisser pour avancer), précédent / lecture-pause / suivant, volume Spotify, appareil (« Ce Mac »). -- Onglet **Casque** : NC / Ambiant / Off, curseur de niveau ambiant, Focus voix. -- La source **Spotify local** : l'app Spotify du Mac, lue et pilotée sans compte. -- L'option « Afficher l'encoche » dans les options de SonyBridge. -- Le français et l'anglais (mécanisme `tr()` existant). - -**Exclu de l'étape 1** -- Connexion au compte Spotify (SSO), source Web, changement d'appareil Spotify Connect → étape 2 (§10). -- « J'aime » (ajout aux Titres likés) : non retenu. -- Autres lecteurs (Apple Music, navigateurs…) : l'API privée d'Apple (MediaRemote) est verrouillée depuis - macOS 15.4, trop fragile. -- Batterie et égaliseur dans l'encoche : restent dans le menu. - -## 3. Décisions - -| Sujet | Décision | Raison | -|---|---|---| -| Licence | Implémentation originale à partir de la documentation Apple ; aucun code ni visuel copié de boring.notch (GPL-3.0) | SonyBridge reste sous licence MIT ; l'idée d'une encoche n'est pas protégée, le code l'est | -| Disposition ouverte | Onglets **Musique \| Casque** (maquette « B ») | Encoche compacte | -| Ouverture | Au survol, fermeture quand la souris sort | Rapide, comme boring.notch | -| Écran sans encoche | Pastille simulée en haut au centre de l'écran principal | Même comportement partout | -| Source musique | Spotify local (AppleScript + signaux Spotify) à l'étape 1 ; Spotify Web (SSO) à l'étape 2, avec repli local | Utilisable par tous sans compte développeur ; le SSO n'est possible qu'avec un Client ID par utilisateur (§10) | -| Extras Musique | Volume, avancer dans le morceau ; changer d'appareil à l'étape 2 | Choix de l'utilisateur | -| Réglages casque dans l'encoche | Mode NC/Ambiant/Off, niveau ambiant + Focus voix | Choix de l'utilisateur ; le reste est dans le menu | -| Technique | `NSPanel` sans bordure, non activant, contenu SwiftUI (`NSHostingView`) | Pas de vol du focus clavier ; SwiftUI déjà utilisé pour les lignes du menu | - -## 4. L'encoche - -### 4.1 États au repos - -« Musique présente » = Spotify est ouvert **et** son état est lecture ou pause avec un morceau courant. -« Casque connecté » = `HeadphonesModel.connectionState == .connected` (« Connexion… » compte comme non connecté). - -| # | Musique | Casque | Au repos | -|---|---|---|---| -| 1 | oui | oui | Pochette à gauche, mode du casque à droite (◉ NC, ◎ Ambiant, ○ Off) | -| 2 | oui | non | Pochette à gauche, petites barres à droite, animées en lecture, figées en pause | -| 3 | non | oui | Icône casque à gauche, mode à droite | -| 4 | non | non | Encoche nue, sans extension. Sur un écran **sans** encoche, la pastille simulée est masquée | - -Dans les états 1 à 3, l'encoche s'élargit d'environ 36 pt de chaque côté pour loger ces éléments. -Le survol ouvre l'encoche dans tous les états où elle est visible, y compris l'état 4 sur un écran à encoche. - -### 4.2 État ouvert - -``` -╭──────────────────────────────────╮ Onglet Musique -│ Musique Casque │ -│ ┌────┐ Midnight City │ -│ │ ♪ │ M83 │ -│ └────┘ ━━━━━━━●────── 1:32 −2:31│ ← barre de progression (glissable) -│ ⏮ ⏸ ⏭ │ -│ 🔈 ───────●──── 🔊 │ ← volume Spotify -│ 🔊 Ce Mac │ ← appareil -╰──────────────────────────────────╯ - -╭──────────────────────────────────╮ Onglet Casque -│ Musique Casque │ -│ [ NC | Ambiant | Off ] │ ← choix exclusifs -│ Niveau ─────●───── 12 │ ← grisé hors mode Ambiant -│ Focus voix [ ● ] │ ← grisé hors mode Ambiant -╰──────────────────────────────────╯ -``` - -- Taille ouverte fixe (environ 380 × 190 pt, encoche comprise, à ajuster à la vérification visuelle), la même pour les deux - onglets : pas de saut de taille en changeant d'onglet. -- Coins inférieurs arrondis ; le haut se confond avec l'encoche. -- **Casque non connecté** : « Non connecté » + bouton « Connecter », qui appelle `HeadphonesModel.connect()` - (même comportement que « Connecter… » dans le menu). Pendant la connexion : « Connexion… ». -- **Spotify non ouvert** : « Spotify n'est pas ouvert » + bouton « Ouvrir Spotify » (lance l'app). -- **Autorisation refusée** : « SonyBridge n'a pas l'autorisation de contrôler Spotify » + bouton - « Ouvrir les réglages » (Réglages Système › Confidentialité et sécurité › Automatisation). -- **Spotify ouvert mais rien en cours** (état stopped) : « Rien en cours de lecture ». -- Le curseur de niveau va de 1 à `maxAmbientLevel` (20, ou 19 sur les anciens modèles), comme dans le menu. - -### 4.3 Comportement - -- **Ouverture** après ~0,15 s de survol ; **fermeture** ~0,4 s après la sortie de la souris. Ces délais sont - des constantes, testées dans la logique pure (§8). -- **Animation** : ouverture et fermeture en ressort, à partir de la forme de l'encoche ; fondu simple si - « Réduire les animations » est activé (`NSWorkspace.shared.accessibilityDisplayShouldReduceMotion`). -- **Focus** : le panneau ne devient jamais la fenêtre active (non activant) ; les clics y fonctionnent - sans voler le clavier à l'app courante. -- **Zone de clic** : repliée, la fenêtre fait exactement la taille de l'encoche (élargie ou non) ; elle ne - prend la taille ouverte que pendant l'ouverture. Elle ne bloque donc jamais la barre des menus en dehors - de l'encoche. -- **Onglet à l'ouverture** : au premier survol de la session, Musique si une musique est présente, sinon - Casque ; ensuite le dernier onglet choisi (en mémoire seulement, pas enregistré). -- **Écrans** : l'écran intégré à encoche s'il existe, sinon l'écran principal avec la pastille simulée. - L'encoche se replace à chaque changement d'écrans (`NSApplication.didChangeScreenParametersNotification`) : - écran branché/débranché, capot fermé, résolution changée. -- **Bureaux et plein écran** : visible sur tous les bureaux et par-dessus les apps en plein écran. -- **Option** « Afficher l'encoche » décochée : le panneau est retiré ; aucune lecture Spotify n'est faite. -- **Synchronisation** avec le menu : les deux lisent le même `HeadphonesModel` ; un changement de mode dans - l'encoche apparaît aussitôt dans le menu et l'icône, et inversement. - -## 5. Architecture - -### 5.1 Fichiers (`Client/macos/`) - -Nouveaux dossiers `Notch/` et `Music/`. Les fichiers marqués **pur** n'importent que Foundation : ils sont -compilés dans `LogicTests`. - -| Fichier | Rôle | Dépend de | -|---|---|---| -| `Notch/NotchGeometry.swift` | **Pur.** À partir du cadre de l'écran, de `safeAreaInsets.top` et des zones `auxiliaryTopLeftArea` / `auxiliaryTopRightArea` (passés en valeurs), calcule le rectangle de l'encoche, sa version élargie, le rectangle ouvert, ou la pastille simulée | — | -| `Notch/NotchContent.swift` | **Pur.** Choisit l'état au repos (§4.1) à partir de « musique présente » et « casque connecté », et l'onglet à l'ouverture ; contient les délais d'ouverture/fermeture | — | -| `Notch/NotchPanel.swift` | `NSPanel` sans bordure, transparent, non activant, niveau au-dessus de la barre des menus, présent sur tous les bureaux et en plein écran | AppKit | -| `Notch/NotchController.swift` | Possède le panneau ; choisit l'écran ; suit les changements d'écrans ; gère le survol (zone de suivi + délais) et la taille du panneau ; suit `AppSettings.showNotch` | `NotchPanel`, `NotchGeometry`, `NotchContent`, `HeadphonesModel`, `MusicController`, `AppSettings` | -| `Notch/NotchView.swift` | Vue SwiftUI racine : état au repos, état ouvert avec les onglets | `MusicTab`, `HeadphonesTab` | -| `Notch/MusicTab.swift` | Onglet Musique (§4.2) | `MusicController` | -| `Notch/HeadphonesTab.swift` | Onglet Casque (§4.2) ; appelle `setMode` / `setLevel(_:final:)` / `setFocusOnVoice` / `connect` du modèle | `HeadphonesModel` | -| `Music/NowPlaying.swift` | **Pur.** Structure : titre, artiste, album, identifiant du morceau, URL de la pochette, durée, position + date de cette position, lecture/pause, volume, nom de l'appareil, capacités (`canSeek`, `canSetVolume`, `canChangeDevice`) | — | -| `Music/PlaybackClock.swift` | **Pur.** Position affichée à un instant donné : avance pendant la lecture, figée en pause, bornée à la durée | `NowPlaying` | -| `Music/SpotifyPlaybackInfo.swift` | **Pur.** Transforme le `userInfo` du signal Spotify en `NowPlaying` (durée en ms → s, champs manquants, état « Stopped ») | `NowPlaying` | -| `Music/MusicSource.swift` | Protocole commun : état publié (`NowPlaying?` + état de la source : non ouvert / autorisation refusée / prêt), `playPause`, `next`, `previous`, `seek(to:)`, `setVolume(_:)`, `refresh()` | `NowPlaying` | -| `Music/SpotifyLocalSource.swift` | Implémentation locale (§6) | `MusicSource`, `SpotifyPlaybackInfo`, AppKit | -| `Music/MusicController.swift` | `ObservableObject` lu par l'encoche : expose l'état de la source active, la pochette téléchargée, et relaie les commandes (avec `SendThrottle` pour le volume et la position). Étape 1 : une seule source, la locale | `MusicSource`, `SendThrottle` | - -**Fichiers modifiés** -- `AppSettings.swift` : `showNotch` (`UserDefaults`, **activé** par défaut). -- `AppDelegate.swift` : crée `MusicController` et `NotchController`. -- `HeadphonesMenu.swift` : case « Afficher l'encoche » dans « Options de SonyBridge ». -- `scripts/build.sh` : ajoute `Notch/*.swift` et `Music/*.swift` aux sources Swift. -- `scripts/test.sh` : compile les fichiers purs avec `LogicTests`. -- `Client/tests/LogicTests/main.swift` : nouveaux tests (§8). -- `fr.lproj/Localizable.strings` : nouveaux textes. -- `SonyHeadphonesClient.entitlements` et `info.plist` (§5.2). - -### 5.2 Bac à sable et autorisations - -- `com.apple.security.temporary-exception.apple-events` = `["com.spotify.client"]` : envoyer des Apple Events - à Spotify depuis l'app en bac à sable. (Si le runtime renforcé est activé un jour, il faudra aussi - `com.apple.security.automation.apple-events`.) -- `com.apple.security.network.client` : télécharger la pochette (et, à l'étape 2, parler à l'API Spotify). -- `info.plist` : `NSAppleEventsUsageDescription`, texte affiché par macOS à la première demande. - -### 5.3 Flux de données - -``` -Spotify (app du Mac) ──signal PlaybackStateChanged──▶ SpotifyLocalSource ──NowPlaying──▶ MusicController ──▶ NotchView - ▲ │ │ - └──────────── Apple Events (lecture, volume…) ◀───┴──────────── commandes ◀───────────┘ - -HeadphonesModel (existant) ◀──── setMode / setLevel / setFocusOnVoice ──── HeadphonesTab - └──────── @Published mode, niveau, voix, connexion ──────────▶ NotchView + menu -``` - -## 6. Source Spotify locale - -### 6.1 Lecture de l'état - -- **Signal** `com.spotify.client.PlaybackStateChanged` (`DistributedNotificationCenter`) : Spotify l'émet à - chaque changement de morceau, lecture ou pause. Si le signal contient ses informations (`userInfo` : - titre, artiste, album, durée, position, état), `SpotifyPlaybackInfo` les décode ; sinon (par exemple si le - bac à sable les retire), le signal sert seulement de déclencheur et on relit l'état par Apple Events. -- **Relecture par Apple Events** (`player state`, `current track` : nom, artiste, album, id, durée, - `artwork url` ; `player position` ; `sound volume`) : - - au lancement de SonyBridge si Spotify est déjà ouvert ; - - quand Spotify s'ouvre (`NSWorkspace.didLaunchApplicationNotification`) ; - - toutes les 5 s **uniquement quand l'encoche est ouverte** (le volume ne déclenche pas de signal) ; - - juste après une commande de position ou de volume. -- **Position** : `PlaybackClock` calcule la position affichée à partir de la dernière position connue et de - l'heure ; l'interface se redessine environ une fois par seconde **seulement quand l'encoche est ouverte**. -- **Pochette** : téléchargée depuis `artwork url` (`URLSession`), gardée en mémoire pour les derniers morceaux. -- Spotify quitte (`NSWorkspace.didTerminateApplicationNotification`) → état « non ouvert », `NowPlaying` vidé. - -### 6.2 Commandes - -- `playpause`, `next track`, `previous track`, `set player position`, `set sound volume` (volume de Spotify, - 0–100, pas celui du Mac). -- Volume et position : la valeur affichée change tout de suite ; l'envoi passe par `SendThrottle` - (au plus une commande par 150 ms pendant qu'on glisse, la valeur finale toujours envoyée). -- Les Apple Events partent d'une file série en arrière-plan, avec un délai maximal de 2 s : l'interface ne se - fige jamais si Spotify ne répond pas. - -### 6.3 Protections et erreurs - -- **Aucun Apple Event n'est envoyé si Spotify n'est pas ouvert** (vérifié avec - `NSRunningApplication.runningApplications(withBundleIdentifier: "com.spotify.client")`) : un Apple Event - vers une app fermée la lancerait. Seul le bouton « Ouvrir Spotify » lance l'app. -- **Autorisation** : la première commande ou relecture déclenche la demande de macOS. Si elle est refusée - (`errAEEventNotPermitted`, -1743), la source passe à l'état « autorisation refusée » (§4.2) et arrête ses - relectures ; elle réessaie une seule fois à chaque ouverture de l'encoche (macOS ne redemande pas, l'échec - est immédiat), pour voir si l'autorisation a été accordée entre-temps dans les réglages. -- **Échec ou délai dépassé** : on garde le dernier état connu et on relit au prochain signal ; aucune - alerte, les erreurs sont seulement écrites dans le journal (stderr). - -## 7. Réglages et traductions - -- « Options de SonyBridge » gagne une case **Afficher l'encoche** (activée par défaut). -- Tous les nouveaux textes passent par `tr()` et ont leur traduction dans `fr.lproj/Localizable.strings` ; - `make test` le vérifie (`check_localization.py` parcourt déjà tous les `.swift` sous `Client/macos/`). - -## 8. Tests - -**Automatiques** (ajoutés à `LogicTests`, lancés par `make test`) -- `NotchGeometry` : écran avec encoche → rectangle de l'encoche, version élargie et rectangle ouvert centrés - sous le haut de l'écran ; écran sans encoche → pastille centrée ; cas limites (zones auxiliaires absentes, - écran décalé dans l'espace global). -- `NotchContent` : les 4 états au repos ; onglet à l'ouverture (premier survol puis dernier onglet) ; délais. -- `PlaybackClock` : avance en lecture, figée en pause, bornée à la durée, remise à zéro au changement de morceau. -- `SpotifyPlaybackInfo` : décodage complet, champs manquants, durée en ms, état « Stopped » → pas de musique. - -**Manuels** (par l'utilisateur, sur son Mac et son WH-1000XM6) -1. Survol : ouverture, fermeture, pas de clignotement ; l'app active garde le clavier. -2. Les 4 états au repos. -3. Onglet Casque : changer de mode → le casque change, le menu et l'icône suivent ; bouton NC du casque → - l'encoche suit. -4. Onglet Musique : lecture/pause, suivant, précédent, glisser la position, volume ; changer de morceau dans - Spotify → l'encoche suit. -5. Demande d'autorisation Spotify ; refus → message et bouton des réglages. -6. Spotify fermé → message et bouton « Ouvrir Spotify » ; SonyBridge ne relance jamais Spotify tout seul. -7. Écran externe, capot fermé, rebranchement : l'encoche se replace (pastille simulée sur l'écran externe). -8. Option « Afficher l'encoche » décochée → plus d'encoche ; recochée → elle revient. - -## 9. Risques - -- **Autorisation redemandée après chaque `make`** : macOS rattache l'autorisation d'automatisation à la - signature de l'app, qui change à chaque build ad hoc. Gênant en développement, pas pour l'app installée. -- **API Spotify locale non documentée** : le signal et le dictionnaire AppleScript de Spotify n'ont pas de - garantie officielle (stables depuis des années). En cas de casse, seul l'onglet Musique local est touché. -- **`userInfo` du signal en bac à sable** : non garanti ; le design relit l'état par Apple Events si besoin (§6.1). -- **Extension au repos** : les ~36 pt de chaque côté de l'encoche peuvent recouvrir un élément de la barre - des menus collé à l'encoche ; à vérifier visuellement, largeur ajustable. -- **Pastille simulée** : elle recouvre le centre de la barre des menus sur un écran sans encoche (zone - habituellement vide) ; masquée quand il n'y a rien à afficher. - -## 10. Étape 2 (aperçu, spec séparée) - -Connexion au compte Spotify (Authorization Code + PKCE, sans secret ; jetons dans le Trousseau), source -`SpotifyWebSource` (`/me/player`, interrogé pendant la lecture), changement d'appareil (Spotify Connect), -fenêtre « Spotify… » pour saisir le Client ID. `MusicController` choisira la source Web si l'utilisateur est -connecté, sinon la locale. - -Contraintes Spotify vérifiées le 2026-09-11 : -- une app en mode développement accepte **5 utilisateurs** au plus, ajoutés à la main, et son propriétaire - doit avoir **Premium** (depuis février 2026) ; -- le quota étendu est réservé aux entreprises (≥ 250 000 utilisateurs actifs par mois) depuis mai 2025 ; -- les commandes de lecture restent disponibles en mode développement ; -- adresse de retour : `http://127.0.0.1:` ou un schéma personnalisé (`localhost` refusé). - -Conséquence : pour un repo public, **chaque utilisateur crée sa propre app développeur Spotify** et colle son -Client ID dans SonyBridge ; sans cela, l'encoche reste sur la source locale. - -Sources : [quotas Spotify](https://developer.spotify.com/documentation/web-api/concepts/quota-modes), -[migration février 2026](https://developer.spotify.com/documentation/web-api/tutorials/february-2026-migration-guide), -[adresses de retour](https://developer.spotify.com/documentation/web-api/concepts/redirect_uri). - -## 11. Ordre de construction (indicatif, le plan fait foi) - -1. Logique pure + tests (`NotchGeometry`, `NotchContent`, `NowPlaying`, `PlaybackClock`, `SpotifyPlaybackInfo`). -2. Panneau + contrôleur : l'encoche apparaît au bon endroit, s'ouvre et se ferme au survol, suit les écrans. -3. Onglet Casque branché sur `HeadphonesModel` + option « Afficher l'encoche ». -4. Source Spotify locale + `MusicController` + onglet Musique + autorisations. -5. États au repos complets, animations, vérification visuelle et matérielle. - -## 12. Changements pendant l'implémentation (2026-09-17) - -Décidés avec l'utilisateur sur l'app en marche ; ils remplacent §4.2 et une partie de §4.3. - -- **Plus d'onglets.** L'encoche ouverte est un lecteur façon « Dynamic Island » (maquette fournie par - l'utilisateur) : pochette, titre, artiste et petites barres à la couleur de la pochette ; temps écoulé, barre - plate, durée totale ; boutons 🎧 ⏮ ⏯ ⏭ 🔀 🔊. 🎧 fait glisser le lecteur vers le panneau Casque (‹ retour) ; - 🔊 remplace la progression par la barre de volume Spotify, repliée après 4 s sans action. Le lecteur - s'ouvre sur la page choisie en dernier (première ouverture : Musique s'il y a une musique, sinon Casque). -- **Lecture aléatoire** : ajoutée puis retirée (le bouton décentrait lecture/pause). « J'aime » n'existe pas - en local (étape 2). -- **Taille ouverte 300 × 166 pt** ; coins du haut évasés vers la barre des menus. -- **Aucun contrôle AppKit dans l'encoche** (sélecteur segmenté, `Slider`, `Toggle`, bouton bordé) : ils - ignorent l'échelle et le découpage SwiftUI et débordaient à l'ouverture, au changement de page et à la - fermeture. Remplacés par `ModePicker`, `FlatSlider`, `NotchSwitch`, `NotchPillButton`. -- **Fenêtre de taille fixe** : le panneau garde la taille ouverte, seule la forme s'anime ; fermé, il laisse - passer les clics (`ignoresMouseEvents`) et le survol suit la position du pointeur (moniteurs d'événements - global et local). Redimensionner la fenêtre affichait une image de contenu décalé. -- **Animations** (`NotchMotion`) : le contenu grandit et rétrécit avec la forme (même ressort, sans flou) ; - il reste monté pendant la fermeture puis est retiré ; la bande du repos a une largeur fixe et revient en - fondu. Vérifié par captures d'écran à 60/120 images par seconde. From f0487a1519cce230395011456566efb0ab3e7428 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 16:12:31 +0200 Subject: [PATCH 37/50] feat: sign releases with a stable certificate so macOS keeps permissions across updates --- .github/workflows/release.yml | 27 ++++++++++++++++++++++++ Client/macos/Updates/UpdateChecker.swift | 23 ++++++++++++++++++++ README.md | 3 ++- scripts/build.sh | 16 ++++++++++++-- 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 396c39e3..d8eb2e74 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -7,6 +7,9 @@ name: Release # HOMEBREW_TAP_TOKEN secret, skipped without it). # # To build a release whose tag didn't run the workflow: Actions › Release › Run workflow, with that tag. +# +# The app is signed with the "SonyNotch Code Signing" certificate (SIGNING_CERT_P12 and SIGNING_CERT_PASSWORD +# secrets), the same for every release, so macOS keeps its Bluetooth and Spotify permissions across updates. on: push: @@ -45,9 +48,33 @@ jobs: - name: Test run: make test + - name: Import the signing certificate + env: + SIGNING_CERT_P12: ${{ secrets.SIGNING_CERT_P12 }} + SIGNING_CERT_PASSWORD: ${{ secrets.SIGNING_CERT_PASSWORD }} + run: | + if [ -z "$SIGNING_CERT_P12" ]; then + echo "The SIGNING_CERT_P12 secret is missing: a release signed otherwise would lose users' permissions." + exit 1 + fi + KEYCHAIN="$RUNNER_TEMP/signing.keychain-db" + KEYCHAIN_PASSWORD=$(openssl rand -hex 16) + security create-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" + security set-keychain-settings -lut 3600 "$KEYCHAIN" + security unlock-keychain -p "$KEYCHAIN_PASSWORD" "$KEYCHAIN" + echo "$SIGNING_CERT_P12" | base64 -D > "$RUNNER_TEMP/signing.p12" + security import "$RUNNER_TEMP/signing.p12" -k "$KEYCHAIN" -P "$SIGNING_CERT_PASSWORD" -T /usr/bin/codesign + security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN" > /dev/null + rm "$RUNNER_TEMP/signing.p12" + echo "SIGN_KEYCHAIN=$KEYCHAIN" >> "$GITHUB_ENV" + echo "SIGN_IDENTITY=SonyNotch Code Signing" >> "$GITHUB_ENV" + - name: Build (release, universal) run: make release + - name: Check the signature + run: codesign -dr - build/SonyNotch.app 2>&1 | grep -q 'certificate root' + - name: Checksum run: | cd build diff --git a/Client/macos/Updates/UpdateChecker.swift b/Client/macos/Updates/UpdateChecker.swift index a2d1aea9..a6ec3013 100644 --- a/Client/macos/Updates/UpdateChecker.swift +++ b/Client/macos/Updates/UpdateChecker.swift @@ -1,6 +1,7 @@ import AppKit import Combine import CryptoKit +import Security // Asks GitHub for the latest release at launch and then once a day, and publishes it when it's newer than this // app. install() downloads it, checks its SHA-256, replaces this app and relaunches it. When that isn't possible @@ -16,6 +17,7 @@ final class UpdateChecker: ObservableObject { case download(Int) case checksum case unexpectedApp + case signature case command(String) } @@ -122,10 +124,31 @@ final class UpdateChecker: ObservableObject { AppVersion(version) == release.version else { throw InstallError.unexpectedApp } + try requireSameSigner(newApp) try? run("/usr/bin/xattr", ["-dr", "com.apple.quarantine", newApp.path]) return try fileManager.replaceItemAt(current, withItemAt: newApp) ?? current } + // A certificate-signed app only installs an update signed with the same certificate (its designated + // requirement names the certificate). Ad-hoc builds (up to 1.2.x) have nothing stable to compare, so they + // rely on the checksum alone. + private static func requireSameSigner(_ newApp: URL) throws { + var runningCode: SecCode? + var runningStatic: SecStaticCode? + var requirement: SecRequirement? + var requirementText: CFString? + guard SecCodeCopySelf([], &runningCode) == errSecSuccess, let running = runningCode, + SecCodeCopyStaticCode(running, [], &runningStatic) == errSecSuccess, let runningStatic = runningStatic, + SecCodeCopyDesignatedRequirement(runningStatic, [], &requirement) == errSecSuccess, + let requirement = requirement, + SecRequirementCopyString(requirement, [], &requirementText) == errSecSuccess, + let text = requirementText as String?, text.contains("certificate") else { return } + var newCode: SecStaticCode? + guard SecStaticCodeCreateWithPath(newApp as CFURL, [], &newCode) == errSecSuccess, let code = newCode, + SecStaticCodeCheckValidity(code, SecCSFlags(rawValue: kSecCSCheckAllArchitectures), requirement) == errSecSuccess + else { throw InstallError.signature } + } + private static func requireOK(_ response: URLResponse) throws { let status = (response as? HTTPURLResponse)?.statusCode ?? 0 guard status == 200 else { throw InstallError.download(status) } diff --git a/README.md b/README.md index 254b5dce..8389f52d 100644 --- a/README.md +++ b/README.md @@ -37,7 +37,8 @@ Works on macOS 13 or later, on Apple Silicon and Intel Macs. SonyNotch checks once a day for a new version. When one is out, click **Update to SonyNotch** in its menu: it downloads the new version, replaces itself and restarts. When you're up to date, the item is greyed out. Your -settings are kept, but macOS may ask for the Bluetooth and Spotify permissions again. +settings and the Bluetooth and Spotify permissions are kept. Coming from version 1.2.1 or older, macOS asks for +the permissions one last time. With Homebrew you can also run `brew upgrade --cask sonynotch`. diff --git a/scripts/build.sh b/scripts/build.sh index 9e8e0ca9..e569e95b 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -3,6 +3,11 @@ # CONFIG=debug|release (default: debug) # ARCHS="arm64 x86_64" (default: this Mac's architecture; several = universal binary via lipo) # DEBUG_PROTOCOL=1 (hex-dumps every frame exchanged with the headphones to stderr) +# SIGN_IDENTITY=name (default: "SonyNotch Code Signing" when that certificate is in a keychain, else ad-hoc) +# SIGN_KEYCHAIN=path (keychain holding SIGN_IDENTITY, default: the search list) +# +# Every release is signed with the same certificate, so macOS keeps the Bluetooth and Spotify permissions across +# updates. An ad-hoc signature is identified by the binary's hash, which changes with every build. set -euo pipefail shopt -s nullglob @@ -62,6 +67,13 @@ cp "$MAC/info.plist" "$APP/Contents/Info.plist" cp -R "$MAC"/*.lproj "$APP/Contents/Resources/" iconutil -c icns "$MAC/Resources/AppIcon.iconset" -o "$APP/Contents/Resources/AppIcon.icns" -echo "== Sign (ad-hoc)" -codesign --force --sign - --entitlements "$MAC/SonyHeadphonesClient.entitlements" "$APP" +DEFAULT_IDENTITY="SonyNotch Code Signing" +if [ -z "${SIGN_IDENTITY:-}" ] && security find-identity -p codesigning ${SIGN_KEYCHAIN:+"$SIGN_KEYCHAIN"} 2>/dev/null \ + | grep -q "\"$DEFAULT_IDENTITY\""; then + SIGN_IDENTITY=$DEFAULT_IDENTITY +fi +SIGN_IDENTITY=${SIGN_IDENTITY:--} +echo "== Sign ($([ "$SIGN_IDENTITY" = - ] && echo ad-hoc || echo "$SIGN_IDENTITY"))" +codesign --force --sign "$SIGN_IDENTITY" ${SIGN_KEYCHAIN:+--keychain "$SIGN_KEYCHAIN"} \ + --entitlements "$MAC/SonyHeadphonesClient.entitlements" "$APP" echo "OK -> $APP" From e23222d149ba7252f89f6159cbc06728f7744acf Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 16:21:07 +0200 Subject: [PATCH 38/50] ci: find the signing certificate by SHA-1 in the build keychain --- .github/workflows/release.yml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index d8eb2e74..4aa0cb5a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -66,8 +66,17 @@ jobs: security import "$RUNNER_TEMP/signing.p12" -k "$KEYCHAIN" -P "$SIGNING_CERT_PASSWORD" -T /usr/bin/codesign security set-key-partition-list -S apple-tool:,apple: -s -k "$KEYCHAIN_PASSWORD" "$KEYCHAIN" > /dev/null rm "$RUNNER_TEMP/signing.p12" + # codesign only looks for identities in the keychain search list, whatever --keychain says. + security list-keychains -d user -s "$KEYCHAIN" $(security list-keychains -d user | tr -d '"') + security find-identity -p codesigning "$KEYCHAIN" + # The certificate's SHA-1 names it without a lookup by common name. + HASH=$(security find-certificate -c "SonyNotch Code Signing" -Z "$KEYCHAIN" | awk '/SHA-1 hash:/ { print $NF }') + if [ -z "$HASH" ]; then + echo "The signing certificate isn't in the keychain." + exit 1 + fi echo "SIGN_KEYCHAIN=$KEYCHAIN" >> "$GITHUB_ENV" - echo "SIGN_IDENTITY=SonyNotch Code Signing" >> "$GITHUB_ENV" + echo "SIGN_IDENTITY=$HASH" >> "$GITHUB_ENV" - name: Build (release, universal) run: make release From 931afc095fc03fa37bb5b157ae27ac4ed1042602 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 16:52:26 +0200 Subject: [PATCH 39/50] feat(notch): flip the artwork on track change, backwards after previous --- Client/macos/Music/MusicController.swift | 19 +++- Client/macos/Notch/MusicTab.swift | 4 +- Client/macos/Notch/NotchView.swift | 125 ++++++++++++++++++++--- 3 files changed, 130 insertions(+), 18 deletions(-) diff --git a/Client/macos/Music/MusicController.swift b/Client/macos/Music/MusicController.swift index 91a33d8c..9f0600f8 100644 --- a/Client/macos/Music/MusicController.swift +++ b/Client/macos/Music/MusicController.swift @@ -13,6 +13,9 @@ final class MusicController: ObservableObject { } @Published private(set) var artworkTint: NSColor? // vivid average colour of the artwork + // The last previous / next asked from SonyNotch, so the artwork can flip the matching way. + private(set) var lastSkip: (backward: Bool, date: Date)? + // Something to show: a track, playing or paused (even without the right to control it). var hasMusic: Bool { status != .notRunning && nowPlaying != nil } @@ -70,9 +73,21 @@ final class MusicController: ObservableObject { func playPause() { source.playPause() } - func next() { source.next() } + func next() { + lastSkip = (false, Date()) + source.next() + } - func previous() { source.previous() } + func previous() { + lastSkip = (true, Date()) + source.previous() + } + + // True when the current track change follows a "previous" asked within the last few seconds. + var trackChangeIsBackward: Bool { + guard let skip = lastSkip else { return false } + return skip.backward && Date().timeIntervalSince(skip.date) < 3 + } // Sliders: at most one command per 150 ms while dragging, the final value always, then a read-back. func seek(to seconds: TimeInterval, final: Bool) { diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index a1def2b7..c20ff1a9 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -67,7 +67,9 @@ struct MusicTab: View { private func player(_ track: NowPlaying, artwork: CGFloat) -> some View { VStack(spacing: 0) { HStack(spacing: 12 * s) { - ArtworkView(image: music.artwork, size: artwork, cornerRadius: artwork * 0.2) + ArtworkView(image: music.artwork, trackID: track.trackID, + isBackward: { [music] in music.trackChangeIsBackward }, + size: artwork, cornerRadius: artwork * 0.2) VStack(alignment: .leading, spacing: 2 * s) { Text(track.title).font(.system(size: 14 * s, weight: .semibold)).foregroundColor(.white) Text(track.artist).font(.system(size: 13 * s)).foregroundColor(.gray) diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 114bf0b9..150c62b5 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -106,7 +106,10 @@ struct NotchView: View { @ViewBuilder private var leadingItem: some View { switch state.resting { case .musicAndHeadphones, .musicOnly: - ArtworkView(image: music.artwork, size: state.restingArtworkSize, cornerRadius: state.restingArtworkSize * 0.25) + ArtworkView(image: music.artwork, trackID: music.nowPlaying?.trackID, + isBackward: { [music] in music.trackChangeIsBackward }, + size: state.restingArtworkSize, + cornerRadius: state.restingArtworkSize * 0.25) case .headphonesOnly: Image(systemName: "headphones").font(.system(size: 13 * state.restingScale)).foregroundColor(.white) case .empty: @@ -162,28 +165,120 @@ struct NotchView: View { } } -// Album artwork, or a placeholder note while it loads (or for tracks without one). +// Album artwork, or a placeholder note while it loads (or for tracks without one). When `trackID` changes the +// card flips like Spotify's, backwards after "previous". struct ArtworkView: View { let image: NSImage? + var trackID: String? + var isBackward: () -> Bool = { false } // read when the track changes let size: CGFloat let cornerRadius: CGFloat + @StateObject private var flip = ArtworkFlip() + var body: some View { - Group { - if let image = image { - Image(nsImage: image).resizable().aspectRatio(contentMode: .fill) - .id(ObjectIdentifier(image)) - .transition(.opacity) - } else { - ZStack { - Color(white: 0.2) - Image(systemName: "music.note").font(.system(size: size * 0.45)).foregroundColor(.gray) - } + face(flip.shown) + .frame(width: size, height: size) + .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) + .rotation3DEffect(.degrees(flip.angle), axis: (x: 0, y: 1, z: 0), perspective: 0.5) + .onAppear { flip.start(image: image, trackID: trackID) } + // Only the values passed in are new: the closure itself belongs to the previous render, so reading + // `image` or `trackID` in it gives the old ones. + .onChange(of: trackID) { newTrackID in flip.trackChanged(to: newTrackID, backward: isBackward()) } + .onChange(of: image) { newImage in flip.imageChanged(to: newImage) } + } + + @ViewBuilder private func face(_ image: NSImage?) -> some View { + if let image = image { + Image(nsImage: image).resizable().aspectRatio(contentMode: .fill) + } else { + ZStack { + Color(white: 0.2) + Image(systemName: "music.note").font(.system(size: size * 0.45)).foregroundColor(.gray) + } + } + } +} + +// The flip itself. A reference type on purpose: its delayed steps must read the latest artwork, whereas a +// closure in a View struct keeps the values of the render that created it (which showed a previous track's +// artwork after quick skips). The card turns to its edge, waits there for the new track's artwork (downloaded +// after the track change, at most `flipWait`), then turns the rest of the way showing it. +final class ArtworkFlip: ObservableObject { + private static let flipWait: TimeInterval = 1 + private static let halfFlip: TimeInterval = 0.16 + + @Published private(set) var shown: NSImage? + @Published private(set) var angle: Double = 0 + + private var latestImage: NSImage? + private var latestTrackID: String? + private var shownTrackID: String? + private var atEdge = false + private var receivedImage = false // an artwork was published since the track changed (maybe the same album's) + private var backward = false + private var generation = 0 // bumped on every track change; older delayed steps give up + + func start(image: NSImage?, trackID: String?) { + latestImage = image + latestTrackID = trackID + shown = image + shownTrackID = trackID + } + + // Called before imageChanged when both change together: the new artwork is read later, at the edge. + func trackChanged(to trackID: String?, backward: Bool) { + latestTrackID = trackID + guard trackID != shownTrackID else { return } + if NotchMotion.reduceMotion || shownTrackID == nil { + withAnimation(.easeInOut(duration: 0.25)) { shown = latestImage } + shownTrackID = trackID + return + } + generation += 1 + let current = generation + self.backward = backward + receivedImage = false + if !atEdge { + withAnimation(.easeIn(duration: Self.halfFlip)) { angle = backward ? -90 : 90 } + } + let previousImage = shown + DispatchQueue.main.asyncAfter(deadline: .now() + Self.halfFlip) { [weak self] in + guard let self = self, self.generation == current else { return } + self.atEdge = true + // The new artwork may already be there (cached, or the same album's); otherwise wait for it, not forever. + if let image = self.latestImage, image !== previousImage || self.receivedImage { + self.flipIn() + return + } + DispatchQueue.main.asyncAfter(deadline: .now() + Self.flipWait) { [weak self] in + guard let self = self, self.generation == current else { return } + self.flipIn() } } - .frame(width: size, height: size) - .clipShape(RoundedRectangle(cornerRadius: cornerRadius)) - .animation(.easeInOut(duration: 0.3), value: image.map(ObjectIdentifier.init)) + } + + func imageChanged(to image: NSImage?) { + latestImage = image + if image != nil && latestTrackID != shownTrackID { receivedImage = true } + if atEdge { + if image != nil { flipIn() } + } else if latestTrackID == shownTrackID { + // Same track, artwork arriving late (or first launch): no flip, just a fade. + withAnimation(.easeInOut(duration: 0.25)) { shown = image } + } + } + + private func flipIn() { + guard atEdge else { return } + atEdge = false + generation += 1 // cancels a pending timeout + shown = latestImage + shownTrackID = latestTrackID + var instant = Transaction() + instant.disablesAnimations = true + withTransaction(instant) { angle = backward ? 90 : -90 } + withAnimation(.spring(response: 0.34, dampingFraction: 0.78)) { angle = 0 } } } From 9a2f8c1e26bf2d8a9fa4c0116c0289dd7963de66 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 17:02:42 +0200 Subject: [PATCH 40/50] feat(notch): swipe to change track and scroll for volume, with settings --- Client/macos/AppSettings.swift | 23 ++++- Client/macos/HeadphonesMenu.swift | 31 ++++++ Client/macos/Notch/MusicTab.swift | 38 ++++--- Client/macos/Notch/NotchController.swift | 63 ++++++++++++ Client/macos/Notch/NotchScrollGesture.swift | 106 ++++++++++++++++++++ Client/macos/Notch/NotchView.swift | 5 +- Client/macos/fr.lproj/Localizable.strings | 5 + Client/tests/LogicTests/main.swift | 43 ++++++++ README.md | 10 +- scripts/test.sh | 2 +- 10 files changed, 308 insertions(+), 18 deletions(-) create mode 100644 Client/macos/Notch/NotchScrollGesture.swift diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 6994efda..7aa709e5 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -13,6 +13,10 @@ final class AppSettings: ObservableObject { static let notchSide = "notchSideWidth" static let notchZoom = "notchZoom" static let notchArtwork = "notchRestingArtwork" + static let swipeToSkip = "gestureSwipeToSkip" + static let scrollForVolume = "gestureScrollForVolume" + static let reverseSwipe = "gestureReverseSwipe" + static let reverseScroll = "gestureReverseScroll" } private let defaults: UserDefaults @@ -34,6 +38,17 @@ final class AppSettings: ObservableObject { @Published var notchSideWidth: Double { didSet { defaults.set(notchSideWidth, forKey: Keys.notchSide) } } @Published var notchZoom: Double { didSet { defaults.set(notchZoom, forKey: Keys.notchZoom) } } @Published var notchArtwork: Double { didSet { defaults.set(notchArtwork, forKey: Keys.notchArtwork) } } + // Options › Notch Gestures. + @Published var swipeToSkip: Bool { didSet { defaults.set(swipeToSkip, forKey: Keys.swipeToSkip) } } + @Published var scrollForVolume: Bool { didSet { defaults.set(scrollForVolume, forKey: Keys.scrollForVolume) } } + @Published var reverseSwipe: Bool { didSet { defaults.set(reverseSwipe, forKey: Keys.reverseSwipe) } } + @Published var reverseScroll: Bool { didSet { defaults.set(reverseScroll, forKey: Keys.reverseScroll) } } + + var gesturePreferences: NotchGesturePreferences { + NotchGesturePreferences(swipeToSkip: swipeToSkip, scrollForVolume: scrollForVolume, + reverseSwipe: reverseSwipe, reverseScroll: reverseScroll) + } + // True while the Notch Size submenu is open: the notch stays open as a live preview. Not persisted. @Published var notchPreviewing = false @@ -58,6 +73,7 @@ final class AppSettings: ObservableObject { Keys.notchWidth: Double(layout.openSize.width), Keys.notchHeight: Double(layout.openSize.height), Keys.notchSide: Double(layout.sideExtension), Keys.notchZoom: Double(layout.zoom), Keys.notchArtwork: Double(layout.restingArtwork), + Keys.swipeToSkip: true, Keys.scrollForVolume: true, Keys.reverseSwipe: false, Keys.reverseScroll: false, ]) autoConnect = defaults.bool(forKey: Keys.autoConnect) autoReconnect = defaults.bool(forKey: Keys.autoReconnect) @@ -67,6 +83,10 @@ final class AppSettings: ObservableObject { notchSideWidth = defaults.double(forKey: Keys.notchSide) notchZoom = defaults.double(forKey: Keys.notchZoom) notchArtwork = defaults.double(forKey: Keys.notchArtwork) + swipeToSkip = defaults.bool(forKey: Keys.swipeToSkip) + scrollForVolume = defaults.bool(forKey: Keys.scrollForVolume) + reverseSwipe = defaults.bool(forKey: Keys.reverseSwipe) + reverseScroll = defaults.bool(forKey: Keys.reverseScroll) launchAtLogin = SMAppService.mainApp.status == .enabled } @@ -80,7 +100,8 @@ final class AppSettings: ObservableObject { .appendingPathComponent("Library/Containers/\(bundleID)/Data/Library/Preferences/\(bundleID).plist") guard let old = NSDictionary(contentsOf: container) as? [String: Any] else { return } let keys = [Keys.autoConnect, Keys.autoReconnect, Keys.lastDeviceAddress, Keys.showNotch, Keys.notchWidth, - Keys.notchHeight, Keys.notchSide, Keys.notchZoom, Keys.notchArtwork] + Keys.notchHeight, Keys.notchSide, Keys.notchZoom, Keys.notchArtwork, Keys.swipeToSkip, + Keys.scrollForVolume, Keys.reverseSwipe, Keys.reverseScroll] for key in keys where defaults.object(forKey: key) == nil { if let value = old[key] { defaults.set(value, forKey: key) } } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 3bec2195..2a1a876b 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -33,6 +33,8 @@ final class HeadphonesMenu { private var showNotchItem = NSMenuItem() private let notchSizeItem = NSMenuItem() private var updateItem = NSMenuItem() + private let gesturesItem = NSMenuItem() + private var gestureItems: [(NSMenuItem, ReferenceWritableKeyPath)] = [] private let notchSizeMenuDelegate = NotchSizeMenuDelegate() private static var presets: [(Int, String)] { @@ -169,6 +171,7 @@ final class HeadphonesMenu { showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } for item in [autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } optionsMenu.addItem(makeNotchSizeItem()) + optionsMenu.addItem(makeGesturesItem()) let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") optionsItem.submenu = optionsMenu menu.addItem(optionsItem) @@ -235,6 +238,13 @@ final class HeadphonesMenu { autoReconnectItem.state = settings.autoReconnect ? .on : .off showNotchItem.state = settings.showNotch ? .on : .off notchSizeItem.isEnabled = settings.showNotch + gesturesItem.isEnabled = settings.showNotch + for (item, keyPath) in gestureItems { + item.state = settings[keyPath: keyPath] ? .on : .off + } + // Reversing a gesture that is off means nothing. + gestureItems[2].0.isEnabled = settings.swipeToSkip + gestureItems[3].0.isEnabled = settings.scrollForVolume // Always shown: greyed out while this is the latest version. if let release = updates.available { let version = release.tag.hasPrefix("v") ? String(release.tag.dropFirst()) : release.tag @@ -250,6 +260,27 @@ final class HeadphonesMenu { } } + // Options › Notch Gestures: turn the swipe and scroll gestures on or off, or reverse them. + private func makeGesturesItem() -> NSMenuItem { + let gesturesMenu = NSMenu() + gesturesMenu.autoenablesItems = false + let rows: [(String, ReferenceWritableKeyPath)] = [ + (tr("Swipe to Change Track"), \.swipeToSkip), + (tr("Scroll to Change Volume"), \.scrollForVolume), + (tr("Reverse Swipe Direction"), \.reverseSwipe), + (tr("Reverse Scroll Direction"), \.reverseScroll), + ] + for (title, keyPath) in rows { + let item = ActionMenuItem(title) { [weak settings] in settings?[keyPath: keyPath].toggle() } + gestureItems.append((item, keyPath)) + gesturesMenu.addItem(item) + if keyPath == \.scrollForVolume { gesturesMenu.addItem(.separator()) } + } + gesturesItem.title = tr("Notch Gestures") + gesturesItem.submenu = gesturesMenu + return gesturesItem + } + // Options › Notch Size: sliders applied live, the notch staying open as a preview while the submenu is open. private func makeNotchSizeItem() -> NSMenuItem { let sizeMenu = NSMenu() diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index c20ff1a9..7579fc08 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -8,6 +8,7 @@ struct MusicTab: View { @ObservedObject var music: MusicController let showHeadphones: () -> Void + let scrolledVolume: Int? // volume being set by scrolling over the notch @Environment(\.notchScale) private var s @State private var seekValue: Double? // while dragging the progress bar @State private var volumeValue: Double? // while dragging the volume bar @@ -15,26 +16,35 @@ struct MusicTab: View { @State private var volumeHideWork: DispatchWorkItem? // Explicit: the private @State properties would otherwise make the memberwise init private. - init(music: MusicController, showHeadphones: @escaping () -> Void) { + init(music: MusicController, scrolledVolume: Int?, showHeadphones: @escaping () -> Void) { _music = ObservedObject(wrappedValue: music) + self.scrolledVolume = scrolledVolume self.showHeadphones = showHeadphones } var body: some View { - switch music.status { - case .notRunning: - message(tr("Spotify isn't open"), button: tr("Open Spotify")) { music.launchPlayer() } - case .permissionDenied: - message(tr("SonyNotch isn't allowed to control Spotify."), button: tr("Open Settings")) { - music.openAutomationSettings() - } - case .ready: - if let track = music.nowPlaying { - player(track) - } else { - message(tr("Nothing playing"), button: nil) {} + Group { + switch music.status { + case .notRunning: + message(tr("Spotify isn't open"), button: tr("Open Spotify")) { music.launchPlayer() } + case .permissionDenied: + message(tr("SonyNotch isn't allowed to control Spotify."), button: tr("Open Settings")) { + music.openAutomationSettings() + } + case .ready: + if let track = music.nowPlaying { + player(track) + } else { + message(tr("Nothing playing"), button: nil) {} + } } } + // Scrolling the volume over the notch shows the volume bar, which folds back like after the button. + .onChange(of: scrolledVolume) { volume in + guard volume != nil else { return } + if !showVolume { withAnimation(NotchMotion.content) { showVolume = true } } + scheduleVolumeHide() + } } private func message(_ text: String, button: String?, action: @escaping () -> Void) -> some View { @@ -130,7 +140,7 @@ struct MusicTab: View { private func volume(_ track: NowPlaying) -> some View { HStack(spacing: 8 * s) { Image(systemName: "speaker.fill").font(.system(size: 10 * s)).foregroundColor(.gray).frame(width: 34 * s) - FlatSlider(value: volumeValue ?? Double(track.volume ?? 0), range: 0...100) { value, final in + FlatSlider(value: volumeValue ?? Double(scrolledVolume ?? track.volume ?? 0), range: 0...100) { value, final in volumeValue = final ? nil : value music.setVolume(Int(value.rounded()), final: final) scheduleVolumeHide() diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index d458cc89..7f69910b 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -22,6 +22,9 @@ final class NotchController { private var geometry: NotchGeometry? private var lastChosenTab: NotchTab? private var pointerInside = false + private var scrollGesture = NotchScrollGesture() + private var gestureVolume: Int? // volume being set by scrolling, sent for good once the scrolling stops + private var volumeCommitWork: DispatchWorkItem? private var previewing = false // Notch Size submenu open: the pointer neither opens nor closes the notch private var reopenWork: DispatchWorkItem? private var hoverTimer: Timer? @@ -57,6 +60,17 @@ final class NotchController { }) { mouseMonitors.append(local) } + if let global = NSEvent.addGlobalMonitorForEvents(matching: .scrollWheel, handler: { [weak self] event in + self?.scrolled(event) + }) { + mouseMonitors.append(global) + } + if let local = NSEvent.addLocalMonitorForEvents(matching: .scrollWheel, handler: { [weak self] event in + self?.scrolled(event) + return event + }) { + mouseMonitors.append(local) + } NotificationCenter.default.publisher(for: NSApplication.didChangeScreenParametersNotification) .receive(on: DispatchQueue.main) @@ -233,6 +247,55 @@ final class NotchController { DispatchQueue.main.asyncAfter(deadline: .now() + Self.unmountDelay, execute: work) } + // MARK: - Gestures + + // Over the notch (closed, or open on the player): swipe for previous / next, scroll for Spotify's volume. + private func scrolled(_ event: NSEvent) { + let preferences = settings.gesturePreferences + guard preferences.swipeToSkip || preferences.scrollForVolume, + panel.isVisible, let geometry = geometry, music.status == .ready, music.hasMusic, + !state.isOpen || state.tab == .music else { return } + let zone = state.isOpen ? geometry.open : (geometry.restingFrame(for: state.resting) ?? .zero) + guard zone.contains(NSEvent.mouseLocation) else { return } + + let phase: ScrollSample.Phase + if !event.momentumPhase.isEmpty { + phase = .momentum + } else if event.phase.contains(.began) || event.phase.contains(.mayBegin) { + phase = .began + } else if event.phase.contains(.ended) || event.phase.contains(.cancelled) { + phase = .ended + } else { + phase = event.phase.isEmpty ? .none : .changed + } + let sample = ScrollSample(deltaX: event.scrollingDeltaX, deltaY: event.scrollingDeltaY, + precise: event.hasPreciseScrollingDeltas, + inverted: event.isDirectionInvertedFromDevice, phase: phase) + switch scrollGesture.handle(sample)?.applying(settings.gesturePreferences) { + case .nextTrack?: music.next() + case .previousTrack?: music.previous() + case .volume(let change)?: changeVolume(by: change) + case nil: break + } + } + + private func changeVolume(by change: Int) { + guard let base = gestureVolume ?? music.nowPlaying?.volume else { return } + let volume = min(100, max(0, base + change)) + gestureVolume = volume + state.scrolledVolume = volume + music.setVolume(volume, final: false) + volumeCommitWork?.cancel() + let work = DispatchWorkItem { [weak self] in + guard let self = self, let volume = self.gestureVolume else { return } + self.gestureVolume = nil + self.music.setVolume(volume, final: true) + self.state.scrolledVolume = nil + } + volumeCommitWork = work + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: work) + } + // The Notch Size submenu opens the notch as a live preview; closing the menu hands it back to the pointer. private func setPreviewing(_ on: Bool) { previewing = on diff --git a/Client/macos/Notch/NotchScrollGesture.swift b/Client/macos/Notch/NotchScrollGesture.swift new file mode 100644 index 00000000..9a283391 --- /dev/null +++ b/Client/macos/Notch/NotchScrollGesture.swift @@ -0,0 +1,106 @@ +import CoreGraphics + +// A scroll event, copied out of NSEvent so the gesture logic stays AppKit-free (tested in LogicTests). +struct ScrollSample { + enum Phase { + case none // mouse wheel, no gesture phases + case began + case changed + case ended + case momentum // the trackpad's inertia after the fingers left + } + + var deltaX: CGFloat // NSEvent.scrollingDeltaX + var deltaY: CGFloat // NSEvent.scrollingDeltaY + var precise: Bool // NSEvent.hasPreciseScrollingDeltas (trackpad, Magic Mouse) + var inverted: Bool // NSEvent.isDirectionInvertedFromDevice ("natural" scrolling) + var phase: Phase +} + +enum NotchScrollAction: Equatable { + case nextTrack + case previousTrack + case volume(Int) // percentage points to add +} + +// Over the notch: a two-finger swipe right / left skips to the next / previous track (once per swipe), and +// scrolling up / down changes the volume. The first movement locks the axis for the rest of the gesture. +struct NotchScrollGesture { + static let skipDistance: CGFloat = 60 // horizontal points before a swipe skips + static let pointsPerPercent: CGFloat = 6 // vertical points per volume percentage point + static let wheelPercent = 5 // per mouse wheel notch + private static let axisLockDistance: CGFloat = 4 + + private enum Axis { case horizontal, vertical } + + private var axis: Axis? + private var accumulated: CGFloat = 0 + private var skipped = false + + mutating func handle(_ sample: ScrollSample) -> NotchScrollAction? { + // Deltas follow the content; turn them into finger movement whatever "natural" scrolling says. + let fingersRight = sample.inverted ? sample.deltaX : -sample.deltaX + let fingersUp = sample.inverted ? -sample.deltaY : sample.deltaY + + if !sample.precise { + guard fingersUp != 0 else { return nil } + return .volume(fingersUp > 0 ? Self.wheelPercent : -Self.wheelPercent) + } + switch sample.phase { + case .momentum, .ended: + return nil + case .began: + axis = nil + accumulated = 0 + skipped = false + case .changed, .none: + break + } + + if axis == nil { + guard max(abs(fingersRight), abs(fingersUp)) >= Self.axisLockDistance else { return nil } + axis = abs(fingersRight) > abs(fingersUp) ? .horizontal : .vertical + } + + switch axis { + case .horizontal: + accumulated += fingersRight + guard !skipped, abs(accumulated) >= Self.skipDistance else { return nil } + skipped = true + return accumulated > 0 ? .nextTrack : .previousTrack + case .vertical: + accumulated += fingersUp + let percent = Int(accumulated / Self.pointsPerPercent) + guard percent != 0 else { return nil } + accumulated -= CGFloat(percent) * Self.pointsPerPercent + return .volume(percent) + case nil: + return nil + } + } +} + +// Options › Notch Gestures. +struct NotchGesturePreferences: Equatable { + var swipeToSkip = true + var scrollForVolume = true + var reverseSwipe = false + var reverseScroll = false +} + +extension NotchScrollAction { + // nil when that gesture is turned off. + func applying(_ preferences: NotchGesturePreferences) -> NotchScrollAction? { + switch self { + case .nextTrack: + guard preferences.swipeToSkip else { return nil } + return preferences.reverseSwipe ? .previousTrack : .nextTrack + case .previousTrack: + guard preferences.swipeToSkip else { return nil } + return preferences.reverseSwipe ? .nextTrack : .previousTrack + case .volume(let change): + guard preferences.scrollForVolume else { return nil } + return .volume(preferences.reverseScroll ? -change : change) + } + } +} diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 150c62b5..8c40532f 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -6,6 +6,7 @@ final class NotchViewState: ObservableObject { @Published var isOpen = false @Published var openContentMounted = false // true while open, and while the closing animation plays @Published var trailingHovered = false // pointer over the resting music control + @Published var scrolledVolume: Int? // Spotify volume being set by scrolling over the notch @Published var resting: NotchRestingState = .empty @Published var tab: NotchTab = .music @Published var restingSize: CGSize = .zero @@ -142,7 +143,9 @@ struct NotchView: View { // Both pages stay in the hierarchy (switching is then a cross-slide, not an insertion), the hidden one // neither drawn, clickable nor read by VoiceOver. ZStack(alignment: .top) { - page(.music) { MusicTab(music: music, showHeadphones: { selectTab(.headphones) }) } + page(.music) { + MusicTab(music: music, scrolledVolume: state.scrolledVolume, showHeadphones: { selectTab(.headphones) }) + } page(.headphones) { HeadphonesTab(model: model, back: { selectTab(.music) }) } } .padding(.top, 8 * state.contentScale) diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index c5aa9fa7..3ac066c2 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -86,3 +86,8 @@ "Updating SonyNotch…" = "Mise à jour de SonyNotch…"; "Update Failed, Download SonyNotch %@…" = "Échec de la mise à jour, télécharger SonyNotch %@…"; "SonyNotch Is Up to Date (%@)" = "SonyNotch est à jour (%@)"; +"Notch Gestures" = "Gestes de l’encoche"; +"Swipe to Change Track" = "Balayer pour changer de morceau"; +"Scroll to Change Volume" = "Défiler pour régler le volume"; +"Reverse Swipe Direction" = "Inverser le sens du balayage"; +"Reverse Scroll Direction" = "Inverser le sens du défilement"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 4fa855d7..8a292b94 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -85,6 +85,49 @@ do { check(geometry.restingTrailingZone == CGRect(x: 850, y: 950, width: 60, height: 32), "custom trailing zone") } +// NotchScrollGesture: two-finger swipes skip tracks, vertical scrolling sets the volume. +do { + func sample(_ dx: CGFloat, _ dy: CGFloat, _ phase: ScrollSample.Phase, natural: Bool = true, + precise: Bool = true) -> ScrollSample { + ScrollSample(deltaX: dx, deltaY: dy, precise: precise, inverted: natural, phase: phase) + } + // Natural scrolling: fingers moving left give a negative deltaX. + var swipe = NotchScrollGesture() + check(swipe.handle(sample(-10, 0, .began)) == nil, "swipe starts") + check(swipe.handle(sample(-30, 1, .changed)) == nil, "not far enough yet") + check(swipe.handle(sample(-30, 0, .changed)) == .previousTrack, "fingers left: previous track") + check(swipe.handle(sample(-80, 0, .changed)) == nil, "one skip per swipe") + check(swipe.handle(sample(0, 0, .ended)) == nil, "swipe ends") + check(swipe.handle(sample(-5, 0, .momentum)) == nil, "momentum ignored") + check(swipe.handle(sample(20, 0, .began)) == nil && swipe.handle(sample(50, 0, .changed)) == .nextTrack, + "fingers right: next track") + var classic = NotchScrollGesture() + _ = classic.handle(sample(10, 0, .began, natural: false)) + check(classic.handle(sample(60, 0, .changed, natural: false)) == .previousTrack, + "without natural scrolling the deltas are the other way round") + + // Vertical: 1 % per 6 pt, fingers up raise the volume (natural scrolling: negative deltaY). + var volume = NotchScrollGesture() + check(volume.handle(sample(0, -10, .began)) == .volume(1), "fingers up: louder") + check(volume.handle(sample(0, -20, .changed)) == .volume(4), "remainder carried over (4 pt + 20 pt)") + check(volume.handle(sample(30, -2, .changed)) == nil, "axis locked: sideways drift doesn't skip") + check(volume.handle(sample(0, 12, .changed)) == .volume(-1), "fingers down: quieter (2 pt left over, 12 pt down)") + check(volume.handle(sample(0, -30, .momentum)) == nil, "no volume from momentum") + let defaults = NotchGesturePreferences() + check(NotchScrollAction.nextTrack.applying(defaults) == .nextTrack && NotchScrollAction.volume(3).applying(defaults) == .volume(3), + "default preferences keep the action") + let reversed = NotchGesturePreferences(swipeToSkip: true, scrollForVolume: true, reverseSwipe: true, reverseScroll: true) + check(NotchScrollAction.nextTrack.applying(reversed) == .previousTrack, "reversed swipe") + check(NotchScrollAction.previousTrack.applying(reversed) == .nextTrack, "reversed swipe, other way") + check(NotchScrollAction.volume(3).applying(reversed) == .volume(-3), "reversed scroll") + let off = NotchGesturePreferences(swipeToSkip: false, scrollForVolume: false, reverseSwipe: false, reverseScroll: false) + check(NotchScrollAction.nextTrack.applying(off) == nil && NotchScrollAction.volume(3).applying(off) == nil, + "disabled gestures do nothing") + var wheel = NotchScrollGesture() + check(wheel.handle(sample(0, 1, .none, natural: false, precise: false)) == .volume(5), "mouse wheel up: +5 %") + check(wheel.handle(sample(0, -2, .none, natural: false, precise: false)) == .volume(-5), "mouse wheel down: -5 %") +} + // NotchGeometry: an external screen without a notch, right of the primary screen. do { let frame = CGRect(x: 1512, y: 0, width: 2560, height: 1440) diff --git a/README.md b/README.md index 8389f52d..249825b0 100644 --- a/README.md +++ b/README.md @@ -74,7 +74,15 @@ Move the pointer over the notch and it opens into a player with: - a headphones button to change the sound mode without opening the menu When the notch is closed, it shows the album artwork and little bars that move with the music. Hover the bars -to skip to the next track, or to resume the music when it's paused. +to skip to the next track, or to resume the music when it's paused. When the track changes, the artwork flips +over, backwards when you go to the previous track. + +With the pointer over the notch, you can also use the trackpad: + +- swipe right with two fingers for the next track, left for the previous one +- scroll up or down to change Spotify's volume, the volume bar shows up while you do + +You can turn these gestures off or reverse their direction in SonyNotch Options › Notch Gestures. To change its size, open the menu and go to SonyNotch Options › Notch Size. You can set the width and height, the size of the closed notch, the artwork and the text. You see the result live and it's saved. To hide the diff --git a/scripts/test.sh b/scripts/test.sh index dd88093f..6c1c9dcd 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -13,7 +13,7 @@ echo "== LogicTests" swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$ROOT/Client/tests/LogicTests/main.swift" \ "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ - "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" \ + "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" "$MAC/Notch/NotchScrollGesture.swift" \ "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ "$MAC/Updates/ReleaseInfo.swift" \ -o "$OUT/LogicTests" From d89630197362c7ec55f9a0b7ad5d9f42d67fb8cf Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 17:12:08 +0200 Subject: [PATCH 41/50] feat(notch): trackpad gestures and haptic feedback, each configurable in Notch Gestures --- Client/macos/AppSettings.swift | 20 +++++++++ Client/macos/HeadphonesMenu.swift | 18 +++++++- Client/macos/MenuRows/HapticStrengthRow.swift | 36 ++++++++++++++++ Client/macos/Notch/NotchController.swift | 24 ++++++++++- Client/macos/Notch/NotchHaptics.swift | 43 +++++++++++++++++++ Client/macos/Notch/NotchMotion.swift | 5 ++- Client/macos/Notch/NotchScrollGesture.swift | 8 ++++ Client/macos/fr.lproj/Localizable.strings | 9 ++++ Client/tests/LogicTests/main.swift | 3 ++ README.md | 4 +- 10 files changed, 165 insertions(+), 5 deletions(-) create mode 100644 Client/macos/MenuRows/HapticStrengthRow.swift create mode 100644 Client/macos/Notch/NotchHaptics.swift diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 7aa709e5..001ce5c3 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -17,6 +17,11 @@ final class AppSettings: ObservableObject { static let scrollForVolume = "gestureScrollForVolume" static let reverseSwipe = "gestureReverseSwipe" static let reverseScroll = "gestureReverseScroll" + static let hapticOnOpen = "hapticOnOpen" + static let hapticOnButtons = "hapticOnButtons" + static let hapticOnSkip = "hapticOnSkip" + static let hapticOnVolume = "hapticOnVolume" + static let hapticStrength = "hapticStrength" } private let defaults: UserDefaults @@ -43,6 +48,13 @@ final class AppSettings: ObservableObject { @Published var scrollForVolume: Bool { didSet { defaults.set(scrollForVolume, forKey: Keys.scrollForVolume) } } @Published var reverseSwipe: Bool { didSet { defaults.set(reverseSwipe, forKey: Keys.reverseSwipe) } } @Published var reverseScroll: Bool { didSet { defaults.set(reverseScroll, forKey: Keys.reverseScroll) } } + @Published var hapticOnOpen: Bool { didSet { defaults.set(hapticOnOpen, forKey: Keys.hapticOnOpen) } } + @Published var hapticOnButtons: Bool { didSet { defaults.set(hapticOnButtons, forKey: Keys.hapticOnButtons) } } + @Published var hapticOnSkip: Bool { didSet { defaults.set(hapticOnSkip, forKey: Keys.hapticOnSkip) } } + @Published var hapticOnVolume: Bool { didSet { defaults.set(hapticOnVolume, forKey: Keys.hapticOnVolume) } } + + var anyHaptics: Bool { hapticOnOpen || hapticOnButtons || hapticOnSkip || hapticOnVolume } + @Published var hapticStrength: Int { didSet { defaults.set(hapticStrength, forKey: Keys.hapticStrength) } } var gesturePreferences: NotchGesturePreferences { NotchGesturePreferences(swipeToSkip: swipeToSkip, scrollForVolume: scrollForVolume, @@ -74,6 +86,8 @@ final class AppSettings: ObservableObject { Keys.notchSide: Double(layout.sideExtension), Keys.notchZoom: Double(layout.zoom), Keys.notchArtwork: Double(layout.restingArtwork), Keys.swipeToSkip: true, Keys.scrollForVolume: true, Keys.reverseSwipe: false, Keys.reverseScroll: false, + Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, + Keys.hapticStrength: 2, ]) autoConnect = defaults.bool(forKey: Keys.autoConnect) autoReconnect = defaults.bool(forKey: Keys.autoReconnect) @@ -87,6 +101,12 @@ final class AppSettings: ObservableObject { scrollForVolume = defaults.bool(forKey: Keys.scrollForVolume) reverseSwipe = defaults.bool(forKey: Keys.reverseSwipe) reverseScroll = defaults.bool(forKey: Keys.reverseScroll) + hapticOnOpen = defaults.bool(forKey: Keys.hapticOnOpen) + hapticOnButtons = defaults.bool(forKey: Keys.hapticOnButtons) + hapticOnSkip = defaults.bool(forKey: Keys.hapticOnSkip) + hapticOnVolume = defaults.bool(forKey: Keys.hapticOnVolume) + hapticStrength = min(NotchHaptics.strengthRange.upperBound, + max(NotchHaptics.strengthRange.lowerBound, defaults.integer(forKey: Keys.hapticStrength))) launchAtLogin = SMAppService.mainApp.status == .enabled } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 2a1a876b..8d928f0c 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -269,18 +269,34 @@ final class HeadphonesMenu { (tr("Scroll to Change Volume"), \.scrollForVolume), (tr("Reverse Swipe Direction"), \.reverseSwipe), (tr("Reverse Scroll Direction"), \.reverseScroll), + (tr("When the Notch Opens"), \.hapticOnOpen), + (tr("On Buttons"), \.hapticOnButtons), + (tr("When Changing Track"), \.hapticOnSkip), + (tr("On Volume Steps"), \.hapticOnVolume), ] for (title, keyPath) in rows { + if keyPath == \.reverseSwipe { gesturesMenu.addItem(.separator()) } + if keyPath == \.hapticOnOpen { + gesturesMenu.addItem(.separator()) + gesturesMenu.addItem(Self.submenuHeader(tr("Haptic Feedback"))) + } let item = ActionMenuItem(title) { [weak settings] in settings?[keyPath: keyPath].toggle() } gestureItems.append((item, keyPath)) gesturesMenu.addItem(item) - if keyPath == \.scrollForVolume { gesturesMenu.addItem(.separator()) } } + gesturesMenu.addItem(hostingMenuItem { HapticStrengthRow(settings: settings) }) gesturesItem.title = tr("Notch Gestures") gesturesItem.submenu = gesturesMenu return gesturesItem } + private static func submenuHeader(_ title: String) -> NSMenuItem { + if #available(macOS 14.0, *) { return .sectionHeader(title: title) } + let item = NSMenuItem(title: title, action: nil, keyEquivalent: "") + item.isEnabled = false + return item + } + // Options › Notch Size: sliders applied live, the notch staying open as a preview while the submenu is open. private func makeNotchSizeItem() -> NSMenuItem { let sizeMenu = NSMenu() diff --git a/Client/macos/MenuRows/HapticStrengthRow.swift b/Client/macos/MenuRows/HapticStrengthRow.swift new file mode 100644 index 00000000..acb61463 --- /dev/null +++ b/Client/macos/MenuRows/HapticStrengthRow.swift @@ -0,0 +1,36 @@ +import SwiftUI + +// Options › Notch Gestures: "Strength ━━●━━ Medium", tapping the trackpad at each step while it moves. +struct HapticStrengthRow: View { + @ObservedObject var settings: AppSettings + + private var label: String { + switch settings.hapticStrength { + case ...1: return tr("Light") + case 2: return tr("Medium") + default: return tr("Strong") + } + } + + var body: some View { + HStack(spacing: 8) { + Text(tr("Strength")) + .lineLimit(1) + .frame(width: 70, alignment: .leading) + Slider(value: Binding(get: { Double(settings.hapticStrength) }, + set: { settings.hapticStrength = Int($0.rounded()) }), + in: Double(NotchHaptics.strengthRange.lowerBound)...Double(NotchHaptics.strengthRange.upperBound), + step: 1) + .controlSize(.small) + Text(label) + .font(.system(size: 11, weight: .medium)) + .foregroundColor(.secondary) + .frame(width: 50, alignment: .trailing) + } + .padding(.leading, MenuMetrics.leading) + .padding(.trailing, MenuMetrics.trailing) + .padding(.vertical, 3) + .disabled(!settings.anyHaptics) + .onChange(of: settings.hapticStrength) { strength in NotchHaptics.preview(strength: strength) } + } +} diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index 7f69910b..a6a8ca6d 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -91,6 +91,20 @@ final class NotchController { .receive(on: DispatchQueue.main) .sink { [weak self] _ in self?.sizeChanged(showOpen: false) } .store(in: &cancellables) + Publishers.CombineLatest4(settings.$hapticOnOpen, settings.$hapticOnButtons, settings.$hapticOnSkip, + settings.$hapticOnVolume) + .sink { open, buttons, skip, volume in + var events = Set() + if open { events.insert(.notchOpens) } + if buttons { events.insert(.buttonPress) } + if skip { events.insert(.trackSkip) } + if volume { events.insert(.volumeDetent) } + NotchHaptics.enabledEvents = events + } + .store(in: &cancellables) + settings.$hapticStrength + .sink { NotchHaptics.strength = $0 } + .store(in: &cancellables) settings.$notchPreviewing .dropFirst() .receive(on: DispatchQueue.main) @@ -229,6 +243,7 @@ final class NotchController { panel.ignoresMouseEvents = false panel.orderFrontRegardless() withAnimation(NotchMotion.open) { state.isOpen = true } + if !previewing { NotchHaptics.tap(.notchOpens) } music.notchDidOpen() } @@ -272,8 +287,12 @@ final class NotchController { precise: event.hasPreciseScrollingDeltas, inverted: event.isDirectionInvertedFromDevice, phase: phase) switch scrollGesture.handle(sample)?.applying(settings.gesturePreferences) { - case .nextTrack?: music.next() - case .previousTrack?: music.previous() + case .nextTrack?: + NotchHaptics.tap(.trackSkip) + music.next() + case .previousTrack?: + NotchHaptics.tap(.trackSkip) + music.previous() case .volume(let change)?: changeVolume(by: change) case nil: break } @@ -282,6 +301,7 @@ final class NotchController { private func changeVolume(by change: Int) { guard let base = gestureVolume ?? music.nowPlaying?.volume else { return } let volume = min(100, max(0, base + change)) + if VolumeDetent.crossed(from: base, to: volume) { NotchHaptics.tap(.volumeDetent) } gestureVolume = volume state.scrolledVolume = volume music.setVolume(volume, final: false) diff --git a/Client/macos/Notch/NotchHaptics.swift b/Client/macos/Notch/NotchHaptics.swift new file mode 100644 index 00000000..04d638e1 --- /dev/null +++ b/Client/macos/Notch/NotchHaptics.swift @@ -0,0 +1,43 @@ +import AppKit + +// Light taps on the Force Touch trackpad: notch opening, button presses, track skips, volume detents. Only felt +// while a finger rests on the trackpad. Options › Notch Gestures turns each kind on or off, and the strength +// slider picks one of three levels (macOS only offers three patterns; "strong" doubles its tap). +enum NotchHaptics { + enum Event { + case notchOpens + case buttonPress + case trackSkip + case volumeDetent + } + + static let strengthRange = 1...3 + + static var enabledEvents: Set = [.notchOpens, .buttonPress, .trackSkip, .volumeDetent] + static var strength = 2 + + static func tap(_ event: Event) { + guard enabledEvents.contains(event) else { return } + perform(strength: strength) + } + + // A tap at a given strength, felt while moving the strength slider. + static func preview(strength: Int) { + perform(strength: strength) + } + + private static func perform(strength: Int) { + let performer = NSHapticFeedbackManager.defaultPerformer + switch strength { + case ...1: + performer.perform(.generic, performanceTime: .now) + case 2: + performer.perform(.alignment, performanceTime: .now) + default: + performer.perform(.levelChange, performanceTime: .now) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.035) { + performer.perform(.levelChange, performanceTime: .now) + } + } + } +} diff --git a/Client/macos/Notch/NotchMotion.swift b/Client/macos/Notch/NotchMotion.swift index 36700c70..26eb2b52 100644 --- a/Client/macos/Notch/NotchMotion.swift +++ b/Client/macos/Notch/NotchMotion.swift @@ -41,13 +41,16 @@ struct FadeScale: ViewModifier { } } -// Buttons shrink a little while pressed, and spring back. +// Buttons shrink a little while pressed, spring back, and tap the trackpad. struct PressableButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label .scaleEffect(configuration.isPressed && !NotchMotion.reduceMotion ? 0.84 : 1) .opacity(configuration.isPressed ? 0.7 : 1) .animation(.spring(response: 0.25, dampingFraction: 0.6), value: configuration.isPressed) + .onChange(of: configuration.isPressed) { pressed in + if pressed { NotchHaptics.tap(.buttonPress) } + } } } diff --git a/Client/macos/Notch/NotchScrollGesture.swift b/Client/macos/Notch/NotchScrollGesture.swift index 9a283391..718196b6 100644 --- a/Client/macos/Notch/NotchScrollGesture.swift +++ b/Client/macos/Notch/NotchScrollGesture.swift @@ -104,3 +104,11 @@ extension NotchScrollAction { } } } + +// Scrolling the volume taps the trackpad at every ten percent, like a notched wheel. +enum VolumeDetent { + static func crossed(from old: Int, to new: Int) -> Bool { + guard old != new else { return false } + return old / 10 != new / 10 || new == 0 || new == 100 + } +} diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 3ac066c2..5d63e3df 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -91,3 +91,12 @@ "Scroll to Change Volume" = "Défiler pour régler le volume"; "Reverse Swipe Direction" = "Inverser le sens du balayage"; "Reverse Scroll Direction" = "Inverser le sens du défilement"; +"Haptic Feedback" = "Retour haptique"; +"Strength" = "Intensité"; +"Light" = "Léger"; +"Medium" = "Moyen"; +"Strong" = "Fort"; +"When the Notch Opens" = "À l’ouverture de l’encoche"; +"On Buttons" = "Sur les boutons"; +"When Changing Track" = "En changeant de morceau"; +"On Volume Steps" = "Sur les crans du volume"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 8a292b94..77d33808 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -123,6 +123,9 @@ do { let off = NotchGesturePreferences(swipeToSkip: false, scrollForVolume: false, reverseSwipe: false, reverseScroll: false) check(NotchScrollAction.nextTrack.applying(off) == nil && NotchScrollAction.volume(3).applying(off) == nil, "disabled gestures do nothing") + check(!VolumeDetent.crossed(from: 41, to: 49) && VolumeDetent.crossed(from: 49, to: 50), "detent every 10 %") + check(VolumeDetent.crossed(from: 52, to: 48) && !VolumeDetent.crossed(from: 50, to: 50), "detent going down") + check(VolumeDetent.crossed(from: 3, to: 0) && VolumeDetent.crossed(from: 97, to: 100), "detents at the ends") var wheel = NotchScrollGesture() check(wheel.handle(sample(0, 1, .none, natural: false, precise: false)) == .volume(5), "mouse wheel up: +5 %") check(wheel.handle(sample(0, -2, .none, natural: false, precise: false)) == .volume(-5), "mouse wheel down: -5 %") diff --git a/README.md b/README.md index 249825b0..8014c91f 100644 --- a/README.md +++ b/README.md @@ -82,7 +82,9 @@ With the pointer over the notch, you can also use the trackpad: - swipe right with two fingers for the next track, left for the previous one - scroll up or down to change Spotify's volume, the volume bar shows up while you do -You can turn these gestures off or reverse their direction in SonyNotch Options › Notch Gestures. +The trackpad gives a light tap when the notch opens, when you press a button, skip a track or pass every ten +percent of volume. In SonyNotch Options › Notch Gestures you can turn each gesture and each kind of tap on or off, reverse the +gestures' direction and set how strong the taps are. To change its size, open the menu and go to SonyNotch Options › Notch Size. You can set the width and height, the size of the closed notch, the artwork and the text. You see the result live and it's saved. To hide the From 4828d062ea9db99a454c9f5cb42b633e610566e3 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 17:42:01 +0200 Subject: [PATCH 42/50] feat(notch): artwork-coloured glow behind the player, with adjustable size --- Client/macos/AppSettings.swift | 9 ++- Client/macos/HeadphonesMenu.swift | 69 +++++++++++++++++++++-- Client/macos/Notch/NotchController.swift | 6 ++ Client/macos/Notch/NotchView.swift | 17 ++++++ Client/macos/fr.lproj/Localizable.strings | 3 + README.md | 3 + 6 files changed, 102 insertions(+), 5 deletions(-) diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 001ce5c3..db97957f 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -17,6 +17,8 @@ final class AppSettings: ObservableObject { static let scrollForVolume = "gestureScrollForVolume" static let reverseSwipe = "gestureReverseSwipe" static let reverseScroll = "gestureReverseScroll" + static let artworkGlow = "artworkGlow" + static let glowSize = "glowSize" static let hapticOnOpen = "hapticOnOpen" static let hapticOnButtons = "hapticOnButtons" static let hapticOnSkip = "hapticOnSkip" @@ -48,6 +50,9 @@ final class AppSettings: ObservableObject { @Published var scrollForVolume: Bool { didSet { defaults.set(scrollForVolume, forKey: Keys.scrollForVolume) } } @Published var reverseSwipe: Bool { didSet { defaults.set(reverseSwipe, forKey: Keys.reverseSwipe) } } @Published var reverseScroll: Bool { didSet { defaults.set(reverseScroll, forKey: Keys.reverseScroll) } } + @Published var artworkGlow: Bool { didSet { defaults.set(artworkGlow, forKey: Keys.artworkGlow) } } + @Published var glowSize: Double { didSet { defaults.set(glowSize, forKey: Keys.glowSize) } } + static let glowSizeRange: ClosedRange = 0.5...1.75 // times the default glow size @Published var hapticOnOpen: Bool { didSet { defaults.set(hapticOnOpen, forKey: Keys.hapticOnOpen) } } @Published var hapticOnButtons: Bool { didSet { defaults.set(hapticOnButtons, forKey: Keys.hapticOnButtons) } } @Published var hapticOnSkip: Bool { didSet { defaults.set(hapticOnSkip, forKey: Keys.hapticOnSkip) } } @@ -86,7 +91,7 @@ final class AppSettings: ObservableObject { Keys.notchSide: Double(layout.sideExtension), Keys.notchZoom: Double(layout.zoom), Keys.notchArtwork: Double(layout.restingArtwork), Keys.swipeToSkip: true, Keys.scrollForVolume: true, Keys.reverseSwipe: false, Keys.reverseScroll: false, - Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, + Keys.artworkGlow: true, Keys.glowSize: 1.0, Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, Keys.hapticStrength: 2, ]) autoConnect = defaults.bool(forKey: Keys.autoConnect) @@ -101,6 +106,8 @@ final class AppSettings: ObservableObject { scrollForVolume = defaults.bool(forKey: Keys.scrollForVolume) reverseSwipe = defaults.bool(forKey: Keys.reverseSwipe) reverseScroll = defaults.bool(forKey: Keys.reverseScroll) + artworkGlow = defaults.bool(forKey: Keys.artworkGlow) + glowSize = defaults.double(forKey: Keys.glowSize) hapticOnOpen = defaults.bool(forKey: Keys.hapticOnOpen) hapticOnButtons = defaults.bool(forKey: Keys.hapticOnButtons) hapticOnSkip = defaults.bool(forKey: Keys.hapticOnSkip) diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 8d928f0c..dc5971db 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -1,5 +1,6 @@ import AppKit import Combine +import SwiftUI // The status item's menu. Built once; update() refreshes states, visibility and values in place, // including while the menu is open. @@ -31,11 +32,17 @@ final class HeadphonesMenu { private var autoConnectItem = NSMenuItem() private var autoReconnectItem = NSMenuItem() private var showNotchItem = NSMenuItem() + private var artworkGlowItem = NSMenuItem() + private let glowItem = NSMenuItem() private let notchSizeItem = NSMenuItem() private var updateItem = NSMenuItem() private let gesturesItem = NSMenuItem() private var gestureItems: [(NSMenuItem, ReferenceWritableKeyPath)] = [] private let notchSizeMenuDelegate = NotchSizeMenuDelegate() + private let gesturesMenuDelegate = NotchSizeMenuDelegate() + // SwiftUI sliders in a submenu stop taking clicks once the submenu has been closed and opened again, so their + // rows are rebuilt each time their submenu opens (see sliderMenuItem). + private var sliderRowBuilders: [ObjectIdentifier: () -> NSView?] = [:] private static var presets: [(Int, String)] { [(0x00, tr("Off")), (0x10, tr("Bright")), (0x11, tr("Excited")), (0x12, tr("Mellow")), @@ -170,6 +177,7 @@ final class HeadphonesMenu { autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } for item in [autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } + optionsMenu.addItem(makeGlowItem()) optionsMenu.addItem(makeNotchSizeItem()) optionsMenu.addItem(makeGesturesItem()) let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") @@ -237,6 +245,8 @@ final class HeadphonesMenu { autoConnectItem.state = settings.autoConnect ? .on : .off autoReconnectItem.state = settings.autoReconnect ? .on : .off showNotchItem.state = settings.showNotch ? .on : .off + artworkGlowItem.state = settings.artworkGlow ? .on : .off + glowItem.isEnabled = settings.showNotch notchSizeItem.isEnabled = settings.showNotch gesturesItem.isEnabled = settings.showNotch for (item, keyPath) in gestureItems { @@ -260,6 +270,45 @@ final class HeadphonesMenu { } } + private func sliderMenuItem(width: CGFloat = MenuMetrics.width + 40, + _ content: @escaping () -> Content) -> NSMenuItem { + let item = hostingMenuItem(width: width, content) + sliderRowBuilders[ObjectIdentifier(item)] = { + let fresh = hostingMenuItem(width: width, content) + let view = fresh.view + fresh.view = nil + return view + } + return item + } + + private func rebuildSliderRows(in menu: NSMenu) { + for item in menu.items { + if let build = sliderRowBuilders[ObjectIdentifier(item)], let view = build() { item.view = view } + } + } + + // Options › Glow: the artwork-coloured glow behind the player and its size. Like Notch Size, the notch opens + // as a preview while the submenu is open. + private func makeGlowItem() -> NSMenuItem { + let glowMenu = NSMenu() + glowMenu.autoenablesItems = false + notchSizeMenuDelegate.settings = settings + notchSizeMenuDelegate.willOpen = { [weak self] menu in self?.rebuildSliderRows(in: menu) } + glowMenu.delegate = notchSizeMenuDelegate + artworkGlowItem = ActionMenuItem(tr("Artwork Glow")) { [weak settings] in settings?.artworkGlow.toggle() } + glowMenu.addItem(artworkGlowItem) + glowMenu.addItem(sliderMenuItem { [settings] in + NotchSizeRow(settings: settings, title: tr("Glow Size"), keyPath: \.glowSize, + range: AppSettings.glowSizeRange, format: { "\(Int(($0 * 100).rounded())) %" }) + }) + glowMenu.addItem(.separator()) + glowMenu.addItem(ActionMenuItem(tr("Reset Size")) { [weak settings] in settings?.glowSize = 1 }) + glowItem.title = tr("Glow") + glowItem.submenu = glowMenu + return glowItem + } + // Options › Notch Gestures: turn the swipe and scroll gestures on or off, or reverse them. private func makeGesturesItem() -> NSMenuItem { let gesturesMenu = NSMenu() @@ -284,7 +333,10 @@ final class HeadphonesMenu { gestureItems.append((item, keyPath)) gesturesMenu.addItem(item) } - gesturesMenu.addItem(hostingMenuItem { HapticStrengthRow(settings: settings) }) + gesturesMenu.addItem(sliderMenuItem(width: MenuMetrics.width) { [settings] in HapticStrengthRow(settings: settings) }) + gesturesMenuDelegate.previewsNotch = false + gesturesMenuDelegate.willOpen = { [weak self] menu in self?.rebuildSliderRows(in: menu) } + gesturesMenu.delegate = gesturesMenuDelegate gesturesItem.title = tr("Notch Gestures") gesturesItem.submenu = gesturesMenu return gesturesItem @@ -302,6 +354,7 @@ final class HeadphonesMenu { let sizeMenu = NSMenu() sizeMenu.autoenablesItems = false notchSizeMenuDelegate.settings = settings + notchSizeMenuDelegate.willOpen = { [weak self] menu in self?.rebuildSliderRows(in: menu) } sizeMenu.delegate = notchSizeMenuDelegate let points: (Double) -> String = { String(Int($0.rounded())) } let percent: (Double) -> String = { "\(Int(($0 * 100).rounded())) %" } @@ -313,7 +366,7 @@ final class HeadphonesMenu { (tr("Text Size"), \.notchZoom, NotchLayout.zoomRange, percent), ] for (title, keyPath, range, format) in rows { - sizeMenu.addItem(hostingMenuItem(width: MenuMetrics.width + 40) { + sizeMenu.addItem(sliderMenuItem { [settings] in NotchSizeRow(settings: settings, title: title, keyPath: keyPath, range: range, format: format) }) } @@ -364,7 +417,15 @@ final class HeadphonesMenu { // Opens the notch as a live preview while the Notch Size submenu is open. private final class NotchSizeMenuDelegate: NSObject, NSMenuDelegate { weak var settings: AppSettings? + var previewsNotch = true + var willOpen: ((NSMenu) -> Void)? - func menuWillOpen(_ menu: NSMenu) { settings?.notchPreviewing = true } - func menuDidClose(_ menu: NSMenu) { settings?.notchPreviewing = false } + func menuWillOpen(_ menu: NSMenu) { + willOpen?(menu) + if previewsNotch { settings?.notchPreviewing = true } + } + + func menuDidClose(_ menu: NSMenu) { + if previewsNotch { settings?.notchPreviewing = false } + } } diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index a6a8ca6d..06dd08c1 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -102,6 +102,12 @@ final class NotchController { NotchHaptics.enabledEvents = events } .store(in: &cancellables) + settings.$artworkGlow + .sink { [weak self] in self?.state.artworkGlow = $0 } + .store(in: &cancellables) + settings.$glowSize + .sink { [weak self] in self?.state.glowSize = CGFloat($0) } + .store(in: &cancellables) settings.$hapticStrength .sink { NotchHaptics.strength = $0 } .store(in: &cancellables) diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 8c40532f..e78b2fac 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -7,6 +7,8 @@ final class NotchViewState: ObservableObject { @Published var openContentMounted = false // true while open, and while the closing animation plays @Published var trailingHovered = false // pointer over the resting music control @Published var scrolledVolume: Int? // Spotify volume being set by scrolling over the notch + @Published var artworkGlow = true // Options › Glow + @Published var glowSize: CGFloat = 1 // times the default glow size @Published var resting: NotchRestingState = .empty @Published var tab: NotchTab = .music @Published var restingSize: CGSize = .zero @@ -71,6 +73,7 @@ struct NotchView: View { .environment(\.notchScale, state.contentScale) .padding(.top, state.notchHeight) .frame(width: state.openSize.width, height: state.openSize.height) + .background(artworkGlow) .modifier(FadeScale(amount: state.isOpen ? 0 : 1, scale: NotchMotion.morphScale)) .allowsHitTesting(state.isOpen) .transition(NotchMotion.morph) @@ -139,6 +142,20 @@ struct NotchView: View { // MARK: - Open + // A soft light in the artwork's colour, coming from where the artwork sits and fading over the player, like + // the iPhone's lock screen. Its colour glides to the next track's; it fades out on the headphones page. + private var artworkGlow: some View { + let tint = music.artworkTint.map(Color.init(nsColor:)) ?? .clear + let visible = state.artworkGlow && state.tab == .music && music.hasMusic && music.artworkTint != nil + return RadialGradient(colors: [tint.opacity(0.42), tint.opacity(0.12), .clear], + center: UnitPoint(x: 0.17, y: 0.4), startRadius: 0, + endRadius: state.openSize.width * 0.8 * state.glowSize) + .opacity(visible ? 1 : 0) + .animation(.easeInOut(duration: 0.6), value: music.artworkTint) + .animation(NotchMotion.content, value: visible) + .allowsHitTesting(false) + } + private var openContent: some View { // Both pages stay in the hierarchy (switching is then a cross-slide, not an insertion), the hidden one // neither drawn, clickable nor read by VoiceOver. diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 5d63e3df..a1470a09 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -100,3 +100,6 @@ "On Buttons" = "Sur les boutons"; "When Changing Track" = "En changeant de morceau"; "On Volume Steps" = "Sur les crans du volume"; +"Artwork Glow" = "Halo de la pochette"; +"Glow" = "Halo"; +"Glow Size" = "Taille"; diff --git a/README.md b/README.md index 8014c91f..9921c6dc 100644 --- a/README.md +++ b/README.md @@ -73,6 +73,9 @@ Move the pointer over the notch and it opens into a player with: - a volume button for Spotify's volume - a headphones button to change the sound mode without opening the menu +Behind the player, a soft glow takes the colour of the artwork. In SonyNotch Options › Glow you can turn it off +or change its size, with the notch open as a live preview. + When the notch is closed, it shows the album artwork and little bars that move with the music. Hover the bars to skip to the next track, or to resume the music when it's paused. When the track changes, the artwork flips over, backwards when you go to the previous track. From 3d3b0b31cd5600fef57960c1e794119dab902099 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 17:53:12 +0200 Subject: [PATCH 43/50] feat(notch): progress ring around the closed notch artwork, fix submenu sliders after reopening --- Client/macos/AppSettings.swift | 5 +++- Client/macos/HeadphonesMenu.swift | 5 ++++ Client/macos/Music/PlaybackClock.swift | 6 +++++ Client/macos/Notch/NotchController.swift | 3 +++ Client/macos/Notch/NotchView.swift | 32 +++++++++++++++++++++++ Client/macos/fr.lproj/Localizable.strings | 1 + Client/tests/LogicTests/main.swift | 5 ++++ README.md | 6 +++-- 8 files changed, 60 insertions(+), 3 deletions(-) diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index db97957f..0d5a83d8 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -18,6 +18,7 @@ final class AppSettings: ObservableObject { static let reverseSwipe = "gestureReverseSwipe" static let reverseScroll = "gestureReverseScroll" static let artworkGlow = "artworkGlow" + static let progressRing = "progressRing" static let glowSize = "glowSize" static let hapticOnOpen = "hapticOnOpen" static let hapticOnButtons = "hapticOnButtons" @@ -51,6 +52,7 @@ final class AppSettings: ObservableObject { @Published var reverseSwipe: Bool { didSet { defaults.set(reverseSwipe, forKey: Keys.reverseSwipe) } } @Published var reverseScroll: Bool { didSet { defaults.set(reverseScroll, forKey: Keys.reverseScroll) } } @Published var artworkGlow: Bool { didSet { defaults.set(artworkGlow, forKey: Keys.artworkGlow) } } + @Published var progressRing: Bool { didSet { defaults.set(progressRing, forKey: Keys.progressRing) } } @Published var glowSize: Double { didSet { defaults.set(glowSize, forKey: Keys.glowSize) } } static let glowSizeRange: ClosedRange = 0.5...1.75 // times the default glow size @Published var hapticOnOpen: Bool { didSet { defaults.set(hapticOnOpen, forKey: Keys.hapticOnOpen) } } @@ -91,7 +93,7 @@ final class AppSettings: ObservableObject { Keys.notchSide: Double(layout.sideExtension), Keys.notchZoom: Double(layout.zoom), Keys.notchArtwork: Double(layout.restingArtwork), Keys.swipeToSkip: true, Keys.scrollForVolume: true, Keys.reverseSwipe: false, Keys.reverseScroll: false, - Keys.artworkGlow: true, Keys.glowSize: 1.0, Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, + Keys.artworkGlow: true, Keys.progressRing: true, Keys.glowSize: 1.0, Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, Keys.hapticStrength: 2, ]) autoConnect = defaults.bool(forKey: Keys.autoConnect) @@ -107,6 +109,7 @@ final class AppSettings: ObservableObject { reverseSwipe = defaults.bool(forKey: Keys.reverseSwipe) reverseScroll = defaults.bool(forKey: Keys.reverseScroll) artworkGlow = defaults.bool(forKey: Keys.artworkGlow) + progressRing = defaults.bool(forKey: Keys.progressRing) glowSize = defaults.double(forKey: Keys.glowSize) hapticOnOpen = defaults.bool(forKey: Keys.hapticOnOpen) hapticOnButtons = defaults.bool(forKey: Keys.hapticOnButtons) diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index dc5971db..10b84b4c 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -33,6 +33,7 @@ final class HeadphonesMenu { private var autoReconnectItem = NSMenuItem() private var showNotchItem = NSMenuItem() private var artworkGlowItem = NSMenuItem() + private var progressRingItem = NSMenuItem() private let glowItem = NSMenuItem() private let notchSizeItem = NSMenuItem() private var updateItem = NSMenuItem() @@ -177,6 +178,8 @@ final class HeadphonesMenu { autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } for item in [autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } + progressRingItem = ActionMenuItem(tr("Progress Ring")) { [weak settings] in settings?.progressRing.toggle() } + optionsMenu.addItem(progressRingItem) optionsMenu.addItem(makeGlowItem()) optionsMenu.addItem(makeNotchSizeItem()) optionsMenu.addItem(makeGesturesItem()) @@ -247,6 +250,8 @@ final class HeadphonesMenu { showNotchItem.state = settings.showNotch ? .on : .off artworkGlowItem.state = settings.artworkGlow ? .on : .off glowItem.isEnabled = settings.showNotch + progressRingItem.state = settings.progressRing ? .on : .off + progressRingItem.isEnabled = settings.showNotch notchSizeItem.isEnabled = settings.showNotch gesturesItem.isEnabled = settings.showNotch for (item, keyPath) in gestureItems { diff --git a/Client/macos/Music/PlaybackClock.swift b/Client/macos/Music/PlaybackClock.swift index 89c24dcc..3c3765c5 100644 --- a/Client/macos/Music/PlaybackClock.swift +++ b/Client/macos/Music/PlaybackClock.swift @@ -9,6 +9,12 @@ enum PlaybackClock { return max(0, position) } + // 0...1 through the track; 0 when its length isn't known. + static func progress(of track: NowPlaying, at date: Date) -> Double { + guard track.duration > 0 else { return 0 } + return min(1, position(of: track, at: date) / track.duration) + } + // "1:05", "12:34", "1:02:03". static func format(_ seconds: TimeInterval) -> String { let total = max(0, Int(seconds.rounded(.down))) diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index 06dd08c1..c43c2d5f 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -105,6 +105,9 @@ final class NotchController { settings.$artworkGlow .sink { [weak self] in self?.state.artworkGlow = $0 } .store(in: &cancellables) + settings.$progressRing + .sink { [weak self] in self?.state.progressRing = $0 } + .store(in: &cancellables) settings.$glowSize .sink { [weak self] in self?.state.glowSize = CGFloat($0) } .store(in: &cancellables) diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index e78b2fac..245b6fc0 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -8,6 +8,7 @@ final class NotchViewState: ObservableObject { @Published var trailingHovered = false // pointer over the resting music control @Published var scrolledVolume: Int? // Spotify volume being set by scrolling over the notch @Published var artworkGlow = true // Options › Glow + @Published var progressRing = true // Options › Progress Ring @Published var glowSize: CGFloat = 1 // times the default glow size @Published var resting: NotchRestingState = .empty @Published var tab: NotchTab = .music @@ -114,6 +115,11 @@ struct NotchView: View { isBackward: { [music] in music.trackChangeIsBackward }, size: state.restingArtworkSize, cornerRadius: state.restingArtworkSize * 0.25) + .overlay { + if state.progressRing, let track = music.nowPlaying { + ProgressRing(track: track, color: music.artworkTint, size: state.restingArtworkSize) + } + } case .headphonesOnly: Image(systemName: "headphones").font(.system(size: 13 * state.restingScale)).foregroundColor(.white) case .empty: @@ -302,6 +308,32 @@ final class ArtworkFlip: ObservableObject { } } +// How far the track is, drawn on the resting artwork's edge from the top, clockwise. Redrawn once a second. +private struct ProgressRing: View { + let track: NowPlaying + let color: NSColor? + let size: CGFloat + + var body: some View { + let shape = RoundedRectangle(cornerRadius: size * 0.25) + let lineWidth = max(1.5, size * 0.08) + TimelineView(.periodic(from: .now, by: 1)) { context in + ZStack { + shape.stroke(Color.black.opacity(0.35), lineWidth: lineWidth) + shape + .trim(from: 0, to: PlaybackClock.progress(of: track, at: context.date)) + .stroke(color.map(Color.init(nsColor:)) ?? Color(white: 0.85), + style: StrokeStyle(lineWidth: lineWidth, lineCap: .round)) + // A square turned a quarter is the same square: the stroke now starts at the top. + .rotationEffect(.degrees(-90)) + .animation(.linear(duration: 1), value: PlaybackClock.progress(of: track, at: context.date)) + } + .padding(lineWidth / 2) + } + .allowsHitTesting(false) + } +} + // Right side of the resting notch while music is loaded: the level bars in the artwork's colour, replaced on // hover by "next track" while playing, or "play" while paused. struct RestingMusicControl: View { diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index a1470a09..fbec9003 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -103,3 +103,4 @@ "Artwork Glow" = "Halo de la pochette"; "Glow" = "Halo"; "Glow Size" = "Taille"; +"Progress Ring" = "Anneau de progression"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 77d33808..2d78e1c4 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -219,6 +219,11 @@ do { duration: 180, position: 0, positionDate: t0.addingTimeInterval(100), isPlaying: true, volume: 50, deviceName: nil, capabilities: track.capabilities) check(PlaybackClock.position(of: nextTrack, at: t0.addingTimeInterval(100)) == 0, "track change: starts from 0") + check(PlaybackClock.progress(of: nextTrack, at: t0.addingTimeInterval(145)) == 0.25, "progress: a quarter in") + var unknownLength = nextTrack + unknownLength.duration = 0 + check(PlaybackClock.progress(of: unknownLength, at: t0.addingTimeInterval(145)) == 0, "progress without a duration") + check(PlaybackClock.progress(of: nextTrack, at: t0.addingTimeInterval(1_000)) == 1, "progress capped at the end") check(PlaybackClock.format(65) == "1:05", "format 1:05 was \(PlaybackClock.format(65))") check(PlaybackClock.format(754.9) == "12:34", "format rounds down") check(PlaybackClock.format(3723) == "1:02:03", "format with hours") diff --git a/README.md b/README.md index 9921c6dc..6bd3ca95 100644 --- a/README.md +++ b/README.md @@ -73,10 +73,12 @@ Move the pointer over the notch and it opens into a player with: - a volume button for Spotify's volume - a headphones button to change the sound mode without opening the menu -Behind the player, a soft glow takes the colour of the artwork. In SonyNotch Options › Glow you can turn it off +Behind the player, a soft glow takes the colour of the artwork. Progress Ring in SonyNotch Options hides the +ring around the closed notch's artwork. In SonyNotch Options › Glow you can turn it off or change its size, with the notch open as a live preview. -When the notch is closed, it shows the album artwork and little bars that move with the music. Hover the bars +When the notch is closed, it shows the album artwork, circled by a ring that fills up as the track plays, and +little bars that move with the music. Hover the bars to skip to the next track, or to resume the music when it's paused. When the track changes, the artwork flips over, backwards when you go to the previous track. From 1d83a24a4d8a31cd6552b5d0b479e087482ef361 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 18:06:05 +0200 Subject: [PATCH 44/50] feat(notch): headphones battery ring on the closed notch, shown while paused, in the artwork colour --- Client/macos/AppSettings.swift | 5 +- Client/macos/HeadphonesMenu.swift | 5 ++ Client/macos/Notch/BatteryDisplay.swift | 25 +++++++ Client/macos/Notch/NotchController.swift | 3 + Client/macos/Notch/NotchView.swift | 83 +++++++++++++++++++++-- Client/macos/fr.lproj/Localizable.strings | 1 + Client/tests/LogicTests/main.swift | 13 ++++ README.md | 27 +++++--- scripts/test.sh | 1 + 9 files changed, 144 insertions(+), 19 deletions(-) create mode 100644 Client/macos/Notch/BatteryDisplay.swift diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 0d5a83d8..de43b2b0 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -19,6 +19,7 @@ final class AppSettings: ObservableObject { static let reverseScroll = "gestureReverseScroll" static let artworkGlow = "artworkGlow" static let progressRing = "progressRing" + static let headphonesBattery = "headphonesBattery" static let glowSize = "glowSize" static let hapticOnOpen = "hapticOnOpen" static let hapticOnButtons = "hapticOnButtons" @@ -53,6 +54,7 @@ final class AppSettings: ObservableObject { @Published var reverseScroll: Bool { didSet { defaults.set(reverseScroll, forKey: Keys.reverseScroll) } } @Published var artworkGlow: Bool { didSet { defaults.set(artworkGlow, forKey: Keys.artworkGlow) } } @Published var progressRing: Bool { didSet { defaults.set(progressRing, forKey: Keys.progressRing) } } + @Published var headphonesBattery: Bool { didSet { defaults.set(headphonesBattery, forKey: Keys.headphonesBattery) } } @Published var glowSize: Double { didSet { defaults.set(glowSize, forKey: Keys.glowSize) } } static let glowSizeRange: ClosedRange = 0.5...1.75 // times the default glow size @Published var hapticOnOpen: Bool { didSet { defaults.set(hapticOnOpen, forKey: Keys.hapticOnOpen) } } @@ -93,7 +95,7 @@ final class AppSettings: ObservableObject { Keys.notchSide: Double(layout.sideExtension), Keys.notchZoom: Double(layout.zoom), Keys.notchArtwork: Double(layout.restingArtwork), Keys.swipeToSkip: true, Keys.scrollForVolume: true, Keys.reverseSwipe: false, Keys.reverseScroll: false, - Keys.artworkGlow: true, Keys.progressRing: true, Keys.glowSize: 1.0, Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, + Keys.artworkGlow: true, Keys.progressRing: true, Keys.headphonesBattery: true, Keys.glowSize: 1.0, Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, Keys.hapticStrength: 2, ]) autoConnect = defaults.bool(forKey: Keys.autoConnect) @@ -110,6 +112,7 @@ final class AppSettings: ObservableObject { reverseScroll = defaults.bool(forKey: Keys.reverseScroll) artworkGlow = defaults.bool(forKey: Keys.artworkGlow) progressRing = defaults.bool(forKey: Keys.progressRing) + headphonesBattery = defaults.bool(forKey: Keys.headphonesBattery) glowSize = defaults.double(forKey: Keys.glowSize) hapticOnOpen = defaults.bool(forKey: Keys.hapticOnOpen) hapticOnButtons = defaults.bool(forKey: Keys.hapticOnButtons) diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 10b84b4c..c6e96ef5 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -34,6 +34,7 @@ final class HeadphonesMenu { private var showNotchItem = NSMenuItem() private var artworkGlowItem = NSMenuItem() private var progressRingItem = NSMenuItem() + private var headphonesBatteryItem = NSMenuItem() private let glowItem = NSMenuItem() private let notchSizeItem = NSMenuItem() private var updateItem = NSMenuItem() @@ -180,6 +181,8 @@ final class HeadphonesMenu { for item in [autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } progressRingItem = ActionMenuItem(tr("Progress Ring")) { [weak settings] in settings?.progressRing.toggle() } optionsMenu.addItem(progressRingItem) + headphonesBatteryItem = ActionMenuItem(tr("Headphones Battery")) { [weak settings] in settings?.headphonesBattery.toggle() } + optionsMenu.addItem(headphonesBatteryItem) optionsMenu.addItem(makeGlowItem()) optionsMenu.addItem(makeNotchSizeItem()) optionsMenu.addItem(makeGesturesItem()) @@ -252,6 +255,8 @@ final class HeadphonesMenu { glowItem.isEnabled = settings.showNotch progressRingItem.state = settings.progressRing ? .on : .off progressRingItem.isEnabled = settings.showNotch + headphonesBatteryItem.state = settings.headphonesBattery ? .on : .off + headphonesBatteryItem.isEnabled = settings.showNotch notchSizeItem.isEnabled = settings.showNotch gesturesItem.isEnabled = settings.showNotch for (item, keyPath) in gestureItems { diff --git a/Client/macos/Notch/BatteryDisplay.swift b/Client/macos/Notch/BatteryDisplay.swift new file mode 100644 index 00000000..e6259f3f --- /dev/null +++ b/Client/macos/Notch/BatteryDisplay.swift @@ -0,0 +1,25 @@ +import Foundation + +// The headphones' battery as the closed notch shows it. Pure, tested in LogicTests. +enum BatteryDisplay { + enum Tone: Equatable { + case normal + case low // 20 % or less + case critical // 10 % or less + case charging + } + + // True-wireless earbuds show the lower side, the one that runs out first. nil when nothing is known yet + // (levels are -1 until read). + static func level(single: Int, dual: Bool, left: Int, right: Int) -> Int? { + let known = (dual ? [left, right] : [single]).filter { $0 >= 0 } + return known.min().map { min(100, $0) } + } + + static func tone(level: Int, charging: Bool) -> Tone { + if charging { return .charging } + if level <= 10 { return .critical } + if level <= 20 { return .low } + return .normal + } +} diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index c43c2d5f..6ecf0922 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -108,6 +108,9 @@ final class NotchController { settings.$progressRing .sink { [weak self] in self?.state.progressRing = $0 } .store(in: &cancellables) + settings.$headphonesBattery + .sink { [weak self] in self?.state.headphonesBattery = $0 } + .store(in: &cancellables) settings.$glowSize .sink { [weak self] in self?.state.glowSize = CGFloat($0) } .store(in: &cancellables) diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 245b6fc0..c784ab00 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -9,6 +9,7 @@ final class NotchViewState: ObservableObject { @Published var scrolledVolume: Int? // Spotify volume being set by scrolling over the notch @Published var artworkGlow = true // Options › Glow @Published var progressRing = true // Options › Progress Ring + @Published var headphonesBattery = true // Options › Headphones Battery @Published var glowSize: CGFloat = 1 // times the default glow size @Published var resting: NotchRestingState = .empty @Published var tab: NotchTab = .music @@ -121,7 +122,10 @@ struct NotchView: View { } } case .headphonesOnly: - Image(systemName: "headphones").font(.system(size: 13 * state.restingScale)).foregroundColor(.white) + // With the battery shown on the right, the mode moves here. + Image(systemName: batteryLevel != nil ? Self.modeSymbol(model.mode) : "headphones") + .font(.system(size: 13 * state.restingScale)) + .foregroundColor(.white) case .empty: EmptyView() } @@ -130,14 +134,29 @@ struct NotchView: View { @ViewBuilder private var trailingItem: some View { switch state.resting { case .musicAndHeadphones, .musicOnly: - RestingMusicControl(music: music, hovered: state.trailingHovered) + RestingMusicControl(music: music, hovered: state.trailingHovered, + battery: state.resting == .musicAndHeadphones ? batteryLevel : nil, + charging: model.batteryCharging, + batterySize: min(state.sideExtension - 6, state.notchHeight - 6)) case .headphonesOnly: - Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13 * state.restingScale)).foregroundColor(.white) + if let level = batteryLevel { + BatteryRing(level: level, tone: BatteryDisplay.tone(level: level, charging: model.batteryCharging), + size: min(state.sideExtension - 6, state.notchHeight - 6)) + } else { + Image(systemName: Self.modeSymbol(model.mode)).font(.system(size: 13 * state.restingScale)).foregroundColor(.white) + } case .empty: EmptyView() } } + // The level to show on the closed notch, nil when the battery option is off or nothing is known yet. + private var batteryLevel: Int? { + guard state.headphonesBattery else { return nil } + return BatteryDisplay.level(single: model.batteryLevel, dual: model.hasDualBattery, + left: model.batteryLeft, right: model.batteryRight) + } + private static func modeSymbol(_ mode: SHCAmbientMode) -> String { switch mode { case .noiseCanceling: return "headphones.circle.fill" @@ -308,6 +327,44 @@ final class ArtworkFlip: ObservableObject { } } +// The headphones' battery on the closed notch: a ring filled to the level with the percentage inside, orange when +// low, red when critical, green while charging. +private struct BatteryRing: View { + let level: Int + let tone: BatteryDisplay.Tone + let size: CGFloat + var tint: NSColor? // the artwork's colour when music is loaded; warnings keep their own colours + + private var color: Color { + switch tone { + case .normal: return tint.map(Color.init(nsColor:)) ?? .white + case .low: return .orange + case .critical: return .red + case .charging: return .green + } + } + + var body: some View { + let lineWidth = max(1.5, size * 0.1) + ZStack { + Circle().stroke(Color.white.opacity(0.2), lineWidth: lineWidth) + Circle() + .trim(from: 0, to: CGFloat(level) / 100) + .stroke(color, style: StrokeStyle(lineWidth: lineWidth, lineCap: .round)) + .rotationEffect(.degrees(-90)) + Text(verbatim: "\(level)") + .font(.system(size: size * 0.36, weight: .semibold).monospacedDigit()) + .foregroundColor(color) + .minimumScaleFactor(0.6) + } + .padding(lineWidth / 2) + .frame(width: size, height: size) + .animation(.easeInOut(duration: 0.3), value: level) + .accessibilityElement() + .accessibilityLabel(Text(verbatim: "\(level) %")) + } +} + // How far the track is, drawn on the resting artwork's edge from the top, clockwise. Redrawn once a second. private struct ProgressRing: View { let track: NowPlaying @@ -334,24 +391,35 @@ private struct ProgressRing: View { } } -// Right side of the resting notch while music is loaded: the level bars in the artwork's colour, replaced on -// hover by "next track" while playing, or "play" while paused. +// Right side of the resting notch while music is loaded: the level bars in the artwork's colour while playing, +// the headphones battery while paused (if known), and on hover "next track" while playing or "play" while +// paused. struct RestingMusicControl: View { @ObservedObject var music: MusicController let hovered: Bool + let battery: Int? // headphones battery, shown instead of the frozen bars while paused + let charging: Bool + let batterySize: CGFloat @Environment(\.notchScale) private var s var body: some View { let playing = music.nowPlaying?.isPlaying == true + let showsBattery = !playing && battery != nil ZStack { LevelBars(animating: playing && !hovered, color: music.artworkTint) - .modifier(FadeScale(amount: hovered ? 1 : 0, scale: 0.6)) + .modifier(FadeScale(amount: hovered || showsBattery ? 1 : 0, scale: 0.6)) + if let level = battery { + BatteryRing(level: level, tone: BatteryDisplay.tone(level: level, charging: charging), size: batterySize, + tint: music.artworkTint) + .modifier(FadeScale(amount: !hovered && showsBattery ? 0 : 1, scale: 0.6)) + .allowsHitTesting(false) + } Button { if playing { music.next() } else { music.playPause() } } label: { Image(systemName: playing ? "forward.fill" : "play.fill") .font(.system(size: 13 * s)) - .foregroundColor(.white) + .foregroundColor(music.artworkTint.map(Color.init(nsColor:)) ?? .white) .symbolReplaceTransition() .frame(width: 30 * s, height: 26 * s) .contentShape(Rectangle()) @@ -362,6 +430,7 @@ struct RestingMusicControl: View { .allowsHitTesting(hovered) .animation(NotchMotion.content, value: playing) } + .animation(NotchMotion.content, value: showsBattery) } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index fbec9003..1a5dfd76 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -104,3 +104,4 @@ "Glow" = "Halo"; "Glow Size" = "Taille"; "Progress Ring" = "Anneau de progression"; +"Headphones Battery" = "Batterie du casque"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 2d78e1c4..6d79e93c 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -200,6 +200,19 @@ do { check(ReleaseInfo.parse(json: Data("{}".utf8)) == nil, "malformed reply") } +// BatteryDisplay: which level the closed notch shows, and its colour. +do { + check(BatteryDisplay.level(single: 80, dual: false, left: -1, right: -1) == 80, "headphones: their level") + check(BatteryDisplay.level(single: -1, dual: true, left: 70, right: 40) == 40, "earbuds: the lower one") + check(BatteryDisplay.level(single: 90, dual: true, left: -1, right: 55) == 55, "earbuds: a missing side is ignored") + check(BatteryDisplay.level(single: -1, dual: false, left: -1, right: -1) == nil, "unknown level") + check(BatteryDisplay.level(single: 120, dual: false, left: -1, right: -1) == 100, "clamped to 100") + check(BatteryDisplay.tone(level: 50, charging: false) == .normal, "normal") + check(BatteryDisplay.tone(level: 20, charging: false) == .low && BatteryDisplay.tone(level: 10, charging: false) == .critical, + "low at 20 %, critical at 10 %") + check(BatteryDisplay.tone(level: 5, charging: true) == .charging, "charging wins") +} + // PlaybackClock: live position from the last known one; display format. do { let t0 = Date(timeIntervalSince1970: 1_000) diff --git a/README.md b/README.md index 6bd3ca95..5e7b2133 100644 --- a/README.md +++ b/README.md @@ -73,14 +73,15 @@ Move the pointer over the notch and it opens into a player with: - a volume button for Spotify's volume - a headphones button to change the sound mode without opening the menu -Behind the player, a soft glow takes the colour of the artwork. Progress Ring in SonyNotch Options hides the -ring around the closed notch's artwork. In SonyNotch Options › Glow you can turn it off -or change its size, with the notch open as a live preview. +Behind the player, a soft glow takes the colour of the artwork. When the notch is closed, it shows the album artwork, circled by a ring that fills up as the track plays, and -little bars that move with the music. Hover the bars -to skip to the next track, or to resume the music when it's paused. When the track changes, the artwork flips -over, backwards when you go to the previous track. +little bars that move with the music. Hover the bars to skip to the next track, or to resume the music when it's +paused. When the track changes, the artwork flips over, backwards when you go to the previous track. + +When the music is paused or stopped, the closed notch shows the headphones' battery instead, as a ring with the +percentage, orange when low, red when almost empty and green while charging. Without music, the sound mode +shows on the other side. With the pointer over the notch, you can also use the trackpad: @@ -88,12 +89,16 @@ With the pointer over the notch, you can also use the trackpad: - scroll up or down to change Spotify's volume, the volume bar shows up while you do The trackpad gives a light tap when the notch opens, when you press a button, skip a track or pass every ten -percent of volume. In SonyNotch Options › Notch Gestures you can turn each gesture and each kind of tap on or off, reverse the -gestures' direction and set how strong the taps are. +percent of volume. + +Everything can be adjusted in SonyNotch Options: -To change its size, open the menu and go to SonyNotch Options › Notch Size. You can set the width and height, -the size of the closed notch, the artwork and the text. You see the result live and it's saved. To hide the -notch, turn off Show Notch in the same menu. +- Notch Size: width and height, the size of the closed notch, the artwork and the text, with a live preview +- Notch Gestures: turn each gesture and each kind of tap on or off, reverse the gestures and set how strong + the taps are +- Glow: turn the glow off or change its size, with a live preview +- Progress Ring and Headphones Battery: show or hide them on the closed notch +- Show Notch: turn the notch off completely The player works with the Spotify app for Mac, without any account or login. On a screen without a notch, it shows up as a black pill at the top of the screen. diff --git a/scripts/test.sh b/scripts/test.sh index 6c1c9dcd..66c622c0 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -14,6 +14,7 @@ swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$ROOT/Client/tests/LogicTests/main.swift" \ "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" "$MAC/Notch/NotchScrollGesture.swift" \ + "$MAC/Notch/BatteryDisplay.swift" \ "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ "$MAC/Updates/ReleaseInfo.swift" \ -o "$OUT/LogicTests" From 0a88b723301b34889fdb9bf719e1440af2a9620d Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Thu, 17 Sep 2026 18:08:08 +0200 Subject: [PATCH 45/50] feat(notch): click the artwork to bring Spotify to the front --- Client/macos/Notch/MusicTab.swift | 11 ++++++++--- Client/macos/Notch/NotchMotion.swift | 2 +- README.md | 2 +- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index 7579fc08..ab1b331f 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -77,9 +77,14 @@ struct MusicTab: View { private func player(_ track: NowPlaying, artwork: CGFloat) -> some View { VStack(spacing: 0) { HStack(spacing: 12 * s) { - ArtworkView(image: music.artwork, trackID: track.trackID, - isBackward: { [music] in music.trackChangeIsBackward }, - size: artwork, cornerRadius: artwork * 0.2) + // Brings Spotify to the front (opening the track's link could restart it). + Button { music.launchPlayer() } label: { + ArtworkView(image: music.artwork, trackID: track.trackID, + isBackward: { [music] in music.trackChangeIsBackward }, + size: artwork, cornerRadius: artwork * 0.2) + } + .buttonStyle(PressableButtonStyle()) + .accessibilityLabel(tr("Open Spotify")) VStack(alignment: .leading, spacing: 2 * s) { Text(track.title).font(.system(size: 14 * s, weight: .semibold)).foregroundColor(.white) Text(track.artist).font(.system(size: 13 * s)).foregroundColor(.gray) diff --git a/Client/macos/Notch/NotchMotion.swift b/Client/macos/Notch/NotchMotion.swift index 26eb2b52..d238e322 100644 --- a/Client/macos/Notch/NotchMotion.swift +++ b/Client/macos/Notch/NotchMotion.swift @@ -45,7 +45,7 @@ struct FadeScale: ViewModifier { struct PressableButtonStyle: ButtonStyle { func makeBody(configuration: Configuration) -> some View { configuration.label - .scaleEffect(configuration.isPressed && !NotchMotion.reduceMotion ? 0.84 : 1) + .scaleEffect(configuration.isPressed && !NotchMotion.reduceMotion ? 0.9 : 1) .opacity(configuration.isPressed ? 0.7 : 1) .animation(.spring(response: 0.25, dampingFraction: 0.6), value: configuration.isPressed) .onChange(of: configuration.isPressed) { pressed in diff --git a/README.md b/README.md index 5e7b2133..2553b390 100644 --- a/README.md +++ b/README.md @@ -67,7 +67,7 @@ English and French. Move the pointer over the notch and it opens into a player with: -- the artwork, title and artist +- the artwork, title and artist (click the artwork to bring Spotify to the front) - a progress bar you can click or drag - previous, play/pause and next - a volume button for Spotify's volume From 9d6b567c0ea7388387391a511b8b2f7e53a5c8e5 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 18 Sep 2026 10:23:13 +0200 Subject: [PATCH 46/50] feat: setup assistant for Bluetooth, headphones, Spotify control and launch at login --- Client/macos/AppDelegate.swift | 5 + Client/macos/AppSettings.swift | 6 + Client/macos/HeadphonesMenu.swift | 3 + Client/macos/Music/MusicController.swift | 6 + Client/macos/Setup/SetupAccess.swift | 28 ++++ Client/macos/Setup/SetupChecks.swift | 100 +++++++++++ Client/macos/Setup/SetupView.swift | 157 ++++++++++++++++++ .../macos/Setup/SetupWindowController.swift | 39 +++++ Client/macos/StatusItemController.swift | 5 + Client/macos/fr.lproj/Localizable.strings | 21 +++ Client/tests/LogicTests/main.swift | 13 ++ scripts/build.sh | 2 +- scripts/test.sh | 1 + 13 files changed, 385 insertions(+), 1 deletion(-) create mode 100644 Client/macos/Setup/SetupAccess.swift create mode 100644 Client/macos/Setup/SetupChecks.swift create mode 100644 Client/macos/Setup/SetupView.swift create mode 100644 Client/macos/Setup/SetupWindowController.swift diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index 472087be..f2879ce4 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -9,12 +9,17 @@ final class AppDelegate: NSObject, NSApplicationDelegate { private let updates = UpdateChecker() private var statusItemController: StatusItemController? private var notchController: NotchController? + private var setupWindow: SetupWindowController? private var cancellables = Set() func applicationDidFinishLaunching(_ notification: Notification) { model.settings = settings statusItemController = StatusItemController(model: model, settings: settings, updates: updates) notchController = NotchController(model: model, music: music, settings: settings) + setupWindow = SetupWindowController(model: model, settings: settings, + onSpotifyGranted: { [weak self] in self?.music.refresh() }) + statusItemController?.onOpenSetup = { [weak self] in self?.setupWindow?.show() } + if !settings.setupDone { setupWindow?.show() } // Spotify is only read while the notch is on. $showNotch emits the current value first. settings.$showNotch diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index de43b2b0..cee8ff27 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -8,6 +8,7 @@ final class AppSettings: ObservableObject { static let autoReconnect = "autoReconnect" static let lastDeviceAddress = "lastDeviceAddress" static let showNotch = "showNotch" + static let setupDone = "setupDone" static let notchWidth = "notchOpenWidth" static let notchHeight = "notchOpenHeight" static let notchSide = "notchSideWidth" @@ -36,6 +37,11 @@ final class AppSettings: ObservableObject { @Published var autoReconnect: Bool { didSet { defaults.set(autoReconnect, forKey: Keys.autoReconnect) } } + // The setup assistant was closed once: it no longer opens at launch. + var setupDone: Bool { + get { defaults.bool(forKey: Keys.setupDone) } + set { defaults.set(newValue, forKey: Keys.setupDone) } + } @Published var showNotch: Bool { didSet { defaults.set(showNotch, forKey: Keys.showNotch) } } diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index c6e96ef5..434f0f8b 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -41,6 +41,7 @@ final class HeadphonesMenu { private let gesturesItem = NSMenuItem() private var gestureItems: [(NSMenuItem, ReferenceWritableKeyPath)] = [] private let notchSizeMenuDelegate = NotchSizeMenuDelegate() + var onOpenSetup: (() -> Void)? // Options › Setup Assistant private let gesturesMenuDelegate = NotchSizeMenuDelegate() // SwiftUI sliders in a submenu stop taking clicks once the submenu has been closed and opened again, so their // rows are rebuilt each time their submenu opens (see sliderMenuItem). @@ -186,6 +187,8 @@ final class HeadphonesMenu { optionsMenu.addItem(makeGlowItem()) optionsMenu.addItem(makeNotchSizeItem()) optionsMenu.addItem(makeGesturesItem()) + optionsMenu.addItem(.separator()) + optionsMenu.addItem(ActionMenuItem(tr("Setup Assistant…")) { [weak self] in self?.onOpenSetup?() }) let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") optionsItem.submenu = optionsMenu menu.addItem(optionsItem) diff --git a/Client/macos/Music/MusicController.swift b/Client/macos/Music/MusicController.swift index 9f0600f8..0435a374 100644 --- a/Client/macos/Music/MusicController.swift +++ b/Client/macos/Music/MusicController.swift @@ -54,6 +54,12 @@ final class MusicController: ObservableObject { } // Opening reads once (which also retries a refused permission), then every 5 s while open. + // Read Spotify again now (after the setup assistant got the permission, for example). + func refresh() { + guard running else { return } + source.refresh() + } + func notchDidOpen() { guard running else { return } source.refresh() diff --git a/Client/macos/Setup/SetupAccess.swift b/Client/macos/Setup/SetupAccess.swift new file mode 100644 index 00000000..2404d8b5 --- /dev/null +++ b/Client/macos/Setup/SetupAccess.swift @@ -0,0 +1,28 @@ +import Foundation + +// A permission as the setup assistant shows it. Pure, tested in LogicTests. +enum SetupAccess: Equatable { + case granted + case notDetermined // macOS will ask + case denied // refused (or restricted): only System Settings can change it + case unavailable // can't tell yet (Spotify closed, for example) + + // AEDeterminePermissionToAutomateTarget's answer about Spotify. + static func spotify(status: Int) -> SetupAccess { + switch status { + case 0: return .granted + case -1744: return .notDetermined // errAEEventWouldRequireUserConsent + case -1743: return .denied // errAEEventNotPermitted + default: return .unavailable // -600 procNotFound: Spotify isn't running + } + } + + // CBManager.authorization's raw value: 0 not determined, 1 restricted, 2 denied, 3 allowed always. + static func bluetooth(rawAuthorization: Int) -> SetupAccess { + switch rawAuthorization { + case 3: return .granted + case 0: return .notDetermined + default: return .denied + } + } +} diff --git a/Client/macos/Setup/SetupChecks.swift b/Client/macos/Setup/SetupChecks.swift new file mode 100644 index 00000000..c1c3fbb7 --- /dev/null +++ b/Client/macos/Setup/SetupChecks.swift @@ -0,0 +1,100 @@ +import AppKit +import Combine +import CoreBluetooth + +// What the setup assistant checks, refreshed every second while its window is open: Bluetooth access, whether +// Spotify is running, and whether SonyNotch may control it. +final class SetupChecks: ObservableObject { + private static let spotifyID = "com.spotify.client" + + @Published private(set) var bluetooth = SetupAccess.unavailable + @Published private(set) var spotifyRunning = false + @Published private(set) var spotify = SetupAccess.unavailable + @Published private(set) var askingSpotify = false // macOS's prompt is up, waiting for an answer + + // Called once Spotify control is granted, so the notch reads Spotify right away. + var onSpotifyGranted: (() -> Void)? + + private var timer: Timer? + private var bluetoothRequest: CBCentralManager? + // AEDeterminePermissionToAutomateTarget can block (it waits for the user when it asks): never on main. + private let queue = DispatchQueue(label: "com.sonynotch.setup") + + func start() { + refresh() + guard timer == nil else { return } + let timer = Timer(timeInterval: 1, repeats: true) { [weak self] _ in self?.refresh() } + RunLoop.main.add(timer, forMode: .common) + self.timer = timer + } + + func stop() { + timer?.invalidate() + timer = nil + } + + func refresh() { + bluetooth = SetupAccess.bluetooth(rawAuthorization: CBCentralManager.authorization.rawValue) + spotifyRunning = !NSRunningApplication.runningApplications(withBundleIdentifier: Self.spotifyID).isEmpty + guard spotifyRunning else { + spotify = .unavailable + return + } + guard !askingSpotify else { return } + queue.async { [weak self] in + let status = Self.spotifyPermission(ask: false) + DispatchQueue.main.async { + guard let self = self, !self.askingSpotify else { return } + self.spotify = SetupAccess.spotify(status: status) + } + } + } + + // Creating a Bluetooth manager is what makes macOS ask. + func requestBluetooth() { + NSApp.activate(ignoringOtherApps: true) + bluetoothRequest = CBCentralManager(delegate: nil, queue: nil) + } + + // Shows macOS's prompt (in front: the app is activated first) and waits for the answer off the main thread. + func requestSpotify() { + guard spotifyRunning, !askingSpotify else { return } + askingSpotify = true + NSApp.activate(ignoringOtherApps: true) + queue.async { [weak self] in + let status = Self.spotifyPermission(ask: true) + DispatchQueue.main.async { + guard let self = self else { return } + self.askingSpotify = false + self.spotify = SetupAccess.spotify(status: status) + if self.spotify == .granted { self.onSpotifyGranted?() } + } + } + } + + func launchSpotify() { + guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.spotifyID) else { + NSWorkspace.shared.open(URL(string: "https://www.spotify.com/download/mac/")!) + return + } + NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration(), completionHandler: nil) + } + + func openAutomationSettings() { + openSettings("x-apple.systempreferences:com.apple.preference.security?Privacy_Automation") + } + + func openBluetoothSettings() { + openSettings("x-apple.systempreferences:com.apple.preference.security?Privacy_Bluetooth") + } + + private func openSettings(_ address: String) { + if let url = URL(string: address) { NSWorkspace.shared.open(url) } + } + + private static func spotifyPermission(ask: Bool) -> Int { + let target = NSAppleEventDescriptor(bundleIdentifier: spotifyID) + return Int(AEDeterminePermissionToAutomateTarget(target.aeDesc, AEEventClass(typeWildCard), + AEEventID(typeWildCard), ask)) + } +} diff --git a/Client/macos/Setup/SetupView.swift b/Client/macos/Setup/SetupView.swift new file mode 100644 index 00000000..42310a1b --- /dev/null +++ b/Client/macos/Setup/SetupView.swift @@ -0,0 +1,157 @@ +import SwiftUI + +// The setup assistant: one row per thing SonyNotch needs, each turning green once it's done, with the button +// that fixes it. Shown at first launch, and from SonyNotch Options › Setup Assistant. +struct SetupView: View { + @ObservedObject var checks: SetupChecks + @ObservedObject var model: HeadphonesModel + @ObservedObject var settings: AppSettings + let showError: (String) -> Void + let done: () -> Void + + var body: some View { + VStack(alignment: .leading, spacing: 18) { + HStack(spacing: 12) { + Image(nsImage: NSApp.applicationIconImage).resizable().frame(width: 48, height: 48) + VStack(alignment: .leading, spacing: 3) { + Text(tr("Welcome to SonyNotch")).font(.title2.weight(.semibold)) + Text(tr("A few permissions and your headphones, and you're set.")).foregroundColor(.secondary) + } + } + + VStack(spacing: 0) { + bluetoothRow + Divider() + headphonesRow + Divider() + spotifyRow + Divider() + SetupRow(icon: "power", title: tr("Launch at Login"), + detail: tr("Start SonyNotch when you log in to your Mac."), + done: settings.launchAtLogin) { + Toggle("", isOn: Binding(get: { settings.launchAtLogin }, set: { on in + if let error = settings.setLaunchAtLogin(on) { showError(error) } + })) + .labelsHidden() + .toggleStyle(.switch) + } + } + .background(RoundedRectangle(cornerRadius: 10).fill(Color(nsColor: .controlBackgroundColor))) + .overlay(RoundedRectangle(cornerRadius: 10).stroke(Color(nsColor: .separatorColor))) + + HStack { + Text(tr("You can open this assistant again from SonyNotch Options.")) + .font(.footnote) + .foregroundColor(.secondary) + Spacer() + Button(tr("Done"), action: done).keyboardShortcut(.defaultAction) + } + } + .padding(24) + .frame(width: 520) + } + + private var bluetoothRow: some View { + SetupRow(icon: "antenna.radiowaves.left.and.right", title: tr("Bluetooth"), + detail: bluetoothDetail, done: checks.bluetooth == .granted) { + switch checks.bluetooth { + case .notDetermined: Button(tr("Allow")) { checks.requestBluetooth() } + case .denied: Button(tr("Open Settings")) { checks.openBluetoothSettings() } + default: EmptyView() + } + } + } + + private var bluetoothDetail: String { + switch checks.bluetooth { + case .granted: return tr("SonyNotch can talk to your headphones.") + case .denied: return tr("Bluetooth access was refused. Turn SonyNotch on in Privacy & Security › Bluetooth.") + default: return tr("Needed to talk to your headphones.") + } + } + + private var headphonesRow: some View { + SetupRow(icon: "headphones", title: tr("Headphones"), detail: headphonesDetail, done: model.connected) { + switch model.connectionState { + case .disconnected: + Button(tr("Connect…")) { + NSApp.activate(ignoringOtherApps: true) + model.connect() + } + .disabled(checks.bluetooth == .denied) + case .connecting: + ProgressView().controlSize(.small) + case .connected: + EmptyView() + } + } + } + + private var headphonesDetail: String { + switch model.connectionState { + case .connected: return model.deviceName.isEmpty ? tr("Connected.") : model.deviceName + case .connecting: return tr("Connecting…") + case .disconnected: return tr("Pair your Sony headphones in System Settings › Bluetooth, then connect them here.") + } + } + + private var spotifyRow: some View { + SetupRow(icon: "music.note", title: tr("Spotify"), detail: spotifyDetail, + done: checks.spotify == .granted, optional: true) { + if !checks.spotifyRunning { + Button(tr("Open Spotify")) { checks.launchSpotify() } + } else if checks.askingSpotify { + ProgressView().controlSize(.small) + } else { + switch checks.spotify { + case .notDetermined: Button(tr("Allow")) { checks.requestSpotify() } + case .denied: Button(tr("Open Settings")) { checks.openAutomationSettings() } + default: EmptyView() + } + } + } + } + + private var spotifyDetail: String { + if !checks.spotifyRunning { return tr("For the notch player. Open Spotify to allow SonyNotch to control it.") } + if checks.askingSpotify { return tr("Answer macOS's question: click Allow.") } + switch checks.spotify { + case .granted: return tr("SonyNotch can show and control your music.") + case .denied: return tr("Control was refused. Turn Spotify on in Privacy & Security › Automation › SonyNotch.") + default: return tr("Allow SonyNotch to show and control the music playing in Spotify.") + } + } +} + +private struct SetupRow: View { + let icon: String + let title: String + let detail: String + let done: Bool + var optional = false + @ViewBuilder let action: () -> Action + + var body: some View { + HStack(spacing: 12) { + Image(systemName: icon) + .font(.system(size: 17)) + .foregroundColor(.accentColor) + .frame(width: 28) + VStack(alignment: .leading, spacing: 2) { + HStack(spacing: 6) { + Text(title).fontWeight(.medium) + if optional { Text(tr("Optional")).font(.caption).foregroundColor(.secondary) } + } + Text(detail).font(.callout).foregroundColor(.secondary).fixedSize(horizontal: false, vertical: true) + } + Spacer(minLength: 8) + action() + Image(systemName: done ? "checkmark.circle.fill" : "circle") + .font(.system(size: 18)) + .foregroundColor(done ? .green : Color(nsColor: .tertiaryLabelColor)) + .accessibilityLabel(done ? tr("Done") : tr("To do")) + } + .padding(.horizontal, 14) + .padding(.vertical, 12) + } +} diff --git a/Client/macos/Setup/SetupWindowController.swift b/Client/macos/Setup/SetupWindowController.swift new file mode 100644 index 00000000..d5ad5b8a --- /dev/null +++ b/Client/macos/Setup/SetupWindowController.swift @@ -0,0 +1,39 @@ +import AppKit +import SwiftUI + +// The setup assistant's window. The app has no Dock icon, so showing it also activates the app. +final class SetupWindowController: NSObject, NSWindowDelegate { + private let checks = SetupChecks() + private let model: HeadphonesModel + private let settings: AppSettings + private var window: NSWindow? + + init(model: HeadphonesModel, settings: AppSettings, onSpotifyGranted: @escaping () -> Void) { + self.model = model + self.settings = settings + checks.onSpotifyGranted = onSpotifyGranted + } + + func show() { + if window == nil { + let view = SetupView(checks: checks, model: model, settings: settings, + showError: { [weak model] in model?.showError($0) }, + done: { [weak self] in self?.window?.close() }) + let window = NSWindow(contentRect: .zero, styleMask: [.titled, .closable], backing: .buffered, defer: false) + window.title = tr("SonyNotch Setup") + window.contentView = NSHostingView(rootView: view) + window.isReleasedWhenClosed = false + window.delegate = self + window.center() + self.window = window + } + checks.start() + NSApp.activate(ignoringOtherApps: true) + window?.makeKeyAndOrderFront(nil) + } + + func windowWillClose(_ notification: Notification) { + checks.stop() + settings.setupDone = true + } +} diff --git a/Client/macos/StatusItemController.swift b/Client/macos/StatusItemController.swift index ddd2771b..2b6160b1 100644 --- a/Client/macos/StatusItemController.swift +++ b/Client/macos/StatusItemController.swift @@ -5,6 +5,11 @@ import Combine final class StatusItemController { private let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.squareLength) private let headphonesMenu: HeadphonesMenu + + var onOpenSetup: (() -> Void)? { + get { headphonesMenu.onOpenSetup } + set { headphonesMenu.onOpenSetup = newValue } + } private var cancellables = Set() init(model: HeadphonesModel, settings: AppSettings, updates: UpdateChecker) { diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 1a5dfd76..70824b40 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -105,3 +105,24 @@ "Glow Size" = "Taille"; "Progress Ring" = "Anneau de progression"; "Headphones Battery" = "Batterie du casque"; +"Setup Assistant…" = "Assistant de configuration…"; +"SonyNotch Setup" = "Configuration de SonyNotch"; +"Welcome to SonyNotch" = "Bienvenue dans SonyNotch"; +"A few permissions and your headphones, and you're set." = "Quelques autorisations et votre casque, et c’est prêt."; +"Start SonyNotch when you log in to your Mac." = "Ouvrir SonyNotch au démarrage de votre Mac."; +"You can open this assistant again from SonyNotch Options." = "Vous pourrez rouvrir cet assistant depuis les Options de SonyNotch."; +"Done" = "Terminer"; +"Allow" = "Autoriser"; +"SonyNotch can talk to your headphones." = "SonyNotch peut communiquer avec votre casque."; +"Bluetooth access was refused. Turn SonyNotch on in Privacy & Security › Bluetooth." = "L’accès au Bluetooth a été refusé. Activez SonyNotch dans Confidentialité et sécurité › Bluetooth."; +"Needed to talk to your headphones." = "Nécessaire pour communiquer avec votre casque."; +"Connected." = "Connecté."; +"Pair your Sony headphones in System Settings › Bluetooth, then connect them here." = "Jumelez votre casque Sony dans Réglages Système › Bluetooth, puis connectez-le ici."; +"Spotify" = "Spotify"; +"For the notch player. Open Spotify to allow SonyNotch to control it." = "Pour le lecteur de l’encoche. Ouvrez Spotify pour autoriser SonyNotch à le contrôler."; +"Answer macOS's question: click Allow." = "Répondez à la question de macOS : cliquez sur Autoriser."; +"SonyNotch can show and control your music." = "SonyNotch peut afficher et contrôler votre musique."; +"Control was refused. Turn Spotify on in Privacy & Security › Automation › SonyNotch." = "Le contrôle a été refusé. Activez Spotify dans Confidentialité et sécurité › Automatisation › SonyNotch."; +"Allow SonyNotch to show and control the music playing in Spotify." = "Autorisez SonyNotch à afficher et contrôler la musique en cours dans Spotify."; +"Optional" = "Facultatif"; +"To do" = "À faire"; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 6d79e93c..5a362511 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -213,6 +213,19 @@ do { check(BatteryDisplay.tone(level: 5, charging: true) == .charging, "charging wins") } +// SetupAccess: what the setup assistant shows for each permission. +do { + check(SetupAccess.spotify(status: 0) == .granted, "Spotify allowed") + check(SetupAccess.spotify(status: -1744) == .notDetermined, "Spotify not asked yet") + check(SetupAccess.spotify(status: -1743) == .denied, "Spotify refused") + check(SetupAccess.spotify(status: -600) == .unavailable, "Spotify closed") + check(SetupAccess.spotify(status: -50) == .unavailable, "other errors: can't tell") + check(SetupAccess.bluetooth(rawAuthorization: 3) == .granted, "Bluetooth allowed always") + check(SetupAccess.bluetooth(rawAuthorization: 0) == .notDetermined, "Bluetooth not asked yet") + check(SetupAccess.bluetooth(rawAuthorization: 2) == .denied && SetupAccess.bluetooth(rawAuthorization: 1) == .denied, + "Bluetooth denied or restricted") +} + // PlaybackClock: live position from the last known one; display format. do { let t0 = Date(timeIntervalSince1970: 1_000) diff --git a/scripts/build.sh b/scripts/build.sh index e569e95b..b4b22c4a 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -25,7 +25,7 @@ if [ "$CONFIG" = release ]; then SWIFT_OPT="-O"; CXX_OPT="-O2"; else SWIFT_OPT=" SWIFT_DEFINES=""; CXX_DEFINES="" if [ "${DEBUG_PROTOCOL:-0}" = 1 ]; then SWIFT_DEFINES="-D DEBUG_PROTOCOL"; CXX_DEFINES="-DSHC_DEBUG_PROTOCOL"; fi -SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift "$MAC"/Notch/*.swift "$MAC"/Updates/*.swift "$MAC"/Music/*.swift) +SWIFT_SOURCES=("$MAC"/*.swift "$MAC"/MenuRows/*.swift "$MAC"/Notch/*.swift "$MAC"/Updates/*.swift "$MAC"/Setup/*.swift "$MAC"/Music/*.swift) CXX_SOURCES=("$CORE"/*.cpp) OBJCXX_SOURCES=("$MAC"/*.mm) diff --git a/scripts/test.sh b/scripts/test.sh index 66c622c0..4647982a 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -15,6 +15,7 @@ swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" "$MAC/Notch/NotchScrollGesture.swift" \ "$MAC/Notch/BatteryDisplay.swift" \ + "$MAC/Setup/SetupAccess.swift" \ "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ "$MAC/Updates/ReleaseInfo.swift" \ -o "$OUT/LogicTests" From 60c5a3683468f5a53d1ae8b1796b3b82186387ac Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 18 Sep 2026 10:25:20 +0200 Subject: [PATCH 47/50] feat: setup window for Bluetooth, headphones, Spotify control and launch at login --- Client/macos/HeadphonesMenu.swift | 5 ++--- Client/macos/HeadphonesModel.swift | 6 ++++++ Client/macos/Setup/SetupChecks.swift | 20 ++++++++++++++++++++ Client/macos/Setup/SetupView.swift | 22 ++++++++++++---------- Client/macos/fr.lproj/Localizable.strings | 9 ++++++--- README.md | 9 ++++++--- 6 files changed, 52 insertions(+), 19 deletions(-) diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 434f0f8b..7bb7c30b 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -41,7 +41,7 @@ final class HeadphonesMenu { private let gesturesItem = NSMenuItem() private var gestureItems: [(NSMenuItem, ReferenceWritableKeyPath)] = [] private let notchSizeMenuDelegate = NotchSizeMenuDelegate() - var onOpenSetup: (() -> Void)? // Options › Setup Assistant + var onOpenSetup: (() -> Void)? // "Setup…": the setup assistant private let gesturesMenuDelegate = NotchSizeMenuDelegate() // SwiftUI sliders in a submenu stop taking clicks once the submenu has been closed and opened again, so their // rows are rebuilt each time their submenu opens (see sliderMenuItem). @@ -187,8 +187,6 @@ final class HeadphonesMenu { optionsMenu.addItem(makeGlowItem()) optionsMenu.addItem(makeNotchSizeItem()) optionsMenu.addItem(makeGesturesItem()) - optionsMenu.addItem(.separator()) - optionsMenu.addItem(ActionMenuItem(tr("Setup Assistant…")) { [weak self] in self?.onOpenSetup?() }) let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") optionsItem.submenu = optionsMenu menu.addItem(optionsItem) @@ -196,6 +194,7 @@ final class HeadphonesMenu { menu.addItem(connectItem) menu.addItem(.separator()) menu.addItem(launchAtLoginItem) + menu.addItem(ActionMenuItem(tr("Setup…")) { [weak self] in self?.onOpenSetup?() }) updateItem = ActionMenuItem("") { [weak updates] in updates?.install() } menu.addItem(updateItem) menu.addItem(ActionMenuItem(tr("Quit SonyNotch"), key: "q") { NSApp.terminate(nil) }) diff --git a/Client/macos/HeadphonesModel.swift b/Client/macos/HeadphonesModel.swift index e8156646..c44fd166 100644 --- a/Client/macos/HeadphonesModel.swift +++ b/Client/macos/HeadphonesModel.swift @@ -80,6 +80,12 @@ final class HeadphonesModel: ObservableObject { } } + // Drops the control link and opens it again (setup assistant), for a headset that stopped answering. + func reconnect() { + disconnect() + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { self.connect() } + } + func disconnect() { userDisconnected = true cancelReconnect() diff --git a/Client/macos/Setup/SetupChecks.swift b/Client/macos/Setup/SetupChecks.swift index c1c3fbb7..35d4f452 100644 --- a/Client/macos/Setup/SetupChecks.swift +++ b/Client/macos/Setup/SetupChecks.swift @@ -72,6 +72,26 @@ final class SetupChecks: ObservableObject { } } + // macOS never asks again about a refused permission: forget SonyNotch's answer about Spotify (and only that), + // then ask. tccutil can reset an app's own entry without administrator rights. + func askSpotifyAgain() { + guard spotifyRunning, !askingSpotify, let bundleID = Bundle.main.bundleIdentifier else { return } + let reset = Process() + reset.executableURL = URL(fileURLWithPath: "/usr/bin/tccutil") + reset.arguments = ["reset", "AppleEvents", bundleID] + reset.terminationHandler = { [weak self] _ in + DispatchQueue.main.async { + self?.spotify = .notDetermined + self?.requestSpotify() + } + } + do { + try reset.run() + } catch { + openAutomationSettings() + } + } + func launchSpotify() { guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.spotifyID) else { NSWorkspace.shared.open(URL(string: "https://www.spotify.com/download/mac/")!) diff --git a/Client/macos/Setup/SetupView.swift b/Client/macos/Setup/SetupView.swift index 42310a1b..50423b8a 100644 --- a/Client/macos/Setup/SetupView.swift +++ b/Client/macos/Setup/SetupView.swift @@ -1,7 +1,8 @@ import SwiftUI // The setup assistant: one row per thing SonyNotch needs, each turning green once it's done, with the button -// that fixes it. Shown at first launch, and from SonyNotch Options › Setup Assistant. +// that fixes it (or, once it's fine, reopens or redoes it: nothing is ever stuck). Shown at first launch, and from +// "Setup…" in the menu. struct SetupView: View { @ObservedObject var checks: SetupChecks @ObservedObject var model: HeadphonesModel @@ -40,7 +41,7 @@ struct SetupView: View { .overlay(RoundedRectangle(cornerRadius: 10).stroke(Color(nsColor: .separatorColor))) HStack { - Text(tr("You can open this assistant again from SonyNotch Options.")) + Text(tr("You can open this window again with Setup… in the SonyNotch menu.")) .font(.footnote) .foregroundColor(.secondary) Spacer() @@ -54,10 +55,11 @@ struct SetupView: View { private var bluetoothRow: some View { SetupRow(icon: "antenna.radiowaves.left.and.right", title: tr("Bluetooth"), detail: bluetoothDetail, done: checks.bluetooth == .granted) { - switch checks.bluetooth { - case .notDetermined: Button(tr("Allow")) { checks.requestBluetooth() } - case .denied: Button(tr("Open Settings")) { checks.openBluetoothSettings() } - default: EmptyView() + // Always something to click: macOS only asks once, afterwards the switch is in System Settings. + if checks.bluetooth == .notDetermined { + Button(tr("Allow")) { checks.requestBluetooth() } + } else { + Button(tr("Settings")) { checks.openBluetoothSettings() } } } } @@ -82,7 +84,7 @@ struct SetupView: View { case .connecting: ProgressView().controlSize(.small) case .connected: - EmptyView() + Button(tr("Reconnect")) { model.reconnect() } } } } @@ -105,8 +107,8 @@ struct SetupView: View { } else { switch checks.spotify { case .notDetermined: Button(tr("Allow")) { checks.requestSpotify() } - case .denied: Button(tr("Open Settings")) { checks.openAutomationSettings() } - default: EmptyView() + case .denied: Button(tr("Ask Again")) { checks.askSpotifyAgain() } + default: Button(tr("Settings")) { checks.openAutomationSettings() } } } } @@ -117,7 +119,7 @@ struct SetupView: View { if checks.askingSpotify { return tr("Answer macOS's question: click Allow.") } switch checks.spotify { case .granted: return tr("SonyNotch can show and control your music.") - case .denied: return tr("Control was refused. Turn Spotify on in Privacy & Security › Automation › SonyNotch.") + case .denied: return tr("Control was refused. Ask Again shows macOS's question once more.") default: return tr("Allow SonyNotch to show and control the music playing in Spotify.") } } diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 70824b40..24e10314 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -105,12 +105,10 @@ "Glow Size" = "Taille"; "Progress Ring" = "Anneau de progression"; "Headphones Battery" = "Batterie du casque"; -"Setup Assistant…" = "Assistant de configuration…"; "SonyNotch Setup" = "Configuration de SonyNotch"; "Welcome to SonyNotch" = "Bienvenue dans SonyNotch"; "A few permissions and your headphones, and you're set." = "Quelques autorisations et votre casque, et c’est prêt."; "Start SonyNotch when you log in to your Mac." = "Ouvrir SonyNotch au démarrage de votre Mac."; -"You can open this assistant again from SonyNotch Options." = "Vous pourrez rouvrir cet assistant depuis les Options de SonyNotch."; "Done" = "Terminer"; "Allow" = "Autoriser"; "SonyNotch can talk to your headphones." = "SonyNotch peut communiquer avec votre casque."; @@ -122,7 +120,12 @@ "For the notch player. Open Spotify to allow SonyNotch to control it." = "Pour le lecteur de l’encoche. Ouvrez Spotify pour autoriser SonyNotch à le contrôler."; "Answer macOS's question: click Allow." = "Répondez à la question de macOS : cliquez sur Autoriser."; "SonyNotch can show and control your music." = "SonyNotch peut afficher et contrôler votre musique."; -"Control was refused. Turn Spotify on in Privacy & Security › Automation › SonyNotch." = "Le contrôle a été refusé. Activez Spotify dans Confidentialité et sécurité › Automatisation › SonyNotch."; "Allow SonyNotch to show and control the music playing in Spotify." = "Autorisez SonyNotch à afficher et contrôler la musique en cours dans Spotify."; "Optional" = "Facultatif"; "To do" = "À faire"; +"Setup…" = "Configuration…"; +"Settings" = "Réglages"; +"Reconnect" = "Reconnecter"; +"Ask Again" = "Redemander"; +"Control was refused. Ask Again shows macOS's question once more." = "Le contrôle a été refusé. Redemander affiche de nouveau la question de macOS."; +"You can open this window again with Setup… in the SonyNotch menu." = "Vous pourrez rouvrir cette fenêtre avec Configuration… dans le menu de SonyNotch."; diff --git a/README.md b/README.md index 2553b390..3b0ff7ec 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,12 @@ That's it. Open SonyNotch from your Applications folder. ### First launch -SonyNotch appears in the menu bar. Allow Bluetooth access when macOS asks, and allow SonyNotch to control -Spotify for the notch player. If your headphones aren't connected to the Mac yet, pair them in System Settings › -Bluetooth first. +SonyNotch appears in the menu bar and opens its setup window. It checks everything SonyNotch needs, with a +button for each: Bluetooth access, your headphones, permission to control Spotify (for the notch player) and +launch at login. Pair your headphones in System Settings › Bluetooth first if they aren't yet. + +If something stops working later, open the same window with Setup… in the menu: every line can be fixed or +redone from there. Works on macOS 13 or later, on Apple Silicon and Intel Macs. From 15bd89b86fe6b17b8e67169e9a27eb8dc0a144a0 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 18 Sep 2026 10:44:51 +0200 Subject: [PATCH 48/50] feat: choose notch only, headphones only or both in the setup window --- Client/macos/AppDelegate.swift | 31 ++++- Client/macos/AppSettings.swift | 4 + Client/macos/HeadphonesMenu.swift | 154 +++++++++++++++------- Client/macos/Notch/MusicTab.swift | 20 ++- Client/macos/Notch/NotchContent.swift | 5 + Client/macos/Notch/NotchController.swift | 18 ++- Client/macos/Notch/NotchView.swift | 10 +- Client/macos/Setup/SetupChecks.swift | 8 +- Client/macos/Setup/SetupView.swift | 69 ++++++++-- Client/macos/StatusItemController.swift | 19 ++- Client/macos/UsageMode.swift | 16 +++ Client/macos/fr.lproj/Localizable.strings | 6 + Client/tests/LogicTests/main.swift | 15 +++ README.md | 11 +- scripts/test.sh | 1 + 15 files changed, 298 insertions(+), 89 deletions(-) create mode 100644 Client/macos/UsageMode.swift diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index f2879ce4..ef75f48a 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -21,26 +21,43 @@ final class AppDelegate: NSObject, NSApplicationDelegate { statusItemController?.onOpenSetup = { [weak self] in self?.setupWindow?.show() } if !settings.setupDone { setupWindow?.show() } - // Spotify is only read while the notch is on. $showNotch emits the current value first. - settings.$showNotch + // Spotify is only read while the notch is on and used. Both publishers emit their current value first. + settings.$showNotch.combineLatest(settings.$usageMode) .receive(on: DispatchQueue.main) - .sink { [weak self] show in - if show { self?.music.start() } else { self?.music.stop() } + .sink { [weak self] show, mode in + if show && mode.usesNotch { self?.music.start() } else { self?.music.stop() } } .store(in: &cancellables) deviceWatcher.onConnect = { [weak self] address, name in + guard self?.settings.usageMode.usesHeadphones == true else { return } self?.model.headsetConnectedToMac(address: address, name: name) } deviceWatcher.onDisconnect = { [weak self] address in self?.model.headsetDisconnectedFromMac(address: address) } - deviceWatcher.start() - - if settings.autoConnect { model.autoConnectOnLaunch() } + // In notch-only mode Bluetooth is never touched (so macOS never asks for it). Switching to a mode with + // the headphones starts it; leaving it drops the link. + settings.$usageMode + .receive(on: DispatchQueue.main) + .sink { [weak self] mode in self?.applyHeadphones(mode.usesHeadphones) } + .store(in: &cancellables) updates.start() } + private var headphonesStarted = false + + private func applyHeadphones(_ used: Bool) { + if used { + guard !headphonesStarted else { return } + headphonesStarted = true + deviceWatcher.start() + if settings.autoConnect { model.autoConnectOnLaunch() } + } else if model.connectionState != .disconnected { + model.disconnect() + } + } + func applicationWillTerminate(_ notification: Notification) { model.disconnect() } diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index cee8ff27..95db46e9 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -9,6 +9,7 @@ final class AppSettings: ObservableObject { static let lastDeviceAddress = "lastDeviceAddress" static let showNotch = "showNotch" static let setupDone = "setupDone" + static let usageMode = "usageMode" static let notchWidth = "notchOpenWidth" static let notchHeight = "notchOpenHeight" static let notchSide = "notchSideWidth" @@ -42,6 +43,8 @@ final class AppSettings: ObservableObject { get { defaults.bool(forKey: Keys.setupDone) } set { defaults.set(newValue, forKey: Keys.setupDone) } } + // Notch only, headphones only, or both (setup window). + @Published var usageMode: UsageMode { didSet { defaults.set(usageMode.rawValue, forKey: Keys.usageMode) } } @Published var showNotch: Bool { didSet { defaults.set(showNotch, forKey: Keys.showNotch) } } @@ -107,6 +110,7 @@ final class AppSettings: ObservableObject { autoConnect = defaults.bool(forKey: Keys.autoConnect) autoReconnect = defaults.bool(forKey: Keys.autoReconnect) showNotch = defaults.bool(forKey: Keys.showNotch) + usageMode = UsageMode(stored: defaults.string(forKey: Keys.usageMode)) notchWidth = defaults.double(forKey: Keys.notchWidth) notchHeight = defaults.double(forKey: Keys.notchHeight) notchSideWidth = defaults.double(forKey: Keys.notchSide) diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 7bb7c30b..8d7ecd1d 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -2,8 +2,9 @@ import AppKit import Combine import SwiftUI -// The status item's menu. Built once; update() refreshes states, visibility and values in place, -// including while the menu is open. +// The status item's menu. Built for the usage mode (rebuilt when it changes); update() refreshes states, +// visibility and values in place, including while the menu is open. Notch only: the notch settings and the app +// items. Headphones only: the headphones menu without the notch settings. Both: everything. final class HeadphonesMenu { let menu = NSMenu() private let model: HeadphonesModel @@ -11,21 +12,21 @@ final class HeadphonesMenu { private let updates: UpdateChecker private var cancellables = Set() - private let errorItem = NSMenuItem() + private var errorItem = NSMenuItem() private var modeItems: [(SHCAmbientMode, NSMenuItem)] = [] private var ambientRows: [NSMenuItem] = [] // level slider + focus on voice - private let equalizerItem = NSMenuItem() + private var equalizerItem = NSMenuItem() private var equalizerRowItem = NSMenuItem() private var presetItems: [(Int, NSMenuItem)] = [] - private let equalizerNoteItem = NSMenuItem() + private var equalizerNoteItem = NSMenuItem() private var equalizerResetItem = NSMenuItem() private var dseeItem = NSMenuItem() private var speakToChatItem = NSMenuItem() private var adaptiveVolumeItem = NSMenuItem() - private let autoPowerOffItem = NSMenuItem() + private var autoPowerOffItem = NSMenuItem() private var autoPowerOffItems: [NSMenuItem] = [] - private let aboutItem = NSMenuItem() - private let aboutMenu = NSMenu() + private var aboutItem = NSMenuItem() + private var aboutMenu = NSMenu() private var aboutValues: [String] = [] // cache to avoid rebuilding About menu on every slider drag private var connectItem = NSMenuItem() private var launchAtLoginItem = NSMenuItem() @@ -35,10 +36,10 @@ final class HeadphonesMenu { private var artworkGlowItem = NSMenuItem() private var progressRingItem = NSMenuItem() private var headphonesBatteryItem = NSMenuItem() - private let glowItem = NSMenuItem() - private let notchSizeItem = NSMenuItem() + private var glowItem = NSMenuItem() + private var notchSizeItem = NSMenuItem() private var updateItem = NSMenuItem() - private let gesturesItem = NSMenuItem() + private var gesturesItem = NSMenuItem() private var gestureItems: [(NSMenuItem, ReferenceWritableKeyPath)] = [] private let notchSizeMenuDelegate = NotchSizeMenuDelegate() var onOpenSetup: (() -> Void)? // "Setup…": the setup assistant @@ -75,15 +76,12 @@ final class HeadphonesMenu { menu.autoenablesItems = false menu.minimumWidth = MenuMetrics.width - menu.addItem(hostingMenuItem { HeaderRow(model: model) }) - errorItem.isEnabled = false - menu.addItem(errorItem) - menu.addItem(.separator()) - addAmbientSection() - menu.addItem(.separator()) - addSoundSection() - menu.addItem(.separator()) - addAppSection() + build() + settings.$usageMode + .dropFirst() + .receive(on: DispatchQueue.main) + .sink { [weak self] _ in self?.build() } + .store(in: &cancellables) // objectWillChange fires before the new value is stored; hopping to the main queue reads the new state. model.objectWillChange @@ -103,6 +101,68 @@ final class HeadphonesMenu { // MARK: - Building + private func build() { + menu.removeAllItems() + for item in [errorItem, equalizerItem, equalizerNoteItem, autoPowerOffItem, aboutItem, glowItem, notchSizeItem, + gesturesItem] { + item.menu?.removeItem(item) + } + errorItem = NSMenuItem() + equalizerItem = NSMenuItem() + equalizerNoteItem = NSMenuItem() + autoPowerOffItem = NSMenuItem() + aboutItem = NSMenuItem() + aboutMenu = NSMenu() + aboutValues = [] + glowItem = NSMenuItem() + notchSizeItem = NSMenuItem() + gesturesItem = NSMenuItem() + modeItems = [] + ambientRows = [] + presetItems = [] + autoPowerOffItems = [] + gestureItems = [] + sliderRowBuilders = [:] + + let mode = settings.usageMode + if mode.usesHeadphones { + menu.addItem(hostingMenuItem { HeaderRow(model: model) }) + } else { + menu.addItem(sectionHeader("SonyNotch")) + } + errorItem.isEnabled = false + menu.addItem(errorItem) + menu.addItem(.separator()) + if mode.usesHeadphones { + addAmbientSection() + menu.addItem(.separator()) + addSoundSection() + menu.addItem(.separator()) + } else { + addNotchItems(to: menu) + menu.addItem(.separator()) + } + addAppSection(mode) + update() + } + + // The notch settings: in the Options submenu with headphones, at the top of the menu in notch-only mode. + private func addNotchItems(to target: NSMenu) { + showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } + target.addItem(showNotchItem) + progressRingItem = ActionMenuItem(tr("Progress Ring")) { [weak settings] in settings?.progressRing.toggle() } + target.addItem(progressRingItem) + if settings.usageMode.usesHeadphones { + headphonesBatteryItem = ActionMenuItem(tr("Headphones Battery")) { [weak settings] in + settings?.headphonesBattery.toggle() + } + target.addItem(headphonesBatteryItem) + } + target.addItem(makeGlowItem()) + target.addItem(makeNotchSizeItem()) + target.addItem(makeGesturesItem()) + } + private func addAmbientSection() { menu.addItem(sectionHeader(tr("Ambient Sound Control"))) let modes: [(SHCAmbientMode, String)] = [ @@ -168,31 +228,30 @@ final class HeadphonesMenu { menu.addItem(autoPowerOffItem) } - private func addAppSection() { - aboutItem.title = tr("About the Headphones") - aboutMenu.autoenablesItems = false - aboutItem.submenu = aboutMenu - menu.addItem(aboutItem) - let optionsMenu = NSMenu() - optionsMenu.autoenablesItems = false + private func addAppSection(_ mode: UsageMode) { + if mode.usesHeadphones { + aboutItem.title = tr("About the Headphones") + aboutMenu.autoenablesItems = false + aboutItem.submenu = aboutMenu + menu.addItem(aboutItem) + let optionsMenu = NSMenu() + optionsMenu.autoenablesItems = false + autoConnectItem = ActionMenuItem(tr("Connect Automatically")) { [weak settings] in settings?.autoConnect.toggle() } + autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } + optionsMenu.addItem(autoConnectItem) + optionsMenu.addItem(autoReconnectItem) + if mode.usesNotch { + optionsMenu.addItem(.separator()) + addNotchItems(to: optionsMenu) + } + let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") + optionsItem.submenu = optionsMenu + menu.addItem(optionsItem) + connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } + menu.addItem(connectItem) + menu.addItem(.separator()) + } launchAtLoginItem = ActionMenuItem(tr("Launch at Login")) { [weak self] in self?.toggleLaunchAtLogin() } - autoConnectItem = ActionMenuItem(tr("Connect Automatically")) { [weak settings] in settings?.autoConnect.toggle() } - autoReconnectItem = ActionMenuItem(tr("Reconnect Automatically")) { [weak settings] in settings?.autoReconnect.toggle() } - showNotchItem = ActionMenuItem(tr("Show Notch")) { [weak settings] in settings?.showNotch.toggle() } - for item in [autoConnectItem, autoReconnectItem, showNotchItem] { optionsMenu.addItem(item) } - progressRingItem = ActionMenuItem(tr("Progress Ring")) { [weak settings] in settings?.progressRing.toggle() } - optionsMenu.addItem(progressRingItem) - headphonesBatteryItem = ActionMenuItem(tr("Headphones Battery")) { [weak settings] in settings?.headphonesBattery.toggle() } - optionsMenu.addItem(headphonesBatteryItem) - optionsMenu.addItem(makeGlowItem()) - optionsMenu.addItem(makeNotchSizeItem()) - optionsMenu.addItem(makeGesturesItem()) - let optionsItem = NSMenuItem(title: tr("SonyNotch Options"), action: nil, keyEquivalent: "") - optionsItem.submenu = optionsMenu - menu.addItem(optionsItem) - connectItem = ActionMenuItem(tr("Connect…")) { [weak self] in self?.toggleConnection() } - menu.addItem(connectItem) - menu.addItem(.separator()) menu.addItem(launchAtLoginItem) menu.addItem(ActionMenuItem(tr("Setup…")) { [weak self] in self?.onOpenSetup?() }) updateItem = ActionMenuItem("") { [weak updates] in updates?.install() } @@ -263,10 +322,11 @@ final class HeadphonesMenu { gesturesItem.isEnabled = settings.showNotch for (item, keyPath) in gestureItems { item.state = settings[keyPath: keyPath] ? .on : .off + // Reversing a gesture that is off means nothing. (Matched by setting, not position: the gestures + // submenu doesn't exist in headphones-only mode.) + if keyPath == \.reverseSwipe { item.isEnabled = settings.swipeToSkip } + if keyPath == \.reverseScroll { item.isEnabled = settings.scrollForVolume } } - // Reversing a gesture that is off means nothing. - gestureItems[2].0.isEnabled = settings.swipeToSkip - gestureItems[3].0.isEnabled = settings.scrollForVolume // Always shown: greyed out while this is the latest version. if let release = updates.available { let version = release.tag.hasPrefix("v") ? String(release.tag.dropFirst()) : release.tag diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index ab1b331f..9868cdb3 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -7,7 +7,7 @@ struct MusicTab: View { private static let volumeAutoHide: TimeInterval = 4 @ObservedObject var music: MusicController - let showHeadphones: () -> Void + let showHeadphones: (() -> Void)? // nil in notch-only mode: no headphones button let scrolledVolume: Int? // volume being set by scrolling over the notch @Environment(\.notchScale) private var s @State private var seekValue: Double? // while dragging the progress bar @@ -16,7 +16,7 @@ struct MusicTab: View { @State private var volumeHideWork: DispatchWorkItem? // Explicit: the private @State properties would otherwise make the memberwise init private. - init(music: MusicController, scrolledVolume: Int?, showHeadphones: @escaping () -> Void) { + init(music: MusicController, scrolledVolume: Int?, showHeadphones: (() -> Void)?) { _music = ObservedObject(wrappedValue: music) self.scrolledVolume = scrolledVolume self.showHeadphones = showHeadphones @@ -54,9 +54,11 @@ struct MusicTab: View { NotchPillButton(title: button, action: action) } Spacer(minLength: 0) - HStack { - iconButton("headphones", label: tr("Headphones"), action: showHeadphones) - Spacer() + if let showHeadphones = showHeadphones { + HStack { + iconButton("headphones", label: tr("Headphones"), action: showHeadphones) + Spacer() + } } } .frame(maxWidth: .infinity) @@ -109,8 +111,12 @@ struct MusicTab: View { Spacer(minLength: 6 * s) // The side buttons take equal flexible widths, so previous / play / next stay centred on the notch. HStack(spacing: 0) { - iconButton("headphones", label: tr("Headphones"), action: showHeadphones) - .frame(maxWidth: .infinity, alignment: .leading) + Group { + if let showHeadphones = showHeadphones { + iconButton("headphones", label: tr("Headphones"), action: showHeadphones) + } + } + .frame(maxWidth: .infinity, alignment: .leading) HStack(spacing: 22 * s) { iconButton("backward.fill", size: 17, color: .white, label: tr("Previous track")) { music.previous() } iconButton(track.isPlaying ? "pause.fill" : "play.fill", size: 21, color: .white, diff --git a/Client/macos/Notch/NotchContent.swift b/Client/macos/Notch/NotchContent.swift index a54980cb..1ab41eb6 100644 --- a/Client/macos/Notch/NotchContent.swift +++ b/Client/macos/Notch/NotchContent.swift @@ -16,6 +16,11 @@ enum NotchContent { static let openDelay: TimeInterval = 0.15 // hover time before opening static let closeDelay: TimeInterval = 0.4 // time after the pointer leaves before closing + // In notch-only mode, connected headphones are ignored. + static func restingState(hasMusic: Bool, headphonesConnected: Bool, mode: UsageMode) -> NotchRestingState { + restingState(hasMusic: hasMusic, headphonesConnected: headphonesConnected && mode.usesHeadphones) + } + static func restingState(hasMusic: Bool, headphonesConnected: Bool) -> NotchRestingState { switch (hasMusic, headphonesConnected) { case (true, true): return .musicAndHeadphones diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index 6ecf0922..520de099 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -77,9 +77,13 @@ final class NotchController { .sink { [weak self] _ in self?.relayout() } .store(in: &cancellables) // receive(on:) hops after @Published stored the new value, so the sinks read current state. - settings.$showNotch + settings.$showNotch.combineLatest(settings.$usageMode) .receive(on: DispatchQueue.main) - .sink { [weak self] _ in self?.relayout() } + .sink { [weak self] _, mode in + self?.state.headphonesEnabled = mode.usesHeadphones + if !mode.usesHeadphones { self?.select(.music) } + self?.relayout() + } .store(in: &cancellables) // A size slider shows what it changes: the open notch for its width, height and text size, the closed // notch for the closed width. @@ -135,7 +139,7 @@ final class NotchController { // MARK: - Placement private func relayout() { - guard settings.showNotch, let screen = Self.preferredScreen() else { + guard settings.showNotch, settings.usageMode.usesNotch, let screen = Self.preferredScreen() else { geometry = nil if state.isOpen { state.isOpen = false @@ -173,7 +177,8 @@ final class NotchController { private func updateResting() { guard let geometry = geometry else { return } - let resting = NotchContent.restingState(hasMusic: music.hasMusic, headphonesConnected: model.connected) + let resting = NotchContent.restingState(hasMusic: music.hasMusic, headphonesConnected: model.connected, + mode: settings.usageMode) let frame = geometry.restingFrame(for: resting) if state.resting != resting || (frame != nil && state.restingSize != frame?.size) { withAnimation(state.isOpen ? NotchMotion.open : NotchMotion.close) { @@ -249,7 +254,10 @@ final class NotchController { private func open() { unmountWork?.cancel() hideWork?.cancel() - if !state.openContentMounted { state.tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) } + if !state.openContentMounted { + let tab = NotchContent.tabOnOpen(lastChosen: lastChosenTab, hasMusic: music.hasMusic) + state.tab = settings.usageMode.usesHeadphones ? tab : .music + } state.openContentMounted = true state.trailingHovered = false panel.ignoresMouseEvents = false diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index c784ab00..93a61947 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -10,6 +10,7 @@ final class NotchViewState: ObservableObject { @Published var artworkGlow = true // Options › Glow @Published var progressRing = true // Options › Progress Ring @Published var headphonesBattery = true // Options › Headphones Battery + @Published var headphonesEnabled = true // false in notch-only mode @Published var glowSize: CGFloat = 1 // times the default glow size @Published var resting: NotchRestingState = .empty @Published var tab: NotchTab = .music @@ -152,7 +153,7 @@ struct NotchView: View { // The level to show on the closed notch, nil when the battery option is off or nothing is known yet. private var batteryLevel: Int? { - guard state.headphonesBattery else { return nil } + guard state.headphonesBattery, state.headphonesEnabled else { return nil } return BatteryDisplay.level(single: model.batteryLevel, dual: model.hasDualBattery, left: model.batteryLeft, right: model.batteryRight) } @@ -186,9 +187,12 @@ struct NotchView: View { // neither drawn, clickable nor read by VoiceOver. ZStack(alignment: .top) { page(.music) { - MusicTab(music: music, scrolledVolume: state.scrolledVolume, showHeadphones: { selectTab(.headphones) }) + MusicTab(music: music, scrolledVolume: state.scrolledVolume, + showHeadphones: state.headphonesEnabled ? { selectTab(.headphones) } : nil) + } + if state.headphonesEnabled { + page(.headphones) { HeadphonesTab(model: model, back: { selectTab(.music) }) } } - page(.headphones) { HeadphonesTab(model: model, back: { selectTab(.music) }) } } .padding(.top, 8 * state.contentScale) .padding(.horizontal, Self.openFlare + 16 * state.contentScale) diff --git a/Client/macos/Setup/SetupChecks.swift b/Client/macos/Setup/SetupChecks.swift index 35d4f452..3abcabab 100644 --- a/Client/macos/Setup/SetupChecks.swift +++ b/Client/macos/Setup/SetupChecks.swift @@ -34,7 +34,9 @@ final class SetupChecks: ObservableObject { } func refresh() { - bluetooth = SetupAccess.bluetooth(rawAuthorization: CBCentralManager.authorization.rawValue) + let bluetoothAccess = SetupAccess.bluetooth(rawAuthorization: CBCentralManager.authorization.rawValue) + if bluetoothAccess != bluetooth { fputs("[setup] Bluetooth: \(bluetoothAccess)\n", stderr) } + bluetooth = bluetoothAccess spotifyRunning = !NSRunningApplication.runningApplications(withBundleIdentifier: Self.spotifyID).isEmpty guard spotifyRunning else { spotify = .unavailable @@ -45,7 +47,9 @@ final class SetupChecks: ObservableObject { let status = Self.spotifyPermission(ask: false) DispatchQueue.main.async { guard let self = self, !self.askingSpotify else { return } - self.spotify = SetupAccess.spotify(status: status) + let access = SetupAccess.spotify(status: status) + if access != self.spotify { fputs("[setup] Spotify control: \(access) (\(status))\n", stderr) } + self.spotify = access } } } diff --git a/Client/macos/Setup/SetupView.swift b/Client/macos/Setup/SetupView.swift index 50423b8a..6ac774ea 100644 --- a/Client/macos/Setup/SetupView.swift +++ b/Client/macos/Setup/SetupView.swift @@ -20,13 +20,27 @@ struct SetupView: View { } } + Text(tr("How do you want to use SonyNotch?")).font(.headline) + HStack(spacing: 10) { + ModeCard(mode: .notchOnly, icon: "music.note", title: tr("Notch"), + detail: tr("Spotify in the notch, no headphones needed."), selection: $settings.usageMode) + ModeCard(mode: .headphonesOnly, icon: "headphones", title: tr("Headphones"), + detail: tr("Your Sony headphones' settings in the menu bar."), selection: $settings.usageMode) + ModeCard(mode: .both, icon: "sparkles", title: tr("Both"), + detail: tr("The notch and the headphones together."), selection: $settings.usageMode) + } + VStack(spacing: 0) { - bluetoothRow - Divider() - headphonesRow - Divider() - spotifyRow - Divider() + if settings.usageMode.usesHeadphones { + bluetoothRow + Divider() + headphonesRow + Divider() + } + if settings.usageMode.usesNotch { + spotifyRow + Divider() + } SetupRow(icon: "power", title: tr("Launch at Login"), detail: tr("Start SonyNotch when you log in to your Mac."), done: settings.launchAtLogin) { @@ -49,7 +63,8 @@ struct SetupView: View { } } .padding(24) - .frame(width: 520) + .frame(width: 560) + .animation(.easeInOut(duration: 0.2), value: settings.usageMode) } private var bluetoothRow: some View { @@ -99,16 +114,16 @@ struct SetupView: View { private var spotifyRow: some View { SetupRow(icon: "music.note", title: tr("Spotify"), detail: spotifyDetail, - done: checks.spotify == .granted, optional: true) { + done: checks.spotify == .granted, optional: settings.usageMode.usesHeadphones) { if !checks.spotifyRunning { Button(tr("Open Spotify")) { checks.launchSpotify() } } else if checks.askingSpotify { ProgressView().controlSize(.small) } else { switch checks.spotify { - case .notDetermined: Button(tr("Allow")) { checks.requestSpotify() } + case .granted: Button(tr("Settings")) { checks.openAutomationSettings() } case .denied: Button(tr("Ask Again")) { checks.askSpotifyAgain() } - default: Button(tr("Settings")) { checks.openAutomationSettings() } + default: Button(tr("Allow")) { checks.requestSpotify() } // not asked yet, or macOS can't tell } } } @@ -125,6 +140,40 @@ struct SetupView: View { } } +// One way of using SonyNotch, picked by clicking the card. +private struct ModeCard: View { + let mode: UsageMode + let icon: String + let title: String + let detail: String + @Binding var selection: UsageMode + + var body: some View { + let selected = selection == mode + Button { selection = mode } label: { + VStack(alignment: .leading, spacing: 6) { + HStack { + Image(systemName: icon).font(.system(size: 18)).foregroundColor(.accentColor) + Spacer() + Image(systemName: selected ? "checkmark.circle.fill" : "circle") + .foregroundColor(selected ? .accentColor : Color(nsColor: .tertiaryLabelColor)) + } + Text(title).fontWeight(.semibold) + Text(detail).font(.caption).foregroundColor(.secondary).fixedSize(horizontal: false, vertical: true) + Spacer(minLength: 0) + } + .padding(12) + .frame(maxWidth: .infinity, minHeight: 104, alignment: .topLeading) + .background(RoundedRectangle(cornerRadius: 10).fill(Color(nsColor: .controlBackgroundColor))) + .overlay(RoundedRectangle(cornerRadius: 10) + .stroke(selected ? Color.accentColor : Color(nsColor: .separatorColor), lineWidth: selected ? 2 : 1)) + .contentShape(RoundedRectangle(cornerRadius: 10)) + } + .buttonStyle(.plain) + .accessibilityAddTraits(selected ? .isSelected : []) + } +} + private struct SetupRow: View { let icon: String let title: String diff --git a/Client/macos/StatusItemController.swift b/Client/macos/StatusItemController.swift index 2b6160b1..a4abb757 100644 --- a/Client/macos/StatusItemController.swift +++ b/Client/macos/StatusItemController.swift @@ -15,12 +15,21 @@ final class StatusItemController { init(model: HeadphonesModel, settings: AppSettings, updates: UpdateChecker) { headphonesMenu = HeadphonesMenu(model: model, settings: settings, updates: updates) statusItem.menu = headphonesMenu.menu - model.$connectionState.combineLatest(model.$mode) + // Notch only: a music note. Otherwise the headphones' mode, dimmed while disconnected. + model.$connectionState.combineLatest(model.$mode, settings.$usageMode) .receive(on: DispatchQueue.main) - .sink { [weak self] state, mode in - let connected = state == .connected - self?.statusItem.button?.image = StatusIcon.image(connected: connected, mode: mode) - self?.statusItem.button?.appearsDisabled = !connected + .sink { [weak self] state, mode, usage in + guard let button = self?.statusItem.button else { return } + if usage.usesHeadphones { + let connected = state == .connected + button.image = StatusIcon.image(connected: connected, mode: mode) + button.appearsDisabled = !connected + } else { + let image = NSImage(systemSymbolName: "music.note", accessibilityDescription: "SonyNotch") + image?.isTemplate = true + button.image = image + button.appearsDisabled = false + } } .store(in: &cancellables) } diff --git a/Client/macos/UsageMode.swift b/Client/macos/UsageMode.swift new file mode 100644 index 00000000..230652bc --- /dev/null +++ b/Client/macos/UsageMode.swift @@ -0,0 +1,16 @@ +import Foundation + +// How SonyNotch is used, chosen in the setup window. Pure, tested in LogicTests. +enum UsageMode: String, CaseIterable { + case notchOnly // the notch and Spotify, nothing about headphones (Bluetooth is never used) + case headphonesOnly // the headphones menu, no notch (Spotify is never used) + case both + + // Missing (installs from before the choice existed) or unknown: everything, as before. + init(stored: String?) { + self = stored.flatMap(UsageMode.init(rawValue:)) ?? .both + } + + var usesNotch: Bool { self != .headphonesOnly } + var usesHeadphones: Bool { self != .notchOnly } +} diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 24e10314..100a787e 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -129,3 +129,9 @@ "Ask Again" = "Redemander"; "Control was refused. Ask Again shows macOS's question once more." = "Le contrôle a été refusé. Redemander affiche de nouveau la question de macOS."; "You can open this window again with Setup… in the SonyNotch menu." = "Vous pourrez rouvrir cette fenêtre avec Configuration… dans le menu de SonyNotch."; +"How do you want to use SonyNotch?" = "Comment voulez-vous utiliser SonyNotch ?"; +"Notch" = "Encoche"; +"Spotify in the notch, no headphones needed." = "Spotify dans l’encoche, sans casque."; +"Your Sony headphones' settings in the menu bar." = "Les réglages de votre casque Sony dans la barre des menus."; +"Both" = "Les deux"; +"The notch and the headphones together." = "L’encoche et le casque ensemble."; diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index 5a362511..c06097b4 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -226,6 +226,21 @@ do { "Bluetooth denied or restricted") } +// UsageMode: what each way of using SonyNotch turns on. +do { + check(UsageMode.notchOnly.usesNotch && !UsageMode.notchOnly.usesHeadphones, "notch only: no headphones") + check(!UsageMode.headphonesOnly.usesNotch && UsageMode.headphonesOnly.usesHeadphones, "headphones only: no notch") + check(UsageMode.both.usesNotch && UsageMode.both.usesHeadphones, "both") + check(UsageMode(stored: nil) == .both && UsageMode(stored: "nonsense") == .both, "missing or unknown: both") + check(UsageMode(stored: UsageMode.notchOnly.rawValue) == .notchOnly, "stored value read back") + check(NotchContent.restingState(hasMusic: false, headphonesConnected: true, mode: .notchOnly) == .empty, + "notch only ignores connected headphones") + check(NotchContent.restingState(hasMusic: true, headphonesConnected: true, mode: .notchOnly) == .musicOnly, + "notch only: music without the headphones side") + check(NotchContent.restingState(hasMusic: true, headphonesConnected: true, mode: .both) == .musicAndHeadphones, + "both: unchanged") +} + // PlaybackClock: live position from the last known one; display format. do { let t0 = Date(timeIntervalSince1970: 1_000) diff --git a/README.md b/README.md index 3b0ff7ec..d4ca9023 100644 --- a/README.md +++ b/README.md @@ -27,9 +27,14 @@ That's it. Open SonyNotch from your Applications folder. ### First launch -SonyNotch appears in the menu bar and opens its setup window. It checks everything SonyNotch needs, with a -button for each: Bluetooth access, your headphones, permission to control Spotify (for the notch player) and -launch at login. Pair your headphones in System Settings › Bluetooth first if they aren't yet. +SonyNotch appears in the menu bar and opens its setup window. First choose how you want to use it: + +- **Notch**: Spotify in the notch, no Sony headphones needed. Bluetooth is never used. +- **Headphones**: your Sony headphones' settings in the menu bar, without the notch. +- **Both**: the notch and the headphones together. + +The window then checks what that choice needs, with a button for each: Bluetooth access, your headphones, +permission to control Spotify and launch at login. Pair your headphones in System Settings › Bluetooth first if they aren't yet. If something stops working later, open the same window with Setup… in the menu: every line can be fixed or redone from there. diff --git a/scripts/test.sh b/scripts/test.sh index 4647982a..3e6c4160 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -13,6 +13,7 @@ echo "== LogicTests" swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$ROOT/Client/tests/LogicTests/main.swift" \ "$MAC/ReconnectPolicy.swift" "$MAC/PollGuard.swift" "$MAC/SendThrottle.swift" \ + "$MAC/UsageMode.swift" \ "$MAC/Notch/NotchGeometry.swift" "$MAC/Notch/NotchContent.swift" "$MAC/Notch/NotchScrollGesture.swift" \ "$MAC/Notch/BatteryDisplay.swift" \ "$MAC/Setup/SetupAccess.swift" \ From 169dac8da80bddfbe7e898e04f17ecbff4b6ac7e Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 18 Sep 2026 11:17:44 +0200 Subject: [PATCH 49/50] feat(notch): Apple Music, and Deezer, YouTube Music or the browser through Now Playing --- Client/macos/AppDelegate.swift | 9 +- Client/macos/AppSettings.swift | 6 +- Client/macos/HeadphonesMenu.swift | 8 + Client/macos/Helper/NowPlayingHelper.m | 155 +++++++++++++ .../macos/Music/AppleMusicPlaybackInfo.swift | 35 +++ Client/macos/Music/MusicController.swift | 137 +++++++---- Client/macos/Music/MusicSource.swift | 5 +- Client/macos/Music/MusicSourcePicker.swift | 23 ++ Client/macos/Music/NowPlaying.swift | 1 + Client/macos/Music/NowPlayingInfo.swift | 43 ++++ Client/macos/Music/NowPlayingSource.swift | 216 ++++++++++++++++++ Client/macos/Music/PlayerScript.swift | 37 +++ Client/macos/Music/ScriptedPlayer.swift | 70 ++++++ ...ource.swift => ScriptedPlayerSource.swift} | 123 ++++++---- Client/macos/Music/SpotifyPlaybackInfo.swift | 12 +- Client/macos/Music/SpotifyScript.swift | 44 ---- Client/macos/Notch/MusicTab.swift | 14 +- Client/macos/Notch/NotchController.swift | 2 +- Client/macos/Notch/NotchControls.swift | 2 +- Client/macos/Notch/NotchView.swift | 2 +- Client/macos/Setup/SetupAccess.swift | 8 +- Client/macos/Setup/SetupChecks.swift | 97 +++++--- Client/macos/Setup/SetupView.swift | 40 ++-- .../macos/Setup/SetupWindowController.swift | 4 +- Client/macos/UsageMode.swift | 4 +- Client/macos/en.lproj/InfoPlist.strings | 2 +- Client/macos/fr.lproj/InfoPlist.strings | 2 +- Client/macos/fr.lproj/Localizable.strings | 18 +- Client/macos/info.plist | 2 +- Client/tests/LogicTests/main.swift | 78 ++++++- README.md | 32 ++- scripts/build.sh | 14 +- scripts/test.sh | 1 + 33 files changed, 1008 insertions(+), 238 deletions(-) create mode 100644 Client/macos/Helper/NowPlayingHelper.m create mode 100644 Client/macos/Music/AppleMusicPlaybackInfo.swift create mode 100644 Client/macos/Music/MusicSourcePicker.swift create mode 100644 Client/macos/Music/NowPlayingInfo.swift create mode 100644 Client/macos/Music/NowPlayingSource.swift create mode 100644 Client/macos/Music/PlayerScript.swift create mode 100644 Client/macos/Music/ScriptedPlayer.swift rename Client/macos/Music/{SpotifyLocalSource.swift => ScriptedPlayerSource.swift} (57%) delete mode 100644 Client/macos/Music/SpotifyScript.swift diff --git a/Client/macos/AppDelegate.swift b/Client/macos/AppDelegate.swift index ef75f48a..a4111daa 100644 --- a/Client/macos/AppDelegate.swift +++ b/Client/macos/AppDelegate.swift @@ -17,11 +17,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate { statusItemController = StatusItemController(model: model, settings: settings, updates: updates) notchController = NotchController(model: model, music: music, settings: settings) setupWindow = SetupWindowController(model: model, settings: settings, - onSpotifyGranted: { [weak self] in self?.music.refresh() }) + onPlayerGranted: { [weak self] in self?.music.refresh() }) statusItemController?.onOpenSetup = { [weak self] in self?.setupWindow?.show() } if !settings.setupDone { setupWindow?.show() } - // Spotify is only read while the notch is on and used. Both publishers emit their current value first. + // The music players are only read while the notch is on and used. Both publishers emit their current value first. settings.$showNotch.combineLatest(settings.$usageMode) .receive(on: DispatchQueue.main) .sink { [weak self] show, mode in @@ -29,6 +29,11 @@ final class AppDelegate: NSObject, NSApplicationDelegate { } .store(in: &cancellables) + settings.$otherPlayers + .receive(on: DispatchQueue.main) + .sink { [weak self] on in self?.music.setOtherPlayers(on) } + .store(in: &cancellables) + deviceWatcher.onConnect = { [weak self] address, name in guard self?.settings.usageMode.usesHeadphones == true else { return } self?.model.headsetConnectedToMac(address: address, name: name) diff --git a/Client/macos/AppSettings.swift b/Client/macos/AppSettings.swift index 95db46e9..d5da2efd 100644 --- a/Client/macos/AppSettings.swift +++ b/Client/macos/AppSettings.swift @@ -28,6 +28,7 @@ final class AppSettings: ObservableObject { static let hapticOnSkip = "hapticOnSkip" static let hapticOnVolume = "hapticOnVolume" static let hapticStrength = "hapticStrength" + static let otherPlayers = "otherPlayers" } private let defaults: UserDefaults @@ -63,6 +64,8 @@ final class AppSettings: ObservableObject { @Published var reverseScroll: Bool { didSet { defaults.set(reverseScroll, forKey: Keys.reverseScroll) } } @Published var artworkGlow: Bool { didSet { defaults.set(artworkGlow, forKey: Keys.artworkGlow) } } @Published var progressRing: Bool { didSet { defaults.set(progressRing, forKey: Keys.progressRing) } } + // Deezer, YouTube Music, browsers… through macOS's Now Playing (experimental). + @Published var otherPlayers: Bool { didSet { defaults.set(otherPlayers, forKey: Keys.otherPlayers) } } @Published var headphonesBattery: Bool { didSet { defaults.set(headphonesBattery, forKey: Keys.headphonesBattery) } } @Published var glowSize: Double { didSet { defaults.set(glowSize, forKey: Keys.glowSize) } } static let glowSizeRange: ClosedRange = 0.5...1.75 // times the default glow size @@ -105,7 +108,7 @@ final class AppSettings: ObservableObject { Keys.notchArtwork: Double(layout.restingArtwork), Keys.swipeToSkip: true, Keys.scrollForVolume: true, Keys.reverseSwipe: false, Keys.reverseScroll: false, Keys.artworkGlow: true, Keys.progressRing: true, Keys.headphonesBattery: true, Keys.glowSize: 1.0, Keys.hapticOnOpen: true, Keys.hapticOnButtons: true, Keys.hapticOnSkip: true, Keys.hapticOnVolume: true, - Keys.hapticStrength: 2, + Keys.hapticStrength: 2, Keys.otherPlayers: true, ]) autoConnect = defaults.bool(forKey: Keys.autoConnect) autoReconnect = defaults.bool(forKey: Keys.autoReconnect) @@ -122,6 +125,7 @@ final class AppSettings: ObservableObject { reverseScroll = defaults.bool(forKey: Keys.reverseScroll) artworkGlow = defaults.bool(forKey: Keys.artworkGlow) progressRing = defaults.bool(forKey: Keys.progressRing) + otherPlayers = defaults.bool(forKey: Keys.otherPlayers) headphonesBattery = defaults.bool(forKey: Keys.headphonesBattery) glowSize = defaults.double(forKey: Keys.glowSize) hapticOnOpen = defaults.bool(forKey: Keys.hapticOnOpen) diff --git a/Client/macos/HeadphonesMenu.swift b/Client/macos/HeadphonesMenu.swift index 8d7ecd1d..bef88726 100644 --- a/Client/macos/HeadphonesMenu.swift +++ b/Client/macos/HeadphonesMenu.swift @@ -33,6 +33,7 @@ final class HeadphonesMenu { private var autoConnectItem = NSMenuItem() private var autoReconnectItem = NSMenuItem() private var showNotchItem = NSMenuItem() + private var otherPlayersItem = NSMenuItem() private var artworkGlowItem = NSMenuItem() private var progressRingItem = NSMenuItem() private var headphonesBatteryItem = NSMenuItem() @@ -161,6 +162,11 @@ final class HeadphonesMenu { target.addItem(makeGlowItem()) target.addItem(makeNotchSizeItem()) target.addItem(makeGesturesItem()) + otherPlayersItem = ActionMenuItem(tr("Other Players (Experimental)")) { [weak settings] in + settings?.otherPlayers.toggle() + } + otherPlayersItem.toolTip = tr("Deezer, YouTube Music, your browser… through macOS's Now Playing.") + target.addItem(otherPlayersItem) } private func addAmbientSection() { @@ -320,6 +326,8 @@ final class HeadphonesMenu { headphonesBatteryItem.isEnabled = settings.showNotch notchSizeItem.isEnabled = settings.showNotch gesturesItem.isEnabled = settings.showNotch + otherPlayersItem.state = settings.otherPlayers ? .on : .off + otherPlayersItem.isEnabled = settings.showNotch for (item, keyPath) in gestureItems { item.state = settings[keyPath: keyPath] ? .on : .off // Reversing a gesture that is off means nothing. (Matched by setting, not position: the gestures diff --git a/Client/macos/Helper/NowPlayingHelper.m b/Client/macos/Helper/NowPlayingHelper.m new file mode 100644 index 00000000..b3218b9d --- /dev/null +++ b/Client/macos/Helper/NowPlayingHelper.m @@ -0,0 +1,155 @@ +// Reads macOS's "Now Playing" (MediaRemote) for NowPlayingSource: Deezer, YouTube Music, browsers, any app that +// shows up in Control Center's player. Since macOS 15.4 MediaRemote only answers Apple-signed processes, so this +// library runs inside /usr/bin/perl: perl loads it, then calls sonynotch_now_playing_run, which never returns. +// +// Out (stdout), one JSON object per line, on every change: +// {"bundle": "com.brave.Browser", "playing": true, "title": …, "artist": …, "album": …, "duration": 215.2, +// "elapsed": 42.5, "timestamp": 1790000000.1, "artworkID": "…", "artwork": ""} +// {"bundle": null} when nothing is playing anywhere. +// "artwork" is only sent when it changed; "timestamp" (Unix time) is when "elapsed" was measured. +// In (stdin), one command per line: toggle, next, previous, seek . End of input (SonyNotch quit): exit. +#import +#include +#include + +typedef void (*RegisterFn)(dispatch_queue_t); +typedef void (*GetInfoFn)(dispatch_queue_t, void (^)(CFDictionaryRef)); +typedef void (*GetClientFn)(dispatch_queue_t, void (^)(id)); +typedef CFStringRef (*ClientStringFn)(id); +typedef void (*IsPlayingFn)(dispatch_queue_t, void (^)(Boolean)); +typedef Boolean (*SendCommandFn)(int, CFDictionaryRef); +typedef void (*SetElapsedFn)(double); + +enum { kTogglePlayPause = 2, kNextTrack = 4, kPreviousTrack = 5 }; // MRMediaRemoteCommand + +static RegisterFn registerForNotifications; +static GetInfoFn getInfo; +static GetClientFn getClient; +static ClientStringFn clientBundle, clientParentBundle; +static IsPlayingFn getIsPlaying; +static SendCommandFn sendCommand; +static SetElapsedFn setElapsed; + +static dispatch_queue_t queue; // serial: reads and writes never overlap +static NSString *lastArtworkID; +static NSString *lastLine; +static BOOL readPending; + +static void emit(NSDictionary *object) { + NSData *data = [NSJSONSerialization dataWithJSONObject:object options:0 error:nil]; + if (!data) return; + NSString *line = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; + if ([line isEqualToString:lastLine]) return; + lastLine = line; + fprintf(stdout, "%s\n", line.UTF8String); + fflush(stdout); +} + +static id orNull(id value) { return value ?: [NSNull null]; } + +// Reads the client, its playing state and its info (three asynchronous calls, chained), then emits one line. +static void readState(void) { + getClient(queue, ^(id client) { + NSString *bundle = nil; + if (client) { + // A web page's player reports its browser as parent. + bundle = clientParentBundle ? (__bridge NSString *)clientParentBundle(client) : nil; + if (bundle.length == 0) bundle = (__bridge NSString *)clientBundle(client); + } + getIsPlaying(queue, ^(Boolean playing) { + getInfo(queue, ^(CFDictionaryRef infoRef) { + NSDictionary *info = (__bridge NSDictionary *)infoRef; + NSString *title = info[@"kMRMediaRemoteNowPlayingInfoTitle"]; + if (bundle.length == 0 || title.length == 0) { + lastArtworkID = nil; + emit(@{@"bundle": [NSNull null]}); + return; + } + NSMutableDictionary *out = [@{ + @"bundle": bundle, + @"playing": playing ? @YES : @NO, + @"title": title, + @"artist": orNull(info[@"kMRMediaRemoteNowPlayingInfoArtist"]), + @"album": orNull(info[@"kMRMediaRemoteNowPlayingInfoAlbum"]), + @"duration": orNull(info[@"kMRMediaRemoteNowPlayingInfoDuration"]), + @"elapsed": orNull(info[@"kMRMediaRemoteNowPlayingInfoElapsedTime"]), + } mutableCopy]; + NSDate *timestamp = info[@"kMRMediaRemoteNowPlayingInfoTimestamp"]; + if (timestamp) out[@"timestamp"] = @(timestamp.timeIntervalSince1970); + NSString *artworkID = info[@"kMRMediaRemoteNowPlayingInfoArtworkIdentifier"] + ?: [NSString stringWithFormat:@"%@|%@", title, out[@"artist"]]; + out[@"artworkID"] = artworkID; + NSData *artwork = info[@"kMRMediaRemoteNowPlayingInfoArtworkData"]; + if (artwork.length > 0 && ![artworkID isEqualToString:lastArtworkID]) { + out[@"artwork"] = [artwork base64EncodedStringWithOptions:0]; + lastArtworkID = artworkID; + } + emit(out); + }); + }); + }); +} + +// Notifications come in bursts: one read shortly after the first of a burst. +static void scheduleRead(void) { + dispatch_async(queue, ^{ + if (readPending) return; + readPending = YES; + dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 100 * NSEC_PER_MSEC), queue, ^{ + readPending = NO; + readState(); + }); + }); +} + +static void runCommand(NSString *line) { + if ([line isEqualToString:@"toggle"]) sendCommand(kTogglePlayPause, NULL); + else if ([line isEqualToString:@"next"]) sendCommand(kNextTrack, NULL); + else if ([line isEqualToString:@"previous"]) sendCommand(kPreviousTrack, NULL); + else if ([line hasPrefix:@"seek "]) setElapsed([[line substringFromIndex:5] doubleValue]); +} + +static void readCommands(void) { + char buffer[256]; + while (fgets(buffer, sizeof buffer, stdin)) { + NSString *line = [[NSString stringWithUTF8String:buffer] + stringByTrimmingCharactersInSet:NSCharacterSet.whitespaceAndNewlineCharacterSet]; + if (line.length > 0) dispatch_async(queue, ^{ runCommand(line); }); + } + exit(0); // SonyNotch closed our input: it quit, or stopped reading other players +} + +// Called by perl as an XSUB (its two arguments are perl's). Never returns. +__attribute__((visibility("default"))) +void sonynotch_now_playing_run(void *perl, void *cv) { + (void)perl; (void)cv; + void *mr = dlopen("/System/Library/PrivateFrameworks/MediaRemote.framework/MediaRemote", RTLD_NOW); + if (!mr) { fprintf(stderr, "MediaRemote not found\n"); exit(2); } + registerForNotifications = dlsym(mr, "MRMediaRemoteRegisterForNowPlayingNotifications"); + getInfo = dlsym(mr, "MRMediaRemoteGetNowPlayingInfo"); + getClient = dlsym(mr, "MRMediaRemoteGetNowPlayingClient"); + clientBundle = dlsym(mr, "MRNowPlayingClientGetBundleIdentifier"); + clientParentBundle = dlsym(mr, "MRNowPlayingClientGetParentAppBundleIdentifier"); // may be missing + getIsPlaying = dlsym(mr, "MRMediaRemoteGetNowPlayingApplicationIsPlaying"); + sendCommand = dlsym(mr, "MRMediaRemoteSendCommand"); + setElapsed = dlsym(mr, "MRMediaRemoteSetElapsedTime"); + if (!registerForNotifications || !getInfo || !getClient || !clientBundle || !getIsPlaying || !sendCommand + || !setElapsed) { + fprintf(stderr, "MediaRemote functions missing\n"); + exit(3); + } + setvbuf(stdout, NULL, _IOLBF, 0); + queue = dispatch_queue_create("com.sonynotch.nowplaying", DISPATCH_QUEUE_SERIAL); + + registerForNotifications(queue); + for (NSString *name in @[@"kMRMediaRemoteNowPlayingInfoDidChangeNotification", + @"kMRMediaRemoteNowPlayingApplicationIsPlayingDidChangeNotification", + @"kMRMediaRemoteNowPlayingApplicationDidChangeNotification"]) { + [NSNotificationCenter.defaultCenter addObserverForName:name object:nil queue:nil + usingBlock:^(NSNotification *note) { scheduleRead(); }]; + } + scheduleRead(); + [NSThread detachNewThreadWithBlock:^{ readCommands(); }]; + CFRunLoopRun(); + exit(0); +} diff --git a/Client/macos/Music/AppleMusicPlaybackInfo.swift b/Client/macos/Music/AppleMusicPlaybackInfo.swift new file mode 100644 index 00000000..ca1833b4 --- /dev/null +++ b/Client/macos/Music/AppleMusicPlaybackInfo.swift @@ -0,0 +1,35 @@ +import Foundation + +// Decodes the Music app's replies. Pure, tested in LogicTests. +enum AppleMusicPlaybackInfo { + static let capabilities = MusicCapabilities(canSeek: true, canSetVolume: true, canChangeDevice: false) + + // com.apple.Music.playerInfo carries no position: apart from "Stopped", it only says it's time to read. + static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> PlayerState { + (userInfo?["Player State"] as? String) == "Stopped" ? .stopped : .incomplete + } + + // AppleMusicScript.readState's reply: "stopped", or 8 fields separated by U+001F — state, persistent ID, name, + // artist, album, duration (ms), position (ms), volume. The artwork is read on its own (it's image data). + static func parse(scriptResult text: String, at date: Date) -> PlayerState { + if text == "stopped" { return .stopped } + let fields = text.split(separator: SpotifyPlaybackInfo.fieldSeparator, omittingEmptySubsequences: false) + .map(String.init) + guard fields.count == 8, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { + return .incomplete + } + return .track(NowPlaying( + trackID: "apple-music:" + fields[1], + title: fields[2], + artist: fields[3], + album: fields[4], + artworkURL: nil, + duration: (Double(fields[5]) ?? 0) / 1000, + position: (Double(fields[6]) ?? 0) / 1000, + positionDate: date, + isPlaying: fields[0] == "playing", + volume: Int(fields[7]).map { min(100, max(0, $0)) }, + deviceName: nil, + capabilities: capabilities)) + } +} diff --git a/Client/macos/Music/MusicController.swift b/Client/macos/Music/MusicController.swift index 0435a374..f6dc411c 100644 --- a/Client/macos/Music/MusicController.swift +++ b/Client/macos/Music/MusicController.swift @@ -1,13 +1,15 @@ import AppKit import Combine -// The music state the notch shows, from the active MusicSource. Step 1: the local Spotify app. +// The music state the notch shows. Follows several players at once (Spotify, Music, others) and shows the one that +// plays, the last to start when several do (MusicSourcePicker); commands go to that one. final class MusicController: ObservableObject { static let openRefreshInterval: TimeInterval = 5 // re-read while the notch is open (volume isn't signalled) private static let artworkCacheSize = 8 @Published private(set) var status: MusicSourceStatus = .notRunning @Published private(set) var nowPlaying: NowPlaying? + @Published private(set) var playerName: String // the player the notch follows, for its messages @Published private(set) var artwork: NSImage? { didSet { artworkTint = artwork.flatMap(Self.tint(of:)) } } @@ -19,33 +21,52 @@ final class MusicController: ObservableObject { // Something to show: a track, playing or paused (even without the right to control it). var hasMusic: Bool { status != .notRunning && nowPlaying != nil } - private let source: MusicSource + private let sources: [MusicSource] + private var states: [String: (status: MusicSourceStatus, track: NowPlaying?)] = [:] + private var playingSince: [String: Date] = [:] + private var activeID: String private var running = false private var refreshTimer: Timer? private var seekThrottle = SendThrottle() private var volumeThrottle = SendThrottle() - private var artworkCache: [URL: NSImage] = [:] - private var artworkOrder: [URL] = [] + private var artworkCache: [String: NSImage] = [:] // by artwork URL, or "track:" for image data + private var artworkOrder: [String] = [] private var artworkRequest: URL? private var lastLogLine = "" - init(source: MusicSource = SpotifyLocalSource()) { - self.source = source - source.onChange = { [weak self] status, track in self?.apply(status, track) } + init(sources: [MusicSource] = ScriptedPlayer.all.map(ScriptedPlayerSource.init(player:)) + [NowPlayingSource()]) { + self.sources = sources + activeID = sources.first?.id ?? "" + playerName = sources.first?.playerName ?? "" + for source in sources { + source.onChange = { [weak self, weak source] status, track in + guard let source = source else { return } + self?.apply(source, status, track) + } + } + } + + private var active: MusicSource? { sources.first { $0.id == activeID } } + + // Options › Other Players: Deezer, YouTube Music, browsers… through macOS's Now Playing. + func setOtherPlayers(_ on: Bool) { + sources.compactMap { $0 as? NowPlayingSource }.forEach { $0.isEnabled = on } } func start() { guard !running else { return } running = true - source.start() + sources.forEach { $0.start() } } - // "Show Notch" off: no Spotify reads at all. + // "Show Notch" off (or headphones-only mode): no player reads at all. func stop() { guard running else { return } running = false notchDidClose() - source.stop() + sources.forEach { $0.stop() } + states = [:] + playingSince = [:] status = .notRunning nowPlaying = nil artwork = nil @@ -53,20 +74,20 @@ final class MusicController: ObservableObject { log("stopped") } - // Opening reads once (which also retries a refused permission), then every 5 s while open. - // Read Spotify again now (after the setup assistant got the permission, for example). + // Read the players again now (after the setup window got a permission, for example). func refresh() { guard running else { return } - source.refresh() + sources.forEach { $0.refresh() } } + // Opening reads once (which also retries a refused permission), then every 5 s while open. func notchDidOpen() { guard running else { return } - source.refresh() + refresh() refreshTimer?.invalidate() let timer = Timer(timeInterval: Self.openRefreshInterval, repeats: true) { [weak self] _ in guard let self = self, self.status == .ready else { return } - self.source.refresh() + self.active?.refresh() } RunLoop.main.add(timer, forMode: .common) refreshTimer = timer @@ -77,16 +98,16 @@ final class MusicController: ObservableObject { refreshTimer = nil } - func playPause() { source.playPause() } + func playPause() { active?.playPause() } func next() { lastSkip = (false, Date()) - source.next() + active?.next() } func previous() { lastSkip = (true, Date()) - source.previous() + active?.previous() } // True when the current track change follows a "previous" asked within the last few seconds. @@ -97,16 +118,16 @@ final class MusicController: ObservableObject { // Sliders: at most one command per 150 ms while dragging, the final value always, then a read-back. func seek(to seconds: TimeInterval, final: Bool) { - if seekThrottle.shouldSend(final: final) { source.seek(to: seconds) } - if final { source.refresh() } + if seekThrottle.shouldSend(final: final) { active?.seek(to: seconds) } + if final { active?.refresh() } } func setVolume(_ volume: Int, final: Bool) { - if volumeThrottle.shouldSend(final: final) { source.setVolume(volume) } - if final { source.refresh() } + if volumeThrottle.shouldSend(final: final) { active?.setVolume(volume) } + if final { active?.refresh() } } - func launchPlayer() { source.launchPlayer() } + func launchPlayer() { active?.launchPlayer() } func openAutomationSettings() { if let url = URL(string: "x-apple.systempreferences:com.apple.preference.security?Privacy_Automation") { @@ -116,17 +137,37 @@ final class MusicController: ObservableObject { // MARK: - Private - private func apply(_ newStatus: MusicSourceStatus, _ track: NowPlaying?) { + private func apply(_ source: MusicSource, _ newStatus: MusicSourceStatus, _ track: NowPlaying?) { guard running else { return } - status = newStatus - nowPlaying = track - loadArtwork(track?.artworkURL) - switch (newStatus, track) { - case (.notRunning, _): log("not running") - case (.permissionDenied, _): log("permission denied") - case (.ready, nil): log("nothing playing") + let wasPlaying = states[source.id]?.track?.isPlaying == true + states[source.id] = (newStatus, track) + let playing = newStatus != .notRunning && track?.isPlaying == true + if playing && !wasPlaying { playingSince[source.id] = Date() } + if !playing { playingSince[source.id] = nil } + + let snapshots = sources.map { source -> SourceSnapshot in + let state = states[source.id] + let running = state.map { $0.status != .notRunning } ?? false + return SourceSnapshot(id: source.id, isPlaying: running && state?.track?.isPlaying == true, + hasTrack: running && state?.track != nil) + } + activeID = MusicSourcePicker.pick(snapshots, playingSince: playingSince, current: activeID) ?? activeID + showActive() + } + + private func showActive() { + let state = states[activeID] ?? (.notRunning, nil) + status = state.status + nowPlaying = state.track + playerName = active?.playerName ?? "" + loadArtwork(for: state.track) + let name = activeID + switch (state.status, state.track) { + case (.notRunning, _): log("\(name) not running") + case (.permissionDenied, _): log("\(name) permission denied") + case (.ready, nil): log("\(name) nothing playing") case (.ready, let track?): - log("\(track.isPlaying ? "playing" : "paused") \(track.trackID) vol \(track.volume.map(String.init) ?? "?")") + log("\(name) \(track.isPlaying ? "playing" : "paused") \(track.trackID) vol \(track.volume.map(String.init) ?? "?")") } } @@ -134,16 +175,28 @@ final class MusicController: ObservableObject { private func log(_ line: String) { guard line != lastLogLine else { return } lastLogLine = line - fputs("[spotify] \(line)\n", stderr) + fputs("[music] \(line)\n", stderr) } - private func loadArtwork(_ url: URL?) { - guard let url = url else { - artwork = nil + private func loadArtwork(for track: NowPlaying?) { + if let track = track, let data = track.artworkData { + let key = "track:" + track.trackID + artworkRequest = nil + if let cached = artworkCache[key] { + artwork = cached + } else if let image = NSImage(data: data) { + remember(image, for: key) + artwork = image + } + return + } + guard let url = track?.artworkURL else { + // Now Playing only sends a track's artwork once: coming back to it, reuse the one already shown. + artwork = track.flatMap { artworkCache["track:" + $0.trackID] } artworkRequest = nil return } - if let cached = artworkCache[url] { + if let cached = artworkCache[url.absoluteString] { artwork = cached artworkRequest = nil return @@ -156,7 +209,7 @@ final class MusicController: ObservableObject { guard let self = self, self.artworkRequest == url else { return } self.artworkRequest = nil guard let image = image else { return } - self.remember(image, for: url) + self.remember(image, for: url.absoluteString) self.artwork = image } }.resume() @@ -180,10 +233,10 @@ final class MusicController: ObservableObject { brightness: max(average.brightnessComponent, 0.85), alpha: 1) } - private func remember(_ image: NSImage, for url: URL) { - artworkCache[url] = image - artworkOrder.removeAll { $0 == url } - artworkOrder.append(url) + private func remember(_ image: NSImage, for key: String) { + artworkCache[key] = image + artworkOrder.removeAll { $0 == key } + artworkOrder.append(key) if artworkOrder.count > Self.artworkCacheSize { artworkCache[artworkOrder.removeFirst()] = nil } diff --git a/Client/macos/Music/MusicSource.swift b/Client/macos/Music/MusicSource.swift index dd3cc7fd..b606267e 100644 --- a/Client/macos/Music/MusicSource.swift +++ b/Client/macos/Music/MusicSource.swift @@ -6,9 +6,12 @@ enum MusicSourceStatus: Equatable { case ready } -// Where the music comes from. Step 1: SpotifyLocalSource; step 2 adds the Spotify Web API. +// One music app. ScriptedPlayerSource covers Spotify and Music; the Spotify Web API would be another. // Called on the main thread; onChange is called on the main thread. protocol MusicSource: AnyObject { + var id: String { get } + var playerName: String { get } + var bundleIdentifier: String { get } var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? { get set } func start() func stop() diff --git a/Client/macos/Music/MusicSourcePicker.swift b/Client/macos/Music/MusicSourcePicker.swift new file mode 100644 index 00000000..467119f6 --- /dev/null +++ b/Client/macos/Music/MusicSourcePicker.swift @@ -0,0 +1,23 @@ +import Foundation + +// A music source's state as the picker needs it. +struct SourceSnapshot: Equatable { + var id: String + var isPlaying: Bool + var hasTrack: Bool +} + +// Which player the notch follows, automatically. Pure, tested in LogicTests. +enum MusicSourcePicker { + // The one playing (the last to start when several play); else the current one while it still has a track; + // else any that has one; else the current (or first) one, for its "not open" message. + static func pick(_ sources: [SourceSnapshot], playingSince: [String: Date], current: String?) -> String? { + let playing = sources.filter(\.isPlaying) + if let latest = playing.max(by: { (playingSince[$0.id] ?? .distantPast) < (playingSince[$1.id] ?? .distantPast) }) { + return latest.id + } + if let current = current, sources.contains(where: { $0.id == current && $0.hasTrack }) { return current } + if let withTrack = sources.first(where: \.hasTrack) { return withTrack.id } + return current ?? sources.first?.id + } +} diff --git a/Client/macos/Music/NowPlaying.swift b/Client/macos/Music/NowPlaying.swift index 02beb0fa..d23d7b31 100644 --- a/Client/macos/Music/NowPlaying.swift +++ b/Client/macos/Music/NowPlaying.swift @@ -15,6 +15,7 @@ struct NowPlaying: Equatable { var artist: String var album: String var artworkURL: URL? + var artworkData: Data? = nil // image bytes, for players that give the artwork itself (Music) var duration: TimeInterval // seconds; 0 when unknown var position: TimeInterval // seconds, at positionDate var positionDate: Date diff --git a/Client/macos/Music/NowPlayingInfo.swift b/Client/macos/Music/NowPlayingInfo.swift new file mode 100644 index 00000000..07be5114 --- /dev/null +++ b/Client/macos/Music/NowPlayingInfo.swift @@ -0,0 +1,43 @@ +import Foundation + +// One line from NowPlayingHelper, decoded. +enum NowPlayingUpdate: Equatable { + case nothing // nothing in macOS's Now Playing + case track(bundleID: String, NowPlaying) // artworkData set only when the line carried a new artwork +} + +// Decodes NowPlayingHelper's JSON lines (the format is described at the top of NowPlayingHelper.m). +// Pure, tested in LogicTests. +enum NowPlayingInfo { + // Now Playing has no volume; seeking works when the track has a duration. + static func capabilities(duration: TimeInterval) -> MusicCapabilities { + MusicCapabilities(canSeek: duration > 0, canSetVolume: false, canChangeDevice: false) + } + + // nil for a line that isn't one of the helper's (ignored). + static func parse(line: String, receivedAt date: Date) -> NowPlayingUpdate? { + guard let data = line.data(using: .utf8), + let object = (try? JSONSerialization.jsonObject(with: data)) as? [String: Any] else { return nil } + guard let bundleID = object["bundle"] as? String, !bundleID.isEmpty, + let title = object["title"] as? String, !title.isEmpty else { return .nothing } + let artist = object["artist"] as? String ?? "" + let duration = max(0, object["duration"] as? Double ?? 0) + let timestamp = (object["timestamp"] as? Double).map(Date.init(timeIntervalSince1970:)) ?? date + return .track(bundleID: bundleID, NowPlaying( + // Stable per track (not per line), so the notch only flips the artwork on a real track change. + trackID: "now-playing:\(bundleID):\(title)\u{1F}\(artist)", + title: title, + artist: artist, + album: object["album"] as? String ?? "", + artworkURL: nil, + artworkData: (object["artwork"] as? String).flatMap { Data(base64Encoded: $0) }, + duration: duration, + position: max(0, object["elapsed"] as? Double ?? 0), + // A timestamp from the future (clock skew) would freeze the progress bar: never later than now. + positionDate: min(timestamp, date), + isPlaying: object["playing"] as? Bool ?? false, + volume: nil, + deviceName: nil, + capabilities: capabilities(duration: duration))) + } +} diff --git a/Client/macos/Music/NowPlayingSource.swift b/Client/macos/Music/NowPlayingSource.swift new file mode 100644 index 00000000..5ec363f5 --- /dev/null +++ b/Client/macos/Music/NowPlayingSource.swift @@ -0,0 +1,216 @@ +import AppKit + +// Every other player (Deezer, YouTube Music, browsers…), through macOS's "Now Playing": NowPlayingHelper runs +// inside /usr/bin/perl, streams the changes as JSON lines and takes commands on its input. Experimental (it relies +// on private MediaRemote calls and on perl), and off with Options › Other Players. Spotify and Music keep their own +// source: what Now Playing says about them is ignored here. No volume: Now Playing doesn't give one. +final class NowPlayingSource: MusicSource { + private static let helperName = "NowPlayingHelper.dylib" + private static let perl = URL(fileURLWithPath: "/usr/bin/perl") + // Loads the helper, then calls its entry point (not from the library's load, which holds dyld's lock). + private static let perlScript = """ + use DynaLoader; + my $lib = DynaLoader::dl_load_file($ARGV[0], 0) or die DynaLoader::dl_error(); + my $run = DynaLoader::dl_find_symbol($lib, "sonynotch_now_playing_run") or die DynaLoader::dl_error(); + DynaLoader::dl_install_xsub("main::run", $run); + run(); + """ + private static let restartDelay: TimeInterval = 5 + private static let maxQuickFailures = 3 // then give up until the next start (a helper that can't work) + private static let quickFailure: TimeInterval = 10 + + let id = "now-playing" + let bundleIdentifier = "" // follows whichever app plays + var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? + private(set) var playerName = "" + + // Off: the helper doesn't run. Set by the Other Players option. + var isEnabled = true { + didSet { + guard isEnabled != oldValue, running else { return } + if isEnabled { launchHelper() } else { stopHelper(); publish(nil) } + } + } + + // Main thread only. + private var running = false + private var process: Process? + private var input: FileHandle? + private var buffer = Data() + private var bundleID: String? + private var nowPlaying: NowPlaying? + private var launchedAt = Date.distantPast + private var quickFailures = 0 + + // Apps with a source of their own. + private let nativeBundleIDs = Set(ScriptedPlayer.all.map(\.bundleIdentifier)) + + func start() { + guard !running else { return } + running = true + quickFailures = 0 + publish(nil) + if isEnabled { launchHelper() } + } + + func stop() { + guard running else { return } + running = false + stopHelper() + nowPlaying = nil + bundleID = nil + } + + // The helper pushes every change: nothing to read. + func refresh() {} + + func playPause() { + // Optimistic: the helper confirms a moment later. + if var track = nowPlaying { + track.position = PlaybackClock.position(of: track, at: Date()) + track.positionDate = Date() + track.isPlaying.toggle() + nowPlaying = track + publish(track) + } + send("toggle") + } + + func next() { send("next") } + + func previous() { send("previous") } + + func seek(to seconds: TimeInterval) { + if var track = nowPlaying { + track.position = seconds + track.positionDate = Date() + nowPlaying = track + publish(track) + } + send(String(format: "seek %.3f", seconds)) // not localized: always a "." decimal separator + } + + func setVolume(_ volume: Int) {} + + // Brings the app that plays to the front (a browser: its window, not the tab). + func launchPlayer() { + guard let bundleID = bundleID else { return } + NSRunningApplication.runningApplications(withBundleIdentifier: bundleID).first?.activate() + } + + private func launchHelper() { + guard process == nil else { return } + // Writing a command to a helper that just ended must fail with an error, not kill SonyNotch. + signal(SIGPIPE, SIG_IGN) + guard let helper = Bundle.main.privateFrameworksURL?.appendingPathComponent(Self.helperName), + FileManager.default.fileExists(atPath: helper.path) else { + fputs("[now-playing] \(Self.helperName) is missing from the app\n", stderr) + return + } + let process = Process() + process.executableURL = Self.perl + process.arguments = ["-e", Self.perlScript, helper.path] + let output = Pipe() + let input = Pipe() + process.standardOutput = output + process.standardInput = input + output.fileHandleForReading.readabilityHandler = { [weak self] handle in + let data = handle.availableData + DispatchQueue.main.async { self?.received(data) } + } + process.terminationHandler = { [weak self] ended in + DispatchQueue.main.async { self?.helperEnded(ended) } + } + do { + try process.run() + } catch { + fputs("[now-playing] can't start perl: \(error.localizedDescription)\n", stderr) + return + } + self.process = process + self.input = input.fileHandleForWriting + buffer = Data() + launchedAt = Date() + } + + // Closing its input makes the helper exit by itself. + private func stopHelper() { + guard let process = process else { return } + self.process = nil + (process.standardOutput as? Pipe)?.fileHandleForReading.readabilityHandler = nil + try? input?.close() + input = nil + if process.isRunning { process.terminate() } + } + + private func helperEnded(_ ended: Process) { + guard ended === process else { return } // stopped on purpose + process = nil + input = nil + fputs("[now-playing] helper ended (\(ended.terminationStatus))\n", stderr) + publish(nil) + guard running, isEnabled else { return } + quickFailures = Date().timeIntervalSince(launchedAt) < Self.quickFailure ? quickFailures + 1 : 0 + guard quickFailures < Self.maxQuickFailures else { + fputs("[now-playing] giving up: Now Playing doesn't work on this Mac\n", stderr) + return + } + DispatchQueue.main.asyncAfter(deadline: .now() + Self.restartDelay) { [weak self] in + guard let self = self, self.running, self.isEnabled else { return } + self.launchHelper() + } + } + + private func received(_ data: Data) { + guard process != nil, !data.isEmpty else { return } + buffer.append(data) + while let newline = buffer.firstIndex(of: 0x0A) { + let line = String(decoding: buffer[buffer.startIndex.. String { + if let app = NSRunningApplication.runningApplications(withBundleIdentifier: bundleID).first, + let name = app.localizedName { + return name + } + return NSWorkspace.shared.urlForApplication(withBundleIdentifier: bundleID) + .map { FileManager.default.displayName(atPath: $0.path) } ?? bundleID + } +} diff --git a/Client/macos/Music/PlayerScript.swift b/Client/macos/Music/PlayerScript.swift new file mode 100644 index 00000000..5edc29b2 --- /dev/null +++ b/Client/macos/Music/PlayerScript.swift @@ -0,0 +1,37 @@ +import Foundation + +// Runs AppleScript for a ScriptedPlayerSource. Only ever on that source's script queue. +enum PlayerScript { + enum Result: Equatable { + case success(String) + case failure(Int) // AppleScript / Apple Event error number + } + + // One command for a player, e.g. "playpause", "next track", "set sound volume to 40". + static func command(_ body: String, app bundleIdentifier: String) -> String { + """ + with timeout of 2 seconds + tell application id "\(bundleIdentifier)" to \(body) + end timeout + """ + } + + static func run(_ script: NSAppleScript?) -> Result { + guard let script = script else { return .failure(-2700) } + var error: NSDictionary? + let output = script.executeAndReturnError(&error) + if let error = error { + return .failure((error[NSAppleScript.errorNumber] as? NSNumber)?.intValue ?? -2700) + } + return .success(output.stringValue ?? "") + } + + // For a script that returns raw data (artwork): nil on failure or an empty reply. + static func runData(_ script: NSAppleScript?) -> Data? { + guard let script = script else { return nil } + var error: NSDictionary? + let output = script.executeAndReturnError(&error) + guard error == nil, !output.data.isEmpty, output.descriptorType != typeUnicodeText else { return nil } + return output.data + } +} diff --git a/Client/macos/Music/ScriptedPlayer.swift b/Client/macos/Music/ScriptedPlayer.swift new file mode 100644 index 00000000..28c06c41 --- /dev/null +++ b/Client/macos/Music/ScriptedPlayer.swift @@ -0,0 +1,70 @@ +import Foundation + +// A music app SonyNotch drives with AppleScript: how to read it, command it and decode it. +struct ScriptedPlayer { + let id: String // log prefix and source identity + let name: String // shown in the notch ("Spotify isn't open") + let bundleIdentifier: String + let downloadURL: URL? // where to get it when it isn't installed + let signalName: Notification.Name + let readScript: String // fields joined by U+001F, times as integer milliseconds (no locale separator) + let artworkScript: String? // returns the artwork's raw data; nil when readScript already gives a URL + let parseSignal: ([AnyHashable: Any]?, Date) -> PlayerState + let parseRead: (String, Date) -> PlayerState + + static let spotify = ScriptedPlayer( + id: "spotify", + name: "Spotify", + bundleIdentifier: "com.spotify.client", + downloadURL: URL(string: "https://www.spotify.com/download/mac/"), + signalName: Notification.Name("com.spotify.client.PlaybackStateChanged"), + readScript: """ + with timeout of 2 seconds + tell application id "com.spotify.client" + set playerState to (player state as text) + if playerState is "stopped" then return "stopped" + set t to current track + set sep to (character id 31) + set art to artwork url of t + if art is missing value then set art to "" + return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) + end tell + end timeout + """, + artworkScript: nil, + parseSignal: SpotifyPlaybackInfo.parse(signal:at:), + parseRead: SpotifyPlaybackInfo.parse(scriptResult:at:)) + + // The players the notch follows, in this order when none plays. + static let all: [ScriptedPlayer] = [.spotify, .appleMusic] + + static let appleMusic = ScriptedPlayer( + id: "music", + name: tr("Music"), + bundleIdentifier: "com.apple.Music", + downloadURL: nil, // part of macOS + signalName: Notification.Name("com.apple.Music.playerInfo"), + readScript: """ + with timeout of 2 seconds + tell application id "com.apple.Music" + set playerState to (player state as text) + if playerState is "stopped" then return "stopped" + set t to current track + set sep to (character id 31) + set d to duration of t + if d is missing value then set d to 0 -- radio and other streams + return playerState & sep & (persistent ID of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & (((d * 1000) div 1) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & ((sound volume) as text) + end tell + end timeout + """, + artworkScript: """ + with timeout of 3 seconds + tell application id "com.apple.Music" + if (count of artworks of current track) is 0 then return "" + return raw data of artwork 1 of current track + end tell + end timeout + """, + parseSignal: AppleMusicPlaybackInfo.parse(signal:at:), + parseRead: AppleMusicPlaybackInfo.parse(scriptResult:at:)) +} diff --git a/Client/macos/Music/SpotifyLocalSource.swift b/Client/macos/Music/ScriptedPlayerSource.swift similarity index 57% rename from Client/macos/Music/SpotifyLocalSource.swift rename to Client/macos/Music/ScriptedPlayerSource.swift index bc7d75ef..db631df5 100644 --- a/Client/macos/Music/SpotifyLocalSource.swift +++ b/Client/macos/Music/ScriptedPlayerSource.swift @@ -1,50 +1,62 @@ import AppKit -// Reads and controls the Spotify app of this Mac: its PlaybackStateChanged signal, plus Apple Events. -// Never sends an Apple Event while Spotify isn't running: one would launch it. -final class SpotifyLocalSource: MusicSource { - static let bundleIdentifier = "com.spotify.client" - private static let signalName = Notification.Name("com.spotify.client.PlaybackStateChanged") +// Reads and controls a music app of this Mac that speaks AppleScript (Spotify, Music): its playback signal, plus +// Apple Events. Never sends an Apple Event while the app isn't running: one would launch it. +final class ScriptedPlayerSource: MusicSource { private static let permissionDeniedError = -1743 // errAEEventNotPermitted private static let notRunningErrors: Set = [-600, -609] // procNotFound, connectionInvalid - private static let launchSettleDelay: TimeInterval = 2 // Spotify answers Apple Events a moment after launch + private static let launchSettleDelay: TimeInterval = 2 // apps answer Apple Events a moment after launch + let player: ScriptedPlayer var onChange: ((MusicSourceStatus, NowPlaying?) -> Void)? + var id: String { player.id } + var playerName: String { player.name } + var bundleIdentifier: String { player.bundleIdentifier } + // Main thread only. private var status: MusicSourceStatus = .notRunning private var nowPlaying: NowPlaying? private var signalObserver: NSObjectProtocol? private var workspaceObservers: [NSObjectProtocol] = [] - // Every NSAppleScript is created and run on this serial queue, one at a time. - private let scriptQueue = DispatchQueue(label: "com.sonynotch.spotify") - private var readScript: NSAppleScript? // scriptQueue only - private var consentGranted = false // scriptQueue only + // Every NSAppleScript of every player is created and run on this one serial queue: NSAppleScript isn't + // thread-safe, and two scripts running at once can get each other's reply (Music read Spotify's state while + // it waited on a stuck Music). + private static let sharedScriptQueue = DispatchQueue(label: "com.sonynotch.players") + private var scriptQueue: DispatchQueue { Self.sharedScriptQueue } + private var readScript: NSAppleScript? // scriptQueue only + private var artworkScript: NSAppleScript? // scriptQueue only + private var consentGranted = false // scriptQueue only + + init(player: ScriptedPlayer) { + self.player = player + } - // Checked before queuing, and again on the script queue right before an Apple Event goes out, so a Spotify - // quit in between is never relaunched. - private static var spotifyIsRunning: Bool { + // Checked before queuing, and again on the script queue right before an Apple Event goes out, so an app quit + // in between is never relaunched. + private static func isRunning(_ bundleIdentifier: String) -> Bool { !NSRunningApplication.runningApplications(withBundleIdentifier: bundleIdentifier).isEmpty } - private var isRunning: Bool { Self.spotifyIsRunning } + private var isRunning: Bool { Self.isRunning(player.bundleIdentifier) } func start() { guard signalObserver == nil else { return } signalObserver = DistributedNotificationCenter.default().addObserver( - forName: Self.signalName, object: nil, queue: .main + forName: player.signalName, object: nil, queue: .main ) { [weak self] note in self?.handleSignal(note.userInfo) } let center = NSWorkspace.shared.notificationCenter workspaceObservers = [ center.addObserver(forName: NSWorkspace.didLaunchApplicationNotification, object: nil, queue: .main) { [weak self] note in - guard Self.isSpotify(note) else { return } - DispatchQueue.main.asyncAfter(deadline: .now() + Self.launchSettleDelay) { self?.refresh() } + guard let self = self, self.isPlayer(note) else { return } + DispatchQueue.main.asyncAfter(deadline: .now() + Self.launchSettleDelay) { [weak self] in self?.refresh() } }, center.addObserver(forName: NSWorkspace.didTerminateApplicationNotification, object: nil, queue: .main) { [weak self] note in - if Self.isSpotify(note) { self?.publish(.notRunning, nil) } + guard let self = self, self.isPlayer(note) else { return } + self.publish(.notRunning, nil) }, ] if isRunning { refresh() } else { publish(.notRunning, nil) } @@ -62,14 +74,16 @@ final class SpotifyLocalSource: MusicSource { func refresh() { guard signalObserver != nil else { return } guard isRunning else { publish(.notRunning, nil); return } + let bundleIdentifier = player.bundleIdentifier + let source = player.readScript scriptQueue.async { [weak self] in - guard let self = self, Self.spotifyIsRunning else { return } + guard let self = self, Self.isRunning(bundleIdentifier) else { return } if let code = self.consentError() { DispatchQueue.main.async { self.applyFailure(code) } return } - if self.readScript == nil { self.readScript = NSAppleScript(source: SpotifyScript.readState) } - let result = SpotifyScript.run(self.readScript) + if self.readScript == nil { self.readScript = NSAppleScript(source: source) } + let result = PlayerScript.run(self.readScript) DispatchQueue.main.async { self.applyRead(result) } } } @@ -109,8 +123,8 @@ final class SpotifyLocalSource: MusicSource { } func launchPlayer() { - guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.bundleIdentifier) else { - fputs("[spotify] Spotify isn't installed\n", stderr) + guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: player.bundleIdentifier) else { + fputs("[\(player.id)] \(player.name) isn't installed\n", stderr) return } NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration(), @@ -122,13 +136,14 @@ final class SpotifyLocalSource: MusicSource { private func send(_ command: String) { guard signalObserver != nil else { return } guard isRunning else { publish(.notRunning, nil); return } + let bundleIdentifier = player.bundleIdentifier scriptQueue.async { [weak self] in - guard let self = self, Self.spotifyIsRunning else { return } + guard let self = self, Self.isRunning(bundleIdentifier) else { return } if let code = self.consentError() { DispatchQueue.main.async { self.applyFailure(code) } return } - let result = SpotifyScript.run(NSAppleScript(source: SpotifyScript.command(command))) + let result = PlayerScript.run(NSAppleScript(source: PlayerScript.command(command, app: bundleIdentifier))) if case .failure(let code) = result { DispatchQueue.main.async { self.applyFailure(code) } } @@ -137,36 +152,61 @@ final class SpotifyLocalSource: MusicSource { private func handleSignal(_ userInfo: [AnyHashable: Any]?) { let denied = status == .permissionDenied - switch SpotifyPlaybackInfo.parse(signal: userInfo, at: Date()) { + switch player.parseSignal(userInfo, Date()) { case .stopped: publish(denied ? .permissionDenied : .ready, nil) case .track(var track): // Artwork and volume only come from Apple Events: keep them for the same track, read them otherwise. - if let current = nowPlaying, current.trackID == track.trackID { - track.artworkURL = current.artworkURL - track.volume = current.volume - } + keepAppleEventDetails(of: &track) publish(denied ? .permissionDenied : .ready, track) - if track.artworkURL == nil && !denied { refresh() } + if track.artworkURL == nil && track.artworkData == nil && !denied { refresh() } case .incomplete: if !denied { refresh() } } } - private func applyRead(_ result: SpotifyScript.Result) { + private func keepAppleEventDetails(of track: inout NowPlaying) { + guard let current = nowPlaying, current.trackID == track.trackID else { return } + if track.artworkURL == nil { track.artworkURL = current.artworkURL } + if track.artworkData == nil { track.artworkData = current.artworkData } + if track.volume == nil { track.volume = current.volume } + } + + private func applyRead(_ result: PlayerScript.Result) { guard signalObserver != nil else { return } // stopped meanwhile switch result { case .success(let text): - switch SpotifyPlaybackInfo.parse(scriptResult: text, at: Date()) { - case .stopped: publish(.ready, nil) - case .track(let track): publish(.ready, track) - case .incomplete: fputs("[spotify] unexpected reply: \(text)\n", stderr) + switch player.parseRead(text, Date()) { + case .stopped: + publish(.ready, nil) + case .track(var track): + keepAppleEventDetails(of: &track) + publish(.ready, track) + if track.artworkURL == nil && track.artworkData == nil { readArtwork(for: track.trackID) } + case .incomplete: + fputs("[\(player.id)] unexpected reply: \(text)\n", stderr) } case .failure(let code): applyFailure(code) } } + // Players whose artwork is image data (Music): read once per track, after the rest. + private func readArtwork(for trackID: String) { + guard let source = player.artworkScript else { return } + let bundleIdentifier = player.bundleIdentifier + scriptQueue.async { [weak self] in + guard let self = self, Self.isRunning(bundleIdentifier), self.consentGranted else { return } + if self.artworkScript == nil { self.artworkScript = NSAppleScript(source: source) } + let data = PlayerScript.runData(self.artworkScript) + DispatchQueue.main.async { + guard let data = data, var track = self.nowPlaying, track.trackID == trackID else { return } + track.artworkData = data + self.publish(self.status, track) + } + } + } + // A refusal stops the reads (the controller retries once per notch opening); anything else // (timeout, busy) keeps the last known state until the next signal. private func applyFailure(_ code: Int) { @@ -176,16 +216,16 @@ final class SpotifyLocalSource: MusicSource { } else if Self.notRunningErrors.contains(code) { publish(.notRunning, nil) } else { - fputs("[spotify] Apple Event failed (\(code))\n", stderr) + fputs("[\(player.id)] Apple Event failed (\(code))\n", stderr) } } // scriptQueue only. Asks for macOS's automation consent without a timeout: otherwise the scripts' own 2 s // timeout cancels the first Apple Event while the consent prompt still waits for the user, and the read is - // lost. nil = allowed; otherwise the error to handle (-1743 refused, -600 Spotify not running). + // lost. nil = allowed; otherwise the error to handle (-1743 refused, -600 not running). private func consentError() -> Int? { if consentGranted { return nil } - let target = NSAppleEventDescriptor(bundleIdentifier: Self.bundleIdentifier) + let target = NSAppleEventDescriptor(bundleIdentifier: player.bundleIdentifier) let status = AEDeterminePermissionToAutomateTarget(target.aeDesc, AEEventClass(typeWildCard), AEEventID(typeWildCard), true) if status == noErr { consentGranted = true @@ -200,7 +240,8 @@ final class SpotifyLocalSource: MusicSource { onChange?(newStatus, track) } - private static func isSpotify(_ note: Notification) -> Bool { - (note.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication)?.bundleIdentifier == bundleIdentifier + private func isPlayer(_ note: Notification) -> Bool { + (note.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication)?.bundleIdentifier + == player.bundleIdentifier } } diff --git a/Client/macos/Music/SpotifyPlaybackInfo.swift b/Client/macos/Music/SpotifyPlaybackInfo.swift index f3108e65..02480d20 100644 --- a/Client/macos/Music/SpotifyPlaybackInfo.swift +++ b/Client/macos/Music/SpotifyPlaybackInfo.swift @@ -1,8 +1,8 @@ import Foundation -// Result of decoding what the local Spotify app reports. -enum SpotifyState: Equatable { - case stopped // Spotify is open with nothing loaded +// Result of decoding what a music app reports. +enum PlayerState: Equatable { + case stopped // the app is open with nothing loaded case track(NowPlaying) case incomplete // not enough information: read the state through Apple Events instead } @@ -14,7 +14,7 @@ enum SpotifyPlaybackInfo { // com.spotify.client.PlaybackStateChanged userInfo: "Player State" (Playing / Paused / Stopped), "Track ID", // "Name", "Artist", "Album", "Duration" (ms), "Playback Position" (s). It never carries artwork or volume. - static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> SpotifyState { + static func parse(signal userInfo: [AnyHashable: Any]?, at date: Date) -> PlayerState { guard let info = userInfo, let state = info["Player State"] as? String else { return .incomplete } if state == "Stopped" { return .stopped } guard state == "Playing" || state == "Paused", @@ -34,9 +34,9 @@ enum SpotifyPlaybackInfo { capabilities: localCapabilities)) } - // SpotifyScript.readState's reply: "stopped", or 9 fields separated by U+001F — state, track id, name, + // ScriptedPlayer.spotify.readScript's reply: "stopped", or 9 fields separated by U+001F — state, track id, name, // artist, album, duration (ms), position (ms), artwork URL, volume. - static func parse(scriptResult text: String, at date: Date) -> SpotifyState { + static func parse(scriptResult text: String, at date: Date) -> PlayerState { if text == "stopped" { return .stopped } let fields = text.split(separator: fieldSeparator, omittingEmptySubsequences: false).map(String.init) guard fields.count == 9, fields[0] == "playing" || fields[0] == "paused", !fields[1].isEmpty else { diff --git a/Client/macos/Music/SpotifyScript.swift b/Client/macos/Music/SpotifyScript.swift deleted file mode 100644 index 5e0580ba..00000000 --- a/Client/macos/Music/SpotifyScript.swift +++ /dev/null @@ -1,44 +0,0 @@ -import Foundation - -// AppleScript sent to the local Spotify app. Only ever run on SpotifyLocalSource's script queue. -enum SpotifyScript { - enum Result: Equatable { - case success(String) - case failure(Int) // AppleScript / Apple Event error number - } - - // Fields joined by U+001F; times as integer milliseconds so no locale decimal separator shows up. - // Parsed by SpotifyPlaybackInfo.parse(scriptResult:at:). - static let readState = """ - with timeout of 2 seconds - tell application id "com.spotify.client" - set playerState to (player state as text) - if playerState is "stopped" then return "stopped" - set t to current track - set sep to (character id 31) - set art to artwork url of t - if art is missing value then set art to "" - return playerState & sep & (id of t) & sep & (name of t) & sep & (artist of t) & sep & (album of t) & sep & ((duration of t) as text) & sep & ((((player position) * 1000) div 1) as text) & sep & art & sep & ((sound volume) as text) - end tell - end timeout - """ - - // One command, e.g. "playpause", "next track", "set sound volume to 40". - static func command(_ body: String) -> String { - """ - with timeout of 2 seconds - tell application id "com.spotify.client" to \(body) - end timeout - """ - } - - static func run(_ script: NSAppleScript?) -> Result { - guard let script = script else { return .failure(-2700) } - var error: NSDictionary? - let output = script.executeAndReturnError(&error) - if let error = error { - return .failure((error[NSAppleScript.errorNumber] as? NSNumber)?.intValue ?? -2700) - } - return .success(output.stringValue ?? "") - } -} diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index 9868cdb3..14bf008b 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -1,7 +1,7 @@ import SwiftUI // Notch player page: artwork, title and artist; progress; headphones, previous, play/pause, next, -// volume. The volume button swaps the progress bar for Spotify's volume bar for a few seconds. Sizes follow +// volume. The volume button swaps the progress bar for the player's volume bar for a few seconds. Sizes follow // the notch zoom; extra height grows the artwork. struct MusicTab: View { private static let volumeAutoHide: TimeInterval = 4 @@ -26,9 +26,11 @@ struct MusicTab: View { Group { switch music.status { case .notRunning: - message(tr("Spotify isn't open"), button: tr("Open Spotify")) { music.launchPlayer() } + message(String(format: tr("%@ isn't open"), music.playerName), + button: String(format: tr("Open %@"), music.playerName)) { music.launchPlayer() } case .permissionDenied: - message(tr("SonyNotch isn't allowed to control Spotify."), button: tr("Open Settings")) { + message(String(format: tr("SonyNotch isn't allowed to control %@."), music.playerName), + button: tr("Open Settings")) { music.openAutomationSettings() } case .ready: @@ -79,14 +81,14 @@ struct MusicTab: View { private func player(_ track: NowPlaying, artwork: CGFloat) -> some View { VStack(spacing: 0) { HStack(spacing: 12 * s) { - // Brings Spotify to the front (opening the track's link could restart it). + // Brings the player to the front (opening the track's link could restart it). Button { music.launchPlayer() } label: { ArtworkView(image: music.artwork, trackID: track.trackID, isBackward: { [music] in music.trackChangeIsBackward }, size: artwork, cornerRadius: artwork * 0.2) } .buttonStyle(PressableButtonStyle()) - .accessibilityLabel(tr("Open Spotify")) + .accessibilityLabel(String(format: tr("Open %@"), music.playerName)) VStack(alignment: .leading, spacing: 2 * s) { Text(track.title).font(.system(size: 14 * s, weight: .semibold)).foregroundColor(.white) Text(track.artist).font(.system(size: 13 * s)).foregroundColor(.gray) @@ -125,7 +127,7 @@ struct MusicTab: View { iconButton("forward.fill", size: 17, color: .white, label: tr("Next track")) { music.next() } } iconButton(showVolume ? "speaker.wave.2.fill" : "speaker.wave.2", color: showVolume ? .white : .gray, - label: tr("Spotify volume")) { toggleVolume() } + label: String(format: tr("%@ volume"), music.playerName)) { toggleVolume() } .disabled(!track.capabilities.canSetVolume || track.volume == nil) .frame(maxWidth: .infinity, alignment: .trailing) } diff --git a/Client/macos/Notch/NotchController.swift b/Client/macos/Notch/NotchController.swift index 520de099..fe57dd4c 100644 --- a/Client/macos/Notch/NotchController.swift +++ b/Client/macos/Notch/NotchController.swift @@ -284,7 +284,7 @@ final class NotchController { // MARK: - Gestures - // Over the notch (closed, or open on the player): swipe for previous / next, scroll for Spotify's volume. + // Over the notch (closed, or open on the player): swipe for previous / next, scroll for the player's volume. private func scrolled(_ event: NSEvent) { let preferences = settings.gesturePreferences guard preferences.swipeToSkip || preferences.scrollForVolume, diff --git a/Client/macos/Notch/NotchControls.swift b/Client/macos/Notch/NotchControls.swift index 87622534..99a0f782 100644 --- a/Client/macos/Notch/NotchControls.swift +++ b/Client/macos/Notch/NotchControls.swift @@ -30,7 +30,7 @@ struct NotchSwitch: View { } } -// A rounded grey text button ("Connect…", "Open Spotify"). +// A rounded grey text button ("Connect…", "Open Music"). struct NotchPillButton: View { let title: String let action: () -> Void diff --git a/Client/macos/Notch/NotchView.swift b/Client/macos/Notch/NotchView.swift index 93a61947..1de1b636 100644 --- a/Client/macos/Notch/NotchView.swift +++ b/Client/macos/Notch/NotchView.swift @@ -6,7 +6,7 @@ final class NotchViewState: ObservableObject { @Published var isOpen = false @Published var openContentMounted = false // true while open, and while the closing animation plays @Published var trailingHovered = false // pointer over the resting music control - @Published var scrolledVolume: Int? // Spotify volume being set by scrolling over the notch + @Published var scrolledVolume: Int? // player volume being set by scrolling over the notch @Published var artworkGlow = true // Options › Glow @Published var progressRing = true // Options › Progress Ring @Published var headphonesBattery = true // Options › Headphones Battery diff --git a/Client/macos/Setup/SetupAccess.swift b/Client/macos/Setup/SetupAccess.swift index 2404d8b5..28da80ba 100644 --- a/Client/macos/Setup/SetupAccess.swift +++ b/Client/macos/Setup/SetupAccess.swift @@ -5,15 +5,15 @@ enum SetupAccess: Equatable { case granted case notDetermined // macOS will ask case denied // refused (or restricted): only System Settings can change it - case unavailable // can't tell yet (Spotify closed, for example) + case unavailable // can't tell yet (the music app is closed, for example) - // AEDeterminePermissionToAutomateTarget's answer about Spotify. - static func spotify(status: Int) -> SetupAccess { + // AEDeterminePermissionToAutomateTarget's answer about a music app. + static func automation(status: Int) -> SetupAccess { switch status { case 0: return .granted case -1744: return .notDetermined // errAEEventWouldRequireUserConsent case -1743: return .denied // errAEEventNotPermitted - default: return .unavailable // -600 procNotFound: Spotify isn't running + default: return .unavailable // -600 procNotFound: the app isn't running } } diff --git a/Client/macos/Setup/SetupChecks.swift b/Client/macos/Setup/SetupChecks.swift index 3abcabab..828e9c0a 100644 --- a/Client/macos/Setup/SetupChecks.swift +++ b/Client/macos/Setup/SetupChecks.swift @@ -2,24 +2,30 @@ import AppKit import Combine import CoreBluetooth -// What the setup assistant checks, refreshed every second while its window is open: Bluetooth access, whether -// Spotify is running, and whether SonyNotch may control it. -final class SetupChecks: ObservableObject { - private static let spotifyID = "com.spotify.client" +// One music app as the setup assistant shows it. +struct PlayerCheck: Equatable { + var running = false + var access = SetupAccess.unavailable + var asking = false // macOS's prompt is up, waiting for an answer +} +// What the setup assistant checks, refreshed every second while its window is open: Bluetooth access, and for +// each music app whether it's running and whether SonyNotch may control it. +final class SetupChecks: ObservableObject { @Published private(set) var bluetooth = SetupAccess.unavailable - @Published private(set) var spotifyRunning = false - @Published private(set) var spotify = SetupAccess.unavailable - @Published private(set) var askingSpotify = false // macOS's prompt is up, waiting for an answer + @Published private(set) var players: [String: PlayerCheck] = [:] // by ScriptedPlayer.id - // Called once Spotify control is granted, so the notch reads Spotify right away. - var onSpotifyGranted: (() -> Void)? + // Called once control of a music app is granted, so the notch reads it right away. + var onPlayerGranted: (() -> Void)? private var timer: Timer? private var bluetoothRequest: CBCentralManager? // AEDeterminePermissionToAutomateTarget can block (it waits for the user when it asks): never on main. + // Serial, so macOS's questions come one after the other. private let queue = DispatchQueue(label: "com.sonynotch.setup") + func check(_ player: ScriptedPlayer) -> PlayerCheck { players[player.id] ?? PlayerCheck() } + func start() { refresh() guard timer == nil else { return } @@ -37,19 +43,26 @@ final class SetupChecks: ObservableObject { let bluetoothAccess = SetupAccess.bluetooth(rawAuthorization: CBCentralManager.authorization.rawValue) if bluetoothAccess != bluetooth { fputs("[setup] Bluetooth: \(bluetoothAccess)\n", stderr) } bluetooth = bluetoothAccess - spotifyRunning = !NSRunningApplication.runningApplications(withBundleIdentifier: Self.spotifyID).isEmpty - guard spotifyRunning else { - spotify = .unavailable + ScriptedPlayer.all.forEach(refresh) + } + + private func refresh(_ player: ScriptedPlayer) { + let running = Self.isRunning(player) + players[player.id, default: PlayerCheck()].running = running + guard running else { + players[player.id]?.access = .unavailable return } - guard !askingSpotify else { return } + guard !check(player).asking else { return } queue.async { [weak self] in - let status = Self.spotifyPermission(ask: false) + let status = Self.permission(for: player, ask: false) DispatchQueue.main.async { - guard let self = self, !self.askingSpotify else { return } - let access = SetupAccess.spotify(status: status) - if access != self.spotify { fputs("[setup] Spotify control: \(access) (\(status))\n", stderr) } - self.spotify = access + guard let self = self, !self.check(player).asking else { return } + let access = SetupAccess.automation(status: status) + if access != self.check(player).access { + fputs("[setup] \(player.id) control: \(access) (\(status))\n", stderr) + } + self.players[player.id]?.access = access } } } @@ -61,32 +74,40 @@ final class SetupChecks: ObservableObject { } // Shows macOS's prompt (in front: the app is activated first) and waits for the answer off the main thread. - func requestSpotify() { - guard spotifyRunning, !askingSpotify else { return } - askingSpotify = true + func request(_ player: ScriptedPlayer) { + guard check(player).running, !check(player).asking else { return } + players[player.id]?.asking = true NSApp.activate(ignoringOtherApps: true) queue.async { [weak self] in - let status = Self.spotifyPermission(ask: true) + let status = Self.permission(for: player, ask: true) DispatchQueue.main.async { guard let self = self else { return } - self.askingSpotify = false - self.spotify = SetupAccess.spotify(status: status) - if self.spotify == .granted { self.onSpotifyGranted?() } + let access = SetupAccess.automation(status: status) + self.players[player.id]?.asking = false + self.players[player.id]?.access = access + if access == .granted { self.onPlayerGranted?() } } } } - // macOS never asks again about a refused permission: forget SonyNotch's answer about Spotify (and only that), - // then ask. tccutil can reset an app's own entry without administrator rights. - func askSpotifyAgain() { - guard spotifyRunning, !askingSpotify, let bundleID = Bundle.main.bundleIdentifier else { return } + // macOS never asks again about a refused permission: forget SonyNotch's answers, then ask. tccutil can reset + // an app's own entry without administrator rights, but only all its Apple Events answers at once: the other + // music apps that were allowed and are open get asked again too (a closed one asks when the notch next reads it). + func askAgain(_ player: ScriptedPlayer) { + guard check(player).running, !check(player).asking, let bundleID = Bundle.main.bundleIdentifier else { return } + let alsoAllowed = ScriptedPlayer.all.filter { + $0.id != player.id && check($0).running && check($0).access == .granted + } let reset = Process() reset.executableURL = URL(fileURLWithPath: "/usr/bin/tccutil") reset.arguments = ["reset", "AppleEvents", bundleID] reset.terminationHandler = { [weak self] _ in DispatchQueue.main.async { - self?.spotify = .notDetermined - self?.requestSpotify() + guard let self = self else { return } + for asked in [player] + alsoAllowed { + self.players[asked.id]?.access = .notDetermined + self.request(asked) + } } } do { @@ -96,9 +117,9 @@ final class SetupChecks: ObservableObject { } } - func launchSpotify() { - guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: Self.spotifyID) else { - NSWorkspace.shared.open(URL(string: "https://www.spotify.com/download/mac/")!) + func launch(_ player: ScriptedPlayer) { + guard let url = NSWorkspace.shared.urlForApplication(withBundleIdentifier: player.bundleIdentifier) else { + if let download = player.downloadURL { NSWorkspace.shared.open(download) } return } NSWorkspace.shared.openApplication(at: url, configuration: NSWorkspace.OpenConfiguration(), completionHandler: nil) @@ -116,8 +137,12 @@ final class SetupChecks: ObservableObject { if let url = URL(string: address) { NSWorkspace.shared.open(url) } } - private static func spotifyPermission(ask: Bool) -> Int { - let target = NSAppleEventDescriptor(bundleIdentifier: spotifyID) + private static func isRunning(_ player: ScriptedPlayer) -> Bool { + !NSRunningApplication.runningApplications(withBundleIdentifier: player.bundleIdentifier).isEmpty + } + + private static func permission(for player: ScriptedPlayer, ask: Bool) -> Int { + let target = NSAppleEventDescriptor(bundleIdentifier: player.bundleIdentifier) return Int(AEDeterminePermissionToAutomateTarget(target.aeDesc, AEEventClass(typeWildCard), AEEventID(typeWildCard), ask)) } diff --git a/Client/macos/Setup/SetupView.swift b/Client/macos/Setup/SetupView.swift index 6ac774ea..a064eee4 100644 --- a/Client/macos/Setup/SetupView.swift +++ b/Client/macos/Setup/SetupView.swift @@ -23,7 +23,7 @@ struct SetupView: View { Text(tr("How do you want to use SonyNotch?")).font(.headline) HStack(spacing: 10) { ModeCard(mode: .notchOnly, icon: "music.note", title: tr("Notch"), - detail: tr("Spotify in the notch, no headphones needed."), selection: $settings.usageMode) + detail: tr("Your music in the notch, no headphones needed."), selection: $settings.usageMode) ModeCard(mode: .headphonesOnly, icon: "headphones", title: tr("Headphones"), detail: tr("Your Sony headphones' settings in the menu bar."), selection: $settings.usageMode) ModeCard(mode: .both, icon: "sparkles", title: tr("Both"), @@ -37,9 +37,12 @@ struct SetupView: View { headphonesRow Divider() } + // Each music app is optional: the notch works with whichever the user plays. if settings.usageMode.usesNotch { - spotifyRow - Divider() + ForEach(ScriptedPlayer.all, id: \.id) { player in + playerRow(player) + Divider() + } } SetupRow(icon: "power", title: tr("Launch at Login"), detail: tr("Start SonyNotch when you log in to your Mac."), @@ -112,30 +115,33 @@ struct SetupView: View { } } - private var spotifyRow: some View { - SetupRow(icon: "music.note", title: tr("Spotify"), detail: spotifyDetail, - done: checks.spotify == .granted, optional: settings.usageMode.usesHeadphones) { - if !checks.spotifyRunning { - Button(tr("Open Spotify")) { checks.launchSpotify() } - } else if checks.askingSpotify { + private func playerRow(_ player: ScriptedPlayer) -> some View { + let check = checks.check(player) + return SetupRow(icon: "music.note", title: player.name, detail: playerDetail(player, check), + done: check.access == .granted, optional: true) { + if !check.running { + Button(String(format: tr("Open %@"), player.name)) { checks.launch(player) } + } else if check.asking { ProgressView().controlSize(.small) } else { - switch checks.spotify { + switch check.access { case .granted: Button(tr("Settings")) { checks.openAutomationSettings() } - case .denied: Button(tr("Ask Again")) { checks.askSpotifyAgain() } - default: Button(tr("Allow")) { checks.requestSpotify() } // not asked yet, or macOS can't tell + case .denied: Button(tr("Ask Again")) { checks.askAgain(player) } + default: Button(tr("Allow")) { checks.request(player) } // not asked yet, or macOS can't tell } } } } - private var spotifyDetail: String { - if !checks.spotifyRunning { return tr("For the notch player. Open Spotify to allow SonyNotch to control it.") } - if checks.askingSpotify { return tr("Answer macOS's question: click Allow.") } - switch checks.spotify { + private func playerDetail(_ player: ScriptedPlayer, _ check: PlayerCheck) -> String { + if !check.running { + return String(format: tr("For the notch player. Open %@ to allow SonyNotch to control it."), player.name) + } + if check.asking { return tr("Answer macOS's question: click Allow.") } + switch check.access { case .granted: return tr("SonyNotch can show and control your music.") case .denied: return tr("Control was refused. Ask Again shows macOS's question once more.") - default: return tr("Allow SonyNotch to show and control the music playing in Spotify.") + default: return String(format: tr("Allow SonyNotch to show and control the music playing in %@."), player.name) } } } diff --git a/Client/macos/Setup/SetupWindowController.swift b/Client/macos/Setup/SetupWindowController.swift index d5ad5b8a..1510358b 100644 --- a/Client/macos/Setup/SetupWindowController.swift +++ b/Client/macos/Setup/SetupWindowController.swift @@ -8,10 +8,10 @@ final class SetupWindowController: NSObject, NSWindowDelegate { private let settings: AppSettings private var window: NSWindow? - init(model: HeadphonesModel, settings: AppSettings, onSpotifyGranted: @escaping () -> Void) { + init(model: HeadphonesModel, settings: AppSettings, onPlayerGranted: @escaping () -> Void) { self.model = model self.settings = settings - checks.onSpotifyGranted = onSpotifyGranted + checks.onPlayerGranted = onPlayerGranted } func show() { diff --git a/Client/macos/UsageMode.swift b/Client/macos/UsageMode.swift index 230652bc..98026f4e 100644 --- a/Client/macos/UsageMode.swift +++ b/Client/macos/UsageMode.swift @@ -2,8 +2,8 @@ import Foundation // How SonyNotch is used, chosen in the setup window. Pure, tested in LogicTests. enum UsageMode: String, CaseIterable { - case notchOnly // the notch and Spotify, nothing about headphones (Bluetooth is never used) - case headphonesOnly // the headphones menu, no notch (Spotify is never used) + case notchOnly // the notch and the music players, nothing about headphones (Bluetooth is never used) + case headphonesOnly // the headphones menu, no notch (no music player is ever read) case both // Missing (installs from before the choice existed) or unknown: everything, as before. diff --git a/Client/macos/en.lproj/InfoPlist.strings b/Client/macos/en.lproj/InfoPlist.strings index ab254ce7..b34b44e7 100644 --- a/Client/macos/en.lproj/InfoPlist.strings +++ b/Client/macos/en.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ /* Localized Info.plist values (English). Keeps an en.lproj in the bundle so non-French systems fall back to English. */ "NSBluetoothAlwaysUsageDescription" = "This app uses Bluetooth in order to connect to your headphones."; -"NSAppleEventsUsageDescription" = "SonyNotch shows and controls the music playing in Spotify."; +"NSAppleEventsUsageDescription" = "SonyNotch shows and controls the music playing in Spotify and Music."; diff --git a/Client/macos/fr.lproj/InfoPlist.strings b/Client/macos/fr.lproj/InfoPlist.strings index 54eb41d6..644e6d03 100644 --- a/Client/macos/fr.lproj/InfoPlist.strings +++ b/Client/macos/fr.lproj/InfoPlist.strings @@ -1,3 +1,3 @@ /* Localized Info.plist values (French). */ "NSBluetoothAlwaysUsageDescription" = "SonyNotch utilise le Bluetooth pour se connecter à votre casque."; -"NSAppleEventsUsageDescription" = "SonyNotch affiche et contrôle la musique en cours dans Spotify."; +"NSAppleEventsUsageDescription" = "SonyNotch affiche et contrôle la musique en cours dans Spotify et Musique."; diff --git a/Client/macos/fr.lproj/Localizable.strings b/Client/macos/fr.lproj/Localizable.strings index 100a787e..93ce8b83 100644 --- a/Client/macos/fr.lproj/Localizable.strings +++ b/Client/macos/fr.lproj/Localizable.strings @@ -62,15 +62,15 @@ /* Notch (Notch/*.swift) */ "Headphones" = "Casque"; "Level" = "Niveau"; -"Spotify isn't open" = "Spotify n’est pas ouvert"; -"Open Spotify" = "Ouvrir Spotify"; -"SonyNotch isn't allowed to control Spotify." = "SonyNotch n’a pas l’autorisation de contrôler Spotify."; +"%@ isn't open" = "%@ n’est pas ouvert"; +"Open %@" = "Ouvrir %@"; +"SonyNotch isn't allowed to control %@." = "SonyNotch n’a pas l’autorisation de contrôler %@."; "Open Settings" = "Ouvrir les réglages"; "Nothing playing" = "Rien en cours de lecture"; "Previous track" = "Morceau précédent"; "Play or pause" = "Lecture ou pause"; "Next track" = "Morceau suivant"; -"Spotify volume" = "Volume de Spotify"; +"%@ volume" = "Volume de %@"; "Back" = "Retour"; "Voice" = "Voix"; "NC" = "Réduction"; @@ -116,11 +116,11 @@ "Needed to talk to your headphones." = "Nécessaire pour communiquer avec votre casque."; "Connected." = "Connecté."; "Pair your Sony headphones in System Settings › Bluetooth, then connect them here." = "Jumelez votre casque Sony dans Réglages Système › Bluetooth, puis connectez-le ici."; -"Spotify" = "Spotify"; -"For the notch player. Open Spotify to allow SonyNotch to control it." = "Pour le lecteur de l’encoche. Ouvrez Spotify pour autoriser SonyNotch à le contrôler."; +"Music" = "Musique"; +"For the notch player. Open %@ to allow SonyNotch to control it." = "Pour le lecteur de l’encoche. Ouvrez %@ pour autoriser SonyNotch à le contrôler."; "Answer macOS's question: click Allow." = "Répondez à la question de macOS : cliquez sur Autoriser."; "SonyNotch can show and control your music." = "SonyNotch peut afficher et contrôler votre musique."; -"Allow SonyNotch to show and control the music playing in Spotify." = "Autorisez SonyNotch à afficher et contrôler la musique en cours dans Spotify."; +"Allow SonyNotch to show and control the music playing in %@." = "Autorisez SonyNotch à afficher et contrôler la musique en cours dans %@."; "Optional" = "Facultatif"; "To do" = "À faire"; "Setup…" = "Configuration…"; @@ -131,7 +131,9 @@ "You can open this window again with Setup… in the SonyNotch menu." = "Vous pourrez rouvrir cette fenêtre avec Configuration… dans le menu de SonyNotch."; "How do you want to use SonyNotch?" = "Comment voulez-vous utiliser SonyNotch ?"; "Notch" = "Encoche"; -"Spotify in the notch, no headphones needed." = "Spotify dans l’encoche, sans casque."; +"Your music in the notch, no headphones needed." = "Votre musique dans l’encoche, sans casque."; "Your Sony headphones' settings in the menu bar." = "Les réglages de votre casque Sony dans la barre des menus."; "Both" = "Les deux"; "The notch and the headphones together." = "L’encoche et le casque ensemble."; +"Other Players (Experimental)" = "Autres lecteurs (expérimental)"; +"Deezer, YouTube Music, your browser… through macOS's Now Playing." = "Deezer, YouTube Music, votre navigateur… via « À l’écoute » de macOS."; diff --git a/Client/macos/info.plist b/Client/macos/info.plist index d2e05080..83471665 100644 --- a/Client/macos/info.plist +++ b/Client/macos/info.plist @@ -34,7 +34,7 @@ LSUIElement NSAppleEventsUsageDescription - SonyNotch shows and controls the music playing in Spotify. + SonyNotch shows and controls the music playing in Spotify and Music. NSBluetoothAlwaysUsageDescription This app uses Bluetooth in order to connect to your headphones. NSHighResolutionCapable diff --git a/Client/tests/LogicTests/main.swift b/Client/tests/LogicTests/main.swift index c06097b4..f926bd21 100644 --- a/Client/tests/LogicTests/main.swift +++ b/Client/tests/LogicTests/main.swift @@ -215,11 +215,11 @@ do { // SetupAccess: what the setup assistant shows for each permission. do { - check(SetupAccess.spotify(status: 0) == .granted, "Spotify allowed") - check(SetupAccess.spotify(status: -1744) == .notDetermined, "Spotify not asked yet") - check(SetupAccess.spotify(status: -1743) == .denied, "Spotify refused") - check(SetupAccess.spotify(status: -600) == .unavailable, "Spotify closed") - check(SetupAccess.spotify(status: -50) == .unavailable, "other errors: can't tell") + check(SetupAccess.automation(status: 0) == .granted, "player allowed") + check(SetupAccess.automation(status: -1744) == .notDetermined, "player not asked yet") + check(SetupAccess.automation(status: -1743) == .denied, "player refused") + check(SetupAccess.automation(status: -600) == .unavailable, "player closed") + check(SetupAccess.automation(status: -50) == .unavailable, "other errors: can't tell") check(SetupAccess.bluetooth(rawAuthorization: 3) == .granted, "Bluetooth allowed always") check(SetupAccess.bluetooth(rawAuthorization: 0) == .notDetermined, "Bluetooth not asked yet") check(SetupAccess.bluetooth(rawAuthorization: 2) == .denied && SetupAccess.bluetooth(rawAuthorization: 1) == .denied, @@ -241,6 +241,72 @@ do { "both: unchanged") } +// AppleMusicPlaybackInfo: the Music app's reply (fields separated by U+001F) and its playerInfo signal. +do { + let t0 = Date(timeIntervalSince1970: 1_000) + let sep = "\u{1F}" + let text = ["playing", "A1B2C3D4E5F60718", "Title", "Artist", "Album", "215000", "42500", "60"].joined(separator: sep) + if case .track(let track) = AppleMusicPlaybackInfo.parse(scriptResult: text, at: t0) { + check(track.trackID == "apple-music:A1B2C3D4E5F60718" && track.title == "Title" && track.artist == "Artist", + "music: names") + check(track.duration == 215 && track.position == 42.5 && track.isPlaying && track.volume == 60, "music: timing") + check(track.artworkURL == nil && track.capabilities.canSeek && track.capabilities.canSetVolume, + "music: artwork read separately, seek and volume") + } else { + check(false, "music reply decodes to a track") + } + check(AppleMusicPlaybackInfo.parse(scriptResult: "stopped", at: t0) == .stopped, "music: stopped") + check(AppleMusicPlaybackInfo.parse(scriptResult: "nonsense", at: t0) == .incomplete, "music: malformed") + check(AppleMusicPlaybackInfo.parse(signal: ["Player State": "Stopped"], at: t0) == .stopped, "music signal: stopped") + check(AppleMusicPlaybackInfo.parse(signal: ["Player State": "Playing", "Name": "X"], at: t0) == .incomplete, + "music signal: read the details") +} + +// NowPlayingInfo: NowPlayingHelper's JSON lines. +do { + let now = Date(timeIntervalSince1970: 2_000) + let line = #"{"bundle":"com.brave.Browser","playing":true,"title":"Set","artist":"DJ","album":null,"duration":300.5,"elapsed":12.25,"timestamp":1990,"artworkID":"a1","artwork":"AAEC"}"# + if case .track(let bundleID, let track)? = NowPlayingInfo.parse(line: line, receivedAt: now) { + check(bundleID == "com.brave.Browser" && track.title == "Set" && track.artist == "DJ" && track.album == "", + "now playing: names") + check(track.duration == 300.5 && track.position == 12.25 && track.isPlaying + && track.positionDate == Date(timeIntervalSince1970: 1_990), "now playing: timing") + check(track.artworkData == Data([0, 1, 2]) && track.volume == nil, "now playing: artwork, no volume") + check(track.capabilities.canSeek && !track.capabilities.canSetVolume, "now playing: seek, no volume") + check(track.trackID == "now-playing:com.brave.Browser:Set\u{1F}DJ", "now playing: stable track id") + } else { + check(false, "now playing line decodes to a track") + } + let live = #"{"bundle":"x","playing":false,"title":"Live","artist":null,"album":null,"duration":null,"elapsed":null,"timestamp":2500}"# + if case .track(_, let track)? = NowPlayingInfo.parse(line: live, receivedAt: now) { + check(track.duration == 0 && !track.capabilities.canSeek && track.position == 0, "now playing: stream") + check(track.positionDate == now, "now playing: a future timestamp is clamped to now") + } else { + check(false, "stream line decodes to a track") + } + check(NowPlayingInfo.parse(line: #"{"bundle":null}"#, receivedAt: now) == .nothing, "now playing: nothing") + check(NowPlayingInfo.parse(line: "not json", receivedAt: now) == nil, "now playing: garbage ignored") +} + +// MusicSourcePicker: the notch follows the player that plays, the last one to start when several do. +do { + let t0 = Date(timeIntervalSince1970: 1_000) + func source(_ id: String, playing: Bool, track: Bool = true) -> SourceSnapshot { + SourceSnapshot(id: id, isPlaying: playing, hasTrack: track) + } + check(MusicSourcePicker.pick([source("spotify", playing: false), source("music", playing: true)], + playingSince: ["music": t0], current: "spotify") == "music", "the playing one") + check(MusicSourcePicker.pick([source("spotify", playing: true), source("music", playing: true)], + playingSince: ["spotify": t0, "music": t0.addingTimeInterval(5)], current: "spotify") + == "music", "several playing: the last to start") + check(MusicSourcePicker.pick([source("spotify", playing: false), source("music", playing: false)], + playingSince: [:], current: "music") == "music", "all paused: keep the current one") + check(MusicSourcePicker.pick([source("spotify", playing: false), source("music", playing: false, track: false)], + playingSince: [:], current: "music") == "spotify", "current has nothing: one that has") + check(MusicSourcePicker.pick([source("spotify", playing: false, track: false)], playingSince: [:], current: nil) + == "spotify", "nothing anywhere: the first") +} + // PlaybackClock: live position from the last known one; display format. do { let t0 = Date(timeIntervalSince1970: 1_000) @@ -300,7 +366,7 @@ do { check(SpotifyPlaybackInfo.parse(signal: ["Player State": "Playing"], at: t0) == .incomplete, "signal without track id: incomplete") } -// SpotifyPlaybackInfo: the text SpotifyScript.readState returns (fields separated by U+001F). +// SpotifyPlaybackInfo: the text ScriptedPlayer.spotify.readScript returns (fields separated by U+001F). do { let t0 = Date(timeIntervalSince1970: 1_000) let sep = "\u{1F}" diff --git a/README.md b/README.md index d4ca9023..67b6be8f 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,8 @@ Control your Sony headphones from your Mac, right from the menu bar and the notch. No phone app needed. SonyNotch switches noise cancelling and ambient sound, sets the equalizer and shows the battery of your Sony -Bluetooth headphones. It also turns the MacBook notch into a small player for the music playing in Spotify. +Bluetooth headphones. It also turns the MacBook notch into a small player for the music playing in Spotify, +Apple Music, and (experimental) Deezer, YouTube Music or your browser. ## Install @@ -29,12 +30,12 @@ That's it. Open SonyNotch from your Applications folder. SonyNotch appears in the menu bar and opens its setup window. First choose how you want to use it: -- **Notch**: Spotify in the notch, no Sony headphones needed. Bluetooth is never used. +- **Notch**: your music in the notch, no Sony headphones needed. Bluetooth is never used. - **Headphones**: your Sony headphones' settings in the menu bar, without the notch. - **Both**: the notch and the headphones together. The window then checks what that choice needs, with a button for each: Bluetooth access, your headphones, -permission to control Spotify and launch at login. Pair your headphones in System Settings › Bluetooth first if they aren't yet. +permission to control Spotify and Music, and launch at login. Pair your headphones in System Settings › Bluetooth first if they aren't yet. If something stops working later, open the same window with Setup… in the menu: every line can be fixed or redone from there. @@ -45,7 +46,7 @@ Works on macOS 13 or later, on Apple Silicon and Intel Macs. SonyNotch checks once a day for a new version. When one is out, click **Update to SonyNotch** in its menu: it downloads the new version, replaces itself and restarts. When you're up to date, the item is greyed out. Your -settings and the Bluetooth and Spotify permissions are kept. Coming from version 1.2.1 or older, macOS asks for +settings and the Bluetooth and music app permissions are kept. Coming from version 1.2.1 or older, macOS asks for the permissions one last time. With Homebrew you can also run `brew upgrade --cask sonynotch`. @@ -75,10 +76,10 @@ English and French. Move the pointer over the notch and it opens into a player with: -- the artwork, title and artist (click the artwork to bring Spotify to the front) +- the artwork, title and artist (click the artwork to bring the player to the front) - a progress bar you can click or drag - previous, play/pause and next -- a volume button for Spotify's volume +- a volume button for the player's volume - a headphones button to change the sound mode without opening the menu Behind the player, a soft glow takes the colour of the artwork. @@ -94,7 +95,7 @@ shows on the other side. With the pointer over the notch, you can also use the trackpad: - swipe right with two fingers for the next track, left for the previous one -- scroll up or down to change Spotify's volume, the volume bar shows up while you do +- scroll up or down to change the player's volume, the volume bar shows up while you do The trackpad gives a light tap when the notch opens, when you press a button, skip a track or pass every ten percent of volume. @@ -107,8 +108,15 @@ Everything can be adjusted in SonyNotch Options: - Glow: turn the glow off or change its size, with a live preview - Progress Ring and Headphones Battery: show or hide them on the closed notch - Show Notch: turn the notch off completely +- Other Players (Experimental): follow Deezer, YouTube Music, your browser… too -The player works with the Spotify app for Mac, without any account or login. On a screen without a notch, it +The player works with the Spotify and Music apps for Mac, without any account or login. When both are open, it +follows the one playing, the last one started if both are. + +With Other Players (Experimental), on by default, the notch also follows any app that shows up in macOS's Now +Playing: Deezer, YouTube Music, a video in your browser… It reads it through the perl that comes with macOS, +since macOS 15.4 only lets Apple's own programs read Now Playing. The volume button is greyed out for these +players, as Now Playing gives no volume. If a macOS update breaks it, only these players stop working. On a screen without a notch, it shows up as a black pill at the top of the screen. ## Supported headphones @@ -134,8 +142,8 @@ SonyNotch menu. **Nothing happens after opening the app.** Check that SonyNotch is allowed in System Settings › Privacy & Security › Bluetooth. -**The notch says SonyNotch isn't allowed to control Spotify.** Click Open Settings and turn on Spotify under -Automation › SonyNotch. +**The notch says SonyNotch isn't allowed to control Spotify (or Music).** Click Open Settings and turn on the app +under Automation › SonyNotch. **The menu bar icon is missing.** When the menu bar is full, macOS hides icons behind the notch. Quit or hide a few other menu bar apps. @@ -176,8 +184,8 @@ Headphones up to the WH-1000XM4 use a first version of this protocol, newer ones detects which one when it connects. The byte layouts were checked against the Sony support in [Gadgetbridge](https://codeberg.org/Freeyourgadget/Gadgetbridge). -For the notch, Spotify posts a system notification on every playback change, and SonyNotch asks the app for -the artwork and volume with AppleScript. Nothing is polled while the notch is closed. +For the notch, Spotify and Music post a system notification on every playback change, and SonyNotch asks the +app for the details, artwork and volume with AppleScript. Nothing is polled while the notch is closed. ## Origins diff --git a/scripts/build.sh b/scripts/build.sh index b4b22c4a..2106705d 100755 --- a/scripts/build.sh +++ b/scripts/build.sh @@ -6,7 +6,7 @@ # SIGN_IDENTITY=name (default: "SonyNotch Code Signing" when that certificate is in a keychain, else ad-hoc) # SIGN_KEYCHAIN=path (keychain holding SIGN_IDENTITY, default: the search list) # -# Every release is signed with the same certificate, so macOS keeps the Bluetooth and Spotify permissions across +# Every release is signed with the same certificate, so macOS keeps the Bluetooth and music app permissions across # updates. An ad-hoc signature is identified by the binary's hash, which changes with every build. set -euo pipefail shopt -s nullglob @@ -30,8 +30,9 @@ CXX_SOURCES=("$CORE"/*.cpp) OBJCXX_SOURCES=("$MAC"/*.mm) rm -rf "$APP" -mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" +mkdir -p "$APP/Contents/MacOS" "$APP/Contents/Resources" "$APP/Contents/Frameworks" BINARIES="" +HELPERS="" for ARCH in $ARCHS; do OBJ=$OUT/obj/$CONFIG-$ARCH @@ -58,9 +59,16 @@ for ARCH in $ARCHS; do -framework AppKit -framework SwiftUI -framework Combine -framework IOBluetooth \ -framework IOBluetoothUI -framework ServiceManagement BINARIES="$BINARIES $OBJ/SonyNotch" + + # Loaded by /usr/bin/perl for the notch's Other Players (see NowPlayingHelper.m), not by SonyNotch itself. + echo "== [$ARCH] Now Playing helper" + clang -target "$TARGET" -isysroot "$SDK" $CXX_OPT -fobjc-arc -dynamiclib -framework Foundation \ + "$MAC/Helper/NowPlayingHelper.m" -o "$OBJ/NowPlayingHelper.dylib" + HELPERS="$HELPERS $OBJ/NowPlayingHelper.dylib" done lipo -create $BINARIES -output "$APP/Contents/MacOS/SonyNotch" +lipo -create $HELPERS -output "$APP/Contents/Frameworks/NowPlayingHelper.dylib" echo "== Resources" cp "$MAC/info.plist" "$APP/Contents/Info.plist" @@ -74,6 +82,8 @@ if [ -z "${SIGN_IDENTITY:-}" ] && security find-identity -p codesigning ${SIGN_K fi SIGN_IDENTITY=${SIGN_IDENTITY:--} echo "== Sign ($([ "$SIGN_IDENTITY" = - ] && echo ad-hoc || echo "$SIGN_IDENTITY"))" +codesign --force --sign "$SIGN_IDENTITY" ${SIGN_KEYCHAIN:+--keychain "$SIGN_KEYCHAIN"} \ + "$APP/Contents/Frameworks/NowPlayingHelper.dylib" codesign --force --sign "$SIGN_IDENTITY" ${SIGN_KEYCHAIN:+--keychain "$SIGN_KEYCHAIN"} \ --entitlements "$MAC/SonyHeadphonesClient.entitlements" "$APP" echo "OK -> $APP" diff --git a/scripts/test.sh b/scripts/test.sh index 3e6c4160..f0e03358 100755 --- a/scripts/test.sh +++ b/scripts/test.sh @@ -18,6 +18,7 @@ swiftc -target "$TARGET" -sdk "$SDK" -swift-version 5 \ "$MAC/Notch/BatteryDisplay.swift" \ "$MAC/Setup/SetupAccess.swift" \ "$MAC/Music/NowPlaying.swift" "$MAC/Music/PlaybackClock.swift" "$MAC/Music/SpotifyPlaybackInfo.swift" \ + "$MAC/Music/AppleMusicPlaybackInfo.swift" "$MAC/Music/MusicSourcePicker.swift" "$MAC/Music/NowPlayingInfo.swift" \ "$MAC/Updates/ReleaseInfo.swift" \ -o "$OUT/LogicTests" "$OUT/LogicTests" From 41e6ff15954aa7025305813e885378274bd697b5 Mon Sep 17 00:00:00 2001 From: Florian Thubin Date: Fri, 18 Sep 2026 11:33:32 +0200 Subject: [PATCH 50/50] fix(notch): keep the playback controls centred in notch-only mode --- Client/macos/Notch/MusicTab.swift | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Client/macos/Notch/MusicTab.swift b/Client/macos/Notch/MusicTab.swift index 14bf008b..7933d3d1 100644 --- a/Client/macos/Notch/MusicTab.swift +++ b/Client/macos/Notch/MusicTab.swift @@ -113,12 +113,15 @@ struct MusicTab: View { Spacer(minLength: 6 * s) // The side buttons take equal flexible widths, so previous / play / next stay centred on the notch. HStack(spacing: 0) { - Group { + // The spacer keeps this side's width without the headphones button (notch-only mode): an empty + // Group would take no room and pull the controls off centre. + HStack(spacing: 0) { if let showHeadphones = showHeadphones { iconButton("headphones", label: tr("Headphones"), action: showHeadphones) } + Spacer(minLength: 0) } - .frame(maxWidth: .infinity, alignment: .leading) + .frame(maxWidth: .infinity) HStack(spacing: 22 * s) { iconButton("backward.fill", size: 17, color: .white, label: tr("Previous track")) { music.previous() } iconButton(track.isPlaying ? "pause.fill" : "play.fill", size: 21, color: .white,

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 G0{$OD;fK8d diff --git a/docs/disconnected.png b/docs/disconnected.png deleted file mode 100644 index c1d518ec5131f326edf9c817eccf85c82afd8d4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57505 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ξmgr7Tk}N;V7~Zcr3#32z-;%CL$keg7wvtM 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 O7tO5Bm7H - - - - -SonyBridge — Control your Sony headphones from your desktop - - - - - - - - - - - - - - -

C*91?Z#Uh3zgk#0 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 diff --git a/Client/resources/devices/wh-ch520.png b/Client/resources/devices/wh-ch520.png deleted file mode 100644 index 3d308711da860e8e950ab0a11956a9bc8979610b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68700 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 diff --git a/Client/resources/devices/wh-ch720n.png b/Client/resources/devices/wh-ch720n.png deleted file mode 100644 index e885a9b32957ee48018508b59ecff196363af807..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122300 zcmV*uKtaEWP)Ze*HS3&+XdPeN>@r3TKHNh zl=Aj#S=+BKZwnHO|oo5nx>4Y}~kU>2`nD z!fvkxxB2}GyUPuoU9;KT*z5HU^wRX6Ua$9H7>0Ww%f|b?-i8!l13(t0X$DD};WHr6 zWg7s5_#gT+fG`3GgAjrsgfI*titt}Vj}M~|!T^5@AP4}`45l*3CLzma(kz_}08VCM z_&Q|4nSL0aTvxAO4T2!K&4;J36|lky7Pg|6Wm)C=_3MYCa``}~+x<|IB=@IDa(|Mf zLur;mnx>H9zbqqXhCgYQX7qpcclbi&&{F-AUtJb7I>rFPkewnr#4wB?E=3SWA;e(} zQ5?~20eZwNqvzv)vnE_a?4POz|BZnLwq zqwQYrt02ohkR-|byZ!#7{eB;^BxT2jj!0abIXZP~^uyii-!A@(eyaJm=btB!3qpu6 zN{l0j;|NM|3Cb}$MUEipLF|mtsb&FWL5BJEJV5Yr8f3>}2wzIm^r^wY!PkrBv-YiU zf`#1@yMF!pmatTMqSbDFQ_}Ar>Gt~D(*)x-j=Jza=y1?kp_8GI&O91Mfp{N3799}; z7^N+DmF{tFIqUD@2q|0U+s!eOm*mG_x{MC66vt35m!MoKaSDy8vp7V4eU3~i0%dPH z3jpV{Ab2Lqvfl}U;JIqGdOipO{3eC1AuF6b%lbo8J{nJU3e5~1O{rP^cKa44^ zIvjE=?y^<8|tF@y&KmXTz-R?&_z5c^V(uV-+aF|4r1Cq*JuD<6-Y|gRh-|Wb=(x(q} zsjfcXbF1Ri*g^UWTvKjwR{Sh=svKm>=S#&Qh7gt_N|VdwGC4y`o5M&x5js-m6D<(aS>9RGF~mwLd5+0V4bj3DnYee zCWna8A=V5N{H|2%7Cebp4K^6wVODP1u6qJ&mAFYj^EtcZ#vBC)!_P?|&%i`Jj z`9D85KmQN9-QEFLq0?}=qG*X_Y>%LyU_3V zpxf!vZAp?sk|1t5lT;I5CnRS>-Q55kQyD7ND*YapN>D0A^nUny2**K3iOvx_F6fk9 z(?z*ci4F(1VU}R(j8jU&wrek%EJ$?-fQeCH)p)syb z_)bVg`ify7&65h$suCGSC5lG-X(G`rJAHNDn&MlEY~=&QB+_d>A3*Tiy*U2&>l=+r z#qzxMRye`JZm`SOu6<><)BQ)?Zug@Yfl-4XU>J&~lx#WdN)GlyX=AAjQ5-|J+kv^c zIhbFVhq>8#n46!6Zl^<0Tw`E>ej+qwaBvVxm}X)}w#1k{jOvu~Ce=T$gqKl-n4~Fm zIvr>=TjU5koi;REEoe4dbU)tLY&BtIXc$IEM`3t)7>0(1U|^s@&&AKu?e;86)pVI* zG+sT=gWFh$D9#hR$hB$(s?{n*h6u_|`aODmPOUv$P7dO;yvwbYO+``s={O93x?Zn8 zQ!LY4XN40i%o z;rkeHneHdPFhzUJ0KwaPy)HRJbc*d}6E0l52+d}b9#gN^VEy_D*sx&({od>KA;Hg( zB^k$0c%r>I@NYNKqj+kE}c>M^d}UUTUmOBrcii`=dXNekF?F z7Y6HtzfdgKn{R~^EQ~}9E?vF)9nDtjAN2dl#yIks61q$rd;~8{bWn8RM=_Ku6}o6K z!keC+f=ib!LA%|dC=l;kH#P>FHfVA|ua(d|+3hdZM$w=mp|Np;X==4n#g~-t1#s>9HFAhcOH0scwaIC1-MSUluU`+U@ip}*Y6y#tpsZiJg5+gw8f{xQiqfGWvtz{F*{3jEDDI``W_20*zFK93j~4Cn08mIkR}Np1DKwkfy-AeQ`ER+^CsA`Webds zj#2FpzoW5Kh&{qA6?EFvNhZf8?}Hyd1gOLu+jtzd zoFYZ3DblwH!q-B8f75QaKQ%EivA6=u>40@O>gr}U*3#&rrs&6a zQp=z!lm@#df)6pV7%^X#w9n4?Ky?~kGsE!H=-@HJ3MoPzs5dBW#c1~A$&)ZOb)A|j zJ9q4WjT<+SL+y0B^nJM3;fp=c(Gd!sp{*$ru42=qCQ%_eT>x@~uB?eK#!MCECEGcW z53G$7dKZKQS?V0T0sucdGC2671x4@6x55eDg?8b}m5=tj-5+arx`zk|jGb3sU_gw6 zs+79B7~vru?$YH;aOU(`a&QBU0oc4{Gi=_piJBmo@?lc~Q(*#76CYS{di+}cTX59J zIKWilD|C<6;nYz&Cu&R&Ra5Y|yuMdr7sa$a!v{*_hDOZ_aXc8Ip~J1#s^s|4SuHLt z!r3!t;QWP)^w_<-cfsZ@Tj+h3noCx{d($kT zCI&_#e95LHTA-ybav@I$>-okhjV7++!REtlsE5l7--p(F;I%0d^4}(YTs3&!2A+dwhI5Q9bX9* z#j&81LdP{cJVecs3l}fI@ngrSV}0+v_rk`F69n(UnkGwc*{d5rL>o4k`s0@=mnu-N zSD{wHpEZc$67SU-2F6;ALj zv2$0h97@{VpJ{hHk1|NvqqnKUkqa;`#Zax(pwn)_nX_l%+_`gfjqTjI6L#+0L1F^! zHbPLE&e7O)$kCoUFIJIJ>Rf6dW#tBA6y|AO89RfY&iq`d`q{B00w- z2RTu(;^j zhYr!>78jS8#bQFQUP`Yidny}Dtxn+TdaX{WH+9>oS)`3|0iJt~Tn-gS*}P*(xx$N_ z?YLOY@aN+o_`!jJ0jwPs_J>&E1n*!wdGchXRIB}XyWRd4rKwr;C#^@7u}4@3{=9VY zBD`_@7)5CJ?mqxKw(p<|bZK#sqc%_QfXexjc5>9B(Vwf+X=Fy+T76I98l!Osnz4Xv zt_i>|=NzhD@V)?oyd`(8rJJ40l0_%R`mZ);#3{LnK(-QER{+XHf)%H zX0r`1fAM9Qo1KLN2lm6pjT@oUZZjs(OS#n{D%TlrMhs((9AH_};|2t%Y%SkaYoB_2 z{awqNM)Kl5rjTEr>zn$WP~#zm?E6OshJGjrg61t)W^3LGCwPb2)YR0$*@eZQ?)7>f zV16zO4UkE79WONO_9CY3+O_NO+G|H)sojFzyLQ69y?d!4g0wbFeGy#D9b1hw_<}P; zi|4%TB6gt)q@tog&dN)PDRQ)Ge_or<>WcUn#MlXI#R)KIicPR-YrH7aLp!)!?37O_ zj>I)d5KD;8(+zFnh)!g%#35pEh*2@VKf-DdK7*j|GiT1ht4Cjj(UB22bnqZO2C;|A zkM>n+NUM+U|?{7;4@fDt<~$$sMqN}d^AFNn4u%lGtFIb6ICqI)NM&>h6E