diff options
32 files changed, 5337 insertions, 27 deletions
diff --git a/samples/nv-control-events.c b/samples/nv-control-events.c index 5b627d7..43dade2 100644 --- a/samples/nv-control-events.c +++ b/samples/nv-control-events.c @@ -428,14 +428,20 @@ static const char *target2str(int n) static char unknown[24]; switch (n) { - case NV_CTRL_TARGET_TYPE_X_SCREEN: return "X Screen"; break; - case NV_CTRL_TARGET_TYPE_GPU: return "GPU"; break; - case NV_CTRL_TARGET_TYPE_FRAMELOCK: return "Frame Lock"; break; - case NV_CTRL_TARGET_TYPE_VCSC: return "VCS"; break; - case NV_CTRL_TARGET_TYPE_GVI: return "GVI"; break; - case NV_CTRL_TARGET_TYPE_COOLER: return "Cooler"; break; - case NV_CTRL_TARGET_TYPE_THERMAL_SENSOR: return "Thermal Sensor"; break; - + case NV_CTRL_TARGET_TYPE_X_SCREEN: + return "X Screen"; + case NV_CTRL_TARGET_TYPE_GPU: + return "GPU"; + case NV_CTRL_TARGET_TYPE_FRAMELOCK: + return "Frame Lock"; + case NV_CTRL_TARGET_TYPE_VCSC: + return "VCS"; + case NV_CTRL_TARGET_TYPE_GVI: + return "GVI"; + case NV_CTRL_TARGET_TYPE_COOLER: + return "Cooler"; + case NV_CTRL_TARGET_TYPE_THERMAL_SENSOR: + return "Thermal Sensor"; default: snprintf(unknown, 24, "Unknown (%d)", n); return unknown; @@ -483,6 +489,7 @@ static const char *attr2str(int n) static AttrEntry attr_table[] = { MAKE_ENTRY(NV_CTRL_FLATPANEL_SCALING), MAKE_ENTRY(NV_CTRL_FLATPANEL_DITHERING), + MAKE_ENTRY(NV_CTRL_DITHERING), MAKE_ENTRY(NV_CTRL_DIGITAL_VIBRANCE), MAKE_ENTRY(NV_CTRL_BUS_TYPE), MAKE_ENTRY(NV_CTRL_VIDEO_RAM), @@ -702,11 +709,18 @@ static AttrEntry attr_table[] = { MAKE_ENTRY(NV_CTRL_COLOR_RANGE), MAKE_ENTRY(NV_CTRL_GPU_SCALING_DEFAULT_TARGET), MAKE_ENTRY(NV_CTRL_GPU_SCALING_DEFAULT_METHOD), - MAKE_ENTRY(NV_CTRL_FLATPANEL_DITHERING_MODE), - // MAKE_ENTRY(NV_CTRL_FLATPANEL_DEFAULT_DITHERING), - // MAKE_ENTRY(NV_CTRL_FLATPANEL_DEFAULT_DITHERING_MODE), + MAKE_ENTRY(NV_CTRL_DITHERING_MODE), + MAKE_ENTRY(NV_CTRL_CURRENT_DITHERING), + MAKE_ENTRY(NV_CTRL_CURRENT_DITHERING_MODE), MAKE_ENTRY(NV_CTRL_THERMAL_SENSOR_READING), MAKE_ENTRY(NV_CTRL_THERMAL_SENSOR_PROVIDER), MAKE_ENTRY(NV_CTRL_THERMAL_SENSOR_TARGET), + MAKE_ENTRY(NV_CTRL_SHOW_MULTIGPU_VISUAL_INDICATOR), + MAKE_ENTRY(NV_CTRL_GPU_CURRENT_PROCESSOR_CLOCK_FREQS), + MAKE_ENTRY(NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS), + MAKE_ENTRY(NV_CTRL_GPU_PCIE_MAX_LINK_SPEED), + MAKE_ENTRY(NV_CTRL_DITHERING_DEPTH), + MAKE_ENTRY(NV_CTRL_CURRENT_DITHERING_DEPTH), + MAKE_ENTRY(NV_CTRL_GVO_ANC_PARITY_COMPUTATION), { -1, NULL, NULL } }; diff --git a/src/gtk+-2.x/ctk3dvisionpro.c b/src/gtk+-2.x/ctk3dvisionpro.c new file mode 100644 index 0000000..cede791 --- /dev/null +++ b/src/gtk+-2.x/ctk3dvisionpro.c @@ -0,0 +1,1936 @@ +/* + * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix + * and Linux systems. + * + * Copyright (C) 2010 NVIDIA Corporation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of Version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 Version 2 + * of 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. + * 59 Temple Place - Suite 330 + * Boston, MA 02111-1307, USA + * + */ + +#include <gtk/gtk.h> + +#include "NvCtrlAttributes.h" +#include "NVCtrlLib.h" + +#include "ctkbanner.h" +#include "ctk3dvisionpro.h" +#include "ctkconfig.h" +#include "ctkhelp.h" + +#include <string.h> +#include <stdlib.h> +#include <stdio.h> +#include <assert.h> + +/* + * Icons. + */ +#include "svp_battery_0.h" +#include "svp_battery_25.h" +#include "svp_battery_50.h" +#include "svp_battery_75.h" +#include "svp_battery_100.h" +#include "svp_status_nosignal.h" +#include "svp_status_verylow.h" +#include "svp_status_low.h" +#include "svp_status_good.h" +#include "svp_status_verygood.h" +#include "svp_status_excellent.h" +#include "svp_add_glasses.h" + +//----------------------------------------------------------------------------- + +#define HTU(idx) (ctk_3d_vision_pro->htu_info[(idx)]) +#define MAX_ATTRIB_LENGTH 128 + +#define PAIRING_TIMEOUT 3 +#define PAIRING_DURATION 60 +#define POLL_PAIRING_TIMEOUT 2000 //mS +#define POLL_PAIRING_CYCLE ((POLL_PAIRING_TIMEOUT / 1000) * 2) + +enum { + CHANGED, + LAST_SIGNAL +}; + +typedef struct _RenameGlassesDlg { + GtkWidget *parent; + GtkWidget *mnu_glasses_name; + GtkWidget *dlg_rename_glasses; + int glasses_selected_index; + char *glasses_new_name; +} RenameGlassesDlg; + +typedef struct _IdentifyGlassesDlg { + GtkWidget *parent; + GtkWidget *mnu_glasses_name; + GtkWidget *dlg_identify_glasses; + int glasses_selected_index; +} IdentifyGlassesDlg; + +typedef struct _ChannelRangeDlg { + GtkWidget *parent; + GtkWidget *dlg_channel_range; +} ChannelRangeDlg; + +typedef struct _SelectChannelDlg { + GtkWidget *parent; + GtkWidget *dlg_select_channel; +} SelectChannelDlg; + +typedef struct _RemoveGlassesDlg { + GtkWidget *parent; + GtkWidget *dlg_remove_glasses; + GtkWidget *mnu_glasses_name; + int glasses_selected_index; +} RemoveGlassesDlg; + +typedef void (*BUTTON_CLICK)(GtkButton *button, gpointer user_data); + +static void channel_range_changed(GtkOptionMenu *option_menu, gpointer user_data); + +//----------------------------------------------------------------------------- + +static guint __signals[LAST_SIGNAL] = { 0 }; + +const char *__mnu_glasses_name_tooltip = "Select glasses name"; +const char *__goggle_info_tooltip = "Displays the list of glasses synced " + "to the hub and their battery levels"; +const char *__channel_range_tooltip = "Change the 3D Vision Pro Hub range. " + "Click the arrow and then select the hub range that you want."; +const char *__add_glasses_tooltip = "Add more glasses to sync to the hub. " + "Click this button to open the Add glasses dialog that lets you synchronize " + "another pair of stereo glasses with the hub."; +const char *__refresh_tooltip = "Updates the list of glasses that are " + "synchronized with the hub."; +const char *__identify_tooltip = "Identify a pair of glasses. " + "Causes the LED on the selected pair of glasses to blink."; +const char *__rename_tooltip = "Rename a pair of glasses. " + "Opens the Rename glasses dialog that lets you assign a different name to " + "the selected pair of glasses."; +const char *__remove_glasses_tooltip = "Remove a pair of glasses currently " + "synced to the hub. This removes the selected pair of glasses from the " + "glasses information table and disconnects the glasses from the hub."; + +/****************************************************************************** + * + * Various helper and Widget callback functions + * + ******************************************************************************/ + +static const char** get_battery_status_icon(int battery) +{ + if (battery == 0) { + return (const char **)&svp_battery_0_xpm; + } else if (battery < 50) { + return (const char **)&svp_battery_25_xpm; + } else if (battery < 75) { + return (const char **)&svp_battery_50_xpm; + } else if (battery < 100) { + return (const char **)&svp_battery_75_xpm; + } else if (battery == 100) { + return (const char **)&svp_battery_100_xpm; + } + + return NULL; +} + +static const char** get_signal_strength_icon(int signal_strength) +{ + if (signal_strength == 0) { + return (const char **)&svp_status_nosignal_xpm; + } else if (signal_strength < 25) { + return (const char **)&svp_status_verylow_xpm; + } else if (signal_strength < 50) { + return (const char **)&svp_status_low_xpm; + } else if (signal_strength < 75) { + return (const char **)&svp_status_good_xpm; + } else if (signal_strength < 100) { + return (const char **)&svp_status_verygood_xpm; + } else if (signal_strength == 100) { + return (const char **)&svp_status_excellent_xpm; + } + + return NULL; +} + +static void ctk_3d_vision_pro_class_init(Ctk3DVisionProClass + *ctk_3d_vision_pro_class) +{ + GObjectClass *gobject_class; + + gobject_class = (GObjectClass *) ctk_3d_vision_pro_class; + + __signals[CHANGED] = g_signal_new("changed", + G_OBJECT_CLASS_TYPE(ctk_3d_vision_pro_class), + G_SIGNAL_RUN_LAST, + G_STRUCT_OFFSET(Ctk3DVisionProClass, changed), + NULL, NULL, g_cclosure_marshal_VOID__VOID, + G_TYPE_NONE, 0); +} + +GType ctk_3d_vision_pro_get_type(void) +{ + static GType ctk_3d_vision_pro_type = 0; + + if (!ctk_3d_vision_pro_type) { + static const GTypeInfo ctk_3d_vision_pro_info = { + sizeof (Ctk3DVisionProClass), + NULL, /* base_init */ + NULL, /* base_finalize */ + (GClassInitFunc) ctk_3d_vision_pro_class_init, + NULL, /* class_finalize */ + NULL, /* class_data */ + sizeof (Ctk3DVisionPro), + 0, /* n_preallocs */ + NULL, /* instance_init */ + }; + + ctk_3d_vision_pro_type = g_type_register_static(GTK_TYPE_VBOX, + "Ctk3DVisionPro", &ctk_3d_vision_pro_info, 0); + } + + return ctk_3d_vision_pro_type; +} + +static GtkWidget *add_button(char *label, BUTTON_CLICK handler, + Ctk3DVisionPro *ctk_3d_vision_pro, + GtkWidget *pack_in, const char *tooltip) +{ + GtkWidget *button; + GtkWidget *hbox; + GtkWidget *alignment; + + hbox = gtk_hbox_new(FALSE, 0); + button = gtk_button_new_with_label(label); + gtk_box_pack_end(GTK_BOX(hbox), button, FALSE, FALSE, 0); + g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(handler), + (gpointer) ctk_3d_vision_pro); + ctk_config_set_tooltip(ctk_3d_vision_pro->ctk_config, button, tooltip); + + alignment = gtk_alignment_new(0, 1, 0, 0); + gtk_container_add(GTK_CONTAINER(alignment), hbox); + gtk_box_pack_start(GTK_BOX(pack_in), alignment, TRUE, TRUE, 0); + + return button; +} + +static GtkWidget * add_label(char *text, GtkWidget *pack_in) +{ + GtkWidget *hbox; + GtkWidget *alignment; + GtkWidget *label; + + hbox = gtk_hbox_new(FALSE, 5); + alignment = gtk_alignment_new(0, 1, 0, 0); + gtk_box_pack_start(GTK_BOX(hbox), alignment, TRUE, TRUE, 0); + label = gtk_label_new(text); + gtk_container_add(GTK_CONTAINER(alignment), label); + gtk_box_pack_start(GTK_BOX(pack_in), hbox, FALSE, FALSE, 0); + + return label; +} + +static void glasses_name_changed(GtkOptionMenu *option_menu, + gpointer user_data) +{ + RemoveGlassesDlg *dlg = (RemoveGlassesDlg *)user_data; + dlg->glasses_selected_index = gtk_option_menu_get_history(option_menu); +} + +static GtkWidget *create_glasses_list_menu(Ctk3DVisionPro *ctk_3d_vision_pro, + GlassesInfo **glasses_info, + guint num_glasses, gpointer dlg) +{ + GtkWidget *menu; + GtkWidget *menu_item; + GtkWidget *mnu_glasses_name; + int i; + + mnu_glasses_name = gtk_option_menu_new(); + g_signal_connect(G_OBJECT(mnu_glasses_name), "changed", + G_CALLBACK(glasses_name_changed), + (gpointer) dlg); + menu = gtk_menu_new(); + + ctk_config_set_tooltip(ctk_3d_vision_pro->ctk_config, mnu_glasses_name, + __mnu_glasses_name_tooltip); + + for (i = 0; i < num_glasses; i++) { + menu_item = gtk_menu_item_new_with_label(glasses_info[i]->name); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); + gtk_widget_show(menu_item); + } + + /* Setup the menu and select the glasses name */ + g_signal_handlers_block_by_func(G_OBJECT(mnu_glasses_name), + G_CALLBACK(glasses_name_changed), + (gpointer) dlg); + + gtk_option_menu_set_menu(GTK_OPTION_MENU(mnu_glasses_name), menu); + gtk_option_menu_set_history(GTK_OPTION_MENU(mnu_glasses_name), 0); + + /* If dropdown has only one item, disable menu selection */ + if (num_glasses > 1) { + gtk_widget_set_sensitive(mnu_glasses_name, True); + } else { + gtk_widget_set_sensitive(mnu_glasses_name, False); + } + + g_signal_handlers_unblock_by_func + (G_OBJECT(mnu_glasses_name), + G_CALLBACK(glasses_name_changed), (gpointer) dlg); + + return mnu_glasses_name; +} + +static const char *new_glasses_name_activate(GtkWidget *widget, + gpointer user_data) +{ + RenameGlassesDlg *dlg = (RenameGlassesDlg *)user_data; + const gchar *str = gtk_entry_get_text(GTK_ENTRY(widget)); + + // Store new glasses name in dialog box + dlg->glasses_new_name = realloc(dlg->glasses_new_name, strlen(str) + 1); + strncpy(dlg->glasses_new_name, str, strlen(str) + 1); + + return str; +} + +static gboolean new_glasses_name_focus_out(GtkWidget *widget, GdkEvent *event, + gpointer user_data) +{ + new_glasses_name_activate(widget, user_data); + + return FALSE; + +} /* display_panning_focus_out() */ + +static void update_glasses_info_data_table(GlassesInfoTable *table, GlassesInfo** glasses_info) +{ + int i; + GtkRequisition req; + + if (table->rows > 0) { + gtk_table_resize(GTK_TABLE(table->data_table), table->rows, table->columns); + } + + for (i = 0; i < table->rows; i++) { + char str[NUM_GLASSES_INFO_ATTRIBS + 1][MAX_ATTRIB_LENGTH]; + int cell = 0; + + snprintf((char *)(&(str[cell++])), MAX_ATTRIB_LENGTH, "%s", glasses_info[i]->name); + snprintf((char *)(&(str[cell++])), MAX_ATTRIB_LENGTH, "%d", glasses_info[i]->battery); + + // destroy older widgets + if (glasses_info[i]->image) { + gtk_widget_destroy (glasses_info[i]->image); + } + for (cell = 0; cell < NUM_GLASSES_INFO_ATTRIBS; cell++) { + if (glasses_info[i]->label[cell]) { + gtk_widget_destroy (glasses_info[i]->label[cell]); + } + if (glasses_info[i]->hbox[cell]) { + gtk_widget_destroy (glasses_info[i]->hbox[cell]); + } + } + + for (cell = 0; cell < NUM_GLASSES_INFO_ATTRIBS; cell++) { + GtkWidget *hbox; + GtkWidget * label; + GtkWidget *image; + + hbox = gtk_hbox_new(FALSE, 0); + glasses_info[i]->hbox[cell] = hbox; + + label = gtk_label_new(str[cell]); + glasses_info[i]->label[cell] = label; + gtk_label_set_justify( GTK_LABEL(label), GTK_JUSTIFY_CENTER); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_table_attach(GTK_TABLE(table->data_table), hbox, + cell, cell+1, + i+1, i+2, + GTK_FILL | GTK_EXPAND, GTK_FILL | GTK_EXPAND, 0, 0); + + if (cell == 1) { + const char **bat_icon = get_battery_status_icon(glasses_info[i]->battery); + GdkPixbuf *pixbuf = gdk_pixbuf_new_from_xpm_data(bat_icon); + image = gtk_image_new_from_pixbuf(pixbuf); + glasses_info[i]->image = image; + gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0); + } + /* Make sure the table headers are the same width + * as their table data column + */ + gtk_widget_size_request(label, &req); + + if (table->glasses_header_sizes[cell].width > req.width ) { + gtk_widget_set_size_request(label, + table->glasses_header_sizes[cell].width, + -1); + } else if (table->glasses_header_sizes[cell].width < req.width ) { + table->glasses_header_sizes[cell].width = req.width + 6; + gtk_widget_set_size_request(table->glasses_header_sizes[cell].widget, + table->glasses_header_sizes[cell].width, + -1); + } + } + } +} + +static void create_glasses_info_table(GlassesInfoTable *table, GlassesInfo** glasses_info, + GtkWidget *pack_in, CtkConfig *ctk_config) +{ + GtkWidget *hbox, *hbox1; + GtkWidget *vbox, *vbox2; + GtkWidget *label; + GtkWidget *hseparator; + GtkWidget *data_viewport, *full_viewport; + GtkWidget *vscrollbar, *hscrollbar, *vpan; + GtkWidget *data_table, *header_table; + GtkRequisition req; + GtkWidget *event; /* For setting the background color to white */ + gchar *goggle_info_titles[NUM_GLASSES_INFO_ATTRIBS] = + {"Glasses Name", "Battery Level (%)"}; + int i; + + /* Create clist in a scroll box */ + hbox1 = gtk_hbox_new(FALSE, 0); + label = gtk_label_new("Glasses Information"); + hseparator = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(hbox1), label, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox1), hseparator, TRUE, TRUE, 5); + + hbox = gtk_hbox_new(FALSE, 0); + vbox = gtk_vbox_new(FALSE, 5); + vbox2 = gtk_vbox_new(FALSE, 5); + vpan = gtk_vpaned_new(); + + data_viewport = gtk_viewport_new(NULL, NULL); + gtk_widget_set_size_request(data_viewport, 250, 100); + vscrollbar = gtk_vscrollbar_new(gtk_viewport_get_vadjustment + (GTK_VIEWPORT(data_viewport))); + + full_viewport = gtk_viewport_new(NULL, NULL); + gtk_widget_set_size_request(full_viewport, 300, 150); + hscrollbar = gtk_hscrollbar_new(gtk_viewport_get_hadjustment + (GTK_VIEWPORT(full_viewport))); + + table->data_viewport = data_viewport; + table->full_viewport = full_viewport; + table->vscrollbar = vscrollbar; + table->hscrollbar = hscrollbar; + + /* Create the header table */ + header_table = gtk_table_new(1, NUM_GLASSES_INFO_ATTRIBS, FALSE); + for ( i = 0; i < NUM_GLASSES_INFO_ATTRIBS; i++ ) { + GtkWidget * btn = gtk_button_new_with_label(goggle_info_titles[i]); + ctk_config_set_tooltip(ctk_config, btn, __goggle_info_tooltip); + gtk_table_attach(GTK_TABLE(header_table), btn, i, i+1, 0, 1, + GTK_FILL|GTK_EXPAND, GTK_FILL|GTK_EXPAND, 0, 0); + + table->glasses_header_sizes[i].widget = btn; + gtk_widget_size_request(btn, &req); + table->glasses_header_sizes[i].width = req.width; + } + + /* Create the data table */ + data_table = gtk_table_new(table->rows, table->columns, FALSE); + event = gtk_event_box_new(); + + gtk_widget_modify_fg(data_table, GTK_STATE_NORMAL, + &(data_table->style->text[GTK_STATE_NORMAL])); + gtk_widget_modify_bg(data_table, GTK_STATE_NORMAL, + &(data_table->style->base[GTK_STATE_NORMAL])); + gtk_container_add (GTK_CONTAINER(event), data_table); + gtk_widget_modify_fg(event, GTK_STATE_NORMAL, + &(event->style->text[GTK_STATE_NORMAL])); + gtk_widget_modify_bg(event, GTK_STATE_NORMAL, + &(event->style->base[GTK_STATE_NORMAL])); + gtk_container_add(GTK_CONTAINER(data_viewport), event); + + /* Pack the glasses info header and data tables */ + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), header_table, FALSE, FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), data_viewport, TRUE, TRUE, 0); + gtk_container_add (GTK_CONTAINER(full_viewport), vbox); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), full_viewport, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hscrollbar, FALSE, FALSE, 0); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), vscrollbar, FALSE, FALSE, 0); + + vbox = gtk_vbox_new(FALSE, 0); + gtk_box_pack_start(GTK_BOX(vbox), hbox1, FALSE, FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); + +// gtk_paned_pack1 (GTK_PANED (vpan), scrollWin, TRUE, FALSE); + gtk_paned_pack2 (GTK_PANED (vpan), vbox, TRUE, FALSE); + gtk_box_pack_start(GTK_BOX(pack_in), vpan, TRUE, TRUE, 0); + + /* Fill the data table */ + table->data_table = data_table; + update_glasses_info_data_table(table, glasses_info); +} + +static void add_menu_item(GtkWidget *menu, const char *caption) +{ + GtkWidget *menu_item; + GtkWidget *hbox; + GtkWidget *label; + + menu_item = gtk_menu_item_new(); + gtk_menu_shell_append(GTK_MENU_SHELL(menu), menu_item); + + hbox = gtk_hbox_new(FALSE, 0); + gtk_container_add(GTK_CONTAINER(menu_item), hbox); + + label = gtk_label_new(caption); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); +} + +static void init_glasses_info_widgets(GlassesInfo *glasses) +{ + int i; + + for (i = 0; i < NUM_GLASSES_INFO_ATTRIBS; i++) { + glasses->label[i] = NULL; + glasses->hbox[i] = NULL; + } + glasses->image = NULL; +} + +static void callback_glasses_paired(GtkObject *object, gpointer arg1, + gpointer user_data) +{ + int battery_level; + char *glasses_name = NULL; + int target_id = 0; + unsigned int glasses_id; + GlassesInfo *glasses; + Bool ret; + CtkEventStruct *event_struct; + char temp[64]; //scratchpad memory used to construct labels. + + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + AddGlassesDlg *dlg = ctk_3d_vision_pro->add_glasses_dlg; + event_struct = (CtkEventStruct *) arg1; + + glasses_id = event_struct->value; + ret = XNVCTRLQueryTargetStringAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + target_id, glasses_id, + NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME, + &glasses_name); + if (ret != TRUE) { + glasses_name = NULL; + } + + ret = XNVCTRLQueryTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + target_id, glasses_id, + NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL, + (int *)&battery_level); + if (ret != TRUE) { + battery_level = 0; + } + // Create glasses_info + glasses = (GlassesInfo *)malloc(sizeof(GlassesInfo)); + strncpy(glasses->name, glasses_name, sizeof(glasses->name));; + glasses->name[sizeof(glasses->name) - 1] = '\0'; + glasses->battery = battery_level; + glasses->glasses_id = glasses_id; + init_glasses_info_widgets(glasses); + + if (dlg) { + // add entry into local glasses_info structure. + dlg->new_glasses++; + + dlg->glasses_info = (GlassesInfo **)realloc(dlg->glasses_info, + sizeof(GlassesInfo *) * dlg->new_glasses); + + dlg->glasses_info[dlg->new_glasses - 1] = glasses; + + // update dialog boxes glasses info table + dlg->table.rows++; + update_glasses_info_data_table(&(dlg->table), dlg->glasses_info); + gtk_widget_show_all(GTK_WIDGET(dlg->table.data_table)); + } + + // Add glasses_info into HTU(0)->glasses_info list. + HTU(0)->glasses_info = realloc(HTU(0)->glasses_info, + (HTU(0)->num_glasses + 1) * sizeof(GlassesInfo *)); + + HTU(0)->glasses_info[HTU(0)->num_glasses] = glasses; + init_glasses_info_widgets(HTU(0)->glasses_info[HTU(0)->num_glasses]); + HTU(0)->num_glasses += 1; + + // update glasses info table + ctk_3d_vision_pro->table.rows += 1; + update_glasses_info_data_table(&(ctk_3d_vision_pro->table), HTU(0)->glasses_info); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->table.data_table)); + + snprintf(temp, sizeof(temp), "Glasses Connected: %d", HTU(0)->num_glasses); + gtk_label_set_text(ctk_3d_vision_pro->glasses_num_label, temp); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->glasses_num_label)); + + free(glasses_name); +} + +static void callback_glasses_unpaired(GtkObject *object, gpointer arg1, + gpointer user_data) +{ + int j; + unsigned int glasses_id = 0; + GlassesInfo *glasses = NULL; + char temp[64]; //scratchpad memory used to construct labels. + CtkEventStruct *event_struct; + int overwrite = FALSE; + + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + event_struct = (CtkEventStruct *) arg1; + + glasses_id = event_struct->value; + + for (j = 0; j < (HTU(0)->num_glasses); j++) { + if (!overwrite && HTU(0)->glasses_info[j]->glasses_id == glasses_id) { + if (j != HTU(0)->num_glasses - 1) { + overwrite = TRUE; + } + glasses = HTU(0)->glasses_info[j]; + } + if (overwrite && HTU(0)->num_glasses > 1) { + HTU(0)->glasses_info[j] = HTU(0)->glasses_info[j + 1]; + } + } + + HTU(0)->num_glasses--; + HTU(0)->glasses_info = (GlassesInfo **)realloc(HTU(0)->glasses_info, + sizeof(GlassesInfo *) * HTU(0)->num_glasses); + + gtk_widget_destroy (glasses->label[0]); + gtk_widget_destroy (glasses->label[1]); + gtk_widget_destroy (glasses->image); + gtk_widget_destroy (glasses->hbox[0]); + gtk_widget_destroy (glasses->hbox[1]); + + // update glasses info table + ctk_3d_vision_pro->table.rows--; + update_glasses_info_data_table(&(ctk_3d_vision_pro->table), HTU(0)->glasses_info); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->table.data_table)); + + snprintf(temp, sizeof(temp), "Glasses Connected: %d", HTU(0)->num_glasses); + gtk_label_set_text(ctk_3d_vision_pro->glasses_num_label, temp); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->glasses_num_label)); + + free(glasses); +} + +static gboolean poll_pairing(gpointer user_data) +{ + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + + if (ctk_3d_vision_pro->add_glasses_dlg->pairing_attempts > + PAIRING_DURATION / POLL_PAIRING_CYCLE) { + return FALSE; + } + + if (ctk_3d_vision_pro->add_glasses_dlg->in_pairing) { + + XNVCTRLSetTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, 0, + NV_CTRL_3D_VISION_PRO_PAIR_GLASSES, + PAIRING_TIMEOUT); // pairing on + XFlush(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle)); + } + + ctk_3d_vision_pro->add_glasses_dlg->in_pairing = + !(ctk_3d_vision_pro->add_glasses_dlg->in_pairing); + ctk_3d_vision_pro->add_glasses_dlg->pairing_attempts++; + return TRUE; +} + +static void enable_widgets(Ctk3DVisionPro *ctk_3d_vision_pro, Bool enable) +{ + gtk_widget_set_sensitive(ctk_3d_vision_pro->refresh_button, enable); + gtk_widget_set_sensitive(ctk_3d_vision_pro->identify_button, enable); + gtk_widget_set_sensitive(ctk_3d_vision_pro->rename_button, enable); + gtk_widget_set_sensitive(ctk_3d_vision_pro->remove_button, enable); + gtk_widget_set_sensitive(ctk_3d_vision_pro->table.data_viewport, enable); + gtk_widget_set_sensitive(ctk_3d_vision_pro->table.full_viewport, enable); + gtk_widget_set_sensitive(ctk_3d_vision_pro->table.vscrollbar, enable); + gtk_widget_set_sensitive(ctk_3d_vision_pro->table.hscrollbar, enable); +} + +static void svp_config_changed(GtkObject *object, gpointer arg1, + gpointer user_data) +{ + CtkEventStruct *event_struct; + Ctk3DVisionPro *ctk_3d_vision_pro; + char temp[64]; + + event_struct = (CtkEventStruct *) arg1; + ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + + switch (event_struct->attribute) { + case NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL: + if (HTU(0)->channel_num != event_struct->value) { + HTU(0)->channel_num = event_struct->value; + snprintf(temp, sizeof(temp), "Current Channel ID: %d", HTU(0)->channel_num); + gtk_label_set_text(ctk_3d_vision_pro->channel_num_label, temp); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->channel_num_label)); + } + break; + case NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE: + { + SVP_RANGE range; + range = gtk_option_menu_get_history(GTK_OPTION_MENU(ctk_3d_vision_pro->option_menu)); + + if (event_struct->value != SVP_INVALID_RANGE && range != event_struct->value) { + g_signal_handlers_block_by_func(ctk_3d_vision_pro->option_menu, + channel_range_changed, ctk_3d_vision_pro); + HTU(0)->channel_range = event_struct->value; + gtk_option_menu_set_history(GTK_OPTION_MENU(ctk_3d_vision_pro->option_menu), + event_struct->value); + enable_widgets(ctk_3d_vision_pro, + (HTU(0)->channel_range == SVP_LONG_RANGE ? FALSE : TRUE)); + g_signal_handlers_unblock_by_func(ctk_3d_vision_pro->option_menu, + channel_range_changed, ctk_3d_vision_pro); + } + break; + } + case NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY: + if (HTU(0)->signal_strength != event_struct->value) { + const char **signal_strength_icon; + GdkPixbuf *pixbuf; + + HTU(0)->signal_strength = event_struct->value; + snprintf(temp, sizeof(temp), "[%d%%]", HTU(0)->signal_strength); + gtk_label_set_text(ctk_3d_vision_pro->signal_strength_label, temp); + + signal_strength_icon = get_signal_strength_icon(HTU(0)->signal_strength); + pixbuf = gdk_pixbuf_new_from_xpm_data(signal_strength_icon); + gtk_image_set_from_pixbuf(GTK_IMAGE(ctk_3d_vision_pro->signal_strength_image), pixbuf); + + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->signal_strength_label)); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->signal_strength_image)); + } + break; + case NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME: + { + int i; + for (i = 0; i < HTU(0)->num_glasses; i++) { + int target_id = 0; + Bool ret; + char *glasses_name = NULL; + GlassesInfo *glasses = glasses = HTU(0)->glasses_info[i]; + + ret = XNVCTRLQueryTargetStringAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + target_id, glasses->glasses_id, + NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME, + &glasses_name); + + if (ret != TRUE || glasses_name == NULL) { + continue; + } + strncpy(glasses->name, glasses_name, sizeof(glasses->name)); + glasses->name[sizeof(glasses->name)-1] = '\0'; + free(glasses_name); + } + update_glasses_info_data_table(&(ctk_3d_vision_pro->table), HTU(0)->glasses_info); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->table.data_table)); + break; + } + default: + ; + } + +} + +/****************************************************************************** + * + * Create dialog boxes and Button click callbacks + * + ******************************************************************************/ + +static void refresh_button_clicked(GtkButton *button, gpointer user_data) +{ + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + int i; + char temp[64]; + const char **signal_strength_icon; + GdkPixbuf *pixbuf; + Bool ret; + + for (i = 0; i < HTU(0)->num_glasses; i++) { + int target_id = 0; + int battery_level; + GlassesInfo *glasses = glasses = HTU(0)->glasses_info[i]; + + ret = XNVCTRLQueryTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + target_id, glasses->glasses_id, + NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL, + (int *)&battery_level); + if (ret != TRUE) { + battery_level = 0; + } + + glasses->battery = battery_level; + } + update_glasses_info_data_table(&(ctk_3d_vision_pro->table), HTU(0)->glasses_info); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->table.data_table)); + + ret = XNVCTRLQueryTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, HTU(0)->channel_num, + NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY, + (int *)&(HTU(0)->signal_strength)); + if (ret != TRUE) { + HTU(0)->signal_strength = 0; + } + snprintf(temp, sizeof(temp), "[%d%%]", HTU(0)->signal_strength); + gtk_label_set_text(ctk_3d_vision_pro->signal_strength_label, temp); + + signal_strength_icon = get_signal_strength_icon(HTU(0)->signal_strength); + pixbuf = gdk_pixbuf_new_from_xpm_data(signal_strength_icon); + gtk_image_set_from_pixbuf(GTK_IMAGE(ctk_3d_vision_pro->signal_strength_image), pixbuf); + + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->signal_strength_label)); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->signal_strength_image)); +} + +//============================================================================= + +static AddGlassesDlg *create_add_glasses_dlg(Ctk3DVisionPro *ctk_3d_vision_pro) +{ + AddGlassesDlg *dlg; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *image; + GtkWidget *parent = GTK_WIDGET(ctk_3d_vision_pro); + + dlg = (AddGlassesDlg *)malloc(sizeof(AddGlassesDlg)); + if (dlg == NULL) { + return NULL; + } + + dlg->parent = parent; + dlg->new_glasses = 0; + dlg->glasses_info = NULL; + dlg->in_pairing = TRUE; + dlg->pairing_attempts = 0; + + /* Create the dialog */ + dlg->dlg_add_glasses = gtk_dialog_new_with_buttons + ("Add glasses", + ctk_3d_vision_pro->parent_wnd, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | + GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_SAVE, + GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + NULL); + + gtk_dialog_set_default_response(GTK_DIALOG(dlg->dlg_add_glasses), + GTK_RESPONSE_REJECT); + + label = gtk_label_new("1. Press button on the glasses\n" + " to initiate the connection."); + hbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 10); + + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_add_glasses)->vbox), + hbox, TRUE, TRUE, 5); + + hbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_add_glasses)->vbox), + hbox, TRUE, TRUE, 5); + + image = gtk_image_new_from_pixbuf(gdk_pixbuf_new_from_xpm_data( + svp_add_glasses_xpm)); + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg->dlg_add_glasses)->vbox), + image, FALSE, FALSE, 0); + + label = gtk_label_new("2. List of glasses connected:"); + hbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5); + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_add_glasses)->vbox), + hbox, TRUE, TRUE, 5); + + //generate menu option for glasses' name + hbox = gtk_hbox_new(TRUE, 0); + + // create glasses info table + dlg->table.rows = 0; + dlg->table.columns = NUM_GLASSES_INFO_ATTRIBS; + create_glasses_info_table(&(dlg->table), dlg->glasses_info, hbox, + ctk_3d_vision_pro->ctk_config); + + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_add_glasses)->vbox), + hbox, TRUE, TRUE, 5); + gtk_dialog_set_has_separator(GTK_DIALOG(dlg->dlg_add_glasses), TRUE); + + gtk_widget_show_all(GTK_DIALOG(dlg->dlg_add_glasses)->vbox); + + return dlg; +} + +static void add_glasses_button_clicked(GtkButton *button, gpointer user_data) +{ + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + AddGlassesDlg *dlg; + gint result; + int i; + char *s; + + dlg = create_add_glasses_dlg(ctk_3d_vision_pro); + if (dlg == NULL) { + return; + } + + ctk_3d_vision_pro->add_glasses_dlg = dlg; + + if (HTU(0)->channel_range == SVP_LONG_RANGE) { + gtk_widget_set_sensitive(dlg->table.data_viewport, FALSE); + gtk_widget_set_sensitive(dlg->table.full_viewport, FALSE); + gtk_widget_set_sensitive(dlg->table.vscrollbar, FALSE); + gtk_widget_set_sensitive(dlg->table.hscrollbar, FALSE); + } + + s = g_strdup_printf("NVIDIA 3D VisionPro Pairing"); + ctk_config_add_timer(ctk_3d_vision_pro->ctk_config, + POLL_PAIRING_TIMEOUT, + s, + (GSourceFunc) poll_pairing, + (gpointer)ctk_3d_vision_pro); + g_free(s); + + gtk_window_set_transient_for + (GTK_WINDOW(dlg->dlg_add_glasses), + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(dlg->parent)))); + + gtk_window_resize(GTK_WINDOW(dlg->dlg_add_glasses), 350, 1); + gtk_window_set_resizable(GTK_WINDOW(dlg->dlg_add_glasses), + FALSE); + + ctk_config_start_timer(ctk_3d_vision_pro->ctk_config, + (GSourceFunc) poll_pairing, + (gpointer) ctk_3d_vision_pro); + + gtk_widget_show(dlg->dlg_add_glasses); + result = gtk_dialog_run(GTK_DIALOG(dlg->dlg_add_glasses)); + gtk_widget_hide(dlg->dlg_add_glasses); + + ctk_config_stop_timer(ctk_3d_vision_pro->ctk_config, + (GSourceFunc) poll_pairing, + (gpointer)ctk_3d_vision_pro); + + /* Handle user's response */ + switch (result) { + case GTK_RESPONSE_ACCEPT: + break; + default: + for (i = 0; i < dlg->new_glasses; i++) { + XNVCTRLSetTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, 0, + NV_CTRL_3D_VISION_PRO_UNPAIR_GLASSES, + dlg->glasses_info[i]->glasses_id); + } + break; + } + + free(dlg->glasses_info); + free(dlg); + ctk_3d_vision_pro->add_glasses_dlg = NULL; +} + +//============================================================================= + +static RemoveGlassesDlg *create_remove_glasses_dlg(Ctk3DVisionPro *ctk_3d_vision_pro) +{ + RemoveGlassesDlg *dlg; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *parent = GTK_WIDGET(ctk_3d_vision_pro); + + dlg = (RemoveGlassesDlg *)malloc(sizeof(RemoveGlassesDlg)); + if (dlg == NULL) { + return NULL; + } + + dlg->parent = parent; + + /* Create the dialog */ + dlg->dlg_remove_glasses = gtk_dialog_new_with_buttons + ("Remove glasses", + ctk_3d_vision_pro->parent_wnd, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | + GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_OK, + GTK_RESPONSE_OK, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + NULL); + + gtk_dialog_set_default_response(GTK_DIALOG(dlg->dlg_remove_glasses), + GTK_RESPONSE_REJECT); + + label = gtk_label_new("Remove glasses synced to this hub:"); + hbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 20); + + //generate menu option for glasses' name + dlg->mnu_glasses_name = create_glasses_list_menu(ctk_3d_vision_pro, + HTU(0)->glasses_info, HTU(0)->num_glasses, + (gpointer)dlg); + gtk_box_pack_start(GTK_BOX(hbox), dlg->mnu_glasses_name, + TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_remove_glasses)->vbox), + hbox, TRUE, TRUE, 20); + + gtk_dialog_set_has_separator(GTK_DIALOG(dlg->dlg_remove_glasses), TRUE); + + gtk_widget_show_all(GTK_DIALOG(dlg->dlg_remove_glasses)->vbox); + + return dlg; +} + +static void remove_button_clicked(GtkButton *button, gpointer user_data) +{ + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + RemoveGlassesDlg *dlg; + gint result; + + dlg = create_remove_glasses_dlg(ctk_3d_vision_pro); + + if (dlg == NULL) { + return; + } + + dlg->glasses_selected_index = -1; + gtk_window_set_transient_for + (GTK_WINDOW(dlg->dlg_remove_glasses), + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(dlg->parent)))); + + gtk_window_resize(GTK_WINDOW(dlg->dlg_remove_glasses), 350, 1); + gtk_window_set_resizable(GTK_WINDOW(dlg->dlg_remove_glasses), + FALSE); + + gtk_widget_show(dlg->dlg_remove_glasses); + result = gtk_dialog_run(GTK_DIALOG(dlg->dlg_remove_glasses)); + gtk_widget_hide(dlg->dlg_remove_glasses); + + /* Handle user's response */ + switch (result) { + case GTK_RESPONSE_OK: + dlg->glasses_selected_index = gtk_option_menu_get_history(GTK_OPTION_MENU(dlg->mnu_glasses_name)); + + if (dlg->glasses_selected_index >= 0 && + dlg->glasses_selected_index < HTU(0)->num_glasses) { + unsigned int glasses_id = HTU(0)->glasses_info[dlg->glasses_selected_index]->glasses_id; + + XNVCTRLSetTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, 0, + NV_CTRL_3D_VISION_PRO_UNPAIR_GLASSES, + glasses_id); + } + break; + default: + /* do nothing. */ + break; + } + + free(dlg); +} + +//============================================================================= + +static IdentifyGlassesDlg *create_identify_glasses_dlg(Ctk3DVisionPro *ctk_3d_vision_pro) +{ + IdentifyGlassesDlg *dlg; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *parent = GTK_WIDGET(ctk_3d_vision_pro); + + dlg = (IdentifyGlassesDlg *)malloc(sizeof(IdentifyGlassesDlg)); + if (dlg == NULL) { + return NULL; + } + + dlg->parent = parent; + + /* Create the dialog */ + dlg->dlg_identify_glasses = gtk_dialog_new_with_buttons + ("Identify glasses", + ctk_3d_vision_pro->parent_wnd, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | + GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_OK, + GTK_RESPONSE_OK, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + NULL); + + gtk_dialog_set_default_response(GTK_DIALOG(dlg->dlg_identify_glasses), + GTK_RESPONSE_REJECT); + + label = gtk_label_new("Identify selected glasses:"); + hbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 20); + + /* Select glasses to identify */ + dlg->mnu_glasses_name = create_glasses_list_menu(ctk_3d_vision_pro, + HTU(0)->glasses_info, HTU(0)->num_glasses, + (gpointer)dlg); + gtk_box_pack_start(GTK_BOX(hbox), dlg->mnu_glasses_name, + TRUE, TRUE, 0); + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_identify_glasses)->vbox), + hbox, TRUE, TRUE, 20); + + gtk_dialog_set_has_separator(GTK_DIALOG(dlg->dlg_identify_glasses), TRUE); + + gtk_widget_show_all(GTK_DIALOG(dlg->dlg_identify_glasses)->vbox); + + return dlg; +} + +static void identify_button_clicked(GtkButton *button, gpointer user_data) +{ + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + IdentifyGlassesDlg *dlg; + gint result; + unsigned int glasses_id; + + dlg = create_identify_glasses_dlg(ctk_3d_vision_pro); + + if (dlg == NULL) { + return; + } + + dlg->glasses_selected_index = -1; + gtk_window_set_transient_for + (GTK_WINDOW(dlg->dlg_identify_glasses), + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(dlg->parent)))); + + gtk_window_resize(GTK_WINDOW(dlg->dlg_identify_glasses), 350, 1); + gtk_window_set_resizable(GTK_WINDOW(dlg->dlg_identify_glasses), + FALSE); + + gtk_widget_show(dlg->dlg_identify_glasses); + result = gtk_dialog_run(GTK_DIALOG(dlg->dlg_identify_glasses)); + gtk_widget_hide(dlg->dlg_identify_glasses); + + /* Handle user's response */ + switch (result) { + case GTK_RESPONSE_OK: + dlg->glasses_selected_index = gtk_option_menu_get_history(GTK_OPTION_MENU(dlg->mnu_glasses_name)); + + if (dlg->glasses_selected_index >= 0 && + dlg->glasses_selected_index < HTU(0)->num_glasses) { + glasses_id = HTU(0)->glasses_info[dlg->glasses_selected_index]->glasses_id; + + XNVCTRLSetTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, 0, + NV_CTRL_3D_VISION_PRO_IDENTIFY_GLASSES, + glasses_id); + } + break; + default: + /* do nothing. */ + break; + } + + free(dlg); +} + +//============================================================================= + +static RenameGlassesDlg *create_rename_glasses_dlg(Ctk3DVisionPro *ctk_3d_vision_pro) +{ + RenameGlassesDlg *dlg; + GtkWidget *label; + GtkWidget *hbox; + GtkWidget *new_glasses_name; + const char *__new_glasses_name_tooltip = "Add new glasses name"; + + GtkWidget *parent = GTK_WIDGET(ctk_3d_vision_pro); + dlg = (RenameGlassesDlg *)malloc(sizeof(RenameGlassesDlg)); + if (dlg == NULL) { + return NULL; + } + + dlg->parent = parent; + + /* Create the dialog */ + dlg->dlg_rename_glasses = gtk_dialog_new_with_buttons + ("Rename glasses", + ctk_3d_vision_pro->parent_wnd, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | + GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_SAVE, + GTK_RESPONSE_ACCEPT, + GTK_STOCK_CANCEL, + GTK_RESPONSE_REJECT, + NULL); + + gtk_dialog_set_default_response(GTK_DIALOG(dlg->dlg_rename_glasses), + GTK_RESPONSE_REJECT); + + + label = gtk_label_new("Name:"); + hbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 20); + + /* Select glasses to remove */ + dlg->mnu_glasses_name = create_glasses_list_menu(ctk_3d_vision_pro, + HTU(0)->glasses_info, HTU(0)->num_glasses, + (gpointer)dlg); + gtk_box_pack_start(GTK_BOX(hbox), dlg->mnu_glasses_name, + TRUE, TRUE, 0); + + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_rename_glasses)->vbox), + hbox, TRUE, TRUE, 20); + + new_glasses_name = gtk_entry_new(); + ctk_config_set_tooltip(ctk_3d_vision_pro->ctk_config, new_glasses_name, + __new_glasses_name_tooltip); + g_signal_connect(G_OBJECT(new_glasses_name), "activate", + G_CALLBACK(new_glasses_name_activate), + (gpointer) dlg); + g_signal_connect(G_OBJECT(new_glasses_name), "focus-out-event", + G_CALLBACK(new_glasses_name_focus_out), + (gpointer) dlg); + + gtk_box_pack_start(GTK_BOX(GTK_DIALOG(dlg->dlg_rename_glasses)->vbox), + new_glasses_name, TRUE, TRUE, 0); + + gtk_dialog_set_has_separator(GTK_DIALOG(dlg->dlg_rename_glasses), TRUE); + + gtk_widget_show_all(GTK_DIALOG(dlg->dlg_rename_glasses)->vbox); + + return dlg; +} + +static void rename_button_clicked(GtkButton *button, gpointer user_data) +{ + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + RenameGlassesDlg *dlg; + gint result; + + dlg = create_rename_glasses_dlg(ctk_3d_vision_pro); + + if (dlg == NULL) { + return; + } + + dlg->glasses_new_name = NULL; + + dlg->glasses_selected_index = -1; + gtk_window_set_transient_for + (GTK_WINDOW(dlg->dlg_rename_glasses), + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(dlg->parent)))); + + gtk_window_resize(GTK_WINDOW(dlg->dlg_rename_glasses), 350, 1); + gtk_window_set_resizable(GTK_WINDOW(dlg->dlg_rename_glasses), + FALSE); + + gtk_widget_show(dlg->dlg_rename_glasses); + + do { + result = gtk_dialog_run(GTK_DIALOG(dlg->dlg_rename_glasses)); + + if (result == GTK_RESPONSE_ACCEPT) { + int i; + dlg->glasses_selected_index = + gtk_option_menu_get_history(GTK_OPTION_MENU(dlg->mnu_glasses_name)); + + if (dlg->glasses_new_name == NULL || strlen(dlg->glasses_new_name) == 0) { + continue; + } + + for (i = 0; i < HTU(0)->num_glasses; i++) { + if (!strncmp(dlg->glasses_new_name, HTU(0)->glasses_info[i]->name, + sizeof(HTU(0)->glasses_info[i]->name))) { + break; + } + } + if (i == HTU(0)->num_glasses) { + goto new_unique_name_set; + } + } + + } while (result != GTK_RESPONSE_REJECT); + goto no_name_set; + +new_unique_name_set: + if (dlg->glasses_selected_index >= 0 && + dlg->glasses_selected_index < HTU(0)->num_glasses) { + unsigned int glasses_id = HTU(0)->glasses_info[dlg->glasses_selected_index]->glasses_id; + + XNVCTRLSetTargetStringAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, glasses_id, + NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME, + dlg->glasses_new_name); + + strncpy(HTU(0)->glasses_info[dlg->glasses_selected_index]->name, dlg->glasses_new_name, + sizeof(HTU(0)->glasses_info[dlg->glasses_selected_index]->name)); + HTU(0)->glasses_info[dlg->glasses_selected_index]->name[GLASSES_NAME_MAX_LENGTH - 1] = '\0'; + + update_glasses_info_data_table(&(ctk_3d_vision_pro->table), HTU(0)->glasses_info); + gtk_widget_show_all(GTK_WIDGET(ctk_3d_vision_pro->table.data_table)); + } +no_name_set: + + gtk_widget_hide(dlg->dlg_rename_glasses); + + free(dlg->glasses_new_name); + free(dlg); +} + +//============================================================================= + +static ChannelRangeDlg *create_channel_range_change_dlg(Ctk3DVisionPro *ctk_3d_vision_pro, + SVP_RANGE range) +{ + ChannelRangeDlg *dlg; + GtkWidget *label = NULL; + GtkWidget *hbox; + GtkWidget *parent = GTK_WIDGET(ctk_3d_vision_pro); + + dlg = (ChannelRangeDlg *)malloc(sizeof(ChannelRangeDlg)); + if (dlg == NULL) { + return NULL; + } + + dlg->parent = parent; + + /* Create the dialog */ + dlg->dlg_channel_range = gtk_dialog_new_with_buttons + ("Modify Hub Range", + ctk_3d_vision_pro->parent_wnd, + GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT | + GTK_DIALOG_NO_SEPARATOR, + GTK_STOCK_YES, + GTK_RESPONSE_YES, + GTK_STOCK_NO, + GTK_RESPONSE_NO, + NULL); + + gtk_dialog_set_default_response(GTK_DIALOG(dlg->dlg_channel_range), + GTK_RESPONSE_REJECT); + + switch (range) { + case SVP_SHORT_RANGE: + label = gtk_label_new("You have changed transceiver range to short range (less than 2m.).\n" + "Only glasses in this range will be available.\n\n" + "Do you want to apply changes?"); + break; + case SVP_MEDIUM_RANGE: + label = gtk_label_new("You have changed transceiver range to medium range (less than 10m.).\n" + "Only glasses in this range will be available.\n\n" + "Do you want to apply changes?"); + break; + case SVP_LONG_RANGE: + label = gtk_label_new("You have changed transceiver range to long range.\n" + "Only glasses in this range will be available.\n\n" + "Do you want to apply changes?"); + break; + case SVP_INVALID_RANGE: + label = gtk_label_new("Invalid selection.\n"); + break; + } + + hbox = gtk_hbox_new(TRUE, 0); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 20); + gtk_box_pack_start + (GTK_BOX(GTK_DIALOG(dlg->dlg_channel_range)->vbox), + hbox, TRUE, TRUE, 20); + + gtk_dialog_set_has_separator(GTK_DIALOG(dlg->dlg_channel_range), TRUE); + + gtk_widget_show_all(GTK_DIALOG(dlg->dlg_channel_range)->vbox); + + return dlg; +} + +static void channel_range_changed( + GtkOptionMenu *option_menu, + gpointer user_data +) +{ + Ctk3DVisionPro *ctk_3d_vision_pro = CTK_3D_VISION_PRO(user_data); + ChannelRangeDlg *dlg; + gint result; + SVP_RANGE range; + SVP_RANGE prev_range; + + range = gtk_option_menu_get_history(option_menu); + prev_range = HTU(0)->channel_range; + + if (HTU(0)->channel_range == range) { + return; + } + if (range == SVP_INVALID_RANGE) { + gtk_option_menu_set_history(GTK_OPTION_MENU(ctk_3d_vision_pro->option_menu), prev_range); + return; + } + + dlg = create_channel_range_change_dlg(ctk_3d_vision_pro, range); + + gtk_window_set_transient_for + (GTK_WINDOW(dlg->dlg_channel_range), + GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(dlg->parent)))); + + gtk_window_resize(GTK_WINDOW(dlg->dlg_channel_range), 350, 1); + gtk_window_set_resizable(GTK_WINDOW(dlg->dlg_channel_range), + FALSE); + + gtk_widget_show(dlg->dlg_channel_range); + result = gtk_dialog_run(GTK_DIALOG(dlg->dlg_channel_range)); + gtk_widget_hide(dlg->dlg_channel_range); + + /* Handle user's response */ + switch (result) { + case GTK_RESPONSE_YES: + HTU(0)->channel_range = range; + /* Send NV-Control command */ + XNVCTRLSetTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, 0, + NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE, + (HTU(0)->channel_range)); + + enable_widgets(ctk_3d_vision_pro, (HTU(0)->channel_range == SVP_LONG_RANGE ? FALSE : TRUE)); + + break; + case GTK_RESPONSE_NO: + gtk_option_menu_set_history(GTK_OPTION_MENU(ctk_3d_vision_pro->option_menu), prev_range); + break; + default: + /* do nothing. */ + break; + } + free(dlg); +} + +//***************************************************************************** + +GtkWidget* ctk_3d_vision_pro_new(NvCtrlAttributeHandle *handle, + CtkConfig *ctk_config, ParsedAttribute *p, + CtkEvent *ctk_event) +{ + GObject *object; + Ctk3DVisionPro *ctk_3d_vision_pro; + GtkWidget *mainhbox; + GtkWidget *leftvbox; + GtkWidget *rightvbox; + GtkWidget *banner; + GtkWidget *alignment; + GtkWidget *vbox; + GtkWidget *vbox1, *vbox2; + GtkWidget *frame_vbox; + GtkWidget *label; + GtkWidget *frame; + GtkWidget *hbox; + GtkWidget *hbox1; + GtkWidget *hseparator; + int i; + GtkWidget *image; + GtkWidget *menu; + char temp[64]; //scratchpad memory used to construct labels. + unsigned char *paired_glasses_list = NULL; + int len; + int target_id = 0; + Bool ret; + + object = g_object_new(CTK_TYPE_3D_VISION_PRO, NULL); + ctk_3d_vision_pro = CTK_3D_VISION_PRO(object); + + ctk_3d_vision_pro->handle = handle; + ctk_3d_vision_pro->ctk_config = ctk_config; + ctk_3d_vision_pro->add_glasses_dlg = NULL; + + // populate ctk_3d_vision_pro... + // query attributes and fill the data .. + ctk_3d_vision_pro->num_htu = 1; + ctk_3d_vision_pro->htu_info = (HtuInfo **) malloc(sizeof(HtuInfo *) * + ctk_3d_vision_pro->num_htu);; + for (i = 0; i < ctk_3d_vision_pro->num_htu; i++) { + HtuInfo *htu = (HtuInfo*) malloc(sizeof(HtuInfo)); + HTU(i) = htu; + } + + ret = XNVCTRLQueryTargetAttribute(NvCtrlGetDisplayPtr(handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, 0, + NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL, + (int *)&(HTU(0)->channel_num)); + if (ret != TRUE) { + HTU(0)->channel_num = 0; + } + + ret = XNVCTRLQueryTargetAttribute(NvCtrlGetDisplayPtr(handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, HTU(0)->channel_num, + NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY, + (int *)&(HTU(0)->signal_strength)); + if (ret != TRUE) { + HTU(0)->signal_strength = 0; + } + + ret = XNVCTRLQueryTargetAttribute(NvCtrlGetDisplayPtr(handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + 0, 0, + NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE, + (int *)&(HTU(0)->channel_range)); + if (ret != TRUE) { + HTU(0)->channel_range = SVP_INVALID_RANGE; + } + + // validate channel range + if (!(HTU(0)->channel_range == SVP_SHORT_RANGE || + HTU(0)->channel_range == SVP_MEDIUM_RANGE || + HTU(0)->channel_range == SVP_LONG_RANGE)) { + HTU(0)->channel_range = SVP_INVALID_RANGE; + } + + ret = XNVCTRLQueryTargetBinaryData(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + target_id, 0, + NV_CTRL_BINARY_DATA_GLASSES_PAIRED_TO_3D_VISION_PRO_TRANSCEIVER, + &paired_glasses_list, &len); + + if (ret != TRUE) { + HTU(0)->num_glasses = 0; + HTU(0)->glasses_info = NULL; + } else { + HTU(0)->num_glasses = ((unsigned int *)paired_glasses_list)[0]; + HTU(0)->glasses_info = (GlassesInfo **)malloc(sizeof(GlassesInfo *) * + HTU(0)->num_glasses); + } + + for (i = 0; i < HTU(0)->num_glasses; i++) { + int battery_level; + char *glasses_name; + GlassesInfo *glasses = (GlassesInfo *)malloc(sizeof(GlassesInfo)); + unsigned int glasses_id = ((unsigned int *)paired_glasses_list)[i+1]; + + HTU(0)->glasses_info[i] = glasses; + + ret = XNVCTRLQueryTargetStringAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + target_id, glasses_id, + NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME, + &glasses_name); + if (ret != TRUE) { + glasses_name = NULL; + } + + ret = XNVCTRLQueryTargetAttribute(NvCtrlGetDisplayPtr(ctk_3d_vision_pro->handle), + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, + target_id, glasses_id, + NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL, + (int *)&battery_level); + if (ret != TRUE) { + battery_level = 0; + } + + strncpy(glasses->name, glasses_name, sizeof(glasses->name)); + glasses->name[sizeof(glasses->name) - 1] = '\0'; + glasses->battery = battery_level; + glasses->glasses_id = glasses_id; + init_glasses_info_widgets(glasses); + free(glasses_name); + } + +//----------------------------------------------------------------------------- +// Construct and display NVIDIA 3D VisionPro page + + gtk_box_set_spacing(GTK_BOX(ctk_3d_vision_pro), 5); + + /* + * Banner: TOP - LEFT -> RIGHT + * + * This image serves as a visual reference for basic color_box correction + * purposes. + */ + + banner = ctk_banner_image_new(BANNER_ARTWORK_SVP); + gtk_box_pack_start(GTK_BOX(ctk_3d_vision_pro), banner, FALSE, FALSE, 0); + + mainhbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(ctk_3d_vision_pro), mainhbox, + FALSE, FALSE, 0); + +//----------------------------------------------------------------------------- +// left vertical box + + leftvbox = gtk_vbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(mainhbox), leftvbox, FALSE, FALSE, 0); + + frame = gtk_frame_new("Glasses"); + gtk_box_pack_start(GTK_BOX(leftvbox), frame, FALSE, FALSE, 0); + + + frame_vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(frame_vbox), 5); + gtk_container_add(GTK_CONTAINER(frame), frame_vbox); + alignment = gtk_alignment_new(0, 1, 0, 0); + gtk_box_pack_start(GTK_BOX(frame_vbox), alignment, TRUE, TRUE, 0); + + snprintf(temp, sizeof(temp), "Glasses Connected: %d", HTU(0)->num_glasses); + label = gtk_label_new(temp); + gtk_container_add(GTK_CONTAINER(alignment), label); + ctk_3d_vision_pro->glasses_num_label = GTK_LABEL(label); + + + hbox = gtk_hbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(hbox), 5); + alignment = gtk_alignment_new(0, 1, 0, 0); + gtk_box_pack_start(GTK_BOX(frame_vbox), alignment, TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(alignment), hbox); + + add_button("Add Glasses", add_glasses_button_clicked, ctk_3d_vision_pro, + hbox, __add_glasses_tooltip); + ctk_3d_vision_pro->refresh_button = + add_button("Refresh", refresh_button_clicked, ctk_3d_vision_pro, + hbox, __refresh_tooltip); + ctk_3d_vision_pro->identify_button = + add_button("Identify", identify_button_clicked, ctk_3d_vision_pro, + hbox, __identify_tooltip); + ctk_3d_vision_pro->rename_button = + add_button("Rename", rename_button_clicked, ctk_3d_vision_pro, + hbox, __rename_tooltip); + ctk_3d_vision_pro->remove_button = + add_button("Remove", remove_button_clicked, ctk_3d_vision_pro, + hbox, __remove_glasses_tooltip); + + ctk_3d_vision_pro->table.rows = HTU(0)->num_glasses; + ctk_3d_vision_pro->table.columns = NUM_GLASSES_INFO_ATTRIBS; + create_glasses_info_table(&(ctk_3d_vision_pro->table), HTU(0)->glasses_info, + frame_vbox, ctk_3d_vision_pro->ctk_config); + +//----------------------------------------------------------------------------- +// right vertical box + + rightvbox = gtk_vbox_new(FALSE, 10); + gtk_box_pack_start(GTK_BOX(mainhbox), rightvbox, FALSE, FALSE, 0); + + frame = gtk_frame_new("RF Hub"); + gtk_box_pack_start(GTK_BOX(rightvbox), frame, FALSE, FALSE, 0); + + vbox = gtk_vbox_new(FALSE, 5); + gtk_container_set_border_width(GTK_CONTAINER(vbox), 5); + gtk_container_add(GTK_CONTAINER(frame), vbox); + + hbox = gtk_hbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + vbox1 = gtk_vbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(hbox), vbox1, FALSE, FALSE, 0); + vbox2 = gtk_vbox_new(FALSE, 5); + gtk_box_pack_start(GTK_BOX(hbox), vbox2, FALSE, FALSE, 0); + + snprintf(temp, sizeof(temp), "RF Hubs Connected:"); + label = add_label(temp, vbox1); + + hbox1 = gtk_hbox_new(FALSE, 5); + snprintf(temp, sizeof(temp), "Signal Strength:"); + label = add_label(temp, hbox1); + gtk_box_pack_start(GTK_BOX(vbox1), hbox1, FALSE, FALSE, 0); + + snprintf(temp, sizeof(temp), "%d", ctk_3d_vision_pro->num_htu); + hbox1 = gtk_hbox_new(FALSE, 5); + label = add_label(temp, hbox1); + gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 0); + + hbox1 = gtk_hbox_new(FALSE, 5); + snprintf(temp, sizeof(temp), "[%d%%]", HTU(0)->signal_strength); + image = gtk_image_new_from_pixbuf(gdk_pixbuf_new_from_xpm_data( + get_signal_strength_icon(HTU(0)->signal_strength))); + gtk_box_pack_start(GTK_BOX(hbox1), image, FALSE, FALSE, 0); + label = add_label(temp, hbox1); + ctk_3d_vision_pro->signal_strength_label = GTK_LABEL(label); + ctk_3d_vision_pro->signal_strength_image = image; + gtk_box_pack_start(GTK_BOX(vbox2), hbox1, FALSE, FALSE, 0); + + snprintf(temp, sizeof(temp), "Current Channel ID:"); + label = add_label(temp, vbox1); + + snprintf(temp, sizeof(temp), "%d", HTU(0)->channel_num); + label = add_label(temp, vbox2); + ctk_3d_vision_pro->channel_num_label = GTK_LABEL(label); + + hseparator = gtk_hseparator_new(); + gtk_box_pack_start(GTK_BOX(vbox), hseparator, FALSE, FALSE, 0); + + hbox = gtk_hbox_new(FALSE, 5); + label = add_label("Hub Range:", hbox); + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + hbox = gtk_hbox_new(FALSE, 5); + menu = gtk_menu_new(); + add_menu_item(menu, "Invalid Range"); + add_menu_item(menu, "Short Range (up to 2 meter)"); + add_menu_item(menu, "Medium Range (up to 10 meter)"); + add_menu_item(menu, "Long Range"); + ctk_3d_vision_pro->option_menu = gtk_option_menu_new (); + gtk_option_menu_set_menu + (GTK_OPTION_MENU(ctk_3d_vision_pro->option_menu), menu); + + alignment = gtk_alignment_new(0, 1, 0, 0); + gtk_box_pack_start(GTK_BOX(hbox), alignment, TRUE, TRUE, 0); + gtk_container_add(GTK_CONTAINER(alignment), ctk_3d_vision_pro->option_menu); + + gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 0); + + g_object_set_data(G_OBJECT(ctk_3d_vision_pro->option_menu), + "channel_range", GINT_TO_POINTER(0)); + + gtk_option_menu_set_history(GTK_OPTION_MENU(ctk_3d_vision_pro->option_menu), + HTU(0)->channel_range); + g_signal_connect(G_OBJECT(ctk_3d_vision_pro->option_menu), "changed", + G_CALLBACK(channel_range_changed), + (gpointer) ctk_3d_vision_pro); + enable_widgets(ctk_3d_vision_pro, (HTU(0)->channel_range == SVP_LONG_RANGE ? FALSE : TRUE)); + + ctk_config_set_tooltip(ctk_config, ctk_3d_vision_pro->option_menu, + __channel_range_tooltip); + + ctk_3d_vision_pro->parent_wnd = GTK_WINDOW(gtk_widget_get_parent(GTK_WIDGET(ctk_3d_vision_pro))); + + /* finally, show the widget */ + gtk_widget_show_all(GTK_WIDGET(object)); + + g_signal_connect(G_OBJECT(ctk_event), + CTK_EVENT_NAME(NV_CTRL_3D_VISION_PRO_GLASSES_PAIR_EVENT), + G_CALLBACK(callback_glasses_paired), + (gpointer) ctk_3d_vision_pro); + + g_signal_connect(G_OBJECT(ctk_event), + CTK_EVENT_NAME(NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT), + G_CALLBACK(callback_glasses_unpaired), + (gpointer) ctk_3d_vision_pro); + + g_signal_connect(G_OBJECT(ctk_event), + CTK_EVENT_NAME(NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL), + G_CALLBACK(svp_config_changed), + (gpointer) ctk_3d_vision_pro); + + + g_signal_connect(G_OBJECT(ctk_event), + CTK_EVENT_NAME(NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE), + G_CALLBACK(svp_config_changed), + (gpointer) ctk_3d_vision_pro); + + g_signal_connect(G_OBJECT(ctk_event), + CTK_EVENT_NAME(NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY), + G_CALLBACK(svp_config_changed), + (gpointer) ctk_3d_vision_pro); + + g_signal_connect(G_OBJECT(ctk_event), + CTK_EVENT_NAME(NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME), + G_CALLBACK(svp_config_changed), + (gpointer) ctk_3d_vision_pro); + + return GTK_WIDGET(object); +} + + +GtkTextBuffer *ctk_3d_vision_pro_create_help(GtkTextTagTable *table) +{ + GtkTextIter i; + GtkTextBuffer *b; + + b = gtk_text_buffer_new(table); + gtk_text_buffer_get_iter_at_offset(b, &i, 0); + + ctk_help_title(b, &i, "NVIDIA® 3D VisionPro™ help"); + ctk_help_para(b, &i, "Use this page to configure the NVIDIA® 3D VisionPro™ hub " + "and glasses. You can set up new glasses, change the " + "hub's range, view which glasses are synchronized with " + "the hub, and select a different channel to improve the " + "hub-to-glasses signal strength."); + + ctk_help_para(b, &i, "NVIDIA® 3D Vision™ Pro is the professional version " + "of the 3D Vision™ stereo glasses and emitter. While " + "the 3D Vision kit uses infrared (IR) communication " + "from the emitter to the stereo glasses, the 3D Vision " + "Pro kit uses radio frequency (RF) bi-directional " + "communication between the emitter and the stereo " + "glasses. This allows multiple 3D Vision Pro hubs to " + "be used in the same area without conflicts."); + + ctk_help_para(b, &i, "3D Vision Pro does not require line of sight between " + "the hub and the 3D Vision Pro glasses. This provides " + "more flexibility in the location, distance, and " + "position of the glasses with respect to the emitter."); + + + ctk_help_heading(b, &i, "Glasses Section"); + ctk_help_para(b, &i, "This section contains various actions/configurations " + "that can be performed with the NVIDIA 3D VisionPro RF " + "glasses. This section also displays a list of glasses " + "synced to the hub and their battery levels."); + + ctk_help_heading(b, &i, "Glasses Connected"); + ctk_help_para(b, &i, "Shows how many glasses are connected and synchronized " + "with the hub."); + + ctk_help_heading(b, &i, "Add glasses"); + ctk_help_para(b, &i, __add_glasses_tooltip); + ctk_help_para(b, &i, "This action is used to set up new 3D Vision Pro Glasses. " + "On clicking this button the hub enters into pairing mode. " + "Follow the instructions on Add Glasses dialog box. " + "On pairing the new glasses, they appear in the glasses " + "information table. Choose 'Save' to save the newly paired " + " glasses or 'Cancel' if do not wish to store them."); + + ctk_help_heading(b, &i, "Refresh Glasses' Information"); + ctk_help_para(b, &i, __refresh_tooltip); + ctk_help_para(b, &i, "Refresh glasses information is typically required when- \n" + "o Glasses move in and out of the range.\n" + "o Get the updated battery level of all the glasses."); + + ctk_help_heading(b, &i, "Identify glasses"); + ctk_help_para(b, &i, "Select the glasses from the list of paired glasses that " + "you want to identify. Hub will communicate with the " + "selected glasses and make LED on the glasses blink " + "for a few seconds."); + + ctk_help_heading(b, &i, "Rename glasses"); + ctk_help_para(b, &i, __rename_tooltip); + ctk_help_para(b, &i, "Select the glasses from the list of paired glasses " + "that you want to rename and provide an unique new name."); + + ctk_help_heading(b, &i, "Remove glasses"); + ctk_help_para(b, &i, __remove_glasses_tooltip); + ctk_help_para(b, &i, "Select the glasses from the list of paired glasses " + "that you want to remove. On removal glasses get " + "unpaired and will not sync to the hub."); + + ctk_help_heading(b, &i, "Glasses Information"); + ctk_help_para(b, &i, __goggle_info_tooltip); + + ctk_help_heading(b, &i, "Glasses Name"); + ctk_help_para(b, &i, "Each pair of glasses has an unique name. " + "Glasses can be renamed using Rename button."); + + ctk_help_heading(b, &i, "Battery Level"); + ctk_help_para(b, &i, "Displays battery level icon along with the value in " + "percentage."); + + ctk_help_heading(b, &i, "RF Hub section"); + ctk_help_para(b, &i, "This section contains various actions that can be " + "performed on the NVIDIA® 3D VisionPro™ hub. This " + "section also displays signal strength of the channel " + "currently used and current channel ID."); + + ctk_help_heading(b, &i, "Signal strength"); + ctk_help_para(b, &i, "Shows the signal strength of the current hub channel as an icon " + "and also value in percentage. \n" + "Signal strength is from one of the six ranges below-\n" + "\tExcellent\t\t [100%]\n" + "\tVery Good\t [>75% - <100%]\n" + "\tGood \t\t [>50% - <75%]\n" + "\tLow \t\t [>25% - <50%]\n" + "\tVery Low \t\t [>0% - <25%]\n" + "\tNo Signal\t\t [0%]"); + + ctk_help_heading(b, &i, "Hub Range"); + ctk_help_para(b, &i, __channel_range_tooltip); + ctk_help_para(b, &i, "The hub range is the farthest distance that the " + "glasses can synchronize with the 3D Vision Pro Hub. " + "You can reduce the hub range to limit the experience " + "to a small group, or increase the range to include " + "everyone in a large room.\n" + "Possible values for transeiver range are 'Short Range' " + "'Medium Range' and 'Long Range'."); + ctk_help_para(b, &i, "Short Range: \n" + "Allows glasses within a 2-meter (6.5-foot) range to " + "be synced with the hub. This range is typically used " + "for sharing 3D simulations and training information " + "on a local workstation."); + ctk_help_para(b, &i, "Medium Range: \n" + "Allows glasses within a 10-meter (32-foot) range to " + "be synced with the hub. This range is typically used " + "for sharing a presentation with a limited audience. or " + "interacting with 3D CAD models during a collaborative " + "design session."); + ctk_help_para(b, &i, "Long Range: \n" + "All glasses detected within the range and frequency of " + "the hub will be synced. This range is typically used " + "in a theater or visualization center."); + + ctk_help_finish(b); + + return b; +} + +/* ctk_3d_vision_pro_select() ******************************************* + * + * Callback function for when the 3D Vision Pro page is being displayed + * in the control panel. + * + */ +void ctk_3d_vision_pro_select(GtkWidget *w) +{ + +} + +/* ctk_3d_vision_pro_unselect() ***************************************** + * + * Callback function for when the 3D VisionPro page is no longer being + * displayed by the control panel. (User clicked on another page.) + * + */ +void ctk_3d_vision_pro_unselect(GtkWidget *w) +{ + +} + +/* ctk_3d_vision_pro_config_file_attributes() **************************** + * + * Add to the ParsedAttribute list any attributes that we want saved + * in the config file. + * + */ +void ctk_3d_vision_pro_config_file_attributes(GtkWidget *w, + ParsedAttribute *head) +{ + +} + diff --git a/src/gtk+-2.x/ctk3dvisionpro.h b/src/gtk+-2.x/ctk3dvisionpro.h new file mode 100644 index 0000000..ecf932d --- /dev/null +++ b/src/gtk+-2.x/ctk3dvisionpro.h @@ -0,0 +1,155 @@ +/* + * nvidia-settings: A tool for configuring the NVIDIA X driver on Unix + * and Linux systems. + * + * Copyright (C) 2010 NVIDIA Corporation. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of Version 2 of the GNU General Public + * License as published by the Free Software Foundation. + * + * 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 Version 2 + * of 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. + * 59 Temple Place - Suite 330 + * Boston, MA 02111-1307, USA + * + */ + +#ifndef __CTK_3D_VISION_PRO_H__ +#define __CTK_3D_VISION_PRO_H__ + +#include "parse.h" +#include "ctkevent.h" +#include "ctkconfig.h" + +#define NUM_GLASSES_INFO_ATTRIBS 2 +#define GLASSES_NAME_MAX_LENGTH 128 + +G_BEGIN_DECLS + +#define CTK_TYPE_3D_VISION_PRO (ctk_3d_vision_pro_get_type()) + +#define CTK_3D_VISION_PRO(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj), CTK_TYPE_3D_VISION_PRO, \ + Ctk3DVisionPro)) + +#define CTK_3D_VISION_PRO_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass), CTK_TYPE_3D_VISION_PRO, \ + Ctk3DVisionProClass)) + +#define CTK_IS_3D_VISION_PRO(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj), CTK_TYPE_3D_VISION_PRO)) + +#define CTK_IS_3D_VISION_PRO_CLASS(class) \ + (G_TYPE_CHECK_CLASS_TYPE((klass), CTK_TYPE_3D_VISION_PRO)) + +#define CTK_3D_VISION_PRO_GET_CLASS(obj) \ + (G_TYPE_INSTANCE_GET_CLASS((obj), CTK_TYPE_3D_VISION_PRO, \ + Ctk3DVisionProClass)) + +typedef struct _Ctk3DVisionPro Ctk3DVisionPro; + +typedef struct _Ctk3DVisionProClass Ctk3DVisionProClass; + +typedef enum { + SVP_INVALID_RANGE = 0, + SVP_SHORT_RANGE, + SVP_MEDIUM_RANGE, + SVP_LONG_RANGE +} SVP_RANGE; + +typedef struct GlassesInfoRec { + unsigned int glasses_id; + char name[GLASSES_NAME_MAX_LENGTH]; + int battery; + GtkWidget *label[NUM_GLASSES_INFO_ATTRIBS]; + GtkWidget *hbox[NUM_GLASSES_INFO_ATTRIBS]; + GtkWidget *image; +} GlassesInfo; + +typedef struct HtuInfoRec { + SVP_RANGE channel_range; + int channel_num; + int signal_strength; + guint num_glasses; + GlassesInfo** glasses_info; + struct HtuInfoRec *next; +} HtuInfo; + +typedef struct WidgetSizeRec { + GtkWidget *widget; + int width; +} WidgetSize; + +typedef struct GlassesInfoTableRec { + WidgetSize glasses_header_sizes[NUM_GLASSES_INFO_ATTRIBS]; + GtkWidget *data_table; + GtkWidget *data_viewport, *full_viewport; + GtkWidget *vscrollbar, *hscrollbar; + int rows; + int columns; +} GlassesInfoTable; + + +typedef struct _AddGlassesDlg { + GtkWidget *parent; + GtkWidget *dlg_add_glasses; + GlassesInfo** glasses_info; + GlassesInfoTable table; + int new_glasses; + Bool in_pairing; + int pairing_attempts; +} AddGlassesDlg; + +struct _Ctk3DVisionPro +{ + GtkVBox parent; + NvCtrlAttributeHandle *handle; + GtkWindow *parent_wnd; + CtkConfig *ctk_config; + GtkWidget *option_menu; + guint num_htu; + HtuInfo** htu_info; + + GlassesInfoTable table; + + GtkLabel *glasses_num_label; + GtkWidget *identify_button; + GtkWidget *refresh_button; + GtkWidget *rename_button; + GtkWidget *remove_button; + GtkLabel *channel_num_label; + GtkLabel *signal_strength_label; + GtkWidget *signal_strength_image; + + AddGlassesDlg *add_glasses_dlg; +}; + +struct _Ctk3DVisionProClass +{ + GtkVBoxClass parent_class; + void (*changed) (Ctk3DVisionPro *); +}; + +GType ctk_3d_vision_pro_get_type (void) G_GNUC_CONST; +GtkWidget* ctk_3d_vision_pro_new (NvCtrlAttributeHandle *, + CtkConfig *, ParsedAttribute *, + CtkEvent *); +GtkTextBuffer *ctk_3d_vision_pro_create_help (GtkTextTagTable *); +void ctk_3d_vision_pro_select (GtkWidget *w); +void ctk_3d_vision_pro_unselect (GtkWidget *w); + +void ctk_3d_vision_pro_config_file_attributes(GtkWidget *w, + ParsedAttribute *head); + +G_END_DECLS + +#endif /* __CTK_3D_VISION_PRO_H__ */ + diff --git a/src/gtk+-2.x/ctkbanner.c b/src/gtk+-2.x/ctkbanner.c index ab0199c..2cd1f3e 100644 --- a/src/gtk+-2.x/ctkbanner.c +++ b/src/gtk+-2.x/ctkbanner.c @@ -63,7 +63,7 @@ #include "vcs_pixdata.h" #include "x_pixdata.h" #include "xvideo_pixdata.h" - +#include "svp_3dvp_pixdata.h" static void @@ -379,6 +379,7 @@ static gboolean select_artwork(BannerArtworkType artwork, { BANNER_ARTWORK_VCS, FALSE, 16, &vcs_pixdata }, { BANNER_ARTWORK_X, FALSE, 16, &x_pixdata }, { BANNER_ARTWORK_XVIDEO, FALSE, 16, &xvideo_pixdata }, + { BANNER_ARTWORK_SVP, FALSE, 16, &svp_3dvp_pixdata }, { BANNER_ARTWORK_INVALID, FALSE, 16, NULL }, }; diff --git a/src/gtk+-2.x/ctkbanner.h b/src/gtk+-2.x/ctkbanner.h index ad4d493..61b9590 100644 --- a/src/gtk+-2.x/ctkbanner.h +++ b/src/gtk+-2.x/ctkbanner.h @@ -75,6 +75,7 @@ typedef enum { BANNER_ARTWORK_VCS, BANNER_ARTWORK_X, BANNER_ARTWORK_XVIDEO, + BANNER_ARTWORK_SVP, BANNER_ARTWORK_INVALID } BannerArtworkType; diff --git a/src/gtk+-2.x/ctkevent.c b/src/gtk+-2.x/ctkevent.c index 66f243c..c1d6841 100644 --- a/src/gtk+-2.x/ctkevent.c +++ b/src/gtk+-2.x/ctkevent.c @@ -316,8 +316,13 @@ static void ctk_event_class_init(CtkEventClass *ctk_event_class) MAKE_SIGNAL(NV_CTRL_GPU_CURRENT_PROCESSOR_CLOCK_FREQS); MAKE_SIGNAL(NV_CTRL_GVIO_VIDEO_FORMAT_FLAGS); MAKE_SIGNAL(NV_CTRL_GPU_PCIE_MAX_LINK_SPEED); + MAKE_SIGNAL(NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL); + MAKE_SIGNAL(NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE); + MAKE_SIGNAL(NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY); + MAKE_SIGNAL(NV_CTRL_3D_VISION_PRO_GLASSES_MISSED_SYNC_CYCLES); MAKE_SIGNAL(NV_CTRL_GVO_ANC_PARITY_COMPUTATION); - + MAKE_SIGNAL(NV_CTRL_3D_VISION_PRO_GLASSES_PAIR_EVENT); + MAKE_SIGNAL(NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT); #undef MAKE_SIGNAL /* @@ -327,7 +332,7 @@ static void ctk_event_class_init(CtkEventClass *ctk_event_class) * knows about. */ -#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GVO_ANC_PARITY_COMPUTATION +#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT #warning "There are attributes that do not emit signals!" #endif @@ -370,9 +375,10 @@ static void ctk_event_class_init(CtkEventClass *ctk_event_class) MAKE_STRING_SIGNAL(NV_CTRL_STRING_PERFORMANCE_MODES); MAKE_STRING_SIGNAL(NV_CTRL_STRING_GVIO_VIDEO_FORMAT_NAME); MAKE_STRING_SIGNAL(NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS); + MAKE_STRING_SIGNAL(NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME); #undef MAKE_STRING_SIGNAL -#if NV_CTRL_STRING_LAST_ATTRIBUTE != NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS +#if NV_CTRL_STRING_LAST_ATTRIBUTE != NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME #warning "There are attributes that do not emit signals!" #endif @@ -401,7 +407,7 @@ static void ctk_event_class_init(CtkEventClass *ctk_event_class) #undef MAKE_BINARY_SIGNAL -#if NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE != NV_CTRL_BINARY_DATA_THERMAL_SENSORS_USED_BY_GPU +#if NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE != NV_CTRL_BINARY_DATA_GLASSES_PAIRED_TO_3D_VISION_PRO_TRANSCEIVER #warning "There are attributes that do not emit signals!" #endif diff --git a/src/gtk+-2.x/ctkscreen.c b/src/gtk+-2.x/ctkscreen.c index 2d3f764..2fdf384 100644 --- a/src/gtk+-2.x/ctkscreen.c +++ b/src/gtk+-2.x/ctkscreen.c @@ -51,6 +51,7 @@ static const _CtkStereoMode stereoMode[] = { { NV_CTRL_STEREO_CHECKERBOARD_PATTERN, "Checkerboard Pattern Stereo" }, { NV_CTRL_STEREO_INVERSE_CHECKERBOARD_PATTERN, "Inverse Checkerboard Stereo" }, { NV_CTRL_STEREO_3D_VISION, "NVIDIA 3D Vision Stereo" }, + { NV_CTRL_STEREO_3D_VISION_PRO, "NVIDIA 3D Vision Pro Stereo" }, { -1, NULL}, }; diff --git a/src/gtk+-2.x/ctkwindow.c b/src/gtk+-2.x/ctkwindow.c index 11daaa2..f638326 100644 --- a/src/gtk+-2.x/ctkwindow.c +++ b/src/gtk+-2.x/ctkwindow.c @@ -59,6 +59,7 @@ #include "ctkclocks.h" #include "ctkvcs.h" #include "ctkpowersavings.h" +#include "ctk3dvisionpro.h" #include "ctkdisplaydevice-crt.h" #include "ctkdisplaydevice-tv.h" @@ -988,6 +989,29 @@ GtkWidget *ctk_window_new(ParsedAttribute *p, ConfigProperties *conf, break; } + /* add NVIDIA 3D VisionPro dongle configuration page */ + + for (i = 0; i < h->targets[NVIDIA_3D_VISION_PRO_TRANSCEIVER_TARGET].n; i++) { + NvCtrlAttributeHandle *svp_handle = h->targets[NVIDIA_3D_VISION_PRO_TRANSCEIVER_TARGET].t[i].h; + + if (!svp_handle) continue; + + /* create the object for receiving NV-CONTROL events */ + + ctk_event = CTK_EVENT(ctk_event_new(svp_handle)); + + widget = ctk_3d_vision_pro_new(svp_handle, ctk_config, + ctk_window->attribute_list, + ctk_event); + if (!widget) continue; + + help = ctk_3d_vision_pro_create_help(tag_table); + add_page(widget, help, ctk_window, NULL, NULL, + "NVIDIA 3D VisionPro", ctk_3d_vision_pro_config_file_attributes, + ctk_3d_vision_pro_select, ctk_3d_vision_pro_unselect); + } + + /* nvidia-settings configuration */ add_page(GTK_WIDGET(ctk_window->ctk_config), diff --git a/src/gtk+-2.x/src.mk b/src/gtk+-2.x/src.mk index 4b7ad45..1ba1b5d 100644 --- a/src/gtk+-2.x/src.mk +++ b/src/gtk+-2.x/src.mk @@ -47,6 +47,7 @@ GTK_SRC += ctkgvi.c GTK_SRC += ctklicense.c GTK_SRC += ctkecc.c GTK_SRC += ctkcolorcontrols.c +GTK_SRC += ctk3dvisionpro.c GTK_EXTRA_DIST += ctkxvideo.h GTK_EXTRA_DIST += ctkcursorshadow.h @@ -94,4 +95,5 @@ GTK_EXTRA_DIST += ctkgvi.h GTK_EXTRA_DIST += ctklicense.h GTK_EXTRA_DIST += ctkecc.h GTK_EXTRA_DIST += ctkcolorcontrols.h +GTK_EXTRA_DIST += ctk3dvisionpro.h GTK_EXTRA_DIST += src.mk diff --git a/src/image_data/src.mk b/src/image_data/src.mk index 6cef856..52c10e1 100644 --- a/src/image_data/src.mk +++ b/src/image_data/src.mk @@ -85,6 +85,8 @@ IMAGE_DATA_EXTRA_DIST += slimm_pixdata.h IMAGE_DATA_EXTRA_DIST += solaris.png IMAGE_DATA_EXTRA_DIST += solaris_pixdata.h IMAGE_DATA_EXTRA_DIST += src.mk +IMAGE_DATA_EXTRA_DIST += svp_3dvp.png +IMAGE_DATA_EXTRA_DIST += svp_3dvp_pixdata.h IMAGE_DATA_EXTRA_DIST += thermal.png IMAGE_DATA_EXTRA_DIST += thermal_pixdata.h IMAGE_DATA_EXTRA_DIST += tv.png diff --git a/src/image_data/svp_3dvp.png b/src/image_data/svp_3dvp.png Binary files differnew file mode 100644 index 0000000..f21a16c --- /dev/null +++ b/src/image_data/svp_3dvp.png diff --git a/src/image_data/svp_3dvp_pixdata.h b/src/image_data/svp_3dvp_pixdata.h new file mode 100644 index 0000000..a910414 --- /dev/null +++ b/src/image_data/svp_3dvp_pixdata.h @@ -0,0 +1,519 @@ +/* GdkPixbuf RGBA C-Source image dump 1-byte-run-length-encoded */ + +static guint8 svp_3dvp_pixdata_pixel_data[] = { + 0xe6,0x00,0x00,0x00,0x00,0x0b,0x80,0xe9,0x06,0x04,0x82,0xe9,0x06,0x0c,0x83, + 0xe9,0x06,0x12,0x84,0xe9,0x06,0x16,0x85,0xe9,0x06,0x18,0x86,0xe9,0x06,0x19, + 0x85,0xe9,0x06,0x18,0x84,0xe9,0x06,0x15,0x83,0xe9,0x06,0x10,0x81,0xe9,0x06, + 0x0a,0x80,0xe9,0x06,0x03,0xaf,0x00,0x00,0x00,0x00,0x0f,0x80,0xe9,0x06,0x07, + 0x82,0xe9,0x06,0x15,0x82,0xe9,0x06,0x3b,0x82,0xe9,0x06,0x67,0x83,0xe9,0x06, + 0x86,0x84,0xe9,0x06,0x98,0x85,0xe9,0x06,0xa2,0x86,0xe9,0x06,0xa5,0x85,0xe9, + 0x06,0x9f,0x83,0xe9,0x06,0x93,0x83,0xe9,0x06,0x7e,0x82,0xe9,0x06,0x5a,0x82, + 0xe9,0x06,0x2e,0x81,0xe9,0x06,0x11,0x80,0xe9,0x06,0x04,0xac,0x00,0x00,0x00, + 0x00,0x11,0x81,0xe9,0x06,0x10,0x81,0xe9,0x06,0x3f,0x82,0xe9,0x06,0x72,0x83, + 0xe9,0x06,0x83,0x83,0xe9,0x06,0x6c,0x81,0xe9,0x06,0x4a,0x80,0xe9,0x06,0x28, + 0x7f,0xe9,0x06,0x0f,0x80,0xe9,0x06,0x04,0x7f,0xe9,0x06,0x17,0x80,0xe9,0x06, + 0x33,0x82,0xe9,0x06,0x54,0x83,0xe9,0x06,0x75,0x83,0xe9,0x06,0x81,0x82,0xe9, + 0x06,0x64,0x81,0xe9,0x06,0x2e,0x81,0xe9,0x06,0x08,0x97,0x00,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x84,0x00,0x00,0x00,0x03,0x01, + 0x00,0x00,0x00,0x02,0x83,0x00,0x00,0x00,0x01,0x88,0x00,0x00,0x00,0x00,0x07, + 0x80,0xe9,0x06,0x02,0x82,0xe9,0x06,0x18,0x82,0xe9,0x06,0x56,0x82,0xe9,0x06, + 0x75,0x82,0xe9,0x06,0x57,0x81,0xe9,0x06,0x21,0x80,0xe9,0x06,0x03,0x87,0x00, + 0x00,0x00,0x00,0x07,0x80,0xe9,0x06,0x0a,0x82,0xe9,0x06,0x32,0x82,0xe9,0x06, + 0x64,0x82,0xe9,0x06,0x74,0x82,0xe9,0x06,0x3f,0x82,0xe9,0x06,0x0d,0x80,0xe9, + 0x06,0x01,0x94,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x82,0x00,0x00,0x00,0x05,0x01, + 0x00,0x00,0x00,0x06,0x82,0x00,0x00,0x00,0x07,0x05,0x00,0x00,0x00,0x06,0x00, + 0x00,0x00,0x05,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02, + 0x83,0x00,0x00,0x00,0x01,0x82,0x00,0x00,0x00,0x00,0x05,0x82,0xe9,0x06,0x1c, + 0x82,0xe9,0x06,0x5d,0x83,0xe9,0x06,0x64,0x82,0xe9,0x06,0x2f,0x80,0xe9,0x06, + 0x07,0x8b,0x00,0x00,0x00,0x00,0x05,0x80,0xe9,0x06,0x10,0x82,0xe9,0x06,0x41, + 0x82,0xe9,0x06,0x6f,0x82,0xe9,0x06,0x48,0x82,0xe9,0x06,0x0a,0x94,0x00,0x00, + 0x00,0x00,0x17,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x06, + 0x0e,0x0e,0x0e,0x1f,0x16,0x16,0x16,0x44,0x17,0x17,0x17,0x3c,0x0e,0x0e,0x0e, + 0x28,0x07,0x07,0x07,0x1b,0x02,0x02,0x02,0x14,0x00,0x00,0x00,0x0e,0x00,0x00, + 0x00,0x0b,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x08,0x00, + 0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03, + 0x76,0xd4,0x06,0x16,0x81,0xe7,0x06,0x59,0x82,0xe8,0x06,0x5f,0x80,0xe5,0x06, + 0x1a,0x5d,0xa8,0x04,0x00,0x82,0x00,0x00,0x00,0x00,0x09,0x80,0xe9,0x06,0x10, + 0x82,0xe9,0x06,0x2e,0x83,0xe9,0x06,0x46,0x85,0xe9,0x06,0x53,0x86,0xe9,0x06, + 0x57,0x85,0xe9,0x06,0x4f,0x83,0xe9,0x06,0x3e,0x82,0xe9,0x06,0x25,0x80,0xe9, + 0x06,0x0a,0x82,0x00,0x00,0x00,0x00,0x05,0x81,0xe9,0x06,0x01,0x82,0xe9,0x06, + 0x2e,0x82,0xe9,0x06,0x73,0x82,0xe9,0x06,0x3d,0x81,0xe9,0x06,0x06,0x93,0x00, + 0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05,0x00,0x00,0x00, + 0x08,0x0c,0x0c,0x0c,0x31,0x16,0x16,0x16,0x89,0x1e,0x1e,0x1e,0xaa,0x27,0x27, + 0x27,0xa2,0x2f,0x2f,0x2f,0x96,0x31,0x31,0x31,0x85,0x2d,0x2d,0x2d,0x71,0x24, + 0x24,0x24,0x5d,0x1a,0x1a,0x1a,0x4a,0x11,0x11,0x11,0x37,0x09,0x09,0x09,0x27, + 0x03,0x03,0x03,0x1a,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0b,0x49,0x84,0x03, + 0x12,0x79,0xd8,0x06,0x4d,0x7e,0xe1,0x06,0x71,0x75,0xd2,0x05,0x2d,0x0c,0x16, + 0x01,0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x80,0xe6,0x06,0x2a,0x82, + 0xe9,0x06,0x5d,0x82,0xe9,0x06,0x78,0x82,0xe9,0x06,0x76,0x84,0xe9,0x06,0x6e, + 0x86,0xe9,0x06,0x68,0x84,0xe9,0x06,0x71,0x82,0xe9,0x06,0x77,0x82,0xe9,0x06, + 0x71,0x82,0xe9,0x06,0x4e,0x82,0xe9,0x06,0x19,0x82,0x00,0x00,0x00,0x00,0x05, + 0x81,0xe9,0x06,0x01,0x82,0xe9,0x06,0x45,0x82,0xe9,0x06,0x79,0x81,0xe9,0x06, + 0x28,0x80,0xe9,0x06,0x02,0x92,0x00,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x0a,0x04,0x04,0x04,0x17,0x12,0x12,0x12, + 0x3d,0x1e,0x1e,0x1e,0x68,0x26,0x26,0x26,0x89,0x2a,0x2a,0x2a,0xa5,0x2e,0x2e, + 0x2e,0xc0,0x31,0x31,0x31,0xd5,0x33,0x33,0x33,0xda,0x32,0x32,0x32,0xcd,0x2f, + 0x2f,0x2f,0xbc,0x29,0x29,0x29,0xac,0x24,0x24,0x24,0x93,0x1e,0x1e,0x1e,0x77, + 0x18,0x18,0x18,0x59,0x40,0x6c,0x0c,0x56,0x71,0xca,0x06,0x81,0x70,0xc9,0x05, + 0x56,0x3c,0x6d,0x03,0x13,0x82,0x00,0x00,0x00,0x08,0x0d,0x78,0xd8,0x06,0x37, + 0x80,0xe6,0x06,0x72,0x81,0xe7,0x06,0x65,0x81,0xe7,0x06,0x3d,0x81,0xe9,0x06, + 0x22,0x80,0xe9,0x06,0x0d,0x80,0xe9,0x06,0x04,0x80,0xe9,0x06,0x14,0x81,0xe9, + 0x06,0x2a,0x82,0xe9,0x06,0x48,0x83,0xe9,0x06,0x6c,0x82,0xe9,0x06,0x5f,0x82, + 0xe9,0x06,0x1d,0x82,0x00,0x00,0x00,0x00,0x04,0x80,0xe9,0x06,0x0f,0x82,0xe9, + 0x06,0x6c,0x82,0xe9,0x06,0x66,0x82,0xe9,0x06,0x06,0x92,0x00,0x00,0x00,0x00, + 0x1b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00, + 0x00,0x0d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x16,0x04,0x04,0x04,0x22,0x0e, + 0x0e,0x0e,0x32,0x1c,0x1c,0x1c,0x49,0x27,0x27,0x27,0x69,0x2b,0x2b,0x2b,0x89, + 0x2b,0x2b,0x2b,0xa8,0x2d,0x2d,0x2d,0xd2,0x30,0x30,0x30,0xf3,0x2f,0x2f,0x2f, + 0xf6,0x2a,0x2a,0x2a,0xe8,0x29,0x2d,0x24,0xd7,0x44,0x69,0x18,0xcf,0x56,0x8e, + 0x11,0xcc,0x30,0x46,0x16,0x95,0x14,0x14,0x14,0x59,0x0c,0x0c,0x0c,0x35,0x59, + 0x9f,0x05,0x41,0x7c,0xde,0x06,0x78,0x78,0xd7,0x06,0x4a,0x68,0xbb,0x05,0x1d, + 0x20,0x3a,0x02,0x05,0x82,0x00,0x00,0x00,0x01,0x83,0x00,0x00,0x00,0x00,0x05, + 0x81,0xe9,0x06,0x07,0x82,0xe9,0x06,0x22,0x83,0xe9,0x06,0x5c,0x82,0xe9,0x06, + 0x5d,0x82,0xe9,0x06,0x18,0x82,0x00,0x00,0x00,0x00,0x03,0x81,0xe9,0x06,0x33, + 0x83,0xe9,0x06,0x8d,0x81,0xe9,0x06,0x23,0x92,0x00,0x00,0x00,0x00,0x1a,0x00, + 0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x08, + 0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x13,0x00,0x00,0x00, + 0x15,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x1f,0x05,0x05,0x05,0x29,0x0d,0x0d, + 0x0d,0x38,0x1a,0x1a,0x1a,0x52,0x21,0x21,0x21,0x79,0x25,0x25,0x25,0xaa,0x2b, + 0x2b,0x2b,0xdd,0x37,0x42,0x2a,0xfb,0x50,0x7b,0x1b,0xff,0x45,0x69,0x19,0xfa, + 0x22,0x24,0x1f,0xec,0x21,0x21,0x21,0xda,0x2b,0x35,0x20,0xc5,0x55,0x8c,0x12, + 0xc1,0x56,0x93,0x0d,0x9d,0x2a,0x47,0x09,0x38,0x03,0x03,0x02,0x0d,0x82,0x00, + 0x00,0x00,0x07,0x01,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x01,0x82,0x00, + 0x00,0x00,0x00,0x09,0x81,0xe9,0x06,0x00,0x82,0xe9,0x06,0x28,0x83,0xe9,0x06, + 0x70,0x82,0xe9,0x06,0x46,0x80,0xe9,0x06,0x09,0x00,0x00,0x00,0x00,0x80,0xe9, + 0x06,0x09,0x83,0xe9,0x06,0x83,0x82,0xe9,0x06,0x57,0x93,0x00,0x00,0x00,0x00, + 0x1f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00, + 0x00,0x06,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0e,0x00, + 0x00,0x00,0x11,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1a, + 0x00,0x00,0x00,0x21,0x03,0x03,0x03,0x2b,0x0d,0x0d,0x0d,0x3d,0x18,0x18,0x18, + 0x5d,0x39,0x54,0x18,0x9d,0x58,0x8e,0x16,0xea,0x40,0x58,0x22,0xfc,0x26,0x26, + 0x26,0xff,0x23,0x23,0x23,0xff,0x39,0x51,0x1d,0xfe,0x52,0x84,0x15,0xfb,0x36, + 0x49,0x1e,0xe9,0x24,0x26,0x23,0xc3,0x1c,0x1c,0x1c,0x7f,0x0b,0x0b,0x0b,0x35, + 0x76,0xd4,0x05,0x52,0x80,0xe3,0x06,0x81,0x83,0xe6,0x06,0x92,0x81,0xe6,0x06, + 0x6f,0x7e,0xe4,0x06,0x32,0x82,0x00,0x00,0x00,0x00,0x04,0x81,0xe9,0x06,0x06, + 0x82,0xe9,0x06,0x53,0x82,0xe9,0x06,0x6e,0x82,0xe9,0x06,0x1d,0x82,0x00,0x00, + 0x00,0x00,0x02,0x82,0xe9,0x06,0x5e,0x83,0xe9,0x06,0x84,0x85,0x00,0x00,0x00, + 0x01,0x91,0x00,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x06,0x00,0x00,0x00, + 0x09,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x15,0x00,0x00, + 0x00,0x1a,0x00,0x00,0x00,0x21,0x01,0x01,0x01,0x2a,0x4b,0x83,0x06,0x5f,0x64, + 0xaf,0x0a,0xb0,0x31,0x47,0x17,0xa8,0x24,0x24,0x24,0xe0,0x25,0x25,0x25,0xff, + 0x46,0x6b,0x19,0xff,0x4c,0x76,0x16,0xff,0x2b,0x34,0x20,0xff,0x22,0x22,0x22, + 0xfc,0x22,0x22,0x22,0xee,0x40,0x62,0x17,0xd8,0x62,0xa8,0x0d,0xbe,0x62,0xae, + 0x07,0x72,0x76,0xd2,0x05,0x3c,0x7c,0xdf,0x06,0x69,0x80,0xe4,0x06,0x76,0x7e, + 0xe3,0x06,0x32,0x82,0x00,0x00,0x00,0x00,0x03,0x81,0xe9,0x06,0x32,0x82,0xe9, + 0x06,0x7e,0x83,0xe9,0x06,0x2e,0x82,0x00,0x00,0x00,0x00,0x02,0x80,0xe9,0x06, + 0x38,0x84,0xe9,0x06,0xa2,0x82,0x00,0x00,0x00,0x04,0x82,0x00,0x00,0x00,0x03, + 0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x94,0x00,0x00,0x00,0x00,0x1e, + 0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x11,0x00,0x00, + 0x00,0x19,0x5f,0xa6,0x04,0x54,0x70,0xc4,0x05,0x99,0x1e,0x33,0x06,0x48,0x0f, + 0x0f,0x0f,0x68,0x1c,0x1c,0x1c,0xbe,0x4f,0x7e,0x15,0xf6,0x43,0x64,0x19,0xff, + 0x26,0x2a,0x21,0xff,0x21,0x21,0x21,0xff,0x20,0x20,0x20,0xff,0x58,0x91,0x12, + 0xfe,0x40,0x5f,0x1a,0xf9,0x2b,0x2f,0x26,0xd3,0x1e,0x21,0x1a,0x64,0x54,0x97, + 0x04,0x2a,0x7d,0xe1,0x06,0x6c,0x80,0xe3,0x06,0x63,0x00,0x00,0x00,0x01,0x00, + 0x00,0x00,0x00,0x80,0xe9,0x06,0x16,0x84,0xe9,0x06,0x81,0x85,0xe9,0x06,0x39, + 0x82,0x00,0x00,0x00,0x00,0x09,0x7f,0xe9,0x06,0x17,0x85,0xe9,0x06,0xb5,0x00, + 0x00,0x00,0x07,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x97,0x00,0x00, + 0x00,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06, + 0x00,0x00,0x00,0x0b,0x71,0xc5,0x05,0x4b,0x77,0xd0,0x05,0x90,0x05,0x0a,0x00, + 0x29,0x01,0x01,0x01,0x33,0x05,0x05,0x05,0x4f,0x5e,0xa0,0x09,0xbd,0x3e,0x59, + 0x1c,0xfc,0x23,0x24,0x23,0xff,0x21,0x21,0x21,0xff,0x20,0x20,0x20,0xff,0x69, + 0xb1,0x0d,0xff,0x23,0x29,0x1d,0xff,0x1e,0x1e,0x1e,0xfd,0x24,0x24,0x24,0xea, + 0x27,0x2a,0x24,0x8f,0x64,0xaf,0x06,0x60,0x82,0xe3,0x06,0x7e,0x00,0x00,0x00, + 0x04,0x00,0x00,0x00,0x01,0x81,0xe9,0x06,0x03,0x86,0xe9,0x06,0x80,0x86,0xe9, + 0x06,0x3f,0x82,0x00,0x00,0x00,0x00,0x0a,0x80,0xe9,0x06,0x03,0x86,0xe9,0x06, + 0xbe,0x05,0x05,0x05,0x08,0x09,0x09,0x09,0x6f,0x15,0x15,0x15,0xb0,0x0b,0x0b, + 0x0b,0x3d,0x08,0x08,0x08,0x07,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x02,0x00, + 0x00,0x00,0x01,0x98,0x00,0x00,0x00,0x00,0x18,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x03,0x7d,0xdb,0x06,0x40,0x7f,0xde,0x06,0x88,0x34,0x5f,0x03,0x21,0x00, + 0x00,0x00,0x21,0x00,0x00,0x00,0x2e,0x69,0xb8,0x05,0x93,0x43,0x70,0x0d,0xbc, + 0x23,0x27,0x1f,0xe8,0x22,0x22,0x22,0xfd,0x1f,0x1f,0x1f,0xff,0x59,0x94,0x11, + 0xff,0x3a,0x57,0x17,0xff,0x1b,0x1c,0x19,0xff,0x1e,0x1f,0x1e,0xff,0x46,0x4f, + 0x3a,0xf8,0x62,0x93,0x25,0xd2,0x76,0xd1,0x07,0x6f,0x00,0x00,0x00,0x04,0x00, + 0x00,0x00,0x02,0x7d,0xe4,0x06,0x15,0x84,0xe9,0x06,0x82,0x85,0xe9,0x06,0x3a, + 0x82,0x00,0x00,0x00,0x00,0x0c,0x7f,0xe9,0x06,0x15,0x85,0xe9,0x06,0xb6,0x00, + 0x00,0x00,0x0c,0x04,0x04,0x04,0x26,0x0b,0x0b,0x0b,0x89,0x11,0x11,0x11,0xc2, + 0x0e,0x0e,0x0e,0x5a,0x0c,0x0c,0x0c,0x0c,0x00,0x00,0x00,0x06,0x00,0x00,0x00, + 0x04,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x98,0x00,0x00,0x00,0x00,0x16, + 0x81,0xe5,0x06,0x36,0x81,0xe6,0x06,0x83,0x69,0xbf,0x05,0x2a,0x00,0x00,0x00, + 0x11,0x00,0x00,0x00,0x1e,0x67,0xb6,0x04,0x79,0x61,0xae,0x04,0x8e,0x1e,0x2e, + 0x0a,0x89,0x1c,0x1c,0x1c,0xd7,0x1f,0x1f,0x1f,0xfb,0x3e,0x5e,0x19,0xff,0x58, + 0x8d,0x17,0xff,0x53,0x71,0x2c,0xff,0x60,0x71,0x4a,0xff,0x68,0x8f,0x39,0xff, + 0x63,0x97,0x23,0xeb,0x4e,0x7a,0x19,0x7b,0x02,0x02,0x02,0x07,0x00,0x00,0x00, + 0x02,0x80,0xe7,0x06,0x31,0x82,0xe9,0x06,0x7f,0x83,0xe9,0x06,0x2f,0x82,0x00, + 0x00,0x00,0x00,0x0e,0x80,0xe9,0x06,0x35,0x84,0xe9,0x06,0xa4,0x00,0x00,0x00, + 0x0d,0x00,0x00,0x00,0x11,0x01,0x01,0x01,0x15,0x0a,0x0a,0x0a,0x6b,0x11,0x11, + 0x11,0xc6,0x10,0x10,0x10,0x68,0x0e,0x0e,0x0e,0x18,0x01,0x01,0x01,0x09,0x00, + 0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01, + 0x96,0x00,0x00,0x00,0x00,0x16,0x81,0xe7,0x06,0x2b,0x81,0xe7,0x06,0x7d,0x7a, + 0xdc,0x06,0x3e,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x14,0x5a,0xa2,0x04,0x57, + 0x6b,0xbe,0x05,0x98,0x36,0x5f,0x03,0x65,0x10,0x11,0x0e,0x81,0x2a,0x2a,0x2a, + 0xe7,0x46,0x46,0x46,0xfe,0x6b,0x8b,0x41,0xff,0x72,0xa7,0x28,0xff,0x6f,0xab, + 0x18,0xff,0x59,0x88,0x19,0xff,0x45,0x5b,0x2b,0xf8,0x33,0x33,0x33,0x9d,0x03, + 0x03,0x03,0x13,0x58,0x9e,0x04,0x07,0x81,0xe8,0x06,0x51,0x82,0xe9,0x06,0x70, + 0x82,0xe9,0x06,0x1e,0x82,0x00,0x00,0x00,0x00,0x0f,0x82,0xe9,0x06,0x5b,0x83, + 0xe9,0x06,0x87,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x11,0x00,0x00,0x00,0x16, + 0x02,0x02,0x02,0x22,0x0b,0x0b,0x0b,0x7e,0x12,0x12,0x12,0xd0,0x13,0x13,0x13, + 0x86,0x0f,0x0f,0x0f,0x32,0x07,0x07,0x07,0x13,0x00,0x00,0x00,0x09,0x00,0x00, + 0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00,0x01, + 0x91,0x00,0x00,0x00,0x00,0x2c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x75, + 0xd3,0x05,0x1e,0x7f,0xe3,0x06,0x70,0x7b,0xdb,0x06,0x5c,0x1f,0x38,0x01,0x11, + 0x00,0x00,0x00,0x17,0x31,0x59,0x02,0x33,0x64,0xb1,0x08,0x91,0x5a,0x8f,0x19, + 0xac,0x54,0x5b,0x4b,0xc8,0x6a,0x6a,0x67,0xf1,0x6f,0x6e,0x65,0xf6,0x5b,0x5a, + 0x46,0xfc,0x4f,0x4e,0x31,0xff,0x4a,0x49,0x29,0xff,0x36,0x36,0x25,0xff,0x34, + 0x34,0x35,0xeb,0x28,0x28,0x28,0x7e,0x02,0x04,0x00,0x0c,0x76,0xd4,0x06,0x28, + 0x82,0xe8,0x06,0x70,0x82,0xe9,0x06,0x49,0x80,0xe9,0x06,0x0a,0x00,0x00,0x00, + 0x00,0x80,0xe9,0x06,0x07,0x83,0xe9,0x06,0x81,0x82,0xe9,0x06,0x5a,0x00,0x00, + 0x00,0x05,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x19,0x03, + 0x03,0x03,0x2f,0x0b,0x0b,0x0b,0x90,0x12,0x12,0x12,0xe0,0x14,0x14,0x14,0xba, + 0x13,0x13,0x13,0x65,0x0e,0x0e,0x0e,0x2d,0x04,0x04,0x04,0x15,0x00,0x00,0x00, + 0x0b,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x04,0x00,0x00, + 0x00,0x03,0x83,0x00,0x00,0x00,0x01,0x8b,0x00,0x00,0x00,0x00,0x19,0x00,0x00, + 0x00,0x02,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x09,0x3b, + 0x6c,0x03,0x14,0x75,0xd2,0x06,0x56,0x78,0xd5,0x06,0x7b,0x49,0x84,0x03,0x33, + 0x00,0x00,0x00,0x22,0x12,0x12,0x12,0x3f,0x61,0x7d,0x3e,0xac,0x89,0xb9,0x4d, + 0xf4,0x8d,0xa5,0x6a,0xfa,0x6d,0x75,0x49,0xe6,0x64,0x64,0x36,0xd7,0x5c,0x5b, + 0x33,0xe9,0x4f,0x4e,0x2f,0xfa,0x41,0x40,0x27,0xff,0x31,0x31,0x25,0xfb,0x32, + 0x32,0x33,0xc3,0x1e,0x26,0x14,0x48,0x67,0xb9,0x05,0x24,0x7e,0xe1,0x06,0x5c, + 0x82,0xe8,0x06,0x61,0x82,0xe9,0x06,0x1a,0x82,0x00,0x00,0x00,0x00,0x18,0x81, + 0xe9,0x06,0x2f,0x83,0xe9,0x06,0x8e,0x81,0xe9,0x06,0x26,0x00,0x00,0x00,0x02, + 0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, + 0x1d,0x04,0x04,0x04,0x3a,0x0c,0x0c,0x0c,0x97,0x13,0x13,0x13,0xe9,0x16,0x16, + 0x16,0xe4,0x15,0x15,0x15,0xa9,0x13,0x13,0x13,0x6e,0x11,0x11,0x11,0x41,0x0a, + 0x0a,0x0a,0x24,0x02,0x02,0x02,0x14,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x08, + 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x02,0x83,0x00,0x00,0x00,0x01,0x82,0x00,0x00,0x00,0x00, + 0x82,0x00,0x00,0x00,0x01,0x1a,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00, + 0x00,0x00,0x07,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x12, + 0x02,0x02,0x02,0x1c,0x4a,0x7a,0x11,0x53,0x6d,0xb5,0x17,0xa2,0x61,0x98,0x1f, + 0x86,0x36,0x3d,0x2d,0x6a,0x58,0x58,0x58,0xa5,0x8e,0x8e,0x8e,0xed,0x88,0x9f, + 0x62,0xf4,0x79,0xab,0x27,0xe9,0x75,0xa0,0x21,0xdf,0x70,0x88,0x2a,0xd6,0x60, + 0x6d,0x28,0xd2,0x4c,0x50,0x26,0xe4,0x39,0x3a,0x21,0xfd,0x37,0x3f,0x27,0xed, + 0x3e,0x57,0x21,0x93,0x6a,0xbc,0x05,0x50,0x7c,0xdd,0x06,0x6f,0x81,0xe6,0x06, + 0x65,0x80,0xe7,0x06,0x21,0x82,0x00,0x00,0x00,0x00,0x01,0x80,0xe9,0x06,0x0d, + 0x82,0x82,0xe9,0x06,0x6a,0x14,0x82,0xe9,0x06,0x06,0x00,0x00,0x00,0x01,0x00, + 0x00,0x00,0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0d,0x00,0x00,0x00,0x17, + 0x00,0x00,0x00,0x20,0x04,0x04,0x04,0x3d,0x0c,0x0c,0x0c,0x8f,0x12,0x12,0x12, + 0xdf,0x16,0x16,0x16,0xfc,0x17,0x17,0x17,0xec,0x17,0x17,0x17,0xc5,0x18,0x18, + 0x18,0x9b,0x18,0x18,0x18,0x72,0x14,0x14,0x14,0x4d,0x0c,0x0c,0x0c,0x2e,0x04, + 0x04,0x04,0x1b,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0a,0x82,0x00,0x00,0x00, + 0x08,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x05,0x82, + 0x00,0x00,0x00,0x04,0x1b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07,0x00,0x00, + 0x00,0x09,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x15,0x0a, + 0x0a,0x0a,0x29,0x35,0x35,0x36,0x4c,0x65,0x65,0x66,0x7a,0x78,0x7f,0x71,0xb2, + 0x7b,0x9d,0x52,0xe4,0x6c,0x9a,0x33,0xec,0x57,0x68,0x43,0xe6,0x86,0x86,0x86, + 0xf7,0x8a,0x8a,0x88,0xfc,0x69,0x68,0x49,0xdd,0x6d,0x83,0x2a,0xd3,0x70,0x9d, + 0x1d,0xdb,0x6f,0xa6,0x16,0xdf,0x6a,0x9e,0x16,0xdc,0x64,0x8f,0x17,0xe1,0x54, + 0x78,0x19,0xfb,0x59,0x88,0x1e,0xe1,0x69,0xb9,0x09,0x95,0x7c,0xdd,0x06,0x7a, + 0x7e,0xe0,0x06,0x58,0x7d,0xe0,0x06,0x1e,0x82,0x00,0x00,0x00,0x00,0x40,0x81, + 0xe9,0x06,0x01,0x82,0xe9,0x06,0x41,0x82,0xe9,0x06,0x7a,0x81,0xe9,0x06,0x2c, + 0x80,0xe9,0x06,0x02,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x03,0x00,0x00,0x00,0x06,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x18,0x00,0x00, + 0x00,0x22,0x02,0x02,0x02,0x39,0x0b,0x0b,0x0b,0x7d,0x12,0x12,0x12,0xd0,0x16, + 0x16,0x16,0xf9,0x18,0x18,0x18,0xff,0x1a,0x1a,0x1a,0xfd,0x1b,0x1b,0x1b,0xec, + 0x1a,0x1a,0x1a,0xcf,0x1c,0x1c,0x1c,0xae,0x1d,0x1d,0x1d,0x8e,0x1c,0x1c,0x1c, + 0x6d,0x17,0x17,0x17,0x50,0x10,0x10,0x10,0x37,0x08,0x08,0x08,0x24,0x02,0x02, + 0x02,0x16,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x0a,0x00, + 0x00,0x00,0x0c,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x12, + 0x00,0x00,0x00,0x1d,0x14,0x14,0x14,0x3b,0x51,0x51,0x53,0x68,0x7d,0x7d,0x7f, + 0x9c,0x82,0x82,0x81,0xc8,0x84,0x84,0x7e,0xe9,0x88,0x87,0x79,0xef,0x75,0x7e, + 0x56,0xf1,0x5f,0x83,0x29,0xfc,0x5f,0x83,0x33,0xff,0x60,0x6a,0x56,0xff,0x51, + 0x51,0x4a,0xf6,0x5c,0x5b,0x34,0xd0,0x5d,0x5c,0x2e,0xc3,0x59,0x63,0x26,0xc2, + 0x5c,0x76,0x1c,0xcd,0x5b,0x7d,0x1c,0xe8,0x67,0x8d,0x2f,0xf7,0x66,0x95,0x28, + 0xd0,0x66,0xad,0x0d,0x7f,0x71,0xc9,0x05,0x52,0x6f,0xc8,0x05,0x31,0x67,0xbd, + 0x04,0x0f,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00,0x81,0xe9,0x06,0x01,0x82, + 0xe9,0x06,0x29,0x82,0xe9,0x06,0x71,0x82,0xe9,0x06,0x43,0x81,0xe9,0x06,0x07, + 0x83,0x00,0x00,0x00,0x00,0x38,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03,0x00, + 0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x23, + 0x01,0x01,0x01,0x35,0x09,0x09,0x09,0x6c,0x10,0x10,0x10,0xbe,0x16,0x16,0x16, + 0xf5,0x18,0x18,0x18,0xff,0x19,0x19,0x19,0xff,0x1b,0x1b,0x1b,0xff,0x1d,0x1d, + 0x1d,0xff,0x1e,0x1e,0x1e,0xf7,0x20,0x20,0x20,0xe5,0x21,0x21,0x21,0xd0,0x22, + 0x22,0x22,0xbb,0x24,0x24,0x24,0xa3,0x23,0x23,0x23,0x87,0x1f,0x1f,0x1f,0x6a, + 0x17,0x17,0x17,0x51,0x10,0x10,0x10,0x3d,0x09,0x09,0x09,0x30,0x05,0x05,0x05, + 0x2d,0x09,0x09,0x09,0x39,0x2c,0x2c,0x2c,0x5d,0x6d,0x6d,0x6e,0x8c,0x91,0x91, + 0x94,0xbc,0x8b,0x8b,0x89,0xde,0x89,0x88,0x7d,0xed,0x84,0x84,0x6d,0xe6,0x79, + 0x78,0x55,0xde,0x6c,0x6b,0x40,0xda,0x5a,0x59,0x33,0xed,0x49,0x55,0x27,0xfd, + 0x4f,0x77,0x1d,0xf5,0x48,0x6f,0x1a,0xf7,0x3e,0x50,0x24,0xf8,0x4f,0x52,0x2b, + 0xce,0x52,0x51,0x27,0xbe,0x4a,0x49,0x23,0xc7,0x4d,0x4c,0x32,0xe2,0x55,0x54, + 0x48,0xf2,0x49,0x49,0x46,0xb8,0x3c,0x3c,0x3c,0x59,0x03,0x03,0x03,0x17,0x00, + 0x00,0x00,0x0b,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x00, + 0x80,0xe9,0x06,0x0f,0x82,0xe9,0x06,0x3a,0x82,0xe9,0x06,0x6c,0x82,0xe9,0x06, + 0x4d,0x82,0xe9,0x06,0x0c,0x85,0x00,0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x01, + 0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00,0x00,0x00, + 0x18,0x00,0x00,0x00,0x22,0x00,0x00,0x00,0x32,0x06,0x06,0x06,0x5a,0x0f,0x0f, + 0x0f,0xaa,0x16,0x16,0x16,0xf2,0x83,0x19,0x19,0x19,0xff,0x2a,0x1b,0x1b,0x1b, + 0xff,0x1d,0x1d,0x1d,0xff,0x20,0x20,0x20,0xff,0x22,0x22,0x22,0xff,0x25,0x25, + 0x25,0xfb,0x26,0x26,0x26,0xf0,0x28,0x28,0x28,0xe1,0x29,0x29,0x29,0xd2,0x2c, + 0x2c,0x2c,0xc4,0x2f,0x2f,0x2f,0xb7,0x37,0x37,0x37,0xb2,0x5c,0x5c,0x5c,0xbf, + 0x91,0x91,0x92,0xd8,0x9a,0x9a,0x99,0xf1,0x89,0x89,0x7b,0xed,0x7f,0x7e,0x60, + 0xde,0x73,0x72,0x48,0xd4,0x70,0x6f,0x3b,0xce,0x6f,0x6e,0x39,0xcf,0x64,0x63, + 0x38,0xe4,0x50,0x4f,0x30,0xfb,0x3d,0x3e,0x2d,0xf5,0x35,0x45,0x20,0xb2,0x42, + 0x70,0x0b,0xc7,0x4e,0x7c,0x14,0xf8,0x5a,0x7d,0x1d,0xe2,0x51,0x5f,0x22,0xda, + 0x55,0x56,0x42,0xec,0x56,0x56,0x50,0xec,0x44,0x43,0x43,0x98,0x29,0x29,0x2a, + 0x3f,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x06,0x00,0x00, + 0x00,0x02,0x79,0xdc,0x06,0x0a,0x82,0xe9,0x06,0x2d,0x82,0xe9,0x06,0x5d,0x82, + 0xe9,0x06,0x73,0x82,0xe9,0x06,0x45,0x82,0xe9,0x06,0x0f,0x80,0xe9,0x06,0x01, + 0x86,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00, + 0x00,0x00,0x06,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x00,0x00,0x21, + 0x00,0x00,0x00,0x2e,0x04,0x04,0x04,0x4c,0x0c,0x0c,0x0c,0x90,0x14,0x14,0x14, + 0xdd,0x19,0x19,0x19,0xfd,0x82,0x1a,0x1a,0x1a,0xff,0x27,0x1b,0x1b,0x1b,0xff, + 0x1c,0x1c,0x1c,0xff,0x1d,0x1d,0x1d,0xff,0x1f,0x1f,0x1f,0xff,0x22,0x22,0x22, + 0xff,0x27,0x27,0x27,0xff,0x2a,0x2a,0x2a,0xff,0x2f,0x2f,0x2f,0xff,0x41,0x41, + 0x41,0xfd,0x55,0x55,0x55,0xfc,0x62,0x62,0x63,0xfe,0x73,0x73,0x6e,0xf7,0x74, + 0x73,0x59,0xdd,0x69,0x68,0x3c,0xcc,0x6b,0x6a,0x36,0xc7,0x6f,0x6e,0x38,0xc8, + 0x6c,0x6b,0x38,0xc8,0x60,0x5f,0x32,0xd1,0x4c,0x4b,0x2a,0xf1,0x3e,0x3d,0x29, + 0xff,0x31,0x31,0x29,0xd0,0x17,0x17,0x17,0x69,0x1b,0x2c,0x06,0x79,0x38,0x58, + 0x12,0xe0,0x59,0x88,0x1b,0xfa,0x67,0x9a,0x21,0xf8,0x66,0x92,0x2c,0xe3,0x60, + 0x8a,0x2d,0xa2,0x45,0x77,0x0b,0x4d,0x36,0x61,0x02,0x1f,0x1e,0x37,0x01,0x10, + 0x63,0xb4,0x05,0x1a,0x7a,0xdd,0x06,0x31,0x81,0xe6,0x06,0x4e,0x83,0xe9,0x06, + 0x6d,0x83,0xe9,0x06,0x7c,0x82,0xe9,0x06,0x67,0x81,0xe9,0x06,0x34,0x81,0xe9, + 0x06,0x0a,0x89,0x00,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x01,0x00,0x00,0x00, + 0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x12,0x00,0x00, + 0x00,0x1d,0x00,0x00,0x00,0x2a,0x02,0x02,0x02,0x3e,0x08,0x08,0x08,0x68,0x0f, + 0x0f,0x0f,0xb5,0x17,0x17,0x17,0xf9,0x82,0x1a,0x1a,0x1a,0xff,0x01,0x1b,0x1b, + 0x1b,0xff,0x82,0x1c,0x1c,0x1c,0xff,0x09,0x1e,0x1e,0x1e,0xff,0x21,0x21,0x21, + 0xff,0x25,0x25,0x25,0xff,0x38,0x38,0x38,0xff,0x62,0x62,0x62,0xff,0x60,0x60, + 0x60,0xff,0x46,0x46,0x47,0xfe,0x4f,0x4e,0x35,0xda,0x5e,0x5d,0x2e,0xc3,0x82, + 0x63,0x62,0x31,0xc2,0x17,0x5d,0x5c,0x2e,0xc2,0x58,0x57,0x2c,0xc2,0x4f,0x4e, + 0x28,0xd2,0x40,0x3f,0x25,0xf8,0x37,0x37,0x29,0xf0,0x29,0x29,0x27,0x91,0x06, + 0x06,0x06,0x3b,0x02,0x02,0x02,0x3a,0x15,0x1d,0x0c,0x81,0x2b,0x3b,0x18,0xb4, + 0x4c,0x78,0x15,0x98,0x6b,0xb9,0x0c,0x8b,0x75,0xd1,0x06,0x93,0x7d,0xdd,0x06, + 0x99,0x80,0xe1,0x06,0x9d,0x83,0xe4,0x06,0x9b,0x83,0xe6,0x06,0x96,0x82,0xe8, + 0x06,0x8e,0x82,0xe9,0x06,0x7d,0x82,0xe9,0x06,0x5f,0x82,0xe9,0x06,0x36,0x81, + 0xe9,0x06,0x16,0x80,0xe9,0x06,0x05,0x8c,0x00,0x00,0x00,0x00,0x0b,0x00,0x00, + 0x00,0x01,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0e,0x00, + 0x00,0x00,0x18,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x31,0x04,0x04,0x04,0x47, + 0x0b,0x0b,0x0b,0x82,0x13,0x13,0x13,0xd0,0x19,0x19,0x19,0xfe,0x82,0x1b,0x1b, + 0x1b,0xff,0x82,0x1c,0x1c,0x1c,0xff,0x1f,0x1d,0x1d,0x1d,0xff,0x1e,0x1e,0x1e, + 0xff,0x2b,0x2b,0x2b,0xff,0x40,0x40,0x40,0xff,0x3a,0x3a,0x3b,0xff,0x3c,0x3c, + 0x36,0xf7,0x51,0x50,0x2c,0xc9,0x59,0x58,0x2b,0xbf,0x57,0x56,0x2b,0xbe,0x56, + 0x55,0x2a,0xbe,0x55,0x54,0x28,0xbe,0x54,0x53,0x28,0xbd,0x4a,0x49,0x23,0xd2, + 0x3c,0x3b,0x26,0xfb,0x33,0x33,0x2d,0xc2,0x15,0x15,0x16,0x49,0x00,0x00,0x00, + 0x20,0x00,0x00,0x00,0x21,0x03,0x03,0x03,0x27,0x0d,0x0d,0x0d,0x2e,0x1c,0x2e, + 0x07,0x27,0x3e,0x70,0x03,0x25,0x59,0x9e,0x04,0x27,0x6e,0xc3,0x05,0x27,0x7d, + 0xda,0x06,0x27,0x83,0xe4,0x06,0x27,0x85,0xe8,0x06,0x23,0x83,0xe8,0x06,0x1f, + 0x83,0xe9,0x06,0x18,0x81,0xe9,0x06,0x0e,0x80,0xe9,0x06,0x04,0x8f,0x00,0x00, + 0x00,0x00,0x0e,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x05, + 0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x13,0x00,0x00,0x00,0x1c,0x00,0x00,0x00, + 0x28,0x01,0x01,0x01,0x36,0x06,0x06,0x06,0x4f,0x0b,0x0b,0x0b,0x8b,0x12,0x12, + 0x12,0xd0,0x19,0x19,0x19,0xfa,0x1b,0x1b,0x1b,0xff,0x1c,0x1c,0x1c,0xff,0x83, + 0x1d,0x1d,0x1d,0xff,0x0e,0x1e,0x1e,0x1e,0xff,0x28,0x28,0x29,0xff,0x3e,0x3e, + 0x33,0xed,0x52,0x51,0x29,0xc3,0x54,0x53,0x28,0xbc,0x56,0x56,0x29,0xba,0x52, + 0x51,0x26,0xba,0x4e,0x4d,0x21,0xc1,0x4e,0x4d,0x26,0xce,0x52,0x51,0x37,0xe8, + 0x44,0x44,0x3b,0xe4,0x26,0x26,0x26,0x74,0x04,0x04,0x04,0x19,0x00,0x00,0x00, + 0x13,0x82,0x00,0x00,0x00,0x11,0x06,0x00,0x00,0x00,0x10,0x00,0x00,0x00,0x0e, + 0x00,0x00,0x00,0x0a,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00, + 0x01,0x97,0x00,0x00,0x00,0x00,0x1d,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x03, + 0x00,0x00,0x00,0x07,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x15,0x00,0x00,0x00, + 0x20,0x00,0x00,0x00,0x2a,0x01,0x01,0x01,0x34,0x04,0x04,0x04,0x48,0x08,0x08, + 0x08,0x7c,0x10,0x10,0x10,0xc1,0x17,0x17,0x17,0xf1,0x1b,0x1b,0x1b,0xff,0x1c, + 0x1c,0x1c,0xff,0x1d,0x1d,0x1d,0xff,0x1c,0x1c,0x1c,0xff,0x27,0x27,0x29,0xff, + 0x41,0x40,0x32,0xea,0x4f,0x4e,0x24,0xc1,0x4b,0x4a,0x21,0xc6,0x4c,0x4b,0x26, + 0xd4,0x5b,0x5a,0x3f,0xe9,0x70,0x6f,0x5d,0xfb,0x79,0x78,0x70,0xfb,0x68,0x68, + 0x65,0xe3,0x37,0x37,0x37,0x81,0x07,0x07,0x08,0x22,0x00,0x00,0x00,0x0d,0x00, + 0x00,0x00,0x09,0x82,0x00,0x00,0x00,0x07,0x04,0x00,0x00,0x00,0x06,0x00,0x00, + 0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0x9a,0x00,0x00,0x00,0x00, + 0x1c,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00, + 0x00,0x08,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x16,0x00,0x00,0x00,0x1f,0x00, + 0x00,0x00,0x27,0x00,0x00,0x00,0x2e,0x00,0x00,0x00,0x3a,0x05,0x05,0x05,0x63, + 0x0c,0x0c,0x0c,0xa3,0x13,0x13,0x13,0xd6,0x18,0x18,0x18,0xf1,0x19,0x19,0x19, + 0xf8,0x21,0x21,0x22,0xfb,0x3e,0x3e,0x39,0xfc,0x53,0x52,0x40,0xf9,0x69,0x68, + 0x5b,0xf8,0x74,0x74,0x6f,0xf4,0x6e,0x6e,0x6e,0xe2,0x4a,0x4a,0x4c,0xb3,0x1e, + 0x1e,0x1f,0x73,0x01,0x01,0x02,0x35,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0d, + 0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x84,0x00,0x00,0x00,0x01,0x9e,0x00, + 0x00,0x00,0x00,0x1a,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00, + 0x05,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x15,0x00,0x00, + 0x00,0x1c,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x29,0x00,0x00,0x00,0x30,0x01, + 0x01,0x01,0x42,0x04,0x04,0x04,0x60,0x09,0x09,0x09,0x86,0x0d,0x0d,0x0d,0xa7, + 0x1a,0x1a,0x1a,0xb8,0x2f,0x2f,0x31,0xab,0x2c,0x2c,0x2e,0x86,0x11,0x11,0x12, + 0x59,0x00,0x00,0x00,0x35,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x14,0x00,0x00, + 0x00,0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x03,0x00, + 0x00,0x00,0x01,0xa4,0x00,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x01,0x00,0x00, + 0x00,0x02,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x08,0x00,0x00,0x00,0x0c,0x00, + 0x00,0x00,0x11,0x00,0x00,0x00,0x17,0x00,0x00,0x00,0x1e,0x00,0x00,0x00,0x22, + 0x00,0x00,0x00,0x23,0x00,0x00,0x00,0x24,0x00,0x00,0x00,0x26,0x00,0x00,0x00, + 0x25,0x00,0x00,0x00,0x20,0x00,0x00,0x00,0x19,0x00,0x00,0x00,0x17,0x00,0x00, + 0x00,0x16,0x00,0x00,0x00,0x14,0x00,0x00,0x00,0x0f,0x00,0x00,0x00,0x0a,0x00, + 0x00,0x00,0x06,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0xa7,0x00,0x00,0x00, + 0x00,0x08,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03,0x00, + 0x00,0x00,0x06,0x00,0x00,0x00,0x09,0x00,0x00,0x00,0x0c,0x00,0x00,0x00,0x10, + 0x00,0x00,0x00,0x13,0x83,0x00,0x00,0x00,0x16,0x08,0x00,0x00,0x00,0x14,0x00, + 0x00,0x00,0x12,0x00,0x00,0x00,0x0e,0x00,0x00,0x00,0x0b,0x00,0x00,0x00,0x08, + 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x03,0x00,0x00,0x00,0x01,0xac,0x00,0x00, + 0x00,0x00,0x05,0x00,0x00,0x00,0x01,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x03, + 0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x06,0x84,0x00,0x00,0x00,0x08,0x03,0x00, + 0x00,0x00,0x06,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x03,0x82,0x00,0x00,0x00, + 0x01,0xb0,0x00,0x00,0x00,0x00,0x89,0x00,0x00,0x00,0x01,0xb8,0x00,0x00,0x00, + 0x00,0x07,0x0c,0x0b,0x0c,0x02,0x0b,0x0b,0x0b,0x11,0x0e,0x0e,0x0e,0x39,0x16, + 0x16,0x16,0x57,0x14,0x14,0x14,0x3a,0x10,0x0f,0x0f,0x13,0x11,0x11,0x11,0x03, + 0xb3,0x00,0x00,0x00,0x00,0x0b,0x08,0x07,0x08,0x03,0x07,0x07,0x07,0x14,0x0e, + 0x0d,0x0e,0x41,0x13,0x12,0x13,0x82,0x14,0x14,0x14,0xbf,0x17,0x17,0x17,0xe3, + 0x18,0x18,0x18,0xc1,0x16,0x16,0x16,0x84,0x13,0x13,0x13,0x45,0x14,0x14,0x14, + 0x17,0x13,0x13,0x13,0x04,0xaf,0x00,0x00,0x00,0x00,0x0f,0x08,0x08,0x08,0x06, + 0x0d,0x0d,0x0d,0x26,0x0f,0x10,0x0f,0x57,0x13,0x13,0x13,0x93,0x15,0x15,0x15, + 0xc6,0x17,0x16,0x17,0xf0,0x18,0x18,0x18,0xfe,0x18,0x18,0x18,0xff,0x19,0x19, + 0x19,0xfe,0x19,0x19,0x19,0xf0,0x19,0x19,0x19,0xc9,0x19,0x19,0x19,0x96,0x16, + 0x16,0x16,0x5a,0x12,0x12,0x12,0x27,0x0f,0x0f,0x0f,0x07,0xab,0x00,0x00,0x00, + 0x00,0x07,0x07,0x07,0x06,0x08,0x0d,0x0d,0x0d,0x32,0x11,0x11,0x11,0x71,0x14, + 0x14,0x14,0xad,0x16,0x16,0x16,0xd8,0x17,0x17,0x17,0xf5,0x17,0x17,0x17,0xfe, + 0x83,0x18,0x18,0x18,0xff,0x01,0x19,0x19,0x19,0xff,0x82,0x1a,0x1a,0x1a,0xff, + 0x06,0x1b,0x1b,0x1b,0xf6,0x1a,0x1a,0x1a,0xd9,0x19,0x19,0x19,0xae,0x17,0x17, + 0x17,0x72,0x16,0x16,0x16,0x34,0x13,0x13,0x13,0x0a,0xa8,0x00,0x00,0x00,0x00, + 0x05,0x02,0x02,0x02,0x08,0x0f,0x0f,0x10,0x4d,0x14,0x14,0x15,0xb6,0x16,0x16, + 0x17,0xe6,0x17,0x17,0x17,0xf9,0x83,0x17,0x17,0x17,0xff,0x83,0x18,0x18,0x18, + 0xff,0x01,0x19,0x19,0x19,0xff,0x83,0x1a,0x1a,0x1a,0xff,0x06,0x1b,0x1b,0x1b, + 0xff,0x1c,0x1c,0x1c,0xf9,0x21,0x21,0x21,0xe6,0x27,0x27,0x27,0xbe,0x21,0x21, + 0x22,0x54,0x0c,0x0c,0x0b,0x0b,0xa6,0x00,0x00,0x00,0x00,0x06,0x00,0x00,0x00, + 0x01,0x0e,0x0e,0x0e,0x36,0x18,0x18,0x18,0xb8,0x1e,0x1e,0x1f,0xf8,0x1b,0x1b, + 0x1c,0xff,0x18,0x18,0x19,0xff,0x83,0x17,0x17,0x17,0xff,0x83,0x18,0x18,0x18, + 0xff,0x82,0x19,0x19,0x19,0xff,0x09,0x1a,0x1a,0x1a,0xff,0x1b,0x1b,0x1b,0xff, + 0x20,0x20,0x20,0xff,0x28,0x28,0x28,0xff,0x31,0x31,0x31,0xff,0x37,0x37,0x38, + 0xfb,0x2f,0x2f,0x2f,0xc2,0x20,0x21,0x20,0x3b,0x05,0x07,0x04,0x03,0xa5,0x00, + 0x00,0x00,0x00,0x08,0x08,0x08,0x08,0x20,0x15,0x15,0x15,0x99,0x20,0x20,0x20, + 0xf6,0x21,0x21,0x21,0xff,0x20,0x20,0x20,0xff,0x1d,0x1d,0x1d,0xff,0x1a,0x1a, + 0x1a,0xff,0x19,0x19,0x19,0xff,0x83,0x18,0x18,0x18,0xff,0x0d,0x17,0x17,0x17, + 0xff,0x18,0x18,0x18,0xff,0x1c,0x1c,0x1c,0xff,0x21,0x21,0x21,0xff,0x29,0x29, + 0x29,0xff,0x31,0x31,0x31,0xff,0x36,0x36,0x36,0xff,0x39,0x39,0x39,0xff,0x3a, + 0x3a,0x3a,0xff,0x38,0x38,0x38,0xf8,0x28,0x28,0x28,0xa2,0x1b,0x1a,0x1a,0x20, + 0x0b,0x0b,0x0a,0x00,0xa3,0x00,0x00,0x00,0x00,0x11,0x03,0x03,0x03,0x11,0x11, + 0x11,0x11,0x77,0x1e,0x1e,0x1e,0xf0,0x22,0x23,0x22,0xff,0x21,0x21,0x21,0xff, + 0x20,0x20,0x20,0xff,0x1e,0x1e,0x1e,0xff,0x1d,0x1d,0x1d,0xff,0x1c,0x1c,0x1c, + 0xff,0x1b,0x1b,0x1b,0xff,0x19,0x19,0x19,0xff,0x18,0x18,0x18,0xff,0x1c,0x1c, + 0x1c,0xff,0x23,0x23,0x23,0xff,0x28,0x28,0x28,0xff,0x32,0x32,0x32,0xff,0x37, + 0x37,0x37,0xff,0x85,0x38,0x38,0x38,0xff,0x03,0x34,0x34,0x34,0xf6,0x23,0x22, + 0x22,0x80,0x15,0x14,0x14,0x11,0xa2,0x00,0x00,0x00,0x00,0x13,0x01,0x01,0x01, + 0x07,0x0d,0x0d,0x0d,0x50,0x19,0x19,0x19,0xe1,0x23,0x23,0x23,0xff,0x22,0x22, + 0x22,0xff,0x21,0x21,0x21,0xff,0x1f,0x1f,0x1f,0xff,0x1e,0x1e,0x1e,0xff,0x1d, + 0x1d,0x1d,0xff,0x1c,0x1c,0x1c,0xff,0x1b,0x1b,0x1b,0xff,0x1a,0x1a,0x1a,0xff, + 0x16,0x16,0x16,0xff,0x3f,0x3f,0x3f,0xff,0x39,0x39,0x39,0xff,0x26,0x26,0x26, + 0xff,0x2d,0x2d,0x2d,0xff,0x32,0x32,0x32,0xff,0x35,0x35,0x35,0xff,0x83,0x37, + 0x37,0x37,0xff,0x05,0x36,0x36,0x36,0xff,0x36,0x37,0x36,0xff,0x2d,0x2d,0x2d, + 0xed,0x1b,0x1b,0x1b,0x58,0x0d,0x0c,0x0c,0x07,0xa0,0x00,0x00,0x00,0x00,0x0a, + 0x04,0x04,0x04,0x03,0x0c,0x0c,0x0c,0x34,0x16,0x16,0x16,0xce,0x23,0x23,0x23, + 0xff,0x22,0x22,0x22,0xff,0x23,0x23,0x23,0xff,0x22,0x22,0x22,0xff,0x1f,0x1f, + 0x1f,0xff,0x1e,0x1e,0x1e,0xff,0x1d,0x1d,0x1d,0xff,0x82,0x1b,0x1b,0x1b,0xff, + 0x05,0x19,0x19,0x19,0xff,0x17,0x17,0x17,0xff,0x48,0x48,0x48,0xff,0x3d,0x3d, + 0x3d,0xff,0x24,0x24,0x24,0xff,0x82,0x27,0x27,0x27,0xff,0x01,0x2d,0x2d,0x2d, + 0xff,0x82,0x35,0x35,0x35,0xff,0x07,0x34,0x34,0x34,0xff,0x33,0x34,0x33,0xff, + 0x33,0x33,0x33,0xff,0x33,0x34,0x34,0xff,0x26,0x26,0x27,0xdc,0x18,0x18,0x18, + 0x3b,0x0e,0x0f,0x0e,0x03,0x9e,0x00,0x00,0x00,0x00,0x05,0x03,0x03,0x03,0x01, + 0x09,0x09,0x09,0x1e,0x12,0x12,0x12,0xae,0x21,0x21,0x21,0xff,0x24,0x24,0x24, + 0xff,0x82,0x23,0x23,0x23,0xff,0x04,0x21,0x21,0x21,0xff,0x1f,0x1f,0x1f,0xff, + 0x1e,0x1e,0x1e,0xff,0x1d,0x1d,0x1d,0xff,0x82,0x1b,0x1b,0x1b,0xff,0x05,0x19, + 0x19,0x19,0xff,0x17,0x17,0x17,0xff,0x47,0x47,0x47,0xff,0x3d,0x3d,0x3d,0xff, + 0x24,0x24,0x24,0xff,0x82,0x27,0x27,0x27,0xff,0x05,0x29,0x29,0x29,0xff,0x31, + 0x30,0x30,0xff,0x34,0x34,0x34,0xff,0x33,0x33,0x33,0xff,0x32,0x33,0x32,0xff, + 0x82,0x31,0x31,0x31,0xff,0x03,0x30,0x30,0x31,0xff,0x20,0x21,0x20,0xba,0x14, + 0x14,0x14,0x1d,0x9e,0x00,0x00,0x00,0x00,0x12,0x06,0x06,0x06,0x12,0x0f,0x0f, + 0x0f,0x8c,0x1f,0x1f,0x1f,0xfe,0x24,0x24,0x24,0xff,0x23,0x23,0x23,0xff,0x24, + 0x24,0x24,0xff,0x23,0x23,0x23,0xff,0x21,0x21,0x21,0xff,0x20,0x20,0x20,0xff, + 0x1f,0x1e,0x1e,0xff,0x1d,0x1d,0x1d,0xff,0x1b,0x1c,0x1b,0xff,0x1b,0x1a,0x1b, + 0xff,0x19,0x19,0x19,0xff,0x17,0x17,0x17,0xff,0x48,0x48,0x48,0xff,0x3f,0x3f, + 0x3f,0xff,0x24,0x24,0x24,0xff,0x83,0x27,0x27,0x27,0xff,0x05,0x2c,0x2c,0x2c, + 0xff,0x33,0x32,0x33,0xff,0x32,0x32,0x32,0xff,0x31,0x31,0x31,0xff,0x30,0x30, + 0x30,0xff,0x82,0x2f,0x2f,0x2f,0xff,0x03,0x2d,0x2d,0x2d,0xff,0x1a,0x19,0x1a, + 0x98,0x08,0x08,0x08,0x0e,0x9c,0x00,0x00,0x00,0x00,0x05,0x00,0x00,0x00,0x07, + 0x0e,0x0d,0x0d,0x69,0x1c,0x1c,0x1c,0xf2,0x25,0x25,0x25,0xff,0x24,0x24,0x24, + 0xff,0x82,0x25,0x25,0x25,0xff,0x15,0x23,0x23,0x23,0xff,0x21,0x21,0x21,0xff, + 0x20,0x20,0x20,0xff,0x1f,0x1f,0x1f,0xff,0x1d,0x1d,0x1d,0xff,0x1b,0x1c,0x1b, + 0xff,0x1a,0x1a,0x1a,0xff,0x19,0x19,0x19,0xff,0x17,0x17,0x17,0xff,0x4b,0x4a, + 0x4a,0xff,0x41,0x41,0x41,0xff,0x24,0x23,0x24,0xff,0x27,0x27,0x27,0xff,0x26, + 0x26,0x26,0xff,0x25,0x25,0x25,0xff,0x29,0x29,0x29,0xff,0x31,0x31,0x32,0xff, + 0x38,0x38,0x38,0xff,0x3c,0x3c,0x3c,0xff,0x36,0x36,0x36,0xff,0x2f,0x2f,0x2f, + 0xff,0x82,0x2e,0x2e,0x2e,0xff,0x03,0x28,0x28,0x28,0xf9,0x12,0x13,0x12,0x6e, + 0x0c,0x0b,0x0f,0x0b,0x9b,0x00,0x00,0x00,0x00,0x04,0x0c,0x0c,0x0c,0x43,0x1b, + 0x1a,0x1a,0xe2,0x25,0x26,0x26,0xff,0x24,0x24,0x24,0xff,0x83,0x25,0x25,0x25, + 0xff,0x15,0x23,0x23,0x23,0xff,0x22,0x22,0x22,0xff,0x20,0x20,0x20,0xff,0x1f, + 0x1f,0x1f,0xff,0x1d,0x1d,0x1d,0xff,0x1c,0x1c,0x1c,0xff,0x1b,0x1b,0x1b,0xff, + 0x19,0x19,0x19,0xff,0x17,0x17,0x17,0xff,0x4c,0x4c,0x4c,0xff,0x44,0x44,0x44, + 0xff,0x23,0x22,0x23,0xff,0x26,0x26,0x26,0xff,0x26,0x26,0x25,0xff,0x27,0x27, + 0x27,0xff,0x2e,0x2f,0x2e,0xff,0x3c,0x42,0x38,0xff,0x41,0x4b,0x3c,0xff,0x3c, + 0x42,0x39,0xff,0x3b,0x3c,0x3b,0xff,0x32,0x32,0x32,0xff,0x82,0x2c,0x2c,0x2c, + 0xff,0x03,0x2d,0x2d,0x2d,0xff,0x23,0x23,0x22,0xe3,0x1b,0x1a,0x1e,0x51,0x9b, + 0x00,0x00,0x00,0x00,0x01,0x12,0x12,0x12,0xaf,0x82,0x26,0x26,0x26,0xff,0x01, + 0x25,0x26,0x26,0xff,0x83,0x25,0x25,0x25,0xff,0x1a,0x23,0x23,0x23,0xff,0x22, + 0x22,0x22,0xff,0x21,0x21,0x21,0xff,0x1f,0x1f,0x1f,0xff,0x1e,0x1e,0x1e,0xff, + 0x1c,0x1c,0x1c,0xff,0x1b,0x1b,0x1b,0xff,0x1a,0x1a,0x1a,0xff,0x16,0x16,0x16, + 0xff,0x4e,0x4e,0x4e,0xff,0x47,0x47,0x47,0xff,0x22,0x22,0x22,0xff,0x26,0x25, + 0x25,0xff,0x27,0x27,0x27,0xff,0x30,0x31,0x30,0xff,0x36,0x3e,0x32,0xff,0x44, + 0x60,0x28,0xff,0x50,0x7b,0x1c,0xff,0x36,0x50,0x1d,0xff,0x31,0x37,0x2f,0xff, + 0x38,0x38,0x38,0xff,0x2e,0x2e,0x2e,0xff,0x2b,0x2b,0x2b,0xff,0x2e,0x2e,0x2e, + 0xff,0x33,0x34,0x33,0xfc,0x27,0x26,0x29,0xb1,0x9b,0x00,0x00,0x00,0x00,0x04, + 0x10,0x10,0x10,0xa6,0x1b,0x1b,0x1b,0xff,0x21,0x20,0x21,0xff,0x26,0x26,0x26, + 0xff,0x82,0x27,0x27,0x27,0xff,0x06,0x25,0x25,0x25,0xff,0x24,0x24,0x24,0xff, + 0x22,0x22,0x22,0xff,0x21,0x21,0x21,0xff,0x1f,0x1f,0x1f,0xff,0x1d,0x1d,0x1d, + 0xff,0x82,0x1c,0x1c,0x1c,0xff,0x13,0x1a,0x1a,0x1a,0xff,0x17,0x17,0x17,0xff, + 0x50,0x50,0x50,0xff,0x4a,0x4a,0x4a,0xff,0x22,0x22,0x22,0xff,0x25,0x25,0x25, + 0xff,0x28,0x28,0x28,0xff,0x31,0x33,0x32,0xff,0x34,0x4a,0x26,0xff,0x58,0x95, + 0x12,0xff,0x7d,0xcd,0x0b,0xff,0x51,0x81,0x14,0xff,0x29,0x34,0x22,0xff,0x36, + 0x37,0x36,0xff,0x38,0x38,0x38,0xff,0x32,0x32,0x32,0xff,0x34,0x34,0x34,0xff, + 0x31,0x31,0x31,0xfb,0x22,0x22,0x23,0xa7,0x9b,0x00,0x00,0x00,0x00,0x05,0x06, + 0x06,0x06,0x42,0x0b,0x0b,0x0b,0xd8,0x11,0x11,0x11,0xfb,0x19,0x19,0x19,0xff, + 0x20,0x20,0x20,0xff,0x82,0x25,0x25,0x25,0xff,0x1a,0x24,0x24,0x24,0xff,0x22, + 0x22,0x22,0xff,0x21,0x21,0x21,0xff,0x1f,0x1f,0x1f,0xff,0x1e,0x1e,0x1e,0xff, + 0x1d,0x1d,0x1d,0xff,0x1c,0x1c,0x1c,0xff,0x1a,0x1a,0x1a,0xff,0x16,0x17,0x17, + 0xff,0x51,0x51,0x51,0xff,0x4d,0x4d,0x4d,0xff,0x22,0x22,0x22,0xff,0x25,0x25, + 0x25,0xff,0x27,0x27,0x28,0xff,0x32,0x34,0x32,0xff,0x37,0x4e,0x26,0xff,0x53, + 0x91,0x12,0xff,0x6b,0xb6,0x0f,0xff,0x4d,0x7a,0x19,0xff,0x2f,0x39,0x28,0xff, + 0x37,0x38,0x38,0xff,0x3b,0x3b,0x3a,0xff,0x2f,0x2f,0x2f,0xff,0x25,0x25,0x25, + 0xfb,0x1a,0x1a,0x1a,0xd0,0x0e,0x0e,0x10,0x4f,0x9b,0x00,0x00,0x00,0x00,0x0b, + 0x07,0x07,0x07,0x08,0x07,0x07,0x07,0x50,0x09,0x09,0x09,0x9b,0x0b,0x0b,0x0b, + 0xd8,0x10,0x10,0x10,0xfa,0x16,0x16,0x16,0xff,0x1c,0x1c,0x1c,0xff,0x20,0x20, + 0x20,0xff,0x22,0x22,0x22,0xff,0x20,0x21,0x20,0xff,0x1e,0x1e,0x1e,0xff,0x83, + 0x1d,0x1d,0x1d,0xff,0x13,0x1b,0x1b,0x1b,0xff,0x16,0x16,0x16,0xff,0x51,0x51, + 0x51,0xff,0x4e,0x4e,0x4e,0xff,0x22,0x22,0x22,0xff,0x24,0x24,0x24,0xff,0x26, + 0x26,0x26,0xff,0x31,0x32,0x31,0xff,0x2f,0x38,0x2a,0xff,0x33,0x4c,0x20,0xff, + 0x41,0x61,0x26,0xff,0x3b,0x4f,0x2d,0xff,0x33,0x37,0x30,0xff,0x2e,0x2e,0x2e, + 0xff,0x24,0x24,0x24,0xfa,0x1a,0x1a,0x1a,0xd6,0x13,0x13,0x13,0x99,0x0f,0x0f, + 0x0e,0x49,0x08,0x08,0x09,0x0c,0x9c,0x00,0x00,0x00,0x00,0x0b,0x06,0x06,0x06, + 0x02,0x07,0x07,0x07,0x20,0x08,0x08,0x08,0x4e,0x09,0x09,0x09,0x93,0x0b,0x0b, + 0x0b,0xd0,0x0f,0x0f,0x0f,0xf9,0x13,0x13,0x13,0xff,0x18,0x18,0x18,0xff,0x1c, + 0x1d,0x1c,0xff,0x1e,0x1e,0x1e,0xff,0x1d,0x1d,0x1d,0xff,0x82,0x1c,0x1c,0x1c, + 0xff,0x11,0x1b,0x1b,0x1b,0xff,0x16,0x16,0x16,0xff,0x52,0x52,0x52,0xff,0x4e, + 0x4e,0x4f,0xff,0x21,0x20,0x21,0xff,0x23,0x23,0x23,0xff,0x25,0x25,0x25,0xff, + 0x31,0x31,0x31,0xff,0x33,0x34,0x33,0xff,0x30,0x33,0x2f,0xff,0x2f,0x34,0x2f, + 0xff,0x29,0x2d,0x29,0xff,0x21,0x21,0x21,0xf9,0x18,0x18,0x19,0xce,0x13,0x13, + 0x13,0x90,0x0f,0x0f,0x0f,0x4b,0x09,0x09,0x09,0x1e,0x9f,0x00,0x00,0x00,0x00, + 0x1d,0x03,0x03,0x03,0x00,0x07,0x07,0x07,0x04,0x07,0x07,0x07,0x1b,0x08,0x08, + 0x08,0x41,0x09,0x09,0x09,0x80,0x0b,0x0b,0x0b,0xc7,0x0d,0x0d,0x0d,0xf5,0x11, + 0x11,0x11,0xff,0x15,0x15,0x15,0xff,0x19,0x19,0x19,0xff,0x1c,0x1c,0x1c,0xff, + 0x1d,0x1d,0x1d,0xff,0x1a,0x1a,0x1a,0xff,0x14,0x14,0x14,0xff,0x53,0x53,0x54, + 0xff,0x51,0x51,0x52,0xff,0x21,0x20,0x21,0xff,0x28,0x28,0x28,0xff,0x2d,0x2d, + 0x2d,0xff,0x31,0x31,0x31,0xff,0x2e,0x2e,0x2d,0xff,0x26,0x26,0x26,0xff,0x1e, + 0x1e,0x1e,0xf5,0x17,0x17,0x17,0xc5,0x13,0x13,0x14,0x7e,0x0f,0x0f,0x0f,0x3f, + 0x0a,0x0a,0x0a,0x1a,0x08,0x08,0x08,0x03,0x03,0x03,0x03,0x00,0xa2,0x00,0x00, + 0x00,0x00,0x18,0x03,0x03,0x03,0x03,0x06,0x06,0x06,0x13,0x09,0x09,0x09,0x32, + 0x09,0x0a,0x0a,0x6d,0x0a,0x0b,0x0b,0xb5,0x0c,0x0c,0x0c,0xe8,0x0f,0x0f,0x0f, + 0xfc,0x13,0x14,0x14,0xff,0x16,0x17,0x17,0xff,0x1b,0x1b,0x1a,0xff,0x16,0x16, + 0x16,0xff,0x4f,0x4f,0x50,0xff,0x55,0x55,0x56,0xff,0x2b,0x2b,0x2b,0xff,0x2d, + 0x2d,0x2c,0xff,0x28,0x28,0x27,0xff,0x21,0x21,0x21,0xfc,0x1b,0x1b,0x1b,0xe6, + 0x15,0x15,0x15,0xb2,0x12,0x11,0x12,0x6a,0x0f,0x0e,0x0f,0x31,0x0d,0x0c,0x0d, + 0x12,0x0e,0x0e,0x0e,0x03,0x07,0x07,0x07,0x00,0xa6,0x00,0x00,0x00,0x00,0x13, + 0x07,0x07,0x06,0x02,0x07,0x08,0x08,0x0c,0x08,0x09,0x09,0x20,0x09,0x08,0x09, + 0x50,0x09,0x09,0x09,0x95,0x0c,0x0c,0x0c,0xd8,0x0e,0x0e,0x0e,0xfa,0x10,0x10, + 0x10,0xff,0x14,0x14,0x14,0xff,0x2e,0x2e,0x2e,0xff,0x35,0x35,0x35,0xff,0x25, + 0x25,0x25,0xff,0x1e,0x1d,0x1d,0xf9,0x17,0x17,0x17,0xd6,0x13,0x13,0x13,0x94, + 0x12,0x12,0x12,0x4e,0x0e,0x0e,0x0e,0x20,0x0b,0x0b,0x0b,0x0c,0x05,0x05,0x05, + 0x02,0xab,0x00,0x00,0x00,0x00,0x0f,0x02,0x02,0x03,0x00,0x07,0x06,0x07,0x06, + 0x08,0x08,0x08,0x10,0x0a,0x0a,0x0a,0x2f,0x07,0x07,0x07,0x69,0x0a,0x0a,0x0a, + 0xb8,0x0e,0x0e,0x0e,0xe9,0x16,0x16,0x16,0xec,0x1b,0x1b,0x1b,0xe7,0x15,0x15, + 0x15,0xb5,0x0d,0x0d,0x0d,0x68,0x0f,0x0e,0x0e,0x2f,0x0f,0x0f,0x0e,0x10,0x0f, + 0x0f,0x0e,0x06,0x01,0x01,0x01,0x01,0xb0,0x00,0x00,0x00,0x00,0x09,0x08,0x08, + 0x08,0x02,0x05,0x05,0x05,0x05,0x0a,0x0a,0x0a,0x0b,0x0e,0x0e,0x0e,0x0e,0x13, + 0x13,0x13,0x0f,0x17,0x17,0x17,0x0e,0x12,0x12,0x12,0x0b,0x07,0x08,0x08,0x05, + 0x0a,0x09,0x09,0x02,0x99,0x00,0x00,0x00,0x00 +}; + +static const GdkPixdata svp_3dvp_pixdata = { + 0x47646b50, /* Pixbuf magic: 'GdkP' */ + 24 + 7569, /* header length + pixel_data length */ + 0x2010002, /* pixdata_type */ + 240, /* rowstride */ + 60, /* width */ + 60, /* height */ + svp_3dvp_pixdata_pixel_data /* pixel_data */ +}; diff --git a/src/libXNVCtrl/NVCtrl.h b/src/libXNVCtrl/NVCtrl.h index ac0abd0..2825f45 100644 --- a/src/libXNVCtrl/NVCtrl.h +++ b/src/libXNVCtrl/NVCtrl.h @@ -46,6 +46,7 @@ #define NV_CTRL_TARGET_TYPE_GVI 4 #define NV_CTRL_TARGET_TYPE_COOLER 5 /* e.g., fan */ #define NV_CTRL_TARGET_TYPE_THERMAL_SENSOR 6 +#define NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER 7 /**************************************************************************/ @@ -102,6 +103,10 @@ * * S: The attribute may be queried using an NV_CTRL_TARGET_TYPE_THERMAL_SENSOR * target type via XNVCTRLQueryTargetAttribute(). + * + * T: The attribute may be queried using an + * NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER target type + * via XNVCTRLQueryTargetAttribute(). * * NOTE: Unless mentioned otherwise, all attributes may be queried using * an NV_CTRL_TARGET_TYPE_X_SCREEN target type via @@ -338,6 +343,7 @@ #define NV_CTRL_STEREO_CHECKERBOARD_PATTERN 8 #define NV_CTRL_STEREO_INVERSE_CHECKERBOARD_PATTERN 9 #define NV_CTRL_STEREO_3D_VISION 10 +#define NV_CTRL_STEREO_3D_VISION_PRO 11 /* * NV_CTRL_EMULATE - controls OpenGL software emulation of future @@ -3025,6 +3031,34 @@ #define NV_CTRL_GPU_PCIE_MAX_LINK_SPEED 361 /* R--GI */ +/* + * NV_CTRL_3D_VISION_PRO_RESET_TRANSCEIVER_TO_FACTORY_SETTINGS - Resets the + * 3D Vision Pro transceiver to its factory settings. + */ +#define NV_CTRL_3D_VISION_PRO_RESET_TRANSCEIVER_TO_FACTORY_SETTINGS 363 /* -W-T */ + +/* + * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL - Controls the channel that is + * currently used by the 3D Vision Pro transceiver. + */ +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL 364 /* RW-T */ + +/* + * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE - Controls the mode in which the + * 3D Vision Pro transceiver operates. + * NV_CTRL_3D_VISION_PRO_TM_LOW_RANGE is bidirectional + * NV_CTRL_3D_VISION_PRO_TM_MEDIUM_RANGE is bidirectional + * NV_CTRL_3D_VISION_PRO_TM_HIGH_RANGE may be bidirectional just up to a + * given range, and unidirectional beyond it + * NV_CTRL_3D_VISION_PRO_TM_COUNT is the total number of + * 3D Vision Pro transceiver modes + */ +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE 365 /* RW-T */ +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_INVALID 0 +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_LOW_RANGE 1 +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_MEDIUM_RANGE 2 +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_HIGH_RANGE 3 +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE_COUNT 4 /* * NV_CTRL_DITHERING_DEPTH - Controls the dithering depth when @@ -3048,17 +3082,106 @@ #define NV_CTRL_CURRENT_DITHERING_DEPTH_8_BITS 2 /* - * NV_CTRL_GVO_ANC_PARITY_COMPUTATION - Controls the SDI device's computation - * of the parity bit (bit 8) for ANC data words. + * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_FREQUENCY - Returns the + * frequency of the channel(in kHz) of the 3D Vision Pro transceiver. + * Use the display_mask parameter to specify the channel number. + */ +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_FREQUENCY 370 /* R--T */ + +/* + * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY - Returns the + * quality of the channel(in percentage) of the 3D Vision Pro transceiver. + * Use the display_mask parameter to specify the channel number. + */ +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY 371 /* R--T */ + +/* + * NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_COUNT - Returns the number of + * channels on the 3D Vision Pro transceiver. + */ +#define NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_COUNT 372 /* R--T */ + +/* + * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES - Puts the 3D Vision Pro + * transceiver into pairing mode to gather additional glasses. + * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_STOP - stops any pairing + * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_BEACON - starts continuous + * pairing via beacon mode + * Any other value, N - Puts the 3D Vision Pro transceiver into + * authenticated pairing mode for N seconds. + */ +#define NV_CTRL_3D_VISION_PRO_PAIR_GLASSES 373 /* -W-T */ +#define NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_STOP 0 +#define NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_BEACON 0xFFFFFFFF + +/* + * NV_CTRL_3D_VISION_PRO_UNPAIR_GLASSES - Tells a specific pair + * of glasses to unpair. The glasses will "forget" the address + * of the 3D Vision Pro transceiver to which they have been paired. + * To unpair all the currently paired glasses, specify + * the glasses id as 0. + */ +#define NV_CTRL_3D_VISION_PRO_UNPAIR_GLASSES 374 /* -W-T */ + +/* + * NV_CTRL_3D_VISION_PRO_DISCOVER_GLASSES - Tells the 3D Vision Pro + * transceiver about the glasses that have been paired using + * NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_BEACON. Unless this is done, + * the 3D Vision Pro transceiver will not know about glasses paired in + * beacon mode. + */ +#define NV_CTRL_3D_VISION_PRO_DISCOVER_GLASSES 375 /* -W-T */ + +/* + * NV_CTRL_3D_VISION_PRO_IDENTIFY_GLASSES - Causes glasses LEDs to + * flash for a short period of time. + */ +#define NV_CTRL_3D_VISION_PRO_IDENTIFY_GLASSES 376 /* -W-T */ + +/* + * NV_CTRL_3D_VISION_PRO_GLASSES_SYNC_CYCLE - Controls the + * sync cycle duration(in milliseconds) of the glasses. + * Use the display_mask parameter to specify the glasses id. */ +#define NV_CTRL_3D_VISION_PRO_GLASSES_SYNC_CYCLE 378 /* RW-T */ +/* + * NV_CTRL_3D_VISION_PRO_GLASSES_MISSED_SYNC_CYCLES - Returns the + * number of state sync cycles recently missed by the glasses. + * Use the display_mask parameter to specify the glasses id. + */ +#define NV_CTRL_3D_VISION_PRO_GLASSES_MISSED_SYNC_CYCLES 379 /* R--T */ + +/* + * NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL - Returns the + * battery level(in percentage) of the glasses. + * Use the display_mask parameter to specify the glasses id. + */ +#define NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL 380 /* R--T */ + +/* NV_CTRL_GVO_ANC_PARITY_COMPUTATION - Controls the SDI device's computation + * of the parity bit (bit 8) for ANC data words. + */ #define NV_CTRL_GVO_ANC_PARITY_COMPUTATION 381 /* RW--- */ #define NV_CTRL_GVO_ANC_PARITY_COMPUTATION_AUTO 0 #define NV_CTRL_GVO_ANC_PARITY_COMPUTATION_ON 1 #define NV_CTRL_GVO_ANC_PARITY_COMPUTATION_OFF 2 +/* + * NV_CTRL_3D_VISION_PRO_GLASSES_PAIR_EVENT - This attribute is sent + * as an event when glasses get paired in response to pair command + * from any of the clients. + */ +#define NV_CTRL_3D_VISION_PRO_GLASSES_PAIR_EVENT 382 /* ---T */ -#define NV_CTRL_LAST_ATTRIBUTE NV_CTRL_GVO_ANC_PARITY_COMPUTATION +/* + * NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT - This attribute is sent + * as an event when glasses get unpaired in response to unpair command + * from any of the clients. + */ +#define NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT 383 /* ---T */ + +#define NV_CTRL_LAST_ATTRIBUTE NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT /**************************************************************************/ @@ -3592,9 +3715,73 @@ #define NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS 34 /* RW-G */ +/* + * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_HARDWARE_REVISION - Returns the + * hardware revision of the 3D Vision Pro transceiver. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_HARDWARE_REVISION 35 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_A - Returns the + * firmware version of chip A of the 3D Vision Pro transceiver. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_A 36 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_A - Returns the + * date of the firmware of chip A of the 3D Vision Pro transceiver. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_A 37 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_B - Returns the + * firmware version of chip B of the 3D Vision Pro transceiver. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_B 38 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_B - Returns the + * date of the firmware of chip B of the 3D Vision Pro transceiver. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_B 39 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_ADDRESS - Returns the RF address + * of the 3D Vision Pro transceiver. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_ADDRESS 40 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_VERSION_A - Returns the + * firmware version of chip A of the glasses. + * Use the display_mask parameter to specify the glasses id. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_VERSION_A 41 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_DATE_A - Returns the + * date of the firmware of chip A of the glasses. + * Use the display_mask parameter to specify the glasses id. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_DATE_A 42 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_ADDRESS - Returns the RF address + * of the glasses. + * Use the display_mask parameter to specify the glasses id. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_ADDRESS 43 /* R--T */ + +/* + * NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME - Controls the name the + * glasses should use. + * Use the display_mask parameter to specify the glasses id. + */ +#define NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME 44 /* RW-T */ + #define NV_CTRL_STRING_LAST_ATTRIBUTE \ - NV_CTRL_STRING_GPU_CURRENT_CLOCK_FREQS + NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME /**************************************************************************/ @@ -3877,8 +4064,23 @@ #define NV_CTRL_BINARY_DATA_THERMAL_SENSORS_USED_BY_GPU 12 /* R--G */ +/* + * NV_CTRL_BINARY_DATA_GLASSES_PAIRED_TO_3D_VISION_PRO_TRANSCEIVER - Returns + * the id of the glasses that are currently paired to the given + * 3D Vision Pro transceiver. + * + * The format of the returned data is: + * + * 4 CARD32 number of glasses + * 4 * n CARD32 id of glasses + * + * This attribute can only be queried through XNVCTRLQueryTargetBinaryData() + * using a NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER target. + */ +#define NV_CTRL_BINARY_DATA_GLASSES_PAIRED_TO_3D_VISION_PRO_TRANSCEIVER 13 /* R--T */ + #define NV_CTRL_BINARY_DATA_LAST_ATTRIBUTE \ - NV_CTRL_BINARY_DATA_THERMAL_SENSORS_USED_BY_GPU + NV_CTRL_BINARY_DATA_GLASSES_PAIRED_TO_3D_VISION_PRO_TRANSCEIVER /**************************************************************************/ @@ -4121,6 +4323,8 @@ * ATTRIBUTE_TYPE_GVI - Attribute is valid for Graphics Video In target * types. * ATTRIBUTE_TYPE_COOLER - Attribute is valid for Cooler target types. + * ATTRIBUTE_TYPE_3D_VISION_PRO_TRANSCEIVER - Attribute is valid for 3D Vision + * Pro Transceiver target types. * * See 'Key to Integer Attribute "Permissions"' at the top of this * file for a description of what these permission bits mean. @@ -4146,6 +4350,7 @@ #define ATTRIBUTE_TYPE_GVI 0x100 #define ATTRIBUTE_TYPE_COOLER 0x200 #define ATTRIBUTE_TYPE_THERMAL_SENSOR 0x400 +#define ATTRIBUTE_TYPE_3D_VISION_PRO_TRANSCEIVER 0x800 typedef struct _NVCTRLAttributeValidValues { int type; diff --git a/src/libXNVCtrl/nv_control.h b/src/libXNVCtrl/nv_control.h index a6b8546..6d10389 100644 --- a/src/libXNVCtrl/nv_control.h +++ b/src/libXNVCtrl/nv_control.h @@ -50,6 +50,7 @@ * 1.23 Added SENSOR TargetType * 1.24 Fixed a bug where SLI_MOSAIC_MODE_AVAILABLE attribute would * report false positives via the GPU and X screen target types + * 1.25 Added 3D_VISION_PRO_TRANSCEIVER TargetType */ #ifndef __NVCONTROL_H @@ -60,7 +61,7 @@ #define NV_CONTROL_NAME "NV-CONTROL" #define NV_CONTROL_MAJOR 1 -#define NV_CONTROL_MINOR 24 +#define NV_CONTROL_MINOR 25 #define X_nvCtrlQueryExtension 0 #define X_nvCtrlIsNv 1 diff --git a/src/parse.c b/src/parse.c index 576ab5b..10a120b 100644 --- a/src/parse.c +++ b/src/parse.c @@ -320,6 +320,31 @@ AttributeTableEntry attributeTable[] = { { "XVideoBlitterSyncToVBlank", NV_CTRL_ATTR_XV_BLITTER_SYNC_TO_VBLANK, V, "Enables sync to vertical blanking for X video blitter adaptor." }, { "XVideoSyncToDisplay", NV_CTRL_XV_SYNC_TO_DISPLAY, D|Z, "Controls which display device is synced to by the texture and blitter adaptors when they are set to synchronize to the vertical blanking." }, + /* 3D Vision Pro */ + {"3DVisionProResetTransceiverToFactorySettings", NV_CTRL_3D_VISION_PRO_RESET_TRANSCEIVER_TO_FACTORY_SETTINGS, N, "Resets the 3D Vision Pro transceiver to its factory settings."}, + {"3DVisionProTransceiverChannel", NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL, N, "Controls the channel that is currently used by the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverMode", NV_CTRL_3D_VISION_PRO_TRANSCEIVER_MODE, N, "Controls the mode in which the 3D Vision Pro transceiver operates."}, + {"3DVisionProTransceiverChannelFrequency", NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_FREQUENCY, N, "Returns the frequency of the channel(in kHz) of the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverChannelQuality", NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_QUALITY, N, "Returns the quality of the channel(in percentage) of the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverChannelCount", NV_CTRL_3D_VISION_PRO_TRANSCEIVER_CHANNEL_COUNT, N, "Returns the number of channels on the 3D Vision Pro transceiver."}, + {"3DVisionProPairGlasses", NV_CTRL_3D_VISION_PRO_PAIR_GLASSES, N, "Puts the 3D Vision Pro transceiver into pairing mode to gather additional glasses."}, + {"3DVisionProUnpairGlasses", NV_CTRL_3D_VISION_PRO_UNPAIR_GLASSES, N, "Tells a specific pair of glasses to unpair."}, + {"3DVisionProDiscoverGlasses", NV_CTRL_3D_VISION_PRO_DISCOVER_GLASSES, N, "Tells the 3D Vision Pro transceiver about the glasses that have been paired using NV_CTRL_3D_VISION_PRO_PAIR_GLASSES_BEACON."}, + {"3DVisionProIdentifyGlasses", NV_CTRL_3D_VISION_PRO_IDENTIFY_GLASSES, N, "Causes glasses LEDs to flash for a short period of time."}, + {"3DVisionProGlassesSyncCycle", NV_CTRL_3D_VISION_PRO_GLASSES_SYNC_CYCLE, N, "Controls the sync cycle duration(in milliseconds) of the glasses."}, + {"3DVisionProGlassesMissedSyncCycles", NV_CTRL_3D_VISION_PRO_GLASSES_MISSED_SYNC_CYCLES, N, "Returns the number of state sync cycles recently missed by the glasses."}, + {"3DVisionProGlassesBatteryLevel", NV_CTRL_3D_VISION_PRO_GLASSES_BATTERY_LEVEL, N, "Returns the battery level(in percentage) of the glasses."}, + {"3DVisionProTransceiverHardwareRevision", NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_HARDWARE_REVISION, S|N, "Returns the hardware revision of the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverFirmwareVersionA", NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_A, S|N, "Returns the firmware version of chip A of the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverFirmwareDateA", NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_A, S|N, "Returns the date of the firmware of chip A of the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverFirmwareVersionB", NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_VERSION_B, S|N, "Returns the firmware version of chip B of the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverFirmwareDateB", NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_FIRMWARE_DATE_B, S|N, "Returns the date of the firmware of chip B of the 3D Vision Pro transceiver."}, + {"3DVisionProTransceiverAddress", NV_CTRL_STRING_3D_VISION_PRO_TRANSCEIVER_ADDRESS, S|N, "Returns the RF address of the 3D Vision Pro transceiver."}, + {"3DVisionProGlassesFirmwareVersionA", NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_VERSION_A, S|N, "Returns the firmware version of chip A of the glasses."}, + {"3DVisionProGlassesFirmwareDateA", NV_CTRL_STRING_3D_VISION_PRO_GLASSES_FIRMWARE_DATE_A, S|N, "Returns the date of the firmware of chip A of the glasses."}, + {"3DVisionProGlassesAddress", NV_CTRL_STRING_3D_VISION_PRO_GLASSES_ADDRESS, S|N, "Returns the RF address of the glasses."}, + {"3DVisionProGlassesName", NV_CTRL_STRING_3D_VISION_PRO_GLASSES_NAME, S|N, "Controls the name the glasses should use."}, + { NULL, 0, 0, NULL } }; @@ -345,7 +370,7 @@ AttributeTableEntry attributeTable[] = { * about. */ -#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_GVO_ANC_PARITY_COMPUTATION +#if NV_CTRL_LAST_ATTRIBUTE != NV_CTRL_3D_VISION_PRO_GLASSES_UNPAIR_EVENT #warning "Have you forgotten to add a new integer attribute to attributeTable?" #endif @@ -413,6 +438,14 @@ TargetTypeEntry targetTypeTable[] = { ATTRIBUTE_TYPE_THERMAL_SENSOR, /* permission_bit */ NV_FALSE, /* uses_display_devices */ 1, 23 }, /* required major,minor protocol rev */ + + { "3D Vision Pro Transceiver", /* name */ + "svp", /* parsed_name */ + NVIDIA_3D_VISION_PRO_TRANSCEIVER_TARGET, /* target_index */ + NV_CTRL_TARGET_TYPE_3D_VISION_PRO_TRANSCEIVER, /* nvctrl */ + ATTRIBUTE_TYPE_3D_VISION_PRO_TRANSCEIVER, /* permission_bit */ + NV_FALSE, /* uses_display_devices */ + 1, 25 }, /* required major,minor protocol rev */ { NULL, NULL, 0, 0, 0 }, }; diff --git a/src/parse.h b/src/parse.h index 852e32b..47d8506 100644 --- a/src/parse.h +++ b/src/parse.h @@ -151,7 +151,8 @@ extern AttributeTableEntry attributeTable[]; #define GVI_TARGET 4 #define COOLER_TARGET 5 #define THERMAL_SENSOR_TARGET 6 -#define MAX_TARGET_TYPES 7 +#define NVIDIA_3D_VISION_PRO_TRANSCEIVER_TARGET 7 +#define MAX_TARGET_TYPES 8 diff --git a/src/query-assign.c b/src/query-assign.c index 61d1df6..5a606df 100644 --- a/src/query-assign.c +++ b/src/query-assign.c @@ -424,6 +424,11 @@ static int process_attribute_queries(int num, char **queries, continue; } + if (nv_strcasecmp(queries[query], "svps")) { + query_all_targets(display_name, NVIDIA_3D_VISION_PRO_TRANSCEIVER_TARGET); + continue; + } + /* call the parser to parse queries[query] */ ret = nv_parse_attribute_string(queries[query], NV_PARSER_QUERY, &a); @@ -1242,7 +1247,8 @@ static int print_target_connections(CtrlHandles *h, product_name = get_vcs_name(h->targets[target_index].t[ pData[i] ].h); break; - + + case NVIDIA_3D_VISION_PRO_TRANSCEIVER_TARGET: case THERMAL_SENSOR_TARGET: case COOLER_TARGET: case FRAMELOCK_TARGET: @@ -1348,7 +1354,13 @@ static int query_all_targets(const char *display_name, const int target_index) t = &h->targets[target_index].t[i]; str = NULL; - if (target_index == THERMAL_SENSOR_TARGET) { + if (target_index == NVIDIA_3D_VISION_PRO_TRANSCEIVER_TARGET) { + /* for 3D Vision Pro transceiver, create the product name */ + + product_name = malloc(32); + snprintf(product_name, 32, "3D Vision Pro Transceiver %d", i); + + } else if (target_index == THERMAL_SENSOR_TARGET) { /* for sensor, create the product name */ product_name = malloc(32); diff --git a/src/xpm_data/src.mk b/src/xpm_data/src.mk index 360d582..a4432b4 100644 --- a/src/xpm_data/src.mk +++ b/src/xpm_data/src.mk @@ -9,3 +9,16 @@ LIB_XPM_DATA_EXTRA_DIST += green_xpm.h LIB_XPM_DATA_EXTRA_DIST += red_xpm.h LIB_XPM_DATA_EXTRA_DIST += rgb_xpm.h LIB_XPM_DATA_EXTRA_DIST += src.mk +LIB_XPM_DATA_EXTRA_DIST += svp_add_glasses.h +LIB_XPM_DATA_EXTRA_DIST += svp_autopick_next_channel.h +LIB_XPM_DATA_EXTRA_DIST += svp_battery_0.h +LIB_XPM_DATA_EXTRA_DIST += svp_battery_100.h +LIB_XPM_DATA_EXTRA_DIST += svp_battery_25.h +LIB_XPM_DATA_EXTRA_DIST += svp_battery_50.h +LIB_XPM_DATA_EXTRA_DIST += svp_battery_75.h +LIB_XPM_DATA_EXTRA_DIST += svp_status_excellent.h +LIB_XPM_DATA_EXTRA_DIST += svp_status_good.h +LIB_XPM_DATA_EXTRA_DIST += svp_status_low.h +LIB_XPM_DATA_EXTRA_DIST += svp_status_nosignal.h +LIB_XPM_DATA_EXTRA_DIST += svp_status_verygood.h +LIB_XPM_DATA_EXTRA_DIST += svp_status_verylow.h diff --git a/src/xpm_data/svp_add_glasses.h b/src/xpm_data/svp_add_glasses.h new file mode 100644 index 0000000..5067682 --- /dev/null +++ b/src/xpm_data/svp_add_glasses.h @@ -0,0 +1,1590 @@ +/* XPM */ +static const char * svp_add_glasses_xpm[] = { +"320 80 1507 2", +" c #878687", +". c #878787", +"+ c #868787", +"@ c #868786", +"# c #878786", +"$ c #878686", +"% c #868687", +"& c #868686", +"* c #868685", +"= c #868586", +"- c #868585", +"; c #858585", +"> c #858586", +", c #858686", +"' c #858685", +") c #858485", +"! c #848585", +"~ c #858584", +"{ c #848485", +"] c #848584", +"^ c #858484", +"/ c #848484", +"( c #838484", +"_ c #848384", +": c #838384", +"< c #838383", +"[ c #848483", +"} c #848383", +"| c #838483", +"1 c #828383", +"2 c #838283", +"3 c #838382", +"4 c #888888", +"5 c #898989", +"6 c #838282", +"7 c #828282", +"8 c #828283", +"9 c #828382", +"0 c #8B8B8B", +"a c #8D8D8D", +"b c #8D8D8E", +"c c #8E8D8D", +"d c #8B8B8C", +"e c #818282", +"f c #828182", +"g c #828181", +"h c #828281", +"i c #818182", +"j c #818281", +"k c #818181", +"l c #908F8F", +"m c #929292", +"n c #939393", +"o c #929393", +"p c #8F9090", +"q c #808181", +"r c #818180", +"s c #818081", +"t c #808081", +"u c #959595", +"v c #989898", +"w c #989897", +"x c #808080", +"y c #7F8180", +"z c #818080", +"A c #808180", +"B c #7F8080", +"C c #807F80", +"D c #9A9A9A", +"E c #9D9D9D", +"F c #9D9D9E", +"G c #81807F", +"H c #80807F", +"I c #7F807F", +"J c #7F7F80", +"K c #7F7F7F", +"L c #807F7F", +"M c #9F9F9F", +"N c #A4A3A3", +"O c #A3A3A3", +"P c #A3A3A4", +"Q c #A4A4A4", +"R c #7F7F7E", +"S c #7E7F7F", +"T c #7F7E7E", +"U c #7E7E7F", +"V c #7E7E7E", +"W c #7F7E7F", +"X c #7E7F7E", +"Y c #A5A5A4", +"Z c #A9A9A9", +"` c #A9AAAA", +" . c #AAA9A9", +".. c #A1A1A2", +"+. c #7E7D7E", +"@. c #7E7E7D", +"#. c #7D7D7E", +"$. c #7D7E7E", +"%. c #7E7D7D", +"&. c #7D7E7D", +"*. c #7D7D7D", +"=. c #A8A9A9", +"-. c #AFAFAF", +";. c #AFAEAF", +">. c #AFAFAE", +",. c #AEAFAE", +"'. c #A6A6A6", +"). c #7C7D7D", +"!. c #7D7C7D", +"~. c #7D7D7C", +"{. c #7C7C7D", +"]. c #ADADAD", +"^. c #B4B4B4", +"/. c #B5B5B4", +"(. c #AAAAAA", +"_. c #7C7D7C", +":. c #7D7C7C", +"<. c #7C7C7C", +"[. c #B1B1B1", +"}. c #B9B9B9", +"|. c #ADAEAD", +"1. c #7B7B7B", +"2. c #7C7B7B", +"3. c #7B7C7B", +"4. c #7B7B7C", +"5. c #7C7B7C", +"6. c #7C7C7B", +"7. c #7B7C7C", +"8. c #B3B3B3", +"9. c #BBBBBB", +"0. c #B0AFAF", +"a. c #7B7B7A", +"b. c #7A7A7A", +"c. c #7A7B7B", +"d. c #7A7A7B", +"e. c #7B7A7A", +"f. c #7A7B7A", +"g. c #7B7A7B", +"h. c #B6B6B6", +"i. c #BDBDBD", +"j. c #B2B2B2", +"k. c #797A7A", +"l. c #79797A", +"m. c #7A797A", +"n. c #7A7979", +"o. c #7A7A79", +"p. c #797A79", +"q. c #797979", +"r. c #8C8C8C", +"s. c #BABABA", +"t. c #BCBCBC", +"u. c #BCBDBC", +"v. c #BDBCBD", +"w. c #BDBCBC", +"x. c #898888", +"y. c #787978", +"z. c #797978", +"A. c #797878", +"B. c #787979", +"C. c #787878", +"D. c #797879", +"E. c #787879", +"F. c #969696", +"G. c #777877", +"H. c #777878", +"I. c #787778", +"J. c #787777", +"K. c #787877", +"L. c #777778", +"M. c #777777", +"N. c #A0A0A0", +"O. c #BBBCBC", +"P. c #BCBBBB", +"Q. c #BCBBBC", +"R. c #BCBCBB", +"S. c #9C9C9C", +"T. c #777677", +"U. c #767777", +"V. c #777776", +"W. c #767677", +"X. c #777676", +"Y. c #767776", +"Z. c #767676", +"`. c #757675", +" + c #767675", +".+ c #757676", +"++ c #757576", +"@+ c #767876", +"#+ c #767576", +"$+ c #747575", +"%+ c #747474", +"&+ c #737373", +"*+ c #727272", +"=+ c #737474", +"-+ c #757574", +";+ c #757575", +">+ c #767575", +",+ c #BBBBBA", +"'+ c #AEAFAF", +")+ c #757475", +"!+ c #747574", +"~+ c #747374", +"{+ c #727273", +"]+ c #717171", +"^+ c #707070", +"/+ c #6F6F6F", +"(+ c #6F6F6E", +"_+ c #6F7070", +":+ c #707171", +"<+ c #727172", +"[+ c #737372", +"}+ c #747473", +"|+ c #B7B7B7", +"1+ c #737473", +"2+ c #70706F", +"3+ c #6D6D6D", +"4+ c #6C6C6C", +"5+ c #6C6B6C", +"6+ c #6E6E6E", +"7+ c #737374", +"8+ c #909090", +"9+ c #B8B8B8", +"0+ c #747373", +"a+ c #515151", +"b+ c #393939", +"c+ c #474747", +"d+ c #575757", +"e+ c #666666", +"f+ c #6B6B6B", +"g+ c #6A6A6A", +"h+ c #9B9B9B", +"i+ c #979797", +"j+ c #545454", +"k+ c #343434", +"l+ c #424142", +"m+ c #646464", +"n+ c #737272", +"o+ c #727372", +"p+ c #727171", +"q+ c #6F706F", +"r+ c #4F4F4F", +"s+ c #262626", +"t+ c #2D2D2D", +"u+ c #2E2E2E", +"v+ c #353535", +"w+ c #3D3D3D", +"x+ c #444444", +"y+ c #484848", +"z+ c #4C4C4C", +"A+ c #525252", +"B+ c #5B5B5B", +"C+ c #626263", +"D+ c #686868", +"E+ c #696969", +"F+ c #A0A1A0", +"G+ c #303030", +"H+ c #1B1B1B", +"I+ c #1A1A1A", +"J+ c #191919", +"K+ c #232323", +"L+ c #424242", +"M+ c #606060", +"N+ c #727271", +"O+ c #707072", +"P+ c #717172", +"Q+ c #717170", +"R+ c #717072", +"S+ c #717271", +"T+ c #717071", +"U+ c #696869", +"V+ c #6C6B6B", +"W+ c #383838", +"X+ c #3E3E3E", +"Y+ c #404040", +"Z+ c #414141", +"`+ c #5C5C5C", +" @ c #656565", +".@ c #696A69", +"+@ c #696868", +"@@ c #717070", +"#@ c #636463", +"$@ c #1E1E1F", +"%@ c #343435", +"&@ c #545353", +"*@ c #717272", +"=@ c #707071", +"-@ c #706F71", +";@ c #706F70", +">@ c #6F6F70", +",@ c #6F6E6F", +"'@ c #676767", +")@ c #6A6A6B", +"!@ c #626262", +"~@ c #454545", +"{@ c #3B3B3B", +"]@ c #3A3A3A", +"^@ c #373737", +"/@ c #363636", +"(@ c #4A4A4A", +"_@ c #565656", +":@ c #616161", +"<@ c #656666", +"[@ c #666767", +"}@ c #686969", +"|@ c #6D6D6E", +"1@ c #6E6E6D", +"2@ c #6F766B", +"3@ c #6C8361", +"4@ c #6A9057", +"5@ c #689B4F", +"6@ c #679F4C", +"7@ c #679D4C", +"8@ c #699652", +"9@ c #6B8B5A", +"0@ c #6E7D65", +"a@ c #70726E", +"b@ c #707170", +"c@ c #555555", +"d@ c #181818", +"e@ c #191819", +"f@ c #1B1B1C", +"g@ c #1C1C1C", +"h@ c #272727", +"i@ c #474847", +"j@ c #6E6F6F", +"k@ c #706E6F", +"l@ c #6E706F", +"m@ c #706F6F", +"n@ c #5F5F5F", +"o@ c #3C3C3C", +"p@ c #323332", +"q@ c #505150", +"r@ c #5D5D5D", +"s@ c #6E6E6F", +"t@ c #6D7569", +"u@ c #698C57", +"v@ c #64AB41", +"w@ c #60C12F", +"x@ c #5FC929", +"y@ c #5ECC28", +"z@ c #5ECD27", +"A@ c #5ECC27", +"B@ c #5ECB28", +"C@ c #5FC82B", +"D@ c #62BA36", +"E@ c #669E4A", +"F@ c #6C8161", +"G@ c #6E716E", +"H@ c #676867", +"I@ c #464646", +"J@ c #2A2A2A", +"K@ c #171717", +"L@ c #1D1D1D", +"M@ c #232222", +"N@ c #585959", +"O@ c #706F6E", +"P@ c #6D6E6E", +"Q@ c #6E6D6D", +"R@ c #6E6D6E", +"S@ c #6D6E6D", +"T@ c #6D6D6C", +"U@ c #6B6A6B", +"V@ c #676868", +"W@ c #636464", +"X@ c #616262", +"Y@ c #636363", +"Z@ c #4B4B4B", +"`@ c #404041", +" # c #2C2C2C", +".# c #292929", +"+# c #282828", +"@# c #4D4D4D", +"## c #656465", +"$# c #687D5E", +"%# c #62A541", +"&# c #5EC729", +"*# c #5DCD25", +"=# c #60BE32", +"-# c #64A942", +";# c #669A4D", +"># c #689153", +",# c #689452", +"'# c #659F48", +")# c #63B13C", +"!# c #5FC62B", +"~# c #5DCF25", +"{# c #60BD32", +"]# c #679550", +"^# c #6D7667", +"/# c #5B5A5B", +"(# c #39393A", +"_# c #1E1E1E", +":# c #1F1F1F", +"<# c #515150", +"[# c #6E6D6F", +"}# c #6D6C6D", +"|# c #6C6D6D", +"1# c #676766", +"2# c #626162", +"3# c #5E5E5E", +"4# c #595959", +"5# c #4E4E4E", +"6# c #222222", +"7# c #212121", +"8# c #313131", +"9# c #373838", +"0# c #5A5A5A", +"a# c #627E55", +"b# c #5EB234", +"c# c #5BCD23", +"d# c #5EBA31", +"e# c #64954B", +"f# c #687C5F", +"g# c #6B7169", +"h# c #6D6F6B", +"i# c #6C7567", +"j# c #69875A", +"k# c #64A642", +"l# c #5EC72A", +"m# c #5ECA28", +"n# c #65A046", +"o# c #6B7567", +"p# c #6C6D6C", +"q# c #6C6C6D", +"r# c #505050", +"s# c #2F2F2F", +"t# c #434343", +"u# c #646364", +"v# c #6C6C6B", +"w# c #6B6C6C", +"x# c #6B6C6B", +"y# c #6A6B6B", +"z# c #666766", +"A# c #5D5E5E", +"B# c #5C5B5C", +"C# c #2B2B2B", +"D# c #252525", +"E# c #4A4B4A", +"F# c #5A724E", +"G# c #5DB432", +"H# c #5ACA22", +"I# c #5EA33C", +"J# c #647959", +"K# c #6A696A", +"L# c #6B7168", +"M# c #678D54", +"N# c #5FBC31", +"O# c #5DCC25", +"P# c #649F46", +"Q# c #6B7366", +"R# c #161616", +"S# c #191818", +"T# c #202020", +"U# c #2C2D2D", +"V# c #303131", +"W# c #6B6B6A", +"X# c #585858", +"Y# c #242424", +"Z# c #2D3A27", +"`# c #438C1E", +" $ c #4FBF16", +".$ c #569835", +"+$ c #636E5E", +"@$ c #646463", +"#$ c #678459", +"$$ c #5FBC30", +"%$ c #5DC827", +"&$ c #65914F", +"*$ c #6B6C6A", +"=$ c #6A6B6A", +"-$ c #3A393A", +";$ c #3A3A39", +">$ c #69696A", +",$ c #6A6A69", +"'$ c #696A6A", +")$ c #60605F", +"!$ c #5C5D5C", +"~$ c #565556", +"{$ c #232523", +"]$ c #315F19", +"^$ c #44B30D", +"/$ c #3E9015", +"($ c #34442C", +"_$ c #505151", +":$ c #646663", +"<$ c #656B63", +"[$ c #666C63", +"}$ c #686A65", +"|$ c #658D51", +"1$ c #5FB832", +"2$ c #687C5E", +"3$ c #1C1B1C", +"4$ c #3D3D3C", +"5$ c #383737", +"6$ c #6A6969", +"7$ c #696968", +"8$ c #686869", +"9$ c #686968", +"0$ c #686867", +"a$ c #646565", +"b$ c #5F6060", +"c$ c #535353", +"d$ c #333333", +"e$ c #283521", +"f$ c #3C9112", +"g$ c #43AF0C", +"h$ c #2D5319", +"i$ c #555854", +"j$ c #627B55", +"k$ c #5E9643", +"l$ c #5CA837", +"m$ c #5DAB36", +"n$ c #5F9D41", +"o$ c #648453", +"p$ c #666D63", +"q$ c #676F64", +"r$ c #61A83D", +"s$ c #5CCC23", +"t$ c #639649", +"u$ c #696B68", +"v$ c #222121", +"w$ c #222122", +"x$ c #2A2929", +"y$ c #3E3D3D", +"z$ c #302F30", +"A$ c #535453", +"B$ c #686767", +"C$ c #686768", +"D$ c #676768", +"E$ c #676667", +"F$ c #676666", +"G$ c #575758", +"H$ c #525152", +"I$ c #515051", +"J$ c #4B4B4A", +"K$ c #383837", +"L$ c #2E521C", +"M$ c #43AE0D", +"N$ c #3A8A13", +"O$ c #252F20", +"P$ c #282E26", +"Q$ c #3B6527", +"R$ c #4CA81E", +"S$ c #56C61E", +"T$ c #5BC526", +"U$ c #59C225", +"V$ c #59C922", +"W$ c #5BC029", +"X$ c #609845", +"Y$ c #667161", +"Z$ c #648553", +"`$ c #5CC528", +" % c #5FB235", +".% c #667360", +"+% c #242524", +"@% c #1A191A", +"#% c #323232", +"$% c #666667", +"%% c #656665", +"&% c #656564", +"*% c #646465", +"=% c #646564", +"-% c #656566", +";% c #666665", +">% c #666566", +",% c #666565", +"'% c #626261", +")% c #606160", +"!% c #5E5E5F", +"~% c #595958", +"{% c #555556", +"]% c #535354", +"^% c #414242", +"/% c #242624", +"(% c #356F18", +"_% c #44B10D", +":% c #326519", +"<% c #222322", +"[% c #294A19", +"}% c #3F9F0E", +"|% c #47B112", +"1% c #458625", +"2% c #4C6C3D", +"3% c #5F7C52", +"4% c #5E9443", +"5% c #5ABC29", +"6% c #5AC425", +"7% c #609148", +"8% c #656762", +"9% c #65725F", +"0% c #5CC12A", +"a% c #647F56", +"b% c #262727", +"c% c #1F1E1E", +"d% c #191A1A", +"e% c #171617", +"f% c #373636", +"g% c #656464", +"h% c #636364", +"i% c #626363", +"j% c #646363", +"k% c #626362", +"l% c #616162", +"m% c #5F5E5F", +"n% c #59595A", +"o% c #545554", +"p% c #4D4D4E", +"q% c #252A23", +"r% c #398214", +"s% c #42A90E", +"t% c #2B4B1C", +"u% c #222A1F", +"v% c #367D13", +"w% c #43B30B", +"x% c #2F6714", +"y% c #272D24", +"z% c #585A56", +"A% c #5F844C", +"B% c #59C025", +"C% c #5BB52E", +"D% c #617558", +"E% c #656864", +"F% c #5FA040", +"G% c #5BC725", +"H% c #62894F", +"I% c #232423", +"J% c #1B1C1B", +"K% c #1A1B1B", +"L% c #2B2B2C", +"M% c #2B2C2B", +"N% c #3B3B3C", +"O% c #636262", +"P% c #606061", +"Q% c #616261", +"R% c #606161", +"S% c #636263", +"T% c #5B5B5A", +"U% c #555454", +"V% c #525151", +"W% c #282E25", +"X% c #3C8E13", +"Y% c #40A30F", +"Z% c #283D1E", +"`% c #25371D", +" & c #3D9B0E", +".& c #3D9A0E", +"+& c #25371C", +"@& c #151515", +"#& c #4F564C", +"$& c #5CA637", +"%& c #58C522", +"&& c #5F814D", +"*& c #609446", +"=& c #5ACA23", +"-& c #608E49", +";& c #232223", +">& c #121112", +",& c #393839", +"'& c #262625", +")& c #29292A", +"!& c #4C4A4B", +"~& c #565757", +"{& c #5F5F60", +"]& c #5F605F", +"^& c #616160", +"/& c #626161", +"(& c #5E5F5E", +"_& c #5D5D5E", +":& c #5B5C5C", +"<& c #565555", +"[& c #4E4F4E", +"}& c #3E3E3D", +"|& c #2A3026", +"1& c #3D9013", +"2& c #40A20F", +"3& c #283B1E", +"4& c #273C1C", +"5& c #3FA40D", +"6& c #3A8D10", +"7& c #232C1E", +"8& c #0F0F0F", +"9& c #4C4D4C", +"0& c #518D31", +"a& c #59C921", +"b& c #5D8548", +"c& c #5F9245", +"d& c #608F48", +"e& c #333332", +"f& c #242323", +"g& c #20201F", +"h& c #131313", +"i& c #3D3D3E", +"j& c #252524", +"k& c #292A29", +"l& c #575656", +"m& c #636362", +"n& c #2B2A2A", +"o& c #605F5F", +"p& c #5E5D5D", +"q& c #5E5D5E", +"r& c #585958", +"s& c #4F4E4E", +"t& c #4A4949", +"u& c #41453F", +"v& c #3D8917", +"w& c #42A80F", +"x& c #2B481D", +"y& c #25361D", +"z& c #3D9A0F", +"A& c #3D9D0D", +"B& c #243819", +"C& c #141414", +"D& c #5F685B", +"E& c #4E9B27", +"F& c #58C422", +"G& c #5B7D4C", +"H& c #616360", +"I& c #5D9B3F", +"J& c #5AC624", +"K& c #5F884B", +"L& c #444544", +"M& c #151514", +"N& c #222323", +"O& c #1E1F1E", +"P& c #1D1C1D", +"Q& c #282829", +"R& c #616060", +"S& c #5D5C5C", +"T& c #5D5C5D", +"U& c #5F5F5E", +"V& c #605F60", +"W& c #5C5D5D", +"X& c #555655", +"Y& c #4D4E4D", +"Z& c #494949", +"`& c #474845", +" * c #4A882B", +".* c #46B310", +"+* c #32601B", +"@* c #21271E", +"#* c #347612", +"$* c #42B20A", +"%* c #39771A", +"&* c #485243", +"** c #646961", +"=* c #55823F", +"-* c #52BC1D", +";* c #50A625", +">* c #5D6E55", +",* c #5F695B", +"'* c #5BAA34", +")* c #5AC126", +"!* c #5F7C51", +"~* c #1C1C1D", +"{* c #151415", +"]* c #262526", +"^* c #292928", +"/* c #353536", +"(* c #2D2C2C", +"_* c #333434", +":* c #616061", +"<* c #5E5F5F", +"[* c #5D5E5D", +"}* c #5C5C5D", +"|* c #595858", +"1* c #535352", +"2* c #2F2F30", +"3* c #5A5A5B", +"4* c #5F5E5E", +"5* c #5D5D5C", +"6* c #464647", +"7* c #487133", +"8* c #4EBA18", +"9* c #3F891B", +"0* c #262D23", +"a* c #314E23", +"b* c #50AC23", +"c* c #5FCB28", +"d* c #6CB647", +"e* c #658E51", +"f* c #4B6F39", +"g* c #3F7E1F", +"h* c #48AF14", +"i* c #4DB41A", +"j* c #45712F", +"k* c #4E514E", +"l* c #5D7A50", +"m* c #59BF27", +"n* c #5AB32E", +"o* c #5F6E58", +"p* c #5B5C5B", +"q* c #212021", +"r* c #151615", +"s* c #333334", +"t* c #333233", +"u* c #252625", +"v* c #414040", +"w* c #5B5A5A", +"x* c #545455", +"y* c #45553C", +"z* c #4BA71D", +"A* c #4EB51A", +"B* c #365527", +"C* c #797D78", +"D* c #7DA06C", +"E* c #60B536", +"F* c #4FBD17", +"G* c #4BB811", +"H* c #4BB810", +"I* c #43B209", +"J* c #47A618", +"K* c #44742D", +"L* c #3D4539", +"M* c #5C6159", +"N* c #5B993B", +"O* c #58CA20", +"P* c #5C973E", +"Q* c #5F625D", +"R* c #252425", +"S* c #212020", +"T* c #222221", +"U* c #4F4E4F", +"V* c #5E5E5D", +"W* c #585859", +"X* c #5B5B5C", +"Y* c #484947", +"Z* c #48802D", +"`* c #4ABC11", +" = c #418A1C", +".= c #545E4F", +"+= c #8F8F91", +"@= c #474843", +"#= c #42562F", +"$= c #477525", +"%= c #4E8E22", +"&= c #4D9121", +"*= c #346815", +"== c #3D5731", +"-= c #40443D", +";= c #5A794A", +">= c #59BE26", +",= c #59BB28", +"'= c #5D7650", +")= c #393838", +"!= c #242525", +"~= c #242425", +"{= c #232322", +"]= c #202120", +"^= c #171618", +"/= c #2B2A2B", +"(= c #272827", +"_= c #313030", +":= c #242423", +"<= c #5D5E5C", +"[= c #121212", +"}= c #585A59", +"|= c #5C5C5B", +"1= c #37482F", +"2= c #56A92C", +"3= c #68D631", +"4= c #87BB6D", +"5= c #747971", +"6= c #484844", +"7= c #424137", +"8= c #4F4E3E", +"9= c #515041", +"0= c #4B4B3C", +"a= c #3B3D2E", +"b= c #24241E", +"c= c #3F3F3F", +"d= c #586A4E", +"e= c #58AA2F", +"f= c #57C720", +"g= c #5A9040", +"h= c #5D605B", +"i= c #262525", +"j= c #3D3C3D", +"k= c #282827", +"l= c #353435", +"m= c #2A2A29", +"n= c #2B2B2A", +"o= c #5D5C5E", +"p= c #5C5D5E", +"q= c #50504F", +"r= c #2B2C2C", +"s= c #555554", +"t= c #5A5B5B", +"u= c #B4B4B3", +"v= c #ADCE9E", +"w= c #67C937", +"x= c #53BF1B", +"y= c #4F8529", +"z= c #5B6743", +"A= c #585746", +"B= c #505041", +"C= c #4C4C3E", +"D= c #4A4A3C", +"E= c #404033", +"F= c #313025", +"G= c #252621", +"H= c #424243", +"I= c #40413F", +"J= c #58714A", +"K= c #56A52E", +"L= c #56C81D", +"M= c #58A035", +"N= c #5B6955", +"O= c #252626", +"P= c #262726", +"Q= c #1D1E1E", +"R= c #2F302F", +"S= c #272626", +"T= c #282728", +"U= c #313032", +"V= c #313031", +"W= c #2F2F2E", +"X= c #4E4D4E", +"Y= c #111111", +"Z= c #343433", +"`= c #585857", +" - c #5A595A", +".- c #595A5A", +"+- c #494A4A", +"@- c #C9C9C9", +"#- c #DBDBDD", +"$- c #70716C", +"%- c #4B712D", +"&- c #58B81F", +"*- c #5AC91C", +"=- c #5BA72A", +"-- c #5B7D3A", +";- c #525B3D", +">- c #454437", +",- c #3D3C30", +"'- c #3A392E", +")- c #2C2C21", +"!- c #292926", +"~- c #474A46", +"{- c #3A4B31", +"]- c #54873B", +"^- c #55B226", +"/- c #56C51D", +"(- c #57A132", +"_- c #596B51", +":- c #5A5B5A", +"<- c #272627", +"[- c #272728", +"}- c #3F423D", +"|- c #53594E", +"1- c #5B6256", +"2- c #51554E", +"3- c #40413E", +"4- c #4B4A4B", +"5- c #2E2E2D", +"6- c #5A5A59", +"7- c #595A59", +"8- c #545453", +"9- c #525251", +"0- c #353534", +"a- c #575657", +"b- c #575858", +"c- c #BBBBBD", +"d- c #646461", +"e- c #52513F", +"f- c #64644D", +"g- c #5F7F3F", +"h- c #5AAC27", +"i- c #57C819", +"j- c #56C01A", +"k- c #52A023", +"l- c #487B24", +"m- c #3F6124", +"n- c #3D5726", +"o- c #2D4817", +"p- c #3C6526", +"q- c #488629", +"r- c #54C41C", +"s- c #55BD20", +"t- c #569237", +"u- c #58674F", +"v- c #272726", +"w- c #201F20", +"x- c #181819", +"y- c #444942", +"z- c #515E4A", +"A- c #506249", +"B- c #354333", +"C- c #222D1E", +"D- c #21281A", +"E- c #2C2D2A", +"F- c #393A39", +"G- c #4D4C4D", +"H- c #595859", +"I- c #585757", +"J- c #4E4F4F", +"K- c #535253", +"L- c #585758", +"M- c #565657", +"N- c #4F4F4E", +"O- c #504F50", +"P- c #444344", +"Q- c #C6C6C6", +"R- c #525240", +"S- c #64634F", +"T- c #5F5F4D", +"U- c #5F5E4B", +"V- c #5B6A42", +"W- c #54882F", +"X- c #51A81E", +"Y- c #51BC17", +"Z- c #52BE16", +"`- c #4DB613", +" ; c #48AF0F", +".; c #42AA0C", +"+; c #50BB1B", +"@; c #4BB815", +"#; c #54B821", +"$; c #539C2E", +"%; c #547743", +"&; c #565D53", +"*; c #202121", +"=; c #242324", +"-; c #262627", +";; c #454445", +">; c #474B46", +",; c #3D4A36", +"'; c #2A3E24", +"); c #203A19", +"!; c #3C6414", +"~; c #34521D", +"{; c #293822", +"]; c #252E1F", +"^; c #343534", +"/; c #575857", +"(; c #575756", +"_; c #4C4C4B", +":; c #383939", +"<; c #363737", +"[; c #444545", +"}; c #4E4E4F", +"|; c #545354", +"1; c #565655", +"2; c #545555", +"3; c #4D4E4E", +"4; c #4F5050", +"5; c #C3C3C3", +"6; c #E9E9E9", +"7; c #46463C", +"8; c #61614C", +"9; c #5F5E4C", +"0; c #5E5D4A", +"a; c #595847", +"b; c #505040", +"c; c #4C4C3D", +"d; c #4D5938", +"e; c #4D712F", +"f; c #50862A", +"g; c #4B9021", +"h; c #3A840E", +"i; c #438D1E", +"j; c #4D8D2E", +"k; c #4A7A32", +"l; c #516C43", +"m; c #50594E", +"n; c #272828", +"o; c #232424", +"p; c #393B38", +"q; c #222B1E", +"r; c #1E2F1B", +"s; c #3D691A", +"t; c #7FC80C", +"u; c #BBFF00", +"v; c #6EAB11", +"w; c #243A24", +"x; c #2A3A20", +"y; c #282B26", +"z; c #3F3F40", +"A; c #2C2B2C", +"B; c #313231", +"C; c #565756", +"D; c #535454", +"E; c #505051", +"F; c #4E4D4D", +"G; c #4A4A49", +"H; c #474647", +"I; c #3B3C3C", +"J; c #3E3D3E", +"K; c #484949", +"L; c #525353", +"M; c #434342", +"N; c #C5C5C6", +"O; c #DADADB", +"P; c #C3C4C4", +"Q; c #89898B", +"R; c #ACACAC", +"S; c #3F3F3D", +"T; c #5F5F4B", +"U; c #5C5B49", +"V; c #555544", +"W; c #4E4D3E", +"X; c #4C4B3C", +"Y; c #4C4B3D", +"Z; c #4D4C3E", +"`; c #494A3B", +" > c #292B1E", +".> c #393C33", +"+> c #616361", +"@> c #3B3E3B", +"#> c #0D0D0D", +"$> c #2A2B2A", +"%> c #1B1A1B", +"&> c #393A3A", +"*> c #383D36", +"=> c #2F4923", +"-> c #60AB15", +";> c #70C211", +">> c #8FD80A", +",> c #92D809", +"'> c #2D4F22", +")> c #283A1F", +"!> c #252A20", +"~> c #2E2D2E", +"{> c #2A292A", +"]> c #212122", +"^> c #555656", +"/> c #4F4F50", +"(> c #4B4A4A", +"_> c #464545", +":> c #474646", +"<> c #404140", +"[> c #474748", +"}> c #504F4F", +"|> c #4F504F", +"1> c #4E4E4D", +"2> c #4D4D4C", +"3> c #363635", +"4> c #E3E3E5", +"5> c #D3D3D4", +"6> c #949495", +"7> c #5C5C58", +"8> c #48483D", +"9> c #353529", +"0> c #1A1A18", +"a> c #41413C", +"b> c #585846", +"c> c #434235", +"d> c #26261B", +"e> c #494945", +"f> c #070707", +"g> c #090909", +"h> c #101010", +"i> c #202021", +"j> c #1E1D1E", +"k> c #191A19", +"l> c #8A8A8A", +"m> c #282727", +"n> c #363837", +"o> c #464B43", +"p> c #252E26", +"q> c #4E8415", +"r> c #70C50F", +"s> c #7ECB0E", +"t> c #6CB512", +"u> c #89DE0A", +"v> c #538617", +"w> c #202F21", +"x> c #1F251B", +"y> c #464645", +"z> c #555455", +"A> c #525352", +"B> c #4C4B4B", +"C> c #434444", +"D> c #484748", +"E> c #4A4B4B", +"F> c #4C4D4D", +"G> c #4D4C4C", +"H> c #4B4B4C", +"I> c #D7D7D7", +"J> c #E1E1E2", +"K> c #B3B3B4", +"L> c #6C6C6A", +"M> c #4B4B42", +"N> c #474738", +"O> c #565542", +"P> c #605F4C", +"Q> c #595846", +"R> c #3C3B2E", +"S> c #43423E", +"T> c #525241", +"U> c #4B4A3C", +"V> c #373729", +"W> c #2C2B23", +"X> c #666664", +"Y> c #4A4A4B", +"Z> c #4C4C4D", +"`> c #515152", +" , c #121312", +"., c #0B0B0B", +"+, c #080808", +"@, c #2C2C2B", +"#, c #19191A", +"$, c #383839", +"%, c #232324", +"&, c #353635", +"*, c #272D25", +"=, c #3B6219", +"-, c #67BA0F", +";, c #6FCA0E", +">, c #82D40C", +",, c #88D607", +"', c #3D6617", +"), c #222D20", +"!, c #292E25", +"~, c #525253", +"{, c #515252", +"], c #414142", +"^, c #454546", +"/, c #414041", +"(, c #C5C5C5", +"_, c #EEEEEE", +":, c #D8D8D9", +"<, c #4E4E49", +"[, c #47473A", +"}, c #64644F", +"|, c #63634F", +"1, c #5A5948", +"2, c #555445", +"3, c #444334", +"4, c #141413", +"5, c #4A493C", +"6, c #49493A", +"7, c #4B4A3B", +"8, c #424334", +"9, c #2A2A1F", +"0, c #474642", +"a, c #4B4C4C", +"b, c #515050", +"c, c #0E0E0E", +"d, c #343334", +"e, c #464944", +"f, c #2A3125", +"g, c #222E21", +"h, c #2C4620", +"i, c #3E7319", +"j, c #467817", +"k, c #294123", +"l, c #2F3F2B", +"m, c #3B4534", +"n, c #424540", +"o, c #3C3B3C", +"p, c #1A1B1A", +"q, c #3A3B3B", +"r, c #535252", +"s, c #515251", +"t, c #454645", +"u, c #434242", +"v, c #373738", +"w, c #A2A2A2", +"x, c #DCDCDC", +"y, c #EBEBEC", +"z, c #C2C2C3", +"A, c #737371", +"B, c #49493F", +"C, c #4D4C3D", +"D, c #5A5945", +"E, c #63624F", +"F, c #646450", +"G, c #62624E", +"H, c #5E5D4B", +"I, c #575647", +"J, c #515040", +"K, c #37372B", +"L, c #2D2D2C", +"M, c #48473E", +"N, c #4A4A3B", +"O, c #4B4B3D", +"P, c #484739", +"Q, c #343426", +"R, c #33332B", +"S, c #6E6E6C", +"T, c #3C3D3C", +"U, c #0C0C0C", +"V, c #8C8B8C", +"W, c #323032", +"X, c #282C26", +"Y, c #212A1D", +"Z, c #25301F", +"`, c #293625", +" ' c #324430", +".' c #405538", +"+' c #43513C", +"@' c #3D413A", +"#' c #424342", +"$' c #40403F", +"%' c #3A3A3B", +"&' c #CCCCCC", +"*' c #D9D9DA", +"=' c #ACACAD", +"-' c #5E5E5B", +";' c #444439", +">' c #5F5F4A", +",' c #63624E", +"'' c #525143", +")' c #474538", +"!' c #353528", +"~' c #30302B", +"{' c #434340", +"]' c #48483A", +"^' c #3E3E2F", +"/' c #2D2C22", +"(' c #51514C", +"_' c #494848", +":' c #454444", +"<' c #303031", +"[' c #0A0A0A", +"}' c #090908", +"|' c #111110", +"1' c #1E1E1D", +"2' c #262825", +"3' c #343932", +"4' c #3E463A", +"5' c #404A3C", +"6' c #3C4239", +"7' c #333531", +"8' c #403F3F", +"9' c #3E3F3E", +"0' c #3D3C3C", +"a' c #2A2A2B", +"b' c #5A5A58", +"c' c #454438", +"d' c #51513F", +"e' c #5F5E4A", +"f' c #61614D", +"g' c #60604C", +"h' c #5F5F4C", +"i' c #595A47", +"j' c #3D3C31", +"k' c #39382C", +"l' c #2D2D22", +"m' c #393931", +"n' c #3A3A33", +"o' c #787876", +"p' c #494948", +"q' c #100F10", +"r' c #161516", +"s' c #1C1D1D", +"t' c #8E8E8D", +"u' c #363536", +"v' c #1C1A1C", +"w' c #1D1C1C", +"x' c #2D2D2E", +"y' c #454646", +"z' c #49494A", +"A' c #3F403F", +"B' c #383836", +"C' c #484838", +"D' c #585845", +"E' c #5B5B48", +"F' c #5C5C49", +"G' c #5D5D4B", +"H' c #5E5E4A", +"I' c #555543", +"J' c #4D4D3E", +"K' c #49483A", +"L' c #3B3B2F", +"M' c #333225", +"N' c #363530", +"O' c #363736", +"P' c #444445", +"Q' c #4C4B4C", +"R' c #1F2020", +"S' c #363637", +"T' c #919191", +"U' c #434443", +"V' c #393938", +"W' c #424343", +"X' c #3F4040", +"Y' c #46463A", +"Z' c #555542", +"`' c #545342", +" ) c #575645", +".) c #4C4C3C", +"+) c #4A493B", +"@) c #474638", +"#) c #38382C", +"$) c #2F2E24", +"%) c #403F40", +"&) c #0F0E0E", +"*) c #1C1D1C", +"=) c #151717", +"-) c #343535", +";) c #2E2D2D", +">) c #3A3B3A", +",) c #4B4C4B", +"') c #3C3B3B", +")) c #333232", +"!) c #191918", +"~) c #3D3D3A", +"{) c #50503F", +"]) c #515140", +"^) c #4B493C", +"/) c #454537", +"() c #3A3A2E", +"_) c #303023", +":) c #383834", +"<) c #404141", +"[) c #424141", +"}) c #343333", +"|) c #454544", +"1) c #484948", +"2) c #414241", +"3) c #282929", +"4) c #111011", +"5) c #1B1A1A", +"6) c #999999", +"7) c #3B3A3A", +"8) c #323132", +"9) c #1A1A19", +"0) c #302F2F", +"a) c #3E3E3F", +"b) c #3B3B3A", +"c) c #3A3A3C", +"d) c #42423B", +"e) c #444436", +"f) c #343327", +"g) c #313028", +"h) c #434243", +"i) c #494A49", +"j) c #474848", +"k) c #0B0A0A", +"l) c #201F1F", +"m) c #383738", +"n) c #4A494A", +"o) c #3F3E3F", +"p) c #373837", +"q) c #3C3C3D", +"r) c #44443A", +"s) c #4A4A3A", +"t) c #4A493A", +"u) c #4B4B3B", +"v) c #3D3C2E", +"w) c #41413F", +"x) c #3E3F3F", +"y) c #484847", +"z) c #434344", +"A) c #0D0C0D", +"B) c #373637", +"C) c #181718", +"D) c #161617", +"E) c #414140", +"F) c #474746", +"G) c #444343", +"H) c #454539", +"I) c #4B4C3D", +"J) c #464637", +"K) c #403F30", +"L) c #363629", +"M) c #3B3B30", +"N) c #51514E", +"O) c #0B0A0B", +"P) c #484747", +"Q) c #363535", +"R) c #3F3F3E", +"S) c #454538", +"T) c #3B3A2C", +"U) c #38372A", +"V) c #3F3F32", +"W) c #5F5F58", +"X) c #898984", +"Y) c #A0A09E", +"Z) c #464746", +"`) c #484849", +" ! c #2C2C2D", +".! c #282928", +"+! c #494849", +"@! c #464747", +"#! c #464546", +"$! c #444335", +"%! c #3D3D2E", +"&! c #37362A", +"*! c #49483E", +"=! c #73726D", +"-! c #969693", +";! c #9F9F9E", +">! c #9A9A9B", +",! c #292828", +"'! c #323233", +")! c #41413B", +"!! c #3C3C2F", +"~! c #424237", +"{! c #5F5F57", +"]! c #999997", +"^! c #8A8A8B", +"/! c #5C5C5E", +"(! c #3D3E3E", +"_! c #424241", +":! c #90908E", +"<! c #353636", +"[! c #454446", +"}! c #444443", +"|! c #434445", +"1! c #434544", +"2! c #3B3A3B", +"3! c #454344", +"4! c #454443", +"5! c #3F3E3E", +"6! c #40403E", +" . . + @ . + + . @ # + . . + + $ @ + . . . @ + . $ % # + . @ # . . . . % # # $ . . . . + % @ . . . . . # @ . $ . # % + % # $ . @ # # # # # $ # + + . $ + + . $ & . # . . % . & & % . + % . % + . @ + . + + . # & % # . . . . . . + . + $ + . $ + @ $ # . # + @ . % # % # . + . . @ . # + . . # @ # # . % & $ . . % . @ + # # # . $ . $ . . . # + . # # . . . . . % & # # . . . % + $ . + # % $ . . + . . # . . . . . . $ + . . . . @ . . % % + # # # . & # @ + + . . @ . . . + . + . # # % @ . . + & # . # + # . . . . . % . % . # . % + @ % & . @ . . # . + . $ ", +"& & & & & & & & & & * @ & & & & & & & = & & & & & & & & % & & & @ & & & & & & $ & & & & & & & * & % & & & @ & & & & & @ & $ & & & & & & & % & & & & & & @ & & & & & & & & & & & & & & & & & & & & & & & & & % & * & & & & % & & & & % & & & & & & & & % & & & & & $ & & & & & & & & & & & & & & & & & & % $ & & & & & = $ & & & + & & & & & & & & & $ & @ & & & & & & @ & & & + % & & & & & & & & = & @ @ & @ & & & & & & & @ & & & & & & & & % & & & & & & & = & & & & @ & & & % & & & @ $ @ & & & & & & & & & & & & & & & & & & & & & + @ - % @ $ & $ & & & & & & & & & & & & $ & $ & $ @ @ & & & & & & & & & & & & & & & & & & & @ & & & & @ & & $ & & & & ", +"- ; & - > = & - ; , * & * = , , = - > = = > = & = , & * - * & - = , - & > = > > * ; > = = - * ; & ' ' ; * - ' > , = > , & * & > ' , = , - * = = * , , = = ' * = ' = > & - - = - & = , , , = > * & , > = , * * ' ' > > & , * * > & * - > , = ' > , * ' = , ; ' = ; & = > > , > , - ' - * = & - ' ' = = * ; ; * ' , & > ; > - & ' , & > = * = - , & - ' & > * & > & > > > = , ; * & * , & ' & * = = * = - > ' ' & = ' > - ' > & > & , > ' ' * , > = , = , > * ; - > - * , , , , = = = , * > > & = > , & = * - * & * - > ' ' ' ' ' , - & * = > , ; ; > = & ' ; * = = , - , , - > = , > > - ' ' ; * ' = & , ; , * = , * & ' , = ; & ' = & = * ; & = - ; & , = = > , ", +") ; ; ; ; ; ; ; ; ! ; ; ; ) ; ; - ; ; ; ; ; ; ; ! ! ; ; ~ ; ; ~ ~ ) ; ; ; ; ; ; ; ; ; ; ; ; ; ) ~ ; ; ! ; ) ; ! ; ; ; ; ; ; ; ; ) ; ; ; ; ; ) ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ) { ; ; ; ; ; ! ; ; ~ ; ; ; ; ; ; ; ; ) ) ; ~ ; { ; { ; ; ) ) ; ; ; ] ; ; ] ; ; ; ; ; ; ; ; ~ ; ; ^ ; ] ; ; ; ; ; ; { ; ) ; ; ; ; ! ; ; ; ; ) ) ; ; ) ~ ; ; ; ~ ; ! ; ; ; ; ; ' ; ; ; ; ; ; ; ; ) ; ; ; ! ; ; ; ; ; ; ! ; ~ ; ~ ; ; ; ; ! ; ; ) ) ~ ! ; ; ; ! ; ; ; ; ; ; ) ; ! ) ; ; ~ ; ; ) ) ; ; ; ; ~ ; ~ ; ; ; ; ; ; ; ) ; ! ; ; ; ; ; { ; ; ; ; ~ ; ! ; ~ ) ; ; ~ ! ; ; ; ~ ) ; ; ; ; ; ; ; ! ; ; ; ! ; ; ; ; ; ; ; ) ; ; ; ; ; ; ; ; ; ; ; ! ; ! > ; ; ; ; ; ; ; ; ; ; ; ; ) ", +"/ / / / ] / / / ] ] / ^ / / / / ] / / / / / ) { / / ^ / / / { ] / / / / / / ^ / / { ^ / / ] / / / / / / / / / / ] { { ^ ] / / / / / { ] ] ^ / { / / ^ ^ ] / { { { / / ~ / / / { / / / / / / ^ / / / ^ / / / { { { / / ^ ] ! / / / / / / / ^ / / / ] / / / / ^ { / / / / ^ ) / / { / { ^ / ! / / / ] { / / ^ / / / / / / / / ] / ^ ] ) / ] / / / / / / ] / / / / / { / / / / / ] / / / / / / / / / / / / ^ / ! / ^ ] / / / / / ~ / / / { / / { / / / / { / / ^ / / ] ~ / / / / ] / ^ / { / ^ / ^ ] / { / / / / / { / / ] / / / / / ~ / / ^ ] ^ / / / / ^ ) / / / / / ] / / / ^ / / / / / / / ] / / ] ] / ^ / / / / { / { / ^ ^ ] / / / / ] / { / / ^ / { / / / / ", +"( _ : ( < / ( < / [ < [ } / < | [ : _ [ / : ( ( [ ( [ } _ [ [ ( _ ( : / } / ( / / } | } : / ( } _ [ / [ [ [ [ / [ } / [ } / / | : / < [ / < < [ } _ ( ( | / : / / / / | : [ } / < ( / } : [ / _ < : } / < | / | [ [ / | | } [ [ < [ } : ( < ( : } / | _ : ( / [ < : < ( [ < [ } : ( ( | ( : | _ ! - , ; = * ^ / / : _ : ( _ | / } | ( _ / } [ | | [ [ _ ( : / ( | [ [ } < } / < / [ } < } } / _ [ ( _ ( [ [ / / / _ / < / _ : ( [ < / | } | [ / | < | [ ( | | ( : : ( / : < ( | ( | / / ( [ _ _ < : _ } < ( [ / < / < [ _ / } / [ / / / | ( } [ } : _ / / | : ( ( _ _ [ [ _ ( [ : _ : ( } < / ( } [ < ( : [ } / : ( } [ : / < / _ [ : : ( / / : _ | [ } : [ _ [ ", +"< < < < < < < < < < 1 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 2 < < < < < < < < < < < < < < 1 < < < < < < 3 < < < < < < < < < < < < < < < < < < 2 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 4 5 5 5 5 5 . < < < < < < < < < 3 < < 3 < < < 3 < < < < < < < < < < < < < < < < 3 < < < < 2 < < < < < < < < < 3 < < < < < < < < < < < < < < < < < < < < < 2 2 < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < 1 1 < < 2 < 2 < < 2 < < < < < < < < < < < < < < < < < < < < < < < < < 1 < < < < < < < < < < < 3 < < < < 6 3 ", +"7 7 7 7 7 7 7 7 8 1 7 7 7 8 7 7 7 7 7 7 7 7 6 7 2 7 7 7 9 7 7 7 7 7 9 7 6 6 7 9 7 8 7 7 6 7 2 7 7 9 9 7 7 7 2 6 7 7 6 7 7 6 8 8 7 7 6 7 7 7 7 7 6 7 7 7 7 7 6 7 6 6 8 8 7 7 7 7 7 7 7 7 7 7 9 9 7 7 7 6 8 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 8 7 7 7 7 7 7 7 7 7 8 7 9 7 8 7 7 7 9 7 7 7 7 7 7 7 1 0 a a b b c d 9 7 7 7 7 7 7 7 9 7 7 8 6 7 1 7 6 7 8 1 7 7 8 7 8 7 7 7 7 7 6 7 6 7 8 9 9 7 7 7 8 7 7 9 7 9 7 8 7 9 7 9 9 7 6 7 8 6 7 8 7 7 8 8 8 7 7 7 7 8 7 8 7 7 7 7 8 3 7 7 6 8 1 7 8 7 6 7 6 6 7 7 7 7 6 6 7 7 7 7 8 < 8 7 7 7 2 9 7 3 7 9 7 7 7 7 7 7 7 7 6 7 9 7 7 7 7 7 7 8 7 7 9 8 7 7 3 7 7 9 7 7 8 7 1 1 2 7 2 6 9 8 7 7 6 7 7 7 7 7 7 7 6 7 8 6 6 7 3 ", +"e 7 7 f 7 g h i j 7 h h g h h f f e k 7 g g e 7 7 7 e 7 k g e 7 f j f 7 7 f j f f 7 h i e f e 7 f h h h g f g 7 g e g g 7 f e 7 7 f h e e f k h i f 7 k f g 7 f i e e g e g e h j h 7 f h j 7 j k 7 i h 7 j i e 7 f f i g f 7 h 7 j h k f f 7 h 7 k j i f 7 e g 7 e e 7 7 g 7 f 7 j e j h f 7 i l m m n o m p f i 7 e j g j f 7 h f f f f i g h 7 7 f e h f f e i i e f 7 e f 7 g 7 7 g g f h j f j i 7 i e g e 7 j 7 i h g 7 7 e 7 e 7 g e 7 7 7 7 k f f i i 7 f i e j e g 7 h f e 7 f j j k g f f 7 e h i g i e 7 7 h 7 i f e h 7 f 7 j h h e h h h j i f j f f 7 7 j 7 f 7 f j 7 j h 7 g h h 7 7 i j 7 7 f e h f f 7 7 7 k h j f 7 h f k f 7 e 7 j 7 e 7 7 f ", +"k k k k k k k k q k q k r q k k s k k k k k k k k k k k k k k k k k k k k k k k k k k k q k k k k k k k k k k k k k k k k k k k k k k k k k s k k k s r k k r k k r q k k k k k k s k k k k k k k q k k k k k k k k k k k r k r k k k k k k s k k k k k r k q k k k k k k k t k k k k k k q k k u v v v v w n k k k k k k k q k k k k k k q k s q k k r k s k k k k k k k k k k k k s k k k k k k k r k k k r k k k k k k k k k k k k k k r k k k q k k k k k k k k k k k k k k k k k k k k k k q k k k q k k k k k k k r k k k k k k k k k k k k k k k k q k k k q k k k s k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k k q k k k k k r k k ", +"x x x y z x x x x x t x x A t x x z x x x x z x A x x z t z x x t t x x B x x A A x x x x x x x q x z x x x x x x x x x x x x A x z B t x x x x A t A A x x A x x x x x x x t x x x x A x x x x x x x x x C x x x x t x x x x x x x A C t x x x x x z x x x x A x x x x x z x t z x x x x A x x D E E E F E v x x x x z x x A x x x x t x x t x x x x x t x x A A G x x x x x C x z x A x x x q x z z x s x x x A x x x A x x z x x x x x x x x t x x x x z q A z x t A z x x z A x x x x x x t x x x x x x x z x x C B x x x A x x B x x H x A x x x t x x s t x t x x t H x x x x x x x x x t x x x x x A x x x x t x x x x x A x x x x x t x x x x x x x x C ", +"B I x J H B H C K L K J L K L B B x B J L J I B K L x B L K L K B x K L J H H J K J I L B I K K L K I K L L C x L K K J K K K I x K J I K C B x C K L L B K J K K J L C K I K K I K L K J K K K J B K I L K C J K K L J K K K J L L K K H C K L K J I J I I J J I B K K J K K B K J L I J J J K M N O P N Q E I K H I I H C J H J I J H B B K C L K I K J C K J J I J K B C K J B J L K J L K C J K K K K J J K x J I K K K K H I L J I x L L K I H I H J B J x I L K I I I L L C J J K J L K I I C K K I K L L J H K B L I B K J L I I K L J I H L L L I I J L L L K B L I C J H K I I K L L K B K H K K I J C J I L I I I J K I J I H H C H J x K L K L K H K ", +"R S R T T U V K V W V W T X T S S W S R U V W K T X R X W V R K V R W K V S U U U V T V R K W V X X X V U W X R V R X S U V R U T T T X V W V K T X V R R W W U V U T V V U U U U X R X V W S X U W X X U W U U V T T R U K T X V T S X X U R R S U V R R V X R S V U V S X V T W V S T U T R T Y Z Z Z ` ...U W T X U S W U X V U T X U U K V W V X K R X V W U R S T V K T R U U V T X R V V W K K U K S U V U T W S S K U U V R S S K W T U U X R T U R X K U X K V T T W V U U V T K T U S V V X X T U V X V V V R X R S K U V V R V X X T X R T S R T T R K U V R V T U S T R X V X X V V S V T V X V U X T T V S V S V V U W R R K R X T R U W R R T V W ", +"V +.V +.+.V V @.V V V #.#.V $.+.+.+.V +.V $.V V @.$.$.@.$.$.%.$.+.%.&.@.@.+.$.V V @.V V +.%.*.#.&.@.@.+.@.V @.$.@.$.&.V $.&.@.@.+.%.#.+.V V $.V +.%.&.@.V V #.%.V @.#.V @.@.V #.+.&.@.@.V V +.V V V V V @.V @.V +.&.@.V V &.V %.V $.+.+.%.V *.%.#.$.V +.$.+.#.#.@.+.V V V V &.@.V V #.&.&.%.%.+.=.-.;.>.-.,.'.$.$.V &.$.+.V V &.V +.+.$.%.V $.%.$.+.#.&.$.$.V $.V $.+.V @.@.@.%.&.&.@.V V $.$.V @.%.$.+.$.V +.%.+.V V &.V &.%.$.*.V @.V &.V %.V &.V @.#.$.@.@.+.&.V V V V @.#.V @.#.@.V +.V V V +.#.$.$.V +.#.$.@.$.V $.V +.V +.@.$.@.&.#.V #.#.V V +.@.$.V V @.#.V @.V $.V *.V +.+.V V &.#.V V V $.@.V $.+.$.V V $.$.V @.+.$.%.V &.@.+.V V V #.V %.&.#.V @.+.V ", +"*.*.*.*.*.).*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.!.*.*.*.*.*.*.*.*.*.*.~.*.*.*.*.*.!.*.~.*.*.*.*.*.*.~.*.*.~.*.*.~.*.*.!.).~.*.*.*.*.*.).*.~.*.~.*.*.*.*.*.*.*.*.*.*.!.*.*.*.*.*.*.*.*.~.*.*.*.!.*.*.*.).~.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.*.!.*.*.*.*.{.*.*.].^.^.^.^./.(.*.*.*.).*.*.*.*.).*.*.*.*.!.*.*.*.*.*.*.~.).*.~.*.*.).*.*._.*.*.*.!.!.*.*.*.*.!.*.*.*.*.*.~.*.*.*.~.*.*.*.*.*.*.*.*.*.~.*.*.*.*.*.~.*.*.*.*.*.*.*.).*.*.*.*.*.*.*.~.~.*.*.*.~.*.*.).:.).*.*.*.*.*.*.*.).*.*.*.*.*.*.*.*.!.*.*.).*.*.*.*.*.*.*.*.*.*.*.~.~.*.*.*.*.*.*.*.*.).*.*.*.*.*.*.*.).!.*.*.).*.*.*.*.~.*.*.).*.*.~.*.*.*.*.*.*.*.*.*.*.*.*.", +"<.<.<.<.<.<.<._.<.<.<.<.<.<.{.<.<.<.<.<.<.<.<.:.:.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.{.<.<.<.<.<.:.<.<.:.<.<.<.<.<.<.<.<.<.<.<.<.:.<.<.<.<.<.<.<.<.<.<.:.{.<.<.<.:.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.{.{.<.<.<.<.:.<.<.<.<.<.<.:.<.<.<.<.<.<.<.<.<.<.<.<.<.[.}.}.}.}.}.|.<.<.<.<._.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.:.<.<.<.<.<.<._.<.<.<.{.<.<.<.<.<.<.<._.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.{.<.:.<.<.<.<.<.:.<.<.<.<.<.<.<.<.<.<._.<.{.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.{.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.<.:.", +"1.2.1.1.2.3.3.1.3.2.1.1.1.1.2.2.3.3.1.1.4.4.1.2.2.2.5.6.4.4.3.1.5.1.3.1.1.1.4.1.1.1.3.5.1.1.1.2.1.1.3.1.2.2.1.1.4.6.1.5.2.2.1.2.4.1.3.3.3.1.2.2.1.7.5.3.1.4.4.7.1.1.1.1.1.2.4.1.1.4.7.1.3.2.2.1.1.1.3.1.1.2.1.1.1.1.4.1.3.1.1.1.2.1.7.3.1.2.1.1.1.7.1.1.1.1.3.3.1.1.1.1.2.1.1.1.1.4.3.3.1.1.1.1.8.9.9.9.9.9.0.5.1.1.1.1.1.1.1.4.2.1.1.6.1.2.1.1.1.1.1.1.3.2.1.1.3.1.1.1.2.4.4.1.2.1.1.1.4.1.1.3.4.1.1.1.3.6.1.1.1.1.1.1.4.2.3.1.1.1.1.1.3.2.1.1.1.3.3.2.1.1.1.1.2.1.3.3.2.6.1.1.1.5.3.1.1.3.2.1.3.1.4.1.1.7.1.1.4.1.3.4.1.1.2.1.1.1.5.1.6.3.1.5.2.1.1.1.1.4.2.1.1.1.3.1.2.2.4.1.1.1.3.1.1.1.4.5.1.1.4.1.2.1.2.1.1.3.3.1.1.1.4.2.1.4.7.4.4.1.3.1.4.3.1.3.1.1.2.1.", +"a.b.c.d.b.a.e.b.f.b.b.b.f.f.f.f.e.e.e.a.e.c.e.f.g.d.c.c.d.a.b.b.d.b.1.c.d.e.c.1.f.d.1.e.b.e.b.a.b.b.f.e.e.b.d.b.b.d.b.b.e.e.e.g.f.c.e.e.e.b.b.d.b.e.f.b.g.f.f.b.d.c.c.b.d.e.e.a.a.d.g.e.b.g.d.e.g.1.b.b.f.f.d.e.1.e.d.b.a.d.g.b.d.c.f.d.b.e.a.d.b.g.b.b.d.a.d.d.d.d.b.d.d.f.g.b.b.b.a.C k z s r h.i.i.i.i.i.j.q x x k V a.d.e.e.b.b.e.e.e.f.b.f.c.a.a.e.g.g.f.e.f.f.f.1.e.g.d.c.f.g.g.g.1.a.f.a.g.b.e.b.c.f.f.e.c.b.a.d.g.b.d.d.g.b.g.d.b.1.e.b.a.e.g.b.b.g.b.d.g.d.f.1.b.g.b.f.g.a.g.d.a.c.f.g.1.b.d.a.c.c.e.b.a.b.c.g.b.f.c.b.b.b.f.f.b.e.d.e.d.c.g.g.d.a.b.b.b.b.f.d.b.g.g.f.d.a.a.d.e.e.b.c.f.f.1.f.e.b.f.b.1.b.d.b.d.c.b.f.d.f.b.e.g.f.f.f.c.f.d.c.f.e.c.f.", +"b.k.l.m.n.n.o.p.m.l.k.b.m.m.m.m.m.l.o.q.b.n.k.n.m.m.p.k.n.b.o.o.m.n.p.n.b.p.b.l.b.o.p.b.m.m.o.n.l.o.m.o.n.q.m.m.b.n.o.b.l.o.o.b.k.q.o.o.o.n.k.o.b.p.k.k.m.b.p.l.q.n.m.b.k.p.q.n.k.k.q.b.b.b.o.o.n.b.l.n.p.l.p.b.o.o.p.m.p.o.l.b.n.k.m.n.o.k.p.o.p.q.b.b.l.m.q.b.k.q.m.b.p.o.p.m.k.k.l.r.s.t.t.t.i.i.i.u.i.v.w.t.t.t.}.x.p.o.b.b.o.k.q.p.o.n.b.b.k.l.k.n.p.m.b.m.b.b.p.p.b.q.b.m.n.l.k.m.o.n.l.n.o.o.n.o.n.l.n.k.p.k.o.b.q.p.p.b.o.o.p.n.m.q.k.o.o.l.o.l.b.q.n.q.k.p.q.l.q.k.k.o.l.k.k.b.b.n.q.l.o.b.k.k.m.b.b.m.k.m.m.k.n.k.l.b.o.k.p.n.b.k.o.p.m.p.o.l.n.l.b.b.b.k.k.b.k.b.o.m.b.b.b.o.p.o.b.m.o.o.q.q.m.b.k.q.l.k.p.o.o.o.b.m.b.b.m.b.b.l.b.b.m.n.b.o.m.o.o.b.", +"y.z.y.A.B.y.q.B.B.z.C.z.z.D.q.B.B.B.E.q.D.y.E.D.z.C.D.q.q.z.z.A.D.D.B.A.q.z.q.D.B.z.q.A.y.B.q.z.y.q.B.q.A.z.D.q.q.E.B.y.z.B.q.q.q.q.B.q.q.z.B.q.B.B.A.D.q.A.q.q.z.z.z.q.z.E.q.q.z.A.z.A.A.D.q.q.q.q.E.E.q.A.C.A.q.D.y.A.y.D.D.E.E.q.D.y.q.y.q.D.q.y.q.C.E.q.y.q.z.y.D.y.z.D.A.B.B.C.q.B.F.t.t.t.t.t.t.t.t.t.t.t.t.t.m C.y.q.B.D.B.D.A.C.y.q.q.B.y.B.q.q.q.D.q.z.q.y.z.z.q.B.B.y.A.q.D.q.A.B.D.C.q.q.y.A.D.q.C.D.B.A.B.B.B.z.D.C.D.z.z.B.z.q.z.B.q.E.z.z.y.q.q.B.C.A.z.y.A.q.B.z.z.B.B.D.B.E.q.q.q.D.C.z.q.z.D.B.q.E.A.q.q.q.D.q.q.D.A.E.D.E.A.A.B.B.E.C.z.D.q.q.A.y.y.y.E.D.q.A.A.D.B.z.q.z.B.z.E.q.B.q.q.z.A.q.E.B.A.q.D.E.C.B.q.q.B.z.z.C.E.q.q.E.B.A.E.z.y.E.", +"C.C.G.H.I.G.H.C.H.C.C.C.G.H.J.H.I.I.H.C.H.H.K.C.K.L.J.C.I.J.H.G.J.H.L.H.K.C.H.C.K.L.C.L.C.K.I.K.H.C.K.M.K.H.H.I.G.C.K.C.K.I.H.C.J.C.C.I.K.C.L.L.C.C.C.C.J.C.I.G.C.H.I.J.K.K.J.K.K.C.C.K.G.H.L.G.C.C.C.I.M.K.C.M.I.G.I.K.C.K.C.H.I.C.L.H.C.I.H.M.H.C.L.C.M.C.K.C.H.L.M.I.K.K.C.M.M.I.J.G.I.N.O.t.P.Q.O.R.P.9.t.t.Q.S.H.M.C.L.C.L.K.M.J.G.C.C.H.J.H.C.I.H.K.K.M.C.I.L.C.J.H.I.I.C.J.K.C.G.H.C.C.C.C.K.C.C.G.K.J.K.K.L.C.J.C.J.I.I.H.H.H.C.I.K.C.L.C.C.H.I.C.G.C.C.G.C.L.K.H.H.I.H.C.C.K.H.H.K.C.C.K.L.C.H.M.L.C.C.I.J.C.K.L.H.H.L.K.J.G.K.H.G.H.M.G.H.H.C.K.M.H.H.H.H.C.I.H.I.M.H.H.C.J.G.C.C.K.C.C.K.I.I.C.L.K.I.L.C.H.C.I.C.C.G.K.I.G.C.H.H.C.C.L.C.J.C.K.H.H.C.", +"T.U.V.W.M.M.X.M.U.Y.U.M.M.M.T.U.M.V.Y.V.U.M.U.T.M.V.Y.U.M.M.M.M.M.T.M.M.U.X.T.M.T.M.Y.Y.M.U.M.V.T.M.V.U.M.V.U.M.M.W.M.M.M.U.T.T.V.T.U.U.X.M.T.U.Y.M.Y.W.M.U.Z.M.T.Y.M.Z.M.U.T.U.U.V.M.M.M.X.W.M.Z.Z.`.Z. +.+.+.+.+.+Z..+++X.T.M.W.M.M.M.V.W.M.V.M.T.T.W.M.M.M.T.M.V.U.T.M.M.V.V.M.T.Y.M.V.g.(.9.9.9.9.9.9.9.9.9.'.o.T.M.W.M.M.V.M.M.U.M.T.U.T.M.Y.U.M.U.U.X.T.T.U.M.Y.M.U.V.M.M.M.T.M.M.M.M.V.T.T.V.M.M.V.T.M.W.M.U.M.Y.Y.M.X.W.W.Y.M.M.U.V.Y.M.M.Z.M.V.V.M.U.V.M.M.T.T.Y.V.W.W.V.W.W.M.T.T.X.T.M.Y.Y.V.Z.U.T.U.V.T.U.M.U.Y.U.V.V.M.Y.V.U.V.U.M.V.W.M.X.M.V.U.M.W.T.U.T.T.M.T.U.M.Z.Y.M.U.M.V.V.U.V.M.U.M.M.@+V.M.V.U.V.V.U.U.T.U.U.T.U.M.M.M.M.U.M.U.U.X.M.X.U.", +"Z.Z.Z.Z.Z.Z.#+Z. +Z. + +Z.Z.Z.Z. +Z.Z.Z.#+Z.Z.#+Z.Z. +Z. +Z.Z.Z.Z.Z. + +Z.Z.Z.Z. +Z.#+Z.Z.Z.#+#+Z.Z.Z. +Z.Z.`. +#+Z.Z.Z.`.Z.Z.#+ +Z.Z.#+Z.Z. +Z.#+Z.#+Z.#+Z.++#+.+++ +Z.#+.+Z.Z.Z.#+Z. +Z.Z.Z.`.$+$+%+&+&+&+*+*+*+&+&+&+&+=+%+%+-+;+;+Z.Z. +Z.Z.Z..+ + + +Z.>+Z.Z. +.+ +Z.Z.Z.Z.>+Z. +Z.Z.#+W j.9.,+9.9.9.9.9.'+7.#+Z..+#+ +.+Z.Z.Z.Z. +Z.#+.+Z.Z. +Z.#+Z. +.+Z.#+Z.Z.Z. +.+Z.Z.Z.>+Z.#+Z.Z.#+Z.Z.Z.Z.Z.Z.Z..+Z.++Z.Z.Z. +Z.++ +.+#+Z. +Z.`.Z.Z.Z. +.+Z.Z.#+Z.Z.Z.#+Z.Z.Z.Z.Z.Z.Z.++#+ + +#+Z.Z.Z.>+Z.Z.#+ +Z.Z.#+Z.Z.Z..+Z.Z.Z.#+Z.>+Z. +Z..+Z.Z.Z.Z.Z.Z.Z.Z.Z..+Z.Z.#+Z.#+#+ +#+Z. +#+.+.+Z.Z.#+Z..+Z.Z.Z. + + +Z.Z..+Z.Z..+Z.Z.Z..+Z.Z.Z.Z.Z.Z.Z.Z.++ +Z.>+Z.", +";+;+$+;+;+;+;+;+;+;+;+;+;+)+;+;+;+;+$+$+;+)+;+;+$+;+$+;+;+$+;+;+$+;+;+;+;+;+;+;+;+;+)+;+;+;+;+;+;+;+;+;+;+;+;+)+;+;+;+;+;+-+$+-+;+;+)+;+;+;+;+;+;+$+$+;+!+;+;+;+;+;+;+;+$+;+;+;+;+)+;+;+;+)+;+~+%+{+*+]+^+^+/+/+(+/+/+/+_+^+]+:+]+<+*+[+&+&+%+%+}+%+%+;+;+-+;+;+-+;+;+;+;+;+;+$+;+;+$+;+-+;+;+& |+s.s.s.s.s.^.< ;+;+;+$+;+;+;+;+;+;+;+;+-+;+;+$+-+;+-+;+-+;+;+-+;+;+-+;+-+;+;+;+;+$+;+;+;+;+)+;+;+;+;+;+;+;+;+;+;+;+;+;+$+;+;+;+;+;+;+;+-+;+;+;+;+;+)+;+;+$+;+;+;+;+;+;+;+-+)+;+;+-+;+;+)+;+)+;+;+;+;+-+;+;+;+;+;+$+;+;+;+;+;+;+)+)+;+;+;+;+)+;+;+;+-+;+;+;+;+;+;+;+;+)+$+;+;+;+;+;+;+;+;+;+)+;+;+;+-+;+;+;+)+;+;+-+;+;+;+;+)+;+;+;+;+;+-+;+-+;+)+;+;+;+;+;+;+;+", +"%+%+%+%+%+%+%+%+}+%+%+%+%+}+%+%+%+%+%+%+%+%+}+1+%+%+~+%+%+%+}+%+%+%+%+%+1+=+=+%+%+%+1+%+}+%+%+%+%+%+~+%+%+%+%+~+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+}+%+=+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+=+&+&+*+]+2+/+]+~+%+]+3+4+4+5+4+3+3+3+6+6+6+/+/+^+^+]+]+*+*+&+&+&+%+%+%+7+%+=+=+%+%+%+%+%+%+%+%+%+~+%+8+}.s.s.s.9+0 %+%+=+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+~+~+%+%+%+%+%+%+%+%+~+%+%+~+%+%+%+%+%+%+%+%+%+=+%+%+%+%+%+%+%+=+%+%+%+~+%+%+}+%+~+%+%+%+%+%+%+%+%+}+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+%+}+%+}+%+7+%+%+%+%+%+%+%+%+%+%+%+%+%+%+0+%+%+}+%+~+%+}+%+%+%+%+%+%+%+%+%+}+%+%+%+%+%+%+}+%+%+%+%+%+%+%+%+%+%+}+%+%+%+", +"&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+1+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+7+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+*+*+]+^+6+]+a+b+c+d+e+4+/+/+/+6+6+4+f+g+g+g+f+4+4+3+3+6+/+/+^+]+]+*+*+*+*+&+&+&+&+&+&+&+&+&+&+&+&+&+%+h+}.}.}.i+&+&+&+&+&+1+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+4+j+k+l+m+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+&+", +"{+*+*+*+*+*+*+{+*+*+*+*+*+*+*+*+*+*+*+*+n+*+*+*+*+*+*+*+*+*+*+*+*+*+{+*+*+*+*+*+*+n+{+o+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+o+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+p+]+q+6+3+^+r+s+t+u+v+w+x+y+z+A+B+C+D+f+4+3+f+g+D+E+E+g+g+f+4+3+6+6+/+^+^+]+]+*+*+*+*+*+*+*+{+*+*+*+*+%+Q }.F+*+*+{+*+*+*+*+*+*+*+*+*+*+*+*+{+*+*+*+*+*+n+*+*+*+*+*+n+*+*+*+*+*+*+*+*+n+*+*+*+*+*+*+*+*+{+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+5+A+G+H+I+J+K+L+M+{+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+o+*+*+*+*+*+*+*+*+*+*+*+{+*+{+{+*+o+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+o+*+*+*+*+*+{+*+{+*+*+{+*+*+*+*+*+*+*+*+*+*+*+*+{+*+*+*+", +"]+]+]+N+O+]+]+]+P+:+]+]+]+]+]+]+]+]+]+]+]+]+]+P+P+]+]+]+]+]+]+p+]+]+]+p+]+Q+]+]+Q+]+R+]+P+]+]+]+]+]+]+]+p+]+]+]+]+Q+]+]+]+S+]+]+]+]+]+p+:+T+]+]+T+]+S+p+:+]+T+]+]+]+]+]+]+]+]+]+]+]+]+P+]+]+^+^+6+3+f+U+V+A+w+G+u+W+X+Y+Z+Z+Z+X+w+X+L+y+A+`+ @.@E+g+E+E+D++@U+g+f+4+3+3+6+/+^+^+^+]+]+Q+]+]+]+T+]+]+1.S.C.]+]+]+]+]+]+S+]+T+]+]+]+]+]+]+]+]+]+]+]+]+]+]+]+]+]+]+]+Q+]+]+]+]+@@]+<+]+]+]+]+]+P+]+]+]+:+]+]+]+]+Q+<+p+]+]+Q+]+]+]+S+]+Q+]+]+]+#@Z+s+J+H+I+J+I+I+H+$@%@&@6+]+]+]+P+]+]+]+]+]+]+]+p+]+]+]+]+]+]+]+]+p+]+]+:+T+Q+]+T+]+p+]+P+T+]+]+p+P+S+Q+]+N+T+]+S+]+S+]+]+*@]+]+]+]+S+]+]+:+]+:+]+p+:+]+]+]+P+]+]+]+P+]+]+]+]+p+]+]+]+S+P+Q+P+]+p+]+]+p+]+S+]+]+]+", +"^+^+=@^+^+^+^+^+-@^+^+^+^+^+^+^+^+^+^+^+_+^+^+^+^+^+^+^+2+^+^+^+^+^+^+^+^+^+^+^+^+^+=@^+^+^+2+^+^+;@^+^+^+2+^+=@^+^+^+^+^+^+^+^+^+^+;@^+^+^+^+-@^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+2+^+^+^+^+^+^+>@,@3+4+f+E+'@f+)@!@a+~@X+{@w+Y+L+Z+w+]@b+^@k+k+/@w+L+(@_@:@<@E+D+[@e+'@}@E+f+4+4+|@1@/+/+;@^+^+2@3@4@5@6@7@8@9@0@a@2+_+^+^+^+_+^+^+^+^+^+^+^+^+^+^+b@=@^+^+^+^+^+=@^+^+^+^+^+^+^+^+^+^+2+;@^+^+^+^+^+^+=@b@^+;@2+b@^+^+2+^+^+2+^+=@^+^+^+3+c@k+I+d@J+J+e@J+J+I+I+I+f@g@H+h@i@:@^+^+_+^+^+b@;@^+^+^+^+^+^+b@^+^+2+^+^+^+^+2+^+^+^+^+^+^+^+^+^+^+_+^+^+^+^+^+^+^+^+^+^+^+^+^+b@^+^+^+;@^+^+2+:+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+^+;@^+@@^+^+;@^+^+=@^+^+^+^+^+^+^+", +"j@/+j@/+/+/+/+/+/+(+/+/+/+/+k@/+/+q+q+/+(+/+/+/+q+/+/+,@l@/+/+(+/+;@/+/+/+,@/+/+l@/+/+/+/+/+/+/+/+/+(+j@/+/+/+/+j@>@/+/+/+/+/+m@/+/+(+/+/+/+(+>@(+/+/+j@/+/+l@>@/+m@j@/+/+/+m@/+j@/+/+/+/+,@6+6+3+4+f+E+'@e+m+m+e+'@<@n@j+(@x+X+o@{@{@^@v+G+u+t+t+t+u+p@^@Z+q@r@m+[@D+D+'@'@D+g+f+4+3+s@t@u@v@w@x@y@z@A@B@C@D@E@F@G@(+/+/+/+m@/+/+,@/+/+k@q+j@/+(+/+/+/+/+m@/+/+/+/+/+/+>@(+/+/+(+>@/+j@/+j@/+/+/+/+/+m@,@/+/+/+/+,@/+/+m@/+(+/+/+H@I@J@K@J+d@d@d@J+J+J+J+I+I+I+H+H+H+g@L@M@b+N@/+/+/+/+/+/+>@/+/+/+/+/+/+/+/+/+>@/+j@/+/+/+/+/+/+/+/+/+/+/+/+>@/+q+/+/+/+O@/+/+/+/+/+/+j@/+m@/+/+>@q+/+/+/+/+(+/+(+>@/+/+/+/+/+/+j@l@/+/+/+/+/+,@/+/+/+,@/+/+/+/+/+/+j@/+,@,@(+", +"6+6+6+6+6+6+6+6+6+6+6+P@6+6+6+1@6+6+6+6+6+P@6+6+6+6+6+6+1@1@6+6+Q@R@6+P@1@6+1@P@6+S@6+P@6+1@P@6+6+P@6+P@6+6+1@6+6+6+6+6+6+1@6+6+6+6+1@R@6+6+1@6+6+6+6+6+6+6+6+6+6+6+6+P@1@1@1@6+R@6+6+6+6+6+T@3+4+U@f+E+V@'@ @W@X@:@:@:@Y@Y@Y@n@c@Z@`@b+]@b+/@G+ #.#+#s+h@+#+# #v+X+@#B+m+D+ @##'@H@.@$#%#&#*#=#-#;#>#,#'#)#!#~#{#]#^#6+6+6+6+6+6+|@6+6+1@6+6+6+P@6+6+6+6+6+6+6+6+1@6+S@P@P@6+6+R@6+6+6+6+6+R@Q@6+6+6+6+6+6+6+6+6+6+6+1@6+6+1@/#(#_#J+J+d@d@d@d@d@J+J+J+J+I+I+I+H+H+H+g@g@L@L@:#u+<#'@6+6+6+6+6+6+6+R@6+1@6+6+6+6+6+1@6+6+6+1@6+6+6+6+6+Q@6+6+6+Q@6+6+6+6+6+1@6+6+6+6+6+R@6+6+6+6+P@6+6+6+6+6+6+6+R@6+P@6+6+6+6+6+P@6+6+6+6+6+R@6+6+[#1@6+6+6+S@6+6+6+6+6+6+6+6+", +"3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+3+}#}#3+3+|#3+3+3+3+3+|#3+3+|#3+3+3+3+3+3+}#3+3+3+3+3+3+3+|#3+3+|#|#|#3+3+3+3+3+3+3+3+3+3+3+3+T@3+3+3+3+}#3+3+3+3+3+3+3+3+}#|#|#3+3+4+4+f+g+E+D+1#e+ @m+Y@2#:@M+n@3#3#3#M+M+4#5#L+]@b+W+k+u+J@+#s+6#7#7#6#s+8#9#c+0#W@'@e+a#b#c#d#e#f#g#S@3+|#h#i#j#k#l#m#n#o#3+3+3+|#3+3+3+3+3+}#T@3+}#|#3+3+3+3+3+T@|#}#|#|#3+|#3+3+3+3+3+}#3+3+3+|#3+}#T@p#3+T@3+q#3+3+3+3+3+r#s#J+J+J+d@d@d@d@d@d@J+J+J+J+J+I+I+I+H+H+H+g@g@g@L@L@_#L@.#t#u#}#3+3+}#3+3+3+3+3+3+}#3+3+3+3+3+3+3+3+3+3+3+}#T@3+}#T@3+|#3+3+3+3+3+3+3+3+3+T@3+}#3+3+3+3+}#3+3+3+3+3+}#|#3+3+3+3+3+3+3+3+3+3+3+3+3+T@3+T@3+3+3+3+3+|#3+3+3+3+3+3+3+}#", +"4+v#4+4+5+4+v#4+4+4+4+4+v#4+4+4+4+4+4+V+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+w#4+4+4+4+4+5+4+4+4+v#4+4+4+4+4+4+4+4+4+4+5+4+4+4+4+5+4+4+4+4+4+4+4+4+4+4+4+4+4+4+x#4+4+4+4+4+5+4+4+w#4+4+4+4+4+4+4+4+4+4+f+y#g+E+E+D+z#e+ @ @m+Y@!@:@M+n@A#`+B+B+B#`+d+z+X+W+^@k+t+C#.#D#6#7#K+h@+#.#s#b+E#F#G#H#I#J#H@D+E+K#f+4+4+4+4+L#M#N#O#P#Q#4+4+4+4+4+4+4+v#4+4+4+4+4+4+v#4+4+v#4+4+v#4+5+5+w#v#4+4+4+4+4+w#4+v#4+v#4+4+4+4+4+4+4+4+4+4+4+x+R#d@S#d@d@d@d@d@d@d@d@J+J+J+J+J+I+I+I+H+H+H+g@g@g@L@g@g@T#s+U#V# @4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+4+5+4+4+4+4+4+4+4+v#4+4+4+4+v#4+4+4+4+w#4+4+4+4+4+4+4+4+4+5+4+4+4+4+4+4+4+w#4+v#4+4+4+4+4+x#4+4+4+5+5+4+4+4+4+5+4+4+w#4+4+v#4+4+", +"y#f+f+f+f+f+U@f+f+f+U@f+f+f+W#f+f+f+U@f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+y#U@f+f+f+U@f+y#y#W#f+f+y#f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+W#f+f+f+f+f+W#f+f+f+f+f+f+U@f+f+)@y#f+f+f+f+f+f+f+f+f+f+f+U@f+f+f+g+g+E+E+D+D+[@e+e+ @ @m+Y@!@:@M+n@3#`+B+4#X#4#4#a+L+b+v+k+t+.#s+D#Y#D#D#K+Y#s+Z#`# $.$+$##Y@@$e+D+E+g+g+f+f+f+x##$$$%$&$*$f+f+f+f+f+W#f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+=$f+W#f+f+y#f+f+f+f+f+f+f+f+f+f+f+f+c@g@6#H+d@K@d@d@d@d@d@d@d@J+J+J+J+J+I+I+I+H+H+H+g@g@H+L@T#s+J@8#-$o@;$g+U@f+f+f+f+f+W#f+f+f+U@f+f+f+f+f+f+f+f+f+y#f+f+f+f+f+U@f+f+U@f+f+f+f+f+f+f+f+y#f+f+f+f+f+f+U@f+U@f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+f+", +"g+g+g+g+>$g+g+g+g+g+g+,$g+g+,$g+K#g+g+g+g+g+,$g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+,$g+g+g+g+g+g+g+K#g+g+,$g+g+K#,$K#g+g+,$g+g+g+g+g+g+g+g+'$g+g+'$g+,$'$g+g+,$g+g+g+'$g+g+g+g+g+g+g+g+g+g+g+g+,$g+g+g+g+g+E+E+}@D+V@D+D+'@e+e+ @m+Y@!@:@)$n@!$B+0#X#~$_@_@a+t#/@k+8#s+K+Y#D#Y#Y#Y#{$]$^$/$($X+_$Y@m+!@:$<$[$}$E+E+g+K#g+|$%$1$2$'$g+g+g+g+'$g+g+g+g+g+g+g+g+g+K#g+g+g+g+g+g+g+g+g+g+,$g+'$g+g+g+g+K#g+g+,$K#g+K#g+g+g+,$m+:#K+6#6#T#g@J+d@d@d@d@d@d@J+J+J+J+J+I+I+I+H+H+I+3$L@7#D#C#8#W+o@o@4$5$t#g+g+g+g+g+'$g+g+g+g+g+g+g+6$K#g+g+g+g+g+g+g+g+K#g+g+g+g+K#,$,$g+g+K#K#6$g+g+g+g+g+g+g+,$K#g+g+g+,$g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+g+,$g+g+'$g+'$,$g+g+g+g+g+g+g+", +"U+E+7$7$U+E+E+}@U+E+E+U+E+E+E+E+8$E+E+E+E+U+E+9$E+E+}@E+E+E+E+U+9$E+E+E+E+7$E+E+U+E+}@}@E+}@E+U+U+E+E+E+E+7$}@E+E+E+7$E+E+7$E+E+E+E+E+E+E+E+E+U+D+}@}@7$E+E+E+E+}@E+7$7$}@7$E+E+E+7$E+E+}@E+E+E+E+E+7$E+E+E+E+D+0$D+D+'@'@e+e+a$m+Y@!@:@b$3#r@B+N@d+j+A+c$r#X+d$G+h@K+D#Y#Y#Y#e$f$g$h$6#h@s+{@i$j$k$l$m$n$o$p$V@E+E+q$r$s$t$u$E+E+E+}@E+E+E+7$E+E+9$E+E+7$E+E+E+E+E+E+U+U+U+U+E+E+E+E+7$7$+@}@E+E+E+E+E+E+E+E+E+E+E+ #6#K+7#7#v$7#:#g@I+d@d@d@d@J+J+J+J+J+I+I+I+I+H+L@w$D#x$G+^@{@{@{@]@]@y$z$A$}@7$E+E+E+}@E+E+E+E+U+E+E+U+E+E+E+}@E+E+E+E+U+E+E+E+E+E+E+E+E+E+E+7$U+8$E+E+E+E+E+E+E+7$U+E+E+7$7$E+E+E++@E+E+E+U+E+E+E+E+U+E+}@E+E+U+E+E+E+E+E+E+E+E+E+E+E+E+E+", +"B$V@D+D+C$D+V@D+C$D+D$C$D+D+C$0$'@D+D+D+D$D+C$H@B$D+V@D+D+V@D+D+H@D+D+D+D+D+D+0$D+D+D+D+V@D+C$D+C$0$D+D+V@0$V@D$D+0$D+V@E$'@1#'@1#E$'@E$D+V@H@H@V@D+V@D+D+D+D+D+D+D+D+D+C$V@D+D+D+0$D+D+V@C$D+V@D$D+V@D+B$D+0$D+B$C$D+F$E$'@'@e+<@ @m+m+2#:@M+3#`+B+G$c@H$r#I$J$K$s#.#K+Y#Y#Y#L$M$N$O$7#:#7#P$Q$R$S$T$U$V$W$X$Y$'@D+D+Z$`$ %.%D+D+D+0$0$0$D+C$D+D$V@C$C$0$H@D+D+0$D+C$0$0$D+D+D+D+D+C$H@0$D+V@D+D+D+V@V@0$V@V@0$C$4$L@+%6#6#6#7#7#:#:#_#g@I+J+J+J+J+J+J+J+I+@%H+_#6#s+C##%K${@]@b+]@]@]@b+b+{@u+3#B$0$D+D+V@0$0$D+D+D+D+D+0$D+D+C$V@0$V@V@D+C$0$V@V@0$D+0$D+D+D+B$V@0$V@C$0$D+D+D+D+D+D+V@V@D+D+D+D+D+D+C$D+D+D+D$C$D+0$0$C$0$D+C$D+D$D+C$D+B$D$D+D+0$C$D+D+D+D+", +"'@E$[@1#1#$%1#E$'@F$'@z#F$E$E$F$z#z#$%1#'@z#z#E$[@[@1#F$$%F$E$[@1#$%[@z#[@'@1#[@[@'@F$'@F$'@F$'@E$[@$%E$E$$%'@F$e+$%[@%% @####&%*%=%a$ @-%;%e+1#'@'@'@'@$%e+'@F$F$$%[@[@z#'@F$$%'@1#F$[@'@1#'@'@z#$%'@$%E$F$z#1#'@[@'@'@1#'@[@ @>%,%*% @m+C+'%)%!%r@B+~%{%]%r#5#r+^%s#h@D#Y#/%(%_%:%<%7#T#T#[%}%|%1%2%3%4%5%6%7%8%>%z#9%b#0%a%'@'@z#'@'@e+'@z#E$E$[@'@[@E$1#1#E$E$1#e+z#z#1#[@[@'@'@'@'@F$1#1#$%'@[@1#1#'@1#F$'@r#d@b%<%K+K+6#7#7#:#c%_#_#L@g@I+I+J+d%I+d@e%:#+%.#G+v+]@]@(#b+b+b+b+b+b+W+W+W+f%#%<@z#$%F$1#E$F$1#[@z#F$z#[@F$$%'@1#E$'@'@e+1#[@1#F$'@[@$%[@F$F$z#$%'@e+e+z#F$'@'@[@$%[@z#[@'@[@'@z#[@E$E$'@F$'@'@'@e+1#'@[@$%[@z#F$z#$%$%F$[@E$[@1#1#[@F$e+[@e+", +"-%-%%%>%-%<@,%;%,%%%;%-%<@%%>%e+-%,%e+-%>%;%<@<@e+ @ @-%-%<@e+%%;% @e+,%-%<@-%>%%%-%<@-%<@;%-%,%%%<@-%%%%%-%-%e+ @-%g%&%Y@#@h%2#Y@C+i%j%h%#@##m+ @ @-%;%-% @>%,%%%%% @<@%%-%%%,%,%>%<@,%<@e+<@,%e+-% @,%>% @e+-%,%e+e+;%;%;%%%-%>% @-%##m+h%@$k%l%M+m%!$n%d+o%r#5#p%y+G+D#D#q%r%s%t%6#7#T#u%v%w%x%y%W+Z+z%A%B%C%D%g%<@E%F%G%H%<@;%;%-%e+-%>%;%,%;%<@;%,% @%%%%%% @ @<@,%;%,%>%<@%% @,%e+-%;%%% @ @>%e+e+;%,%e+B+I+Y#I%K+K+K+6#7#7#:#_#_#_#L@L@g@J%H+d%d@K%s#L%C#M%^@{@]@W+W+b+W+b+b+W+W+W+^@^@W+#%N%;% @<@ @;%,%%%-% @ @>%e+ @e+%% @>%,%%%e+,%-%e+,% @%%;%,% @;%e+,%e+-% @-%-%,%<@,% @,%%%>%e+-%,%<@>%,%<@%%;%%%e+>%-%>%-%-%-%,%e+ @;%%%%%%%;%<@>%>% @e+e+%%;%,%", +"m+g%m+ @=%m+g%m+ @m+a$*%g%m+a$=%=%a$*%m+=% @m+g%g%g%a$m+g%a$*%=%m+m+m+m+m+m+*%=%*%=%m+m+g%m+##=%a$g%*%&%&%m+ @*% @&%#@u#O%l%P%Q%)%W@m+R%P%O%k%S%u###a$&%m+ @*%g%a$*%##a$=% @&% @=%m+g%a$m+*%*%&%m+a$ @&%g%*%g%g%=%m+=%g%a$m+&%m+&%a$a$ @a$j%W@k%i%:@)%3#r@T%X#U%V%5#Z@z+^@s+W%X%Y%Z%6#7#T#`% &.&+&@&H+v+Y+#&$&%&&&!@j%*%*&=&-&##&%*%g%=%=%a$a$*%&%g%*%&%a$ @&%*% @*%*% @&%=%m+g%##&%*%*%=%m+####=%m+*%m+*%=%=%6#7#D#K+K+K+;&6#7#T#:#:#_#_#L@g@g@J%H+H+>&,&1+'&)&.#+#t+k+K$b+W+W+W+W+W+^@^@/@v+v+^@J@!&*%*%##*%a$g%&%&%=%m+m+*%g%m+a$*%m+*%m+*%a$g%m+*%m+m+m+&%m+##&%=%##=%*%=%##m+*%a$m+a$g%m+g%g%m+=%=%a$a$g%g%*%a$a$=%g%m+=%&%##g%## @m+&%&%&%####=%g%m+&%g% @", +"u#W@W@u#W@j%m+m+Y@h%j%h%j%Y@h%W@h%j%Y@Y@@$@$h%Y@#@Y@W@h%Y@@$#@Y@h%#@Y@j%@$h%Y@j%u#Y@#@@$Y@Y@Y@m+W@j%m+#@#@#@Y@j%Y@O%i%:@!@M+Q%~&T##%p%j%{&]&^&/&i%k%Y@#@u#u#j%h%u#u#Y@Y@@$@$h%j%W@h%Y@h%u#Y@h%@$Y@j%j%#@#@j%u#W@u##@u#h%Y@@$@$h%W@j%Y@h%Y@@$Y@O%i%Q%X@P%(&_&:&X#<&A+[&J$Z@}&|&1&2&3&6#T#T#4&5&6&7&K@8&I+Z+9&0&a&b&R%'%Y@c&H#d&#@j%@$@$h%W@@$u#h%Y@h%j%#@Y@#@Y@#@@$u#Y@@$j%Y@#@Y@u#@$j%j%Y@h%u#j%Y@j%j%Y@m+u#e&I+D#K+f&K+K+K+6#7#g&:#:#_#_#L@g@g@J%H+H+h&i&&+j&.#k&+#h@+#)&G+b+^@^@^@^@/@/@/@v+k+k+v+h@l&#@Y@@$j%Y@#@#@W@Y@@$@$#@#@j%W@#@W@Y@Y@h%u#u#j%@$j%Y@Y@W@W@#@h%#@h%Y@@$h%@$h%h%h%#@j%Y@#@h%h%j%#@h%#@#@Y@j%u#W@h%h%j%#@h%Y@#@Y@u#h%#@#@j%W@h%j%u#j%u#Y@Y@", +"m&!@Y@!@C+k%C+!@!@S%S%C+m&O%i%O%C+!@O%C+O%S%!@!@S%!@O%!@!@k%O%!@k%k%!@S%!@!@!@!@C+!@!@k%k%S%!@Y@Y@!@!@m&!@C+C+C+Y@2#:@M+{&3#n@B+n&H+L@o@n@o&p&o&)%)%:@l%S%C+S%C+!@O%S%i%C+!@k%!@Y@!@!@k%!@C+!@O%k%k%O%C+!@O%!@C+Y@!@O%!@m&!@O%O%!@O%i%C+C+i%i%O%m&!@l%P%]&m%q&B#r&_@A+s&(@t&u&v&w&x&6#T#T#y&z&A&B&C&Y#x+X#D&E&F&G&n@M+H&I&J&K&C+!@Y@!@C+i%!@!@C+O%C+k%!@!@S%O%C+!@!@!@m&O%O%!@C+O%m&O%S%!@k%i%!@!@!@k%!@m&L&M&D#K+f&K+Y#Y#N&6#T#:#:#:#O&L@P&g@g@f@H+H+C&N%m@D#.#.#.#+#.#Q&h@d$b+^@/@/@/@v+k+k+d$d$k+8#J@{&!@!@O%i%!@Y@!@!@m&O%O%!@!@!@C+!@O%k%C+C+C+k%C+!@O%O%k%O%!@C+k%!@i%O%S%k%i%m&k%!@!@O%k%!@!@C+m&k%m&m&k%k%S%m&O%S%m&!@O%Y@k%C+i%!@O%k%!@!@k%O%O%C+C+k%C+", +"l%l%Q%:@:@:@X@Q%X@:@:@Q%X@/&:@:@'%:@:@/&/&:@:@:@2#Q%'%!@!@:@/&:@:@:@:@:@l%:@X@l%Q%:@:@X@Q%:@/&l%:@/&:@:@:@:@X@'%:@R&M+b$!%r@B+S&T&Z+d@C&#%!$3#`+U&o&V&P%l%:@Q%:@X@'%/&:@l%/&!@:@'%'%:@:@X@X@/&l%!@Q%/&:@Q%/&/&:@Q%:@Q%:@:@Q%l%/&:@2#:@Q%2#Q%!@/&/&'%Q%R&R%n@3#W&B+X#X&V%Y&Z&`& *.*+*6#T#T#@*#*$*%*&*D+{+**=*-*;*>*!$b$,*'*)*!*:@/&l%l%:@/&/&:@X@Q%:@:@/&:@'%2#/&l%2#'%Q%!@X@:@l%/&:@X@:@:@Q%:@:@:@:@l%/&U%@&K+I%K+f&Y#Y#Y#K+6#7#T#:#:#O&L@~*g@g@f@H+H+{*{@6+]*.#.#^*.#+#.#+#C#^@/@/@/*v+v+k+d$d$#%8#d$(*_*X@2#:@:@:@l%X@l%X@/&:@'%'%2#Q%l%:@:@:@l%l%:@/&l%/&Q%:@/&:@:@/&:@:@X@!@:@:@/&2#:@:@:@Q%2#l%/&l%2#/&:@Q%2#X@l%Q%2#l%Q%:@:@:@2#'%Q%/&/&:@'%:@/&'%:@Q%l%l%", +"M+:*:@M+M+R&R&M+M+M+)%R&M+M+:*R&)%)%M+R&)%M+M+M+P%M+M+M+R&M+:*M+^&R&)%)%^&M+)%M+M+M+M+R%)%M+M+:*R&P%)%)%R&)%M+R&R&R%b$<*[*}*0#X#|*[*1*_#C&2*n%q&3*}*r@4*o&]&)%M+R&)%M+P%:*R&P%R%P%R&R&M+P%P%P%:@M+R%M+R&M+M+M+M+M+:@M+P%M+)%)%M+M+P%M+)%:*M+)%M+R&M+P%)%P%]&!%p&5*0#d+j+r+Z@6*7*8*9*0*T#L@H+a*b*c*d*e*f*g*h*i*j*k*U&_&l*m*n*o*P%)%^&)%)%)%P%M+M+^&^&R%M+)%R%:*M+P%)%R&R&M+)%M+)%M+M+M+M+M+M+)%M+M+^&P%p*H+T#Y#K+Y#Y#Y#D#Y#K+6#q*T#:#:#_#L@g@g@g@H+H+H+r*o@3+h@+#.#+#+#+#+#.#+#d$^@v+v+k+s*d$t*#%8#G+G+#%u*v*P%M+M+R&P%R%P%M+M+P%)%M+^&M+M+R%R%R&:*R&:*M+M+R&M+P%R&R&M+M+)%M+M+^&P%)%M+P%M+)%R&M+:*M+R&)%)%M+M+P%:*R&)%P%:@R&M+P%P%R&R&M+R&)%M+R&M+R&M+:*M+P%R%R%", +"n@n@n@n@n@n@n@n@n@{&n@n@n@{&o&n@n@n@n@o&{&n@n@]&n@n@{&n@o&n@n@n@n@n@n@n@n@n@o&n@]&o&n@n@]&{&n@o&{&m%o&n@]&n@o&n@n@o&3#4*r@B+w*|*d+<&4#&@L@@&t+j+!$4#0#}*`+r@4*3#]&n@n@n@n@n@]&n@n@n@o&V&n@)$n@]&V&o&{&n@]&m%n@n@{&n@o&n@)$n@n@n@n@n@o&o&{&V&n@n@n@{&M+(&n@!%(&r@T&0#X#x*q@z+y+y*z*A*B*c% #r#C*D*E*F*G*H*I*J*K*L*z+r@M*N*O*P*Q*]&<*n@o&{&n@n@]&n@n@n@n@n@o&o&{&n@n@o&V&n@n@{&o&{&b$]&n@{&o&n@]&V&)$n@]&.#H+D#K+Y#R*Y#D#D#j&K+6#S*T#:#:#_#L@g@g@J%H+H+H+R#w+6++#h@+#+#+#+#+#+#h@t+/@k+k+d$d$#%#%8#8#G+G+s#G+T*U*n@]&{&]&n@n@)$n@n@]&{&{&b$n@o&n@n@]&o&n@o&]&)$n@n@{&n@o&]&n@n@]&n@n@n@n@o&n@n@]&n@n@n@n@o&n@n@n@V&n@o&o&n@n@n@n@n@m%n@]&n@n@{&n@n@n@n@{&n@o&n@n@o&", +"3#4*3#3#3#3#3#3#3#3#3#4*3#!%(&3#3#3#3#3#3#3#(&!%3#(&3#3#!%3#3#3#3#V*4*3#3#3#3#3#!%4*U&3#3#3#3#3#3#3#<*3#3#!%3#3#3#3#r@r@W&B+0#r&_@c@c$d+(@@&R#h@Z&`+X#W*4#X*`+`+r@r@(&3#3#!%3#A#3#4*3#3#3#3#3#3#!%3#!%3#3#!%3#3#!%3#3#3#3#3#3#3#3#3#(&4*A#3#4*(&3#!%3#3#3#r@r@!$B+n%d+j+r#z+y+Y*Z*`* =.=/ +=6+@=#=$=%=&=*===-=W+j+0#;=>=,='=3#3#3#3#3#!%3#3#3#3#3#4*3#3#3#3#3#3#m%3#4*3#3#3#!%3#3#(&(&4*3#3#!%3#3#3#)=R#s+Y#D#D#D#D#D#!=~={=6#]=T#T#:#_#_#g@g@H+H+H+I+^=4$@@/=(=+#(=+#h@h@h@h@+#k+k+k+d$#%G+_=8#G+G+s#u+s#u+:=_@3#3#3#3#3#3#3#3#!%3#!%4*3#3#3#3#3#3#3#3#3#4*3#3#(&3#3#!%(&3#3#3#3#3#3#3#4*4*3#3#4*3#!%3#3#3#3#3#!%3#3#3#3#(&3#3#3#U&(&3#3#!%3#3#3#3#3#3#3#3#q&V*", +"[*r@r@5*r@r@r@r@_&r@r@r@r@r@r@r@q&r@r@r@r@r@5*r@5*r@r@r@r@[*r@r@r@r@r@[*r@r@r@r@r@[*r@<=r@r@5*r@r@V*r@T&r@r@r@p&T&r@r@`+`+B+4#X#_@c@c$A+_@Y+[=C&:#o@c@}=_@d+X#4#0#T%`+`+`+`+r@r@r@r@W&r@!$r@r@r@[*r@r@r@r@W&r@[*r@r@r@r@W&r@r@r@r@[*r@r@r@r@r@r@r@`+|=}*X*B+3*4#X#l&j+A+5#z+Z@W+1=2=3=4=5=6=7=8=8=9=0=a=b=w+c=W+r&d=e=f=g=h=[*r@r@_&r@r@r@r@r@r@r@r@T&r@r@r@r@p&r@r@r@r@r@r@r@r@r@r@r@r@r@r@r@r@r@6*h&]*Y#Y#D#D#u*i=s+D#Y#K+6#7#T#T#T#_#_#L@g@H+H+H+I+d@j==+t+h@+#h@+#k=h@h@h@s+s#l=#%G+z$v+d$s#G+s#s#u+u+s#m=n=:&r@r@r@o=r@r@r@r@r@r@_&T&r@r@p&r@r@[*r@r@r@o=p&r@W&p=r@5*r@r@5*r@r@p&r@r@r@r@r@r@[*r@r@r@r@r@r@r@r@r@r@r@r@[*r@r@5*r@5*r@r@r@p&r@r@r@_&[*r@r@5*", +":&`+|=:&|=`+`+`+:&`+`+`+`+`+`+B#`+`+:&`+:&`+|=|=`+`+X*:&|=`+`+`+|=`+`+`+`+`+`+`+`+|=B#:&`+`+:&`+`+`+`+`+|=`+`+`+:&`+`+B#T%B+4#X#d+c@c$A+q=c@]@h&h&I+r=I@d+d+s=_@d+X#4#4#0#B+B+B+|=`+`+`+`+B#`+`+`+`+`+|=B#`+`+`+:&`+`+B#!$X*`+`+`+`+:&:&`+`+t=B+/#0#4#4#X#X#d+_@j+c$q@5#@#Z@#%M+u=v=w=x=y=z=A=B=C=D=E=F=G=H=o@I=J=K=L=M=N=`+`+`+`+:&`+`+|=:&`+`+`+`+`+|=`+`+`+|=`+:&`+`+`+`+`+`+`+`+`+|=`+`+`+|=A+R#Y#D#Y#u*O=s+P=s+s+D#!=K+w$7#7#T#T#_#Q=L@g@H+H+H+I+J+N%C.R=S=+#T=h@T=s+h@h@s+J@U=V=-$I@c$(@W=u+s#u+u+t+t+s#D#k+`+:&|=`+`+B#`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+`+:&|=`+`+`+`+`+`+B#`+|=B#`+:&`+|=`+`+`+`+`+`+`+`+S&`+`+`+|=`+|=`+`+`+:&`+:&`+`+`+`+`+`+`+`+`+", +"B+B+3*B+B+B+B+B+B+B+B+/#T%B+B+t=t=B+B+B+B+B+B+B+B+B+B+B+T%B+B+B+B+B+B+/#B+B+T%B+B+B+B+B+B+B+B+T%B+t=B+B+B+3*B+t=3*B+/#B+0#0#4#4#d+_@j+A+r+X=A+/@Y=[=R#T#Z=Z&c@_@j+j+c@_@d+`=N@4#4#0# -0#0#B+B+B+t=B+B+T%B+T%B+B+B+B+B+t=T%w*B+B+t=/#B+0#0#.-4#4#X#d+_@c@c@j+A+a+r#5#z+z++-s#^+@-#-$-%-&-*-=---;->-,-'-)-!-~-{-]-^-/-(-_-t=T%B+T%t=B+:-/#t=t=T%t=B+B+t=B+t=B+/#T%B+B+B+B+B+B+T%B+B+B+B+T%/#B+B+~%$@T*s+D#D#s+s+<-P=s+s+D#Y#K+K+7#7#T#T#_#L@L@g@H+H+H+I+J+{@<.8#D#+#+#h@h@s+s+D#K+[-}-|-1-2-3-4-L+ #u+u+u+t+t+t+5-:#Y+B+B+B+B+B+B+/#B+:-B+B+B+B+/#B+B+T%B+B+B+B+B+B+B+B+T%B+B+T%B+B+B+3*B+B+T%B+B+B+t=B+B+B+B+B+B+t=B+T%B+:-t=t=B+B+3*B+B+B+B+B+/#w*B+B+B+B+B+B+B+", +"0#0#0#6-0#.-0#0#0#0#0#7-.-0#4#.-0#0#0#0#0#0#.-0#0#0#0#6-.-0#0#0#0#6-.-0#.- -0#0#6-0#0#0#7-0# -0#6-0#6-0# -0#0#6-0#0#0#6-0#0#4#X#X#_@8-9-r#X=@#a+0-C&h&h&d@K+8#t#A+c@c$c$c$j+c@_@_@a-X#b-r&4#4#4#0# -6-0#0#.-0#0#0#0#0#.- -0#0#0#.-4#4#4#X#d+_@c@j+c$A+a+r#I$A+_$r+5#@#~@k+*+].c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-b*r-s-t-u-N@0#0#0#0#0#.-0#0#.-0#0#0#0#0#0# -0#0#0#0#0#0#0#.-0#0#.-.-.- -0#0#0#0#c@J@g@v-j&D#s+s+<-h@s+s+S=s+D#K+M@6#7#T#w-:#L@L@L@H+H+H+I+x-]@V d$D#h@k=h@h@s+!=.#/*y-z-A-B-C-D-E-X=F-C#u+t+t+t+ #t+C#g@G-0#0#n%0#0#.-0# -0#0#0#0#0#0#0#6-0#.-6-.-0#0#.- -6-.-0#0#0#.-0#0#6-0#0# -6-0# -.-0#0#0#6-0#6-.- -.-7-0#.-0#6-0#0#0# -0#0#0#n%0# -6-7-0#6-0#", +"H-4#H-4#N@4#4#4#4#4#|*N@4#H-~%4#H-4#4#4#4#4#~%4#4#H-H-N@4#4#~%4#N@4#4#4#4#H-~%r&4#4#4#N@H-4#4#4#H-4#~%~%H-4#N@4#4#4#4#4#4#~%b-I-d+~$s=c$I$J-@#(@5#/@@&C&C&@&I+7#C#b+I@I$K-c$I$A+H$c$8-c@_@_@~&d+d+G$X#`=L-N@N@4#4#W*r&N@4#~%X#b-G$d+M-<&c@j+c$A+a+r+N-I$O-P-/@b+Y+X+]@b+<.Q--.&%R-S-T-U-V-W-X-Y-Z-`- ;.;+;@;#;$;%;&;X#~%N@4#~%~%4#4#H-4#r&4#~%4#4#4#4#4#4#4#4#4#4#~%4#4#4#4#H-4#4#4#4#4#4#~%/@L@.#Y#D#D#s+s+h@h@h@h@s+D#Y#Y#6#6#7#*;w-_#_#L@~*g@H+H+I+J+]@f ^@=;h@h@s+-;D#_*;;>;,;';);!;~;{;];^;G-#% #t+t+t+C#.#u+/@^@4#4#N@4#N@4#W*4#N@4#H-4#4#4#4#H-N@4#~%4#4#N@H-4#4#4#~%4#4#4#4#4#|*4#~%4#~%4#4#4#4#~%4#4#~%4#4#~%4#H-W*N@~%4#4#4#4#N@N@4#~%4#~%N@4#4#4#4#4#", +"X#X#X#G$X#`=X#b-L-L-X#X#L-I-X#L-X#X#X#`=X#I-/;X#X#X#X#G$L-X#b-X#L-`=X#X#X#X#X#b-X#G$L-/;X#I-X#X#X#X#X#b-L-X#`=L-X#X#`=b-`=X#L-b-(;_@c@j+A+r#@#Z@Z&_;:;d@@&R#R#R#J+_#D#t+<;[;};A+A+a+a+a+H$A+1*]%|;c@s=_@_@_@~&a-l&d+d+d+d+d+_@1;2;j+j+A+a+r#N-3;5#4;z+W+d$j+D 5;N.^+3#E+Q-6;++7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;j+_@d+/;L-L-X#`=L-X#G$G$`=b-X#b-X#b-X#b-X#X#`=`=X#X#I-X#X#`=`=b-X#`=X#L-b-X#n;7# # #^*D#s+s+h@h@h@h@s+D#Y#o;K+6#6#7#g&_#_#L@~*g@g@H+I+J+]@; ]@N&[-h@<-s+Y#o@p;q;r;s;t;u;v;w;x;y;z;I@A; # #.#t+]@I@c+B;X#L-X#X#X#X#b-X#X#L-L-L-L-/;`=X#X#`=b-X#X#X#`=X#`=X#X#G$X#b-X#X#`=`=X#X#`=/;X#X#X#X#X#X#X#X#X#X#L-X#X#`=X#L-L-/;X#`=X#`=b-`=X#b-I-X#X#X#X#", +"d+d+d+(;d+~&d+a-d+d+d+a-d+d+d+(;(;d+a-~&~&l&~&d+C;d+d+~&a-d+(;a-~&(;a-~&d+C;d+a-a-d+d+~&C;d+_@d+~&(;a-d+d+(;a-a-(;l&d+~&d+d+a-d+_@c@x*D;c$E;F;_;G;H;Z&I;g@R#R#K@d@K@J+L@6#h@ #k+J;K;3;_$a+r#N-r+q=a+A+A+c$K-j+j+j+j+c@D;j+|;K-L;H$q@O-5#@#@#r+@#M;d$t#& N;O;P;Q;W*r+_@%+R;x S;A=T;U;V;W;X;c;Y;Z;`; >.>+>@>a+r+A+8-_@_@d+~&(;~&(;(;a-d+~&~&~&~&d+a-(;a-(;d+d+a-d+a-a-l&(;d+(;d+~&~&d+(;d+M-~&o@#>[=L@.#t+$>+#-;h@h@h@h@D#D#f&K+6#6#7#T#:#_#_#L@g@g@g@%>J+b+4 X+6#+#h@h@s+=;&>*>C-=>->;>>>,>'>)>!>~>I@J;{>s#{@~@t#k+]>u+_@M-d+d+d+(;d+(;d+~&(;~&~&a-d+l&d+d+(;~&d+(;l&~&M-d+M-d+a-d+d+C;C;~&a-d+d+d+(;(;d+d+d+a-a-a-C;d+d+C;d+a-a-d+(;M-~&C;~&C;~&l&d+a-(;a-d+l&(;", +"_@_@_@_@^>c@_@1;~$_@1;~${%X&1;_@_@~$~$_@X&<&~$1;X&1;_@~${%^>1;^>_@c@~$1;_@_@^>~$_@^>~$_@_@^>^>_@_@1;_@~$^>^>^>_@~$~$<&^>1;_@~$_@~$X&c@j+1*I$/>@#(>Z&_>:><>7#@&K@K@d@J+J+I+H+:#K+h@ #s#k+X+[>@#O-4;U*[&J-N-r+}>r#_$a+a+I$I$|>/>r+1>2>G-G-5#t&/@3>g+9.4>5>6>7>8>9>0>T#v+5#r+i&a>U;b>B=c;X;c;c;C=c>d>e>& X+5#1>r#9-|;o%_@_@_@{%X&^>_@~$^>X&~$_@^>^><&~$_@1;^>1;<&^>_@_@1;1;_@_@1;1;_@_@~$^><&<&r#+#f>g>h>I+s+u+ #+#v-h@v-D#D#Y#Y#K+6#i>T#:#:#j>L@g@g@g@H+k>b+l>L+v$m>h@h@h@~=n>o>p>q>r>s>t>u>v>w>x>Y#:;Z@~@~@Y+#%6#K@e%y>c@{%_@~$_@_@_@_@^>_@~$_@_@_@{%~$_@_@{%~$^>^>~${%{%_@_@^>~$~$_@_@^>~$1;^><&^>1;^>^>1;X&<&~$_@1;{%~$<&~$<&~$1;_@_@_@1;1;<&c@_@X&_@1;_@~$_@1;", +"o%x*j+2;j+c@2;x*s=U%2;o%j+U%x*z>x*U%j+c@x*j+j+o%z>x*c@s=s=U%s=c@x*U%U%2;o%U%U%o%o%z>j+x*c@j+x*U%U%o%x*j+j+z>j+s=j+j+2;2;2;j+o%U%o%x*|;A$A>V%|>@#B>Z&i@x+C>Y+h@R#d@K@J+J+I+I+I+H+L@T#D#+# #t+s#_*]@Z+D>E>3;N-F;X=G-F>9&G>F>H>E>(@Z@F>K;w+8#Z@i+I>J>K>L>M>N>O>P>Q>R>:=d$w+s#Q&S>T>c;D=Y;U>C=0=V>W>X>8 c=Y>Z>F;r#`>D;j+z>2;o%2;c@o%j+s=j+U%2;o%c@U%c@x*j+z>s=j+o%x*j+j+x*x*o%j+U%o%c@j+U%o%2;U%r+o@ ,.,+,.,h>d@D# #@,T=D#D#D#Y#K+6#6#T#T#:#:#_#L@L@P&g@H+#,$,l>L+7#n;s+s+s+%,&,o>*,=,-,;,>,,,',),!,b+I@I@X+s#6#d@R#J+)&+-A+c@z>j+j+z>j+x*o%s=x*U%U%j+U%o%U%2;o%U%c@c@s=z>c@U%U%s=o%c@x*o%s=o%j+U%x*z>j+x*z>z>U%j+s=j+z>U%z>U%o%2;2;o%U%c@U%j+U%s=x*x*U%s=o%o%o%j+x*", +"]%]%A$&@|;A$j+c$|;&@D;c$c$&@c$c$8-c$c$&@]%]%8-]%A$c$|;]%c$&@A$&@c$&@c$D;]%c$|;c$c$&@A$c$]%c$c$D;A$8-c$A$]%c$A$|;c$c$D;]%]%c$c$c$A$&@c$A$~,{,q@/>X=Z@Z&I@P-],L+u+d@d@d@J+I+I+I+H+H+H+L@_#7#D#+# #s#8##%d$v+b+Z+^,Z&z+9&H>Y>(@E#Z&/,G+w+Z.(,_,:,a <,[,e-T;},|,1,2,3,W=o@+#Y=4,3>5,6,7,X;c;8,9,0,& $%b+a,Z@G>};b,V%~,&@]%D;A$D;j+c$c$c$c$c$D;c$j+&@A$]%D;c$&@|;]%]%c$c$c$c$A$c$|;]%&@c$8-A$|;]%b,P-^*@&c,.,+,.,c,@&T#.#J@s+6#6#6#6#7#T#T#:#:#_#L@L@L@g@H+J+W+l>x+7#(=s+s+s+K+d,e,f,g,h,i,j,k,l,m,n,y+o, #7#x-@&p,H+6#q,E>r,&@8-c$c$c$]%]%]%c$D;]%A$c$c$8-c$&@D;&@&@A$c$&@A$]%&@A$8-j+|;A$c$]%c$A$A$c$c$A$j+]%&@&@8-]%&@8-c$A$A$A$D;D;j+|;j+A$&@A$8-|;&@D;c$&@|;&@&@", +"r,A+A+~,A+A+A+c$A+A>c$L;A+A>~,A>K-r,K-~,r,~,~,A+A+A+L;~,A+A>A+K-A+A+A+1*K-r,A>r,~,r,1*A+A+K-A+A+K-A+r,A>~,1*c$A>r,A>A+r,A>K-~,A+A+A+A+K-s,H$b,r+s&F>(>c+t,u,Y+Y+/*L@d@J+J+I+I+I+H+H+g@L@L@:#7#6#Y#s+J@u+#%k+v+#%d$k+v,b+]@W+_*d$4#w,x,y,z,A,B,C,D,E,F,G,E,H,I,J,K,{@v+L,@&K@L%M,N,O,P,Q,R,S,8 ^,T,B>Z&Z@p%/>E;{,A>A>A+K-r,A+~,~,r,A+~,A+A+A>A+~,r,A>~,~,A>A>A+A+L;A+A+r,A+A+A>A+~,1*~,A+A+~,a+y+W+ #7#C&h>U,g>g>U,[=L@s++#Y#7#T#T#:#:#_#_#_#_#_#P&g@H+J+,&V,L+T#T=s+D#D#{=W,t,X,Y,Z,`, '.'+'@'^;A;O&d@d@#,I+_#+##%Y+p%K-L;~,A>~,r,~,A+~,A>r,~,~,r,r,r,~,A+r,K-A+L;A+A+A>A+L;1*~,L;1*r,~,A>~,K-1*r,A+L;1*r,A+A>A>A+A+A+~,r,r,r,r,A+A+A+r,L;~,1*A>A+A+K-K-~,A+A+L;", +"V%H$a+s,a+a+V%a+a+a+9-`>`>H$a+V%a+9-H$H$V%`>a+`>V%a+a+s,`>{,`>V%a+H$a+s,a+{,a+A+V%a+`>`>a+H$a+V%{,`>a+a+a+V%a+s,a+a+s,A+a+V%a+s,s,H$a+`>{,9-I$4;s&Y&G>G;y+~@#'$'z;%'K+K@J+J+I+I+H+H+g@g@L@L@_#:#7#K+Y#D#s++# #u+8#W+w+Y+L+Z& @M &'*'='-';'e->'E,F,,'G,S-P>'')'!'~'z;d$&>g@J+%,{']'^'/'('4 '@k+I@t&_'(>Z>5#r+_$`>s,a+a+a+a+a+a+`>s,`>s,a+a+V%a+a+a+{,V%`>a+9-a+H$`>9-9-s,H$V%`>`>s,s,{,a+{,`>V%5#:'b+<'C#T#@&h>#>['}'.,|'J+w$s+K+:#L@L@1'_#_#_#_#L@g@H+d@,&r.Z+T#h@D#D#D#6#s#`@D#2'3'4'5'6'7'+#_#K@d@H+J+L@+#u+v+8'(@_$a+s,9-s,s,H$s,a+a+s,a+{,A+s,`>`>s,s,`>V%a+{,A+a+V%`>A+{,a+V%s,`>V%s,s,{,s,`>s,a+`>V%{,A+a+`>H$`>a+s,9-s,a+a+H$9-`>`>s,a+H$H$s,a+`>a+`>s,s,", +"r#I$E;r#a+I$r#I$E;_$r#b,r#I$I$q@r#r#q@<#q@E;b,r#b,E;E;r#q@q@r#b,E;b,r#r#I$<#q@r#I$b,r#r#b,r#q@<#b,q@_$<#_$_$b,r#r#b,b,I$_$b,q@I$E;I$r#q@E;I$r#|>};J-@#Z@t&[>[;L+9'i&0'a'J+I+I+I+H+H+H+g@g@g@L@_#_#:#6#Y#s+h@h@h@.# #8#/@t#X#g+k l>b'c'd'e'f'P>g'|,E,h'i']'j'k'l'c=v+%'{@J@J+~*{@m'n'o'U c=b+p'c+y+E#Z@3;};/>|>q@r#E;q@r#b,<#r#r#b,I$r#q@<#r#r#r#I$_$b,a+q@r#q@r#b,r#b,_$r#a+r#q@_$I$E;E;b,E;q@<#F;K;<>W+G+A;q*@&Y=c,.,g>['q'r'_#f&K+:#g@f@g@L@L@s'g@H+d@W+t'L+:#<-D#R*Y#T#W=w+u'N%o@/@s#R*v'd@p,w'J+_#+#x'^;i&y'z+r+r#q@<#q@<#E;r#_$r#<#a+q@b,r#r#b,q@b,r#<#b,b,E;b,_$a+r#q@q@<#q@b,<#<#E;_$<#b,E;r#E;b,q@r#q@r#q@<#I$r#<#b,r#q@r#I$<#b,b,r#E;I$b,r#b,b,r#_$I$<#", +"/>O-r+r+4;4;r+}>|>q=r+r+4;q=r+}>r+r+r+r+r+q=}>r+}>r#q=r+|>q=4;4;O-/>q=}>}>|>/>r+r+r+r+r#r+|>|>r+r+q=q=}>/>}>/>/>r#4;q=q=q=/>q=/>/>/>4;q=|>r+/>O-[&[&1>@#a,z'[>~@u,A'0'w+k+_#J+H+I+I+H+H+g@g@L@L@_#_#T#T#6#D#h@J@ #G+]@r#6+m+A+E;B'C'D'E'F'U;G'H'F'I'J'K'L'L'M'N'H=O'w+o,N%:#H+t+H>^+M-#%P'D>H;c+Z&Q'G>F;[&/>[&}>/>|>|>r+O-r+r+/>r+/>}>r+|>|>O-r+r#r#r+|>q=r+/>/>/>r#O-|>r+/>}>r#r+}>}>}>O-r+O-}>O-|>@#y+`@W+<'C#%,K@[=h>U,['['#>h&H+T#6#R'L@H+g@g@H+H+K@S'T'U':#s+Y#6#6#+#V'w+b+k+/=6#J+K@g@H+d%:#J@u+l=i&y>z+U*O-|>r#}>}>|>O-O-r+q=r+O-r+|>4;}>q=|>r+|>r+O-q=/>q=O-|>r+/>q=/>|>/>r+r#r+/>4;q=|>/>}>O-q=|>}>r#}>/>/>r+r+q=}>}>|>/>}>q=}>O-r+|>4;}>r+}>|>/>q=|>q=", +"5#U*N-J-U*};[&U*5#r+J-5#s&5#};5#s&s&J-5#J-s&N-};U*5#s&U*[&};[&U*5#J-};U*N-[&s&};s&r+N-};r+U*r+[&U*5#};N-[&J-r+s&[&U*N-};[&r+s&[&};s&U*[&N-[&r+};s&p%Y&F>B>(@Z&:>~@W'X'T,{@b+v-J+H+H+H+H+g@g@L@L@L@_#_#_#T#6#K++#s#o@j+/ / r@y+v,Y'Z'`' )a;b>I'b;.)+)U>@)L'#)$)L+/*%)y$w+Y+&>:#:#^@d$j=y>;;_>[>+-4-Q'9&1>5#r+5#N-U*J-s&s&5#};};J-U*J-5#5#r+N-N-U*};J-r+};r+5#[&J-N-5#s&5#J-};s&[&U*U*J-J-r+r+[&[&[&N-r+5#F>D>Y+W+_=r=j&I+[=Y=&).,g>U,h>R#*)6#6#:#p,J+J+=)-)u I@g@K+i=;)/@>)k+u+(=1'J+I+L@H+I+N&J@W=/@X+t,(>5#U*r+J-};s&J-s&[&[&s&[&U*[&s&J-5#5#J-s&[&U*};};5#U*J-N-s&[&J-};s&[&};5#U*r+};5#s&N-};J-[&[&5#U*5#N-r+r+};r+r+N-r+J-N-};s&J-J-5#U*r+N-5#s&5#};s&s&5#U*", +"3;F;@#Y&@#3;Y&Y&p%X=@#@#p%F;Y&Y&X=F;@#3;Y&@#F;F;@#Y&F;F;F;@#Y&F;@#p%p%5#F;Y&p%F;X=F;F;@#Y&Y&F;@#Y&@#X=X=3;Y&3;F;p%@#p%@#1>Y&@#@#F;F;X=5#F;5#@#Y&Y&p%9&Z>_;,)(>K;c+~@#'A'w+')N%))_#!)H+I+H+H+g@L@L@L@_#_#_#_#T#6#+#/@'@7 X#L+{@~)Z;{)])T>J,J'N,N,5,^)X;/)()_):)z;')Y+8'<)z;[)c=})')y>|)P'_>c+1)(@Z@a,z+9&@#F;Y&p%X=F;@#3;Y&@#1>p%p%X=@#@#Y&3;Y&@#X=X=p%Y&3;F;3;@#p%F;3;3;p%Y&3;F;@#F;Y&F;X=@#F;p%1>p%3;Y&Y&F;a,i@2)b+#% #3)g@C&4)q'U,g>U,8&[=J+T#K+:#5)C&d$6)(@Y#v+7)V'8)/=K+H+K@H+g@I+9)Y#/=0)O'a)_>(@@#5#p%Y&3;@#1>F;F;3;F;Y&3;3;F;p%X=p%@#F;p%p%X=1>1>@#@#p%@#5#3;1>3;3;@#Y&p%5#X=F;F;Y&3;@#Y&X=1>F;Y&p%1>p%5#X=@#1>X=X=Y&p%1>@#3;@#@#3;3;@#Y&F;p%5#p%3;p%@#@#", +"2>9&G-9&@#2>2>F>2>z+2>2>G-z+G>G>G>G>F>F>@#9&Z>G-9&F>@#9&G>G>9&G>9&Z>@#F>9&@#F>9&@#F>G>Z>2>2>G>Z>Z>z+G-2>F>G>2>2>G-F>G>z+@#z+G-z+G>G>G-@#F>2>@#z+F>F>G>@#,)a,(>+-p'I@[;u,`@w+{@b);$M%_#J+H+H+H+g@g@L@L@_#_#_#_#:#:#Y#~@Z+8#8#c)d)C,c;.)0=0=X;7,0=0=N,0=e)f)g)I@d$t#2)u,h)L+L+h)y>x+C>[;I@c+_'i)Y>Z@a,2>G-G>G-F>Z>G-G>G>2>z+z+@#G-9&F>G>G-G>9&Z>z+G>G-2>2>F>9&G>2>Z>9&G-G>G>2>9&Z>G-F>2>z+2>z+9&@#G-F>Z>G-Z>Z>9&2>Z@j)u,q,d$U#.#*;K@[=|'#>k).,#>h>R#:#K+J+l=K Q']@b+u+~=L@e@d@f@~*K@l)s+C#<'m)%)~@i)Z@Z>@#z+z+@#9&9&G-G>2>G-9&@#F>F>2>G>Z>G-Z>G-Z>G-2>2>Z>9&9&G-z+G>z+G>z+Z>z+9&2>2>Z>G>G>Z>2>z+9&Z>G>z+9&Z>2>G>@#G-z+@#G-G>z+G-2>F>2>@#G-F>2>G-z+G-2>F>G-2>2>Z>z+", +"H>a,H>Z@_;Z@B>Q'B>,)Z@_;Q'H>_;_;z+Q'Z@Z@Z@B>B>H>_;Z@B>Z@B>B>Z@Z@Z@Q'Z@Z@,)Z@z+a,Z@_;Q'Z@Z@Z@Z@B>Z@H>Z@,)Z@,),),)Z@H>B>H>_;,)H>H>Z@Z@B>B>Z@H>_;,)Z@a,Z@,)a,E>(@Z&n)i@:>~@t#v*o)T,]@7)p)+#g@J+g@H+g@g@L@L@_#_#_#_#_#_#g@:#Y#s#q)r)s)t)N,U>0=u)N,N,7,U>O,v)9,w)]@x)P-C>|)x+x+|):'L&L&t,:>c+y+t&Y>(>Y>Z@a,B>Q'H>Q'H>Z@H>B>B>Z@B>H>Z@Z@B>,)a,Z@Z@H>Z@Z@Z@z+H>Z@H>Z@B>H>Z@B>z+,)a,B>Z@Z@B>H>z+B>Z@_;B>H>,)Z@a,H>a,a,H>,)Z@(@y)z)o@k+u+.#s+I+C&h>h>U,g>g>A)h&I+<-,&B)J@:#C)D)H+g@#,g@7#3) ##%(#E)I@+-,)B>Z@H>H>,)Z@H>B>Z@Z@Z@Z@Z@B>Z@Z@B>a,B>Z@Z@Z@H>,)Q'H>H>H>H>,)B>,)_;H>Z@Z@,),)Q'Z@a,Z@Z@Z@Q'Z@,)Z@Z@a,B>B>Z@Z@Z@Q'Z@Z@,)B>H>B>Q'Z@z+Z@Z@_;Z@Z@Z@Z@Z@H>H>B>,)_;Z@Z@", +"(>Y>Z@4-(>Y>4-E#(@J$(@(@E>E#(@(@Y>Y>(@E#E>(>4-E#Y>(@Y>(@(@E#J$E#J$Y>E#Y>(>Y>(@Y>(>Y>(@(@E>(@Z@(>(>(@E#(>(@4-(>Y>E#4-(@4-4-(@(@E#(@(>(@E#(@(>J$Y>(>(@(@Y>Z@E#Y>Z&Z&y+i@F)x+G)l+c=w+{@b+&>&,+#L@d@H+g@g@g@L@L@_#_#_#_#:#7#6#G+X+H)t)6,+)0=0=I)c;+)J)K)L)M)N)[>v+|)#'~@~@I@6*_>y>~@:>H;c+y+_'+-t&(>4-E#(@J$4-4-E#(@E>Z@E>Y>(@J$(>4-E#(@J$Y>J$J$Y>(>J$Z@E#(>Y>E#(@E#(>(@4-Z@E#E#(>J$E#E#(@(@J$(@Y>Y>(@(@Y>(@(@(@J$(@(@E#(@(>G;y)[;X+p)<'$>n;c%@&[=h>8&O)+,[=g@I+I+d@H+_#L@d@w'K+.#u+-)N%L+:>G;(>4-4-E#E#(@E#J$E#J$E#E>E#(>E#(@E#(>(>(@E>4-Y>Y>(@(@(@(>E>E#4-Y>4-E#J$(@(@(>E>J$(@Y>(@E>(@Y>(@(>(@E#(@(>Y>4-(@E#E>E>(@(>Y>E#(>E#(@(@(@(>(>E>(@(@E#E>4-(>4-Y>(>Y>E#(@E>", +"i)n)Z&(@z'z'G;t&t&i)Z&Z&Z&+-n)Z&+-i)t&(@t&i)Z&Z&(@Z&Z&i)+-t&z'z'(@Z&Z&+-i)z'i)t&t&z't&z'i)i)z'+-(@Z&t&Z&G;z'Z&t&t&(@n)+-(@z'z'i)(@i)+-+-t&(@+-n)n)n)Z&+-z'Z&t&z'p'p'y+P)H;L&G)L+Y+X+T,]@W+b+Q)m=_#I+I+H+g@g@L@_#_#_#:#:#T#8#R)S)6,N,u)0=N,/)T)U)V)W)X)Y)s@G+P-L+x+^,I@Z)I@6*Z)6*I@c+c+`)`)y+(@t&Z&n)n)z'Z&Z&z'Z&Z&Z&z't&(@i)t&n)z't&Z&Z&Z&i)z'z'i)n)z'i)+-Z&i)Z&n)z'+-i)z't&G;+-z'+-Z&i)G;t&+-t&z'G;i)i)(@Z&G;t&n)z't&z'i)z'(@y+y'Y+(##% !.!D#I+h&[=Y=c,h>J+R'R'I+J+]>h@n&G+^@i&t#c++!z'Z&Z&z'Z&z't&z'(@Z&i)Z&i)z'Z&G;i)t&i)i)(@t&G;Z&+-t&+-i)n)(@+-(@i)n)z'i)(@i)t&G;t&z'z'Z&z'n)n)i)+-n)Z&Z&z'z'G;t&n)G;Z&+-n)Z&i)Z&t&t&i)i)z't&n)i)(@Z&t&t&Z&G;n)t&z't&Z&z't&", +"1)+!p'Z&`)1)Z&_'Z&1)y++!Z&+!+!1)+!_'+!`)Z&1)K;p'Z&1)K;_'K;K;+!`)Z&Z&`)1)K;+!1)p'+!1)y+y+`)p'+!p'Z&Z&p'y+Z&y+p'K;K;y+K;p'Z&Z&Z&+!y+`)K;_'_'Z&p'+!p'p'+!Z&Z&Z&p'Z&Z&1)D>c+@!#!;;U'M;`@8'}&I;b+^@V'f%x'6#J+J+H+g@L@L@L@_#_#_#8#Y+e)N>$!%!&!K,*!=!-!;!>!{+i&p@Z+[)W'x+^,c+i@[>P)c+j)j)[>j)`)Z&1)p'Z&Z&`)`)+!p'p'+!Z&1)+!1)Z&+!K;`)_'y+Z&Z&Z&`)Z&K;Z&p'K;y+`)K;1)y+Z&1)y+p'_'1)K;p'`)1)p'`)Z&K;y+y+Z&p'Z&Z&Z&y+_'Z&+!Z&Z&Z&`)K;+!1)y+Z&y+#!l+')/*s#J@s+T#d@h&R#I+S#$@D#,!t+'!(#c=:'H;p'y++!+!Z&Z&`)+!Z&K;p'1)`)y+1)p'K;`)`)p'+!`)Z&Z&+!_'K;_'p'y+p'`)Z&Z&Z&Z&_'Z&1)p'K;Z&_'`)K;K;p'K;_'y+Z&y+_'`)1)y+`)_'y+`)+!1)K;_'_'K;p'Z&K;1)p'_'K;`)1)p'p'_'K;p'p'p'_'+!Z&y++!y+", +"y)y+y+y)y)i@y+j)y+y+[>y)j)y+P)y+y+D>y+y+P)D>j)P)y+i@y)j)y+y+y+y+y)y+y+y)D>j)y)y+y)P)D>D>y)y+P)y+c+[>y)y+y+i@y+y+y)D>D>P)y)j)y)y+j)y+y+y)y+y+j)j)y+D>j)D>y)y+y)y)j)y)@!:>c+H;I@~@x+#'2)Y+x)j=I;b+W+W+9##%+#L@H+J+H+g@L@L@I+J@c+)!!!~!{!X)]!S.^!/!%'t+#%(!#'Z+W'x+~@c+c+H;Z)@!F)I@@!D>y+y+P)y+y+j)D>j)y)y+y)j)y+y+D>y+y)j)j)j)D>y+i@i@y+y+[>P)y+D>y+P)y)i@y+D>j)y+i@y+y+[>y)P)y+i@j)y+y+i@c+y+D>y+P)P)j)D>y)y+j)[>i@y+D>y+D>y+y+y+[>P)D>j)y't#c=b+d$t++#'&D#D#h@C#G+/@w+L+[;I@j)D>y+j)y+c+y+y+y+j)y+y+P)y+y)y+[>y+j)j)y+y+y+y)y+j)P)D>y+i@y+y+P)y)j)j)D>j)y+i@D>y+c+[>D>y)[>y+D>y+y+D>j)y+y+j)y+j)y+y+y+y+D>y+i@y+y+y+D>y+j)y)y)[>[>j)D>y)i@[>y+y+j)y+y+j)y+y+P)y+", +"c+c+c+c+c+c+c+c+6*c+c+c+@!F)c+@!H;@!c+@!6*@!c+c+c+@!:>c+c+F)c+F)c+c+@!c+F)Z)@!c+F)H;c+c+c+c+c+c+c+c+c+H;H;F)@!c+I@c+@!c+c+F)c+c+F)H;c+Z)c+F)c+@!c+F)c+c+H;@!H;c+:>F)c+F)F)I@I@|)~@x+t#_!`@c=X+w+{@]@W+^@W+3>s#<-_#J+d@J+I+H+W+r+W#:!5 $%a) # #k+o@c=c=o)Y+^%h)x+I@I@I@:>@!@!c+:>c+H;c+c+c+c+H;F)c+H;H;H;@!c+c+F)c+@!c+c+c+c+6*F)I@c+c+c+@!H;c+c+c+H;F)c+c+H;c+@!F)F)c+c+c+c+F)@!:>c+c+F)c+:>@!c+F)c+c+@!c+@!c+H;@!6*:>c+H;H;c+H;c+H;c+:>c+c+I@x+Z+o@<!8#u+s#_*&>c=t#^,Z)c+c+:>c+c+6*c+@!:>c+c+c+c+c+c+F)H;H;H;c+F)F)c+c+c+c+:>c+c+c+c+c+c+:>H;c+c+c+@!c+@!c+c+H;c+c+c+c+F)@!H;F)F)c+c+H;c+Z)@!F)c+c+c+c+c+c+F)c+c+c+I@c+c+@!c+H;c+c+c+c+@!c+c+c+c+c+F)H;F)H;Z)c+", +"I@I@I@I@I@I@y'y'I@I@y'I@I@y'I@y'#!I@I@I@I@#!I@I@I@I@I@I@I@I@I@I@I@I@I@I@y'I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@#!I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@_>I@I@I@[;~@~@x+x+h)L+Z+Y+c=X+w+{@]@W+^@^@^@^@#%t+h@T#I+J+7#J@ # ##%:;w+w+(!w+w+c=Y+L+L+x+~@~@~@I@I@I@I@#!I@I@I@I@I@I@I@#!y'I@I@I@I@I@I@I@I@I@I@I@I@#!I@I@I@I@I@I@I@I@I@#!I@I@I@I@I@I@I@I@y>#!I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@y>I@I@I@I@I@y'I@#!I@I@I@I@I@I@I@I@I@I@I@I@I@I@~@t#Y+c=c=L+x+~@#!I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@#!I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@y'I@y>I@I@y'I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@I@y>I@I@y>I@y'I@I@I@I@I@I@I@#!", +"~@~@;;~@~@~@~@[;~@~@~@[!~@~@;;~@~@;;|)~@~@~@~@~@~@[;|)~@~@~@~@~@~@~@~@~@[;~@~@~@;;~@_>~@;;~@~@~@^,~@~@~@_>~@~@~@~@~@~@~@~@[;|)~@~@~@~@~@~@~@~@~@~@|)|)~@~@~@~@~@~@~@~@~@L&[;~@~@x+x+x+x+t#t#L+E)v*c=(!w+o@]@b+W+^@^@^@:;:;^@<!^@]@o,o@o@{@o@o@0'X+o)`@<>l+t#t#x+x+~@~@~@;;~@~@~@;;~@~@~@;;|)~@~@~@~@~@~@~@;;L&|)~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@|)~@[;[;~@~@;;~@~@~@~@~@~@~@~@~@~@~@t,~@~@~@~@~@|)~@t,~@~@|)~@~@[;~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@[;~@~@~@~@~@~@~@~@~@~@~@~@~@~@~@[;|);;~@~@~@~@|)~@~@~@~@[;|);;~@[;|);;[;~@~@~@|)~@|);;~@[;|)~@~@[;~@~@~@~@|)~@~@~@~@~@~@~@|)~@~@|)~@~@~@~@~@~@~@|)L&~@~@|)~@[;~@_>~@~@~@~@~@~@~@~@~@|)~@~@|)~@[;~@[;[;~@[;~@~@", +":'P'x+x+x+L&x+}!x+x+P'x+x+P'C>:'x+x+x+x+x+x+x+x+x+x+x+x+x+x+x+P'x+L&x+|!L&x+1!x+x+x+x+x+x+L&P'x+x+x+x+L&x+x+x+x+x+x+x+x+L&x+x+x+x+x+x+x+x+x+x+x+L&x+x+x+z)x+x+x+x+:'L&x+x+x+x+x+}!x+t#U't#t#L+L+],Z+c=c=X+w+o@2!]@]@b+(#b+]@]@{@{@'){@0'y$X+X+c=<>v*[)L+L+t#t#t#x+x+x+x+x+x+x+x+:'P'x+:'x+C>x+x+x+x+x+x+x+x+x+x+P'x+x+:'L&x+x+x+x+x+x+P-x+L&x+x+:'x+x+x+x+x+x+x+x+x+x+x+x+x+x+x+3!;;x+x+x+x+x+x+x+x+:'}!x+x+x+x+C>x+x+x+}!x+x+:'x+x+x+x+x+x+x+:'x+x+P-P'P'L&L&x+x+x+x+x+x+x+P'P':'x+x+x+x+P'x+x+x+x+x+x+:'x+x+P'4!x+:':'x+P-L&x+x+L&x+x+x+x+:'x+x+x+3!x+x+}!x+x+L&x+L&x+x+L&L&L&x+x+:'x+x+x+L&x+:'x+x+x+x+x+x+x+x+C>x+C>x+:'x+}!x+P'x+:'x+x+x+C>x+x+x+x+x+x+x+P-", +"t#t#U't#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#G)t#t#z)z)t#t#t#t#t#t#U'G)t#t#t#t#t#t#t#t#t#U't#t#t#z)t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#z)t#t#G)t#t#t#z)t#t#t#t#U't#t#t#t#t#t#L+L+L+Z+Z+Y+Y+c=8'X+w+o@o@{@N%{@{@{@o@o@o@w+w+X+c=c=Y+Y+Z+],L+L+L+L+t#t#t#t#t#t#t#t#t#t#t#t#t#U't#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#U't#z)t#t#U't#t#t#t#t#t#t#t#z)t#t#t#t#t#U't#t#t#t#t#z)t#t#t#t#t#z)t#t#t#z)t#t#t#z)t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#U't#t#z)t#t#t#t#G)t#t#t#t#z)t#t#t#t#t#G)t#t#t#t#t#t#t#t#z)t#t#t#t#t#t#t#z)t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#C>t#t#t#t#t#t#t#t#t#t#t#t#t#t#t#G)t#t#t#t#t#t#t#t#U'z)t#t#t#t#", +"h)L+L+#'W'L+#'L+L+M;L+L+L+L+u,H=#'#'L+L+L+L+u,#'#'L+L+u,L+L+L+L+u,L+L+H=u,L+L+L+L+L+H=H=L+L+h)H=L+L+L+#'u,#'u,L+L+h)M;L+L+L+L+L+L+H=L+H=L+L+h)L+L+#'u,#'u,#'L+u,#'#'L+#'#'L+L+#'L+L+L+L+L+L+u,Z+2)[)],`@Y+`@$'A'X+9'w+w+w+y$i&w+w+X+a)A'c=Y+`@<>],],Z+Z+[)H=L+#'L+L+L+L+L+L+L+L+L+M;L+L+u,H=L+L+L+#'L+H=H=L+L+#'L+L+L+L+L+L+L+L+L+L+u,L+L+L+L+L+W'L+u,L+#'L+L+#'H=L+L+H=L+L+L+L+L+L+u,L+L+L+#'#'H=L+L+H=#'L+H=L+u,L+L+u,L+u,L+L+u,h)L+L+L+h)L+L+L+#'L+#'L+L+#'W'L+L+L+L+H=L+L+L+L+h)L+L+#'L+u,L+#'L+H=L+#'L+#'L+#'L+L+L+u,L+u,L+h)L+L+L+L+L+#'L+L+H=W'H=L+u,L+u,L+H=u,L+L+L+W'h)L+L+L+L+L+H=L+W'L+L+L+L+L+u,L+L+L+u,L+L+L+L+L+u,H=L+L+#'L+u,L+u,h)u,L+L+H=H=L+L+", +"l+_!_!Z+[)],2)l+L+Z+_!Z+_!Z+_!L+Z+2)],],L+Z+L+[)],],2)_!],L+_!^%2)],^%Z+],2)[)[)Z+2)],_!_!_!Z+Z+_!_!L+],^%l+^%_!_!Z+],Z+L+_!l+^%^%_![)Z+Z+2)2)],2)l+_!l+],2)_!L+],l+L+^%^%L+2)^%_!_!Z+],^%^%2)^%],[)<)E)<><)c=$'z;%)9'5!5!5!R)R)R)c=X'X'Y+/,Y+`@Z+v*],Z+],Z+Z+2)^%Z+2)L+^%Z+2)],_!l+[)l+],[)],],Z+],Z+^%],Z+2)[)l+Z+Z+l+_!l+L+_!L+],[)_!Z+Z+l+Z+Z+l+2)[)2)^%_!L+_!l+2)Z+l+2)L+[)],Z+2)_!l+^%l+[)[)[)^%[)^%L+[)l+Z+],],^%2)Z+],l+[)[)Z+Z+L+L+^%2)2)Z+2)],],l+],L+^%L+2)],2)^%Z+l+[)2)Z+Z+[)2)L+],L+Z+^%L+Z+l+l+L+[)[)],Z+L+],^%^%],L+],[)L+],],L+^%_![)Z+2)],],^%^%Z+_!],L+[)],],],l+2)],^%],2)l+],[)^%],],_!^%],],^%Z+Z+[)2)Z+2)l+l+_!^%2)Z+],Z+Z+Z+[)Z+],_!],Z+", +"<)/,<)Z+Z+E)Y+Z+Z+Z+Z+E)E)Z+<)Z+/,Z+v*Z+Z+Z+<)/,Z+Z+E)E)E)E)<)<)Z+Z+Z+/,Z+Z+Z+Z+<)<><)<)<>E)/,Z+Z+Z+E)Z+Z+<)E)<)E)Z+<>Z+Z+Z+Z+`@Z+E)<)<)Z+/,Z+<>/,<)Z+<)Z+/,Z+Z+/,Z+<)Z+E)Z+Z+Z+Z+E)E)/,Z+Z+Z+Z+E)`@Z+<)Z+X'Y+A'$'Y+%)Y+%)Y+8'X'Y+Y+A'%)%)8'/,<><)Z+Z+/,Z+Y+<>Z+Z+E)Z+Z+<)<)Z+Z+E)Z+E)Z+Z+v*Z+v*Z+/,Z+<)Z+Z+<)<)E)E)/,E)E)Z+<)/,Z+/,Z+Z+/,/,/,Z+Z+<)/,E)<)E)Z+/,Z+Z+Z+Z+Z+<)v*v*<)E)/,<>Z+<)E)Z+Z+Z+Z+Z+Z+Z+<)<)Z+/,/,Z+<)Z+Z+Z+`@/,/,/,<)Z+/,<>v*/,Z+Z+Z+`@E)E)Z+Z+Z+/,Z+Z+<>Z+Z+Z+`@Z+Z+/,Z+Z+<)<)<)Z+E)Z+Z+Z+/,E)Z+E)<)Z+Z+Z+Z+Z+Z+Z+Z+`@E)Z+Z+E)v*E)Z+<)/,Z+Z+Z+E)<)`@Y+Z+/,Z+E)/,Z+<>v*/,<>/,Z+<)E)/,Z+Z+<>Z+Z+Z+Z+<)Z+Z+<)Z+<)E)Z+v*Z+Z+Z+<)Z+Z+Z+Z+Z+Z+Z+", +"Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+$'Y+Y+Y+$'Y+Y+X'Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+%)Y+Y+Y+Y+$'Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+%)Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+X'Y+Y+Y+$'Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+$'Y+Y+%)Y+Y+Y+Y+Y+Y+$'Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+$'Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+X'Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+%)X'Y+%)Y+Y+%)Y+Y+Y+Y+Y+Y+Y+$'Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+Y+", +"c=c=c=c=c=c=%)c=c=c=c=c=c=c=c=c=z;c=c=c=8'z;c=c=c=c=A'X'c=c=c=c=c=c=8'c=c=8'c=c=c=c=Y+c=c=A'z;c=c=c=c=A'c=c=8'8'c=c=c=c=c=c=c=c=c=c=8'c=c=c=$'c=c=c=c=A'c=c=c=8'c=c=c=8'c=z;z;c=c=z;c=c=c=A'c=A'c=c=c=c=c=$'8'c=c=A'8'c=c=c=c=8'%)c=c=c=z;c=A'c=c=z;z;c=c=c=z;c=c=c=c=c=c=A'8'c=8'c=c=c=c=c=8'c=c=c=c=c=c=A'A'c=A'c=z;A'c=c=c=c=c=c=c=c=c=c=A'c=c=c=A'8'8'c=c=c=c=A'c=c=c=c=z;8'c=z;z;z;c=A'c=c=c=c=c=c=c=c=c=c=8'c=A'c=c=z;c=A'c=c=z;8'c=c=c=c=c=c=6!c=c=c=c=c=X'c=A'c=c=c=c=c=c=c=c=A'c=c=c=c=c=z;c=c=z;c=c=A'c=c=c=z;c=z;$'c=c=c=c=c=c=z;8'8'c=c=8'c=c=c=c=A'8'c=c=c=c=8'c=c=c=c=z;c=c=A'A'c=c=A'$'c=c=8'c=c=z;z;%)c=c=c=c=c=c=c=c=c=8'c=c=c=8'c=c=c=c=c=z;c=", +"x)5!9'x)5!9'9'5!c=X+5!9'9'R)5!a)9'a)o)x)9'9'X+5!X+X+x)X+5!R)5!X+5!5!a)a)9'x)o)9'5!9'5!5!c=a)x)X+x)o)a)a)9'X+a)X+5!9'5!o)9'X+9'R)X+X+9'x)X+X+a)x)X+X+a)X+x)9'a)x)x)5!a)a)X+X+5!5!X+9'R)c=X+X+X+5!o)o)5!9'R)a)c=o)X+X+X+5!5!X+o)X+9'9'X+x)a)a)5!9'9'X+9'5!a)o)X+9'5!X+c=x)X+5!X+a)X+5!5!a)X+9'X+R)a)a)X+5!a)9'X+X+a)a)9'a)o)9'9'5!a)5!5!5!a)a)a)c=9'o)X+X+a)9'x)9'5!X+o)5!o)9'5!X+9'X+5!5!x)X+9'R)X+5!a)X+a)5!X+R)X+c=X+9'9'X+5!5!X+5!X+9'9'X+o)5!9'9'5!9'9'5!5!R)X+X+a)X+x)9'R)X+o)o)X+X+5!o)a)x)X+a)a)x)9'X+X+X+x)9'a)X+X+R)a)5!a)X+R)o)R)5!X+a)9'5!X+9'9'o)c=X+R)o)x)5!5!X+a)X+x)a)R)X+X+a)X+9'o)a)a)R)X+x)X+9'9'R)X+5!X+x)a)X+X+o)X+x)a)X+o)9'9'9'R)c=c=X+5!X+", +"x)5!9'x)5!9'9'5!c=X+5!9'9'R)5!a)9'a)o)x)9'9'X+5!X+X+x)X+5!R)5!X+5!5!a)a)9'x)o)9'5!9'5!5!c=a)x)X+x)o)a)a)9'X+a)X+5!9'5!o)9'X+9'R)X+X+9'x)X+X+a)x)X+X+a)X+x)9'a)x)x)5!a)a)X+X+5!5!X+9'R)c=X+X+X+5!o)o)5!9'R)a)c=o)X+X+X+5!5!X+o)X+9'9'X+x)a)a)5!9'9'X+9'5!a)o)X+9'5!X+c=x)X+5!X+a)X+5!5!a)X+9'X+R)a)a)X+5!a)9'X+X+a)a)9'a)o)9'9'5!a)5!5!5!a)a)a)c=9'o)X+X+a)9'x)9'5!X+o)5!o)9'5!X+9'X+5!5!x)X+9'R)X+5!a)X+a)5!X+R)X+c=X+9'9'X+5!5!X+5!X+9'9'X+o)5!9'9'5!9'9'5!5!R)X+X+a)X+x)9'R)X+o)o)X+X+5!o)a)x)X+a)a)x)9'X+X+X+x)9'a)X+X+R)a)5!a)X+R)o)R)5!X+a)9'5!X+9'9'o)c=X+R)o)x)5!5!X+a)X+x)a)R)X+X+a)X+9'o)a)a)R)X+x)X+9'9'R)X+5!X+x)a)X+X+o)X+x)a)X+o)9'9'9'R)c=c=X+5!X+"}; diff --git a/src/xpm_data/svp_autopick_next_channel.h b/src/xpm_data/svp_autopick_next_channel.h new file mode 100644 index 0000000..b1830cb --- /dev/null +++ b/src/xpm_data/svp_autopick_next_channel.h @@ -0,0 +1,498 @@ +/* XPM */ +static const char * svp_autopick_next_channel_xpm[] = { +"64 64 431 2", +" c None", +". c #83E906", +"+ c #84E906", +"@ c #85E906", +"# c #86E906", +"$ c #82E906", +"% c #111111", +"& c #1B1B1B", +"* c #82E806", +"= c #1A1A1A", +"- c #272727", +"; c #333333", +"> c #383838", +", c #373737", +"' c #2F2F2F", +") c #252525", +"! c #7FE206", +"~ c #262626", +"{ c #343434", +"] c #3B3B3B", +"^ c #3C3C3C", +"/ c #303030", +"( c #292929", +"_ c #222222", +": c #1C1C1C", +"< c #6BBE07", +"[ c #70C905", +"} c #81E606", +"| c #242424", +"1 c #2A2A2A", +"2 c #374922", +"3 c #62A411", +"4 c #2E3D1B", +"5 c #181818", +"6 c #7FE306", +"7 c #313131", +"8 c #50791E", +"9 c #5A9215", +"0 c #212121", +"a c #354721", +"b c #62A60F", +"c c #3A5E0F", +"d c #61A50E", +"e c #4E761E", +"f c #2C2C2C", +"g c #232323", +"h c #4C7816", +"i c #558914", +"j c #81E506", +"k c #84E706", +"l c #82E706", +"m c #79D606", +"n c #282828", +"o c #5E9D12", +"p c #416019", +"q c #466C17", +"r c #60A20E", +"s c #80E406", +"t c #7FDE06", +"u c #1F1F1F", +"v c #6BB40E", +"w c #2F3C1E", +"x c #202020", +"y c #5F9F10", +"z c #3D5A1A", +"A c #83E406", +"B c #73C509", +"C c #272925", +"D c #6FBC0C", +"E c #22271D", +"F c #161616", +"G c #79D406", +"H c #263911", +"I c #3A5817", +"J c #121212", +"K c #3D3D3D", +"L c #587930", +"M c #7BDA06", +"N c #090909", +"O c #83E806", +"P c #75CF05", +"Q c #0D0D0D", +"R c #406713", +"S c #568E10", +"T c #4B6827", +"U c #5A5E55", +"V c #688545", +"W c #6DA627", +"X c #558A14", +"Y c #69BD05", +"Z c #6BBD05", +"` c #020202", +" . c #3D3D3E", +".. c #6E9440", +"+. c #7ABA29", +"@. c #7BC814", +"#. c #67A712", +"$. c #507622", +"%. c #393939", +"&. c #131313", +"*. c #74CF05", +"=. c #315605", +"-. c #6F6F72", +";. c #737372", +">. c #5B5B4E", +",. c #4E4D31", +"'. c #504F2C", +"). c #38371F", +"!. c #2E2E2E", +"~. c #050505", +"{. c #80E306", +"]. c #538813", +"^. c #8EC54B", +"/. c #969694", +"(. c #64644E", +"_. c #605F34", +":. c #5C5B34", +"<. c #545333", +"[. c #49482C", +"}. c #2F2E1D", +"|. c #3B3B3C", +"1. c #070707", +"2. c #151515", +"3. c #7ADB06", +"4. c #6FC805", +"5. c #99999A", +"6. c #96C559", +"7. c #76B11C", +"8. c #718929", +"9. c #6E6D39", +"0. c #605F31", +"a. c #494829", +"b. c #3C3B22", +"c. c #303023", +"d. c #2F2F30", +"e. c #191919", +"f. c #171717", +"g. c #50702A", +"h. c #79B929", +"i. c #536A38", +"j. c #404040", +"k. c #AEAEAE", +"l. c #9F9FA0", +"m. c #5B5A38", +"n. c #78A620", +"o. c #7BBD16", +"p. c #72AD16", +"q. c #63891A", +"r. c #596922", +"s. c #36361A", +"t. c #43512F", +"u. c #4E840F", +"v. c #7DDF06", +"w. c #80E206", +"x. c #1D1D1D", +"y. c #6C6C6E", +"z. c #A0A0A3", +"A. c #A7A7A6", +"B. c #79A346", +"C. c #699F26", +"D. c #656765", +"E. c #949495", +"F. c #54544A", +"G. c #686732", +"H. c #646333", +"I. c #5F7423", +"J. c #6A9D16", +"K. c #74B910", +"L. c #75C00C", +"M. c #79C812", +"N. c #74C311", +"O. c #7BDB06", +"P. c #101010", +"Q. c #515152", +"R. c #98989B", +"S. c #AFAFB0", +"T. c #93938A", +"U. c #6F6E54", +"V. c #5F5E33", +"W. c #454424", +"X. c #528413", +"Y. c #5B8A23", +"Z. c #2C2E2E", +"`. c #403F32", +" + c #5D5C2D", +".+ c #525127", +"++ c #535227", +"@+ c #4D4C22", +"#+ c #414024", +"$+ c #5A5A52", +"%+ c #4D4D4E", +"&+ c #0C0C0C", +"*+ c #808081", +"=+ c #B8B8BB", +"-+ c #ABABA9", +";+ c #7D7C69", +">+ c #626139", +",+ c #666530", +"'+ c #727138", +")+ c #6A693D", +"!+ c #545331", +"~+ c #3B402E", +"{+ c #558F10", +"]+ c #4D840A", +"^+ c #3D5022", +"/+ c #51502A", +"(+ c #515025", +"_+ c #43421F", +":+ c #4E4D3D", +"<+ c #646362", +"[+ c #343436", +"}+ c #1E1E1E", +"|+ c #2D2D2D", +"1+ c #363636", +"2+ c #414141", +"3+ c #777777", +"4+ c #BBBBBD", +"5+ c #A8A8A6", +"6+ c #6B6B53", +"7+ c #605F2F", +"8+ c #6E6D34", +"9+ c #78773E", +"0+ c #77763F", +"a+ c #69683A", +"b+ c #504F31", +"c+ c #3C3B26", +"d+ c #42700B", +"e+ c #5D9813", +"f+ c #64941A", +"g+ c #4C5B21", +"h+ c #606059", +"i+ c #5C5C5E", +"j+ c #505050", +"k+ c #636363", +"l+ c #56552A", +"m+ c #686731", +"n+ c #706F39", +"o+ c #6F6E3A", +"p+ c #696836", +"q+ c #5F5E30", +"r+ c #3A391F", +"s+ c #3A3A31", +"t+ c #161617", +"u+ c #314816", +"v+ c #61951F", +"w+ c #75B722", +"x+ c #68AB15", +"y+ c #62AF05", +"z+ c #0A0A0A", +"A+ c #484848", +"B+ c #7C7C7C", +"C+ c #575758", +"D+ c #504F29", +"E+ c #62612F", +"F+ c #626131", +"G+ c #5F5E2F", +"H+ c #58572B", +"I+ c #545329", +"J+ c #424124", +"K+ c #3A3926", +"L+ c #171718", +"M+ c #85E806", +"N+ c #0F0F0F", +"O+ c #3A3A3A", +"P+ c #3E3E35", +"Q+ c #57562A", +"R+ c #555429", +"S+ c #545328", +"T+ c #555428", +"U+ c #525126", +"V+ c #3A391D", +"W+ c #3C3C36", +"X+ c #0E0E0E", +"Y+ c #2A2A2C", +"Z+ c #444334", +"`+ c #545327", +" @ c #565629", +".@ c #535226", +"+@ c #4D4C20", +"@@ c #4B4A22", +"#@ c #535232", +"$@ c #535247", +"%@ c #262627", +"&@ c #0B0B0B", +"*@ c #141414", +"=@ c #2B2B2D", +"-@ c #474633", +";@ c #504F21", +">@ c #4A4920", +",@ c #4A4924", +"'@ c #59583C", +")@ c #6F6E5C", +"!@ c #7D7C74", +"~@ c #777775", +"{@ c #080808", +"]@ c #252526", +"^@ c #464640", +"/@ c #575641", +"(@ c #6D6C5E", +"_@ c #777771", +":@ c #737373", +"<@ c #515153", +"[@ c #232324", +"}@ c #333335", +"|@ c #2D2D2F", +"1@ c #0F0E0F", +"2@ c #151415", +"3@ c #101110", +"4@ c #121213", +"5@ c #181819", +"6@ c #2A2A2B", +"7@ c #1F2020", +"8@ c #1A1A1B", +"9@ c #3E3E3F", +"0@ c #202120", +"a@ c #222122", +"b@ c #323232", +"c@ c #1C1B1B", +"d@ c #212221", +"e@ c #3E3E3E", +"f@ c #252424", +"g@ c #2B2B2B", +"h@ c #353635", +"i@ c #1F1F1E", +"j@ c #353434", +"k@ c #353535", +"l@ c #333433", +"m@ c #333434", +"n@ c #212122", +"o@ c #474747", +"p@ c #2E2D2D", +"q@ c #323332", +"r@ c #303031", +"s@ c #1A1B19", +"t@ c #1C1D1C", +"u@ c #1B1A1B", +"v@ c #424242", +"w@ c #242423", +"x@ c #1F1E1E", +"y@ c #4B4A4A", +"z@ c #454545", +"A@ c #252625", +"B@ c #302F31", +"C@ c #363536", +"D@ c #3B3A3B", +"E@ c #131212", +"F@ c #4C4B4B", +"G@ c #272627", +"H@ c #262625", +"I@ c #454845", +"J@ c #454846", +"K@ c #444544", +"L@ c #2F2E2F", +"M@ c #1D1E1D", +"N@ c #242525", +"O@ c #4E4E4E", +"P@ c #4B4B4B", +"Q@ c #262526", +"R@ c #252524", +"S@ c #2A292A", +"T@ c #383938", +"U@ c #3D4539", +"V@ c #40572F", +"W@ c #344F1F", +"X@ c #252E21", +"Y@ c #3D3E3D", +"Z@ c #2E2F2D", +"`@ c #242227", +" # c #282728", +".# c #4F4F4F", +"+# c #303431", +"@# c #2E4B1C", +"## c #6DB20D", +"$# c #7FC90A", +"%# c #2A411E", +"&# c #2A2E29", +"*# c #3E3D3E", +"=# c #232223", +"-# c #515151", +";# c #525252", +"># c #313132", +",# c #303730", +"'# c #4A8413", +")# c #81DF0C", +"!# c #88DF08", +"~# c #3E6417", +"{# c #1C1E20", +"]# c #3A3B3A", +"^# c #444444", +"/# c #232322", +"(# c #0F0F11", +"_# c #151616", +":# c #545454", +"<# c #363A35", +"[# c #2F4E18", +"}# c #519213", +"|# c #528917", +"1# c #374B27", +"2# c #383937", +"3# c #313130", +"4# c #0F0F0E", +"5# c #1F201F", +"6# c #555555", +"7# c #2E2D2E", +"8# c #333533", +"9# c #232722", +"0# c #2F3A2E", +"a# c #374437", +"b# c #363D35", +"c# c #2D2C2C", +"d# c #1F1F20", +"e# c #0C0B0C", +"f# c #555556", +"g# c #201F20", +"h# c #232222", +"i# c #393839", +"j# c #363535", +"k# c #333432", +"l# c #282827", +"m# c #1D1D1E", +"n# c #1D1E1E", +"o# c #1A1A19", +"p# c #535354", +"q# c #5A5A5B", +"r# c #323333", +"s# c #2E2E2D", +"t# c #141415", +"u# c #111212", +"v# c #1C1C1B", +"w# c #4C4C4D", +"x# c #5B5B5C", +" ", +" ", +" . + @ # @ + . ", +" $ + . . + $ ", +" . . ", +" . . ", +" ", +" % & * . @ # @ . . ", +" = - ; > , ' ) & ! . $ $ . . ", +" ~ { ] ^ > / ( _ : < [ } . $ ", +" | / { / 1 2 3 4 5 6 . + ", +" ) 7 8 9 _ 0 - a b c . . ", +" d e f g g h i ~ ) & j k l $ . ", +" m : n | o p _ 0 g q r s . + ", +" t u v w _ 0 x y z ( : j @ @ ", +" A B C _ 0 x D E : | - k # # ", +" F k G H g _ u y I 5 J K L M @ @ ", +" N J O P Q x u R S T U V W X . + ", +" J * Y Z ` : ...+.@.#.$.%. $ . ", +" &.&. } *.=., -.;.>.,.'.)., !. . . ", +" ~.&.F {. ].^./.(._.:.<.[.}.|.5 * + ", +" 1.&.5 2. 3.4. g 5.6.7.8.9.0.a.b.c.d. } $ ", +" 1.J F e.f.% g.h.i.j.k.l.m.n.o.p.q.r.s.t.u.v.w. . ", +" J F f.= x.: F - y.z.A.B.C.D.E.F.G.H.I.J.K.L.M.N.O. . ", +" P.f.f.5 = x.0 _ x = Q.R.S.T.U.V.W.X.Y.Z.`. +.+++@+#+$+%+ ", +" &+f.5 e.e.= & u | - ( n | x. { *+=+-+;+>+,+'+)+!+~+{+]+^+/+(+_+:+<+[+ . ", +" N F e.e.e.= & : }+0 | ( |+' { 1+2+3+4+5+6+7+8+9+0+a+b+c+/ d+e+f+g+h+i+ . ", +" J e.= = & & : x.u g ~ ( 7 j+k+i+F.l+m+n+o+p+q+a.r+s+t+ u+v+w+x+y+ . + $ ", +" z+F = = & : : : }+0 - A+B+C+%.D+E+F+G+H+I+.+J+K+/ L+ O.w.k M+M+O . ", +" N+5 & & : : : x.x.!.O+d.P+l+Q+R+I+S+T+U+V+W+ ", +" X+f.& : : x.x.& & Y+Z+`+S+ @.@+@@@#@$@%@ ", +" &@*@= : : x.: =@-@;@>@,@'@)@!@~@ . ", +" {@P.F = = ]@^@/@(@_@:@<@[@ ", +" &@X+x.}@|@ ", +" ", +" ", +" ", +" ", +" ", +" X+F *@ ", +" 1@2@5 5 = 5 &. ", +" 3@F 5 5 5 5 e.= & = f. ", +" N+&.f.e.5 f.5 5 5 e.= = & : : f.f. ", +" 4@5@L+f.f.f.f.5 5 5 e.= = = = & x ( 6@ ", +" N+_ 7@8@L+f.f.f.5 5 5 e.e.= = u - 7 %.9@- ", +" 0@a@0 x x.= e.5 5 5 f.f.& 0 ( b@, O+%.%.O+c@ ", +" : | d@x u x.x.: & e.5 : | n ; %.%.> > > , %.{ ", +" *@| _ _ x u x.x.: & = F 2+e@f@g@/ { , , , 1+h@, 1 ", +" X+g _ g g x i@}+: & & e.f.A+2+g - ~ ( j@1+k@{ l@; m@n@ ", +" {@x | g g g x u }+: & & e.f.o@2+g - - - p@k@{ ; q@7 7 r@s@ ", +" : f@g g | _ x u }+t@& u@e.f.A+v@g - - - n ; { / ' ' ' ' f ", +" f.) w@) ) | _ x x x@t@& = e.f.y@z@g - ~ ~ A@|+B@C@D@/ !.!.!.A@ ", +" E@~ | ) ) ) | _ 0 x u : : = e.f.F@A+_ G@H@| g / I@J@K@D@f f f L@M@ ", +" % ~ ) N@) ) ) | _ 0 x u x.: & e.F O@P@0 Q@R@S@T@U@V@W@X@Y@k@1 g@1 Z@`@ ", +" *@) #n ~ ~ ~ ) _ 0 0 }+x.: & = F .#O@0 Q@g ; +#@###$#%#&#*#!.f 1+K f ", +" Q F =#( ( ~ | g _ 0 }+x.: : = f.-#;#0 ~ [@>#,#'#)#!#~#{#]#^#%.b@/#(# ", +" 1.N Q *@x ~ ) g 0 x }+}+x.: = _#-#:#0 ) g 7 <#[#}#|#1#2# .3#0 F 4# ", +" {@z+&@J & 0 _ 5#x.: x.x.& F -#6#0 ) _ 7#8#9#0#a#b#c#d#F N+ ", +" 1.&@e#N+F x.}+}+& : = 2.;#f#g#h#0 p@i#j#k#l#m#2@Q ", +" {@&@&@X+&.e.n#m#o#&.p#q#u ( ' r#s#| u@t#e# ", +" z+&@Q u#_#v#f.w#x#' ' l#u f.J ", +" {@&+Q X+&.~ ' | c@*@4# ", +" z+X+&.5 &. ", +" "}; diff --git a/src/xpm_data/svp_battery_0.h b/src/xpm_data/svp_battery_0.h new file mode 100644 index 0000000..a7b67f9 --- /dev/null +++ b/src/xpm_data/svp_battery_0.h @@ -0,0 +1,23 @@ +/* XPM */ +static const char * svp_battery_0_xpm[] = { +"16 16 4 1", +" c None", +". c #73BA00", +"+ c #424542", +"@ c #636163", +" .... ", +" .......... ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .......... "}; diff --git a/src/xpm_data/svp_battery_100.h b/src/xpm_data/svp_battery_100.h new file mode 100644 index 0000000..ba04ac0 --- /dev/null +++ b/src/xpm_data/svp_battery_100.h @@ -0,0 +1,22 @@ +/* XPM */ +static const char * svp_battery_100_xpm[] = { +"16 16 3 1", +" c None", +". c #73BA00", +"+ c #424542", +" .... ", +" .......... ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .......... "}; diff --git a/src/xpm_data/svp_battery_25.h b/src/xpm_data/svp_battery_25.h new file mode 100644 index 0000000..290485e --- /dev/null +++ b/src/xpm_data/svp_battery_25.h @@ -0,0 +1,23 @@ +/* XPM */ +static const char * svp_battery_25_xpm[] = { +"16 16 4 1", +" c None", +". c #73BA00", +"+ c #424542", +"@ c #636163", +" .... ", +" .......... ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .......... "}; diff --git a/src/xpm_data/svp_battery_50.h b/src/xpm_data/svp_battery_50.h new file mode 100644 index 0000000..a4fda0e --- /dev/null +++ b/src/xpm_data/svp_battery_50.h @@ -0,0 +1,23 @@ +/* XPM */ +static const char * svp_battery_50_xpm[] = { +"16 16 4 1", +" c None", +". c #73BA00", +"+ c #424542", +"@ c #636163", +" .... ", +" .......... ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .......... "}; diff --git a/src/xpm_data/svp_battery_75.h b/src/xpm_data/svp_battery_75.h new file mode 100644 index 0000000..72bf62b --- /dev/null +++ b/src/xpm_data/svp_battery_75.h @@ -0,0 +1,23 @@ +/* XPM */ +static const char * svp_battery_75_xpm[] = { +"16 16 4 1", +" c None", +". c #73BA00", +"+ c #424542", +"@ c #636163", +" .... ", +" .......... ", +" .++++++++. ", +" .+@@@@@@+. ", +" .+@@@@@@+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .+......+. ", +" .+......+. ", +" .++++++++. ", +" .......... "}; diff --git a/src/xpm_data/svp_status_excellent.h b/src/xpm_data/svp_status_excellent.h new file mode 100644 index 0000000..638f74f --- /dev/null +++ b/src/xpm_data/svp_status_excellent.h @@ -0,0 +1,37 @@ +/* XPM */ +static const char * svp_status_excellent_xpm[] = { +"24 16 18 1", +" c None", +". c #73BA00", +"+ c #73B600", +"@ c #73B200", +"# c #73AE00", +"$ c #6BAE00", +"% c #6BAA00", +"& c #6BA600", +"* c #6BA200", +"= c #6BB200", +"- c #63A200", +"; c #639E00", +"> c #639A00", +", c #639600", +"' c #5A9600", +") c #5A9200", +"! c #5A8E00", +"~ c #5A8A00", +" ..++", +" .++@", +" ++@#", +" ...+ @@$$", +" ..++ @$%%", +" ++@@ %%&*", +" ...+ +@=$ %&-;", +" ..++ @$$% --;>", +" .++@ $%%& ;;>,", +" .... +@@$ %&&- >>')", +" ...+ @@$% &-;; ,))!", +" .++@ $%%& -;>, ))!!", +".... ++@= %&&- ;>,' !!!~", +"...+ @@$$ &--; ,')) !~~~", +".+++ @$%% -;;> ')!! ~~~~", +"++@@ %%&* ;>,' )!!~ ~~~~"}; diff --git a/src/xpm_data/svp_status_good.h b/src/xpm_data/svp_status_good.h new file mode 100644 index 0000000..af912df --- /dev/null +++ b/src/xpm_data/svp_status_good.h @@ -0,0 +1,34 @@ +/* XPM */ +static const char * svp_status_good_xpm[] = { +"24 16 15 1", +" c None", +". c #CECFCE", +"+ c #73BA00", +"@ c #73B600", +"# c #73B200", +"$ c #6BAE00", +"% c #6BAA00", +"& c #6BA600", +"* c #6BB200", +"= c #63A200", +"- c #639E00", +"; c #639A00", +"> c #6BA200", +", c #639600", +"' c #5A9600", +" ....", +" ....", +" ....", +" .... ....", +" .... ....", +" .... ....", +" +++@ .... ....", +" ++@@ .... ....", +" +@@# .... ....", +" ++++ @##$ .... ....", +" +++@ ##$% .... ....", +" +@@# $%%& .... ....", +"++++ @@#* %&&= .... ....", +"+++@ ##$$ &==- .... ....", +"+@@@ #$%% =--; .... ....", +"@@## %%&> -;,' .... ...."}; diff --git a/src/xpm_data/svp_status_low.h b/src/xpm_data/svp_status_low.h new file mode 100644 index 0000000..4264de8 --- /dev/null +++ b/src/xpm_data/svp_status_low.h @@ -0,0 +1,29 @@ +/* XPM */ +static const char * svp_status_low_xpm[] = { +"24 16 10 1", +" c None", +". c #CECFCE", +"+ c #73BA00", +"@ c #73B600", +"# c #73B200", +"$ c #6BB200", +"% c #6BAE00", +"& c #6BAA00", +"* c #6BA600", +"= c #6BA200", +" ....", +" ....", +" ....", +" .... ....", +" .... ....", +" .... ....", +" .... .... ....", +" .... .... ....", +" .... .... ....", +" ++++ .... .... ....", +" +++@ .... .... ....", +" +@@# .... .... ....", +"++++ @@#$ .... .... ....", +"+++@ ##%% .... .... ....", +"+@@@ #%&& .... .... ....", +"@@## &&*= .... .... ...."}; diff --git a/src/xpm_data/svp_status_nosignal.h b/src/xpm_data/svp_status_nosignal.h new file mode 100644 index 0000000..4eeed4c --- /dev/null +++ b/src/xpm_data/svp_status_nosignal.h @@ -0,0 +1,21 @@ +/* XPM */ +static const char * svp_status_nosignal_xpm[] = { +"24 16 2 1", +" c None", +". c #CECFCE", +" ....", +" ....", +" ....", +" .... ....", +" .... ....", +" .... ....", +" .... .... ....", +" .... .... ....", +" .... .... ....", +" .... .... .... ....", +" .... .... .... ....", +" .... .... .... ....", +".... .... .... .... ....", +".... .... .... .... ....", +".... .... .... .... ....", +".... .... .... .... ...."}; diff --git a/src/xpm_data/svp_status_verygood.h b/src/xpm_data/svp_status_verygood.h new file mode 100644 index 0000000..50b96a1 --- /dev/null +++ b/src/xpm_data/svp_status_verygood.h @@ -0,0 +1,37 @@ +/* XPM */ +static const char * svp_status_verygood_xpm[] = { +"24 16 18 1", +" c None", +". c #CECFCE", +"+ c #73BA00", +"@ c #73B600", +"# c #73B200", +"$ c #6BB200", +"% c #6BAE00", +"& c #6BAA00", +"* c #6BA600", +"= c #63A200", +"- c #639E00", +"; c #639A00", +"> c #639600", +", c #5A9600", +"' c #5A9200", +") c #5A8E00", +"! c #6BA200", +"~ c #5A8A00", +" ....", +" ....", +" ....", +" +++@ ....", +" ++@@ ....", +" @@## ....", +" +++@ @#$% ....", +" ++@@ #%%& ....", +" +@@# %&&* ....", +" ++++ @##% &**= ....", +" +++@ ##%& *=-- ....", +" +@@# %&&* =-;> ....", +"++++ @@#$ &**= -;>, ....", +"+++@ ##%% *==- >,'' ....", +"+@@@ #%&& =--; ,')) ....", +"@@## &&*! -;>, '))~ ...."}; diff --git a/src/xpm_data/svp_status_verylow.h b/src/xpm_data/svp_status_verylow.h new file mode 100644 index 0000000..2cd82d3 --- /dev/null +++ b/src/xpm_data/svp_status_verylow.h @@ -0,0 +1,24 @@ +/* XPM */ +static const char * svp_status_verylow_xpm[] = { +"24 16 5 1", +" c None", +". c #CECFCE", +"+ c #73BA00", +"@ c #73B600", +"# c #73B200", +" ....", +" ....", +" ....", +" .... ....", +" .... ....", +" .... ....", +" .... .... ....", +" .... .... ....", +" .... .... ....", +" .... .... .... ....", +" .... .... .... ....", +" .... .... .... ....", +"++++ .... .... .... ....", +"+++@ .... .... .... ....", +"+@@@ .... .... .... ....", +"@@## .... .... .... ...."}; @@ -1 +1 @@ -NVIDIA_VERSION = 260.19.21 +NVIDIA_VERSION = 260.19.29 |