diff --git a/.github/scripts/download-bundled/jit-ir.sh b/.github/scripts/download-bundled/jit-ir.sh index fed7a9938d21..bc9c0a428b7b 100755 --- a/.github/scripts/download-bundled/jit-ir.sh +++ b/.github/scripts/download-bundled/jit-ir.sh @@ -5,7 +5,7 @@ cd "$(dirname "$0")/../../.." tmp_dir=/tmp/php-src-download-bundled/jit-ir rm -rf "$tmp_dir" -revision=00bec1ca490b8bc51f636a42040c5e9f64c1a91b +revision=93f92f5b5a49a02295685e340ebb0b83562cbe79 git clone --depth 1 --revision="$revision" https://github.com/dstogov/ir.git "$tmp_dir" diff --git a/NEWS b/NEWS index 839dfa42e9ff..e1bf6e4a3dd6 100644 --- a/NEWS +++ b/NEWS @@ -77,6 +77,8 @@ PHP NEWS - SQLite: . Fixed a crash when SQLite3::close() is called from a userland callback. (Ilia Alshanetsky) + . Fixed bug GH-22051 (Inconsistent error reporting in SQLite3Result::reset() + and SQLite3Result::finalize()). (Ilia Alshanetsky) - Standard: . Fixed bug #60110 (fclose(), file_put_contents(), copy() do not return false diff --git a/Zend/zend_compile.c b/Zend/zend_compile.c index fa1ebe53afe5..b994f3251674 100644 --- a/Zend/zend_compile.c +++ b/Zend/zend_compile.c @@ -5335,11 +5335,64 @@ static zend_result zend_compile_func_array_map(znode *result, zend_ast_list *arg return FAILURE; } + /* Bail out if callback is not a first class callable */ zend_ast *callback = args->child[0]; if (callback->kind != ZEND_AST_CALL && callback->kind != ZEND_AST_STATIC_CALL) { return FAILURE; } + zend_ast *args_ast = zend_ast_call_get_args(callback); + if (args_ast->kind != ZEND_AST_CALLABLE_CONVERT) { + return FAILURE; + } + + /* PFAs with non-literal pre-bound arguments are not optimizable because we + * can't memoize arguments without breaking pass-by-reference. + * TODO: Support PFAs when the function is known to not receive by ref. */ + zend_ast_fcc *fcc = (zend_ast_fcc*)args_ast; + zend_ast_list *fcc_args = zend_ast_get_list(fcc->args); + for (uint32_t i = 0; i < fcc_args->children; i++) { + zend_ast *arg = fcc_args->child[i]; + if (arg->kind == ZEND_AST_NAMED_ARG) { + arg = arg->child[1]; + } + + if (arg->kind == ZEND_AST_PLACEHOLDER_ARG) { + continue; + } + + if (arg->kind != ZEND_AST_ZVAL) { + return FAILURE; + } + } + + /* Evaluate class name */ + znode class_node; + if (callback->kind == ZEND_AST_STATIC_CALL) { + znode result; + zend_compile_expr(&result, callback->child[0]); + if (result.op_type == IS_CONST || result.op_type == IS_TMP_VAR) { + class_node = result; + } else { + class_node = result; + zend_emit_op_tmp(&class_node, ZEND_QM_ASSIGN, &result, NULL); + } + } else { + class_node.op_type = IS_UNUSED; + } + + /* Evaluate function name */ + znode func_node; + { + znode result; + zend_compile_expr(&result, callback->child[callback->kind == ZEND_AST_CALL ? 0 : 1]); + if (result.op_type == IS_CONST || result.op_type == IS_TMP_VAR) { + func_node = result; + } else { + zend_emit_op_tmp(&func_node, ZEND_QM_ASSIGN, &result, NULL); + } + } + znode value; value.op_type = IS_TMP_VAR; value.u.op.var = get_temporary_variable(); @@ -5348,6 +5401,12 @@ static zend_result zend_compile_func_array_map(znode *result, zend_ast_list *arg zend_ast_create_znode(&value)); if (!call_args) { CG(active_op_array)->T--; + if (func_node.op_type == IS_CONST) { + zval_ptr_dtor_nogc(&func_node.u.constant); + } + if (class_node.op_type == IS_CONST) { + zval_ptr_dtor_nogc(&class_node.u.constant); + } /* The callback is not a FCC/PFA, or is not optimizable */ return FAILURE; } @@ -5387,14 +5446,35 @@ static zend_result zend_compile_func_array_map(znode *result, zend_ast_list *arg /* loop body */ znode call_result; + zend_ast *func_ast; + if (func_node.op_type == IS_CONST) { + func_ast = zend_ast_create_znode(&func_node); + } else { + znode copy_node; + zend_emit_op_tmp(©_node, ZEND_COPY_TMP, &func_node, NULL); + func_ast = zend_ast_create_znode(©_node); + } switch (callback->kind) { - case ZEND_AST_CALL: - zend_compile_expr(&call_result, zend_ast_create(ZEND_AST_CALL, callback->child[0], call_args)); + case ZEND_AST_CALL: { + zend_compile_expr(&call_result, zend_ast_create(ZEND_AST_CALL, func_ast, call_args)); break; - case ZEND_AST_STATIC_CALL: - zend_compile_expr(&call_result, zend_ast_create(ZEND_AST_STATIC_CALL, callback->child[0], callback->child[1], call_args)); + } + case ZEND_AST_STATIC_CALL: { + zend_ast *class_ast; + if (class_node.op_type == IS_CONST) { + class_ast = zend_ast_create_znode(&class_node); + } else { + znode copy_node; + zend_emit_op_tmp(©_node, ZEND_COPY_TMP, &class_node, NULL); + class_ast = zend_ast_create_znode(©_node); + } + + zend_compile_expr(&call_result, zend_ast_create(ZEND_AST_STATIC_CALL, class_ast, func_ast, call_args)); + zend_ast_destroy(class_ast); break; + } } + zend_ast_destroy(func_ast); opline = zend_emit_op(NULL, ZEND_ADD_ARRAY_ELEMENT, &call_result, &key); SET_NODE(opline->result, result); /* end loop body */ @@ -5409,6 +5489,12 @@ static zend_result zend_compile_func_array_map(znode *result, zend_ast_list *arg zend_end_loop(opnum_fetch, &reset_node); zend_emit_op(NULL, ZEND_FE_FREE, &reset_node, NULL); + if (func_node.op_type != IS_CONST) { + zend_emit_op(NULL, ZEND_FREE, &func_node, NULL); + } + if (class_node.op_type != IS_UNUSED && class_node.op_type != IS_CONST) { + zend_emit_op(NULL, ZEND_FREE, &class_node, NULL); + } return SUCCESS; } diff --git a/Zend/zend_hrtime.c b/Zend/zend_hrtime.c index 819f95c47662..b471ee335e1d 100644 --- a/Zend/zend_hrtime.c +++ b/Zend/zend_hrtime.c @@ -70,19 +70,12 @@ void zend_startup_hrtime(void) struct timespec ts; -#ifdef CLOCK_MONOTONIC_RAW - if (EXPECTED(0 == clock_gettime(CLOCK_MONOTONIC_RAW, &ts))) { - zend_hrtime_posix_clock_id = CLOCK_MONOTONIC_RAW; - return; - } -#endif - - if (EXPECTED(0 == clock_gettime(zend_hrtime_posix_clock_id, &ts))) { + if (EXPECTED(0 == clock_gettime(CLOCK_MONOTONIC, &ts))) { return; } // zend_error mechanism is not initialized at that point - fprintf(stderr, "No working CLOCK_MONOTONIC* found, this should never happen\n"); + fprintf(stderr, "No working CLOCK_MONOTONIC found, this should never happen\n"); abort(); #endif diff --git a/Zend/zend_hrtime.h b/Zend/zend_hrtime.h index 6d802caacfe0..f7d69d19f80b 100644 --- a/Zend/zend_hrtime.h +++ b/Zend/zend_hrtime.h @@ -72,6 +72,7 @@ ZEND_API extern mach_timebase_info_data_t zend_hrtime_timerlib_info; #elif ZEND_HRTIME_PLATFORM_POSIX +/* Not read anymore, kept for ABI compatibility */ ZEND_API extern clockid_t zend_hrtime_posix_clock_id; #endif @@ -94,7 +95,7 @@ static zend_always_inline zend_hrtime_t zend_hrtime(void) return (zend_hrtime_t)mach_absolute_time() * zend_hrtime_timerlib_info.numer / zend_hrtime_timerlib_info.denom; #elif ZEND_HRTIME_PLATFORM_POSIX struct timespec ts = { .tv_sec = 0, .tv_nsec = 0 }; - clock_gettime(zend_hrtime_posix_clock_id, &ts); + clock_gettime(CLOCK_MONOTONIC, &ts); return ((zend_hrtime_t) ts.tv_sec * (zend_hrtime_t)ZEND_NANO_IN_SEC) + ts.tv_nsec; #elif ZEND_HRTIME_PLATFORM_HPUX return (zend_hrtime_t) gethrtime(); diff --git a/ext/date/lib/timezonedb.h b/ext/date/lib/timezonedb.h index ee432a314869..04cc75fb5e41 100644 --- a/ext/date/lib/timezonedb.h +++ b/ext/date/lib/timezonedb.h @@ -195,418 +195,418 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[598] = { { (char*) "America/Puerto_Rico" , 0x01A4F7 }, { (char*) "America/Punta_Arenas" , 0x01A5B4 }, { (char*) "America/Rainy_River" , 0x01AA93 }, - { (char*) "America/Rankin_Inlet" , 0x01AFAD }, - { (char*) "America/Recife" , 0x01B2F6 }, - { (char*) "America/Regina" , 0x01B4F0 }, - { (char*) "America/Resolute" , 0x01B78F }, - { (char*) "America/Rio_Branco" , 0x01BAD9 }, - { (char*) "America/Rosario" , 0x01BC8B }, - { (char*) "America/Santa_Isabel" , 0x01BF5B }, - { (char*) "America/Santarem" , 0x01C4BE }, - { (char*) "America/Santiago" , 0x01C66E }, - { (char*) "America/Santo_Domingo" , 0x01CBD1 }, - { (char*) "America/Sao_Paulo" , 0x01CD1A }, - { (char*) "America/Scoresbysund" , 0x01D114 }, - { (char*) "America/Shiprock" , 0x01D515 }, - { (char*) "America/Sitka" , 0x01D933 }, - { (char*) "America/St_Barthelemy" , 0x01DD0E }, - { (char*) "America/St_Johns" , 0x01DDCB }, - { (char*) "America/St_Kitts" , 0x01E548 }, - { (char*) "America/St_Lucia" , 0x01E5D6 }, - { (char*) "America/St_Thomas" , 0x01E677 }, - { (char*) "America/St_Vincent" , 0x01E705 }, - { (char*) "America/Swift_Current" , 0x01E7A6 }, - { (char*) "America/Tegucigalpa" , 0x01E934 }, - { (char*) "America/Thule" , 0x01EA02 }, - { (char*) "America/Thunder_Bay" , 0x01EBE3 }, - { (char*) "America/Tijuana" , 0x01F2A4 }, - { (char*) "America/Toronto" , 0x01F816 }, - { (char*) "America/Tortola" , 0x01FEF5 }, - { (char*) "America/Vancouver" , 0x01FF83 }, - { (char*) "America/Virgin" , 0x02062D }, - { (char*) "America/Whitehorse" , 0x0206EA }, - { (char*) "America/Winnipeg" , 0x020B0D }, - { (char*) "America/Yakutat" , 0x021044 }, - { (char*) "America/Yellowknife" , 0x021412 }, - { (char*) "Antarctica/Casey" , 0x02193F }, - { (char*) "Antarctica/Davis" , 0x021A6F }, - { (char*) "Antarctica/DumontDUrville" , 0x021B45 }, - { (char*) "Antarctica/Macquarie" , 0x021BF9 }, - { (char*) "Antarctica/Mawson" , 0x021FE5 }, - { (char*) "Antarctica/McMurdo" , 0x02208F }, - { (char*) "Antarctica/Palmer" , 0x0223C1 }, - { (char*) "Antarctica/Rothera" , 0x02274A }, - { (char*) "Antarctica/South_Pole" , 0x0227E1 }, - { (char*) "Antarctica/Syowa" , 0x022C00 }, - { (char*) "Antarctica/Troll" , 0x022C96 }, - { (char*) "Antarctica/Vostok" , 0x022D45 }, - { (char*) "Arctic/Longyearbyen" , 0x022E01 }, - { (char*) "Asia/Aden" , 0x0230CE }, - { (char*) "Asia/Almaty" , 0x02315F }, - { (char*) "Asia/Amman" , 0x0233E7 }, - { (char*) "Asia/Anadyr" , 0x023793 }, - { (char*) "Asia/Aqtau" , 0x023A99 }, - { (char*) "Asia/Aqtobe" , 0x023D18 }, - { (char*) "Asia/Ashgabat" , 0x023F98 }, - { (char*) "Asia/Ashkhabad" , 0x02411B }, - { (char*) "Asia/Atyrau" , 0x02429E }, - { (char*) "Asia/Baghdad" , 0x024527 }, - { (char*) "Asia/Bahrain" , 0x0247A9 }, - { (char*) "Asia/Baku" , 0x024862 }, - { (char*) "Asia/Bangkok" , 0x024B56 }, - { (char*) "Asia/Barnaul" , 0x024BFA }, - { (char*) "Asia/Beirut" , 0x024F05 }, - { (char*) "Asia/Bishkek" , 0x0251ED }, - { (char*) "Asia/Brunei" , 0x025463 }, - { (char*) "Asia/Calcutta" , 0x025509 }, - { (char*) "Asia/Chita" , 0x0255F1 }, - { (char*) "Asia/Choibalsan" , 0x0258FF }, - { (char*) "Asia/Chongqing" , 0x025B5D }, - { (char*) "Asia/Chungking" , 0x025CF2 }, - { (char*) "Asia/Colombo" , 0x025E87 }, - { (char*) "Asia/Dacca" , 0x025F8A }, - { (char*) "Asia/Damascus" , 0x02607D }, - { (char*) "Asia/Dhaka" , 0x02655B }, - { (char*) "Asia/Dili" , 0x02664E }, - { (char*) "Asia/Dubai" , 0x026704 }, - { (char*) "Asia/Dushanbe" , 0x026795 }, - { (char*) "Asia/Famagusta" , 0x02690F }, - { (char*) "Asia/Gaza" , 0x026CD6 }, - { (char*) "Asia/Harbin" , 0x027872 }, - { (char*) "Asia/Hebron" , 0x027A07 }, - { (char*) "Asia/Ho_Chi_Minh" , 0x0285B4 }, - { (char*) "Asia/Hong_Kong" , 0x0286A8 }, - { (char*) "Asia/Hovd" , 0x0289BB }, - { (char*) "Asia/Irkutsk" , 0x028C2F }, - { (char*) "Asia/Istanbul" , 0x028F4D }, - { (char*) "Asia/Jakarta" , 0x029409 }, - { (char*) "Asia/Jayapura" , 0x02951A }, - { (char*) "Asia/Jerusalem" , 0x029607 }, - { (char*) "Asia/Kabul" , 0x029A45 }, - { (char*) "Asia/Kamchatka" , 0x029AF0 }, - { (char*) "Asia/Karachi" , 0x029DE5 }, - { (char*) "Asia/Kashgar" , 0x029EFB }, - { (char*) "Asia/Kathmandu" , 0x029F8C }, - { (char*) "Asia/Katmandu" , 0x02A039 }, - { (char*) "Asia/Khandyga" , 0x02A0E6 }, - { (char*) "Asia/Kolkata" , 0x02A417 }, - { (char*) "Asia/Krasnoyarsk" , 0x02A4FF }, - { (char*) "Asia/Kuala_Lumpur" , 0x02A809 }, - { (char*) "Asia/Kuching" , 0x02A929 }, - { (char*) "Asia/Kuwait" , 0x02AA83 }, - { (char*) "Asia/Macao" , 0x02AB14 }, - { (char*) "Asia/Macau" , 0x02AE37 }, - { (char*) "Asia/Magadan" , 0x02B15A }, - { (char*) "Asia/Makassar" , 0x02B465 }, - { (char*) "Asia/Manila" , 0x02B578 }, - { (char*) "Asia/Muscat" , 0x02B696 }, - { (char*) "Asia/Nicosia" , 0x02B727 }, - { (char*) "Asia/Novokuznetsk" , 0x02B996 }, - { (char*) "Asia/Novosibirsk" , 0x02BC89 }, - { (char*) "Asia/Omsk" , 0x02BF9A }, - { (char*) "Asia/Oral" , 0x02C298 }, - { (char*) "Asia/Phnom_Penh" , 0x02C524 }, - { (char*) "Asia/Pontianak" , 0x02C5F4 }, - { (char*) "Asia/Pyongyang" , 0x02C70D }, - { (char*) "Asia/Qatar" , 0x02C7D0 }, - { (char*) "Asia/Qostanay" , 0x02C874 }, - { (char*) "Asia/Qyzylorda" , 0x02CB0A }, - { (char*) "Asia/Rangoon" , 0x02CDA3 }, - { (char*) "Asia/Riyadh" , 0x02CE6A }, - { (char*) "Asia/Saigon" , 0x02CEFB }, - { (char*) "Asia/Sakhalin" , 0x02CFEF }, - { (char*) "Asia/Samarkand" , 0x02D306 }, - { (char*) "Asia/Seoul" , 0x02D491 }, - { (char*) "Asia/Shanghai" , 0x02D63C }, - { (char*) "Asia/Singapore" , 0x02D7DD }, - { (char*) "Asia/Srednekolymsk" , 0x02D8E9 }, - { (char*) "Asia/Taipei" , 0x02DBF9 }, - { (char*) "Asia/Tashkent" , 0x02DE04 }, - { (char*) "Asia/Tbilisi" , 0x02DF8F }, - { (char*) "Asia/Tehran" , 0x02E207 }, - { (char*) "Asia/Tel_Aviv" , 0x02E53F }, - { (char*) "Asia/Thimbu" , 0x02E97D }, - { (char*) "Asia/Thimphu" , 0x02EA23 }, - { (char*) "Asia/Tokyo" , 0x02EAC9 }, - { (char*) "Asia/Tomsk" , 0x02EBAA }, - { (char*) "Asia/Ujung_Pandang" , 0x02EEB5 }, - { (char*) "Asia/Ulaanbaatar" , 0x02EF7F }, - { (char*) "Asia/Ulan_Bator" , 0x02F1ED }, - { (char*) "Asia/Urumqi" , 0x02F44B }, - { (char*) "Asia/Ust-Nera" , 0x02F4E9 }, - { (char*) "Asia/Vientiane" , 0x02F80C }, - { (char*) "Asia/Vladivostok" , 0x02F8EE }, - { (char*) "Asia/Yakutsk" , 0x02FBF3 }, - { (char*) "Asia/Yangon" , 0x02FEF7 }, - { (char*) "Asia/Yekaterinburg" , 0x02FFBE }, - { (char*) "Asia/Yerevan" , 0x0302D0 }, - { (char*) "Atlantic/Azores" , 0x0305A0 }, - { (char*) "Atlantic/Bermuda" , 0x030B2B }, - { (char*) "Atlantic/Canary" , 0x030F37 }, - { (char*) "Atlantic/Cape_Verde" , 0x03112F }, - { (char*) "Atlantic/Faeroe" , 0x0311EA }, - { (char*) "Atlantic/Faroe" , 0x0313AF }, - { (char*) "Atlantic/Jan_Mayen" , 0x031574 }, - { (char*) "Atlantic/Madeira" , 0x031841 }, - { (char*) "Atlantic/Reykjavik" , 0x031DB8 }, - { (char*) "Atlantic/South_Georgia" , 0x0320B5 }, - { (char*) "Atlantic/St_Helena" , 0x032145 }, - { (char*) "Atlantic/Stanley" , 0x0321E6 }, - { (char*) "Australia/ACT" , 0x032507 }, - { (char*) "Australia/Adelaide" , 0x03289B }, - { (char*) "Australia/Brisbane" , 0x032C4F }, - { (char*) "Australia/Broken_Hill" , 0x032D93 }, - { (char*) "Australia/Canberra" , 0x033168 }, - { (char*) "Australia/Currie" , 0x0334FC }, - { (char*) "Australia/Darwin" , 0x0338F3 }, - { (char*) "Australia/Eucla" , 0x0339FB }, - { (char*) "Australia/Hobart" , 0x033B5A }, - { (char*) "Australia/LHI" , 0x033F59 }, - { (char*) "Australia/Lindeman" , 0x034219 }, - { (char*) "Australia/Lord_Howe" , 0x034389 }, - { (char*) "Australia/Melbourne" , 0x034659 }, - { (char*) "Australia/North" , 0x0349F5 }, - { (char*) "Australia/NSW" , 0x034AEB }, - { (char*) "Australia/Perth" , 0x034E7F }, - { (char*) "Australia/Queensland" , 0x034FDB }, - { (char*) "Australia/South" , 0x035108 }, - { (char*) "Australia/Sydney" , 0x0354AD }, - { (char*) "Australia/Tasmania" , 0x03585D }, - { (char*) "Australia/Victoria" , 0x035C54 }, - { (char*) "Australia/West" , 0x035FE8 }, - { (char*) "Australia/Yancowinna" , 0x036126 }, - { (char*) "Brazil/Acre" , 0x0364DF }, - { (char*) "Brazil/DeNoronha" , 0x03668D }, - { (char*) "Brazil/East" , 0x03687D }, - { (char*) "Brazil/West" , 0x036C41 }, - { (char*) "Canada/Atlantic" , 0x036DE9 }, - { (char*) "Canada/Central" , 0x03747D }, - { (char*) "Canada/Eastern" , 0x037997 }, - { (char*) "Canada/Mountain" , 0x038058 }, - { (char*) "Canada/Newfoundland" , 0x038585 }, - { (char*) "Canada/Pacific" , 0x038CE7 }, - { (char*) "Canada/Saskatchewan" , 0x03937C }, - { (char*) "Canada/Yukon" , 0x039606 }, - { (char*) "CET" , 0x039A17 }, - { (char*) "Chile/Continental" , 0x039E72 }, - { (char*) "Chile/EasterIsland" , 0x03A3C8 }, - { (char*) "CST6CDT" , 0x03A86A }, - { (char*) "Cuba" , 0x03AC10 }, - { (char*) "EET" , 0x03B079 }, - { (char*) "Egypt" , 0x03B32F }, - { (char*) "Eire" , 0x03B858 }, - { (char*) "EST" , 0x03BE3C }, - { (char*) "EST5EDT" , 0x03BEDD }, - { (char*) "Etc/GMT" , 0x03C283 }, - { (char*) "Etc/GMT+0" , 0x03C2FE }, - { (char*) "Etc/GMT+1" , 0x03C379 }, - { (char*) "Etc/GMT+10" , 0x03C3F6 }, - { (char*) "Etc/GMT+11" , 0x03C474 }, - { (char*) "Etc/GMT+12" , 0x03C4F2 }, - { (char*) "Etc/GMT+2" , 0x03C570 }, - { (char*) "Etc/GMT+3" , 0x03C5ED }, - { (char*) "Etc/GMT+4" , 0x03C66A }, - { (char*) "Etc/GMT+5" , 0x03C6E7 }, - { (char*) "Etc/GMT+6" , 0x03C764 }, - { (char*) "Etc/GMT+7" , 0x03C7E1 }, - { (char*) "Etc/GMT+8" , 0x03C85E }, - { (char*) "Etc/GMT+9" , 0x03C8DB }, - { (char*) "Etc/GMT-0" , 0x03C958 }, - { (char*) "Etc/GMT-1" , 0x03C9D3 }, - { (char*) "Etc/GMT-10" , 0x03CA51 }, - { (char*) "Etc/GMT-11" , 0x03CAD0 }, - { (char*) "Etc/GMT-12" , 0x03CB4F }, - { (char*) "Etc/GMT-13" , 0x03CBCE }, - { (char*) "Etc/GMT-14" , 0x03CC4D }, - { (char*) "Etc/GMT-2" , 0x03CCCC }, - { (char*) "Etc/GMT-3" , 0x03CD4A }, - { (char*) "Etc/GMT-4" , 0x03CDC8 }, - { (char*) "Etc/GMT-5" , 0x03CE46 }, - { (char*) "Etc/GMT-6" , 0x03CEC4 }, - { (char*) "Etc/GMT-7" , 0x03CF42 }, - { (char*) "Etc/GMT-8" , 0x03CFC0 }, - { (char*) "Etc/GMT-9" , 0x03D03E }, - { (char*) "Etc/GMT0" , 0x03D0BC }, - { (char*) "Etc/Greenwich" , 0x03D137 }, - { (char*) "Etc/UCT" , 0x03D1B2 }, - { (char*) "Etc/Universal" , 0x03D22D }, - { (char*) "Etc/UTC" , 0x03D2A8 }, - { (char*) "Etc/Zulu" , 0x03D323 }, - { (char*) "Europe/Amsterdam" , 0x03D39E }, - { (char*) "Europe/Andorra" , 0x03D7D9 }, - { (char*) "Europe/Astrakhan" , 0x03D96A }, - { (char*) "Europe/Athens" , 0x03DC5E }, - { (char*) "Europe/Belfast" , 0x03DF14 }, - { (char*) "Europe/Belgrade" , 0x03E55F }, - { (char*) "Europe/Berlin" , 0x03E749 }, - { (char*) "Europe/Bratislava" , 0x03EA25 }, - { (char*) "Europe/Brussels" , 0x03ED04 }, - { (char*) "Europe/Bucharest" , 0x03F15F }, - { (char*) "Europe/Budapest" , 0x03F400 }, - { (char*) "Europe/Busingen" , 0x03F70A }, - { (char*) "Europe/Chisinau" , 0x03F90F }, - { (char*) "Europe/Copenhagen" , 0x03FDD2 }, - { (char*) "Europe/Dublin" , 0x04004D }, - { (char*) "Europe/Gibraltar" , 0x040631 }, - { (char*) "Europe/Guernsey" , 0x040B01 }, - { (char*) "Europe/Helsinki" , 0x041158 }, - { (char*) "Europe/Isle_of_Man" , 0x041345 }, - { (char*) "Europe/Istanbul" , 0x041990 }, - { (char*) "Europe/Jersey" , 0x041E4C }, - { (char*) "Europe/Kaliningrad" , 0x0424A3 }, - { (char*) "Europe/Kiev" , 0x04284B }, - { (char*) "Europe/Kirov" , 0x042A85 }, - { (char*) "Europe/Kyiv" , 0x042D7E }, - { (char*) "Europe/Lisbon" , 0x042FC7 }, - { (char*) "Europe/Ljubljana" , 0x04359D }, - { (char*) "Europe/London" , 0x043787 }, - { (char*) "Europe/Luxembourg" , 0x043DD2 }, - { (char*) "Europe/Madrid" , 0x04421D }, - { (char*) "Europe/Malta" , 0x0445BA }, - { (char*) "Europe/Mariehamn" , 0x044966 }, - { (char*) "Europe/Minsk" , 0x044B53 }, - { (char*) "Europe/Monaco" , 0x044E87 }, - { (char*) "Europe/Moscow" , 0x0452ED }, - { (char*) "Europe/Nicosia" , 0x045699 }, - { (char*) "Europe/Oslo" , 0x0458FA }, - { (char*) "Europe/Paris" , 0x045BAA }, - { (char*) "Europe/Podgorica" , 0x046007 }, - { (char*) "Europe/Prague" , 0x0461F1 }, - { (char*) "Europe/Riga" , 0x0464D0 }, - { (char*) "Europe/Rome" , 0x046792 }, - { (char*) "Europe/Samara" , 0x046B51 }, - { (char*) "Europe/San_Marino" , 0x046E52 }, - { (char*) "Europe/Sarajevo" , 0x047211 }, - { (char*) "Europe/Saratov" , 0x0473FB }, - { (char*) "Europe/Simferopol" , 0x0476ED }, - { (char*) "Europe/Skopje" , 0x047A60 }, - { (char*) "Europe/Sofia" , 0x047C4A }, - { (char*) "Europe/Stockholm" , 0x047EA6 }, - { (char*) "Europe/Tallinn" , 0x0480A3 }, - { (char*) "Europe/Tirane" , 0x048352 }, - { (char*) "Europe/Tiraspol" , 0x0485BA }, - { (char*) "Europe/Ulyanovsk" , 0x048A7D }, - { (char*) "Europe/Uzhgorod" , 0x048D93 }, - { (char*) "Europe/Vaduz" , 0x048FCD }, - { (char*) "Europe/Vatican" , 0x0491B7 }, - { (char*) "Europe/Vienna" , 0x049576 }, - { (char*) "Europe/Vilnius" , 0x049814 }, - { (char*) "Europe/Volgograd" , 0x049AC4 }, - { (char*) "Europe/Warsaw" , 0x049DD3 }, - { (char*) "Europe/Zagreb" , 0x04A17A }, - { (char*) "Europe/Zaporozhye" , 0x04A364 }, - { (char*) "Europe/Zurich" , 0x04A59E }, - { (char*) "Factory" , 0x04A79B }, - { (char*) "GB" , 0x04A818 }, - { (char*) "GB-Eire" , 0x04AE63 }, - { (char*) "GMT" , 0x04B4AE }, - { (char*) "GMT+0" , 0x04B529 }, - { (char*) "GMT-0" , 0x04B5A4 }, - { (char*) "GMT0" , 0x04B61F }, - { (char*) "Greenwich" , 0x04B69A }, - { (char*) "Hongkong" , 0x04B715 }, - { (char*) "HST" , 0x04BA28 }, - { (char*) "Iceland" , 0x04BB11 }, - { (char*) "Indian/Antananarivo" , 0x04BB9F }, - { (char*) "Indian/Chagos" , 0x04BC4B }, - { (char*) "Indian/Christmas" , 0x04BCEF }, - { (char*) "Indian/Cocos" , 0x04BD80 }, - { (char*) "Indian/Comoro" , 0x04BE18 }, - { (char*) "Indian/Kerguelen" , 0x04BEA7 }, - { (char*) "Indian/Mahe" , 0x04BF38 }, - { (char*) "Indian/Maldives" , 0x04BFC9 }, - { (char*) "Indian/Mauritius" , 0x04C06D }, - { (char*) "Indian/Mayotte" , 0x04C12C }, - { (char*) "Indian/Reunion" , 0x04C1BB }, - { (char*) "Iran" , 0x04C24C }, - { (char*) "Israel" , 0x04C584 }, - { (char*) "Jamaica" , 0x04C9C2 }, - { (char*) "Japan" , 0x04CB21 }, - { (char*) "Kwajalein" , 0x04CC02 }, - { (char*) "Libya" , 0x04CCE9 }, - { (char*) "MET" , 0x04CEA4 }, - { (char*) "Mexico/BajaNorte" , 0x04D2FF }, - { (char*) "Mexico/BajaSur" , 0x04D862 }, - { (char*) "Mexico/General" , 0x04DB20 }, - { (char*) "MST" , 0x04DE31 }, - { (char*) "MST7MDT" , 0x04DF2D }, - { (char*) "Navajo" , 0x04E2D3 }, - { (char*) "NZ" , 0x04E6F1 }, - { (char*) "NZ-CHAT" , 0x04EB10 }, - { (char*) "Pacific/Apia" , 0x04EE44 }, - { (char*) "Pacific/Auckland" , 0x04EFE7 }, - { (char*) "Pacific/Bougainville" , 0x04F419 }, - { (char*) "Pacific/Chatham" , 0x04F4FA }, - { (char*) "Pacific/Chuuk" , 0x04F83D }, - { (char*) "Pacific/Easter" , 0x04F91B }, - { (char*) "Pacific/Efate" , 0x04FDCA }, - { (char*) "Pacific/Enderbury" , 0x04FF2C }, - { (char*) "Pacific/Fakaofo" , 0x04FFE4 }, - { (char*) "Pacific/Fiji" , 0x050089 }, - { (char*) "Pacific/Funafuti" , 0x050221 }, - { (char*) "Pacific/Galapagos" , 0x0502B3 }, - { (char*) "Pacific/Gambier" , 0x05037F }, - { (char*) "Pacific/Guadalcanal" , 0x05041E }, - { (char*) "Pacific/Guam" , 0x0504B0 }, - { (char*) "Pacific/Honolulu" , 0x05061A }, - { (char*) "Pacific/Johnston" , 0x050709 }, - { (char*) "Pacific/Kanton" , 0x0507F2 }, - { (char*) "Pacific/Kiritimati" , 0x0508B9 }, - { (char*) "Pacific/Kosrae" , 0x05097F }, - { (char*) "Pacific/Kwajalein" , 0x050A83 }, - { (char*) "Pacific/Majuro" , 0x050B73 }, - { (char*) "Pacific/Marquesas" , 0x050C71 }, - { (char*) "Pacific/Midway" , 0x050D19 }, - { (char*) "Pacific/Nauru" , 0x050DDC }, - { (char*) "Pacific/Niue" , 0x050E9F }, - { (char*) "Pacific/Norfolk" , 0x050F45 }, - { (char*) "Pacific/Noumea" , 0x05103E }, - { (char*) "Pacific/Pago_Pago" , 0x051110 }, - { (char*) "Pacific/Palau" , 0x0511AE }, - { (char*) "Pacific/Pitcairn" , 0x05124E }, - { (char*) "Pacific/Pohnpei" , 0x0512F3 }, - { (char*) "Pacific/Ponape" , 0x0513E3 }, - { (char*) "Pacific/Port_Moresby" , 0x051475 }, - { (char*) "Pacific/Rarotonga" , 0x051533 }, - { (char*) "Pacific/Saipan" , 0x0516D5 }, - { (char*) "Pacific/Samoa" , 0x051836 }, - { (char*) "Pacific/Tahiti" , 0x0518D4 }, - { (char*) "Pacific/Tarawa" , 0x051974 }, - { (char*) "Pacific/Tongatapu" , 0x051A15 }, - { (char*) "Pacific/Truk" , 0x051B0E }, - { (char*) "Pacific/Wake" , 0x051BB4 }, - { (char*) "Pacific/Wallis" , 0x051C51 }, - { (char*) "Pacific/Yap" , 0x051CE3 }, - { (char*) "Poland" , 0x051D89 }, - { (char*) "Portugal" , 0x052130 }, - { (char*) "PRC" , 0x0526F3 }, - { (char*) "PST8PDT" , 0x052888 }, - { (char*) "ROC" , 0x052C2E }, - { (char*) "ROK" , 0x052E39 }, - { (char*) "Singapore" , 0x052FE4 }, - { (char*) "Turkey" , 0x0530F0 }, - { (char*) "UCT" , 0x0535AC }, - { (char*) "Universal" , 0x053627 }, - { (char*) "US/Alaska" , 0x0536A2 }, - { (char*) "US/Aleutian" , 0x053A7F }, - { (char*) "US/Arizona" , 0x053E54 }, - { (char*) "US/Central" , 0x053F50 }, - { (char*) "US/East-Indiana" , 0x054636 }, - { (char*) "US/Eastern" , 0x054855 }, - { (char*) "US/Hawaii" , 0x054F31 }, - { (char*) "US/Indiana-Starke" , 0x05501A }, - { (char*) "US/Michigan" , 0x05541E }, - { (char*) "US/Mountain" , 0x0557AD }, - { (char*) "US/Pacific" , 0x055BCB }, - { (char*) "US/Samoa" , 0x0560E5 }, - { (char*) "UTC" , 0x056183 }, - { (char*) "W-SU" , 0x0561FE }, - { (char*) "WET" , 0x056596 }, - { (char*) "Zulu" , 0x056B59 }, + { (char*) "America/Rankin_Inlet" , 0x01B104 }, + { (char*) "America/Recife" , 0x01B44D }, + { (char*) "America/Regina" , 0x01B647 }, + { (char*) "America/Resolute" , 0x01B8E6 }, + { (char*) "America/Rio_Branco" , 0x01BC30 }, + { (char*) "America/Rosario" , 0x01BDE2 }, + { (char*) "America/Santa_Isabel" , 0x01C0B2 }, + { (char*) "America/Santarem" , 0x01C615 }, + { (char*) "America/Santiago" , 0x01C7C5 }, + { (char*) "America/Santo_Domingo" , 0x01CD28 }, + { (char*) "America/Sao_Paulo" , 0x01CE71 }, + { (char*) "America/Scoresbysund" , 0x01D26B }, + { (char*) "America/Shiprock" , 0x01D66C }, + { (char*) "America/Sitka" , 0x01DA8A }, + { (char*) "America/St_Barthelemy" , 0x01DE65 }, + { (char*) "America/St_Johns" , 0x01DF22 }, + { (char*) "America/St_Kitts" , 0x01E69F }, + { (char*) "America/St_Lucia" , 0x01E72D }, + { (char*) "America/St_Thomas" , 0x01E7CE }, + { (char*) "America/St_Vincent" , 0x01E85C }, + { (char*) "America/Swift_Current" , 0x01E8FD }, + { (char*) "America/Tegucigalpa" , 0x01EA8B }, + { (char*) "America/Thule" , 0x01EB59 }, + { (char*) "America/Thunder_Bay" , 0x01ED3A }, + { (char*) "America/Tijuana" , 0x01F3FB }, + { (char*) "America/Toronto" , 0x01F96D }, + { (char*) "America/Tortola" , 0x02004C }, + { (char*) "America/Vancouver" , 0x0200DA }, + { (char*) "America/Virgin" , 0x020784 }, + { (char*) "America/Whitehorse" , 0x020841 }, + { (char*) "America/Winnipeg" , 0x020C64 }, + { (char*) "America/Yakutat" , 0x0212F3 }, + { (char*) "America/Yellowknife" , 0x0216C1 }, + { (char*) "Antarctica/Casey" , 0x021BEE }, + { (char*) "Antarctica/Davis" , 0x021D1E }, + { (char*) "Antarctica/DumontDUrville" , 0x021DF4 }, + { (char*) "Antarctica/Macquarie" , 0x021EA8 }, + { (char*) "Antarctica/Mawson" , 0x022294 }, + { (char*) "Antarctica/McMurdo" , 0x02233E }, + { (char*) "Antarctica/Palmer" , 0x022670 }, + { (char*) "Antarctica/Rothera" , 0x0229F9 }, + { (char*) "Antarctica/South_Pole" , 0x022A90 }, + { (char*) "Antarctica/Syowa" , 0x022EAF }, + { (char*) "Antarctica/Troll" , 0x022F45 }, + { (char*) "Antarctica/Vostok" , 0x022FF4 }, + { (char*) "Arctic/Longyearbyen" , 0x0230B0 }, + { (char*) "Asia/Aden" , 0x02337D }, + { (char*) "Asia/Almaty" , 0x02340E }, + { (char*) "Asia/Amman" , 0x023696 }, + { (char*) "Asia/Anadyr" , 0x023A42 }, + { (char*) "Asia/Aqtau" , 0x023D48 }, + { (char*) "Asia/Aqtobe" , 0x023FC7 }, + { (char*) "Asia/Ashgabat" , 0x024247 }, + { (char*) "Asia/Ashkhabad" , 0x0243CA }, + { (char*) "Asia/Atyrau" , 0x02454D }, + { (char*) "Asia/Baghdad" , 0x0247D6 }, + { (char*) "Asia/Bahrain" , 0x024A58 }, + { (char*) "Asia/Baku" , 0x024B11 }, + { (char*) "Asia/Bangkok" , 0x024E05 }, + { (char*) "Asia/Barnaul" , 0x024EA9 }, + { (char*) "Asia/Beirut" , 0x0251B4 }, + { (char*) "Asia/Bishkek" , 0x02549C }, + { (char*) "Asia/Brunei" , 0x025712 }, + { (char*) "Asia/Calcutta" , 0x0257B8 }, + { (char*) "Asia/Chita" , 0x0258A0 }, + { (char*) "Asia/Choibalsan" , 0x025BAE }, + { (char*) "Asia/Chongqing" , 0x025E0C }, + { (char*) "Asia/Chungking" , 0x025FA1 }, + { (char*) "Asia/Colombo" , 0x026136 }, + { (char*) "Asia/Dacca" , 0x026239 }, + { (char*) "Asia/Damascus" , 0x02632C }, + { (char*) "Asia/Dhaka" , 0x02680A }, + { (char*) "Asia/Dili" , 0x0268FD }, + { (char*) "Asia/Dubai" , 0x0269B3 }, + { (char*) "Asia/Dushanbe" , 0x026A44 }, + { (char*) "Asia/Famagusta" , 0x026BBE }, + { (char*) "Asia/Gaza" , 0x026F85 }, + { (char*) "Asia/Harbin" , 0x027B21 }, + { (char*) "Asia/Hebron" , 0x027CB6 }, + { (char*) "Asia/Ho_Chi_Minh" , 0x028863 }, + { (char*) "Asia/Hong_Kong" , 0x028957 }, + { (char*) "Asia/Hovd" , 0x028C6A }, + { (char*) "Asia/Irkutsk" , 0x028EDE }, + { (char*) "Asia/Istanbul" , 0x0291FC }, + { (char*) "Asia/Jakarta" , 0x0296B8 }, + { (char*) "Asia/Jayapura" , 0x0297C9 }, + { (char*) "Asia/Jerusalem" , 0x0298B6 }, + { (char*) "Asia/Kabul" , 0x029CF4 }, + { (char*) "Asia/Kamchatka" , 0x029D9F }, + { (char*) "Asia/Karachi" , 0x02A094 }, + { (char*) "Asia/Kashgar" , 0x02A1AA }, + { (char*) "Asia/Kathmandu" , 0x02A23B }, + { (char*) "Asia/Katmandu" , 0x02A2E8 }, + { (char*) "Asia/Khandyga" , 0x02A395 }, + { (char*) "Asia/Kolkata" , 0x02A6C6 }, + { (char*) "Asia/Krasnoyarsk" , 0x02A7AE }, + { (char*) "Asia/Kuala_Lumpur" , 0x02AAB8 }, + { (char*) "Asia/Kuching" , 0x02ABD8 }, + { (char*) "Asia/Kuwait" , 0x02AD32 }, + { (char*) "Asia/Macao" , 0x02ADC3 }, + { (char*) "Asia/Macau" , 0x02B0E6 }, + { (char*) "Asia/Magadan" , 0x02B409 }, + { (char*) "Asia/Makassar" , 0x02B714 }, + { (char*) "Asia/Manila" , 0x02B827 }, + { (char*) "Asia/Muscat" , 0x02B945 }, + { (char*) "Asia/Nicosia" , 0x02B9D6 }, + { (char*) "Asia/Novokuznetsk" , 0x02BC45 }, + { (char*) "Asia/Novosibirsk" , 0x02BF38 }, + { (char*) "Asia/Omsk" , 0x02C249 }, + { (char*) "Asia/Oral" , 0x02C547 }, + { (char*) "Asia/Phnom_Penh" , 0x02C7D3 }, + { (char*) "Asia/Pontianak" , 0x02C8A3 }, + { (char*) "Asia/Pyongyang" , 0x02C9BC }, + { (char*) "Asia/Qatar" , 0x02CA7F }, + { (char*) "Asia/Qostanay" , 0x02CB23 }, + { (char*) "Asia/Qyzylorda" , 0x02CDB9 }, + { (char*) "Asia/Rangoon" , 0x02D052 }, + { (char*) "Asia/Riyadh" , 0x02D119 }, + { (char*) "Asia/Saigon" , 0x02D1AA }, + { (char*) "Asia/Sakhalin" , 0x02D29E }, + { (char*) "Asia/Samarkand" , 0x02D5B5 }, + { (char*) "Asia/Seoul" , 0x02D740 }, + { (char*) "Asia/Shanghai" , 0x02D8EB }, + { (char*) "Asia/Singapore" , 0x02DA8C }, + { (char*) "Asia/Srednekolymsk" , 0x02DB98 }, + { (char*) "Asia/Taipei" , 0x02DEA8 }, + { (char*) "Asia/Tashkent" , 0x02E0B3 }, + { (char*) "Asia/Tbilisi" , 0x02E23E }, + { (char*) "Asia/Tehran" , 0x02E4B6 }, + { (char*) "Asia/Tel_Aviv" , 0x02E7EE }, + { (char*) "Asia/Thimbu" , 0x02EC2C }, + { (char*) "Asia/Thimphu" , 0x02ECD2 }, + { (char*) "Asia/Tokyo" , 0x02ED78 }, + { (char*) "Asia/Tomsk" , 0x02EE59 }, + { (char*) "Asia/Ujung_Pandang" , 0x02F164 }, + { (char*) "Asia/Ulaanbaatar" , 0x02F22E }, + { (char*) "Asia/Ulan_Bator" , 0x02F49C }, + { (char*) "Asia/Urumqi" , 0x02F6FA }, + { (char*) "Asia/Ust-Nera" , 0x02F798 }, + { (char*) "Asia/Vientiane" , 0x02FABB }, + { (char*) "Asia/Vladivostok" , 0x02FB9D }, + { (char*) "Asia/Yakutsk" , 0x02FEA2 }, + { (char*) "Asia/Yangon" , 0x0301A6 }, + { (char*) "Asia/Yekaterinburg" , 0x03026D }, + { (char*) "Asia/Yerevan" , 0x03057F }, + { (char*) "Atlantic/Azores" , 0x03084F }, + { (char*) "Atlantic/Bermuda" , 0x030DDA }, + { (char*) "Atlantic/Canary" , 0x0311E6 }, + { (char*) "Atlantic/Cape_Verde" , 0x0313DE }, + { (char*) "Atlantic/Faeroe" , 0x031499 }, + { (char*) "Atlantic/Faroe" , 0x03165E }, + { (char*) "Atlantic/Jan_Mayen" , 0x031823 }, + { (char*) "Atlantic/Madeira" , 0x031AF0 }, + { (char*) "Atlantic/Reykjavik" , 0x032067 }, + { (char*) "Atlantic/South_Georgia" , 0x032364 }, + { (char*) "Atlantic/St_Helena" , 0x0323F4 }, + { (char*) "Atlantic/Stanley" , 0x032495 }, + { (char*) "Australia/ACT" , 0x0327B6 }, + { (char*) "Australia/Adelaide" , 0x032B4A }, + { (char*) "Australia/Brisbane" , 0x032EFE }, + { (char*) "Australia/Broken_Hill" , 0x033042 }, + { (char*) "Australia/Canberra" , 0x033417 }, + { (char*) "Australia/Currie" , 0x0337AB }, + { (char*) "Australia/Darwin" , 0x033BA2 }, + { (char*) "Australia/Eucla" , 0x033CAA }, + { (char*) "Australia/Hobart" , 0x033E09 }, + { (char*) "Australia/LHI" , 0x034208 }, + { (char*) "Australia/Lindeman" , 0x0344C8 }, + { (char*) "Australia/Lord_Howe" , 0x034638 }, + { (char*) "Australia/Melbourne" , 0x034908 }, + { (char*) "Australia/North" , 0x034CA4 }, + { (char*) "Australia/NSW" , 0x034D9A }, + { (char*) "Australia/Perth" , 0x03512E }, + { (char*) "Australia/Queensland" , 0x03528A }, + { (char*) "Australia/South" , 0x0353B7 }, + { (char*) "Australia/Sydney" , 0x03575C }, + { (char*) "Australia/Tasmania" , 0x035B0C }, + { (char*) "Australia/Victoria" , 0x035F03 }, + { (char*) "Australia/West" , 0x036297 }, + { (char*) "Australia/Yancowinna" , 0x0363D5 }, + { (char*) "Brazil/Acre" , 0x03678E }, + { (char*) "Brazil/DeNoronha" , 0x03693C }, + { (char*) "Brazil/East" , 0x036B2C }, + { (char*) "Brazil/West" , 0x036EF0 }, + { (char*) "Canada/Atlantic" , 0x037098 }, + { (char*) "Canada/Central" , 0x03772C }, + { (char*) "Canada/Eastern" , 0x037D9D }, + { (char*) "Canada/Mountain" , 0x03845E }, + { (char*) "Canada/Newfoundland" , 0x03898B }, + { (char*) "Canada/Pacific" , 0x0390ED }, + { (char*) "Canada/Saskatchewan" , 0x039782 }, + { (char*) "Canada/Yukon" , 0x039A0C }, + { (char*) "CET" , 0x039E1D }, + { (char*) "Chile/Continental" , 0x03A278 }, + { (char*) "Chile/EasterIsland" , 0x03A7CE }, + { (char*) "CST6CDT" , 0x03AC70 }, + { (char*) "Cuba" , 0x03B016 }, + { (char*) "EET" , 0x03B47F }, + { (char*) "Egypt" , 0x03B735 }, + { (char*) "Eire" , 0x03BC5E }, + { (char*) "EST" , 0x03C242 }, + { (char*) "EST5EDT" , 0x03C2E3 }, + { (char*) "Etc/GMT" , 0x03C689 }, + { (char*) "Etc/GMT+0" , 0x03C704 }, + { (char*) "Etc/GMT+1" , 0x03C77F }, + { (char*) "Etc/GMT+10" , 0x03C7FC }, + { (char*) "Etc/GMT+11" , 0x03C87A }, + { (char*) "Etc/GMT+12" , 0x03C8F8 }, + { (char*) "Etc/GMT+2" , 0x03C976 }, + { (char*) "Etc/GMT+3" , 0x03C9F3 }, + { (char*) "Etc/GMT+4" , 0x03CA70 }, + { (char*) "Etc/GMT+5" , 0x03CAED }, + { (char*) "Etc/GMT+6" , 0x03CB6A }, + { (char*) "Etc/GMT+7" , 0x03CBE7 }, + { (char*) "Etc/GMT+8" , 0x03CC64 }, + { (char*) "Etc/GMT+9" , 0x03CCE1 }, + { (char*) "Etc/GMT-0" , 0x03CD5E }, + { (char*) "Etc/GMT-1" , 0x03CDD9 }, + { (char*) "Etc/GMT-10" , 0x03CE57 }, + { (char*) "Etc/GMT-11" , 0x03CED6 }, + { (char*) "Etc/GMT-12" , 0x03CF55 }, + { (char*) "Etc/GMT-13" , 0x03CFD4 }, + { (char*) "Etc/GMT-14" , 0x03D053 }, + { (char*) "Etc/GMT-2" , 0x03D0D2 }, + { (char*) "Etc/GMT-3" , 0x03D150 }, + { (char*) "Etc/GMT-4" , 0x03D1CE }, + { (char*) "Etc/GMT-5" , 0x03D24C }, + { (char*) "Etc/GMT-6" , 0x03D2CA }, + { (char*) "Etc/GMT-7" , 0x03D348 }, + { (char*) "Etc/GMT-8" , 0x03D3C6 }, + { (char*) "Etc/GMT-9" , 0x03D444 }, + { (char*) "Etc/GMT0" , 0x03D4C2 }, + { (char*) "Etc/Greenwich" , 0x03D53D }, + { (char*) "Etc/UCT" , 0x03D5B8 }, + { (char*) "Etc/Universal" , 0x03D633 }, + { (char*) "Etc/UTC" , 0x03D6AE }, + { (char*) "Etc/Zulu" , 0x03D729 }, + { (char*) "Europe/Amsterdam" , 0x03D7A4 }, + { (char*) "Europe/Andorra" , 0x03DBDF }, + { (char*) "Europe/Astrakhan" , 0x03DD70 }, + { (char*) "Europe/Athens" , 0x03E064 }, + { (char*) "Europe/Belfast" , 0x03E31A }, + { (char*) "Europe/Belgrade" , 0x03E965 }, + { (char*) "Europe/Berlin" , 0x03EB4F }, + { (char*) "Europe/Bratislava" , 0x03EE2B }, + { (char*) "Europe/Brussels" , 0x03F10A }, + { (char*) "Europe/Bucharest" , 0x03F565 }, + { (char*) "Europe/Budapest" , 0x03F806 }, + { (char*) "Europe/Busingen" , 0x03FB10 }, + { (char*) "Europe/Chisinau" , 0x03FD15 }, + { (char*) "Europe/Copenhagen" , 0x0401D8 }, + { (char*) "Europe/Dublin" , 0x040453 }, + { (char*) "Europe/Gibraltar" , 0x040A37 }, + { (char*) "Europe/Guernsey" , 0x040F07 }, + { (char*) "Europe/Helsinki" , 0x04155E }, + { (char*) "Europe/Isle_of_Man" , 0x04174B }, + { (char*) "Europe/Istanbul" , 0x041D96 }, + { (char*) "Europe/Jersey" , 0x042252 }, + { (char*) "Europe/Kaliningrad" , 0x0428A9 }, + { (char*) "Europe/Kiev" , 0x042C51 }, + { (char*) "Europe/Kirov" , 0x042E8B }, + { (char*) "Europe/Kyiv" , 0x043184 }, + { (char*) "Europe/Lisbon" , 0x0433CD }, + { (char*) "Europe/Ljubljana" , 0x0439A3 }, + { (char*) "Europe/London" , 0x043B8D }, + { (char*) "Europe/Luxembourg" , 0x0441D8 }, + { (char*) "Europe/Madrid" , 0x044623 }, + { (char*) "Europe/Malta" , 0x0449C0 }, + { (char*) "Europe/Mariehamn" , 0x044D6C }, + { (char*) "Europe/Minsk" , 0x044F59 }, + { (char*) "Europe/Monaco" , 0x04528D }, + { (char*) "Europe/Moscow" , 0x0456F3 }, + { (char*) "Europe/Nicosia" , 0x045A9F }, + { (char*) "Europe/Oslo" , 0x045D00 }, + { (char*) "Europe/Paris" , 0x045FB0 }, + { (char*) "Europe/Podgorica" , 0x04640D }, + { (char*) "Europe/Prague" , 0x0465F7 }, + { (char*) "Europe/Riga" , 0x0468D6 }, + { (char*) "Europe/Rome" , 0x046B98 }, + { (char*) "Europe/Samara" , 0x046F57 }, + { (char*) "Europe/San_Marino" , 0x047258 }, + { (char*) "Europe/Sarajevo" , 0x047617 }, + { (char*) "Europe/Saratov" , 0x047801 }, + { (char*) "Europe/Simferopol" , 0x047AF3 }, + { (char*) "Europe/Skopje" , 0x047E66 }, + { (char*) "Europe/Sofia" , 0x048050 }, + { (char*) "Europe/Stockholm" , 0x0482AC }, + { (char*) "Europe/Tallinn" , 0x0484A9 }, + { (char*) "Europe/Tirane" , 0x048758 }, + { (char*) "Europe/Tiraspol" , 0x0489C0 }, + { (char*) "Europe/Ulyanovsk" , 0x048E83 }, + { (char*) "Europe/Uzhgorod" , 0x049199 }, + { (char*) "Europe/Vaduz" , 0x0493D3 }, + { (char*) "Europe/Vatican" , 0x0495BD }, + { (char*) "Europe/Vienna" , 0x04997C }, + { (char*) "Europe/Vilnius" , 0x049C1A }, + { (char*) "Europe/Volgograd" , 0x049ECA }, + { (char*) "Europe/Warsaw" , 0x04A1D9 }, + { (char*) "Europe/Zagreb" , 0x04A580 }, + { (char*) "Europe/Zaporozhye" , 0x04A76A }, + { (char*) "Europe/Zurich" , 0x04A9A4 }, + { (char*) "Factory" , 0x04ABA1 }, + { (char*) "GB" , 0x04AC1E }, + { (char*) "GB-Eire" , 0x04B269 }, + { (char*) "GMT" , 0x04B8B4 }, + { (char*) "GMT+0" , 0x04B92F }, + { (char*) "GMT-0" , 0x04B9AA }, + { (char*) "GMT0" , 0x04BA25 }, + { (char*) "Greenwich" , 0x04BAA0 }, + { (char*) "Hongkong" , 0x04BB1B }, + { (char*) "HST" , 0x04BE2E }, + { (char*) "Iceland" , 0x04BF17 }, + { (char*) "Indian/Antananarivo" , 0x04BFA5 }, + { (char*) "Indian/Chagos" , 0x04C051 }, + { (char*) "Indian/Christmas" , 0x04C0F5 }, + { (char*) "Indian/Cocos" , 0x04C186 }, + { (char*) "Indian/Comoro" , 0x04C21E }, + { (char*) "Indian/Kerguelen" , 0x04C2AD }, + { (char*) "Indian/Mahe" , 0x04C33E }, + { (char*) "Indian/Maldives" , 0x04C3CF }, + { (char*) "Indian/Mauritius" , 0x04C473 }, + { (char*) "Indian/Mayotte" , 0x04C532 }, + { (char*) "Indian/Reunion" , 0x04C5C1 }, + { (char*) "Iran" , 0x04C652 }, + { (char*) "Israel" , 0x04C98A }, + { (char*) "Jamaica" , 0x04CDC8 }, + { (char*) "Japan" , 0x04CF27 }, + { (char*) "Kwajalein" , 0x04D008 }, + { (char*) "Libya" , 0x04D0EF }, + { (char*) "MET" , 0x04D2AA }, + { (char*) "Mexico/BajaNorte" , 0x04D705 }, + { (char*) "Mexico/BajaSur" , 0x04DC68 }, + { (char*) "Mexico/General" , 0x04DF26 }, + { (char*) "MST" , 0x04E237 }, + { (char*) "MST7MDT" , 0x04E333 }, + { (char*) "Navajo" , 0x04E6D9 }, + { (char*) "NZ" , 0x04EAF7 }, + { (char*) "NZ-CHAT" , 0x04EF16 }, + { (char*) "Pacific/Apia" , 0x04F24A }, + { (char*) "Pacific/Auckland" , 0x04F3ED }, + { (char*) "Pacific/Bougainville" , 0x04F81F }, + { (char*) "Pacific/Chatham" , 0x04F900 }, + { (char*) "Pacific/Chuuk" , 0x04FC43 }, + { (char*) "Pacific/Easter" , 0x04FD21 }, + { (char*) "Pacific/Efate" , 0x0501D0 }, + { (char*) "Pacific/Enderbury" , 0x050332 }, + { (char*) "Pacific/Fakaofo" , 0x0503EA }, + { (char*) "Pacific/Fiji" , 0x05048F }, + { (char*) "Pacific/Funafuti" , 0x050627 }, + { (char*) "Pacific/Galapagos" , 0x0506B9 }, + { (char*) "Pacific/Gambier" , 0x050785 }, + { (char*) "Pacific/Guadalcanal" , 0x050824 }, + { (char*) "Pacific/Guam" , 0x0508B6 }, + { (char*) "Pacific/Honolulu" , 0x050A20 }, + { (char*) "Pacific/Johnston" , 0x050B0F }, + { (char*) "Pacific/Kanton" , 0x050BF8 }, + { (char*) "Pacific/Kiritimati" , 0x050CBF }, + { (char*) "Pacific/Kosrae" , 0x050D85 }, + { (char*) "Pacific/Kwajalein" , 0x050E89 }, + { (char*) "Pacific/Majuro" , 0x050F79 }, + { (char*) "Pacific/Marquesas" , 0x051077 }, + { (char*) "Pacific/Midway" , 0x05111F }, + { (char*) "Pacific/Nauru" , 0x0511E2 }, + { (char*) "Pacific/Niue" , 0x0512A5 }, + { (char*) "Pacific/Norfolk" , 0x05134B }, + { (char*) "Pacific/Noumea" , 0x051444 }, + { (char*) "Pacific/Pago_Pago" , 0x051516 }, + { (char*) "Pacific/Palau" , 0x0515B4 }, + { (char*) "Pacific/Pitcairn" , 0x051654 }, + { (char*) "Pacific/Pohnpei" , 0x0516F9 }, + { (char*) "Pacific/Ponape" , 0x0517E9 }, + { (char*) "Pacific/Port_Moresby" , 0x05187B }, + { (char*) "Pacific/Rarotonga" , 0x051939 }, + { (char*) "Pacific/Saipan" , 0x051ADB }, + { (char*) "Pacific/Samoa" , 0x051C3C }, + { (char*) "Pacific/Tahiti" , 0x051CDA }, + { (char*) "Pacific/Tarawa" , 0x051D7A }, + { (char*) "Pacific/Tongatapu" , 0x051E1B }, + { (char*) "Pacific/Truk" , 0x051F14 }, + { (char*) "Pacific/Wake" , 0x051FBA }, + { (char*) "Pacific/Wallis" , 0x052057 }, + { (char*) "Pacific/Yap" , 0x0520E9 }, + { (char*) "Poland" , 0x05218F }, + { (char*) "Portugal" , 0x052536 }, + { (char*) "PRC" , 0x052AF9 }, + { (char*) "PST8PDT" , 0x052C8E }, + { (char*) "ROC" , 0x053034 }, + { (char*) "ROK" , 0x05323F }, + { (char*) "Singapore" , 0x0533EA }, + { (char*) "Turkey" , 0x0534F6 }, + { (char*) "UCT" , 0x0539B2 }, + { (char*) "Universal" , 0x053A2D }, + { (char*) "US/Alaska" , 0x053AA8 }, + { (char*) "US/Aleutian" , 0x053E85 }, + { (char*) "US/Arizona" , 0x05425A }, + { (char*) "US/Central" , 0x054356 }, + { (char*) "US/East-Indiana" , 0x054A3C }, + { (char*) "US/Eastern" , 0x054C5B }, + { (char*) "US/Hawaii" , 0x055337 }, + { (char*) "US/Indiana-Starke" , 0x055420 }, + { (char*) "US/Michigan" , 0x055824 }, + { (char*) "US/Mountain" , 0x055BB3 }, + { (char*) "US/Pacific" , 0x055FD1 }, + { (char*) "US/Samoa" , 0x0564EB }, + { (char*) "UTC" , 0x056589 }, + { (char*) "W-SU" , 0x056604 }, + { (char*) "WET" , 0x05699C }, + { (char*) "Zulu" , 0x056F5F }, }; -const unsigned char timelib_timezone_db_data_builtin[355284] = { +const unsigned char timelib_timezone_db_data_builtin[356314] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -7917,7 +7917,7 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, 0xA0, 0x3B, 0x80, 0xFF, @@ -7980,7 +7980,27 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, -0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, +0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xD6, 0x4E, 0x70, 0x00, +0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xB6, 0x30, 0x70, 0x00, +0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x50, 0x96, 0x12, 0x70, 0x00, +0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x52, 0x75, 0xF4, 0x70, 0x00, +0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0xD6, 0x70, 0x00, +0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x56, 0x35, 0xB8, 0x70, 0x00, +0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x61, 0x87, 0x79, 0x70, 0x00, +0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x5B, 0x70, 0x00, +0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, 0x00, 0x00, 0x65, 0x47, 0x3D, 0x70, 0x00, +0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, 0x00, 0x00, 0x67, 0x27, 0x1F, 0x70, 0x00, +0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x69, 0x07, 0x01, 0x70, 0x00, +0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE6, 0xE3, 0x70, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, @@ -7988,12 +8008,14 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, -0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, -0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x0A, 0x43, 0x53, 0x54, 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, -0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x05, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, +0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, +0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, +0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x0A, +0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, /* America/Rankin_Inlet */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -9538,7 +9560,7 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, 0xA0, 0x3B, 0x80, 0xFF, @@ -9601,7 +9623,27 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, -0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, +0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xD6, 0x4E, 0x70, 0x00, +0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xB6, 0x30, 0x70, 0x00, +0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x50, 0x96, 0x12, 0x70, 0x00, +0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x52, 0x75, 0xF4, 0x70, 0x00, +0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0xD6, 0x70, 0x00, +0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x56, 0x35, 0xB8, 0x70, 0x00, +0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x61, 0x87, 0x79, 0x70, 0x00, +0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x5B, 0x70, 0x00, +0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, 0x00, 0x00, 0x65, 0x47, 0x3D, 0x70, 0x00, +0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, 0x00, 0x00, 0x67, 0x27, 0x1F, 0x70, 0x00, +0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x69, 0x07, 0x01, 0x70, 0x00, +0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE6, 0xE3, 0x70, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, @@ -9609,14 +9651,15 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, -0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, -0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x0A, 0x43, 0x53, 0x54, 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, -0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0xD5, -0x71, 0xED, 0x00, 0x7E, 0x6B, 0x47, 0x00, 0x00, 0x00, 0x1D, 0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, -0x6C, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x77, 0x65, 0x73, 0x74, 0x29, 0x2C, 0x20, 0x4D, -0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 0x61, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x05, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, +0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, +0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, +0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x0A, +0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0xD5, 0x71, 0xED, 0x00, 0x7E, 0x6B, 0x47, 0x00, 0x00, 0x00, +0x1E, 0x45, 0x53, 0x54, 0x20, 0x2D, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 0x61, 0x2C, +0x20, 0x4F, 0x4E, 0x20, 0x28, 0x6E, 0x6F, 0x72, 0x74, 0x68, 0x77, 0x65, 0x73, 0x74, 0x29, /* America/Yakutat */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -15717,7 +15760,7 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7D, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x14, 0xFF, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xC2, 0xA0, 0x3B, 0x80, 0xFF, @@ -15780,7 +15823,27 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, -0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, +0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4C, 0xD6, 0x4E, 0x70, 0x00, +0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, 0x4E, 0xB6, 0x30, 0x70, 0x00, +0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x50, 0x96, 0x12, 0x70, 0x00, +0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x52, 0x75, 0xF4, 0x70, 0x00, +0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x54, 0x55, 0xD6, 0x70, 0x00, +0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x56, 0x35, 0xB8, 0x70, 0x00, +0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x00, +0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x61, 0x87, 0x79, 0x70, 0x00, +0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, 0x00, 0x00, 0x63, 0x67, 0x5B, 0x70, 0x00, +0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, 0x00, 0x00, 0x65, 0x47, 0x3D, 0x70, 0x00, +0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, 0x00, 0x00, 0x67, 0x27, 0x1F, 0x70, 0x00, +0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x69, 0x07, 0x01, 0x70, 0x00, +0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, 0x00, 0x00, 0x6A, 0xE6, 0xE3, 0x70, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, @@ -15788,12 +15851,14 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, -0x02, 0x01, 0x02, 0x01, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, -0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x10, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, -0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x0A, 0x43, 0x53, 0x54, 0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, -0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, 0x31, 0x2E, 0x30, 0x0A, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x05, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, +0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, +0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, +0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x0A, +0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, /* Canada/Eastern */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -16850,7 +16915,7 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0xFF, 0xFF, 0xFF, 0xA7, 0x27, 0xC6, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0x2A, 0x2C, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0xEB, 0xF8, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x00, 0xD3, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xD5, 0x15, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xE9, 0xF0, 0x20, 0xFF, -0xFF, 0xFF, 0xFF, 0xAC, 0xC7, 0x6C, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xC9, 0xD2, 0x20, 0xFF, +0xFF, 0xFF, 0xFF, 0xAC, 0xB4, 0xF7, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xC9, 0xD2, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0xA7, 0x4E, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xA0, 0x79, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x87, 0x30, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x92, 0xD0, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x70, 0x4C, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x72, 0xB2, 0xA0, 0xFF, @@ -18121,7 +18186,7 @@ const unsigned char timelib_timezone_db_data_builtin[355284] = { 0xFF, 0xFF, 0xFF, 0xA7, 0x27, 0xC6, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0x2A, 0x2C, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0xEB, 0xF8, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x00, 0xD3, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xD5, 0x15, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xE9, 0xF0, 0x20, 0xFF, -0xFF, 0xFF, 0xFF, 0xAC, 0xC7, 0x6C, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xC9, 0xD2, 0x20, 0xFF, +0xFF, 0xFF, 0xFF, 0xAC, 0xB4, 0xF7, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xC9, 0xD2, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0xA7, 0x4E, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xA0, 0x79, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x87, 0x30, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x92, 0xD0, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x70, 0x4C, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB3, 0x72, 0xB2, 0xA0, 0xFF, @@ -24502,418 +24567,418 @@ const timelib_tzdb_index_entry timezonedb_idx_builtin[598] = { { (char*) "America/Puerto_Rico" , 0x031144 }, { (char*) "America/Punta_Arenas" , 0x031246 }, { (char*) "America/Rainy_River" , 0x0319D1 }, - { (char*) "America/Rankin_Inlet" , 0x032511 }, - { (char*) "America/Recife" , 0x032D45 }, - { (char*) "America/Regina" , 0x033019 }, - { (char*) "America/Resolute" , 0x03340E }, - { (char*) "America/Rio_Branco" , 0x033C43 }, - { (char*) "America/Rosario" , 0x033EB9 }, - { (char*) "America/Santa_Isabel" , 0x0342EB }, - { (char*) "America/Santarem" , 0x034E51 }, - { (char*) "America/Santiago" , 0x0350B4 }, - { (char*) "America/Santo_Domingo" , 0x035AA0 }, - { (char*) "America/Sao_Paulo" , 0x035C76 }, - { (char*) "America/Scoresbysund" , 0x03624E }, - { (char*) "America/Shiprock" , 0x036A06 }, - { (char*) "America/Sitka" , 0x0373AE }, - { (char*) "America/St_Barthelemy" , 0x037CE6 }, - { (char*) "America/St_Johns" , 0x037DE8 }, - { (char*) "America/St_Kitts" , 0x038C56 }, - { (char*) "America/St_Lucia" , 0x038CF6 }, - { (char*) "America/St_Thomas" , 0x038DB8 }, - { (char*) "America/St_Vincent" , 0x038E58 }, - { (char*) "America/Swift_Current" , 0x038F1A }, - { (char*) "America/Tegucigalpa" , 0x039168 }, - { (char*) "America/Thule" , 0x039270 }, - { (char*) "America/Thunder_Bay" , 0x039868 }, - { (char*) "America/Tijuana" , 0x03A61A }, - { (char*) "America/Toronto" , 0x03B18F }, - { (char*) "America/Tortola" , 0x03BF5F }, - { (char*) "America/Vancouver" , 0x03BFFF }, - { (char*) "America/Virgin" , 0x03CA3E }, - { (char*) "America/Whitehorse" , 0x03CB40 }, - { (char*) "America/Winnipeg" , 0x03D1AC }, - { (char*) "America/Yakutat" , 0x03DD09 }, - { (char*) "America/Yellowknife" , 0x03E626 }, - { (char*) "Antarctica/Casey" , 0x03EE20 }, - { (char*) "Antarctica/Davis" , 0x03EFD8 }, - { (char*) "Antarctica/DumontDUrville" , 0x03F104 }, - { (char*) "Antarctica/Macquarie" , 0x03F1D4 }, - { (char*) "Antarctica/Mawson" , 0x03FAC4 }, - { (char*) "Antarctica/McMurdo" , 0x03FB8F }, - { (char*) "Antarctica/Palmer" , 0x04038A }, - { (char*) "Antarctica/Rothera" , 0x040918 }, - { (char*) "Antarctica/South_Pole" , 0x0409C1 }, - { (char*) "Antarctica/Syowa" , 0x041352 }, - { (char*) "Antarctica/Troll" , 0x0413FA }, - { (char*) "Antarctica/Vostok" , 0x041887 }, - { (char*) "Arctic/Longyearbyen" , 0x04196E }, - { (char*) "Asia/Aden" , 0x042274 }, - { (char*) "Asia/Almaty" , 0x042317 }, - { (char*) "Asia/Amman" , 0x04270C }, - { (char*) "Asia/Anadyr" , 0x042CB1 }, - { (char*) "Asia/Aqtau" , 0x043166 }, - { (char*) "Asia/Aqtobe" , 0x043550 }, - { (char*) "Asia/Ashgabat" , 0x04394E }, - { (char*) "Asia/Ashkhabad" , 0x043BB7 }, - { (char*) "Asia/Atyrau" , 0x043E20 }, - { (char*) "Asia/Baghdad" , 0x044212 }, - { (char*) "Asia/Bahrain" , 0x0445E7 }, - { (char*) "Asia/Baku" , 0x0446D2 }, - { (char*) "Asia/Bangkok" , 0x044B9B }, - { (char*) "Asia/Barnaul" , 0x044C60 }, - { (char*) "Asia/Beirut" , 0x045131 }, - { (char*) "Asia/Bishkek" , 0x0459A7 }, - { (char*) "Asia/Brunei" , 0x045D7C }, - { (char*) "Asia/Calcutta" , 0x045E45 }, - { (char*) "Asia/Chita" , 0x045F6E }, - { (char*) "Asia/Choibalsan" , 0x046445 }, - { (char*) "Asia/Chongqing" , 0x0467BE }, - { (char*) "Asia/Chungking" , 0x0469FB }, - { (char*) "Asia/Colombo" , 0x046C38 }, - { (char*) "Asia/Dacca" , 0x046DAA }, - { (char*) "Asia/Damascus" , 0x046EF9 }, - { (char*) "Asia/Dhaka" , 0x047656 }, - { (char*) "Asia/Dili" , 0x0477A5 }, - { (char*) "Asia/Dubai" , 0x0478B2 }, - { (char*) "Asia/Dushanbe" , 0x047955 }, - { (char*) "Asia/Famagusta" , 0x047BA2 }, - { (char*) "Asia/Gaza" , 0x0483A9 }, - { (char*) "Asia/Harbin" , 0x0492C3 }, - { (char*) "Asia/Hebron" , 0x049500 }, - { (char*) "Asia/Ho_Chi_Minh" , 0x04A435 }, - { (char*) "Asia/Hong_Kong" , 0x04A58A }, - { (char*) "Asia/Hovd" , 0x04AA67 }, - { (char*) "Asia/Irkutsk" , 0x04ADF6 }, - { (char*) "Asia/Istanbul" , 0x04B2E9 }, - { (char*) "Asia/Jakarta" , 0x04BA82 }, - { (char*) "Asia/Jayapura" , 0x04BC1A }, - { (char*) "Asia/Jerusalem" , 0x04BD39 }, - { (char*) "Asia/Kabul" , 0x04C699 }, - { (char*) "Asia/Kamchatka" , 0x04C767 }, - { (char*) "Asia/Karachi" , 0x04CC05 }, - { (char*) "Asia/Kashgar" , 0x04CD8C }, - { (char*) "Asia/Kathmandu" , 0x04CE2F }, - { (char*) "Asia/Katmandu" , 0x04CF01 }, - { (char*) "Asia/Khandyga" , 0x04CFD3 }, - { (char*) "Asia/Kolkata" , 0x04D4E6 }, - { (char*) "Asia/Krasnoyarsk" , 0x04D60F }, - { (char*) "Asia/Kuala_Lumpur" , 0x04DADD }, - { (char*) "Asia/Kuching" , 0x04DC8E }, - { (char*) "Asia/Kuwait" , 0x04DE7D }, - { (char*) "Asia/Macao" , 0x04DF20 }, - { (char*) "Asia/Macau" , 0x04E3F7 }, - { (char*) "Asia/Magadan" , 0x04E8CE }, - { (char*) "Asia/Makassar" , 0x04EDA2 }, - { (char*) "Asia/Manila" , 0x04EEF5 }, - { (char*) "Asia/Muscat" , 0x04F0A7 }, - { (char*) "Asia/Nicosia" , 0x04F14A }, - { (char*) "Asia/Novokuznetsk" , 0x04F936 }, - { (char*) "Asia/Novosibirsk" , 0x04FDD2 }, - { (char*) "Asia/Omsk" , 0x0502A9 }, - { (char*) "Asia/Oral" , 0x05076B }, - { (char*) "Asia/Phnom_Penh" , 0x050B65 }, - { (char*) "Asia/Pontianak" , 0x050C82 }, - { (char*) "Asia/Pyongyang" , 0x050E05 }, - { (char*) "Asia/Qatar" , 0x050EFE }, - { (char*) "Asia/Qostanay" , 0x050FC3 }, - { (char*) "Asia/Qyzylorda" , 0x0513EA }, - { (char*) "Asia/Rangoon" , 0x051806 }, - { (char*) "Asia/Riyadh" , 0x051910 }, - { (char*) "Asia/Saigon" , 0x0519B3 }, - { (char*) "Asia/Sakhalin" , 0x051B08 }, - { (char*) "Asia/Samarkand" , 0x051FD0 }, - { (char*) "Asia/Seoul" , 0x052220 }, - { (char*) "Asia/Shanghai" , 0x052495 }, - { (char*) "Asia/Singapore" , 0x0526DE }, - { (char*) "Asia/Srednekolymsk" , 0x05287B }, - { (char*) "Asia/Taipei" , 0x052D4F }, - { (char*) "Asia/Tashkent" , 0x053054 }, - { (char*) "Asia/Tbilisi" , 0x0532B2 }, - { (char*) "Asia/Tehran" , 0x0536AD }, - { (char*) "Asia/Tel_Aviv" , 0x053B99 }, - { (char*) "Asia/Thimbu" , 0x0544F9 }, - { (char*) "Asia/Thimphu" , 0x0545C2 }, - { (char*) "Asia/Tokyo" , 0x05468B }, - { (char*) "Asia/Tomsk" , 0x0547CC }, - { (char*) "Asia/Ujung_Pandang" , 0x054C9D }, - { (char*) "Asia/Ulaanbaatar" , 0x054DA7 }, - { (char*) "Asia/Ulan_Bator" , 0x055130 }, - { (char*) "Asia/Urumqi" , 0x0554A9 }, - { (char*) "Asia/Ust-Nera" , 0x055559 }, - { (char*) "Asia/Vientiane" , 0x055A4F }, - { (char*) "Asia/Vladivostok" , 0x055B88 }, - { (char*) "Asia/Yakutsk" , 0x056051 }, - { (char*) "Asia/Yangon" , 0x056519 }, - { (char*) "Asia/Yekaterinburg" , 0x056623 }, - { (char*) "Asia/Yerevan" , 0x056B0A }, - { (char*) "Atlantic/Azores" , 0x056F87 }, - { (char*) "Atlantic/Bermuda" , 0x057D0B }, - { (char*) "Atlantic/Canary" , 0x058673 }, - { (char*) "Atlantic/Cape_Verde" , 0x058DF6 }, - { (char*) "Atlantic/Faeroe" , 0x058F02 }, - { (char*) "Atlantic/Faroe" , 0x059625 }, - { (char*) "Atlantic/Jan_Mayen" , 0x059D48 }, - { (char*) "Atlantic/Madeira" , 0x05A64E }, - { (char*) "Atlantic/Reykjavik" , 0x05B39A }, - { (char*) "Atlantic/South_Georgia" , 0x05B830 }, - { (char*) "Atlantic/St_Helena" , 0x05B8D2 }, - { (char*) "Atlantic/Stanley" , 0x05B994 }, - { (char*) "Australia/ACT" , 0x05BE50 }, - { (char*) "Australia/Adelaide" , 0x05C6EA }, - { (char*) "Australia/Brisbane" , 0x05CFA5 }, - { (char*) "Australia/Broken_Hill" , 0x05D16B }, - { (char*) "Australia/Canberra" , 0x05DA48 }, - { (char*) "Australia/Currie" , 0x05E2E2 }, - { (char*) "Australia/Darwin" , 0x05EC24 }, - { (char*) "Australia/Eucla" , 0x05ED87 }, - { (char*) "Australia/Hobart" , 0x05EF74 }, - { (char*) "Australia/LHI" , 0x05F8BE }, - { (char*) "Australia/Lindeman" , 0x060000 }, - { (char*) "Australia/Lord_Howe" , 0x060206 }, - { (char*) "Australia/Melbourne" , 0x060958 }, - { (char*) "Australia/North" , 0x0611FA }, - { (char*) "Australia/NSW" , 0x06134B }, - { (char*) "Australia/Perth" , 0x061BE5 }, - { (char*) "Australia/Queensland" , 0x061DCD }, - { (char*) "Australia/South" , 0x061F7C }, - { (char*) "Australia/Sydney" , 0x062828 }, - { (char*) "Australia/Tasmania" , 0x0630DE }, - { (char*) "Australia/Victoria" , 0x063A20 }, - { (char*) "Australia/West" , 0x0642BA }, - { (char*) "Australia/Yancowinna" , 0x064484 }, - { (char*) "Brazil/Acre" , 0x064D45 }, - { (char*) "Brazil/DeNoronha" , 0x064FB7 }, - { (char*) "Brazil/East" , 0x065281 }, - { (char*) "Brazil/West" , 0x065823 }, - { (char*) "Canada/Atlantic" , 0x065A7D }, - { (char*) "Canada/Central" , 0x0667E9 }, - { (char*) "Canada/Eastern" , 0x067329 }, - { (char*) "Canada/Mountain" , 0x0680DB }, - { (char*) "Canada/Newfoundland" , 0x0688D5 }, - { (char*) "Canada/Pacific" , 0x069728 }, - { (char*) "Canada/Saskatchewan" , 0x06A152 }, - { (char*) "Canada/Yukon" , 0x06A532 }, - { (char*) "CET" , 0x06AB8C }, - { (char*) "Chile/Continental" , 0x06B70D }, - { (char*) "Chile/EasterIsland" , 0x06C0EC }, - { (char*) "CST6CDT" , 0x06C9A3 }, - { (char*) "Cuba" , 0x06D277 }, - { (char*) "EET" , 0x06DBF3 }, - { (char*) "Egypt" , 0x06E4D5 }, - { (char*) "Eire" , 0x06EE40 }, - { (char*) "EST" , 0x06FBF0 }, - { (char*) "EST5EDT" , 0x06FCB2 }, - { (char*) "Etc/GMT" , 0x070586 }, - { (char*) "Etc/GMT+0" , 0x070604 }, - { (char*) "Etc/GMT+1" , 0x070682 }, - { (char*) "Etc/GMT+10" , 0x070702 }, - { (char*) "Etc/GMT+11" , 0x070783 }, - { (char*) "Etc/GMT+12" , 0x070804 }, - { (char*) "Etc/GMT+2" , 0x070885 }, - { (char*) "Etc/GMT+3" , 0x070905 }, - { (char*) "Etc/GMT+4" , 0x070985 }, - { (char*) "Etc/GMT+5" , 0x070A05 }, - { (char*) "Etc/GMT+6" , 0x070A85 }, - { (char*) "Etc/GMT+7" , 0x070B05 }, - { (char*) "Etc/GMT+8" , 0x070B85 }, - { (char*) "Etc/GMT+9" , 0x070C05 }, - { (char*) "Etc/GMT-0" , 0x070C85 }, - { (char*) "Etc/GMT-1" , 0x070D03 }, - { (char*) "Etc/GMT-10" , 0x070D84 }, - { (char*) "Etc/GMT-11" , 0x070E06 }, - { (char*) "Etc/GMT-12" , 0x070E88 }, - { (char*) "Etc/GMT-13" , 0x070F0A }, - { (char*) "Etc/GMT-14" , 0x070F8C }, - { (char*) "Etc/GMT-2" , 0x07100E }, - { (char*) "Etc/GMT-3" , 0x07108F }, - { (char*) "Etc/GMT-4" , 0x071110 }, - { (char*) "Etc/GMT-5" , 0x071191 }, - { (char*) "Etc/GMT-6" , 0x071212 }, - { (char*) "Etc/GMT-7" , 0x071293 }, - { (char*) "Etc/GMT-8" , 0x071314 }, - { (char*) "Etc/GMT-9" , 0x071395 }, - { (char*) "Etc/GMT0" , 0x071416 }, - { (char*) "Etc/Greenwich" , 0x071494 }, - { (char*) "Etc/UCT" , 0x071512 }, - { (char*) "Etc/Universal" , 0x071590 }, - { (char*) "Etc/UTC" , 0x07160E }, - { (char*) "Etc/Zulu" , 0x07168C }, - { (char*) "Europe/Amsterdam" , 0x07170A }, - { (char*) "Europe/Andorra" , 0x072274 }, - { (char*) "Europe/Astrakhan" , 0x07294E }, - { (char*) "Europe/Athens" , 0x072DEB }, - { (char*) "Europe/Belfast" , 0x0736CD }, - { (char*) "Europe/Belgrade" , 0x074529 }, - { (char*) "Europe/Berlin" , 0x074CB5 }, - { (char*) "Europe/Bratislava" , 0x0755CA }, - { (char*) "Europe/Brussels" , 0x075ED3 }, - { (char*) "Europe/Bucharest" , 0x076A54 }, - { (char*) "Europe/Budapest" , 0x0772E8 }, - { (char*) "Europe/Busingen" , 0x077C34 }, - { (char*) "Europe/Chisinau" , 0x0783BD }, - { (char*) "Europe/Copenhagen" , 0x078D41 }, - { (char*) "Europe/Dublin" , 0x0795A6 }, - { (char*) "Europe/Gibraltar" , 0x07A356 }, - { (char*) "Europe/Guernsey" , 0x07AF5E }, - { (char*) "Europe/Helsinki" , 0x07BDFE }, - { (char*) "Europe/Isle_of_Man" , 0x07C576 }, - { (char*) "Europe/Istanbul" , 0x07D3C2 }, - { (char*) "Europe/Jersey" , 0x07DB5B }, - { (char*) "Europe/Kaliningrad" , 0x07E9FB }, - { (char*) "Europe/Kiev" , 0x07EFF0 }, - { (char*) "Europe/Kirov" , 0x07F844 }, - { (char*) "Europe/Kyiv" , 0x07FCFF }, - { (char*) "Europe/Lisbon" , 0x080562 }, - { (char*) "Europe/Ljubljana" , 0x081348 }, - { (char*) "Europe/London" , 0x081AD4 }, - { (char*) "Europe/Luxembourg" , 0x082930 }, - { (char*) "Europe/Madrid" , 0x0834BE }, - { (char*) "Europe/Malta" , 0x083F10 }, - { (char*) "Europe/Mariehamn" , 0x084958 }, - { (char*) "Europe/Minsk" , 0x0850D0 }, - { (char*) "Europe/Monaco" , 0x0855F7 }, - { (char*) "Europe/Moscow" , 0x086183 }, - { (char*) "Europe/Nicosia" , 0x0867A2 }, - { (char*) "Europe/Oslo" , 0x086F80 }, - { (char*) "Europe/Paris" , 0x087840 }, - { (char*) "Europe/Podgorica" , 0x0883DE }, - { (char*) "Europe/Prague" , 0x088B6A }, - { (char*) "Europe/Riga" , 0x089473 }, - { (char*) "Europe/Rome" , 0x089D15 }, - { (char*) "Europe/Samara" , 0x08A772 }, - { (char*) "Europe/San_Marino" , 0x08AC48 }, - { (char*) "Europe/Sarajevo" , 0x08B6A5 }, - { (char*) "Europe/Saratov" , 0x08BE31 }, - { (char*) "Europe/Simferopol" , 0x08C2DE }, - { (char*) "Europe/Skopje" , 0x08C8AD }, - { (char*) "Europe/Sofia" , 0x08D039 }, - { (char*) "Europe/Stockholm" , 0x08D862 }, - { (char*) "Europe/Tallinn" , 0x08DFE3 }, - { (char*) "Europe/Tirane" , 0x08E853 }, - { (char*) "Europe/Tiraspol" , 0x08F083 }, - { (char*) "Europe/Ulyanovsk" , 0x08FA07 }, - { (char*) "Europe/Uzhgorod" , 0x08FF0A }, - { (char*) "Europe/Vaduz" , 0x09075E }, - { (char*) "Europe/Vatican" , 0x090ECA }, - { (char*) "Europe/Vienna" , 0x091927 }, - { (char*) "Europe/Vilnius" , 0x0921CB }, - { (char*) "Europe/Volgograd" , 0x092A49 }, - { (char*) "Europe/Warsaw" , 0x092F10 }, - { (char*) "Europe/Zagreb" , 0x09397A }, - { (char*) "Europe/Zaporozhye" , 0x094106 }, - { (char*) "Europe/Zurich" , 0x09495A }, - { (char*) "Factory" , 0x0950DB }, - { (char*) "GB" , 0x09515B }, - { (char*) "GB-Eire" , 0x095FB7 }, - { (char*) "GMT" , 0x096E13 }, - { (char*) "GMT+0" , 0x096E91 }, - { (char*) "GMT-0" , 0x096F0F }, - { (char*) "GMT0" , 0x096F8D }, - { (char*) "Greenwich" , 0x09700B }, - { (char*) "Hongkong" , 0x097089 }, - { (char*) "HST" , 0x097566 }, - { (char*) "Iceland" , 0x0976BB }, - { (char*) "Indian/Antananarivo" , 0x09775B }, - { (char*) "Indian/Chagos" , 0x097842 }, - { (char*) "Indian/Christmas" , 0x097907 }, - { (char*) "Indian/Cocos" , 0x0979AA }, - { (char*) "Indian/Comoro" , 0x097A56 }, - { (char*) "Indian/Kerguelen" , 0x097AF7 }, - { (char*) "Indian/Mahe" , 0x097B9A }, - { (char*) "Indian/Maldives" , 0x097C3D }, - { (char*) "Indian/Mauritius" , 0x097D02 }, - { (char*) "Indian/Mayotte" , 0x097DF1 }, - { (char*) "Indian/Reunion" , 0x097E92 }, - { (char*) "Iran" , 0x097F35 }, - { (char*) "Israel" , 0x098421 }, - { (char*) "Jamaica" , 0x098D81 }, - { (char*) "Japan" , 0x098F6F }, - { (char*) "Kwajalein" , 0x0990B0 }, - { (char*) "Libya" , 0x0991EA }, - { (char*) "MET" , 0x099467 }, - { (char*) "Mexico/BajaNorte" , 0x099FE8 }, - { (char*) "Mexico/BajaSur" , 0x09AB4E }, - { (char*) "Mexico/General" , 0x09AF7E }, - { (char*) "MST" , 0x09B450 }, - { (char*) "MST7MDT" , 0x09B5C4 }, - { (char*) "Navajo" , 0x09BE98 }, - { (char*) "NZ" , 0x09C840 }, - { (char*) "NZ-CHAT" , 0x09D1D1 }, - { (char*) "Pacific/Apia" , 0x09D9E3 }, - { (char*) "Pacific/Auckland" , 0x09DC45 }, - { (char*) "Pacific/Bougainville" , 0x09E5E9 }, - { (char*) "Pacific/Chatham" , 0x09E6FF }, - { (char*) "Pacific/Chuuk" , 0x09EF20 }, - { (char*) "Pacific/Easter" , 0x09F03A }, - { (char*) "Pacific/Efate" , 0x09F8FE }, - { (char*) "Pacific/Enderbury" , 0x09FB16 }, - { (char*) "Pacific/Fakaofo" , 0x09FBFE }, - { (char*) "Pacific/Fiji" , 0x09FCC4 }, - { (char*) "Pacific/Funafuti" , 0x09FF04 }, - { (char*) "Pacific/Galapagos" , 0x09FFA8 }, - { (char*) "Pacific/Gambier" , 0x0A00A5 }, - { (char*) "Pacific/Guadalcanal" , 0x0A0156 }, - { (char*) "Pacific/Guam" , 0x0A01FA }, - { (char*) "Pacific/Honolulu" , 0x0A03F4 }, - { (char*) "Pacific/Johnston" , 0x0A054F }, - { (char*) "Pacific/Kanton" , 0x0A06A4 }, - { (char*) "Pacific/Kiritimati" , 0x0A079B }, - { (char*) "Pacific/Kosrae" , 0x0A0893 }, - { (char*) "Pacific/Kwajalein" , 0x0A09F6 }, - { (char*) "Pacific/Majuro" , 0x0A0B39 }, - { (char*) "Pacific/Marquesas" , 0x0A0C85 }, - { (char*) "Pacific/Midway" , 0x0A0D41 }, - { (char*) "Pacific/Nauru" , 0x0A0E34 }, - { (char*) "Pacific/Niue" , 0x0A0F2E }, - { (char*) "Pacific/Norfolk" , 0x0A0FF7 }, - { (char*) "Pacific/Noumea" , 0x0A1365 }, - { (char*) "Pacific/Pago_Pago" , 0x0A1493 }, - { (char*) "Pacific/Palau" , 0x0A154E }, - { (char*) "Pacific/Pitcairn" , 0x0A1600 }, - { (char*) "Pacific/Pohnpei" , 0x0A16C8 }, - { (char*) "Pacific/Ponape" , 0x0A1803 }, - { (char*) "Pacific/Port_Moresby" , 0x0A18A7 }, - { (char*) "Pacific/Rarotonga" , 0x0A1977 }, - { (char*) "Pacific/Saipan" , 0x0A1BD0 }, - { (char*) "Pacific/Samoa" , 0x0A1DBC }, - { (char*) "Pacific/Tahiti" , 0x0A1E77 }, - { (char*) "Pacific/Tarawa" , 0x0A1F29 }, - { (char*) "Pacific/Tongatapu" , 0x0A1FDC }, - { (char*) "Pacific/Truk" , 0x0A214E }, - { (char*) "Pacific/Wake" , 0x0A2206 }, - { (char*) "Pacific/Wallis" , 0x0A22B5 }, - { (char*) "Pacific/Yap" , 0x0A2359 }, - { (char*) "Poland" , 0x0A2411 }, - { (char*) "Portugal" , 0x0A2E7B }, - { (char*) "PRC" , 0x0A3C4E }, - { (char*) "PST8PDT" , 0x0A3E8B }, - { (char*) "ROC" , 0x0A475F }, - { (char*) "ROK" , 0x0A4A64 }, - { (char*) "Singapore" , 0x0A4CD9 }, - { (char*) "Turkey" , 0x0A4E76 }, - { (char*) "UCT" , 0x0A560F }, - { (char*) "Universal" , 0x0A568D }, - { (char*) "US/Alaska" , 0x0A570B }, - { (char*) "US/Aleutian" , 0x0A605A }, - { (char*) "US/Arizona" , 0x0A699A }, - { (char*) "US/Central" , 0x0A6B0E }, - { (char*) "US/East-Indiana" , 0x0A7922 }, - { (char*) "US/Eastern" , 0x0A7FC0 }, - { (char*) "US/Hawaii" , 0x0A8DAC }, - { (char*) "US/Indiana-Starke" , 0x0A8F01 }, - { (char*) "US/Michigan" , 0x0A9899 }, - { (char*) "US/Mountain" , 0x0AA15B }, - { (char*) "US/Pacific" , 0x0AAB03 }, - { (char*) "US/Samoa" , 0x0AB633 }, - { (char*) "UTC" , 0x0AB6EE }, - { (char*) "W-SU" , 0x0AB76C }, - { (char*) "WET" , 0x0ABD77 }, - { (char*) "Zulu" , 0x0ACB4A }, + { (char*) "America/Rankin_Inlet" , 0x0323E3 }, + { (char*) "America/Recife" , 0x032C17 }, + { (char*) "America/Regina" , 0x032EEB }, + { (char*) "America/Resolute" , 0x0332E0 }, + { (char*) "America/Rio_Branco" , 0x033B15 }, + { (char*) "America/Rosario" , 0x033D8B }, + { (char*) "America/Santa_Isabel" , 0x0341BD }, + { (char*) "America/Santarem" , 0x034D23 }, + { (char*) "America/Santiago" , 0x034F86 }, + { (char*) "America/Santo_Domingo" , 0x035972 }, + { (char*) "America/Sao_Paulo" , 0x035B48 }, + { (char*) "America/Scoresbysund" , 0x036120 }, + { (char*) "America/Shiprock" , 0x0368D8 }, + { (char*) "America/Sitka" , 0x037280 }, + { (char*) "America/St_Barthelemy" , 0x037BB8 }, + { (char*) "America/St_Johns" , 0x037CBA }, + { (char*) "America/St_Kitts" , 0x038B28 }, + { (char*) "America/St_Lucia" , 0x038BC8 }, + { (char*) "America/St_Thomas" , 0x038C8A }, + { (char*) "America/St_Vincent" , 0x038D2A }, + { (char*) "America/Swift_Current" , 0x038DEC }, + { (char*) "America/Tegucigalpa" , 0x03903A }, + { (char*) "America/Thule" , 0x039142 }, + { (char*) "America/Thunder_Bay" , 0x03973A }, + { (char*) "America/Tijuana" , 0x03A4EC }, + { (char*) "America/Toronto" , 0x03B061 }, + { (char*) "America/Tortola" , 0x03BE31 }, + { (char*) "America/Vancouver" , 0x03BED1 }, + { (char*) "America/Virgin" , 0x03C910 }, + { (char*) "America/Whitehorse" , 0x03CA12 }, + { (char*) "America/Winnipeg" , 0x03D07E }, + { (char*) "America/Yakutat" , 0x03DAAE }, + { (char*) "America/Yellowknife" , 0x03E3CB }, + { (char*) "Antarctica/Casey" , 0x03EBC5 }, + { (char*) "Antarctica/Davis" , 0x03ED7D }, + { (char*) "Antarctica/DumontDUrville" , 0x03EEA9 }, + { (char*) "Antarctica/Macquarie" , 0x03EF79 }, + { (char*) "Antarctica/Mawson" , 0x03F869 }, + { (char*) "Antarctica/McMurdo" , 0x03F934 }, + { (char*) "Antarctica/Palmer" , 0x04012F }, + { (char*) "Antarctica/Rothera" , 0x0406BD }, + { (char*) "Antarctica/South_Pole" , 0x040766 }, + { (char*) "Antarctica/Syowa" , 0x0410F7 }, + { (char*) "Antarctica/Troll" , 0x04119F }, + { (char*) "Antarctica/Vostok" , 0x04162C }, + { (char*) "Arctic/Longyearbyen" , 0x041713 }, + { (char*) "Asia/Aden" , 0x042019 }, + { (char*) "Asia/Almaty" , 0x0420BC }, + { (char*) "Asia/Amman" , 0x0424B1 }, + { (char*) "Asia/Anadyr" , 0x042A56 }, + { (char*) "Asia/Aqtau" , 0x042F0B }, + { (char*) "Asia/Aqtobe" , 0x0432F5 }, + { (char*) "Asia/Ashgabat" , 0x0436F3 }, + { (char*) "Asia/Ashkhabad" , 0x04395C }, + { (char*) "Asia/Atyrau" , 0x043BC5 }, + { (char*) "Asia/Baghdad" , 0x043FB7 }, + { (char*) "Asia/Bahrain" , 0x04438C }, + { (char*) "Asia/Baku" , 0x044477 }, + { (char*) "Asia/Bangkok" , 0x044940 }, + { (char*) "Asia/Barnaul" , 0x044A05 }, + { (char*) "Asia/Beirut" , 0x044ED6 }, + { (char*) "Asia/Bishkek" , 0x04574C }, + { (char*) "Asia/Brunei" , 0x045B21 }, + { (char*) "Asia/Calcutta" , 0x045BEA }, + { (char*) "Asia/Chita" , 0x045D13 }, + { (char*) "Asia/Choibalsan" , 0x0461EA }, + { (char*) "Asia/Chongqing" , 0x046563 }, + { (char*) "Asia/Chungking" , 0x0467A0 }, + { (char*) "Asia/Colombo" , 0x0469DD }, + { (char*) "Asia/Dacca" , 0x046B4F }, + { (char*) "Asia/Damascus" , 0x046C9E }, + { (char*) "Asia/Dhaka" , 0x0473FB }, + { (char*) "Asia/Dili" , 0x04754A }, + { (char*) "Asia/Dubai" , 0x047657 }, + { (char*) "Asia/Dushanbe" , 0x0476FA }, + { (char*) "Asia/Famagusta" , 0x047947 }, + { (char*) "Asia/Gaza" , 0x04814E }, + { (char*) "Asia/Harbin" , 0x049068 }, + { (char*) "Asia/Hebron" , 0x0492A5 }, + { (char*) "Asia/Ho_Chi_Minh" , 0x04A1DA }, + { (char*) "Asia/Hong_Kong" , 0x04A32F }, + { (char*) "Asia/Hovd" , 0x04A80C }, + { (char*) "Asia/Irkutsk" , 0x04AB9B }, + { (char*) "Asia/Istanbul" , 0x04B08E }, + { (char*) "Asia/Jakarta" , 0x04B827 }, + { (char*) "Asia/Jayapura" , 0x04B9BF }, + { (char*) "Asia/Jerusalem" , 0x04BADE }, + { (char*) "Asia/Kabul" , 0x04C43E }, + { (char*) "Asia/Kamchatka" , 0x04C50C }, + { (char*) "Asia/Karachi" , 0x04C9AA }, + { (char*) "Asia/Kashgar" , 0x04CB31 }, + { (char*) "Asia/Kathmandu" , 0x04CBD4 }, + { (char*) "Asia/Katmandu" , 0x04CCA6 }, + { (char*) "Asia/Khandyga" , 0x04CD78 }, + { (char*) "Asia/Kolkata" , 0x04D28B }, + { (char*) "Asia/Krasnoyarsk" , 0x04D3B4 }, + { (char*) "Asia/Kuala_Lumpur" , 0x04D882 }, + { (char*) "Asia/Kuching" , 0x04DA33 }, + { (char*) "Asia/Kuwait" , 0x04DC22 }, + { (char*) "Asia/Macao" , 0x04DCC5 }, + { (char*) "Asia/Macau" , 0x04E19C }, + { (char*) "Asia/Magadan" , 0x04E673 }, + { (char*) "Asia/Makassar" , 0x04EB47 }, + { (char*) "Asia/Manila" , 0x04EC9A }, + { (char*) "Asia/Muscat" , 0x04EE4C }, + { (char*) "Asia/Nicosia" , 0x04EEEF }, + { (char*) "Asia/Novokuznetsk" , 0x04F6DB }, + { (char*) "Asia/Novosibirsk" , 0x04FB77 }, + { (char*) "Asia/Omsk" , 0x05004E }, + { (char*) "Asia/Oral" , 0x050510 }, + { (char*) "Asia/Phnom_Penh" , 0x05090A }, + { (char*) "Asia/Pontianak" , 0x050A27 }, + { (char*) "Asia/Pyongyang" , 0x050BAA }, + { (char*) "Asia/Qatar" , 0x050CA3 }, + { (char*) "Asia/Qostanay" , 0x050D68 }, + { (char*) "Asia/Qyzylorda" , 0x05118F }, + { (char*) "Asia/Rangoon" , 0x0515AB }, + { (char*) "Asia/Riyadh" , 0x0516B5 }, + { (char*) "Asia/Saigon" , 0x051758 }, + { (char*) "Asia/Sakhalin" , 0x0518AD }, + { (char*) "Asia/Samarkand" , 0x051D75 }, + { (char*) "Asia/Seoul" , 0x051FC5 }, + { (char*) "Asia/Shanghai" , 0x05223A }, + { (char*) "Asia/Singapore" , 0x052483 }, + { (char*) "Asia/Srednekolymsk" , 0x052620 }, + { (char*) "Asia/Taipei" , 0x052AF4 }, + { (char*) "Asia/Tashkent" , 0x052DF9 }, + { (char*) "Asia/Tbilisi" , 0x053057 }, + { (char*) "Asia/Tehran" , 0x053452 }, + { (char*) "Asia/Tel_Aviv" , 0x05393E }, + { (char*) "Asia/Thimbu" , 0x05429E }, + { (char*) "Asia/Thimphu" , 0x054367 }, + { (char*) "Asia/Tokyo" , 0x054430 }, + { (char*) "Asia/Tomsk" , 0x054571 }, + { (char*) "Asia/Ujung_Pandang" , 0x054A42 }, + { (char*) "Asia/Ulaanbaatar" , 0x054B4C }, + { (char*) "Asia/Ulan_Bator" , 0x054ED5 }, + { (char*) "Asia/Urumqi" , 0x05524E }, + { (char*) "Asia/Ust-Nera" , 0x0552FE }, + { (char*) "Asia/Vientiane" , 0x0557F4 }, + { (char*) "Asia/Vladivostok" , 0x05592D }, + { (char*) "Asia/Yakutsk" , 0x055DF6 }, + { (char*) "Asia/Yangon" , 0x0562BE }, + { (char*) "Asia/Yekaterinburg" , 0x0563C8 }, + { (char*) "Asia/Yerevan" , 0x0568AF }, + { (char*) "Atlantic/Azores" , 0x056D2C }, + { (char*) "Atlantic/Bermuda" , 0x057AB0 }, + { (char*) "Atlantic/Canary" , 0x058418 }, + { (char*) "Atlantic/Cape_Verde" , 0x058B9B }, + { (char*) "Atlantic/Faeroe" , 0x058CA7 }, + { (char*) "Atlantic/Faroe" , 0x0593CA }, + { (char*) "Atlantic/Jan_Mayen" , 0x059AED }, + { (char*) "Atlantic/Madeira" , 0x05A3F3 }, + { (char*) "Atlantic/Reykjavik" , 0x05B13F }, + { (char*) "Atlantic/South_Georgia" , 0x05B5D5 }, + { (char*) "Atlantic/St_Helena" , 0x05B677 }, + { (char*) "Atlantic/Stanley" , 0x05B739 }, + { (char*) "Australia/ACT" , 0x05BBF5 }, + { (char*) "Australia/Adelaide" , 0x05C48F }, + { (char*) "Australia/Brisbane" , 0x05CD4A }, + { (char*) "Australia/Broken_Hill" , 0x05CF10 }, + { (char*) "Australia/Canberra" , 0x05D7ED }, + { (char*) "Australia/Currie" , 0x05E087 }, + { (char*) "Australia/Darwin" , 0x05E9C9 }, + { (char*) "Australia/Eucla" , 0x05EB2C }, + { (char*) "Australia/Hobart" , 0x05ED19 }, + { (char*) "Australia/LHI" , 0x05F663 }, + { (char*) "Australia/Lindeman" , 0x05FDA5 }, + { (char*) "Australia/Lord_Howe" , 0x05FFAB }, + { (char*) "Australia/Melbourne" , 0x0606FD }, + { (char*) "Australia/North" , 0x060F9F }, + { (char*) "Australia/NSW" , 0x0610F0 }, + { (char*) "Australia/Perth" , 0x06198A }, + { (char*) "Australia/Queensland" , 0x061B72 }, + { (char*) "Australia/South" , 0x061D21 }, + { (char*) "Australia/Sydney" , 0x0625CD }, + { (char*) "Australia/Tasmania" , 0x062E83 }, + { (char*) "Australia/Victoria" , 0x0637C5 }, + { (char*) "Australia/West" , 0x06405F }, + { (char*) "Australia/Yancowinna" , 0x064229 }, + { (char*) "Brazil/Acre" , 0x064AEA }, + { (char*) "Brazil/DeNoronha" , 0x064D5C }, + { (char*) "Brazil/East" , 0x065026 }, + { (char*) "Brazil/West" , 0x0655C8 }, + { (char*) "Canada/Atlantic" , 0x065822 }, + { (char*) "Canada/Central" , 0x06658E }, + { (char*) "Canada/Eastern" , 0x066FA0 }, + { (char*) "Canada/Mountain" , 0x067D52 }, + { (char*) "Canada/Newfoundland" , 0x06854C }, + { (char*) "Canada/Pacific" , 0x06939F }, + { (char*) "Canada/Saskatchewan" , 0x069DC9 }, + { (char*) "Canada/Yukon" , 0x06A1A9 }, + { (char*) "CET" , 0x06A803 }, + { (char*) "Chile/Continental" , 0x06B384 }, + { (char*) "Chile/EasterIsland" , 0x06BD63 }, + { (char*) "CST6CDT" , 0x06C61A }, + { (char*) "Cuba" , 0x06CEEE }, + { (char*) "EET" , 0x06D86A }, + { (char*) "Egypt" , 0x06E14C }, + { (char*) "Eire" , 0x06EAB7 }, + { (char*) "EST" , 0x06F867 }, + { (char*) "EST5EDT" , 0x06F929 }, + { (char*) "Etc/GMT" , 0x0701FD }, + { (char*) "Etc/GMT+0" , 0x07027B }, + { (char*) "Etc/GMT+1" , 0x0702F9 }, + { (char*) "Etc/GMT+10" , 0x070379 }, + { (char*) "Etc/GMT+11" , 0x0703FA }, + { (char*) "Etc/GMT+12" , 0x07047B }, + { (char*) "Etc/GMT+2" , 0x0704FC }, + { (char*) "Etc/GMT+3" , 0x07057C }, + { (char*) "Etc/GMT+4" , 0x0705FC }, + { (char*) "Etc/GMT+5" , 0x07067C }, + { (char*) "Etc/GMT+6" , 0x0706FC }, + { (char*) "Etc/GMT+7" , 0x07077C }, + { (char*) "Etc/GMT+8" , 0x0707FC }, + { (char*) "Etc/GMT+9" , 0x07087C }, + { (char*) "Etc/GMT-0" , 0x0708FC }, + { (char*) "Etc/GMT-1" , 0x07097A }, + { (char*) "Etc/GMT-10" , 0x0709FB }, + { (char*) "Etc/GMT-11" , 0x070A7D }, + { (char*) "Etc/GMT-12" , 0x070AFF }, + { (char*) "Etc/GMT-13" , 0x070B81 }, + { (char*) "Etc/GMT-14" , 0x070C03 }, + { (char*) "Etc/GMT-2" , 0x070C85 }, + { (char*) "Etc/GMT-3" , 0x070D06 }, + { (char*) "Etc/GMT-4" , 0x070D87 }, + { (char*) "Etc/GMT-5" , 0x070E08 }, + { (char*) "Etc/GMT-6" , 0x070E89 }, + { (char*) "Etc/GMT-7" , 0x070F0A }, + { (char*) "Etc/GMT-8" , 0x070F8B }, + { (char*) "Etc/GMT-9" , 0x07100C }, + { (char*) "Etc/GMT0" , 0x07108D }, + { (char*) "Etc/Greenwich" , 0x07110B }, + { (char*) "Etc/UCT" , 0x071189 }, + { (char*) "Etc/Universal" , 0x071207 }, + { (char*) "Etc/UTC" , 0x071285 }, + { (char*) "Etc/Zulu" , 0x071303 }, + { (char*) "Europe/Amsterdam" , 0x071381 }, + { (char*) "Europe/Andorra" , 0x071EEB }, + { (char*) "Europe/Astrakhan" , 0x0725C5 }, + { (char*) "Europe/Athens" , 0x072A62 }, + { (char*) "Europe/Belfast" , 0x073344 }, + { (char*) "Europe/Belgrade" , 0x0741A0 }, + { (char*) "Europe/Berlin" , 0x07492C }, + { (char*) "Europe/Bratislava" , 0x075241 }, + { (char*) "Europe/Brussels" , 0x075B4A }, + { (char*) "Europe/Bucharest" , 0x0766CB }, + { (char*) "Europe/Budapest" , 0x076F5F }, + { (char*) "Europe/Busingen" , 0x0778AB }, + { (char*) "Europe/Chisinau" , 0x078034 }, + { (char*) "Europe/Copenhagen" , 0x0789B8 }, + { (char*) "Europe/Dublin" , 0x07921D }, + { (char*) "Europe/Gibraltar" , 0x079FCD }, + { (char*) "Europe/Guernsey" , 0x07ABD5 }, + { (char*) "Europe/Helsinki" , 0x07BA75 }, + { (char*) "Europe/Isle_of_Man" , 0x07C1ED }, + { (char*) "Europe/Istanbul" , 0x07D039 }, + { (char*) "Europe/Jersey" , 0x07D7D2 }, + { (char*) "Europe/Kaliningrad" , 0x07E672 }, + { (char*) "Europe/Kiev" , 0x07EC67 }, + { (char*) "Europe/Kirov" , 0x07F4BB }, + { (char*) "Europe/Kyiv" , 0x07F976 }, + { (char*) "Europe/Lisbon" , 0x0801D9 }, + { (char*) "Europe/Ljubljana" , 0x080FBF }, + { (char*) "Europe/London" , 0x08174B }, + { (char*) "Europe/Luxembourg" , 0x0825A7 }, + { (char*) "Europe/Madrid" , 0x083135 }, + { (char*) "Europe/Malta" , 0x083B87 }, + { (char*) "Europe/Mariehamn" , 0x0845CF }, + { (char*) "Europe/Minsk" , 0x084D47 }, + { (char*) "Europe/Monaco" , 0x08526E }, + { (char*) "Europe/Moscow" , 0x085DFA }, + { (char*) "Europe/Nicosia" , 0x086419 }, + { (char*) "Europe/Oslo" , 0x086BF7 }, + { (char*) "Europe/Paris" , 0x0874B7 }, + { (char*) "Europe/Podgorica" , 0x088055 }, + { (char*) "Europe/Prague" , 0x0887E1 }, + { (char*) "Europe/Riga" , 0x0890EA }, + { (char*) "Europe/Rome" , 0x08998C }, + { (char*) "Europe/Samara" , 0x08A3E9 }, + { (char*) "Europe/San_Marino" , 0x08A8BF }, + { (char*) "Europe/Sarajevo" , 0x08B31C }, + { (char*) "Europe/Saratov" , 0x08BAA8 }, + { (char*) "Europe/Simferopol" , 0x08BF55 }, + { (char*) "Europe/Skopje" , 0x08C524 }, + { (char*) "Europe/Sofia" , 0x08CCB0 }, + { (char*) "Europe/Stockholm" , 0x08D4D9 }, + { (char*) "Europe/Tallinn" , 0x08DC5A }, + { (char*) "Europe/Tirane" , 0x08E4CA }, + { (char*) "Europe/Tiraspol" , 0x08ECFA }, + { (char*) "Europe/Ulyanovsk" , 0x08F67E }, + { (char*) "Europe/Uzhgorod" , 0x08FB81 }, + { (char*) "Europe/Vaduz" , 0x0903D5 }, + { (char*) "Europe/Vatican" , 0x090B41 }, + { (char*) "Europe/Vienna" , 0x09159E }, + { (char*) "Europe/Vilnius" , 0x091E42 }, + { (char*) "Europe/Volgograd" , 0x0926C0 }, + { (char*) "Europe/Warsaw" , 0x092B87 }, + { (char*) "Europe/Zagreb" , 0x0935F1 }, + { (char*) "Europe/Zaporozhye" , 0x093D7D }, + { (char*) "Europe/Zurich" , 0x0945D1 }, + { (char*) "Factory" , 0x094D52 }, + { (char*) "GB" , 0x094DD2 }, + { (char*) "GB-Eire" , 0x095C2E }, + { (char*) "GMT" , 0x096A8A }, + { (char*) "GMT+0" , 0x096B08 }, + { (char*) "GMT-0" , 0x096B86 }, + { (char*) "GMT0" , 0x096C04 }, + { (char*) "Greenwich" , 0x096C82 }, + { (char*) "Hongkong" , 0x096D00 }, + { (char*) "HST" , 0x0971DD }, + { (char*) "Iceland" , 0x097332 }, + { (char*) "Indian/Antananarivo" , 0x0973D2 }, + { (char*) "Indian/Chagos" , 0x0974B9 }, + { (char*) "Indian/Christmas" , 0x09757E }, + { (char*) "Indian/Cocos" , 0x097621 }, + { (char*) "Indian/Comoro" , 0x0976CD }, + { (char*) "Indian/Kerguelen" , 0x09776E }, + { (char*) "Indian/Mahe" , 0x097811 }, + { (char*) "Indian/Maldives" , 0x0978B4 }, + { (char*) "Indian/Mauritius" , 0x097979 }, + { (char*) "Indian/Mayotte" , 0x097A68 }, + { (char*) "Indian/Reunion" , 0x097B09 }, + { (char*) "Iran" , 0x097BAC }, + { (char*) "Israel" , 0x098098 }, + { (char*) "Jamaica" , 0x0989F8 }, + { (char*) "Japan" , 0x098BE6 }, + { (char*) "Kwajalein" , 0x098D27 }, + { (char*) "Libya" , 0x098E61 }, + { (char*) "MET" , 0x0990DE }, + { (char*) "Mexico/BajaNorte" , 0x099C5F }, + { (char*) "Mexico/BajaSur" , 0x09A7C5 }, + { (char*) "Mexico/General" , 0x09ABF5 }, + { (char*) "MST" , 0x09B0C7 }, + { (char*) "MST7MDT" , 0x09B23B }, + { (char*) "Navajo" , 0x09BB0F }, + { (char*) "NZ" , 0x09C4B7 }, + { (char*) "NZ-CHAT" , 0x09CE48 }, + { (char*) "Pacific/Apia" , 0x09D65A }, + { (char*) "Pacific/Auckland" , 0x09D8BC }, + { (char*) "Pacific/Bougainville" , 0x09E260 }, + { (char*) "Pacific/Chatham" , 0x09E376 }, + { (char*) "Pacific/Chuuk" , 0x09EB97 }, + { (char*) "Pacific/Easter" , 0x09ECB1 }, + { (char*) "Pacific/Efate" , 0x09F575 }, + { (char*) "Pacific/Enderbury" , 0x09F78D }, + { (char*) "Pacific/Fakaofo" , 0x09F875 }, + { (char*) "Pacific/Fiji" , 0x09F93B }, + { (char*) "Pacific/Funafuti" , 0x09FB7B }, + { (char*) "Pacific/Galapagos" , 0x09FC1F }, + { (char*) "Pacific/Gambier" , 0x09FD1C }, + { (char*) "Pacific/Guadalcanal" , 0x09FDCD }, + { (char*) "Pacific/Guam" , 0x09FE71 }, + { (char*) "Pacific/Honolulu" , 0x0A006B }, + { (char*) "Pacific/Johnston" , 0x0A01C6 }, + { (char*) "Pacific/Kanton" , 0x0A031B }, + { (char*) "Pacific/Kiritimati" , 0x0A0412 }, + { (char*) "Pacific/Kosrae" , 0x0A050A }, + { (char*) "Pacific/Kwajalein" , 0x0A066D }, + { (char*) "Pacific/Majuro" , 0x0A07B0 }, + { (char*) "Pacific/Marquesas" , 0x0A08FC }, + { (char*) "Pacific/Midway" , 0x0A09B8 }, + { (char*) "Pacific/Nauru" , 0x0A0AAB }, + { (char*) "Pacific/Niue" , 0x0A0BA5 }, + { (char*) "Pacific/Norfolk" , 0x0A0C6E }, + { (char*) "Pacific/Noumea" , 0x0A0FDC }, + { (char*) "Pacific/Pago_Pago" , 0x0A110A }, + { (char*) "Pacific/Palau" , 0x0A11C5 }, + { (char*) "Pacific/Pitcairn" , 0x0A1277 }, + { (char*) "Pacific/Pohnpei" , 0x0A133F }, + { (char*) "Pacific/Ponape" , 0x0A147A }, + { (char*) "Pacific/Port_Moresby" , 0x0A151E }, + { (char*) "Pacific/Rarotonga" , 0x0A15EE }, + { (char*) "Pacific/Saipan" , 0x0A1847 }, + { (char*) "Pacific/Samoa" , 0x0A1A33 }, + { (char*) "Pacific/Tahiti" , 0x0A1AEE }, + { (char*) "Pacific/Tarawa" , 0x0A1BA0 }, + { (char*) "Pacific/Tongatapu" , 0x0A1C53 }, + { (char*) "Pacific/Truk" , 0x0A1DC5 }, + { (char*) "Pacific/Wake" , 0x0A1E7D }, + { (char*) "Pacific/Wallis" , 0x0A1F2C }, + { (char*) "Pacific/Yap" , 0x0A1FD0 }, + { (char*) "Poland" , 0x0A2088 }, + { (char*) "Portugal" , 0x0A2AF2 }, + { (char*) "PRC" , 0x0A38C5 }, + { (char*) "PST8PDT" , 0x0A3B02 }, + { (char*) "ROC" , 0x0A43D6 }, + { (char*) "ROK" , 0x0A46DB }, + { (char*) "Singapore" , 0x0A4950 }, + { (char*) "Turkey" , 0x0A4AED }, + { (char*) "UCT" , 0x0A5286 }, + { (char*) "Universal" , 0x0A5304 }, + { (char*) "US/Alaska" , 0x0A5382 }, + { (char*) "US/Aleutian" , 0x0A5CD1 }, + { (char*) "US/Arizona" , 0x0A6611 }, + { (char*) "US/Central" , 0x0A6785 }, + { (char*) "US/East-Indiana" , 0x0A7599 }, + { (char*) "US/Eastern" , 0x0A7C37 }, + { (char*) "US/Hawaii" , 0x0A8A23 }, + { (char*) "US/Indiana-Starke" , 0x0A8B78 }, + { (char*) "US/Michigan" , 0x0A9510 }, + { (char*) "US/Mountain" , 0x0A9DD2 }, + { (char*) "US/Pacific" , 0x0AA77A }, + { (char*) "US/Samoa" , 0x0AB2AA }, + { (char*) "UTC" , 0x0AB365 }, + { (char*) "W-SU" , 0x0AB3E3 }, + { (char*) "WET" , 0x0AB9EE }, + { (char*) "Zulu" , 0x0AC7C1 }, }; -const unsigned char timelib_timezone_db_data_builtin[707528] = { +const unsigned char timelib_timezone_db_data_builtin[706623] = { /* Africa/Abidjan */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -38112,8 +38177,8 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { /* America/Rainy_River */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0x00, 0x9B, 0x01, 0xFB, 0xE0, 0x9B, 0xC3, 0xBA, 0x50, 0x9E, 0xB8, 0xA1, 0x80, 0x9F, 0xBA, 0xF9, 0x70, 0xC2, 0xA0, 0x3B, 0x80, 0xC3, 0x4F, 0x84, 0xF0, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x88, 0x68, 0x00, 0xD4, 0x53, 0x60, 0xF0, 0xD5, 0x55, 0xD5, 0x00, @@ -38154,144 +38219,125 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, -0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, -0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, -0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, -0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, -0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, -0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, -0x7F, 0x98, 0x0E, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, +0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, -0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, -0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, -0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, -0xFF, 0xFF, 0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, -0xFF, 0xFF, 0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, -0xFF, 0xFF, 0xC2, 0xA0, 0x3B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x4F, 0x84, 0xF0, 0xFF, 0xFF, -0xFF, 0xFF, 0xCB, 0x88, 0xFE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, -0xFF, 0xFF, 0xD2, 0x61, 0x09, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x88, 0x68, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD4, 0x53, 0x60, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xD5, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD6, 0x20, 0xCD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x35, 0xB7, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD8, 0x00, 0xAF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD9, 0x15, 0x99, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD9, 0xE0, 0x91, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x00, 0x07, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xDB, 0xC8, 0x5C, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xDE, 0x97, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xDD, 0xA9, 0x90, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xBE, 0x79, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xDF, 0x89, 0x72, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x9E, 0x5B, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE1, 0x69, 0x54, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0x7E, 0x3D, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE3, 0x49, 0x36, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x5E, 0x1F, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE5, 0x29, 0x18, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x47, 0x3C, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xE7, 0x12, 0x34, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x27, 0x1E, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xE8, 0xF2, 0x16, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0x07, 0x00, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEA, 0xD1, 0xF8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xE6, 0xE2, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEC, 0xD6, 0xC4, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xC6, 0xC4, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEE, 0x91, 0xBC, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x6F, 0xA4, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xF4, 0x31, 0x62, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x0F, 0x4A, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xFA, 0x08, 0x76, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xF8, 0x67, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFB, 0xE8, 0x58, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xD8, 0x49, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFD, 0xC8, 0x3A, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0xA8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x87, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x00, 0x00, -0x00, 0x00, 0x03, 0x71, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x61, 0x0B, 0x80, 0x00, 0x00, -0x00, 0x00, 0x05, 0x50, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0xED, 0x80, 0x00, 0x00, -0x00, 0x00, 0x07, 0x30, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xCF, 0x80, 0x00, 0x00, -0x00, 0x00, 0x09, 0x10, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0A, 0xF0, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x93, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0C, 0xD9, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0E, 0xB9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xA9, 0x92, 0x00, 0x00, 0x00, -0x00, 0x00, 0x10, 0x99, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x89, 0x74, 0x00, 0x00, 0x00, -0x00, 0x00, 0x12, 0x79, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x69, 0x56, 0x00, 0x00, 0x00, -0x00, 0x00, 0x14, 0x59, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x49, 0x38, 0x00, 0x00, 0x00, -0x00, 0x00, 0x16, 0x39, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x29, 0x1A, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x22, 0x45, 0x80, 0x00, 0x00, 0x00, 0x00, 0x19, 0x08, 0xFC, 0x00, 0x00, 0x00, -0x00, 0x00, 0x1A, 0x02, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF2, 0x18, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1B, 0xE2, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xD1, 0xFA, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1D, 0xC1, 0xEB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xB1, 0xDC, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1F, 0xA1, 0xCD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x76, 0x0F, 0x00, 0x00, 0x00, -0x00, 0x00, 0x21, 0x81, 0xAF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x22, 0x55, 0xF1, 0x00, 0x00, 0x00, -0x00, 0x00, 0x23, 0x6A, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x00, 0x00, -0x00, 0x00, 0x25, 0x4A, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x15, 0xB5, 0x00, 0x00, 0x00, -0x00, 0x00, 0x27, 0x2A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x29, 0x0A, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xDE, 0xB3, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2A, 0xEA, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2C, 0xD3, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x9E, 0x77, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2E, 0xB3, 0x52, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x7E, 0x59, 0x80, 0x00, 0x00, -0x00, 0x00, 0x30, 0x93, 0x34, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x67, 0x76, 0x00, 0x00, 0x00, -0x00, 0x00, 0x32, 0x73, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x33, 0x47, 0x58, 0x00, 0x00, 0x00, -0x00, 0x00, 0x34, 0x52, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x35, 0x27, 0x3A, 0x00, 0x00, 0x00, -0x00, 0x00, 0x36, 0x32, 0xDA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x37, 0x07, 0x1C, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x1B, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xE6, 0xFE, 0x00, 0x00, 0x00, -0x00, 0x00, 0x39, 0xFB, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x00, 0x3B, 0xDB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xAF, 0xFC, 0x80, 0x00, 0x00, -0x00, 0x00, 0x3D, 0xBB, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x00, 0x00, -0x00, 0x00, 0x3F, 0x9B, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, -0x00, 0x00, 0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, -0x00, 0x00, 0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, -0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, -0x00, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, -0x00, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, -0x00, 0x00, 0x4C, 0xD6, 0x4E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, -0x00, 0x00, 0x4E, 0xB6, 0x30, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, -0x00, 0x00, 0x50, 0x96, 0x12, 0x70, 0x00, 0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, -0x00, 0x00, 0x52, 0x75, 0xF4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, -0x00, 0x00, 0x54, 0x55, 0xD6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, -0x00, 0x00, 0x56, 0x35, 0xB8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, -0x00, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, -0x00, 0x00, 0x61, 0x87, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, -0x00, 0x00, 0x63, 0x67, 0x5B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, -0x00, 0x00, 0x65, 0x47, 0x3D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, -0x00, 0x00, 0x67, 0x27, 0x1F, 0x70, 0x00, 0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, -0x00, 0x00, 0x69, 0x07, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, -0x00, 0x00, 0x6A, 0xE6, 0xE3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x96, 0x49, 0x00, 0x00, 0x00, -0x00, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x76, 0x2B, 0x00, 0x00, 0x00, -0x00, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x56, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x35, 0xEF, 0x00, 0x00, 0x00, -0x00, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x15, 0xD1, 0x00, 0x00, 0x00, -0x00, 0x00, 0x74, 0x4F, 0x87, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x74, 0xFE, 0xED, 0x80, 0x00, 0x00, -0x00, 0x00, 0x76, 0x38, 0xA4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDE, 0xCF, 0x80, 0x00, 0x00, -0x00, 0x00, 0x78, 0x18, 0x86, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0xBE, 0xB1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x79, 0xF8, 0x68, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x9E, 0x93, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7B, 0xD8, 0x4A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x75, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7D, 0xB8, 0x2C, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x5E, 0x57, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7F, 0x98, 0x0E, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, +0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x07, +0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, +0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, +0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, +0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, +0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, +0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x08, +0x00, 0x00, 0x00, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, +0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, +0xC2, 0xA0, 0x3B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x4F, 0x84, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, +0xCB, 0x88, 0xFE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, +0xD2, 0x61, 0x09, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x88, 0x68, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD4, 0x53, 0x60, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xD5, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD6, 0x20, 0xCD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x35, 0xB7, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD8, 0x00, 0xAF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD9, 0x15, 0x99, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD9, 0xE0, 0x91, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x00, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xDB, 0xC8, 0x5C, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xDE, 0x97, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xDD, 0xA9, 0x90, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xBE, 0x79, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xDF, 0x89, 0x72, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x9E, 0x5B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE1, 0x69, 0x54, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0x7E, 0x3D, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE3, 0x49, 0x36, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x5E, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE5, 0x29, 0x18, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x47, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xE7, 0x12, 0x34, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x27, 0x1E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xE8, 0xF2, 0x16, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEA, 0xD1, 0xF8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xE6, 0xE2, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEC, 0xD6, 0xC4, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xC6, 0xC4, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEE, 0x91, 0xBC, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x6F, 0xA4, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xF4, 0x31, 0x62, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x0F, 0x4A, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xFA, 0x08, 0x76, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xF8, 0x67, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFB, 0xE8, 0x58, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xD8, 0x49, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFD, 0xC8, 0x3A, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xA8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x87, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, +0x03, 0x71, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x61, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, +0x05, 0x50, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0xED, 0x80, 0x00, 0x00, 0x00, 0x00, +0x07, 0x30, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xCF, 0x80, 0x00, 0x00, 0x00, 0x00, +0x09, 0x10, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB1, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0A, 0xF0, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x93, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0C, 0xD9, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0E, 0xB9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xA9, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, +0x10, 0x99, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x89, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, +0x12, 0x79, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x69, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, +0x14, 0x59, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x49, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, +0x16, 0x39, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x29, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x22, 0x45, 0x80, 0x00, 0x00, 0x00, 0x00, 0x19, 0x08, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x1A, 0x02, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF2, 0x18, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1B, 0xE2, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xD1, 0xFA, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1D, 0xC1, 0xEB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xB1, 0xDC, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1F, 0xA1, 0xCD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x76, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, +0x21, 0x81, 0xAF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x22, 0x55, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, +0x23, 0x6A, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, +0x25, 0x4A, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x15, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, +0x27, 0x2A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x00, 0x00, 0x00, 0x00, +0x29, 0x0A, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xDE, 0xB3, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2A, 0xEA, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2C, 0xD3, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x9E, 0x77, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2E, 0xB3, 0x52, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x7E, 0x59, 0x80, 0x00, 0x00, 0x00, 0x00, +0x30, 0x93, 0x34, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x67, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, +0x32, 0x73, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x33, 0x47, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, +0x34, 0x52, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x35, 0x27, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x32, 0xDA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x37, 0x07, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x38, 0x1B, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xE6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, +0x39, 0xFB, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3B, 0xDB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xAF, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, +0x3D, 0xBB, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, +0x3F, 0x9B, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, +0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, +0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, +0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, +0x47, 0x2D, 0x6D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, +0x49, 0x0D, 0x4F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, +0x4A, 0xED, 0x31, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, 0x00, 0x00, +0x4C, 0xD6, 0x4E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, +0x4E, 0xB6, 0x30, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, 0x00, 0x00, +0x50, 0x96, 0x12, 0x70, 0x00, 0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, 0x00, 0x00, +0x52, 0x75, 0xF4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, +0x54, 0x55, 0xD6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, +0x56, 0x35, 0xB8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x58, 0x1E, 0xD4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x59, 0xFE, 0xB6, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5B, 0xDE, 0x98, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5D, 0xBE, 0x7A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5F, 0x9E, 0x5C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, 0x00, 0x00, +0x61, 0x87, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, 0x00, 0x00, +0x63, 0x67, 0x5B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, 0x00, 0x00, +0x65, 0x47, 0x3D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, 0x00, 0x00, +0x67, 0x27, 0x1F, 0x70, 0x00, 0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, 0x00, 0x00, +0x69, 0x07, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, 0x00, 0x00, +0x6A, 0xE6, 0xE3, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, -0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x43, 0x53, 0x54, -0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, -0x31, 0x2E, 0x30, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x07, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, +0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, +0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, +0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, +0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x0A, 0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, /* America/Rankin_Inlet */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -41136,8 +41182,8 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { /* America/Winnipeg */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x43, 0x41, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0x00, 0x9B, 0x01, 0xFB, 0xE0, 0x9B, 0xC3, 0xBA, 0x50, 0x9E, 0xB8, 0xA1, 0x80, 0x9F, 0xBA, 0xF9, 0x70, 0xC2, 0xA0, 0x3B, 0x80, 0xC3, 0x4F, 0x84, 0xF0, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x88, 0x68, 0x00, 0xD4, 0x53, 0x60, 0xF0, 0xD5, 0x55, 0xD5, 0x00, @@ -41178,145 +41224,127 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, -0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, -0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, -0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, -0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, -0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, -0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, -0x7F, 0x98, 0x0E, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, +0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, -0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, -0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, -0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, -0xFF, 0xFF, 0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, -0xFF, 0xFF, 0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, -0xFF, 0xFF, 0xC2, 0xA0, 0x3B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x4F, 0x84, 0xF0, 0xFF, 0xFF, -0xFF, 0xFF, 0xCB, 0x88, 0xFE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, -0xFF, 0xFF, 0xD2, 0x61, 0x09, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x88, 0x68, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD4, 0x53, 0x60, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xD5, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD6, 0x20, 0xCD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x35, 0xB7, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD8, 0x00, 0xAF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD9, 0x15, 0x99, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD9, 0xE0, 0x91, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x00, 0x07, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xDB, 0xC8, 0x5C, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xDE, 0x97, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xDD, 0xA9, 0x90, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xBE, 0x79, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xDF, 0x89, 0x72, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x9E, 0x5B, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE1, 0x69, 0x54, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0x7E, 0x3D, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE3, 0x49, 0x36, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x5E, 0x1F, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE5, 0x29, 0x18, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x47, 0x3C, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xE7, 0x12, 0x34, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x27, 0x1E, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xE8, 0xF2, 0x16, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0x07, 0x00, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEA, 0xD1, 0xF8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xE6, 0xE2, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEC, 0xD6, 0xC4, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xC6, 0xC4, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEE, 0x91, 0xBC, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x6F, 0xA4, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xF4, 0x31, 0x62, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x0F, 0x4A, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xFA, 0x08, 0x76, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xF8, 0x67, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFB, 0xE8, 0x58, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xD8, 0x49, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFD, 0xC8, 0x3A, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0xA8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x87, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x00, 0x00, -0x00, 0x00, 0x03, 0x71, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x61, 0x0B, 0x80, 0x00, 0x00, -0x00, 0x00, 0x05, 0x50, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0xED, 0x80, 0x00, 0x00, -0x00, 0x00, 0x07, 0x30, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xCF, 0x80, 0x00, 0x00, -0x00, 0x00, 0x09, 0x10, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0A, 0xF0, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x93, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0C, 0xD9, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0E, 0xB9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xA9, 0x92, 0x00, 0x00, 0x00, -0x00, 0x00, 0x10, 0x99, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x89, 0x74, 0x00, 0x00, 0x00, -0x00, 0x00, 0x12, 0x79, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x69, 0x56, 0x00, 0x00, 0x00, -0x00, 0x00, 0x14, 0x59, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x49, 0x38, 0x00, 0x00, 0x00, -0x00, 0x00, 0x16, 0x39, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x29, 0x1A, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x22, 0x45, 0x80, 0x00, 0x00, 0x00, 0x00, 0x19, 0x08, 0xFC, 0x00, 0x00, 0x00, -0x00, 0x00, 0x1A, 0x02, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF2, 0x18, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1B, 0xE2, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xD1, 0xFA, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1D, 0xC1, 0xEB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xB1, 0xDC, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1F, 0xA1, 0xCD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x76, 0x0F, 0x00, 0x00, 0x00, -0x00, 0x00, 0x21, 0x81, 0xAF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x22, 0x55, 0xF1, 0x00, 0x00, 0x00, -0x00, 0x00, 0x23, 0x6A, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x00, 0x00, -0x00, 0x00, 0x25, 0x4A, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x15, 0xB5, 0x00, 0x00, 0x00, -0x00, 0x00, 0x27, 0x2A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x29, 0x0A, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xDE, 0xB3, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2A, 0xEA, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2C, 0xD3, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x9E, 0x77, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2E, 0xB3, 0x52, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x7E, 0x59, 0x80, 0x00, 0x00, -0x00, 0x00, 0x30, 0x93, 0x34, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x67, 0x76, 0x00, 0x00, 0x00, -0x00, 0x00, 0x32, 0x73, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x33, 0x47, 0x58, 0x00, 0x00, 0x00, -0x00, 0x00, 0x34, 0x52, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x35, 0x27, 0x3A, 0x00, 0x00, 0x00, -0x00, 0x00, 0x36, 0x32, 0xDA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x37, 0x07, 0x1C, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x1B, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xE6, 0xFE, 0x00, 0x00, 0x00, -0x00, 0x00, 0x39, 0xFB, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x00, 0x3B, 0xDB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xAF, 0xFC, 0x80, 0x00, 0x00, -0x00, 0x00, 0x3D, 0xBB, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x00, 0x00, -0x00, 0x00, 0x3F, 0x9B, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, -0x00, 0x00, 0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, -0x00, 0x00, 0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, -0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, -0x00, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, -0x00, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, -0x00, 0x00, 0x4C, 0xD6, 0x4E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, -0x00, 0x00, 0x4E, 0xB6, 0x30, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, -0x00, 0x00, 0x50, 0x96, 0x12, 0x70, 0x00, 0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, -0x00, 0x00, 0x52, 0x75, 0xF4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, -0x00, 0x00, 0x54, 0x55, 0xD6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, -0x00, 0x00, 0x56, 0x35, 0xB8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, -0x00, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, -0x00, 0x00, 0x61, 0x87, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, -0x00, 0x00, 0x63, 0x67, 0x5B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, -0x00, 0x00, 0x65, 0x47, 0x3D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, -0x00, 0x00, 0x67, 0x27, 0x1F, 0x70, 0x00, 0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, -0x00, 0x00, 0x69, 0x07, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, -0x00, 0x00, 0x6A, 0xE6, 0xE3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x96, 0x49, 0x00, 0x00, 0x00, -0x00, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x76, 0x2B, 0x00, 0x00, 0x00, -0x00, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x56, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x35, 0xEF, 0x00, 0x00, 0x00, -0x00, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x15, 0xD1, 0x00, 0x00, 0x00, -0x00, 0x00, 0x74, 0x4F, 0x87, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x74, 0xFE, 0xED, 0x80, 0x00, 0x00, -0x00, 0x00, 0x76, 0x38, 0xA4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDE, 0xCF, 0x80, 0x00, 0x00, -0x00, 0x00, 0x78, 0x18, 0x86, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0xBE, 0xB1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x79, 0xF8, 0x68, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x9E, 0x93, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7B, 0xD8, 0x4A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x75, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7D, 0xB8, 0x2C, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x5E, 0x57, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7F, 0x98, 0x0E, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, +0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x07, +0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, +0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, +0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, +0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, +0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, +0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x08, +0x00, 0x00, 0x00, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, +0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, +0xC2, 0xA0, 0x3B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x4F, 0x84, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, +0xCB, 0x88, 0xFE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, +0xD2, 0x61, 0x09, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x88, 0x68, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD4, 0x53, 0x60, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xD5, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD6, 0x20, 0xCD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x35, 0xB7, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD8, 0x00, 0xAF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD9, 0x15, 0x99, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD9, 0xE0, 0x91, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x00, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xDB, 0xC8, 0x5C, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xDE, 0x97, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xDD, 0xA9, 0x90, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xBE, 0x79, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xDF, 0x89, 0x72, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x9E, 0x5B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE1, 0x69, 0x54, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0x7E, 0x3D, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE3, 0x49, 0x36, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x5E, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE5, 0x29, 0x18, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x47, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xE7, 0x12, 0x34, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x27, 0x1E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xE8, 0xF2, 0x16, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEA, 0xD1, 0xF8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xE6, 0xE2, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEC, 0xD6, 0xC4, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xC6, 0xC4, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEE, 0x91, 0xBC, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x6F, 0xA4, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xF4, 0x31, 0x62, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x0F, 0x4A, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xFA, 0x08, 0x76, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xF8, 0x67, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFB, 0xE8, 0x58, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xD8, 0x49, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFD, 0xC8, 0x3A, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xA8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x87, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, +0x03, 0x71, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x61, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, +0x05, 0x50, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0xED, 0x80, 0x00, 0x00, 0x00, 0x00, +0x07, 0x30, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xCF, 0x80, 0x00, 0x00, 0x00, 0x00, +0x09, 0x10, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB1, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0A, 0xF0, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x93, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0C, 0xD9, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0E, 0xB9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xA9, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, +0x10, 0x99, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x89, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, +0x12, 0x79, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x69, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, +0x14, 0x59, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x49, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, +0x16, 0x39, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x29, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x22, 0x45, 0x80, 0x00, 0x00, 0x00, 0x00, 0x19, 0x08, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x1A, 0x02, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF2, 0x18, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1B, 0xE2, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xD1, 0xFA, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1D, 0xC1, 0xEB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xB1, 0xDC, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1F, 0xA1, 0xCD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x76, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, +0x21, 0x81, 0xAF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x22, 0x55, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, +0x23, 0x6A, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, +0x25, 0x4A, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x15, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, +0x27, 0x2A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x00, 0x00, 0x00, 0x00, +0x29, 0x0A, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xDE, 0xB3, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2A, 0xEA, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2C, 0xD3, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x9E, 0x77, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2E, 0xB3, 0x52, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x7E, 0x59, 0x80, 0x00, 0x00, 0x00, 0x00, +0x30, 0x93, 0x34, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x67, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, +0x32, 0x73, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x33, 0x47, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, +0x34, 0x52, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x35, 0x27, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x32, 0xDA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x37, 0x07, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x38, 0x1B, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xE6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, +0x39, 0xFB, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3B, 0xDB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xAF, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, +0x3D, 0xBB, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, +0x3F, 0x9B, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, +0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, +0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, +0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, +0x47, 0x2D, 0x6D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, +0x49, 0x0D, 0x4F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, +0x4A, 0xED, 0x31, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, 0x00, 0x00, +0x4C, 0xD6, 0x4E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, +0x4E, 0xB6, 0x30, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, 0x00, 0x00, +0x50, 0x96, 0x12, 0x70, 0x00, 0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, 0x00, 0x00, +0x52, 0x75, 0xF4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, +0x54, 0x55, 0xD6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, +0x56, 0x35, 0xB8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x58, 0x1E, 0xD4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x59, 0xFE, 0xB6, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5B, 0xDE, 0x98, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5D, 0xBE, 0x7A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5F, 0x9E, 0x5C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, 0x00, 0x00, +0x61, 0x87, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, 0x00, 0x00, +0x63, 0x67, 0x5B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, 0x00, 0x00, +0x65, 0x47, 0x3D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, 0x00, 0x00, +0x67, 0x27, 0x1F, 0x70, 0x00, 0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, 0x00, 0x00, +0x69, 0x07, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, 0x00, 0x00, +0x6A, 0xE6, 0xE3, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, -0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x43, 0x53, 0x54, -0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, -0x31, 0x2E, 0x30, 0x0A, 0x00, 0xD5, 0x71, 0xED, 0x00, 0x7E, 0x6B, 0x47, 0x00, 0x00, 0x00, 0x1D, -0x43, 0x65, 0x6E, 0x74, 0x72, 0x61, 0x6C, 0x20, 0x2D, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x77, 0x65, -0x73, 0x74, 0x29, 0x2C, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 0x61, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x07, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, +0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, +0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, +0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, +0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x0A, 0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0xD5, 0x71, 0xED, 0x00, 0x7E, 0x6B, 0x47, 0x00, 0x00, +0x00, 0x1E, 0x45, 0x53, 0x54, 0x20, 0x2D, 0x20, 0x4D, 0x61, 0x6E, 0x69, 0x74, 0x6F, 0x62, 0x61, +0x2C, 0x20, 0x4F, 0x4E, 0x20, 0x28, 0x6E, 0x6F, 0x72, 0x74, 0x68, 0x77, 0x65, 0x73, 0x74, 0x29, + /* America/Yakutat */ 0x50, 0x48, 0x50, 0x32, 0x01, 0x55, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -52124,8 +52152,8 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { /* Canada/Central */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x18, 0x80, 0x00, 0x00, 0x00, 0x9B, 0x01, 0xFB, 0xE0, 0x9B, 0xC3, 0xBA, 0x50, 0x9E, 0xB8, 0xA1, 0x80, 0x9F, 0xBA, 0xF9, 0x70, 0xC2, 0xA0, 0x3B, 0x80, 0xC3, 0x4F, 0x84, 0xF0, 0xCB, 0x88, 0xFE, 0x80, 0xD2, 0x23, 0xF4, 0x70, 0xD2, 0x61, 0x09, 0xF0, 0xD3, 0x88, 0x68, 0x00, 0xD4, 0x53, 0x60, 0xF0, 0xD5, 0x55, 0xD5, 0x00, @@ -52166,144 +52194,125 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { 0x5D, 0xBE, 0x7A, 0xF0, 0x5E, 0x64, 0xA6, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x60, 0x4D, 0xC2, 0x80, 0x61, 0x87, 0x79, 0x70, 0x62, 0x2D, 0xA4, 0x80, 0x63, 0x67, 0x5B, 0x70, 0x64, 0x0D, 0x86, 0x80, 0x65, 0x47, 0x3D, 0x70, 0x65, 0xED, 0x68, 0x80, 0x67, 0x27, 0x1F, 0x70, 0x67, 0xCD, 0x4A, 0x80, -0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x6B, 0x96, 0x49, 0x00, -0x6C, 0xCF, 0xFF, 0xF0, 0x6D, 0x76, 0x2B, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x6F, 0x56, 0x0D, 0x00, -0x70, 0x8F, 0xC3, 0xF0, 0x71, 0x35, 0xEF, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x73, 0x15, 0xD1, 0x00, -0x74, 0x4F, 0x87, 0xF0, 0x74, 0xFE, 0xED, 0x80, 0x76, 0x38, 0xA4, 0x70, 0x76, 0xDE, 0xCF, 0x80, -0x78, 0x18, 0x86, 0x70, 0x78, 0xBE, 0xB1, 0x80, 0x79, 0xF8, 0x68, 0x70, 0x7A, 0x9E, 0x93, 0x80, -0x7B, 0xD8, 0x4A, 0x70, 0x7C, 0x7E, 0x75, 0x80, 0x7D, 0xB8, 0x2C, 0x70, 0x7E, 0x5E, 0x57, 0x80, -0x7F, 0x98, 0x0E, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, +0x69, 0x07, 0x01, 0x70, 0x69, 0xAD, 0x2C, 0x80, 0x6A, 0xE6, 0xE3, 0x70, 0x02, 0x01, 0x02, 0x01, +0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0xFF, 0xFF, -0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, -0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, -0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, -0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, -0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, -0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xBA, 0x00, 0x00, -0x00, 0x07, 0x00, 0x00, 0x00, 0x14, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, -0xFF, 0xFF, 0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, -0xFF, 0xFF, 0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, -0xFF, 0xFF, 0xC2, 0xA0, 0x3B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x4F, 0x84, 0xF0, 0xFF, 0xFF, -0xFF, 0xFF, 0xCB, 0x88, 0xFE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, -0xFF, 0xFF, 0xD2, 0x61, 0x09, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x88, 0x68, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD4, 0x53, 0x60, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xD5, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD6, 0x20, 0xCD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x35, 0xB7, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD8, 0x00, 0xAF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD9, 0x15, 0x99, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xD9, 0xE0, 0x91, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x00, 0x07, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xDB, 0xC8, 0x5C, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xDE, 0x97, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xDD, 0xA9, 0x90, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xBE, 0x79, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xDF, 0x89, 0x72, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x9E, 0x5B, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE1, 0x69, 0x54, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0x7E, 0x3D, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE3, 0x49, 0x36, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x5E, 0x1F, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xE5, 0x29, 0x18, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x47, 0x3C, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xE7, 0x12, 0x34, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x27, 0x1E, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xE8, 0xF2, 0x16, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0x07, 0x00, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEA, 0xD1, 0xF8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xE6, 0xE2, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEC, 0xD6, 0xC4, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xC6, 0xC4, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xEE, 0x91, 0xBC, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x6F, 0xA4, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xF4, 0x31, 0x62, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x0F, 0x4A, 0x80, 0xFF, 0xFF, -0xFF, 0xFF, 0xFA, 0x08, 0x76, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xF8, 0x67, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFB, 0xE8, 0x58, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xD8, 0x49, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFD, 0xC8, 0x3A, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xFF, -0xFF, 0xFF, 0xFF, 0xA8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x87, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x00, 0x00, -0x00, 0x00, 0x03, 0x71, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x61, 0x0B, 0x80, 0x00, 0x00, -0x00, 0x00, 0x05, 0x50, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0xED, 0x80, 0x00, 0x00, -0x00, 0x00, 0x07, 0x30, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xCF, 0x80, 0x00, 0x00, -0x00, 0x00, 0x09, 0x10, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0A, 0xF0, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x93, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0C, 0xD9, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x00, 0x00, -0x00, 0x00, 0x0E, 0xB9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xA9, 0x92, 0x00, 0x00, 0x00, -0x00, 0x00, 0x10, 0x99, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x89, 0x74, 0x00, 0x00, 0x00, -0x00, 0x00, 0x12, 0x79, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x69, 0x56, 0x00, 0x00, 0x00, -0x00, 0x00, 0x14, 0x59, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x49, 0x38, 0x00, 0x00, 0x00, -0x00, 0x00, 0x16, 0x39, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x29, 0x1A, 0x00, 0x00, 0x00, -0x00, 0x00, 0x18, 0x22, 0x45, 0x80, 0x00, 0x00, 0x00, 0x00, 0x19, 0x08, 0xFC, 0x00, 0x00, 0x00, -0x00, 0x00, 0x1A, 0x02, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF2, 0x18, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1B, 0xE2, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xD1, 0xFA, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1D, 0xC1, 0xEB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xB1, 0xDC, 0x80, 0x00, 0x00, -0x00, 0x00, 0x1F, 0xA1, 0xCD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x76, 0x0F, 0x00, 0x00, 0x00, -0x00, 0x00, 0x21, 0x81, 0xAF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x22, 0x55, 0xF1, 0x00, 0x00, 0x00, -0x00, 0x00, 0x23, 0x6A, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x00, 0x00, -0x00, 0x00, 0x25, 0x4A, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x15, 0xB5, 0x00, 0x00, 0x00, -0x00, 0x00, 0x27, 0x2A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x29, 0x0A, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xDE, 0xB3, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2A, 0xEA, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2C, 0xD3, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x9E, 0x77, 0x80, 0x00, 0x00, -0x00, 0x00, 0x2E, 0xB3, 0x52, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x7E, 0x59, 0x80, 0x00, 0x00, -0x00, 0x00, 0x30, 0x93, 0x34, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x67, 0x76, 0x00, 0x00, 0x00, -0x00, 0x00, 0x32, 0x73, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x33, 0x47, 0x58, 0x00, 0x00, 0x00, -0x00, 0x00, 0x34, 0x52, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x35, 0x27, 0x3A, 0x00, 0x00, 0x00, -0x00, 0x00, 0x36, 0x32, 0xDA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x37, 0x07, 0x1C, 0x00, 0x00, 0x00, -0x00, 0x00, 0x38, 0x1B, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xE6, 0xFE, 0x00, 0x00, 0x00, -0x00, 0x00, 0x39, 0xFB, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x00, 0x00, -0x00, 0x00, 0x3B, 0xDB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xAF, 0xFC, 0x80, 0x00, 0x00, -0x00, 0x00, 0x3D, 0xBB, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x00, 0x00, -0x00, 0x00, 0x3F, 0x9B, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, -0x00, 0x00, 0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, -0x00, 0x00, 0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, -0x00, 0x00, 0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, -0x00, 0x00, 0x47, 0x2D, 0x6D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, -0x00, 0x00, 0x49, 0x0D, 0x4F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, -0x00, 0x00, 0x4A, 0xED, 0x31, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, -0x00, 0x00, 0x4C, 0xD6, 0x4E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, -0x00, 0x00, 0x4E, 0xB6, 0x30, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, -0x00, 0x00, 0x50, 0x96, 0x12, 0x70, 0x00, 0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, -0x00, 0x00, 0x52, 0x75, 0xF4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, -0x00, 0x00, 0x54, 0x55, 0xD6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, -0x00, 0x00, 0x56, 0x35, 0xB8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, -0x00, 0x00, 0x58, 0x1E, 0xD4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, -0x00, 0x00, 0x59, 0xFE, 0xB6, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5B, 0xDE, 0x98, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5D, 0xBE, 0x7A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, -0x00, 0x00, 0x5F, 0x9E, 0x5C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, -0x00, 0x00, 0x61, 0x87, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, -0x00, 0x00, 0x63, 0x67, 0x5B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, -0x00, 0x00, 0x65, 0x47, 0x3D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, -0x00, 0x00, 0x67, 0x27, 0x1F, 0x70, 0x00, 0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, -0x00, 0x00, 0x69, 0x07, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, -0x00, 0x00, 0x6A, 0xE6, 0xE3, 0x70, 0x00, 0x00, 0x00, 0x00, 0x6B, 0x96, 0x49, 0x00, 0x00, 0x00, -0x00, 0x00, 0x6C, 0xCF, 0xFF, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6D, 0x76, 0x2B, 0x00, 0x00, 0x00, -0x00, 0x00, 0x6E, 0xAF, 0xE1, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x6F, 0x56, 0x0D, 0x00, 0x00, 0x00, -0x00, 0x00, 0x70, 0x8F, 0xC3, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x71, 0x35, 0xEF, 0x00, 0x00, 0x00, -0x00, 0x00, 0x72, 0x6F, 0xA5, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x73, 0x15, 0xD1, 0x00, 0x00, 0x00, -0x00, 0x00, 0x74, 0x4F, 0x87, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x74, 0xFE, 0xED, 0x80, 0x00, 0x00, -0x00, 0x00, 0x76, 0x38, 0xA4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x76, 0xDE, 0xCF, 0x80, 0x00, 0x00, -0x00, 0x00, 0x78, 0x18, 0x86, 0x70, 0x00, 0x00, 0x00, 0x00, 0x78, 0xBE, 0xB1, 0x80, 0x00, 0x00, -0x00, 0x00, 0x79, 0xF8, 0x68, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x9E, 0x93, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7B, 0xD8, 0x4A, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7C, 0x7E, 0x75, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7D, 0xB8, 0x2C, 0x70, 0x00, 0x00, 0x00, 0x00, 0x7E, 0x5E, 0x57, 0x80, 0x00, 0x00, -0x00, 0x00, 0x7F, 0x98, 0x0E, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, +0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x07, +0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, +0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, +0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, +0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, +0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x54, 0x5A, 0x69, 0x66, 0x32, 0x00, 0x00, 0x00, +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, +0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xA4, 0x00, 0x00, 0x00, 0x08, +0x00, 0x00, 0x00, 0x18, 0xFF, 0xFF, 0xFF, 0xFF, 0x64, 0xE4, 0xB0, 0x94, 0xFF, 0xFF, 0xFF, 0xFF, +0x9B, 0x01, 0xFB, 0xE0, 0xFF, 0xFF, 0xFF, 0xFF, 0x9B, 0xC3, 0xBA, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, +0x9E, 0xB8, 0xA1, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0x9F, 0xBA, 0xF9, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, +0xC2, 0xA0, 0x3B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xC3, 0x4F, 0x84, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, +0xCB, 0x88, 0xFE, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xD2, 0x23, 0xF4, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, +0xD2, 0x61, 0x09, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD3, 0x88, 0x68, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD4, 0x53, 0x60, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD5, 0x55, 0xD5, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD6, 0x20, 0xCD, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD7, 0x35, 0xB7, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD8, 0x00, 0xAF, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xD9, 0x15, 0x99, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xD9, 0xE0, 0x91, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDB, 0x00, 0x07, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xDB, 0xC8, 0x5C, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xDC, 0xDE, 0x97, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xDD, 0xA9, 0x90, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xDE, 0xBE, 0x79, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xDF, 0x89, 0x72, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE0, 0x9E, 0x5B, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE1, 0x69, 0x54, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE2, 0x7E, 0x3D, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE3, 0x49, 0x36, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE4, 0x5E, 0x1F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xE5, 0x29, 0x18, 0x70, 0xFF, 0xFF, 0xFF, 0xFF, 0xE6, 0x47, 0x3C, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xE7, 0x12, 0x34, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xE8, 0x27, 0x1E, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xE8, 0xF2, 0x16, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEA, 0x07, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEA, 0xD1, 0xF8, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xEB, 0xE6, 0xE2, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEC, 0xD6, 0xC4, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xED, 0xC6, 0xC4, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xEE, 0x91, 0xBC, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF3, 0x6F, 0xA4, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xF4, 0x31, 0x62, 0xF0, 0xFF, 0xFF, 0xFF, 0xFF, 0xF9, 0x0F, 0x4A, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, +0xFA, 0x08, 0x76, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFA, 0xF8, 0x67, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFB, 0xE8, 0x58, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFC, 0xD8, 0x49, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFD, 0xC8, 0x3A, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFE, 0xB8, 0x2B, 0x00, 0xFF, 0xFF, 0xFF, 0xFF, +0xFF, 0xA8, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, +0x01, 0x87, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x77, 0xEF, 0x00, 0x00, 0x00, 0x00, 0x00, +0x03, 0x71, 0x1A, 0x80, 0x00, 0x00, 0x00, 0x00, 0x04, 0x61, 0x0B, 0x80, 0x00, 0x00, 0x00, 0x00, +0x05, 0x50, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x40, 0xED, 0x80, 0x00, 0x00, 0x00, 0x00, +0x07, 0x30, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0xCF, 0x80, 0x00, 0x00, 0x00, 0x00, +0x09, 0x10, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0A, 0x00, 0xB1, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0A, 0xF0, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, 0x0B, 0xE0, 0x93, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0C, 0xD9, 0xBF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0D, 0xC0, 0x75, 0x80, 0x00, 0x00, 0x00, 0x00, +0x0E, 0xB9, 0xA1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xA9, 0x92, 0x00, 0x00, 0x00, 0x00, 0x00, +0x10, 0x99, 0x83, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x89, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, +0x12, 0x79, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x69, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, +0x14, 0x59, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, 0x49, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, +0x16, 0x39, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x29, 0x1A, 0x00, 0x00, 0x00, 0x00, 0x00, +0x18, 0x22, 0x45, 0x80, 0x00, 0x00, 0x00, 0x00, 0x19, 0x08, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, +0x1A, 0x02, 0x27, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xF2, 0x18, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1B, 0xE2, 0x09, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1C, 0xD1, 0xFA, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1D, 0xC1, 0xEB, 0x80, 0x00, 0x00, 0x00, 0x00, 0x1E, 0xB1, 0xDC, 0x80, 0x00, 0x00, 0x00, 0x00, +0x1F, 0xA1, 0xCD, 0x80, 0x00, 0x00, 0x00, 0x00, 0x20, 0x76, 0x0F, 0x00, 0x00, 0x00, 0x00, 0x00, +0x21, 0x81, 0xAF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x22, 0x55, 0xF1, 0x00, 0x00, 0x00, 0x00, 0x00, +0x23, 0x6A, 0xCC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x24, 0x35, 0xD3, 0x00, 0x00, 0x00, 0x00, 0x00, +0x25, 0x4A, 0xAE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x15, 0xB5, 0x00, 0x00, 0x00, 0x00, 0x00, +0x27, 0x2A, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0x27, 0xFE, 0xD1, 0x80, 0x00, 0x00, 0x00, 0x00, +0x29, 0x0A, 0x72, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0xDE, 0xB3, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2A, 0xEA, 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2B, 0xBE, 0x95, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2C, 0xD3, 0x70, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2D, 0x9E, 0x77, 0x80, 0x00, 0x00, 0x00, 0x00, +0x2E, 0xB3, 0x52, 0x80, 0x00, 0x00, 0x00, 0x00, 0x2F, 0x7E, 0x59, 0x80, 0x00, 0x00, 0x00, 0x00, +0x30, 0x93, 0x34, 0x80, 0x00, 0x00, 0x00, 0x00, 0x31, 0x67, 0x76, 0x00, 0x00, 0x00, 0x00, 0x00, +0x32, 0x73, 0x16, 0x80, 0x00, 0x00, 0x00, 0x00, 0x33, 0x47, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, +0x34, 0x52, 0xF8, 0x80, 0x00, 0x00, 0x00, 0x00, 0x35, 0x27, 0x3A, 0x00, 0x00, 0x00, 0x00, 0x00, +0x36, 0x32, 0xDA, 0x80, 0x00, 0x00, 0x00, 0x00, 0x37, 0x07, 0x1C, 0x00, 0x00, 0x00, 0x00, 0x00, +0x38, 0x1B, 0xF7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0xE6, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, +0x39, 0xFB, 0xD9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3A, 0xC6, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, +0x3B, 0xDB, 0xBB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xAF, 0xFC, 0x80, 0x00, 0x00, 0x00, 0x00, +0x3D, 0xBB, 0x9D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3E, 0x8F, 0xDE, 0x80, 0x00, 0x00, 0x00, 0x00, +0x3F, 0x9B, 0x7F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x6F, 0xC0, 0x80, 0x00, 0x00, 0x00, 0x00, +0x41, 0x84, 0x9B, 0x80, 0x00, 0x00, 0x00, 0x00, 0x42, 0x4F, 0xA2, 0x80, 0x00, 0x00, 0x00, 0x00, +0x43, 0x64, 0x7D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x44, 0x2F, 0x84, 0x80, 0x00, 0x00, 0x00, 0x00, +0x45, 0x44, 0x51, 0x70, 0x00, 0x00, 0x00, 0x00, 0x45, 0xF3, 0xB7, 0x00, 0x00, 0x00, 0x00, 0x00, +0x47, 0x2D, 0x6D, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x47, 0xD3, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, +0x49, 0x0D, 0x4F, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x49, 0xB3, 0x7B, 0x00, 0x00, 0x00, 0x00, 0x00, +0x4A, 0xED, 0x31, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x4B, 0x9C, 0x97, 0x80, 0x00, 0x00, 0x00, 0x00, +0x4C, 0xD6, 0x4E, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4D, 0x7C, 0x79, 0x80, 0x00, 0x00, 0x00, 0x00, +0x4E, 0xB6, 0x30, 0x70, 0x00, 0x00, 0x00, 0x00, 0x4F, 0x5C, 0x5B, 0x80, 0x00, 0x00, 0x00, 0x00, +0x50, 0x96, 0x12, 0x70, 0x00, 0x00, 0x00, 0x00, 0x51, 0x3C, 0x3D, 0x80, 0x00, 0x00, 0x00, 0x00, +0x52, 0x75, 0xF4, 0x70, 0x00, 0x00, 0x00, 0x00, 0x53, 0x1C, 0x1F, 0x80, 0x00, 0x00, 0x00, 0x00, +0x54, 0x55, 0xD6, 0x70, 0x00, 0x00, 0x00, 0x00, 0x54, 0xFC, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, +0x56, 0x35, 0xB8, 0x70, 0x00, 0x00, 0x00, 0x00, 0x56, 0xE5, 0x1E, 0x00, 0x00, 0x00, 0x00, 0x00, +0x58, 0x1E, 0xD4, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x58, 0xC5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x59, 0xFE, 0xB6, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5A, 0xA4, 0xE2, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5B, 0xDE, 0x98, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5C, 0x84, 0xC4, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5D, 0xBE, 0x7A, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x5E, 0x64, 0xA6, 0x00, 0x00, 0x00, 0x00, 0x00, +0x5F, 0x9E, 0x5C, 0xF0, 0x00, 0x00, 0x00, 0x00, 0x60, 0x4D, 0xC2, 0x80, 0x00, 0x00, 0x00, 0x00, +0x61, 0x87, 0x79, 0x70, 0x00, 0x00, 0x00, 0x00, 0x62, 0x2D, 0xA4, 0x80, 0x00, 0x00, 0x00, 0x00, +0x63, 0x67, 0x5B, 0x70, 0x00, 0x00, 0x00, 0x00, 0x64, 0x0D, 0x86, 0x80, 0x00, 0x00, 0x00, 0x00, +0x65, 0x47, 0x3D, 0x70, 0x00, 0x00, 0x00, 0x00, 0x65, 0xED, 0x68, 0x80, 0x00, 0x00, 0x00, 0x00, +0x67, 0x27, 0x1F, 0x70, 0x00, 0x00, 0x00, 0x00, 0x67, 0xCD, 0x4A, 0x80, 0x00, 0x00, 0x00, 0x00, +0x69, 0x07, 0x01, 0x70, 0x00, 0x00, 0x00, 0x00, 0x69, 0xAD, 0x2C, 0x80, 0x00, 0x00, 0x00, 0x00, +0x6A, 0xE6, 0xE3, 0x70, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x03, 0x04, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, +0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x05, 0x06, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x02, -0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, -0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, -0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, -0x54, 0x00, 0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x00, 0x00, -0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x0A, 0x43, 0x53, 0x54, -0x36, 0x43, 0x44, 0x54, 0x2C, 0x4D, 0x33, 0x2E, 0x32, 0x2E, 0x30, 0x2C, 0x4D, 0x31, 0x31, 0x2E, -0x31, 0x2E, 0x30, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - +0x01, 0x02, 0x01, 0x02, 0x01, 0x02, 0x01, 0x07, 0xFF, 0xFF, 0xA4, 0xEC, 0x00, 0x00, 0xFF, 0xFF, +0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, 0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x0C, +0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x10, 0xFF, 0xFF, 0xB9, 0xB0, 0x01, 0x04, 0xFF, 0xFF, 0xAB, 0xA0, +0x00, 0x08, 0xFF, 0xFF, 0xB9, 0xB0, 0x00, 0x14, 0x4C, 0x4D, 0x54, 0x00, 0x43, 0x44, 0x54, 0x00, +0x43, 0x53, 0x54, 0x00, 0x43, 0x57, 0x54, 0x00, 0x43, 0x50, 0x54, 0x00, 0x45, 0x53, 0x54, 0x00, +0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, +0x0A, 0x45, 0x53, 0x54, 0x35, 0x0A, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, +0x00, 0x00, /* Canada/Eastern */ 0x50, 0x48, 0x50, 0x32, 0x00, 0x3F, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, @@ -54316,7 +54325,7 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { 0x9E, 0x9C, 0x9D, 0xA0, 0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, 0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, 0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, -0xAA, 0x00, 0xD3, 0xA0, 0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, +0xAA, 0x00, 0xD3, 0xA0, 0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xB4, 0xF7, 0x20, 0xAD, 0xC9, 0xD2, 0x20, 0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, 0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, 0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, @@ -54401,7 +54410,7 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xA6, 0x25, 0x60, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA7, 0x27, 0xC6, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0x2A, 0x2C, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0xEB, 0xF8, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x00, 0xD3, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xD5, 0x15, 0x20, -0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xE9, 0xF0, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAC, 0xC7, 0x6C, 0x20, +0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xE9, 0xF0, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAC, 0xB4, 0xF7, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xC9, 0xD2, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0xA7, 0x4E, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xA0, 0x79, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x87, 0x30, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x92, 0xD0, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x70, 0x4C, 0xA0, @@ -57134,7 +57143,7 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { 0x9E, 0x9C, 0x9D, 0xA0, 0x9F, 0x97, 0x1A, 0xA0, 0xA0, 0x85, 0xBA, 0x20, 0xA1, 0x76, 0xFC, 0xA0, 0xA2, 0x65, 0x9C, 0x20, 0xA3, 0x7B, 0xC8, 0xA0, 0xA4, 0x4E, 0xB8, 0xA0, 0xA5, 0x3F, 0xFB, 0x20, 0xA6, 0x25, 0x60, 0x20, 0xA7, 0x27, 0xC6, 0x20, 0xA8, 0x2A, 0x2C, 0x20, 0xA8, 0xEB, 0xF8, 0xA0, -0xAA, 0x00, 0xD3, 0xA0, 0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xC7, 0x6C, 0x20, +0xAA, 0x00, 0xD3, 0xA0, 0xAA, 0xD5, 0x15, 0x20, 0xAB, 0xE9, 0xF0, 0x20, 0xAC, 0xB4, 0xF7, 0x20, 0xAD, 0xC9, 0xD2, 0x20, 0xAE, 0xA7, 0x4E, 0x20, 0xAF, 0xA0, 0x79, 0xA0, 0xB0, 0x87, 0x30, 0x20, 0xB1, 0x92, 0xD0, 0xA0, 0xB2, 0x70, 0x4C, 0xA0, 0xB3, 0x72, 0xB2, 0xA0, 0xB4, 0x50, 0x2E, 0xA0, 0xB5, 0x49, 0x5A, 0x20, 0xB6, 0x30, 0x10, 0xA0, 0xB7, 0x32, 0x76, 0xA0, 0xB8, 0x0F, 0xF2, 0xA0, @@ -57219,7 +57228,7 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { 0xFF, 0xFF, 0xFF, 0xFF, 0xA6, 0x25, 0x60, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA7, 0x27, 0xC6, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0x2A, 0x2C, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xA8, 0xEB, 0xF8, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0x00, 0xD3, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xAA, 0xD5, 0x15, 0x20, -0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xE9, 0xF0, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAC, 0xC7, 0x6C, 0x20, +0xFF, 0xFF, 0xFF, 0xFF, 0xAB, 0xE9, 0xF0, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAC, 0xB4, 0xF7, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAD, 0xC9, 0xD2, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAE, 0xA7, 0x4E, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xAF, 0xA0, 0x79, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB0, 0x87, 0x30, 0x20, 0xFF, 0xFF, 0xFF, 0xFF, 0xB1, 0x92, 0xD0, 0xA0, 0xFF, 0xFF, 0xFF, 0xFF, 0xB2, 0x70, 0x4C, 0xA0, @@ -70681,4 +70690,4 @@ const unsigned char timelib_timezone_db_data_builtin[707528] = { }; #endif -const timelib_tzdb timezonedb_builtin = { "2026.4", 598, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; +const timelib_tzdb timezonedb_builtin = { "2026.5", 598, timezonedb_idx_builtin, timelib_timezone_db_data_builtin }; diff --git a/ext/opcache/jit/ir/ir_emit.c b/ext/opcache/jit/ir/ir_emit.c index f27a58d388b2..8c01f56c9e30 100644 --- a/ext/opcache/jit/ir/ir_emit.c +++ b/ext/opcache/jit/ir/ir_emit.c @@ -1528,7 +1528,9 @@ static ir_reg _get_free_reg2(ir_ctx *ctx, ir_type type, ir_reg_alloc_simple_data reg = IR_REGSET_FIRST(available); if (IR_REGSET_IN(x->preserved_regs, reg)) { - IR_REGSET_INCL(ctx->used_preserved_regs, reg); + ir_regset tmp = ctx->used_preserved_regs; + IR_REGSET_INCL(tmp, reg); + ctx->used_preserved_regs = tmp; } return reg; } diff --git a/ext/opcache/jit/ir/ir_fold.h b/ext/opcache/jit/ir/ir_fold.h index c5fd2f288947..abab986e0a30 100644 --- a/ext/opcache/jit/ir/ir_fold.h +++ b/ext/opcache/jit/ir/ir_fold.h @@ -1840,8 +1840,7 @@ IR_FOLD(REPLACE(LONG_CONST, _)) if (IR_IS_CONST_REF(op3) && IR_IS_CONST_REF(op2) && IR_IS_TYPE_INT(op2_insn->type) - && op2_insn->val.i64 >= 0 - && op2_insn->val.i64 < IR_VECTOR_LENGTH(op1_insn->type)) { + && op2_insn->val.u64 < (uint64_t)IR_VECTOR_LENGTH(op1_insn->type)) { IR_ASSERT(IR_IS_TYPE_VECTOR(op1_insn->type) && (IR_VECTOR_BASE_TYPE(op1_insn->type) == op3_insn->type || (IR_IS_TYPE_INT(IR_VECTOR_BASE_TYPE(op1_insn->type)) @@ -1942,8 +1941,7 @@ IR_FOLD(EXTRACT(LONG_CONST, _)) { if (IR_IS_CONST_REF(op2) && IR_IS_TYPE_INT(op2_insn->type) - && op2_insn->val.i64 >= 0 - && op2_insn->val.i64 < IR_VECTOR_LENGTH(op1_insn->type)) { + && op2_insn->val.u64 < (uint64_t)IR_VECTOR_LENGTH(op1_insn->type)) { uint32_t idx = op2_insn->val.u32; void *ptr; @@ -3212,7 +3210,7 @@ IR_FOLD(LT(ABS, C_FLOAT)) IR_FOLD(LT(ABS, C_DOUBLE)) { if (op2_insn->val.u64 == 0) { - /* abs() < 0 => false */ + /* abs() < 0 => false (abs(INT_MIN) is UB, so this optimization may change the result) */ IR_FOLD_COPY(IR_FALSE); } IR_FOLD_NEXT; @@ -3226,7 +3224,7 @@ IR_FOLD(GE(ABS, C_FLOAT)) IR_FOLD(GE(ABS, C_DOUBLE)) { if (op2_insn->val.u64 == 0) { - /* abs() >= 0 => true */ + /* abs() >= 0 => true (abs(INT_MIN) is UB, so this optimization may change the result) */ IR_FOLD_COPY(IR_TRUE); } IR_FOLD_NEXT; diff --git a/ext/opcache/jit/ir/ir_private.h b/ext/opcache/jit/ir/ir_private.h index 4179eb21ee57..b4409f97df7c 100644 --- a/ext/opcache/jit/ir/ir_private.h +++ b/ext/opcache/jit/ir/ir_private.h @@ -1273,6 +1273,8 @@ typedef struct _ir_use_pos ir_use_pos; #define IR_USE_MUST_BE_IN_REG (1<<0) #define IR_USE_SHOULD_BE_IN_REG (1<<1) #define IR_HINT_TWO_REGS (1<<2) +#define IR_HINT_NEEDS_HOLE (1<<3) /* create a fake hole in live ranges to avoid conflict with fxed reg */ + #define IR_DEF_REUSES_OP1_REG (1<<3) #define IR_DEF_CONFLICTS_WITH_INPUT_REGS (1<<4) #define IR_EXTEND_INPUTS_TO_NEXT (1<<5) /* used for SNAPSHOT followed by GUARD */ @@ -1280,17 +1282,20 @@ typedef struct _ir_use_pos ir_use_pos; #define IR_FUSED_USE (1<<6) #define IR_PHI_USE (1<<7) -#define IR_OP1_MUST_BE_IN_REG (1<<8) -#define IR_OP1_SHOULD_BE_IN_REG (1<<9) -#define IR_OP1_HINT_TWO_REGS (1<<10) -#define IR_OP2_MUST_BE_IN_REG (1<<11) -#define IR_OP2_SHOULD_BE_IN_REG (1<<12) -#define IR_OP2_HINT_TWO_REGS (1<<13) -#define IR_OP3_MUST_BE_IN_REG (1<<14) -#define IR_OP3_SHOULD_BE_IN_REG (1<<15) -#define IR_OP3_HINT_TWO_REGS (1<<16) - -#define IR_USE_FLAGS(def_flags, op_num) (((def_flags) >> (5 + (IR_MIN((op_num), 3) * 3))) & 7) +#define IR_OP1_MUST_BE_IN_REG (1<<16) +#define IR_OP1_SHOULD_BE_IN_REG (1<<17) +#define IR_OP1_HINT_TWO_REGS (1<<18) +#define IR_OP1_HINT_NEEDS_HOLE (1<<19) +#define IR_OP2_MUST_BE_IN_REG (1<<20) +#define IR_OP2_SHOULD_BE_IN_REG (1<<21) +#define IR_OP2_HINT_TWO_REGS (1<<22) +#define IR_OP2_HINT_NEEDS_HOLE (1<<23) +#define IR_OP3_MUST_BE_IN_REG (1<<24) +#define IR_OP3_SHOULD_BE_IN_REG (1<<25) +#define IR_OP3_HINT_TWO_REGS (1<<26) +#define IR_OP3_HINT_NEEDS_HOLE (1<<27) + +#define IR_USE_FLAGS(def_flags, op_num) (((def_flags) >> (12 + (IR_MIN((op_num), 3) * 4))) & 15) struct _ir_use_pos { uint16_t op_num; /* 0 - means result */ diff --git a/ext/opcache/jit/ir/ir_ra.c b/ext/opcache/jit/ir/ir_ra.c index 17f41319bb1f..fe052b2a097b 100644 --- a/ext/opcache/jit/ir/ir_ra.c +++ b/ext/opcache/jit/ir/ir_ra.c @@ -564,6 +564,10 @@ static void ir_add_fusion_ranges(ir_ctx *ctx, ir_ref ref, ir_ref input, ir_block /* intervals[opd].addRange(b.from, op.id) */ ival = ir_add_live_range(ctx, v, IR_START_LIVE_POS_FROM_REF(bb->start), use_pos); + } else if (reg != IR_REG_NONE && (IR_USE_FLAGS(def_flags, j) & IR_HINT_NEEDS_HOLE)) { + ir_fix_live_range(ctx, v, + IR_START_LIVE_POS_FROM_REF(bb->start), use_pos + IR_DEF_SUB_REF); + ival = ir_add_live_range(ctx, v, IR_START_LIVE_POS_FROM_REF(bb->start), use_pos); } else { ival = ctx->live_intervals[v]; } @@ -692,14 +696,15 @@ int ir_compute_live_ranges(ir_ctx *ctx) if (input > 0) { uint32_t v = ctx->vregs[input]; - /* live.add(phi.inputOf(b)) */ - IR_ASSERT(v); - ir_bitset_incl(live, v); - /* intervals[phi.inputOf(b)].addRange(b.from, b.to) */ - ival = ir_add_prev_live_range(ctx, v, - IR_START_LIVE_POS_FROM_REF(bb->start), - IR_END_LIVE_POS_FROM_REF(bb->end)); - ir_add_phi_use(ctx, ival, k, IR_DEF_LIVE_POS_FROM_REF(bb->end), use); + if (v) { + /* live.add(phi.inputOf(b)) */ + ir_bitset_incl(live, v); + /* intervals[phi.inputOf(b)].addRange(b.from, b.to) */ + ival = ir_add_prev_live_range(ctx, v, + IR_START_LIVE_POS_FROM_REF(bb->start), + IR_END_LIVE_POS_FROM_REF(bb->end)); + ir_add_phi_use(ctx, ival, k, IR_DEF_LIVE_POS_FROM_REF(bb->end), use); + } } } } @@ -766,8 +771,6 @@ int ir_compute_live_ranges(ir_ctx *ctx) insn = &ctx->ir_base[ref]; v = ctx->vregs[ref]; if (v) { - IR_ASSERT(ir_bitset_in(live, v)); - if (insn->op != IR_PHI) { ir_live_pos def_pos; ir_ref hint_ref = 0; @@ -878,6 +881,17 @@ int ir_compute_live_ranges(ir_ctx *ctx) } else #endif ir_add_fixed_live_range(ctx, reg, use_pos, use_pos + IR_USE_SUB_REF); + if ((use_flags & IR_HINT_NEEDS_HOLE) && ir_bitset_in(live, v)) { + /* This is a special case for x86 SHIFT instructions that uses %rcx for op2. + * SHIFT adds short fixed live range for %rcx and this makes a conflict with + * operand live interval, if the operand is still alive after the SHIFT. + * To avoid the conflict we create a "fake" hole in the operand live interval. + * See: ./tests/debug/ra_004.irt + */ + ir_fix_live_range(ctx, v, + IR_START_LIVE_POS_FROM_REF(bb->start), use_pos + IR_DEF_SUB_REF); + ir_add_live_range(ctx, v, IR_START_LIVE_POS_FROM_REF(bb->start), use_pos); + } } else if (def_flags & IR_DEF_REUSES_OP1_REG) { if (j == 1) { use_pos = IR_LOAD_LIVE_POS_FROM_REF(ref); @@ -1286,6 +1300,10 @@ static void ir_add_fusion_ranges(ir_ctx *ctx, ir_ref ref, ir_ref input, ir_block /* intervals[opd].addRange(b.from, op.id) */ ival = ir_add_live_range(ctx, v, IR_START_LIVE_POS_FROM_REF(bb->start), use_pos); + } else if (reg != IR_REG_NONE && (IR_USE_FLAGS(def_flags, j) & IR_HINT_NEEDS_HOLE)) { + ir_fix_live_range(ctx, v, + IR_START_LIVE_POS_FROM_REF(bb->start), use_pos + IR_DEF_SUB_REF); + ival = ir_add_live_range(ctx, v, IR_START_LIVE_POS_FROM_REF(bb->start), use_pos); } else { ival = ctx->live_intervals[v]; } @@ -1559,6 +1577,17 @@ int ir_compute_live_ranges(ir_ctx *ctx) } else #endif ir_add_fixed_live_range(ctx, reg, use_pos, use_pos + IR_USE_SUB_REF); + if ((use_flags & IR_HINT_NEEDS_HOLE) && IS_LIVE_IN_BLOCK(v, b)) { + /* This is a special case for x86 SHIFT instructions that uses %rcx for op2. + * SHIFT adds short fixed live range for %rcx and this makes a conflict with + * operand live interval, if the operand is still alive after the SHIFT. + * To avoid the conflict we create a "fake" hole in the operand live interval. + * See: ./tests/debug/ra_004.irt + */ + ir_fix_live_range(ctx, v, + IR_START_LIVE_POS_FROM_REF(bb->start), use_pos + IR_DEF_SUB_REF); + ir_add_live_range(ctx, v, IR_START_LIVE_POS_FROM_REF(bb->start), use_pos); + } } else if (def_flags & IR_DEF_REUSES_OP1_REG) { if (j == 1) { if (def_flags & IR_DEF_CONFLICTS_WITH_INPUT_REGS) { diff --git a/ext/opcache/jit/ir/ir_sccp.c b/ext/opcache/jit/ir/ir_sccp.c index 5d37f42734d3..4745c7000d72 100644 --- a/ext/opcache/jit/ir/ir_sccp.c +++ b/ext/opcache/jit/ir/ir_sccp.c @@ -2451,6 +2451,20 @@ static bool ir_try_promote_ext(ir_ctx *ctx, ir_ref ext_ref, ir_insn *insn) && ir_is_loop_invariant(ctx, insn->op1, ctx->ir_base[insn->op2].op1)) { return ir_try_promote_induction_var_ext(ctx, ext_ref, insn->op2, ref); } + } else if (insn->op == IR_COND + && IR_IS_CONST_REF(insn->op2) + && IR_IS_CONST_REF(insn->op3) + && ctx->use_lists[ref].count == 1) { + IR_ASSERT(!IR_IS_SYM_CONST(ctx->ir_base[insn->op2].op)); + IR_ASSERT(!IR_IS_SYM_CONST(ctx->ir_base[insn->op3].op)); + + ir_op op = ctx->ir_base[ext_ref].op; + ir_type type = ctx->ir_base[ext_ref].type; + + insn->type = type; + insn->op2 = ir_ext_const(ctx, &ctx->ir_base[insn->op2], op, type);; + insn->op3 = ir_ext_const(ctx, &ctx->ir_base[insn->op3], op, type);; + ir_iter_replace_insn(ctx, ext_ref, ref); } return 0; @@ -2837,6 +2851,8 @@ static bool ir_optimize_phi(ir_ctx *ctx, ir_ref merge_ref, ir_insn *merge, ir_re MAKE_NOP(end2); CLEAR_USES(end2_ref); MAKE_NOP(merge); CLEAR_USES(merge_ref); + ir_bitqueue_add(ctx->iter_worklist, ref); + ir_iter_add_uses(ctx, ref, ctx->iter_worklist); if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { ir_bitqueue_add(ctx->iter_worklist, next->op1); } @@ -2928,6 +2944,8 @@ static bool ir_optimize_phi(ir_ctx *ctx, ir_ref merge_ref, ir_insn *merge, ir_re MAKE_NOP(merge); CLEAR_USES(merge_ref); MAKE_NOP(&ctx->ir_base[neg_ref]); CLEAR_USES(neg_ref); + ir_bitqueue_add(ctx->iter_worklist, ref); + ir_iter_add_uses(ctx, ref, ctx->iter_worklist); if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { ir_bitqueue_add(ctx->iter_worklist, next->op1); } @@ -2997,6 +3015,7 @@ static bool ir_optimize_phi(ir_ctx *ctx, ir_ref merge_ref, ir_insn *merge, ir_re MAKE_NOP(merge); CLEAR_USES(merge_ref); ir_bitqueue_add(ctx->iter_worklist, ref); + ir_iter_add_uses(ctx, ref, ctx->iter_worklist); if (ctx->ir_base[next->op1].op == IR_BEGIN || ctx->ir_base[next->op1].op == IR_MERGE) { ir_bitqueue_add(ctx->iter_worklist, next->op1); } diff --git a/ext/opcache/jit/ir/ir_x86.dasc b/ext/opcache/jit/ir/ir_x86.dasc index faa14c0cfd15..5ce20343bd00 100644 --- a/ext/opcache/jit/ir/ir_x86.dasc +++ b/ext/opcache/jit/ir/ir_x86.dasc @@ -685,6 +685,11 @@ IR_ALWAYS_INLINE ir_mem IR_MEM(ir_reg base, int32_t offset, ir_reg index, int32_ || } |.endmacro +/* Zero a register. A 32-bit xor has a shorter encoding and also clears the upper 32 bits. */ +|.macro ASM_REG_ZERO, type, reg +| xor Rd(reg), Rd(reg) +|.endmacro + |.macro ASM_REG_REG_OP2, op, type, op1, op2 || switch (ir_type_size[type]) { || default: @@ -1851,9 +1856,10 @@ int ir_get_target_constraints(ir_ctx *ctx, ir_ref ref, ir_target_constraints *co break; case IR_SHIFT: if (rule & IR_FUSED) { - flags = IR_OP2_MUST_BE_IN_REG; + flags = IR_OP2_MUST_BE_IN_REG | IR_OP2_HINT_NEEDS_HOLE; } else { - flags = IR_DEF_REUSES_OP1_REG | IR_DEF_CONFLICTS_WITH_INPUT_REGS | IR_USE_MUST_BE_IN_REG | IR_OP1_SHOULD_BE_IN_REG | IR_OP2_SHOULD_BE_IN_REG; + flags = IR_DEF_REUSES_OP1_REG | IR_DEF_CONFLICTS_WITH_INPUT_REGS | IR_USE_MUST_BE_IN_REG | + IR_OP1_SHOULD_BE_IN_REG | IR_OP2_SHOULD_BE_IN_REG | IR_OP2_HINT_NEEDS_HOLE; } constraints->hints[1] = IR_REG_NONE; constraints->hints[2] = IR_REG_RCX; @@ -3268,6 +3274,15 @@ static bool ir_match_has_flags_deps(ir_ctx *ctx, ir_ref ref, ir_ref root) return pos != ref; } +static uint32_t ir_match_fuse_load_const_addr(ir_ctx *ctx, ir_ref ref, const ir_insn *addr_insn) +{ + if (ir_may_fuse_addr(ctx, addr_insn)) { + return IR_FUSED | IR_SIMPLE | IR_LOAD; + } + /* The address doesn't fit into the displacement. Load it into a temporary register. */ + return IR_FUSED | (IR_IS_TYPE_INT(ctx->ir_base[ref].type) ? IR_LOAD_INT : IR_LOAD_FP); +} + static void ir_match_fuse_load(ir_ctx *ctx, ir_ref ref, ir_ref root) { if (ir_in_same_block(ctx, ref) && @@ -3279,10 +3294,8 @@ static void ir_match_fuse_load(ir_ctx *ctx, ir_ref ref, ir_ref root) ir_insn *addr_insn = &ctx->ir_base[addr_ref]; if (IR_IS_CONST_REF(addr_ref)) { - if (ir_may_fuse_addr(ctx, addr_insn)) { - ctx->rules[ref] = IR_FUSED | IR_SIMPLE | IR_LOAD; - return; - } + ctx->rules[ref] = ir_match_fuse_load_const_addr(ctx, ref, addr_insn); + return; } else if (addr_insn->op == IR_TLS_ADDR) { // TODO: try to fuse static TLS addr ??? return; @@ -3307,10 +3320,8 @@ static bool ir_match_try_fuse_load(ir_ctx *ctx, ir_ref ref, ir_ref root) ir_insn *addr_insn = &ctx->ir_base[addr_ref]; if (IR_IS_CONST_REF(addr_ref)) { - if (ir_may_fuse_addr(ctx, addr_insn)) { - ctx->rules[ref] = IR_FUSED | IR_SIMPLE | IR_LOAD; - return 1; - } + ctx->rules[ref] = ir_match_fuse_load_const_addr(ctx, ref, addr_insn); + return 1; } else if (addr_insn->op == IR_TLS_ADDR) { // TODO: try to fuse static TLS addr ??? return 0; @@ -5348,7 +5359,11 @@ static void ir_match_insn2(ir_ctx *ctx, ir_ref ref, uint32_t rule) if (rule == IR_LEA_IB) { if (!ir_match_try_revert_lea_to_add(ctx, ref) && !(ctx->flags & IR_OPT_CODEGEN)) { /* revert to ADD to avoid extra register spill load with -O0 */ - ctx->rules[ref] = IR_BINOP_INT | IR_MAY_SWAP; + ir_insn *insn = &ctx->ir_base[ref]; + + if (ctx->ir_base[insn->op1].op != IR_ALLOCA && ctx->ir_base[insn->op2].op != IR_ALLOCA) { + ctx->rules[ref] = IR_BINOP_INT | IR_MAY_SWAP; + } } } } @@ -5458,7 +5473,7 @@ static void ir_emit_load_imm_int(ir_ctx *ctx, ir_type type, ir_reg reg, int64_t IR_ASSERT(IR_IS_TYPE_INT(type)); if (val == 0) { - | ASM_REG_REG_OP xor, type, reg, reg + | ASM_REG_ZERO type, reg } else { ir_emit_mov_imm_int(ctx, type, reg, val); } @@ -8234,7 +8249,7 @@ static void ir_emit_mul_div_mod(ir_ctx *ctx, ir_ref def, ir_insn *insn) if (ir_type_size[type] == 1) { | movzx ax, al } else { - | ASM_REG_REG_OP xor, type, IR_REG_RDX, IR_REG_RDX + | ASM_REG_ZERO type, IR_REG_RDX } if (op2_reg != IR_REG_NONE) { | ASM_REG_OP div, type, op2_reg @@ -8801,7 +8816,7 @@ static void ir_emit_cmp_int(ir_ctx *ctx, ir_ref def, ir_insn *insn) if (IR_IS_CONST_REF(op2) && !IR_IS_SYM_CONST(ctx->ir_base[op2].op) && ctx->ir_base[op2].val.u64 == 0) { if (op == IR_ULT) { /* always false */ - | xor Ra(def_reg), Ra(def_reg) + | xor Rd(def_reg), Rd(def_reg) if (IR_REG_SPILLED(ctx->regs[def][0])) { ir_emit_store(ctx, insn->type, def, def_reg); } @@ -14572,7 +14587,7 @@ static void ir_emit_cmp_i64(ir_ctx *ctx, ir_ref def, ir_insn *insn) if (IR_IS_CONST_REF(op2) && !IR_IS_SYM_CONST(ctx->ir_base[op2].op) && ctx->ir_base[op2].val.u64 == 0) { if (op == IR_ULT) { /* always false */ - | xor Ra(def_reg), Ra(def_reg) + | xor Rd(def_reg), Rd(def_reg) if (IR_REG_SPILLED(ctx->regs[def][0])) { ir_emit_store(ctx, insn->type, def, def_reg); } @@ -22205,7 +22220,7 @@ static void ir_emit_vector_binop_expand(ir_ctx *ctx, ir_ref def, ir_insn *insn) } else if (element_size == 1) { | movzx ax, al } else { - | ASM_REG_REG_OP xor, element_type, IR_REG_RDX, IR_REG_RDX + | ASM_REG_ZERO element_type, IR_REG_RDX } if (IR_IS_TYPE_SIGNED(element_type)) { | ASM_REG_OP idiv, element_type, tmp2_reg @@ -22652,7 +22667,7 @@ static void ir_emit_vector_binop_expand(ir_ctx *ctx, ir_ref def, ir_insn *insn) } else if (element_size == 1) { | movzx ax, al } else { - | ASM_REG_REG_OP xor, element_type, IR_REG_RDX, IR_REG_RDX + | ASM_REG_ZERO element_type, IR_REG_RDX } if (IR_IS_TYPE_SIGNED(element_type)) { | ASM_MEM_OP idiv, element_type, mem @@ -25988,8 +26003,10 @@ void ir_fix_stack_frame(ir_ctx *ctx) #ifdef IR_TARGET_X86 if (ctx->flags2 & IR_HAS_MEMCPY) { - IR_REGSET_INCL(ctx->used_preserved_regs, IR_REG_RSI); - IR_REGSET_INCL(ctx->used_preserved_regs, IR_REG_RDI); + ir_regset tmp = ctx->used_preserved_regs; + IR_REGSET_INCL(tmp, IR_REG_RSI); + IR_REGSET_INCL(tmp, IR_REG_RDI); + ctx->used_preserved_regs = tmp; } #endif diff --git a/ext/opcache/tests/array_map_foreach_optimization_006.phpt b/ext/opcache/tests/array_map_foreach_optimization_006.phpt index 889fee27b8a2..4c557ce6802c 100644 --- a/ext/opcache/tests/array_map_foreach_optimization_006.phpt +++ b/ext/opcache/tests/array_map_foreach_optimization_006.phpt @@ -32,26 +32,30 @@ $_main: 0003 T3 = DO_ICALL 0004 ASSIGN CV0($array) T3 0005 ASSIGN CV1($plus1) string("plus1") -0006 TYPE_ASSERT 131079 string("array_map") CV0($array) -0007 T3 = INIT_ARRAY 0 (packed) NEXT -0008 V4 = FE_RESET_R CV0($array) 0015 -0009 T6 = FE_FETCH_R V4 T5 0015 -0010 INIT_DYNAMIC_CALL 1 CV1($plus1) -0011 SEND_VAL_EX T5 1 -0012 T5 = DO_FCALL -0013 T3 = ADD_ARRAY_ELEMENT T5 T6 -0014 JMP 0009 -0015 FE_FREE V4 -0016 ASSIGN CV2($foo) T3 -0017 INIT_FCALL 1 %d string("var_dump") -0018 SEND_VAR CV2($foo) 1 -0019 DO_ICALL -0020 RETURN int(1) +0006 T4 = QM_ASSIGN CV1($plus1) +0007 TYPE_ASSERT 131079 string("array_map") CV0($array) +0008 T3 = INIT_ARRAY 0 (packed) NEXT +0009 V5 = FE_RESET_R CV0($array) 0017 +0010 T7 = FE_FETCH_R V5 T6 0017 +0011 T8 = COPY_TMP T4 +0012 INIT_DYNAMIC_CALL 1 T8 +0013 SEND_VAL_EX T6 1 +0014 T6 = DO_FCALL +0015 T3 = ADD_ARRAY_ELEMENT T6 T7 +0016 JMP 0010 +0017 FE_FREE V5 +0018 FREE T4 +0019 ASSIGN CV2($foo) T3 +0020 INIT_FCALL 1 %d string("var_dump") +0021 SEND_VAR CV2($foo) 1 +0022 DO_ICALL +0023 RETURN int(1) LIVE RANGES: - 3: 0008 - 0016 (tmp/var) - 4: 0009 - 0015 (loop) - 5: 0010 - 0011 (tmp/var) - 6: 0010 - 0013 (tmp/var) + 4: 0007 - 0018 (tmp/var) + 3: 0009 - 0019 (tmp/var) + 5: 0010 - 0017 (loop) + 6: 0011 - 0013 (tmp/var) + 7: 0011 - 0015 (tmp/var) plus1: ; (lines=3, args=1, vars=1, tmps=%d) diff --git a/ext/opcache/tests/array_map_foreach_optimization_010.phpt b/ext/opcache/tests/array_map_foreach_optimization_010.phpt new file mode 100644 index 000000000000..758c3504a88f --- /dev/null +++ b/ext/opcache/tests/array_map_foreach_optimization_010.phpt @@ -0,0 +1,93 @@ +--TEST-- +array_map(): foreach optimization - dynamic-call drift bug +--CREDITS-- +Ryan @ Calif.io +--EXTENSIONS-- +opcache +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +--FILE-- +getMessage(), "\n"; +} + +echo "empty dynamic-call control\n"; +try { + var_dump($array_map($missing(...), [])); +} catch (Throwable $e) { + echo get_class($e), ': ', $e->getMessage(), "\n"; +} + +$obj = new Trusted; +echo "direct array_map static call\n"; +var_dump(array_map($obj::f(...), cand_86013_input_changes_target())); + +?> +--EXPECT-- +direct array_map +array(1) { + [0]=> + string(15) "trusted:payload" +} +dynamic-call control +array(1) { + [0]=> + string(15) "trusted:payload" +} +empty direct +array(0) { +} +empty dynamic-call control +Error: Call to undefined function cand_86013_missing() +direct array_map static call +array(1) { + [0]=> + string(15) "trusted:payload" +} diff --git a/ext/opcache/tests/array_map_foreach_optimization_011.phpt b/ext/opcache/tests/array_map_foreach_optimization_011.phpt new file mode 100644 index 000000000000..764eb22d9d60 --- /dev/null +++ b/ext/opcache/tests/array_map_foreach_optimization_011.phpt @@ -0,0 +1,68 @@ +--TEST-- +array_map(): foreach optimization - pfa pre-bound arg reexecution bug +--CREDITS-- +Ryan @ Calif.io +--EXTENSIONS-- +opcache +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +--FILE-- + +--EXPECT-- +direct array_map +BOUND:1 +INPUT +array(3) { + [0]=> + string(1) "b" + [1]=> + string(1) "b" + [2]=> + string(1) "b" +} +int(1) +dynamic-call control +BOUND:1 +INPUT +array(3) { + [0]=> + string(1) "b" + [1]=> + string(1) "b" + [2]=> + string(1) "b" +} +int(1) diff --git a/ext/opcache/tests/array_map_foreach_optimization_012.phpt b/ext/opcache/tests/array_map_foreach_optimization_012.phpt new file mode 100644 index 000000000000..04b16d2ab6dd --- /dev/null +++ b/ext/opcache/tests/array_map_foreach_optimization_012.phpt @@ -0,0 +1,208 @@ +--TEST-- +array_map(): foreach optimization - function argument is evaluated once +--EXTENSIONS-- +opcache +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.opt_debug_level=0x20000 +--FILE-- + +--EXPECTF-- +$_main: + ; (lines=%d, args=0, vars=%d, tmps=%d) + ; (after optimizer) + ; %s +0000 INIT_FCALL 2 %d string("range") +0001 SEND_VAL int(1) 1 +0002 SEND_VAL int(2) 2 +0003 T2 = DO_ICALL +0004 ASSIGN CV0($array) T2 +0005 INIT_FCALL 1 %d string("var_dump") +0006 INIT_FCALL 0 %d string("get_function") +0007 T3 = DO_UCALL +0008 TYPE_ASSERT 131079 string("array_map") CV0($array) +0009 T2 = INIT_ARRAY 0 (packed) NEXT +0010 V4 = FE_RESET_R CV0($array) 0018 +0011 T8 = FE_FETCH_R V4 T7 0018 +0012 T9 = COPY_TMP T3 +0013 INIT_DYNAMIC_CALL 1 T9 +0014 SEND_VAL_EX T7 1 +0015 T7 = DO_FCALL +0016 T2 = ADD_ARRAY_ELEMENT T7 T8 +0017 JMP 0011 +0018 FE_FREE V4 +0019 FREE T3 +0020 SEND_VAL T2 1 +0021 DO_ICALL +0022 INIT_FCALL 1 %d string("var_dump") +0023 T3 = NEW 0 string("C") +0024 DO_FCALL +0025 TYPE_ASSERT 131079 string("array_map") CV0($array) +0026 T2 = INIT_ARRAY 0 (packed) NEXT +0027 V4 = FE_RESET_R CV0($array) 0036 +0028 T7 = FE_FETCH_R V4 T6 0036 +0029 T9 = COPY_TMP T3 +0030 V8 = FETCH_CLASS (exception) T9 +0031 INIT_STATIC_METHOD_CALL 1 V8 string("f") +0032 SEND_VAL_EX T6 1 +0033 T6 = DO_FCALL +0034 T2 = ADD_ARRAY_ELEMENT T6 T7 +0035 JMP 0028 +0036 FE_FREE V4 +0037 FREE T3 +0038 SEND_VAL T2 1 +0039 DO_ICALL +0040 T2 = DECLARE_LAMBDA_FUNCTION 4294967295 0 +0041 BIND_LEXICAL (ref) T2 CV1($f) +0042 ASSIGN CV1($f) T2 +0043 INIT_FCALL 1 %d string("var_dump") +0044 T3 = QM_ASSIGN CV1($f) +0045 TYPE_ASSERT 131079 string("array_map") CV0($array) +0046 T2 = INIT_ARRAY 0 (packed) NEXT +0047 V4 = FE_RESET_R CV0($array) 0055 +0048 T6 = FE_FETCH_R V4 T5 0055 +0049 T7 = COPY_TMP T3 +0050 INIT_DYNAMIC_CALL 1 T7 +0051 SEND_VAL_EX T5 1 +0052 T5 = DO_FCALL +0053 T2 = ADD_ARRAY_ELEMENT T5 T6 +0054 JMP 0048 +0055 FE_FREE V4 +0056 FREE T3 +0057 SEND_VAL T2 1 +0058 DO_ICALL +0059 RETURN int(1) +LIVE RANGES: + 3: 0008 - 0019 (tmp/var) + 2: 0010 - 0020 (tmp/var) + 4: 0011 - 0018 (loop) + 7: 0012 - 0014 (tmp/var) + 8: 0012 - 0016 (tmp/var) + 3: 0024 - 0025 (new) + 3: 0025 - 0037 (tmp/var) + 2: 0027 - 0038 (tmp/var) + 4: 0028 - 0036 (loop) + 6: 0029 - 0032 (tmp/var) + 7: 0029 - 0034 (tmp/var) + 2: 0041 - 0042 (tmp/var) + 3: 0045 - 0056 (tmp/var) + 2: 0047 - 0057 (tmp/var) + 4: 0048 - 0055 (loop) + 5: 0049 - 0051 (tmp/var) + 6: 0049 - 0053 (tmp/var) + +{closure:%s:%d}: + ; (lines=5, args=1, vars=2, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 CV0($value) = RECV 1 +0001 BIND_STATIC (ref) CV1($f) +0002 ASSIGN CV1($f) string("dechex") +0003 T2 = ADD CV0($value) int(1) +0004 RETURN T2 + +plusn: + ; (lines=4, args=2, vars=2, tmps=%d) + ; (after optimizer) + ; %s +0000 CV0($x) = RECV 1 +0001 CV1($n) = RECV 2 +0002 T2 = ADD CV0($x) CV1($n) +0003 RETURN T2 + +get_function: + ; (lines=7, args=0, vars=0, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 INIT_FCALL 1 %d string("var_dump") +0001 SEND_VAL string("get_function") 1 +0002 DO_ICALL +0003 V1 = DECLARE_ANON_CLASS string("class@anonymous%s") +0004 T0 = NEW 0 V1 +0005 DO_FCALL +0006 RETURN T0 +LIVE RANGES: + 0: 0005 - 0006 (new) + +class@anonymous::__invoke: + ; (lines=3, args=1, vars=1, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 CV0($value) = RECV 1 +0001 T1 = ADD CV0($value) int(1) +0002 RETURN T1 + +C::__construct: + ; (lines=4, args=0, vars=0, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 INIT_FCALL 1 %d string("var_dump") +0001 SEND_VAL string("C::__construct") 1 +0002 DO_ICALL +0003 RETURN null + +C::f: + ; (lines=3, args=1, vars=1, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 CV0($value) = RECV 1 +0001 T1 = ADD CV0($value) int(1) +0002 RETURN T1 +string(12) "get_function" +array(2) { + [0]=> + int(2) + [1]=> + int(3) +} +string(14) "C::__construct" +array(2) { + [0]=> + int(2) + [1]=> + int(3) +} +array(2) { + [0]=> + int(2) + [1]=> + int(3) +} diff --git a/ext/opcache/tests/array_map_foreach_optimization_013.phpt b/ext/opcache/tests/array_map_foreach_optimization_013.phpt new file mode 100644 index 000000000000..e831fc3e2b31 --- /dev/null +++ b/ext/opcache/tests/array_map_foreach_optimization_013.phpt @@ -0,0 +1,174 @@ +--TEST-- +array_map(): foreach optimization - PFAs with non-literal args are not optimizable +--EXTENSIONS-- +opcache +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.opt_debug_level=0x20000 +--ENV-- +A=1 +--FILE-- +value), range(1, 2))); + var_dump(array_map(timesn(?, $obj->value), range(1, 2))); + var_dump($obj); +} + +f((object) ['value' => 1]); + +?> +--EXPECTF-- +$_main: + ; (lines=%d, args=0, vars=%d, tmps=%d) + ; (after optimizer) + ; %s +0000 INIT_FCALL 1 %d string("getenv") +0001 SEND_VAL string("A") 1 +0002 T0 = DO_ICALL +0003 JMPZ T0 0006 +0004 DECLARE_FUNCTION string("plusn") 0 +0005 DECLARE_FUNCTION string("timesn") 1 +0006 INIT_FCALL 1 %d string("f") +0007 T0 = CAST (object) array(...) +0008 SEND_VAL T0 1 +0009 DO_UCALL +0010 RETURN int(1) + +plusn: + ; (lines=4, args=2, vars=2, tmps=%d) + ; (after optimizer) + ; %s +0000 CV0($x) = RECV 1 +0001 CV1($n) = RECV 2 +0002 T2 = ADD CV0($x) CV1($n) +0003 RETURN T2 + +timesn: + ; (lines=5, args=2, vars=3, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 CV0($x) = RECV 1 +0001 CV1($n) = RECV 2 +0002 CV2($result) = MUL CV0($x) CV1($n) +0003 ASSIGN CV1($n) int(0) +0004 RETURN CV2($result) + +f: + ; (lines=39, args=1, vars=1, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 CV0($obj) = RECV 1 +0001 INIT_FCALL 1 %d string("var_dump") +0002 INIT_FCALL 2 %d string("array_map") +0003 INIT_FCALL_BY_NAME 2 string("plusn") +0004 SEND_PLACEHOLDER 1 +0005 CHECK_FUNC_ARG 2 +0006 V1 = FETCH_OBJ_FUNC_ARG (ref) CV0($obj) string("value") +0007 SEND_FUNC_ARG V1 2 +0008 T1 = CALLABLE_CONVERT_PARTIAL %d string("{closure:pfa:f():15}") +0009 SEND_VAL T1 1 +0010 INIT_FCALL 2 %d string("range") +0011 SEND_VAL int(1) 1 +0012 SEND_VAL int(2) 2 +0013 T1 = DO_ICALL +0014 SEND_VAL T1 2 +0015 T1 = DO_ICALL +0016 SEND_VAL T1 1 +0017 DO_ICALL +0018 INIT_FCALL 1 %d string("var_dump") +0019 INIT_FCALL 2 %d string("array_map") +0020 INIT_FCALL_BY_NAME 2 string("timesn") +0021 SEND_PLACEHOLDER 1 +0022 CHECK_FUNC_ARG 2 +0023 V1 = FETCH_OBJ_FUNC_ARG (ref) CV0($obj) string("value") +0024 SEND_FUNC_ARG V1 2 +0025 T1 = CALLABLE_CONVERT_PARTIAL %d string("{closure:pfa:f():16}") +0026 SEND_VAL T1 1 +0027 INIT_FCALL 2 %d string("range") +0028 SEND_VAL int(1) 1 +0029 SEND_VAL int(2) 2 +0030 T1 = DO_ICALL +0031 SEND_VAL T1 2 +0032 T1 = DO_ICALL +0033 SEND_VAL T1 1 +0034 DO_ICALL +0035 INIT_FCALL 1 %d string("var_dump") +0036 SEND_VAR CV0($obj) 1 +0037 DO_ICALL +0038 RETURN null + +$_main: + ; (lines=4, args=0, vars=1, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 T1 = DECLARE_LAMBDA_FUNCTION 4294967295 0 +0001 BIND_LEXICAL T1 CV0($n) +0002 FREE T1 +0003 RETURN int(1) +LIVE RANGES: + 1: 0001 - 0002 (tmp/var) + +{closure:pfa:f():15}: + ; (lines=7, args=1, vars=2, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 CV0($x) = RECV 1 +0001 BIND_STATIC CV1($n) +0002 INIT_FCALL 2 %d string("plusn") +0003 SEND_VAR CV0($x) 1 +0004 SEND_VAR CV1($n) 2 +0005 T2 = DO_UCALL +0006 RETURN T2 +array(2) { + [0]=> + int(2) + [1]=> + int(3) +} + +$_main: + ; (lines=4, args=0, vars=1, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 T1 = DECLARE_LAMBDA_FUNCTION 4294967295 0 +0001 BIND_LEXICAL (ref) T1 CV0($n) +0002 FREE T1 +0003 RETURN int(1) +LIVE RANGES: + 1: 0001 - 0002 (tmp/var) + +{closure:pfa:f():16}: + ; (lines=7, args=1, vars=2, tmps=%d) + ; (after optimizer) + ; %s.php:%s +0000 CV0($x) = RECV 1 +0001 BIND_STATIC (ref) CV1($n) +0002 INIT_FCALL 2 %d string("timesn") +0003 SEND_VAR CV0($x) 1 +0004 SEND_REF CV1($n) 2 +0005 T2 = DO_UCALL +0006 RETURN T2 +array(2) { + [0]=> + int(1) + [1]=> + int(0) +} +object(stdClass)#%d (1) { + ["value"]=> + int(0) +} diff --git a/ext/opcache/tests/array_map_foreach_optimization_014.phpt b/ext/opcache/tests/array_map_foreach_optimization_014.phpt new file mode 100644 index 000000000000..c6c4afc216ae --- /dev/null +++ b/ext/opcache/tests/array_map_foreach_optimization_014.phpt @@ -0,0 +1,70 @@ +--TEST-- +array_map(): foreach optimization - PFAs with literal args are optimizable +--EXTENSIONS-- +opcache +--INI-- +opcache.enable=1 +opcache.enable_cli=1 +opcache.opt_debug_level=0x20000 +--ENV-- +A=1 +--FILE-- + +--EXPECTF-- +$_main: + ; (lines=%d, args=0, vars=%d, tmps=%d) + ; (after optimizer) + ; %s +0000 INIT_FCALL 1 %d string("getenv") +0001 SEND_VAL string("A") 1 +0002 T0 = DO_ICALL +0003 JMPZ T0 0005 +0004 DECLARE_FUNCTION string("plusn") 0 +0005 INIT_FCALL 1 %d string("var_dump") +0006 INIT_FCALL 2 %d string("range") +0007 SEND_VAL int(1) 1 +0008 SEND_VAL int(2) 2 +0009 T3 = DO_ICALL +0010 TYPE_ASSERT 131079 string("array_map") T3 +0011 T0 = INIT_ARRAY 0 (packed) NEXT +0012 V1 = FE_RESET_R T3 0020 +0013 T3 = FE_FETCH_R V1 T2 0020 +0014 INIT_FCALL_BY_NAME 2 string("plusn") +0015 SEND_VAL_EX T2 1 +0016 SEND_VAL_EX int(2) 2 +0017 T2 = DO_FCALL_BY_NAME +0018 T0 = ADD_ARRAY_ELEMENT T2 T3 +0019 JMP 0013 +0020 FE_FREE V1 +0021 SEND_VAL T0 1 +0022 DO_ICALL +0023 RETURN int(1) +LIVE RANGES: + 3: 0010 - 0012 (tmp/var) + 0: 0012 - 0021 (tmp/var) + 1: 0013 - 0020 (loop) + +plusn: + ; (lines=4, args=2, vars=2, tmps=%d) + ; (after optimizer) + ; %s +0000 CV0($x) = RECV 1 +0001 CV1($n) = RECV 2 +0002 T2 = ADD CV0($x) CV1($n) +0003 RETURN T2 +array(2) { + [0]=> + int(3) + [1]=> + int(4) +} diff --git a/ext/pdo/pdo_stmt.c b/ext/pdo/pdo_stmt.c index 4b56dbdbbd59..758226957ce6 100644 --- a/ext/pdo/pdo_stmt.c +++ b/ext/pdo/pdo_stmt.c @@ -87,6 +87,15 @@ static inline bool rewrite_name_to_position(pdo_stmt_t *stmt, struct pdo_bound_p } /* }}} */ +static bool pdo_stmt_disallow_reentrant_param_event(pdo_stmt_t *stmt) +{ + if (UNEXPECTED(stmt->in_param_event)) { + zend_throw_error(NULL, "Cannot modify a PDOStatement while parameter hooks are running"); + return false; + } + return true; +} + /* trigger callback hook for parameters */ static bool dispatch_param_event(pdo_stmt_t *stmt, enum pdo_param_event event_type) /* {{{ */ { @@ -102,6 +111,7 @@ static bool dispatch_param_event(pdo_stmt_t *stmt, enum pdo_param_event event_ty return true; } + stmt->in_param_event = 1; ht = stmt->bound_params; iterate: @@ -119,6 +129,7 @@ static bool dispatch_param_event(pdo_stmt_t *stmt, enum pdo_param_event event_ty goto iterate; } + stmt->in_param_event = 0; return ret; } /* }}} */ @@ -369,6 +380,29 @@ static bool really_register_bound_param(struct pdo_bound_param_data *param, pdo_ } /* }}} */ +static bool pdo_stmt_do_next_rowset(pdo_stmt_t *stmt); + +static void pdo_stmt_invalidate_result(pdo_stmt_t *stmt) +{ + if (stmt->methods->cursor_closer) { + stmt->methods->cursor_closer(stmt); + } else { + do { + while (stmt->methods->fetcher(stmt, PDO_FETCH_ORI_NEXT, 0)) + ; + if (!stmt->methods->next_rowset) { + break; + } + + if (!pdo_stmt_do_next_rowset(stmt)) { + break; + } + } while (1); + } + + stmt->executed = 0; +} + /* {{{ Execute a prepared statement, optionally binding parameters */ PHP_METHOD(PDOStatement, execute) { @@ -381,6 +415,13 @@ PHP_METHOD(PDOStatement, execute) ZEND_PARSE_PARAMETERS_END(); PHP_STMT_GET_OBJ; + if (!pdo_stmt_disallow_reentrant_param_event(stmt)) { + RETURN_THROWS(); + } + + if (stmt->executed) { + pdo_stmt_invalidate_result(stmt); + } PDO_STMT_CLEAR_ERR(); if (input_params) { @@ -1304,6 +1345,9 @@ static void register_bound_param(INTERNAL_FUNCTION_PARAMETERS, int is_param) /* ZEND_PARSE_PARAMETERS_END(); PHP_STMT_GET_OBJ; + if (!pdo_stmt_disallow_reentrant_param_event(stmt)) { + RETURN_THROWS(); + } param.param_type = (int) param_type; @@ -1356,6 +1400,9 @@ PHP_METHOD(PDOStatement, bindValue) ZEND_PARSE_PARAMETERS_END(); PHP_STMT_GET_OBJ; + if (!pdo_stmt_disallow_reentrant_param_event(stmt)) { + RETURN_THROWS(); + } param.param_type = (int) param_type; if (param.name) { @@ -1817,6 +1864,9 @@ PHP_METHOD(PDOStatement, closeCursor) ZEND_PARSE_PARAMETERS_NONE(); PHP_STMT_GET_OBJ; + if (!pdo_stmt_disallow_reentrant_param_event(stmt)) { + RETURN_THROWS(); + } if (!stmt->methods->cursor_closer) { /* emulate it by fetching and discarding rows */ do { diff --git a/ext/pdo/php_pdo_driver.h b/ext/pdo/php_pdo_driver.h index 62e1f177ebb5..8fb7918e6973 100644 --- a/ext/pdo/php_pdo_driver.h +++ b/ext/pdo/php_pdo_driver.h @@ -573,7 +573,8 @@ struct _pdo_stmt_t { * bindParam() for its prepared statements, if false, PDO should * emulate prepare and bind on its behalf */ uint16_t supports_placeholders:2; - uint16_t reserved: 12; + uint16_t in_param_event:1; + uint16_t reserved: 11; /* keep track of bound input parameters. Some drivers support * input/output parameters, but you can't rely on that working */ diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_failed_execute.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_failed_execute.phpt new file mode 100644 index 000000000000..b711855e2afe --- /dev/null +++ b/ext/pdo_sqlite/tests/pdo_sqlite_failed_execute.phpt @@ -0,0 +1,85 @@ +--TEST-- +PDO SQLite: failed execute invalidates the previous result +--EXTENSIONS-- +pdo_sqlite +--FILE-- +prepare('SELECT ? AS value UNION ALL SELECT 2'); +$stmt->execute(['first']); +var_dump($stmt->fetchColumn()); + +try { + $stmt->execute([new stdClass()]); +} catch (Error $e) { + echo $e::class, ': ', $e->getMessage(), PHP_EOL; +} +var_dump($stmt->fetchColumn()); + +$stmt->execute(['third']); +var_dump($stmt->fetchAll(PDO::FETCH_COLUMN)); + +$db->sqliteCreateFunction('fail_execute', function (bool $fail): string { + if ($fail) { + throw new RuntimeException('execution failed'); + } + return 'first'; +}); +$stmt = $db->prepare('SELECT fail_execute(?) AS value UNION ALL SELECT 2'); +$stmt->execute([false]); +var_dump($stmt->fetchColumn()); + +try { + $stmt->execute([true]); +} catch (RuntimeException $e) { + echo $e::class, ': ', $e->getMessage(), PHP_EOL; +} +var_dump($stmt->fetchColumn()); + +$stmt->execute([false]); +var_dump($stmt->fetchAll(PDO::FETCH_COLUMN)); + +$db->exec('CREATE TABLE failed_execute (value INTEGER UNIQUE)'); +$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); +$stmt = $db->prepare('INSERT INTO failed_execute VALUES (?)'); +$stmt->execute([1]); +$warnings = 0; +set_error_handler(function () use (&$warnings): bool { + $warnings++; + return true; +}); +try { + var_dump($stmt->execute([1])); +} finally { + restore_error_handler(); +} +echo "driver warnings: $warnings\n"; +var_dump($stmt->fetchColumn()); + +?> +--EXPECTF-- +string(5) "first" +Error: Object of class stdClass could not be converted to string +bool(false) +array(2) { + [0]=> + string(5) "third" + [1]=> + int(2) +} + +Deprecated: Method PDO::sqliteCreateFunction() is deprecated since 8.5, use Pdo\Sqlite::createFunction() instead in %s on line %d +string(5) "first" +RuntimeException: execution failed +bool(false) +array(2) { + [0]=> + string(5) "first" + [1]=> + int(2) +} +bool(false) +driver warnings: 1 +bool(false) diff --git a/ext/pdo_sqlite/tests/pdo_sqlite_reentrant_bind.phpt b/ext/pdo_sqlite/tests/pdo_sqlite_reentrant_bind.phpt new file mode 100644 index 000000000000..3d2be7c7ed60 --- /dev/null +++ b/ext/pdo_sqlite/tests/pdo_sqlite_reentrant_bind.phpt @@ -0,0 +1,102 @@ +--TEST-- +Rebinding or re-executing from a parameter __toString() must not mutate bound_params mid-FOREACH +--EXTENSIONS-- +pdo_sqlite +--FILE-- +stmt->bindValue(1, 'x'); + echo "bindValue: no error\n"; + } catch (Error $e) { + echo $e::class, ": ", $e->getMessage(), "\n"; + } + return 'rebind'; + } +} + +class Reexec { + public function __construct(private PDOStatement $stmt) {} + public function __toString() { + try { + $this->stmt->execute(['x', 'y']); + echo "execute: no error\n"; + } catch (Error $e) { + echo $e::class, ": ", $e->getMessage(), "\n"; + } + return 'reexec'; + } +} + +class Reclose { + public function __construct(private PDOStatement $stmt) {} + public function __toString() { + try { + $this->stmt->closeCursor(); + echo "closeCursor: no error\n"; + } catch (Error $e) { + echo $e::class, ": ", $e->getMessage(), "\n"; + } + return 'reclose'; + } +} + +$db = new PDO('sqlite::memory:'); + +echo "bindValue:\n"; +$stmt = $db->prepare('SELECT ?, ?'); +$p1 = 'placeholder'; +$p2 = 'second'; +$stmt->bindParam(1, $p1); +$stmt->bindParam(2, $p2); +$p1 = new Rebind($stmt); +try { + $stmt->execute(); + echo "execute after bindValue: no error\n"; +} catch (Throwable $e) { + echo $e::class, ": ", $e->getMessage(), "\n"; +} + +echo "execute:\n"; +$stmt = $db->prepare('SELECT ?, ?'); +$p1 = 'placeholder'; +$p2 = 'second'; +$stmt->bindParam(1, $p1); +$stmt->bindParam(2, $p2); +$p1 = new Reexec($stmt); +try { + $stmt->execute(); + echo "execute after execute: no error\n"; +} catch (Throwable $e) { + echo $e::class, ": ", $e->getMessage(), "\n"; +} + +echo "closeCursor:\n"; +$stmt = $db->prepare('SELECT ?, ?'); +$p1 = 'placeholder'; +$p2 = 'second'; +$stmt->bindParam(1, $p1); +$stmt->bindParam(2, $p2); +$p1 = new Reclose($stmt); +try { + $stmt->execute(); + echo "execute after closeCursor: no error\n"; +} catch (Throwable $e) { + echo $e::class, ": ", $e->getMessage(), "\n"; +} + +echo "done\n"; +?> +--EXPECT-- +bindValue: +Error: Cannot modify a PDOStatement while parameter hooks are running +execute after bindValue: no error +execute: +Error: Cannot modify a PDOStatement while parameter hooks are running +execute after execute: no error +closeCursor: +Error: Cannot modify a PDOStatement while parameter hooks are running +execute after closeCursor: no error +done diff --git a/ext/sqlite3/sqlite3.c b/ext/sqlite3/sqlite3.c index 4698fe5cd096..dbff6508367c 100644 --- a/ext/sqlite3/sqlite3.c +++ b/ext/sqlite3/sqlite3.c @@ -2167,6 +2167,7 @@ PHP_METHOD(SQLite3Result, reset) sqlite3result_clear_column_names_cache(result_obj); if (sqlite3_reset(result_obj->stmt_obj->stmt) != SQLITE_OK) { + php_sqlite3_error(result_obj->db_obj, sqlite3_errcode(sqlite3_db_handle(result_obj->stmt_obj->stmt)), "Statement reset reported an error: %s", sqlite3_errmsg(sqlite3_db_handle(result_obj->stmt_obj->stmt))); RETURN_FALSE; } @@ -2192,7 +2193,9 @@ PHP_METHOD(SQLite3Result, finalize) zend_llist_del_element(&(result_obj->db_obj->free_list), result_obj->stmt_obj, (int (*)(void *, void *)) php_sqlite3_compare_stmt_free); } else { - sqlite3_reset(result_obj->stmt_obj->stmt); + if (sqlite3_reset(result_obj->stmt_obj->stmt) != SQLITE_OK) { + php_sqlite3_error(result_obj->db_obj, sqlite3_errcode(sqlite3_db_handle(result_obj->stmt_obj->stmt)), "Statement reset reported an error: %s", sqlite3_errmsg(sqlite3_db_handle(result_obj->stmt_obj->stmt))); + } } RETURN_TRUE; diff --git a/ext/sqlite3/tests/gh22051.phpt b/ext/sqlite3/tests/gh22051.phpt new file mode 100644 index 000000000000..b181e7e4a5c0 --- /dev/null +++ b/ext/sqlite3/tests/gh22051.phpt @@ -0,0 +1,43 @@ +--TEST-- +GH-22051 (SQLite3Result::reset()/finalize() report the error on failure) +--EXTENSIONS-- +sqlite3 +--FILE-- +query($sql); +var_dump($result->fetchArray(SQLITE3_NUM)); +var_dump(@$result->fetchArray(SQLITE3_NUM)); +var_dump($result->reset()); + +echo "--- SQLite3Result::finalize() ---\n"; +$stmt = $db->prepare($sql); +$result = $stmt->execute(); +var_dump($result->fetchArray(SQLITE3_NUM)); +var_dump(@$result->fetchArray(SQLITE3_NUM)); +var_dump($result->finalize()); +?> +--EXPECTF-- +--- SQLite3Result::reset() --- +array(1) { + [0]=> + int(1) +} +bool(false) + +Warning: SQLite3Result::reset(): Statement reset reported an error: integer overflow in %s on line %d +bool(false) +--- SQLite3Result::finalize() --- +array(1) { + [0]=> + int(1) +} +bool(false) + +Warning: SQLite3Result::finalize(): Statement reset reported an error: integer overflow in %s on line %d +bool(true) diff --git a/ext/zip/tests/gh18431.phpt b/ext/zip/tests/gh18431.phpt index d4eb89c36c6b..b4225238ac38 100644 --- a/ext/zip/tests/gh18431.phpt +++ b/ext/zip/tests/gh18431.phpt @@ -2,6 +2,12 @@ GH-18431 (Registering ZIP progress callback twice doesn't work) --EXTENSIONS-- zip +--SKIPIF-- + --FILE-- buffer.first; chunk; chunk = next) { #ifdef PHP_WIN32 @@ -1067,7 +1068,6 @@ static int php_cli_server_content_sender_send(php_cli_server_content_sender *sen nbytes_sent = send(fd, chunk->data.heap.p, chunk->data.heap.len, 0); #endif if (nbytes_sent < 0) { - *nbytes_sent_total = _nbytes_sent_total; return php_socket_errno(); #ifdef PHP_WIN32 } else if (nbytes_sent == chunk->data.heap.len) { @@ -1083,8 +1083,10 @@ static int php_cli_server_content_sender_send(php_cli_server_content_sender *sen } else { chunk->data.heap.p += nbytes_sent; chunk->data.heap.len -= nbytes_sent; + *nbytes_sent_total += nbytes_sent; + return 0; } - _nbytes_sent_total += nbytes_sent; + *nbytes_sent_total += nbytes_sent; break; case PHP_CLI_SERVER_CHUNK_IMMORTAL: @@ -1094,7 +1096,6 @@ static int php_cli_server_content_sender_send(php_cli_server_content_sender *sen nbytes_sent = send(fd, chunk->data.immortal.p, chunk->data.immortal.len, 0); #endif if (nbytes_sent < 0) { - *nbytes_sent_total = _nbytes_sent_total; return php_socket_errno(); #ifdef PHP_WIN32 } else if (nbytes_sent == chunk->data.immortal.len) { @@ -1110,12 +1111,13 @@ static int php_cli_server_content_sender_send(php_cli_server_content_sender *sen } else { chunk->data.immortal.p += nbytes_sent; chunk->data.immortal.len -= nbytes_sent; + *nbytes_sent_total += nbytes_sent; + return 0; } - _nbytes_sent_total += nbytes_sent; + *nbytes_sent_total += nbytes_sent; break; } } - *nbytes_sent_total = _nbytes_sent_total; return 0; } /* }}} */