# HG changeset patch # User Mark Doliner # Date 1242714924 0 # Node ID 338ac8c4393180930a12a82b724f3827b88048fb # Parent 56460ebd15587d8299b02871db60ec9097fc738d# Parent 99e3f40d082ff96d38c0bd81d2a457a3c3a9e02f merge of '062468e9e5c7b0a7d4fb51cbd78c9a769cbd120a' and '13f518fad2e8dacf137c733223da9b6d535c8ae1' diff -r 99e3f40d082f -r 338ac8c43931 .mtn-ignore --- a/.mtn-ignore Tue May 19 06:34:27 2009 +0000 +++ b/.mtn-ignore Tue May 19 06:35:24 2009 +0000 @@ -52,6 +52,7 @@ libpurple/dbus-types.h libpurple/example/nullclient libpurple/gconf/purple.schemas$ +libpurple/marshallers.[ch] libpurple/plugins/dbus-example-bindings.c libpurple/plugins/perl/common/Makefile.PL$ libpurple/plugins/perl/common/Makefile.old diff -r 99e3f40d082f -r 338ac8c43931 ChangeLog --- a/ChangeLog Tue May 19 06:34:27 2009 +0000 +++ b/ChangeLog Tue May 19 06:35:24 2009 +0000 @@ -14,6 +14,8 @@ libpurple: * Various memory cleanups when unloading libpurple. (Nick Hebner) * Report idle time 'From last message sent' should work properly. + * Show the invite message for buddies that requested authorization + from you on MSN. XMPP: * Voice & Video support with Jingle (XEP-0166, 0167, 0176, & 0177), and diff -r 99e3f40d082f -r 338ac8c43931 configure.ac --- a/configure.ac Tue May 19 06:34:27 2009 +0000 +++ b/configure.ac Tue May 19 06:35:24 2009 +0000 @@ -1663,7 +1663,7 @@ [enable_nss="$enableval"], [enable_nss="yes"]) -msg_ssl="None. MSN, Novell Groupwise and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!" +msg_ssl="None. MSN, Novell Groupwise, Yahoo! and Google Talk will not work without GnuTLS or NSS. OpenSSL is NOT usable!" looked_for_gnutls="no" dnl # dnl # Check for GnuTLS if it's specified. diff -r 99e3f40d082f -r 338ac8c43931 libpurple/account.c --- a/libpurple/account.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/account.c Tue May 19 06:35:24 2009 +0000 @@ -99,7 +99,7 @@ const char *name; PurpleAccountSetting *setting; xmlnode *node, *child; - char buf[20]; + char buf[21]; name = (const char *)key; setting = (PurpleAccountSetting *)value; @@ -110,7 +110,7 @@ if (setting->type == PURPLE_PREF_INT) { xmlnode_set_attrib(child, "type", "int"); - snprintf(buf, sizeof(buf), "%d", setting->value.integer); + g_snprintf(buf, sizeof(buf), "%d", setting->value.integer); xmlnode_insert_data(child, buf, -1); } else if (setting->type == PURPLE_PREF_STRING && setting->value.string != NULL) { @@ -119,7 +119,7 @@ } else if (setting->type == PURPLE_PREF_BOOLEAN) { xmlnode_set_attrib(child, "type", "bool"); - snprintf(buf, sizeof(buf), "%d", setting->value.boolean); + g_snprintf(buf, sizeof(buf), "%d", setting->value.boolean); xmlnode_insert_data(child, buf, -1); } } @@ -281,7 +281,7 @@ PurpleProxyType proxy_type; const char *value; int int_value; - char buf[20]; + char buf[21]; proxy_type = purple_proxy_info_get_type(proxy_info); @@ -304,7 +304,7 @@ if ((int_value = purple_proxy_info_get_port(proxy_info)) != 0) { - snprintf(buf, sizeof(buf), "%d", int_value); + g_snprintf(buf, sizeof(buf), "%d", int_value); child = xmlnode_new_child(node, "port"); xmlnode_insert_data(child, buf, -1); } @@ -342,7 +342,7 @@ return node; child = xmlnode_new_child(node, "type"); - snprintf(type_str, sizeof(type_str), "%u", err->type); + g_snprintf(type_str, sizeof(type_str), "%u", err->type); xmlnode_insert_data(child, type_str, -1); child = xmlnode_new_child(node, "description"); diff -r 99e3f40d082f -r 338ac8c43931 libpurple/blist.c --- a/libpurple/blist.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/blist.c Tue May 19 06:35:24 2009 +0000 @@ -125,7 +125,7 @@ const char *name; PurpleValue *value; xmlnode *node, *child; - char buf[20]; + char buf[21]; name = (const char *)key; value = (PurpleValue *)hvalue; @@ -138,7 +138,7 @@ if (purple_value_get_type(value) == PURPLE_TYPE_INT) { xmlnode_set_attrib(child, "type", "int"); - snprintf(buf, sizeof(buf), "%d", purple_value_get_int(value)); + g_snprintf(buf, sizeof(buf), "%d", purple_value_get_int(value)); xmlnode_insert_data(child, buf, -1); } else if (purple_value_get_type(value) == PURPLE_TYPE_STRING) { @@ -147,7 +147,7 @@ } else if (purple_value_get_type(value) == PURPLE_TYPE_BOOLEAN) { xmlnode_set_attrib(child, "type", "bool"); - snprintf(buf, sizeof(buf), "%d", purple_value_get_boolean(value)); + g_snprintf(buf, sizeof(buf), "%d", purple_value_get_boolean(value)); xmlnode_insert_data(child, buf, -1); } } @@ -303,7 +303,7 @@ node = xmlnode_new("account"); xmlnode_set_attrib(node, "proto", purple_account_get_protocol_id(account)); xmlnode_set_attrib(node, "name", purple_account_get_username(account)); - snprintf(buf, sizeof(buf), "%d", account->perm_deny); + g_snprintf(buf, sizeof(buf), "%d", account->perm_deny); xmlnode_set_attrib(node, "mode", buf); for (cur = account->permit; cur; cur = cur->next) diff -r 99e3f40d082f -r 338ac8c43931 libpurple/dnsquery.c --- a/libpurple/dnsquery.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/dnsquery.c Tue May 19 06:35:24 2009 +0000 @@ -325,7 +325,7 @@ return; already_done = TRUE; ppid = getppid(); - snprintf(s, sizeof(s), "/proc/%d/exe", ppid); + g_snprintf(s, sizeof(s), "/proc/%d/exe", ppid); n = readlink(s, e, sizeof(e)); if(n < 0) return; diff -r 99e3f40d082f -r 338ac8c43931 libpurple/internal.h diff -r 99e3f40d082f -r 338ac8c43931 libpurple/network.c --- a/libpurple/network.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/network.c Tue May 19 06:35:24 2009 +0000 @@ -303,7 +303,7 @@ /* * Get a list of addresses on this machine. */ - snprintf(serv, sizeof(serv), "%hu", port); + g_snprintf(serv, sizeof(serv), "%hu", port); memset(&hints, 0, sizeof(struct addrinfo)); hints.ai_flags = AI_PASSIVE; hints.ai_family = AF_UNSPEC; diff -r 99e3f40d082f -r 338ac8c43931 libpurple/plugins/perl/perl-handlers.c --- a/libpurple/plugins/perl/perl-handlers.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/plugins/perl/perl-handlers.c Tue May 19 06:35:24 2009 +0000 @@ -284,6 +284,8 @@ DATATYPE **copy_args; dSP; + PERL_SET_CONTEXT(my_perl); + SPAGAIN; ENTER; SAVETMPS; PUSHMARK(sp); @@ -364,7 +366,8 @@ break; case PURPLE_TYPE_STRING: - if (strcmp(*((char **)copy_args[i]), SvPVX(sv_args[i]))) { + if (!*((char **)copy_args[i]) || !SvPVX(sv_args[i]) || + strcmp(*((char **)copy_args[i]), SvPVX(sv_args[i]))) { g_free(*((char **)copy_args[i])); *((char **)copy_args[i]) = g_strdup(SvPVutf8_nolen(sv_args[i])); diff -r 99e3f40d082f -r 338ac8c43931 libpurple/prefs.c --- a/libpurple/prefs.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/prefs.c Tue May 19 06:35:24 2009 +0000 @@ -118,7 +118,7 @@ { xmlnode *node, *childnode; struct purple_pref *child; - char buf[20]; + char buf[21]; GList *cur; /* Create a new node */ @@ -128,7 +128,7 @@ /* Set the type of this node (if type == PURPLE_PREF_NONE then do nothing) */ if (pref->type == PURPLE_PREF_INT) { xmlnode_set_attrib(node, "type", "int"); - snprintf(buf, sizeof(buf), "%d", pref->value.integer); + g_snprintf(buf, sizeof(buf), "%d", pref->value.integer); xmlnode_set_attrib(node, "value", buf); } else if (pref->type == PURPLE_PREF_STRING) { @@ -161,7 +161,7 @@ } else if (pref->type == PURPLE_PREF_BOOLEAN) { xmlnode_set_attrib(node, "type", "bool"); - snprintf(buf, sizeof(buf), "%d", pref->value.boolean); + g_snprintf(buf, sizeof(buf), "%d", pref->value.boolean); xmlnode_set_attrib(node, "value", buf); } diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/jabber/buddy.c Tue May 19 06:35:24 2009 +0000 @@ -1460,49 +1460,50 @@ if(seconds) { char *end = NULL; long sec = strtol(seconds, &end, 10); - JabberBuddy *jb = NULL; - char *resource = NULL; - char *buddy_name = NULL; + JabberBuddy *jb = NULL; + char *resource = NULL; + char *buddy_name = NULL; JabberBuddyResource *jbr = NULL; - if(end != seconds) { + if(end != seconds) { JabberBuddyInfoResource *jbir = g_hash_table_lookup(jbi->resources, resource_name); if(jbir) { jbir->idle_seconds = sec; } } - /* Update the idle time of the buddy resource, if we got it. - This will correct the value when a server doesn't mark - delayed presence and we got the presence when signing on */ - jb = jabber_buddy_find(js, from, FALSE); - if (jb) { - resource = jabber_get_resource(from); - buddy_name = jabber_get_bare_jid(from); - /* if the resource already has an idle time set, we - must have gotten it originally from a presence. In - this case we update it. Otherwise don't update it, to - avoid setting an idle and not getting informed about - the resource getting unidle */ - if (resource && buddy_name) { - jbr = jabber_buddy_find_resource(jb, resource); - - if (jbr->idle) { - if (sec) { - jbr->idle = time(NULL) - sec; - } else { - jbr->idle = 0; - } - - if (jbr == - jabber_buddy_find_resource(jb, NULL)) { - purple_prpl_got_user_idle(js->gc->account, - buddy_name, jbr->idle, jbr->idle); - } - } - } - g_free(resource); - g_free(buddy_name); - } + /* Update the idle time of the buddy resource, if we got it. + This will correct the value when a server doesn't mark + delayed presence and we got the presence when signing on */ + jb = jabber_buddy_find(js, from, FALSE); + if (jb) { + resource = jabber_get_resource(from); + buddy_name = jabber_get_bare_jid(from); + /* if the resource already has an idle time set, we + must have gotten it originally from a presence. In + this case we update it. Otherwise don't update it, to + avoid setting an idle and not getting informed about + the resource getting unidle */ + if (resource && buddy_name) { + jbr = jabber_buddy_find_resource(jb, resource); + if (jbr) { + if (jbr->idle) { + if (sec) { + jbr->idle = time(NULL) - sec; + } else { + jbr->idle = 0; + } + + if (jbr == + jabber_buddy_find_resource(jb, NULL)) { + purple_prpl_got_user_idle(js->gc->account, + buddy_name, jbr->idle, jbr->idle); + } + } + } + } + g_free(resource); + g_free(buddy_name); + } } } } diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/jabber/jutil.c --- a/libpurple/protocols/jabber/jutil.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/jabber/jutil.c Tue May 19 06:35:24 2009 +0000 @@ -105,6 +105,8 @@ { char *at; char *slash; + char *node = NULL; + char *domain; JabberID *jid; if(!str || !g_utf8_validate(str, -1, NULL)) @@ -116,22 +118,31 @@ slash = g_utf8_strchr(str, -1, '/'); if(at) { - jid->node = g_utf8_normalize(str, at-str, G_NORMALIZE_NFKC); + node = g_utf8_normalize(str, at-str, G_NORMALIZE_NFKC); if(slash) { - jid->domain = g_utf8_normalize(at+1, slash-(at+1), G_NORMALIZE_NFKC); + domain = g_utf8_normalize(at+1, slash-(at+1), G_NORMALIZE_NFKC); jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC); } else { - jid->domain = g_utf8_normalize(at+1, -1, G_NORMALIZE_NFKC); + domain = g_utf8_normalize(at+1, -1, G_NORMALIZE_NFKC); } } else { if(slash) { - jid->domain = g_utf8_normalize(str, slash-str, G_NORMALIZE_NFKC); + domain = g_utf8_normalize(str, slash-str, G_NORMALIZE_NFKC); jid->resource = g_utf8_normalize(slash+1, -1, G_NORMALIZE_NFKC); } else { - jid->domain = g_utf8_normalize(str, -1, G_NORMALIZE_NFKC); + domain = g_utf8_normalize(str, -1, G_NORMALIZE_NFKC); } } + if (node) { + jid->node = g_utf8_strdown(node, -1); + g_free(node); + } + + if (domain) { + jid->domain = g_utf8_strdown(domain, -1); + g_free(domain); + } if(!jabber_nodeprep_validate(jid->node) || !jabber_nameprep_validate(jid->domain) || @@ -193,28 +204,21 @@ JabberStream *js = gc ? gc->proto_data : NULL; static char buf[3072]; /* maximum legal length of a jabber jid */ JabberID *jid; - char *node, *domain; jid = jabber_id_new(in); if(!jid) return NULL; - node = jid->node ? g_utf8_strdown(jid->node, -1) : NULL; - domain = g_utf8_strdown(jid->domain, -1); - - - if(js && node && jid->resource && - jabber_chat_find(js, node, domain)) - g_snprintf(buf, sizeof(buf), "%s@%s/%s", node, domain, + if(js && jid->node && jid->resource && + jabber_chat_find(js, jid->node, jid->domain)) + g_snprintf(buf, sizeof(buf), "%s@%s/%s", jid->node, jid->domain, jid->resource); else - g_snprintf(buf, sizeof(buf), "%s%s%s", node ? node : "", - node ? "@" : "", domain); + g_snprintf(buf, sizeof(buf), "%s%s%s", jid->node ? jid->node : "", + jid->node ? "@" : "", jid->domain); jabber_id_free(jid); - g_free(node); - g_free(domain); return buf; } diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/jabber/message.c --- a/libpurple/protocols/jabber/message.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/jabber/message.c Tue May 19 06:35:24 2009 +0000 @@ -1175,7 +1175,6 @@ jm->chat_state = JM_STATE_ACTIVE; jm->to = g_strdup(who); jm->id = jabber_get_next_id(jm->js); - jm->chat_state = JM_STATE_ACTIVE; if(jbr) { if(jbr->thread_id) diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/jabber/si.c --- a/libpurple/protocols/jabber/si.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/jabber/si.c Tue May 19 06:35:24 2009 +0000 @@ -407,7 +407,7 @@ { PurpleXfer *xfer = data; JabberSIXfer *jsx = xfer->data; - char buffer[256]; + char buffer[42]; /* 40 for DST.ADDR + 2 bytes for port number*/ int len; char *dstaddr, *hash; const char *host; @@ -431,16 +431,19 @@ jsx->rxlen += len; return; } else if(jsx->rxqueue[0] != 0x05 || jsx->rxqueue[1] != 0x01 || - jsx->rxqueue[3] != 0x03) { - purple_debug_info("jabber", "invalid socks5 stuff\n"); + jsx->rxqueue[3] != 0x03 || jsx->rxqueue[4] != 40) { + purple_debug_info("jabber", "Invalid socks5 conn req. header[0x%x,0x%x,0x%x,0x%x,0x%x]\n", + jsx->rxqueue[0], jsx->rxqueue[1], jsx->rxqueue[2], + jsx->rxqueue[3], jsx->rxqueue[4]); purple_input_remove(xfer->watcher); xfer->watcher = 0; close(source); purple_xfer_cancel_remote(xfer); return; } else if(jsx->rxlen - 5 < jsx->rxqueue[4] + 2) { - purple_debug_info("jabber", "reading umpteen more bytes\n"); - len = read(source, buffer, jsx->rxqueue[4] + 5 + 2 - jsx->rxlen); + purple_debug_info("jabber", "reading %u bytes for DST.ADDR + port num (trying to read %u now)\n", + jsx->rxqueue[4] + 2, jsx->rxqueue[4] + 2 - (jsx->rxlen - 5)); + len = read(source, buffer, jsx->rxqueue[4] + 2 - (jsx->rxlen - 5)); if(len < 0 && errno == EAGAIN) return; else if(len <= 0) { @@ -455,6 +458,7 @@ jsx->rxlen += len; } + /* Have we not read all of DST.ADDR and the following 2-byte port number? */ if(jsx->rxlen - 5 < jsx->rxqueue[4] + 2) return; @@ -468,9 +472,16 @@ /* Per XEP-0065, the 'host' must be SHA1(SID + from JID + to JID) */ hash = jabber_calculate_data_sha1sum(dstaddr, strlen(dstaddr)); - if(jsx->rxqueue[4] != 40 || strncmp(hash, jsx->rxqueue+5, 40) || + if(strncmp(hash, jsx->rxqueue + 5, 40) || jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00) { - purple_debug_error("jabber", "someone connected with the wrong info!\n"); + if (jsx->rxqueue[45] != 0x00 || jsx->rxqueue[46] != 0x00) + purple_debug_error("jabber", "Got SOCKS5 BS conn with the wrong DST.PORT" + " (must be 0 - got[0x%x,0x%x]).\n", + jsx->rxqueue[45], jsx->rxqueue[46]); + else + purple_debug_error("jabber", "Got SOCKS5 BS conn with the wrong DST.ADDR" + " (expected '%s' - got '%.40s').\n", + hash, jsx->rxqueue + 5); close(source); purple_xfer_cancel_remote(xfer); g_free(hash); @@ -531,11 +542,13 @@ purple_input_remove(xfer->watcher); xfer->watcher = 0; + /* If we sent a "Success", wait for a response, otherwise give up and cancel */ if (jsx->rxqueue[1] == 0x00) { xfer->watcher = purple_input_add(source, PURPLE_INPUT_READ, jabber_si_xfer_bytestreams_send_read_again_cb, xfer); g_free(jsx->rxqueue); jsx->rxqueue = NULL; + jsx->rxlen = 0; } else { close(source); purple_xfer_cancel_remote(xfer); @@ -556,6 +569,7 @@ xfer->fd = source; + /** Try to read the SOCKS5 header */ if(jsx->rxlen < 2) { purple_debug_info("jabber", "reading those first two bytes\n"); len = read(source, buffer, 2 - jsx->rxlen); @@ -573,8 +587,9 @@ jsx->rxlen += len; return; } else if(jsx->rxlen - 2 < jsx->rxqueue[1]) { - purple_debug_info("jabber", "reading the next umpteen bytes\n"); - len = read(source, buffer, jsx->rxqueue[1] + 2 - jsx->rxlen); + purple_debug_info("jabber", "reading %u bytes for auth methods (trying to read %u now)\n", + jsx->rxqueue[1], jsx->rxqueue[1] - (jsx->rxlen - 2)); + len = read(source, buffer, jsx->rxqueue[1] - (jsx->rxlen - 2)); if(len < 0 && errno == EAGAIN) return; else if(len <= 0) { @@ -589,6 +604,7 @@ jsx->rxlen += len; } + /* Have we not read all the auth. method bytes? */ if(jsx->rxlen -2 < jsx->rxqueue[1]) return; diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/contact.c --- a/libpurple/protocols/msn/contact.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/contact.c Tue May 19 06:35:24 2009 +0000 @@ -357,29 +357,36 @@ MsnUser *user = msn_userlist_find_add_user(session->userlist, passport, NULL); xmlnode *annotation; guint nid = MSN_NETWORK_UNKNOWN; + char *invite = NULL; - /* For EmailMembers, the network must be found in the annotations. */ - if (!strcmp(node, "PassportName")) { + for (annotation = xmlnode_get_child(member, "Annotations/Annotation"); + annotation; + annotation = xmlnode_get_next_twin(annotation)) { + char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name")); + char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value")); + if (name && value) { + if (!strcmp(name, "MSN.IM.BuddyType")) { + nid = strtoul(value, NULL, 10); + } + else if (!strcmp(name, "MSN.IM.InviteMessage")) { + invite = value; + value = NULL; + } + } + g_free(name); + g_free(value); + } + + /* For EmailMembers, the network must be found in the annotations, above. + Otherwise, PassportMembers are on the Passport network. */ + if (!strcmp(node, "PassportName")) nid = MSN_NETWORK_PASSPORT; - } else { - for (annotation = xmlnode_get_child(member, "Annotations/Annotation"); - annotation; - annotation = xmlnode_get_next_twin(annotation)) { - char *name = xmlnode_get_data(xmlnode_get_child(annotation, "Name")); - if (name && !strcmp(name, "MSN.IM.BuddyType")) { - char *value = xmlnode_get_data(xmlnode_get_child(annotation, "Value")); - if (value != NULL) - nid = strtoul(value, NULL, 10); - g_free(value); - } - g_free(name); - } - } purple_debug_info("msn", "CL: %s name: %s, Type: %s, MembershipID: %s, NetworkID: %u\n", node, passport, type, member_id == NULL ? "(null)" : member_id, nid); msn_user_set_network(user, nid); + msn_user_set_invite_message(user, invite); if (member_id) { user->membership_id[list] = atoi(member_id); @@ -390,6 +397,7 @@ g_free(passport); g_free(type); g_free(member_id); + g_free(invite); } static void @@ -717,8 +725,6 @@ g_free(msnEnabled); } } - if (passport == NULL) /* Couldn't find anything */ - continue; } else { xmlnode *messenger_user; /* ignore non-messenger contacts */ @@ -736,6 +742,7 @@ passport = xmlnode_get_data(passportName); } + /* Couldn't find anything */ if (passport == NULL) continue; diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/httpconn.c --- a/libpurple/protocols/msn/httpconn.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/httpconn.c Tue May 19 06:35:24 2009 +0000 @@ -219,7 +219,13 @@ g_free(tmp); t = strchr(full_session_id, '.'); - session_id = g_strndup(full_session_id, t - full_session_id); + if (t != NULL) + session_id = g_strndup(full_session_id, t - full_session_id); + else { + purple_debug_error("msn", "Malformed full_session_id[%s]\n", + full_session_id ? full_session_id : NULL); + session_id = g_strdup(full_session_id); + } if (session_action == NULL || strcmp(session_action, "close") != 0) { diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/notification.c Tue May 19 06:35:24 2009 +0000 @@ -149,48 +149,6 @@ } /************************************************************************** - * Util - **************************************************************************/ - -static void -group_error_helper(MsnSession *session, const char *msg, const char *group_id, int error) -{ - PurpleAccount *account; - PurpleConnection *gc; - char *reason = NULL; - char *title = NULL; - - account = session->account; - gc = purple_account_get_connection(account); - - if (error == 224) - { - if (group_id == 0) - { - return; - } - else - { - const char *group_name; - group_name = msn_userlist_find_group_name(session->userlist,group_id); - reason = g_strdup_printf(_("%s is not a valid group."), - group_name ? group_name : ""); - } - } - else - { - reason = g_strdup(_("Unknown error.")); - } - - title = g_strdup_printf(_("%s on %s (%s)"), msg, - purple_account_get_username(account), - purple_account_get_protocol_name(account)); - purple_notify_error(gc, NULL, title, reason); - g_free(title); - g_free(reason); -} - -/************************************************************************** * Login **************************************************************************/ @@ -1102,38 +1060,6 @@ } static void -adg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) -{ - MsnSession *session; - gint group_id; - const char *group_name; - - session = cmdproc->session; - - group_id = atoi(cmd->params[3]); - - group_name = purple_url_decode(cmd->params[2]); - - msn_group_new(session->userlist, cmd->params[3], group_name); - - /* There is a user that must be moved to this group */ - if (cmd->trans->data) - { - /* msn_userlist_move_buddy(); */ - MsnUserList *userlist = cmdproc->session->userlist; - MsnCallbackState *data = cmd->trans->data; - - if (data->old_group_name != NULL) - { - msn_userlist_move_buddy(userlist, data->who, data->old_group_name, group_name); - g_free(data->old_group_name); - } else { - /* msn_add_contact_to_group(userlist, data, data->who, group_name); */ - } - } -} - -static void qng_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) { /* TODO: Call PNG after the timeout specified. */ @@ -1468,61 +1394,6 @@ } } -static void -reg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) -{ - MsnSession *session; - const char *group_id, *group_name; - - session = cmdproc->session; - group_id = cmd->params[2]; - group_name = purple_url_decode(cmd->params[3]); - - msn_userlist_rename_group_id(session->userlist, group_id, group_name); -} - -static void -reg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) -{ - const char * group_id; - char **params; - - params = g_strsplit(trans->params, " ", 0); - - group_id = params[0]; - - group_error_helper(cmdproc->session, _("Unable to rename group"), group_id, error); - - g_strfreev(params); -} - -static void -rmg_cmd(MsnCmdProc *cmdproc, MsnCommand *cmd) -{ - MsnSession *session; - const char *group_id; - - session = cmdproc->session; - group_id = cmd->params[2]; - - msn_userlist_remove_group_id(session->userlist, group_id); -} - -static void -rmg_error(MsnCmdProc *cmdproc, MsnTransaction *trans, int error) -{ - const char *group_id; - char **params; - - params = g_strsplit(trans->params, " ", 0); - - group_id = params[0]; - - group_error_helper(cmdproc->session, _("Unable to delete group"), group_id, error); - - g_strfreev(params); -} - /************************************************************************** * Misc commands **************************************************************************/ @@ -2149,9 +2020,6 @@ msn_table_add_cmd(cbs_table, "VER", "VER", ver_cmd); msn_table_add_cmd(cbs_table, "PRP", "PRP", prp_cmd); msn_table_add_cmd(cbs_table, "BLP", "BLP", blp_cmd); - msn_table_add_cmd(cbs_table, "REG", "REG", reg_cmd); - msn_table_add_cmd(cbs_table, "ADG", "ADG", adg_cmd); - msn_table_add_cmd(cbs_table, "RMG", "RMG", rmg_cmd); msn_table_add_cmd(cbs_table, "XFR", "XFR", xfr_cmd); /* Asynchronous */ @@ -2187,8 +2055,6 @@ msn_table_add_error(cbs_table, "ADD", add_error); msn_table_add_error(cbs_table, "ADL", adl_error); msn_table_add_error(cbs_table, "FQY", fqy_error); - msn_table_add_error(cbs_table, "REG", reg_error); - msn_table_add_error(cbs_table, "RMG", rmg_error); msn_table_add_error(cbs_table, "USR", usr_error); msn_table_add_msg_type(cbs_table, diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/oim.c --- a/libpurple/protocols/msn/oim.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/oim.c Tue May 19 06:35:24 2009 +0000 @@ -668,9 +668,15 @@ if (tokens[1] != NULL) from = (const char *)tokens[1]; - start = strchr(from, '<') + 1; - end = strchr(from, '>'); - passport = g_strndup(start, end - start); + start = strchr(from, '<'); + if (start != NULL) { + start++; + end = strchr(from, '>'); + if (end != NULL) + passport = g_strndup(start, end - start); + } + if (passport == NULL) + passport = g_strdup(_("Unknown")); g_strfreev(tokens); } diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/soap.c --- a/libpurple/protocols/msn/soap.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/soap.c Tue May 19 06:35:24 2009 +0000 @@ -80,7 +80,7 @@ conn->session = session; conn->host = g_strdup(host); conn->queue = g_queue_new(); - conn->unsafe_debug = g_getenv("PURPLE_MSN_UNSAFE_DEBUG") != NULL; + conn->unsafe_debug = g_getenv("PURPLE_UNSAFE_DEBUG") != NULL; return conn; } @@ -434,7 +434,7 @@ g_free(line); return; } else if (strcmp(key, "Content-Length") == 0) { - conn->body_len = atoi(value); + sscanf(value, "%" G_GSIZE_FORMAT, &(conn->body_len)); } else if (strcmp(key, "Connection") == 0) { if (strcmp(value, "close") == 0) { conn->close_when_done = TRUE; @@ -667,7 +667,8 @@ conn->handled_len = 0; conn->current_request = req; - purple_input_remove(conn->event_handle); + if (conn->event_handle) + purple_input_remove(conn->event_handle); conn->event_handle = purple_input_add(conn->ssl->fd, PURPLE_INPUT_WRITE, msn_soap_write_cb, conn); if (!msn_soap_write_cb_internal(conn, conn->ssl->fd, PURPLE_INPUT_WRITE, TRUE)) { diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/user.c --- a/libpurple/protocols/msn/user.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/user.c Tue May 19 06:35:24 2009 +0000 @@ -74,6 +74,7 @@ g_free(user->media.title); g_free(user->media.album); g_free(user->statusline); + g_free(user->invite_message); g_free(user); } @@ -426,6 +427,15 @@ user->clientcaps = info; } +void +msn_user_set_invite_message(MsnUser *user, const char *message) +{ + g_return_if_fail(user != NULL); + + g_free(user->invite_message); + user->invite_message = g_strdup(message); +} + const char * msn_user_get_passport(const MsnUser *user) { @@ -489,3 +499,12 @@ return user->clientcaps; } + +const char * +msn_user_get_invite_message(const MsnUser *user) +{ + g_return_val_if_fail(user != NULL, NULL); + + return user->invite_message; +} + diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/user.h --- a/libpurple/protocols/msn/user.h Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/user.h Tue May 19 06:35:24 2009 +0000 @@ -105,6 +105,8 @@ guint membership_id[5]; /**< The membershipId sent by the contacts server, indexed by the list it belongs to */ + + char *invite_message; /**< Invite message of user request */ }; /************************************************************************** @@ -290,6 +292,14 @@ */ void msn_user_set_client_caps(MsnUser *user, GHashTable *info); +/** + * Sets the invite message for a user. + * + * @param user The user. + * @param message The invite message for a user. + */ +void msn_user_set_invite_message(MsnUser *user, const char *message); + /** * Returns the passport account for a user. @@ -373,6 +383,15 @@ GHashTable *msn_user_get_client_caps(const MsnUser *user); /** + * Returns the invite message for a user. + * + * @param user The user. + * + * @return The user's invite message. + */ +const char *msn_user_get_invite_message(const MsnUser *user); + +/** * check to see if user is online */ gboolean diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/userlist.c --- a/libpurple/protocols/msn/userlist.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/userlist.c Tue May 19 06:35:24 2009 +0000 @@ -86,7 +86,7 @@ } static void -got_new_entry(PurpleConnection *gc, const char *passport, const char *friendly) +got_new_entry(PurpleConnection *gc, const char *passport, const char *friendly, const char *message) { PurpleAccount *acct; MsnPermitAdd *pa; @@ -97,7 +97,7 @@ pa->gc = gc; acct = purple_connection_get_account(gc); - purple_account_request_authorization(acct, passport, NULL, friendly, NULL, + purple_account_request_authorization(acct, passport, NULL, friendly, message, purple_find_buddy(acct, passport) != NULL, msn_accept_add_cb, msn_cancel_add_cb, pa); @@ -142,155 +142,6 @@ * Server functions **************************************************************************/ -MsnListId -msn_get_list_id(const char *list) -{ - if (list[0] == 'F') - return MSN_LIST_FL; - else if (list[0] == 'A') - return MSN_LIST_AL; - else if (list[0] == 'B') - return MSN_LIST_BL; - else if (list[0] == 'R') - return MSN_LIST_RL; - - return -1; -} - -/* this function msn_got_add_user isn't called anywhere */ -void -msn_got_add_user(MsnSession *session, MsnUser *user, - MsnListId list_id, const char * group_id) -{ - PurpleAccount *account; - const char *passport; - const char *friendly; - - purple_debug_info("msn", "got add user...\n"); - account = session->account; - - passport = msn_user_get_passport(user); - friendly = msn_user_get_friendly_name(user); - - if (list_id == MSN_LIST_FL) - { - PurpleConnection *gc; - - gc = purple_account_get_connection(account); - - serv_got_alias(gc, passport, friendly); - - if (group_id != NULL) - { - msn_user_add_group_id(user, group_id); - } - } - else if (list_id == MSN_LIST_AL) - { - purple_privacy_permit_add(account, passport, TRUE); - } - else if (list_id == MSN_LIST_BL) - { - purple_privacy_deny_add(account, passport, TRUE); - } - else if (list_id == MSN_LIST_RL) - { - PurpleConversation *convo; - - purple_debug_info("msn", - "%s has added you to his or her buddy list.\n", - passport); - - convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, passport, account); - if (convo) { - PurpleBuddy *buddy; - char *msg; - - buddy = purple_find_buddy(account, passport); - msg = g_strdup_printf( - _("%s has added you to his or her buddy list."), - buddy ? purple_buddy_get_contact_alias(buddy) : passport); - purple_conv_im_write(PURPLE_CONV_IM(convo), passport, msg, - PURPLE_MESSAGE_SYSTEM, time(NULL)); - g_free(msg); - } - - if (!(user->list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))) - { - /* - * TODO: The friendly name was NULL for me when I - * looked at this. Maybe we should use the store - * name instead? --KingAnt - */ -/* got_new_entry(gc, passport, friendly); */ - } - } - - user->list_op |= (1 << list_id); - /* purple_user_add_list_id (user, list_id); */ -} - -void -msn_got_rem_user(MsnSession *session, MsnUser *user, - MsnListId list_id, const char * group_id) -{ - PurpleAccount *account; - const char *passport; - - account = session->account; - - passport = msn_user_get_passport(user); - - if (list_id == MSN_LIST_FL) - { - /* TODO: When is the user totally removed? */ - if (group_id != NULL) - { - msn_user_remove_group_id(user, group_id); - return; - } - } - else if (list_id == MSN_LIST_AL) - { - purple_privacy_permit_remove(account, passport, TRUE); - } - else if (list_id == MSN_LIST_BL) - { - purple_privacy_deny_remove(account, passport, TRUE); - } - else if (list_id == MSN_LIST_RL) - { - PurpleConversation *convo; - - purple_debug_info("msn", - "%s has removed you from his or her buddy list.\n", - passport); - - convo = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, passport, account); - if (convo) { - PurpleBuddy *buddy; - char *msg; - - buddy = purple_find_buddy(account, passport); - msg = g_strdup_printf( - _("%s has removed you from his or her buddy list."), - buddy ? purple_buddy_get_contact_alias(buddy) : passport); - purple_conv_im_write(PURPLE_CONV_IM(convo), passport, msg, - PURPLE_MESSAGE_SYSTEM, time(NULL)); - g_free(msg); - } - } - - user->list_op &= ~(1 << list_id); - /* purple_user_remove_list_id (user, list_id); */ - - if (user->list_op == 0) - { - purple_debug_info("msn", "Buddy '%s' shall be deleted?.\n", - passport); - } -} - void msn_got_lst_user(MsnSession *session, MsnUser *user, int list_op, GSList *group_ids) @@ -299,12 +150,14 @@ PurpleAccount *account; const char *passport; const char *store; + const char *message; account = session->account; gc = purple_account_get_connection(account); passport = msn_user_get_passport(user); store = msn_user_get_friendly_name(user); + message = msn_user_get_invite_message(user); msn_user_set_op(user, list_op); @@ -348,13 +201,13 @@ if (!(list_op & (MSN_LIST_AL_OP | MSN_LIST_BL_OP))) { -/* got_new_entry(gc, passport, store); */ +/* got_new_entry(gc, passport, store, NULL); */ } } if (list_op & MSN_LIST_PL_OP) { - got_new_entry(gc, passport, store); + got_new_entry(gc, passport, store, message); } } diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/msn/userlist.h --- a/libpurple/protocols/msn/userlist.h Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/msn/userlist.h Tue May 19 06:35:24 2009 +0000 @@ -57,12 +57,7 @@ gboolean msn_userlist_user_is_in_group(MsnUser *user, const char * group_id); gboolean msn_userlist_user_is_in_list(MsnUser *user, MsnListId list_id); -MsnListId msn_get_list_id(const char *list); -void msn_got_add_user(MsnSession *session, MsnUser *user, - MsnListId list_id, const char *group_id); -void msn_got_rem_user(MsnSession *session, MsnUser *user, - MsnListId list_id, const char *group_id); void msn_got_lst_user(MsnSession *session, MsnUser *user, int list_op, GSList *group_ids); diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/oscar/family_oservice.c --- a/libpurple/protocols/oscar/family_oservice.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/oscar/family_oservice.c Tue May 19 06:35:24 2009 +0000 @@ -151,7 +151,7 @@ memset(&csi, 0, sizeof(csi)); csi.exchange = exchange; - strncpy(csi.name, roomname, sizeof(csi.name)); + g_strlcpy(csi.name, roomname, sizeof(csi.name)); csi.instance = instance; /* diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/qq/utils.c --- a/libpurple/protocols/qq/utils.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/qq/utils.c Tue May 19 06:35:24 2009 +0000 @@ -222,7 +222,8 @@ * The return should be freed later. */ guint8 *hex_str_to_bytes(const gchar *const buffer, gint *out_len) { - gchar *hex_str, *hex_buffer, *cursor, tmp; + gchar *hex_str, *hex_buffer, *cursor; + gchar tmp[2]; guint8 *bytes, nibble1, nibble2; gint index; @@ -242,7 +243,9 @@ index = 0; for (cursor = hex_str; cursor < hex_str + sizeof(gchar) * (strlen(hex_str)) - 1; cursor++) { if (g_ascii_isdigit(*cursor)) { - tmp = *cursor; nibble1 = atoi(&tmp); + tmp[0] = *cursor; + tmp[1] = '\0'; + nibble1 = atoi(tmp); } else if (g_ascii_isalpha(*cursor) && (gint) *cursor - 87 < 16) { nibble1 = (gint) *cursor - 87; } else { @@ -254,7 +257,9 @@ nibble1 = nibble1 << 4; cursor++; if (g_ascii_isdigit(*cursor)) { - tmp = *cursor; nibble2 = atoi(&tmp); + tmp[0] = *cursor; + tmp[1] = '\0'; + nibble2 = atoi(tmp); } else if (g_ascii_isalpha(*cursor) && (gint) (*cursor - 87) < 16) { nibble2 = (gint) *cursor - 87; } else { diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/Makefile.am --- a/libpurple/protocols/yahoo/Makefile.am Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/Makefile.am Tue May 19 06:35:24 2009 +0000 @@ -11,10 +11,6 @@ yahoochat.c \ yahoo_aliases.c \ yahoo_aliases.h \ - yahoo_auth.c \ - yahoo_auth.h \ - yahoo_crypt.h \ - yahoo_crypt.c \ yahoo_doodle.h \ yahoo_doodle.c \ yahoo_filexfer.h \ diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/Makefile.mingw --- a/libpurple/protocols/yahoo/Makefile.mingw Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/Makefile.mingw Tue May 19 06:35:24 2009 +0000 @@ -41,8 +41,6 @@ yahoo.c \ yahoochat.c \ yahoo_aliases.c \ - yahoo_auth.c \ - yahoo_crypt.c \ yahoo_doodle.c \ yahoo_filexfer.c \ yahoo_friend.c \ diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Tue May 19 06:35:24 2009 +0000 @@ -44,8 +44,6 @@ #include "yahoo.h" #include "yahoochat.h" #include "yahoo_aliases.h" -#include "yahoo_auth.h" -#include "yahoo_crypt.h" #include "yahoo_doodle.h" #include "yahoo_filexfer.h" #include "yahoo_friend.h" @@ -281,7 +279,7 @@ f->status = YAHOO_STATUS_OFFLINE; if (name) { purple_prpl_got_user_status(account, name, "offline", NULL); - purple_prpl_got_user_status_deactive(account, name, YAHOO_STATUS_TYPE_MOBILE); + purple_prpl_got_user_status_deactive(account, name, YAHOO_STATUS_TYPE_MOBILE); } break; } @@ -356,7 +354,7 @@ f->version_id = strtol(pair->value, NULL, 10); break; case 241: /* protocol buddy belongs to */ - if(strtol(pair->value, NULL, 10) == 2) { + if(strtol(pair->value, NULL, 10) == 2) { msn_name = g_strconcat("msn/", name, NULL); name = msn_name; } @@ -512,7 +510,7 @@ break; case 301: /* This is 319 before all s/n's in a group after the first. It is followed by an identical 300. */ - if(temp != NULL) { + if(temp != NULL) { if(protocol == 2) norm_bud = g_strconcat("msn/", temp, NULL); else @@ -530,7 +528,7 @@ purple_blist_add_buddy(b, NULL, g, NULL); } yahoo_do_group_check(account, ht, norm_bud, yd->current_list15_grp); - if(protocol != 0) { + if(protocol != 0) { f->protocol = protocol; purple_debug_info("yahoo", "Setting protocol to %d\n", f->protocol); } @@ -538,7 +536,7 @@ f->presence = YAHOO_PRESENCE_PERM_OFFLINE; /* set p2p status not connected and no p2p packet sent */ - if(protocol == 0) { + if(protocol == 0) { yahoo_friend_set_p2p_status(f, YAHOO_P2PSTATUS_NOT_CONNECTED); f->p2p_packet_sent = 0; } else @@ -778,7 +776,7 @@ if (!g_ascii_strncasecmp(msg, "TYPING", strlen("TYPING")) && (purple_privacy_check(account, from))) { - if(msn) { + if(msn) { if (*stat == '1') serv_got_typing(gc, msn_from, 0, PURPLE_TYPING); else @@ -843,7 +841,7 @@ while (l != NULL) { struct yahoo_pair *pair = l->data; - if (pair->key == 4) { + if (pair->key == 4) { sms = g_new0(struct _yahoo_im, 1); sms->from = g_strdup_printf("+%s", pair->value); sms->time = time(NULL); @@ -861,8 +859,8 @@ l = l->next; } - if( (pkt->status == -1) || (pkt->status == YAHOO_STATUS_DISCONNECTED) ) { - if (server_msg) { + if( (pkt->status == -1) || (pkt->status == YAHOO_STATUS_DISCONNECTED) ) { + if (server_msg) { PurpleConversation *c; c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, sms->from, account); if (c == NULL) @@ -929,7 +927,7 @@ if (im) im->msg = pair->value; } - if (pair->key == 241) { + if (pair->key == 241) { if(strtol(pair->value, NULL, 10) == 2) msn = TRUE; } @@ -1027,7 +1025,7 @@ if (!strcmp(m, "")) { char *username; - if(c == NULL) { + if(c == NULL) { if(msn) c = purple_conversation_new(PURPLE_CONV_TYPE_IM, account, msn_from); else @@ -1057,7 +1055,7 @@ g_free(m2); /* laters : implement buddy icon for msn friends */ - if(!msn) { + if(!msn) { if ((f = yahoo_friend_find(gc, im->from)) && im->buddy_icon == 2) { if (yahoo_friend_get_buddy_icon_need_request(f)) { yahoo_send_picture_request(gc, im->from); @@ -1527,11 +1525,19 @@ NULL, NULL); } } + +/* We use this structure once while we authenticate */ +struct yahoo_auth_data +{ + PurpleConnection *gc; + char *seed; +}; + /* This is the y64 alphabet... it's like base64, but has a . and a _ */ static const char base64digits[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789._"; -/* This is taken from Sylpheed by Hiroyuki Yamamoto. We have our own tobase64 function - * in util.c, but it has a bug I don't feel like finding right now ;) */ +/* This is taken from Sylpheed by Hiroyuki Yamamoto. We have our own tobase64 function + * in util.c, but it is different from the one yahoo uses */ static void to_y64(char *out, const unsigned char *in, gsize inlen) /* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */ { @@ -1558,605 +1564,270 @@ *out = '\0'; } -static void yahoo_process_auth_old(PurpleConnection *gc, const char *seed) +static void yahoo_auth16_stage3(PurpleConnection *gc, const char *crypt) { - struct yahoo_packet *pack; + struct yahoo_data *yd = gc->proto_data; PurpleAccount *account = purple_connection_get_account(gc); const char *name = purple_normalize(account, purple_account_get_username(account)); - const char *pass = purple_connection_get_password(gc); - struct yahoo_data *yd = gc->proto_data; - - /* So, Yahoo has stopped supporting its older clients in India, and undoubtedly - * will soon do so in the rest of the world. - * - * The new clients use this authentication method. I warn you in advance, it's - * bizarre, convoluted, inordinately complicated. It's also no more secure than - * crypt() was. The only purpose this scheme could serve is to prevent third - * party clients from connecting to their servers. - * - * Sorry, Yahoo. - */ - - PurpleCipher *cipher; - PurpleCipherContext *context; - guchar digest[16]; - - char *crypt_result; - char password_hash[25]; - char crypt_hash[25]; - char *hash_string_p = g_malloc(50 + strlen(name)); - char *hash_string_c = g_malloc(50 + strlen(name)); - - char checksum; - - int sv; - - char result6[25]; - char result96[25]; - - sv = seed[15]; - sv = sv % 8; - - cipher = purple_ciphers_find_cipher("md5"); - context = purple_cipher_context_new(cipher, NULL); - - purple_cipher_context_append(context, (const guchar *)pass, strlen(pass)); - purple_cipher_context_digest(context, sizeof(digest), digest, NULL); - - to_y64(password_hash, digest, 16); - - crypt_result = yahoo_crypt(pass, "$1$_2S43d5f$"); - - purple_cipher_context_reset(context, NULL); - purple_cipher_context_append(context, (const guchar *)crypt_result, strlen(crypt_result)); - purple_cipher_context_digest(context, sizeof(digest), digest, NULL); - to_y64(crypt_hash, digest, 16); - - switch (sv) { - case 1: - case 6: - checksum = seed[seed[9] % 16]; - g_snprintf(hash_string_p, strlen(name) + 50, - "%c%s%s%s", checksum, name, seed, password_hash); - g_snprintf(hash_string_c, strlen(name) + 50, - "%c%s%s%s", checksum, name, seed, crypt_hash); - break; - case 2: - case 7: - checksum = seed[seed[15] % 16]; - g_snprintf(hash_string_p, strlen(name) + 50, - "%c%s%s%s", checksum, seed, password_hash, name); - g_snprintf(hash_string_c, strlen(name) + 50, - "%c%s%s%s", checksum, seed, crypt_hash, name); - break; - case 3: - checksum = seed[seed[1] % 16]; - g_snprintf(hash_string_p, strlen(name) + 50, - "%c%s%s%s", checksum, name, password_hash, seed); - g_snprintf(hash_string_c, strlen(name) + 50, - "%c%s%s%s", checksum, name, crypt_hash, seed); - break; - case 4: - checksum = seed[seed[3] % 16]; - g_snprintf(hash_string_p, strlen(name) + 50, - "%c%s%s%s", checksum, password_hash, seed, name); - g_snprintf(hash_string_c, strlen(name) + 50, - "%c%s%s%s", checksum, crypt_hash, seed, name); - break; - case 0: - case 5: - checksum = seed[seed[7] % 16]; - g_snprintf(hash_string_p, strlen(name) + 50, - "%c%s%s%s", checksum, password_hash, name, seed); - g_snprintf(hash_string_c, strlen(name) + 50, - "%c%s%s%s", checksum, crypt_hash, name, seed); - break; - } - - purple_cipher_context_reset(context, NULL); - purple_cipher_context_append(context, (const guchar *)hash_string_p, strlen(hash_string_p)); - purple_cipher_context_digest(context, sizeof(digest), digest, NULL); - to_y64(result6, digest, 16); - - purple_cipher_context_reset(context, NULL); - purple_cipher_context_append(context, (const guchar *)hash_string_c, strlen(hash_string_c)); - purple_cipher_context_digest(context, sizeof(digest), digest, NULL); - purple_cipher_context_destroy(context); - to_y64(result96, digest, 16); - - pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_AVAILABLE, 0); - - if(yd->jp) { - yahoo_packet_hash(pack, "sssss", - 0, name, - 6, result6, - 96, result96, - 1, name, - 135, YAHOOJP_CLIENT_VERSION); - } else { - yahoo_packet_hash(pack, "ssssss", - 0, name, - 6, result6, - 96, result96, - 1, name, - 244, YAHOO_CLIENT_VERSION_ID, - 135, YAHOO_CLIENT_VERSION); - } - - yahoo_packet_send_and_free(pack, yd); - - g_free(hash_string_p); - g_free(hash_string_c); -} - -/* I'm dishing out some uber-mad props to Cerulean Studios for cracking this - * and sending the fix! Thanks guys. */ - -static void yahoo_process_auth_new(PurpleConnection *gc, const char *seed) -{ - struct yahoo_packet *pack = NULL; - PurpleAccount *account = purple_connection_get_account(gc); - const char *name = purple_normalize(account, purple_account_get_username(account)); - const char *pass = purple_connection_get_password(gc); - char *enc_pass; - struct yahoo_data *yd = gc->proto_data; - - PurpleCipher *md5_cipher; - PurpleCipherContext *md5_ctx; - guchar md5_digest[16]; - - PurpleCipher *sha1_cipher; - PurpleCipherContext *sha1_ctx1; - PurpleCipherContext *sha1_ctx2; - - char *alphabet1 = "FBZDWAGHrJTLMNOPpRSKUVEXYChImkwQ"; - char *alphabet2 = "F0E1D2C3B4A59687abcdefghijklmnop"; - - char *challenge_lookup = "qzec2tb3um1olpar8whx4dfgijknsvy5"; - char *operand_lookup = "+|&%/*^-"; - char *delimit_lookup = ",;"; - - char *password_hash = (char *)g_malloc(25); - char *crypt_hash = (char *)g_malloc(25); - char *crypt_result = NULL; - - unsigned char pass_hash_xor1[64]; - unsigned char pass_hash_xor2[64]; - unsigned char crypt_hash_xor1[64]; - unsigned char crypt_hash_xor2[64]; - char resp_6[100]; - char resp_96[100]; - - unsigned char digest1[20]; - unsigned char digest2[20]; - unsigned char comparison_src[20]; - unsigned char magic_key_char[4]; - const char *magic_ptr; - - unsigned int magic[64]; - unsigned int magic_work = 0; - unsigned int magic_4 = 0; - - int x; - int y; - int cnt = 0; - int magic_cnt = 0; - int magic_len; - - memset(password_hash, 0, 25); - memset(crypt_hash, 0, 25); - memset(&pass_hash_xor1, 0, 64); - memset(&pass_hash_xor2, 0, 64); - memset(&crypt_hash_xor1, 0, 64); - memset(&crypt_hash_xor2, 0, 64); - memset(&digest1, 0, 20); - memset(&digest2, 0, 20); - memset(&magic, 0, 64); - memset(&resp_6, 0, 100); - memset(&resp_96, 0, 100); - memset(&magic_key_char, 0, 4); - memset(&comparison_src, 0, 20); + PurpleCipher *md5_cipher; + PurpleCipherContext *md5_ctx; + guchar md5_digest[16]; + gchar base64_string[25]; + struct yahoo_packet *pkt; + + purple_debug_info("yahoo","Authentication: In yahoo_auth16_stage3\n"); md5_cipher = purple_ciphers_find_cipher("md5"); md5_ctx = purple_cipher_context_new(md5_cipher, NULL); - - sha1_cipher = purple_ciphers_find_cipher("sha1"); - sha1_ctx1 = purple_cipher_context_new(sha1_cipher, NULL); - sha1_ctx2 = purple_cipher_context_new(sha1_cipher, NULL); - - /* - * Magic: Phase 1. Generate what seems to be a 30 byte value (could change if base64 - * ends up differently? I don't remember and I'm tired, so use a 64 byte buffer. - */ - - magic_ptr = seed; - - while (*magic_ptr != '\0') { - char *loc; - - /* Ignore parentheses. */ - - if (*magic_ptr == '(' || *magic_ptr == ')') { - magic_ptr++; - continue; + purple_cipher_context_append(md5_ctx, (guchar *)crypt, strlen(crypt)); + purple_cipher_context_digest(md5_ctx, sizeof(md5_digest), md5_digest, NULL); + + to_y64(base64_string, md5_digest, 16); + + pkt = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, YAHOO_STATUS_WEBLOGIN, yd->session_id); + if(yd->jp) { + yahoo_packet_hash(pkt, "ssssssss", + 1, name, + 0, name, + 277, yd->cookie_y, + 278, yd->cookie_t, + 307, base64_string, + 2, name, + 2, "1", + 135, YAHOOJP_CLIENT_VERSION); + } else { + yahoo_packet_hash(pkt, "sssssssss", + 1, name, + 0, name, + 277, yd->cookie_y, + 278, yd->cookie_t, + 307, base64_string, + 244, YAHOO_CLIENT_VERSION_ID, + 2, name, + 2, "1", + 135, YAHOO_CLIENT_VERSION); + } + if (yd->picture_checksum) + yahoo_packet_hash_int(pkt, 192, yd->picture_checksum); + yahoo_packet_send_and_free(pkt, yd); + + purple_cipher_context_destroy(md5_ctx); +} + +static void yahoo_auth16_stage2(PurpleUtilFetchUrlData *unused, gpointer user_data, const gchar *ret_data, size_t len, const gchar *error_message) +{ + struct yahoo_auth_data *auth_data = user_data; + PurpleConnection *gc = auth_data->gc; + struct yahoo_data *yd; + gboolean try_login_on_error = FALSE; + + purple_debug_info("yahoo","Authentication: In yahoo_auth16_stage2\n"); + + if (!PURPLE_CONNECTION_IS_VALID(gc)) { + g_free(auth_data->seed); + g_free(auth_data); + g_return_if_reached(); + } + + yd = (struct yahoo_data *)gc->proto_data; + + if (error_message != NULL) { + purple_debug_error("yahoo", "Login Failed, unable to retrieve stage 2 url: %s\n", error_message); + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_message); + g_free(auth_data->seed); + g_free(auth_data); + return; + } + else if (len > 0 && ret_data && *ret_data) { + gchar **split_data = g_strsplit(ret_data, "\r\n", -1); + int totalelements = g_strv_length(split_data); + int response_no = -1; + char *crumb = NULL; + char *crypt = NULL; + + if (totalelements >= 5) { + response_no = strtol(split_data[1], NULL, 10); + crumb = g_strdup(split_data[2] + strlen("crumb=")); + yd->cookie_y = g_strdup(split_data[3] + strlen("Y=")); + yd->cookie_t = g_strdup(split_data[4] + strlen("T=")); } - /* Characters and digits verify against the challenge lookup. */ - - if (isalpha(*magic_ptr) || isdigit(*magic_ptr)) { - loc = strchr(challenge_lookup, *magic_ptr); - if (!loc) { - /* SME XXX Error - disconnect here */ - } - - /* Get offset into lookup table and shl 3. */ - - magic_work = loc - challenge_lookup; - magic_work <<= 3; - - magic_ptr++; - continue; - } else { - unsigned int local_store; - - loc = strchr(operand_lookup, *magic_ptr); - if (!loc) { - /* SME XXX Disconnect */ - } - - local_store = loc - operand_lookup; - - /* Oops; how did this happen? */ - - if (magic_cnt >= 64) - break; - - magic[magic_cnt++] = magic_work | local_store; - magic_ptr++; - continue; - } + g_strfreev(split_data); + + if(response_no != 0) { + /* Some error in the login process */ + PurpleConnectionError error; + char *error_reason = NULL; + + switch(response_no) { + case -1: + /* Some error in the received stream */ + error_reason = g_strdup(_("Received invalid data")); + error = PURPLE_CONNECTION_ERROR_NETWORK_ERROR; + break; + case 100: + /* Unknown error */ + error_reason = g_strdup(_("Unknown error")); + error = PURPLE_CONNECTION_ERROR_OTHER_ERROR; + break; + default: + /* if we have everything we need, why not try to login irrespective of response */ + if((crumb != NULL) && (yd->cookie_y != NULL) && (yd->cookie_t != NULL)) { + try_login_on_error = TRUE; + break; + } + error_reason = g_strdup(_("Unknown error")); + error = PURPLE_CONNECTION_ERROR_OTHER_ERROR; + break; } - - magic_len = magic_cnt; - magic_cnt = 0; - - /* Magic: Phase 2. Take generated magic value and sprinkle fairy - * dust on the values. - */ - - for (magic_cnt = magic_len - 2; magic_cnt >= 0; magic_cnt--) { - unsigned char byte1; - unsigned char byte2; - - /* Bad. Abort. */ - - if ((magic_cnt + 1 > magic_len) || (magic_cnt > magic_len)) - break; - - byte1 = magic[magic_cnt]; - byte2 = magic[magic_cnt+1]; - - byte1 *= 0xcd; - byte1 ^= byte2; - - magic[magic_cnt+1] = byte1; - } - - /* - * Magic: Phase 3. This computes 20 bytes. The first 4 bytes are used as our magic - * key (and may be changed later); the next 16 bytes are an MD5 sum of the magic key - * plus 3 bytes. The 3 bytes are found by looping, and they represent the offsets - * into particular functions we'll later call to potentially alter the magic key. - * - * %-) - */ - - magic_cnt = 1; - x = 0; - - do { - unsigned int bl = 0; - unsigned int cl = magic[magic_cnt++]; - - if (magic_cnt >= magic_len) - break; - - if (cl > 0x7F) { - if (cl < 0xe0) - bl = cl = (cl & 0x1f) << 6; - else { - bl = magic[magic_cnt++]; - cl = (cl & 0x0f) << 6; - bl = ((bl & 0x3f) + cl) << 6; - } - - cl = magic[magic_cnt++]; - bl = (cl & 0x3f) + bl; - } else - bl = cl; - - comparison_src[x++] = (bl & 0xff00) >> 8; - comparison_src[x++] = bl & 0xff; - } while (x < 20); - - /* First four bytes are magic key. */ - memcpy(&magic_key_char[0], comparison_src, 4); - magic_4 = magic_key_char[0] | (magic_key_char[1] << 8) | - (magic_key_char[2] << 16) | (magic_key_char[3] << 24); - - /* - * Magic: Phase 4. Determine what function to use later by getting outside/inside - * loop values until we match our previous buffer. - */ - for (x = 0; x < 65535; x++) { - int leave = 0; - - for (y = 0; y < 5; y++) { - unsigned char test[3]; - - /* Calculate buffer. */ - test[0] = x; - test[1] = x >> 8; - test[2] = y; - - purple_cipher_context_reset(md5_ctx, NULL); - purple_cipher_context_append(md5_ctx, magic_key_char, 4); - purple_cipher_context_append(md5_ctx, test, 3); - purple_cipher_context_digest(md5_ctx, sizeof(md5_digest), - md5_digest, NULL); - - if (!memcmp(md5_digest, comparison_src+4, 16)) { - leave = 1; - break; + if(error_reason) { + purple_debug_error("yahoo", "Authentication error: %s\n", + error_reason); + purple_connection_error_reason(gc, error, error_reason); + g_free(error_reason); + g_free(auth_data->seed); + g_free(auth_data); + return; } } - if (leave == 1) - break; - } - - /* If y != 0, we need some help. */ - if (y != 0) { - unsigned int updated_key; - - /* Update magic stuff. - * Call it twice because Yahoo's encryption is super bad ass. - */ - updated_key = yahoo_auth_finalCountdown(magic_4, 0x60, y, x); - updated_key = yahoo_auth_finalCountdown(updated_key, 0x60, y, x); - - magic_key_char[0] = updated_key & 0xff; - magic_key_char[1] = (updated_key >> 8) & 0xff; - magic_key_char[2] = (updated_key >> 16) & 0xff; - magic_key_char[3] = (updated_key >> 24) & 0xff; + crypt = g_strconcat(crumb, auth_data->seed, NULL); + yahoo_auth16_stage3(gc, crypt); + g_free(crypt); + g_free(crumb); } - - enc_pass = yahoo_string_encode(gc, pass, NULL); - - /* Get password and crypt hashes as per usual. */ - purple_cipher_context_reset(md5_ctx, NULL); - purple_cipher_context_append(md5_ctx, (const guchar *)enc_pass, strlen(enc_pass)); - purple_cipher_context_digest(md5_ctx, sizeof(md5_digest), - md5_digest, NULL); - to_y64(password_hash, md5_digest, 16); - - crypt_result = yahoo_crypt(enc_pass, "$1$_2S43d5f$"); - - g_free(enc_pass); - enc_pass = NULL; - - purple_cipher_context_reset(md5_ctx, NULL); - purple_cipher_context_append(md5_ctx, (const guchar *)crypt_result, strlen(crypt_result)); - purple_cipher_context_digest(md5_ctx, sizeof(md5_digest), - md5_digest, NULL); - to_y64(crypt_hash, md5_digest, 16); - - /* Our first authentication response is based off of the password hash. */ - for (x = 0; x < (int)strlen(password_hash); x++) - pass_hash_xor1[cnt++] = password_hash[x] ^ 0x36; - - if (cnt < 64) - memset(&(pass_hash_xor1[cnt]), 0x36, 64-cnt); - - cnt = 0; - - for (x = 0; x < (int)strlen(password_hash); x++) - pass_hash_xor2[cnt++] = password_hash[x] ^ 0x5c; - - if (cnt < 64) - memset(&(pass_hash_xor2[cnt]), 0x5c, 64-cnt); - - /* - * The first context gets the password hash XORed with 0x36 plus a magic value - * which we previously extrapolated from our challenge. - */ - - purple_cipher_context_append(sha1_ctx1, pass_hash_xor1, 64); - if (y >= 3) - purple_cipher_context_set_option(sha1_ctx1, "sizeLo", GINT_TO_POINTER(0x1ff)); - purple_cipher_context_append(sha1_ctx1, magic_key_char, 4); - purple_cipher_context_digest(sha1_ctx1, sizeof(digest1), digest1, NULL); - - /* - * The second context gets the password hash XORed with 0x5c plus the SHA-1 digest - * of the first context. - */ - - purple_cipher_context_append(sha1_ctx2, pass_hash_xor2, 64); - purple_cipher_context_append(sha1_ctx2, digest1, 20); - purple_cipher_context_digest(sha1_ctx2, sizeof(digest2), digest2, NULL); - - /* - * Now that we have digest2, use it to fetch characters from an alphabet to construct - * our first authentication response. - */ - - for (x = 0; x < 20; x += 2) { - unsigned int val = 0; - unsigned int lookup = 0; - - char byte[6]; - - memset(&byte, 0, 6); - - /* First two bytes of digest stuffed together. */ - - val = digest2[x]; - val <<= 8; - val += digest2[x+1]; - - lookup = (val >> 0x0b); - lookup &= 0x1f; - if (lookup >= strlen(alphabet1)) - break; - sprintf(byte, "%c", alphabet1[lookup]); - strcat(resp_6, byte); - strcat(resp_6, "="); - - lookup = (val >> 0x06); - lookup &= 0x1f; - if (lookup >= strlen(alphabet2)) - break; - sprintf(byte, "%c", alphabet2[lookup]); - strcat(resp_6, byte); - - lookup = (val >> 0x01); - lookup &= 0x1f; - if (lookup >= strlen(alphabet2)) - break; - sprintf(byte, "%c", alphabet2[lookup]); - strcat(resp_6, byte); - - lookup = (val & 0x01); - if (lookup >= strlen(delimit_lookup)) - break; - sprintf(byte, "%c", delimit_lookup[lookup]); - strcat(resp_6, byte); + g_free(auth_data->seed); + g_free(auth_data); +} + +static void yahoo_auth16_stage1_cb(PurpleUtilFetchUrlData *unused, gpointer user_data, const gchar *ret_data, size_t len, const gchar *error_message) +{ + struct yahoo_auth_data *auth_data = user_data; + PurpleConnection *gc = auth_data->gc; + + purple_debug_info("yahoo","Authentication: In yahoo_auth16_stage1_cb\n"); + + if (!PURPLE_CONNECTION_IS_VALID(gc)) { + g_free(auth_data->seed); + g_free(auth_data); + g_return_if_reached(); + } + + if (error_message != NULL) { + purple_debug_error("yahoo", "Login Failed, unable to retrieve login url: %s\n", error_message); + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NETWORK_ERROR, error_message); + g_free(auth_data->seed); + g_free(auth_data); + return; } - - /* Our second authentication response is based off of the crypto hash. */ - - cnt = 0; - memset(&digest1, 0, 20); - memset(&digest2, 0, 20); - - for (x = 0; x < (int)strlen(crypt_hash); x++) - crypt_hash_xor1[cnt++] = crypt_hash[x] ^ 0x36; - - if (cnt < 64) - memset(&(crypt_hash_xor1[cnt]), 0x36, 64-cnt); - - cnt = 0; - - for (x = 0; x < (int)strlen(crypt_hash); x++) - crypt_hash_xor2[cnt++] = crypt_hash[x] ^ 0x5c; - - if (cnt < 64) - memset(&(crypt_hash_xor2[cnt]), 0x5c, 64-cnt); - - purple_cipher_context_reset(sha1_ctx1, NULL); - purple_cipher_context_reset(sha1_ctx2, NULL); - - /* - * The first context gets the password hash XORed with 0x36 plus a magic value - * which we previously extrapolated from our challenge. - */ - - purple_cipher_context_append(sha1_ctx1, crypt_hash_xor1, 64); - if (y >= 3) { - purple_cipher_context_set_option(sha1_ctx1, "sizeLo", - GINT_TO_POINTER(0x1ff)); + else if (len > 0 && ret_data && *ret_data) { + gchar **split_data = g_strsplit(ret_data, "\r\n", -1); + int totalelements = g_strv_length(split_data); + int response_no = -1; + char *token = NULL; + + if(totalelements >= 5) { + response_no = strtol(split_data[1], NULL, 10); + token = g_strdup(split_data[2] + strlen("ymsgr=")); + } + + g_strfreev(split_data); + + if(response_no != 0) { + /* Some error in the login process */ + PurpleConnectionError error; + char *error_reason; + + switch(response_no) { + case -1: + /* Some error in the received stream */ + error_reason = g_strdup(_("Received invalid data")); + error = PURPLE_CONNECTION_ERROR_NETWORK_ERROR; + break; + case 1212: + /* Password incorrect */ + error_reason = g_strdup(_("Incorrect Password")); + error = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED; + break; + case 1213: + /* security lock from too many failed login attempts */ + error_reason = g_strdup(_("Account locked: Too many failed login attempts")); + error = PURPLE_CONNECTION_ERROR_OTHER_ERROR; + break; + case 1235: + /* the username does not exist */ + error_reason = g_strdup(_("Username does not exist")); + error = PURPLE_CONNECTION_ERROR_INVALID_USERNAME; + break; + case 1236: + /* indicates a lock of some description */ + error_reason = g_strdup(_("Account locked: See the debug log")); + error = PURPLE_CONNECTION_ERROR_OTHER_ERROR; + break; + case 100: + /* username or password missing */ + error_reason = g_strdup(_("Username or password missing")); + error = PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED; + break; + default: + /* Unknown error! */ + error_reason = g_strdup(_("Unknown error")); + error = PURPLE_CONNECTION_ERROR_OTHER_ERROR; + break; + } + purple_debug_error("yahoo", "Authentication error: %s\n", + error_reason); + purple_connection_error_reason(gc, error, error_reason); + g_free(error_reason); + g_free(auth_data->seed); + g_free(auth_data); + } + else { + /* OK to login, correct information provided */ + PurpleUtilFetchUrlData *url_data = NULL; + char *url = NULL; + gboolean yahoojp = purple_account_get_bool(purple_connection_get_account(gc), + "yahoojp", 0); + + url = g_strdup_printf(yahoojp ? YAHOOJP_LOGIN_URL : YAHOO_LOGIN_URL, token); + url_data = purple_util_fetch_url_request(url, TRUE, YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, yahoo_auth16_stage2, auth_data); + g_free(url); + g_free(token); + } } - purple_cipher_context_append(sha1_ctx1, magic_key_char, 4); - purple_cipher_context_digest(sha1_ctx1, sizeof(digest1), digest1, NULL); - - /* - * The second context gets the password hash XORed with 0x5c plus the SHA-1 digest - * of the first context. - */ - - purple_cipher_context_append(sha1_ctx2, crypt_hash_xor2, 64); - purple_cipher_context_append(sha1_ctx2, digest1, 20); - purple_cipher_context_digest(sha1_ctx2, sizeof(digest2), digest2, NULL); - - /* - * Now that we have digest2, use it to fetch characters from an alphabet to construct - * our first authentication response. - */ - - for (x = 0; x < 20; x += 2) { - unsigned int val = 0; - unsigned int lookup = 0; - - char byte[6]; - - memset(&byte, 0, 6); - - /* First two bytes of digest stuffed together. */ - - val = digest2[x]; - val <<= 8; - val += digest2[x+1]; - - lookup = (val >> 0x0b); - lookup &= 0x1f; - if (lookup >= strlen(alphabet1)) - break; - sprintf(byte, "%c", alphabet1[lookup]); - strcat(resp_96, byte); - strcat(resp_96, "="); - - lookup = (val >> 0x06); - lookup &= 0x1f; - if (lookup >= strlen(alphabet2)) - break; - sprintf(byte, "%c", alphabet2[lookup]); - strcat(resp_96, byte); - - lookup = (val >> 0x01); - lookup &= 0x1f; - if (lookup >= strlen(alphabet2)) - break; - sprintf(byte, "%c", alphabet2[lookup]); - strcat(resp_96, byte); - - lookup = (val & 0x01); - if (lookup >= strlen(delimit_lookup)) - break; - sprintf(byte, "%c", delimit_lookup[lookup]); - strcat(resp_96, byte); +} + +static void yahoo_auth16_stage1(PurpleConnection *gc, const char *seed) +{ + PurpleUtilFetchUrlData *url_data = NULL; + struct yahoo_auth_data *auth_data = NULL; + char *url = NULL; + char *encoded_username; + char *encoded_password; + gboolean yahoojp; + + purple_debug_info("yahoo", "Authentication: In yahoo_auth16_stage1\n"); + + if(!purple_ssl_is_supported()) { + purple_connection_error_reason(gc, PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT, _("SSL support unavailable")); + return; } - purple_debug_info("yahoo", "yahoo status: %d\n", yd->current_status); - pack = yahoo_packet_new(YAHOO_SERVICE_AUTHRESP, yd->current_status, 0); - - if(yd->jp) { - yahoo_packet_hash(pack, "sssss", - 0, name, - 6, resp_6, - 96, resp_96, - 1, name, - 135, YAHOOJP_CLIENT_VERSION); - } else { - yahoo_packet_hash(pack, "ssssss", - 0, name, - 6, resp_6, - 96, resp_96, - 1, name, - 244, YAHOO_CLIENT_VERSION_ID, - 135, YAHOO_CLIENT_VERSION); - } - - if (yd->picture_checksum) - yahoo_packet_hash_int(pack, 192, yd->picture_checksum); - - yahoo_packet_send_and_free(pack, yd); - - purple_cipher_context_destroy(md5_ctx); - purple_cipher_context_destroy(sha1_ctx1); - purple_cipher_context_destroy(sha1_ctx2); - - g_free(password_hash); - g_free(crypt_hash); + + yahoojp = purple_account_get_bool(purple_connection_get_account(gc), + "yahoojp", 0); + auth_data = g_new0(struct yahoo_auth_data, 1); + auth_data->gc = gc; + auth_data->seed = g_strdup(seed); + + encoded_username = g_strdup(purple_url_encode(purple_account_get_username(purple_connection_get_account(gc)))); + encoded_password = g_strdup(purple_url_encode(purple_connection_get_password(gc))); + url = g_strdup_printf(yahoojp ? YAHOOJP_TOKEN_URL : YAHOO_TOKEN_URL, + encoded_username, encoded_password, purple_url_encode(seed)); + g_free(encoded_password); + g_free(encoded_username); + + url_data = purple_util_fetch_url_request(url, TRUE, YAHOO_CLIENT_USERAGENT, TRUE, NULL, FALSE, yahoo_auth16_stage1_cb, auth_data); + g_free(url); } static void yahoo_process_auth(PurpleConnection *gc, struct yahoo_packet *pkt) @@ -2181,11 +1852,10 @@ if (seed) { switch (m) { case 0: - yahoo_process_auth_old(gc, seed); - break; + /* used to be for really old auth routine, dont support now */ case 1: - case 2: /* This case seems to work, could probably use testing */ - yahoo_process_auth_new(gc, seed); + case 2: /* Yahoo ver 16 authentication */ + yahoo_auth16_stage1(gc, seed); break; default: { @@ -2198,7 +1868,7 @@ purple_notify_error(gc, "", _("Failed Yahoo! Authentication"), buf); g_free(buf); - yahoo_process_auth_new(gc, seed); /* Can't hurt to try it anyway. */ + yahoo_auth16_stage1(gc, seed); /* Can't hurt to try it anyway. */ break; } } @@ -2426,10 +2096,10 @@ if(protocol) f->protocol = protocol; - if( !g_hash_table_lookup(yd->peers, who) ) { + if( !g_hash_table_lookup(yd->peers, who) ) { /* we are not connected as client, so set friend to not connected */ if(msn) - yahoo_friend_set_p2p_status(f,YAHOO_P2PSTATUS_DO_NOT_CONNECT); + yahoo_friend_set_p2p_status(f, YAHOO_P2PSTATUS_DO_NOT_CONNECT); else { yahoo_friend_set_p2p_status(f, YAHOO_P2PSTATUS_NOT_CONNECTED); f->p2p_packet_sent = 0; @@ -2565,7 +2235,7 @@ * WHEN WE ARE SERVER: we send val_13 = 0 to yahoo server, peer sends us val_13 = 1, we send val_13 = 5, * receive val_13 = 6, send val_13 = 7, receive val_13 = 7. HALT. Keep sending val_13 = 7 as keep alive. */ - switch(p2p_data->val_13) { + switch(p2p_data->val_13) { case 1 : val_13_to_send = 5; break; case 5 : val_13_to_send = 6; break; case 6 : val_13_to_send = 7; break; @@ -2590,12 +2260,12 @@ yahoo_packet_free(pkt_to_send); if( val_13_to_send == 7 ) - if( !g_hash_table_lookup(yd->peers, p2p_data->host_username) ) { + if( !g_hash_table_lookup(yd->peers, p2p_data->host_username) ) { g_hash_table_insert(yd->peers, g_strdup(p2p_data->host_username), p2p_data); /* If the peer is a friend, set him connected */ f = yahoo_friend_find(p2p_data->gc, p2p_data->host_username); - if (f) { - if(p2p_data->connection_type == YAHOO_P2P_WE_ARE_SERVER) { + if (f) { + if(p2p_data->connection_type == YAHOO_P2P_WE_ARE_SERVER) { p2p_data->session_id = f->session_id; yahoo_friend_set_p2p_status(f, YAHOO_P2PSTATUS_WE_ARE_SERVER); } @@ -2668,7 +2338,7 @@ yahoo_packet_read(pkt, buf + pos, pktlen); /* packet processing */ - switch(pkt->service) { + switch(pkt->service) { case YAHOO_SERVICE_P2PFILEXFER: yahoo_p2p_process_p2pfilexfer(data, source, pkt); break; @@ -2754,7 +2424,7 @@ if(!(p2p_data = data)) return ; - if(listenfd == -1) { + if(listenfd == -1) { purple_debug_warning("yahoo","p2p: error starting p2p server\n"); yahoo_p2p_disconnect_destroy_data(data); return; @@ -2855,7 +2525,7 @@ return ; yd = p2p_data->gc->proto_data; - if(error_message != NULL) { + if(error_message != NULL) { purple_debug_warning("yahoo","p2p: %s\n",error_message); yahoo_send_p2p_pkt(p2p_data->gc, p2p_data->host_username, 2);/* send p2p init packet with val_13=2 */ @@ -2962,7 +2632,7 @@ account = purple_connection_get_account(gc); - if(val_11==0) { + if(val_11==0) { if(!f) return; else @@ -2979,7 +2649,7 @@ p2p_data->source = -1; /* connect to host */ - if((purple_proxy_connect(NULL, account, host_ip, YAHOO_PAGER_PORT_P2P, yahoo_p2p_init_cb, p2p_data))==NULL) { + if((purple_proxy_connect(NULL, account, host_ip, YAHOO_PAGER_PORT_P2P, yahoo_p2p_init_cb, p2p_data))==NULL) { purple_debug_info("yahoo","p2p: Connection to %s failed\n", host_ip); g_free(p2p_data->host_ip); g_free(p2p_data->host_username); @@ -3411,7 +3081,7 @@ i += strlen("Set-Cookie: "); for (;*i != ';' && *i != '\0'; i++) g_string_append_c(s, *i); - + g_string_append(s, "; "); /* Should these cookies be included too when trying for xfer? * It seems to work without these @@ -4272,14 +3942,14 @@ gchar *request = g_strdup_printf( "POST %s/config/cookie_token HTTP/1.0\r\n" "Cookie: T=%s; path=/; domain=.yahoo.com; Y=%s;\r\n" - "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" "Host: login.yahoo.com\r\n" "Content-Length: 0\r\n\r\n", use_whole_url ? base_url : "", yd->cookie_t, yd->cookie_y); url_data = purple_util_fetch_url_request(base_url, use_whole_url, - "Mozilla/4.0 (compatible; MSIE 5.5)", TRUE, request, FALSE, + YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, yahoo_get_inbox_token_cb, gc); g_free(request); @@ -4358,7 +4028,7 @@ PurpleAccount *account = purple_connection_get_account(gc); PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, sms_cb_data->who, account); - if (error_message != NULL) { + if (error_message != NULL) { purple_conversation_write(conv, NULL, "Cant send SMS, Unable to obtain mobile carrier", PURPLE_MESSAGE_SYSTEM, time(NULL)); g_free(sms_cb_data->who); @@ -4380,7 +4050,7 @@ purple_debug_info("yahoo","SMS validate data: Mobile:%s, Status:%s, Carrier:%s\n", mobile_no, status, carrier); - if( strcmp(status, "Valid") == 0) { + if( strcmp(status, "Valid") == 0) { g_hash_table_insert(yd->sms_carrier, g_strdup_printf("+%s", mobile_no), g_strdup(carrier)); yahoo_send_im(sms_cb_data->gc, sms_cb_data->who, sms_cb_data->what, PURPLE_MESSAGE_SEND); } @@ -4430,7 +4100,7 @@ request = g_strdup_printf( "POST /mobileno?intl=us&version=%s HTTP/1.1\r\n" "Cookie: T=%s; path=/; domain=.yahoo.com; Y=%s; path=/; domain=.yahoo.com;\r\n" - "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" "Host: validate.msg.yahoo.com\r\n" "Content-Length: %" G_GSIZE_FORMAT "\r\n" "Cache-Control: no-cache\r\n\r\n%s", @@ -4441,13 +4111,13 @@ use_whole_url = TRUE; url_data = purple_util_fetch_url_request(YAHOO_SMS_CARRIER_URL, use_whole_url, - "Mozilla/4.0 (compatible; MSIE 5.5)", TRUE, request, FALSE, + YAHOO_CLIENT_USERAGENT, TRUE, request, FALSE, yahoo_get_sms_carrier_cb, data); g_free(request); g_free(validate_request_str); - if (!url_data) { + if (!url_data) { PurpleAccount *account = purple_connection_get_account(gc); PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, sms_cb_data->who, account); purple_conversation_write(conv, NULL, "Cant send SMS, Unable to obtain mobile carrier", PURPLE_MESSAGE_SYSTEM, time(NULL)); @@ -4490,7 +4160,7 @@ msn = g_str_has_prefix(who, "msn/") || g_str_has_prefix(who, "MSN/"); - if( strncmp(who, "+", 1) == 0 ) { + if( strncmp(who, "+", 1) == 0 ) { /* we have an sms to be sent */ gchar *carrier = NULL; const char *alias = NULL; @@ -4498,7 +4168,7 @@ PurpleConversation *conv = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, account); carrier = g_hash_table_lookup(yd->sms_carrier, who); - if (!carrier) { + if (!carrier) { struct yahoo_sms_carrier_cb_data *sms_cb_data; sms_cb_data = g_malloc(sizeof(struct yahoo_sms_carrier_cb_data)); sms_cb_data->gc = gc; @@ -4540,7 +4210,7 @@ } pkt = yahoo_packet_new(YAHOO_SERVICE_MESSAGE, YAHOO_STATUS_OFFLINE, 0); - if(msn) { + if(msn) { yahoo_packet_hash(pkt, "ss", 1, purple_connection_get_display_name(gc), 5, who+4); yahoo_packet_hash_int(pkt, 241, 2); } @@ -4587,9 +4257,9 @@ yahoo_packet_hash_str(pkt, 206, "2"); /* We may need to not send any packets over 2000 bytes, but I'm not sure yet. */ - if ((YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt)) <= 2000) { + if ((YAHOO_PACKET_HDRLEN + yahoo_packet_length(pkt)) <= 2000) { /* if p2p link exists, send through it. To-do: key 15, time value to be sent in case of p2p */ - if( (p2p_data = g_hash_table_lookup(yd->peers, who)) && !msn ) { + if( (p2p_data = g_hash_table_lookup(yd->peers, who)) && !msn ) { yahoo_packet_hash_int(pkt, 11, p2p_data->session_id); yahoo_p2p_write_pkt(p2p_data->source, pkt); } @@ -4624,7 +4294,7 @@ pkt = yahoo_packet_new(YAHOO_SERVICE_NOTIFY, YAHOO_STATUS_TYPING, 0); /* check to see if p2p link exists, send through it */ - if( (p2p_data = g_hash_table_lookup(yd->peers, who)) && !msn ) { + if( (p2p_data = g_hash_table_lookup(yd->peers, who)) && !msn ) { yahoo_packet_hash(pkt, "sssssis", 49, "TYPING", 1, purple_connection_get_display_name(gc), 14, " ", 13, state == PURPLE_TYPING ? "1" : "0", 5, who, 11, p2p_data->session_id, 1002, "1"); /* To-do: key 15 to be sent in case of p2p */ @@ -4897,7 +4567,7 @@ group2 = yahoo_string_encode(gc, group, NULL); pkt = yahoo_packet_new(YAHOO_SERVICE_ADDBUDDY, YAHOO_STATUS_AVAILABLE, 0); - if(msn) { + if(msn) { yahoo_packet_hash(pkt, "sssssssssss", 14, "", 65, group2, @@ -5060,7 +4730,7 @@ if (!f) return; - if(f->protocol == 2) { + if(f->protocol == 2) { msn = TRUE; temp = who+4; } else diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo.h --- a/libpurple/protocols/yahoo/yahoo.h Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo.h Tue May 19 06:35:24 2009 +0000 @@ -31,10 +31,12 @@ #define YAHOO_PAGER_HOST "scs.msg.yahoo.com" #define YAHOO_PAGER_PORT 5050 #define YAHOO_PAGER_PORT_P2P 5101 +#define YAHOO_LOGIN_URL "https://login.yahoo.com/config/pwtoken_login?src=ymsgr&ts=&token=%s" +#define YAHOO_TOKEN_URL "https://login.yahoo.com/config/pwtoken_get?src=ymsgr&ts=&login=%s&passwd=%s&chal=%s" #define YAHOO_P2P_KEEPALIVE_SECS 300 #define YAHOO_P2P_SERVER_TIMEOUT 10 #define YAHOO_PROFILE_URL "http://profiles.yahoo.com/" -#define YAHOO_MAIL_URL "https://login.yahoo.com/config/login?.src=ym" +#define YAHOO_MAIL_URL "http://rd.yahoo.com/messenger/client/?http://mail.yahoo.com/" #define YAHOO_XFER_HOST "filetransfer.msg.yahoo.com" #define YAHOO_XFER_PORT 80 #define YAHOO_XFER_RELAY_HOST "relay.msg.yahoo.com" @@ -44,6 +46,8 @@ /* really we should get the list of servers from http://update.messenger.yahoo.co.jp/servers.html */ #define YAHOOJP_PAGER_HOST "cs.yahoo.co.jp" +#define YAHOOJP_TOKEN_URL "https://login.yahoo.co.jp/config/pwtoken_get?src=ymsgr&ts=&login=%s&passwd=%s&chal=%s" +#define YAHOOJP_LOGIN_URL "https://login.yahoo.co.jp/config/pwtoken_login?src=ymsgr&ts=&token=%s" #define YAHOOJP_PROFILE_URL "http://profiles.yahoo.co.jp/" #define YAHOOJP_MAIL_URL "http://mail.yahoo.co.jp/" #define YAHOOJP_XFER_HOST "filetransfer.msg.yahoo.co.jp" @@ -79,11 +83,13 @@ #define YAHOO_STATUS_TYPE_INVISIBLE "invisible" #define YAHOO_STATUS_TYPE_MOBILE "mobile" -#define YAHOO_CLIENT_VERSION_ID "2097087" -#define YAHOO_CLIENT_VERSION "8.1.0.421" +#define YAHOO_CLIENT_VERSION_ID "4194239" +#define YAHOO_CLIENT_VERSION "9.0.0.2152" -#define YAHOOJP_CLIENT_VERSION_ID "524223" -#define YAHOOJP_CLIENT_VERSION "7,0,1,1" +#define YAHOOJP_CLIENT_VERSION_ID "4194239" +#define YAHOOJP_CLIENT_VERSION "9.0.0.2152" + +#define YAHOO_CLIENT_USERAGENT "Mozilla/4.0 (compatible; MSIE 5.5)" /* Index into attention types list. */ #define YAHOO_BUZZ 0 diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_aliases.c --- a/libpurple/protocols/yahoo/yahoo_aliases.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_aliases.c Tue May 19 06:35:24 2009 +0000 @@ -166,7 +166,7 @@ url = yd->jp ? YAHOOJP_ALIAS_FETCH_URL : YAHOO_ALIAS_FETCH_URL; purple_url_parse(url, &webaddress, NULL, &webpage, NULL, NULL); request = g_strdup_printf("GET %s%s/%s HTTP/1.1\r\n" - "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" "Cookie: T=%s; Y=%s\r\n" "Host: %s\r\n" "Cache-Control: no-cache\r\n\r\n", @@ -334,7 +334,7 @@ } request = g_strdup_printf("POST %s%s/%s HTTP/1.1\r\n" - "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" "Cookie: T=%s; Y=%s\r\n" "Host: %s\r\n" "Content-Length: %" G_GSIZE_FORMAT "\r\n" diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_auth.c --- a/libpurple/protocols/yahoo/yahoo_auth.c Tue May 19 06:34:27 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,925 +0,0 @@ -/* - * yahoo_auth.c: Authentication routines. - * - * Written by Kevin Kurtz and Scott Werndorfer - * Copyright(c) 2003 Cerulean Studios - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - * - */ - -#include "internal.h" - -#include "yahoo.h" -#include "yahoo_auth.h" - -/************* - * Ugliness * - *************/ -static const auth_function_t main_function_list[5][96] = { - { - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 }, - { 0, 0x0, 0x0 } - }, - { - { 2, 0x36056cd7, 0x4387 }, - { 3, 0x538920, 0x0 }, - { 3, 0x538a20, 0x0 }, - { 4, 0x55f320, 0x0 }, - { 3, 0x539320, 0x0 }, - { 4, 0x55f340, 0x0 }, - { 2, 0x4abb534d, 0x3769 }, - { 1, 0x1d242da5, 0x0 }, - { 2, 0x3c23132d, 0x339b }, - { 1, 0x191265c, 0x0 }, - { 1, 0x3db979db, 0x0 }, - { 3, 0x539868, 0x0 }, - { 1, 0x1a550e1e, 0x0 }, - { 1, 0x2f140a2d, 0x0 }, - { 2, 0x7c466a4b, 0x29bf }, - { 1, 0x2d3f30d3, 0x0 }, - { 2, 0x7e823b21, 0x6bb3 }, - { 4, 0x55f360, 0x0 }, - { 3, 0x5395a8, 0x0 }, - { 4, 0x55f604, 0x0 }, - { 3, 0x539ba8, 0x0 }, - { 4, 0x5628c4, 0x0 }, - { 3, 0x547818, 0x0 }, - { 4, 0x5628e4, 0x0 }, - { 3, 0x547978, 0x0 }, - { 4, 0x5628a4, 0x0 }, - { 2, 0x5b756ab9, 0x7e9b }, - { 3, 0x539d48, 0x0 }, - { 1, 0x1d1c4911, 0x0 }, - { 3, 0x539f60, 0x0 }, - { 3, 0x53a060, 0x0 }, - { 1, 0x46bd7771, 0x0 }, - { 1, 0x51ae2b42, 0x0 }, - { 2, 0x2417591b, 0x177b }, - { 2, 0x57f27c5f, 0x2433 }, - { 3, 0x53a588, 0x0 }, - { 3, 0x53a688, 0x0 }, - { 1, 0x71422261, 0x0 }, - { 4, 0x55f6a4, 0x0 }, - { 2, 0x58e937f9, 0x1075 }, - { 3, 0x53a7c8, 0x0 }, - { 4, 0x55f6c4, 0x0 }, - { 3, 0x53a8c8, 0x0 }, - { 3, 0x53aa20, 0x0 }, - { 2, 0xb4c3d13, 0x1597 }, - { 4, 0x55f6e4, 0x0 }, - { 1, 0xfe07d38, 0x0 }, - { 2, 0x689b4017, 0x3cfb }, - { 4, 0x562928, 0x0 }, - { 3, 0x547b00, 0x0 }, - { 1, 0x35413df3, 0x0 }, - { 2, 0x5b611ab, 0x570b }, - { 2, 0xda5334f, 0x3ac7 }, - { 1, 0x47706008, 0x0 }, - { 4, 0x55f744, 0x0 }, - { 3, 0x547548, 0x0 }, - { 4, 0x562884, 0x0 }, - { 1, 0x57611b36, 0x0 }, - { 2, 0x314c2cd1, 0x2b5b }, - { 1, 0x1ef33946, 0x0 }, - { 2, 0x28ea041f, 0x638f }, - { 3, 0x53b1d0, 0x0 }, - { 3, 0x53b2d0, 0x0 }, - { 3, 0x53b418, 0x0 }, - { 2, 0x511537cb, 0x7135 }, - { 2, 0x1cf71007, 0x5e17 }, - { 1, 0x583d4bcf, 0x0 }, - { 3, 0x53b550, 0x0 }, - { 1, 0x373e6856, 0x0 }, - { 2, 0x4d595519, 0x1a7d }, - { 3, 0x53b718, 0x0 }, - { 3, 0x53b838, 0x0 }, - { 1, 0xe2a36a7, 0x0 }, - { 3, 0x53bc10, 0x0 }, - { 3, 0x53bd10, 0x0 }, - { 4, 0x55f784, 0x0 }, - { 4, 0x55f7a4, 0x0 }, - { 1, 0x53f3604f, 0x0 }, - { 4, 0x55f7c4, 0x0 }, - { 4, 0x55f7e4, 0x0 }, - { 2, 0x1edc0ba3, 0x7531 }, - { 3, 0x53be50, 0x0 }, - { 1, 0x10df1038, 0x0 }, - { 4, 0x55f804, 0x0 }, - { 3, 0x53bf68, 0x0 }, - { 1, 0x4ede0cac, 0x0 }, - { 2, 0x2f076eeb, 0x5bcf }, - { 1, 0x6d86030f, 0x0 }, - { 1, 0x3f331713, 0x0 }, - { 3, 0x53c0e8, 0x0 }, - { 2, 0x41cd726f, 0x3f79 }, - { 4, 0x55f824, 0x0 }, - { 1, 0xece0054, 0x0 }, - { 2, 0x19b32b03, 0x4ad1 }, - { 4, 0x55f844, 0x0 }, - { 4, 0x55f864, 0x0 } - }, - { - { 2, 0x39731111, 0x419b }, - { 1, 0x54f7757a, 0x0 }, - { 4, 0x55f884, 0x0 }, - { 4, 0x55f8a4, 0x0 }, - { 3, 0x53c240, 0x0 }, - { 3, 0x53c368, 0x0 }, - { 2, 0x3cc0256b, 0x7ce7 }, - { 1, 0x79991847, 0x0 }, - { 2, 0x228f7fb5, 0x472d }, - { 2, 0x32da290b, 0x7745 }, - { 1, 0x7a28180d, 0x0 }, - { 4, 0x55f91c, 0x0 }, - { 4, 0x55f93c, 0x0 }, - { 2, 0x5c814f8b, 0x227f }, - { 3, 0x53c7b0, 0x0 }, - { 2, 0xb496f6d, 0x412d }, - { 1, 0x6f4b62da, 0x0 }, - { 3, 0x53c8b8, 0x0 }, - { 1, 0x64973977, 0x0 }, - { 3, 0x53c9e8, 0x0 }, - { 3, 0x53cae8, 0x0 }, - { 4, 0x55f9d0, 0x0 }, - { 3, 0x53cd28, 0x0 }, - { 3, 0x547230, 0x0 }, - { 1, 0x6dd14c92, 0x0 }, - { 3, 0x53ceb0, 0x0 }, - { 4, 0x560280, 0x0 }, - { 4, 0x56034c, 0x0 }, - { 4, 0x56036c, 0x0 }, - { 3, 0x53d168, 0x0 }, - { 1, 0x5e6324d8, 0x0 }, - { 3, 0x53d2d0, 0x0 }, - { 3, 0x53d3d0, 0x0 }, - { 3, 0x53d798, 0x0 }, - { 4, 0x5605b0, 0x0 }, - { 1, 0x62745ed0, 0x0 }, - { 2, 0x102c215b, 0x581 }, - { 3, 0x53d970, 0x0 }, - { 3, 0x53da70, 0x0 }, - { 3, 0x53dbd0, 0x0 }, - { 2, 0x19511111, 0x12c1 }, - { 3, 0x53dd70, 0x0 }, - { 2, 0x2a6e2953, 0x6977 }, - { 3, 0x53e0d0, 0x0 }, - { 1, 0x55cd5445, 0x0 }, - { 4, 0x560bcc, 0x0 }, - { 4, 0x560bec, 0x0 }, - { 2, 0x646c21eb, 0x43e5 }, - { 1, 0x71dc4898, 0x0 }, - { 1, 0x167519cb, 0x0 }, - { 1, 0x6d3158f8, 0x0 }, - { 1, 0x7ea95bea, 0x0 }, - { 4, 0x560c10, 0x0 }, - { 1, 0x47377587, 0x0 }, - { 1, 0x2d8b6e8f, 0x0 }, - { 2, 0x5e6105db, 0x1605 }, - { 1, 0x65b543c8, 0x0 }, - { 3, 0x540278, 0x0 }, - { 4, 0x560d34, 0x0 }, - { 2, 0x48af73cb, 0xa67 }, - { 1, 0x4fb96154, 0x0 }, - { 3, 0x5406e8, 0x0 }, - { 4, 0x560e38, 0x0 }, - { 1, 0x622c4954, 0x0 }, - { 4, 0x561014, 0x0 }, - { 1, 0x20d220f3, 0x0 }, - { 1, 0x361d4f0d, 0x0 }, - { 1, 0x2b2000d1, 0x0 }, - { 1, 0x6fb8593e, 0x0 }, - { 3, 0x5409e8, 0x0 }, - { 4, 0x561074, 0x0 }, - { 1, 0x2b7f7dfc, 0x0 }, - { 2, 0x5fc41a57, 0x693 }, - { 2, 0x17154387, 0x2489 }, - { 4, 0x561094, 0x0 }, - { 4, 0x5610b4, 0x0 }, - { 4, 0x5610d4, 0x0 }, - { 3, 0x540d18, 0x0 }, - { 1, 0x7e221470, 0x0 }, - { 1, 0x7a600061, 0x0 }, - { 4, 0x561190, 0x0 }, - { 4, 0x5611b0, 0x0 }, - { 3, 0x541218, 0x0 }, - { 4, 0x5611d0, 0x0 }, - { 2, 0xe813a5, 0x2ce5 }, - { 2, 0x3d707e25, 0x3827 }, - { 2, 0x77a53e07, 0x6a5f }, - { 4, 0x562968, 0x0 }, - { 3, 0x547d98, 0x0 }, - { 3, 0x547f10, 0x0 }, - { 1, 0x43a73788, 0x0 }, - { 3, 0x5387b0, 0x0 }, - { 4, 0x55f214, 0x0 }, - { 3, 0x539420, 0x0 }, - { 1, 0x55f4606b, 0x0 }, - { 4, 0x55f380, 0x0 } - }, - { - { 5, 0x55f3f8, 0x0 }, - { 2, 0x32ca58e3, 0x4f9 }, - { 1, 0x11756b30, 0x0 }, - { 2, 0x218b2569, 0x5db1 }, - { 1, 0x77d64b90, 0x0 }, - { 5, 0x562948, 0x0 }, - { 3, 0x547c10, 0x0 }, - { 2, 0x7d1428cb, 0x3d }, - { 1, 0x6f872c49, 0x0 }, - { 1, 0x2e484655, 0x0 }, - { 2, 0x1e3349f7, 0x41f5 }, - { 3, 0x541400, 0x0 }, - { 5, 0x561258, 0x0 }, - { 1, 0x61640311, 0x0 }, - { 5, 0x561278, 0x0 }, - { 3, 0x541588, 0x0 }, - { 3, 0x541688, 0x0 }, - { 3, 0x541988, 0x0 }, - { 1, 0x7044d3, 0x0 }, - { 5, 0x561298, 0x0 }, - { 2, 0x5c221625, 0x576f }, - { 3, 0x541b30, 0x0 }, - { 3, 0x541c30, 0x0 }, - { 1, 0x2d406bb1, 0x0 }, - { 2, 0x680b1f17, 0x12cd }, - { 5, 0x5613a0, 0x0 }, - { 2, 0x12564d55, 0x32b9 }, - { 2, 0x21a67897, 0x6bab }, - { 3, 0x541db8, 0x0 }, - { 2, 0x6405119, 0x7143 }, - { 1, 0x351d01ed, 0x0 }, - { 2, 0x46356f6b, 0xa49 }, - { 2, 0x32c77969, 0x72f3 }, - { 5, 0x5613c0, 0x0 }, - { 3, 0x541fe0, 0x0 }, - { 3, 0x5420e0, 0x0 }, - { 5, 0x5613e4, 0x0 }, - { 3, 0x542220, 0x0 }, - { 5, 0x561404, 0x0 }, - { 2, 0x74d52c55, 0x5f43 }, - { 1, 0x26201ca8, 0x0 }, - { 1, 0x7aeb3255, 0x0 }, - { 3, 0x53ab20, 0x0 }, - { 2, 0x578f1047, 0x640b }, - { 3, 0x542738, 0x0 }, - { 3, 0x542df8, 0x0 }, - { 5, 0x5615a0, 0x0 }, - { 5, 0x561628, 0x0 }, - { 1, 0x4a1352cf, 0x0 }, - { 2, 0x4bfb6ef3, 0x704f }, - { 2, 0x1b4c7fe7, 0x5637 }, - { 2, 0x4091a3b, 0x4917 }, - { 1, 0x270c2f52, 0x0 }, - { 3, 0x5430b8, 0x0 }, - { 5, 0x561748, 0x0 }, - { 3, 0x543220, 0x0 }, - { 5, 0x561768, 0x0 }, - { 2, 0x127549d5, 0x579b }, - { 2, 0xab54121, 0x7a47 }, - { 5, 0x5617f0, 0x0 }, - { 1, 0x751e6e49, 0x0 }, - { 3, 0x543580, 0x0 }, - { 3, 0x543680, 0x0 }, - { 1, 0x670c3f74, 0x0 }, - { 2, 0x6b080851, 0x7e8b }, - { 1, 0x71cd789e, 0x0 }, - { 1, 0x3eb20b7b, 0x0 }, - { 5, 0x561ea0, 0x0 }, - { 3, 0x543848, 0x0 }, - { 2, 0x58a67753, 0x272b }, - { 2, 0x1ab54ad7, 0x4d33 }, - { 2, 0x7d30a45, 0x569 }, - { 2, 0x737616bf, 0x70c7 }, - { 3, 0x543990, 0x0 }, - { 2, 0x45c4485d, 0x2063 }, - { 5, 0x561f38, 0x0 }, - { 1, 0x2598043d, 0x0 }, - { 2, 0x223a4fe3, 0x49a7 }, - { 1, 0x1eed619f, 0x0 }, - { 5, 0x561f58, 0x0 }, - { 1, 0x6f477561, 0x0 }, - { 5, 0x561f7c, 0x0 }, - { 5, 0x561f9c, 0x0 }, - { 3, 0x543bf8, 0x0 }, - { 2, 0x4bc13c4f, 0x45c1 }, - { 1, 0x3b547bfb, 0x0 }, - { 3, 0x543d08, 0x0 }, - { 2, 0x71406ab3, 0x7a5f }, - { 1, 0x2f1467e9, 0x0 }, - { 2, 0x9366d1, 0x22d1 }, - { 2, 0x587d1b75, 0x2ca5 }, - { 2, 0x213a4be7, 0x4499 }, - { 2, 0x62653e89, 0x2d5d }, - { 5, 0x562198, 0x0 }, - { 2, 0x4f5f3257, 0x444f }, - { 2, 0x4c0e2b2b, 0x19d3 } - }, - { - { 2, 0x3f867b35, 0x7b3b }, - { 2, 0x32d25cb1, 0x3d6d }, - { 5, 0x5622f0, 0x0 }, - { 2, 0x50fa1c51, 0x5f4f }, - { 3, 0x544130, 0x0 }, - { 1, 0x5fe7af1, 0x0 }, - { 2, 0x14067c29, 0x10c5 }, - { 3, 0x544298, 0x0 }, - { 2, 0x4a5558c5, 0x271f }, - { 1, 0x3c0861b1, 0x0 }, - { 5, 0x562864, 0x0 }, - { 3, 0x546d50, 0x0 }, - { 2, 0x18837c9d, 0x6335 }, - { 5, 0x56238c, 0x0 }, - { 1, 0x7dab5033, 0x0 }, - { 3, 0x544548, 0x0 }, - { 2, 0x3b87321, 0x7225 }, - { 1, 0x7f906745, 0x0 }, - { 3, 0x544700, 0x0 }, - { 5, 0x5623ac, 0x0 }, - { 1, 0x21c46c2c, 0x0 }, - { 2, 0x2b36757d, 0x28d }, - { 5, 0x5623cc, 0x0 }, - { 3, 0x5448a8, 0x0 }, - { 1, 0x106b4a85, 0x0 }, - { 1, 0x17640f11, 0x0 }, - { 3, 0x544a28, 0x0 }, - { 1, 0x69e60486, 0x0 }, - { 3, 0x547670, 0x0 }, - { 2, 0x3782017d, 0x5bf }, - { 5, 0x5623ec, 0x0 }, - { 3, 0x5480c8, 0x0 }, - { 1, 0x6bca53b0, 0x0 }, - { 3, 0x546af0, 0x0 }, - { 3, 0x546bf0, 0x0 }, - { 3, 0x544d20, 0x0 }, - { 3, 0x544e20, 0x0 }, - { 1, 0xb8236e3, 0x0 }, - { 5, 0x562908, 0x0 }, - { 2, 0x5ee51c43, 0x4553 }, - { 5, 0x56249c, 0x0 }, - { 3, 0x546fd8, 0x0 }, - { 3, 0x5470d8, 0x0 }, - { 3, 0x546970, 0x0 }, - { 2, 0x42b14c6f, 0x5531 }, - { 1, 0x4a2548e8, 0x0 }, - { 2, 0x5c071d85, 0x2437 }, - { 3, 0x5467d8, 0x0 }, - { 2, 0x29195861, 0x108b }, - { 1, 0x24012258, 0x0 }, - { 3, 0x546690, 0x0 }, - { 1, 0x63cc2377, 0x0 }, - { 1, 0x8d04b59, 0x0 }, - { 2, 0x3fd30cf5, 0x7027 }, - { 1, 0x7c3e0478, 0x0 }, - { 2, 0x457776b7, 0x24b3 }, - { 1, 0x86652bc, 0x0 }, - { 2, 0x302f5b13, 0x371d }, - { 3, 0x546548, 0x0 }, - { 2, 0x58692d47, 0x671 }, - { 1, 0x6601178e, 0x0 }, - { 2, 0xf195b9b, 0x1369 }, - { 1, 0x7ba21d8, 0x0 }, - { 5, 0x562544, 0x0 }, - { 5, 0x562564, 0x0 }, - { 1, 0x13ac3d21, 0x0 }, - { 2, 0x5bcf3275, 0x6e1b }, - { 2, 0x62725c5b, 0x16b9 }, - { 2, 0x5b950fdf, 0x2d35 }, - { 5, 0x5625a0, 0x0 }, - { 5, 0x5625c0, 0x0 }, - { 2, 0x73ba5335, 0x1c13 }, - { 5, 0x5625e0, 0x0 }, - { 5, 0x562600, 0x0 }, - { 1, 0x3e144154, 0x0 }, - { 2, 0x4eed7b27, 0x38ab }, - { 3, 0x545c58, 0x0 }, - { 2, 0x627c7e0f, 0x7f01 }, - { 2, 0x5d7e1f73, 0x2c0f }, - { 3, 0x545aa0, 0x0 }, - { 2, 0x55c9525f, 0x4659 }, - { 1, 0x3765334c, 0x0 }, - { 2, 0x5df66ddf, 0x7c25 }, - { 3, 0x545d78, 0x0 }, - { 3, 0x545e78, 0x0 }, - { 1, 0x16ae5776, 0x0 }, - { 3, 0x545ff8, 0x0 }, - { 3, 0x546190, 0x0 }, - { 5, 0x562620, 0x0 }, - { 5, 0x562640, 0x0 }, - { 3, 0x546290, 0x0 }, - { 2, 0x4392327b, 0x7e0d }, - { 3, 0x546398, 0x0 }, - { 2, 0x3d8b0cb5, 0x640d }, - { 2, 0x32865601, 0x4d43 }, - { 5, 0x562660, 0x0 } - } -}; - -static const struct buffer_t type_three_list[NUM_TYPE_THREES]={ - { 0x538920, "\x7a\x61\x31\x57\x9\xbc\x11\x8d\x6a\x12\x3a\x4d\x76\xbf\x19\x86\x2c\xc8\x69\x60\x84\x1\xc9\x21\xb1\xa6\xf\x99\xcd\xa0\x71\x8b\x5f\xb2\xd2\x53\xed\xf9\x55\xa\x50\x14\x15\xad\x88\x52\x5d\xbb\xe\xe5\xd\x56\x3e\x9b\xc7\x17\x9a\x97\x92\x23\x0\x37\xaa\x27\xf6\xb6\x33\xb5\xc5\xd1\x38\x1b\x85\x42\x13\xe1\x64\x1d\x4c\x87\x9f\x3c\x40\xdf\x7b\xd5\xae\xc6\x7c\xec\xd7\x49\x35\x2f\x2b\x9d\x32\xbd\x93\x45\x73\x91\x34\xd4\x39\x1e\x96\x65\xeb\x82\x5a\xf3\xd8\xf1\x41\xce\x9c\xe6\x90\x7d\x6b\x29\x6\xc1\x3d\x4e\xe3\xdb\x48\x6c\x62\x72\x7f\xfe\xdd\xcf\xa1\x24\x4f\xc0\xd0\x3f\x2d\x5c\x78\x6f\x3b\x10\xef\xba\xb\x25\xd6\x1f\x58\x8c\xf8\xcc\xc2\x5\xb3\xfa\xa4\xac\x6e\xf5\x18\x2a\x26\x5e\xf4\x79\xb8\xc3\x16\xe2\xf2\x83\x30\x59\xda\xe9\x36\x7\x46\xa9\xde\x77\xd3\xa3\x98\x8\x1c\xe7\xee\x51\xe8\xfb\x2\xc4\xfd\xff\x22\xaf\x7e\xcb\x68\xc\x28\xe4\x63\xca\x70\x75\xb0\x74\xa7\xea\x20\x4\x4b\xa5\xb7\xf7\xfc\x4a\x47\xf0\xa8\x81\xbe\xe0\x66\x8e\x44\x54\x6d\x80\xb9\x95\x2e\xab\x8a\x1a\x94\xdc\x89\xb4\x5b\x9e\xd9\x8f\xa2\x43\x67\x3" }, - { 0x538a20, "\x28\xeb\x74\xef\xb7\x73\x79\xd1\x46\xcc\xfb\x3b\x91\xc2\x16\xcb\x93\xaf\x51\x88\xb0\x5d\xfa\xfc\xc\xf\xc8\x4a\x53\x17\x8e\xec\x81\x36\xc6\xdc\xbc\x89\xa\x1f\x78\xdd\x76\x6c\x85\xd2\x13\xb9\x3a\x97\xde\x86\x3e\x12\xbe\x68\x23\x6a\x58\xce\xea\xe3\xa8\x5a\x8c\x3\x8a\x9d\xfe\xf3\x47\x63\xdf\x44\xaa\xd9\x24\xf0\x5b\xe2\x9c\xd3\xa9\x2e\xfd\x8b\xbd\xa4\x7a\x42\x5f\x4d\xa2\x48\x83\xcd\xe\x27\x61\xcf\xd\x50\x6f\x49\xae\xc7\x2f\x31\x39\x8f\x11\xdb\xad\x6b\x7f\xb6\x55\x62\x4c\x66\xc4\x75\xf6\x1b\xc1\xf1\x90\x95\x65\x9\xe0\xb4\xbf\xf4\x35\x37\x1c\x67\xe8\xf9\xe6\x56\x99\x22\xc0\xe9\x92\x21\xe1\x7d\x6e\x34\xd4\x8d\x96\x20\x52\xd0\x69\x2d\xf8\x7e\x4f\xb\xac\x71\xa3\xe5\x2a\xa5\xc5\x18\x5e\x6\xca\x2\x4b\x26\xf5\xab\x9f\xe7\x15\x3d\xd6\x4\x8\xee\xbb\x57\x0\x40\xd5\xa7\x1d\x45\xa6\x2c\xff\x9a\x32\x84\x1a\x14\xf7\x80\xd8\x43\x72\x7\x98\x38\x87\x33\xb1\x29\xb3\x7c\x30\xba\x94\xc9\x64\xe4\x1\x77\x3c\x2b\x82\x54\x6d\x9e\xf2\x3f\xed\xc3\x4e\x5c\x60\x70\x19\xa0\xb8\xda\x5\xb2\x10\x7b\x25\xb5\x9b\x59\x41\x1e\xa1\xd7" }, - { 0x539320, "\x9c\x3b\xec\x3e\x7b\x79\x6f\x88\x42\xe6\xe1\x9b\xa3\xd\x83\x86\x7a\xfc\xc5\xb3\xdb\x7c\xf6\xa\xb7\xe7\x3c\x53\x28\x65\xf2\xa9\x6a\xf4\xef\x2c\x3d\xf8\xed\x6\xaf\x31\x75\xab\xf3\x73\xee\x20\x95\x1b\xe\x19\xa8\x5b\xa5\x66\x74\x85\x11\x60\x1e\x2a\x6c\x48\x50\x2f\x9a\x2e\x55\xaa\xcb\x64\x40\x4c\x25\xe9\xd0\xfd\x2d\x46\x8b\x81\x8d\xd2\x32\x4a\xc6\x7\xd6\xbf\xfb\x98\xd4\x76\x7e\xc\xfa\xde\x14\xa6\xd5\xe2\x90\xd1\xeb\xd3\x58\xbb\x5f\x94\xf7\x78\x54\x27\x52\xb6\x22\xea\x8c\xc8\x7d\x87\x12\x9d\xa1\x63\x38\xd8\x35\x2b\xc9\x56\x10\x9f\x1a\x2\xbe\xf1\x59\x17\x9e\xac\x5a\xb8\x1\xb5\x30\xad\xff\xe0\x49\xe8\x23\x4e\x6b\x16\xdc\x4f\x89\x68\x43\xc1\x99\x4\xa7\x33\x92\x84\xa4\x26\x34\x41\x1d\xb2\x91\x61\xc2\x51\x8f\x36\xfe\x5\xa2\xf9\xb\x13\x71\x82\x6e\x5d\xb4\xdf\xdd\x7f\xa0\xcd\x44\xc7\x70\x4d\xf0\x1c\x4b\x45\x57\x37\x3a\xcc\xf5\x8a\xd9\xe4\xbc\x15\xc3\x62\xc4\x39\x72\x47\x97\xbd\x8\xe5\x67\x18\xb1\x77\x8e\x1f\x9\xba\xf\xd7\xb0\x24\xce\xda\x0\x96\xca\x69\x3\x6d\x93\xae\xe3\x3f\x5c\xcf\xc0\xb9\x29\x80\x21\x5e" }, - { 0x539868, "\xf2\xc3\x9\x40\x62\x4b\x94\xd2\xf8\x4a\xdf\xa\xb1\x61\xf9\x9c\x13\x35\x3\xe8\xc4\xf6\x49\x1a\xc\x45\x97\xe\x83\x33\x6d\xa0\x73\xb9\x3d\x9d\xff\x60\xc6\xaf\x68\xb6\x89\x10\xb0\xde\x98\x7f\x8c\x5a\xa5\x1e\x6f\x7c\x17\x12\xd7\xdc\x75\xfc\x20\x1d\x92\xcf\xf1\x16\xd\x50\x41\x39\xab\xeb\x14\x65\xc8\xa4\x99\xb5\x8a\x21\x90\xba\x4d\x3c\xf3\x66\xd1\x96\xf\xac\xa6\x7b\xbc\x8f\xd0\x29\x1f\xb3\xce\xd8\x79\x2\x36\x0\xe5\x91\x5e\xbb\xaa\x52\xc2\x31\x6b\x88\x8b\x9b\x2a\x44\x6c\x2f\x8e\xfb\xa3\x6\x48\xa2\x69\xc9\x28\x43\x47\x37\xef\xb8\x84\xe0\x4f\x30\xae\x56\xb7\x4e\x34\x81\x77\x67\xfd\x74\x93\xcd\x7a\x51\x76\x54\x5b\x2b\x3e\x80\xea\x9f\x15\xe1\x9a\xbf\x38\xfa\x8\x24\x42\xee\x7e\x4\x5f\xa8\xc5\xdb\x4c\x2d\xd9\xca\x19\xcc\xcb\x85\xa1\x32\x25\xec\x64\x57\xad\xf5\xb\x71\x11\x3f\xfe\x58\x1c\xd3\xb2\x72\xf7\x2c\xa9\xf0\x8d\xe9\xbe\x70\xe7\x95\xe6\x6e\x7\x9e\x46\x53\xdd\xed\xe2\xf4\x3b\x22\xc1\x3a\x55\x26\xd6\xc7\xd4\xc0\x27\x5\x7d\x5d\xe4\xd5\x5c\xe3\xb4\x63\xa7\x59\x82\xda\x18\x23\x2e\x1b\x1\xbd\x78\x86\x6a\x87" }, - { 0x5395a8, "\xfa\xb9\xda\x78\xde\x7f\x6\xab\xd7\xb1\x5c\x10\x1b\xf5\x62\x85\xf4\x98\xfb\xb2\xff\x5e\x5\x2b\x81\xd1\x7d\x58\xa7\x6b\x23\x7b\x26\x9f\xa9\xe\x59\xb8\xac\xd9\x64\x6e\x4f\x6a\x2d\x3c\x15\xc7\x63\x42\x54\x9\x90\xf6\xa0\x86\x9d\xea\xcf\x7c\xfe\xc5\xd4\x4d\xa6\xd5\xba\xcd\x5d\x9b\x2a\x6c\xb5\x7a\xbe\xf0\x44\x65\x0\x17\x3\xaf\xed\xfd\x1f\xc2\xd8\x5a\x16\xad\xc3\x35\x43\xbb\xa5\x37\x40\xf\x60\x99\x94\x1e\x89\x68\x88\xc8\xc4\x4a\x66\x24\x55\x3d\x4b\xe2\x1d\x1a\xe8\x19\x5b\xbf\x51\x8c\xae\x8a\x87\x8d\x3b\x22\x82\xd6\x80\x95\xef\x50\x21\xd\xd3\x33\x6d\x2c\xf1\xee\x38\xdc\xc1\x6f\x2\x46\xc6\x7e\x18\xb0\xce\x8\xd2\xb6\x53\x73\xe6\xf9\x3a\x4c\x48\x96\x1c\x70\x8b\x93\x69\xf7\x56\x30\x31\xdb\xa1\x1\xb\x77\xbc\xf2\x8e\x27\xa3\x7\xe4\x3f\xfc\x49\xcb\xe0\x45\x12\x67\x13\xb7\x74\xc\x52\xcc\xdd\x76\x29\x32\x57\xe1\xe9\x8f\xca\xaa\xbd\x71\x2e\x4\x97\xa4\xc9\x79\xdf\x83\xb3\x3e\x72\xc0\xb4\xec\x9a\x14\xa\x2f\x5f\x39\x25\x28\x75\xa2\xf8\x9c\xe3\xa8\x11\x9e\x4e\xd0\xe7\x61\x41\x84\xeb\x20\x36\x34\xf3\xe5\x92\x91\x47" }, - { 0x539ba8, "\x88\x82\x72\x56\xde\xa5\x45\x91\xf9\xe4\xee\x32\x59\x18\xb8\x6f\x79\xc7\xb0\x8c\x11\xd2\xe7\xef\x48\xe6\x20\xa1\x22\x12\xc8\x15\x6a\x8f\x3b\xd5\x3c\xe8\x63\x28\x10\xe9\x2c\xf5\x69\xa7\xf6\xd0\x83\xe0\x80\x81\x46\x29\x38\x2e\xf8\x34\x5b\x1a\x9d\xfa\xa4\x35\x54\xc1\x7e\xe\xae\x7f\x6e\x57\xb4\xbc\xff\x9b\x4a\xb7\x2b\x0\x5f\x31\x6d\x74\xd8\x36\x5c\xc3\xa2\xdf\x3d\xe2\x86\xfb\x5a\xca\x30\x50\x3e\x73\x4e\x9a\x94\xf0\x7d\xc5\x4f\xe3\x66\x39\xeb\x70\x52\x4b\xe5\x71\xc0\x76\x44\xa9\xa0\x7b\x27\xb1\x6c\xf\xc6\x96\xcb\xba\xda\xea\x37\x1c\xac\xb3\xd6\xb9\xbf\xdb\x1d\x8a\xfe\x9\x21\x75\x5d\x97\xe1\x8e\x25\xbd\x2d\xdd\xf7\xcd\x2a\x1e\x5e\x7a\xc\xfd\x9f\x60\x8\x64\xce\xf4\x61\x8d\x9e\xcf\xd4\x49\xb\x67\x1\xf1\x87\x53\x13\xaf\x2f\xa\xec\x3a\xbb\xa8\xbe\xc9\x90\x43\x6\x7c\xb6\xcc\xc2\x4c\x62\xb5\xc4\x77\x3\xf3\xab\xd3\x33\x24\xf2\x55\x6b\x1b\xa3\x2\x4\x23\x16\x14\x95\x3f\x65\xad\x89\x26\x5\x42\xfc\x98\x7\xaa\x19\x9c\xa6\xd\x93\xed\xb2\x8b\x40\xd7\x47\x1f\x99\x78\x17\x92\xd1\x4d\x51\x58\x84\xdc\x41\xd9\x68\x85" }, - { 0x547818, "\x73\x5\xde\x12\xaf\xb4\xaa\x9\x31\xcb\xba\x55\xd3\x1b\xf7\xbe\xd9\x45\x6d\x50\x2d\x74\xfa\x9c\xb3\xb2\xc0\x34\x16\x8d\x3d\x3f\x65\x13\xc8\xe3\xc\xfd\xea\x56\x67\x32\x7b\x24\xd1\xee\xc4\x1f\x3e\x4d\xd7\x33\xd5\xbf\xf\xca\x82\x63\x8b\x60\x86\xfe\x37\x51\x6\xe5\xe8\xe6\x64\x2b\x8a\xbb\xd0\xb8\xb1\xdc\xb9\x8c\x75\x5c\x14\x88\x22\x94\x96\x9d\xb7\x58\x2e\xbc\xc9\xa1\x1\x77\xec\xa2\x2\x6b\xc1\xad\xac\x62\xe1\x9b\x40\xb5\xd6\x78\x80\xc3\x4\x3\x4a\xa0\xeb\x8e\xf5\xc6\xab\xf6\x57\xa5\x8\xcc\x5b\xf2\xff\x2f\xa\x25\xb0\x3a\x7d\xf4\x43\x10\x85\x15\x44\xae\x92\x61\x27\x1c\xce\x19\xf9\xa6\xc5\x48\xe2\x59\xb\x89\xef\xc2\x0\xa8\x5d\x99\x54\xed\x2a\x3b\x4e\x42\xf3\x8f\x2c\x18\x6f\x69\x53\x68\xcd\x29\x6a\x1d\xc7\xf0\xd\x23\x4c\xe\x91\xfc\xe9\xcf\x98\x9a\x52\xfb\x21\x1e\x5f\x30\xda\x9e\x9f\xa9\x7a\x6c\x4b\x39\x7f\x20\x5a\xd2\x83\xdb\x49\x81\x93\x7\x3c\x95\xe0\x70\x26\x41\xa3\x79\x47\xa4\x11\x76\x97\x17\x35\xd8\xf8\x5e\x7e\x71\xbd\xf1\x28\x84\x46\xb6\xa7\xdf\x38\x66\x72\xdd\x90\xe4\x7c\x6e\xe7\x87\x36\x1a\xd4\x4f" }, - { 0x547978, "\x4f\xf2\x63\xe9\xdd\x53\x55\xf0\xf6\x86\x76\xab\x8b\x91\x5\xa9\x5c\x92\xc9\xf3\x24\xdc\x3c\x6\xf4\x54\xb\xad\x28\x46\xaf\x60\xc1\xae\xc2\xec\x74\x84\xb3\xcc\x75\x1b\x34\xa6\xf\x6e\x85\xf9\x44\x69\x3d\x4e\x8e\x1f\xed\x15\x12\x62\xdb\xbd\xea\x68\x50\xfc\x30\xde\x5b\x9b\x33\x99\x8d\x61\x98\x56\x78\x19\xc\xb4\x8f\xc8\x10\xb0\x38\x17\x21\x2a\x5e\xe1\xb1\x81\xbc\x2b\xe3\x94\x7b\x6f\x9a\x7e\x48\x3\xc6\xb5\x65\x43\xaa\x23\x1d\x59\x31\xcf\x1\xb7\xfa\xfe\xbf\x1a\x96\xf5\x87\xac\xbb\xfd\xdf\x82\xd1\x13\x8a\x11\xe4\x40\x0\xc5\x7\xa5\xb6\xd9\x4b\xba\x3b\x93\xa0\x9e\x52\x9c\xe\x14\xd2\x3e\x7d\x9f\xd8\x72\x9\xe0\x39\x27\x77\x97\x29\xd5\x88\x95\xee\x22\x3a\x47\xc7\x16\xc4\x25\xb9\x6d\x8\x2c\x35\x6c\xcd\xb2\x5f\xf8\xff\x41\x18\x3f\xe5\x57\x2e\x67\xc3\x49\x89\x90\xcb\xe6\x26\x4\xa8\xbe\xca\x2f\xfb\xd4\x71\xf7\xda\xe8\x6b\x5d\x79\x70\x1c\xce\x7a\xa3\x2d\x4a\xd7\xe2\xb8\x64\x6a\x51\x73\xa\x37\xa2\xd3\x4d\x80\x5a\xa1\x36\x45\x66\xa4\x20\x58\x4c\xd6\x1e\xd\xeb\xe7\x42\x7f\x9d\xf1\xa7\xef\x32\xc0\x2\x8c\x83\x7c\xd0" }, - { 0x539d48, "\x29\x0\x10\x9\x37\xc0\xb\xa\x91\xc8\xc9\xb6\x8e\x1\x9f\x64\xae\x13\xa6\xb7\x62\x27\xf7\xd0\x9e\x68\xf1\xf9\x15\xdd\x3a\x56\xca\xde\x96\x89\x8\x90\x38\xeb\x99\x57\xb8\xd7\x65\x94\x77\xb1\x16\x45\x5d\x67\x2f\x79\xd5\xcc\xdf\x44\xbe\x31\x8a\xef\x88\x7a\xfb\xa3\xa5\x39\x78\x84\x3\xe8\xbd\x8c\x85\x6f\xb2\x59\x6d\x93\x7\xaa\x36\xee\xe7\x7c\x21\x2b\xc7\x40\x54\xcd\xb9\x1f\x30\x80\xea\xcb\xfd\x20\xbf\x2c\xd\x6e\x73\x4b\xe5\x74\x18\x9d\x3f\xb4\xb3\x50\x81\x9a\xd4\xf3\xf2\x3e\x6b\x1d\x9b\x12\x49\xa1\xcf\x4f\x51\x41\x71\xc2\xd9\xdb\x5a\x97\x6a\xe0\x87\x6\x5\x2d\xf8\x47\x5b\x1b\x69\xc4\xad\xff\x43\x46\x24\xc\x82\x33\x8d\x26\x86\xab\x5c\x61\xe4\x66\xaf\x11\xa0\x42\xa2\x2e\x34\xdc\x25\x4d\xd6\xd2\x63\x70\x22\x83\x19\xa7\x4e\x92\xb5\xf\xda\x55\xed\x7f\x7b\xa4\xfc\x1a\x1e\x8b\xbc\xb0\xc3\x98\xec\x17\x60\xc1\x3d\x8f\x4c\x48\xac\xce\x7e\x72\xd1\x5e\x35\xa8\x32\x4\x1c\xe\x3b\xfa\xbb\xa9\x2a\xf6\xd8\x2\x6c\x23\x76\xe2\x53\xba\x28\x9c\xe1\xd3\x52\xf0\xe9\x7d\xe6\xfe\x58\x14\x5f\xf4\xe3\xc5\x4a\x3c\xf5\x75\xc6\x95" }, - { 0x539f60, "\x5f\xfc\x77\xa1\x39\xa6\x43\xf3\x2b\xbf\xab\x35\x4b\xbe\xad\xcd\xd3\x87\x22\x4f\x62\x3a\x1b\x3c\xef\xb1\x71\xae\x8c\x96\xc4\x86\x38\xf8\xa\xf9\x9b\xfb\x33\x41\xea\x69\x4e\x5c\x42\x58\xcc\x67\xf1\x26\xc9\xf5\xa3\x74\xe4\xbb\x56\x8\x7d\xbd\x99\x72\x80\x5d\xed\x2d\x65\xe6\x9\xa0\xb3\xb5\xc5\xa9\x85\x7\xd\x82\x1f\x9e\xd2\x6f\x2\xaf\x57\x55\x93\x48\x76\xc6\x30\x16\xe0\x60\x51\xf7\x59\x1c\x45\x6c\x4\x92\x32\x7a\xf2\x2f\x4a\x36\x63\x2c\xdd\x70\xd7\x4c\xec\xce\x13\xd9\x89\x97\xc7\x81\x15\xdc\xa5\x7c\x5a\x3\x1a\x2a\x49\xb2\x11\x88\x68\xc1\xb4\x9d\x73\x9a\xc0\x47\x21\x12\xe2\x78\x31\x0\x3e\x6\x6d\xca\xb8\x7f\xcf\x25\xb0\x91\xff\xb\x84\x24\xe9\x8e\xa4\x6b\xc\xac\xe3\x17\xc2\xe7\x6a\xc8\x8d\xf0\x14\xe\x95\xcb\xc3\xd6\x3f\x6e\x64\xfa\xd4\xee\x90\x9f\xe8\xd5\x98\xdf\xeb\xf\x2e\x19\x20\xaa\x44\x46\xbc\x53\x8b\x4d\x3b\x7b\xfd\xa7\x29\x28\x34\xe5\x8f\xb7\xa2\xd8\xa8\x3d\xb9\x5b\x75\xdb\x5\x83\xb6\x50\x5e\x7e\x52\xfe\x37\xe1\x54\x66\x9c\xda\x1d\x40\x10\xba\x1e\x27\xf4\x1\xd0\x18\x94\xde\x8a\x79\x23\x61\xd1\xf6" }, - { 0x53a060, "\x1e\x91\xb3\x15\xe7\xc6\x8d\xfe\xc9\xb5\xa6\xdf\x86\xa\x8e\x2b\x54\xbf\x2c\x1d\xbd\x9e\x5f\xcf\x6\x4d\x14\xf\x9c\x2f\x3f\xe8\x49\x1b\xa7\x4a\x10\x88\x7d\xbe\xb0\x35\x11\xe1\xa4\x6d\x30\x2e\x38\x60\xf6\xf7\xdb\xb7\x33\x75\xc\x20\x77\xa9\x9f\xef\xf4\x9b\x79\xfa\x5e\xd5\x3a\x3e\xe6\x44\xd8\x17\xda\xe5\x31\x78\xde\x39\x19\x93\xb4\xa3\xcb\x48\x9d\x45\x21\xf1\x67\xed\xce\x29\x95\xe0\x55\xc1\xfc\x5c\x82\x5\xd3\x80\x76\xab\x72\xb\x97\xd1\xf3\xea\xae\x34\x2d\x98\x73\xc2\xf5\x26\x8a\x1\x37\xfd\x47\xeb\x5d\x0\x56\x8\x66\x36\xd6\x7b\xb2\xe9\x70\xc7\xa5\x7a\x6b\x4c\xdd\x74\x6a\xbc\x43\xc8\x81\x64\x62\xa0\xd2\xfb\x83\x4e\x53\x1c\x52\xcc\x1a\x59\xd0\x99\xf8\x3b\x5a\x28\x41\xf0\xd9\x40\x90\xc0\x69\x7f\x4f\x8f\x8b\x42\x18\xe2\x57\xb6\xb1\xe4\x16\x61\xbb\x23\xa2\xd7\x1f\xc4\x85\xa1\x7c\x9\x65\x8c\xb8\x58\x7\x22\x12\xdc\x13\xcd\xc3\x89\x2a\xee\x27\x7e\xa8\xe\xba\x3d\x4b\x96\x50\x3\xac\x94\xad\xec\x6f\x5b\x87\xb9\xaf\xd4\x63\xf2\x6e\x51\x84\x68\x92\x25\xaa\xe3\x46\x3c\xc5\x24\x4\xd\xff\xf9\x2\xca\x9a\x71\x6c\x32" }, - { 0x53a588, "\x87\xca\xb5\xe\xb6\xee\x76\xd4\xda\x6a\x2b\x3b\x46\x9e\x44\x1d\x38\x3\xa\xb3\x1b\xf5\xea\x80\x94\xe6\x33\x43\x95\x0\xe1\x5c\x41\xc8\x97\x36\xaf\x34\x53\xb0\x6d\x29\xf9\x32\x2\xd6\x75\xbe\x7\xae\xe3\x6c\xa8\xe5\x4d\x56\x68\xb\xf4\x5d\x51\xc5\x54\x6b\x85\xba\x65\x86\xa7\xa9\x2f\xf1\x28\x5b\x4\x9c\xe7\x3f\x70\xd\xd5\xbf\xac\x5e\xad\x5a\x6\x2d\x30\x45\xd2\x17\x8d\x25\xed\x16\xc7\xd3\xde\x78\x22\x4a\xa0\x20\xe2\x89\x11\xa6\x2e\xff\xfc\xec\xfe\x9d\x18\xfd\x27\x60\xb1\xc0\x81\x99\x69\xa5\x64\x3d\xf2\x39\x1c\x9b\xc9\xc4\x8a\x21\x1f\x57\x4b\x5\x62\xb2\x14\x59\x2a\x12\x5f\xd1\x50\x90\x52\xcf\x1\x9\x4f\x7d\x74\x10\x42\x19\x8e\xe0\x40\x8f\xc2\xc\x82\x6f\xbb\xa4\x63\x55\xd7\x24\xab\x92\xbd\xf8\xcb\x8\xe9\x26\x49\x58\xf3\x1a\xc1\xd9\xdb\x4c\xbc\xb8\x84\xc3\x88\x8c\x98\x77\xeb\xcc\x3c\x83\xdf\xfa\x79\x15\x91\x7e\x3a\xf\x93\x66\xce\xa2\x7b\x37\x9a\x1e\xd0\xa3\x71\x3e\x47\xaa\xb4\x23\x96\xe4\xb9\x4e\x7f\xf0\xcd\x9f\x61\xf6\xfb\x7a\xdd\x73\xb7\x13\x7c\x35\x2c\xa1\xe8\x8b\x31\xd8\x72\xc6\x67\xdc\x6e\xf7\x48\xef" }, - { 0x53a688, "\x62\x6f\x9b\x9c\x31\x48\x4c\xca\xc1\xe6\xa2\x2e\xed\xb4\xe2\xc8\x8f\x45\xc7\x76\x7a\xa5\x40\xb8\x15\x36\x93\x13\xc2\xf6\x17\x2f\xf0\x23\xc5\x95\x79\x1e\xba\xc\x73\x8\x0\x60\xc9\x1f\x54\x58\xc6\xbb\x2c\xb3\x68\x55\xbe\x41\xfa\xc0\x2\xa7\xbd\x78\x57\xa9\x69\x6d\xe4\x12\xe8\x7\x3f\xac\x6c\x16\x4\x87\xb5\xa0\x33\x5e\xe1\x28\xee\x4f\x6b\x50\x99\xaf\x51\xbf\x7c\x7d\x6\x5c\xfe\x6a\x53\x9d\x2a\xd4\x14\x66\xcc\x65\xa3\x3b\xfd\xfc\xf9\x3\xb2\x19\x8e\x91\x49\xdf\x1\x44\xa\x98\x9f\x3a\x80\xf8\xb1\x42\x32\x3d\x22\x37\x8a\x35\xae\xd0\x8c\xdc\xab\xc3\x18\xd9\xe5\x10\x5d\x38\x27\xaa\x52\x3c\xf\x74\xf5\x90\xe7\xec\xd1\x81\x84\x2d\xd5\x8b\x82\x5b\x46\x11\x5\x4a\x4b\xea\x5a\xb\x92\x24\xf4\x1b\x5f\x21\x9e\x7f\xff\x6e\xb6\x8d\xfb\xdd\xcb\x1d\xf2\xe3\xb0\xef\xb7\x4e\x25\x86\xa1\xce\xcd\x72\x34\x64\xd3\xf7\x83\x94\x89\x9a\xd\xd8\x71\x67\xad\xbc\xf1\xa6\x63\x88\xd7\xe\x70\xc4\x20\xde\x3e\xd2\x7b\xb9\x1c\x1a\x39\x30\xda\x59\x47\x43\x29\x9\xe0\xcf\x77\x4d\x75\x97\x56\xdb\x2b\xa4\xa8\x7e\x96\x85\x26\xf3\xd6\xe9\x61\xeb" }, - { 0x53a7c8, "\x84\x5c\x65\xae\x56\xa1\xcc\x60\xa9\x28\x29\xf5\x35\x54\x33\xd1\xd6\x48\x44\x68\x34\xef\xee\xf3\x80\xa5\xcf\x2c\x22\xdf\xac\x53\x18\x2a\x19\xdb\xf1\x3d\xbb\x1b\xc4\xf2\xa6\xbf\x32\x2b\xe7\x8c\xb6\xba\xf8\x8b\x1c\xb7\xfe\x11\x75\xf6\xf7\x59\x76\x9c\xb1\x6e\xb4\xc6\xd\xb2\xb8\xc\x1f\x6\x12\x62\xa0\x47\x74\x5e\xd3\xde\x6a\xe\xaf\xc1\x8d\x57\x7\x89\x0\xa8\xbc\x51\x95\x4d\x97\x98\xfb\x9a\xea\x61\x7d\xe5\x50\x4f\xdd\x52\x64\xe4\x16\x8\x70\xff\x40\xd7\x9\x87\xad\xc7\xf4\x4c\x83\xd2\x63\x6c\xeb\x3\x79\xf\x13\x27\x88\xc5\x8e\x20\x3c\xb9\xf0\xc9\x94\xc3\x96\x1\x67\xb\x3e\x7e\xd8\xd5\x2d\x42\x58\x6f\x6b\xcd\x86\xdc\xab\xed\xfc\x24\xa3\x5d\xe9\x9d\x3a\x38\x8f\x55\x30\x46\xca\xc2\x25\x5f\x66\xc8\xe2\x23\x7a\x6d\xfa\xce\xe6\x36\x45\xb3\xb5\xfd\x92\x1a\x39\x21\x31\xaa\x7f\x71\x9b\xbd\x93\x43\x4\xa4\xd0\x81\x41\xf9\x78\x5a\xa7\x17\xcb\x9f\x3b\x90\x2\xe3\x5b\x69\x1e\xec\xe1\x5\x91\xd4\x4b\x7b\x8a\x77\x4a\x7c\xd9\x82\xc0\x26\xbe\x85\xda\x14\x2e\xa\x9e\x72\x4e\xe0\xa2\xe8\x99\x3f\x37\x10\x2f\x15\x73\xb0\x1d\x49" }, - { 0x53a8c8, "\xfe\x9b\xe5\x18\xb2\x38\x1d\xd4\x98\xa9\x52\x58\xc3\xe1\xe8\xbf\x39\x4a\x36\x9\x6f\x7e\xb0\x4f\xca\xcd\x3\xe0\x66\x1e\xdf\xd2\x59\x95\x71\x2a\x16\xa2\x86\xcf\x64\xf0\xdb\xf3\x8e\x35\x7f\x19\xb1\x33\x90\xbe\xc0\x8f\x5d\x6e\x51\x56\xda\xaf\xa\x25\x54\xd3\x41\xb9\x7d\x82\x62\x97\xfc\x4d\x88\xe3\x57\xff\xb4\xc7\x1c\xbd\x80\xef\xe6\x1\x23\xce\x17\x44\xdc\x67\x26\x6a\xbc\x8d\x45\xb8\xa3\x1f\x9e\x7\x74\xb3\xc9\x0\x9c\x78\xf4\xf1\x32\x49\x14\x73\xc5\x7a\x65\x5b\xf\x42\xbb\xa4\xb\xcc\xe7\x27\x9a\xfb\x55\xd6\xd\xad\xeb\x10\x79\x1a\x2d\xed\xe4\x2e\x5a\x7c\x3f\x3c\x47\xa6\x20\x92\x46\xb5\x84\x7b\x37\x89\xee\x2b\xf8\xa1\x30\x48\x9f\x87\x68\xb7\xae\xa0\x29\xb6\xc6\xf9\x2f\x22\xf6\x43\x83\x5c\x21\x5\xd1\xfd\x6b\x50\x11\x93\x8c\xe2\x28\xa5\x3b\x2c\xba\xd0\xcb\x91\x4c\xc1\x69\x53\x75\x12\x85\xab\x4\xf2\xd8\x34\xf7\xc2\x40\xec\x3d\xe9\xc\xa7\xd7\x8a\xaa\xac\x99\x15\x2\x31\xea\x6\x60\x4e\x72\x70\x94\x63\xfa\xc8\xc4\x3a\x4b\x13\x3e\xa8\xf5\xde\x24\xd9\x6c\x76\x5e\x96\x5f\x1b\x6d\x9d\xd5\xdd\xe\x77\x61\x8b\x8\x81" }, - { 0x53aa20, "\xfc\x7a\xc6\x79\x44\xfa\x78\x60\xb5\xd8\xa\xc0\x19\x5e\x12\xa9\x29\xb3\xcd\x75\xe3\x7b\x3a\xf1\x85\xab\x2f\x33\xe9\xc1\x14\xf0\x96\x82\xf9\x72\x77\xa3\xdd\xc9\x8c\x53\x4e\x1\xd1\x2e\x5\xec\x16\xdb\xd7\xb2\x35\x10\x74\xb1\xf6\xbe\x8a\x15\x50\x92\xe0\x7\xde\x24\x9c\xe7\x22\xda\x5d\xc3\x9e\x42\x59\xb\x11\x4a\xaf\x5f\x76\xd0\x94\x2c\x3f\x48\x97\x99\x2b\x34\x1e\x89\x6b\x23\x30\xce\xc\x8b\xaa\x57\x91\xc7\xea\xf4\xb8\x21\x8d\x3e\x70\x6\xa2\x64\xd3\x9f\xf3\x4b\x13\x2a\x1c\x7d\xee\xa1\xe5\x58\xbf\x98\x3\xfb\x6e\x81\x61\x56\x8e\x71\xa6\x26\x5a\x46\x80\x7e\x9\x37\xa4\x6a\x90\x1b\x1d\x51\x27\x5b\x2d\xba\x4f\xbb\x7c\xa8\x93\xf7\x4\xf5\x68\xd5\xc8\xc4\xef\x36\x84\xe8\xcf\x62\x2\xcc\x67\x49\xb0\x43\xc2\x3b\xa7\xa5\x1f\xfe\xac\x40\xb9\xc5\xae\x6f\xd4\x9a\x95\xbc\x17\x47\x9d\x86\xb7\xfd\xeb\x63\x65\x39\x69\x3c\x55\xe1\x9b\xd2\x66\xdc\x73\xbd\xf8\x83\xff\xf\xcb\x52\xb4\x88\x4d\xe6\x8\x6c\x20\x18\xe2\x45\x25\xe\xf2\x32\xdf\x38\x41\x4c\x5c\x31\x8f\xb6\xed\x0\x54\x28\x3d\xe4\xd9\x6d\xca\xad\xd\x7f\xd6\x87\xa0\x1a" }, - { 0x547b00, "\x72\xf0\x14\xcb\x61\xa5\xb2\x2\x75\x22\xc3\x9d\x5a\x63\xfa\x5f\xd9\x55\x58\x43\x24\x7d\x77\x93\xba\x50\x1d\xf7\x49\x18\xb0\x42\xbb\xec\x52\x38\xdc\xc8\x16\x54\x17\x19\x89\x67\x33\x3c\xa\xad\xc9\xde\x81\xed\xbd\xe\xb\x6d\x46\x30\x35\x2b\x8c\xa0\x1c\xd\xfd\xa1\x70\xc6\xd8\x41\xb3\xc0\x44\xeb\x92\xbe\x6b\x98\x1a\x76\x71\xc5\x51\x56\x80\xfc\x1\x53\x4b\xd0\x8b\xd2\x7b\xe7\x15\x5d\xe5\xa6\x8a\xd3\x9b\xf4\x69\x23\xe8\xb6\xc7\xe2\x73\x9f\x88\xdf\xb4\x28\xee\xc2\x94\xb8\xf9\x7f\x4a\x57\x6\xf6\xbf\xc1\xab\xfb\xa4\x8e\xd1\xd7\xf5\x7c\xa3\x1e\x3b\x32\x3\xaa\x90\x5c\x48\xe0\xe3\xcf\xd4\xef\x59\xd5\x1b\x34\x1f\x95\xce\x7a\x20\x26\x87\xb7\x78\x9c\x4f\xa2\x12\x97\x27\x3f\xff\x7\x84\x96\x4\xaf\xa8\xea\x2c\x6c\xae\x37\x91\xa9\x10\xdb\xcd\xda\x8\x99\xf1\x4d\xcc\x68\x79\x2e\xb1\x39\x9e\xe9\x2f\x6a\x3d\xf\x85\x8d\xca\x29\x86\xd6\xdd\x5\x25\x3a\x40\x21\x45\xac\x11\xf3\xa7\x9\x2a\x31\xe4\xc\xf8\x6e\x3e\xb5\x82\xfe\x74\x13\x65\xe1\x2d\x8f\xe6\xc4\x0\x5b\x4e\xb9\x66\xf2\x62\x36\x4c\x83\x5e\x6f\x47\x64\xbc\x9a\x60\x7e" }, - { 0x547548, "\x7c\x11\x4d\x5b\x41\x55\x97\x3f\x59\xed\xda\x6f\x85\x33\x16\xc8\xb1\x18\x50\x6c\x9c\x38\x2\x71\x2e\xec\x93\xa1\xa5\x0\x91\xaf\x7a\x92\x1b\xc7\x3a\xa9\xbe\xb6\x9b\xe5\xee\x57\xf1\x99\x47\x4\x6b\xd8\x20\xf4\x3\xd3\x75\xe3\xb8\xdc\x7\x54\x4f\x2d\x37\x49\x14\x9f\x69\xc4\xf7\xc6\xf0\xce\x24\x7b\x7e\x89\x4e\x3c\x7f\xcc\x9\xe6\x2f\x61\xfc\xcd\x86\x62\x83\x56\x29\xd6\x32\xc\x76\xc1\x5c\x68\x51\xf3\xa8\xe2\x87\xcb\xe0\xdb\xb\xba\xe4\x46\x9a\x84\x95\xf\x10\x81\x82\x53\x1c\x26\xc2\x31\xb0\x8c\xb3\x9d\xd9\x96\x5a\x79\xd1\xb2\x25\x80\x1f\xa4\xff\x60\x44\x1a\xb9\x45\xf9\xd2\x6e\xd0\x5e\x35\x98\x66\xc3\x90\xae\xa0\x78\xb5\x34\x2c\x12\xf5\xcf\xaa\xe9\x77\x8b\x70\xde\xeb\x65\xbb\x72\xa6\x88\x58\xa2\x27\xc5\x4b\xbc\x19\xdf\x36\x1e\xa\x74\x15\x17\xbd\x22\xe7\xac\xf6\xf2\x30\xe8\x13\x1\xef\x8f\xd4\x2b\x23\x48\x5f\x21\x3d\x73\x8\xa7\xd\xfd\x63\x67\x4a\x8e\x6a\xd7\xb4\x3b\x40\xc9\xfa\x64\x39\x7d\xea\xab\xfb\xd5\x8d\x42\x8a\x6d\xca\x94\xc0\xe1\xad\xbf\xa3\x9e\x28\x3e\x1d\x43\x6\xb7\x52\xe\x2a\xfe\xf8\x5d\x4c\xdd\x5" }, - { 0x53b1d0, "\xf\x8\xef\x6c\x8f\x19\x5e\x9c\xdb\xec\x35\x6f\xe9\x5\xe0\xd\xf3\x17\xa2\xb3\xcf\x28\x46\xe1\xa0\x6\x4e\x38\x4d\x25\x3f\xb5\x12\x80\xb2\xa7\x3\xbc\xca\x41\x6b\x2f\x1d\x4b\x66\x6a\x68\xaa\xc4\x77\xa4\x59\x4\xbe\xc9\xb9\x7b\xd1\xc5\xde\x57\x85\xa9\xcc\xc8\x6e\x78\xb\x82\x2\x5f\xae\x51\x7f\x2d\x8c\xee\xcb\x69\x62\x67\x81\x87\x5c\x1f\x8b\x74\xa5\xe\xf2\x5b\xc0\xc2\x18\xe5\xfd\x95\x65\x20\x97\x58\xc6\x3b\xb7\x9\xdc\x21\x11\xe4\xe3\x16\xa8\x63\xf6\x33\x6d\x8d\x9e\xb6\x34\x7\x14\x36\x71\x60\x45\xfb\x4a\x9a\xea\x1b\x90\x31\xb0\x99\x1c\xd3\x7c\x24\x47\xe2\xdf\xe8\xc7\x29\x30\x1\x2b\xd4\x8e\xb8\xd6\x7e\x2a\x7a\x3d\xf4\xdd\xd0\xb1\xf0\x73\xab\xbb\xa6\xf7\x3a\x1e\xba\x52\x4f\xbd\x4c\xb4\x72\xc1\xe7\xfa\x1a\x54\xf5\xac\xff\x5d\x40\x37\xd9\x43\x23\x93\xa1\x3c\x79\xad\x44\x76\xed\xaf\x84\x94\x49\x50\x91\x10\x70\x5a\xce\xc\xd8\x0\xfe\x92\xd5\x55\x56\x2e\xeb\x89\x13\x88\xc3\x64\xe6\x75\xa3\xf8\xf9\xa\x9f\xcd\x61\x83\x96\xfc\x22\x9d\x7d\x2c\x53\xd2\xbf\xd7\x39\x3e\xf1\x48\x8a\x15\x42\x98\x27\xda\x26\x32\x9b\x86" }, - { 0x53b2d0, "\xab\xdf\x86\xff\xce\xfa\xaa\x1\xd2\x41\x9e\xe7\xbc\xc0\x77\x22\xe8\x7c\x4e\xfb\x8e\xf3\x33\xc9\x4b\x26\x60\x89\xc4\x69\x79\x96\x54\xcd\x10\x48\x23\x31\x38\x44\x82\xe5\x6a\x8\xd7\x3f\xe1\x28\xd3\xa6\x4c\x7\x34\x5b\x7f\xb0\xd\x81\xd0\xf\xc1\xaf\xcc\x3d\x99\x19\x24\x57\xb4\x2c\x8d\x7d\x58\x55\x27\x8a\x42\xb\xa2\xca\x53\xc5\xe0\xf4\x4f\x2f\x8b\x21\x2\x2d\x12\x65\xf5\xf2\xc8\xed\x1d\x47\x5c\x1c\xa8\x40\x7a\x8f\xda\x87\xd5\xb1\x4\x70\xea\xe\xeb\x29\xb5\xb8\x9f\xf8\x2a\x3b\xb3\xfd\x5d\x0\x71\x2e\xc2\x46\xec\x92\xf9\x6\x74\xe4\x6d\xa0\x59\x6e\x25\xa9\x7b\x5f\xe2\x64\x3e\x37\xfc\xd4\x9b\x5\x61\x84\x20\xa\xc6\xa7\x76\x83\x62\x32\xa3\x6f\xc7\x78\xa5\xf6\x30\x6c\xdc\xa1\x2b\xbd\xae\x15\x3a\xf1\x4d\x45\x5e\x75\x98\x68\xad\x1b\xd1\x49\x35\x6b\x52\x14\x1a\x11\x88\xbe\x8c\xac\xc\xe3\x66\x13\xd9\x17\xcf\xdd\x93\xbf\x39\x56\xf7\x18\x94\x63\x3\x1f\xd8\xb6\xcb\xf0\x9d\x9\x16\xe6\x90\xa4\xb2\xba\x85\x3c\xd6\xfe\x36\x50\xc3\x43\x80\x1e\xb9\xee\xb7\x9a\x51\x9c\xdb\xef\x67\xde\xe9\x7e\x97\xbb\x5a\x72\x4a\x73\x95\x91" }, - { 0x53b418, "\xc6\xcb\x61\x7f\xb\x44\x1c\xea\xc1\x87\x7d\x4e\xd4\x23\xbc\x82\x10\xa7\x3e\xaa\xbf\x46\xb2\xd2\xa3\x33\x20\x27\xc0\x9f\xe2\x45\x6b\x96\x6\x8b\x1d\xb7\x26\x56\x88\xc3\x13\x2b\x15\x37\x9e\x57\xe5\xc8\x21\xa9\x92\x2\x38\xfe\xd7\xba\x9a\xc7\x5a\x84\x28\x58\xfb\xa8\x90\x42\xf4\x3d\xfa\xdc\xa\x4c\x48\x8f\x8e\x39\x3b\x63\x5\x79\x4a\x2c\x65\x71\xe\xdb\x29\xe0\x50\x1\x8d\x19\x31\x94\xd\xb4\x9c\x6c\xb3\x68\xc2\x2e\xce\x97\xe6\x2d\xcf\x36\x91\x1f\x7a\xf\xc4\x8a\x5d\x9b\xad\xfd\x93\xd8\x3f\x9d\x64\x85\x4d\x99\x69\xd5\xd1\x18\x1a\xd9\x12\x2f\xf5\xf2\xda\x80\x51\x1e\x4\x60\x7c\xd6\x86\x54\x62\xac\x5b\x17\xf8\x66\xa4\x43\x49\xff\x0\xe1\x9\xb9\xed\xdf\xd3\x55\x72\x16\x4f\xe9\xe3\xab\x81\xe8\x2a\xcd\xb1\x53\x77\x75\xb0\xdd\xc5\x67\xf3\xa6\xe4\x34\x3a\x40\x1b\x83\x6f\xef\xa5\xa2\xca\x73\xb5\x47\x8\x76\x11\xc9\x3\x3c\xf7\x6a\x25\x41\x30\xf9\xaf\x5c\x95\xa0\xb6\x35\x78\xbe\xd0\x14\xec\x59\xbb\x70\x5e\x74\x6e\xb8\xae\x7e\xfc\x7\x6d\x52\xe7\x32\x8c\xcc\xeb\xf1\x89\x7b\xbd\xa1\xf0\xc\x98\x24\xf6\x5f\xde\x22\x4b\xee" }, - { 0x53b550, "\xa0\xb9\x6e\x86\xd9\x98\x97\x73\x25\x76\xf\xcc\x7\xe8\x7a\x79\xb5\xe5\x38\xf4\xc2\x16\x10\x2f\xa2\xec\x3a\xb0\xdf\x5f\xb4\x6a\xb1\x60\xd4\x3e\xd2\xde\x6\x95\x62\xd5\xab\x9\x13\x11\x92\xa6\x37\xa\x2c\x64\xf1\x80\x1b\xfc\x31\x22\x3b\xff\x94\x70\xca\x84\x24\xdd\xd7\xd3\xb2\x32\x3d\xb6\xb7\xa9\x26\x9b\x48\xc0\x1f\xaf\x83\x6c\x58\x29\xc3\x7d\xc5\xf3\x8d\xb\x8a\x2a\x69\x1d\x91\x7e\x9c\x3\xb8\xf2\x9f\x45\x28\x4c\xbb\xcb\x2b\xfd\x61\x7f\xb3\x99\x6b\xbc\x7c\x19\x52\x2\x78\xea\x5c\x49\x74\xa7\xc7\x59\xf6\xf0\x8f\x81\x82\x8c\x1\xf5\xc4\xad\x21\xa5\x0\x5a\x39\x75\xd8\xc\xc1\x85\x17\x5b\x77\x43\xc6\x89\xa1\xf9\x20\x93\xee\x12\x1e\x1a\xe1\x57\xf7\x4\xae\x18\xcf\x33\x47\xfe\xe9\x8\x71\x65\xbd\xd\xcd\x6d\xe4\xac\xba\xdc\xd0\xf8\x4e\xe0\x8e\x5d\x41\x3f\x54\x42\xa4\x40\x34\x5e\x87\x7b\xe3\xdb\xe7\x51\xd6\x9a\xaa\xce\xbe\x36\x67\x35\xd1\x68\x4f\xfa\x23\xfb\xed\x8b\x44\x9d\x50\xeb\xc8\x14\x15\xe6\xc9\xe\x88\x4d\x66\xa8\x5\x3c\x46\x2e\x27\x6f\x72\xbf\xa3\x2d\x96\x9e\xda\xe2\x63\x1c\x53\x55\xef\x56\x4b\x90\x4a\x30" }, - { 0x53b718, "\xd4\x58\xf7\x7\xc3\xfd\x69\x49\x23\x17\x65\x84\x9b\xf\x77\x97\xb\xc4\x67\xb1\xbd\xba\x85\xc7\xff\x8f\x32\x28\xea\x6b\xd7\x9f\x31\xab\x9e\x5b\x11\xa8\x36\x8\x96\xa4\x4f\xa2\x70\xed\xd3\x91\x2a\xd9\x73\x6\xb4\xaa\x35\x72\x48\xf3\x0\x1e\xc0\xdf\x2e\x29\xdd\xb7\xa\xd\xaf\x2f\x56\x19\xc\x39\x5c\x46\xec\xac\xfc\x7d\xe6\x92\xf2\x15\xa3\x5d\x93\x3d\x98\x2d\x79\xb0\x52\x5f\xb3\x89\x3\x4\x1d\x55\x42\xcc\xe9\x83\x16\x80\xd2\x8e\x5a\x66\x1b\x47\xfa\x88\xa7\x9a\xd1\x25\xf8\x44\xe2\x26\x59\x9\x61\x40\x3c\x34\xd8\x30\x45\xbb\xc6\x7f\xe7\xbc\x7b\xa9\x3a\x1c\xe5\x68\x21\x5e\xb2\x12\x2c\x74\xcf\x8a\xb9\x24\x1\xcd\xe4\xb5\x9d\x1f\x18\x3b\xe0\x71\x4e\x4b\x4d\x62\xa0\xd0\xc2\xd6\xeb\x43\x51\xf9\xa6\xf4\x2\x90\x1a\xa5\xef\x5\x7c\xb8\x57\xc1\xfb\x8d\xde\x50\x33\xf5\x82\x86\x3e\x76\xc9\x8c\xa1\x8b\xc5\xee\xbe\xe3\xda\xae\x14\xf1\x6f\xe1\xd5\x10\xf6\x27\xfe\x6d\xce\x9c\x6e\x94\xe8\xb6\xca\x60\x37\x53\xe\x54\x3f\x99\x75\x81\x20\xcb\x4c\x7a\x6c\x38\x78\xdb\x64\x95\x6a\x13\x4a\xf0\xbf\x22\x41\xdc\x87\xc8\x7e\x63\x2b\xad" }, - { 0x53b838, "\xe3\x57\xc6\x8b\x64\x27\x80\x87\x9b\x49\x29\x6e\xa8\xda\x5b\x20\xbb\x69\x19\xd3\x5e\x30\x9e\x9d\x24\xcd\x2c\x1c\x79\xb\x9f\x8d\xff\x41\x6f\x68\xbd\xd9\x55\xcf\x36\xe6\x5f\x93\x99\x33\xe1\x72\xf2\xe\xd2\xe2\x2e\xd7\xa7\x32\x31\xa2\x25\xfd\xef\x67\x21\xe4\x2d\x3e\xd0\xac\x34\x35\xf1\x44\xee\x5a\x83\x71\xc1\x59\x3f\xa3\x10\xfb\xa6\xcc\x0\x40\x18\x3b\x9a\x47\xfa\xa5\x66\x5d\x6a\x2f\x16\x23\x88\x7a\x84\xc5\xc9\xea\xce\x58\xeb\x11\xaf\x5\x37\x89\x17\x1a\xe5\xb8\xa\xc0\x95\x48\x81\xb7\xf\xf6\x7e\x60\x8f\x8\xd5\x42\xd1\xf8\x45\x2b\x5c\x1b\x76\xf0\xc8\xf4\x3\x7d\x50\xb5\x86\xb3\xe0\x7b\x3a\x1f\xdc\x92\x28\xca\x61\x4a\x78\x1e\x51\xdd\x3d\xbc\x77\xd8\x53\xf9\x94\x74\xc3\x9\x4f\xb6\xec\x2a\x91\x8c\xd4\x38\x4e\x26\x1d\x96\xdf\x4\xd\xab\xa4\xfc\xc4\x15\xa9\x3c\x97\x6b\x7\xde\x9c\xe8\x22\xe7\x2\x6d\xa1\x39\xf3\x54\xba\x6\x65\x90\xb0\x6c\x63\xad\xf5\xb4\xb9\xc\xe9\x1\xc7\xd6\xc2\xb2\x56\xbe\xaa\xb1\xcb\x52\x82\x14\xed\x7c\xfe\xae\x85\x8a\x13\xbf\x4c\x98\x4b\x62\x12\xa0\x4d\x7f\x73\x8e\x43\x75\xf7\x46\x70\xdb" }, - { 0x53bc10, "\xf\xc6\xa1\xa3\x50\xbd\xce\xa7\x9\xa4\xf7\x1b\x8c\x3d\xf0\xe5\xdf\x3c\x20\x75\x3f\xdd\x12\x81\xde\x3b\xaf\x68\xf6\xea\x41\x58\xeb\x5d\xae\x61\xa\x46\xed\x91\x23\x65\x99\x86\x27\x92\x8e\x83\x51\x8\x4b\x3e\x32\x1f\xbf\x5b\xa9\xc5\xfe\x7c\xf4\x15\xdc\x89\xf5\x2b\x72\xad\x6b\xba\x5a\xf2\x24\x53\xe7\x29\xee\x4\xd\xf3\xe0\xb7\x67\xcf\xb0\xc3\xbc\xc9\xfa\x66\xcd\xb4\xd5\xd9\x71\xe3\xb8\xa0\x25\xf8\x78\xc4\x5\xe9\x87\xfd\x35\x1a\x98\x9f\x16\xb3\x6\x26\x22\xb2\xd6\x74\xc7\x84\xc2\x7d\x64\xec\x54\x37\x4c\xef\x70\xe\x48\x9b\x4e\xd7\x80\x7\x73\xbe\xd3\x2\x3\x94\xfc\x59\xb5\x8b\x21\x9d\xf1\x69\xe1\x10\x38\x2d\xd2\x45\x30\x42\x85\x6e\x52\xc\x76\x82\x6d\xa6\xd4\xe4\x90\xa2\x62\x7e\x1\xe6\x1d\x4a\xff\x8d\x79\x8a\x55\x77\x2f\xca\x9e\x47\x19\x6c\x28\xb6\x93\x97\x6a\x18\x5c\x4f\x95\x6f\xc0\x14\x40\xdb\xa8\x17\x34\x36\x39\x56\x11\x13\xd1\xc8\xcc\x1e\x2c\x5f\x43\x5e\xa5\xe8\xd0\x9a\xe2\xab\xf9\x4d\x3a\xaa\x1c\xb\x2a\xb9\x31\x7a\x60\xac\xfb\xb1\x44\x0\x88\x8f\x33\xc1\x7b\x49\x2e\xda\x63\xd8\x96\x57\xcb\xbb\x7f\x9c" }, - { 0x53bd10, "\xba\x9d\x27\x84\x89\xcd\x60\x67\x68\xd9\x1f\xea\xf2\x15\xd2\x6\x12\x5d\x54\x75\xbc\xa0\x29\xe8\x16\x70\xc8\xf1\x9\xa4\x26\x30\x49\xd\xbd\xf4\xf8\xef\x8d\x1d\x41\x38\xf7\x9c\x1e\x87\xf3\xbe\x7a\x37\x88\xcb\x36\xe6\xfc\xd6\xd0\xad\x78\x71\x93\x96\xf0\x3c\xfe\x57\xe9\x4f\x7d\xaa\xf9\x62\x9a\xab\x18\x39\xbf\xc\xc3\x4d\xe7\x97\x7f\x8a\x3f\x1\xc9\x80\x76\x9e\xfb\xa1\x3e\xfa\xb3\x45\x3b\xdc\x5c\x5b\x58\x61\x2b\xec\xb4\x55\x1a\x9f\x6a\x3\x11\x32\xd1\xe1\xb2\xa8\x6c\xe4\xa3\xa7\x4b\xf5\x17\x40\x6e\x8\xff\x81\x4c\x5\x79\xae\x1c\x83\x46\x25\x6b\xdf\x24\x64\x2e\x4e\x21\x31\x2\x73\x6f\x3a\x8b\xc4\x7b\xac\x23\x72\x20\x65\x7\x33\xa2\xe0\x47\x77\x85\x2d\xdd\x0\xf6\xd8\x9b\xb9\x63\xd4\x53\xaf\xb7\xda\xa5\xc5\xc6\x2f\xa\x6d\x92\xb8\x50\x74\xbb\x14\xd3\xf\xb0\x4a\x95\xe3\xce\xee\xca\xe\x91\x82\x8c\x3d\x8f\x22\xa9\xb1\x86\xc0\x5f\x28\x90\xdb\x7c\x4\x94\xb\xc7\xd5\xfd\xc2\x2a\x1b\x98\xed\xcc\x59\x8e\xe5\xe2\x42\xb6\x34\xd7\xa6\x13\x2c\xc1\x44\x51\xcf\x99\x48\x69\xeb\x7e\xb5\x52\x35\x19\x66\x10\x56\x5e\x43\xde\x5a" }, - { 0x53be50, "\x64\xe7\x66\xd5\xf\xc3\xc8\x20\x4e\x9\xd3\x30\x3f\xef\xa9\x80\xe3\x72\x42\x68\xa5\x51\x99\xb\xbf\x4d\xd1\x34\xaa\xdf\x2f\xec\x55\x58\xb0\xdb\xb8\xd6\xc5\x9b\x9a\xa\xbb\x40\xc2\xb2\x2e\x78\x89\x97\x5d\x74\xf7\x52\x5b\xa1\x2b\x83\xae\x7b\xd9\x5e\xfe\xfd\x98\xd2\x29\x13\xc6\x8e\x5c\xca\x7\xd4\xe4\x49\xa8\xa0\xff\xee\xc9\xcf\x16\xb4\x61\x8f\x60\x1\x84\xb5\xac\x62\x54\x6\x2d\x63\xa7\x48\x73\x1e\x92\x2c\x3c\x82\xe1\xcb\x10\xf2\xd8\x50\xf1\xfb\x96\xc\xd7\x6b\x87\x77\x7e\x15\x8a\xde\x31\xe\xab\x59\xd\x3b\xf3\x79\x1f\xfc\x81\x27\x1a\xf9\x94\x2a\x45\x88\xfa\x47\xe9\x7d\xb7\xed\x7c\x32\x7f\xe2\xbd\x6f\x18\x76\x4b\x65\x70\x22\x1d\xaf\xeb\x28\x4f\x9c\xbc\xf8\xcd\xc0\x1b\x43\xb1\xea\xa3\x6c\x12\x35\x44\x8d\x25\xb3\x1c\x24\xc4\x9d\xa2\x36\x56\xb9\x19\xe8\x21\x11\xf0\x75\x5\x17\xc7\xce\x41\x4\x4a\xe0\x6e\x67\x69\x4c\xdd\x53\x3e\xa6\xd0\x3d\xdc\xcc\xe6\x9f\x93\xc1\x33\x90\x57\x37\xb6\xa4\x9e\x6d\x8b\x46\xad\xba\x86\x38\x85\xf6\x5f\x8\x14\x2\xe5\x8c\x5a\x39\x95\xf5\x91\xda\x7a\xbe\x23\x26\x6a\x71\x3\xf4\x0\x3a" }, - { 0x53bf68, "\x36\xbe\x8a\x3c\x5d\xaa\xc4\xf5\xfa\xc\x3f\xd\xa0\xc6\x49\xc1\xe1\x20\x7a\x31\x84\x87\xf7\x9f\x71\x6b\xeb\xa8\x11\x35\x22\x78\xe4\x83\x97\xdd\x53\x39\x45\xb9\x3\xad\x4c\x34\x8e\x79\xfc\x57\xb8\x47\x66\xfd\x54\x96\x33\x48\x4b\x88\xf9\x7\xa2\x3e\x64\x1b\xb2\xf\x5f\xcb\xcd\x18\xfb\x74\x70\xb1\x2a\x37\x2c\x98\x9a\x7c\x30\xe2\x75\x28\x26\x63\x1c\xec\x3a\xa3\x8\x85\xc5\xe\x2b\x4\xe9\xc9\x4f\xd1\xd2\x25\x9d\x6c\xd0\xfe\xce\xca\x15\xbc\x82\x2d\x27\x3d\xbb\x56\xe6\x24\xd7\xe3\xf2\x6e\x12\x9c\x6a\xe0\xe8\x4a\x9b\xd5\x10\x86\xc7\x90\x7d\x61\x67\xd8\xb5\xf1\x1a\x8f\xf8\x89\x4d\xa\xe5\xf4\x7b\x60\xa1\x40\x42\x2f\x1\xb6\x1f\xef\xd3\x81\xc2\x5b\x6d\x41\x5c\xff\x95\xc8\x76\x94\xd6\xd9\x19\xf3\x38\xb4\xdf\x59\xb\x52\xb7\xab\x73\x14\x62\xbf\x9e\xb3\x21\x3b\x17\xba\x58\xcc\xdb\x6\xda\x5\xa5\x16\x4e\x80\x1e\xa7\x8d\xa6\x7e\x99\xae\x0\x5e\x2e\x77\x50\x65\x29\x7f\xd4\xee\xf6\x2\x13\xdc\x69\xa4\x44\x8b\x32\xde\x92\x68\x1d\x51\xcf\xa9\xbd\xf0\xc3\x72\xed\xb0\x8c\xac\xc0\x23\x9\x46\x55\x91\x43\x5a\xe7\x93\xaf\x6f\xea" }, - { 0x53c0e8, "\x6d\x90\x16\x84\x89\x48\x99\x24\xad\xbc\x92\xe\x6a\xf5\x4e\xea\xaf\x38\xcb\xbd\x8a\x12\x9e\xd6\xb\x8e\x9c\xf8\xb5\xa1\x81\xe3\x9d\xfa\x65\x77\x6\x7b\xb8\x98\xda\x54\xf6\x3b\x7\x93\x5c\x7a\x15\xfe\x2a\x30\x36\x80\x39\x8c\x2b\x4b\x5b\x21\xe0\x13\x6c\x29\xc0\xbb\x27\x3a\xdd\x3f\xa2\xe9\xac\x4c\xef\x44\x70\x19\x5a\x72\x7c\xc5\x3c\xdc\xcf\x88\xf2\x51\x47\x61\x3\x67\x82\xfb\xed\x18\x9f\xb7\xa7\xb0\xc4\xf\x26\x5\x28\xe5\xd2\x4f\xa\xd0\xb3\x1\xd5\x1a\x37\x6e\x8\x9a\x1f\x60\x45\x5f\xf9\x33\x9b\x6f\x2d\xca\x9\xb4\x3e\xbf\x96\x95\x4a\x11\x1d\x74\xcd\x87\xce\xb9\x20\x68\xc3\x40\xf1\x31\x8d\x25\x7f\x2\x17\xb6\xcc\xd3\xa5\x59\xf4\x91\xd1\x83\x4d\xc2\xe1\x22\xec\x4\x52\xf0\xd9\xae\xc8\x56\xf7\xd4\x85\x42\x1e\x35\x1c\x7e\xeb\xe2\x76\x6b\x49\x75\x3d\x58\xff\x57\xbe\x43\x46\xf3\xba\x2e\x69\xa3\x34\x78\xb2\x73\x5e\xe7\x1b\x8f\xd8\x8b\x94\xa8\xe6\x97\x7d\xde\x2c\xa6\xab\x23\xfd\x50\xe8\x79\x62\xa4\x66\xfc\xee\x86\x41\xc6\xd7\xa0\xc7\xe4\x5d\xc9\x53\x32\x63\xaa\xc1\x64\xdb\xb1\x0\x10\x2f\xc\xdf\xd\x14\x55\x71\xa9" }, - { 0x53c240, "\x74\x4b\x7\xe3\x16\x70\x33\x94\xb\xb6\xe6\xc0\x62\xd5\xe5\xfb\xbe\x8d\x67\xc8\xc7\x58\xc6\x2e\xf9\x47\x77\x12\x4a\x68\x6c\x84\x35\xe1\x69\x14\xc4\x48\x32\x11\x9d\xb1\xe\x5a\xd0\x17\x60\xed\x28\x21\xef\x10\x2b\x5b\x31\xab\x23\x89\xf0\x18\x66\x0\x87\x99\x30\xe2\xda\x49\x7f\xd2\x4d\xcc\x81\xd6\xdf\x37\xd\x1a\xaa\x51\x97\xb3\x73\xd3\x50\xb2\xdd\xc3\xbf\x3e\x92\x1\x64\xf4\xcd\x1c\x8f\xaf\xa9\x24\x36\x91\x9e\xa4\xd1\x75\xc9\x59\x42\x4e\xb4\x6a\x4f\xa1\xe8\x6d\x61\x63\xea\x3c\x38\x5\xe9\x9c\x46\xb9\x9f\xb7\x43\xeb\xf5\x5c\x76\x3b\xd7\xba\xa5\x7b\x6f\x5f\xde\xad\xe7\x15\x2\x2f\x5e\xf7\xa6\xbb\x52\x95\xd9\x86\x26\xa\xa8\x8\x20\xf1\x45\x13\xca\xf6\x65\xcf\xe4\x98\xdc\x80\x19\x7a\xfd\x9b\x4\x1e\xa3\x9a\x5d\x72\xb5\xfa\x3\x53\xc2\xc\xa7\x57\x55\x7e\x29\x6e\x83\xb0\x1f\xbd\x8e\x93\x8a\x79\x96\x39\x7d\x88\x27\xcb\x71\xf\xf3\xfc\x25\x40\x3a\xd8\x85\x2c\x6b\xd4\x2d\x34\x54\xec\x8c\xe0\x1b\xb8\x8b\x3f\xf2\xac\xff\x7c\xa0\xee\xbc\x22\x44\xce\xc5\x9\xdb\x82\x78\x90\xae\xc1\x6\xa2\x41\x4c\x1d\x3d\xf8\xfe\x2a\x56" }, - { 0x53c368, "\x8b\x9c\xe5\x1a\x2d\x5a\xf5\xa6\x77\x3\xd4\xb4\x99\x84\x32\x53\xcd\xca\x43\xb5\xe2\xcb\x1e\x8c\xc7\x81\x89\x49\xb3\xf7\x71\xbb\x4e\xe8\x7d\xaa\x2e\xd0\x7f\x3e\xf1\xe9\x60\xbf\x87\xe6\x6c\x6d\xff\x47\x10\xc5\xc9\x3a\x5e\x30\x3b\x0\x4a\x18\x63\x11\x8e\x92\xab\xf9\x8a\x9f\x9e\x1d\x45\x62\xf8\x83\xce\x5d\xcf\x78\xdd\x93\x8f\xc2\x76\x2b\xd3\x54\xd\x4d\x44\x31\xa\x42\x91\x23\xfd\x36\x48\x79\x2a\x4f\x2c\x80\x7c\x7\xb9\xb0\x68\x52\x33\x70\xe1\x6a\x9\xbe\xad\xf0\xb8\x37\x5c\x41\x95\x59\x72\xa5\x67\xf6\xa2\x13\x82\xfb\x19\x34\x66\x3f\x5b\xac\x5f\x9d\xeb\xd8\xb7\x21\x1c\x3c\x75\x4c\xd1\x7e\x74\x40\xb6\x22\x98\x69\xee\xea\xa4\x7a\xe4\x6e\x58\xc0\x12\x1b\xe\x14\xae\xde\x9a\x7b\xd7\x28\xed\x1f\x61\x55\xf\xb\x57\x17\x9b\xef\xe7\x97\xfa\xaf\x24\x4b\xd2\xa3\xd9\x85\x64\x8\x2f\x96\x50\x35\xa7\xe3\x25\xc1\x46\x8d\xcc\x73\xe0\x56\x15\x90\xa8\xbd\x5\x4\x20\xc4\xf3\x39\x16\x6\x38\x65\xf2\xdb\x86\x6f\x27\x1\xf4\x6b\xb1\xbc\xdc\xba\xc6\x26\x3d\xdf\xa1\x29\x51\x2\xa0\xc8\xda\xa9\xec\x94\xc3\xc\x88\xd6\xb2\xd5\xfe\xfc" }, - { 0x53c7b0, "\x5f\xb6\xef\xa1\xfb\xd0\xa3\xb\xc9\x67\x54\xdd\x92\x4\xa5\xe0\x99\xa7\x62\x53\x87\x3c\xf6\xcc\x12\x45\xd5\xa6\x7b\xb4\x8e\x6f\x3e\x6e\xe3\x41\x44\x61\x8b\x5e\x2a\xb9\x2b\xdc\x46\x7c\x4b\xf0\x50\x4d\x9b\xad\xc3\xa8\x7d\x81\x8f\x2e\x1d\x79\xf3\xfe\x29\x8a\x3f\x22\x35\x4c\xa2\xf1\x90\x58\x9a\x70\xac\x88\xc4\xbb\x43\xb5\xbd\xaf\x24\x2c\x1c\xb0\xe9\xbc\x3\x3d\x18\xc5\x7\xd8\x9f\x97\xdf\xd9\xc6\x68\x5c\x15\x2\xda\xa9\xc2\xaa\x6\x55\xc7\x76\xf4\x2d\x7a\x32\x85\x86\xee\x19\x95\x4a\xec\x94\x80\x89\xbe\x9c\xcd\x56\x38\x10\xd3\x8\xdb\xb1\x6d\x6a\x2f\xf5\x33\x52\xcf\xab\xe6\x1f\xa4\x73\xf9\xf\xc8\xc0\xe8\x93\x13\xd\x84\xf7\x9d\xba\x64\x83\xb3\xae\x71\x37\x1e\x8c\x25\x0\xf2\x21\x9\xea\xd1\x1a\x7f\x42\xe1\x16\x48\x6c\xc1\x1b\xf8\xd6\x20\x27\x74\xb8\x49\x60\xcb\x6b\xa\x3b\x72\x75\x9e\x47\xeb\x4f\x91\x31\xe4\x63\xd2\xe7\xfc\xde\xb2\x28\x4e\xce\x57\xc\xb7\x98\xed\x36\x7e\x5a\x34\x40\x51\x23\x30\x59\x77\xfa\x5d\x1\x96\x39\x8d\xff\x17\x11\x66\x5\xfd\xd7\x14\xe5\xa0\xbf\x69\xe2\x82\x26\x65\x5b\xd4\x3a\x78\xca\xe" }, - { 0x53c8b8, "\x69\x23\xad\xbe\xc\x4e\x2f\x48\x7e\xe3\x30\xaa\x9d\x42\xc3\xc1\x6e\x13\x64\xff\x3d\xd9\xdf\xb3\x4b\x98\xfc\xeb\x92\x83\x95\x50\xaf\xc9\x7b\xf\xc7\x8d\x53\xa8\xbb\xb5\xd8\x2e\x9f\x3\x81\xe8\x2d\xed\x74\x6c\x97\xe9\xb\xbd\x1d\x15\x4\xa0\x5a\x16\xbf\x3f\x7c\x35\x6\xcf\x7a\xae\x44\x8b\xf4\xf7\x5e\x1e\xef\x27\x8f\x29\x55\xf2\x4f\xd\xea\xc4\x5\x88\x18\x94\x34\x8\xb4\x62\xd7\x26\x56\xfb\xf8\x37\x33\xce\x1c\xd0\x47\xd5\xe0\x71\x41\xd6\x87\xee\x72\xf1\x70\xe5\x75\x7f\x21\x54\xca\x80\xb2\x11\x7d\xbc\xdc\x7\xe\x91\x38\x96\xa1\xb6\x3a\xfd\x2\x6f\xa6\x3e\x10\x60\x9c\x63\x77\x59\xec\xa\x86\xf5\x28\xfa\xe7\xe1\xb7\x76\x36\x1a\x1f\xa5\x9a\x45\x39\xdb\x5d\xd2\x5f\x2b\xf9\xfe\xde\x31\xab\x52\xd1\xa4\x3b\x4a\xb0\x0\xb9\x9b\x9e\x43\xc0\x12\x89\xa9\xa3\x20\x65\x14\x1\x46\x2c\xcc\x17\x8a\x68\xe2\x19\x4c\xd3\x32\x5b\xdd\x66\x73\xcb\x85\x1b\xc6\x67\x6a\xd4\xc2\x8e\x61\xda\xf3\x57\x79\xa7\xb8\x8c\x9\x40\x5c\x6d\xb1\xa2\x22\xc8\xf0\x25\x49\x58\x24\x6b\xe4\xcd\xba\x93\x2a\x99\xc5\x4d\xe6\xf6\x84\x3c\xac\x90\x82\x51\x78" }, - { 0x53c9e8, "\x1\x69\x88\x4f\xf0\x48\xe7\xbd\xc3\xba\x8\x63\x75\x6d\x3a\x4b\xd7\x86\x59\x47\xb\xde\xa\xf1\xbe\x58\xe1\x5d\x91\xab\x9\xee\xad\x5e\x28\xca\x6\xa9\x4\xe9\x8e\xc5\x6f\xd0\xfe\xdf\x12\xc1\x7e\x4c\x2b\xcb\xb1\x96\x7a\x90\xf8\xc2\xa4\xe6\x73\xa2\xdd\x1c\xaa\xe4\x30\x3f\xcc\xc4\x35\x66\xb3\x1d\xdb\xa0\x7\x36\xa3\x54\xb9\x43\x94\xc\x8b\x98\x72\x44\xbc\xf5\xcd\x2d\x2\x5b\xed\x1f\x29\xf7\x0\x7f\x53\xda\x85\x2f\xc0\x89\x33\xa5\x9f\x9a\x8d\x64\x68\xd2\x9e\xaf\x40\xeb\xec\xfa\x26\x41\x9d\xd4\xa1\x10\x8c\x37\xbf\x4a\x81\xac\x45\xd6\xa7\xe3\x9c\x8f\x21\xf2\xff\x42\xea\x87\x32\x1a\x2e\xcf\xbb\x3e\x15\x22\x65\x7b\x61\x3d\x83\xa6\x78\x6a\xd8\xf\x2c\x31\x62\x97\x5c\x14\x27\x49\x46\xf4\xd1\xf3\x93\xb6\x60\x95\x3b\x99\xc6\x70\xfb\x67\x24\x6c\x9b\x25\xc9\xe5\xb4\x4d\xd5\x76\x71\x2a\x1b\xdc\xfc\x8a\xae\xe2\xef\xe0\x17\x13\x5f\x57\xb5\x79\x50\x6b\x56\x7c\x52\x11\x3\xd\x23\x7d\xa8\xd9\xe\x6e\x3c\x16\x38\x92\xce\x51\x34\xc7\x55\x18\xb7\xe8\x74\x82\xb2\xd3\x19\x20\x77\x5\xb8\xc8\xfd\xf9\x80\xf6\x1e\x4e\x84\x5a\x39\xb0" }, - { 0x53cae8, "\xa4\x6d\xc3\xfc\x24\xa5\xb7\x3f\x26\xc0\x2d\xe3\x49\x71\xe0\x36\xaa\x39\x6a\xb4\x21\x67\x9a\xfa\x23\xe5\xec\x12\x25\xd\x72\x87\x27\x7a\x5d\x60\x6f\x57\x78\x94\x44\x56\xde\xc9\x95\x97\x2f\x77\x9d\x53\x89\xfe\xff\x8b\x46\x2c\xcb\x61\x8\xdf\x79\xb6\x20\xc\x15\x3d\x4a\x2e\xb2\x7\x73\x3e\xcf\x6\x88\xf4\x37\x32\x19\x3a\xf6\xe9\x75\xac\xeb\x30\xf9\xbb\xa7\x84\x63\x5f\xa8\x1a\x91\xc8\x9c\x7f\xd6\xd5\xed\x3c\x98\xd8\xbc\xb1\xf\xfd\x9\x3\x99\x6b\x16\x8e\x59\x4e\x1f\x66\x82\x2\x8d\x96\x4b\x22\xc5\xa3\x50\x74\xdd\x2b\x5e\xa1\xda\xcd\x5b\x58\x9e\x28\x1d\xe8\x62\x47\xf1\x33\x35\xaf\x34\xef\x5a\xa2\xbd\xe\x81\x4\x5\xee\x7c\x51\x4f\xbe\xc4\x42\xb\xca\xd3\x70\x9f\xba\xd4\x8c\x10\xfb\x90\x14\x13\x1b\x3b\x11\xc1\xad\xb9\x64\x48\xd0\x31\x4d\x8a\xd2\x86\x38\x0\x92\xdb\xf5\x5c\x9b\xea\x17\xf8\x68\x83\x18\x4c\x52\x1e\x2a\xe6\xa\x69\xab\x6c\x6e\xf7\xd9\xc7\x41\xf3\xc2\xa6\x1c\x7d\xb3\xd7\xdc\xd1\x93\xe2\xce\x85\xbf\xb8\xe1\x76\x40\x54\xcc\x7b\x8f\xa9\x7e\xe4\xae\x55\x1\x80\xf0\x43\xc6\xb5\xf2\x65\x29\xb0\xa0\x45\xe7" }, - { 0x53cd28, "\xed\x8e\xda\x43\x63\x70\xc8\x69\xee\x7\x3b\xd6\xe9\x1c\x17\xc\x38\x97\xa3\xe1\xe\x6\x40\x96\x0\x7c\xbb\x39\x9\x2b\xd7\x78\x19\x59\x4\x44\xb9\xa7\x13\x68\x16\xcd\x8d\xa8\xc2\x54\xb5\x30\xac\x72\x5b\x12\x1b\x6b\x89\x6f\x99\xc6\xd3\x51\x76\x87\x91\x60\x27\xa0\x4d\x4f\x47\xf3\xd\xcc\x98\xaf\xf8\x6e\x9d\x9f\x7b\xfc\x36\x5e\x9c\xb8\xf5\x8b\xdf\x7f\xfa\xe4\x75\xcb\x9b\xf0\x77\x3\x41\x62\xb3\x11\x32\xa5\x2d\xa2\x6c\x3d\x86\xdb\x80\xba\x2a\x83\x90\xf2\x22\x24\xc5\xff\x5f\xb0\x15\x31\xbd\x1e\xcf\x57\x4e\xc7\xae\xf4\xe3\xb4\x4b\xce\x35\x3c\xb2\xa\x95\xfe\xa1\x5\xf9\xd1\x8a\xf6\xdd\x74\xa6\x2\x1\xe2\x52\xa4\x10\xb7\x93\xf7\xc4\x18\x28\xd4\x84\xa9\x9a\xc0\xe8\x8f\x53\x2f\x7a\x5c\x58\x26\x79\x42\x4a\x25\xad\x33\x67\xbe\x7d\x34\x1a\x46\x29\xde\x20\xd5\x3f\x1d\xd8\x3e\xe0\xb\xc1\x71\x14\x1f\x73\x6a\xfb\x61\x55\xab\x50\x85\xbc\xb6\x7e\x9e\xd9\xeb\x5d\xd0\xd2\x21\x64\xf1\xbf\xdc\x56\x45\x94\x65\x4c\xe5\x3a\xb1\x6d\xe6\x49\x8\x23\x88\xaa\xfd\xc9\x5a\x81\x37\x2e\xf\xef\x2c\xca\x92\xe7\x48\x82\x8c\xc3\xec\x66\xea" }, - { 0x547230, "\x31\x69\xdc\xcc\x61\xe2\xd4\xad\x9a\x51\xe5\xfa\x53\x6d\xfe\x6\x89\x79\x46\x99\x24\x7c\xa0\x18\x56\x27\x7f\x2e\x2a\x77\x0\xd8\xcd\xb6\x1e\x4b\x4e\xfc\x4\x23\xa4\x75\x8\x44\x19\x80\x7\xf3\x16\x5c\x9\x93\xb9\xdb\x92\x10\x30\xd0\x43\xd7\x85\xfb\xdd\xe\x49\x39\xca\x2\x64\x8a\x35\xa6\xee\x13\xe0\x91\x9b\xce\xc2\x12\x82\xab\x4d\x74\x22\xd\x70\xb2\x90\x98\x3\xec\xc7\xcb\x9c\x71\xba\xac\x50\x21\xf8\xc0\xda\x67\xa\x72\xfd\x2d\xc\xf6\xa7\x52\x65\xaf\xc3\xa3\xa1\xea\x5a\xd5\x17\xbe\x7e\xcf\x94\xb0\x34\xd1\x1b\x6e\xf0\x54\xf2\xe8\x76\xbc\xe4\x3f\xf4\x73\xe9\xae\x7b\x6c\x3a\xbb\x8f\xe7\x4a\xb1\xb\x7a\x68\x86\x11\x2f\xf1\x8d\x81\x47\x42\x2c\x7d\x8c\x95\x55\xf7\xc5\x84\x1d\x59\x41\xd6\xbf\x8b\x33\x9f\xe6\x38\x45\x87\x1\xc4\x1a\x78\x40\x3c\xbd\xe1\xb7\x1f\x26\x6a\x6b\xa8\x96\xf5\xa9\x60\x37\xed\xa2\x15\x58\x3d\x8e\x48\x3b\x9d\xb4\x5b\x29\x62\x4c\xc6\x83\x66\xb3\xb8\xde\x1c\x2b\x5e\x63\x57\xd2\x5f\x25\x36\x20\x28\xb5\xc1\x5d\xc9\xf9\x9e\xf\x88\xa5\x5\xef\xdf\x97\x4f\x14\xc8\xd3\xff\xd9\xeb\xe3\x32\xaa\x3e\x6f" }, - { 0x53ceb0, "\xbc\xb2\x5e\x24\x9d\xc6\x26\xc5\x91\x6c\x87\xb3\x70\x47\x6f\x5f\x1\xad\x7f\xa5\xea\x4\x7c\x31\x39\xdb\x15\x9e\xdd\x64\xb8\xf4\x9a\xd0\xe0\xf\xf0\xcd\xef\xd4\x23\xc0\x14\xcf\x79\x5b\xba\x48\x2f\x18\xc\x95\x55\x43\xab\x67\x99\xa3\xbd\xd9\x90\xec\xbf\x21\xff\xd2\xb6\x96\xf1\x5d\x6a\xe3\xd5\x4f\x7d\x8f\x46\xb1\x7e\x12\xb4\x6e\x97\x37\xa\x36\x94\xc8\x1f\x51\x8d\x60\x78\xaf\xfa\x9c\x2a\x40\x7b\x1d\xbb\xe9\x75\xe8\x5a\x3a\x11\xf5\x7\xed\x5\xc7\x9b\xf7\xb5\xb0\x1c\xd1\x4a\x83\xc4\x81\x7a\x92\xf2\x3b\x4e\xb9\x2\xde\xaa\xe\x1a\xcb\x5c\x44\xe1\xd6\x98\xa2\x4c\xee\xd7\x45\x9\x32\x20\x3e\x3d\xa7\x57\x58\x0\x73\xa6\x10\xfb\x6\x4b\xce\x74\x35\xfc\xae\x77\x89\xfe\x19\x53\xfd\x82\xc2\x85\x30\x50\x84\x8\xc3\x28\xf9\x22\x80\x65\x62\x13\xe4\xca\x34\x3f\xdc\x4d\xf3\x8a\x86\x8b\x69\xf8\xda\xa4\xc9\x61\xe7\x38\x6b\x54\x2b\x49\x29\xa0\xc1\x71\xd8\x2e\xa1\x1b\xd\xcc\x8e\x8c\xa8\x2d\x27\x42\x56\x16\x41\xf6\x72\xa9\xb\xe2\x68\x25\x63\x93\x1e\xb7\x9f\x59\xd3\xac\xe5\xdf\x2c\xe6\x88\x76\xeb\x3c\x52\x33\x17\x66\xbe\x3\x6d" }, - { 0x53d168, "\x3\x21\xa0\xee\x97\xa8\x35\x87\x9f\x6e\x88\xf0\xc1\x1a\x19\xbd\xd2\x17\x78\xb9\xd6\x29\xf4\x28\x40\xe6\x8d\x1c\x2f\xf6\x56\x14\xdd\xa5\x57\x48\x9a\xce\xb4\xff\x5a\x5\x3a\x9d\x7e\x6d\x96\x6c\x55\x3b\x38\x4b\x51\x1f\x60\x8\x1d\x70\x22\xae\xd3\x8f\x99\xc3\x83\xe0\xde\xea\x6\xf9\x9b\x5c\x52\x2a\x72\xb7\xc9\xdb\xfa\xd7\xdf\x68\xbc\xb6\x59\x98\x74\xb2\x27\x9\xf\x44\x6f\x91\x7d\xcc\x12\x4e\x2d\x42\x7a\xf7\x9c\x7c\xe4\xf8\x94\xad\x23\xef\x8a\xaf\xb8\xe2\x80\xb5\x86\x54\x47\x4a\x2\x3c\x5f\xf3\xec\x4d\xe7\x8b\xbf\xb0\x26\xc5\x67\x24\x3e\xca\xbb\xd8\x1b\x63\xc6\x82\x75\x69\x5e\xdc\x45\xac\x71\x30\x76\xa\x81\xda\x33\x32\xd5\xbe\xd\xfc\xf2\x3d\xa4\xf1\x73\xed\x43\xd4\xe5\x2e\xe9\xd0\xcb\x41\x37\x5d\x34\xd9\x77\x7b\x7f\xa3\x39\x6a\x61\x16\xcf\x1\x7\xfd\x58\x13\xa2\x20\xc7\xc2\x66\x2c\x50\xd1\x65\x79\xc8\xb1\x64\xb3\x90\x0\x5b\x11\x31\xe\x25\x6b\x89\xe1\x8c\x53\x10\xaa\xc\x4\x4f\xa1\xa7\xc4\x85\x92\x36\x46\x1e\x3f\xfb\x84\xe8\xc0\x8e\xa6\xa9\xcd\xf5\xba\xab\x62\x15\x18\x9e\xb\x4c\x2b\x49\xeb\x93\x95\xe3\xfe" }, - { 0x53d2d0, "\x43\x2f\x53\xa0\xc2\xfd\xcc\x6\x29\x3e\x1f\x44\xab\x65\x74\x54\x49\x27\xb7\xe2\x2c\x5a\x33\x34\x1e\x16\xa7\xae\xa\x92\x55\x20\xad\x98\xf8\xa9\xe\x8b\x32\xdf\xa5\x15\xfc\x9f\x23\x3c\xc4\xc0\x4c\xbe\x89\x9a\xf0\xe4\x73\x59\x30\x9e\x82\x58\x51\x8f\xbf\xa1\xc7\xeb\xf1\x64\x1b\x4b\xc8\xc3\x38\x31\xd2\xfe\x3d\xd0\x77\xcb\xd6\x24\xf7\xc\xe5\xff\xd8\x4d\xac\x10\xe6\x76\xbb\xf\x9c\x6c\x2e\xb\x75\x78\x5d\xa3\xaf\x17\x5e\xb0\xe1\xb1\x9b\xf9\x7\x39\x6d\x7b\x1c\x2a\x9\x3f\x12\x4\xc9\xc1\xc5\x19\x61\x5\xb4\x47\x37\x5f\xd5\x94\x28\x21\x88\x97\xfa\xd3\xcf\x7f\xdd\xd4\xf3\x68\xf4\x81\x62\x84\x91\x83\x8c\x7e\x67\x63\x66\xed\xe7\xe9\x85\x6f\xdb\xaa\x87\xec\xde\x90\xba\x25\xa2\xd\x6b\x5b\x7a\x96\x70\xe0\x86\xa8\xe8\x6a\x4e\x42\x57\x2b\xb6\x40\xce\x69\x46\xb5\x72\x80\xcd\x13\xf6\xf2\x0\xda\x93\x22\x60\x3b\x7c\xb2\x48\xef\x3\xb9\x71\x4f\xc6\x45\x36\x26\xfb\xf5\xca\x2\x6e\xd9\x8d\x95\x14\x2d\x8a\xd7\xdc\x52\xee\x99\xa4\xbc\xb8\x8e\x1a\x3a\x1d\x4a\x7d\x1\xe3\x56\xa6\x50\x35\x18\x8\x79\x5c\xbd\x41\xb3\xea\x9d\x11\xd1" }, - { 0x53d3d0, "\xf1\xbb\x4b\x7e\xc1\x8a\x41\x12\x97\x5e\x57\x56\x9f\x2c\x5f\xb6\x47\xff\xb1\x4c\x8b\x9c\x63\xc4\xa7\x98\xb2\x31\x84\xb4\xd\x1d\xe0\x67\xfd\x2\x13\x10\xdb\x8\x83\x48\xc6\x86\xaa\xe5\x80\x9\x38\xfc\xe2\x85\xc7\x8d\xa9\x3b\x18\xa5\xb7\x32\x9b\x6a\x2e\x87\xc0\x24\xa0\xfa\x6b\x76\xa2\xe6\x7f\x5d\x7b\x40\x33\xfb\x62\xf6\x43\xd1\x6d\xa1\x29\xd5\x17\x50\xf9\x1c\xeb\xf2\x22\xc2\x51\xe4\x26\xca\x5b\xf\xf8\x96\x4e\xba\xf3\x55\xa4\x37\x36\x82\x70\x99\x20\xc9\xf5\x7c\xa8\x92\x6\x72\xe7\xb5\x9d\x44\xd2\xbf\x64\x16\x49\x3\x4a\xe3\x68\xd0\x1a\x34\x95\x7d\xcb\xbc\xd3\x78\xd7\x5a\xb0\xb9\x2f\x27\x77\xf7\x45\x25\x52\x1b\x3c\x3d\x9e\x2b\x74\x89\xa\x1f\xfe\xf0\x2a\xe1\x1\x3a\x9a\x39\x8e\x79\x71\xd8\xcc\x46\xe8\x69\x3e\xaf\x7a\x21\xad\xea\x75\x93\x15\x30\xf4\xe9\xdd\xe\x60\x28\x6e\x88\xae\x81\x4\x59\xc5\x90\xee\x61\xcf\x8f\xb8\xb3\x54\xed\x58\x6c\x91\x3f\x65\x6f\xd6\xbe\x4d\xef\xde\xa6\x8c\xc\xc3\x23\x35\x5c\xac\xd4\xda\x5\xc8\x14\x94\xd9\x19\xcd\x4f\x2d\x0\xdf\xbd\x7\x42\xab\xdc\x73\xa3\xb\x66\x53\x1e\xce\x11\xec" }, - { 0x53d798, "\xcc\xbb\x69\x91\x5\x73\xbe\x41\xf4\x59\x24\xa5\xf6\x28\xc7\x7a\xc1\xd5\xd\x62\x40\xb1\x32\x16\x6d\x77\xdb\xee\x65\x95\xd7\x35\x2f\x64\x30\x7\xfa\x5a\xe3\x88\x93\x6a\xeb\x31\xde\xd4\xcb\x4f\x92\xc8\x11\xfb\xd0\x4e\x3a\xdc\x7e\x15\xf1\xb4\x61\x58\xad\x9e\xfe\xb9\x6\x4a\x0\x6f\x3\x7f\x8a\x20\x3d\x22\x78\xe1\xe9\xe6\x14\xbc\x75\xe4\xf8\x19\x5b\xc4\xb3\x7d\x76\x2d\x3c\x9d\x9b\xac\x8e\xb2\x3b\xb5\xa7\x47\x9f\xc3\x36\xdf\xf9\x90\x80\x43\xf5\xa4\xe\x4d\x33\xe0\xc\xdd\xb8\x2\x7c\x8b\xf0\x45\x46\xa9\x8c\xcf\x9a\xca\xce\x84\x83\x71\x48\x39\xba\xfc\x2a\xe2\x57\xc5\x98\x97\x60\xc6\xae\xc0\xd8\x37\x81\xaa\xb6\x2b\xea\x26\x21\x4b\x55\xe5\xd2\x85\xab\xb7\x34\xbf\xd9\x70\xcd\x53\x96\xc2\xef\x63\x13\x1e\xed\x12\xc9\x74\x42\x5e\x3e\x54\x9\xd3\x89\x6e\x72\x49\x2e\xd6\x1a\x9c\xa\xa8\x6c\xbd\x10\x86\x4\x38\x50\xf2\xb\x1f\x87\x2c\x29\x17\xfd\x52\x66\x67\xf\x8d\x1\xb0\x18\xda\xe8\x1d\x94\xa3\x25\x79\x3f\x8f\x51\xa2\x23\xf3\xaf\x68\x5d\xa1\xf7\x99\x1b\xff\xec\x56\x44\x8\xa6\x6b\xe7\x5c\xd1\x1c\xa0\x5f\x7b\x4c\x82\x27" }, - { 0x53d970, "\xb9\xd7\x6b\x9c\x5b\xfb\xc0\x9b\xf\x49\x55\xa9\x6d\xa5\x17\xd0\xc3\xdc\x4b\xb8\xf2\xb0\x93\xee\x3c\xeb\xdf\x8d\xe1\xf6\x2f\xe2\xc4\x32\x4c\x35\x62\xb4\x92\x91\x1c\x6f\xb6\x30\xe3\x5a\xb2\x2\x5e\x64\x21\xd5\x0\xcd\xd2\xb7\xd\x81\xef\x14\xb1\x87\xf0\x8f\x20\x39\xfc\x16\x63\x38\x1a\x7a\x56\xe4\xf3\x6e\xf4\xcb\x27\x57\x34\x2b\x12\x86\x79\x3f\x7\x6\x5d\xe\xbd\x7b\x54\x8e\xf1\xc8\x51\xf5\xbf\xd8\x5\x26\x47\x67\xda\x53\x95\x98\xea\xed\x5f\x74\x41\x3a\xc\x8c\xa6\x94\x59\xb3\x8b\x46\x6c\x7c\xbe\x9e\x7d\x83\x36\x88\x31\x7e\x18\xdb\x5c\x19\xe6\xe0\x58\x9d\x72\x13\x77\xdd\xc2\xac\x75\x96\x8\x73\xd4\xa\x2c\x22\xe5\x2d\xf8\x71\xaf\x45\x2e\xc6\x76\x3d\x65\xf9\x29\x4f\x80\xd1\xd3\xe9\x69\x9a\xab\x90\x1b\x1\x1e\xc7\x15\x24\xec\xcc\xe8\xad\x3b\x10\x4d\xcf\x85\xa1\xa7\x89\x25\x11\xd9\xc1\x1d\xae\x9\xde\x6a\x44\x4a\x3e\xbb\x48\xca\xe7\x70\x4\x9f\xa8\x68\x43\xb\x8a\x52\x42\x50\xba\xfa\xce\xd6\x33\x61\x60\xa0\xa3\xf7\x3\x1f\x84\xfd\xbc\x40\x7f\x66\xaa\xc5\xb5\xa4\x37\xfe\x97\x28\xff\x78\x23\x82\xc9\x2a\x4e\x99\xa2" }, - { 0x53da70, "\x46\x47\x9d\xa8\xcf\xa7\x62\xc7\x30\x42\x69\x3a\x34\x5a\xbe\xd5\x59\x63\x33\x21\x2c\xa0\x6\x1e\x31\xa6\x92\x3f\xc8\x57\x5e\xbf\xa9\x90\x19\xb0\x29\x7\x12\x1f\x23\x97\xe3\xa4\xdd\xb8\x3c\xb2\x5c\xce\xda\xd0\x52\x8\x64\xc3\xc0\x9a\xca\xea\x43\x6b\x41\x1c\x8c\x7a\x7b\xd1\x94\x5\xc\x93\x15\x51\xd9\xd4\x3e\x4c\x2f\x49\x4\xd2\xee\x73\x0\xa2\x8d\x6d\x55\x2\x3\xfe\xb\xc2\x1a\xe2\xf1\x83\x80\x36\x78\xf5\x96\x40\x75\xe\x9c\x7d\xad\x32\x5f\x2b\xc9\xbb\xf4\x7c\x66\xb7\x54\x8a\x89\xff\x50\xdc\x60\x25\xb3\x6a\xfb\xe4\x4d\xab\xb9\x74\xc5\xbc\xb6\xe8\xc6\xfd\x7f\x4a\x76\x3b\x9f\x45\x18\x4f\x9e\x95\x13\xb5\x10\xf8\x22\x5d\x1d\xdb\xbd\xb4\x6f\x84\xba\x17\xd\x6c\xaa\x44\xae\xf6\xde\x81\x11\x79\x85\x86\x39\x99\x82\x38\x6e\xa3\x26\x68\xeb\xc1\x27\xed\xcb\x2e\xdf\xf7\xef\xfa\xb1\x9\xd7\xd8\x8b\xac\x37\x4e\xe7\xf0\xe1\xd6\xa\xd3\xec\x61\x72\x5b\x28\xa1\x87\x70\xf3\x71\x98\x8e\x20\x53\x16\x3d\xa5\xf2\xf9\x4b\x9b\x91\x88\x2a\x65\xf\xfc\x67\xe6\x58\x2d\x14\x56\x48\x1\x7e\x35\xaf\xc4\xe9\x8f\xe0\x1b\xcc\x24\xe5\xcd\x77" }, - { 0x53dbd0, "\x77\x1f\x49\xca\xc3\x17\x39\x14\x66\xde\xc5\xd9\x2f\xf\x6e\xd3\x7d\x21\x60\xec\x9a\x4b\x25\xc2\x71\xfc\xb\x81\x8e\xbf\x36\x99\xf7\x6b\x7e\x86\x10\xdc\xa7\xb0\x8b\xb9\x72\x20\xf4\x5e\x31\x74\x6c\x4f\x80\x4\xb1\xc9\xb7\xd0\xab\x7b\xd\xf6\x1d\xbc\x38\x78\xaa\x43\x3f\xf0\x82\xcf\xcb\x96\xf5\xeb\xce\xb5\x12\x29\xc0\x62\x63\x9\xf1\x2\xc1\x44\x32\x2c\xe8\x4e\xe6\x57\x7a\x83\x95\xb8\xfb\x37\xd7\x2a\x3\x5d\xef\xc7\x11\xd6\xa2\xb2\x5c\x85\xa3\x5a\x19\xfe\x8a\xad\xd2\xbd\x28\x9b\x34\x6f\x3c\x67\xe1\xc\x24\x68\x97\xb4\xda\xe3\x98\x7c\x2b\xd5\xee\xe4\xcc\x47\xcd\xb3\xe7\xfd\x61\x42\x3d\x4d\x9c\x5\x9e\x4a\xdd\xa9\xdf\x6d\x45\x6a\xd8\xfa\x16\xae\x58\x1b\x76\xf9\xa0\xe5\xb6\x1a\x59\xa5\xba\x9f\x65\xbb\xa4\xe\xd1\xd4\x51\x41\x40\xc8\xe2\xdb\xaf\x94\x64\x7f\x22\x3b\xf2\x2d\xc4\x70\x2e\x5b\x69\xc6\x56\x33\x7\xa\x15\xea\x91\x53\x1\xf8\x84\xe0\x30\x90\x75\x87\x5f\x54\x6\x46\xe9\x35\x92\x50\x79\x88\x1e\x8d\x3e\x8f\x73\x0\x18\x89\x93\x9d\x8c\x27\x1c\xa6\xbe\x23\xf3\xed\x55\x52\xa8\x26\xff\x8\x13\xac\x4c\x48\x3a\xa1" }, - { 0x53dd70, "\x97\xd5\x40\x91\xed\xf1\xce\xf3\xc2\x6e\x94\x19\x5f\x5b\x7d\x9b\xc\x29\x5d\xda\x71\x7c\xab\x9d\xb4\x9e\x2d\x48\x2\xa8\x0\xbe\x7b\x86\xf\x38\x56\xee\xd3\x34\xa6\xbf\x7f\x1b\x8d\x53\xe8\xdb\x61\xa4\xe2\xe1\x2e\x78\x3d\xb6\x80\xd8\xe\xfa\x6d\xd1\xe7\x6\x4e\x14\x77\x54\xae\x5\xd4\xbc\x6a\x74\x3b\x1c\x8a\xc0\xb7\x45\x92\x26\x11\xd0\x99\x57\xaf\xb3\x95\x84\xfd\xc4\xa3\x22\xa7\x39\xbd\x41\x1e\x4f\x3e\x1a\x2b\x15\xba\x64\x1\x23\xa9\x37\x58\xd\x67\x76\x2c\x8e\xca\xc8\xdc\x65\x98\x90\xea\xad\x6f\xcc\xe5\x32\xbb\x28\x70\xf5\xa5\x12\xb9\xc6\x75\xf0\x3c\x4c\x6c\x85\x73\x88\xe6\x7\x72\x69\x82\x8b\x2f\xb2\xde\x10\x6b\xdd\xff\xb1\x43\xd6\x50\xcf\xd7\xb8\x4\x68\xe0\x93\x18\x79\xa\x9\xc5\xaa\x83\x7e\x16\xf4\xc3\xcb\x96\x87\xc7\xb\x49\x3a\x62\x3f\xb5\x31\x24\xa0\x8f\xf7\x13\x30\xe9\x51\x59\xa2\x4d\x47\x4a\xe3\x8c\x55\x81\xa1\x5c\x1d\xfc\x2a\xfe\xeb\xcd\xdf\x60\x25\x89\xef\x33\x7a\x20\x66\x27\xc1\xb0\x3\xf2\x9f\xf8\x1f\x9a\x5a\x9c\x5e\xf6\x35\x21\x52\xd9\x44\xe4\x4b\xc9\xec\xd2\x63\xf9\x36\x8\xac\x42\xfb\x17\x46" }, - { 0x53e0d0, "\xed\xb6\x90\x15\xcd\x25\x37\x67\xfc\xf3\xd9\x12\xb8\x36\x3\x5d\xe5\x44\x43\x20\x93\x47\xfb\x9b\xca\x3b\xd0\x9c\xbf\x34\x42\x3a\x68\x73\x76\x3c\xc1\x8e\xb1\x51\x31\x98\x19\x1b\xb\xfe\xeb\x3d\xe6\x82\xea\x2\x9f\x9e\xf2\x46\x87\xfd\xb2\x83\x1f\x9\x8b\x4f\x5e\xa8\x16\xd7\xad\x71\xd2\x64\x24\x66\xe4\x48\xa\x79\x4\x84\x49\x52\xda\x8\x58\x8d\xec\x0\x7b\xe1\x2b\xd3\xc7\x96\x38\x32\x74\x2f\x60\x7a\x7d\xac\x85\x99\xa5\xbb\xc0\xf4\x10\xd4\x61\x6f\xba\x26\xc5\x3f\x8c\xb0\xf7\xee\xe8\xb3\x11\xa6\x2d\x54\x30\x1d\x2e\xe0\x1e\x6b\xc\xce\xcb\x6c\x65\x39\x4e\x5f\xdd\xef\x41\xc9\xf8\xe7\xf6\x92\xd8\x4a\xdc\x53\x40\xbd\xa4\xb5\x22\x9a\xe\x5b\xb7\xde\x5c\x8f\x29\xaf\x8a\x56\xb9\x95\x94\x5\x27\x35\x5a\x78\x18\xae\xd5\xb4\x3e\xa9\x6e\xaa\xc4\x6\x80\xc8\xf5\x6d\x55\x33\x72\xa0\x1c\x89\xa1\xa7\x2a\x97\x4b\xcf\x4d\x6a\xf9\x9d\x28\xf\x14\xa2\xff\x7e\xd6\x81\x91\x7f\x23\xd\x57\x62\x4c\x17\xc2\xc6\xf0\x77\xf1\xa3\x21\x88\x7\xab\x69\x63\xe2\xd1\x50\xcc\xe9\xdb\xc3\x86\xbc\x59\xe3\xbe\xfa\x75\x1\x45\x13\x70\xdf\x1a\x7c\x2c" }, - { 0x540278, "\x6c\x9f\x49\x77\xa9\x27\x95\x66\xde\xf\x58\x2f\x4c\x1c\x4b\x73\x22\xcc\xfb\x1a\x85\xf6\x9c\x8b\xc5\xdd\xb0\x15\x46\x37\x79\x2\xab\x3d\x44\x8a\x10\x87\x9e\xfc\xba\xb9\x2b\xa\xf4\xd9\xbf\x78\xf1\xef\x11\xdc\x80\xd2\xd5\xf7\x5c\xbe\xe2\xd4\x9d\xd3\x13\x1\xe1\x18\x50\x53\x43\xd7\x64\xf8\xdb\xf2\x62\xcd\x99\xe7\xa2\x0\xaf\xbc\xff\x25\x91\x5f\x83\x60\xec\x42\xb6\x47\x8e\x6a\xd\x4f\x16\xe6\x51\x14\x8f\x5\xea\x70\x3a\xca\xc7\x74\xce\x5d\x98\x31\x3b\xe9\xe0\xc3\xa4\x1b\x92\xd0\xc\x40\x4d\xb5\x7f\x8\xf9\x39\xb1\x29\xc4\xd1\x21\xac\xc0\x54\x4\x55\xcb\x17\x69\xfe\xe5\x3e\x88\x1d\xe\x7c\x76\xb2\xc6\x24\x81\x9\xe4\x59\x34\x7a\x86\xf5\xad\x5e\x38\xbb\x4a\xe3\xc8\x26\x30\xbd\xfd\x33\x72\xb4\x20\x2a\x19\x6b\x97\x32\x96\x7b\xa1\xa6\xdf\x61\x71\x7\x23\xee\xc2\x75\xb7\xaa\x7e\x67\xa0\xa3\x94\xd8\xa5\x1e\x68\xda\xa7\x48\x8c\xf0\xb3\x4e\xfa\x9b\xb\x6f\x2d\x6d\x8d\xcf\x5b\xc9\xae\x9a\x3f\x6\x1f\x90\x65\x6e\xf3\x93\xa8\x45\x12\x2c\x52\x36\xeb\x82\x3c\x7d\x57\x28\x56\xed\xd6\x63\x2e\x3\x41\xc1\xb8\x5a\x89\x35\xe8\x84" }, - { 0x5406e8, "\xbb\x3b\x8c\x61\x95\x4d\x8e\x4c\xe1\xae\xff\xc4\x47\x64\xc9\xb7\xd3\xca\xb\xed\xef\xc0\xc7\x43\x1c\x66\xb9\xd9\xea\x2f\xa0\xfb\xcc\xfa\x50\xd\x55\x46\x96\x24\x21\x70\xe0\x6\x33\xf3\x0\xd5\x67\x1a\x13\xde\xa5\x7c\x74\xfe\x1f\xaa\x73\xc3\x15\x93\x9f\xd7\x2b\x14\xcb\x7b\xb8\xe4\x91\xf0\xaf\x9\x23\x4f\x5e\x6d\xe\x89\xc5\x30\x77\x68\x1\xfc\xe3\xf4\xa8\x9e\xc2\xcd\xe6\x71\x44\x2c\x3\xc1\xa9\x62\x9b\xee\xbf\x2e\x65\x12\xb2\x25\x8f\x5a\x31\xe2\xf6\x7\xd6\x48\xad\xeb\xcf\x19\xd0\xbc\x29\x92\x16\xba\x9d\x3c\x9c\x94\x3a\x80\x2\xa4\x7f\x11\x1d\x63\xe7\x6c\x40\x86\x76\xf9\x83\x54\xa3\x84\x72\x18\x4b\xf7\x7a\xf1\x4a\xd2\xfd\xec\x2d\x8a\x3d\x7e\x78\xda\x42\x3e\x27\xdd\x5c\x69\xc6\xe9\xf8\xa1\x98\x36\x35\x60\x51\x85\x88\x53\xac\x10\xd4\x4\xdc\x6a\x7d\x9a\xb0\xa6\xc\xe5\x56\x32\x6b\xa2\xe8\x57\x38\x20\xce\x5b\x8d\xf2\x81\x22\x1b\x3f\x87\xbd\xa\x17\xb5\x34\xc8\x1e\x8b\x5\x8\xb1\x75\x59\xf5\x45\x79\x49\x5f\x41\x37\x28\xd1\x39\xab\x26\xa7\xb4\xf\xdf\xb6\xdb\xb3\x4e\x2a\x58\x52\xd8\x82\x90\x5d\x99\xbe\x6f\x97\x6e" }, - { 0x5409e8, "\x2e\x94\x26\x55\x6c\xd6\xe3\x30\x16\x24\xae\xb8\x39\x13\x48\x85\x2\xa\xa8\xb9\xfb\x58\x3e\x59\x40\x37\x89\x4c\x68\xc9\x5b\xdb\xee\x83\xb\x64\x49\xf0\x52\xeb\x3f\x65\xbc\xfa\xa4\x6\x76\x27\xec\xc2\xe0\x53\x2a\x3c\x2b\xa2\x3d\x12\xde\xc7\xfc\xd7\x5\xed\xff\xc0\x9d\x14\x4a\xf7\xa3\x87\x79\x96\xa6\x7e\xd3\x1b\xf5\x90\x3\x80\x19\x4f\x77\x2f\xb1\x84\x7a\xe\x8e\xef\x62\xcd\xce\x9a\xd8\xb2\x69\xc4\xb0\xda\x23\x8\x11\xa0\x6b\x73\x4d\x9\x4e\x8c\x17\x21\x67\xbb\xd5\xcc\x20\x36\xea\x95\xe1\x5c\xe2\x7d\xe7\xc\x33\x5f\x99\xa5\xf4\x44\xdd\x25\xc1\x35\x29\x1a\x1c\x28\xb4\x9c\x34\x6f\x15\xa7\xf9\xe6\xb5\xd4\xe9\x9b\x1\x31\xf8\x72\xb3\x2d\x70\xdc\xfd\x46\x1f\x42\x8f\xcb\x54\x63\x93\x8d\x41\x5e\x9f\xe8\xf1\xe4\xb6\x71\x18\xbd\x6e\x7f\x81\x32\xd0\x74\xfe\x0\xcf\x47\xc6\xaf\x82\x38\x91\xac\xad\xc3\xb7\x6d\x1d\x8a\x98\xca\x97\x1e\x60\x7b\x88\xaa\xd2\xd1\xa1\x86\x61\xba\xc8\x10\x22\x3a\x9e\x51\x43\x92\x75\x3b\x56\xf2\x45\xa9\xbe\xd9\x78\x5d\x5a\x4\x4b\xd\x66\xf3\x7\x57\x7c\x2c\xe5\x50\xc5\xbf\xf\x6a\xf6\xdf\x8b\xab" }, - { 0x540d18, "\x7a\x2e\x7c\x16\x54\x74\xa6\xd7\x3d\x42\x25\xa\x4c\x87\xff\xbd\xc6\xcf\xaa\x78\x0\x95\x91\x68\x50\x7e\x4\xbe\xf\x83\xc7\x82\x9a\xa1\x36\xe2\x9b\x43\x62\x79\xe4\x73\x93\x56\x17\xb5\x60\xf9\xf0\xd\x2\xef\xbb\x22\x1c\xfb\x28\x94\x1e\xdc\x1d\x2a\x7\x72\xa0\x2f\x40\xed\x6c\x7b\xcc\xb4\xbc\xeb\xf4\xa3\x96\x7d\xb8\xf6\x75\x9\xc5\xf2\x70\x33\xc2\x13\xf7\xdb\x97\x1b\x6f\x3\xe3\x6\x44\xc1\xd3\x2b\x4d\xe9\xb9\xe1\x64\x20\x8d\x18\x76\x9d\xda\x67\xa7\x9c\x32\xb\x6a\x99\xf1\x41\x59\x71\x23\x14\x88\xac\x49\x37\xba\xe6\xe0\x51\x4f\xfd\x8e\xe7\xd5\xcd\xd6\xb2\x58\xa8\x55\xa2\xc3\xdf\x5e\x9e\xc9\xd2\xd8\x7f\x84\x39\xb6\xab\x63\x9f\xfa\x69\xfe\x21\xb0\x3a\x1f\x34\x5c\x4a\xbf\xe8\x52\x8a\x4e\x30\x5b\x92\x46\x4b\x8b\x5f\x8f\x90\x6e\x61\x89\x3e\xd9\x27\xaf\xee\x26\x98\xb1\xde\x19\xca\xf3\x86\x53\xa4\xd0\xad\x1a\x47\x80\x85\x45\x2d\xc8\xe\xa9\x3b\x65\xb7\x8\x24\xb3\xc\x11\x35\x15\xdd\x5\xce\x5a\xea\x2c\x6b\xec\xe5\xf8\x3c\x77\xcb\x6d\xc0\xd4\xae\x81\x57\x31\x12\x10\xfc\x3f\x1\x29\xd1\x38\x8c\x5d\xf5\xc4\xa5\x66\x48" }, - { 0x541218, "\x6e\x60\xba\x8c\x16\x67\xc7\xd9\xa1\xf9\x25\x41\x77\x6\x4b\x81\x98\xfb\x39\xe0\x7d\xa0\x10\xa4\x31\xf\xe5\x2b\x2d\xea\x68\xdf\x3d\xc8\xd5\x62\xaf\x83\xbd\xdb\x18\x88\xc4\xa9\x14\x38\x7f\x95\x5b\x51\xeb\x8e\xc\x2\xd0\x1\x6a\xcf\x92\x20\x7e\xc2\xc5\x36\xa6\xcd\x89\x64\x22\x8a\x96\xff\x49\xad\xb0\xc1\x13\x32\xa2\x99\x59\x17\xa5\x56\x29\x3b\x84\x93\x33\x5\x1c\x26\x94\xe8\x5d\xb8\x4\x5c\x4d\x46\xe9\x80\x4c\x45\x85\x9c\xb6\x11\xb1\xdd\x9b\x78\x9e\x8d\xac\xe2\x73\xbf\x82\xd2\x97\x57\x12\x63\xa8\x1a\xf2\xbc\x0\xc3\xcb\x7c\xf3\xe4\xdc\xd1\xed\xce\xd4\x6d\x15\x44\x8b\x52\x75\xd8\x7\x48\xfe\xe\xf6\x1f\xe3\x6c\x4e\x40\x4a\x91\x61\x70\xae\xe6\x19\xcc\x66\x1e\xa7\xd3\x43\xda\xde\x2a\xb4\x3e\x3a\xca\x9a\x5e\x71\xd\x34\xef\xb5\xb\x55\xbb\xee\x35\x50\x69\x4f\x9\x7b\x1d\x47\x86\x53\xb3\xbe\x79\xa3\xb9\x24\x8f\xe1\x1b\x58\xa\xd7\x2f\xfc\x8\x72\xf5\xe7\x7a\x5a\x54\xb7\x87\xfd\xf0\xc0\xc9\x30\x27\x3\xf1\xd6\x74\x3f\x90\xf7\x37\xf8\x28\x9f\x42\x6b\xab\x76\x23\x65\x6f\x2e\xb2\x21\xc6\x3c\x2c\xfa\xf4\x9d\x5f\xec\xaa" }, - { 0x547d98, "\x84\xf6\x55\x2c\x2b\xb\x30\xb6\xd7\x91\x7b\xea\xfc\x8b\xb9\x6d\x11\x2a\x4a\xba\xc5\xfb\x8\x5c\xda\x3\x9f\x52\x8e\x81\xc4\xb3\xa5\x38\xf1\xc7\xca\xd9\xfe\x58\xcd\x42\x1a\xd8\xbd\x9a\xa4\x45\x36\x4f\x4e\x43\x9c\xe0\x9d\xd2\xd4\x19\x98\x26\xdd\x5d\xa8\x28\xfd\xc2\x31\xa0\xed\xbe\x1d\xd6\x68\x3a\x9\x12\xcc\x48\xa6\x95\x66\x6a\x92\xbb\xbc\xaf\xaa\x93\x53\x2d\xb0\xf2\xd\xd1\xcb\x2\x76\xb4\x5\x4c\x85\xde\x51\xe1\x54\x47\x8f\x70\xf5\xb1\x96\x18\x78\xfa\x39\x62\x88\x6e\x9b\x59\x8d\x8c\x87\x1\xf\x4d\x6\xa7\xe3\xb7\x77\xb2\xf0\x1b\x7a\x83\x50\x1f\x8a\xe8\x5f\xae\x4b\xeb\x13\xe5\xdf\x7\x41\x63\xf4\xc3\x64\x32\x21\x29\x94\xa9\x16\x6b\xa\x3b\xd3\x69\x5a\xa2\xff\x72\xef\x89\x2e\x7c\x82\xab\x49\x22\x61\x34\xdb\x7d\x5b\x5e\x65\x6c\xdc\xf7\x2f\x10\x3f\x60\xac\xc\xf3\xbf\x46\x86\x44\x99\xf9\xc8\x35\xec\xd5\x1e\x6f\x15\x4\x97\xc6\x25\x90\x1c\x80\x75\x3d\xa1\x33\x0\xd0\x7e\xb5\xe\x57\xe7\x67\x23\x17\x74\x27\x7f\xce\x3c\xad\xee\x3e\x37\x24\xe9\x71\x20\xe6\xe4\x9e\xa3\x73\xf8\xe2\x14\xc1\x56\x79\xcf\xb8\xc0\xc9\x40" }, - { 0x547f10, "\x5\x3d\xbf\x26\xdf\xc3\xc0\xfd\xa2\xb\xee\x82\xad\xbd\x48\x1f\x66\x2c\x57\x13\x3e\x5c\x50\xe7\x29\xb7\x62\x32\x85\xe3\x9c\xf0\x69\xa6\x65\x92\x84\x9f\x54\xec\xa0\x15\xf9\x0\x78\xf7\xe1\xb5\xb8\xf2\x7f\xae\xf5\x44\xb2\xd6\xcb\xc\x8e\x7d\x4\xb1\x36\x24\xe\xa\x16\x43\xfe\x77\xb9\x63\xc5\x49\x3f\x71\xf6\x64\xc6\x87\xd0\x1c\xa1\x7e\x7c\x23\xd8\x67\x9b\x59\x53\xf3\xa5\xce\x7a\xb0\x68\x3a\xd9\xe9\x8a\xcc\x80\x45\xe4\x6\x4e\x2f\xd5\x6c\xea\x19\x9e\x97\xe2\x8d\x60\x37\x8b\xd4\xdd\x81\x5b\xa4\x8\xf1\x2d\x4d\x6a\xfa\xe0\x75\xa9\xe6\xd3\x76\x31\x86\xc1\xa8\x46\x72\x58\x38\x2a\x96\x73\xc4\xc7\x51\x9d\x30\xd2\x88\x27\xc8\x95\x52\x1d\x21\x94\x5e\x1\x56\x3b\x9\xdc\xa7\x79\x3\x7b\x39\x28\x6e\x1e\xc2\x2b\x70\x99\x6f\xff\x17\x18\xda\xaf\x2e\xb3\xba\x42\x5a\x55\x10\xd7\xe8\x47\xfb\x83\x8c\x5d\x6b\x3c\xab\xeb\xef\x25\x5f\x22\xb6\x33\x9a\xcd\x2\xb4\x91\x7\xd\xf\xdb\x1a\x61\x12\xbc\xcf\x34\xbb\x6d\x20\x4c\x11\x4a\xaa\xfc\x41\xe5\x1b\x74\xde\xbe\x4b\x40\x90\x98\xf8\x4f\x14\xca\xf4\xac\x93\x35\x8f\xc9\x89\xd1\xed\xa3" }, - { 0x5387b0, "\x78\x56\x88\x23\x55\xb3\xa8\xaf\x59\xea\x6\x1f\x73\x25\xb0\xe1\x70\x4d\x82\x58\x26\xe7\x40\x1a\x6c\xc1\x48\xb1\xf0\xba\xff\x0\xab\x2d\xa6\x22\x43\xee\x19\x8c\xe\xda\x17\x53\x85\xbd\x1d\x6b\xf8\x50\xce\x76\x4\xdd\xa7\xf1\x8e\x52\x37\xa2\x51\xe3\x69\x3a\x1c\x16\x68\x4a\x86\xbb\xb6\x6f\xdc\xfe\x14\xc\x79\x5e\xf4\x96\x42\x54\x2e\x84\x5f\xb5\xbf\xcf\x61\x7d\xd7\x98\x71\x3e\xcd\x20\x3f\xd0\xae\xa9\xd\xc7\x8\x65\x8d\x3c\x81\x29\xb8\x6d\xb4\x80\xd1\x4b\x5b\x28\xa5\x4c\xa0\x6e\x90\xa\x11\x3\x64\x21\xdf\x2f\x24\xeb\xf2\x7b\xc5\xac\xb\xec\xed\x66\xd6\xe0\x9\x41\x32\xcb\x83\x93\xfa\x15\xe5\x27\x5a\x87\x44\xd4\xde\xf\x3b\x1\xb7\x2a\xf3\xa1\xd5\x72\xb2\x6a\x2b\x95\x7a\x8b\xca\x7e\x18\x7f\x47\xe6\xdb\x49\xf7\x9a\x9e\xad\x9d\x57\xf6\x60\xd2\xfc\x30\xfb\x9b\x45\xd9\x2c\xf5\x5d\x33\x1b\xc4\x89\x13\x35\x67\xef\x2\x36\x92\x99\x39\xf9\xaa\x74\xe2\x5c\x3d\xc3\x63\xcc\xc9\x62\xa4\xfd\x34\x12\xbe\xc0\xc8\xc2\x7\x10\x75\x31\xe8\xbc\xd8\x97\x4f\x46\x1e\x7c\x38\x4e\x94\x9f\xc6\x8f\xe9\x91\xe4\x8a\xa3\xb9\x9c\x5\x77\xd3" }, - { 0x539420, "\xbb\x1a\x8e\x40\x7\x47\x3e\x6e\xb1\xfa\xa5\x63\x7c\xec\xa9\x75\x55\x76\xd2\xa6\xcb\xe4\x2d\xc6\x43\xa8\x18\x79\x48\xf0\x38\xd0\x9a\x8\xd5\xa0\x22\x7b\xc1\x84\x5a\x6b\xae\xd7\xbe\xb9\x50\xcf\x46\x70\x91\xed\xba\x8f\x7f\x1\xc5\x7d\x34\xf4\x14\x2\xe3\x2f\x64\x96\xb2\xee\x94\x4e\x90\x20\xd9\x95\x30\xca\x65\xf\xb\xd4\xd6\xde\xeb\x2a\x62\xd8\xc7\xdd\xe8\xe2\x4c\xbc\x77\x81\x66\x24\xc9\xb7\x60\x12\x39\xda\x71\xf1\x4d\x6c\xa\xf9\xb5\x6\x52\x3b\xa3\xb3\x7a\x35\x13\xe5\x57\x33\xc0\x16\x17\xfb\x87\xe7\xa1\x42\xe1\x67\x44\x54\x3d\xa4\x9\x19\x61\x15\x29\xb0\x0\xbf\xac\x5d\x1e\x27\x99\x56\x26\x83\x11\x5f\x69\x4f\x1d\xf5\x5\x8c\xff\x2b\x1c\x59\x21\xaf\xa2\xe\xdc\xb8\x85\x78\x80\x6a\x5c\x4\xfd\x25\x6d\x32\x9c\x8a\xc2\x8b\xf3\x9f\xb4\xd\x74\x9b\x8d\x97\x4a\xc3\x9d\x7e\xad\x28\x1b\x98\x53\xaa\x36\xf2\x49\xc8\xce\x73\xf8\xfc\x68\xef\xe6\x89\x3a\xea\x37\x31\xcd\xe0\x86\x3f\xb6\xab\xdf\x58\x23\x41\x3c\x88\x1f\xbd\x2e\xe9\xc4\x82\x72\xcc\x6f\xf6\xd3\x4b\xa7\x93\x5e\xfe\xf7\x51\x45\xd1\x10\x2c\x92\x5b\x9e\xdb\x3\xc" }, - { 0x547c10, "\xb4\x8f\x68\x29\x2d\x91\x41\x34\x56\x3a\x46\xf8\xcf\x63\xb8\xb2\x1d\xcc\xb5\x5f\xe0\x83\xd0\x66\x28\x60\xa0\x20\x88\x3\x9b\x4\x36\x55\x1f\x6d\x24\x62\x7b\x99\x53\xf2\x86\x4b\xff\x3b\xe9\xce\x92\xa5\x71\x5a\x7\xd2\x4a\xdb\xa2\x9d\xf4\xfc\xc9\x90\xac\x72\x77\x1\xb9\x2a\xf1\xd4\xfa\xc2\x61\xc0\xcb\xf5\x6b\x18\x67\xc6\x0\x9\x58\xfb\xba\x3c\x1c\x49\xae\xe6\x38\x40\x80\x97\xdd\x14\xf\x69\x89\x4c\x59\x16\x9a\x2e\x4f\x4e\x5\x33\x3d\xa6\xb6\x6a\x13\x30\xca\xeb\x25\x65\xd7\x57\xa9\x6c\xb1\xde\xd5\xcd\xed\x7c\x15\xbc\x19\xa4\x85\xc1\xa1\x73\xef\xbe\xc5\x35\xe\x7e\x47\x8\x64\xf6\x3f\x8a\xf7\x52\x75\xe5\x48\x37\x23\x8c\xdf\xa7\xd3\xe1\x2\xd\xa8\xe4\x74\x5d\xc4\xad\xf3\xbb\x54\x70\xbf\xdc\x1a\xec\xc3\x31\x1b\xa\x7d\x93\xb7\x9e\x2c\xd1\xfd\xe3\x3e\x96\xd9\x51\x12\xe7\xd8\x50\xb\xe8\xe2\x17\x4d\x5e\xd6\x39\xc7\x5b\x6e\x21\x84\x22\x11\x82\xf9\x26\x1e\x6f\x95\x6\xea\x10\x98\x2f\x78\x5c\x32\x45\xaf\x8d\xf0\x7a\xbd\xaa\x81\xda\xb3\xc\xfe\xc8\x2b\x76\x79\x8b\x94\xb0\xa3\x7f\xee\x42\x87\xab\x27\x9c\x44\x43\x8e\x9f" }, - { 0x541400, "\x7b\x35\x11\x79\x7\x2f\xf6\x82\x8e\xb4\x6e\xd2\x6d\xc5\x8c\x1c\xe0\xd6\x34\xf0\x4f\x25\x59\xe8\xdf\x1d\xeb\x32\x86\x51\xa4\xf2\x5c\xd1\xc8\x41\xec\x9d\x62\xac\xdd\x3e\xb8\x65\x75\x89\x12\x6c\x40\x4e\xc7\x27\xe1\x37\xcf\x9\x16\x78\xaa\x58\xd\xe6\x54\xfe\x8f\xfd\xf9\x61\x26\x3f\x2e\xcd\x2c\x4\xb2\x80\xf\x14\x6f\xc6\xab\xfb\x13\xdb\x9a\x21\xb3\xc0\xa9\x19\x70\xf3\x2b\xae\x9b\x49\xb7\xa8\x24\x1b\x48\xea\xed\xd9\x47\x9e\x9c\x69\x3c\x66\xbb\x6\x46\x38\x17\xb5\xcb\x5\x4a\x5e\x15\x20\xb9\xb6\x33\x4c\x7d\xa3\xd7\xb1\x23\x72\xc3\x4b\x63\xbe\xf7\x5b\x74\x64\x77\xcc\xd3\x85\xde\x1a\x31\x97\xa2\x8b\xfc\x10\x5f\xdc\xd5\xb0\xbd\x55\xc1\xe7\xc\x50\x43\x39\x71\x52\xe5\xaf\x8a\x60\x92\x2d\xd8\x3\xf5\x28\xca\xef\xd0\xc2\x53\x91\xa6\x73\x56\xa5\xf1\x57\x42\xf4\xd4\x36\x8d\xbc\xe9\x7e\x2\x76\x18\xb\x84\x5a\xe2\xbf\x68\x95\x29\x98\xad\x88\x1f\x81\x67\xa1\x3a\xa7\x22\xf8\x1\xa0\xce\x7a\xda\x30\xc4\xe4\xee\x7c\x3b\x4d\x3d\xe3\xfa\x6a\x7f\x99\x0\x93\xe\xff\x90\xa\x2a\x5d\x96\x8\x6b\x83\xba\x1e\x44\x87\x45\x9f\xc9\x94" }, - { 0x541588, "\x11\x2b\xc0\x60\xd2\xf5\x1f\x42\xf7\x8e\x13\x8c\x68\x7b\x90\x26\xd1\x28\xa3\x9d\xd\xb6\x9a\x1b\xb5\xa0\xba\x7d\xa8\xd5\xe\x88\x93\xa6\xbe\x98\xd6\xe4\x50\xa1\x3e\xb7\x8d\x94\x46\x4a\xbc\xd7\xd4\xf1\x59\x97\x2a\x66\x2\xe1\x3d\xf\x1e\xe5\xc5\x49\xe9\xa4\x99\x6f\x6\x37\x96\xdb\x58\xd0\xfe\x2c\xe8\x21\x38\x71\x62\xb4\xda\x12\xac\x79\x17\x5b\xc8\x82\xeb\xf0\xe2\x3\x80\xaa\x9e\xb\xe3\x5a\xc1\x91\x35\x75\xea\xfa\x20\xdd\x23\x84\x31\x9b\x5d\x78\x7a\xc\x27\xa7\xf3\xa2\xa9\x87\x52\xb8\xf9\x5e\x9\x6e\x64\xc9\x18\xd8\xee\x86\x2f\x30\x7f\xb2\x3a\x47\xb3\x74\xde\xe7\x4b\x2e\x41\x29\x5\x33\x15\xfd\x7e\x22\xf6\x70\xbb\x67\x34\xf4\xab\x92\x1a\xe6\xa5\x7\x65\x3f\x39\x95\xef\xb1\x24\x85\xfc\x53\xf2\x1c\x8f\x81\x48\x5f\x25\x76\xdc\x19\x56\xcd\x2d\xff\x43\xbf\x4e\xb0\x1\x0\x9f\x51\xc7\x57\xad\x73\x72\xc4\x8\xbd\xa\x7c\x1d\x40\x77\x61\xb9\x89\x9c\x3b\x8a\x16\xc6\xcb\xce\x4f\x63\xd9\x6d\xcf\x3c\x6b\x54\xdf\x4c\x10\x8b\x69\x32\xe0\x45\xaf\x4d\x83\x5c\xec\xc3\x14\xf8\xed\xc2\x6c\xca\x55\x44\x6a\xcc\xfb\x36\xae\x4\xd3" }, - { 0x541688, "\x6b\x1d\x53\x81\xa\x82\x7\x16\x41\x54\xa0\xbd\x87\x3\x20\x2d\xf7\xb5\x4\x59\x1b\xdf\x8c\x22\xe2\x10\x9\x55\x9e\xef\xa6\x57\x65\x7f\x3a\x35\x9c\x3e\xfe\x40\xfd\x17\xc0\x26\x33\x38\x7b\x6a\x5c\xd1\x50\x14\xec\x49\xfb\xa9\xe5\x1e\xf3\xea\xde\xdd\x44\x75\x46\xc9\x2b\xcb\xbb\x27\xab\x15\xe7\xed\x91\xda\x25\x4e\x5b\xb7\xee\x77\x58\xb8\xe4\x48\x63\x47\xd9\x0\xb0\xfa\xe1\xff\xb3\x72\x32\x3f\x29\x19\x68\x1\x23\xcc\x93\x8d\xd3\x31\xf9\xcf\xf6\x73\x8a\x4f\x11\xe6\xca\xa8\x18\x97\xc2\xd\x92\x62\x84\x85\x3b\x52\x6f\x9b\x6e\x5f\xe3\x9a\xce\xdb\x3d\x70\x95\xb\xdc\xc1\x2\xae\xc5\x56\x7e\x8b\x2a\xf5\x86\x28\xe0\xf1\x42\x83\xd5\xc8\xc7\x8\x4a\x5e\xf\xf8\x78\x5a\x1a\x66\x36\xfc\xd7\x34\x2c\xc3\x76\xbf\xe8\x21\x8e\x2f\x69\x7d\xa3\x98\x67\xa4\x8f\xe\xf2\xaf\x61\x4d\x24\xba\xaa\x7a\x6d\x5\xb9\x89\xbc\x2e\x30\x4b\xb4\x6c\x80\x1c\x9d\xc6\x3c\xb1\xd0\x88\xb6\xa1\xcd\xb2\xc\xbe\x79\xa2\xd8\x99\x4c\xd2\x74\x37\x51\x71\x9f\x13\x6\x90\xeb\xc4\xa7\xf0\xa5\xd6\x12\x45\xac\x64\xf4\x1f\xe9\x43\x96\x7c\x5d\x39\xd4\xad\x60\x94" }, - { 0x541988, "\x4b\x8e\xb4\x43\x5a\xcc\x15\xc0\xa0\x22\x21\x58\xec\xad\xde\x42\x4a\x70\xd4\x26\xc6\xeb\x3a\x61\xbd\x99\x20\x92\xfe\x9d\x68\xae\x1f\x11\x5c\xcb\x8\x66\x49\xe1\x2e\x96\xf2\xca\xdd\xb0\x37\xfd\x86\xa1\x7d\x7b\xbe\xf5\xd9\x60\x6d\x63\xe0\xe8\x84\xf8\x75\x44\x6b\xab\x81\xe5\xa5\xe4\xd6\x3e\x10\x3\x97\xd8\xbc\x5\x98\x1a\xa\xd\x5d\xf1\x8a\x2c\x82\x34\xc8\x4e\x2b\xfa\x7\x4c\x2d\x6c\xc1\x5e\x46\x29\x9a\xc7\xb8\xb9\x56\xa2\x7f\x1d\x3d\x1e\x9c\x80\x6e\xb5\xe\x7a\xcf\xfc\x30\xd5\x95\xa3\xb2\x1b\xf4\xe2\x89\x28\x12\xc5\x3f\xf9\x2f\xc9\x4d\xed\x40\x1\x59\xb6\x85\x50\x77\xe7\xf7\x2a\x76\x51\x78\xc2\x8f\x94\x87\xe6\x8b\x9\x93\x8d\x57\xda\x79\x2\x71\x55\x19\xb3\x5f\x69\xdc\x25\x18\xd2\xf3\x4f\xba\xea\x9e\xaf\x31\xee\xa9\x0\x35\x90\xff\x6\x1c\x4\x13\xce\x14\x39\x5b\xdb\x38\x36\x24\x27\xfb\xac\x52\xd0\x6a\x74\xf0\x62\x45\x72\xbf\x65\x9b\x91\x48\xd1\xb\x32\xb7\xdf\x88\xf6\x41\xa6\x9f\xd3\xc\x7e\x6f\xaa\x73\xd7\xc4\xa4\xe9\x17\xcd\xb1\x3b\x64\x8c\xf\xef\x54\x83\x7c\xa8\x23\xe3\x16\xc3\x47\x3c\xa7\x33\x67\x53\xbb" }, - { 0x541b30, "\xc9\x4d\x8e\xe5\xaf\x88\xa5\x73\xeb\x9e\x4e\xdc\x6b\x68\x28\x79\x7b\xad\x2c\xe\x51\xe1\xc6\x1f\x71\xb2\x61\x7\x42\x49\x35\x1a\xf2\x80\xd2\xd7\x82\xc3\x2b\xa2\xb6\x8b\xec\xa0\x2a\x29\xe7\x8a\x1c\x4b\xdf\xf7\xba\xb1\xdb\xee\x43\x7e\x87\xa7\xfa\x19\xb5\xf1\x95\x4f\xce\x66\xd9\xae\x11\x46\xa\xb8\x40\xf6\xe3\xbc\x77\xf8\xb3\x78\xf3\x5a\xac\xb0\x63\x8d\xcd\x64\x39\xa1\xa4\x9a\x4a\x69\x41\xed\x98\x37\xfb\x3f\xd0\xaa\x6\x7c\x7d\x3d\x94\xa6\x5f\x24\x12\x8\x9d\x32\xc4\x3b\xda\xa3\x10\x34\x8c\xd8\x5c\xcb\x20\x5b\x70\x86\x14\x27\x36\x1\xe9\x3\xc5\xa9\x67\xfd\x9b\x57\x6c\x0\x2e\x4\x84\xf\x26\x72\x92\x58\x17\x83\x2d\xdd\x6f\x62\xc7\xc\x55\x6d\xd5\x13\x3c\x5d\xb4\x5e\xea\x47\xc8\x25\xca\x59\xe0\x97\x21\x9c\x96\x93\x2f\x1e\x8f\x7a\xbf\xcc\xde\xf9\x16\x22\xf0\x81\x75\x3e\xd\x4c\xfe\x23\xbe\xa8\x76\x1b\xf5\x56\x18\x2\xe2\x33\xd3\xf4\xab\xb9\x6e\xc0\xff\xb\x1d\x60\x85\x30\x3a\xe6\x65\xd1\x52\x53\x54\xb7\x9f\x48\x89\xc2\x15\x74\xcf\x9\xc1\x38\x7f\x44\x99\xbb\x45\x31\x90\xd4\x5\xbd\x91\xfc\xef\x50\xe8\x6a\xd6\xe4" }, - { 0x541c30, "\x76\xad\x9\x82\xbd\xb\x69\x6a\xe0\xac\xd4\x34\x31\xd2\x83\xe2\xe7\x28\x70\xe8\xc1\xdf\xa\x2d\xbe\xd5\xe9\xe3\xfb\x79\x7c\xff\xf0\xe6\x85\x43\x47\xb2\x64\x92\x81\x80\xb4\x6d\xf7\xee\x1\x1f\x60\x48\x8e\xa4\x54\x74\x50\x4a\x2a\x5e\x39\x5f\x8f\x46\xb1\x8\x12\xf3\xde\xbf\xcb\x2\xdd\xa2\x9e\xd6\x6f\x9a\x9c\x3d\x93\x77\x2f\x21\xf1\x19\x9f\xcd\x2c\xeb\x30\x13\x89\x88\xa1\x71\x17\x7\x73\x32\x16\xc6\x4d\x3a\xb5\xa3\xa7\x1e\x10\x65\x23\x7b\x5c\xd7\xcc\x15\xca\xae\x6b\x91\xef\x1c\xe\x8c\xda\x72\x4c\x6\x0\xdb\x8d\xbb\xb7\x26\xd\x6c\x37\x8a\x84\x2b\xf2\xd3\x41\xaa\x6e\x7d\xc2\xfc\x3e\xd1\x4\x45\x68\xb9\x27\xe4\x58\xb0\x1b\x44\x40\xba\x53\xd8\x66\x14\xe1\x67\x5\x5d\xc\x96\xf8\x4e\x98\x7e\xf4\x3\x99\x52\x51\x4f\x11\xa8\x1a\x9d\x86\x97\xc5\xf\x25\x75\xc8\x94\xa5\xb8\xec\xa6\xa0\x38\xab\xc9\x36\x24\x35\xc0\xc7\x90\xd0\x55\xfa\x95\xaf\x49\xfd\x7f\x42\x87\x7a\x3f\x56\xf5\x3c\x62\xc3\x59\xb3\x33\xa9\x2e\x1d\xea\xbc\x63\x18\xed\xd9\x3b\xf9\xc4\x78\x22\x5a\x29\xfe\x9b\x61\xe5\x5b\x8b\xce\x4b\x57\xcf\x20\xdc\xf6\xb6" }, - { 0x541db8, "\xf\x3\xdb\xb5\x48\x8b\xe2\xbd\x4a\xc7\xdc\x63\xe9\x71\x94\x3d\xf7\xf9\x1c\xfa\x77\x1e\xea\x97\x9e\x57\x43\x91\xf8\xae\x4f\x55\x9b\xd1\x32\x67\xcf\x90\x2b\xac\x3a\xb4\x6\x85\x98\xc\xc1\x2c\xec\x40\xbf\x9\x59\xde\xcb\x6b\xa1\xad\x47\xbb\xd2\x22\x64\xa4\xb\xe5\xce\xd0\xff\xd4\x41\x45\x51\x65\xb9\xdd\x5\x38\xb6\xc2\x35\x21\xab\xc4\x1d\x1f\xa2\x74\x0\x5e\x93\xa\xe\x68\xda\x95\xf5\x6a\x1\xbc\xfe\x16\x12\xfc\x62\x2a\xf3\xf6\x7c\x5a\x46\x1a\xcd\xc3\x7b\x42\x27\x8f\x25\xa6\xca\x6c\xa7\xf2\x23\x5d\xd5\x54\xe4\xc5\x20\x50\x56\x3e\x69\x70\x52\xed\x7\x17\x66\x8a\xb1\x82\x37\xef\x3b\xfb\xd9\x7e\x36\x2e\x9a\x1b\x2f\x29\xe7\xa9\x83\xe3\xa3\x8c\xf1\x2d\x49\xd7\x31\x10\x78\x8e\xb2\x87\xd8\xe8\x5f\xb0\x76\x9d\x79\xc9\x4e\xe1\xe0\xee\xf4\x13\x9f\x14\xbe\x73\xb8\x88\x3c\x86\x7a\xa5\xba\x58\x7d\x6e\xa0\xc8\x11\x30\x61\x81\x33\xd6\x4c\x9c\x18\xf0\xfd\x99\x3f\xc0\x80\x28\x5b\x72\x4d\x6f\x92\xeb\x24\x75\x89\x8d\x15\xcc\x60\xaa\x4\x26\xd3\xdf\x8\x2\x5c\xa8\xe6\x44\x7f\xb7\x96\x39\xc6\x19\x34\xaf\xd\x53\x6d\x4b\xb3\x84" }, - { 0x541fe0, "\x30\x7a\x4b\x48\x47\x3f\xc8\x2e\xde\xb1\x5f\x96\xe3\x40\xb3\xdf\x70\x73\x67\x87\x78\xdd\xa\x6b\xb5\x2f\xf0\x13\xc5\x1c\x7f\xa1\x8b\xb4\x8e\xeb\x63\xd5\x89\x9d\x0\x68\xab\x9\xfe\x76\x71\xb7\x5d\x92\xc1\xdc\x46\x79\x8c\x16\xf3\x1a\xc9\xd\x3b\xf6\xad\xe7\xa5\x45\x3\xee\xd1\x5c\xb6\xbc\x52\xc3\x3a\x94\x1f\xe2\x6f\x14\xca\x29\x69\x4a\xe5\x51\x31\xff\xaf\x50\x9a\xcc\xf4\x39\x7\x86\x82\xfa\xac\x20\x26\x83\x9f\x54\x11\xa3\x1e\x81\x43\x2c\x8\x8d\x5a\x85\xa2\xcb\x2a\x35\xb2\xda\x2d\xfd\xc4\x37\xa7\x3e\x7e\x75\x65\xa8\x66\x1\x25\x32\xd4\x4f\xa0\x1b\x6\xae\x28\x15\x9b\xba\x2b\x34\x77\x8f\xec\x99\x7c\xc0\xb9\xf9\x88\xce\xe9\x84\x93\xb0\x22\xcf\xed\xf\x7d\x74\xe0\x61\x2\xa6\xbf\x58\xea\xf2\x95\xfc\x6c\x56\x91\x4c\xe4\x80\x49\xbb\x18\xd0\xa9\xa4\xaa\x5e\x8a\xb\x33\x38\xd6\x53\xdb\xf7\x60\x44\xc\xc6\x62\x55\xd7\xbd\xfb\xcd\x5\x42\xef\x57\x24\x12\x90\xd9\x19\x27\x5b\x6a\xd2\x98\x23\xbe\x36\x4\xc2\x7b\xf8\x6e\xe\xc7\x6d\xd3\xf1\x97\xe1\xe6\xd8\x10\x9e\xe8\xf5\x59\x9c\x4d\x64\x3d\x21\x1d\x72\x41\x17\x4e\x3c\xb8" }, - { 0x5420e0, "\xd8\x40\x46\x1c\x9c\xba\x77\xfd\x1d\xe0\xc0\x42\x92\xf0\xff\xa8\x78\x9e\x3f\xcd\x60\xea\xc7\x3c\x2f\x5f\x72\x74\xb3\x2c\xee\x94\x47\x80\xe8\xf5\x67\x8f\x53\x43\xd\xb9\xe9\xaf\x7e\x7a\xe\x63\xb6\xd2\xd4\x27\xc4\x7\x76\xad\x4e\x3\x5d\x2\xd6\xaa\x56\x6b\x12\x21\x37\xa0\xd1\xab\x3a\x11\x51\x90\x48\x23\x26\x6a\x6\x97\xc1\x9d\x35\xec\xa3\x24\x10\xfb\xf8\x41\x65\x1\x1f\x6d\x5\x8e\x7b\xb1\xfc\x44\xbc\x6e\x89\xa9\xc3\x2d\xb2\x18\xde\x71\xbe\xfe\xc5\x54\x73\x2b\x0\xa7\x5c\xae\xd3\x57\x95\xfa\xf1\x7c\xdf\xc\x31\xa6\x3d\x4a\x58\x79\x66\x87\xb8\x19\xf6\xf7\x8d\xbf\xcb\x45\x33\x6f\xb5\x91\x32\x5a\xbb\xdc\x62\x55\xa1\x4\x70\xa5\x8c\x16\x3e\x49\x64\x82\xf9\xdb\x59\x28\xcc\x50\x96\xb7\x38\xc6\x7d\x69\x29\xb4\x1b\xe7\x2e\xc2\xbd\x84\x85\x4d\xe1\x3b\xf4\xac\xd7\xe3\x8b\x4f\x30\x9f\x7f\x5b\xb\x20\xb0\x86\x88\xeb\xa2\xca\x34\x15\x81\x83\x13\xd9\x5e\x25\xf\xc8\xda\x4b\x99\xe5\x9\xf2\x93\xdd\x52\x6c\x2a\xc9\xef\x14\x9b\xf3\x68\xa4\x22\xce\x1a\x1e\xe4\xd5\x8\xe6\x9a\x98\xed\x61\x17\xa\x39\xcf\xe2\x4c\xd0\x8a\x36\x75" }, - { 0x542220, "\xee\xa9\x92\x52\x24\x57\x44\x8e\xa0\xb9\x95\x20\x5b\x70\xbd\xc3\xa7\x17\x4d\x1d\x12\x9a\x0\xd0\xfc\x9d\x41\x6\xf4\x86\x50\x74\xe1\x5d\xa2\xdf\xa1\xa3\xf\xd5\x1b\x62\x28\x7c\x10\x79\x9b\xe2\x13\x7d\xce\x97\xd7\xb\x56\xf0\x63\x3c\x68\xdc\x21\xed\x7\x3d\x7a\xb6\xb5\x23\xe6\x3f\x29\xeb\xd6\x67\x89\xb3\x87\xf2\xfb\x71\x90\x5a\xc6\x42\x2f\x32\x77\xd4\x15\xde\x84\xff\x7b\xd3\x47\xa5\xb8\xc4\x8b\x55\x6c\xc2\x5\x54\x1a\x65\xfe\xcf\x6a\xb7\xa6\x4\xc9\xaf\xf8\xf7\x40\x8d\x16\xae\x3e\x99\x6f\x4b\xac\x26\x3\xb4\x2e\xf3\x69\x34\xb0\x8f\x45\xcc\xd9\x2d\xcd\x4c\x9e\x5f\x85\xe5\xca\x58\xe\x9c\xf5\xfa\x38\xc1\x30\xd\x94\x36\x6b\xc8\xe4\xad\x39\x3b\x22\x46\x96\xc7\xbc\x5c\xe9\x80\xa\x73\x33\xfd\xd8\x88\x2a\x4e\xef\x4f\x5e\xc0\x1e\xc5\x27\xec\x18\xf1\xd2\xc\xba\x8c\xa8\x59\x98\xe8\x9f\x43\x51\x49\x72\x19\xbf\x2\x1f\xbe\x64\xda\x53\x4a\xab\x82\xf6\x3a\xbb\x91\xaa\x6d\x78\x81\x66\x7f\x75\x76\x1\x25\x35\xb2\x8a\xcb\x11\x48\xdb\x61\xe3\x6e\x93\x60\x14\x37\xf9\x9\x1c\x2c\xd1\x2b\x8\xa4\x7e\xea\xdd\x31\x83\xe7\xe0\xb1" }, - { 0x53ab20, "\xa5\xff\x5f\x5c\x76\xd0\x2c\x5d\x56\x88\x78\x11\x5\xaa\x2d\x3\x25\x2f\x32\x44\xae\x7d\xd4\xc\x38\xda\x6b\xde\xb1\x9f\xb5\x2b\xd1\xa8\x30\xf8\x1e\x73\xb6\x95\x55\x4\xaf\xf6\x48\x7c\xb3\x3f\x4b\xe2\x8b\xcd\x3e\xe0\x9c\x67\xc9\xf1\xfe\xea\xd6\x42\x63\xcb\x82\x94\x28\xc6\x54\x2e\x81\x52\x46\x41\x1\xe\x12\x43\x9\xf7\x3c\x2\x8c\xc7\x74\xd3\x45\x37\xbf\x58\x59\x6c\xfd\x7\xb0\x16\x39\x64\x23\xf9\x6a\x7a\x14\xd9\xb7\x86\x50\x19\x8\x57\x4e\x97\xac\x22\x7e\xbb\xad\x79\x4f\x85\x27\xc2\x61\x71\xe9\x1c\xc8\xc1\x93\x36\x70\x24\xc3\x3d\x1b\xf2\x6d\x15\x51\xfa\xbe\x87\xc4\xc0\x96\xb\xca\xa4\x75\xd8\x77\x1d\x53\x62\xe6\x2a\xb2\x4a\x8e\xd5\xdc\xf5\x35\x72\x5e\x34\xa1\x33\xc5\x69\x18\xa\xb4\x7b\x83\x31\xab\xa0\x9b\x21\xbc\x84\xfb\xd7\x89\x0\xd2\x3a\xfc\x13\x1a\xcf\xf3\xdd\x10\x90\x3b\xe4\x26\xf4\x4d\xa7\xf\x40\x7f\xe5\x29\x17\x8f\x20\xeb\xbd\x80\x99\x65\xa6\x6f\x4c\x47\xdb\x60\x1f\xec\x98\xe8\xa2\xb8\xb9\x5b\x91\xed\xf0\x9d\x68\x8d\x6\x5a\xba\x66\xdf\xa9\xe7\xe1\xef\x9e\x8a\xcc\x9a\xee\xd\x6e\xa3\xe3\x49\xce\x92" }, - { 0x542738, "\xa5\xc3\x4\xb9\x92\x3d\x8a\x86\xe9\x67\x74\xd8\x9b\xcc\xe6\xd\xc6\x23\xf\xa1\xac\x42\x28\x93\xf8\x9c\x8d\xc7\xb7\x3\x8c\x69\x3c\xd1\x81\xf9\xa0\xfd\xba\x0\x75\x49\xc4\xb\xfc\x68\x65\xb0\x80\x64\xa\xda\x83\xf5\x58\x14\xec\x46\x1f\x61\x13\x27\x6b\xce\x1d\xbe\x96\x19\xc2\x9\xef\x37\x2f\xe2\x47\xf1\x7e\x21\x30\x90\xf7\x2b\xf4\x3b\x7\x1a\x56\xd3\x72\x5b\x4b\x85\xe\xd5\x8\x6f\x5d\xc0\x79\x59\x26\x98\xfe\x7d\x6\x4d\x10\xbf\xf3\xee\x2e\xe0\xe7\xd7\xd2\x9f\x60\x88\x25\xde\x7f\x4e\xe1\xae\xdf\xe4\x38\xb8\xe5\x8f\xa2\xd9\xcd\xa4\x73\xdb\x84\xb5\xca\x17\xa7\x54\xab\x97\x91\xfa\x66\x1c\x2d\xea\x31\x35\xe3\x77\xa9\x36\x5c\xc\x76\x95\x5a\x7c\x1b\xbd\x8e\x94\xff\xf2\xbc\xc1\xb4\x87\x2c\x44\xb6\xaa\xc8\x33\xf6\xa8\x45\x48\xa6\x6c\x1\x63\x55\x6a\xd6\x9a\x57\x40\x15\xad\xb3\x3a\x5\x43\x51\xfb\x71\x9d\x22\x1e\xed\x53\xd0\xc5\x8b\xeb\x18\x6d\x20\x3e\xcb\x89\x34\xf0\x3f\x2a\xcf\x39\x16\x4a\xaf\x9e\x29\xb1\x6e\x62\x11\x82\x5f\x7a\xbb\x52\x12\xc9\x99\xa3\xdd\xdc\x4c\x5e\x24\x50\xd4\x78\x70\x4f\xe8\x32\xb2\x2\x7b\x41" }, - { 0x542df8, "\x94\x3b\xd0\xd7\xba\xb3\x84\xc4\x36\xdc\x30\xa9\xdd\xc7\xb1\x75\xe6\xa4\x71\xc2\x60\xbf\xf3\xea\x51\x49\x2f\x4e\xa5\x1\xa2\x44\x2\xfe\x85\xf0\x4\xcf\xac\xb7\x2c\x35\x5f\xa6\x18\x6a\x7a\xae\x9\xd3\x3c\x1a\xd1\x12\xcd\xaf\xcb\xb6\xe2\xef\x73\x7d\x47\x2d\xe0\x4b\xf5\x89\xbd\x79\x4c\xdf\x29\x19\x7\xbc\x66\x5c\xed\x62\x68\x3f\x81\x1b\xb4\x11\xc5\x93\xd\xc\x16\x52\x23\xff\xf1\x37\x83\x6d\x58\xab\x77\x59\x65\x46\x97\x56\x6e\xbe\xa1\xf9\x7c\x34\xc3\x76\xf\xb5\x96\x24\x10\xce\x82\x1d\x45\x1f\x67\xd4\xaa\x53\xad\xeb\xe5\x3\xa0\x64\x27\x38\xc8\x8b\x9f\xc1\x8c\x2b\xe9\x2a\xf6\xd8\x4f\xfa\x41\xe4\x7e\x8e\xe8\x90\x63\x9b\xb0\x72\x4a\x40\x57\xde\x61\xfc\x48\x1c\x17\x13\x14\x95\x99\x39\x28\xc0\x31\xe1\x98\x50\x5e\x0\x78\x3d\xfb\xf7\xda\xd5\x70\xca\x8f\x88\x6\xf4\xc9\xb8\xa7\x15\x5d\x6b\xbb\x8\x74\x1e\xcc\xd9\x21\x3a\x20\x3e\x92\x2e\x33\x54\x8d\x4d\x80\xf2\x5b\x91\xee\x42\xa8\xd2\xb9\x7b\xe\x9c\xf8\x9d\x86\x25\xa3\x22\xec\x5\xc6\x87\x32\x9e\xb2\xe7\x5a\x55\xa\xdb\x43\x8a\xb\x6c\x9a\xe3\x26\x69\x7f\x6f\xfd\xd6" }, - { 0x5430b8, "\x18\xde\x60\xb0\x52\x81\xc0\x13\xd9\xf6\x7f\x69\x1b\xa4\x27\x73\xa1\xe9\xad\x2a\x9b\x45\xc5\xa5\x2d\x16\xb6\x33\x5e\xc7\x3e\xd5\xbe\x5\x98\xa7\x82\x5c\xec\x29\xd1\x6b\x5b\x85\xf5\x89\xf1\x1c\xf9\x4b\x58\xa9\xac\x23\x2e\xe2\x7c\x36\x8c\x63\x2\x3b\x61\x39\x17\xe0\x32\xc1\xab\x4\x3d\x8f\x26\xd4\xef\xc9\x35\x2f\xe7\xd7\xa6\xcc\x9f\x44\xe4\xc2\xdc\x3f\x4d\x7e\x4a\xf7\x66\x38\x12\x3c\x96\x64\x5f\xf8\xcd\x7d\xb\x70\x76\x99\xba\xdf\xf\xa8\xff\xd2\x56\xeb\x94\xae\xbd\x78\xdb\xf4\xb5\x3\x7b\x80\xfe\xd0\xc6\x41\x0\xc\x86\x8e\x6d\x54\xb3\x4e\x8b\xb2\xb7\xe3\x43\xfd\x53\x11\xd6\xd3\x77\xed\x21\x14\x9a\x6\x9\x1a\x87\x9d\xcf\x37\xc4\x49\x6c\xe1\x10\x5d\x6f\x72\x19\x2b\x51\x15\x4f\x2c\x57\x55\x84\x92\x30\xd\x8d\x25\x24\x8a\xe6\xe\xf0\x22\xc3\x9e\xe8\x28\xbc\x1f\x65\xb1\x1\x20\xa\x46\x67\xfc\x31\x91\xe5\x5a\xca\x71\x90\xbb\xfb\x34\xea\xa0\x79\xee\xa3\xa2\xb9\xdd\x62\x7\xbf\x47\xce\x50\x88\x1d\xf2\x1e\xaa\xda\x9c\xd8\xf3\xcb\xb4\x48\x42\xfa\x4c\xb8\x6a\x68\x6e\x83\x7a\x97\x59\x93\xc8\x40\xaf\x75\x8\x74\x3a\x95" }, - { 0x543220, "\xbd\x7f\xc8\xb9\x77\x27\x36\x86\xbf\x96\xfe\xcd\xd\x93\xe0\xae\xec\x69\xee\x90\x3b\x91\x5a\xc0\xcb\x8\xfb\x5d\xa8\xe8\x26\x4c\x22\xf0\xa5\x5e\xff\xd5\x58\xc5\x89\x51\xf9\xfd\xfc\xce\xac\x74\x80\xa6\xde\x2e\x75\xd7\x61\x67\x3d\x35\xf6\x84\xdf\x3f\x5\xd8\x32\xc9\x54\x5b\x24\xc6\x6c\x11\x82\x9e\x2c\x99\x37\x9d\x1d\xd0\xbe\x6d\x6e\x92\xc7\x60\xe9\xaa\x47\x7e\x39\x2f\x97\x2\xad\x9a\xdc\xb3\x34\xca\xdd\x2d\xf5\x18\x81\xa4\x3c\x15\x40\x17\x63\xbc\xef\xcf\x1a\x52\xd2\x41\x55\x4a\x62\x8c\xf3\x68\x57\xe5\x9\xd6\x78\x59\xda\x7d\xe7\x50\x73\xba\x4f\xe1\x2a\xb0\xaf\x1e\x1b\xab\xcc\x9c\x0\x7\xe3\x46\x1f\x13\x85\x64\xe\x12\x45\x38\xdb\x79\x72\x70\xc2\x43\xb\xed\x44\xeb\xf2\x48\x30\x87\x8e\x31\x88\xb6\x49\x8f\xe2\x14\x7c\x76\xc3\xd9\xfa\x71\xa1\x6a\x25\x20\x98\x5c\x10\xf\x66\x94\xe6\xa7\x6b\xb4\xa0\xd4\x5f\x1c\x6\xd1\x7b\x8b\xb1\x4e\x28\x56\xb8\xf1\xc1\x16\x1\xea\xf8\x4\xbb\x19\x9b\x8d\x33\x42\xb7\x3a\x4d\xc\x7a\xe4\xf4\x83\x23\x9f\x3e\xc4\xd3\xb5\x3\x53\xb2\x95\x21\xa3\xa2\x8a\x29\x65\x4b\xf7\x2b\xa9\x6f\xa" }, - { 0x543580, "\xb3\xd\xc5\xef\x7f\x75\x36\xd3\xbb\x73\x87\x24\x17\x6b\xeb\x25\x53\x5c\xfb\xf9\x13\x67\x77\xe7\x1c\xcf\x8\x79\xba\xab\xa7\xc8\xc7\x98\x74\x2d\x34\xf\xaa\xf6\x97\x69\x9f\xc0\x8c\xd9\x51\xcc\xa0\xb1\xf3\xd4\x4d\xe8\x88\xd2\x90\xe2\xbd\x52\xf7\x72\x57\xb0\x4a\x96\x81\xd0\x1f\xbf\xf5\x6d\x10\xea\xb4\x4e\x85\xf8\xde\x56\x5\x4c\xa9\x38\x41\x8d\x4b\x0\xae\x84\x80\xc4\xb2\x15\x3f\x7e\xee\xfc\x7d\x27\xbc\xdc\x70\x6c\x2c\x78\x39\x40\x9b\xbe\x68\xe6\xdd\x5e\xc9\xf1\x2a\x2f\xa1\xe4\xa8\xa\xce\x18\xd8\x22\xa3\x4f\x1e\xe3\xe1\x11\x92\x46\xc\x99\x28\x54\x47\x5d\x7c\x3d\xb8\x5f\x6a\xad\xfe\xfd\x63\x60\x43\x59\xb\x91\x71\xcd\x48\x35\xd5\x2e\x61\x9\x65\x33\x3c\xe9\x1d\x26\x89\x1a\xf4\xb5\x9a\x7b\xa4\x37\x93\x94\x14\x8a\x6\x8f\xe0\xd1\x30\x4\xa2\xdb\x7\xc3\xd7\x8b\xaf\xdf\x82\x50\x3b\x23\x49\xfa\x3e\x42\xa6\xc6\x5b\x9e\x9d\x12\x62\x32\xb7\xed\x55\xca\x8e\xcb\xe\x45\xc2\x19\x6e\x64\x31\x86\x2b\xda\xd6\xc1\xe5\x3a\x7a\x3\x95\x5a\xf2\x21\x1\x9c\x29\xb6\xa5\x16\xec\xb9\x2\x66\xac\x1b\x44\xff\x20\x58\x6f\x83\xf0\x76" }, - { 0x543680, "\x82\x70\x6d\x44\x64\xe7\xe0\xb\x73\xf7\x12\x60\x5\x13\x9e\xe\x1a\xb8\xe1\xa0\x37\xe8\x61\xde\x55\xe3\x29\x25\x3e\xb6\x92\xcd\x6\x96\x56\x31\xa3\xe4\xcf\xe2\x7c\x23\x53\x84\xfd\xc\x62\x7f\xdd\xb0\x75\x15\x9b\xdf\xf3\x2a\x68\x87\x7\x5c\xd4\xfc\x6e\x80\x38\x5e\xd5\x3a\x50\xd0\x3b\x9\x9c\x4c\x8e\x40\xc2\x91\x58\x22\xae\xb3\x7e\xa6\x54\x90\x5a\x45\x7b\x2f\x18\xf8\x35\x3d\x48\xd\xc6\x20\x51\xfb\x3c\xf5\x2b\xa5\x32\xc3\xd7\x36\x6c\x74\xe6\x85\x1c\x88\xd3\x0\x6a\xa1\xac\xec\x97\xf1\x52\xf0\xf6\x1e\xeb\xfa\xd8\x27\x3f\xa9\x83\x9f\x86\x41\x5d\xaf\xdc\x8b\x8d\xa\x8a\x4b\x4a\xef\x99\xea\x7a\x77\x28\x21\x6b\x8\xc4\x2c\x81\xce\xd9\x14\xf2\xab\x69\x8f\xa2\x1b\xa7\xb7\xc1\x79\x72\x63\x6f\x33\x59\xaa\xb1\x42\x8c\x95\x10\x94\x76\x3\x7d\x16\x1d\xff\x24\xb9\x67\xbf\x66\x47\x4d\x9a\x4f\xc8\xbc\xd1\xed\xdb\xf4\x43\x49\x89\xbd\x1f\x5b\xb2\xc0\x98\x57\x4e\xe9\xc9\xba\x71\x39\xd6\x11\x19\x4\xa4\xfe\xb4\xcb\x26\xc7\x34\xee\x5f\xe5\xbb\x2d\xc5\x93\x46\x1\x78\xca\xad\xf\xcc\x17\xa8\xbe\x65\xda\xb5\x30\x2e\x2\xf9\x9d\xd2" }, - { 0x543848, "\x5c\x7c\xa2\x4a\x63\x12\x58\x19\xbb\xc7\x60\xfa\x18\xc3\x49\x84\xc8\x5d\x61\xa\xbc\x55\xb3\xf3\x57\xb\xc4\x5f\x56\xc9\x4c\xd0\xe\x90\x9d\x2d\x4\x54\x93\x8\x17\x52\x79\x3c\xb9\x2c\x51\x4d\xb4\xb8\x3b\xfe\x6b\x3f\xd4\x86\x38\xa7\x92\xa8\xea\x30\xcc\xa3\xd6\x8d\xdd\xeb\xbe\x82\xe5\x1a\x98\x77\x1c\xef\x7b\xe1\x41\x22\xc1\x36\x3d\xe0\x9e\x31\xd7\xe3\xc6\x59\x46\x73\xe2\xae\xcd\x1b\x42\x11\xa4\xdc\x9f\x9\xce\x35\x67\x8f\x96\x4e\x83\x5b\xf2\x10\x80\x81\x4f\x2f\x37\xed\xfc\x64\x0\x24\xf0\x99\x78\x9b\x7d\x7\xc0\x6e\xdb\x7a\x39\x76\x75\xbf\x25\x4b\xa5\xc2\x7e\x1d\xd3\x2e\xc5\x6f\x34\xb1\xee\x8b\x68\x21\x2\xab\xd1\x14\xf4\xd\x5e\x23\xf1\x1\xca\xb7\xf5\x95\xa1\x44\x9c\xc\xb5\x6a\xad\xe4\x29\x8c\xd8\xf\x7f\x3a\xec\x32\x6c\x5\x13\x5a\x70\xda\xcf\x53\xa9\xe8\xd9\x74\xa6\x27\x89\x47\x1e\x8a\xd2\xb0\x50\xa0\x9a\x94\x3\x87\x71\xbd\xb6\x62\x65\xd5\xe9\xb2\xaf\xf7\x26\xac\x66\xfb\x85\xaa\xe7\x33\x88\x20\xdf\xfd\x15\xff\x69\x1f\xcb\x3e\xf9\xe6\x16\x45\xde\x6\x40\x8e\x43\x97\x72\xf8\x48\x2b\x91\xf6\xba\x28\x6d\x2a" }, - { 0x543990, "\x43\x8a\x90\x7d\xc9\xb4\x33\x62\x2a\xc8\xdc\xcc\xe5\xd8\x8\x20\x5f\x53\x67\x18\xe0\x23\xad\xae\x93\x69\x59\x6d\x10\xd4\xef\xab\x5\xcf\xa1\xd7\x85\x97\x28\x98\x5e\x4a\xe1\xf\x13\x21\xc5\x86\x76\x22\x57\x2e\xc4\x77\xbe\x1d\x82\xb1\xd1\xf9\x6e\xb8\x81\xc6\xca\x4d\x26\x17\xe8\x12\xdd\xeb\xc0\xa\xe\xf2\x68\x9a\xf4\x61\xde\xa3\x3d\x2b\xe9\xe6\x48\x5d\x16\xa4\xb9\x45\xed\xe2\x55\x51\x4f\x99\xda\x24\x42\xea\x60\x5c\x9f\x37\x46\xbb\xb0\xb6\x7f\x3b\xe4\x8e\x73\xe7\x5b\xec\xe3\xce\xfb\x9d\xf5\x36\xa0\x6b\x40\x27\x3a\x4\xd\x15\x83\x88\x38\x63\x70\x2c\xd5\x5a\x58\x4c\x72\xac\xb3\x75\x29\x0\xd9\x35\x74\xa6\x6c\xc3\x66\x78\x56\xbc\x92\xb5\x50\x1f\xf1\x34\xa9\x1c\xcd\x3e\xb2\x8c\xbf\x44\xfc\x41\xc1\x7a\xdf\xee\x30\x65\xfa\xa2\x32\x91\x25\x80\xba\x3c\x39\x96\x54\x1\xf8\x71\x2d\x84\xa8\x6a\xfe\xaf\xa7\xf6\x4b\xc7\xd3\x8b\xf7\x3f\x8f\x9b\xfd\xbd\x19\x94\xdb\xc2\x52\x2f\x31\x2\x9\xff\xf3\x11\xb7\x95\x6\xaa\x7c\x9e\x7\x49\x4e\xd6\xa5\x1b\x1e\x1a\x64\x6f\xf0\x47\x79\x87\x7b\xc\x14\x9c\x3\x8d\xb\xcb\xd0\x7e\xd2\x89" }, - { 0x543bf8, "\x19\xf2\xd0\x35\x72\xe6\xde\xe8\x38\x97\xfe\xd4\x0\xa9\x94\x77\x50\x74\xb9\xc\x15\xce\x54\x71\x45\x65\xba\xa8\x6d\xff\xd2\x63\x86\x5b\x93\xc8\x8a\xb6\x46\x20\x73\xa3\xe2\xae\xfd\x17\x16\x9c\x7\x5\x6b\x4d\x2e\xfc\xaf\x56\xb5\x95\xd7\x42\xb8\x18\x23\xa\x34\xf0\xcd\xfa\x3c\x9d\x9e\x8e\x59\x6f\x67\x92\x68\x5f\xcc\xe3\xe0\x41\x5a\x26\xdb\xe7\x33\x1e\x53\x37\x55\xb2\xf\xdc\x28\x10\x75\xb1\x12\xf7\x6c\xda\x2b\x8c\x89\xf5\xd9\xec\xc1\xb3\xee\xdd\xa2\x4f\xef\x9f\xa1\xbf\xdf\xb7\xca\xc3\x9b\xf4\x8\xb\x83\x3f\x32\xc2\x62\x1a\x2d\x2\x69\x4\x7e\x79\x61\x4c\x44\x84\x3d\x47\x39\xd\x8f\x5c\x81\xe9\x76\x8d\xad\xc5\x80\xd8\xcf\xc6\x7d\x1c\xd6\x7a\x51\x82\xc9\x31\x4b\x6\xb4\x85\x3b\x58\xf6\x6e\xa4\x3e\xe4\xa7\x2f\x25\x7b\x30\x66\x14\xc7\x57\xc0\x64\x21\x4e\x22\x2c\x99\xbc\xbb\x52\x49\x36\x1f\x7c\xf8\xf3\x3\x90\x3a\xc4\xa0\x4a\x91\x87\xcb\xd3\x78\xfb\x11\x70\xd1\xea\xf9\x96\x9a\x9\x5e\x1\xa5\x2a\x1b\xab\xf1\xd5\x43\xed\x13\xeb\x5d\xe\x8b\xe1\x98\x48\x29\xb0\x6a\xe5\xaa\xa6\xbd\x88\x60\xac\x40\x24\xbe\x27\x7f\x1d" }, - { 0x543d08, "\x98\x9c\xb6\x1c\x91\xe3\x4d\x7\x3c\x42\xeb\x71\xda\x6c\x45\x61\x99\xd6\xb1\x14\x51\x28\x64\x3\x1e\xcf\x15\x10\xa\x75\x1b\xba\x73\x89\xc7\x69\xab\x3b\x8\x7b\x52\x82\xa9\xa0\x39\xa4\xf8\x6f\xa6\xad\x22\x9e\x50\xfc\xbf\x6\xe9\x5c\x2f\x8b\x1\x8d\xf0\x8c\xe2\xa5\xe\xe5\x4b\xf7\xaa\x66\x60\x4e\x7c\x4f\x34\xa2\xb4\x5d\xaf\xcb\x8a\xd4\xb7\x30\x88\x1d\xfe\xbb\x9a\x74\x9b\x37\xe1\x44\x3d\x38\x3a\xfb\x80\xc8\x41\x65\xc6\x4a\xd7\xf5\x70\x62\x2c\xc2\xb0\xf4\xae\x57\x21\xf6\x4\x54\x5\x2b\x83\x95\xdc\xb\x24\x94\x7f\xd0\x31\x84\x5f\xdd\xe8\x87\xce\xb8\xc5\x40\xc1\xa8\xd2\xc0\xd9\x53\xa3\x3f\x55\x6b\xa7\xf1\x1f\x13\xed\xf9\x3e\xc9\xc\x2e\x67\x96\xd1\x27\x77\xbd\x32\xde\xee\x48\xf\xc3\x76\x36\xcd\x2a\xe4\xea\xdb\x46\x6d\x25\x78\xef\x18\x11\xd8\xe7\xb5\xca\x4c\xbc\xff\xac\x5b\x97\x8e\xf2\xe0\x43\x20\x35\x93\x5e\x81\x63\x2d\x79\x68\x19\x92\x56\x12\x5a\x0\x47\xb9\xd5\xb3\x90\xf3\x1a\x33\x2\x26\xd3\x6a\x85\xcc\x7d\xa1\x23\xec\x9f\x7a\xfd\xe6\xfa\xbe\x29\xb2\x72\x7e\x49\x58\x6e\xd\x86\xc4\x16\x8f\xdf\x9\x17\x59\x9d" }, - { 0x544130, "\xc9\x1c\x8\x44\xea\x55\xb5\x3e\x8a\x54\xeb\xd3\x86\xbb\x3b\x6e\x31\x3f\x22\xbc\xe4\xfc\x81\x4b\xd7\x8c\x1e\xb7\xb4\xb\xc8\x7c\xbe\x69\x1d\x9a\xfe\x18\x2b\xde\x4f\x6c\xcb\x52\x35\xe9\xed\xad\x79\x56\xb2\x41\xe2\xf7\xdb\xff\x6b\x71\x15\xf8\x5c\xcf\x48\xa7\x3c\x92\x60\x4a\x9f\x1f\x80\x4e\x8b\x43\x90\xab\x39\xee\x5\xd9\x6a\x40\x66\xf5\xb1\x29\x65\x9b\xf1\x84\x1a\x0\x64\x5f\xe\x76\x6d\x7\xc5\x67\x5b\x4c\x73\xd1\x7a\xf\x82\x7b\x47\x85\x74\xe6\xa1\x21\x42\xd8\x8e\x95\x98\xe3\xaa\x27\xb6\xb8\x26\xc\x6\xe8\x5e\x37\xbd\x6f\xca\xc1\x14\x4d\x10\x50\x3d\xb9\xf9\x19\x97\x1b\x7e\x20\xaf\xd5\x51\x2\xa\x8f\xa3\xd6\xc3\x62\xb0\xf4\x32\x12\x94\x8d\xc0\x78\x61\xc2\xe7\x3\x30\x63\xa8\xdc\x77\x9\x89\xa0\x46\x7f\x58\xd\xac\xa2\xe5\x88\x9e\xe0\xc4\x57\x68\xf0\x36\x38\x24\x1\xec\x91\x25\xef\xfa\xd2\x13\xce\xd4\xbf\x3a\xcc\xba\x93\xf6\xfd\x5a\x45\xcd\x72\x87\x49\xa6\x2d\x53\x28\x99\x2c\xb3\x5d\xd0\x4\x34\x96\x23\x9c\xe1\xc7\x16\xf3\x2f\x17\x75\xa5\xfb\x11\xdd\x2a\xae\xa9\xda\x70\xa4\x7d\x59\xc6\xdf\xf2\x9d\x33\x83\x2e" }, - { 0x544298, "\x84\x6d\x8e\x4a\x54\x44\x86\xb1\x7b\x8f\xa3\xfe\xf2\x6f\x9b\x2a\xa\xdd\xd5\x4e\x94\xc6\x7e\x99\x46\x56\x1b\x62\xad\x9a\x1d\x5c\xb6\x11\x15\x7f\xa8\xb\x45\xe8\x18\x41\xf5\x19\x9f\x16\x31\x3e\xc7\x51\x6b\x5\xfd\x70\x10\x93\xd1\x32\x2f\xf4\x89\x64\xf7\x3b\x60\xca\x96\x4c\x90\xbd\xbf\xab\xb7\x68\xb3\xdf\x42\xd4\xa1\xcc\x21\x59\x72\xe4\xdc\x73\x9e\x79\x14\x3\xec\xda\xd7\x92\xf1\xb2\xb5\x39\x81\x4d\x5b\x1f\xf0\x67\x74\x7c\x1e\x57\x6e\xe1\xac\x30\xea\x6c\x13\x37\x3d\x98\x22\xc4\xbb\x20\x50\xc1\x27\xf6\x53\xb8\x87\xcb\xf\xd3\x48\xcd\xc3\x47\x12\x75\x2\xfa\x5d\x4f\x80\x1a\x5f\x8a\x8d\x83\x58\xa0\x52\xbe\x43\x36\x61\x8\x82\x6a\xce\xaa\xb9\xa4\xdb\x76\x3c\x8b\xc\x3a\xde\xef\x24\x2e\x4\x95\x55\xaf\xfb\xf8\xf3\xa2\xa6\x3f\x40\x66\x63\x77\xff\x65\x35\x69\x91\x85\x71\xc9\x2c\xd\xed\x97\x2b\x4b\x33\xba\x23\xf9\xe7\xc2\xc0\xe3\xeb\x5a\x9d\x78\x8c\x7a\x34\x9\x26\xd6\x5e\xe2\x1c\xc8\xb0\xa7\x28\x9c\xe6\x49\xd8\x25\x7d\xe9\x29\xe0\xd9\x6\xcf\xfc\x17\xbc\xd2\x7\xa5\xa9\xae\xc5\x38\xb4\xe5\xe\xee\x1\x2d\xd0\x0\x88" }, - { 0x546d50, "\xab\x73\xec\xa\xdc\x52\x12\x6b\xc5\x5c\x71\x5e\x44\x8f\x41\x90\x8b\xe\x83\xba\x9e\xe4\x62\x42\x20\x38\xf3\x75\xb\x1b\x17\xf5\xd4\xcb\xaa\x81\xb1\x6c\x70\xc3\x11\x76\xd1\x69\x47\xf4\x9f\xe9\x95\xf\x4c\xe3\xd8\x92\xc2\x60\x5a\xe8\xf0\xb2\x0\x7b\x18\x4e\x85\x43\x97\x16\xce\x7a\xa7\x2e\xb8\xd2\x30\x2a\x66\xc7\x5f\xdf\xdb\xd0\xb0\xbb\xe1\x96\x3e\xfe\xc0\x26\xf7\x61\xee\xcc\x48\x3d\xfb\x3c\x2b\xae\x32\x55\xb9\x36\x7e\x68\xe5\xe2\xad\xac\x2f\xb3\xf1\xa1\xc9\x1d\x29\x72\x82\x67\x79\x51\x4\x50\xed\x1\x4b\x57\x5b\x1a\xbe\x7\x8a\x4a\x56\x9a\x9b\xca\x99\x2d\xb4\x8c\xb5\xdd\x25\x1f\xa6\xf2\x35\x2c\x89\xcd\x53\x77\x7d\x1c\x19\x84\xd\x6e\xea\x4d\x88\xc1\x24\x40\xa8\x8e\xbf\xa0\x3a\x54\x22\x58\x28\x6a\x3\x94\x64\xa2\x34\xff\xd6\x93\xa3\x23\x37\x9c\x8\xa4\xc6\xfc\x6d\xb7\x45\xde\x49\x31\xa9\xe6\x9d\xd7\xfa\xe0\x4f\x3f\xfd\x78\x98\x39\x6\x91\x21\xbd\xb6\xc8\x3b\x9\xe7\xa5\x7c\xbc\xf8\xc4\xd9\xeb\xf9\x87\x7f\xda\x1e\x86\x63\x46\x5d\xd3\xc\x2\xd5\xf6\x10\x15\xcf\x14\x33\x65\x27\xaf\x59\x13\xef\x80\x5\x8d\x6f\x74" }, - { 0x544548, "\x1f\xf4\xd5\xe\x5c\x98\xdc\xdd\x53\x5a\xf0\x9c\x1b\x3b\xcb\xae\x3d\xa9\x99\x45\x97\x6b\x5b\x8\xb9\x44\xe8\x89\x6a\x92\xa0\xb3\xad\x8c\x5e\xd4\x77\x8b\x30\x72\x4e\x8f\xe0\x31\xec\xfb\x1d\xc0\xe1\xca\xab\x20\xb4\x73\x6e\xc9\xfc\x42\x35\xde\x93\x64\xaa\x85\xda\x14\xa5\x46\xa\xd0\xf6\xff\x2b\x6d\x33\x91\xa7\x59\xf1\xeb\xb2\x48\x62\xd9\x39\xf7\xfa\x75\x68\x4\xf8\xc4\x74\x6f\xe7\x41\x58\x15\x63\x55\xf5\x3\x1c\x9b\xe3\x52\xaf\xb0\x1e\x2d\xed\xe5\xa4\x5f\xd\x60\x82\xa2\x49\xbd\x7c\xcc\xb\xc3\x4b\x4a\xd8\x23\x28\x86\x51\xce\x7\x40\x7d\xd2\xe6\x4f\xa8\xfe\x9e\x65\x9a\xc1\x17\xee\x3a\x4d\x7e\xfd\x88\x12\x5\x9f\x78\x7f\xcf\x18\xea\x0\x61\xe4\x96\xdb\x6c\x26\x56\xbf\x1a\x16\x9\x80\xa3\x79\x36\xa1\x2f\x32\xf\xcd\xc5\x3c\xd6\x2c\x70\xd3\xf2\x84\xd7\xc6\xa6\x47\xf9\x34\x22\xf3\x66\x10\x38\x37\x6\x2\x54\x13\xb8\xe9\x29\xbe\x5d\x7b\xac\xb1\x67\x2a\x57\x3e\x7a\x83\x1\xb6\xc7\x9d\x94\x2e\x43\x76\x8d\x69\x8e\x24\x50\x8a\x25\xb7\x19\xd1\x87\xb5\x11\xef\xe2\xc2\xba\x21\x71\x27\x3f\x95\xdf\x81\xbb\x4c\x90\xbc\xc8\xc" }, - { 0x544700, "\x78\x6c\xc5\xc\x2d\xa7\x97\x9c\x22\x76\x3e\x81\x51\x47\x59\x71\xb1\xa2\x4a\x3c\xb5\x16\x6\x95\xb9\x1\xe6\x91\x96\x1c\x1b\xad\x61\x64\xb2\xe7\x29\x19\x52\x3b\xfa\xaf\x30\xdb\xd4\xb\xfe\x75\x1f\xbe\xcb\xf6\xea\x31\xf8\xd8\xa3\x82\x73\x1d\x99\xf0\xcc\xb6\x46\x26\xaa\x8c\x87\x90\x24\x8f\x7a\x13\xee\xd1\xa9\x5\xb3\xf7\x2\x7c\x4c\x1e\xff\xe5\x77\xab\xd6\x98\x20\x4d\xc4\x23\xf4\xa4\x85\x9a\x8e\x1a\xe\xf5\x15\x60\x38\x72\xe9\xf1\xc3\x68\xf2\x93\xd3\x2a\x48\x74\xc2\x57\xa1\x7d\x94\x37\x92\x5c\xe1\x41\x83\xd5\x65\x14\xa6\xdc\x44\x27\xef\xd7\x25\x10\x2c\x7f\x40\xa5\x55\xbd\x2b\xd\xd0\xfc\xdf\xa0\x4\x0\x62\xb4\x5a\xeb\x6b\x84\x7e\x6a\xde\xed\x66\x3\xfb\x2e\x4f\x4e\xbb\x36\x5b\x18\xe3\x69\x3f\xec\xe4\xd2\xa\x34\x63\xcf\xa8\xf9\x9b\x7b\x6f\xe8\x49\xc1\x9\x54\xf3\x50\x67\x79\xc0\x9f\x8d\x5f\x17\x70\x11\xc8\xbc\xc6\xe0\x35\x39\xc7\x6e\x21\xbf\xda\x6d\x28\xf\xdd\x33\xac\x8a\x12\xc9\xcd\xb8\x45\xae\x32\xce\xe2\x56\xfd\x42\x89\x86\xca\x4b\x3d\x5e\xba\x8b\x5d\xb0\xb7\xd9\x58\x2f\x8\x43\x3a\x53\x9e\x80\x88\x7\x9d" }, - { 0x5448a8, "\x8f\xf2\xa0\xf3\x5c\x91\xbb\xc7\xcf\x42\x8a\x62\xf4\x67\xb0\xd4\xad\x2f\xc8\x64\xe8\x6e\x40\xc5\x5d\x82\x85\xa\x24\x2a\x41\x74\x7e\xcd\xdc\x26\xea\xe7\x96\xfd\x57\x6f\x35\xa7\x29\x4a\xe4\x4e\x43\xe5\xd8\x79\xe1\xeb\x95\xc1\xa4\xed\x80\xa8\x31\x6\x44\x10\x6b\xbf\x3b\x25\x9e\x94\xee\x83\x81\x6d\x1c\x19\x78\xa5\x5\x56\x4d\x0\x93\xb2\x84\x77\xaf\x2e\x18\x7b\xd2\xf1\xd1\x23\x69\x32\x98\x73\x8c\x5b\x70\xac\x8d\x6a\xb\x30\x3e\xd3\xd9\xe6\xf6\xf0\xd\xf9\x20\x72\x50\x68\xd5\x5e\x99\xf7\xa1\xbe\x89\xca\xa9\xcc\x33\x92\x87\xc9\xb1\x9\x1f\x48\x11\xba\x8\x12\xc6\x22\x53\x71\x90\xb3\x7d\x1b\xb8\x45\x4c\xc2\x9a\x15\xdd\x7c\xb4\x55\xdb\xdf\xfc\x60\x3f\xef\x9d\x3c\x4b\x65\xc3\x13\x51\x4\xb9\xbc\x7\xd0\x97\x66\x8e\xec\x46\x54\xbd\xce\xe3\xe\x88\x8b\x16\x2c\xb5\xd6\xa3\xfe\x3a\xa2\x52\x5f\xe0\x9b\x36\x27\x3\xf5\xe9\xf8\xc\xd7\x28\xe2\xc0\xae\x86\xc4\x6c\xaa\xa6\xcb\x58\x61\x39\x1a\x7a\xab\x9f\x47\x34\x38\x2b\xde\xb6\x1\x2d\x1e\xff\x7f\x5a\x59\x4f\x76\x63\x2\x17\x21\xb7\xf\x14\x37\xfb\x49\x75\xda\x3d\xfa\x9c\x1d" }, - { 0x544a28, "\x5d\x70\xed\x8d\xab\x3e\xdb\x57\xbc\xf6\x88\xde\xd5\xa1\x80\x2e\xb0\x29\xf1\x41\x9f\x27\xc2\x5b\x1a\xd8\x61\x97\x2a\xcf\xa\x17\xf3\x18\x77\x8\x42\xbb\x2f\x94\x21\x25\x1f\xc\xb8\x3d\xa8\x87\xa7\x71\x0\xd7\x45\x36\x7a\x4a\xca\xf5\xad\x60\x9d\x83\x40\x84\x56\xe\x4\xd1\x2\x96\x73\xe6\xaf\x35\xbe\x95\xc7\x1\x81\xeb\xb5\x7f\x51\x43\x52\xaa\x50\x22\xb9\xda\x54\xea\xd\xa0\xcb\x6f\x4c\x6e\xa5\x31\xdc\xce\xd9\x7b\xb4\x7c\xb\x85\x8b\xae\x12\x2c\x4f\x34\xdd\x6b\x2d\x6a\xfe\x63\xd3\xfc\x3\x20\x6d\xf0\xe5\xc3\x19\x62\x72\x1c\xb3\xc4\x65\x9c\xee\xd6\xfd\x76\xe9\x11\xa9\xe7\x2b\x46\xbd\x78\x89\x13\x9b\xcd\x15\x99\x9a\x69\x3f\x7\x6\xcc\x37\xf4\x98\x9e\x30\x47\x6c\x3a\x23\xe4\x66\xe8\x79\x3c\x5e\x14\x91\xb7\x8c\xfb\x8f\xc0\x3b\x7d\xe0\xa4\xfa\xc6\x4d\x90\x82\x44\x5\x67\x7e\xd2\x49\x64\xc8\x74\x8e\x32\xf9\x10\xff\x5a\x48\x5c\xc9\x92\xac\x16\x68\xd0\xef\x1e\xf\x24\x58\xbf\xb2\x55\x1d\x59\xe2\x33\xb1\xa6\x86\x4e\x4b\xc1\xe1\x39\xa2\x9\xba\x75\x5f\x38\xf8\xec\xdf\x53\xb6\xe3\xc5\x26\xa3\x1b\xd4\x93\x28\x8a\xf7\xf2" }, - { 0x547670, "\x41\x55\xc1\xa3\xdf\xde\xf4\x5c\x1\x2e\xa8\xf0\x1f\x4e\x38\xf6\x9d\x24\x1a\xb3\xcc\xcf\x7e\x9a\x60\xd2\xed\xe1\x42\x92\xe\x6b\x39\x57\x8f\xad\xfa\x5f\xfd\x48\x8a\x4c\x73\x64\x7f\xf9\xbc\x77\x6a\xd0\xe7\x47\xd6\xa6\x13\xf7\xd1\xb2\x3b\x49\xbb\xbf\x19\x3e\xb9\x58\x6c\xcb\x32\x5b\xd9\x8\x2b\x86\x90\xa0\x2f\x36\xe8\xbe\x6f\xa\x44\xfb\x8d\xeb\x9f\x4\x75\x82\x72\xb6\xaf\x3\x2c\xfe\xae\xf8\x27\x4b\xf5\xcd\xb0\x4a\x35\x3d\x5d\x2\x7c\x10\xba\x2d\x76\x74\x4d\x21\x65\xdd\x98\x17\xca\x33\xd\x88\xc2\x96\xdb\x84\x53\x1e\x80\x1b\x7b\x5e\xb8\xb4\x3f\xd8\x1d\x56\x99\xec\x52\xc7\x70\xc3\x7a\xc\x34\x25\x5\xa5\xda\x16\x26\x54\xf3\xe0\xd4\x85\xbd\x9c\x68\xac\x8e\xe6\xd3\x87\xa2\x8b\xa1\x15\xb5\x78\xb\x0\x66\xea\x50\x79\x59\xaa\x22\x2a\x29\xc4\x7\x12\xee\x69\xf\xf2\x3c\xc6\x7d\x28\x9e\x6d\xc9\xe3\x20\xa9\x40\x94\x63\x71\x46\xff\x23\x4f\x14\xd5\xc5\xa7\xf1\x31\x67\x95\xe4\x93\x89\x11\x6\x91\xef\x8c\x6e\x62\xab\x51\x9\x5a\xdc\x83\x1c\xb1\xe5\xe2\x9b\xd7\x61\xb7\xc8\x3a\x43\xc0\xe9\x97\x81\x18\xce\x45\x30\xfc\xa4\x37" }, - { 0x5480c8, "\xa0\xee\x48\xc3\x70\x1d\x44\x7f\xad\x27\x74\x5c\xe0\x71\x7a\x1a\x5a\x6c\x9d\xef\x28\x88\xa4\x89\xed\x75\x67\x22\x79\xd1\x6d\x1\xc6\x25\x7c\x31\x43\xa2\x66\x10\xac\x4b\x9\x1b\xcc\x3c\x32\xb\x8e\xe4\x60\x73\xf2\x8f\xfb\x47\x9a\x4e\xc0\x55\xd5\x91\x46\x59\xfa\x7\xa3\xbd\x78\xb7\xf\xec\xcd\xa7\xc8\xd4\xe5\x64\x12\x8d\xbb\x7b\xf6\x1e\x9c\xa9\xcb\xbf\x30\x11\x2a\x83\x37\x3a\xc4\x87\x5b\xb9\x6f\xf5\xae\x40\x50\x39\x7e\xb2\xe3\x5\x8c\xf4\xff\x92\x5e\xeb\x57\x77\xb5\x96\xe2\xfd\xba\xb1\x29\x6b\x4c\x51\xf0\x81\x0\x13\xf8\x14\x65\xf7\x3e\xc1\xa1\x5d\x2d\xaf\x69\x35\x3f\xd3\x24\xdf\x1c\x23\xe1\xfe\xf3\xdd\x16\xe6\xd\xb8\xa5\x9b\x9e\x63\x8\x8b\xa\x2f\xf9\x2e\x6e\xb0\x94\xb4\x80\xd8\x4f\x4\x56\xb6\x97\x21\xcf\x93\x3d\x26\x7d\x2\xaa\xd0\x76\xe8\xde\x17\xdb\x86\xb3\xca\xd9\x84\x99\x4d\xc5\xea\x3b\xdc\xab\xbe\x18\xc7\x2c\x3\x6\x68\x4a\x2b\xc9\x62\x95\x82\x85\x33\xf1\x42\xe7\x15\x20\xce\xd2\x58\x49\x98\x45\x41\x5f\xd6\x34\xa8\xda\x8a\x54\x38\xfc\x1f\x19\xd7\xc2\xe9\x61\xa6\xc\x72\x52\x9f\x6a\xbc\xe\x36\x53\x90" }, - { 0x546af0, "\x15\x4f\x74\xa6\x26\xb3\xce\x55\x94\x77\xb4\x93\xba\xbc\x7d\xd4\xec\x2a\x79\xa2\x70\xbf\x14\x4c\x35\x4\xd7\x85\x6c\x0\x11\xf6\x69\xb8\x2\xa7\xc4\x6a\x58\x92\x39\x25\xe6\x9d\xa5\xa\xc7\xaa\xda\x36\xb5\x2d\xeb\x86\xa0\x12\x99\xb1\x9c\x34\xcc\xb7\x59\x62\xf0\xcd\x9f\x17\x8a\xca\xc3\xa3\x7\xf3\x57\x41\xe5\x88\xfb\x97\xde\xd1\x1\x24\x43\x68\x90\xa8\x4b\x72\xee\x80\xfa\x52\xf2\xe7\xf\x6f\x22\x5f\x37\x2c\x98\x73\xb2\x3a\xf8\xc9\xd0\x1c\x87\x66\xab\x5d\xf9\x9b\xb0\x32\x61\xa1\xe0\x29\x9\x31\x45\x2f\x2b\x30\x8d\x5b\x5e\xa4\xc5\x3\x51\x16\x1a\xe4\x4a\xc\x18\x1b\x6\x4d\x7c\x82\xef\x19\xb\x8c\x3f\xb9\x13\x53\xd2\x6d\xb6\x81\x64\xc1\xdd\x95\xdb\xc2\xe8\x46\x60\x8\xe1\xaf\x50\x1f\x1d\xea\xd5\xdc\xcb\xd\xdf\x83\x49\x8e\x2e\x44\x67\xff\x8f\x76\x63\xf7\xe9\x3e\x10\x47\x1e\xd6\x21\xf1\xa9\xac\x33\x89\x7b\x23\xbb\xf4\x20\xd9\xfd\xcf\x42\xc0\x3c\xc6\xe\x40\x5\x7e\x56\x7a\x38\x28\xf5\x48\xe2\x4e\x71\xbd\xc8\x5c\xed\x6e\x96\xae\x8b\x9e\xfc\x3d\x9a\x78\x5a\xfe\x91\xad\x65\xbe\x27\x84\x3b\x6b\xe3\x7f\x54\xd8\xd3\x75" }, - { 0x546bf0, "\xc5\xb4\xfe\x62\x85\x73\x6d\xa3\x55\x60\x8\x7\xa4\x84\x2f\xcd\xaa\x5a\x36\xd6\x8a\xc\x89\x9c\xa6\x43\xc2\x13\xec\x9\x2c\x16\x52\x63\x81\xf\xed\x1b\x42\xf4\x66\xb6\xfc\xdb\xe7\x1e\xd8\xd5\x29\x5e\xe1\x57\xb0\xb5\xb\x70\xe8\x1\x3b\xde\xd4\x3\x1c\xbf\x5b\x27\x24\x34\xd\xbb\x5d\x39\xbc\xf8\x5c\x4\x3d\x47\x2\xe5\xf2\xdf\xe6\xc4\x95\x7a\x77\x3c\xa0\xff\x6b\x32\x38\x8b\x1a\x7e\x14\x26\x67\xc0\x58\x50\x64\x35\x18\xe2\xd7\x3e\x74\x2d\x41\xb7\x8e\x17\x11\xca\xc7\xd1\xdd\xcb\xd0\x90\xee\xeb\x72\x4e\x53\x80\x68\x4f\x56\xbd\x86\x76\xb2\x6f\x3f\x10\xe4\xba\xfb\x44\xc6\x5\x75\x48\x30\x9a\x19\x8d\x4d\xbe\x7f\xa1\xfd\xab\x9b\xa8\xaf\xf3\x9f\x4c\xad\xef\x8f\x2b\xf0\x31\xe3\x0\x21\xa\x2a\xf5\xc9\x23\xc8\x22\x79\x12\x78\xae\xac\x9d\x3a\x40\xf1\x93\x7b\xa9\x54\x20\x88\xe9\x45\x92\xea\x99\x7d\x6c\xd2\xcf\x6e\xc3\x82\xda\xb1\xd9\xe\x6\x94\x8c\x96\x46\x5f\xd3\x7c\x98\x9e\xb9\xf7\x69\x87\xce\x6a\x83\x28\xa5\xfa\xcc\x4a\x59\xa2\x1d\x61\xf9\x65\x37\xb3\x25\xa7\x91\x71\x1f\xf6\x2e\xb8\xc1\x4b\xdc\x15\x33\x97\x51\xe0\x49" }, - { 0x544d20, "\xaf\x3a\xa1\x82\xc\x76\x4d\xed\x6a\x13\x70\xc9\xc0\x32\x7a\x63\xd\x6f\xca\xb5\xdd\x69\x8b\x83\x59\x62\x2b\x98\xa9\x60\x51\x34\xa0\x75\x8f\xef\x1e\x44\xab\x54\x9f\xbc\x4\xb7\xf1\x9a\x68\xf2\x28\x3f\xfd\x87\xfc\xb2\x10\x55\x11\x17\x47\x26\x48\x52\x4f\x25\xaa\x5c\x6c\x1c\x39\x8\xa6\x1d\xb3\xfa\xd4\xe7\x37\xa5\x8c\x22\x58\x24\x8d\x23\xad\x31\xe5\xbd\x1a\x53\xa2\x79\x71\xbf\x7\x67\xc7\xcd\x3e\xdf\x14\x21\x7b\x6b\xea\x4c\x49\x9b\x1b\xe4\x7f\xff\x29\x4b\x5d\xe9\xa8\x65\x77\xf3\xa\x6e\xd1\xe2\x89\x96\x38\xf4\x80\x3c\x6d\x2e\xc5\xc1\xf7\x92\x2c\x1f\x20\x41\x36\x2d\x12\x42\x78\x43\xce\xcf\xf\x7d\x90\x0\x5a\x30\xc6\x81\xd9\xf8\x4e\xeb\xd0\xbb\xa4\xae\xd2\xde\xe8\x5f\x9d\xd8\x27\xe6\x19\x9c\xec\x2\x74\x35\xba\x84\xe1\xb\x3b\x5\xfe\x4a\xfb\xb0\xcb\x97\xf0\x64\x86\x99\x91\x3\xbe\x45\xa3\xda\xb6\x95\x2f\xd6\xf6\xc8\x73\x33\x56\xf5\x15\xa7\xc3\x18\xd5\x8e\x93\xee\xc2\x50\xf9\x46\x7c\x6\xe3\xdc\xd7\xb4\xd3\xcc\xdb\xb9\xb1\x57\x94\x66\x85\xb8\x5b\x3d\x72\xe\x88\x40\x7e\x9\x1\x5e\x9e\x2a\x16\x61\xe0\xac\xc4\x8a" }, - { 0x544e20, "\xd7\x3b\xe0\x11\x7a\x3\xca\xc9\xdb\x34\x4a\xc8\x24\x45\x7b\xc\x61\xf9\xcb\xc4\xad\x3d\xea\xaf\x7e\x63\x8f\x66\x2a\x21\x2c\x94\xb5\x72\xb2\xc0\x30\x77\x2f\x51\x91\x6\xf8\x25\x49\x1c\x74\xff\xdf\xbd\x71\x80\x81\x2b\xe1\x0\x4d\xda\x67\x35\x29\xf3\xc1\x89\x46\x32\x7c\x69\x3e\x1b\xf0\xab\x42\x9d\x26\xc5\x20\xb8\x6e\x12\x90\xd\xa\x5f\x23\xf5\xb9\x5e\x8b\x2\xe6\xe3\xf\x6c\x13\x65\xc3\x1f\xd9\x92\xde\x16\xc7\xd8\x75\x2d\x76\x3f\x6b\xc6\x70\xa1\xee\xa0\xed\x47\x4b\xef\xe\xbb\x9c\x9e\x31\x55\x6d\x8c\x79\x60\xa5\x2e\xe9\x37\x83\x40\xcd\x36\x84\xfd\xce\xb6\x57\xa3\x14\xf2\xeb\xdc\x4c\x28\xcc\x15\xd2\x4f\x1a\x5b\x1\x6a\x50\xcf\x8d\xfe\xb0\xbe\x5d\x44\xb\x59\xd5\xd3\x33\x3c\x5a\x27\x6f\x58\xa9\x96\xb7\xd1\xf7\x5c\x68\x8e\x19\x88\x86\xa6\x1e\x7\xa7\x53\xa2\x4\x10\x54\x7f\xf1\xbf\xbc\x3a\xac\x62\x4e\x8\x99\xd0\xe4\x48\x5\xe5\xfc\x98\x9\xf6\xa4\x1d\x9b\xa8\x56\xdd\x41\xb4\xb1\xfa\x97\x52\x9a\xe2\xfb\x95\x85\xc2\x38\xd6\x8a\xaa\x39\x43\xba\x87\xe8\xf4\x22\xae\x17\xd4\x93\x82\x73\x18\xec\x78\x64\x9f\xb3\x7d\xe7" }, - { 0x546fd8, "\x40\x2d\xc5\x23\xcb\xf8\x99\x7b\x3b\xae\x91\xa6\xb8\x0\xb0\xe8\x50\x9d\xd\xaf\xd8\x1b\xd1\xe9\x9c\xc0\xc\xcc\x10\xc3\x53\xe0\xd0\x8a\x9\x2b\xb1\x47\x2\xb9\xce\xc4\x3c\xa5\x36\x1\x86\x94\x7f\x72\x7e\x2e\x17\x78\x62\xc8\x3a\x6\xd7\x32\x64\xea\xbb\x18\x8c\x1d\x66\xa9\x58\x8e\x84\x7c\x75\xcd\x45\xc9\x9b\xbf\x4d\x76\x1e\x1c\x49\x44\x3d\xef\x39\xa2\x3\x37\xdb\xbd\x5e\xbe\xf2\x6d\x67\x6c\xd5\x6b\xf\xf5\xd9\x33\x54\x2a\x82\xf6\xbc\xfd\xda\x13\x92\x68\x16\xed\x70\x9f\x5d\xeb\xec\xfc\xfb\xa3\x6e\x90\x5b\x98\x5f\x8f\xe4\xe\x15\xf4\xb5\x3f\x63\x35\x59\x85\x8d\x9e\x5\xb\xa8\x65\x60\xad\x8b\xb6\x8\x41\x12\x80\x1f\x93\xe5\x7d\x88\xa4\x4b\x89\x6f\x25\xdd\xe2\x30\x57\xf0\xac\xe1\x28\xa7\x97\xde\xee\x6a\xc1\xf7\xc7\x55\xd4\x61\x24\x51\xf9\xca\x2f\xe7\x4c\xb7\x4\xe6\x96\xe3\x11\xdf\x43\xcf\x42\xab\xb2\x83\x79\xc6\x52\xdc\xaa\xb4\x7a\x34\x4e\x26\x20\x5c\x19\xa1\xd6\xba\x48\x56\x2c\x9a\xf1\x4a\x46\x74\x5a\x95\x77\xf3\xb3\x71\x27\xd2\x73\xfa\x87\x7\xa\xd3\xa0\x29\x3e\x81\xff\x1a\x38\xc2\xfe\x14\x69\x21\x22\x4f\x31" }, - { 0x5470d8, "\x13\x32\xf2\xee\xb5\x4b\x96\xd\x64\xb2\xc\xb0\x2f\xc0\x73\x53\xbe\x4d\x4c\xbc\x6f\xd8\x95\x4f\xe0\x6b\x24\x39\x63\xbb\x2b\xc7\xb3\xf4\xf7\x86\x7c\xa6\x23\x2c\x70\x52\xbd\x8b\x48\x80\x98\xb8\xf0\x56\xed\x91\x35\x65\xc3\xd3\x62\x60\xb9\x88\x31\xe1\x37\x1b\xac\x6e\x9e\x55\x1\xea\x4a\x42\xe8\xd9\x2a\x99\x61\x3f\xe2\x68\x58\xcd\x6\xa5\xa7\xd1\x1a\xae\x20\xca\x81\x5\xc5\x3e\xad\x66\x7b\xdc\x12\xa0\xa3\x74\x0\xa8\xb\x19\xfd\xb7\xdb\xb4\xcc\x9d\x3d\xf3\x5f\x5b\x72\xaf\x87\x92\x44\xff\xd4\xc8\x76\x8e\x5d\xd5\x3b\x22\xa9\x36\x47\xf9\x18\x15\x25\x4\x83\xc9\xda\xd7\x4e\xe5\xe4\xfe\x33\xd0\xa2\x5a\x7f\xc1\xf\x1d\x2e\x8a\x8f\x50\x27\x9f\x57\x1e\xeb\x6d\xf6\x54\x59\x49\x9c\x7e\xcf\x28\x93\x45\xec\xab\xaa\xbf\xa\xd6\x78\x41\x7d\x77\x26\x46\xb6\x2\xe3\x3a\xfb\xe\x8\xcb\x51\x82\x9a\x40\x84\x9\x5e\xfc\x7\xef\x21\x14\x2d\x71\xf5\x67\x85\x29\xb1\x30\x7a\xde\x90\x1f\x3\xf1\x3c\x75\xe6\x79\x11\x94\xc2\x16\xba\x97\xa4\x10\xdd\x1c\x69\xc6\xa1\x8d\x5c\x6a\xf8\xe9\x43\x34\x6c\x17\x8c\xfa\xc4\x38\x89\xce\x9b\xdf\xd2\xe7" }, - { 0x546970, "\xe1\x9a\x3f\x1a\x1e\x5d\x57\x52\x34\xd5\x1d\x93\x35\x76\x92\xf7\xea\xb9\x5c\x3a\xe3\x1f\x70\x9b\xc\xf\xd2\x8e\x30\x4c\x4f\xb0\xb7\x8b\xfb\xaf\xd3\x58\x8\x38\x36\xa5\x0\x2c\x45\x3e\xa7\x4a\x32\x37\x2b\x56\xfe\x90\x51\xc1\x7\x6e\x23\x3b\xbc\x95\x15\x86\x16\x5a\xd0\x2e\x4e\xdd\xd8\xe5\x6b\x7d\xfa\x75\x18\x29\x7c\x48\x68\xb3\xf1\xd4\x8d\x63\x20\xba\x98\xad\xa9\x6\xfc\xb5\x84\x67\xc4\x4d\x9c\x7b\x17\xb6\xfd\x91\xcb\xe\xbb\x60\xe9\x99\x49\x83\x5\x8a\xdc\x66\x24\x21\xcc\x54\x28\x78\xd7\x7f\x2d\xcf\xca\x97\xed\x5b\xc5\x59\x94\xbd\x47\x40\x25\xde\x6d\x3d\xe4\x44\xe2\x6c\x1b\xce\x22\xb\x43\xc0\x7a\x2a\x73\x53\x31\x39\x11\x14\x3\xe7\xb2\xef\x2f\x77\x74\x88\xb1\x8c\x4\x72\x7e\x10\xee\xa4\xf5\xf8\xb4\x85\xe0\x41\x87\x9e\xeb\xc9\x50\x96\xd6\x13\x9\x26\x12\x80\x5f\xa8\x3c\xf3\x89\x46\x4b\xf4\xae\x27\xc8\xc7\x61\x82\xb8\xa3\xa1\xe6\x69\x5e\x2\xec\xab\xc3\xd1\xda\xbe\x79\xe8\x9d\xd9\xaa\xdf\xf6\xa0\x62\x8f\xac\x6f\xa6\x71\x81\xa2\xf0\x33\xa\x1\xf2\xc6\xdb\xf9\xcd\xff\x9f\xd\xc2\x64\x65\x55\x42\x1c\x19\x6a\xbf" }, - { 0x5467d8, "\xf0\x36\x69\x25\x6b\x37\xee\x56\x5d\x85\xc4\x8b\xc6\x2\x62\xe4\x70\x48\x41\x91\x9d\x38\xff\x55\xfa\x3c\x89\xe6\x73\x30\xa8\x2d\x59\x3e\xec\xf1\x2b\xc9\x9e\x87\x84\x78\x9\x3b\xcd\xb0\xe2\xd9\x31\xf\xfc\x82\xc0\xce\x50\xe3\xbc\x79\x3\x67\x72\x9b\x32\xc1\x7a\xd\xa3\x65\xf2\xd6\x97\x6d\x93\x6f\x83\xab\x11\x74\xc3\xbf\x1f\x6c\xb1\xd8\x64\xb5\x19\xdc\x2c\xac\xe\x8\xb8\x76\xcf\x26\xbb\x6e\x51\x99\xa4\x9c\x53\x4\x88\x3d\xa1\xaf\x9f\x47\x7e\xe5\xd1\x52\xf7\x18\xd7\x15\xf3\x95\xd5\x1a\x86\x68\x8f\xba\x77\xc2\xf9\x5a\x90\x46\xe0\x61\x60\x2a\xef\xdf\x12\x1d\x5c\x7\x21\x34\x9a\xb3\x57\xb4\xe7\x1c\x4c\x35\xa2\xf5\x7b\x5b\x1\x8d\xda\x42\x71\xad\xc8\xf4\x13\x4d\x63\xb6\xfb\xbd\xed\x4f\x8e\x75\x16\x20\x28\xd4\x3a\x8a\xdd\x49\x14\x10\xa0\xde\x4e\x96\xdb\xb\x40\x7f\xcb\x80\x4b\xc\x5\x1e\x24\xfd\x44\x5e\xc7\x17\xae\x7c\xb2\x22\xd3\x92\x8c\x98\x81\x0\xb9\x27\xa7\x58\xb7\xa5\x29\x54\x4a\x6\x45\x1b\x6a\x3f\x23\xf8\xe9\xaa\xca\x66\xc5\x2e\x43\xcc\xfe\xd2\x33\x2f\xa9\xe1\xe8\x7d\x5f\xa\xbe\xf6\xd0\xea\x94\xeb\xa6\x39" }, - { 0x546690, "\x34\xa1\x39\xaf\x83\xdd\x8b\xb9\xe3\xd3\x61\x77\xc\x52\x66\x5d\x31\x4\x9d\xb7\x6e\xeb\xb\x9b\x19\x2a\xb3\x7c\xe6\x53\xfc\x48\x1d\x68\x69\xed\xf8\xcb\xf1\x17\xb8\x84\xc5\x9c\x6c\x49\x97\x78\xa6\x18\xf7\xdc\x7a\x2d\x65\xd\x26\x56\xb4\xa2\x3\x93\xe9\x1c\x82\x14\x6f\xee\xd2\x74\xac\x62\xc0\x7b\x8f\xd7\x20\x35\x21\xe1\xa0\xcf\xcc\xc3\x67\x80\x55\xfe\x70\x4e\x58\xc8\x27\x0\x36\x5\xe0\x1f\x6d\x51\xd8\x25\x89\x2\x2c\x85\xde\x76\x81\x4d\x11\x9e\x2b\xe5\xcd\xda\x3b\xbd\x92\xc4\xdb\xf6\x46\xbb\xba\x75\xb6\x71\x7e\x79\x1b\xfa\xea\x64\xc1\xa9\x8c\x59\x5f\xe7\x90\x63\xb5\x5c\x98\x6b\x9f\xae\x5e\x7d\xad\xc6\x7f\x8d\x15\x6\xc2\x38\x43\x5b\x73\xa3\x96\xec\x3e\xe2\x99\x94\x1\x54\xca\xf9\x8\x24\xd0\x4f\xef\xf\x3a\x13\x72\xe8\xe4\xb0\x3d\xfd\x4c\x44\x5a\xf0\x60\xa5\xa7\x40\x88\x8a\xf4\xaa\x9\x4b\xf2\xd4\xbc\x12\x1e\x47\x41\x6a\x86\x45\xd6\x2f\x37\x50\xbe\xab\x91\xf3\x22\x8e\x95\xb1\x28\x87\xb2\x7\x3f\xdf\x16\xa4\x4a\x57\x33\x30\x23\xbf\x3c\xd9\x42\xc7\xff\xa\xf5\x29\xd1\x2e\x1a\x32\xfb\x9a\xc9\xe\xce\xa8\xd5\x10" }, - { 0x546548, "\xab\x48\xd1\x4b\xbe\x95\x99\x9\x10\x36\x91\xe\x4c\xe7\x14\xb\x96\x16\xb4\xdf\x75\x20\x80\x7f\x74\xb3\x47\x12\xf6\xb2\x4\xca\x44\xe8\x42\x9c\xd5\x86\x30\xe0\x1d\x1e\x28\xe2\x81\xde\x2a\xa2\x45\xf0\xaa\xcc\x5f\xe6\x63\x64\xd9\x1f\x70\x49\xe1\x85\x7c\xf2\xc5\x88\x9e\xb7\xba\x9b\x17\x6e\x82\xd3\x69\x3d\x6\x1\x68\x11\x71\xf7\xd8\x24\xb6\xc7\x67\x50\x7e\x9f\xfc\xe4\xf5\xbb\x55\x7\xeb\x3c\x13\xc\x4d\xd4\x25\x23\x56\xa0\x6d\x5e\xc8\x84\x61\x8f\xdc\x2\xbd\xbc\x6f\xcd\xf3\x6c\x92\xfd\x3e\x21\xed\x1c\x6b\x79\x59\xec\x41\xac\x2c\x58\x8d\x89\x35\xaf\xda\xb0\xd6\x22\x5d\xc3\xd0\xa\x1a\x2e\x43\xe9\x7d\x52\x5c\x34\xa9\xd7\x60\xb9\x53\xee\x39\x3b\xc9\xe3\xae\xdd\x4e\x57\x8e\xf8\x19\x46\xa6\x3f\xb8\x90\x8a\xc1\x33\x4f\xea\xff\x51\x2f\x66\xc6\xf\xef\xa7\x7a\x9a\xdb\x94\xd2\xfa\xa5\xd\x8c\x18\x77\xad\x87\xc0\x54\x32\x31\xa3\x38\x62\x37\xf4\x93\x98\xf9\x83\x40\xce\x15\x1b\x3a\xfe\x3\xfb\x6a\x8b\x27\xf1\x9d\x73\x5b\x65\xe5\x7b\xb5\x4a\x8\xc2\x72\xbf\xa8\xc4\x76\x29\x26\xa1\x2b\xb1\xa4\x0\x78\xcf\xcb\x5a\x5\x2d\x97" }, - { 0x545c58, "\x6\x15\x2e\xa6\xed\x8\xdb\x7b\x2a\x85\xcb\x50\x31\xf5\xb4\x63\x53\xc2\x6e\x91\x92\xe6\xaf\x68\x41\x61\x74\xf3\xbb\x23\xe4\x6a\xf8\xbc\xfe\xee\x93\x90\x6f\x5f\x8a\xf9\x81\xae\xe7\xad\xd0\x59\xcd\x57\x5b\xa5\xbe\x30\xc8\x39\x79\x35\x64\x3a\x6c\x73\x29\x13\x1c\x3c\x2d\xfa\x32\xa7\x71\xe5\x6d\x4d\xa1\x99\x51\x1d\xea\xaa\x67\x96\xe8\x98\xe0\x58\x5d\x8f\x49\x9e\x20\xb\xc6\xeb\xb5\xe\x7a\x4\xc5\x34\xc1\x1b\x77\xf6\xb3\x18\xd4\x47\x9a\x87\xca\x3d\x37\x21\x5\x3\xf2\x83\xa9\xce\x8c\xac\xd3\x9\x8d\xba\xe3\xd8\x4f\x24\x72\x36\x86\xb2\xcc\x69\xfc\x75\x9b\xd5\xd\x4c\xc3\x56\x25\x9c\x5e\x6b\x2b\xb1\x22\x60\x7\xd1\xdc\x8e\xf0\x4b\xb0\x97\x1e\x88\x27\x7c\xd7\xa0\xdf\x43\x1f\x5a\x54\xcf\xa\xa3\xd6\x78\x28\x66\x26\x89\xbd\xb6\x94\xc9\x2c\x95\x1a\x5c\xd2\xb7\xb9\x48\x17\x44\x70\xc7\x80\x52\x40\x11\xc4\x4e\xab\xda\xf\x45\x7e\x3e\x7f\xde\xbf\x1\xa2\x7d\xc\x55\xc0\x84\xa8\x65\x3b\x46\x2f\x62\x82\xef\x33\x76\x10\x14\xe2\x9f\x38\xf4\x42\xe1\xa4\xfb\xff\xfd\xec\x3f\xf1\xd9\xe9\x4a\x8b\xdd\x2\x9d\xb8\x0\x19\x16\x12\xf7" }, - { 0x545aa0, "\x93\x1a\x38\x7a\xa7\x8c\x82\x3b\x40\x4d\x17\x1\x33\x4b\x7c\xe9\x7f\x41\xcc\x62\xc4\xf2\x70\x2f\x2\xe8\x86\x81\xce\xfe\xab\xdc\xad\x30\x4\x6e\x55\xff\x59\xbd\xf5\x23\x2d\x5b\x98\x13\x52\xc7\x7e\xaa\x1e\x4c\xfb\x95\xa8\xf0\x47\xf6\xea\xa2\x1c\xfa\x1d\xe3\xcf\xd9\x12\x57\xc0\x49\x0\xbb\x68\x7d\x3d\x3\xfc\xc1\xd7\xd2\x3c\x91\xae\xa5\xbe\xb2\x51\x69\xd8\xee\xb5\xdd\xf4\x6b\xd3\x4a\x65\x8b\xaf\xde\xe2\x36\x66\xd4\xa9\xc5\x94\x46\xc3\x6\xd0\x73\x87\x27\x9a\xb6\xdb\xb3\xa6\xe0\xe6\xc9\xd\x28\x21\x60\x97\xf8\x71\x2a\x2e\x3a\xfd\xcd\x67\x63\x72\x54\x9f\xf7\x9c\xef\x9\xca\x32\x5\x37\xac\x8a\x96\xe7\x7b\x2c\x4e\xa3\x29\xdf\x31\x84\x20\x8f\xc2\x44\xf\xb7\x39\x76\x6d\x5e\xd6\xbc\x74\x9e\x5f\x78\x64\x99\x92\x6f\x42\x43\xf3\x77\x6c\x79\xb1\xa\xbf\xa1\x9b\xf1\x15\x34\xeb\x88\x50\xc\xe4\xb4\xec\x19\x7\x18\xba\x75\x6a\x48\x22\x3f\x8d\xb\x8e\x89\x5d\xc8\x11\xc6\x61\xda\x5a\xd1\xa4\x8\x10\xf9\xb8\xe\x85\x9d\x45\x56\xe1\x26\xd5\xcb\x1b\x5c\x24\x2b\x25\xb0\x83\x16\x53\xb9\x90\x80\xed\x35\x3e\x1f\x4f\x58\xe5\xa0\x14" }, - { 0x545d78, "\x28\x45\x39\x3a\x7e\x23\xae\x4c\xe5\x44\x3\x6c\x9a\xe3\xf8\x6d\x29\x79\x12\x48\xaf\x84\x19\x33\xf2\x94\x40\x9\x8\x56\x64\xa\x1\x5e\x34\x30\x95\xd5\x5d\x2b\x7b\xa1\xcd\x75\xf6\x61\xb4\xc6\x99\xe9\x1c\xde\x59\xb6\xe\xd3\xe7\xa9\xce\x5b\x15\xc8\xe8\xc5\x71\x42\x26\xa8\xb\x68\x3c\x70\x87\xc0\x5c\x20\xa3\x1d\xed\xd2\x91\xbc\x4a\x53\xfc\xb1\xbf\xc9\x37\x74\xb3\x69\x36\x5a\x32\x6e\xa6\xc4\x96\x10\x6b\x82\xbb\xe0\x93\x51\x3b\xe2\xd9\x98\x88\x47\x57\x63\xba\x1e\x4d\x8d\xb0\xa0\x22\x9d\xff\x3f\xab\x2\x9e\x41\xf\xf9\x8a\x76\xfb\x6\x6f\x14\xcb\x24\x90\xaa\xb8\xdc\x81\xfe\xb5\x83\x2c\x4\xc7\x55\xfa\xa2\xee\xc\xef\xbd\x5\x5f\x2f\x2e\xa4\xc2\x11\xf4\xe4\xf0\xcc\xf5\x4f\x92\x43\x4b\x54\xca\x3d\x8f\xb9\x66\x3e\x7a\x13\x46\xdf\xad\x7d\x72\xd1\x65\xdb\x35\xd6\x17\x31\xa5\xf7\x97\xc3\x1f\x73\x38\xe6\x89\x0\x50\xa7\x2a\x8c\xea\xec\x77\xc1\xeb\x8e\x67\xd7\xd0\xb2\x9c\x21\x7\xfd\xd\xbe\x85\x78\xcf\x2d\x86\xf3\x1a\x27\x6a\x80\xac\xf1\xd8\x58\x9f\xb7\x18\x25\xd4\x62\x4e\x1b\xe1\x49\x8b\x52\x7c\x60\xdd\xda\x16\x7f\x9b" }, - { 0x545e78, "\xa2\xb4\xa\xde\x9f\x7f\x85\x5d\xea\x41\x31\x7a\xae\x71\xd0\x1d\x56\x14\xd9\x61\xc7\x59\x69\xbf\x47\xe7\x8c\x29\xd7\xf4\x86\xb5\x2\x93\x22\x8f\x60\x11\xc1\x95\x4f\x3d\x6b\xcc\xd2\xd\x3f\x3a\xdb\xf9\xf0\x8\xb9\x4e\xb\x65\x43\x5a\xce\x4d\x91\x49\x2e\x5b\x99\x8d\xd5\x3e\xe1\x4a\x9c\x38\x78\x77\x7d\xbe\x4b\xfc\x3\x35\x33\x5\xe9\x45\xb6\x1c\xf\x2d\xaf\x53\x57\x54\xc0\xab\xfd\xa9\xcd\x12\x81\x39\x70\xc3\xff\x94\x0\x98\x96\xf5\x79\x20\x6d\xf7\x7e\x88\xf3\x5f\x75\x73\x15\xc5\xb2\x52\xda\x9e\xa5\xc4\x36\x25\xc\x7c\x42\xee\x1e\x6a\x66\x8a\x8e\xbc\xd6\x44\x74\xe8\x10\xa0\x5c\x26\x1\x68\xd4\xa7\xe3\xbd\x3c\xbb\x28\x24\xdd\xf1\x18\x27\x30\x6f\x4c\xdf\x9a\x8b\xa1\x46\xe4\xcf\x4\x67\xd1\xac\xdc\x76\xf6\x34\xa4\x80\x89\xe0\xa6\x55\x19\xb3\xad\x3b\xfe\x5e\xc8\x7\x6\x87\xd3\xfb\x6c\xe2\xf8\x6e\x48\xd8\x2b\xef\x2a\xe6\xc9\x63\xa8\x62\xb0\x2f\xc2\x16\x82\xec\x90\x1b\x23\x51\x97\x9\xf2\x7b\xcb\xe\xb1\xaa\xc6\x9d\xfa\x64\xed\xe5\x32\x50\x92\x72\xb8\x9b\x17\x58\x2c\x83\xeb\x84\x13\x40\x1a\x37\xb7\xca\xba\x21\xa3\x1f" }, - { 0x545ff8, "\xd3\x15\xec\xfd\x78\x34\xa2\x0\xbb\x4f\x7e\x3e\x16\x5e\x2f\x2e\x58\x3c\xd9\xcc\x49\x74\x1\xc\x84\xab\xfe\x2c\x93\xc7\x19\xea\x92\x36\x37\x47\x8c\xc6\x2d\x33\x6f\xf9\x5a\xd5\x56\xf\xef\xd1\xbf\xfb\xf6\x11\x7a\xbe\x6c\x57\xd2\x68\x6\xb2\x86\xf4\x89\x4e\x5d\xa\x9f\xb9\x42\x3a\x72\x65\xce\x7\xa8\xd6\x3b\x69\x64\xcf\x9e\x55\x4a\xe7\x1c\x1b\x67\x25\x7f\x38\x1e\x17\xeb\x88\xa3\x26\xa4\x8d\x87\xb7\xbc\x32\xad\xaf\x8\xde\x5f\x3f\xe8\xa9\xf8\x4b\xa5\x61\x79\xc3\x41\xe4\x9c\x83\x3\x21\x75\xb6\x54\xdd\x43\x91\x27\xfa\x66\xd4\x53\xb\x9d\xf1\x5b\x94\x39\x8e\xaa\xc8\x20\xc2\xb8\xe0\xa1\x28\x1d\x4c\xa7\xcb\x90\x6a\xd7\x40\x6b\x29\x13\x5c\x4\x8f\xe1\x9a\x31\xb1\x7c\xe2\x62\x1f\xc9\x10\x1a\xa0\x9\xb3\xe6\xf3\xc1\x5\xba\x82\x71\xc0\xe9\x60\x9b\xf0\x18\x12\x46\x48\xbd\xe3\xb4\xac\x30\xdf\xc5\x8b\xfc\x77\x81\x44\x97\xf5\xf7\x59\x98\x24\x3d\x2\x76\x22\xed\x6e\x2b\xff\xd\xc4\x70\x8a\xe5\xb5\x73\x99\xf2\x23\x52\xd8\xdb\x14\x96\xda\xb0\xd0\x45\x51\xae\xa6\x7d\x50\x6d\x95\xee\x80\x4d\xe\xca\xdc\x85\x63\x2a\x7b\xcd\x35" }, - { 0x546190, "\x96\xef\xf6\x25\x2a\x8e\x6d\xc1\x11\x1d\xb8\x33\x85\xa7\x4c\xc8\x76\xad\x24\x29\xbe\x30\xbf\x54\x5b\x21\xb5\x2f\x51\xde\xca\x74\x9f\x80\xec\xc2\x37\xb9\xe6\xc5\x3a\xe0\xf2\xc4\xd3\x3\xaa\xed\xcb\xc6\xa3\xf4\xe4\xba\x49\xb\x18\x50\xac\xf3\x4e\x64\xe3\x4f\xe\x22\x38\xdf\x94\xc7\xd7\x17\x84\x6c\xb7\xc3\x13\x4b\x47\xb0\x6\xa1\x40\x5f\xa0\x89\xf9\x8a\x3e\xab\x81\x9c\x36\x5\x1a\x62\x8b\x5c\xe8\x7f\x23\xe1\x14\x32\x61\xea\x2\xf1\x5a\x0\x4\x19\xf8\x7e\x7\xa8\x9d\x69\x8f\x1e\x79\xb6\x2d\x59\x6f\xdc\xd4\x8d\x8\x75\x16\x63\x88\x26\x99\x42\xee\x55\x77\xbb\x1c\x1b\xf0\xaf\xbc\xfa\x98\x9e\xc0\xa2\xf\x60\xa\x52\xa9\x2e\x7a\x82\x86\x2b\xce\xf7\x73\x28\xe9\xd6\x4a\x90\x43\x2c\x5e\x8c\x10\x6a\x3b\xf5\xda\x68\x3c\xe2\x91\x56\xa5\x15\xae\xcc\x31\x95\x35\x39\x71\xd0\x7b\x78\xcf\x65\x53\x41\xa4\x6b\x7c\x67\xc\x57\x4d\xfc\xa6\xd\xd2\xc9\x9\xcd\x48\x12\x97\xb4\xfd\x3d\x83\xd8\xfb\xfe\xe5\xdd\x45\x92\x7d\x6e\x1\x5d\xe7\x20\x66\x58\xff\xb3\x3f\x27\xbd\x46\x34\x72\xd5\x1f\xb1\x70\xd9\xb2\xeb\x87\x9b\x9a\xd1\x93\x44\xdb" }, - { 0x546290, "\x35\x7e\xbe\xb8\x37\x3c\x49\x22\xfe\x94\x24\x93\x78\x2\xcf\xdd\xe3\xb0\xe1\x70\xd3\xc3\xaf\x68\x6\x31\xb4\x7\x3d\xeb\x75\x76\x62\x5e\x73\xe6\xbf\x32\xd8\x9e\xdb\xda\x1b\xca\x11\xbc\x2f\x47\x6b\xed\xdc\x86\x64\x90\x65\xd0\xf4\xe4\x39\xa7\x16\x43\x8b\x5d\x61\x8a\x0\xf\xc4\xe9\xb9\x53\xe7\x15\x92\x21\xe0\x6e\xcb\x4a\xfb\x91\x9c\x97\x28\xc8\xd7\xd2\x99\x74\xb7\x4d\x63\x8e\x80\xe\xd9\xa0\x95\x2e\xc9\x7b\x42\x3a\x58\xd\x1c\xce\x84\xc6\x1e\x67\xa8\xc5\x17\x33\xcd\xd1\xdf\x8f\x66\x9f\xc7\x1\x3e\x2a\x23\x5\xb\xf9\x51\x81\x40\xb5\xef\xab\xf2\x5f\x50\x30\x6c\x26\x82\xfc\x60\x83\x3\x3b\x56\xe8\xfd\x18\xb2\x98\xba\x72\x27\xf5\xa1\xaa\x36\xec\x69\x4c\x77\x34\x59\xf3\x38\x9b\x7d\xc0\xa6\x48\xae\x20\xfa\xcc\xd5\xde\xb3\x14\xa4\xa\x5c\xad\x25\x7a\x4e\xe5\x46\x6f\xff\x52\x4b\x1d\xea\x8c\x79\xf1\x9a\x8d\xa2\xc2\xac\x89\x6a\x41\x44\xf8\x57\x9d\x9\x13\x7f\x10\x12\x2d\x45\xee\xa9\xe2\xc1\x3f\x1a\xbd\x29\x19\x54\xf7\xa5\x71\xd4\x96\x7c\x5b\x1f\x87\x4f\x4\xf0\x5a\xb6\x6d\xa3\xd6\xb1\x2b\xbb\x55\x8\x88\xf6\x85\xc\x2c" }, - { 0x546398, "\x2f\x62\x9b\xe4\xee\xdb\x3f\x8d\xd3\xd7\x9c\x32\xd6\x4a\xca\x50\xe1\x8e\x6e\xf9\x99\xc5\x4e\xdf\x46\x5d\xd5\xb7\x6d\xb1\xb9\x7e\xf\xad\x44\x96\x13\x6c\x97\x26\xa8\x9f\x85\xde\xed\x56\xce\xda\xb0\xb\x1c\xb8\x3d\x5a\x1f\xdd\x84\xf3\xcd\x9e\x73\x28\x61\x8c\xbb\x69\x64\x4f\x0\x49\x3c\x75\xc3\x29\x8a\xe2\x4d\xc7\xcb\x10\xd\xe9\x7f\xc4\x60\x1b\x5f\xd1\x45\x42\x93\x59\xe8\x74\xff\x7a\x72\xea\xd4\xa\x3e\x7d\xc1\x31\xa4\x66\x92\xfd\xf6\x6b\x3b\xba\xbc\x19\x6a\x54\x4b\x38\x47\x43\x33\x91\x8b\xe\xae\x4\x76\x4c\xab\xc6\xbe\x36\xd0\xa0\x67\x90\x87\xf5\x9a\x77\xe6\xcf\xb2\x12\x22\x8\x37\x30\xaf\x16\x3\x58\xf1\xaa\x1e\x25\xeb\xf4\x21\xa9\xfe\x27\x83\xdc\x6\x2a\x48\x78\x68\xb4\xa7\x79\x9\x80\x81\xc8\x52\x17\xcc\x2d\x15\x94\x8f\xa1\x14\x98\xe7\xd9\x7b\xb6\x82\x5\xbf\x39\x88\xac\x86\xa2\xf8\xef\x23\x2e\x95\xd2\xa6\xf2\x2c\x3a\x2b\x65\x55\x18\xc9\x35\x57\x24\xd8\xec\xf7\xf0\xb3\x5b\x6f\xfb\x20\xbd\x5c\xfa\x71\x63\xc0\x1d\xe0\x53\x2\xa5\x7c\x51\x11\xb5\xfc\x1a\x5e\x9d\x40\x34\x1\x7\x89\xa3\xc\x70\xe5\xe3\x41\xc2" }, -}; - -static const struct buffer_t type_four_list[NUM_TYPE_FOURS]={ - { 0x55f320, "\x39\x25\x29\x3c\x2b\x3a\x32\x23\x26\x24\x2d\x3d\x35\x2e\x3b\x38\x20\x27\x28\x22\x33\x3f\x2c\x3e\x36\x2a\x30\x2f\x21\x34\x31\x37\x00" }, - { 0x55f340, "\x5f\x4b\x40\x5e\x43\x4e\x55\x41\x5a\x57\x5d\x5b\x51\x4f\x4a\x52\x53\x58\x42\x44\x49\x46\x4d\x47\x48\x45\x50\x59\x4c\x54\x56\x5c\x00" }, - { 0x55f360, "\x7a\x7c\x6f\x6c\x60\x62\x73\x69\x71\x65\x6d\x72\x78\x6b\x64\x70\x74\x7b\x7e\x76\x67\x68\x63\x77\x79\x7f\x61\x6e\x75\x66\x6a\x7d\x00" }, - { 0x55f604, "\x17\xc\x1a\x19\x13\x12\x3\x1b\xa\x7\x1e\x1d\x5\x16\x15\x14\xd\x8\xb\x10\xf\x1\x4\x0\x18\x1c\xe\x11\x6\x1f\x2\x9\x00" }, - { 0x5628c4, "\xd9\xd6\xd5\xc9\xda\xdd\xd2\xdf\xdc\xd7\xc3\xd3\xc8\xc6\xc4\xd1\xca\xcc\xc1\xc5\xd4\xc2\xc0\xcb\xdb\xde\xcf\xcd\xce\xd0\xd8\xc7\x00" }, - { 0x5628e4, "\xf0\xff\xfc\xe4\xfb\xf1\xf3\xe3\xf5\xfe\xea\xf7\xf6\xe2\xe5\xe7\xf8\xe8\xef\xf9\xf4\xeb\xed\xfd\xe9\xfa\xe0\xe1\xec\xf2\xee\xe6\x00" }, - { 0x5628a4, "\xa0\xb0\xb7\xb1\xbe\xbf\xab\xb2\xa6\xa9\xa8\xa2\xb4\xb3\xa5\xaf\xba\xac\xb8\xbc\xbd\xae\xbb\xa1\xb5\xad\xb9\xa3\xaa\xb6\xa7\xa4\x00" }, - { 0x55f6a4, "\xa9\xaf\xb5\xa6\xa1\xbf\xac\xb9\xa0\xb0\xa5\xad\xa4\xbd\xba\xb1\xbb\xae\xab\xb8\xb4\xb2\xa8\xa3\xb7\xbe\xa2\xb3\xaa\xb6\xbc\xa7\x00" }, - { 0x55f6c4, "\xcf\xd1\xd8\xc8\xc2\xce\xd9\xd2\xd6\xca\xc0\xd5\xdb\xcb\xc3\xc6\xd3\xd7\xdd\xdc\xc9\xd4\xde\xc1\xc7\xc4\xc5\xcc\xcd\xd0\xdf\xda\x00" }, - { 0x55f6e4, "\xee\xf5\xf3\xe7\xe1\xef\xfc\xf7\xed\xe6\xe4\xf8\xe8\xec\xff\xf0\xe2\xea\xe5\xe9\xf2\xfa\xf9\xfd\xeb\xfe\xf4\xe0\xf6\xf1\xe3\xfb\x00" }, - { 0x562928, "\x31\x3b\x33\x29\x34\x25\x24\x3d\x23\x28\x32\x27\x3a\x3e\x20\x22\x2b\x2e\x3c\x38\x30\x2c\x39\x35\x37\x2f\x3f\x2d\x2a\x26\x36\x21\x00" }, - { 0x55f744, "\x51\x41\x4c\x5d\x46\x5c\x5a\x43\x49\x48\x5e\x42\x53\x47\x54\x4d\x45\x55\x58\x40\x4b\x5b\x56\x4f\x5f\x57\x4e\x52\x4a\x44\x59\x50\x00" }, - { 0x562884, "\x84\x98\x8a\x88\x82\x92\x8d\x96\x85\x97\x8f\x90\x95\x8c\x80\x9c\x94\x9f\x91\x87\x86\x9d\x9e\x93\x9a\x9b\x8b\x83\x89\x81\x99\x8e\x00" }, - { 0x55f784, "\x96\x9c\x8a\x8c\x92\x81\x82\x84\x95\x93\x91\x9f\x90\x85\x9b\x9d\x80\x89\x8e\x8b\x94\x83\x99\x87\x8f\x97\x88\x8d\x9a\x86\x9e\x98\x00" }, - { 0x55f7a4, "\xb2\xa6\xa2\xaa\xa9\xb8\xac\xae\xab\xb7\xaf\xbc\xa3\xa0\xb0\xa5\xbf\xa1\xb3\xba\xb5\xbe\xb4\xbb\xb6\xbd\xb9\xa7\xa8\xa4\xad\xb1\x00" }, - { 0x55f7c4, "\xd7\xdc\xc0\xdb\xd9\xd5\xc7\xc4\xd4\xd6\xc2\xce\xd8\xc3\xd1\xca\xcc\xc1\xc8\xcd\xc5\xc6\xd2\xcf\xde\xd3\xd0\xda\xc9\xcb\xdd\xdf\x00" }, - { 0x55f7e4, "\xe4\xec\xf1\xf9\xe1\xfc\xe2\xe3\xfb\xe5\xef\xe7\xfd\xf7\xe6\xf8\xf3\xf5\xea\xfa\xe8\xeb\xed\xfe\xff\xf2\xf4\xe9\xee\xf0\xf6\xe0\x00" }, - { 0x55f804, "\x1e\xa\xe\x13\x1b\xc\x14\x10\x8\xb\xd\x18\x2\x1c\x1a\x16\x11\x4\x15\x17\x9\x5\xf\x7\x12\x1d\x1\x19\x6\x3\x0\x1f\x00" }, - { 0x55f824, "\x3c\x39\x32\x34\x35\x20\x3a\x2c\x3d\x2a\x2b\x26\x30\x38\x23\x33\x29\x2d\x36\x3e\x21\x25\x2f\x2e\x37\x31\x28\x24\x22\x3b\x27\x3f\x00" }, - { 0x55f844, "\x57\x4c\x51\x45\x53\x54\x4b\x5b\x59\x49\x56\x47\x42\x4e\x58\x5d\x5e\x40\x5f\x46\x52\x5a\x55\x44\x50\x4d\x48\x5c\x41\x43\x4a\x4f\x00" }, - { 0x55f864, "\x7b\x6b\x7d\x63\x7c\x61\x7a\x79\x71\x6c\x73\x74\x6e\x6a\x68\x7f\x66\x77\x67\x69\x60\x7e\x62\x6d\x76\x78\x6f\x72\x70\x65\x75\x64\x00" }, - { 0x55f884, "\x92\x9c\x98\x8a\x96\x84\x80\x9f\x9b\x97\x93\x8e\x9a\x87\x88\x85\x8b\x94\x86\x8c\x90\x8d\x9d\x91\x82\x89\x8f\x99\x81\x83\x95\x9e\x00" }, - { 0x55f8a4, "\xb8\xa9\xbf\xa3\xb3\xaa\xa2\xa5\xb6\xbd\xa7\xaf\xb4\xac\xa4\xba\xae\xa0\xbe\xb9\xa8\xbc\xa6\xb7\xab\xb5\xa1\xad\xb1\xb2\xbb\xb0\x00" }, - { 0x55f91c, "\x1d\x1e\x1\xc\x12\xd\x14\x8\xe\x15\x9\xb\xa\x18\x1a\x7\x1b\x6\x4\xf\x16\x2\x0\x3\x10\x17\x11\x19\x13\x1c\x5\x1f\x00" }, - { 0x55f93c, "\x3d\x2e\x2f\x35\x37\x25\x3f\x32\x3e\x23\x21\x27\x22\x2d\x3a\x39\x3c\x2a\x3b\x30\x29\x31\x26\x34\x24\x2c\x33\x2b\x20\x36\x38\x28\x00" }, - { 0x55f9d0, "\xcc\xd6\xce\xc0\xcd\xd5\xd0\xde\xdc\xd2\xc1\xc9\xc5\xc8\xc6\xd7\xcf\xdb\xc4\xd1\xdf\xd9\xdd\xc3\xd3\xd8\xc2\xd4\xcb\xda\xc7\xca\x00" }, - { 0x560280, "\x83\x85\x8d\x89\x9a\x96\x88\x90\x86\x9e\x9c\x95\x82\x84\x97\x8c\x98\x8b\x99\x91\x9b\x94\x93\x8a\x8e\x80\x9d\x9f\x81\x8f\x87\x92\x00" }, - { 0x56034c, "\x4d\x46\x52\x58\x5c\x51\x41\x5b\x42\x40\x43\x5e\x48\x56\x49\x4e\x44\x50\x45\x53\x47\x5f\x55\x57\x5d\x4c\x5a\x4a\x4f\x54\x59\x4b\x00" }, - { 0x56036c, "\x70\x74\x60\x65\x69\x6f\x79\x7e\x61\x6e\x64\x62\x75\x6b\x7f\x7b\x72\x71\x73\x7d\x6a\x66\x67\x78\x63\x7c\x6d\x77\x6c\x68\x76\x7a\x00" }, - { 0x5605b0, "\xa7\xa3\xbe\xaa\xbd\xa8\xa9\xa0\xa4\xa1\xa6\xb5\xb4\xb0\xa2\xba\xb2\xb7\xb3\xbb\xb9\xaf\xac\xbf\xbc\xb6\xab\xb8\xad\xb1\xa5\xae\x00" }, - { 0x560bcc, "\xd0\xc1\xd2\xcd\xca\xda\xd4\xdb\xc7\xd3\xc8\xc3\xcc\xd5\xc4\xc6\xdd\xcf\xc9\xcb\xc5\xc0\xd9\xd8\xd6\xde\xdf\xc2\xd1\xdc\xce\xd7\x00" }, - { 0x560bec, "\xe2\xee\xfb\xfe\xf2\xe5\xf9\xef\xed\xe7\xe3\xfd\xfc\xe6\xfa\xea\xeb\xec\xf0\xf1\xf3\xe0\xf4\xe8\xff\xe1\xf7\xe4\xf5\xf8\xe9\xf6\x00" }, - { 0x560c10, "\x2\x1b\x1\x11\x17\x1e\xa\x1d\xe\x8\x4\xf\x1a\x7\x9\xb\x10\x0\x1c\x18\x3\x12\x1f\xd\x19\x16\x14\x6\x5\xc\x15\x13\x00" }, - { 0x560d34, "\x37\x36\x29\x3a\x3d\x2e\x38\x25\x28\x39\x3c\x26\x2d\x24\x30\x23\x21\x31\x3e\x34\x27\x22\x2f\x2c\x2a\x3f\x3b\x35\x33\x20\x2b\x32\x00" }, - { 0x560e38, "\x23\x32\x27\x39\x28\x30\x36\x20\x3e\x3c\x38\x24\x34\x21\x35\x2e\x3a\x3b\x31\x3f\x2b\x37\x3d\x2a\x2f\x26\x22\x25\x33\x29\x2c\x2d\x00" }, - { 0x561014, "\x16\xe\x19\x1\x15\x2\xa\x14\x1c\xf\x10\x4\x8\xc\xd\x0\x18\x5\x1f\x1a\x17\x1e\x13\x6\x9\x3\x7\x12\x1b\x11\x1d\xb\x00" }, - { 0x561074, "\x65\x73\x7b\x7e\x6d\x69\x7f\x7d\x68\x6a\x60\x72\x78\x62\x67\x70\x61\x6c\x74\x79\x66\x71\x7c\x76\x64\x6e\x6b\x75\x63\x7a\x77\x6f\x00" }, - { 0x561094, "\x83\x9a\x89\x87\x9f\x8d\x97\x92\x9d\x95\x99\x81\x88\x82\x8c\x8f\x85\x84\x94\x8a\x8b\x9c\x86\x9b\x96\x90\x93\x8e\x80\x9e\x98\x91\x00" }, - { 0x5610b4, "\xbd\xbc\xa3\xa4\xbe\xb3\xa8\xab\xb0\xba\xb5\xb8\xb9\xaf\xb7\xa1\xb6\xaa\xac\xad\xbb\xb2\xae\xbf\xb1\xa5\xa0\xb4\xa2\xa9\xa6\xa7\x00" }, - { 0x5610d4, "\xc1\xc8\xc9\xc0\xdb\xce\xd1\xd6\xd3\xdd\xd2\xdc\xcb\xd4\xc4\xc7\xd9\xd7\xd8\xcc\xda\xc2\xcf\xca\xc6\xd0\xc5\xde\xd5\xdf\xc3\xcd\x00" }, - { 0x561190, "\x93\x94\x9c\x88\x80\x9d\x83\x8b\x8f\x97\x81\x87\x8c\x8d\x95\x96\x9a\x82\x92\x8a\x9b\x91\x9e\x98\x84\x86\x90\x85\x89\x99\x9f\x8e\x00" }, - { 0x5611b0, "\xae\xa0\xb1\xb7\xa1\xa6\xa5\xa7\xaf\xa4\xbc\xac\xb6\xb3\xb0\xa8\xb8\xbe\xb2\xab\xb9\xbd\xa9\xb5\xbf\xa2\xbb\xa3\xba\xb4\xad\xaa\x00" }, - { 0x5611d0, "\xcc\xd7\xd5\xca\xc0\xcd\xc4\xc2\xd8\xdf\xdc\xd1\xd4\xcb\xc6\xda\xc1\xd2\xcf\xc3\xdd\xce\xc7\xd6\xde\xd9\xc5\xc9\xd3\xc8\xd0\xdb\x00" }, - { 0x562968, "\x7a\x78\x79\x7d\x6b\x62\x7c\x6d\x75\x6f\x7f\x65\x61\x60\x73\x77\x63\x6e\x71\x66\x70\x6c\x68\x6a\x76\x74\x69\x64\x72\x67\x7b\x7e\x00" }, - { 0x55f214, "\xd\x14\x4\xc\x1d\x5\x7\x9\x1c\xe\x16\x11\x17\x3\x6\x15\xb\x0\x12\x13\x1\x19\x1b\x1f\x1a\x2\xa\x10\xf\x1e\x18\x8\x00" }, - { 0x55f380, "\x98\x88\x94\x97\x83\x90\x99\x84\x8d\x9c\x86\x9d\x9e\x92\x91\x8b\x8f\x82\x8e\x9b\x93\x85\x87\x96\x95\x8a\x8c\x9a\x80\x81\x9f\x89\x00" } -}; - -static const struct buffer_t type_five_list[NUM_TYPE_FIVES]={ - { 0x55f3f8, "\xef\xe7\xf6\xfd\xeb\xf4\xec\xe2\xf7\xf9\xea\xe4\xf8\xff\xf5\xfa\xe8\xee\xfc\xe9\xe5\xfb\xe6\xe0\xfe\xed\xf2\xe1\xf1\xf0\xe3\xf3\x00" }, - { 0x562948, "\x47\x41\x56\x59\x45\x40\x58\x48\x49\x57\x55\x54\x5a\x4c\x4f\x4d\x51\x5c\x53\x4a\x52\x5d\x5f\x5e\x50\x43\x42\x5b\x44\x46\x4b\x4e\x00" }, - { 0x561258, "\x5b\x49\x5f\x43\x57\x4c\x54\x59\x5c\x5a\x51\x52\x5d\x4a\x5e\x47\x44\x56\x55\x4d\x40\x50\x58\x48\x46\x45\x4f\x41\x4b\x4e\x53\x42\x00" }, - { 0x561278, "\x6b\x63\x7e\x69\x64\x7f\x70\x76\x68\x7d\x71\x60\x7c\x6d\x66\x77\x67\x6a\x7a\x78\x6f\x61\x62\x75\x7b\x74\x72\x65\x6c\x79\x6e\x73\x00" }, - { 0x561298, "\x91\x97\x98\x8d\x8a\x8f\x82\x95\x84\x93\x99\x92\x9d\x86\x85\x94\x83\x90\x81\x80\x8c\x9f\x96\x9b\x88\x8e\x89\x87\x9c\x9e\x9a\x8b\x00" }, - { 0x5613a0, "\xb1\xb0\xa4\xbd\xa8\xb5\xba\xbb\xb4\xb8\xaf\xb7\xb6\xa7\xbe\xae\xb2\xaa\xb3\xab\xac\xa0\xa6\xa2\xbf\xb9\xa9\xbc\xa1\xad\xa3\xa5\x00" }, - { 0x5613c0, "\xc0\xc5\xd0\xdc\xcc\xda\xc4\xdb\xca\xcd\xd4\xcb\xc7\xc3\xd2\xde\xc6\xd1\xc1\xc8\xd5\xc9\xdf\xcf\xd9\xd8\xd6\xc2\xd3\xce\xd7\xdd\x00" }, - { 0x5613e4, "\xf0\xee\xf8\xe4\xe8\xfb\xfa\xef\xf6\xf9\xf3\xec\xe3\xe0\xed\xf4\xe7\xff\xea\xfe\xe1\xe9\xf5\xf1\xfc\xe6\xe2\xe5\xfd\xf2\xf7\xeb\x00" }, - { 0x561404, "\x1a\x16\x2\x19\x11\x1b\x17\xf\x14\x9\x18\x5\xe\xa\x6\x1d\x0\x1e\x7\x15\x4\x12\x8\x13\x10\xc\x1c\x1\xd\xb\x1f\x3\x00" }, - { 0x5615a0, "\xba\xb8\xb2\xb5\xa0\xbc\xa1\xab\xb9\xbb\xbf\xb1\xa7\xb0\xbe\xa6\xb7\xa4\xaa\xae\xad\xac\xb6\xa8\xa2\xa3\xb3\xb4\xa9\xbd\xa5\xaf\x00" }, - { 0x561628, "\x34\x35\x2f\x3a\x30\x32\x31\x21\x27\x3c\x37\x23\x3b\x2c\x26\x36\x24\x25\x29\x3f\x33\x3e\x22\x2d\x3d\x38\x39\x20\x28\x2b\x2e\x2a\x00" }, - { 0x561748, "\x52\x54\x41\x5f\x53\x43\x5e\x56\x5c\x44\x5a\x46\x4d\x4b\x57\x5d\x51\x45\x58\x5b\x42\x49\x48\x59\x4a\x40\x47\x50\x4f\x4c\x55\x4e\x00" }, - { 0x561768, "\x6f\x6b\x7d\x63\x6a\x79\x7f\x7c\x6d\x78\x62\x67\x69\x74\x75\x66\x7a\x6e\x70\x7e\x72\x61\x7b\x71\x73\x68\x60\x65\x64\x76\x6c\x77\x00" }, - { 0x5617f0, "\xed\xe3\xeb\xe0\xf7\xf3\xfa\xf2\xf0\xfc\xfe\xfb\xfd\xe8\xe2\xef\xea\xf4\xe5\xe1\xee\xf8\xec\xe4\xe9\xf5\xff\xe7\xf6\xf1\xf9\xe6\x00" }, - { 0x561ea0, "\xa9\xaf\xb0\xac\xa3\xb5\xa7\xb7\xae\xab\xbd\xa8\xb9\xb1\xa0\xaa\xa1\xa6\xb8\xb6\xad\xb3\xb4\xb2\xa2\xbb\xba\xa4\xa5\xbf\xbc\xbe\x00" }, - { 0x561f38, "\x37\x31\x3a\x3e\x20\x33\x26\x3d\x29\x25\x2e\x39\x2b\x28\x36\x22\x23\x38\x35\x30\x2d\x2c\x21\x2f\x3b\x27\x32\x2a\x34\x3f\x3c\x24\x00" }, - { 0x561f58, "\x55\x44\x47\x4d\x57\x4c\x43\x4a\x51\x53\x41\x5f\x49\x4e\x54\x5c\x4b\x5d\x45\x5b\x56\x52\x50\x46\x59\x5e\x40\x4f\x48\x42\x5a\x58\x00" }, - { 0x561f7c, "\x79\x69\x61\x7e\x73\x7f\x6b\x66\x76\x7c\x63\x6e\x72\x6d\x67\x6f\x77\x71\x75\x64\x62\x74\x68\x7b\x70\x78\x6a\x65\x60\x7a\x6c\x7d\x00" }, - { 0x561f9c, "\x9a\x82\x90\x8d\x8f\x94\x89\x9d\x81\x9f\x93\x85\x84\x98\x9c\x88\x8e\x86\x97\x92\x9e\x87\x9b\x99\x83\x8b\x95\x96\x91\x8a\x8c\x80\x00" }, - { 0x562198, "\x96\x8e\x80\x89\x94\x99\x8a\x87\x90\x8d\x92\x9e\x84\x86\x9a\x82\x8f\x9b\x9f\x8b\x9d\x81\x88\x97\x95\x8c\x91\x93\x83\x98\x85\x9c\x00" }, - { 0x5622f0, "\xf0\xeb\xe7\xe9\xed\xe1\xfd\xea\xe3\xf3\xee\xf9\xe0\xfe\xe5\xf5\xfb\xec\xef\xf8\xfa\xf6\xf1\xff\xe6\xe4\xf2\xf4\xf7\xe8\xe2\xfc\x00" }, - { 0x562864, "\x73\x63\x69\x72\x64\x7f\x7b\x6d\x74\x75\x70\x6e\x66\x62\x77\x68\x6c\x7a\x6b\x76\x61\x71\x7d\x65\x78\x7e\x67\x7c\x60\x6f\x79\x6a\x00" }, - { 0x56238c, "\x97\x87\x80\x8a\x93\x9b\x88\x96\x92\x8e\x83\x9a\x82\x85\x9c\x8d\x9f\x95\x9d\x8c\x86\x89\x8f\x90\x94\x91\x98\x81\x8b\x84\x99\x9e\x00" }, - { 0x5623ac, "\xae\xb6\xbb\xb1\xad\xaf\xbf\xb2\xa9\xb4\xaa\xa6\xa0\xa8\xb7\xac\xb0\xa5\xb3\xba\xab\xa3\xa7\xa2\xb8\xbe\xa1\xbc\xb5\xbd\xa4\xb9\x00" }, - { 0x5623cc, "\xc2\xd8\xde\xd2\xd0\xce\xca\xda\xd4\xc1\xdb\xc0\xd1\xdd\xc4\xd5\xcb\xc3\xdf\xc8\xcf\xd7\xc7\xd3\xd6\xc6\xc9\xdc\xcc\xcd\xd9\xc5\x00" }, - { 0x5623ec, "\xec\xe1\xef\xee\xfd\xe8\xf4\xe7\xf8\xf1\xf0\xff\xf7\xfb\xfc\xf9\xed\xf5\xeb\xe5\xf6\xfa\xfe\xf2\xe4\xea\xe0\xe2\xf3\xe3\xe6\xe9\x00" }, - { 0x562908, "\x13\x1c\x1a\x1d\x19\x15\x1f\x11\x18\x1\x0\xe\x12\x1e\xf\x1b\x17\x3\x14\xd\x6\x8\x10\x2\xc\x9\xb\x4\x5\x16\xa\x7\x00" }, - { 0x56249c, "\x89\x9c\x8c\x97\x81\x96\x9a\x80\x91\x83\x8b\x93\x9f\x88\x8f\x8e\x87\x84\x94\x82\x8a\x95\x86\x98\x9e\x90\x92\x9d\x9b\x85\x8d\x99\x00" }, - { 0x562544, "\x43\x42\x55\x4c\x48\x5b\x5d\x46\x50\x40\x49\x5c\x5e\x41\x53\x57\x58\x5f\x51\x47\x45\x4b\x52\x5a\x59\x54\x44\x56\x4f\x4a\x4d\x4e\x00" }, - { 0x562564, "\x75\x65\x7b\x62\x7e\x60\x66\x6d\x61\x69\x6f\x7c\x6a\x76\x7f\x73\x63\x6c\x79\x7a\x70\x7d\x72\x71\x67\x68\x64\x74\x6e\x78\x6b\x77\x00" }, - { 0x5625a0, "\xbf\xab\xb3\xa0\xb6\xb5\xb4\xaa\xbd\xa5\xbe\xba\xaf\xa4\xae\xa1\xb9\xa7\xa2\xb2\xac\xb7\xa8\xa9\xa3\xb1\xb8\xb0\xbc\xbb\xa6\xad\x00" }, - { 0x5625c0, "\xc2\xdb\xcc\xd7\xdf\xc5\xd5\xde\xd6\xc9\xda\xd2\xcf\xdc\xd8\xca\xd9\xd0\xcd\xd3\xc4\xd1\xc8\xd4\xdd\xce\xc6\xc0\xc1\xc7\xcb\xc3\x00" }, - { 0x5625e0, "\xe0\xe6\xeb\xe8\xec\xe4\xfa\xfc\xe5\xfe\xf4\xe3\xea\xf8\xf2\xfd\xf6\xff\xe7\xe9\xef\xee\xf7\xf3\xf1\xf9\xf0\xed\xfb\xe2\xe1\xf5\x00" }, - { 0x562600, "\x12\x3\x1a\x15\x4\x19\xb\x1b\x17\x1e\xd\x5\x11\x14\x1c\x0\x18\x10\xa\x6\xe\x8\x2\x7\x13\x9\x16\x1d\xf\xc\x1\x1f\x00" }, - { 0x562620, "\x3e\x3b\x31\x27\x28\x26\x38\x37\x2d\x2f\x32\x23\x3d\x24\x2a\x3a\x2c\x33\x34\x3f\x2b\x39\x30\x21\x36\x25\x3c\x2e\x22\x20\x29\x35\x00" }, - { 0x562640, "\x4f\x5d\x57\x56\x4d\x45\x53\x5f\x5b\x49\x5c\x5e\x55\x41\x46\x48\x4c\x50\x4b\x42\x44\x4a\x47\x5a\x58\x4e\x43\x51\x52\x54\x59\x40\x00" }, - { 0x562660, "\x6f\x64\x7d\x7b\x75\x70\x61\x6b\x60\x77\x73\x67\x7e\x7f\x68\x6a\x79\x69\x65\x66\x6c\x7a\x74\x76\x6e\x78\x63\x7c\x72\x71\x6d\x62\x00" } -}; - -static unsigned int yahoo_auth_fibonacci(unsigned int challenge, int divisor, int outer_loop, int inner_loop); -static unsigned char yahoo_auth_read45(unsigned int buffer, int offset); -static unsigned char yahoo_auth_read3(unsigned int buffer, int offset); -static unsigned int yahoo_auth_typefourfive(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int initial); -static unsigned int yahoo_auth_typethree(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int offset); -static unsigned int yahoo_auth_typetwo(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int type_two_variable, int type_two_variable2); -static unsigned int yahoo_auth_typeone(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int type_one_variable); - -/****************************************************************************** - y a h o o _ a u t h _ f i b o n a c c i () -******************************************************************************/ - -static unsigned int yahoo_auth_fibonacci(unsigned int challenge, int divisor, int outer_loop, int inner_loop) -{ - unsigned int hash = (challenge & 0xff) * 0x9e3779b1; - - hash ^= (challenge & 0xff00) >> 0x8; - hash *= 0x9e3779b1; - hash ^= (challenge & 0xff0000) >> 0x10; - hash *= 0x9e3779b1; - hash ^= (challenge & 0xff000000) >> 0x18; - hash *= 0x9e3779b1; - - if (outer_loop > 1) { - const auth_function_t *ft; - - int remainder; - - hash = ((((hash ^ (hash >> 0x8)) >> 0x10) ^ hash) ^ (hash >> 0x8)) & 0xff; - - remainder = hash % divisor; - - outer_loop--; - challenge *= 0x10dcd; - - ft = &main_function_list[inner_loop][remainder]; - - if (ft) { - - switch (ft->type) { - - case 0: - return challenge; - case 1: - return yahoo_auth_typeone(challenge, divisor, outer_loop, inner_loop, ft->var1); - - case 2: - return yahoo_auth_typetwo(challenge, divisor, outer_loop, inner_loop, ft->var1, ft->var2); - - case 3: - return yahoo_auth_typethree(challenge, divisor, outer_loop, inner_loop, ft->var1); - - case 4: - case 5: - return yahoo_auth_typefourfive(challenge, divisor, outer_loop, inner_loop, ft->var1); - - default: - break; - } - } - } - - return challenge; -} - -/****************************************************************************** - y a h o o _ a u t h _ r e a d 4 5 () -******************************************************************************/ - -static unsigned char yahoo_auth_read45(unsigned int buffer, int offset) -{ - int i; - - if (offset > 32) - return 0; - - for (i = 0; i < NUM_TYPE_FOURS; i++) { - if (type_four_list[i].buffer_start == buffer) - return type_four_list[i].buffer[offset] ^ (buffer & 0xff); - } - - for (i = 0; i < NUM_TYPE_FIVES; i++) { - if (type_five_list[i].buffer_start == buffer) - return type_five_list[i].buffer[offset] ^ (buffer & 0xff); - } - - return 0; -} - -/****************************************************************************** - y a h o o _ a u t h _ r e a d 3 () -******************************************************************************/ - -static unsigned char yahoo_auth_read3(unsigned int buffer, int offset) -{ - int i; - - if (offset > 256) - return 0; - - for (i = 0; i < NUM_TYPE_THREES; i++) { - if (type_three_list[i].buffer_start == buffer) - return type_three_list[i].buffer[offset] ^ (buffer & 0xff); - } - - return 0; -} - -/****************************************************************************** - y a h o o _ a u t h _ t y p e f o u r f i v e () -******************************************************************************/ - -static unsigned int yahoo_auth_typefourfive(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int initial) -{ - unsigned int final_value = 0; - - int i; - - /* Run through each bit. */ - - for (i = 0; i < 32; i++) - { - unsigned char buffer = yahoo_auth_read45(initial, i); /* Find the location in the challenge to put the 1/0 bit */ - int mask = ~(1 << buffer); /* so that we can do a replace of our current value. */ - int new_value = (challenge >> i) & 1; /* Is this bit 1 or 0? */ - - final_value = (final_value & mask) | (new_value << buffer); - } - - return yahoo_auth_fibonacci(final_value, divisor, outer_loop, inner_loop); -} - -/****************************************************************************** - y a h o o _ a u t h _ t y p e t h r e e () -******************************************************************************/ - -static unsigned int yahoo_auth_typethree(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int offset) -{ - int new_challenge = yahoo_auth_read3(offset, (challenge & 0xff000000) >> 0x18) << 0x18; - - new_challenge |= yahoo_auth_read3(offset, (challenge & 0x00ff0000) >> 0x10) << 0x10; - new_challenge |= yahoo_auth_read3(offset, (challenge & 0x0000ff00) >> 0x8) << 0x8; - new_challenge |= yahoo_auth_read3(offset, (challenge & 0x000000ff)); - - return yahoo_auth_fibonacci(new_challenge, divisor, outer_loop, inner_loop); -} - -/****************************************************************************** - y a h o o _ a u t h _ t y p e t w o () -******************************************************************************/ - -static unsigned int yahoo_auth_typetwo(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int type_two_variable, int type_two_variable2) -{ - return yahoo_auth_fibonacci((challenge * type_two_variable) + type_two_variable2, divisor, outer_loop, inner_loop); -} - -/****************************************************************************** - y a h o o _ a u t h _ t y p e o n e () -******************************************************************************/ - -static unsigned int yahoo_auth_typeone(unsigned int challenge, int divisor, int outer_loop, int inner_loop, int type_one_variable) -{ - return yahoo_auth_fibonacci(challenge ^ type_one_variable, divisor, outer_loop, inner_loop); -} - -/****************************************************************************** - y a h o o _ a u t h _ f i n a l C o u n t d o w n () -******************************************************************************/ - -unsigned int yahoo_auth_finalCountdown(unsigned int challenge, int divisor, int inner_loop, int outer_loop) -{ - const auth_function_t *ft; - - int remainder = challenge % divisor; - - ft = &main_function_list[inner_loop][remainder]; - - if (ft) { - - switch(ft->type) { - - case 0: - break; - - case 1: - challenge = yahoo_auth_typeone(challenge, divisor, outer_loop, inner_loop, ft->var1); - break; - - case 2: - challenge = yahoo_auth_typetwo(challenge, divisor, outer_loop, inner_loop, ft->var1, ft->var2); - break; - - case 3: - challenge = yahoo_auth_typethree(challenge, divisor, outer_loop, inner_loop, ft->var1); - break; - - case 4: - case 5: - challenge = yahoo_auth_typefourfive(challenge, divisor, outer_loop, inner_loop, ft->var1); - break; - } - } - - return challenge; -} diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_auth.h --- a/libpurple/protocols/yahoo/yahoo_auth.h Tue May 19 06:34:27 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -/* - * yahoo_auth.h: Header for Yahoo Messenger authentication schemes. Eew. - * - * Copyright(c) 2003 Cerulean Studios - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - * - */ - -#ifndef _YAHOO_AUTH_H_ -#define _YAHOO_AUTH_H_ - -#define NUM_TYPE_THREES 105 -#define NUM_TYPE_FOURS 56 -#define NUM_TYPE_FIVES 37 - -unsigned int yahoo_auth_finalCountdown(unsigned int challenge, int divisor, int inner_loop, int outer_loop); - -/* We've defined the Yahoo authentication functions as having types 1-5; all take either 1 or 2 arguments. - */ - -typedef struct _auth { - int type; - int var1; - int var2; -} auth_function_t; - -/* Type 3, 4 and 5 require lookups into ypager.exe's many static chunks of 256 bytes. Store them here. - */ - -struct buffer_t { - unsigned int buffer_start; - unsigned char buffer[257]; -}; - -#endif /* _YAHOO_AUTH_H_ */ diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_crypt.c --- a/libpurple/protocols/yahoo/yahoo_crypt.c Tue May 19 06:34:27 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,207 +0,0 @@ -/* One way encryption based on MD5 sum. - Copyright (C) 1996, 1997, 1999, 2000 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper , 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - 02111-1301 USA. */ - -/* warmenhoven took this file and made it work with the md5.[ch] we - * already had. isn't that lovely. people should just use linux or - * freebsd, crypt works properly on those systems. i hate solaris */ - -#include -#include -#include - -#include "cipher.h" -#include "yahoo_crypt.h" - -/* Define our magic string to mark salt for MD5 "encryption" - replacement. This is meant to be the same as for other MD5 based - encryption implementations. */ -static const char md5_salt_prefix[] = "$1$"; - -/* Table with characters for base64 transformation. */ -static const char b64t[64] = -"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; - -char *yahoo_crypt(const char *key, const char *salt) -{ - PurpleCipher *cipher; - PurpleCipherContext *context1, *context2; - guchar digest[16]; - static char *buffer = NULL; - static int buflen = 0; - int needed = 3 + strlen (salt) + 1 + 26 + 1; - - size_t salt_len; - size_t key_len; - size_t cnt; - - char *cp; - - if (buflen < needed) { - buflen = needed; - if ((buffer = g_realloc(buffer, buflen)) == NULL) - return NULL; - } - - cipher = purple_ciphers_find_cipher("md5"); - context1 = purple_cipher_context_new(cipher, NULL); - context2 = purple_cipher_context_new(cipher, NULL); - - /* Find beginning of salt string. The prefix should normally always - * be present. Just in case it is not. - */ - if (strncmp (md5_salt_prefix, salt, sizeof (md5_salt_prefix) - 1) == 0) - /* Skip salt prefix. */ - salt += sizeof (md5_salt_prefix) - 1; - - salt_len = MIN (strcspn (salt, "$"), 8); - key_len = strlen (key); - - /* Add the key string. */ - purple_cipher_context_append(context1, (const guchar *)key, key_len); - - /* Because the SALT argument need not always have the salt prefix we - * add it separately. - */ - purple_cipher_context_append(context1, (const guchar *)md5_salt_prefix, - sizeof(md5_salt_prefix) - 1); - - /* The last part is the salt string. This must be at most 8 - * characters and it ends at the first `$' character (for - * compatibility which existing solutions). - */ - purple_cipher_context_append(context1, (const guchar *)salt, salt_len); - - /* Compute alternate MD5 sum with input KEY, SALT, and KEY. The - * final result will be added to the first context. - */ - - /* Add key. */ - purple_cipher_context_append(context2, (const guchar *)key, key_len); - - /* Add salt. */ - purple_cipher_context_append(context2, (const guchar *)salt, salt_len); - - /* Add key again. */ - purple_cipher_context_append(context2, (const guchar *)key, key_len); - - /* Now get result of this (16 bytes) and add it to the other context. */ - purple_cipher_context_digest(context2, sizeof(digest), digest, NULL); - - /* Add for any character in the key one byte of the alternate sum. */ - for (cnt = key_len; cnt > 16; cnt -= 16) - purple_cipher_context_append(context1, digest, 16); - purple_cipher_context_append(context1, digest, cnt); - - /* For the following code we need a NUL byte. */ - digest[0] = '\0'; - - /* The original implementation now does something weird: for every 1 - * bit in the key the first 0 is added to the buffer, for every 0 - * bit the first character of the key. This does not seem to be - * what was intended but we have to follow this to be compatible. - */ - for (cnt = key_len; cnt > 0; cnt >>= 1) - purple_cipher_context_append(context1, - (cnt & 1) != 0 ? digest : (guchar *)key, 1); - - /* Create intermediate result. */ - purple_cipher_context_digest(context1, sizeof(digest), digest, NULL); - - /* Now comes another weirdness. In fear of password crackers here - * comes a quite long loop which just processes the output of the - * previous round again. We cannot ignore this here. - */ - for (cnt = 0; cnt < 1000; ++cnt) { - /* New context. */ - purple_cipher_context_reset(context2, NULL); - - /* Add key or last result. */ - if ((cnt & 1) != 0) - purple_cipher_context_append(context2, (const guchar *)key, key_len); - else - purple_cipher_context_append(context2, digest, 16); - - /* Add salt for numbers not divisible by 3. */ - if (cnt % 3 != 0) - purple_cipher_context_append(context2, (const guchar *)salt, salt_len); - - /* Add key for numbers not divisible by 7. */ - if (cnt % 7 != 0) - purple_cipher_context_append(context2, (const guchar *)key, key_len); - - /* Add key or last result. */ - if ((cnt & 1) != 0) - purple_cipher_context_append(context2, digest, 16); - else - purple_cipher_context_append(context2, (const guchar *)key, key_len); - - /* Create intermediate result. */ - purple_cipher_context_digest(context2, sizeof(digest), digest, NULL); - } - - /* Now we can construct the result string. It consists of three parts. */ - strncpy(buffer, md5_salt_prefix, MAX (0, buflen)); - cp = buffer + strlen(buffer); - buflen -= sizeof (md5_salt_prefix); - - strncpy(cp, salt, MIN ((size_t) buflen, salt_len)); - cp = cp + strlen(cp); - buflen -= MIN ((size_t) buflen, salt_len); - - if (buflen > 0) { - *cp++ = '$'; - --buflen; - } - -#define b64_from_24bit(B2, B1, B0, N) \ - do { \ - unsigned int w = ((B2) << 16) | ((B1) << 8) | (B0); \ - int n = (N); \ - while (n-- > 0 && buflen > 0) { \ - *cp++ = b64t[w & 0x3f]; \ - --buflen; \ - w >>= 6; \ - }\ - } while (0) - - b64_from_24bit (digest[0], digest[6], digest[12], 4); - b64_from_24bit (digest[1], digest[7], digest[13], 4); - b64_from_24bit (digest[2], digest[8], digest[14], 4); - b64_from_24bit (digest[3], digest[9], digest[15], 4); - b64_from_24bit (digest[4], digest[10], digest[5], 4); - b64_from_24bit (0, 0, digest[11], 2); - if (buflen <= 0) { - g_free(buffer); - buffer = NULL; - } else - *cp = '\0'; /* Terminate the string. */ - - /* Clear the buffer for the intermediate result so that people - * attaching to processes or reading core dumps cannot get any - * information. We do it in this way to clear correct_words[] - * inside the MD5 implementation as well. - */ - purple_cipher_context_reset(context1, NULL); - purple_cipher_context_digest(context1, sizeof(digest), digest, NULL); - purple_cipher_context_destroy(context1); - purple_cipher_context_destroy(context2); - - return buffer; -} diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_crypt.h --- a/libpurple/protocols/yahoo/yahoo_crypt.h Tue May 19 06:34:27 2009 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,27 +0,0 @@ -/* - * purple - * - * Purple is the legal property of its developers, whose names are too numerous - * to list here. Please refer to the COPYRIGHT file distributed with this - * source distribution. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA - */ -#ifndef _YAHOO_CRYPT_H_ -#define _YAHOO_CRYPT_H_ - -char *yahoo_crypt(const char *key, const char *salt); - -#endif /* _YAHOO_CRYPT_H */ diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_doodle.c --- a/libpurple/protocols/yahoo/yahoo_doodle.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_doodle.c Tue May 19 06:35:24 2009 +0000 @@ -46,7 +46,6 @@ #include "yahoo_friend.h" #include "yahoochat.h" #include "ycht.h" -#include "yahoo_auth.h" #include "yahoo_filexfer.h" #include "yahoo_picture.h" diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_filexfer.c --- a/libpurple/protocols/yahoo/yahoo_filexfer.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_filexfer.c Tue May 19 06:35:24 2009 +0000 @@ -1249,7 +1249,11 @@ if(xd->info_val_249 == 2) { /* sending file via p2p, we are connected as client */ - xd->txbuf = g_strdup_printf("POST /%s HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\nHost: %s\r\nContent-Length: %ld\r\nCache-Control: no-cache\r\n\r\n", + xd->txbuf = g_strdup_printf("POST /%s HTTP/1.1\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" + "Host: %s\r\n" + "Content-Length: %ld\r\n" + "Cache-Control: no-cache\r\n\r\n", xd->path, xd->host, (long int)xfer->size); /* to do, add Referer */ @@ -1257,7 +1261,12 @@ else { /* sending file via relaying */ - xd->txbuf = g_strdup_printf("POST /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\nCookie:%s\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\nHost: %s\r\nContent-Length: %ld\r\nCache-Control: no-cache\r\n\r\n", + xd->txbuf = g_strdup_printf("POST /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\n" + "Cookie:%s\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" + "Host: %s\r\n" + "Content-Length: %ld\r\n" + "Cache-Control: no-cache\r\n\r\n", purple_url_encode(xd->xfer_idstring_for_relay), purple_normalize(account, purple_account_get_username(account)), xfer->who, @@ -1271,12 +1280,24 @@ if(xd->info_val_249 == 1) { /* receiving file via p2p, connected as client */ - xd->txbuf = g_strdup_printf("HEAD /%s HTTP/1.1\r\nAccept:*/*\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\nHost: %s\r\nContent-Length: 0\r\nCache-Control: no-cache\r\n\r\n",xd->path,xd->host); + xd->txbuf = g_strdup_printf("HEAD /%s HTTP/1.1\r\n" + "Accept: */*\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" + "Host: %s\r\n" + "Content-Length: 0\r\n" + "Cache-Control: no-cache\r\n\r\n", + xd->path,xd->host); } else { /* receiving file via relaying */ - xd->txbuf = g_strdup_printf("HEAD /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\nAccept:*/*\r\nCookie:%s\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\nHost:%s\r\nContent-Length: 0\r\nCache-Control: no-cache\r\n\r\n", + xd->txbuf = g_strdup_printf("HEAD /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\n" + "Accept: */*\r\n" + "Cookie: %s\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" + "Host: %s\r\n" + "Content-Length: 0\r\n" + "Cache-Control: no-cache\r\n\r\n", purple_url_encode(xd->xfer_idstring_for_relay), purple_normalize(account, purple_account_get_username(account)), xfer->who, @@ -1289,12 +1310,20 @@ if(xd->info_val_249 == 1) { /* receiving file via p2p, connected as client */ - xd->txbuf = g_strdup_printf("GET /%s HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\nHost: %s\r\nConnection: Keep-Alive\r\n\r\n",xd->path,xd->host); + xd->txbuf = g_strdup_printf("GET /%s HTTP/1.1\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" + "Host: %s\r\n" + "Connection: Keep-Alive\r\n\r\n", + xd->path, xd->host); } else { /* receiving file via relaying */ - xd->txbuf = g_strdup_printf("GET /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\nCookie:%s\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\nHost:%s\r\nConnection: Keep-Alive\r\n\r\n", + xd->txbuf = g_strdup_printf("GET /relay?token=%s&sender=%s&recver=%s HTTP/1.1\r\n" + "Cookie: %s\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" + "Host: %s\r\n" + "Connection: Keep-Alive\r\n\r\n", purple_url_encode(xd->xfer_idstring_for_relay), purple_normalize(account, purple_account_get_username(account)), xfer->who, diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_packet.h --- a/libpurple/protocols/yahoo/yahoo_packet.h Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_packet.h Tue May 19 06:35:24 2009 +0000 @@ -125,8 +125,8 @@ }; #define YAHOO_WEBMESSENGER_PROTO_VER 0x0065 -#define YAHOO_PROTO_VER 0x000f -#define YAHOO_PROTO_VER_JAPAN 0x000f +#define YAHOO_PROTO_VER 0x0010 +#define YAHOO_PROTO_VER_JAPAN 0x0010 #define YAHOO_PACKET_HDRLEN (4 + 2 + 2 + 2 + 2 + 4 + 4) diff -r 99e3f40d082f -r 338ac8c43931 libpurple/protocols/yahoo/yahoo_picture.c --- a/libpurple/protocols/yahoo/yahoo_picture.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/protocols/yahoo/yahoo_picture.c Tue May 19 06:35:24 2009 +0000 @@ -134,6 +134,7 @@ data->gc = gc; data->who = g_strdup(who); data->checksum = checksum; + /* TODO: Does this need to be MSIE 5.0? */ url_data = purple_util_fetch_url(url, use_whole_url, "Mozilla/4.0 (compatible; MSIE 5.0)", FALSE, yahoo_fetch_picture_cb, data); @@ -499,7 +500,7 @@ port = purple_account_get_int(account, "xfer_port", YAHOO_XFER_PORT); tmp = g_strdup_printf("%s:%d", host, port); header = g_strdup_printf("POST %s%s/notifyft HTTP/1.1\r\n" - "User-Agent: Mozilla/4.0 (compatible; MSIE 5.5)\r\n" + "User-Agent: " YAHOO_CLIENT_USERAGENT "\r\n" "Cookie: T=%s; Y=%s\r\n" "Host: %s\r\n" "Content-Length: %" G_GSIZE_FORMAT "\r\n" diff -r 99e3f40d082f -r 338ac8c43931 libpurple/prpl.h --- a/libpurple/prpl.h Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/prpl.h Tue May 19 06:35:24 2009 +0000 @@ -126,10 +126,10 @@ typedef enum { /** - * Use a unique name, not an alias, for chat rooms. + * User names are unique to a chat and are not shared between rooms. * - * XMPP lets you choose what name you want for chat. - * So it shouldn't be pulling the alias for when you're in chat; + * XMPP lets you choose what name you want in chats, so it shouldn't + * be pulling the aliases from the buddy list for the chat list; * it gets annoying. */ OPT_PROTO_UNIQUE_CHATNAME = 0x00000004, diff -r 99e3f40d082f -r 338ac8c43931 libpurple/savedstatuses.c --- a/libpurple/savedstatuses.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/savedstatuses.c Tue May 19 06:35:24 2009 +0000 @@ -285,13 +285,13 @@ xmlnode_set_attrib(node, "transient", "true"); } - snprintf(buf, sizeof(buf), "%lu", status->creation_time); + g_snprintf(buf, sizeof(buf), "%lu", status->creation_time); xmlnode_set_attrib(node, "created", buf); - snprintf(buf, sizeof(buf), "%lu", status->lastused); + g_snprintf(buf, sizeof(buf), "%lu", status->lastused); xmlnode_set_attrib(node, "lastused", buf); - snprintf(buf, sizeof(buf), "%u", status->usage_count); + g_snprintf(buf, sizeof(buf), "%u", status->usage_count); xmlnode_set_attrib(node, "usage_count", buf); child = xmlnode_new_child(node, "state"); diff -r 99e3f40d082f -r 338ac8c43931 libpurple/util.c --- a/libpurple/util.c Tue May 19 06:34:27 2009 +0000 +++ b/libpurple/util.c Tue May 19 06:35:24 2009 +0000 @@ -129,7 +129,7 @@ ascii = g_malloc(len * 2 + 1); for (i = 0; i < len; i++) - snprintf(&ascii[i * 2], 3, "%02hhx", data[i]); + g_snprintf(&ascii[i * 2], 3, "%02hhx", data[i]); return ascii; } @@ -1623,7 +1623,7 @@ pt->dest_tag = "a"; tags = g_list_prepend(tags, pt); if(xhtml) - g_string_append_printf(xhtml, "", url ? g_strstrip(url->str) : ""); + g_string_append_printf(xhtml, "", url ? g_strstrip(url->str) : ""); continue; } if(!g_ascii_strncasecmp(c, "' || *(c+5) == ' ')) { @@ -2017,7 +2017,6 @@ case '<': case '>': case '"': - case '\'': return TRUE; default: return FALSE; @@ -3920,7 +3919,10 @@ } } - purple_debug_misc("util", "Request: '%s'\n", gfud->request); + if(g_getenv("PURPLE_UNSAFE_DEBUG")) + purple_debug_misc("util", "Request: '%s'\n", gfud->request); + else + purple_debug_misc("util", "request constructed\n"); total_len = strlen(gfud->request); @@ -4023,9 +4025,12 @@ g_return_val_if_fail(url != NULL, NULL); g_return_val_if_fail(callback != NULL, NULL); - purple_debug_info("util", - "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", - url, full, user_agent?user_agent:"(null)", http11); + if(g_getenv("PURPLE_UNSAFE_DEBUG")) + purple_debug_info("util", + "requested to fetch (%s), full=%d, user_agent=(%s), http11=%d\n", + url, full, user_agent?user_agent:"(null)", http11); + else + purple_debug_info("util", "requesting to fetch a URL\n"); gfud = g_new0(PurpleUtilFetchUrlData, 1); diff -r 99e3f40d082f -r 338ac8c43931 pidgin/gtkblist.c --- a/pidgin/gtkblist.c Tue May 19 06:34:27 2009 +0000 +++ b/pidgin/gtkblist.c Tue May 19 06:35:24 2009 +0000 @@ -75,47 +75,40 @@ typedef struct { PurpleAccount *account; - GtkWidget *window; + GtkBox *vbox; + GtkWidget *account_menu; + GtkSizeGroup *sg; +} PidginBlistRequestData; + +typedef struct +{ + PidginBlistRequestData rq_data; GtkWidget *combo; GtkWidget *entry; GtkWidget *entry_for_alias; - GtkWidget *account_box; } PidginAddBuddyData; typedef struct { - PurpleAccount *account; + PidginBlistRequestData rq_data; gchar *default_chat_name; - - GtkWidget *window; - GtkWidget *account_menu; + GList *entries; +} PidginChatData; + +typedef struct +{ + PidginChatData chat_data; + GtkWidget *alias_entry; GtkWidget *group_combo; - GtkWidget *entries_box; - GtkSizeGroup *sg; GtkWidget *autojoin; GtkWidget *persistent; - - GList *entries; - } PidginAddChatData; typedef struct { - PurpleAccount *account; - - GtkWidget *window; - GtkWidget *account_menu; - GtkWidget *entries_box; - GtkSizeGroup *sg; - - GList *entries; -} PidginJoinChatData; - -typedef struct -{ /** Used to hold error minidialogs. Gets packed * inside PidginBuddyList.error_buttons */ @@ -868,7 +861,7 @@ } static void -do_join_chat(PidginJoinChatData *data) +do_join_chat(PidginChatData *data) { if (data) { @@ -894,14 +887,14 @@ } } - chat = purple_chat_new(data->account, NULL, components); + chat = purple_chat_new(data->rq_data.account, NULL, components); gtk_blist_join_chat(chat); purple_blist_remove_chat(chat); } } static void -do_joinchat(GtkWidget *dialog, int id, PidginJoinChatData *info) +do_joinchat(GtkWidget *dialog, int id, PidginChatData *info) { switch(id) { @@ -910,7 +903,7 @@ break; case 1: - pidgin_roomlist_dialog_show_with_account(info->account); + pidgin_roomlist_dialog_show_with_account(info->rq_data.account); return; break; @@ -926,11 +919,11 @@ * strings are empty then don't allow the user to click on "OK." */ static void -joinchat_set_sensitive_if_input_cb(GtkWidget *entry, gpointer user_data) +set_sensitive_if_input_cb(GtkWidget *entry, gpointer user_data) { PurplePluginProtocolInfo *prpl_info; PurpleConnection *gc; - PidginJoinChatData *data; + PidginChatData *data; GList *tmp; const char *text; gboolean required; @@ -949,13 +942,13 @@ } } - gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), GTK_RESPONSE_OK, sensitive); - - gc = purple_account_get_connection(data->account); + gtk_dialog_set_response_sensitive(GTK_DIALOG(data->rq_data.window), GTK_RESPONSE_OK, sensitive); + + gc = purple_account_get_connection(data->rq_data.account); prpl_info = (gc != NULL) ? PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl) : NULL; sensitive = (prpl_info != NULL && prpl_info->roomlist_get_list != NULL); - gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), 1, sensitive); + gtk_dialog_set_response_sensitive(GTK_DIALOG(data->rq_data.window), 1, sensitive); } static void @@ -967,97 +960,6 @@ pidgin_blist_update_buddy(purple_get_blist(), PURPLE_BLIST_NODE(buddy), TRUE); } -static void -rebuild_joinchat_entries(PidginJoinChatData *data) -{ - PurpleConnection *gc; - GList *list = NULL, *tmp; - GHashTable *defaults = NULL; - struct proto_chat_entry *pce; - gboolean focus = TRUE; - - g_return_if_fail(data->account != NULL); - - gc = purple_account_get_connection(data->account); - - gtk_container_foreach(GTK_CONTAINER(data->entries_box), (GtkCallback)gtk_widget_destroy, NULL); - - g_list_free(data->entries); - data->entries = NULL; - - if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) - list = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); - - if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) - defaults = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, NULL); - - for (tmp = list; tmp; tmp = tmp->next) - { - GtkWidget *input; - - pce = tmp->data; - - if (pce->is_int) - { - GtkObject *adjust; - adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, - 1, 10, 10); - input = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); - gtk_widget_set_size_request(input, 50, -1); - pidgin_add_widget_to_vbox(GTK_BOX(data->entries_box), pce->label, data->sg, input, FALSE, NULL); - } - else - { - char *value; - input = gtk_entry_new(); - gtk_entry_set_activates_default(GTK_ENTRY(input), TRUE); - value = g_hash_table_lookup(defaults, pce->identifier); - if (value != NULL) - gtk_entry_set_text(GTK_ENTRY(input), value); - if (pce->secret) - { - gtk_entry_set_visibility(GTK_ENTRY(input), FALSE); -#if !GTK_CHECK_VERSION(2,16,0) - if (gtk_entry_get_invisible_char(GTK_ENTRY(input)) == '*') - gtk_entry_set_invisible_char(GTK_ENTRY(input), PIDGIN_INVISIBLE_CHAR); -#endif /* Less than GTK+ 2.16 */ - } - pidgin_add_widget_to_vbox(GTK_BOX(data->entries_box), pce->label, data->sg, input, TRUE, NULL); - g_signal_connect(G_OBJECT(input), "changed", - G_CALLBACK(joinchat_set_sensitive_if_input_cb), data); - } - - /* Do the following for any type of input widget */ - if (focus) - { - gtk_widget_grab_focus(input); - focus = FALSE; - } - g_object_set_data(G_OBJECT(input), "identifier", (gpointer)pce->identifier); - g_object_set_data(G_OBJECT(input), "is_spin", GINT_TO_POINTER(pce->is_int)); - g_object_set_data(G_OBJECT(input), "required", GINT_TO_POINTER(pce->required)); - data->entries = g_list_append(data->entries, input); - - g_free(pce); - } - - g_list_free(list); - g_hash_table_destroy(defaults); - - /* Set whether the "OK" button should be clickable initially */ - joinchat_set_sensitive_if_input_cb(NULL, data); - - gtk_widget_show_all(data->entries_box); -} - -static void -joinchat_select_account_cb(GObject *w, PurpleAccount *account, - PidginJoinChatData *data) -{ - data->account = account; - rebuild_joinchat_entries(data); -} - static gboolean chat_account_filter_func(PurpleAccount *account) { @@ -1085,32 +987,38 @@ return FALSE; } -void -pidgin_blist_joinchat_show(void) -{ - GtkWidget *hbox, *vbox; +static GtkWidget * +make_blist_request_dialog(PidginBlistRequestData *data, PurpleAccount *account, + const char *title, const char *window_role, const char *label_text, + GCallback callback_func, PurpleFilterAccountFunc filter_func, + GCallback response_cb) +{ GtkWidget *label; + GtkWidget *img; + GtkWidget *hbox; + GtkWidget *vbox; + GtkWindow *blist_window; PidginBuddyList *gtkblist; - GtkWidget *img = NULL; - PidginJoinChatData *data = NULL; - - gtkblist = purple_blist_get_ui_data(); + + data->account = account; + img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, - gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); - data = g_new0(PidginJoinChatData, 1); - - data->window = gtk_dialog_new_with_buttons(_("Join a Chat"), - NULL, GTK_DIALOG_NO_SEPARATOR, - _("Room _List"), 1, - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - PIDGIN_STOCK_CHAT, GTK_RESPONSE_OK, NULL); + gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); + + gtkblist = PIDGIN_BLIST(purple_get_blist()); + blist_window = gtkblist ? GTK_WINDOW(gtkblist->window) : NULL; + + data->window = gtk_dialog_new_with_buttons(title, + blist_window, GTK_DIALOG_NO_SEPARATOR, + NULL); + + gtk_window_set_transient_for(GTK_WINDOW(data->window), blist_window); gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); - gtk_container_set_border_width( - GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); - gtk_window_set_role(GTK_WINDOW(data->window), "join_chat"); + gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); + gtk_window_set_role(GTK_WINDOW(data->window), window_role); hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); @@ -1118,37 +1026,154 @@ gtk_misc_set_alignment(GTK_MISC(img), 0, 0); vbox = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(vbox), 0); gtk_container_add(GTK_CONTAINER(hbox), vbox); - label = gtk_label_new(_("Please enter the appropriate information " - "about the chat you would like to join.\n")); + label = gtk_label_new(label_text); + + gtk_widget_set_size_request(label, 400, -1); gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - data->account_menu = pidgin_account_option_menu_new(NULL, FALSE, - G_CALLBACK(joinchat_select_account_cb), - chat_account_filter_func, data); - - pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Account:"), data->sg, data->account_menu, TRUE, NULL); - - data->entries_box = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(vbox), data->entries_box); - gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); - - data->account = pidgin_account_option_menu_get_selected(data->account_menu); - - rebuild_joinchat_entries(data); - - g_signal_connect(G_OBJECT(data->window), "response", - G_CALLBACK(do_joinchat), data); + data->account_menu = pidgin_account_option_menu_new(account, FALSE, + callback_func, filter_func, data); + pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_ccount"), data->sg, data->account_menu, TRUE, NULL); + + data->vbox = GTK_BOX(gtk_vbox_new(FALSE, 5)); + gtk_container_set_border_width(GTK_CONTAINER(data->vbox), 0); + gtk_box_pack_start(GTK_BOX(vbox), GTK_WIDGET(data->vbox), FALSE, FALSE, 0); + + g_signal_connect(G_OBJECT(data->window), "response", response_cb, data); g_object_unref(data->sg); - gtk_widget_show_all(data->window); + return vbox; +} + +static void +rebuild_chat_entries(PidginChatData *data, const char *default_chat_name) +{ + PurpleConnection *gc; + GList *list = NULL, *tmp; + GHashTable *defaults = NULL; + struct proto_chat_entry *pce; + gboolean focus = TRUE; + + g_return_if_fail(data->rq_data.account != NULL); + + gc = purple_account_get_connection(data->rq_data.account); + + gtk_container_foreach(GTK_CONTAINER(data->rq_data.vbox), (GtkCallback)gtk_widget_destroy, NULL); + + g_list_free(data->entries); + data->entries = NULL; + + if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) + list = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); + + if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) + defaults = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, default_chat_name); + + for (tmp = list; tmp; tmp = tmp->next) + { + GtkWidget *input; + + pce = tmp->data; + + if (pce->is_int) + { + GtkObject *adjust; + adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, + 1, 10, 10); + input = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); + gtk_widget_set_size_request(input, 50, -1); + pidgin_add_widget_to_vbox(GTK_BOX(data->rq_data.vbox), pce->label, data->rq_data.sg, input, FALSE, NULL); + } + else + { + char *value; + input = gtk_entry_new(); + gtk_entry_set_activates_default(GTK_ENTRY(input), TRUE); + value = g_hash_table_lookup(defaults, pce->identifier); + if (value != NULL) + gtk_entry_set_text(GTK_ENTRY(input), value); + if (pce->secret) + { + gtk_entry_set_visibility(GTK_ENTRY(input), FALSE); +#if !GTK_CHECK_VERSION(2,16,0) + if (gtk_entry_get_invisible_char(GTK_ENTRY(input)) == '*') + gtk_entry_set_invisible_char(GTK_ENTRY(input), PIDGIN_INVISIBLE_CHAR); +#endif /* Less than GTK+ 2.16 */ + } + pidgin_add_widget_to_vbox(data->rq_data.vbox, pce->label, data->rq_data.sg, input, TRUE, NULL); + g_signal_connect(G_OBJECT(input), "changed", + G_CALLBACK(set_sensitive_if_input_cb), data); + } + + /* Do the following for any type of input widget */ + if (focus) + { + gtk_widget_grab_focus(input); + focus = FALSE; + } + g_object_set_data(G_OBJECT(input), "identifier", (gpointer)pce->identifier); + g_object_set_data(G_OBJECT(input), "is_spin", GINT_TO_POINTER(pce->is_int)); + g_object_set_data(G_OBJECT(input), "required", GINT_TO_POINTER(pce->required)); + data->entries = g_list_append(data->entries, input); + + g_free(pce); + } + + g_list_free(list); + g_hash_table_destroy(defaults); + + /* Set whether the "OK" button should be clickable initially */ + set_sensitive_if_input_cb(NULL, data); + + gtk_widget_show_all(GTK_WIDGET(data->rq_data.vbox)); +} + +static void +chat_select_account_cb(GObject *w, PurpleAccount *account, + PidginChatData *data) +{ + if (strcmp(purple_account_get_protocol_id(data->rq_data.account), + purple_account_get_protocol_id(account)) == 0) + { + data->rq_data.account = account; + } + else + { + data->rq_data.account = account; + rebuild_chat_entries(data, data->default_chat_name); + } +} + +void +pidgin_blist_joinchat_show(void) +{ + PidginChatData *data = NULL; + + data = g_new0(PidginChatData, 1); + + make_blist_request_dialog((PidginBlistRequestData *)data, NULL, + _("Join a Chat"), "join_chat", + _("Please enter the appropriate information about the chat " + "you would like to join.\n"), + G_CALLBACK(chat_select_account_cb), + chat_account_filter_func, (GCallback)do_joinchat); + gtk_dialog_add_buttons(GTK_DIALOG(data->rq_data.window), + _("Room _List"), 1, + GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, + PIDGIN_STOCK_CHAT, GTK_RESPONSE_OK, NULL); + data->default_chat_name = NULL; + data->rq_data.account = pidgin_account_option_menu_get_selected(data->rq_data.account_menu); + + rebuild_chat_entries(data, NULL); + + gtk_widget_show_all(data->rq_data.window); } static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) @@ -6734,7 +6759,7 @@ PidginAddBuddyData *data) { /* Save our account */ - data->account = account; + data->rq_data.account = account; } static void @@ -6747,6 +6772,7 @@ add_buddy_cb(GtkWidget *w, int resp, PidginAddBuddyData *data) { const char *grp, *who, *whoalias; + PurpleAccount *account; PurpleGroup *g; PurpleBuddy *b; PurpleConversation *c; @@ -6760,6 +6786,8 @@ if (*whoalias == '\0') whoalias = NULL; + account = data->rq_data.account; + g = NULL; if ((grp != NULL) && (*grp != '\0')) { @@ -6769,20 +6797,20 @@ purple_blist_add_group(g, NULL); } - b = purple_find_buddy_in_group(data->account, who, g); + b = purple_find_buddy_in_group(account, who, g); } - else if ((b = purple_find_buddy(data->account, who)) != NULL) + else if ((b = purple_find_buddy(account, who)) != NULL) { g = purple_buddy_get_group(b); } if (b == NULL) { - b = purple_buddy_new(data->account, who, whoalias); + b = purple_buddy_new(account, who, whoalias); purple_blist_add_buddy(b, NULL, g, NULL); } - purple_account_add_buddy(data->account, b); + purple_account_add_buddy(account, b); /* Offer to merge people with the same alias. */ if (whoalias != NULL && g != NULL) @@ -6803,7 +6831,7 @@ * Or something. --Mark */ - c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, data->account); + c = purple_find_conversation_with_account(PURPLE_CONV_TYPE_IM, who, data->rq_data.account); if (c != NULL) { icon = purple_conv_im_get_icon(PURPLE_CONV_IM(c)); if (icon != NULL) @@ -6811,103 +6839,52 @@ } } - gtk_widget_destroy(data->window); + gtk_widget_destroy(data->rq_data.window); } static void pidgin_blist_request_add_buddy(PurpleAccount *account, const char *username, const char *group, const char *alias) { - GtkWidget *table; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *img; - PidginBuddyList *gtkblist; PidginAddBuddyData *data = g_new0(PidginAddBuddyData, 1); - data->account = + make_blist_request_dialog((PidginBlistRequestData *)data, (account != NULL - ? account - : purple_connection_get_account(purple_connections_get_all()->data)); - - img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, - gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); - - gtkblist = PIDGIN_BLIST(purple_get_blist()); - - data->window = gtk_dialog_new_with_buttons(_("Add Buddy"), - gtkblist ? GTK_WINDOW(gtkblist->window) : NULL, GTK_DIALOG_NO_SEPARATOR, + ? account : purple_connection_get_account(purple_connections_get_all()->data)), + _("Add Buddy"), "add_buddy", + _("Add a buddy.\n"), + G_CALLBACK(add_buddy_select_account_cb), NULL, + G_CALLBACK(add_buddy_cb)); + gtk_dialog_add_buttons(GTK_DIALOG(data->rq_data.window), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_ADD, GTK_RESPONSE_OK, NULL); - if (gtkblist) - gtk_window_set_transient_for(GTK_WINDOW(data->window), GTK_WINDOW(gtkblist->window)); - gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); - gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); - gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); - gtk_window_set_role(GTK_WINDOW(data->window), "add_buddy"); - gtk_window_set_type_hint(GTK_WINDOW(data->window), - GDK_WINDOW_TYPE_HINT_DIALOG); - - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); - - vbox = gtk_vbox_new(FALSE, 0); - gtk_container_add(GTK_CONTAINER(hbox), vbox); - - g_signal_connect(G_OBJECT(data->window), "destroy", + g_signal_connect(G_OBJECT(data->rq_data.window), "destroy", G_CALLBACK(destroy_add_buddy_dialog_cb), data); - label = gtk_label_new(_("Add a buddy.\n")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - - table = gtk_table_new(4, 2, FALSE); - gtk_table_set_row_spacings(GTK_TABLE(table), 5); - gtk_table_set_col_spacings(GTK_TABLE(table), 5); - gtk_container_set_border_width(GTK_CONTAINER(table), 0); - gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0); - - data->account_box = pidgin_account_option_menu_new(account, FALSE, - G_CALLBACK(add_buddy_select_account_cb), NULL, data); - - gtk_table_attach_defaults(GTK_TABLE(table), data->account_box, 0, 2, 0, 1); - - label = gtk_label_new_with_mnemonic(_("Buddy's _username:")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); - data->entry = gtk_entry_new(); - gtk_table_attach_defaults(GTK_TABLE(table), data->entry, 1, 2, 1, 2); + + pidgin_add_widget_to_vbox(data->rq_data.vbox, _("Buddy's _username:"), + data->rq_data.sg, data->entry, TRUE, NULL); gtk_widget_grab_focus(data->entry); if (username != NULL) gtk_entry_set_text(GTK_ENTRY(data->entry), username); else - gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), + gtk_dialog_set_response_sensitive(GTK_DIALOG(data->rq_data.window), GTK_RESPONSE_OK, FALSE); gtk_entry_set_activates_default (GTK_ENTRY(data->entry), TRUE); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), data->entry); - pidgin_set_accessible_label (data->entry, label); g_signal_connect(G_OBJECT(data->entry), "changed", G_CALLBACK(pidgin_set_sensitive_if_input), - data->window); - - label = gtk_label_new_with_mnemonic(_("(Optional) A_lias:")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 2, 3); + data->rq_data.window); data->entry_for_alias = gtk_entry_new(); - gtk_table_attach_defaults(GTK_TABLE(table), - data->entry_for_alias, 1, 2, 2, 3); + pidgin_add_widget_to_vbox(data->rq_data.vbox, _("(Optional) A_lias:"), + data->rq_data.sg, data->entry_for_alias, TRUE, + NULL); if (alias != NULL) gtk_entry_set_text(GTK_ENTRY(data->entry_for_alias), alias); @@ -6915,23 +6892,11 @@ if (username != NULL) gtk_widget_grab_focus(GTK_WIDGET(data->entry_for_alias)); - gtk_entry_set_activates_default (GTK_ENTRY(data->entry_for_alias), TRUE); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), data->entry_for_alias); - pidgin_set_accessible_label (data->entry_for_alias, label); - - label = gtk_label_new_with_mnemonic(_("Add buddy to _group:")); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0.5); - gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 3, 4); - data->combo = pidgin_text_combo_box_entry_new(group, groups_tree()); - gtk_table_attach_defaults(GTK_TABLE(table), data->combo, 1, 2, 3, 4); - gtk_label_set_mnemonic_widget(GTK_LABEL(label), GTK_BIN(data->combo)->child); - pidgin_set_accessible_label (data->combo, label); - - g_signal_connect(G_OBJECT(data->window), "response", - G_CALLBACK(add_buddy_cb), data); - - gtk_widget_show_all(data->window); + pidgin_add_widget_to_vbox(data->rq_data.vbox, _("Add buddy to _group:"), + data->rq_data.sg, data->combo, TRUE, NULL); + + gtk_widget_show_all(data->rq_data.window); } static void @@ -6947,7 +6912,7 @@ components = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); - for (tmp = data->entries; tmp; tmp = tmp->next) + for (tmp = data->chat_data.entries; tmp; tmp = tmp->next) { if (g_object_get_data(tmp->data, "is_spin")) { @@ -6966,7 +6931,7 @@ } } - chat = purple_chat_new(data->account, + chat = purple_chat_new(data->chat_data.rq_data.account, gtk_entry_get_text(GTK_ENTRY(data->alias_entry)), components); @@ -6990,9 +6955,9 @@ if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(data->persistent))) purple_blist_node_set_bool((PurpleBlistNode*)chat, "gtk-persistent", TRUE); - gtk_widget_destroy(data->window); - g_free(data->default_chat_name); - g_list_free(data->entries); + gtk_widget_destroy(data->chat_data.rq_data.window); + g_free(data->chat_data.default_chat_name); + g_list_free(data->chat_data.entries); g_free(data); } @@ -7005,166 +6970,25 @@ } else if (resp == 1) { - pidgin_roomlist_dialog_show_with_account(data->account); + pidgin_roomlist_dialog_show_with_account(data->chat_data.rq_data.account); } else { - gtk_widget_destroy(data->window); - g_free(data->default_chat_name); - g_list_free(data->entries); + gtk_widget_destroy(data->chat_data.rq_data.window); + g_free(data->chat_data.default_chat_name); + g_list_free(data->chat_data.entries); g_free(data); } } -/* - * Check the values of all the text entry boxes. If any required input - * strings are empty then don't allow the user to click on "OK." - */ -static void -addchat_set_sensitive_if_input_cb(GtkWidget *entry, gpointer user_data) -{ - PurplePluginProtocolInfo *prpl_info; - PurpleConnection *gc; - PidginAddChatData *data; - GList *tmp; - const char *text; - gboolean required; - gboolean sensitive = TRUE; - - data = user_data; - - for (tmp = data->entries; tmp != NULL; tmp = tmp->next) - { - if (!g_object_get_data(tmp->data, "is_spin")) - { - required = GPOINTER_TO_INT(g_object_get_data(tmp->data, "required")); - text = gtk_entry_get_text(tmp->data); - if (required && (*text == '\0')) - sensitive = FALSE; - } - } - - gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), GTK_RESPONSE_OK, sensitive); - - gc = purple_account_get_connection(data->account); - prpl_info = (gc != NULL) ? PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl) : NULL; - sensitive = (prpl_info != NULL && prpl_info->roomlist_get_list != NULL); - - gtk_dialog_set_response_sensitive(GTK_DIALOG(data->window), 1, sensitive); -} - -static void -rebuild_addchat_entries(PidginAddChatData *data) -{ - PurpleConnection *gc; - GList *list = NULL, *tmp; - GHashTable *defaults = NULL; - struct proto_chat_entry *pce; - gboolean focus = TRUE; - - g_return_if_fail(data->account != NULL); - - gc = purple_account_get_connection(data->account); - - gtk_container_foreach(GTK_CONTAINER(data->entries_box), (GtkCallback)gtk_widget_destroy, NULL); - - g_list_free(data->entries); - - data->entries = NULL; - - if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info != NULL) - list = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info(gc); - - if (PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults != NULL) - defaults = PURPLE_PLUGIN_PROTOCOL_INFO(gc->prpl)->chat_info_defaults(gc, data->default_chat_name); - - for (tmp = list; tmp; tmp = tmp->next) - { - GtkWidget *input; - - pce = tmp->data; - - if (pce->is_int) - { - GtkObject *adjust; - adjust = gtk_adjustment_new(pce->min, pce->min, pce->max, - 1, 10, 10); - input = gtk_spin_button_new(GTK_ADJUSTMENT(adjust), 1, 0); - gtk_widget_set_size_request(input, 50, -1); - pidgin_add_widget_to_vbox(GTK_BOX(data->entries_box), pce->label, data->sg, input, FALSE, NULL); - } - else - { - char *value; - input = gtk_entry_new(); - gtk_entry_set_activates_default(GTK_ENTRY(input), TRUE); - value = g_hash_table_lookup(defaults, pce->identifier); - if (value != NULL) - gtk_entry_set_text(GTK_ENTRY(input), value); - if (pce->secret) - { - gtk_entry_set_visibility(GTK_ENTRY(input), FALSE); -#if !GTK_CHECK_VERSION(2,16,0) - if (gtk_entry_get_invisible_char(GTK_ENTRY(input)) == '*') - gtk_entry_set_invisible_char(GTK_ENTRY(input), PIDGIN_INVISIBLE_CHAR); -#endif /* Less than GTK+ 2.16 */ - } - pidgin_add_widget_to_vbox(GTK_BOX(data->entries_box), pce->label, data->sg, input, TRUE, NULL); - g_signal_connect(G_OBJECT(input), "changed", - G_CALLBACK(addchat_set_sensitive_if_input_cb), data); - } - - /* Do the following for any type of input widget */ - if (focus) - { - gtk_widget_grab_focus(input); - focus = FALSE; - } - g_object_set_data(G_OBJECT(input), "identifier", (gpointer)pce->identifier); - g_object_set_data(G_OBJECT(input), "is_spin", GINT_TO_POINTER(pce->is_int)); - g_object_set_data(G_OBJECT(input), "required", GINT_TO_POINTER(pce->required)); - data->entries = g_list_append(data->entries, input); - - g_free(pce); - } - - g_list_free(list); - g_hash_table_destroy(defaults); - - /* Set whether the "OK" button should be clickable initially */ - addchat_set_sensitive_if_input_cb(NULL, data); - - gtk_widget_show_all(data->entries_box); -} - -static void -addchat_select_account_cb(GObject *w, PurpleAccount *account, - PidginAddChatData *data) -{ - if (strcmp(purple_account_get_protocol_id(data->account), - purple_account_get_protocol_id(account)) == 0) - { - data->account = account; - } - else - { - data->account = account; - rebuild_addchat_entries(data); - } -} - static void pidgin_blist_request_add_chat(PurpleAccount *account, PurpleGroup *group, const char *alias, const char *name) { PidginAddChatData *data; - PidginBuddyList *gtkblist; GList *l; PurpleConnection *gc; - GtkWidget *label; - GtkWidget *hbox; - GtkWidget *vbox; - GtkWidget *img; + GtkBox *vbox; if (account != NULL) { gc = purple_account_get_connection(account); @@ -7193,82 +7017,44 @@ } data = g_new0(PidginAddChatData, 1); - data->account = account; - data->default_chat_name = g_strdup(name); - - img = gtk_image_new_from_stock(PIDGIN_STOCK_DIALOG_QUESTION, - gtk_icon_size_from_name(PIDGIN_ICON_SIZE_TANGO_HUGE)); - - gtkblist = PIDGIN_BLIST(purple_get_blist()); - - data->sg = gtk_size_group_new(GTK_SIZE_GROUP_HORIZONTAL); - - data->window = gtk_dialog_new_with_buttons(_("Add Chat"), - gtkblist ? GTK_WINDOW(gtkblist->window) : NULL, GTK_DIALOG_NO_SEPARATOR, - _("Room _List"), 1, + vbox = GTK_BOX(make_blist_request_dialog((PidginBlistRequestData *)data, account, + _("Add Chat"), "add_chat", + _("Please enter an alias, and the appropriate information " + "about the chat you would like to add to your buddy list.\n"), + G_CALLBACK(chat_select_account_cb), chat_account_filter_func, + G_CALLBACK(add_chat_resp_cb))); + gtk_dialog_add_buttons(GTK_DIALOG(data->chat_data.rq_data.window), + _("Room List"), 1, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_ADD, GTK_RESPONSE_OK, NULL); - if (gtkblist) - gtk_window_set_transient_for(GTK_WINDOW(data->window), GTK_WINDOW(gtkblist->window)); - gtk_dialog_set_default_response(GTK_DIALOG(data->window), GTK_RESPONSE_OK); - gtk_container_set_border_width(GTK_CONTAINER(data->window), PIDGIN_HIG_BOX_SPACE); - gtk_window_set_resizable(GTK_WINDOW(data->window), FALSE); - gtk_box_set_spacing(GTK_BOX(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BORDER); - gtk_container_set_border_width(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), PIDGIN_HIG_BOX_SPACE); - gtk_window_set_role(GTK_WINDOW(data->window), "add_chat"); - gtk_window_set_type_hint(GTK_WINDOW(data->window), - GDK_WINDOW_TYPE_HINT_DIALOG); - - hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BORDER); - gtk_container_add(GTK_CONTAINER(GTK_DIALOG(data->window)->vbox), hbox); - gtk_box_pack_start(GTK_BOX(hbox), img, FALSE, FALSE, 0); - gtk_misc_set_alignment(GTK_MISC(img), 0, 0); - - vbox = gtk_vbox_new(FALSE, 5); - gtk_container_add(GTK_CONTAINER(hbox), vbox); - - label = gtk_label_new( - _("Please enter an alias, and the appropriate information " - "about the chat you would like to add to your buddy list.\n")); - gtk_widget_set_size_request(label, 400, -1); - gtk_label_set_line_wrap(GTK_LABEL(label), TRUE); - gtk_misc_set_alignment(GTK_MISC(label), 0, 0); - gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); - - data->account_menu = pidgin_account_option_menu_new(account, FALSE, - G_CALLBACK(addchat_select_account_cb), - chat_account_filter_func, data); - pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Account:"), data->sg, data->account_menu, TRUE, NULL); - - data->entries_box = gtk_vbox_new(FALSE, 5); - gtk_container_set_border_width(GTK_CONTAINER(data->entries_box), 0); - gtk_box_pack_start(GTK_BOX(vbox), data->entries_box, TRUE, TRUE, 0); - - rebuild_addchat_entries(data); + data->chat_data.default_chat_name = g_strdup(name); + + rebuild_chat_entries((PidginChatData *)data, name); data->alias_entry = gtk_entry_new(); if (alias != NULL) gtk_entry_set_text(GTK_ENTRY(data->alias_entry), alias); gtk_entry_set_activates_default(GTK_ENTRY(data->alias_entry), TRUE); - pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_lias:"), data->sg, data->alias_entry, TRUE, NULL); + pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("A_lias:"), + data->chat_data.rq_data.sg, data->alias_entry, + TRUE, NULL); if (name != NULL) gtk_widget_grab_focus(data->alias_entry); data->group_combo = pidgin_text_combo_box_entry_new(group ? group->name : NULL, groups_tree()); - pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Group:"), data->sg, data->group_combo, TRUE, NULL); + pidgin_add_widget_to_vbox(GTK_BOX(vbox), _("_Group:"), + data->chat_data.rq_data.sg, data->group_combo, + TRUE, NULL); data->autojoin = gtk_check_button_new_with_mnemonic(_("Auto_join when account becomes online.")); data->persistent = gtk_check_button_new_with_mnemonic(_("_Remain in chat after window is closed.")); gtk_box_pack_start(GTK_BOX(vbox), data->autojoin, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), data->persistent, FALSE, FALSE, 0); - g_signal_connect(G_OBJECT(data->window), "response", - G_CALLBACK(add_chat_resp_cb), data); - - gtk_widget_show_all(data->window); + gtk_widget_show_all(data->chat_data.rq_data.window); } static void @@ -8195,4 +7981,3 @@ if (activeitem) gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(activeitem), TRUE); } - diff -r 99e3f40d082f -r 338ac8c43931 pidgin/gtkconv.c --- a/pidgin/gtkconv.c Tue May 19 06:34:27 2009 +0000 +++ b/pidgin/gtkconv.c Tue May 19 06:35:24 2009 +0000 @@ -2700,7 +2700,7 @@ scale_width = gdk_pixbuf_get_width(buf); scale_height = gdk_pixbuf_get_height(buf); - gtk_widget_get_size_request(gtkconv->infopane_hbox, NULL, &size); + gtk_widget_get_size_request(gtkconv->u.im->icon_container, NULL, &size); size = MIN(size, MIN(scale_width, scale_height)); size = CLAMP(size, BUDDYICON_SIZE_MIN, BUDDYICON_SIZE_MAX); @@ -2758,13 +2758,22 @@ static void remove_icon(GtkWidget *widget, PidginConversation *gtkconv) { + GList *children; + GtkWidget *event; PurpleConversation *conv = gtkconv->active_conv; PidginWindow *gtkwin; g_return_if_fail(conv != NULL); - if (gtkconv->u.im->icon_container != NULL) - gtk_widget_destroy(gtkconv->u.im->icon_container); + gtk_widget_set_size_request(gtkconv->u.im->icon_container, -1, BUDDYICON_SIZE_MIN); + children = gtk_container_get_children(GTK_CONTAINER(gtkconv->u.im->icon_container)); + if (children) { + /* We know there's only one child here. It'd be nice to shortcut to the + event box, but we can't change the PidginConversation until 3.0 */ + event = (GtkWidget *)children->data; + gtk_container_remove(GTK_CONTAINER(gtkconv->u.im->icon_container), event); + g_list_free(children); + } if (gtkconv->u.im->anim != NULL) g_object_unref(G_OBJECT(gtkconv->u.im->anim)); @@ -2779,7 +2788,6 @@ gtkconv->u.im->icon = NULL; gtkconv->u.im->anim = NULL; gtkconv->u.im->iter = NULL; - gtkconv->u.im->icon_container = NULL; gtkconv->u.im->show_icon = FALSE; gtkwin = gtkconv->win; @@ -2840,7 +2848,7 @@ PurpleConversation *conv = gtkconv->active_conv; GSList *buddies; - gtk_widget_get_size_request(gtkconv->infopane_hbox, NULL, &size); + gtk_widget_get_size_request(gtkconv->u.im->icon_container, NULL, &size); if (size == BUDDYICON_SIZE_MAX) { size = BUDDYICON_SIZE_MIN; @@ -2848,7 +2856,7 @@ size = BUDDYICON_SIZE_MAX; } - gtk_widget_set_size_request(gtkconv->infopane_hbox, -1, size); + gtk_widget_set_size_request(gtkconv->u.im->icon_container, -1, size); pidgin_conv_update_buddy_icon(conv); buddies = purple_find_buddies(purple_conversation_get_account(conv), @@ -4629,6 +4637,7 @@ gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtkchat->topic_text = gtk_entry_new(); + gtk_widget_set_size_request(gtkchat->topic_text, -1, BUDDYICON_SIZE_MIN); if(prpl_info->set_chat_topic == NULL) { gtk_editable_set_editable(GTK_EDITABLE(gtkchat->topic_text), FALSE); @@ -4847,15 +4856,37 @@ gtk_cell_view_set_displayed_row(GTK_CELL_VIEW(gtkconv->infopane), path); gtk_tree_path_free(path); - if ((buddy = purple_find_buddy(purple_conversation_get_account(conv), - purple_conversation_get_name(conv))) != NULL) { - PurpleContact *contact = purple_buddy_get_contact(buddy); - if (contact) { - buddyicon_size = purple_blist_node_get_int((PurpleBlistNode*)contact, "pidgin-infopane-iconsize"); - } - } - buddyicon_size = CLAMP(buddyicon_size, BUDDYICON_SIZE_MIN, BUDDYICON_SIZE_MAX); - gtk_widget_set_size_request(gtkconv->infopane_hbox, -1, buddyicon_size); + if (chat) { + /* This empty widget is used to ensure that the infopane is consistently + sized for chat windows. The correct fix is to put an icon in the chat + window as well, because that would make "Set Custom Icon" consistent + for both the buddy list and the chat window, but PidginConversation + is pretty much stuck until 3.0. */ + GtkWidget *sizing_vbox; + sizing_vbox = gtk_vbox_new(FALSE, 0); + gtk_widget_set_size_request(sizing_vbox, -1, BUDDYICON_SIZE_MIN); + gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), sizing_vbox, FALSE, FALSE, 0); + gtk_widget_show(sizing_vbox); + } + else { + gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); + + if ((buddy = purple_find_buddy(purple_conversation_get_account(conv), + purple_conversation_get_name(conv))) != NULL) { + PurpleContact *contact = purple_buddy_get_contact(buddy); + if (contact) { + buddyicon_size = purple_blist_node_get_int((PurpleBlistNode*)contact, "pidgin-infopane-iconsize"); + } + } + buddyicon_size = CLAMP(buddyicon_size, BUDDYICON_SIZE_MIN, BUDDYICON_SIZE_MAX); + gtk_widget_set_size_request(gtkconv->u.im->icon_container, -1, buddyicon_size); + + gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), + gtkconv->u.im->icon_container, FALSE, FALSE, 0); + + gtk_widget_show(gtkconv->u.im->icon_container); + } + gtk_widget_show(gtkconv->infopane); rend = gtk_cell_renderer_pixbuf_new(); @@ -6309,6 +6340,10 @@ if (!smiley) return; + smiley->data = g_realloc(smiley->data, smiley->datasize + size); + g_memmove(smiley->data + smiley->datasize, data, size); + smiley->datasize += size; + loader = smiley->loader; if (!loader) return; @@ -6905,6 +6940,7 @@ GdkPixbuf *buf; + GList *children; GtkWidget *event; GdkPixbuf *scale; int scale_width, scale_height; @@ -6932,9 +6968,14 @@ prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(account->gc->prpl); /* Remove the current icon stuff */ - if (gtkconv->u.im->icon_container != NULL) - gtk_widget_destroy(gtkconv->u.im->icon_container); - gtkconv->u.im->icon_container = NULL; + children = gtk_container_get_children(GTK_CONTAINER(gtkconv->u.im->icon_container)); + if (children) { + /* We know there's only one child here. It'd be nice to shortcut to the + event box, but we can't change the PidginConversation until 3.0 */ + event = (GtkWidget *)children->data; + gtk_container_remove(GTK_CONTAINER(gtkconv->u.im->icon_container), event); + g_list_free(children); + } if (gtkconv->u.im->anim != NULL) g_object_unref(G_OBJECT(gtkconv->u.im->anim)); @@ -7022,7 +7063,7 @@ scale_width = gdk_pixbuf_get_width(buf); scale_height = gdk_pixbuf_get_height(buf); - gtk_widget_get_size_request(gtkconv->infopane_hbox, NULL, &size); + gtk_widget_get_size_request(gtkconv->u.im->icon_container, NULL, &size); size = MIN(size, MIN(scale_width, scale_height)); /* Some sanity checks */ @@ -7041,7 +7082,6 @@ g_object_unref(buf); if (pidgin_gdk_pixbuf_is_opaque(scale)) pidgin_gdk_pixbuf_make_round(scale); - gtkconv->u.im->icon_container = gtk_vbox_new(FALSE, 0); event = gtk_event_box_new(); gtk_container_add(GTK_CONTAINER(gtkconv->u.im->icon_container), event); @@ -7062,11 +7102,6 @@ g_object_unref(G_OBJECT(scale)); - gtk_box_pack_start(GTK_BOX(gtkconv->infopane_hbox), - gtkconv->u.im->icon_container, FALSE, FALSE, 0); - - gtk_widget_show(gtkconv->u.im->icon_container); - /* The buddy icon code needs badly to be fixed. */ if(pidgin_conv_window_is_active_conversation(conv)) { diff -r 99e3f40d082f -r 338ac8c43931 pidgin/gtkimhtml.c --- a/pidgin/gtkimhtml.c Tue May 19 06:34:27 2009 +0000 +++ b/pidgin/gtkimhtml.c Tue May 19 06:35:24 2009 +0000 @@ -82,6 +82,11 @@ GtkTextMark *mark; }; +typedef struct { + GtkIMHtmlScalable *image; + gpointer data; + gsize datasize; +} GtkIMHtmlImageSave; struct im_image_data { int id; @@ -3641,96 +3646,109 @@ } static void -image_save_yes_cb(GtkIMHtmlImage *image, const char *filename) -{ - gchar *type = NULL; +image_save_yes_cb(GtkIMHtmlImageSave *save, const char *filename) +{ GError *error = NULL; -#if GTK_CHECK_VERSION(2,2,0) - GSList *formats = gdk_pixbuf_get_formats(); -#else - char *basename = g_path_get_basename(filename); - char *ext = strrchr(basename, '.'); -#endif - char *newfilename; + GtkIMHtmlImage *image = (GtkIMHtmlImage *)save->image; gtk_widget_destroy(image->filesel); image->filesel = NULL; + if (save->data && save->datasize) { +#if GLIB_CHECK_VERSION(2,8,0) + g_file_set_contents(filename, save->data, save->datasize, &error); +#else + purple_util_write_data_to_file_absolute(filename, save->data, save->datasize); +#endif + } else { + gchar *type = NULL; #if GTK_CHECK_VERSION(2,2,0) - while (formats) { - GdkPixbufFormat *format = formats->data; - gchar **extensions = gdk_pixbuf_format_get_extensions(format); - gpointer p = extensions; - - while(gdk_pixbuf_format_is_writable(format) && extensions && extensions[0]){ - gchar *fmt_ext = extensions[0]; - const gchar* file_ext = filename + strlen(filename) - strlen(fmt_ext); - - if(!g_ascii_strcasecmp(fmt_ext, file_ext)){ - type = gdk_pixbuf_format_get_name(format); + GSList *formats = gdk_pixbuf_get_formats(); +#else + char *basename = g_path_get_basename(filename); + char *ext = strrchr(basename, '.'); +#endif + char *newfilename; + +#if GTK_CHECK_VERSION(2,2,0) + while (formats) { + GdkPixbufFormat *format = formats->data; + gchar **extensions = gdk_pixbuf_format_get_extensions(format); + gpointer p = extensions; + + while(gdk_pixbuf_format_is_writable(format) && extensions && extensions[0]){ + gchar *fmt_ext = extensions[0]; + const gchar* file_ext = filename + strlen(filename) - strlen(fmt_ext); + + if(!g_ascii_strcasecmp(fmt_ext, file_ext)){ + type = gdk_pixbuf_format_get_name(format); + break; + } + + extensions++; + } + + g_strfreev(p); + + if (type) break; - } - - extensions++; + + formats = formats->next; } - g_strfreev(p); - - if (type) - break; - - formats = formats->next; - } - - g_slist_free(formats); + g_slist_free(formats); +#else + /* this is really ugly code, but I think it will work */ + if (ext) { + ext++; + if (!g_ascii_strcasecmp(ext, "jpeg") || !g_ascii_strcasecmp(ext, "jpg")) + type = g_strdup("jpeg"); + else if (!g_ascii_strcasecmp(ext, "png")) + type = g_strdup("png"); + } + + g_free(basename); +#endif + + /* If I can't find a valid type, I will just tell the user about it and then assume + it's a png */ + if (!type){ + char *basename, *tmp; + char *dirname; +#if GTK_CHECK_VERSION(2,4,0) + GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, + _("Unrecognized file type\n\nDefaulting to PNG.")); #else - /* this is really ugly code, but I think it will work */ - if (ext) { - ext++; - if (!g_ascii_strcasecmp(ext, "jpeg") || !g_ascii_strcasecmp(ext, "jpg")) - type = g_strdup("jpeg"); - else if (!g_ascii_strcasecmp(ext, "png")) + GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, + _("Unrecognized file type\n\nDefaulting to PNG.")); +#endif + + g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); + gtk_widget_show(dialog); + type = g_strdup("png"); + dirname = g_path_get_dirname(filename); + basename = g_path_get_basename(filename); + tmp = strrchr(basename, '.'); + if (tmp != NULL) + tmp[0] = '\0'; + newfilename = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s.png", dirname, basename); + g_free(dirname); + g_free(basename); + } else { + /* + * We're able to save the file in it's original format, so we + * can use the original file name. + */ + newfilename = g_strdup(filename); + } + + gdk_pixbuf_save(image->pixbuf, newfilename, type, &error, NULL); + + g_free(newfilename); + g_free(type); } - g_free(basename); -#endif - - /* If I can't find a valid type, I will just tell the user about it and then assume - it's a png */ - if (!type){ - char *basename, *tmp; -#if GTK_CHECK_VERSION(2,4,0) - GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, - _("Unrecognized file type\n\nDefaulting to PNG.")); -#else - GtkWidget *dialog = gtk_message_dialog_new(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, - _("Unrecognized file type\n\nDefaulting to PNG.")); -#endif - - g_signal_connect_swapped(dialog, "response", G_CALLBACK (gtk_widget_destroy), dialog); - gtk_widget_show(dialog); - - type = g_strdup("png"); - basename = g_path_get_basename(filename); - tmp = strrchr(basename, '.'); - if (tmp != NULL) - tmp[0] = '\0'; - newfilename = g_strdup_printf("%s.png", basename); - g_free(basename); - } else { - /* - * We're able to save the file in it's original format, so we - * can use the original file name. - */ - newfilename = g_strdup(filename); - } - - gdk_pixbuf_save(image->pixbuf, newfilename, type, &error, NULL); - - g_free(newfilename); - g_free(type); - if (error){ #if GTK_CHECK_VERSION(2,4,0) GtkWidget *dialog = gtk_message_dialog_new_with_markup(NULL, 0, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, @@ -3747,9 +3765,10 @@ #if GTK_CHECK_VERSION(2,4,0) /* FILECHOOSER */ static void -image_save_check_if_exists_cb(GtkWidget *widget, gint response, GtkIMHtmlImage *image) +image_save_check_if_exists_cb(GtkWidget *widget, gint response, GtkIMHtmlImageSave *save) { gchar *filename; + GtkIMHtmlImage *image = (GtkIMHtmlImage *)save->image; if (response != GTK_RESPONSE_ACCEPT) { gtk_widget_destroy(widget); @@ -3760,9 +3779,10 @@ filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(widget)); #else /* FILECHOOSER */ static void -image_save_check_if_exists_cb(GtkWidget *button, GtkIMHtmlImage *image) +image_save_check_if_exists_cb(GtkWidget *button, GtkIMHtmlImageSave *save) { gchar *filename; + GtkIMHtmlImage *image = (GtkIMHtmlImage *)save->image; filename = g_strdup(gtk_file_selection_get_filename(GTK_FILE_SELECTION(image->filesel))); @@ -3795,7 +3815,7 @@ image_save_yes_cb(image, filename); */ - image_save_yes_cb(image, filename); + image_save_yes_cb(save, filename); g_free(filename); } @@ -3810,8 +3830,10 @@ #endif /* FILECHOOSER */ static void -gtk_imhtml_image_save(GtkWidget *w, GtkIMHtmlImage *image) -{ +gtk_imhtml_image_save(GtkWidget *w, GtkIMHtmlImageSave *save) +{ + GtkIMHtmlImage *image = (GtkIMHtmlImage *)save->image; + if (image->filesel != NULL) { gtk_window_present(GTK_WINDOW(image->filesel)); return; @@ -3828,7 +3850,7 @@ if (image->filename != NULL) gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(image->filesel), image->filename); g_signal_connect(G_OBJECT(GTK_FILE_CHOOSER(image->filesel)), "response", - G_CALLBACK(image_save_check_if_exists_cb), image); + G_CALLBACK(image_save_check_if_exists_cb), save); #else /* FILECHOOSER */ image->filesel = gtk_file_selection_new(_("Save Image")); if (image->filename != NULL) @@ -3838,7 +3860,7 @@ g_signal_connect_swapped(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->cancel_button), "clicked", G_CALLBACK(image_save_cancel_cb), image); g_signal_connect(G_OBJECT(GTK_FILE_SELECTION(image->filesel)->ok_button), "clicked", - G_CALLBACK(image_save_check_if_exists_cb), image); + G_CALLBACK(image_save_check_if_exists_cb), save); #endif /* FILECHOOSER */ gtk_widget_show(image->filesel); @@ -3860,30 +3882,29 @@ * embedded in the conversation. Someone should make the Purple core handle * all of that. */ -static gboolean gtk_imhtml_image_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlImage *image) +static gboolean gtk_imhtml_image_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlImageSave *save) { GdkEventButton *event_button = (GdkEventButton *) event; + GtkIMHtmlImage *image = (GtkIMHtmlImage *)save->image; if (event->type == GDK_BUTTON_RELEASE) { if(event_button->button == 3) { GtkWidget *img, *item, *menu; - gchar *text = g_strdup_printf(_("_Save Image...")); menu = gtk_menu_new(); /* buttons and such */ img = gtk_image_new_from_stock(GTK_STOCK_SAVE, GTK_ICON_SIZE_MENU); - item = gtk_image_menu_item_new_with_mnemonic(text); + item = gtk_image_menu_item_new_with_mnemonic(_("_Save Image...")); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); - g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_image_save), image); + g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_image_save), save); gtk_menu_shell_append(GTK_MENU_SHELL(menu), item); /* Add menu item for adding custom smiley to local smileys */ /* we only add the menu if the image is of "custom smiley size" <= 96x96 pixels */ if (image->width <= 96 && image->height <= 96) { - text = g_strdup_printf(_("_Add Custom Smiley...")); img = gtk_image_new_from_stock(GTK_STOCK_ADD, GTK_ICON_SIZE_MENU); - item = gtk_image_menu_item_new_with_mnemonic(text); + item = gtk_image_menu_item_new_with_mnemonic(_("_Add Custom Smiley...")); gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(item), img); g_signal_connect(G_OBJECT(item), "activate", G_CALLBACK(gtk_imhtml_custom_smiley_save), image); @@ -3894,7 +3915,6 @@ gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event_button->button, event_button->time); - g_free(text); return TRUE; } } @@ -3909,7 +3929,7 @@ static gboolean gtk_imhtml_smiley_clicked(GtkWidget *w, GdkEvent *event, GtkIMHtmlSmiley *smiley) { GdkPixbufAnimation *anim = NULL; - GtkIMHtmlScalable *image = NULL; + GtkIMHtmlImageSave *save = NULL; gboolean ret; if (event->type != GDK_BUTTON_RELEASE || ((GdkEventButton*)event)->button != 3) @@ -3919,9 +3939,14 @@ if (!anim) return FALSE; - image = gtk_imhtml_animation_new(anim, smiley->smile, 0); - ret = gtk_imhtml_image_clicked(w, event, (GtkIMHtmlImage*)image); - g_object_set_data_full(G_OBJECT(w), "image-data", image, (GDestroyNotify)gtk_imhtml_animation_free); + save = g_new0(GtkIMHtmlImageSave, 1); + save->image = (GtkIMHtmlScalable *)gtk_imhtml_animation_new(anim, smiley->smile, 0); + save->data = smiley->data; /* Do not need to memdup here, since the smiley is not + destroyed before this GtkIMHtmlImageSave */ + save->datasize = smiley->datasize; + ret = gtk_imhtml_image_clicked(w, event, save); + g_object_set_data_full(G_OBJECT(w), "image-data", save->image, (GDestroyNotify)gtk_imhtml_animation_free); + g_object_set_data_full(G_OBJECT(w), "image-save-data", save, (GDestroyNotify)g_free); return ret; } @@ -3955,6 +3980,7 @@ GtkWidget *box = gtk_event_box_new(); char *tag; GtkTextChildAnchor *anchor = gtk_text_buffer_create_child_anchor(imhtml->text_buffer, iter); + GtkIMHtmlImageSave *save; gtk_container_add(GTK_CONTAINER(box), GTK_WIDGET(image->image)); @@ -3969,7 +3995,11 @@ g_object_set_data(G_OBJECT(anchor), "gtkimhtml_plaintext", "[Image]"); gtk_text_view_add_child_at_anchor(GTK_TEXT_VIEW(imhtml), box, anchor); - g_signal_connect(G_OBJECT(box), "event", G_CALLBACK(gtk_imhtml_image_clicked), image); + + save = g_new0(GtkIMHtmlImageSave, 1); + save->image = scale; + g_signal_connect(G_OBJECT(box), "event", G_CALLBACK(gtk_imhtml_image_clicked), save); + g_object_set_data_full(G_OBJECT(box), "image-save-data", save, (GDestroyNotify)g_free); } GtkIMHtmlScalable *gtk_imhtml_hr_new() @@ -5773,6 +5803,7 @@ g_object_unref(smiley->icon); if (smiley->loader) g_object_unref(smiley->loader); + g_free(smiley->data); g_free(smiley); } @@ -5887,13 +5918,25 @@ void gtk_imhtml_set_populate_primary_clipboard(GtkIMHtml *imhtml, gboolean populate) { + gulong signal_id; + signal_id = g_signal_handler_find(imhtml->text_buffer, + G_SIGNAL_MATCH_FUNC | G_SIGNAL_MATCH_UNBLOCKED, 0, 0, NULL, + mark_set_so_update_selection_cb, NULL); if (populate) { - g_signal_handlers_unblock_matched(imhtml->text_buffer, - G_SIGNAL_MATCH_FUNC, 0, 0, NULL, - mark_set_so_update_selection_cb, NULL); + if (!signal_id) { + /* We didn't find an unblocked signal handler, which means there + is a blocked handler. Now unblock it. + This is necessary to avoid a mutex-lock when the debug message + saying 'no handler is blocked' is printed in the debug window. + -- sad + */ + g_signal_handlers_unblock_matched(imhtml->text_buffer, + G_SIGNAL_MATCH_FUNC, 0, 0, NULL, + mark_set_so_update_selection_cb, NULL); + } } else { - g_signal_handlers_block_matched(imhtml->text_buffer, - G_SIGNAL_MATCH_FUNC, 0, 0, NULL, - mark_set_so_update_selection_cb, NULL); + /* Block only if we found an unblocked handler */ + if (signal_id) + g_signal_handler_block(imhtml->text_buffer, signal_id); } } diff -r 99e3f40d082f -r 338ac8c43931 pidgin/gtkimhtml.h --- a/pidgin/gtkimhtml.h Tue May 19 06:34:27 2009 +0000 +++ b/pidgin/gtkimhtml.h Tue May 19 06:35:24 2009 +0000 @@ -188,6 +188,8 @@ GSList *anchors; GtkIMHtmlSmileyFlags flags; GtkIMHtml *imhtml; + gpointer data; /** @Since 2.6.0 */ + gsize datasize; /** @Since 2.6.0 */ }; struct _GtkIMHtmlScalable { diff -r 99e3f40d082f -r 338ac8c43931 pidgin/gtkstatusbox.c --- a/pidgin/gtkstatusbox.c Tue May 19 06:34:27 2009 +0000 +++ b/pidgin/gtkstatusbox.c Tue May 19 06:35:24 2009 +0000 @@ -93,6 +93,7 @@ static void do_colorshift (GdkPixbuf *dest, GdkPixbuf *src, int shift); static void icon_choose_cb(const char *filename, gpointer data); static void remove_buddy_icon_cb(GtkWidget *w, PidginStatusBox *box); +static void choose_buddy_icon_cb(GtkWidget *w, PidginStatusBox *box); enum { /** A PidginStatusBoxItemType */ @@ -317,6 +318,10 @@ box->icon_box_menu = gtk_menu_new(); + menu_item = pidgin_new_item_from_stock(box->icon_box_menu, _("Select Buddy Icon"), GTK_STOCK_ADD, + G_CALLBACK(choose_buddy_icon_cb), + box, 0, 0, NULL); + menu_item = pidgin_new_item_from_stock(box->icon_box_menu, _("Remove"), GTK_STOCK_REMOVE, G_CALLBACK(remove_buddy_icon_cb), box, 0, 0, NULL); @@ -327,13 +332,7 @@ event->button, event->time); } else { - if (box->buddy_icon_sel) { - gtk_window_present(GTK_WINDOW(box->buddy_icon_sel)); - return FALSE; - } - - box->buddy_icon_sel = pidgin_buddy_icon_chooser_new(GTK_WINDOW(gtk_widget_get_toplevel(widget)), icon_choose_cb, box); - gtk_widget_show_all(box->buddy_icon_sel); + choose_buddy_icon_cb(widget, box); } return FALSE; } @@ -1529,6 +1528,17 @@ } static void +choose_buddy_icon_cb(GtkWidget *w, PidginStatusBox *box) +{ + if (box->buddy_icon_sel) { + gtk_window_present(GTK_WINDOW(box->buddy_icon_sel)); + } else { + box->buddy_icon_sel = pidgin_buddy_icon_chooser_new(GTK_WINDOW(gtk_widget_get_toplevel(w)), icon_choose_cb, box); + gtk_widget_show_all(box->buddy_icon_sel); + } +} + +static void icon_choose_cb(const char *filename, gpointer data) { PidginStatusBox *box = data; diff -r 99e3f40d082f -r 338ac8c43931 po/ca.po --- a/po/ca.po Tue May 19 06:34:27 2009 +0000 +++ b/po/ca.po Tue May 19 06:35:24 2009 +0000 @@ -33,8 +33,8 @@ msgstr "" "Project-Id-Version: Pidgin\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-05-06 19:49+0200\n" -"PO-Revision-Date: 2009-05-06 23:20+0200\n" +"POT-Creation-Date: 2009-05-17 14:59+0200\n" +"PO-Revision-Date: 2009-05-17 15:05+0200\n" "Last-Translator: Josep Puigdemont i Casamajó \n" "Language-Team: Catalan \n" "MIME-Version: 1.0\n" @@ -1595,7 +1595,7 @@ "Fetching TinyURL..." msgstr "" "\n" -"S'està aconseguint una TinyURL..." +"S'està aconseguint un TinyURL..." msgid "Only create TinyURL for urls of this length or greater" msgstr "Crea TinyURL per a URL així de llargues o més" @@ -1816,6 +1816,8 @@ msgid "+++ %s signed off" msgstr "+++ %s se n'ha anat" +#. Unknown error +#. Unknown error! msgid "Unknown error" msgstr "Error desconegut" @@ -2717,7 +2719,7 @@ #. *< priority #. *< id msgid "One Time Password Support" -msgstr "Contrasenyes d'un sol us" +msgstr "Contrasenyes d'un sol ús" #. *< name #. *< version @@ -2731,7 +2733,7 @@ "are only used in a single successful connection.\n" "Note: The account password must not be saved for this to work." msgstr "" -"Us permet forçar que les contrasenyes siguin d'un sol us per a comptes dels " +"Us permet forçar que les contrasenyes siguin d'un sol ús per a comptes dels " "quals no es desin les contrasenyes.\n" "Nota: per poder fer servir això, cal que no es desi la contrasenya del " "compte." @@ -3777,14 +3779,14 @@ msgstr "Aquesta versió del protocol BOSH no està implementada" msgid "Unable to establish a connection with the server" -msgstr "No s'ha pogut establir una connexió amb al servidor" +msgstr "No s'ha pogut establir una connexió amb el servidor" #, c-format msgid "" "Could not establish a connection with the server:\n" "%s" msgstr "" -"No s'ha pogut establir una connexió amb al servidor:\n" +"No s'ha pogut establir una connexió amb el servidor:\n" "%s" msgid "Unable to establish SSL connection" @@ -4037,6 +4039,13 @@ msgid "Resource" msgstr "Recurs" +#, c-format +msgid "%s ago" +msgstr "fa %s" + +msgid "Logged off" +msgstr "Desconnectat" + # Segons la viquipèdia msgid "Middle Name" msgstr "Nom del mig" @@ -4812,9 +4821,8 @@ msgid "Error in chat %s" msgstr "S'ha produït un error en el xat %s" -#, fuzzy msgid "An error occured on the in-band bytestream transfer\n" -msgstr "S'ha produït un error en obrir el fitxer." +msgstr "" msgid "Transfer was closed." msgstr "La transferència s'ha tancat." @@ -5774,6 +5782,8 @@ msgstr "S'ha perdut la connexió amb el servidor" #. Can't write _()'d strings in array initializers. Workaround. +#. khc: then use N_() in the array initializer and use _() when they are +#. used msgid "New mail messages" msgstr "Missatges de correu nous" @@ -5971,15 +5981,15 @@ #. * connotation, for example, "he was zapped by electricity when #. * he put a fork in the toaster." msgid "Zap" -msgstr "" +msgstr "Enrampar" #, c-format msgid "%s has zapped you!" -msgstr "" +msgstr "%s us ha enrampat!" #, c-format msgid "Zapping %s..." -msgstr "" +msgstr "S'està enrampant %s..." #. Whack means "to hit or strike someone with a sharp blow" msgid "Whack" @@ -6619,9 +6629,6 @@ msgid "iChat AV" msgstr "iChat AV" -msgid "Live Video" -msgstr "Vídeo en directe" - msgid "Camera" msgstr "Càmera" @@ -9603,6 +9610,30 @@ msgid "Add buddy rejected" msgstr "S'ha rebutjat afegir l'amic" +#. Some error in the received stream +msgid "Received invalid data" +msgstr "S'han rebut dades invàlides" + +#. Password incorrect +msgid "Incorrect Password" +msgstr "La contrasenya no és correcta" + +#. security lock from too many failed login attempts +msgid "Account locked: Too many failed login attempts" +msgstr "S'ha blocat el compte: s'ha intentat entrar massa vegades" + +#. the username does not exist +msgid "Username does not exist" +msgstr "L'usuari no existeix" + +#. indicates a lock of some description +msgid "Account locked: See the debug log" +msgstr "El compte està blocat: vegeu el registre de depuració" + +#. username or password missing +msgid "Username or password missing" +msgstr "Manquen el nom d'uruari o la contrasenya" + #, c-format msgid "" "The Yahoo server has requested the use of an unrecognized authentication " @@ -10518,8 +10549,8 @@ msgid "Please update the necessary fields." msgstr "Actualitzeu els camps necessaris." -msgid "Room _List" -msgstr "_Llista de sales" +msgid "A_ccount" +msgstr "_Compte" msgid "" "Please enter the appropriate information about the chat you would like to " @@ -10527,8 +10558,8 @@ msgstr "" "Introduïu la informació necessària sobre el xat al qual vulgueu entrar.\n" -msgid "_Account:" -msgstr "C_ompte:" +msgid "Room _List" +msgstr "_Llista de sales" msgid "_Block" msgstr "_Bloca" @@ -12003,11 +12034,9 @@ msgid "Save Image" msgstr "Desa imatge" -#, c-format msgid "_Save Image..." msgstr "_Desa la imatge..." -#, c-format msgid "_Add Custom Smiley..." msgstr "_Afegeix una emoticona personalitzada..." @@ -12442,6 +12471,9 @@ msgid "Pounce on Whom" msgstr "Avisa dels Whom" +msgid "_Account:" +msgstr "C_ompte:" + msgid "_Buddy name:" msgstr "_Nom de l'amic:" @@ -12721,7 +12753,7 @@ #. TURN server msgid "Relay Server (TURN)" -msgstr "" +msgstr "Servidor repetidor (TURN)" msgid "Proxy Server & Browser" msgstr "Servidor intermediari i navegador" @@ -13118,6 +13150,9 @@ msgid "Custom Smiley Manager" msgstr "Gestor d'emoticones personalitzades" +msgid "Select Buddy Icon" +msgstr "Seleccioneu una icona per a l'amic" + msgid "Click to change your buddyicon for this account." msgstr "Feu clic per canviar la icona d'amic d'aquest compte." @@ -14284,6 +14319,9 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Aquest connector és útil per a depurar servidors i clients XMPP." +#~ msgid "Live Video" +#~ msgstr "Vídeo en directe" + #~ msgid "Invite message" #~ msgstr "Missatge d'invitació" @@ -14763,9 +14801,6 @@ #~ "llista d'amics. Opcionalment podeu entrar un àlies, o sobrenom, per a " #~ "l'amic. El sobrenom substituirà el nom d'usuari allà on sigui possible.\n" -#~ msgid "A_ccount:" -#~ msgstr "_Compte:" - #~ msgid "User has typed something and stopped" #~ msgstr "L'usuari ha escrit alguna cosa i s'ha aturat" diff -r 99e3f40d082f -r 338ac8c43931 po/de.po --- a/po/de.po Tue May 19 06:34:27 2009 +0000 +++ b/po/de.po Tue May 19 06:35:24 2009 +0000 @@ -11,8 +11,8 @@ msgstr "" "Project-Id-Version: de\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2009-04-30 10:37-0400\n" -"PO-Revision-Date: 2009-04-26 12:11+0200\n" +"POT-Creation-Date: 2009-05-15 19:56+0200\n" +"PO-Revision-Date: 2009-05-15 19:56+0200\n" "Last-Translator: Jochen Kemnade \n" "Language-Team: Deutsch \n" "MIME-Version: 1.0\n" @@ -1562,7 +1562,6 @@ msgid "Lastlog plugin." msgstr "Verlauf-Plugin." -#, c-format msgid "" "\n" "Fetching TinyURL..." @@ -1890,7 +1889,6 @@ "Fehler beim Lesen vom Auflösungsprozess:\n" "%s" -#, c-format msgid "Resolver process exited without answering our request" msgstr "Auflösungsprozess hat sich beendet ohne die Anfrage zu beantworten" @@ -3760,11 +3758,8 @@ msgid "Unsupported version of BOSH protocol" msgstr "Nicht-unterstützte Version" -#, fuzzy msgid "Unable to establish a connection with the server" -msgstr "" -"Die Verbindung mit dem Server konnte nicht hergestellt werden:\n" -"%s" +msgstr "Die Verbindung mit dem Server konnte nicht hergestellt werden" #, c-format msgid "" @@ -3774,9 +3769,8 @@ "Die Verbindung mit dem Server konnte nicht hergestellt werden:\n" "%s" -#, fuzzy msgid "Unable to establish SSL connection" -msgstr "Kann Verbindung nicht erstellen" +msgstr "Kann SSL-Verbindung nicht erstellen" msgid "Unable to create socket" msgstr "Kann Socket nicht erstellen" @@ -4012,6 +4006,14 @@ msgid "Resource" msgstr "Ressource" +#, fuzzy, c-format +msgid "%s ago" +msgstr "vor %s" + +#, fuzzy +msgid "Logged off" +msgstr "Abgemeldet" + msgid "Middle Name" msgstr "Zweiter Name" @@ -4181,6 +4183,17 @@ msgid "Find Rooms" msgstr "Finde Räume" +#, fuzzy +msgid "Affiliations:" +msgstr "Alias:" + +msgid "No users found" +msgstr "Keine Benutzer gefunden" + +#, fuzzy +msgid "Roles:" +msgstr "Funktion" + msgid "You require encryption, but it is not available on this server." msgstr "" "Sie fordern Verschlüsselung, aber diese ist auf dem Server nicht verfügbar." @@ -4191,7 +4204,6 @@ msgid "Read Error" msgstr "Fehler beim Lesen" -#, c-format msgid "" "Could not find alternative XMPP connection methods after failing to connect " "directly.\n" @@ -4645,16 +4657,18 @@ msgid "ban <user> [reason]: Ban a user from the room." msgstr "ban <Benutzer> [Grund]: Verbanne einen Benutzer aus dem Raum." -msgid "" -"affiliate <user> <owner|admin|member|outcast|none>: Set a user's " -"affiliation with the room." +#, fuzzy +msgid "" +"affiliate <owner|admin|member|outcast|none> [nick1] [nick2] ...: Get " +"the users with an affiliation or set users' affiliation with the room." msgstr "" "affiliate <Benutzer> <owner|admin|member|outcast|none>: Setze " "eine Benutzerzugehörigkeit für den Raum." -msgid "" -"role <user> <moderator|participant|visitor|none>: Set a user's " -"role in the room." +#, fuzzy +msgid "" +"role <moderator|participant|visitor|none> [nick1] [nick2] ...: Get the " +"users with an role or set users' role with the room." msgstr "" "role <Benutzer> <moderator|participant|visitor|none>: Setze eine " "Rolle für den Benutzer im Raum." @@ -4888,219 +4902,166 @@ "%s ist auf der lokalen Liste, aber nicht auf der Serverliste. Möchten Sie, " "dass der Buddy hinzugefügt wird?" -#, c-format msgid "Unable to parse message" msgstr "Kann die Nachricht nicht parsen" -#, c-format msgid "Syntax Error (probably a client bug)" msgstr "Syntaxfehler (wahrscheinlich ein Client-Bug)" -#, c-format msgid "Invalid email address" msgstr "Ungültige E-Mail-Adresse" -#, c-format msgid "User does not exist" msgstr "Benutzer existiert nicht" -#, c-format msgid "Fully qualified domain name missing" msgstr "Der Fully Qualified Domain Name fehlt" -#, c-format msgid "Already logged in" msgstr "Schon angemeldet" -#, c-format msgid "Invalid username" msgstr "Ungültiger Benutzername" -#, c-format msgid "Invalid friendly name" msgstr "Ungültiger Freundesname" -#, c-format msgid "List full" msgstr "Liste voll" -#, c-format msgid "Already there" msgstr "Schon da" -#, c-format msgid "Not on list" msgstr "Nicht auf der Liste" -#, c-format msgid "User is offline" msgstr "Benutzer ist offline" -#, c-format msgid "Already in the mode" msgstr "Bereits in diesem Modus" -#, c-format msgid "Already in opposite list" msgstr "Bereits in der „Gegenteil-Liste“" -#, c-format msgid "Too many groups" msgstr "Zu viele Gruppen" -#, c-format msgid "Invalid group" msgstr "Ungültige Gruppe" -#, c-format msgid "User not in group" msgstr "Benutzer ist nicht in der Gruppe" -#, c-format msgid "Group name too long" msgstr "Name der Gruppe ist zu lang" -#, c-format msgid "Cannot remove group zero" msgstr "Kann die Gruppe „Null“ nicht entfernen" -#, c-format msgid "Tried to add a user to a group that doesn't exist" msgstr "" "Versuchte einen Benutzer zu einer nichtexistierenden Gruppe hinzuzufügen" -#, c-format msgid "Switchboard failed" msgstr "Vermittlung gescheitert" -#, c-format msgid "Notify transfer failed" msgstr "Übertragung der Benachrichtigung gescheitert" -#, c-format msgid "Required fields missing" msgstr "Notwendige Felder fehlen" -#, c-format msgid "Too many hits to a FND" msgstr "Zu viele Treffer zu einem FND" -#, c-format msgid "Not logged in" msgstr "Nicht angemeldet" -#, c-format msgid "Service temporarily unavailable" msgstr "Dienst momentan nicht verfügbar" -#, c-format msgid "Database server error" msgstr "Fehler des Datenbank-Servers" -#, c-format msgid "Command disabled" msgstr "Kommando abgeschaltet" -#, c-format msgid "File operation error" msgstr "Dateiverarbeitungsfehler" -#, c-format msgid "Memory allocation error" msgstr "Fehler bei der Speicheranforderung" -#, c-format msgid "Wrong CHL value sent to server" msgstr "Falscher CHL-Wert zum Server gesendet" -#, c-format msgid "Server busy" msgstr "Server beschäftigt" -#, c-format msgid "Server unavailable" msgstr "Server unerreichbar" -#, c-format msgid "Peer notification server down" msgstr "Peer-Benachrichtigungsserver nicht erreichbar" -#, c-format msgid "Database connect error" msgstr "Datenbank-Verbindungsfehler" -#, c-format msgid "Server is going down (abandon ship)" msgstr "Server fährt runter (melden Sie sich ab)" -#, c-format msgid "Error creating connection" msgstr "Fehler beim Herstellen der Verbindung" -#, c-format msgid "CVR parameters are either unknown or not allowed" msgstr "CVR-Parameter sind entweder unbekannt oder nicht erlaubt" -#, c-format msgid "Unable to write" msgstr "Schreiben nicht möglich" -#, c-format msgid "Session overload" msgstr "Sitzung überlastet" -#, c-format msgid "User is too active" msgstr "Benutzer ist zu aktiv" -#, c-format msgid "Too many sessions" msgstr "Zu viele Sitzungen" -#, c-format msgid "Passport not verified" msgstr "Passport (MSN Benutzerausweis) wurde nicht überprüft" -#, c-format msgid "Bad friend file" msgstr "Falsche Friends-Datei" -#, c-format msgid "Not expected" msgstr "Nicht erwartet" -#, c-format msgid "Friendly name changes too rapidly" msgstr "Benutzernamen werden zu oft geändert" -#, c-format msgid "Server too busy" msgstr "Server ist zu beschäftigt" -#, c-format msgid "Authentication failed" msgstr "Authentifizierung fehlgeschlagen" -#, c-format msgid "Not allowed when offline" msgstr "Nicht erlaubt im Offline-Modus" -#, c-format msgid "Not accepting new users" msgstr "Akzeptiert keine neuen Benutzer" -#, c-format msgid "Kids Passport without parental consent" msgstr "Kinder-Passwort ohne die Zustimmung der Eltern" -#, c-format msgid "Passport account not yet verified" msgstr "Passport-Konto wurde noch nicht überprüft" msgid "Passport account suspended" msgstr "Passport-Konto gesperrt" -#, c-format msgid "Bad ticket" msgstr "Falsches Ticket" @@ -5477,14 +5438,17 @@ msgid "%s just sent you a Nudge!" msgstr "%s hat Sie gerade angestoßen!" -#. char *adl = g_strndup(payload, len); +#, c-format +msgid "Unknown error (%d): %s" +msgstr "Unbekannter Fehler (%d): %s" + +msgid "Unable to add user" +msgstr "Kann den Benutzer nicht hinzufügen" + #, c-format msgid "Unknown error (%d)" msgstr "Unbekannter Fehler (%d)" -msgid "Unable to add user" -msgstr "Kann den Benutzer nicht hinzufügen" - msgid "The following users are missing from your addressbook" msgstr "Die folgenden Benutzer fehlen in Ihrem Adressbuch" @@ -5749,6 +5713,8 @@ msgstr "Verbindung zum Server verloren" #. Can't write _()'d strings in array initializers. Workaround. +#. khc: then use N_() in the array initializer and use _() when they are +#. used msgid "New mail messages" msgstr "Neue Mail-Nachrichten" @@ -6591,9 +6557,6 @@ msgid "iChat AV" msgstr "iChat AV" -msgid "Live Video" -msgstr "Live-Video" - msgid "Camera" msgstr "Kamera" @@ -8653,7 +8616,6 @@ msgid "
Channel Topic:
%s" msgstr "
Thema des Kanals:
%s" -#, c-format msgid "
Channel Modes: " msgstr "
Kanal-Modi: " @@ -8678,7 +8640,6 @@ msgid "Channel Public Keys List" msgstr "Liste der öffentlichen Schlüssel des Kanals" -#, c-format msgid "" "Channel authentication is used to secure the channel from unauthorized " "access. The authentication may be based on passphrase and digital " @@ -9080,7 +9041,6 @@ msgid "Your Current Mood" msgstr "Ihre momentane Stimmung" -#, c-format msgid "Normal" msgstr "Normal" @@ -9466,47 +9426,37 @@ msgid "No server statistics available" msgstr "Keine Serverstatistik verfügbar" -#, c-format msgid "Failure: Version mismatch, upgrade your client" msgstr "Fehler: Unterschiedliche Version, aktualisieren Sie Ihren Client" -#, c-format msgid "Failure: Remote does not trust/support your public key" msgstr "" "Fehler: Die entfernte Seite vertraut Ihrem öffentlichen Schlüssel nicht" -#, c-format msgid "Failure: Remote does not support proposed KE group" msgstr "" "Fehler: Entferntes Programm unterstützt nicht die vorgeschlagen KE-Gruppe" -#, c-format msgid "Failure: Remote does not support proposed cipher" msgstr "" "Fehler: Entferntes Programm unterstützt die vorgeschlagene Cipher nicht" -#, c-format msgid "Failure: Remote does not support proposed PKCS" msgstr "Fehler: Entferntes Programm unterstützt die vorgeschlagene PKCS nicht" -#, c-format msgid "Failure: Remote does not support proposed hash function" msgstr "" "Fehler: Entferntes Programm unterstützt die vorgeschlagen Hashfunktion nicht" -#, c-format msgid "Failure: Remote does not support proposed HMAC" msgstr "Fehler: Entferntes Programm unterstützt das vorgeschlagene HMAC nicht" -#, c-format msgid "Failure: Incorrect signature" msgstr "Fehler: Falsche Signatur" -#, c-format msgid "Failure: Invalid cookie" msgstr "Fehler: Ungültiger Cookie" -#, c-format msgid "Failure: Authentication failed" msgstr "Fehler: Authentifizierung fehlgeschlagen" @@ -10322,29 +10272,24 @@ msgstr " (%s)" #. 10053 -#, c-format msgid "Connection interrupted by other software on your computer." msgstr "" "Die Verbindung wurde von einer anderen Software auf ihrem Computer " "unterbrochen." #. 10054 -#, c-format msgid "Remote host closed connection." msgstr "Der entfernte Host hat die Verbindung beendet." #. 10060 -#, c-format msgid "Connection timed out." msgstr "Verbindungsabbruch wegen Zeitüberschreitung." #. 10061 -#, c-format msgid "Connection refused." msgstr "Verbindung abgelehnt." #. 10048 -#, c-format msgid "Address already in use." msgstr "Adresse wird bereits benutzt." @@ -11620,7 +11565,6 @@ "geschützt. Die Datei 'COPYRIGHT' enthält die komplette Liste der " "Mitwirkenden. Wir übernehmen keine Haftung für dieses Programm.

" -#, c-format msgid "" "FAQ:
http://developer.pidgin.im/wiki/FAQ

" @@ -11628,7 +11572,6 @@ "FAQ: http://developer.pidgin.im/wiki/FAQ

" -#, c-format msgid "" "Help via e-mail: support@pidgin.im

" @@ -11636,13 +11579,11 @@ "Hilfe per E-Mail: support@pidgin.im

" -#, c-format msgid "" "IRC Channel: #pidgin on irc.freenode.net

" msgstr "" "IRC-Kanal: #pidgin auf irc.freenode.net

" -#, c-format msgid "XMPP MUC: devel@conference.pidgin.im

" msgstr "XMPP-MUC: devel@conference.pidgin.im

" @@ -12001,11 +11942,9 @@ msgid "Save Image" msgstr "Bild speichern" -#, c-format msgid "_Save Image..." msgstr "Bild _speichern..." -#, c-format msgid "_Add Custom Smiley..." msgstr "Benutzerdefinierten Smiley _hinzufügen..." @@ -12305,7 +12244,6 @@ msgid "Pidgin" msgstr "Pidgin" -#, c-format msgid "Exiting because another libpurple client is already running.\n" msgstr "Wird geschlossen, da bereits ein anderer libpurple-Client läuft\n" @@ -12493,47 +12431,36 @@ msgid "Pounce Target" msgstr "Alarm-Ziel" -#, c-format msgid "Started typing" msgstr "Beginnt zu tippen" -#, c-format msgid "Paused while typing" msgstr "Hat beim Tippen angehalten" -#, c-format msgid "Signed on" msgstr "Hat sich anmeldet" -#, c-format msgid "Returned from being idle" msgstr "Ist nicht mehr inaktiv" -#, c-format msgid "Returned from being away" msgstr "Ist wieder anwesend" -#, c-format msgid "Stopped typing" msgstr "Hat das Tippen gestoppt" -#, c-format msgid "Signed off" msgstr "Hat sich abmeldet" -#, c-format msgid "Became idle" msgstr "Wurde untätig" -#, c-format msgid "Went away" msgstr "Ging hinaus" -#, c-format msgid "Sent a message" msgstr "Eine Nachricht senden" -#, c-format msgid "Unknown.... Please report this!" msgstr "Unbekannt.... Bitte berichten Sie dieses Problem!" @@ -12814,27 +12741,21 @@ msgid "Sound Selection" msgstr "Klang-Auswahl" -#, c-format msgid "Quietest" msgstr "Am leisesten" -#, c-format msgid "Quieter" msgstr "Leiser" -#, c-format msgid "Quiet" msgstr "Leise" -#, c-format msgid "Loud" msgstr "Laut" -#, c-format msgid "Louder" msgstr "Lauter" -#, c-format msgid "Loudest" msgstr "Am lautesten" @@ -13871,7 +13792,6 @@ msgid "Select Color" msgstr "Farbe auswählen" -#, c-format msgid "Select Interface Font" msgstr "Schriftart wählen" @@ -14096,7 +14016,6 @@ msgid "Timestamp Format Options" msgstr "Zeitstempelformat-Optionen" -#, c-format msgid "_Force 24-hour time format" msgstr "_Erzwinge 24-Stunden Zeitformat" @@ -14265,6 +14184,9 @@ msgstr "" "Dieses Plugin ist nützlich zur Fehlersuche in XMPP-Servern oder -Clients." +#~ msgid "Live Video" +#~ msgstr "Live-Video" + #~ msgid "Invite message" #~ msgstr "Einladungsnachricht"