From 20d38ec7acbbef93d3901673cd9c13806919359a Mon Sep 17 00:00:00 2001 From: reaw55 <58457329+reaw55@users.noreply.github.com> Date: Mon, 25 Mar 2024 15:08:49 +0700 Subject: [PATCH] add york --- platformio.ini | 4 +- src/ir_codes.hpp | 11 -- src/{ir_codes.cpp => ir_codes_daikin.cpp} | 52 ++++---- src/ir_codes_daikin.hpp | 11 ++ src/ir_codes_york.cpp | 147 ++++++++++++++++++++++ src/ir_codes_york.hpp | 11 ++ src/ise_display.cpp | 48 ++++--- src/ise_display.hpp | 7 +- src/main.cpp | 80 +++++++++--- src/main.hpp | 9 +- 10 files changed, 303 insertions(+), 77 deletions(-) delete mode 100644 src/ir_codes.hpp rename src/{ir_codes.cpp => ir_codes_daikin.cpp} (75%) create mode 100644 src/ir_codes_daikin.hpp create mode 100644 src/ir_codes_york.cpp create mode 100644 src/ir_codes_york.hpp diff --git a/platformio.ini b/platformio.ini index 8077b99..cc77b01 100644 --- a/platformio.ini +++ b/platformio.ini @@ -12,8 +12,8 @@ platform = espressif32 board = wt32-eth01 framework = arduino -lib_deps = siwats/ESPMegaPROR3@^2.5.1 +lib_deps = siwats/ESPMegaPROR3@^2.5.3 monitor_speed = 115200 -build_flags = -DCORE_DEBUG_LEVEL=0 +build_flags = -DCORE_DEBUG_LEVEL=5 upload_port = COM7 monitor_port = COM7 \ No newline at end of file diff --git a/src/ir_codes.hpp b/src/ir_codes.hpp deleted file mode 100644 index 5dc3188..0000000 --- a/src/ir_codes.hpp +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once -#include -#include - -// IR codes for the remote control -extern const uint16_t ir_code_cool[4][17][407]; -extern const uint16_t ir_code_fan[4][407]; -extern const uint16_t ir_code_off[407]; - -// Function to retrieve the IR code for the given mode, fan speed and temperature -size_t getInfraredCode(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr); \ No newline at end of file diff --git a/src/ir_codes.cpp b/src/ir_codes_daikin.cpp similarity index 75% rename from src/ir_codes.cpp rename to src/ir_codes_daikin.cpp index f934419..6fa4292 100644 --- a/src/ir_codes.cpp +++ b/src/ir_codes_daikin.cpp @@ -1,26 +1,26 @@ -#include +#include -const uint16_t ir_code_cool[4][17][407] = { +const uint16_t ir_code_cool_daikin[4][17][407] = { // Fan Speed Auto { - -{5043,2131,404,1747,379,697,379,697,379,695,407,1746,379,698,378,697,379,697,379,696,406,1745,380,697,380,1772,379,1772,379,697,379,1773,379,1772,379,1773,379,1772,406,1746,379,697,379,1772,380,695,381,696,405,670,406,671,379,696,380,697,379,1772,405,671,379,696,380,1771,407,670,379,696,380,696,380,1772,405,670,405,672,379,697,379,695,380,697,379,697,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,696,380,1772,379,1772,380,1772,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1772,380,696,405,671,379,697,405,1746,380,696,380,696,405,670,406,670,380,1772,380,696,405,1746,405,1747,405,671,379,1773,405,1746,379,1773,379,1773,379,1773,379,695,380,1772,407,669,379,697,379,696,407,670,379,696,380,696,379,1773,405,671,379,695,380,1773,379,697,405,670,380,696,380,696,405,671,379,697,379,697,379,696,380,696,379,1772,380,1772,379,696,405,671,380,1772,406,1746,380,1772,379,696,380,696,379,697,379,697,379,696,380,696,380,695,381,695,380,697,405,1746,380,696,379,697,406,670,379,697,378,1773,379,697,405,670,380,696,380,696,380,696,380,696,379,696,380,696,380,696,380,695,380,696,380,696,380,697,379,696,405,670,406,671,382,693,405,671,380,695,408,1748,401,1747,379,1773,379,696,406,670,380,695,381,697,378,1773,405,1746,379,1772,380,1772,380,696,379,696,380,697,379,697,379,696,380,697,405,670,379,696,380,696,380,697,379,696,379,697,405,671,379,696,380,696,381,695,379,697,379,1772,380,696,379,696,380,697,379,696,380,696,380,696,405,670,380,697,379,697,379,696,380,696,380,695,380,696,380,697,404,671,406,671,378,697,379,696,380,696,380,696,380,696,379,697,406,669,407,669,380,696,380,696,404,1748,379,1772,380,697,378,1773,379,1772,380,697,378,696,380,696,380}, //16C -{5043,2130,405,1747,380,696,380,696,406,670,384,1767,380,696,380,695,380,702,374,697,405,1746,407,669,405,1747,406,1745,380,696,379,1773,379,1772,380,1772,379,1772,380,1772,379,697,379,1772,380,696,406,670,405,671,406,670,379,696,406,671,379,1771,406,670,380,697,406,1745,405,671,379,697,379,696,405,1747,380,696,380,696,379,696,406,670,380,696,380,696,379,697,380,695,380,696,380,696,379,697,379,697,379,696,380,696,405,1746,406,1746,380,1772,405,671,379,696,382,1770,380,696,379,29384,5042,2130,380,1772,407,670,406,669,380,696,379,1773,379,697,406,669,380,695,381,695,385,1767,406,670,380,1777,402,1744,407,669,380,1772,379,1772,401,1750,381,1771,380,1772,406,670,380,1771,380,697,379,696,406,670,379,697,379,696,380,696,405,1747,406,670,379,696,406,1746,380,696,379,697,379,696,380,696,380,696,380,695,381,695,407,669,380,696,380,1771,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,697,379,697,404,672,378,696,380,697,405,670,380,696,380,696,379,697,380,1771,380,697,381,694,380,696,380,695,380,1775,377,696,379,696,380,696,380,696,380,696,380,696,406,669,380,697,379,696,408,668,404,672,379,697,406,669,380,695,381,696,380,695,405,672,379,696,380,696,380,696,406,669,381,696,379,1772,380,696,379,697,405,670,406,1746,380,1771,406,1746,380,1771,380,696,380,697,379,696,380,696,379,697,380,695,380,697,379,696,406,670,379,697,379,696,380,696,406,670,380,696,379,697,379,697,379,697,379,1771,380,696,380,696,380,697,379,696,380,696,379,697,379,696,380,696,405,671,379,696,380,696,407,670,405,670,407,669,379,697,405,670,380,696,380,696,405,670,381,696,379,696,380,696,380,696,405,670,406,670,380,696,380,1771,381,696,379,1771,381,1772,409,1743,379,696,380,696,406,670,379}, //17C -{5069,2104,407,1745,380,696,380,696,380,695,380,1772,380,696,380,696,379,696,380,696,380,1772,380,696,379,1772,380,1771,381,696,405,1746,380,1771,381,1771,380,1772,380,1771,380,696,380,1772,380,695,406,670,408,668,380,696,380,695,380,697,406,1745,380,696,380,696,379,1772,407,669,405,671,380,695,406,1746,380,696,405,671,380,695,380,697,380,695,380,695,381,696,379,696,380,696,380,696,406,670,380,696,388,687,380,696,380,1771,381,1771,380,1772,380,696,379,697,405,1746,380,696,380,29361,5064,2130,406,1746,380,696,379,697,405,670,380,1772,380,695,380,696,380,696,380,696,380,1771,380,696,380,1771,381,1771,380,696,406,1745,381,1771,380,1771,381,1771,380,1772,380,696,406,1745,407,669,381,694,381,696,380,695,406,670,380,696,405,1746,380,696,380,696,407,1745,407,669,405,671,379,696,380,695,381,696,380,695,380,696,380,696,406,670,406,1745,380,1772,405,671,379,696,380,1771,381,1772,380,1771,380,696,406,670,384,691,381,695,380,696,380,696,380,695,381,696,379,696,380,1772,406,669,407,669,380,696,380,696,380,1772,406,669,407,669,407,669,380,696,405,671,405,670,380,696,380,696,380,695,408,668,406,669,381,695,380,697,379,696,380,696,407,669,405,671,380,695,408,668,405,1746,381,695,380,695,381,1772,380,696,406,669,380,696,380,1771,406,1746,380,1771,381,1771,406,670,380,696,406,670,405,671,380,695,381,695,407,669,379,697,405,670,380,696,406,670,380,696,407,668,380,696,407,669,405,671,405,670,381,1771,407,673,376,696,380,695,381,695,406,670,380,696,407,669,405,670,381,695,406,670,405,671,406,670,407,668,407,669,380,696,406,670,405,671,380,695,406,670,380,696,405,670,381,696,406,668,407,670,380,695,381,695,380,1772,380,1771,408,1744,407,1745,380,1771,380,696,380,696,380,695,407}, //18C -{5069,2105,380,1771,380,696,406,670,379,697,404,1747,380,696,407,669,380,696,406,670,379,1772,380,696,406,1745,380,1772,406,670,406,1745,406,1746,406,1746,379,1773,379,1772,380,696,379,1773,404,671,380,696,386,690,405,670,405,672,404,671,379,1773,379,696,407,670,379,1771,406,671,406,669,406,670,380,1773,378,696,380,696,380,696,379,697,380,696,379,696,405,670,406,671,379,697,379,696,380,696,380,696,406,670,379,696,380,1772,380,1772,380,1771,380,696,380,695,380,1773,379,697,379,29360,5065,2130,380,1773,379,697,379,697,379,696,379,1771,381,696,380,696,405,672,378,697,379,1772,379,697,379,1772,380,1772,405,672,378,1772,380,1772,380,1771,380,1772,380,1772,379,696,407,1745,380,696,380,697,404,670,380,696,380,697,379,696,379,1773,378,697,380,697,378,1772,407,670,379,697,379,697,378,697,379,697,404,672,381,694,380,696,405,670,380,1775,377,1771,380,697,379,696,380,1772,405,1746,380,1772,380,696,379,697,404,672,379,697,405,671,379,696,379,697,379,696,380,697,379,1772,379,697,379,696,380,697,406,668,380,1772,380,697,379,696,380,696,379,697,379,696,380,697,378,697,380,696,379,696,380,697,379,696,379,697,380,696,379,698,378,697,378,697,380,695,380,696,380,697,379,696,379,1773,379,697,379,1772,379,697,379,697,379,697,379,1772,379,1773,379,1773,379,1772,379,697,379,697,404,672,405,670,379,697,379,697,379,697,378,697,406,670,379,696,380,696,380,696,380,696,379,696,380,696,406,670,379,697,379,1773,379,697,404,672,378,697,379,697,379,697,379,696,380,695,380,696,380,697,379,697,379,695,380,696,380,696,380,697,380,695,379,696,380,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,407,669,379,697,379,1772,380,696,379,696,383,693,380,695,381,1772,380,695,406,670,380}, //19C -{5087,2108,380,1772,406,670,379,696,380,696,380,1772,379,697,379,697,379,696,407,669,379,1772,380,697,379,1773,378,1772,380,696,380,1771,380,1772,380,1772,379,1772,407,1745,380,695,380,1773,379,696,380,696,379,697,379,696,406,671,379,696,407,1745,405,671,379,697,379,1772,379,697,379,696,380,697,379,1772,379,697,379,697,379,697,378,697,379,697,379,696,379,696,381,696,379,697,406,669,380,697,379,697,382,693,380,695,380,1773,378,1773,379,1772,380,696,406,671,378,1772,380,697,379,29360,5065,2130,380,1773,379,696,405,670,380,697,379,1772,380,696,380,695,380,697,379,696,406,1747,378,697,379,1773,378,1773,379,697,379,1772,405,1747,379,1772,380,1772,379,1773,379,696,380,1772,379,697,378,697,406,670,379,697,379,696,380,696,380,1771,380,696,380,696,380,1772,380,696,379,697,379,696,380,696,380,696,379,697,379,697,379,697,379,696,379,1773,379,1773,404,671,379,697,379,1772,405,1747,380,1771,380,696,380,697,384,692,378,697,379,697,379,697,379,696,379,697,379,697,379,1772,379,697,379,697,379,696,380,696,380,1772,379,696,380,696,380,697,378,697,379,697,379,697,379,697,378,697,405,671,379,698,378,697,379,696,379,696,380,697,379,697,379,696,379,697,379,697,379,697,379,1772,379,1773,379,697,404,1747,379,697,379,696,379,698,404,1747,379,1773,378,1772,380,1773,379,697,433,643,379,696,379,697,379,696,380,696,379,696,380,697,379,697,379,696,379,697,405,671,379,696,380,697,383,693,404,671,379,697,379,1777,375,697,378,697,405,671,379,697,379,697,403,672,379,696,380,697,379,696,379,697,379,697,379,697,379,697,379,696,406,670,379,697,379,696,380,697,378,698,379,696,379,697,379,697,379,697,378,697,379,697,379,696,380,1772,379,1773,379,697,378,697,379,697,379,1772,380,697,379,696,380}, //20C -{5043,2130,407,1745,407,669,379,696,381,695,405,1747,380,695,406,670,406,670,380,696,406,1745,380,697,405,1745,406,1746,406,670,406,1746,405,1746,406,1745,407,1745,407,1745,390,686,380,1772,405,670,406,670,380,695,380,696,380,697,405,670,406,1745,408,668,405,670,407,1745,393,683,406,670,380,696,406,1745,380,696,406,670,405,670,381,696,379,696,380,696,406,669,408,669,406,670,379,696,380,697,379,696,406,670,405,670,384,1768,406,1746,380,1770,407,670,405,670,406,1746,380,696,405,29336,5064,2130,380,1772,406,670,405,671,395,680,380,1772,406,670,380,696,380,696,379,696,380,1772,405,671,406,1746,379,1772,379,696,380,1771,381,1772,405,1746,380,1771,380,1772,380,697,405,1745,380,696,380,696,380,696,380,696,407,669,379,696,380,1771,381,695,380,696,380,1771,380,696,380,697,379,696,380,696,405,671,379,697,379,696,380,696,406,669,380,1772,406,1746,382,694,405,671,379,1772,380,1771,381,1771,380,697,405,669,381,695,405,672,405,671,379,696,405,671,405,670,380,696,380,1771,381,696,379,695,381,696,380,695,380,1773,405,670,380,696,406,669,407,670,379,696,380,696,380,696,380,696,379,696,380,696,380,697,405,670,406,669,406,671,379,695,381,696,380,696,379,697,379,696,380,696,380,695,380,1771,381,1771,406,671,379,696,380,696,380,1771,380,1772,380,1771,380,1772,380,696,405,670,381,696,405,670,380,697,406,669,380,695,381,695,380,697,379,696,380,696,379,697,379,697,406,669,407,668,381,696,405,670,380,1772,380,696,380,696,379,697,405,670,380,696,379,697,379,696,380,696,380,696,380,696,404,672,379,697,406,669,380,695,407,670,379,696,406,670,380,695,381,696,384,692,404,671,407,669,380,695,406,671,405,670,380,696,380,1771,380,696,407,1745,380,696,379,697,405,1746,380,696,407,669,405}, //21C -{5042,2131,379,1773,378,699,377,697,402,674,379,1773,381,694,379,698,378,697,379,697,379,1772,406,670,379,1772,379,1773,379,697,379,1772,379,1773,378,1774,378,1774,378,1772,380,697,378,1773,379,698,378,697,379,697,379,697,378,698,405,670,379,1772,379,698,378,697,379,1773,378,698,378,697,379,697,379,1773,405,670,379,697,379,697,379,697,379,697,378,697,379,697,379,697,405,670,380,697,378,697,379,696,380,697,378,698,378,1774,378,1772,405,1748,378,697,379,697,378,1773,380,697,378,29362,5090,2103,381,1771,380,696,380,696,384,691,381,1771,380,696,405,671,380,696,379,696,380,1772,384,691,381,1771,406,1745,407,669,406,1746,407,1744,407,1745,406,1746,406,1745,406,669,407,1745,407,670,404,671,407,669,405,670,381,695,406,670,406,1746,405,670,380,696,380,1772,380,695,407,669,406,670,406,670,405,671,406,669,406,670,384,692,380,695,381,1770,406,1746,380,696,380,697,406,1744,407,1745,406,1746,406,670,379,696,398,678,379,698,377,698,378,697,379,697,378,698,378,698,377,1774,377,699,351,726,349,726,350,726,349,1802,349,728,348,731,344,728,348,728,347,729,371,704,372,705,372,702,373,704,373,702,373,703,373,702,374,702,373,703,373,703,374,701,374,703,373,702,373,703,373,1778,374,702,373,1778,373,1779,373,703,372,704,371,706,369,1781,371,1780,347,1805,347,1804,347,730,346,729,347,729,347,731,345,728,348,728,347,729,347,729,347,728,373,703,373,703,373,703,374,701,374,702,374,702,375,701,375,700,376,1776,376,700,376,699,377,699,377,699,377,698,378,698,377,698,384,693,377,698,378,697,405,671,389,692,374,697,404,672,404,671,404,672,404,672,403,673,403,672,378,698,404,672,403,673,403,673,377,698,403,673,403,673,403,1748,403,1749,402,1749,377,699,402,674,377,1775,401,675,376,699,376}, //22C -{5043,2131,379,1772,380,697,379,697,378,697,379,1772,380,697,378,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,698,378,1772,406,1746,379,1772,380,1772,379,1772,380,697,379,1772,379,698,378,698,378,697,379,697,379,696,379,697,379,1772,380,696,380,697,382,1768,380,697,379,696,379,697,379,1772,380,696,406,670,380,695,380,697,379,696,380,696,379,696,380,697,379,696,379,696,381,696,379,697,379,697,379,696,379,1772,380,1773,379,1773,404,671,379,697,379,1773,378,696,380,29382,5043,2131,404,1748,379,696,380,697,379,696,405,1746,380,696,379,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,697,379,1772,380,1772,379,1773,379,1772,379,1772,380,696,380,1772,379,697,379,696,380,697,379,697,379,695,380,697,379,1771,381,696,406,669,380,1772,379,698,378,697,379,697,379,697,379,696,379,697,379,697,379,696,380,695,380,1773,379,1771,381,695,381,696,379,1772,380,1772,379,1773,378,697,380,697,378,697,379,696,380,697,379,696,379,697,379,697,379,697,379,1772,379,697,379,697,379,697,379,697,378,1773,379,696,379,697,406,671,378,697,379,697,379,696,380,697,378,697,379,697,379,697,379,696,379,697,379,696,380,696,380,697,378,698,378,697,379,696,380,696,380,696,380,1772,379,1773,379,1773,404,671,379,696,380,697,378,1773,379,1772,380,1772,379,1772,380,695,381,696,405,671,379,697,379,696,380,696,380,696,379,697,379,696,379,697,379,698,378,697,378,697,380,697,378,697,379,697,379,697,379,1772,379,698,378,697,379,697,378,698,379,696,379,698,378,697,379,696,406,671,379,697,378,697,379,697,379,697,379,696,379,696,380,697,379,697,378,697,379,696,380,697,379,696,380,696,380,696,379,697,380,696,379,697,379,1771,380,696,380,697,379,1772,379,697,379,1772,407,670,379,696,405}, //23C -{5034,2137,375,1778,398,679,397,677,373,703,373,1780,373,703,371,703,372,706,397,705,345,1779,373,705,369,1807,344,1781,399,678,370,1781,397,1754,371,1781,380,1770,372,1808,344,706,370,1780,371,707,368,733,343,733,371,678,371,703,372,732,370,1781,370,705,346,731,369,1759,368,731,370,706,344,732,344,1808,343,732,344,707,394,707,345,731,370,680,396,705,344,732,343,706,370,733,370,679,370,706,370,733,343,731,345,731,371,1781,344,1808,342,1783,394,709,342,733,343,1808,344,732,344,29393,5032,2140,397,1781,343,709,368,732,342,734,341,1810,343,733,341,735,343,733,367,710,340,1839,311,735,344,1781,369,1810,342,733,370,1783,365,1785,343,1811,341,1809,336,1789,368,735,341,1809,342,734,341,737,367,708,368,708,341,735,342,732,369,1784,341,734,340,736,342,1810,339,737,368,706,343,734,342,732,342,735,343,733,342,734,340,735,342,735,342,1808,343,1808,370,710,341,704,372,1807,342,1810,371,1780,345,704,371,732,343,733,344,731,345,731,342,734,371,677,372,731,343,733,370,1754,398,679,371,703,372,704,372,704,373,1778,372,703,374,703,399,676,373,704,397,678,372,703,403,673,374,702,400,675,399,677,400,676,400,675,399,677,401,675,427,649,374,701,401,675,401,674,402,675,402,1750,401,1750,401,1751,404,1747,403,674,401,673,376,700,402,1750,401,1750,375,1777,375,1777,374,701,375,701,403,673,402,673,402,674,404,672,376,700,403,673,403,672,403,673,405,671,403,672,406,670,377,699,376,699,404,672,377,699,433,1719,404,672,403,673,375,700,404,672,404,672,406,670,402,673,405,671,405,671,403,672,433,643,430,647,402,673,406,669,406,671,404,671,406,670,406,670,404,671,379,698,433,642,403,673,402,674,377,698,378,698,404,672,403,1748,406,1746,403,673,406,1745,377,700,377,1774,406,670,377,698,405}, //24C -{5069,2103,406,1746,406,669,407,669,407,669,380,1772,407,668,381,696,380,695,380,696,380,1771,406,670,381,1771,406,1745,380,696,385,1767,380,1771,381,1771,406,1745,381,1771,407,669,406,1745,380,696,406,670,380,696,406,670,406,670,381,694,407,1745,400,676,405,671,405,1746,380,696,380,695,407,670,379,1772,407,668,381,696,379,696,407,670,406,669,380,696,380,696,406,672,402,671,384,692,407,669,382,694,405,670,406,669,407,1745,406,1746,380,1772,405,670,406,670,380,1772,380,695,380,29383,5043,2130,407,1744,406,671,379,696,407,668,381,1772,380,696,379,697,406,669,380,696,380,1772,405,670,406,1746,405,1747,379,697,404,1746,406,1746,380,1772,380,1771,380,1772,380,696,380,1771,406,671,405,671,379,695,380,697,379,697,405,670,380,1772,379,696,380,697,404,1747,380,695,380,696,406,670,380,696,405,671,407,669,405,670,380,695,380,696,380,1772,405,1747,405,671,406,669,380,1772,406,1750,375,1772,406,670,405,670,380,696,406,670,380,696,380,695,380,697,379,696,380,696,406,1746,405,670,407,670,379,696,406,669,380,1772,380,696,406,671,404,670,380,696,380,696,380,696,386,690,379,696,407,670,405,670,380,695,406,670,380,696,396,680,380,696,380,696,405,671,405,670,380,696,380,696,405,670,380,696,380,696,380,1771,380,696,380,696,405,1747,379,1772,380,1771,407,1745,380,696,380,696,380,696,407,668,407,669,380,696,406,670,405,670,380,696,380,696,380,696,406,673,402,670,380,696,405,671,406,670,380,695,380,1772,406,670,405,671,380,695,380,696,380,696,405,671,379,697,407,668,380,696,393,683,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,1772,380,695,406,1746,380,1771,380,697,379,1772,380,696,379,697,379}, //2C5C -{5043,2131,380,1772,379,696,380,696,379,698,378,1772,380,696,380,696,379,697,379,696,380,1772,379,697,379,1773,379,1772,380,696,379,1772,388,1763,381,1771,380,1772,379,1773,379,697,379,1772,379,697,405,670,380,696,380,696,405,671,380,696,383,1768,380,696,380,696,379,1772,380,696,379,697,379,697,379,1772,407,669,380,696,379,696,380,696,407,670,378,697,379,697,380,695,379,697,379,697,379,697,405,671,379,697,379,696,379,1773,379,1772,379,1773,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1771,380,696,379,697,379,697,379,1772,380,696,379,697,380,696,379,697,379,1772,379,696,380,1772,380,1772,379,697,379,1772,379,1773,380,1771,380,1772,380,1771,381,695,379,1772,406,670,380,696,380,695,380,697,379,697,379,697,403,1748,379,697,380,696,406,1745,378,698,380,696,379,696,380,697,404,670,381,696,379,697,379,696,380,696,379,1772,380,1772,380,696,379,697,379,1772,407,1745,380,1771,380,696,406,669,407,669,381,695,380,695,381,696,405,671,379,696,380,696,406,1746,380,695,406,671,379,695,381,695,381,1771,381,695,380,695,380,697,380,695,380,696,380,696,380,695,381,695,380,696,380,696,406,670,380,695,407,669,381,695,402,674,380,696,406,669,381,696,405,670,380,1771,406,669,382,695,406,670,380,1771,381,695,380,695,407,1745,380,1771,407,1745,406,1746,380,695,381,695,406,670,406,669,381,696,406,669,380,696,407,669,406,669,407,669,406,670,407,669,405,670,381,695,406,670,407,669,406,670,406,1745,406,670,379,697,380,695,381,695,406,670,380,696,393,682,380,696,380,696,380,696,380,696,404,671,380,696,382,694,379,697,379,696,380,696,405,671,379,697,379,696,380,696,379,697,378,698,377,699,378,698,377,699,376,1775,350,1802,350,1801,350,1801,350,726,349,1803,349,727,374,702,372}, //26C -{5039,2132,379,1772,379,697,379,696,379,697,379,1772,379,697,379,697,379,696,380,696,379,1773,379,697,379,1772,379,1772,380,697,379,1772,379,1773,379,1772,379,1773,379,1772,380,696,380,1772,379,696,380,696,380,696,380,696,380,696,379,696,380,1772,379,697,379,697,379,1772,380,696,379,697,379,697,379,1772,380,696,379,696,380,696,379,697,380,695,380,696,380,696,379,696,380,696,380,696,380,695,381,696,379,696,380,696,379,1772,380,1771,380,1772,380,696,379,697,379,1772,379,697,379,29381,5042,2131,379,1773,378,697,433,643,432,644,378,1773,432,644,433,642,434,643,431,644,379,1772,435,641,433,1719,432,1719,433,643,434,1717,433,1719,433,1718,379,1773,433,1718,378,698,378,1773,379,698,432,644,431,644,432,644,433,643,433,642,433,1718,432,644,432,644,432,1719,433,643,433,643,432,644,434,642,433,642,432,644,434,642,431,645,433,643,401,1749,434,1718,432,644,430,646,432,1719,378,1773,432,1720,433,642,432,644,433,643,433,643,432,644,433,643,431,644,378,698,432,644,432,1719,432,643,462,614,379,697,433,643,433,1718,434,642,378,698,433,643,432,643,433,643,433,643,432,644,431,644,433,643,433,643,378,698,431,645,433,642,378,698,432,644,432,643,432,645,432,643,433,642,404,673,432,1719,433,643,432,643,432,1719,434,643,432,644,432,1719,378,1773,379,1773,378,1773,379,697,433,643,434,642,431,644,432,644,433,643,433,642,430,646,379,697,432,644,432,643,434,642,433,643,432,644,432,643,434,642,431,644,433,1719,433,643,378,699,431,644,432,643,433,644,429,645,434,642,432,644,433,643,433,643,431,645,434,641,432,644,431,645,378,698,432,643,433,642,434,642,433,643,379,697,433,642,434,643,432,643,432,644,431,645,431,645,431,1720,432,643,433,643,433,643,431,1720,379,1773,433,643,431,645,430}, //27C -{5043,2130,405,1746,381,695,380,696,380,696,380,1771,380,697,379,696,380,696,380,695,380,1772,380,696,405,1747,379,1772,380,695,381,1771,406,1745,381,1772,379,1772,380,1771,380,697,379,1772,380,695,381,696,379,696,409,668,379,696,380,695,407,1745,405,672,379,696,380,1771,380,696,380,696,380,695,381,1771,380,697,404,671,380,696,380,695,380,696,380,695,381,696,380,696,379,696,380,696,380,695,381,695,380,697,379,696,380,1771,381,1771,380,1772,379,697,379,696,380,1771,381,696,405,29356,5044,2130,380,1771,381,695,380,695,381,696,380,1772,405,670,380,695,381,696,379,696,380,1771,435,642,380,1771,380,1772,380,696,379,1772,380,1771,381,1772,404,1746,381,1772,380,696,379,1772,380,696,380,696,379,696,380,695,381,696,380,695,381,1771,380,696,380,695,406,1745,381,696,380,695,381,696,379,696,380,696,380,696,380,696,379,697,379,695,381,1772,380,1771,380,696,380,696,380,1772,379,1772,380,1771,380,697,379,696,380,695,381,695,406,670,407,669,380,696,380,696,380,695,380,1772,380,695,381,696,379,697,379,696,380,1772,380,696,380,695,380,696,380,697,379,695,380,697,379,696,380,695,408,669,380,696,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,1771,381,1771,380,697,379,696,380,1771,380,696,406,670,380,1771,380,1772,380,1772,380,1771,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,695,380,696,380,696,380,696,380,695,381,696,379,696,380,696,380,696,380,695,380,1771,381,696,406,669,380,697,379,696,380,696,380,695,381,696,379,696,380,696,407,669,380,696,380,695,380,696,405,671,380,696,435,640,380,695,381,696,380,695,380,696,380,696,380,696,406,669,381,695,380,697,379,696,380,1771,380,1772,380,696,432,644,380,1770,381,1771,381,694,381,696,380}, //28C -{5070,2104,407,1745,379,696,379,697,379,697,378,1774,378,698,378,696,407,671,377,697,434,1719,378,697,379,1773,379,1772,378,698,379,1773,378,1773,379,1772,379,1773,379,1772,379,698,378,1773,379,697,379,697,378,698,378,697,379,697,379,697,378,1773,380,696,378,699,378,1772,379,697,379,697,379,697,379,1772,379,697,379,697,378,697,379,698,378,697,378,698,378,697,379,697,379,697,379,697,379,696,380,697,379,697,378,696,380,1772,380,1772,405,1746,406,670,380,696,380,1772,406,669,380,29383,5042,2131,379,1772,380,696,405,671,380,695,381,1771,380,696,380,696,379,696,406,670,380,1772,405,670,381,1771,406,1746,380,695,380,1772,380,1772,405,1746,380,1771,380,1772,380,695,381,1771,380,697,378,697,380,696,379,696,381,696,379,696,380,1771,381,696,379,696,380,1772,379,697,379,696,380,696,406,670,380,696,379,696,380,696,380,696,379,697,406,1745,380,1771,380,697,379,700,376,1772,380,1771,380,1772,406,670,380,696,379,696,380,696,380,696,406,669,381,696,379,696,407,669,380,1771,381,695,380,696,379,697,380,696,379,1772,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,695,380,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,696,379,1772,380,695,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,1772,380,696,405,671,405,670,406,670,380,696,380,696,379,699,404,669,380,695,380,697,380,695,381,695,407,670,379,696,379,696,380,696,380,696,380,1772,379,697,379,696,380,696,380,696,380,695,407,670,379,697,379,696,380,696,380,696,379,696,380,696,380,696,379,696,380,697,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,381,695,380,696,380,696,379,1772,380,696,380,1771,380,697,379,1772,380,1771,380,697,379,696,380}, //29C -{5042,2131,384,1768,405,670,380,695,381,696,380,1771,380,696,406,669,380,697,405,670,406,1745,406,671,379,1771,381,1772,380,696,380,1770,407,1745,407,1745,406,1746,380,1771,407,669,380,1772,380,696,405,670,383,693,380,696,405,670,406,670,406,1746,380,696,405,671,379,1771,407,670,407,669,405,670,380,1771,381,696,380,695,380,696,380,695,381,696,406,670,379,696,380,695,381,696,380,696,405,670,405,672,379,696,380,696,405,1746,380,1772,379,1773,379,697,379,696,406,1746,405,671,406,29355,5044,2129,381,1771,406,670,405,671,380,695,380,1771,381,695,381,695,380,697,388,687,380,1771,381,696,379,1771,381,1771,380,696,380,1772,380,1771,380,1772,380,1771,406,1746,407,669,380,1772,380,696,379,697,379,696,380,696,379,696,407,669,380,1772,403,672,380,696,380,1771,380,695,407,670,380,696,380,696,405,670,381,696,379,696,382,694,405,671,406,1745,380,1772,405,670,381,695,407,1745,406,1746,405,1745,381,696,380,696,379,697,380,695,406,670,380,695,406,670,380,696,380,696,380,1772,379,697,379,696,407,669,380,696,379,1772,380,696,380,696,380,695,406,670,380,695,381,695,381,696,379,697,406,669,380,696,407,669,379,696,380,696,380,696,380,695,406,671,379,697,383,691,381,696,380,1771,380,697,379,1772,384,692,406,1744,381,695,408,668,380,1772,405,1746,381,1771,380,1772,379,697,379,697,379,697,379,696,380,696,379,696,380,696,380,696,380,695,407,669,380,697,406,670,379,696,405,671,379,696,380,696,380,697,379,1772,405,671,406,669,380,696,380,695,381,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,379,696,380,697,379,696,380,696,380,696,379,695,381,696,380,696,380,696,407,669,379,696,380,696,380,696,380,696,407,1744,380,1772,380,1772,379,696,405,1746,380,1772,405,672,379,700,375}, //30C -{5043,2131,379,1772,380,696,379,697,406,670,379,1773,379,696,379,696,380,696,380,696,380,1771,380,697,379,1771,381,1771,380,696,380,1772,405,1746,380,1771,407,1746,381,1770,406,670,379,1772,406,670,380,696,380,696,379,697,379,696,380,697,405,1746,379,697,379,697,404,1747,379,697,379,697,379,696,380,1772,379,697,379,697,405,669,381,696,379,697,379,697,379,696,380,696,380,695,380,697,379,697,405,670,380,696,379,697,379,1772,380,1772,379,1772,380,696,379,698,378,1773,379,697,378,29383,5042,2131,380,1771,380,697,379,696,380,696,380,1772,379,696,380,696,403,674,378,697,379,1772,380,696,380,1772,379,1773,379,696,380,1772,379,1773,379,1772,379,1772,380,1773,378,696,380,1772,380,697,378,696,406,671,379,696,380,696,380,695,380,1772,380,696,380,696,380,1771,405,671,380,696,380,696,405,671,379,696,405,671,380,696,379,697,379,697,379,1773,379,1772,381,695,379,696,406,1746,379,1772,380,1772,379,697,379,696,380,697,378,697,379,696,380,696,380,696,379,696,407,669,405,1747,380,696,380,696,379,696,380,697,379,1772,407,668,404,672,380,696,380,696,380,696,379,697,379,697,379,697,379,696,379,696,380,697,379,697,379,697,378,697,379,697,379,696,405,672,378,697,379,697,406,670,379,1771,380,1773,405,671,379,1772,379,697,379,696,380,1773,378,1773,379,1772,379,1773,379,696,380,696,380,696,379,697,380,695,380,696,395,681,379,697,379,698,378,697,379,696,379,697,380,696,379,696,380,696,406,670,379,697,379,1772,406,670,379,697,379,697,379,696,379,697,380,695,380,697,379,696,380,695,381,696,405,671,379,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,1772,379,696,380,696,380,1772,379,1773,405,1746,379,696,380,696,380}, //31C -{5043,2131,379,1772,380,696,405,671,405,670,380,1772,380,696,379,697,405,670,380,696,407,1744,380,697,379,1772,406,1746,406,669,405,1747,405,1746,407,1745,380,1771,407,1744,381,696,380,1772,379,697,379,695,408,669,406,669,380,696,380,696,380,1772,380,695,380,696,380,1772,405,670,380,696,380,696,380,1771,406,671,405,670,406,670,380,696,405,670,406,670,407,669,380,696,405,671,379,697,405,670,380,696,380,696,404,672,379,1772,406,1745,406,1746,406,671,404,671,406,1745,407,669,405,29356,5044,2130,380,1771,407,670,405,670,380,696,380,1772,380,696,379,696,407,670,379,695,381,1772,380,695,406,1746,406,1745,380,696,380,1771,407,1745,380,1772,380,1771,406,1746,405,671,380,1771,406,670,409,667,380,695,380,696,380,697,379,696,380,1771,380,697,379,696,380,1772,380,696,379,697,379,697,379,696,380,695,406,670,406,670,380,696,406,669,381,1771,380,1772,379,697,405,670,407,1745,380,1771,406,1746,380,696,379,696,407,670,379,695,381,695,380,697,379,697,379,696,380,696,405,1747,406,669,380,696,380,696,405,670,380,1771,381,696,380,696,405,670,380,697,379,697,379,696,388,688,379,696,380,696,380,695,381,696,379,696,405,672,406,668,407,670,379,696,380,696,408,667,381,696,405,1746,406,1745,406,1747,379,696,380,1772,379,697,405,670,380,1772,405,1746,380,1771,381,1771,406,671,379,696,380,696,379,696,380,696,380,696,405,671,379,697,379,697,379,696,380,696,380,696,379,696,380,696,380,697,379,696,379,697,406,1745,380,696,380,696,380,695,380,697,379,696,380,696,405,670,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,696,379,697,379,696,380,695,381,695,380,697,405,669,381,696,380,696,379,696,380,696,380,696,380,1772,379,1773,379,695,389,1764,405,1746,406,1745,407,670,379,696,380} //32C + + {5043,2131,404,1747,379,697,379,697,379,695,407,1746,379,698,378,697,379,697,379,696,406,1745,380,697,380,1772,379,1772,379,697,379,1773,379,1772,379,1773,379,1772,406,1746,379,697,379,1772,380,695,381,696,405,670,406,671,379,696,380,697,379,1772,405,671,379,696,380,1771,407,670,379,696,380,696,380,1772,405,670,405,672,379,697,379,695,380,697,379,697,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,696,380,1772,379,1772,380,1772,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1772,380,696,405,671,379,697,405,1746,380,696,380,696,405,670,406,670,380,1772,380,696,405,1746,405,1747,405,671,379,1773,405,1746,379,1773,379,1773,379,1773,379,695,380,1772,407,669,379,697,379,696,407,670,379,696,380,696,379,1773,405,671,379,695,380,1773,379,697,405,670,380,696,380,696,405,671,379,697,379,697,379,696,380,696,379,1772,380,1772,379,696,405,671,380,1772,406,1746,380,1772,379,696,380,696,379,697,379,697,379,696,380,696,380,695,381,695,380,697,405,1746,380,696,379,697,406,670,379,697,378,1773,379,697,405,670,380,696,380,696,380,696,380,696,379,696,380,696,380,696,380,695,380,696,380,696,380,697,379,696,405,670,406,671,382,693,405,671,380,695,408,1748,401,1747,379,1773,379,696,406,670,380,695,381,697,378,1773,405,1746,379,1772,380,1772,380,696,379,696,380,697,379,697,379,696,380,697,405,670,379,696,380,696,380,697,379,696,379,697,405,671,379,696,380,696,381,695,379,697,379,1772,380,696,379,696,380,697,379,696,380,696,380,696,405,670,380,697,379,697,379,696,380,696,380,695,380,696,380,697,404,671,406,671,378,697,379,696,380,696,380,696,380,696,379,697,406,669,407,669,380,696,380,696,404,1748,379,1772,380,697,378,1773,379,1772,380,697,378,696,380,696,380}, //16C + {5043,2130,405,1747,380,696,380,696,406,670,384,1767,380,696,380,695,380,702,374,697,405,1746,407,669,405,1747,406,1745,380,696,379,1773,379,1772,380,1772,379,1772,380,1772,379,697,379,1772,380,696,406,670,405,671,406,670,379,696,406,671,379,1771,406,670,380,697,406,1745,405,671,379,697,379,696,405,1747,380,696,380,696,379,696,406,670,380,696,380,696,379,697,380,695,380,696,380,696,379,697,379,697,379,696,380,696,405,1746,406,1746,380,1772,405,671,379,696,382,1770,380,696,379,29384,5042,2130,380,1772,407,670,406,669,380,696,379,1773,379,697,406,669,380,695,381,695,385,1767,406,670,380,1777,402,1744,407,669,380,1772,379,1772,401,1750,381,1771,380,1772,406,670,380,1771,380,697,379,696,406,670,379,697,379,696,380,696,405,1747,406,670,379,696,406,1746,380,696,379,697,379,696,380,696,380,696,380,695,381,695,407,669,380,696,380,1771,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,697,379,697,404,672,378,696,380,697,405,670,380,696,380,696,379,697,380,1771,380,697,381,694,380,696,380,695,380,1775,377,696,379,696,380,696,380,696,380,696,380,696,406,669,380,697,379,696,408,668,404,672,379,697,406,669,380,695,381,696,380,695,405,672,379,696,380,696,380,696,406,669,381,696,379,1772,380,696,379,697,405,670,406,1746,380,1771,406,1746,380,1771,380,696,380,697,379,696,380,696,379,697,380,695,380,697,379,696,406,670,379,697,379,696,380,696,406,670,380,696,379,697,379,697,379,697,379,1771,380,696,380,696,380,697,379,696,380,696,379,697,379,696,380,696,405,671,379,696,380,696,407,670,405,670,407,669,379,697,405,670,380,696,380,696,405,670,381,696,379,696,380,696,380,696,405,670,406,670,380,696,380,1771,381,696,379,1771,381,1772,409,1743,379,696,380,696,406,670,379}, //17C + {5069,2104,407,1745,380,696,380,696,380,695,380,1772,380,696,380,696,379,696,380,696,380,1772,380,696,379,1772,380,1771,381,696,405,1746,380,1771,381,1771,380,1772,380,1771,380,696,380,1772,380,695,406,670,408,668,380,696,380,695,380,697,406,1745,380,696,380,696,379,1772,407,669,405,671,380,695,406,1746,380,696,405,671,380,695,380,697,380,695,380,695,381,696,379,696,380,696,380,696,406,670,380,696,388,687,380,696,380,1771,381,1771,380,1772,380,696,379,697,405,1746,380,696,380,29361,5064,2130,406,1746,380,696,379,697,405,670,380,1772,380,695,380,696,380,696,380,696,380,1771,380,696,380,1771,381,1771,380,696,406,1745,381,1771,380,1771,381,1771,380,1772,380,696,406,1745,407,669,381,694,381,696,380,695,406,670,380,696,405,1746,380,696,380,696,407,1745,407,669,405,671,379,696,380,695,381,696,380,695,380,696,380,696,406,670,406,1745,380,1772,405,671,379,696,380,1771,381,1772,380,1771,380,696,406,670,384,691,381,695,380,696,380,696,380,695,381,696,379,696,380,1772,406,669,407,669,380,696,380,696,380,1772,406,669,407,669,407,669,380,696,405,671,405,670,380,696,380,696,380,695,408,668,406,669,381,695,380,697,379,696,380,696,407,669,405,671,380,695,408,668,405,1746,381,695,380,695,381,1772,380,696,406,669,380,696,380,1771,406,1746,380,1771,381,1771,406,670,380,696,406,670,405,671,380,695,381,695,407,669,379,697,405,670,380,696,406,670,380,696,407,668,380,696,407,669,405,671,405,670,381,1771,407,673,376,696,380,695,381,695,406,670,380,696,407,669,405,670,381,695,406,670,405,671,406,670,407,668,407,669,380,696,406,670,405,671,380,695,406,670,380,696,405,670,381,696,406,668,407,670,380,695,381,695,380,1772,380,1771,408,1744,407,1745,380,1771,380,696,380,696,380,695,407}, //18C + {5069,2105,380,1771,380,696,406,670,379,697,404,1747,380,696,407,669,380,696,406,670,379,1772,380,696,406,1745,380,1772,406,670,406,1745,406,1746,406,1746,379,1773,379,1772,380,696,379,1773,404,671,380,696,386,690,405,670,405,672,404,671,379,1773,379,696,407,670,379,1771,406,671,406,669,406,670,380,1773,378,696,380,696,380,696,379,697,380,696,379,696,405,670,406,671,379,697,379,696,380,696,380,696,406,670,379,696,380,1772,380,1772,380,1771,380,696,380,695,380,1773,379,697,379,29360,5065,2130,380,1773,379,697,379,697,379,696,379,1771,381,696,380,696,405,672,378,697,379,1772,379,697,379,1772,380,1772,405,672,378,1772,380,1772,380,1771,380,1772,380,1772,379,696,407,1745,380,696,380,697,404,670,380,696,380,697,379,696,379,1773,378,697,380,697,378,1772,407,670,379,697,379,697,378,697,379,697,404,672,381,694,380,696,405,670,380,1775,377,1771,380,697,379,696,380,1772,405,1746,380,1772,380,696,379,697,404,672,379,697,405,671,379,696,379,697,379,696,380,697,379,1772,379,697,379,696,380,697,406,668,380,1772,380,697,379,696,380,696,379,697,379,696,380,697,378,697,380,696,379,696,380,697,379,696,379,697,380,696,379,698,378,697,378,697,380,695,380,696,380,697,379,696,379,1773,379,697,379,1772,379,697,379,697,379,697,379,1772,379,1773,379,1773,379,1772,379,697,379,697,404,672,405,670,379,697,379,697,379,697,378,697,406,670,379,696,380,696,380,696,380,696,379,696,380,696,406,670,379,697,379,1773,379,697,404,672,378,697,379,697,379,697,379,696,380,695,380,696,380,697,379,697,379,695,380,696,380,696,380,697,380,695,379,696,380,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,407,669,379,697,379,1772,380,696,379,696,383,693,380,695,381,1772,380,695,406,670,380}, //19C + {5087,2108,380,1772,406,670,379,696,380,696,380,1772,379,697,379,697,379,696,407,669,379,1772,380,697,379,1773,378,1772,380,696,380,1771,380,1772,380,1772,379,1772,407,1745,380,695,380,1773,379,696,380,696,379,697,379,696,406,671,379,696,407,1745,405,671,379,697,379,1772,379,697,379,696,380,697,379,1772,379,697,379,697,379,697,378,697,379,697,379,696,379,696,381,696,379,697,406,669,380,697,379,697,382,693,380,695,380,1773,378,1773,379,1772,380,696,406,671,378,1772,380,697,379,29360,5065,2130,380,1773,379,696,405,670,380,697,379,1772,380,696,380,695,380,697,379,696,406,1747,378,697,379,1773,378,1773,379,697,379,1772,405,1747,379,1772,380,1772,379,1773,379,696,380,1772,379,697,378,697,406,670,379,697,379,696,380,696,380,1771,380,696,380,696,380,1772,380,696,379,697,379,696,380,696,380,696,379,697,379,697,379,697,379,696,379,1773,379,1773,404,671,379,697,379,1772,405,1747,380,1771,380,696,380,697,384,692,378,697,379,697,379,697,379,696,379,697,379,697,379,1772,379,697,379,697,379,696,380,696,380,1772,379,696,380,696,380,697,378,697,379,697,379,697,379,697,378,697,405,671,379,698,378,697,379,696,379,696,380,697,379,697,379,696,379,697,379,697,379,697,379,1772,379,1773,379,697,404,1747,379,697,379,696,379,698,404,1747,379,1773,378,1772,380,1773,379,697,433,643,379,696,379,697,379,696,380,696,379,696,380,697,379,697,379,696,379,697,405,671,379,696,380,697,383,693,404,671,379,697,379,1777,375,697,378,697,405,671,379,697,379,697,403,672,379,696,380,697,379,696,379,697,379,697,379,697,379,697,379,696,406,670,379,697,379,696,380,697,378,698,379,696,379,697,379,697,379,697,378,697,379,697,379,696,380,1772,379,1773,379,697,378,697,379,697,379,1772,380,697,379,696,380}, //20C + {5043,2130,407,1745,407,669,379,696,381,695,405,1747,380,695,406,670,406,670,380,696,406,1745,380,697,405,1745,406,1746,406,670,406,1746,405,1746,406,1745,407,1745,407,1745,390,686,380,1772,405,670,406,670,380,695,380,696,380,697,405,670,406,1745,408,668,405,670,407,1745,393,683,406,670,380,696,406,1745,380,696,406,670,405,670,381,696,379,696,380,696,406,669,408,669,406,670,379,696,380,697,379,696,406,670,405,670,384,1768,406,1746,380,1770,407,670,405,670,406,1746,380,696,405,29336,5064,2130,380,1772,406,670,405,671,395,680,380,1772,406,670,380,696,380,696,379,696,380,1772,405,671,406,1746,379,1772,379,696,380,1771,381,1772,405,1746,380,1771,380,1772,380,697,405,1745,380,696,380,696,380,696,380,696,407,669,379,696,380,1771,381,695,380,696,380,1771,380,696,380,697,379,696,380,696,405,671,379,697,379,696,380,696,406,669,380,1772,406,1746,382,694,405,671,379,1772,380,1771,381,1771,380,697,405,669,381,695,405,672,405,671,379,696,405,671,405,670,380,696,380,1771,381,696,379,695,381,696,380,695,380,1773,405,670,380,696,406,669,407,670,379,696,380,696,380,696,380,696,379,696,380,696,380,697,405,670,406,669,406,671,379,695,381,696,380,696,379,697,379,696,380,696,380,695,380,1771,381,1771,406,671,379,696,380,696,380,1771,380,1772,380,1771,380,1772,380,696,405,670,381,696,405,670,380,697,406,669,380,695,381,695,380,697,379,696,380,696,379,697,379,697,406,669,407,668,381,696,405,670,380,1772,380,696,380,696,379,697,405,670,380,696,379,697,379,696,380,696,380,696,380,696,404,672,379,697,406,669,380,695,407,670,379,696,406,670,380,695,381,696,384,692,404,671,407,669,380,695,406,671,405,670,380,696,380,1771,380,696,407,1745,380,696,379,697,405,1746,380,696,407,669,405}, //21C + {5042,2131,379,1773,378,699,377,697,402,674,379,1773,381,694,379,698,378,697,379,697,379,1772,406,670,379,1772,379,1773,379,697,379,1772,379,1773,378,1774,378,1774,378,1772,380,697,378,1773,379,698,378,697,379,697,379,697,378,698,405,670,379,1772,379,698,378,697,379,1773,378,698,378,697,379,697,379,1773,405,670,379,697,379,697,379,697,379,697,378,697,379,697,379,697,405,670,380,697,378,697,379,696,380,697,378,698,378,1774,378,1772,405,1748,378,697,379,697,378,1773,380,697,378,29362,5090,2103,381,1771,380,696,380,696,384,691,381,1771,380,696,405,671,380,696,379,696,380,1772,384,691,381,1771,406,1745,407,669,406,1746,407,1744,407,1745,406,1746,406,1745,406,669,407,1745,407,670,404,671,407,669,405,670,381,695,406,670,406,1746,405,670,380,696,380,1772,380,695,407,669,406,670,406,670,405,671,406,669,406,670,384,692,380,695,381,1770,406,1746,380,696,380,697,406,1744,407,1745,406,1746,406,670,379,696,398,678,379,698,377,698,378,697,379,697,378,698,378,698,377,1774,377,699,351,726,349,726,350,726,349,1802,349,728,348,731,344,728,348,728,347,729,371,704,372,705,372,702,373,704,373,702,373,703,373,702,374,702,373,703,373,703,374,701,374,703,373,702,373,703,373,1778,374,702,373,1778,373,1779,373,703,372,704,371,706,369,1781,371,1780,347,1805,347,1804,347,730,346,729,347,729,347,731,345,728,348,728,347,729,347,729,347,728,373,703,373,703,373,703,374,701,374,702,374,702,375,701,375,700,376,1776,376,700,376,699,377,699,377,699,377,698,378,698,377,698,384,693,377,698,378,697,405,671,389,692,374,697,404,672,404,671,404,672,404,672,403,673,403,672,378,698,404,672,403,673,403,673,377,698,403,673,403,673,403,1748,403,1749,402,1749,377,699,402,674,377,1775,401,675,376,699,376}, //22C + {5043,2131,379,1772,380,697,379,697,378,697,379,1772,380,697,378,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,698,378,1772,406,1746,379,1772,380,1772,379,1772,380,697,379,1772,379,698,378,698,378,697,379,697,379,696,379,697,379,1772,380,696,380,697,382,1768,380,697,379,696,379,697,379,1772,380,696,406,670,380,695,380,697,379,696,380,696,379,696,380,697,379,696,379,696,381,696,379,697,379,697,379,696,379,1772,380,1773,379,1773,404,671,379,697,379,1773,378,696,380,29382,5043,2131,404,1748,379,696,380,697,379,696,405,1746,380,696,379,697,379,697,379,697,379,1772,379,697,379,1772,380,1772,379,697,379,1772,380,1772,379,1773,379,1772,379,1772,380,696,380,1772,379,697,379,696,380,697,379,697,379,695,380,697,379,1771,381,696,406,669,380,1772,379,698,378,697,379,697,379,697,379,696,379,697,379,697,379,696,380,695,380,1773,379,1771,381,695,381,696,379,1772,380,1772,379,1773,378,697,380,697,378,697,379,696,380,697,379,696,379,697,379,697,379,697,379,1772,379,697,379,697,379,697,379,697,378,1773,379,696,379,697,406,671,378,697,379,697,379,696,380,697,378,697,379,697,379,697,379,696,379,697,379,696,380,696,380,697,378,698,378,697,379,696,380,696,380,696,380,1772,379,1773,379,1773,404,671,379,696,380,697,378,1773,379,1772,380,1772,379,1772,380,695,381,696,405,671,379,697,379,696,380,696,380,696,379,697,379,696,379,697,379,698,378,697,378,697,380,697,378,697,379,697,379,697,379,1772,379,698,378,697,379,697,378,698,379,696,379,698,378,697,379,696,406,671,379,697,378,697,379,697,379,697,379,696,379,696,380,697,379,697,378,697,379,696,380,697,379,696,380,696,380,696,379,697,380,696,379,697,379,1771,380,696,380,697,379,1772,379,697,379,1772,407,670,379,696,405}, //23C + {5034,2137,375,1778,398,679,397,677,373,703,373,1780,373,703,371,703,372,706,397,705,345,1779,373,705,369,1807,344,1781,399,678,370,1781,397,1754,371,1781,380,1770,372,1808,344,706,370,1780,371,707,368,733,343,733,371,678,371,703,372,732,370,1781,370,705,346,731,369,1759,368,731,370,706,344,732,344,1808,343,732,344,707,394,707,345,731,370,680,396,705,344,732,343,706,370,733,370,679,370,706,370,733,343,731,345,731,371,1781,344,1808,342,1783,394,709,342,733,343,1808,344,732,344,29393,5032,2140,397,1781,343,709,368,732,342,734,341,1810,343,733,341,735,343,733,367,710,340,1839,311,735,344,1781,369,1810,342,733,370,1783,365,1785,343,1811,341,1809,336,1789,368,735,341,1809,342,734,341,737,367,708,368,708,341,735,342,732,369,1784,341,734,340,736,342,1810,339,737,368,706,343,734,342,732,342,735,343,733,342,734,340,735,342,735,342,1808,343,1808,370,710,341,704,372,1807,342,1810,371,1780,345,704,371,732,343,733,344,731,345,731,342,734,371,677,372,731,343,733,370,1754,398,679,371,703,372,704,372,704,373,1778,372,703,374,703,399,676,373,704,397,678,372,703,403,673,374,702,400,675,399,677,400,676,400,675,399,677,401,675,427,649,374,701,401,675,401,674,402,675,402,1750,401,1750,401,1751,404,1747,403,674,401,673,376,700,402,1750,401,1750,375,1777,375,1777,374,701,375,701,403,673,402,673,402,674,404,672,376,700,403,673,403,672,403,673,405,671,403,672,406,670,377,699,376,699,404,672,377,699,433,1719,404,672,403,673,375,700,404,672,404,672,406,670,402,673,405,671,405,671,403,672,433,643,430,647,402,673,406,669,406,671,404,671,406,670,406,670,404,671,379,698,433,642,403,673,402,674,377,698,378,698,404,672,403,1748,406,1746,403,673,406,1745,377,700,377,1774,406,670,377,698,405}, //24C + {5069,2103,406,1746,406,669,407,669,407,669,380,1772,407,668,381,696,380,695,380,696,380,1771,406,670,381,1771,406,1745,380,696,385,1767,380,1771,381,1771,406,1745,381,1771,407,669,406,1745,380,696,406,670,380,696,406,670,406,670,381,694,407,1745,400,676,405,671,405,1746,380,696,380,695,407,670,379,1772,407,668,381,696,379,696,407,670,406,669,380,696,380,696,406,672,402,671,384,692,407,669,382,694,405,670,406,669,407,1745,406,1746,380,1772,405,670,406,670,380,1772,380,695,380,29383,5043,2130,407,1744,406,671,379,696,407,668,381,1772,380,696,379,697,406,669,380,696,380,1772,405,670,406,1746,405,1747,379,697,404,1746,406,1746,380,1772,380,1771,380,1772,380,696,380,1771,406,671,405,671,379,695,380,697,379,697,405,670,380,1772,379,696,380,697,404,1747,380,695,380,696,406,670,380,696,405,671,407,669,405,670,380,695,380,696,380,1772,405,1747,405,671,406,669,380,1772,406,1750,375,1772,406,670,405,670,380,696,406,670,380,696,380,695,380,697,379,696,380,696,406,1746,405,670,407,670,379,696,406,669,380,1772,380,696,406,671,404,670,380,696,380,696,380,696,386,690,379,696,407,670,405,670,380,695,406,670,380,696,396,680,380,696,380,696,405,671,405,670,380,696,380,696,405,670,380,696,380,696,380,1771,380,696,380,696,405,1747,379,1772,380,1771,407,1745,380,696,380,696,380,696,407,668,407,669,380,696,406,670,405,670,380,696,380,696,380,696,406,673,402,670,380,696,405,671,406,670,380,695,380,1772,406,670,405,671,380,695,380,696,380,696,405,671,379,697,407,668,380,696,393,683,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,695,380,697,379,696,380,696,380,696,379,697,379,696,380,696,380,1772,380,695,406,1746,380,1771,380,697,379,1772,380,696,379,697,379}, //2C5C + {5043,2131,380,1772,379,696,380,696,379,698,378,1772,380,696,380,696,379,697,379,696,380,1772,379,697,379,1773,379,1772,380,696,379,1772,388,1763,381,1771,380,1772,379,1773,379,697,379,1772,379,697,405,670,380,696,380,696,405,671,380,696,383,1768,380,696,380,696,379,1772,380,696,379,697,379,697,379,1772,407,669,380,696,379,696,380,696,407,670,378,697,379,697,380,695,379,697,379,697,379,697,405,671,379,697,379,696,379,1773,379,1772,379,1773,379,696,380,697,379,1772,379,697,379,29383,5043,2130,380,1771,380,696,379,697,379,697,379,1772,380,696,379,697,380,696,379,697,379,1772,379,696,380,1772,380,1772,379,697,379,1772,379,1773,380,1771,380,1772,380,1771,381,695,379,1772,406,670,380,696,380,695,380,697,379,697,379,697,403,1748,379,697,380,696,406,1745,378,698,380,696,379,696,380,697,404,670,381,696,379,697,379,696,380,696,379,1772,380,1772,380,696,379,697,379,1772,407,1745,380,1771,380,696,406,669,407,669,381,695,380,695,381,696,405,671,379,696,380,696,406,1746,380,695,406,671,379,695,381,695,381,1771,381,695,380,695,380,697,380,695,380,696,380,696,380,695,381,695,380,696,380,696,406,670,380,695,407,669,381,695,402,674,380,696,406,669,381,696,405,670,380,1771,406,669,382,695,406,670,380,1771,381,695,380,695,407,1745,380,1771,407,1745,406,1746,380,695,381,695,406,670,406,669,381,696,406,669,380,696,407,669,406,669,407,669,406,670,407,669,405,670,381,695,406,670,407,669,406,670,406,1745,406,670,379,697,380,695,381,695,406,670,380,696,393,682,380,696,380,696,380,696,380,696,404,671,380,696,382,694,379,697,379,696,380,696,405,671,379,697,379,696,380,696,379,697,378,698,377,699,378,698,377,699,376,1775,350,1802,350,1801,350,1801,350,726,349,1803,349,727,374,702,372}, //26C + {5039,2132,379,1772,379,697,379,696,379,697,379,1772,379,697,379,697,379,696,380,696,379,1773,379,697,379,1772,379,1772,380,697,379,1772,379,1773,379,1772,379,1773,379,1772,380,696,380,1772,379,696,380,696,380,696,380,696,380,696,379,696,380,1772,379,697,379,697,379,1772,380,696,379,697,379,697,379,1772,380,696,379,696,380,696,379,697,380,695,380,696,380,696,379,696,380,696,380,696,380,695,381,696,379,696,380,696,379,1772,380,1771,380,1772,380,696,379,697,379,1772,379,697,379,29381,5042,2131,379,1773,378,697,433,643,432,644,378,1773,432,644,433,642,434,643,431,644,379,1772,435,641,433,1719,432,1719,433,643,434,1717,433,1719,433,1718,379,1773,433,1718,378,698,378,1773,379,698,432,644,431,644,432,644,433,643,433,642,433,1718,432,644,432,644,432,1719,433,643,433,643,432,644,434,642,433,642,432,644,434,642,431,645,433,643,401,1749,434,1718,432,644,430,646,432,1719,378,1773,432,1720,433,642,432,644,433,643,433,643,432,644,433,643,431,644,378,698,432,644,432,1719,432,643,462,614,379,697,433,643,433,1718,434,642,378,698,433,643,432,643,433,643,433,643,432,644,431,644,433,643,433,643,378,698,431,645,433,642,378,698,432,644,432,643,432,645,432,643,433,642,404,673,432,1719,433,643,432,643,432,1719,434,643,432,644,432,1719,378,1773,379,1773,378,1773,379,697,433,643,434,642,431,644,432,644,433,643,433,642,430,646,379,697,432,644,432,643,434,642,433,643,432,644,432,643,434,642,431,644,433,1719,433,643,378,699,431,644,432,643,433,644,429,645,434,642,432,644,433,643,433,643,431,645,434,641,432,644,431,645,378,698,432,643,433,642,434,642,433,643,379,697,433,642,434,643,432,643,432,644,431,645,431,645,431,1720,432,643,433,643,433,643,431,1720,379,1773,433,643,431,645,430}, //27C + {5043,2130,405,1746,381,695,380,696,380,696,380,1771,380,697,379,696,380,696,380,695,380,1772,380,696,405,1747,379,1772,380,695,381,1771,406,1745,381,1772,379,1772,380,1771,380,697,379,1772,380,695,381,696,379,696,409,668,379,696,380,695,407,1745,405,672,379,696,380,1771,380,696,380,696,380,695,381,1771,380,697,404,671,380,696,380,695,380,696,380,695,381,696,380,696,379,696,380,696,380,695,381,695,380,697,379,696,380,1771,381,1771,380,1772,379,697,379,696,380,1771,381,696,405,29356,5044,2130,380,1771,381,695,380,695,381,696,380,1772,405,670,380,695,381,696,379,696,380,1771,435,642,380,1771,380,1772,380,696,379,1772,380,1771,381,1772,404,1746,381,1772,380,696,379,1772,380,696,380,696,379,696,380,695,381,696,380,695,381,1771,380,696,380,695,406,1745,381,696,380,695,381,696,379,696,380,696,380,696,380,696,379,697,379,695,381,1772,380,1771,380,696,380,696,380,1772,379,1772,380,1771,380,697,379,696,380,695,381,695,406,670,407,669,380,696,380,696,380,695,380,1772,380,695,381,696,379,697,379,696,380,1772,380,696,380,695,380,696,380,697,379,695,380,697,379,696,380,695,408,669,380,696,379,696,380,696,380,696,379,697,379,696,380,696,380,696,380,696,379,696,380,1771,381,1771,380,697,379,696,380,1771,380,696,406,670,380,1771,380,1772,380,1772,380,1771,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,695,380,696,380,696,380,696,380,695,381,696,379,696,380,696,380,696,380,695,380,1771,381,696,406,669,380,697,379,696,380,696,380,695,381,696,379,696,380,696,407,669,380,696,380,695,380,696,405,671,380,696,435,640,380,695,381,696,380,695,380,696,380,696,380,696,406,669,381,695,380,697,379,696,380,1771,380,1772,380,696,432,644,380,1770,381,1771,381,694,381,696,380}, //28C + {5070,2104,407,1745,379,696,379,697,379,697,378,1774,378,698,378,696,407,671,377,697,434,1719,378,697,379,1773,379,1772,378,698,379,1773,378,1773,379,1772,379,1773,379,1772,379,698,378,1773,379,697,379,697,378,698,378,697,379,697,379,697,378,1773,380,696,378,699,378,1772,379,697,379,697,379,697,379,1772,379,697,379,697,378,697,379,698,378,697,378,698,378,697,379,697,379,697,379,697,379,696,380,697,379,697,378,696,380,1772,380,1772,405,1746,406,670,380,696,380,1772,406,669,380,29383,5042,2131,379,1772,380,696,405,671,380,695,381,1771,380,696,380,696,379,696,406,670,380,1772,405,670,381,1771,406,1746,380,695,380,1772,380,1772,405,1746,380,1771,380,1772,380,695,381,1771,380,697,378,697,380,696,379,696,381,696,379,696,380,1771,381,696,379,696,380,1772,379,697,379,696,380,696,406,670,380,696,379,696,380,696,380,696,379,697,406,1745,380,1771,380,697,379,700,376,1772,380,1771,380,1772,406,670,380,696,379,696,380,696,380,696,406,669,381,696,379,696,407,669,380,1771,381,695,380,696,379,697,380,696,379,1772,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,695,380,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,380,696,380,696,380,696,379,1772,380,695,380,1772,380,696,380,696,379,1772,380,1772,380,1772,379,1772,380,696,405,671,405,670,406,670,380,696,380,696,379,699,404,669,380,695,380,697,380,695,381,695,407,670,379,696,379,696,380,696,380,696,380,1772,379,697,379,696,380,696,380,696,380,695,407,670,379,697,379,696,380,696,380,696,379,696,380,696,380,696,379,696,380,697,379,696,380,696,380,695,380,696,380,696,380,696,380,695,380,696,381,695,380,696,380,696,379,1772,380,696,380,1771,380,697,379,1772,380,1771,380,697,379,696,380}, //29C + {5042,2131,384,1768,405,670,380,695,381,696,380,1771,380,696,406,669,380,697,405,670,406,1745,406,671,379,1771,381,1772,380,696,380,1770,407,1745,407,1745,406,1746,380,1771,407,669,380,1772,380,696,405,670,383,693,380,696,405,670,406,670,406,1746,380,696,405,671,379,1771,407,670,407,669,405,670,380,1771,381,696,380,695,380,696,380,695,381,696,406,670,379,696,380,695,381,696,380,696,405,670,405,672,379,696,380,696,405,1746,380,1772,379,1773,379,697,379,696,406,1746,405,671,406,29355,5044,2129,381,1771,406,670,405,671,380,695,380,1771,381,695,381,695,380,697,388,687,380,1771,381,696,379,1771,381,1771,380,696,380,1772,380,1771,380,1772,380,1771,406,1746,407,669,380,1772,380,696,379,697,379,696,380,696,379,696,407,669,380,1772,403,672,380,696,380,1771,380,695,407,670,380,696,380,696,405,670,381,696,379,696,382,694,405,671,406,1745,380,1772,405,670,381,695,407,1745,406,1746,405,1745,381,696,380,696,379,697,380,695,406,670,380,695,406,670,380,696,380,696,380,1772,379,697,379,696,407,669,380,696,379,1772,380,696,380,696,380,695,406,670,380,695,381,695,381,696,379,697,406,669,380,696,407,669,379,696,380,696,380,696,380,695,406,671,379,697,383,691,381,696,380,1771,380,697,379,1772,384,692,406,1744,381,695,408,668,380,1772,405,1746,381,1771,380,1772,379,697,379,697,379,697,379,696,380,696,379,696,380,696,380,696,380,695,407,669,380,697,406,670,379,696,405,671,379,696,380,696,380,697,379,1772,405,671,406,669,380,696,380,695,381,695,380,696,380,696,380,696,380,695,380,696,380,696,380,696,379,696,380,697,379,696,380,696,380,696,379,695,381,696,380,696,380,696,407,669,379,696,380,696,380,696,380,696,407,1744,380,1772,380,1772,379,696,405,1746,380,1772,405,672,379,700,375}, //30C + {5043,2131,379,1772,380,696,379,697,406,670,379,1773,379,696,379,696,380,696,380,696,380,1771,380,697,379,1771,381,1771,380,696,380,1772,405,1746,380,1771,407,1746,381,1770,406,670,379,1772,406,670,380,696,380,696,379,697,379,696,380,697,405,1746,379,697,379,697,404,1747,379,697,379,697,379,696,380,1772,379,697,379,697,405,669,381,696,379,697,379,697,379,696,380,696,380,695,380,697,379,697,405,670,380,696,379,697,379,1772,380,1772,379,1772,380,696,379,698,378,1773,379,697,378,29383,5042,2131,380,1771,380,697,379,696,380,696,380,1772,379,696,380,696,403,674,378,697,379,1772,380,696,380,1772,379,1773,379,696,380,1772,379,1773,379,1772,379,1772,380,1773,378,696,380,1772,380,697,378,696,406,671,379,696,380,696,380,695,380,1772,380,696,380,696,380,1771,405,671,380,696,380,696,405,671,379,696,405,671,380,696,379,697,379,697,379,1773,379,1772,381,695,379,696,406,1746,379,1772,380,1772,379,697,379,696,380,697,378,697,379,696,380,696,380,696,379,696,407,669,405,1747,380,696,380,696,379,696,380,697,379,1772,407,668,404,672,380,696,380,696,380,696,379,697,379,697,379,697,379,696,379,696,380,697,379,697,379,697,378,697,379,697,379,696,405,672,378,697,379,697,406,670,379,1771,380,1773,405,671,379,1772,379,697,379,696,380,1773,378,1773,379,1772,379,1773,379,696,380,696,380,696,379,697,380,695,380,696,395,681,379,697,379,698,378,697,379,696,379,697,380,696,379,696,380,696,406,670,379,697,379,1772,406,670,379,697,379,697,379,696,379,697,380,695,380,697,379,696,380,695,381,696,405,671,379,696,380,696,380,695,380,697,379,696,380,696,380,696,380,696,379,696,380,696,379,697,380,696,379,696,380,696,380,696,380,1772,379,696,380,696,380,1772,379,1773,405,1746,379,696,380,696,380}, //31C + {5043,2131,379,1772,380,696,405,671,405,670,380,1772,380,696,379,697,405,670,380,696,407,1744,380,697,379,1772,406,1746,406,669,405,1747,405,1746,407,1745,380,1771,407,1744,381,696,380,1772,379,697,379,695,408,669,406,669,380,696,380,696,380,1772,380,695,380,696,380,1772,405,670,380,696,380,696,380,1771,406,671,405,670,406,670,380,696,405,670,406,670,407,669,380,696,405,671,379,697,405,670,380,696,380,696,404,672,379,1772,406,1745,406,1746,406,671,404,671,406,1745,407,669,405,29356,5044,2130,380,1771,407,670,405,670,380,696,380,1772,380,696,379,696,407,670,379,695,381,1772,380,695,406,1746,406,1745,380,696,380,1771,407,1745,380,1772,380,1771,406,1746,405,671,380,1771,406,670,409,667,380,695,380,696,380,697,379,696,380,1771,380,697,379,696,380,1772,380,696,379,697,379,697,379,696,380,695,406,670,406,670,380,696,406,669,381,1771,380,1772,379,697,405,670,407,1745,380,1771,406,1746,380,696,379,696,407,670,379,695,381,695,380,697,379,697,379,696,380,696,405,1747,406,669,380,696,380,696,405,670,380,1771,381,696,380,696,405,670,380,697,379,697,379,696,388,688,379,696,380,696,380,695,381,696,379,696,405,672,406,668,407,670,379,696,380,696,408,667,381,696,405,1746,406,1745,406,1747,379,696,380,1772,379,697,405,670,380,1772,405,1746,380,1771,381,1771,406,671,379,696,380,696,379,696,380,696,380,696,405,671,379,697,379,697,379,696,380,696,380,696,379,696,380,696,380,697,379,696,379,697,406,1745,380,696,380,696,380,695,380,697,379,696,380,696,405,670,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,696,379,697,379,696,380,695,381,695,380,697,405,669,381,696,380,696,379,696,380,696,380,696,380,1772,379,1773,379,695,389,1764,405,1746,406,1745,407,670,379,696,380} //32C }, // Fan Speed High { @@ -84,24 +84,24 @@ const uint16_t ir_code_cool[4][17][407] = { }}; -const uint16_t ir_code_fan[4][407] = { +const uint16_t ir_code_fan_daikin[4][407] = { {5069,2104,406,1746,407,668,408,669,405,670,407,1745,407,668,381,695,381,695,406,670,380,1772,379,696,406,1745,381,1771,380,696,380,1772,379,1772,381,1770,406,1746,407,1745,380,696,406,1745,381,695,380,696,380,696,406,669,407,669,380,696,406,1746,402,673,380,696,406,1746,380,695,407,669,380,696,406,1745,406,670,407,670,379,696,406,670,380,695,407,669,406,669,408,669,406,670,380,695,380,696,407,669,380,695,405,671,407,1745,406,1746,379,1772,380,696,406,670,379,1772,380,696,380,29383,5068,2105,380,1771,407,669,380,696,406,669,380,1772,380,696,380,696,380,695,381,695,380,1771,381,696,380,1771,406,1745,381,695,381,1771,405,1747,379,1772,405,1747,380,1771,395,681,406,1745,381,695,407,669,407,669,380,696,379,696,407,669,380,1771,407,669,406,670,380,1772,406,669,381,695,406,670,380,695,381,695,407,669,407,669,380,696,406,670,380,1771,406,1746,405,670,381,696,405,670,405,1747,380,1771,406,669,408,669,407,668,407,669,380,696,380,696,380,695,380,696,381,695,380,1771,407,669,381,696,406,669,406,670,380,695,381,695,407,669,406,669,381,696,405,670,381,695,380,696,380,696,407,669,405,670,407,669,383,693,407,669,379,696,380,696,406,670,406,669,407,669,381,695,407,669,405,670,380,696,381,696,404,670,381,696,380,695,381,1771,406,1745,381,1770,408,1745,380,695,381,695,380,696,380,696,407,669,406,670,380,695,380,696,380,696,405,671,380,695,407,669,380,695,381,695,381,695,380,696,380,696,406,1745,407,669,380,696,380,696,406,669,381,695,380,696,380,695,406,670,406,670,406,670,380,696,405,670,381,695,380,696,380,696,407,669,380,695,406,670,407,669,407,669,380,695,381,696,406,669,407,669,380,696,380,695,406,1746,406,670,406,1745,406,1745,407,1745,381,695,381,1771,380,1771,407}, //AUTO {5043,2130,380,1772,380,696,380,696,379,697,379,1771,381,695,381,696,379,696,406,670,380,1771,381,696,379,1771,381,1771,380,696,380,1771,381,1771,380,1772,380,1772,380,1771,380,696,380,1771,381,694,381,696,380,696,380,695,381,695,380,696,380,1772,380,695,380,697,379,1772,380,695,381,695,381,695,380,1772,380,696,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,381,696,380,696,380,696,379,695,381,695,381,1771,380,1771,381,1771,380,697,379,696,380,1771,381,694,381,29382,5044,2130,380,1771,380,697,379,696,380,696,380,1770,381,696,436,640,380,696,380,696,380,1770,381,695,407,1746,379,1771,381,696,380,1771,380,1772,380,1770,381,1772,380,1772,380,696,380,1771,380,696,380,696,380,696,380,697,378,695,381,696,380,1772,379,697,379,696,380,1772,380,696,379,696,380,696,380,696,380,696,379,696,380,696,380,695,381,695,380,1771,381,1772,380,695,380,696,380,696,380,1772,379,1772,380,696,380,696,380,696,379,696,380,696,380,696,380,696,379,696,381,695,380,1771,381,695,380,696,380,696,380,695,381,695,381,695,380,696,380,696,380,695,381,695,380,695,381,696,380,696,380,695,381,696,379,697,379,696,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,697,379,696,380,696,380,695,381,696,379,695,381,696,380,1771,380,1772,380,1772,379,1772,380,1772,380,696,379,1772,380,696,380,696,380,696,379,696,409,667,380,695,381,695,380,696,380,696,380,696,380,695,381,695,380,696,380,696,380,1771,380,696,380,696,406,669,381,695,380,696,380,695,381,696,380,696,379,696,380,696,380,696,379,696,406,671,379,696,405,671,380,696,380,695,380,696,380,697,379,696,380,695,380,696,380,696,380,696,380,696,379,697,407,1743,407,669,380,1772,407,1744,409,668,405,1746,406,670,380,695,380}, //HIGH {5069,2105,405,1746,381,695,380,695,381,696,407,1745,379,696,380,696,380,696,380,696,380,1771,380,697,379,1771,406,1745,407,669,381,1771,380,1772,405,1746,380,1772,380,1772,379,696,380,1772,379,696,407,669,380,695,381,696,380,696,379,696,380,1771,381,696,380,695,380,1772,380,696,380,695,405,672,379,1771,381,695,380,695,407,670,380,696,404,670,381,696,380,696,380,697,404,670,406,670,380,696,406,669,381,696,380,695,380,1771,381,1772,379,1771,381,695,381,695,407,1744,381,695,381,29381,5069,2104,380,1772,380,696,406,670,380,696,379,1772,380,695,406,670,380,696,380,696,380,1772,406,668,406,1746,381,1771,380,696,380,1772,379,1772,380,1771,381,1771,406,1746,406,670,379,1772,380,695,407,669,380,696,380,696,380,696,405,671,379,1772,380,696,380,696,406,1745,380,696,405,671,404,671,380,696,380,696,405,671,380,695,407,669,380,696,380,1771,380,1772,380,695,381,694,407,670,380,1771,381,1771,380,696,406,669,407,669,406,670,380,696,380,696,380,695,406,671,406,669,380,1771,380,696,380,696,380,696,406,670,405,671,379,697,379,697,379,695,406,670,407,669,380,696,380,696,379,696,380,696,380,695,381,695,407,670,379,696,380,696,406,669,406,670,380,696,380,696,380,696,380,695,406,671,405,670,406,669,381,696,379,697,405,670,405,1747,379,1772,405,1746,406,1746,380,1771,395,1757,380,696,380,697,379,695,407,669,380,696,405,671,380,695,380,696,380,696,406,670,406,670,405,670,380,696,408,668,404,671,381,1771,380,697,394,680,380,696,406,670,380,696,380,696,407,668,407,669,380,696,380,695,380,696,380,696,405,671,380,695,381,696,406,669,380,697,379,696,379,696,380,696,380,697,379,696,406,669,408,668,380,695,381,695,380,1772,380,696,380,1772,379,1772,406,670,405,670,381,695,380,696,380}, //MID {5039,2131,406,1745,380,696,379,697,378,698,378,1772,380,697,379,697,379,696,379,697,404,1748,378,698,379,1771,380,1772,379,698,378,1772,380,1772,379,1773,379,1772,383,1768,380,697,379,1772,379,697,379,696,380,697,379,696,406,671,378,696,380,1773,378,697,379,698,378,1772,379,698,379,696,379,697,379,1772,380,696,379,697,379,697,406,669,380,696,379,697,379,696,380,696,380,696,379,697,379,697,379,696,379,697,380,696,379,1773,379,1772,379,1772,406,670,405,671,379,1772,380,696,380,29382,5043,2130,379,1773,405,670,380,695,381,696,379,1772,379,697,380,696,379,697,379,697,379,1772,405,671,379,1772,380,1771,380,697,379,1772,380,1772,379,1773,379,1772,379,1773,379,696,405,1746,382,694,380,696,379,696,380,696,380,696,380,695,381,1772,379,696,380,696,379,1773,379,696,380,696,380,696,405,671,379,696,380,696,380,696,406,671,378,697,379,1772,380,1772,379,696,380,696,380,696,405,1746,380,1772,379,697,379,697,379,697,379,696,380,696,379,697,379,697,379,696,380,696,379,1773,379,696,379,698,378,696,406,671,379,696,380,696,379,697,379,697,405,670,380,696,379,697,379,697,379,697,406,670,404,671,379,697,378,697,380,696,379,697,379,697,379,696,380,697,379,696,380,696,379,697,379,695,380,697,405,671,379,696,380,696,379,697,379,1773,379,1772,379,1772,380,1772,379,1773,379,696,380,696,379,697,379,697,379,696,380,696,405,671,379,697,379,696,380,696,379,697,379,697,404,672,379,696,379,698,379,696,379,1772,380,696,380,696,379,698,404,670,380,696,379,696,380,697,379,696,379,697,379,697,380,696,379,696,380,697,405,670,405,671,379,697,379,696,380,696,379,696,380,697,378,698,379,697,378,697,379,697,379,696,405,671,379,1772,380,697,379,1772,379,1772,380,696,380,1771,380,1772,379,1773,379} //LOW }; -const uint16_t ir_code_off[407] = {5044,2129,408,1744,406,670,380,697,404,671,405,1746,380,696,405,671,406,670,405,671,405,1746,406,670,405,1747,406,1745,406,670,405,1746,405,1746,407,1745,405,1746,406,1746,380,696,380,1771,380,696,405,671,380,695,406,670,407,670,379,696,407,1744,380,696,380,695,407,1746,405,670,406,670,405,671,406,1744,381,696,406,669,405,671,380,696,405,671,406,670,405,670,380,696,407,669,405,670,407,668,381,696,406,670,405,670,406,1746,407,1744,406,1745,381,696,405,670,407,1745,406,669,407,29355,5069,2104,406,1745,380,696,380,696,380,696,380,1771,406,670,379,697,406,669,405,671,406,1745,381,695,380,1772,405,1746,407,669,380,1771,407,1745,406,1745,434,1718,406,1745,381,695,380,1771,381,695,406,670,406,670,406,670,405,671,379,696,403,1749,406,670,406,669,407,1745,405,671,410,664,406,671,407,669,405,670,380,696,406,670,406,670,406,669,407,1745,380,1772,405,670,380,696,380,1771,380,1772,380,1772,405,670,407,669,406,670,380,695,380,696,405,671,406,670,379,696,407,669,406,671,405,669,380,696,380,696,406,669,408,1744,381,695,406,670,406,669,381,695,381,695,380,696,380,696,405,671,405,672,378,696,406,670,380,696,379,696,406,670,406,669,389,687,380,696,380,696,380,695,406,1746,407,669,380,1771,406,670,380,1772,405,670,407,669,406,1745,407,1745,380,1771,380,1771,381,1771,381,1771,380,696,406,669,407,669,405,671,380,695,406,670,380,696,405,670,381,696,380,696,379,696,405,671,380,695,381,695,381,695,380,1772,379,697,379,696,406,670,380,695,406,671,405,670,382,693,408,668,406,670,380,696,406,670,380,695,382,695,404,671,406,670,406,669,380,699,377,696,380,695,407,669,380,696,380,696,380,696,406,670,380,695,380,696,380,696,406,1744,381,1771,407,669,380,696,380,1771,381,1771,381,694,406}; +const uint16_t ir_code_off_daikin[407] = {5044,2129,408,1744,406,670,380,697,404,671,405,1746,380,696,405,671,406,670,405,671,405,1746,406,670,405,1747,406,1745,406,670,405,1746,405,1746,407,1745,405,1746,406,1746,380,696,380,1771,380,696,405,671,380,695,406,670,407,670,379,696,407,1744,380,696,380,695,407,1746,405,670,406,670,405,671,406,1744,381,696,406,669,405,671,380,696,405,671,406,670,405,670,380,696,407,669,405,670,407,668,381,696,406,670,405,670,406,1746,407,1744,406,1745,381,696,405,670,407,1745,406,669,407,29355,5069,2104,406,1745,380,696,380,696,380,696,380,1771,406,670,379,697,406,669,405,671,406,1745,381,695,380,1772,405,1746,407,669,380,1771,407,1745,406,1745,434,1718,406,1745,381,695,380,1771,381,695,406,670,406,670,406,670,405,671,379,696,403,1749,406,670,406,669,407,1745,405,671,410,664,406,671,407,669,405,670,380,696,406,670,406,670,406,669,407,1745,380,1772,405,670,380,696,380,1771,380,1772,380,1772,405,670,407,669,406,670,380,695,380,696,405,671,406,670,379,696,407,669,406,671,405,669,380,696,380,696,406,669,408,1744,381,695,406,670,406,669,381,695,381,695,380,696,380,696,405,671,405,672,378,696,406,670,380,696,379,696,406,670,406,669,389,687,380,696,380,696,380,695,406,1746,407,669,380,1771,406,670,380,1772,405,670,407,669,406,1745,407,1745,380,1771,380,1771,381,1771,381,1771,380,696,406,669,407,669,405,671,380,695,406,670,380,696,405,670,381,696,380,696,379,696,405,671,380,695,381,695,381,695,380,1772,379,697,379,696,406,670,380,695,406,671,405,670,382,693,408,668,406,670,380,696,406,670,380,695,382,695,404,671,406,670,406,669,380,699,377,696,380,695,407,669,380,696,380,696,380,696,406,670,380,695,380,696,380,696,406,1744,381,1771,407,669,380,696,380,1771,381,1771,381,694,406}; -size_t getInfraredCode(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr) { +size_t getInfraredCode_daikin(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr) { switch (mode) { case 0: // Off - *codePtr = &(ir_code_off[0]); + *codePtr = &(ir_code_off_daikin[0]); return 407; case 1: // Fan Only - *codePtr = &(ir_code_fan[fan_speed][0]); + *codePtr = &(ir_code_fan_daikin[fan_speed][0]); return 407; case 2: // Cool - *codePtr = &(ir_code_cool[fan_speed][temperature_index][0]); + *codePtr = &(ir_code_cool_daikin[fan_speed][temperature_index][0]); return 407; default: // Invalid mode return 0; diff --git a/src/ir_codes_daikin.hpp b/src/ir_codes_daikin.hpp new file mode 100644 index 0000000..8b59bbd --- /dev/null +++ b/src/ir_codes_daikin.hpp @@ -0,0 +1,11 @@ +#pragma once +#include +#include + +// IR codes for the remote control +extern const uint16_t ir_code_cool_daikin[4][17][407]; +extern const uint16_t ir_code_fan_daikin[4][407]; +extern const uint16_t ir_code_off_daikin[407]; + +// Function to retrieve the IR code for the given mode, fan speed and temperature +size_t getInfraredCode_daikin(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr); \ No newline at end of file diff --git a/src/ir_codes_york.cpp b/src/ir_codes_york.cpp new file mode 100644 index 0000000..c2706fd --- /dev/null +++ b/src/ir_codes_york.cpp @@ -0,0 +1,147 @@ +#include + +const uint16_t ir_code_cool_york[4][17][91] = { + // Fan Speed Auto + { + // 18 + {8983, 4472, 569, 630, 569, 627, 570, 1671, 569, 629, 568, 1670, 570, 628, 569, 628, 569, 628, 569, 631, 568, 1669, 569, 630, 570, 627, 569, 628, 569, 631, 569, 1668, 569, 1671, 569, 628, 569, 629, 569, 630, 569, 627, 569, 629, 568, 630, 570, 627, 569, 628, 570, 630, 569, 628, 569, 628, 569, 629, 569, 628, 569, 627, 570, 630, 569, 628, 569, 628, 569, 628, 568, 631, 568, 629, 569, 628, 568, 631, 568, 1669, 569, 631, 568, 1669, 569, 1671, 569, 627, 569, 629, 568}, + // 19 + {8978, 4472, 568, 631, 568, 630, 567, 1672, 567, 629, 592, 1648, 568, 629, 567, 629, 567, 631, 566, 631, 568, 1669, 568, 631, 568, 630, 566, 630, 567, 1676, 563, 630, 567, 628, 569, 631, 567, 630, 567, 629, 568, 630, 568, 630, 567, 630, 567, 631, 568, 629, 567, 629, 593, 606, 568, 629, 567, 630, 592, 606, 567, 630, 567, 630, 567, 631, 593, 604, 595, 602, 567, 631, 568, 629, 593, 603, 594, 605, 591, 1646, 594, 603, 593, 1647, 594, 602, 593, 1647, 593, 1645, 593}, + // 20 + {9005, 4470, 571, 629, 569, 626, 571, 1670, 570, 627, 569, 1670, 571, 626, 570, 627, 570, 627, 570, 628, 570, 1668, 570, 629, 569, 627, 570, 626, 570, 1670, 569, 627, 570, 1670, 570, 627, 569, 627, 570, 629, 570, 627, 569, 627, 569, 630, 569, 627, 570, 627, 570, 629, 569, 628, 568, 629, 569, 629, 569, 628, 569, 627, 570, 629, 569, 628, 569, 627, 569, 628, 569, 630, 569, 627, 570, 627, 569, 629, 570, 1667, 570, 629, 570, 1668, 569, 627, 569, 1671, 568, 627, 570}, + // 21 + {8981, 4473, 569, 630, 569, 627, 570, 1670, 570, 627, 570, 1669, 570, 627, 570, 627, 570, 628, 569, 630, 569, 1668, 569, 631, 569, 628, 568, 628, 569, 1671, 570, 1668, 568, 631, 569, 627, 569, 628, 569, 630, 569, 627, 570, 628, 569, 629, 569, 628, 569, 628, 569, 630, 569, 628, 568, 628, 570, 629, 569, 628, 570, 626, 570, 630, 568, 628, 570, 627, 570, 627, 569, 630, 569, 628, 569, 627, 570, 630, 568, 1668, 570, 629, 569, 1669, 569, 628, 569, 630, 569, 1669, 569}, + // 22 + {9008, 4445, 596, 603, 597, 600, 621, 1616, 624, 575, 595, 1643, 595, 605, 621, 575, 595, 602, 596, 603, 622, 1616, 596, 601, 622, 577, 595, 602, 623, 1617, 622, 1616, 596, 1644, 625, 572, 623, 573, 597, 604, 594, 602, 597, 599, 595, 606, 593, 603, 594, 602, 595, 604, 595, 602, 596, 600, 596, 604, 596, 601, 622, 575, 622, 576, 596, 601, 595, 602, 596, 601, 594, 605, 596, 601, 595, 602, 595, 603, 597, 1641, 596, 604, 600, 1637, 596, 601, 594, 604, 596, 601, 596}, + // 23 + {9040, 4413, 599, 601, 598, 598, 625, 1614, 599, 598, 599, 1641, 625, 572, 624, 572, 599, 598, 625, 574, 626, 1611, 625, 574, 599, 598, 626, 1613, 627, 570, 653, 544, 598, 599, 598, 601, 626, 570, 599, 598, 626, 573, 625, 573, 598, 598, 599, 599, 599, 599, 598, 598, 653, 546, 626, 571, 625, 571, 625, 574, 599, 598, 624, 572, 599, 600, 624, 573, 626, 570, 599, 601, 624, 572, 626, 571, 598, 601, 625, 1612, 626, 571, 624, 575, 598, 1639, 599, 1640, 600, 1639, 598}, + // 24 + {9010, 4443, 598, 599, 598, 601, 598, 1639, 598, 601, 599, 1638, 599, 601, 598, 598, 598, 599, 598, 599, 598, 1641, 599, 598, 598, 600, 599, 1639, 598, 601, 598, 598, 599, 1638, 599, 601, 598, 598, 598, 599, 598, 601, 598, 598, 599, 598, 598, 601, 598, 599, 598, 599, 598, 600, 598, 598, 599, 598, 599, 600, 598, 598, 599, 598, 599, 597, 599, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 601, 598, 599, 598, 1642, 598, 599, 597, 600, 597, 602, 597}, + // 25 + {9006, 4445, 595, 605, 594, 602, 594, 1646, 595, 602, 594, 1645, 622, 576, 594, 602, 593, 604, 596, 603, 594, 1643, 595, 605, 594, 602, 595, 1645, 594, 603, 594, 1643, 595, 604, 595, 602, 594, 603, 594, 604, 595, 602, 595, 602, 594, 604, 594, 603, 594, 603, 594, 604, 595, 602, 594, 603, 594, 604, 596, 601, 595, 602, 595, 604, 594, 603, 594, 602, 594, 604, 593, 605, 594, 603, 594, 602, 595, 605, 593, 1644, 594, 605, 595, 602, 594, 1643, 594, 605, 594, 1643, 594}, + // 26 + {8981, 4471, 570, 632, 567, 628, 569, 1671, 569, 628, 569, 1671, 569, 627, 569, 628, 568, 629, 569, 630, 569, 1668, 569, 630, 569, 628, 569, 1670, 569, 629, 568, 1668, 569, 1672, 568, 628, 569, 630, 569, 628, 568, 632, 565, 631, 568, 628, 568, 629, 568, 629, 568, 631, 568, 628, 568, 629, 568, 631, 568, 628, 569, 629, 568, 630, 568, 629, 568, 628, 593, 606, 568, 629, 568, 629, 568, 631, 593, 604, 568, 1671, 569, 628, 568, 628, 568, 1672, 568, 628, 569, 628, 568}, + // 27 + {8981, 4472, 569, 631, 568, 629, 594, 1645, 593, 604, 568, 1672, 575, 622, 593, 604, 593, 604, 593, 606, 592, 1645, 593, 606, 593, 605, 567, 1673, 568, 1669, 568, 629, 568, 631, 594, 603, 568, 629, 567, 632, 592, 605, 592, 604, 594, 605, 567, 629, 568, 630, 593, 605, 569, 628, 568, 629, 594, 604, 569, 629, 593, 604, 568, 631, 593, 604, 594, 603, 593, 603, 593, 606, 568, 628, 593, 605, 567, 632, 567, 1670, 594, 605, 568, 630, 592, 604, 593, 1646, 568, 1670, 567}, + // 28 + {8980, 4473, 568, 631, 568, 629, 568, 1671, 567, 630, 567, 1672, 568, 629, 567, 630, 567, 630, 568, 632, 566, 1671, 567, 631, 568, 629, 567, 1673, 567, 1670, 592, 605, 567, 1672, 568, 629, 568, 631, 568, 629, 567, 629, 594, 605, 568, 629, 567, 629, 593, 604, 567, 632, 567, 630, 567, 629, 568, 631, 588, 608, 568, 629, 568, 631, 568, 629, 568, 629, 568, 630, 568, 629, 568, 629, 568, 631, 568, 629, 568, 1671, 568, 630, 567, 629, 568, 629, 592, 1648, 567, 629, 568}, + // 29 + {8980, 4472, 569, 630, 569, 628, 569, 1671, 568, 628, 568, 1672, 568, 628, 569, 628, 568, 629, 568, 631, 569, 1668, 569, 631, 567, 629, 568, 1671, 568, 1670, 568, 1671, 569, 628, 568, 629, 567, 631, 568, 629, 568, 628, 568, 631, 568, 628, 568, 629, 568, 629, 568, 632, 567, 629, 568, 629, 568, 630, 568, 629, 568, 629, 567, 632, 567, 629, 569, 628, 568, 631, 568, 629, 567, 629, 568, 631, 567, 630, 567, 1672, 567, 629, 568, 630, 567, 629, 568, 631, 568, 1670, 567}, + // 30 + {9004, 4447, 594, 604, 595, 602, 594, 1646, 593, 603, 594, 1646, 595, 602, 593, 603, 594, 603, 594, 604, 594, 1644, 594, 605, 593, 604, 594, 1645, 595, 1642, 595, 1646, 594, 1643, 595, 602, 594, 605, 594, 602, 595, 602, 594, 605, 594, 602, 594, 603, 593, 606, 593, 603, 595, 602, 594, 605, 595, 602, 594, 602, 595, 605, 594, 602, 595, 602, 594, 605, 595, 602, 593, 603, 595, 604, 594, 603, 594, 605, 592, 1645, 593, 603, 595, 603, 594, 605, 594, 602, 594, 603, 593} + }, + // Fan Speed High + { + // 18 + {9010, 4441, 598, 601, 654, 543, 598, 1641, 652, 545, 654, 1585, 598, 599, 652, 544, 654, 543, 598, 600, 652, 1585, 598, 601, 598, 1639, 652, 547, 598, 598, 652, 1585, 598, 1642, 654, 542, 653, 545, 653, 544, 652, 544, 598, 601, 598, 599, 652, 544, 598, 598, 598, 604, 648, 546, 598, 598, 653, 545, 650, 547, 598, 598, 654, 544, 598, 599, 598, 598, 652, 547, 652, 545, 598, 597, 599, 600, 654, 543, 652, 544, 652, 547, 653, 1584, 598, 1642, 654, 542, 650, 1589, 652}, + // 19 + {9008, 4442, 598, 601, 598, 599, 597, 1640, 597, 602, 597, 1640, 597, 602, 597, 604, 593, 599, 597, 601, 598, 1640, 597, 599, 598, 1641, 597, 599, 599, 1641, 597, 599, 598, 599, 597, 601, 597, 600, 597, 599, 598, 601, 598, 599, 597, 599, 598, 601, 597, 600, 597, 599, 597, 602, 597, 599, 598, 599, 597, 601, 598, 599, 597, 599, 597, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 1642, 598, 1639, 598, 601, 598, 599, 598}, + // 20 + {9061, 4389, 598, 601, 599, 598, 650, 1587, 598, 601, 650, 1587, 598, 601, 598, 598, 651, 546, 651, 547, 652, 1586, 598, 599, 650, 1589, 650, 546, 598, 1641, 651, 546, 598, 1641, 598, 599, 598, 598, 598, 601, 652, 544, 599, 598, 598, 601, 598, 598, 598, 599, 598, 601, 598, 599, 598, 598, 615, 584, 598, 599, 597, 599, 598, 601, 598, 599, 597, 599, 653, 543, 598, 601, 598, 598, 650, 546, 599, 600, 598, 598, 650, 547, 598, 1641, 599, 597, 598, 1642, 652, 1584, 599}, + // 21 + {9008, 4442, 598, 602, 597, 599, 597, 1640, 598, 601, 598, 1639, 598, 601, 598, 599, 597, 599, 598, 602, 596, 1640, 598, 599, 651, 1589, 598, 599, 598, 1642, 597, 1639, 598, 601, 598, 600, 596, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 597, 599, 621, 578, 597, 600, 597, 599, 598, 601, 598, 598, 598, 598, 650, 549, 598, 599, 598, 598, 598, 599, 598, 601, 650, 547, 597, 599, 650, 549, 597, 599, 597, 599, 598, 1641, 598, 599, 598, 1642, 597, 600, 597}, + // 22 + {9064, 4386, 654, 546, 652, 545, 652, 1584, 598, 601, 598, 1639, 652, 547, 652, 545, 680, 516, 654, 545, 598, 1639, 652, 544, 652, 1587, 654, 543, 653, 1586, 653, 1584, 653, 1586, 598, 599, 654, 545, 652, 544, 652, 545, 598, 601, 598, 599, 597, 599, 598, 599, 653, 545, 652, 545, 683, 514, 597, 601, 598, 598, 635, 562, 651, 548, 653, 544, 633, 563, 655, 544, 598, 600, 597, 598, 598, 601, 650, 546, 654, 543, 598, 601, 598, 1639, 653, 544, 680, 519, 597, 1639, 652}, + // 23 + {9010, 4443, 597, 602, 598, 599, 597, 1640, 597, 602, 598, 1640, 597, 602, 597, 599, 598, 599, 598, 601, 598, 1639, 598, 599, 598, 1642, 598, 1642, 597, 600, 598, 599, 597, 600, 597, 601, 598, 599, 598, 599, 597, 602, 597, 600, 597, 599, 598, 601, 598, 599, 598, 599, 597, 602, 597, 600, 597, 599, 598, 601, 598, 599, 597, 599, 598, 602, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 1643, 597, 599, 598, 599, 597, 601, 598}, + // 24 + {9009, 4443, 598, 601, 598, 599, 597, 1640, 598, 601, 598, 1639, 598, 601, 598, 599, 597, 600, 597, 602, 597, 1640, 598, 599, 598, 1642, 598, 1642, 597, 599, 598, 600, 597, 1642, 597, 600, 597, 599, 598, 601, 598, 600, 597, 599, 598, 601, 598, 599, 597, 600, 598, 601, 598, 598, 598, 599, 598, 601, 598, 599, 597, 599, 598, 601, 597, 600, 597, 600, 598, 599, 597, 601, 598, 599, 598, 599, 597, 602, 598, 599, 597, 600, 597, 601, 598, 1640, 598, 1642, 598, 1640, 602}, + // 25 + {9063, 4387, 654, 545, 599, 598, 653, 1585, 653, 546, 679, 1557, 653, 547, 653, 543, 598, 599, 598, 600, 652, 1585, 653, 545, 652, 1587, 654, 1586, 598, 599, 597, 1640, 653, 545, 656, 541, 654, 543, 655, 544, 598, 598, 653, 544, 598, 601, 653, 543, 654, 543, 652, 547, 656, 540, 598, 599, 653, 545, 598, 599, 654, 546, 594, 601, 653, 544, 652, 544, 652, 545, 598, 601, 598, 599, 652, 543, 599, 601, 598, 599, 597, 599, 598, 601, 598, 1639, 598, 1642, 653, 544, 653}, + // 26 + {9011, 4442, 598, 602, 597, 599, 598, 1639, 598, 601, 598, 1639, 598, 602, 597, 599, 598, 599, 598, 601, 598, 1639, 598, 599, 597, 1642, 598, 1641, 598, 599, 598, 1639, 598, 1642, 598, 599, 598, 600, 599, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 600, 597, 601, 598, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 598, 598, 599, 600, 598, 599, 598, 599, 597, 602, 597, 599, 598, 1639, 599, 601, 597, 1640, 598}, + // 27 + {9031, 4442, 599, 600, 599, 597, 600, 1640, 599, 598, 599, 1641, 601, 595, 600, 597, 599, 598, 599, 600, 599, 1638, 599, 600, 599, 1638, 599, 1640, 599, 1638, 599, 601, 598, 598, 599, 597, 599, 600, 599, 598, 599, 597, 599, 600, 599, 598, 598, 597, 600, 598, 598, 600, 599, 598, 599, 598, 599, 600, 599, 597, 599, 598, 599, 599, 600, 598, 599, 597, 599, 600, 599, 597, 600, 597, 599, 600, 599, 598, 598, 598, 599, 600, 599, 598, 599, 1638, 599, 600, 599, 598, 599}, + // 28 + {9011, 4441, 600, 600, 604, 592, 599, 1638, 600, 600, 599, 1639, 598, 600, 599, 598, 599, 598, 599, 600, 598, 1638, 600, 597, 599, 1641, 599, 1641, 598, 1638, 599, 598, 598, 1642, 599, 598, 598, 601, 598, 599, 598, 598, 599, 600, 599, 598, 599, 597, 599, 598, 598, 600, 599, 598, 598, 599, 598, 600, 599, 598, 599, 597, 599, 601, 598, 599, 598, 600, 596, 601, 599, 597, 599, 599, 598, 600, 599, 597, 599, 598, 599, 600, 599, 598, 599, 598, 598, 1641, 599, 1638, 599}, + // 29 + {9011, 4442, 598, 601, 653, 544, 652, 1585, 599, 601, 598, 1639, 597, 602, 598, 599, 598, 598, 653, 546, 599, 1638, 653, 544, 598, 1643, 598, 1641, 598, 1640, 652, 1588, 652, 545, 597, 599, 598, 601, 598, 598, 680, 518, 598, 600, 653, 544, 598, 598, 598, 599, 652, 547, 652, 545, 598, 598, 598, 601, 598, 598, 599, 598, 652, 547, 599, 598, 598, 598, 599, 600, 598, 599, 598, 598, 599, 600, 652, 545, 598, 598, 599, 600, 599, 599, 597, 599, 598, 1641, 598, 599, 651}, + // 30 + {9009, 4442, 598, 601, 598, 598, 598, 1640, 598, 601, 597, 1640, 597, 602, 597, 599, 598, 599, 597, 601, 598, 1640, 598, 599, 597, 1642, 598, 1642, 598, 1639, 598, 1642, 597, 1640, 598, 599, 597, 602, 597, 603, 594, 599, 598, 601, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 601, 598, 598, 599, 598, 598, 601, 598, 599, 597, 599, 598, 602, 597, 599, 598, 598, 598, 602, 597, 599, 597, 600, 597, 602, 597, 599, 598, 599, 597, 599, 598, 601, 598, 1639, 597} + }, + // Fan Speed Med + { + // 18 + {9027, 4441, 654, 546, 598, 598, 598, 1640, 598, 600, 652, 1585, 598, 601, 598, 598, 598, 598, 655, 544, 653, 1584, 652, 1587, 652, 545, 598, 599, 597, 601, 652, 1585, 598, 1641, 598, 599, 597, 599, 597, 600, 599, 599, 651, 545, 651, 548, 597, 599, 651, 545, 598, 601, 653, 543, 652, 544, 599, 600, 653, 544, 652, 544, 652, 547, 597, 600, 597, 599, 597, 599, 598, 600, 678, 519, 653, 543, 598, 601, 598, 599, 650, 546, 598, 1641, 598, 1639, 598, 601, 598, 599, 653}, + // 19 + {9093, 4359, 598, 601, 654, 543, 652, 1584, 599, 601, 661, 1576, 681, 518, 652, 544, 650, 547, 653, 546, 652, 1585, 652, 1587, 652, 544, 654, 543, 654, 1586, 652, 545, 598, 598, 653, 546, 598, 599, 680, 516, 653, 545, 654, 543, 652, 545, 654, 544, 654, 544, 652, 544, 654, 545, 652, 544, 598, 599, 653, 546, 680, 516, 652, 544, 598, 602, 654, 542, 653, 544, 654, 545, 654, 542, 598, 599, 682, 516, 654, 543, 652, 545, 598, 1641, 655, 542, 597, 1642, 598, 1639, 599}, + // 20 + {9063, 4387, 598, 601, 598, 599, 652, 1584, 652, 547, 652, 1585, 598, 601, 652, 544, 653, 544, 653, 545, 651, 1586, 651, 1588, 598, 599, 598, 599, 653, 1586, 597, 599, 652, 1587, 654, 543, 652, 545, 651, 547, 652, 545, 653, 543, 598, 601, 653, 543, 598, 599, 597, 602, 652, 544, 598, 598, 598, 602, 651, 544, 598, 599, 598, 600, 652, 545, 653, 543, 650, 546, 654, 546, 597, 599, 653, 543, 651, 547, 652, 545, 598, 599, 598, 1641, 651, 546, 597, 1641, 652, 545, 653}, + // 21 + {9009, 4441, 599, 600, 598, 599, 598, 1639, 598, 601, 598, 1639, 598, 601, 597, 599, 598, 599, 597, 602, 597, 1639, 598, 1642, 598, 599, 598, 599, 597, 1642, 598, 1640, 597, 601, 598, 599, 597, 600, 597, 602, 597, 599, 597, 600, 597, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 598, 598, 601, 598, 599, 598, 599, 597, 601, 598, 599, 598, 598, 598, 599, 598, 601, 597, 599, 598, 598, 598, 601, 597, 599, 598, 599, 598, 1642, 597, 599, 597, 602, 597, 1639, 598}, + // 22 + {9009, 4441, 599, 600, 598, 599, 598, 1639, 598, 601, 598, 1639, 598, 601, 597, 599, 598, 599, 597, 602, 597, 1639, 598, 1642, 598, 599, 598, 599, 597, 1642, 598, 1640, 597, 601, 598, 599, 597, 600, 597, 602, 597, 599, 597, 600, 597, 601, 598, 599, 597, 599, 598, 601, 597, 599, 598, 598, 598, 601, 598, 599, 598, 599, 597, 601, 598, 599, 598, 598, 598, 599, 598, 601, 597, 599, 598, 598, 598, 601, 597, 599, 598, 599, 598, 1642, 597, 599, 597, 602, 597, 1639, 598}, + // 23 + {9029, 4441, 598, 601, 597, 599, 650, 1590, 598, 598, 598, 1641, 598, 599, 651, 545, 598, 598, 599, 601, 598, 1639, 598, 1642, 597, 599, 650, 1589, 598, 599, 597, 598, 599, 601, 597, 599, 598, 598, 598, 602, 597, 599, 598, 598, 598, 600, 598, 599, 598, 598, 598, 600, 599, 598, 598, 598, 598, 602, 597, 598, 599, 598, 598, 601, 598, 598, 598, 599, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 1640, 597, 1641, 598, 1639, 598}, + // 24 + {9010, 4441, 598, 601, 597, 599, 598, 1639, 598, 601, 598, 1639, 598, 601, 598, 598, 598, 599, 598, 601, 598, 1639, 598, 1641, 599, 598, 598, 1641, 652, 545, 598, 598, 598, 1642, 598, 599, 598, 599, 597, 601, 598, 599, 598, 599, 597, 601, 598, 599, 597, 600, 597, 602, 597, 599, 598, 599, 598, 601, 651, 545, 598, 599, 597, 601, 652, 545, 598, 599, 597, 599, 598, 601, 599, 597, 598, 599, 598, 600, 599, 598, 598, 599, 598, 601, 598, 1639, 598, 1641, 598, 599, 598}, + // 25 + {9008, 4441, 598, 601, 598, 598, 598, 1639, 651, 548, 599, 1639, 598, 600, 598, 599, 652, 545, 598, 601, 597, 1640, 598, 1640, 653, 544, 598, 1641, 653, 544, 651, 1586, 652, 548, 597, 599, 653, 543, 652, 546, 653, 544, 598, 598, 598, 600, 598, 599, 598, 598, 650, 549, 652, 545, 597, 599, 651, 548, 653, 543, 598, 599, 598, 601, 650, 547, 597, 599, 652, 544, 651, 547, 598, 599, 598, 599, 651, 547, 598, 598, 652, 545, 598, 600, 651, 1586, 651, 548, 598, 1638, 653}, + // 26 + {9009, 4441, 598, 602, 598, 599, 597, 1639, 598, 601, 598, 1639, 598, 601, 598, 598, 598, 599, 650, 549, 598, 1639, 598, 1641, 598, 599, 598, 1641, 598, 599, 651, 1586, 651, 1588, 599, 598, 653, 546, 598, 598, 651, 546, 598, 601, 598, 598, 598, 599, 598, 599, 597, 601, 598, 599, 597, 599, 598, 601, 598, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 598, 598, 599, 651, 547, 651, 546, 598, 598, 598, 601, 598, 598, 599, 1639, 598, 600, 598, 599, 598}, + // 27 + {9007, 4441, 598, 601, 597, 599, 598, 1638, 599, 601, 598, 1638, 598, 601, 598, 599, 597, 599, 598, 601, 598, 1639, 598, 1641, 598, 598, 598, 1642, 597, 1640, 597, 599, 598, 601, 598, 599, 598, 598, 598, 600, 599, 598, 598, 599, 598, 600, 598, 598, 598, 598, 599, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 599, 597, 599, 597, 599, 598, 600, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 601, 598, 598, 598, 1641, 598, 1639, 598}, + // 28 + {9007, 4441, 598, 601, 597, 599, 598, 1638, 599, 601, 598, 1638, 598, 601, 598, 599, 597, 599, 598, 601, 598, 1639, 598, 1641, 598, 598, 598, 1642, 597, 1640, 597, 599, 598, 601, 598, 599, 598, 598, 598, 600, 599, 598, 598, 599, 598, 600, 598, 598, 598, 598, 599, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 599, 597, 599, 597, 599, 598, 600, 598, 599, 597, 599, 598, 601, 597, 599, 598, 599, 597, 601, 598, 598, 598, 1641, 598, 1639, 598}, + // 29 + {9062, 4386, 599, 601, 598, 599, 653, 1583, 652, 547, 652, 1585, 653, 546, 651, 546, 598, 599, 597, 602, 651, 1585, 650, 1590, 649, 548, 651, 1587, 598, 1640, 652, 1587, 598, 599, 651, 545, 598, 601, 598, 599, 598, 598, 598, 601, 598, 598, 597, 599, 598, 599, 600, 598, 598, 598, 598, 599, 598, 601, 597, 599, 597, 599, 598, 601, 598, 599, 597, 599, 598, 600, 598, 599, 598, 599, 597, 601, 597, 599, 598, 599, 598, 601, 597, 599, 598, 598, 598, 601, 598, 1639, 597}, + // 30 + {9010, 4441, 599, 601, 598, 599, 597, 1640, 598, 601, 598, 1639, 598, 601, 598, 599, 649, 547, 598, 601, 598, 1639, 598, 1641, 598, 599, 598, 1642, 598, 1639, 598, 1641, 598, 1639, 598, 599, 598, 601, 598, 599, 597, 599, 598, 601, 598, 599, 598, 598, 598, 601, 598, 599, 598, 598, 599, 601, 597, 599, 598, 599, 597, 602, 597, 599, 598, 599, 597, 601, 598, 598, 598, 598, 651, 548, 598, 599, 597, 599, 650, 549, 598, 598, 598, 599, 598, 598, 598, 601, 598, 598, 598} + }, + // Fan Speed Low + { + // 18 + {9007, 4439, 600, 600, 598, 597, 600, 1636, 600, 599, 599, 1637, 599, 599, 600, 596, 599, 597, 600, 599, 599, 1637, 599, 597, 600, 599, 599, 596, 600, 597, 599, 1639, 599, 1638, 598, 599, 600, 599, 597, 597, 599, 598, 600, 597, 599, 596, 600, 599, 599, 597, 599, 597, 599, 599, 600, 596, 600, 596, 600, 598, 600, 596, 600, 597, 599, 599, 600, 597, 599, 596, 600, 599, 599, 596, 600, 596, 600, 599, 599, 596, 600, 597, 599, 1639, 600, 1636, 600, 1639, 599, 597, 599}, + // 19 + {9008, 4439, 600, 599, 599, 597, 600, 1637, 599, 599, 600, 1637, 599, 599, 600, 596, 600, 597, 600, 598, 600, 1637, 599, 598, 598, 600, 599, 596, 600, 1640, 599, 596, 601, 596, 599, 599, 600, 597, 599, 596, 600, 598, 600, 597, 599, 597, 600, 599, 599, 597, 599, 597, 599, 597, 599, 599, 600, 596, 600, 596, 600, 599, 599, 597, 599, 597, 600, 599, 599, 596, 599, 596, 600, 599, 600, 596, 600, 597, 599, 599, 599, 597, 599, 1637, 599, 1639, 600, 597, 599, 1638, 600}, + // 20 + {9007, 4440, 599, 600, 654, 543, 654, 1582, 651, 548, 597, 1639, 653, 545, 653, 544, 652, 544, 598, 601, 598, 1638, 654, 542, 653, 545, 599, 598, 654, 1584, 654, 542, 652, 1584, 653, 546, 653, 544, 652, 544, 598, 601, 654, 542, 653, 543, 654, 544, 653, 544, 653, 543, 654, 545, 652, 544, 653, 543, 654, 544, 598, 599, 598, 598, 653, 545, 651, 546, 597, 599, 653, 545, 652, 544, 652, 543, 652, 547, 598, 599, 652, 543, 598, 1641, 653, 1582, 654, 546, 653, 542, 654}, + // 21 + {9006, 4439, 599, 600, 598, 598, 599, 1638, 598, 601, 598, 1638, 599, 600, 598, 598, 598, 598, 599, 600, 598, 1638, 599, 598, 598, 600, 598, 598, 598, 1641, 598, 1638, 599, 598, 598, 600, 598, 598, 599, 597, 599, 600, 598, 598, 598, 598, 598, 600, 599, 598, 598, 598, 598, 600, 599, 597, 599, 597, 599, 599, 599, 598, 598, 597, 599, 600, 598, 598, 598, 598, 598, 600, 598, 598, 598, 598, 598, 600, 598, 598, 599, 597, 599, 1640, 598, 598, 598, 1640, 599, 1638, 599}, + // 22 + {9059, 4389, 597, 601, 653, 544, 651, 1585, 651, 548, 651, 1586, 652, 547, 596, 599, 653, 544, 651, 547, 653, 1584, 651, 545, 651, 548, 597, 600, 651, 1588, 648, 1588, 651, 1588, 653, 544, 652, 544, 650, 548, 652, 544, 653, 543, 598, 601, 598, 598, 652, 545, 597, 602, 651, 544, 651, 546, 650, 548, 597, 599, 652, 545, 652, 546, 653, 543, 597, 599, 652, 545, 652, 546, 601, 595, 653, 543, 598, 601, 651, 545, 652, 545, 597, 1641, 597, 599, 598, 1641, 628, 569, 651}, + // 23 + {9006, 4440, 599, 600, 598, 599, 597, 1639, 598, 600, 598, 1638, 599, 600, 599, 598, 598, 599, 598, 600, 598, 1639, 598, 598, 599, 600, 598, 1639, 598, 601, 598, 598, 598, 599, 598, 600, 598, 598, 599, 598, 598, 600, 598, 598, 599, 598, 598, 601, 598, 599, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 599, 599, 599, 598, 598, 598, 598, 601, 598, 599, 597, 599, 598, 600, 598, 598, 599, 598, 598, 600, 599, 597, 599, 1638, 599, 600, 598, 598, 599, 1640, 598}, + // 24 + {9007, 4440, 598, 601, 597, 599, 598, 1638, 599, 600, 598, 1638, 598, 601, 598, 599, 597, 599, 597, 601, 598, 1638, 598, 599, 598, 600, 598, 1639, 598, 601, 597, 598, 599, 1638, 598, 601, 597, 599, 598, 598, 603, 595, 598, 598, 598, 599, 597, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 598, 601, 598, 598, 598, 598, 597, 602, 597, 599, 597, 599, 598, 600, 598, 599, 598, 598, 598, 601, 597, 599, 598, 598, 598, 1641, 598, 599, 597, 599, 597, 601, 597}, + // 25 + {9060, 4389, 599, 601, 597, 599, 598, 1639, 598, 600, 598, 1639, 598, 601, 597, 599, 598, 599, 597, 601, 598, 1638, 598, 599, 598, 600, 599, 1638, 598, 601, 597, 1639, 598, 599, 598, 601, 597, 599, 598, 598, 598, 600, 599, 598, 597, 599, 597, 601, 598, 599, 597, 599, 597, 600, 599, 598, 598, 598, 598, 601, 598, 599, 598, 598, 598, 601, 598, 598, 598, 599, 597, 601, 598, 598, 598, 599, 598, 600, 598, 599, 598, 598, 598, 599, 598, 1641, 598, 1640, 599, 1639, 598}, + // 26 + {9006, 4440, 598, 601, 598, 599, 597, 1639, 598, 601, 651, 1586, 597, 601, 598, 598, 598, 599, 598, 601, 597, 1639, 598, 598, 598, 601, 598, 1638, 598, 600, 598, 1639, 597, 1641, 598, 598, 598, 598, 598, 601, 597, 599, 597, 599, 598, 601, 649, 546, 599, 598, 598, 601, 597, 599, 597, 598, 598, 601, 598, 598, 598, 598, 598, 601, 597, 599, 598, 598, 598, 599, 597, 601, 598, 598, 598, 599, 597, 601, 598, 598, 598, 598, 598, 600, 598, 1638, 598, 1640, 599, 598, 598}, + // 27 + {9060, 4387, 680, 519, 598, 598, 598, 1639, 598, 600, 598, 1639, 598, 600, 652, 545, 597, 599, 651, 547, 653, 1584, 653, 543, 598, 600, 653, 1584, 652, 1587, 598, 598, 654, 543, 600, 598, 654, 542, 599, 598, 654, 544, 653, 544, 652, 544, 651, 547, 651, 546, 652, 544, 598, 600, 654, 542, 651, 546, 650, 548, 651, 545, 598, 598, 598, 600, 654, 542, 599, 597, 655, 544, 653, 543, 652, 544, 655, 543, 598, 598, 598, 599, 654, 542, 651, 1586, 653, 544, 598, 1640, 652}, + // 28 + {9012, 4440, 600, 599, 600, 597, 599, 1638, 600, 599, 599, 1639, 599, 599, 600, 597, 600, 597, 599, 599, 600, 1638, 599, 597, 600, 599, 600, 1637, 600, 1640, 599, 597, 600, 1640, 599, 597, 600, 597, 599, 600, 600, 596, 600, 597, 600, 600, 598, 597, 600, 597, 600, 599, 600, 597, 599, 597, 600, 599, 600, 596, 600, 597, 600, 599, 599, 597, 600, 597, 600, 597, 599, 599, 600, 597, 599, 598, 599, 599, 600, 596, 600, 598, 599, 599, 600, 1637, 600, 599, 599, 597, 600}, + // 29 + {9063, 4386, 599, 600, 599, 598, 598, 1638, 598, 600, 599, 1638, 599, 600, 598, 598, 599, 598, 598, 601, 597, 1639, 599, 597, 599, 600, 599, 1638, 652, 1587, 599, 1638, 599, 600, 598, 598, 598, 599, 598, 600, 599, 597, 599, 598, 599, 600, 682, 514, 598, 598, 653, 546, 599, 598, 598, 597, 599, 600, 599, 598, 598, 599, 652, 546, 651, 546, 598, 598, 599, 597, 599, 600, 653, 543, 598, 597, 600, 600, 652, 544, 599, 597, 599, 600, 599, 597, 599, 1640, 599, 1637, 600}, + // 30 + {9007, 4442, 597, 602, 597, 600, 596, 1640, 653, 545, 598, 1640, 653, 546, 596, 600, 597, 599, 597, 602, 597, 1640, 597, 600, 596, 602, 597, 1639, 598, 1642, 597, 1640, 597, 1641, 599, 599, 597, 601, 597, 600, 597, 599, 597, 601, 598, 599, 597, 599, 653, 544, 653, 545, 598, 598, 655, 541, 599, 600, 655, 541, 598, 599, 597, 601, 598, 599, 598, 598, 598, 601, 597, 599, 654, 543, 597, 601, 598, 598, 598, 599, 597, 600, 655, 543, 598, 599, 597, 1642, 598, 599, 597} + } +}; + +const uint16_t ir_code_fan_york[4][91] = { + // there is no auto in fan sub mid for auto + {9015, 4439, 599, 599, 625, 573, 599, 1640, 598, 600, 599, 1639, 599, 600, 599, 598, 599, 598, 626, 571, 599, 600, 599, 1639, 598, 601, 627, 1611, 625, 574, 598, 598, 599, 1639, 626, 573, 598, 598, 599, 598, 625, 574, 599, 598, 599, 597, 599, 601, 626, 571, 598, 599, 598, 600, 626, 572, 598, 598, 654, 545, 598, 599, 627, 570, 598, 598, 599, 600, 626, 571, 625, 571, 627, 573, 598, 598, 625, 572, 598, 600, 599, 599, 599, 1641, 628, 569, 598, 1639, 626, 573, 626}, // AUTO + {9038, 4414, 598, 598, 626, 574, 628, 1609, 625, 574, 598, 1639, 599, 600, 598, 599, 626, 572, 598, 599, 625, 573, 627, 569, 599, 1641, 626, 1612, 626, 573, 599, 598, 626, 1612, 598, 601, 626, 571, 598, 598, 626, 574, 597, 599, 653, 543, 599, 601, 597, 599, 598, 599, 625, 574, 624, 572, 625, 572, 598, 601, 624, 572, 627, 570, 598, 599, 626, 573, 625, 572, 627, 569, 626, 574, 599, 597, 598, 599, 598, 601, 598, 599, 598, 1642, 626, 570, 625, 1612, 624, 1617, 598}, // HIGH + {9015, 4439, 599, 599, 625, 573, 599, 1640, 598, 600, 599, 1639, 599, 600, 599, 598, 599, 598, 626, 571, 599, 600, 599, 1639, 598, 601, 627, 1611, 625, 574, 598, 598, 599, 1639, 626, 573, 598, 598, 599, 598, 625, 574, 599, 598, 599, 597, 599, 601, 626, 571, 598, 599, 598, 600, 626, 572, 598, 598, 654, 545, 598, 599, 627, 570, 598, 598, 599, 600, 626, 571, 625, 571, 627, 573, 598, 598, 625, 572, 598, 600, 599, 599, 599, 1641, 628, 569, 598, 1639, 626, 573, 626}, // MID + {9009, 4443, 597, 601, 596, 603, 596, 1642, 596, 603, 623, 1615, 596, 603, 595, 601, 571, 626, 572, 625, 597, 603, 596, 1642, 596, 1644, 596, 1642, 571, 628, 571, 626, 596, 1645, 596, 600, 572, 625, 624, 576, 571, 625, 572, 626, 570, 628, 571, 626, 571, 626, 571, 626, 573, 626, 571, 626, 570, 627, 570, 628, 571, 627, 570, 626, 571, 629, 570, 626, 571, 625, 571, 629, 570, 627, 569, 628, 569, 633, 567, 626, 570, 627, 570, 1670, 570, 627, 569, 628, 569, 1670, 570} // LOW +}; +const uint16_t ir_code_off_york[91] = {9007, 4444, 650, 546, 597, 602, 649, 1588, 597, 602, 596, 601, 596, 600, 597, 603, 596, 601, 596, 600, 596, 603, 596, 1641, 596, 1643, 650, 548, 596, 1644, 677, 519, 597, 1641, 596, 604, 648, 548, 596, 600, 649, 550, 650, 547, 597, 600, 596, 603, 597, 604, 592, 601, 596, 602, 633, 564, 650, 547, 596, 603, 596, 601, 596, 600, 596, 601, 596, 603, 650, 547, 596, 601, 650, 548, 596, 601, 596, 600, 597, 602, 597, 600, 596, 601, 596, 1643, 597, 600, 597, 1643, 649}; + +size_t getInfraredCode_york(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr) +{ + switch (mode) + { + case 0: // Off + *codePtr = &(ir_code_off_york[0]); + return 91; + case 1: // Fan Only + *codePtr = &(ir_code_fan_york[fan_speed][0]); + return 91; + case 2: // Cool + *codePtr = &(ir_code_cool_york[fan_speed][temperature_index][0]); + return 91; + default: // Invalid mode + return 0; + } +} \ No newline at end of file diff --git a/src/ir_codes_york.hpp b/src/ir_codes_york.hpp new file mode 100644 index 0000000..d80d9a7 --- /dev/null +++ b/src/ir_codes_york.hpp @@ -0,0 +1,11 @@ +#pragma once +#include +#include + +// IR codes for the remote control +extern const uint16_t ir_code_cool_york[4][17][91]; +extern const uint16_t ir_code_fan_york[4][91]; +extern const uint16_t ir_code_off_york[91]; + +// Function to retrieve the IR code for the given mode, fan speed and temperature +size_t getInfraredCode_york(uint8_t mode, uint8_t fan_speed, uint8_t temperature_index, const uint16_t **codePtr); \ No newline at end of file diff --git a/src/ise_display.cpp b/src/ise_display.cpp index 40a2c6a..760fd47 100644 --- a/src/ise_display.cpp +++ b/src/ise_display.cpp @@ -9,18 +9,19 @@ ISEDisplay::ISEDisplay(HardwareSerial *adapter, const uint8_t *light_array, uint // TODO : Implement // debug to work -void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCard, ClimateCard *climateCard, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed) +void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCard, ClimateCard *climateCard_daikin, ClimateCard *climateCard_york, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed) { this->inputCard = inputCard; this->outputCard = outputCard; - this->climateCard = climateCard; + this->climateCard_daikin = climateCard_daikin; + this->climateCard_york = climateCard_york; this->pm_switch = pm_switch; this->remote_pm_fan_speed = pm_fan_speed; auto bindedHandlePWMChange = std::bind(&ISEDisplay::handlePWMChange, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); auto bindedHandleACChange = std::bind(&ISEDisplay::handleACChange, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); auto bindedHandleTouch = std::bind(&ISEDisplay::handleTouch, this, std::placeholders::_1, std::placeholders::_2, std::placeholders::_3); this->outputCallbackHandle = this->outputCard->registerChangeCallback(bindedHandlePWMChange); - this->climateCallbackHandle = this->climateCard->registerChangeCallback(bindedHandleACChange); + this->climateCallbackHandle = this->climateCard_daikin->registerChangeCallback(bindedHandleACChange); this->user_mode = 1; // initialized to cool by default this->pm_fan_speed = 10; //remote_pm_fan_speed->setValue(pm_fan_speed); @@ -50,7 +51,13 @@ void ISEDisplay::begin(DigitalInputCard *inputCard, DigitalOutputCard *outputCar // this->climateCard->setTemperature(ac_temperature); // this->climateCard->setFanSpeed(ac_fan_speed); // this->climateCard->setMode(ac_mode); - this->climateCard->setState(ac_mode, ac_fan_speed, ac_temperature); + this->climateCard_daikin->setState(ac_mode, ac_fan_speed, ac_temperature); + if(ac_mode == 3){ + this->climateCard_york->setState(0, ac_fan_speed, ac_temperature); + } + else{ + this->climateCard_york->setState(ac_mode, ac_fan_speed, ac_temperature); + } } void ISEDisplay::loop() { @@ -210,25 +217,28 @@ void ISEDisplay::handleTouch(uint8_t page, uint8_t component, uint8_t touch_type case COMPONENT_AC_FAN_SPEED: if (touch_type != TOUCH_TYPE_RELEASE) break; - ac_fan_speed = this->climateCard->getFanSpeed(); + ac_fan_speed = this->climateCard_daikin->getFanSpeed(); // We have auto, low, mid, high right?, that's 0,1,2,3 a modulo operation of 3 only gives 0,1,2 // mod 4 should fixed it ESP_LOGI("ISEDisplay", "Current AC fan speed: %d", ac_fan_speed); ac_fan_speed = (ac_fan_speed + 1) % 4; ESP_LOGI("ISEDisplay", "New AC fan speed: %d", ac_fan_speed); - this->climateCard->setFanSpeed(ac_fan_speed); + this->climateCard_daikin->setFanSpeed(ac_fan_speed); + this->climateCard_york->setFanSpeed(ac_fan_speed); // updateACState(); break; case COMPONENT_AC_TEMP_DOWN_BUTTON: if (touch_type != TOUCH_TYPE_RELEASE) break; - this->climateCard->setTemperature(this->climateCard->getTemperature() - 1); + this->climateCard_daikin->setTemperature(this->climateCard_daikin->getTemperature() - 1); + this->climateCard_york->setTemperature(this->climateCard_daikin->getTemperature()); // updateACState(); break; case COMPONENT_AC_TEMP_UP_BUTTON: if (touch_type != TOUCH_TYPE_RELEASE) break; - this->climateCard->setTemperature(this->climateCard->getTemperature() + 1); + this->climateCard_daikin->setTemperature(this->climateCard_daikin->getTemperature() + 1); + this->climateCard_york->setTemperature(this->climateCard_daikin->getTemperature()); // updateACState(); break; case COMPONENT_PM_TOGGLE_BUTTON: @@ -460,7 +470,13 @@ void ISEDisplay::setACstate(uint8_t ac_fan_speed, uint8_t ac_mode, uint8_t ac_te ESP_LOGI("ISEDisplay", "AC mode set to: %d", ac_mode); //this->climateCard->setTemperature(ac_temperature); ESP_LOGI("ISEDisplay", "AC temperature set to: %d", ac_temperature); - this->climateCard->setState(ac_mode, ac_fan_speed, ac_temperature); + this->climateCard_daikin->setState(ac_mode, ac_fan_speed, ac_temperature); + if(ac_mode == 3){ + this->climateCard_york->setState(0, ac_fan_speed, ac_temperature); + } + else{ + this->climateCard_york->setState(ac_mode, ac_fan_speed, ac_temperature); + } // updateACState(); } void ISEDisplay::toggleLightGroupState() @@ -509,10 +525,10 @@ void ISEDisplay::togglePMStandby() void ISEDisplay::toggleAC() { // Get the current group state - uint8_t mode = this->climateCard->getMode(); + uint8_t mode = this->climateCard_daikin->getMode(); // get fan speed and temperature - uint8_t fan_speed = this->climateCard->getFanSpeed(); - uint8_t temperature = this->climateCard->getTemperature(); + uint8_t fan_speed = this->climateCard_daikin->getFanSpeed(); + uint8_t temperature = this->climateCard_daikin->getTemperature(); ESP_LOGI("ISEDisplay", "Current AC mode: %d", mode); // Toggle the state @@ -534,7 +550,7 @@ void ISEDisplay::toggleAC() void ISEDisplay::changeUserACmode() { // Get the current group state - uint8_t mode = this->climateCard->getMode(); + uint8_t mode = this->climateCard_daikin->getMode(); ESP_LOGI("ISEDisplay", "Current actual AC mode: %d", mode); // Toggle the state // user mode alternate between 1 and 2 @@ -868,7 +884,7 @@ void ISEDisplay::updateuserACmode() } void ISEDisplay::updateACfanSpeed() { - uint8_t fan_speed = this->climateCard->getFanSpeed(); + uint8_t fan_speed = this->climateCard_daikin->getFanSpeed(); ESP_LOGI("ISEDisplay", "updating display AC fan speed to: %d", fan_speed); if (!this->takeSerialMutex()) return; @@ -916,8 +932,8 @@ void ISEDisplay::updateACState() // TODOlater : The cognitive complexity here is so high, maybe break up the method a bit? // Get the state - uint8_t mode = this->climateCard->getMode(); - uint8_t temperature = this->climateCard->getTemperature(); + uint8_t mode = this->climateCard_daikin->getMode(); + uint8_t temperature = this->climateCard_daikin->getTemperature(); if(currentPage != 1){ if (!this->takeSerialMutex()) return; diff --git a/src/ise_display.hpp b/src/ise_display.hpp index 3074d30..3b6a338 100644 --- a/src/ise_display.hpp +++ b/src/ise_display.hpp @@ -24,7 +24,7 @@ struct lightPosition { class ISEDisplay : public ESPMegaDisplay { public: ISEDisplay(HardwareSerial* adapter, const uint8_t *light_array, uint8_t row, uint8_t column); - void begin(DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed); + void begin(DigitalInputCard* inputCard, DigitalOutputCard* outputCard, ClimateCard* climateCard_daikin, ClimateCard* climateCard_york, RemoteVariable* pm_switch, RemoteVariable* pm_fan_speed); void updateLightGroupStatePageDashboard(); void updateLightGroupStatePageStandby(); void updateAirPurifierState(); @@ -34,6 +34,7 @@ class ISEDisplay : public ESPMegaDisplay { void updateTempOutside(float temp_outside); void updatePMoutside(u_int16_t pm25_outside); void updatePMinside(u_int16_t pm25_inside); + void updateACState(); void loop(); @@ -51,7 +52,8 @@ class ISEDisplay : public ESPMegaDisplay { DigitalInputCard* inputCard; DigitalOutputCard *outputCard; - ClimateCard *climateCard; + ClimateCard *climateCard_daikin; + ClimateCard *climateCard_york; const uint8_t *light_array; uint8_t row; @@ -72,7 +74,6 @@ class ISEDisplay : public ESPMegaDisplay { u_int8_t lightLevelRow3; u_int8_t lightLevelRow4; - void updateACState(); void updateuserACmode(); void updateACfanSpeed(); bool calculateLightGroupState(); diff --git a/src/main.cpp b/src/main.cpp index 716a133..85c1744 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -7,7 +7,8 @@ RemoteVariable weather = RemoteVariable(); RemoteVariable pm_switch = RemoteVariable(); RemoteVariable pm_fan_speed = RemoteVariable(); -const char *mode_names[] = {"off", "cool", "fan_only", "dry"}; +const char *mode_names_daikin[] = {"off", "cool", "fan_only", "dry"}; +const char *mode_names_york[] = {"off", "cool", "fan_only"}; const char *fan_speed_names[] = {"auto", "high", "medium", "low"}; uint8_t row = 4; uint8_t column = 2; @@ -18,14 +19,24 @@ const uint8_t light_array[4][2] = { {LIGHT_ROW4_COLUMN1, LIGHT_ROW4_COLUMN2}}; -AirConditioner ac = { - .max_temperature = 32, - .min_temperature = 16, +AirConditioner ac_daikin = { + .max_temperature = 30, + .min_temperature = 18, .modes = 4, - .mode_names = mode_names, + .mode_names = mode_names_daikin, .fan_speeds = 4, .fan_speed_names = fan_speed_names, - .getInfraredCode = &getInfraredCode}; + .getInfraredCode = &getInfraredCode_daikin}; + +AirConditioner ac_york = { + .max_temperature = 30, + .min_temperature = 18, + .modes = 3, + .mode_names = mode_names_york, + .fan_speeds = 4, + .fan_speed_names = fan_speed_names, + .getInfraredCode = &getInfraredCode_york}; + /*********************************************** * End Configuration * ***********************************************/ @@ -33,9 +44,13 @@ AirConditioner ac = { ESPMegaPRO espmega = ESPMegaPRO(); ISEDisplay iseDisplay = ISEDisplay(&iseDisplayAdapter, &light_array[0][0], row, column); -ClimateCard climateCard = ClimateCard(AIR_CONDITIONER_IR_PIN, ac, - AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN, - AIR_CONDITIONER_RMT_CHANNEL); +ClimateCard climateCard_daikin = ClimateCard(AIR_CONDITIONER_DAIKIN_IR_PIN, ac_daikin, + AIR_CONDITIONER_SENSOR_TYPE, AIR_CONDITIONER_SENSOR_PIN, + AIR_CONDITIONER_RMT_CHANNEL0); + +ClimateCard climateCard_york = ClimateCard(AIR_CONDITIONER_YORK_IR_PIN, ac_york, + AC_SENSOR_TYPE_NONE, 0, + AIR_CONDITIONER_RMT_CHANNEL1); void handleMqttMessage(char *topic, char *payload) { @@ -110,11 +125,23 @@ void setup() } espmega.outputs.setState(12, true); espmega.outputs.setValue(12,4095); - espmega.installCard(2, &climateCard); - climateCard.bindFRAM(&espmega.fram, 5000); - climateCard.loadStateFromFRAM(); - climateCard.setFRAMAutoSave(true); - espmega.display->bindClimateCard(&climateCard); + ESP_LOGD("ISE OS", "Setting up climate cards"); + + // Daikin Climate Card + ESP_LOGD("ISE OS", "Installing daikin climate card"); + espmega.installCard(2, &climateCard_daikin); + climateCard_daikin.bindFRAM(&espmega.fram, 5000); + climateCard_daikin.loadStateFromFRAM(); + climateCard_daikin.setFRAMAutoSave(true); + // Bind daikin climate card to the internal display + espmega.display->bindClimateCard(&climateCard_daikin); + + // York Climate Card + ESP_LOGD("ISE OS", "Installing york climate card"); + espmega.installCard(3, &climateCard_york); + climateCard_york.bindFRAM(&espmega.fram, 5005); + climateCard_york.loadStateFromFRAM(); + climateCard_york.setFRAMAutoSave(true); // auto binded_display_update_on_pm25_out = std::bind(&display_update,0,std::placeholders::_1); // auto binded_display_update_on_pm25_in = std::bind(&display_update,1,std::placeholders::_1); // auto binded_display_update_on_temp_out = std::bind(&display_update,2,std::placeholders::_1); @@ -157,9 +184,10 @@ void setup() pm_fan_speed.enableSetValue("/pm/set_fan_speed"); espmega.iot->registerCard(0); // Register the Input Card espmega.iot->registerCard(1); // Register the Output Card - espmega.iot->registerCard(2); // Register the Climate Card + espmega.iot->registerCard(2); // Register the Climate Card Daikin + espmega.iot->registerCard(3); // Register the Climate Card York auto bindedGetTime = std::bind(&ESPMegaPRO::getTime, &espmega); - iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard, &pm_switch, &pm_fan_speed); + iseDisplay.begin(&espmega.inputs, &espmega.outputs, &climateCard_daikin, &climateCard_york, &pm_switch, &pm_fan_speed); espmega.iot->registerRelativeMqttCallback(&handleMqttMessage); iseDisplay.registerPageChangeCallback(&handlePageChange); @@ -218,6 +246,25 @@ void loop() espmega.loop(); iseDisplay.loop(); + //loop set york ac state between 21 and 22 degree every 5 seconds + static uint32_t last_ac_update = 0; + if (millis() - last_ac_update > 5000) + { + uint8_t ac_temperature = climateCard_york.getTemperature(); + if (ac_temperature == 21) + { + ESP_LOGV("AC", "Setting AC temperature to 22"); + climateCard_york.setTemperature(22); + } + else + { + ESP_LOGV("AC", "Setting AC temperature to 21"); + climateCard_york.setTemperature(21); + } + last_ac_update = millis(); + } + + // Update the time every 15 seconds // static bool run_when_init = false; // No static ? , this shit will reset to 0 every loop static uint32_t last_time_updated = 0; @@ -417,6 +464,7 @@ void handlePageChange(uint8_t page) iseDisplay.updatePMinside(get_pm25_in()); iseDisplay.updateWeather(weather.getValue()); iseDisplay.updateTempOutside(get_temp_out()); + iseDisplay.updateACState(); /* iseDisplay.updateACState(); iseDisplay.updateAirPurifierState(); diff --git a/src/main.hpp b/src/main.hpp index 61aa049..95d92ab 100644 --- a/src/main.hpp +++ b/src/main.hpp @@ -2,7 +2,8 @@ #include SET_LOOP_TASK_STACK_SIZE(32*1024); #include -#include +#include +#include @@ -19,8 +20,10 @@ SET_LOOP_TASK_STACK_SIZE(32*1024); // Air Conditioner Configuration #define AIR_CONDITIONER_SENSOR_TYPE AC_SENSOR_TYPE_DHT22 #define AIR_CONDITIONER_SENSOR_PIN 32 -#define AIR_CONDITIONER_IR_PIN 5 -#define AIR_CONDITIONER_RMT_CHANNEL RMT_CHANNEL_0 +#define AIR_CONDITIONER_DAIKIN_IR_PIN 5 +#define AIR_CONDITIONER_YORK_IR_PIN 15 +#define AIR_CONDITIONER_RMT_CHANNEL0 RMT_CHANNEL_0 +#define AIR_CONDITIONER_RMT_CHANNEL1 RMT_CHANNEL_1 void handleMqttMessage(char *topic, char *payload); void subscribeToMqttTopics();