summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/block/md.c2
-rw-r--r--drivers/block/paride/pcd.c4
-rw-r--r--drivers/block/paride/pf.c4
-rw-r--r--drivers/block/paride/pg.c2
-rw-r--r--drivers/block/paride/pt.c12
-rw-r--r--drivers/char/Config.in2
-rw-r--r--drivers/char/adbmouse.c2
-rw-r--r--drivers/char/bttv.c57
-rw-r--r--drivers/char/bttv.h5
-rw-r--r--drivers/char/busmouse.c2
-rw-r--r--drivers/char/buz.c36
-rw-r--r--drivers/char/chipsets.h41
-rw-r--r--drivers/char/pc_keyb.c2
-rw-r--r--drivers/char/raw.c2
-rw-r--r--drivers/char/synclink.c460
-rw-r--r--drivers/i2o/i2o_block.c28
-rw-r--r--drivers/isdn/Config.in123
-rw-r--r--drivers/isdn/isdn_common.c4
-rw-r--r--drivers/macintosh/mac_keyb.c16
-rw-r--r--drivers/macintosh/mediabay.c2
-rw-r--r--drivers/macintosh/via-pmu.c20
-rw-r--r--drivers/misc/acpi.c271
-rw-r--r--drivers/net/3c509.c1
-rw-r--r--drivers/net/Config.in6
-rw-r--r--drivers/net/Makefile8
-rw-r--r--drivers/net/ne.c60
-rw-r--r--drivers/net/ppp_generic.c102
-rw-r--r--drivers/net/tokenring/Config.in2
-rw-r--r--drivers/net/tokenring/Makefile8
-rw-r--r--drivers/net/tokenring/sktr.c2707
-rw-r--r--drivers/net/tokenring/sktr.h1103
-rw-r--r--drivers/net/tokenring/sktr_firmware.h3616
-rw-r--r--drivers/net/tokenring/tms380tr.c2749
-rw-r--r--drivers/net/tokenring/tms380tr.h1109
-rw-r--r--drivers/net/tokenring/tms380tr_microcode.h3622
-rw-r--r--drivers/net/wan/cosa.c74
-rw-r--r--drivers/net/wan/cycx_x25.c50
-rw-r--r--drivers/net/wan/sbni.c20
-rw-r--r--drivers/parport/Config.in72
-rw-r--r--drivers/parport/ieee1284.c52
-rw-r--r--drivers/parport/parport_pc.c130
-rw-r--r--drivers/pci/devlist.h9
-rw-r--r--drivers/pci/pcisyms.c2
-rw-r--r--drivers/pci/quirks.c54
-rw-r--r--drivers/scsi/ChangeLog.ips25
-rw-r--r--drivers/scsi/ChangeLog.sym53c8xx11
-rw-r--r--drivers/scsi/Config.in157
-rw-r--r--drivers/scsi/aha152x.c26
-rw-r--r--drivers/scsi/mac53c94.c2
-rw-r--r--drivers/scsi/mac53c94.h1
-rw-r--r--drivers/scsi/scsi_error.c26
-rw-r--r--drivers/scsi/sr.c2
-rw-r--r--drivers/scsi/sym53c8xx.c219
-rw-r--r--drivers/sgi/Config.in4
-rw-r--r--drivers/sound/ac97.h13
-rw-r--r--drivers/sound/dmasound.c69
-rw-r--r--drivers/sound/maestro.c731
-rw-r--r--drivers/usb/Makefile25
-rw-r--r--drivers/usb/acm.c6
-rw-r--r--drivers/usb/ezusb.c15
-rw-r--r--drivers/usb/hp_scanner.c27
-rw-r--r--drivers/usb/mouse.c16
-rw-r--r--drivers/usb/ohci-hcd.c2
-rw-r--r--drivers/usb/ohci.c6
-rw-r--r--drivers/usb/printer.c38
-rw-r--r--drivers/usb/serial.c691
-rw-r--r--drivers/usb/uhci.c55
-rw-r--r--drivers/usb/uhci.h82
-rw-r--r--drivers/usb/usb-core.c1
-rw-r--r--drivers/usb/usb-serial.c691
-rw-r--r--drivers/usb/usb.c78
-rw-r--r--drivers/usb/usb.h36
-rw-r--r--drivers/usb/usb_scsi.c216
73 files changed, 10449 insertions, 9475 deletions
diff --git a/drivers/block/md.c b/drivers/block/md.c
index 69ff1813b..684b47c1b 100644
--- a/drivers/block/md.c
+++ b/drivers/block/md.c
@@ -553,6 +553,8 @@ static int do_md_add (int minor, kdev_t dev)
a better idea, please help ! */
realdev->inode=get_empty_inode ();
+ if (!realdev->inode)
+ return -ENOMEM;
realdev->inode->i_dev=dev; /* don't care about other fields */
insert_inode_hash (realdev->inode);
diff --git a/drivers/block/paride/pcd.c b/drivers/block/paride/pcd.c
index 13b5f1b6a..027517320 100644
--- a/drivers/block/paride/pcd.c
+++ b/drivers/block/paride/pcd.c
@@ -571,7 +571,7 @@ static int pcd_reset( int unit )
WR(0,6,0xa0 + 0x10*PCD.drive);
WR(0,7,8);
- pcd_sleep(2); /* delay a bit */
+ pcd_sleep(20*HZ/1000); /* delay a bit */
k = 0;
while ((k++ < PCD_RESET_TMO) && (RR(1,6)&IDE_BUSY))
@@ -609,7 +609,7 @@ static int pcd_ready_wait( int unit, int tmo )
if (!p) return 0;
if (!(((p & 0xffff) == 0x0402)||((p & 0xff) == 6))) return p;
k++;
- pcd_sleep(100);
+ pcd_sleep(HZ);
}
return 0x000020; /* timeout */
}
diff --git a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c
index 58a747cb7..4dba8c8b5 100644
--- a/drivers/block/paride/pf.c
+++ b/drivers/block/paride/pf.c
@@ -666,11 +666,11 @@ static int pf_reset( int unit )
WR(0,6,DRIVE);
WR(0,7,8);
- pf_sleep(2);
+ pf_sleep(20*HZ/1000);
k = 0;
while ((k++ < PF_RESET_TMO) && (RR(1,6)&STAT_BUSY))
- pf_sleep(10);
+ pf_sleep(HZ/10);
flg = 1;
for(i=0;i<5;i++) flg &= (RR(0,i+1) == expect[i]);
diff --git a/drivers/block/paride/pg.c b/drivers/block/paride/pg.c
index 89c83db65..42967b714 100644
--- a/drivers/block/paride/pg.c
+++ b/drivers/block/paride/pg.c
@@ -463,7 +463,7 @@ static int pg_reset( int unit )
WR(0,6,DRIVE);
WR(0,7,8);
- pg_sleep(2);
+ pg_sleep(20*HZ/1000);
k = 0;
while ((k++ < PG_RESET_TMO) && (RR(1,6)&STAT_BUSY))
diff --git a/drivers/block/paride/pt.c b/drivers/block/paride/pt.c
index 2616319f7..81d5fe54b 100644
--- a/drivers/block/paride/pt.c
+++ b/drivers/block/paride/pt.c
@@ -498,7 +498,7 @@ static void pt_media_access_cmd( int unit, int tmo, char *cmd, char *fun)
return;
}
pi_disconnect(PI);
- pt_poll_dsc(unit,100,tmo,fun);
+ pt_poll_dsc(unit,HZ,tmo,fun);
}
static void pt_rewind( int unit )
@@ -526,11 +526,11 @@ static int pt_reset( int unit )
WR(0,6,DRIVE);
WR(0,7,8);
- pt_sleep(2);
+ pt_sleep(20*HZ/1000);
k = 0;
while ((k++ < PT_RESET_TMO) && (RR(1,6)&STAT_BUSY))
- pt_sleep(10);
+ pt_sleep(HZ/10);
flg = 1;
for(i=0;i<5;i++) flg &= (RR(0,i+1) == expect[i]);
@@ -559,7 +559,7 @@ static int pt_ready_wait( int unit, int tmo )
if (!p) return 0;
if (!(((p & 0xffff) == 0x0402)||((p & 0xff) == 6))) return p;
k++;
- pt_sleep(100);
+ pt_sleep(HZ);
}
return 0x000020; /* timeout */
}
@@ -809,7 +809,7 @@ static ssize_t pt_read(struct file * filp, char * buf,
while (count > 0) {
- if (!pt_poll_dsc(unit,1,PT_TMO,"read")) return -EIO;
+ if (!pt_poll_dsc(unit,HZ/100,PT_TMO,"read")) return -EIO;
n = count;
if (n > 32768) n = 32768; /* max per command */
@@ -895,7 +895,7 @@ static ssize_t pt_write(struct file * filp, const char * buf,
while (count > 0) {
- if (!pt_poll_dsc(unit,1,PT_TMO,"write")) return -EIO;
+ if (!pt_poll_dsc(unit,HZ/100,PT_TMO,"write")) return -EIO;
n = count;
if (n > 32768) n = 32768; /* max per command */
diff --git a/drivers/char/Config.in b/drivers/char/Config.in
index 1ae10a544..3000b6a73 100644
--- a/drivers/char/Config.in
+++ b/drivers/char/Config.in
@@ -69,7 +69,7 @@ if [ "$CONFIG_BUSMOUSE" != "n" ]; then
dep_tristate 'ATIXL busmouse support' CONFIG_ATIXL_BUSMOUSE $CONFIG_BUSMOUSE
dep_tristate 'Logitech busmouse support' CONFIG_LOGIBUSMOUSE $CONFIG_BUSMOUSE
dep_tristate 'Microsoft busmouse support' CONFIG_MS_BUSMOUSE $CONFIG_BUSMOUSE
- if [ "$CONFIG_PPC" = "y" ] ; then
+ if [ "$CONFIG_ADB" = "y" ]; then
dep_tristate 'Apple Desktop Bus mouse support' CONFIG_ADBMOUSE $CONFIG_BUSMOUSE
fi
fi
diff --git a/drivers/char/adbmouse.c b/drivers/char/adbmouse.c
index 95c25b519..3fb2afea5 100644
--- a/drivers/char/adbmouse.c
+++ b/drivers/char/adbmouse.c
@@ -158,6 +158,8 @@ int __init adb_mouse_init(void)
if (!MACH_IS_MAC)
return -ENODEV;
#endif
+ /* all buttons up */
+ memset(adb_mouse_buttons, 7, sizeof(adb_mouse_buttons));
msedev = register_busmouse(&adb_mouse);
if (msedev < 0)
diff --git a/drivers/char/bttv.c b/drivers/char/bttv.c
index a177e7de6..ac21c68f0 100644
--- a/drivers/char/bttv.c
+++ b/drivers/char/bttv.c
@@ -544,7 +544,13 @@ static struct tvcard tvcards[] =
/* AVEC Intercapture */
{ 3, 2, 0, 2, 0, { 2, 3, 1, 1}, { 1, 0, 0, 0, 0}},
/* LifeView FlyKit w/o Tuner */
- { 3, 1, -1, -1, 0x8dff00, { 2, 3, 1, 1}}
+ { 3, 1, -1, -1, 0x8dff00, { 2, 3, 1, 1}},
+ /* CEI Raffles Card */
+ { 3, 3, 0, 2, 0, {2, 3, 1, 1}, {0, 0, 0, 0 ,0}},
+ /* Lucky Star Image World ConferenceTV */
+ {3, 1, 0, 2, 16777215, { 2, 3, 1, 1}, { 131072, 1, 1638400, 3, 4}},
+ /* Phoebe Tv Master + FM */
+ { 3, 1, 0, 2, 0xc00, { 2, 3, 1, 1},{0, 1, 0x800, 0x400, 0xc00, 0}}
};
#define TVCARDS (sizeof(tvcards)/sizeof(tvcard))
@@ -2118,6 +2124,21 @@ static int bttv_ioctl(struct video_device *dev, unsigned int cmd, void *arg)
data &= ~WINVIEW_PT2254_STROBE;
btwrite(data, BT848_GPIO_DATA);
}
+ /* TEA 6320 Audio Support by Michael Wrighton
+ mgw1@cec.wustl.edu */
+ if (btv->audio_chip == TEA6320)
+ {
+ int vol;
+ vol = v.volume >> 11;
+ if (!(v.flags&VIDEO_AUDIO_MUTE))
+ I2CWrite(&(btv->i2c), I2C_TEA6320,
+ TEA6320_S, TEA6320_S_SB,1); /* at least Raffles card uses input B */
+ else
+ I2CWrite(&(btv->i2c), I2C_TEA6320,
+ TEA6320_S, TEA6320_S_GMU,1);
+ I2CWrite(&(btv->i2c), I2C_TEA6320,
+ TEA6320_V, vol, 1);
+ }
if (btv->have_msp3400)
{
i2c_control_device(&(btv->i2c),
@@ -2597,14 +2618,13 @@ static void handle_chipset(void)
if (triton1)
triton1=BT848_INT_ETBF;
- while ((dev = pci_find_device(PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, dev)))
+
+ if(pci_pci_problems&PCIPCI_FAIL)
{
- /* Beware the SiS 85C496 my friend - rev 49 don't work with a bttv */
- printk(KERN_WARNING "BT848 and SIS 85C496 chipset don't always work together.\n");
- }
-
- /* dev == NULL */
-
+ printk(KERN_WARNING "bttv: This configuration is known to have PCI to PCI DMA problems\n");
+ printk(KERN_WARNING "bttv: You may not be able to use overlay mode.\n");
+ }
+
while ((dev = pci_find_device(PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, dev)))
{
unsigned char b;
@@ -2721,6 +2741,12 @@ static void idcard(int i)
btv->pll.pll_crystal=BT848_IFORM_XT0;
}
}
+
+ if (btv->type == BTTV_CONFERENCETV) {
+ btv->tuner_type = 1;
+ btv->pll.pll_ifreq=28636363;
+ btv->pll.pll_crystal=BT848_IFORM_XT0;
+ }
if (btv->type == BTTV_PIXVIEWPLAYTV) {
btv->pll.pll_ifreq=28636363;
@@ -2772,7 +2798,7 @@ static void idcard(int i)
if (I2CRead(&(btv->i2c), I2C_TEA6300) >=0)
{
- if(btv->type==BTTV_AVEC_INTERCAP)
+ if(btv->type==BTTV_AVEC_INTERCAP || btv->type==BTTV_CEI_RAFFLES)
{
printk(KERN_INFO "bttv%d: fader chip: TEA6320\n",btv->nr);
btv->audio_chip = TEA6320;
@@ -2820,14 +2846,23 @@ static void idcard(int i)
strcat(btv->video_dev.name,"(AVerMedia TVCapture 98)");
break;
case BTTV_VHX:
- strcpy(btv->video_dev.name,"BT848(Aimslab-VHX)");
+ strcpy(btv->video_dev.name,"(Aimslab-VHX)");
break;
case BTTV_WINVIEW_601:
- strcpy(btv->video_dev.name,"BT848(Leadtek WinView 601)");
+ strcpy(btv->video_dev.name,"(Leadtek WinView 601)");
break;
case BTTV_AVEC_INTERCAP:
strcpy(btv->video_dev.name,"(AVEC Intercapture)");
break;
+ case BTTV_CEI_RAFFLES:
+ strcpy(btv->video_dev.name,"(CEI Raffles Card)");
+ break;
+ case BTTV_CONFERENCETV:
+ strcpy(btv->video_dev.name,"(Image World ConferenceTV)");
+ break;
+ case BTTV_PHOEBE_TVMAS:
+ strcpy(btv->video_dev.name,"(Phoebe TV Master)");
+ break;
}
printk("%s\n",btv->video_dev.name);
audio(btv, AUDIO_INTERN);
diff --git a/drivers/char/bttv.h b/drivers/char/bttv.h
index 83c9f1e8f..3126cce57 100644
--- a/drivers/char/bttv.h
+++ b/drivers/char/bttv.h
@@ -213,6 +213,10 @@ struct bttv
#define BTTV_PIXVIEWPLAYTV 0x10
#define BTTV_WINVIEW_601 0x11
#define BTTV_AVEC_INTERCAP 0x12
+#define BTTV_LIFE_FLYKIT 0x13
+#define BTTV_CEI_RAFFLES 0x14
+#define BTTV_CONFERENCETV 0x15
+#define BTTV_PHOEBE_TVMAS 0x16
#define AUDIO_TUNER 0x00
#define AUDIO_RADIO 0x01
@@ -237,6 +241,7 @@ struct bttv
#define I2C_STBEE 0xae
#define I2C_VHX 0xc0
#define I2C_TEA6300 0x80 /* same as TEA6320 */
+#define I2C_TEA6320 0x80
#define TDA9840_SW 0x00
#define TDA9840_LVADJ 0x02
diff --git a/drivers/char/busmouse.c b/drivers/char/busmouse.c
index 42c2642f6..c592258bd 100644
--- a/drivers/char/busmouse.c
+++ b/drivers/char/busmouse.c
@@ -453,7 +453,7 @@ bus_mouse_init(void)
#ifdef CONFIG_SUN_MOUSE
sun_mouse_init();
#endif
-#ifdef CONFIG_ADB_MOUSE
+#ifdef CONFIG_ADBMOUSE
adb_mouse_init();
#endif
#ifdef CONFIG_RPCMOUSE
diff --git a/drivers/char/buz.c b/drivers/char/buz.c
index b535ac05e..91c131c56 100644
--- a/drivers/char/buz.c
+++ b/drivers/char/buz.c
@@ -3366,29 +3366,25 @@ static int find_zr36057(void)
return zoran_num;
}
-#include "chipsets.h"
-
static void handle_chipset(void)
{
- int index;
- struct pci_dev *dev = NULL;
-
- for (index = 0; index < sizeof(black) / sizeof(black[0]); index++) {
- if ((dev = pci_find_device(black[index].vendor, black[index].device, dev)) != NULL) {
- printk(KERN_INFO ": Host bridge: %s, ", black[index].name);
- switch (black[index].action) {
-
- case TRITON:
- printk("enabling Triton support.\n");
- triton = 1;
- break;
+ if(pci_pci_problems&PCIPCI_FAIL)
+ {
+ printk(KERN_WARNING "buz: This configuration is known to have PCI to PCI DMA problems\n");
+ printk(KERN_WARNING "buz: You may not be able to use overlay mode.\n");
+ }
+
- case NATOMA:
- printk("enabling Natoma workaround.\n");
- natoma = 1;
- break;
- }
- }
+ if(pci_pci_problems&PCIPCI_TRITON)
+ {
+ printk("buz: Enabling Triton support.\n");
+ triton = 1;
+ }
+
+ if(pci_pci_problems&PCIPCI_NATOMA)
+ {
+ printk("buz: Enabling Natoma workaround.\n");
+ natoma = 1;
}
}
diff --git a/drivers/char/chipsets.h b/drivers/char/chipsets.h
index 80c952553..e69de29bb 100644
--- a/drivers/char/chipsets.h
+++ b/drivers/char/chipsets.h
@@ -1,41 +0,0 @@
-static const struct {
- unsigned short vendor;
- unsigned short device;
- enum {
- TRITON,
- NATOMA
- } action;
- const char *name;
-} black[] = {
-
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, TRITON, "82437"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437VX, TRITON, "82437VX Triton II"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439, TRITON, "82439HX Triton II"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439TX, TRITON, "82439TX"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, NATOMA, "82441FX Natoma"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_0, NATOMA, "440LX - 82443LX PAC Host"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_1, NATOMA, "440LX - 82443LX PAC AGP"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0, NATOMA, "440BX - 82443BX Host"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_1, NATOMA, "440BX - 82443BX AGP"
- },
- {
- PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, NATOMA, "440BX - 82443BX Host (no AGP)"
- },
-};
diff --git a/drivers/char/pc_keyb.c b/drivers/char/pc_keyb.c
index 1118cf950..0841df811 100644
--- a/drivers/char/pc_keyb.c
+++ b/drivers/char/pc_keyb.c
@@ -871,6 +871,8 @@ static int open_aux(struct inode * inode, struct file * file)
aux_write_ack(AUX_ENABLE_DEV); /* Enable aux device */
kbd_write_cmd(AUX_INTS_ON); /* Enable controller ints */
+ send_data(KBD_CMD_ENABLE); /* try to workaround toshiba4030cdt problem */
+
return 0;
}
diff --git a/drivers/char/raw.c b/drivers/char/raw.c
index c8936ceb6..365c5bd38 100644
--- a/drivers/char/raw.c
+++ b/drivers/char/raw.c
@@ -369,7 +369,7 @@ ssize_t rw_raw_dev(int rw, struct file *filp, char *buf,
for (i=0; i < blocks; i++)
b[i] = blocknr++;
- err = brw_kiovec(rw, 1, &iobuf, dev, b, sector_size, 0);
+ err = brw_kiovec(rw, 1, &iobuf, dev, b, sector_size);
if (err >= 0) {
transferred += err;
diff --git a/drivers/char/synclink.c b/drivers/char/synclink.c
index d07532a17..cb3f1e0de 100644
--- a/drivers/char/synclink.c
+++ b/drivers/char/synclink.c
@@ -1,7 +1,7 @@
/*
* linux/drivers/char/synclink.c
*
- * ==FILEDATE 19990610==
+ * ==FILEDATE 19990901==
*
* Device driver for Microgate SyncLink ISA and PCI
* high speed multiprotocol serial adapters.
@@ -50,6 +50,8 @@
#define BREAKPOINT() asm(" int $3");
#define MAX_ISA_DEVICES 10
+#define MAX_PCI_DEVICES 10
+#define MAX_TOTAL_DEVICES 20
#include <linux/config.h>
#include <linux/module.h>
@@ -91,6 +93,14 @@
#include <linux/termios.h>
#include <linux/tqueue.h>
+#if LINUX_VERSION_CODE < VERSION(2,3,0)
+typedef struct wait_queue *wait_queue_head_t;
+#define DECLARE_WAITQUEUE(name,task) struct wait_queue (name) = {(task),NULL}
+#define init_waitqueue_head(head) *(head) = NULL
+#define DECLARE_MUTEX(name) struct semaphore (name) = MUTEX
+#define set_current_state(a) current->state = (a)
+#endif
+
#if LINUX_VERSION_CODE >= VERSION(2,1,4)
#include <asm/segment.h>
#define GET_USER(error,value,addr) error = get_user(value,addr)
@@ -297,6 +307,8 @@ struct mgsl_struct {
unsigned int tx_buffer_count; /* count of total allocated Tx buffers */
DMABUFFERENTRY *tx_buffer_list; /* list of transmit buffer entries */
+
+ unsigned char *intermediate_rxbuffer;
int rx_enabled;
int rx_overflow;
@@ -306,6 +318,7 @@ struct mgsl_struct {
u32 idle_mode;
u16 cmr_value;
+ u16 tcsr_value;
char device_name[25]; /* device instance name */
@@ -345,8 +358,8 @@ struct mgsl_struct {
u32 lcr_offset;
u32 misc_ctrl_value;
- char flag_buf[HDLC_MAX_FRAME_SIZE];
- char char_buf[HDLC_MAX_FRAME_SIZE];
+ char flag_buf[MAX_ASYNC_BUFFER_SIZE];
+ char char_buf[MAX_ASYNC_BUFFER_SIZE];
BOOLEAN drop_rts_on_tx_done;
BOOLEAN loopmode_insert_requested;
@@ -573,13 +586,21 @@ struct mgsl_struct {
#define IDLEMODE_ALT_MARK_SPACE 0x0500
#define IDLEMODE_SPACE 0x0600
#define IDLEMODE_MARK 0x0700
+#define IDLEMODE_MASK 0x0700
+
+/*
+ * IUSC revision identifiers
+ */
+#define IUSC_SL1660 0x4d44
+#define IUSC_PRE_SL1660 0x4553
/*
* Transmit status Bits in Transmit Command/status Register (TCSR)
*/
-#define TCSR_PRESERVE 0x0700
+#define TCSR_PRESERVE 0x0F00
+#define TCSR_UNDERWAIT BIT11
#define TXSTATUS_PREAMBLE_SENT BIT7
#define TXSTATUS_IDLE_SENT BIT6
#define TXSTATUS_ABORT_SENT BIT5
@@ -590,7 +611,7 @@ struct mgsl_struct {
#define TXSTATUS_UNDERRUN BIT1
#define TXSTATUS_FIFO_EMPTY BIT0
#define TXSTATUS_ALL 0x00fa
-#define usc_UnlatchTxstatusBits(a,b) usc_OutReg( (a), TCSR, (u16)((a)->usc_idle_mode + ((b) & 0x00FF)) )
+#define usc_UnlatchTxstatusBits(a,b) usc_OutReg( (a), TCSR, (u16)((a)->tcsr_value + ((b) & 0x00FF)) )
#define MISCSTATUS_RXC_LATCHED BIT15
@@ -710,9 +731,10 @@ void usc_RTCmd( struct mgsl_struct *info, u16 Cmd );
void usc_RCmd( struct mgsl_struct *info, u16 Cmd );
void usc_TCmd( struct mgsl_struct *info, u16 Cmd );
-#define usc_TCmd(a,b) usc_OutReg((a), TCSR, (u16)((a)->usc_idle_mode + (b)))
+#define usc_TCmd(a,b) usc_OutReg((a), TCSR, (u16)((a)->tcsr_value + (b)))
#define usc_RCmd(a,b) usc_OutReg((a), RCSR, (b))
+void usc_process_rxoverrun_sync( struct mgsl_struct *info );
void usc_start_receiver( struct mgsl_struct *info );
void usc_stop_receiver( struct mgsl_struct *info );
@@ -799,6 +821,8 @@ int mgsl_alloc_frame_memory(struct mgsl_struct *info, DMABUFFERENTRY *BufferLis
void mgsl_free_frame_memory(struct mgsl_struct *info, DMABUFFERENTRY *BufferList,int Buffercount);
int mgsl_alloc_buffer_list_memory(struct mgsl_struct *info);
void mgsl_free_buffer_list_memory(struct mgsl_struct *info);
+int mgsl_alloc_intermediate_rxbuffer_memory(struct mgsl_struct *info);
+void mgsl_free_intermediate_rxbuffer_memory(struct mgsl_struct *info);
/*
* Bottom half interrupt handlers
@@ -886,6 +910,7 @@ static int io[MAX_ISA_DEVICES] = {0,};
static int irq[MAX_ISA_DEVICES] = {0,};
static int dma[MAX_ISA_DEVICES] = {0,};
static int debug_level = 0;
+static int maxframe[MAX_TOTAL_DEVICES] = {0,};
#if LINUX_VERSION_CODE >= VERSION(2,1,0)
@@ -896,10 +921,11 @@ MODULE_PARM(io,"1-" __MODULE_STRING(MAX_ISA_DEVICES) "i");
MODULE_PARM(irq,"1-" __MODULE_STRING(MAX_ISA_DEVICES) "i");
MODULE_PARM(dma,"1-" __MODULE_STRING(MAX_ISA_DEVICES) "i");
MODULE_PARM(debug_level,"i");
+MODULE_PARM(maxframe,"1-" __MODULE_STRING(MAX_TOTAL_DEVICES) "i");
#endif
static char *driver_name = "SyncLink serial driver";
-static char *driver_version = "1.7";
+static char *driver_version = "1.14";
static struct tty_driver serial_driver, callout_driver;
static int serial_refcount;
@@ -1349,11 +1375,14 @@ void mgsl_isr_receive_status( struct mgsl_struct *info )
}
if (status & RXSTATUS_OVERRUN){
- /* Purge receive FIFO to allow DMA buffer completion
- * with overrun status stored in the receive status block.
- */
- usc_RCmd( info, RCmd_EnterHuntmode );
- usc_RTCmd( info, RTCmd_PurgeRxFifo );
+// /* Purge receive FIFO to allow DMA buffer completion
+// * with overrun status stored in the receive status block.
+// */
+// usc_RCmd( info, RCmd_EnterHuntmode );
+// usc_RTCmd( info, RTCmd_PurgeRxFifo );
+
+ info->icount.rxover++;
+ usc_process_rxoverrun_sync( info );
}
usc_ClearIrqPendingBits( info, RECEIVE_STATUS );
@@ -1381,6 +1410,17 @@ void mgsl_isr_transmit_status( struct mgsl_struct *info )
usc_ClearIrqPendingBits( info, TRANSMIT_STATUS );
usc_UnlatchTxstatusBits( info, status );
+
+ if ( status & (TXSTATUS_UNDERRUN | TXSTATUS_ABORT_SENT) )
+ {
+ /* finished sending HDLC abort. This may leave */
+ /* the TxFifo with data from the aborted frame */
+ /* so purge the TxFifo. Also shutdown the DMA */
+ /* channel in case there is data remaining in */
+ /* the DMA buffer */
+ usc_DmaCmd( info, DmaCmd_ResetTxChannel );
+ usc_RTCmd( info, RTCmd_PurgeTxFifo );
+ }
if ( status & TXSTATUS_EOF_SENT )
info->icount.txok++;
@@ -3343,7 +3383,7 @@ static void mgsl_close(struct tty_struct *tty, struct file * filp)
if (info->blocked_open) {
if (info->close_delay) {
- current->state = TASK_INTERRUPTIBLE;
+ set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(info->close_delay);
}
wake_up_interruptible(&info->open_wait);
@@ -3412,7 +3452,7 @@ static void mgsl_wait_until_sent(struct tty_struct *tty, int timeout)
if ( info->params.mode == MGSL_MODE_HDLC ) {
while (info->tx_active) {
- current->state = TASK_INTERRUPTIBLE;
+ set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(char_time);
if (signal_pending(current))
break;
@@ -3422,7 +3462,7 @@ static void mgsl_wait_until_sent(struct tty_struct *tty, int timeout)
} else {
while (!(usc_InReg(info,TCSR) & TXSTATUS_ALL_SENT) &&
info->tx_enabled) {
- current->state = TASK_INTERRUPTIBLE;
+ set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(char_time);
if (signal_pending(current))
break;
@@ -3431,7 +3471,7 @@ static void mgsl_wait_until_sent(struct tty_struct *tty, int timeout)
}
}
- current->state = TASK_RUNNING;
+ set_current_state(TASK_RUNNING);
exit:
if (debug_level >= DEBUG_LEVEL_INFO)
printk("%s(%d):mgsl_wait_until_sent(%s) exit\n",
@@ -3589,7 +3629,7 @@ static int block_til_ready(struct tty_struct *tty, struct file * filp,
schedule();
}
- current->state = TASK_RUNNING;
+ set_current_state(TASK_RUNNING);
remove_wait_queue(&info->open_wait, &wait);
if (extra_count)
@@ -3799,7 +3839,7 @@ static inline int line_info(char *buf, struct mgsl_struct *info)
spin_lock_irqsave(&info->irq_spinlock,flags);
{
- u16 Tscr = usc_InReg( info, TCSR );
+ u16 Tcsr = usc_InReg( info, TCSR );
u16 Tdmr = usc_InDmaReg( info, TDMR );
u16 Ticr = usc_InReg( info, TICR );
u16 Rscr = usc_InReg( info, RCSR );
@@ -3812,7 +3852,7 @@ static inline int line_info(char *buf, struct mgsl_struct *info)
u16 Ccar = inw( info->io_base + CCAR );
ret += sprintf(buf+ret, "tcsr=%04X tdmr=%04X ticr=%04X rcsr=%04X rdmr=%04X\n"
"ricr=%04X icr =%04X dccr=%04X tmr=%04X tccr=%04X ccar=%04X\n",
- Tscr,Tdmr,Ticr,Rscr,Rdmr,Ricr,Icr,Dccr,Tmr,Tccr,Ccar );
+ Tcsr,Tdmr,Ticr,Rscr,Rdmr,Ricr,Icr,Dccr,Tmr,Tccr,Ccar );
}
spin_unlock_irqrestore(&info->irq_spinlock,flags);
@@ -3878,30 +3918,45 @@ int mgsl_allocate_dma_buffers(struct mgsl_struct *info)
unsigned short BuffersPerFrame;
info->last_mem_alloc = 0;
-
+
+ /* Calculate the number of DMA buffers necessary to hold the */
+ /* largest allowable frame size. Note: If the max frame size is */
+ /* not an even multiple of the DMA buffer size then we need to */
+ /* round the buffer count per frame up one. */
+
+ BuffersPerFrame = (unsigned short)(info->max_frame_size/DMABUFFERSIZE);
+ if ( info->max_frame_size % DMABUFFERSIZE )
+ BuffersPerFrame++;
+
if ( info->bus_type == MGSL_BUS_TYPE_PCI ) {
/*
* The PCI adapter has 256KBytes of shared memory to use.
- * This is 64 PAGE_SIZE buffers. 1 is used for the buffer
- * list. 2 are used for the transmit and one is left as
- * a spare. The 4K buffer list can hold 128 DMA_BUFFER
- * structures at 32bytes each.
+ * This is 64 PAGE_SIZE buffers.
+ *
+ * The first page is used for padding at this time so the
+ * buffer list does not begin at offset 0 of the PCI
+ * adapter's shared memory.
+ *
+ * The 2nd page is used for the buffer list. A 4K buffer
+ * list can hold 128 DMA_BUFFER structures at 32 bytes
+ * each.
+ *
+ * This leaves 62 4K pages.
+ *
+ * The next N pages are used for a transmit frame. We
+ * reserve enough 4K page blocks to hold the configured
+ * MaxFrameSize
+ *
+ * Of the remaining pages (62-N), determine how many can
+ * be used to receive full MaxFrameSize inbound frames
*/
-
- info->rx_buffer_count = 60;
- info->tx_buffer_count = 2;
+
+ info->tx_buffer_count = BuffersPerFrame;
+ info->rx_buffer_count = 62 - info->tx_buffer_count;
} else {
/* Calculate the number of PAGE_SIZE buffers needed for */
/* receive and transmit DMA buffers. */
- /* Calculate the number of DMA buffers necessary to hold the */
- /* largest allowable frame size. Note: If the max frame size is */
- /* not an even multiple of the DMA buffer size then we need to */
- /* round the buffer count per frame up one. */
-
- BuffersPerFrame = (unsigned short)(info->max_frame_size/DMABUFFERSIZE);
- if ( info->max_frame_size % DMABUFFERSIZE )
- BuffersPerFrame++;
/* Calculate the number of DMA buffers necessary to */
/* hold 7 max size receive frames and one max size transmit frame. */
@@ -3909,8 +3964,17 @@ int mgsl_allocate_dma_buffers(struct mgsl_struct *info)
/* End of List condition if all receive buffers are used when */
/* using linked list DMA buffers. */
- info->rx_buffer_count = (BuffersPerFrame * MAXRXFRAMES) + 6;
info->tx_buffer_count = BuffersPerFrame;
+ info->rx_buffer_count = (BuffersPerFrame * MAXRXFRAMES) + 6;
+
+ /*
+ * limit total TxBuffers & RxBuffers to 62 4K total
+ * (ala PCI Allocation)
+ */
+
+ if ( (info->tx_buffer_count + info->rx_buffer_count) > 62 )
+ info->rx_buffer_count = 62 - info->tx_buffer_count;
+
}
if ( debug_level >= DEBUG_LEVEL_INFO )
@@ -3919,7 +3983,8 @@ int mgsl_allocate_dma_buffers(struct mgsl_struct *info)
if ( mgsl_alloc_buffer_list_memory( info ) < 0 ||
mgsl_alloc_frame_memory(info, info->rx_buffer_list, info->rx_buffer_count) < 0 ||
- mgsl_alloc_frame_memory(info, info->tx_buffer_list, info->tx_buffer_count) < 0) {
+ mgsl_alloc_frame_memory(info, info->tx_buffer_list, info->tx_buffer_count) < 0 ||
+ mgsl_alloc_intermediate_rxbuffer_memory(info) < 0 ) {
printk("%s(%d):Can't allocate DMA buffer memory\n",__FILE__,__LINE__);
return -ENOMEM;
}
@@ -4146,6 +4211,48 @@ void mgsl_free_dma_buffers( struct mgsl_struct *info )
} /* end of mgsl_free_dma_buffers() */
+
+/*
+ * mgsl_alloc_intermediate_rxbuffer_memory()
+ *
+ * Allocate a buffer large enough to hold max_frame_size. This buffer
+ * is used to pass an assembled frame to the line discipline.
+ *
+ * Arguments:
+ *
+ * info pointer to device instance data
+ *
+ * Return Value: 0 if success, otherwise -ENOMEM
+ */
+int mgsl_alloc_intermediate_rxbuffer_memory(struct mgsl_struct *info)
+{
+ info->intermediate_rxbuffer = kmalloc(info->max_frame_size, GFP_KERNEL | GFP_DMA);
+ if ( info->intermediate_rxbuffer == NULL )
+ return -ENOMEM;
+
+ return 0;
+
+} /* end of mgsl_alloc_intermediate_rxbuffer_memory() */
+
+/*
+ * mgsl_free_intermediate_rxbuffer_memory()
+ *
+ *
+ * Arguments:
+ *
+ * info pointer to device instance data
+ *
+ * Return Value: None
+ */
+void mgsl_free_intermediate_rxbuffer_memory(struct mgsl_struct *info)
+{
+ if ( info->intermediate_rxbuffer )
+ kfree_s( info->intermediate_rxbuffer, info->max_frame_size);
+
+ info->intermediate_rxbuffer = NULL;
+
+} /* end of mgsl_free_intermediate_rxbuffer_memory() */
+
/* mgsl_claim_resources()
*
* Claim all resources used by a device
@@ -4254,6 +4361,7 @@ void mgsl_release_resources(struct mgsl_struct *info)
info->dma_requested = 0;
}
mgsl_free_dma_buffers(info);
+ mgsl_free_intermediate_rxbuffer_memory(info);
if ( info->io_addr_requested ) {
release_region(info->io_base,info->io_addr_size);
@@ -4301,13 +4409,20 @@ void mgsl_add_device( struct mgsl_struct *info )
current_dev->next_device = info;
}
+ if ( info->max_frame_size < 4096 )
+ info->max_frame_size = 4096;
+ else if ( info->max_frame_size > 65535 )
+ info->max_frame_size = 65535;
+
if ( info->bus_type == MGSL_BUS_TYPE_PCI ) {
- printk( "SyncLink device %s added:PCI bus IO=%04X IRQ=%d Mem=%08X LCR=%08X\n",
+ printk( "SyncLink device %s added:PCI bus IO=%04X IRQ=%d Mem=%08X LCR=%08X MaxFrameSize=%u\n",
info->device_name, info->io_base, info->irq_level,
- info->phys_memory_base, info->phys_lcr_base );
+ info->phys_memory_base, info->phys_lcr_base,
+ info->max_frame_size );
} else {
- printk( "SyncLink device %s added:ISA bus IO=%04X IRQ=%d DMA=%d\n",
- info->device_name, info->io_base, info->irq_level, info->dma_level );
+ printk( "SyncLink device %s added:ISA bus IO=%04X IRQ=%d DMA=%d MaxFrameSize=%u\n",
+ info->device_name, info->io_base, info->irq_level, info->dma_level,
+ info->max_frame_size );
}
} /* end of mgsl_add_device() */
@@ -4316,7 +4431,7 @@ void mgsl_add_device( struct mgsl_struct *info )
*
* Allocate and initialize a device instance structure
*
- * Arguments: None
+ * Arguments: none
* Return Value: pointer to mgsl_struct if success, otherwise NULL
*/
struct mgsl_struct* mgsl_allocate_device()
@@ -4362,6 +4477,7 @@ int mgsl_enumerate_devices()
{
struct mgsl_struct *info;
int i;
+ int num_devices = 0;
/* Check for user specified ISA devices */
@@ -4391,9 +4507,16 @@ int mgsl_enumerate_devices()
info->bus_type = MGSL_BUS_TYPE_ISA;
info->io_addr_size = 16;
info->irq_flags = 0;
+
+ /* override default max frame size if arg available */
+ if ( num_devices < MAX_TOTAL_DEVICES &&
+ maxframe[num_devices] )
+ info->max_frame_size = maxframe[num_devices];
/* add new device to device list */
mgsl_add_device( info );
+
+ ++num_devices;
}
@@ -4478,6 +4601,11 @@ int mgsl_enumerate_devices()
info->irq_flags = SA_SHIRQ;
info->bus = bus;
info->function = func;
+
+ /* override default max frame size if arg available */
+ if ( num_devices < MAX_TOTAL_DEVICES &&
+ maxframe[num_devices] )
+ info->max_frame_size = maxframe[num_devices];
/* Store the PCI9050 misc control register value because a flaw
* in the PCI9050 prevents LCR registers from being read if
@@ -4860,6 +4988,24 @@ u16 usc_InReg( struct mgsl_struct *info, u16 RegAddr )
void usc_set_sdlc_mode( struct mgsl_struct *info )
{
u16 RegValue;
+ int PreSL1660;
+
+ /*
+ * determine if the IUSC on the adapter is pre-SL1660. If
+ * not, take advantage of the UnderWait feature of more
+ * modern chips. If an underrun occurs and this bit is set,
+ * the transmitter will idle the programmed idle pattern
+ * until the driver has time to service the underrun. Otherwise,
+ * the dma controller may get the cycles previously requested
+ * and begin transmitting queued tx data.
+ */
+ usc_OutReg(info,TMCR,0x1f);
+ RegValue=usc_InReg(info,TMDR);
+ if ( RegValue == IUSC_PRE_SL1660 )
+ PreSL1660 = 1;
+ else
+ PreSL1660 = 0;
+
if ( info->params.flags & HDLC_FLAG_HDLC_LOOPMODE )
{
@@ -4951,6 +5097,8 @@ void usc_set_sdlc_mode( struct mgsl_struct *info )
if ( info->params.crc_type == HDLC_CRC_16_CCITT )
RegValue |= BIT9;
+ else if ( info->params.crc_type == HDLC_CRC_32_CCITT )
+ RegValue |= ( BIT12 | BIT10 | BIT9 );
usc_OutReg( info, RMR, RegValue );
@@ -5026,6 +5174,8 @@ void usc_set_sdlc_mode( struct mgsl_struct *info )
if ( info->params.crc_type == HDLC_CRC_16_CCITT )
RegValue |= BIT9 + BIT8;
+ else if ( info->params.crc_type == HDLC_CRC_32_CCITT )
+ RegValue |= ( BIT12 | BIT10 | BIT9 | BIT8);
usc_OutReg( info, TMR, RegValue );
@@ -5057,6 +5207,30 @@ void usc_set_sdlc_mode( struct mgsl_struct *info )
usc_UnlatchTxstatusBits( info, TXSTATUS_ALL );
usc_ClearIrqPendingBits( info, TRANSMIT_STATUS );
+ /*
+ ** Transmit Command/Status Register (TCSR)
+ **
+ ** <15..12> 0000 TCmd
+ ** <11> 0/1 UnderWait
+ ** <10..08> 000 TxIdle
+ ** <7> x PreSent
+ ** <6> x IdleSent
+ ** <5> x AbortSent
+ ** <4> x EOF/EOM Sent
+ ** <3> x CRC Sent
+ ** <2> x All Sent
+ ** <1> x TxUnder
+ ** <0> x TxEmpty
+ **
+ ** 0000 0000 0000 0000 = 0x0000
+ */
+ info->tcsr_value = 0;
+
+ if ( !PreSL1660 )
+ info->tcsr_value |= TCSR_UNDERWAIT;
+
+ usc_OutReg( info, TCSR, info->tcsr_value );
+
/* Clock mode Control Register (CMCR)
*
* <15..14> 00 counter 1 Source = Disabled
@@ -5472,6 +5646,152 @@ void usc_enable_aux_clock( struct mgsl_struct *info, u32 data_rate )
} /* end of usc_enable_aux_clock() */
+/*
+ *
+ * usc_process_rxoverrun_sync()
+ *
+ * This function processes a receive overrun by resetting the
+ * receive DMA buffers and issuing a Purge Rx FIFO command
+ * to allow the receiver to continue receiving.
+ *
+ * Arguments:
+ *
+ * info pointer to device extension
+ *
+ * Return Value: None
+ */
+void usc_process_rxoverrun_sync( struct mgsl_struct *info )
+{
+ int start_index;
+ int end_index;
+ int frame_start_index;
+ int start_of_frame_found = FALSE;
+ int end_of_frame_found = FALSE;
+ int reprogram_dma = FALSE;
+
+ DMABUFFERENTRY *buffer_list = info->rx_buffer_list;
+ u32 phys_addr;
+
+ usc_DmaCmd( info, DmaCmd_PauseRxChannel );
+ usc_RCmd( info, RCmd_EnterHuntmode );
+ usc_RTCmd( info, RTCmd_PurgeRxFifo );
+
+ /* CurrentRxBuffer points to the 1st buffer of the next */
+ /* possibly available receive frame. */
+
+ frame_start_index = start_index = end_index = info->current_rx_buffer;
+
+ /* Search for an unfinished string of buffers. This means */
+ /* that a receive frame started (at least one buffer with */
+ /* count set to zero) but there is no terminiting buffer */
+ /* (status set to non-zero). */
+
+ while( !buffer_list[end_index].count )
+ {
+ /* Count field has been reset to zero by 16C32. */
+ /* This buffer is currently in use. */
+
+ if ( !start_of_frame_found )
+ {
+ start_of_frame_found = TRUE;
+ frame_start_index = end_index;
+ end_of_frame_found = FALSE;
+ }
+
+ if ( buffer_list[end_index].status )
+ {
+ /* Status field has been set by 16C32. */
+ /* This is the last buffer of a received frame. */
+
+ /* We want to leave the buffers for this frame intact. */
+ /* Move on to next possible frame. */
+
+ start_of_frame_found = FALSE;
+ end_of_frame_found = TRUE;
+ }
+
+ /* advance to next buffer entry in linked list */
+ end_index++;
+ if ( end_index == info->rx_buffer_count )
+ end_index = 0;
+
+ if ( start_index == end_index )
+ {
+ /* The entire list has been searched with all Counts == 0 and */
+ /* all Status == 0. The receive buffers are */
+ /* completely screwed, reset all receive buffers! */
+ mgsl_reset_rx_dma_buffers( info );
+ frame_start_index = 0;
+ start_of_frame_found = FALSE;
+ reprogram_dma = TRUE;
+ break;
+ }
+ }
+
+ if ( start_of_frame_found && !end_of_frame_found )
+ {
+ /* There is an unfinished string of receive DMA buffers */
+ /* as a result of the receiver overrun. */
+
+ /* Reset the buffers for the unfinished frame */
+ /* and reprogram the receive DMA controller to start */
+ /* at the 1st buffer of unfinished frame. */
+
+ start_index = frame_start_index;
+
+ do
+ {
+ *((unsigned long *)&(info->rx_buffer_list[start_index++].count)) = DMABUFFERSIZE;
+
+ /* Adjust index for wrap around. */
+ if ( start_index == info->rx_buffer_count )
+ start_index = 0;
+
+ } while( start_index != end_index );
+
+ reprogram_dma = TRUE;
+ }
+
+ if ( reprogram_dma )
+ {
+ usc_UnlatchRxstatusBits(info,RXSTATUS_ALL);
+ usc_ClearIrqPendingBits(info, RECEIVE_DATA|RECEIVE_STATUS);
+ usc_UnlatchRxstatusBits(info, RECEIVE_DATA|RECEIVE_STATUS);
+
+ usc_EnableReceiver(info,DISABLE_UNCONDITIONAL);
+
+ /* This empties the receive FIFO and loads the RCC with RCLR */
+ usc_OutReg( info, CCSR, (u16)(usc_InReg(info,CCSR) | BIT13) );
+
+ /* program 16C32 with physical address of 1st DMA buffer entry */
+ phys_addr = info->rx_buffer_list[frame_start_index].phys_entry;
+ usc_OutDmaReg( info, NRARL, (u16)phys_addr );
+ usc_OutDmaReg( info, NRARU, (u16)(phys_addr >> 16) );
+
+ usc_UnlatchRxstatusBits( info, RXSTATUS_ALL );
+ usc_ClearIrqPendingBits( info, RECEIVE_DATA + RECEIVE_STATUS );
+ usc_EnableInterrupts( info, RECEIVE_STATUS );
+
+ /* 1. Arm End of Buffer (EOB) Receive DMA Interrupt (BIT2 of RDIAR) */
+ /* 2. Enable Receive DMA Interrupts (BIT1 of DICR) */
+
+ usc_OutDmaReg( info, RDIAR, BIT3 + BIT2 );
+ usc_OutDmaReg( info, DICR, (u16)(usc_InDmaReg(info,DICR) | BIT1) );
+ usc_DmaCmd( info, DmaCmd_InitRxChannel );
+ if ( info->params.flags & HDLC_FLAG_AUTO_DCD )
+ usc_EnableReceiver(info,ENABLE_AUTO_DCD);
+ else
+ usc_EnableReceiver(info,ENABLE_UNCONDITIONAL);
+ }
+ else
+ {
+ /* This empties the receive FIFO and loads the RCC with RCLR */
+ usc_OutReg( info, CCSR, (u16)(usc_InReg(info,CCSR) | BIT13) );
+ usc_RTCmd( info, RTCmd_PurgeRxFifo );
+ }
+
+} /* end of usc_process_rxoverrun_sync() */
+
/* usc_stop_receiver()
*
* Disable USC receiver
@@ -6155,7 +6475,10 @@ void usc_set_txidle( struct mgsl_struct *info )
}
info->usc_idle_mode = usc_idle_mode;
- usc_OutReg(info, TCSR, usc_idle_mode);
+ //usc_OutReg(info, TCSR, usc_idle_mode);
+ info->tcsr_value &= ~IDLEMODE_MASK; /* clear idle mode bits */
+ info->tcsr_value += usc_idle_mode;
+ usc_OutReg(info, TCSR, info->tcsr_value);
} /* end of usc_set_txidle() */
@@ -6493,6 +6816,8 @@ int mgsl_get_rx_frame(struct mgsl_struct *info)
/* adjust frame size for CRC if any */
if ( info->params.crc_type == HDLC_CRC_16_CCITT )
framesize -= 2;
+ else if ( info->params.crc_type == HDLC_CRC_32_CCITT )
+ framesize -= 4;
}
if ( debug_level >= DEBUG_LEVEL_BH )
@@ -6501,16 +6826,49 @@ int mgsl_get_rx_frame(struct mgsl_struct *info)
if ( debug_level >= DEBUG_LEVEL_DATA )
mgsl_trace_block(info,info->rx_buffer_list[StartIndex].virt_addr,
- framesize,0);
+ MIN(framesize,DMABUFFERSIZE),0);
if (framesize) {
- if (framesize > HDLC_MAX_FRAME_SIZE)
+ if (framesize > info->max_frame_size)
info->icount.rxlong++;
else {
+#if 1
+ /*
+ * copy contents of dma frame buffer(s) to intermediate
+ * rxbuffer for presentation to line discipline
+ */
+ int copy_count = framesize;
+ int index = StartIndex;
+ unsigned char *ptmp = info->intermediate_rxbuffer;
+
+ info->icount.rxok++;
+
+ while( copy_count )
+ {
+ int partial_count;
+ if ( copy_count > DMABUFFERSIZE )
+ partial_count = DMABUFFERSIZE;
+ else
+ partial_count = copy_count;
+
+ pBufEntry = &(info->rx_buffer_list[index]);
+ memcpy( ptmp, pBufEntry->virt_addr, partial_count );
+ ptmp += partial_count;
+ copy_count -= partial_count;
+
+ if ( ++index == info->rx_buffer_count )
+ index = 0;
+
+ }
+
+ /* Call the line discipline receive callback directly. */
+ tty->ldisc.receive_buf(tty, info->intermediate_rxbuffer, info->flag_buf, framesize);
+#else
info->icount.rxok++;
pBufEntry = &(info->rx_buffer_list[StartIndex]);
/* Call the line discipline receive callback directly. */
tty->ldisc.receive_buf(tty, pBufEntry->virt_addr, info->flag_buf, framesize);
+#endif
}
}
/* Free the buffers used by this frame. */
@@ -6526,8 +6884,8 @@ Cleanup:
* receive buffers are now empty, then restart receiver.
*/
- if ( !info->rx_buffer_list[info->current_rx_buffer].status &&
- info->rx_buffer_list[info->current_rx_buffer].count ) {
+ if ( !info->rx_buffer_list[EndIndex].status &&
+ info->rx_buffer_list[EndIndex].count ) {
spin_lock_irqsave(&info->irq_spinlock,flags);
usc_start_receiver(info);
spin_unlock_irqrestore(&info->irq_spinlock,flags);
@@ -6558,7 +6916,7 @@ void mgsl_load_tx_dma_buffer(struct mgsl_struct *info, const char *Buffer,
DMABUFFERENTRY *pBufEntry;
if ( debug_level >= DEBUG_LEVEL_DATA )
- mgsl_trace_block(info,Buffer,BufferSize,1);
+ mgsl_trace_block(info,Buffer, MIN(BufferSize,DMABUFFERSIZE), 1);
if (info->params.flags & HDLC_FLAG_HDLC_LOOPMODE) {
/* set CMR:13 to start transmit when
@@ -6701,9 +7059,9 @@ BOOLEAN mgsl_irq_test( struct mgsl_struct *info )
EndTime=100;
while( EndTime-- && !info->irq_occurred ) {
- current->state = TASK_INTERRUPTIBLE;
+ set_current_state(TASK_INTERRUPTIBLE);
schedule_timeout(jiffies_from_ms(10));
- current->state = TASK_RUNNING;
+ set_current_state(TASK_RUNNING);
}
spin_lock_irqsave(&info->irq_spinlock,flags);
@@ -6883,7 +7241,7 @@ BOOLEAN mgsl_dma_test( struct mgsl_struct *info )
/* unlatch Tx status bits, and start transmit channel. */
- usc_OutReg( info, TCSR, (unsigned short)(( usc_InReg(info, TCSR) & 0x0700) | 0xfa) );
+ usc_OutReg( info, TCSR, (unsigned short)(( usc_InReg(info, TCSR) & 0x0f00) | 0xfa) );
usc_DmaCmd( info, DmaCmd_InitTxChannel );
/* wait for DMA controller to fill transmit FIFO */
diff --git a/drivers/i2o/i2o_block.c b/drivers/i2o/i2o_block.c
index 4bcb7dd8a..5042f4e97 100644
--- a/drivers/i2o/i2o_block.c
+++ b/drivers/i2o/i2o_block.c
@@ -643,27 +643,9 @@ static int i2ob_ioctl(struct inode *inode, struct file *file,
dev = &i2ob_dev[minor];
switch (cmd) {
- case BLKRASET:
- if(!capable(CAP_SYS_ADMIN)) return -EACCES;
- if(arg > 0xff) return -EINVAL;
- read_ahead[MAJOR(inode->i_rdev)] = arg;
- return 0;
-
- case BLKRAGET:
- if (!arg) return -EINVAL;
- return put_user(read_ahead[MAJOR(inode->i_rdev)],
- (long *) arg);
case BLKGETSIZE:
return put_user(i2ob[minor].nr_sects, (long *) arg);
- case BLKFLSBUF:
- if(!capable(CAP_SYS_ADMIN))
- return -EACCES;
-
- fsync_dev(inode->i_rdev);
- invalidate_buffers(inode->i_rdev);
- return 0;
-
case HDIO_GETGEO:
{
struct hd_geometry g;
@@ -679,8 +661,16 @@ static int i2ob_ioctl(struct inode *inode, struct file *file,
return -EACCES;
return do_i2ob_revalidate(inode->i_rdev,1);
- default:
+ case BLKFLSBUF:
+ case BLKROSET:
+ case BLKROGET:
+ case BLKRASET:
+ case BLKRAGET:
+ case BLKPG:
return blk_ioctl(inode->i_rdev, cmd, arg);
+
+ default:
+ return -EINVAL;
}
}
diff --git a/drivers/isdn/Config.in b/drivers/isdn/Config.in
index ec27982bb..52b80809b 100644
--- a/drivers/isdn/Config.in
+++ b/drivers/isdn/Config.in
@@ -2,77 +2,76 @@
# ISDN device configuration
#
if [ "$CONFIG_INET" != "n" ]; then
- bool 'Support synchronous PPP' CONFIG_ISDN_PPP
- if [ "$CONFIG_ISDN_PPP" != "n" ]; then
- bool 'Use VJ-compression with synchronous PPP' CONFIG_ISDN_PPP_VJ
- bool 'Support generic MP (RFC 1717)' CONFIG_ISDN_MPP
- fi
+ bool ' Support synchronous PPP' CONFIG_ISDN_PPP
+ if [ "$CONFIG_ISDN_PPP" != "n" ]; then
+ bool ' Use VJ-compression with synchronous PPP' CONFIG_ISDN_PPP_VJ
+ bool ' Support generic MP (RFC 1717)' CONFIG_ISDN_MPP
+ fi
fi
-bool 'Support audio via ISDN' CONFIG_ISDN_AUDIO
+bool ' Support audio via ISDN' CONFIG_ISDN_AUDIO
if [ "$CONFIG_ISDN_AUDIO" != "n" ]; then
- bool 'Support AT-Fax Class 2 commands' CONFIG_ISDN_TTY_FAX
+ bool ' Support AT-Fax Class 2 commands' CONFIG_ISDN_TTY_FAX
fi
-bool 'Support isdn diversion services' CONFIG_ISDN_DIVERSION
-if [ "$CONFIG_X25" != "n" ]; then
- bool 'X.25 PLP on top of ISDN (EXPERIMENTAL)' CONFIG_ISDN_X25
+bool ' Support isdn diversion services' CONFIG_ISDN_DIVERSION
+if [ "$CONFIG_X25" != "n" -a "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ bool ' X.25 PLP on top of ISDN (EXPERIMENTAL)' CONFIG_ISDN_X25
fi
-dep_tristate 'ICN 2B and 4B support' CONFIG_ISDN_DRV_ICN $CONFIG_ISDN
-dep_tristate 'isdnloop support' CONFIG_ISDN_DRV_LOOP $CONFIG_ISDN
-dep_tristate 'PCBIT-D support' CONFIG_ISDN_DRV_PCBIT $CONFIG_ISDN
-dep_tristate 'HiSax SiemensChipSet driver support' CONFIG_ISDN_DRV_HISAX $CONFIG_ISDN
+dep_tristate ' ICN 2B and 4B support' CONFIG_ISDN_DRV_ICN $CONFIG_ISDN
+dep_tristate ' isdnloop support' CONFIG_ISDN_DRV_LOOP $CONFIG_ISDN
+dep_tristate ' PCBIT-D support' CONFIG_ISDN_DRV_PCBIT $CONFIG_ISDN
+dep_tristate ' HiSax SiemensChipSet driver support' CONFIG_ISDN_DRV_HISAX $CONFIG_ISDN
if [ "$CONFIG_ISDN_DRV_HISAX" != "n" ]; then
- bool 'HiSax Support for EURO/DSS1' CONFIG_HISAX_EURO
- if [ "$CONFIG_HISAX_EURO" != "n" ]; then
- bool 'Support for german chargeinfo' CONFIG_DE_AOC
- bool 'Disable sending complete' CONFIG_HISAX_NO_SENDCOMPLETE
- bool 'Disable sending low layer compatibility' CONFIG_HISAX_NO_LLC
- fi
- bool 'HiSax Support for german 1TR6' CONFIG_HISAX_1TR6
- bool 'HiSax Support for Teles 16.0/8.0' CONFIG_HISAX_16_0
- bool 'HiSax Support for Teles 16.3 or PNP or PCMCIA' CONFIG_HISAX_16_3
- bool 'HiSax Support for Teles PCI' CONFIG_HISAX_TELESPCI
- bool 'HiSax Support for Teles S0Box' CONFIG_HISAX_S0BOX
- bool 'HiSax Support for AVM A1 (Fritz)' CONFIG_HISAX_AVM_A1
- bool 'HiSax Support for AVM PnP/PCI (Fritz!PnP/PCI)' CONFIG_HISAX_FRITZPCI
- bool 'HiSax Support for AVM A1 PCMCIA (Fritz)' CONFIG_HISAX_AVM_A1_PCMCIA
- bool 'HiSax Support for Elsa cards' CONFIG_HISAX_ELSA
- bool 'HiSax Support for ITK ix1-micro Revision 2' CONFIG_HISAX_IX1MICROR2
- bool 'HiSax Support for Eicon.Diehl Diva cards' CONFIG_HISAX_DIEHLDIVA
- bool 'HiSax Support for ASUSCOM cards' CONFIG_HISAX_ASUSCOM
- bool 'HiSax Support for TELEINT cards' CONFIG_HISAX_TELEINT
- bool 'HiSax Support for HFC-S based cards' CONFIG_HISAX_HFCS
- bool 'HiSax Support for Sedlbauer cards' CONFIG_HISAX_SEDLBAUER
- bool 'HiSax Support for USR Sportster internal TA' CONFIG_HISAX_SPORTSTER
- bool 'HiSax Support for MIC card' CONFIG_HISAX_MIC
- bool 'HiSax Support for NETjet card' CONFIG_HISAX_NETJET
- bool 'HiSax Support for Niccy PnP/PCI card' CONFIG_HISAX_NICCY
- bool 'HiSax Support for Siemens I-Surf card' CONFIG_HISAX_ISURF
- bool 'HiSax Support for HST Saphir card' CONFIG_HISAX_HSTSAPHIR
- bool 'HiSax Support for Telekom A4T card' CONFIG_HISAX_BKM_A4T
- bool 'HiSax Support for Scitel Quadro card' CONFIG_HISAX_SCT_QUADRO
- bool 'HiSax Support for Gazel cards' CONFIG_HISAX_GAZEL
- bool 'HiSax Support for HFC PCI-Bus cards' CONFIG_HISAX_HFC_PCI
- if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then
-# bool 'HiSax Support for TESTEMULATOR (EXPERIMENTAL)' CONFIG_HISAX_TESTEMU
- if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then
- bool 'HiSax Support for Am7930' CONFIG_HISAX_AMD7930
- fi
- fi
+ bool ' HiSax Support for EURO/DSS1' CONFIG_HISAX_EURO
+ if [ "$CONFIG_HISAX_EURO" != "n" ]; then
+ bool ' Support for german chargeinfo' CONFIG_DE_AOC
+ bool ' Disable sending complete' CONFIG_HISAX_NO_SENDCOMPLETE
+ bool ' Disable sending low layer compatibility' CONFIG_HISAX_NO_LLC
+ fi
+ bool ' HiSax Support for german 1TR6' CONFIG_HISAX_1TR6
+ bool ' HiSax Support for Teles 16.0/8.0' CONFIG_HISAX_16_0
+ bool ' HiSax Support for Teles 16.3 or PNP or PCMCIA' CONFIG_HISAX_16_3
+ bool ' HiSax Support for Teles PCI' CONFIG_HISAX_TELESPCI
+ bool ' HiSax Support for Teles S0Box' CONFIG_HISAX_S0BOX
+ bool ' HiSax Support for AVM A1 (Fritz)' CONFIG_HISAX_AVM_A1
+ bool ' HiSax Support for AVM PnP/PCI (Fritz!PnP/PCI)' CONFIG_HISAX_FRITZPCI
+ bool ' HiSax Support for AVM A1 PCMCIA (Fritz)' CONFIG_HISAX_AVM_A1_PCMCIA
+ bool ' HiSax Support for Elsa cards' CONFIG_HISAX_ELSA
+ bool ' HiSax Support for ITK ix1-micro Revision 2' CONFIG_HISAX_IX1MICROR2
+ bool ' HiSax Support for Eicon.Diehl Diva cards' CONFIG_HISAX_DIEHLDIVA
+ bool ' HiSax Support for ASUSCOM cards' CONFIG_HISAX_ASUSCOM
+ bool ' HiSax Support for TELEINT cards' CONFIG_HISAX_TELEINT
+ bool ' HiSax Support for HFC-S based cards' CONFIG_HISAX_HFCS
+ bool ' HiSax Support for Sedlbauer cards' CONFIG_HISAX_SEDLBAUER
+ bool ' HiSax Support for USR Sportster internal TA' CONFIG_HISAX_SPORTSTER
+ bool ' HiSax Support for MIC card' CONFIG_HISAX_MIC
+ bool ' HiSax Support for NETjet card' CONFIG_HISAX_NETJET
+ bool ' HiSax Support for Niccy PnP/PCI card' CONFIG_HISAX_NICCY
+ bool ' HiSax Support for Siemens I-Surf card' CONFIG_HISAX_ISURF
+ bool ' HiSax Support for HST Saphir card' CONFIG_HISAX_HSTSAPHIR
+ bool ' HiSax Support for Telekom A4T card' CONFIG_HISAX_BKM_A4T
+ bool ' HiSax Support for Scitel Quadro card' CONFIG_HISAX_SCT_QUADRO
+ bool ' HiSax Support for Gazel cards' CONFIG_HISAX_GAZEL
+ bool ' HiSax Support for HFC PCI-Bus cards' CONFIG_HISAX_HFC_PCI
+ if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then
+# bool ' HiSax Support for TESTEMULATOR (EXPERIMENTAL)' CONFIG_HISAX_TESTEMU
+ if [ "$ARCH" = "sparc" -o "$ARCH" = "sparc64" ]; then
+ bool ' HiSax Support for Am7930' CONFIG_HISAX_AMD7930
+ fi
+ fi
fi
if [ "$CONFIG_EXPERIMENTAL" != "n" ]; then
- dep_tristate 'Spellcaster support (EXPERIMENTAL)' CONFIG_ISDN_DRV_SC $CONFIG_ISDN
- dep_tristate 'IBM Active 2000 support (EXPERIMENTAL)' CONFIG_ISDN_DRV_ACT2000 $CONFIG_ISDN
+ dep_tristate ' Spellcaster support (EXPERIMENTAL)' CONFIG_ISDN_DRV_SC $CONFIG_ISDN
+ dep_tristate ' IBM Active 2000 support (EXPERIMENTAL)' CONFIG_ISDN_DRV_ACT2000 $CONFIG_ISDN
fi
-dep_tristate 'Eicon.Diehl active card support' CONFIG_ISDN_DRV_EICON $CONFIG_ISDN
+dep_tristate ' Eicon.Diehl active card support' CONFIG_ISDN_DRV_EICON $CONFIG_ISDN
if [ "$CONFIG_ISDN_DRV_EICON" != "n" ]; then
- bool 'Eicon S,SX,SCOM,Quadro,S2M support' CONFIG_ISDN_DRV_EICON_ISA
+ bool ' Eicon S, SX, SCOM, Quadro, S2M support' CONFIG_ISDN_DRV_EICON_ISA
fi
-dep_tristate 'AVM CAPI2.0 support' CONFIG_ISDN_DRV_AVMB1 $CONFIG_ISDN
+dep_tristate ' AVM CAPI2.0 support' CONFIG_ISDN_DRV_AVMB1 $CONFIG_ISDN
if [ "$CONFIG_ISDN_DRV_AVMB1" != "n" ]; then
- bool 'AVM B1 ISA support' CONFIG_ISDN_DRV_AVMB1_B1ISA
- bool 'AVM B1 PCI support' CONFIG_ISDN_DRV_AVMB1_B1PCI
- bool 'AVM T1/T1B ISA support' CONFIG_ISDN_DRV_AVMB1_T1ISA
- bool 'AVM B1/M1/M2 PCMCIA support' CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
- bool 'Verbose reason code reporting (kernel size +=7K)' CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON
+ bool ' AVM B1 ISA support' CONFIG_ISDN_DRV_AVMB1_B1ISA
+ bool ' AVM B1 PCI support' CONFIG_ISDN_DRV_AVMB1_B1PCI
+ bool ' AVM T1/T1B ISA support' CONFIG_ISDN_DRV_AVMB1_T1ISA
+ bool ' AVM B1/M1/M2 PCMCIA support' CONFIG_ISDN_DRV_AVMB1_B1PCMCIA
+ bool ' Verbose reason code reporting (kernel size +=7K)' CONFIG_ISDN_DRV_AVMB1_VERBOSE_REASON
fi
-
diff --git a/drivers/isdn/isdn_common.c b/drivers/isdn/isdn_common.c
index cac4be6dc..10414ee94 100644
--- a/drivers/isdn/isdn_common.c
+++ b/drivers/isdn/isdn_common.c
@@ -2319,8 +2319,8 @@ isdn_add_channels(driver *d, int drvidx, int n, int adding)
#ifdef COMPAT_HAS_NEW_WAITQ
d->snd_waitq = d->rcv_waitq + m;
for (j = 0; j < m; j++) {
- init_waitqueue_head(&d->rcv_waitq[m]);
- init_waitqueue_head(&d->snd_waitq[m]);
+ init_waitqueue_head(&d->rcv_waitq[j]);
+ init_waitqueue_head(&d->snd_waitq[j]);
}
#else
memset((char *) d->rcv_waitq, 0, sizeof(struct wait_queue *) * m);
diff --git a/drivers/macintosh/mac_keyb.c b/drivers/macintosh/mac_keyb.c
index 93be8f08f..4eae1efd9 100644
--- a/drivers/macintosh/mac_keyb.c
+++ b/drivers/macintosh/mac_keyb.c
@@ -240,7 +240,7 @@ static void init_trackball(int id);
static void init_turbomouse(int id);
static void init_microspeed(int id);
-#ifdef CONFIG_ADB_MOUSE
+#ifdef CONFIG_ADBMOUSE
/* XXX: Hook for mouse driver */
void (*adb_mouse_interrupt_hook)(unsigned char *, int);
int adb_emulate_buttons = 0;
@@ -336,7 +336,7 @@ input_keycode(int keycode, int repeat)
if (!repeat)
del_timer(&repeat_timer);
-#ifdef CONFIG_ADB_MOUSE
+#ifdef CONFIG_ADBMOUSE
/*
* XXX: Add mouse button 2+3 fake codes here if mouse open.
* Keep track of 'button' states here as we only send
@@ -366,7 +366,7 @@ input_keycode(int keycode, int repeat)
}
return;
}
-#endif /* CONFIG_ADB_MOUSE */
+#endif /* CONFIG_ADBMOUSE */
if (kbd->kbdmode != VC_RAW) {
if (!up_flag && !dont_repeat[keycode]) {
@@ -422,7 +422,7 @@ static void mac_put_queue(int ch)
}
}
-#ifdef CONFIG_ADB_MOUSE
+#ifdef CONFIG_ADBMOUSE
static void
mouse_input(unsigned char *data, int nb, struct pt_regs *regs, int autopoll)
{
@@ -554,7 +554,7 @@ mouse_input(unsigned char *data, int nb, struct pt_regs *regs, int autopoll)
}
}
}
-#endif /* CONFIG_ADB_MOUSE */
+#endif /* CONFIG_ADBMOUSE */
/* XXX Needs to get rid of this, see comments in pmu.c */
extern int backlight_level;
@@ -700,7 +700,7 @@ void __init mackbd_init_hw(void)
memcpy(key_maps[8], macalt_map, sizeof(plain_map));
memcpy(key_maps[12], macctrl_alt_map, sizeof(plain_map));
-#ifdef CONFIG_ADB_MOUSE
+#ifdef CONFIG_ADBMOUSE
/* initialize mouse interrupt hook */
adb_mouse_interrupt_hook = NULL;
#endif
@@ -736,9 +736,9 @@ mackeyb_probe(void)
struct adb_request req;
int i;
-#ifdef CONFIG_ADB_MOUSE
+#ifdef CONFIG_ADBMOUSE
adb_register(ADB_MOUSE, 0, &mouse_ids, mouse_input);
-#endif /* CONFIG_ADB_MOUSE */
+#endif /* CONFIG_ADBMOUSE */
adb_register(ADB_KEYBOARD, 0, &keyboard_ids, keyboard_input);
adb_register(0x07, 0x1F, &buttons_ids, buttons_input);
diff --git a/drivers/macintosh/mediabay.c b/drivers/macintosh/mediabay.c
index 83fd1d140..2e3d96444 100644
--- a/drivers/macintosh/mediabay.c
+++ b/drivers/macintosh/mediabay.c
@@ -418,8 +418,10 @@ mb_notify_sleep(struct pmu_sleep_notifier *self, int when)
middle of a wait loop */
if (bay->reset_timer)
bay->reset_timer = MB_RESET_COUNT;
+#ifdef CONFIG_BLK_DEV_IDE
if (bay->cd_timer)
bay->cd_timer = MB_IDE_WAIT;
+#endif
}
}
}
diff --git a/drivers/macintosh/via-pmu.c b/drivers/macintosh/via-pmu.c
index cff3f5cb7..b50a115a4 100644
--- a/drivers/macintosh/via-pmu.c
+++ b/drivers/macintosh/via-pmu.c
@@ -150,7 +150,7 @@ extern int grackle_pcibios_write_config_word(unsigned char bus,
* - the number of response bytes which the PMU will return, or
* -1 if it will send a length byte.
*/
-static s8 pmu_data_len[256][2] __openfirmwaredata = {
+static const s8 pmu_data_len[256][2] __openfirmwaredata = {
/* 0 1 2 3 4 5 6 7 */
/*00*/ {-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},{-1, 0},
/*08*/ {-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},{-1,-1},
@@ -263,6 +263,20 @@ pmu_init(void)
{
if (vias == NULL)
return -ENXIO;
+ return 0;
+}
+
+/*
+ * We can't wait until pmu_init gets called, that happens too late.
+ * It happens after IDE and SCSI initialization, which can take a few
+ * seconds, and by that time the PMU could have given up on us and
+ * turned us off.
+ * This is called from arch/ppc/kernel/pmac_setup.c:pmac_init2().
+ */
+void via_pmu_start(void)
+{
+ if (vias == NULL)
+ return;
bright_req_1.complete = 1;
bright_req_2.complete = 1;
@@ -272,7 +286,7 @@ pmu_init(void)
(void *)0)) {
printk(KERN_ERR "VIA-PMU: can't get irq %d\n",
vias->intrs[0].line);
- return -ENXIO;
+ return;
}
/* Enable interrupts */
@@ -282,8 +296,6 @@ pmu_init(void)
/* Enable backlight */
pmu_enable_backlight(1);
-
- return 0;
}
static int __openfirmware
diff --git a/drivers/misc/acpi.c b/drivers/misc/acpi.c
index 99911093b..e6878dde6 100644
--- a/drivers/misc/acpi.c
+++ b/drivers/misc/acpi.c
@@ -28,6 +28,7 @@
#include <linux/miscdevice.h>
#include <linux/sched.h>
#include <linux/wait.h>
+#include <linux/spinlock.h>
#include <asm/uaccess.h>
#include <asm/io.h>
#include <linux/acpi.h>
@@ -52,21 +53,40 @@ static struct acpi_facp *acpi_facp = NULL;
static unsigned long acpi_facp_addr = 0;
static unsigned long acpi_dsdt_addr = 0;
+static spinlock_t acpi_event_lock = SPIN_LOCK_UNLOCKED;
static volatile u32 acpi_pm1_status = 0;
static volatile u32 acpi_gpe_status = 0;
static volatile u32 acpi_gpe_level = 0;
static DECLARE_WAIT_QUEUE_HEAD(acpi_wait_event);
+/* Make it impossible to enter L2/L3 until after we've initialized */
+static unsigned long acpi_p_lvl2_lat = ~0UL;
+static unsigned long acpi_p_lvl3_lat = ~0UL;
+
+/* Initialize to guaranteed harmless port read */
+static u16 acpi_p_lvl2 = 0x80;
+static u16 acpi_p_lvl3 = 0x80;
+
+
+/*
+ * Get the value of the PM1 control register (SCI_EN, ...)
+ */
+static u32 acpi_read_pm1_control(struct acpi_facp *facp)
+{
+ u32 value = inw(facp->pm1a_cnt);
+ if (facp->pm1b_cnt)
+ value |= inw(facp->pm1b_cnt);
+ return value;
+}
+
/*
* Get the value of the fixed event status register
*/
static u32 acpi_read_pm1_status(struct acpi_facp *facp)
{
u32 value = inw(facp->pm1a_evt);
-
- if (facp->pm1b_evt) {
+ if (facp->pm1b_evt)
value |= inw(facp->pm1b_evt);
- }
return value;
}
@@ -76,9 +96,8 @@ static u32 acpi_read_pm1_status(struct acpi_facp *facp)
static void acpi_write_pm1_status(struct acpi_facp *facp, u32 value)
{
outw(value, facp->pm1a_evt);
- if (facp->pm1b_evt) {
+ if (facp->pm1b_evt)
outw(value, facp->pm1b_evt);
- }
}
/*
@@ -88,9 +107,8 @@ static u32 acpi_read_pm1_enable(struct acpi_facp *facp)
{
int offset = facp->pm1_evt_len >> 1;
u32 value = inw(facp->pm1a_evt + offset);
- if (facp->pm1b_evt) {
+ if (facp->pm1b_evt)
value |= inw(facp->pm1b_evt + offset);
- }
return value;
}
@@ -100,11 +118,9 @@ static u32 acpi_read_pm1_enable(struct acpi_facp *facp)
static void acpi_write_pm1_enable(struct acpi_facp *facp, u32 value)
{
int offset = facp->pm1_evt_len >> 1;
-
outw(value, facp->pm1a_evt + offset);
- if (facp->pm1b_evt) {
+ if (facp->pm1b_evt)
outw(value, facp->pm1b_evt + offset);
- }
}
/*
@@ -117,14 +133,12 @@ static u32 acpi_read_gpe_status(struct acpi_facp *facp)
if (facp->gpe1) {
size = facp->gpe1_len >> 1;
- for (i = size - 1; i >= 0; i--) {
+ for (i = size - 1; i >= 0; i--)
value = (value << 8) | inb(facp->gpe1 + i);
- }
}
size = facp->gpe0_len >> 1;
- for (i = size - 1; i >= 0; i--) {
+ for (i = size - 1; i >= 0; i--)
value = (value << 8) | inb(facp->gpe0 + i);
- }
return value;
}
@@ -165,9 +179,8 @@ static u32 acpi_read_gpe_enable(struct acpi_facp *facp)
}
}
size = facp->gpe0_len >> 1;
- for (i = size - 1; i >= 0; i--) {
+ for (i = size - 1; i >= 0; i--)
value = (value << 8) | inb(facp->gpe0 + offset + i);
- }
return value;
}
@@ -201,14 +214,15 @@ static struct acpi_table *__init acpi_map_table(u32 addr)
if (addr) {
// map table header to determine size
table = (struct acpi_table *)
- ioremap_nocache((unsigned long) addr,
- sizeof(struct acpi_table));
+ ioremap_nocache((unsigned long) addr,
+ sizeof(struct acpi_table));
if (table) {
unsigned long table_size = table->length;
iounmap(table);
// remap entire table
table = (struct acpi_table *)
- ioremap_nocache((unsigned long) addr, table_size);
+ ioremap_nocache((unsigned long) addr,
+ table_size);
}
}
return table;
@@ -219,9 +233,8 @@ static struct acpi_table *__init acpi_map_table(u32 addr)
*/
static void acpi_unmap_table(struct acpi_table *table)
{
- if (table) {
+ if (table)
iounmap(table);
- }
}
/*
@@ -313,6 +326,8 @@ static void acpi_unmap_tables(void)
static void acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
{
u32 pm1_status, gpe_status, gpe_level, gpe_edge;
+ unsigned long flags;
+
// detect and clear fixed events
pm1_status = (acpi_read_pm1_status(acpi_facp)
& acpi_read_pm1_enable(acpi_facp));
@@ -323,7 +338,7 @@ static void acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
& acpi_read_gpe_enable(acpi_facp));
gpe_level = gpe_status & acpi_gpe_level;
if (gpe_level) {
- // disable level-triggered events
+ // disable level-triggered events (re-enabled after handling)
acpi_write_gpe_enable(
acpi_facp,
acpi_read_gpe_enable(acpi_facp) & ~gpe_level);
@@ -334,10 +349,12 @@ static void acpi_irq(int irq, void *dev_id, struct pt_regs *regs)
while (acpi_read_gpe_status(acpi_facp) & gpe_edge)
acpi_write_gpe_status(acpi_facp, gpe_edge);
}
-
- // notify process reading /dev/acpi
+
+ // notify process waiting on /dev/acpi
+ spin_lock_irqsave(&acpi_event_lock, flags);
acpi_pm1_status |= pm1_status;
acpi_gpe_status |= gpe_status;
+ spin_unlock_irqrestore(&acpi_event_lock, flags);
wake_up_interruptible(&acpi_wait_event);
}
@@ -360,6 +377,39 @@ static int acpi_release(struct inode *inode, struct file *file)
}
/*
+ * Is ACPI enabled or not?
+ */
+static inline int acpi_is_enabled(struct acpi_facp *facp)
+{
+ return ((acpi_read_pm1_control(facp) & ACPI_SCI_EN) ? 1:0);
+}
+
+/*
+ * Enable SCI
+ */
+static int acpi_enable(struct acpi_facp *facp)
+{
+ outb(facp->acpi_enable, facp->smi_cmd);
+ return (acpi_is_enabled(facp) ? 0:-1);
+}
+
+/*
+ * Disable SCI
+ */
+static int acpi_disable(struct acpi_facp *facp)
+{
+ // disable and clear any pending events
+ acpi_write_gpe_enable(facp, 0);
+ while (acpi_read_gpe_status(facp))
+ acpi_write_gpe_status(facp, acpi_read_gpe_status(facp));
+ acpi_write_pm1_enable(facp, 0);
+ acpi_write_pm1_status(facp, acpi_read_pm1_status(facp));
+
+ outb(facp->acpi_disable, facp->smi_cmd);
+ return (acpi_is_enabled(facp) ? -1:0);
+}
+
+/*
* Handle command to /dev/acpi
*/
static int acpi_ioctl(struct inode *inode,
@@ -369,6 +419,9 @@ static int acpi_ioctl(struct inode *inode,
{
int status = -EINVAL;
+ if (!capable(CAP_SYS_ADMIN))
+ return -EPERM;
+
switch (cmd) {
case ACPI_FIND_TABLES:
status = verify_area(VERIFY_WRITE,
@@ -391,7 +444,7 @@ static int acpi_ioctl(struct inode *inode,
= (struct acpi_enable_event *) arg;
u32 pm1_enable, gpe_enable, gpe_level;
u32 pm1_enabling, gpe_enabling;
-
+
get_user(pm1_enable, &rqst->pm1_enable);
get_user(gpe_enable, &rqst->gpe_enable);
get_user(gpe_level, &rqst->gpe_level);
@@ -405,12 +458,30 @@ static int acpi_ioctl(struct inode *inode,
~acpi_read_gpe_enable(acpi_facp));
while (acpi_read_gpe_status(acpi_facp) & gpe_enabling)
acpi_write_gpe_status(acpi_facp, gpe_enabling);
-
- acpi_write_pm1_enable(acpi_facp, pm1_enable);
- acpi_write_gpe_enable(acpi_facp, gpe_enable);
- acpi_gpe_level = gpe_level;
-
+
status = 0;
+
+ if (pm1_enable || gpe_enable) {
+ // enable ACPI unless it is already
+ if (!acpi_is_enabled(acpi_facp)
+ && acpi_enable(acpi_facp)) {
+ status = -EBUSY;
+ }
+ }
+ else {
+ // disable ACPI unless it is already
+ if (acpi_is_enabled(acpi_facp)
+ && acpi_disable(acpi_facp)) {
+ status = -EBUSY;
+ }
+ }
+
+ if (!status)
+ {
+ acpi_write_pm1_enable(acpi_facp, pm1_enable);
+ acpi_write_gpe_enable(acpi_facp, gpe_enable);
+ acpi_gpe_level = gpe_level;
+ }
}
break;
case ACPI_WAIT_EVENT:
@@ -427,13 +498,13 @@ static int acpi_ioctl(struct inode *inode,
unsigned long flags;
// we need an atomic exchange here
- save_flags(flags);
- cli();
+ spin_lock_irqsave(&acpi_event_lock, flags);
pm1_status = acpi_pm1_status;
acpi_pm1_status = 0;
gpe_status = acpi_gpe_status;
acpi_gpe_status = 0;
- restore_flags(flags);
+ spin_unlock_irqrestore(&acpi_event_lock,
+ flags);
if (pm1_status || gpe_status)
break;
@@ -453,6 +524,41 @@ static int acpi_ioctl(struct inode *inode,
return status;
}
+static void acpi_idle_handler(void)
+{
+ unsigned long time;
+ static int sleep_level = 1;
+
+ time = inl(acpi_facp->pm_tmr);
+ switch (sleep_level) {
+ case 1:
+ __asm__ __volatile__("sti ; hlt": : :"memory");
+ break;
+ case 2:
+ inb(acpi_p_lvl2);
+ break;
+ case 3:
+ /* Disable PCI arbitration while sleeping,
+ to avoid DMA corruption? */
+ if (acpi_facp->pm2_cnt) {
+ unsigned int port = acpi_facp->pm2_cnt;
+ outb(inb(port) | ACPI_ARB_DIS, port);
+ inb(acpi_p_lvl3);
+ outb(inb(port) & ~ACPI_ARB_DIS, port);
+ break;
+ }
+ inb(acpi_p_lvl3);
+ }
+ time = (inl(acpi_facp->pm_tmr) - time) & ACPI_TMR_MASK;
+
+ if (time > acpi_p_lvl3_lat)
+ sleep_level = 3;
+ else if (time > acpi_p_lvl2_lat)
+ sleep_level = 2;
+ else
+ sleep_level = 1;
+}
+
static struct file_operations acpi_fops =
{
NULL, /* llseek */
@@ -481,46 +587,48 @@ static struct miscdevice acpi_device =
NULL
};
-/* Make it impossible to enter L2/L3 until after we've initialized */
-static unsigned long acpi_p_lvl2_lat = ~0UL;
-static unsigned long acpi_p_lvl3_lat = ~0UL;
+/*
+ * Claim ACPI I/O ports
+ */
+static int acpi_claim_ioports(struct acpi_facp *facp)
+{
+ // we don't get a guarantee of contiguity for any of the ACPI registers
+ request_region(facp->pm1a_evt, facp->pm1_evt_len, "acpi");
+ if (facp->pm1b_evt)
+ request_region(facp->pm1b_evt, facp->pm1_evt_len, "acpi");
+ request_region(facp->pm1a_cnt, facp->pm1_cnt_len, "acpi");
+ if (facp->pm1b_cnt)
+ request_region(facp->pm1b_cnt, facp->pm1_cnt_len, "acpi");
+ if (facp->pm2_cnt)
+ request_region(facp->pm2_cnt, facp->pm2_cnt_len, "acpi");
+ request_region(facp->pm_tmr, facp->pm_tm_len, "acpi");
+ request_region(facp->gpe0, facp->gpe0_len, "acpi");
+ if (facp->gpe1)
+ request_region(facp->gpe1, facp->gpe1_len, "acpi");
-/* Initialize to guaranteed harmless port read */
-static u16 acpi_p_lvl2 = 0x80;
-static u16 acpi_p_lvl3 = 0x80;
+ return 0;
+}
-static void acpi_idle_handler(void)
+/*
+ * Free ACPI I/O ports
+ */
+static int acpi_release_ioports(struct acpi_facp *facp)
{
- unsigned long time;
- static int sleep_level = 1;
+ // we don't get a guarantee of contiguity for any of the ACPI registers
+ release_region(facp->pm1a_evt, facp->pm1_evt_len);
+ if (facp->pm1b_evt)
+ release_region(facp->pm1b_evt, facp->pm1_evt_len);
+ release_region(facp->pm1a_cnt, facp->pm1_cnt_len);
+ if (facp->pm1b_cnt)
+ release_region(facp->pm1b_cnt, facp->pm1_cnt_len);
+ if (facp->pm2_cnt)
+ release_region(facp->pm2_cnt, facp->pm2_cnt_len);
+ release_region(facp->pm_tmr, facp->pm_tm_len);
+ release_region(facp->gpe0, facp->gpe0_len);
+ if (facp->gpe1)
+ release_region(facp->gpe1, facp->gpe1_len);
- time = inl(acpi_facp->pm_tmr);
- switch (sleep_level) {
- case 1:
- __asm__ __volatile__("sti ; hlt": : :"memory");
- break;
- case 2:
- inb(acpi_p_lvl2);
- break;
- case 3:
- /* Disable PCI arbitration while sleeping, to avoid DMA corruption? */
- if (acpi_facp->pm2_cnt) {
- unsigned int port = acpi_facp->pm2_cnt;
- outb(inb(port) | ACPI_ARB_DIS, port);
- inb(acpi_p_lvl3);
- outb(inb(port) & ~ACPI_ARB_DIS, port);
- break;
- }
- inb(acpi_p_lvl3);
- }
- time = (inl(acpi_facp->pm_tmr) - time) & ACPI_TMR_MASK;
-
- if (time > acpi_p_lvl3_lat)
- sleep_level = 3;
- else if (time > acpi_p_lvl2_lat)
- sleep_level = 2;
- else
- sleep_level = 1;
+ return 0;
}
/*
@@ -528,9 +636,9 @@ static void acpi_idle_handler(void)
*/
static int __init acpi_init(void)
{
- if (acpi_map_tables()) {
+ if (acpi_map_tables())
return -ENODEV;
- }
+
if (request_irq(acpi_facp->sci_int,
acpi_irq,
SA_INTERRUPT | SA_SHIRQ,
@@ -541,9 +649,11 @@ static int __init acpi_init(void)
acpi_unmap_tables();
return -ENODEV;
}
- if (misc_register(&acpi_device)) {
+
+ acpi_claim_ioports(acpi_facp);
+
+ if (misc_register(&acpi_device))
printk(KERN_ERR "ACPI: misc. register failed\n");
- }
/*
* Set up the ACPI idle function. Note that we can't really
@@ -564,20 +674,9 @@ static int __init acpi_init(void)
static void __exit acpi_exit(void)
{
misc_deregister(&acpi_device);
-
- // disable and clear any pending events
- acpi_write_gpe_enable(acpi_facp, 0);
- while (acpi_read_gpe_status(acpi_facp)) {
- acpi_write_gpe_status(acpi_facp,
- acpi_read_gpe_status(acpi_facp));
- }
- acpi_write_pm1_enable(acpi_facp, 0);
- acpi_write_pm1_status(acpi_facp, acpi_read_pm1_status(acpi_facp));
-
- // disable SCI and free interrupt
- outb(acpi_facp->acpi_disable, acpi_facp->smi_cmd);
+ acpi_disable(acpi_facp);
+ acpi_release_ioports(acpi_facp);
free_irq(acpi_facp->sci_int, NULL);
-
acpi_unmap_tables();
}
diff --git a/drivers/net/3c509.c b/drivers/net/3c509.c
index a6bbd842f..fbd4503bd 100644
--- a/drivers/net/3c509.c
+++ b/drivers/net/3c509.c
@@ -902,6 +902,7 @@ static int xcvr[] = {-1, -1, -1, -1, -1, -1, -1, -1};
MODULE_PARM(debug,"i");
MODULE_PARM(irq,"1-8i");
MODULE_PARM(xcvr,"1-8i");
+MODULE_PARM(max_interrupt_work, "i");
int
init_module(void)
diff --git a/drivers/net/Config.in b/drivers/net/Config.in
index 5dfea0a88..d54f8fd30 100644
--- a/drivers/net/Config.in
+++ b/drivers/net/Config.in
@@ -133,9 +133,9 @@ if [ "$CONFIG_NET_ETHERNET" = "y" ]; then
bool ' EISA, VLB, PCI and on board controllers' CONFIG_NET_EISA
if [ "$CONFIG_NET_EISA" = "y" ]; then
tristate ' AMD PCnet32 (VLB and PCI) support' CONFIG_PCNET32
-# if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
-# tristate ' Adaptec Starfire support (EXPERIMENTAL)' CONFIG_ADAPTEC_STARFIRE
-# fi
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ tristate ' Adaptec Starfire support (EXPERIMENTAL)' CONFIG_ADAPTEC_STARFIRE
+ fi
tristate ' Alteon AceNIC/3Com 3C985/NetGear GA620 Gigabit support' CONFIG_ACENIC
if [ "$CONFIG_ACENIC" != "n" ]; then
bool ' Omit support for old Tigon I based AceNICs' CONFIG_ACENIC_OMIT_TIGON_I
diff --git a/drivers/net/Makefile b/drivers/net/Makefile
index 4c40cdcac..336d081b3 100644
--- a/drivers/net/Makefile
+++ b/drivers/net/Makefile
@@ -1039,6 +1039,14 @@ else
endif
endif
+ifeq ($(CONFIG_ADAPTEC_STARFIRE),y)
+L_OBJS += starfire.o
+else
+ ifeq ($(CONFIG_ADAPTEC_STARFIRE),m)
+ M_OBJS += starfire.o
+ endif
+endif
+
#
# HIPPI adapters
#
diff --git a/drivers/net/ne.c b/drivers/net/ne.c
index ae8a4fbdc..58573948c 100644
--- a/drivers/net/ne.c
+++ b/drivers/net/ne.c
@@ -28,7 +28,8 @@
rjohnson@analogic.com : Changed init order so an interrupt will only
occur after memory is allocated for dev->priv. Deallocated memory
last in cleanup_modue()
-
+ Richard Guenther : Added support for ISAPnP cards
+
*/
/* Routines for the NatSemi-based designs (NE[12]000). */
@@ -43,6 +44,7 @@ static const char *version =
#include <linux/sched.h>
#include <linux/errno.h>
#include <linux/pci.h>
+#include <linux/isapnp.h>
#include <linux/init.h>
#include <linux/delay.h>
#include <asm/system.h>
@@ -90,6 +92,13 @@ pci_clone_list[] __initdata = {
static int probe_pci = 1;
#endif
+static struct { unsigned short vendor, function; char *name; }
+isapnp_clone_list[] __initdata = {
+ {ISAPNP_VENDOR('E','D','I'), ISAPNP_FUNCTION(0x0216), "NN NE2000" },
+ {ISAPNP_VENDOR('P','N','P'), ISAPNP_FUNCTION(0x80d6), "Generic PNP" },
+ {0,}
+};
+
#ifdef SUPPORT_NE_BAD_CLONES
/* A list of bad clones that we none-the-less recognize. */
static struct { const char *name8, *name16; unsigned char SAprefix[4];}
@@ -128,6 +137,7 @@ static unsigned int pci_irq_line = 0;
int ne_probe(struct net_device *dev);
static int ne_probe1(struct net_device *dev, int ioaddr);
+static int ne_probe_isapnp(struct net_device *dev);
#ifdef CONFIG_PCI
static int ne_probe_pci(struct net_device *dev);
#endif
@@ -193,6 +203,10 @@ int __init ne_probe(struct net_device *dev)
return 0;
#endif
+ /* Then look for any installed ISAPnP clones */
+ if (isapnp_present() && (ne_probe_isapnp(dev) == 0))
+ return 0;
+
#ifndef MODULE
/* Last resort. The semi-risky ISA auto-probe. */
for (base_addr = 0; netcard_portlist[base_addr] != 0; base_addr++) {
@@ -243,6 +257,46 @@ static int __init ne_probe_pci(struct net_device *dev)
}
#endif /* CONFIG_PCI */
+static int __init ne_probe_isapnp(struct net_device *dev)
+{
+ int i;
+
+ for (i = 0; isapnp_clone_list[i].vendor != 0; i++) {
+ struct pci_dev *idev = NULL;
+
+ while ((idev = isapnp_find_dev(NULL,
+ isapnp_clone_list[i].vendor,
+ isapnp_clone_list[i].function,
+ idev))) {
+ /* Avoid already found cards from previous calls */
+ if (idev->prepare(idev))
+ continue;
+ if (idev->activate(idev))
+ continue;
+ pci_irq_line = idev->irq_resource[0].start;
+ /* if no irq, search for next */
+ if (!pci_irq_line)
+ continue;
+ /* found it */
+ if (ne_probe1(dev, idev->resource[0].start) != 0) { /* Shouldn't happen. */
+ printk(KERN_ERR "ne.c: Probe of ISAPnP card at %#lx failed.\n",
+ idev->resource[0].start);
+ return -ENXIO;
+ }
+ ei_status.priv = (unsigned long)idev;
+ break;
+ }
+ if (!idev)
+ continue;
+ printk(KERN_INFO "ne.c: ISAPnP reports %s at i/o %#lx, irq %d.\n",
+ isapnp_clone_list[i].name,
+ dev->base_addr, dev->irq);
+ return 0;
+ }
+
+ return -ENODEV;
+}
+
static int __init ne_probe1(struct net_device *dev, int ioaddr)
{
int i;
@@ -491,6 +545,7 @@ static int __init ne_probe1(struct net_device *dev, int ioaddr)
ei_status.block_input = &ne_block_input;
ei_status.block_output = &ne_block_output;
ei_status.get_8390_hdr = &ne_get_8390_hdr;
+ ei_status.priv = 0;
dev->open = &ne_open;
dev->stop = &ne_close;
NS8390_init(dev, 0);
@@ -819,6 +874,9 @@ void cleanup_module(void)
struct net_device *dev = &dev_ne[this_dev];
if (dev->priv != NULL) {
void *priv = dev->priv;
+ struct pci_dev *idev = (struct pci_dev *)ei_status.priv;
+ if (idev)
+ idev->deactivate(idev);
free_irq(dev->irq, dev);
release_region(dev->base_addr, NE_IO_EXTENT);
unregister_netdev(dev);
diff --git a/drivers/net/ppp_generic.c b/drivers/net/ppp_generic.c
index 32851a5d8..19b0c5819 100644
--- a/drivers/net/ppp_generic.c
+++ b/drivers/net/ppp_generic.c
@@ -19,10 +19,10 @@
* PPP driver, written by Michael Callahan and Al Longyear, and
* subsequently hacked by Paul Mackerras.
*
- * ==FILEVERSION 990806==
+ * ==FILEVERSION 990915==
*/
-/* $Id: ppp_generic.c,v 1.3 1999/09/02 05:30:12 paulus Exp $ */
+/* $Id: ppp_generic.c,v 1.5 1999/09/15 11:21:48 paulus Exp $ */
#include <linux/config.h>
#include <linux/module.h>
@@ -131,7 +131,7 @@ struct channel {
#define PPP_MAX_RQLEN 32
/* Prototypes. */
-static void ppp_xmit_unlock(struct ppp *ppp);
+static void ppp_xmit_unlock(struct ppp *ppp, int do_mark_bh);
static void ppp_send_frame(struct ppp *ppp, struct sk_buff *skb);
static void ppp_push(struct ppp *ppp);
static void ppp_recv_unlock(struct ppp *ppp);
@@ -199,6 +199,13 @@ static const int npindex_to_ethertype[NUM_NP] = {
/*
* Routines for locking and unlocking the transmit and receive paths
* of each unit.
+ *
+ * On the transmit side, we have threads of control coming into the
+ * driver from (at least) three places: the core net code, write calls
+ * on /dev/ppp from pppd, and wakeup calls from channels. There is
+ * possible concurrency even on UP systems (between mainline and
+ * BH processing). The XMIT_BUSY bit in ppp->busy serializes the
+ * transmit-side processing for each ppp unit.
*/
static inline void
lock_path(struct ppp *ppp, int bit)
@@ -329,16 +336,20 @@ static ssize_t ppp_write(struct file *file, const char *buf,
struct ppp *ppp = (struct ppp *) file->private_data;
struct sk_buff *skb;
ssize_t ret;
+ int extra;
ret = -ENXIO;
if (ppp == 0)
goto out;
ret = -ENOMEM;
- skb = alloc_skb(count + 2, GFP_KERNEL);
+ extra = PPP_HDRLEN - 2;
+ if (ppp->dev && ppp->dev->hard_header_len > PPP_HDRLEN)
+ extra = ppp->dev->hard_header_len - 2;
+ skb = alloc_skb(count + extra, GFP_KERNEL);
if (skb == 0)
goto out;
- skb_reserve(skb, 2);
+ skb_reserve(skb, extra);
ret = -EFAULT;
if (copy_from_user(skb_put(skb, count), buf, count)) {
kfree_skb(skb);
@@ -347,7 +358,7 @@ static ssize_t ppp_write(struct file *file, const char *buf,
skb_queue_tail(&ppp->xq, skb);
if (trylock_xmit_path(ppp))
- ppp_xmit_unlock(ppp);
+ ppp_xmit_unlock(ppp, 1);
ret = count;
@@ -490,7 +501,7 @@ static int ppp_ioctl(struct inode *inode, struct file *file,
slhc_free(ppp->vj);
ppp->vj = slhc_init(val2+1, val+1);
ppp_recv_unlock(ppp);
- ppp_xmit_unlock(ppp);
+ ppp_xmit_unlock(ppp, 1);
err = -ENOMEM;
if (ppp->vj == 0) {
printk(KERN_ERR "PPP: no memory (VJ compressor)\n");
@@ -580,10 +591,6 @@ ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
int npi, proto;
unsigned char *pp;
- if (skb == 0)
- return 0;
- /* can skb->data ever be 0? */
-
npi = ethertype_to_npindex(ntohs(skb->protocol));
if (npi < 0)
goto outf;
@@ -601,30 +608,15 @@ ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
goto outf;
}
- /* The transmit side of the ppp interface is serialized by
- the XMIT_BUSY bit in ppp->busy. */
- if (!trylock_xmit_path(ppp)) {
- dev->tbusy = 1;
- return 1;
- }
- if (ppp->xmit_pending)
- ppp_push(ppp);
- if (ppp->xmit_pending) {
- dev->tbusy = 1;
- ppp_xmit_unlock(ppp);
- return 1;
- }
- dev->tbusy = 0;
-
/* Put the 2-byte PPP protocol number on the front,
making sure there is room for the address and control fields. */
if (skb_headroom(skb) < PPP_HDRLEN) {
struct sk_buff *ns;
- ns = alloc_skb(skb->len + PPP_HDRLEN, GFP_ATOMIC);
+ ns = alloc_skb(skb->len + dev->hard_header_len, GFP_ATOMIC);
if (ns == 0)
- goto outnbusy;
- skb_reserve(ns, PPP_HDRLEN);
+ goto outf;
+ skb_reserve(ns, dev->hard_header_len);
memcpy(skb_put(ns, skb->len), skb->data, skb->len);
kfree_skb(skb);
skb = ns;
@@ -634,13 +626,16 @@ ppp_start_xmit(struct sk_buff *skb, struct net_device *dev)
pp[0] = proto >> 8;
pp[1] = proto;
- ppp_send_frame(ppp, skb);
- ppp_xmit_unlock(ppp);
+ /*
+ * ppp->xq should only ever have more than 1 data packet on it
+ * if the core net code calls us when dev->tbusy == 1.
+ */
+ dev->tbusy = 1;
+ skb_queue_tail(&ppp->xq, skb);
+ if (trylock_xmit_path(ppp))
+ ppp_xmit_unlock(ppp, 0);
return 0;
- outnbusy:
- ppp_xmit_unlock(ppp);
-
outf:
kfree_skb(skb);
return 0;
@@ -723,20 +718,34 @@ ppp_net_init(struct net_device *dev)
* making sure that any work queued up gets done.
*/
static void
-ppp_xmit_unlock(struct ppp *ppp)
+ppp_xmit_unlock(struct ppp *ppp, int do_mark_bh)
{
struct sk_buff *skb;
for (;;) {
+ /* Do whatever work is waiting to be done. */
if (test_and_clear_bit(XMIT_WAKEUP, &ppp->busy))
ppp_push(ppp);
+ /* If there's no work left to do, tell the core net
+ code that we can accept some more. */
while (ppp->xmit_pending == 0
&& (skb = skb_dequeue(&ppp->xq)) != 0)
ppp_send_frame(ppp, skb);
+ if (ppp->xmit_pending == 0 && skb_peek(&ppp->xq) == 0
+ && ppp->dev->tbusy) {
+ ppp->dev->tbusy = 0;
+ if (do_mark_bh)
+ mark_bh(NET_BH);
+ }
+ /* Now unlock the transmit path, let others in. */
unlock_xmit_path(ppp);
+ /* Check whether any work was queued up
+ between our last check and the unlock. */
if (!(test_bit(XMIT_WAKEUP, &ppp->busy)
|| (ppp->xmit_pending == 0 && skb_peek(&ppp->xq))))
break;
+ /* If so, lock again and do the work. If we can't get
+ the lock, someone else has it and they'll do the work. */
if (!trylock_xmit_path(ppp))
break;
}
@@ -763,12 +772,13 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
if (ppp->vj == 0 || (ppp->flags & SC_COMP_TCP) == 0)
break;
/* try to do VJ TCP header compression */
- new_skb = alloc_skb(skb->len + 2, GFP_ATOMIC);
+ new_skb = alloc_skb(skb->len + ppp->dev->hard_header_len - 2,
+ GFP_ATOMIC);
if (new_skb == 0) {
printk(KERN_ERR "PPP: no memory (VJ comp pkt)\n");
goto drop;
}
- skb_reserve(new_skb, 2);
+ skb_reserve(new_skb, ppp->dev->hard_header_len - 2);
cp = skb->data + 2;
len = slhc_compress(ppp->vj, cp, skb->len - 2,
new_skb->data + 2, &cp,
@@ -801,11 +811,15 @@ ppp_send_frame(struct ppp *ppp, struct sk_buff *skb)
/* try to do packet compression */
if ((ppp->xstate & SC_COMP_RUN) && ppp->xc_state != 0
&& proto != PPP_LCP && proto != PPP_CCP) {
- new_skb = alloc_skb(ppp->dev->mtu + PPP_HDRLEN, GFP_ATOMIC);
+ new_skb = alloc_skb(ppp->dev->mtu + ppp->dev->hard_header_len,
+ GFP_ATOMIC);
if (new_skb == 0) {
printk(KERN_ERR "PPP: no memory (comp pkt)\n");
goto drop;
}
+ if (ppp->dev->hard_header_len > PPP_HDRLEN)
+ skb_reserve(new_skb,
+ ppp->dev->hard_header_len - PPP_HDRLEN);
/* compressor still expects A/C bytes in hdr */
len = ppp->xcomp->compress(ppp->xc_state, skb->data - 2,
@@ -1120,6 +1134,8 @@ ppp_register_channel(struct ppp_channel *chan, int unit)
list_add(&pch->list, &ppp->channels);
chan->ppp = pch;
++ppp->n_channels;
+ if (ppp->dev && chan->hdrlen + PPP_HDRLEN > ppp->dev->hard_header_len)
+ ppp->dev->hard_header_len = chan->hdrlen + PPP_HDRLEN;
ret = 0;
out:
spin_unlock(&all_ppp_lock);
@@ -1160,11 +1176,7 @@ ppp_output_wakeup(struct ppp_channel *chan)
pch->blocked = 0;
set_bit(XMIT_WAKEUP, &ppp->busy);
if (trylock_xmit_path(ppp))
- ppp_xmit_unlock(ppp);
- if (ppp->xmit_pending == 0) {
- ppp->dev->tbusy = 0;
- mark_bh(NET_BH);
- }
+ ppp_xmit_unlock(ppp, 1);
}
/*
@@ -1215,7 +1227,7 @@ ppp_set_compress(struct ppp *ppp, unsigned long arg)
ppp->xcomp = cp;
ppp->xc_state = cp->comp_alloc(ccp_option, data.length);
- ppp_xmit_unlock(ppp);
+ ppp_xmit_unlock(ppp, 1);
if (ppp->xc_state == 0)
goto out;
@@ -1321,7 +1333,7 @@ ppp_ccp_closed(struct ppp *ppp)
ppp->xcomp->comp_free(ppp->xc_state);
ppp->xc_state = 0;
}
- ppp_xmit_unlock(ppp);
+ ppp_xmit_unlock(ppp, 1);
lock_recv_path(ppp);
ppp->xstate &= ~SC_DECOMP_RUN;
diff --git a/drivers/net/tokenring/Config.in b/drivers/net/tokenring/Config.in
index 8b3065c8a..2a4e4907d 100644
--- a/drivers/net/tokenring/Config.in
+++ b/drivers/net/tokenring/Config.in
@@ -9,7 +9,7 @@ bool 'Token Ring driver support' CONFIG_TR
if [ "$CONFIG_TR" = "y" ]; then
tristate ' IBM Tropic chipset based adapter support' CONFIG_IBMTR
tristate ' IBM Olympic chipset PCI adapter support' CONFIG_IBMOL
- tristate ' SysKonnect adapter support' CONFIG_SKTR
+ tristate ' Generic TMS380 Token Ring ISA/PCI adapter support' CONFIG_TMS380TR
fi
endmenu
diff --git a/drivers/net/tokenring/Makefile b/drivers/net/tokenring/Makefile
index 038c58b86..f76e996ff 100644
--- a/drivers/net/tokenring/Makefile
+++ b/drivers/net/tokenring/Makefile
@@ -39,11 +39,11 @@ else
endif
endif
-ifeq ($(CONFIG_SKTR),y)
- L_OBJS += sktr.o
+ifeq ($(CONFIG_TMS380TR),y)
+ L_OBJS += tms380tr.o
else
- ifeq ($(CONFIG_SKTR),m)
- M_OBJS += sktr.o
+ ifeq ($(CONFIG_TMS380TR),m)
+ M_OBJS += tms380tr.o
endif
endif
diff --git a/drivers/net/tokenring/sktr.c b/drivers/net/tokenring/sktr.c
index 81b2df4bc..e69de29bb 100644
--- a/drivers/net/tokenring/sktr.c
+++ b/drivers/net/tokenring/sktr.c
@@ -1,2707 +0,0 @@
-/*
- * sktr.c: A network driver for the SysKonnect Token Ring ISA/PCI Adapters.
- *
- * Written 1997 by Christoph Goos
- *
- * A fine result of the Linux Systems Network Architecture Project.
- * http://samba.anu.edu.au/linux-sna/
- *
- * This software may be used and distributed according to the terms
- * of the GNU Public License, incorporated herein by reference.
- *
- * This device driver works with the following SysKonnect adapters:
- * - SysKonnect TR4/16(+) ISA (SK-4190)
- * - SysKonnect TR4/16(+) PCI (SK-4590)
- * - SysKonnect TR4/16 PCI (SK-4591)
- *
- * Sources:
- * - The hardware related parts of this driver are take from
- * the SysKonnect Token Ring driver for Windows NT.
- * - I used the IBM Token Ring driver 'ibmtr.c' as a base for this
- * driver, as well as the 'skeleton.c' driver by Donald Becker.
- * - Also various other drivers in the linux source tree were taken
- * as samples for some tasks.
- *
- * Maintainer(s):
- * JS Jay Schulist jschlst@samba.anu.edu.au
- * CG Christoph Goos cgoos@syskonnect.de
- * AF Adam Fritzler mid@auk.cx
- *
- * Modification History:
- * 29-Aug-97 CG Created
- * 04-Apr-98 CG Fixed problems caused by tok_timer_check
- * 10-Apr-98 CG Fixed lockups at cable disconnection
- * 27-May-98 JS Formated to Linux Kernel Format
- * 31-May-98 JS Hacked in PCI support
- * 16-Jun-98 JS Modulized for multiple cards with one driver
- * 21-Sep-99 CG Fixed source routing issues for 2.2 kernels
- * 21-Sep-99 AF Added multicast changes recommended by
- * Jochen Friedrich <jochen@nwe.de> (untested)
- * Added detection of compatible Compaq PCI card
- *
- * To do:
- * 1. Selectable 16 Mbps or 4Mbps
- * 2. Multi/Broadcast packet handling (might be done)
- *
- */
-
-static const char *version = "sktr.c: v1.01 08/29/97 by Christoph Goos\n";
-
-#ifdef MODULE
-#include <linux/module.h>
-#include <linux/version.h>
-#endif
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/types.h>
-#include <linux/fcntl.h>
-#include <linux/interrupt.h>
-#include <linux/ptrace.h>
-#include <linux/ioport.h>
-#include <linux/in.h>
-#include <linux/malloc.h>
-#include <linux/string.h>
-#include <linux/time.h>
-#include <asm/system.h>
-#include <asm/bitops.h>
-#include <asm/io.h>
-#include <asm/dma.h>
-#include <asm/irq.h>
-#include <linux/errno.h>
-#include <linux/init.h>
-#include <linux/pci.h>
-
-#include <linux/netdevice.h>
-#include <linux/etherdevice.h>
-#include <linux/skbuff.h>
-#include <linux/trdevice.h>
-
-#include "sktr.h" /* Our Stuff */
-#include "sktr_firmware.h" /* SysKonnect adapter firmware */
-
-/* A zero-terminated list of I/O addresses to be probed. */
-static unsigned int sktr_portlist[] __initdata = {
- 0x0A20, 0x1A20, 0x0B20, 0x1B20, 0x0980, 0x1980, 0x0900, 0x1900,
- 0
-};
-
-/* A zero-terminated list of IRQs to be probed.
- * Used again after initial probe for sktr_chipset_init, called from sktr_open.
- */
-static unsigned short sktr_irqlist[] = {
- 3, 5, 9, 10, 11, 12, 15,
- 0
-};
-
-/* A zero-terminated list of DMAs to be probed. */
-static int sktr_dmalist[] __initdata = {
- 5, 6, 7,
- 0
-};
-
-/* Card names */
-static char *pci_cardname = "SK NET TR 4/16 PCI\0";
-static char *isa_cardname = "SK NET TR 4/16 ISA\0";
-static char *AdapterName;
-
-/* Use 0 for production, 1 for verification, 2 for debug, and
- * 3 for very verbose debug.
- */
-#ifndef SKTR_DEBUG
-#define SKTR_DEBUG 1
-#endif
-static unsigned int sktr_debug = SKTR_DEBUG;
-
-/* The number of low I/O ports used by the tokencard. */
-#define SKTR_IO_EXTENT 32
-
-/* Index to functions, as function prototypes.
- * Alphabetical by function name.
- */
-
-/* "B" */
-static int sktr_bringup_diags(struct net_device *dev);
-/* "C" */
-static void sktr_cancel_tx_queue(struct net_local* tp);
-static int sktr_chipset_init(struct net_device *dev);
-static void sktr_chk_irq(struct net_device *dev);
-static unsigned char sktr_chk_frame(struct net_device *dev, unsigned char *Addr);
-static void sktr_chk_outstanding_cmds(struct net_device *dev);
-static void sktr_chk_src_addr(unsigned char *frame, unsigned char *hw_addr);
-static unsigned char sktr_chk_ssb(struct net_local *tp, unsigned short IrqType);
-static int sktr_close(struct net_device *dev);
-static void sktr_cmd_status_irq(struct net_device *dev);
-/* "D" */
-static void sktr_disable_interrupts(struct net_device *dev);
-static void sktr_dump(unsigned char *Data, int length);
-/* "E" */
-static void sktr_enable_interrupts(struct net_device *dev);
-static void sktr_exec_cmd(struct net_device *dev, unsigned short Command);
-static void sktr_exec_sifcmd(struct net_device *dev, unsigned int WriteValue);
-/* "F" */
-/* "G" */
-static struct enet_statistics *sktr_get_stats(struct net_device *dev);
-/* "H" */
-static void sktr_hardware_send_packet(struct net_device *dev,
- struct net_local* tp);
-/* "I" */
-static int sktr_init_adapter(struct net_device *dev);
-static int sktr_init_card(struct net_device *dev);
-static void sktr_init_ipb(struct net_local *tp);
-static void sktr_init_net_local(struct net_device *dev);
-static void sktr_init_opb(struct net_local *tp);
-static void sktr_interrupt(int irq, void *dev_id, struct pt_regs *regs);
-static int sktr_isa_chk_card(struct net_device *dev, int ioaddr);
-static int sktr_isa_chk_ioaddr(int ioaddr);
-/* "O" */
-static int sktr_open(struct net_device *dev);
-static void sktr_open_adapter(struct net_device *dev);
-/* "P" */
-static int sktr_pci_chk_card(struct net_device *dev);
-int sktr_probe(struct net_device *dev);
-static int sktr_probe1(struct net_device *dev, int ioaddr);
-/* "R" */
-static void sktr_rcv_status_irq(struct net_device *dev);
-static void sktr_read_addr(struct net_device *dev, unsigned char *Address);
-static void sktr_read_ptr(struct net_device *dev);
-static void sktr_read_ram(struct net_device *dev, unsigned char *Data,
- unsigned short Address, int Length);
-static int sktr_reset_adapter(struct net_device *dev);
-static void sktr_reset_interrupt(struct net_device *dev);
-static void sktr_ring_status_irq(struct net_device *dev);
-/* "S" */
-static int sktr_send_packet(struct sk_buff *skb, struct net_device *dev);
-static void sktr_set_multicast_list(struct net_device *dev);
-/* "T" */
-static void sktr_timer_chk(unsigned long data);
-static void sktr_timer_end_wait(unsigned long data);
-static void sktr_tx_status_irq(struct net_device *dev);
-/* "U" */
-static void sktr_update_rcv_stats(struct net_local *tp,
- unsigned char DataPtr[], unsigned int Length);
-/* "W" */
-static void sktr_wait(unsigned long time);
-static void sktr_write_rpl_status(RPL *rpl, unsigned int Status);
-static void sktr_write_tpl_status(TPL *tpl, unsigned int Status);
-
-/*
- * Check for a network adapter of this type, and return '0' if one exists.
- * If dev->base_addr == 0, probe all likely locations.
- * If dev->base_addr == 1, always return failure.
- */
-int __init sktr_probe(struct net_device *dev)
-{
- int i;
- int base_addr = dev ? dev->base_addr : 0;
-
- if(base_addr > 0x1ff) /* Check a single specified location. */
- return (sktr_probe1(dev, base_addr));
- else if(base_addr != 0) /* Don't probe at all. */
- return (-ENXIO);
-
- for(i = 0; sktr_portlist[i]; i++)
- {
- int ioaddr = sktr_portlist[i];
- if(check_region(ioaddr, SKTR_IO_EXTENT))
- continue;
- if(sktr_probe1(dev, ioaddr))
- {
-#ifndef MODULE
- tr_freedev(dev);
-#endif
- }
- else
- return (0);
- }
-
- return (-ENODEV);
-}
-
-/*
- * Detect and setup the PCI SysKonnect TR cards in slot order.
- */
-static int __init sktr_pci_chk_card(struct net_device *dev)
-{
- static int pci_index = 0;
- unsigned char pci_bus, pci_device_fn;
-
- if(!pci_present())
- return (-1); /* No PCI present. */
-
- for(; pci_index < 0xff; pci_index++)
- {
- unsigned int pci_irq_line;
- struct pci_dev *pdev;
- unsigned short pci_command, new_command, vendor, device;
- unsigned int pci_ioaddr;
-
- if(pcibios_find_class(PCI_CLASS_NETWORK_TOKEN_RING << 8,
- pci_index, &pci_bus, &pci_device_fn)
- != PCIBIOS_SUCCESSFUL)
- {
- break;
- }
-
- pcibios_read_config_word(pci_bus, pci_device_fn,
- PCI_VENDOR_ID, &vendor);
- pcibios_read_config_word(pci_bus, pci_device_fn,
- PCI_DEVICE_ID, &device);
-
- pdev = pci_find_slot(pci_bus, pci_device_fn);
- pci_irq_line = pdev->irq;
- pci_ioaddr = pdev->resource[0].start;
-
- pcibios_read_config_word(pci_bus, pci_device_fn,
- PCI_COMMAND, &pci_command);
-
- /* Remove I/O space marker in bit 0. */
- pci_ioaddr &= ~3;
-
- if((vendor != PCI_VENDOR_ID_SK) &&
- (vendor != PCI_VENDOR_ID_COMPAQ))
- continue;
-
- if((vendor == PCI_VENDOR_ID_SK) &&
- (device != PCI_DEVICE_ID_SK_TR))
- continue;
- else if((vendor == PCI_VENDOR_ID_COMPAQ) &&
- (device != PCI_DEVICE_ID_COMPAQ_TOKENRING))
- continue;
-
- if(check_region(pci_ioaddr, SKTR_IO_EXTENT))
- continue;
- request_region(pci_ioaddr, SKTR_IO_EXTENT, pci_cardname);
- if(request_irq(pdev->irq, sktr_interrupt, SA_SHIRQ,
- pci_cardname, dev))
- return (-ENODEV); /* continue; ?? */
-
- AdapterName = pci_cardname;
-
- new_command = (pci_command|PCI_COMMAND_MASTER|PCI_COMMAND_IO);
-
- if(pci_command != new_command)
- {
- printk("The PCI BIOS has not enabled this"
- "device! Updating PCI command %4.4x->%4.4x.\n",
- pci_command, new_command);
- pcibios_write_config_word(pci_bus, pci_device_fn,
- PCI_COMMAND, new_command);
- }
-
- /* At this point we have found a valid PCI TR card. */
- dev->base_addr = pci_ioaddr;
- dev->irq = pci_irq_line;
- dev->dma = 0;
-
- printk("%s: %s found at %#4x, using IRQ %d.\n",
- dev->name, AdapterName, pci_ioaddr, dev->irq);
-
- return (0);
- }
-
- return (-1);
-}
-
-/*
- * Detect and setup the ISA SysKonnect TR cards.
- */
-static int __init sktr_isa_chk_card(struct net_device *dev, int ioaddr)
-{
- int i, err;
- unsigned long flags;
-
- err = sktr_isa_chk_ioaddr(ioaddr);
- if(err < 0)
- return (-ENODEV);
-
- if(virt_to_bus((void*)((unsigned long)dev->priv+sizeof(struct net_local)))
- > ISA_MAX_ADDRESS)
- {
- printk("%s: Memory not accessible for DMA\n", dev->name);
- kfree(dev->priv);
- return (-EAGAIN);
- }
-
- AdapterName = isa_cardname;
-
- /* Grab the region so that no one else tries to probe our ioports. */
- request_region(ioaddr, SKTR_IO_EXTENT, AdapterName);
- dev->base_addr = ioaddr;
-
- /* Autoselect IRQ and DMA if dev->irq == 0 */
- if(dev->irq == 0)
- {
- for(i = 0; sktr_irqlist[i] != 0; i++)
- {
- dev->irq = sktr_irqlist[i];
- err = request_irq(dev->irq, &sktr_interrupt, 0, AdapterName, dev);
- if(!err)
- break;
- }
-
- if(sktr_irqlist[i] == 0)
- {
- printk("%s: AutoSelect no IRQ available\n", dev->name);
- return (-EAGAIN);
- }
- }
- else
- {
- err = request_irq(dev->irq, &sktr_interrupt, 0, AdapterName, dev);
- if(err)
- {
- printk("%s: Selected IRQ not available\n", dev->name);
- return (-EAGAIN);
- }
- }
-
- /* Always allocate the DMA channel after IRQ and clean up on failure */
- if(dev->dma == 0)
- {
- for(i = 0; sktr_dmalist[i] != 0; i++)
- {
- dev->dma = sktr_dmalist[i];
- err = request_dma(dev->dma, AdapterName);
- if(!err)
- break;
- }
-
- if(dev->dma == 0)
- {
- printk("%s: AutoSelect no DMA available\n", dev->name);
- free_irq(dev->irq, NULL);
- return (-EAGAIN);
- }
- }
- else
- {
- err = request_dma(dev->dma, AdapterName);
- if(err)
- {
- printk("%s: Selected DMA not available\n", dev->name);
- free_irq(dev->irq, NULL);
- return (-EAGAIN);
- }
- }
-
- flags=claim_dma_lock();
- disable_dma(dev->dma);
- set_dma_mode(dev->dma, DMA_MODE_CASCADE);
- enable_dma(dev->dma);
- release_dma_lock(flags);
-
- printk("%s: %s found at %#4x, using IRQ %d and DMA %d.\n",
- dev->name, AdapterName, ioaddr, dev->irq, dev->dma);
-
- return (0);
-}
-
-static int __init sktr_probe1(struct net_device *dev, int ioaddr)
-{
- static unsigned version_printed = 0;
- struct net_local *tp;
- int DeviceType = SK_PCI;
- int err;
-
- if(sktr_debug && version_printed++ == 0)
- printk("%s", version);
-
-#ifndef MODULE
- dev = init_trdev(dev, 0);
- if(dev == NULL)
- return (-ENOMEM);
-#endif
-
- err = sktr_pci_chk_card(dev);
- if(err < 0)
- {
- err = sktr_isa_chk_card(dev, ioaddr);
- if(err < 0)
- return (-ENODEV);
- DeviceType = SK_ISA;
- }
-
- /* Setup this devices private information structure */
- tp = (struct net_local *)kmalloc(sizeof(struct net_local), GFP_KERNEL | GFP_DMA);
- if(tp == NULL)
- return (-ENOMEM);
- memset(tp, 0, sizeof(struct net_local));
- tp->DeviceType = DeviceType;
- init_waitqueue_head(&tp->wait_for_tok_int);
-
- dev->priv = tp;
- dev->init = sktr_init_card;
- dev->open = sktr_open;
- dev->stop = sktr_close;
- dev->hard_start_xmit = sktr_send_packet;
- dev->get_stats = sktr_get_stats;
- dev->set_multicast_list = &sktr_set_multicast_list;
-
- return (0);
-}
-
-/* Dummy function */
-static int __init sktr_init_card(struct net_device *dev)
-{
- if(sktr_debug > 3)
- printk("%s: sktr_init_card\n", dev->name);
-
- return (0);
-}
-
-/*
- * This function tests if an adapter is really installed at the
- * given I/O address. Return negative if no adapter at IO addr.
- */
-static int __init sktr_isa_chk_ioaddr(int ioaddr)
-{
- unsigned char old, chk1, chk2;
-
- old = inb(ioaddr + SIFADR); /* Get the old SIFADR value */
-
- chk1 = 0; /* Begin with check value 0 */
- do {
- /* Write new SIFADR value */
- outb(chk1, ioaddr + SIFADR);
-
- /* Read, invert and write */
- chk2 = inb(ioaddr + SIFADD);
- chk2 ^= 0x0FE;
- outb(chk2, ioaddr + SIFADR);
-
- /* Read, invert and compare */
- chk2 = inb(ioaddr + SIFADD);
- chk2 ^= 0x0FE;
-
- if(chk1 != chk2)
- return (-1); /* No adapter */
-
- chk1 -= 2;
- } while(chk1 != 0); /* Repeat 128 times (all byte values) */
-
- /* Restore the SIFADR value */
- outb(old, ioaddr + SIFADR);
-
- return (0);
-}
-
-/*
- * Open/initialize the board. This is called sometime after
- * booting when the 'ifconfig' program is run.
- *
- * This routine should set everything up anew at each open, even
- * registers that "should" only need to be set once at boot, so that
- * there is non-reboot way to recover if something goes wrong.
- */
-static int sktr_open(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- int err;
-
- /* Reset the hardware here. Don't forget to set the station address. */
- err = sktr_chipset_init(dev);
- if(err)
- {
- printk(KERN_INFO "%s: Chipset initialization error\n",
- dev->name);
- return (-1);
- }
-
- dev->addr_len = 6;
- sktr_read_addr(dev, (unsigned char*)dev->dev_addr);
-
- init_timer(&tp->timer);
- tp->timer.expires = jiffies + 30*HZ;
- tp->timer.function = sktr_timer_end_wait;
- tp->timer.data = (unsigned long)dev;
- tp->timer.next = NULL;
- tp->timer.prev = NULL;
- add_timer(&tp->timer);
-
- sktr_read_ptr(dev);
- sktr_enable_interrupts(dev);
- sktr_open_adapter(dev);
-
- dev->tbusy = 0;
- dev->interrupt = 0;
- dev->start = 0;
-
- /* Wait for interrupt from hardware. If interrupt does not come,
- * there will be a timeout from the timer.
- */
- tp->Sleeping = 1;
- interruptible_sleep_on(&tp->wait_for_tok_int);
- del_timer(&tp->timer);
-
- /* If AdapterVirtOpenFlag is 1, the adapter is now open for use */
- if(tp->AdapterVirtOpenFlag == 0)
- {
- sktr_disable_interrupts(dev);
- return (-1);
- }
-
- dev->start = 1;
-
- tp->StartTime = jiffies;
-
- /* Start function control timer */
- tp->timer.expires = jiffies + 2*HZ;
- tp->timer.function = sktr_timer_chk;
- tp->timer.data = (unsigned long)dev;
- add_timer(&tp->timer);
-
-#ifdef MODULE
- MOD_INC_USE_COUNT;
-#endif
-
- return (0);
-}
-
-/*
- * Timeout function while waiting for event
- */
-static void sktr_timer_end_wait(unsigned long data)
-{
- struct net_device *dev = (struct net_device*)data;
- struct net_local *tp = (struct net_local *)dev->priv;
-
- if(tp->Sleeping)
- {
- tp->Sleeping = 0;
- wake_up_interruptible(&tp->wait_for_tok_int);
- }
-
- return;
-}
-
-/*
- * Initialize the chipset
- */
-static int sktr_chipset_init(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned char PosReg, Tmp;
- int i, err;
-
- sktr_init_ipb(tp);
- sktr_init_opb(tp);
- sktr_init_net_local(dev);
-
- /* Set pos register: selects irq and dma channel.
- * Only for ISA bus adapters.
- */
- if(dev->dma > 0)
- {
- PosReg = 0;
- for(i = 0; sktr_irqlist[i] != 0; i++)
- {
- if(sktr_irqlist[i] == dev->irq)
- break;
- }
-
- /* Choose default cycle time, 500 nsec */
- PosReg |= CYCLE_TIME << 2;
- PosReg |= i << 4;
- i = dev->dma - 5;
- PosReg |= i;
-
- if(tp->DataRate == SPEED_4)
- PosReg |= LINE_SPEED_BIT;
- else
- PosReg &= ~LINE_SPEED_BIT;
-
- outb(PosReg, dev->base_addr + POSREG);
- Tmp = inb(dev->base_addr + POSREG);
- if((Tmp & ~CYCLE_TIME) != (PosReg & ~CYCLE_TIME))
- printk(KERN_INFO "%s: POSREG error\n", dev->name);
- }
-
- err = sktr_reset_adapter(dev);
- if(err < 0)
- return (-1);
-
- err = sktr_bringup_diags(dev);
- if(err < 0)
- return (-1);
-
- err = sktr_init_adapter(dev);
- if(err < 0)
- return (-1);
-
- return (0);
-}
-
-/*
- * Initializes the net_local structure.
- */
-static void sktr_init_net_local(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- int i;
-
- tp->scb.CMD = 0;
- tp->scb.Parm[0] = 0;
- tp->scb.Parm[1] = 0;
-
- tp->ssb.STS = 0;
- tp->ssb.Parm[0] = 0;
- tp->ssb.Parm[1] = 0;
- tp->ssb.Parm[2] = 0;
-
- tp->CMDqueue = 0;
-
- tp->AdapterOpenFlag = 0;
- tp->AdapterVirtOpenFlag = 0;
- tp->ScbInUse = 0;
- tp->OpenCommandIssued = 0;
- tp->ReOpenInProgress = 0;
- tp->HaltInProgress = 0;
- tp->TransmitHaltScheduled = 0;
- tp->LobeWireFaultLogged = 0;
- tp->LastOpenStatus = 0;
- tp->MaxPacketSize = DEFAULT_PACKET_SIZE;
-
- skb_queue_head_init(&tp->SendSkbQueue);
- tp->QueueSkb = MAX_TX_QUEUE;
-
- /* Create circular chain of transmit lists */
- for (i = 0; i < TPL_NUM; i++)
- {
- tp->Tpl[i].NextTPLAddr = htonl((unsigned long) virt_to_bus(&tp->Tpl[(i+1) % TPL_NUM]));
- tp->Tpl[i].Status = 0;
- tp->Tpl[i].FrameSize = 0;
- tp->Tpl[i].FragList[0].DataCount = 0;
- tp->Tpl[i].FragList[0].DataAddr = 0;
- tp->Tpl[i].NextTPLPtr = &tp->Tpl[(i+1) % TPL_NUM];
- tp->Tpl[i].MData = NULL;
- tp->Tpl[i].TPLIndex = i;
- tp->Tpl[i].BusyFlag = 0;
- }
-
- tp->TplFree = tp->TplBusy = &tp->Tpl[0];
-
- /* Create circular chain of receive lists */
- for (i = 0; i < RPL_NUM; i++)
- {
- tp->Rpl[i].NextRPLAddr = htonl((unsigned long) virt_to_bus(&tp->Rpl[(i+1) % RPL_NUM]));
- tp->Rpl[i].Status = (RX_VALID | RX_START_FRAME | RX_END_FRAME | RX_FRAME_IRQ);
- tp->Rpl[i].FrameSize = 0;
- tp->Rpl[i].FragList[0].DataCount = SWAPB(tp->MaxPacketSize);
-
- /* Alloc skb and point adapter to data area */
- tp->Rpl[i].Skb = dev_alloc_skb(tp->MaxPacketSize);
-
- /* skb == NULL ? then use local buffer */
- if(tp->Rpl[i].Skb == NULL)
- {
- tp->Rpl[i].SkbStat = SKB_UNAVAILABLE;
- tp->Rpl[i].FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[i]));
- tp->Rpl[i].MData = tp->LocalRxBuffers[i];
- }
- else /* SKB != NULL */
- {
- tp->Rpl[i].Skb->dev = dev;
- skb_put(tp->Rpl[i].Skb, tp->MaxPacketSize);
-
- /* data unreachable for DMA ? then use local buffer */
- if(tp->DeviceType == SK_ISA &&
- virt_to_bus(tp->Rpl[i].Skb->data) +
- tp->MaxPacketSize > ISA_MAX_ADDRESS)
- {
- tp->Rpl[i].SkbStat = SKB_DATA_COPY;
- tp->Rpl[i].FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[i]));
- tp->Rpl[i].MData = tp->LocalRxBuffers[i];
- }
- else /* DMA directly in skb->data */
- {
- tp->Rpl[i].SkbStat = SKB_DMA_DIRECT;
- tp->Rpl[i].FragList[0].DataAddr = htonl(virt_to_bus(tp->Rpl[i].Skb->data));
- tp->Rpl[i].MData = tp->Rpl[i].Skb->data;
- }
- }
-
- tp->Rpl[i].NextRPLPtr = &tp->Rpl[(i+1) % RPL_NUM];
- tp->Rpl[i].RPLIndex = i;
- }
-
- tp->RplHead = &tp->Rpl[0];
- tp->RplTail = &tp->Rpl[RPL_NUM-1];
- tp->RplTail->Status = (RX_START_FRAME | RX_END_FRAME | RX_FRAME_IRQ);
-
- return;
-}
-
-/*
- * Initializes the initialisation parameter block.
- */
-static void sktr_init_ipb(struct net_local *tp)
-{
- tp->ipb.Init_Options = BURST_MODE;
- tp->ipb.CMD_Status_IV = 0;
- tp->ipb.TX_IV = 0;
- tp->ipb.RX_IV = 0;
- tp->ipb.Ring_Status_IV = 0;
- tp->ipb.SCB_Clear_IV = 0;
- tp->ipb.Adapter_CHK_IV = 0;
- tp->ipb.RX_Burst_Size = BURST_SIZE;
- tp->ipb.TX_Burst_Size = BURST_SIZE;
- tp->ipb.DMA_Abort_Thrhld = DMA_RETRIES;
- tp->ipb.SCB_Addr = 0;
- tp->ipb.SSB_Addr = 0;
-
- return;
-}
-
-/*
- * Initializes the open parameter block.
- */
-static void sktr_init_opb(struct net_local *tp)
-{
- unsigned long Addr;
- unsigned short RplSize = RPL_SIZE;
- unsigned short TplSize = TPL_SIZE;
- unsigned short BufferSize = BUFFER_SIZE;
-
- tp->ocpl.OPENOptions = 0;
- tp->ocpl.OPENOptions |= ENABLE_FULL_DUPLEX_SELECTION;
-/* tp->ocpl.OPENOptions |= PAD_ROUTING_FIELD; no more needed */
- tp->ocpl.FullDuplex = 0;
- tp->ocpl.FullDuplex |= OPEN_FULL_DUPLEX_OFF;
-
- /* Fixme: If mac address setable:
- * for (i=0; i<LENGTH_OF_ADDRESS; i++)
- * mac->Vam->ocpl.NodeAddr[i] = mac->CurrentAddress[i];
- */
-
- tp->ocpl.GroupAddr = 0;
- tp->ocpl.FunctAddr = 0;
- tp->ocpl.RxListSize = SWAPB(RplSize);
- tp->ocpl.TxListSize = SWAPB(TplSize);
- tp->ocpl.BufSize = SWAPB(BufferSize);
- tp->ocpl.Reserved = 0;
- tp->ocpl.TXBufMin = TX_BUF_MIN;
- tp->ocpl.TXBufMax = TX_BUF_MAX;
-
- Addr = htonl(virt_to_bus(tp->ProductID));
-
- tp->ocpl.ProdIDAddr[0] = LOWORD(Addr);
- tp->ocpl.ProdIDAddr[1] = HIWORD(Addr);
-
- return;
-}
-
-/*
- * Send OPEN command to adapter
- */
-static void sktr_open_adapter(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
-
- if(tp->OpenCommandIssued)
- return;
-
- tp->OpenCommandIssued = 1;
- sktr_exec_cmd(dev, OC_OPEN);
-
- return;
-}
-
-/*
- * Clear the adapter's interrupt flag. Clear system interrupt enable
- * (SINTEN): disable adapter to system interrupts.
- */
-static void sktr_disable_interrupts(struct net_device *dev)
-{
- outb(0, dev->base_addr + SIFACL);
-
- return;
-}
-
-/*
- * Set the adapter's interrupt flag. Set system interrupt enable
- * (SINTEN): enable adapter to system interrupts.
- */
-static void sktr_enable_interrupts(struct net_device *dev)
-{
- outb(ACL_SINTEN, dev->base_addr + SIFACL);
-
- return;
-}
-
-/*
- * Put command in command queue, try to execute it.
- */
-static void sktr_exec_cmd(struct net_device *dev, unsigned short Command)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
-
- tp->CMDqueue |= Command;
- sktr_chk_outstanding_cmds(dev);
-
- return;
-}
-
-/*
- * Gets skb from system, queues it and checks if it can be sent
- */
-static int sktr_send_packet(struct sk_buff *skb, struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
-
- if(dev->tbusy)
- {
- /*
- * If we get here, some higher level has decided we are broken.
- * There should really be a "kick me" function call instead.
- *
- * Resetting the token ring adapter takes a long time so just
- * fake transmission time and go on trying. Our own timeout
- * routine is in sktr_timer_chk()
- */
- dev->tbusy = 0;
- dev->trans_start = jiffies;
- return (1);
- }
-
- /*
- * If some higher layer thinks we've missed an tx-done interrupt we
- * are passed NULL.
- */
- if(skb == NULL)
- return (0);
-
- /*
- * Block a timer-based transmit from overlapping. This could better be
- * done with atomic_swap(1, dev->tbusy), but set_bit() works as well.
- */
- if(test_and_set_bit(0, (void*)&dev->tbusy) != 0)
- {
- printk("%s: Transmitter access conflict.\n", dev->name);
- return (1);
- }
-
- if(tp->QueueSkb == 0)
- return (1); /* Return with tbusy set: queue full */
-
- tp->QueueSkb--;
- skb_queue_tail(&tp->SendSkbQueue, skb);
- sktr_hardware_send_packet(dev, tp);
- if(tp->QueueSkb > 0)
- dev->tbusy = 0;
-
- return (0);
-}
-
-/*
- * Move frames from internal skb queue into adapter tx queue
- */
-static void sktr_hardware_send_packet(struct net_device *dev, struct net_local* tp)
-{
- TPL *tpl;
- short length;
- unsigned char *buf, *newbuf;
- struct sk_buff *skb;
- int i;
-
- for(;;)
- {
- /* Try to get a free TPL from the chain.
- *
- * NOTE: We *must* always leave one unused TPL in the chain,
- * because otherwise the adapter might send frames twice.
- */
- if(tp->TplFree->NextTPLPtr->BusyFlag) /* No free TPL */
- {
- printk(KERN_INFO "%s: No free TPL\n", dev->name);
- return;
- }
-
- /* Send first buffer from queue */
- skb = skb_dequeue(&tp->SendSkbQueue);
- if(skb == NULL)
- return;
-
- tp->QueueSkb++;
- /* Is buffer reachable for Busmaster-DMA? */
- if(tp->DeviceType == SK_ISA &&
- virt_to_bus((void*)(((long) skb->data) + skb->len))
- > ISA_MAX_ADDRESS)
- {
- /* Copy frame to local buffer */
- i = tp->TplFree->TPLIndex;
- length = skb->len;
- buf = tp->LocalTxBuffers[i];
- memcpy(buf, skb->data, length);
- newbuf = buf;
- }
- else
- {
- /* Send direct from skb->data */
- length = skb->len;
- newbuf = skb->data;
- }
-
- /* Source address in packet? */
- sktr_chk_src_addr(newbuf, dev->dev_addr);
-
- tp->LastSendTime = jiffies;
- tpl = tp->TplFree; /* Get the "free" TPL */
- tpl->BusyFlag = 1; /* Mark TPL as busy */
- tp->TplFree = tpl->NextTPLPtr;
-
- /* Save the skb for delayed return of skb to system */
- tpl->Skb = skb;
- tpl->FragList[0].DataCount = (unsigned short) SWAPB(length);
- tpl->FragList[0].DataAddr = htonl(virt_to_bus(newbuf));
-
- /* Write the data length in the transmit list. */
- tpl->FrameSize = (unsigned short) SWAPB(length);
- tpl->MData = newbuf;
-
- /* Transmit the frame and set the status values. */
- sktr_write_tpl_status(tpl, TX_VALID | TX_START_FRAME
- | TX_END_FRAME | TX_PASS_SRC_ADDR
- | TX_FRAME_IRQ);
-
- /* Let adapter send the frame. */
- sktr_exec_sifcmd(dev, CMD_TX_VALID);
- }
-
- return;
-}
-
-/*
- * Write the given value to the 'Status' field of the specified TPL.
- * NOTE: This function should be used whenever the status of any TPL must be
- * modified by the driver, because the compiler may otherwise change the
- * order of instructions such that writing the TPL status may be executed at
- * an undesireable time. When this function is used, the status is always
- * written when the function is called.
- */
-static void sktr_write_tpl_status(TPL *tpl, unsigned int Status)
-{
- tpl->Status = Status;
-}
-
-static void sktr_chk_src_addr(unsigned char *frame, unsigned char *hw_addr)
-{
- unsigned char SRBit;
-
- if((((unsigned long)frame[8]) & ~0x80) != 0) /* Compare 4 bytes */
- return;
- if((unsigned short)frame[12] != 0) /* Compare 2 bytes */
- return;
-
- SRBit = frame[8] & 0x80;
- memcpy(&frame[8], hw_addr, 6);
- frame[8] |= SRBit;
-
- return;
-}
-
-/*
- * The timer routine: Check if adapter still open and working, reopen if not.
- */
-static void sktr_timer_chk(unsigned long data)
-{
- struct net_device *dev = (struct net_device*)data;
- struct net_local *tp = (struct net_local*)dev->priv;
-
- if(tp->HaltInProgress)
- return;
-
- sktr_chk_outstanding_cmds(dev);
- if(time_before(tp->LastSendTime + SEND_TIMEOUT, jiffies)
- && (tp->QueueSkb < MAX_TX_QUEUE || tp->TplFree != tp->TplBusy))
- {
- /* Anything to send, but stalled to long */
- tp->LastSendTime = jiffies;
- sktr_exec_cmd(dev, OC_CLOSE); /* Does reopen automatically */
- }
-
- tp->timer.expires = jiffies + 2*HZ;
- add_timer(&tp->timer);
-
- if(tp->AdapterOpenFlag || tp->ReOpenInProgress)
- return;
- tp->ReOpenInProgress = 1;
- sktr_open_adapter(dev);
-
- return;
-}
-
-/*
- * The typical workload of the driver: Handle the network interface interrupts.
- */
-static void sktr_interrupt(int irq, void *dev_id, struct pt_regs *regs)
-{
- struct net_device *dev = dev_id;
- struct net_local *tp;
- int ioaddr;
- unsigned short irq_type;
-
- if(dev == NULL)
- {
- printk("%s: irq %d for unknown device.\n", dev->name, irq);
- return;
- }
-
- dev->interrupt = 1;
-
- ioaddr = dev->base_addr;
- tp = (struct net_local *)dev->priv;
-
- irq_type = inw(ioaddr + SIFSTS);
-
- while(irq_type & STS_SYSTEM_IRQ)
- {
- irq_type &= STS_IRQ_MASK;
-
- if(!sktr_chk_ssb(tp, irq_type))
- {
- printk(KERN_INFO "%s: DATA LATE occurred\n", dev->name);
- break;
- }
-
- switch(irq_type)
- {
- case STS_IRQ_RECEIVE_STATUS:
- sktr_reset_interrupt(dev);
- sktr_rcv_status_irq(dev);
- break;
-
- case STS_IRQ_TRANSMIT_STATUS:
- /* Check if TRANSMIT.HALT command is complete */
- if(tp->ssb.Parm[0] & COMMAND_COMPLETE)
- {
- tp->TransmitCommandActive = 0;
- tp->TransmitHaltScheduled = 0;
-
- /* Issue a new transmit command. */
- sktr_exec_cmd(dev, OC_TRANSMIT);
- }
-
- sktr_reset_interrupt(dev);
- sktr_tx_status_irq(dev);
- break;
-
- case STS_IRQ_COMMAND_STATUS:
- /* The SSB contains status of last command
- * other than receive/transmit.
- */
- sktr_cmd_status_irq(dev);
- break;
-
- case STS_IRQ_SCB_CLEAR:
- /* The SCB is free for another command. */
- tp->ScbInUse = 0;
- sktr_chk_outstanding_cmds(dev);
- break;
-
- case STS_IRQ_RING_STATUS:
- sktr_ring_status_irq(dev);
- break;
-
- case STS_IRQ_ADAPTER_CHECK:
- sktr_chk_irq(dev);
- break;
-
- default:
- printk(KERN_INFO "Unknown Token Ring IRQ\n");
- break;
- }
-
- /* Reset system interrupt if not already done. */
- if(irq_type != STS_IRQ_TRANSMIT_STATUS
- && irq_type != STS_IRQ_RECEIVE_STATUS)
- {
- sktr_reset_interrupt(dev);
- }
-
- irq_type = inw(ioaddr + SIFSTS);
- }
-
- dev->interrupt = 0;
-
- return;
-}
-
-/*
- * Reset the INTERRUPT SYSTEM bit and issue SSB CLEAR command.
- */
-static void sktr_reset_interrupt(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- SSB *ssb = &tp->ssb;
-
- /*
- * [Workaround for "Data Late"]
- * Set all fields of the SSB to well-defined values so we can
- * check if the adapter has written the SSB.
- */
-
- ssb->STS = (unsigned short) -1;
- ssb->Parm[0] = (unsigned short) -1;
- ssb->Parm[1] = (unsigned short) -1;
- ssb->Parm[2] = (unsigned short) -1;
-
- /* Free SSB by issuing SSB_CLEAR command after reading IRQ code
- * and clear STS_SYSTEM_IRQ bit: enable adapter for further interrupts.
- */
- sktr_exec_sifcmd(dev, CMD_SSB_CLEAR | CMD_CLEAR_SYSTEM_IRQ);
-
- return;
-}
-
-/*
- * Check if the SSB has actually been written by the adapter.
- */
-static unsigned char sktr_chk_ssb(struct net_local *tp, unsigned short IrqType)
-{
- SSB *ssb = &tp->ssb; /* The address of the SSB. */
-
- /* C 0 1 2 INTERRUPT CODE
- * - - - - --------------
- * 1 1 1 1 TRANSMIT STATUS
- * 1 1 1 1 RECEIVE STATUS
- * 1 ? ? 0 COMMAND STATUS
- * 0 0 0 0 SCB CLEAR
- * 1 1 0 0 RING STATUS
- * 0 0 0 0 ADAPTER CHECK
- *
- * 0 = SSB field not affected by interrupt
- * 1 = SSB field is affected by interrupt
- *
- * C = SSB ADDRESS +0: COMMAND
- * 0 = SSB ADDRESS +2: STATUS 0
- * 1 = SSB ADDRESS +4: STATUS 1
- * 2 = SSB ADDRESS +6: STATUS 2
- */
-
- /* Check if this interrupt does use the SSB. */
-
- if(IrqType != STS_IRQ_TRANSMIT_STATUS
- && IrqType != STS_IRQ_RECEIVE_STATUS
- && IrqType != STS_IRQ_COMMAND_STATUS
- && IrqType != STS_IRQ_RING_STATUS)
- {
- return (1); /* SSB not involved. */
- }
-
- /* Note: All fields of the SSB have been set to all ones (-1) after it
- * has last been used by the software (see DriverIsr()).
- *
- * Check if the affected SSB fields are still unchanged.
- */
-
- if(ssb->STS == (unsigned short) -1)
- return (0); /* Command field not yet available. */
- if(IrqType == STS_IRQ_COMMAND_STATUS)
- return (1); /* Status fields not always affected. */
- if(ssb->Parm[0] == (unsigned short) -1)
- return (0); /* Status 1 field not yet available. */
- if(IrqType == STS_IRQ_RING_STATUS)
- return (1); /* Status 2 & 3 fields not affected. */
-
- /* Note: At this point, the interrupt is either TRANSMIT or RECEIVE. */
- if(ssb->Parm[1] == (unsigned short) -1)
- return (0); /* Status 2 field not yet available. */
- if(ssb->Parm[2] == (unsigned short) -1)
- return (0); /* Status 3 field not yet available. */
-
- return (1); /* All SSB fields have been written by the adapter. */
-}
-
-/*
- * Evaluates the command results status in the SSB status field.
- */
-static void sktr_cmd_status_irq(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned short ssb_cmd, ssb_parm_0;
- unsigned short ssb_parm_1;
- char *open_err = "Open error -";
- char *code_err = "Open code -";
-
- /* Copy the ssb values to local variables */
- ssb_cmd = tp->ssb.STS;
- ssb_parm_0 = tp->ssb.Parm[0];
- ssb_parm_1 = tp->ssb.Parm[1];
-
- if(ssb_cmd == OPEN)
- {
- tp->Sleeping = 0;
- if(!tp->ReOpenInProgress)
- wake_up_interruptible(&tp->wait_for_tok_int);
-
- tp->OpenCommandIssued = 0;
- tp->ScbInUse = 0;
-
- if((ssb_parm_0 & 0x00FF) == GOOD_COMPLETION)
- {
- /* Success, the adapter is open. */
- tp->LobeWireFaultLogged = 0;
- tp->AdapterOpenFlag = 1;
- tp->AdapterVirtOpenFlag = 1;
- tp->TransmitCommandActive = 0;
- sktr_exec_cmd(dev, OC_TRANSMIT);
- sktr_exec_cmd(dev, OC_RECEIVE);
-
- if(tp->ReOpenInProgress)
- tp->ReOpenInProgress = 0;
-
- return;
- }
- else /* The adapter did not open. */
- {
- if(ssb_parm_0 & NODE_ADDR_ERROR)
- printk(KERN_INFO "%s: Node address error\n",
- dev->name);
- if(ssb_parm_0 & LIST_SIZE_ERROR)
- printk(KERN_INFO "%s: List size error\n",
- dev->name);
- if(ssb_parm_0 & BUF_SIZE_ERROR)
- printk(KERN_INFO "%s: Buffer size error\n",
- dev->name);
- if(ssb_parm_0 & TX_BUF_COUNT_ERROR)
- printk(KERN_INFO "%s: Tx buffer count error\n",
- dev->name);
- if(ssb_parm_0 & INVALID_OPEN_OPTION)
- printk(KERN_INFO "%s: Invalid open option\n",
- dev->name);
- if(ssb_parm_0 & OPEN_ERROR)
- {
- /* Show the open phase. */
- switch(ssb_parm_0 & OPEN_PHASES_MASK)
- {
- case LOBE_MEDIA_TEST:
- if(!tp->LobeWireFaultLogged)
- {
- tp->LobeWireFaultLogged = 1;
- printk(KERN_INFO "%s: %s Lobe wire fault (check cable !).\n", dev->name, open_err);
- }
- tp->ReOpenInProgress = 1;
- tp->AdapterOpenFlag = 0;
- tp->AdapterVirtOpenFlag = 1;
- sktr_open_adapter(dev);
- return;
-
- case PHYSICAL_INSERTION:
- printk(KERN_INFO "%s: %s Physical insertion.\n", dev->name, open_err);
- break;
-
- case ADDRESS_VERIFICATION:
- printk(KERN_INFO "%s: %s Address verification.\n", dev->name, open_err);
- break;
-
- case PARTICIPATION_IN_RING_POLL:
- printk(KERN_INFO "%s: %s Participation in ring poll.\n", dev->name, open_err);
- break;
-
- case REQUEST_INITIALISATION:
- printk(KERN_INFO "%s: %s Request initialisation.\n", dev->name, open_err);
- break;
-
- case FULLDUPLEX_CHECK:
- printk(KERN_INFO "%s: %s Full duplex check.\n", dev->name, open_err);
- break;
-
- default:
- printk(KERN_INFO "%s: %s Unknown open phase\n", dev->name, open_err);
- break;
- }
-
- /* Show the open errors. */
- switch(ssb_parm_0 & OPEN_ERROR_CODES_MASK)
- {
- case OPEN_FUNCTION_FAILURE:
- printk(KERN_INFO "%s: %s OPEN_FUNCTION_FAILURE", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_FUNCTION_FAILURE;
- break;
-
- case OPEN_SIGNAL_LOSS:
- printk(KERN_INFO "%s: %s OPEN_SIGNAL_LOSS\n", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_SIGNAL_LOSS;
- break;
-
- case OPEN_TIMEOUT:
- printk(KERN_INFO "%s: %s OPEN_TIMEOUT\n", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_TIMEOUT;
- break;
-
- case OPEN_RING_FAILURE:
- printk(KERN_INFO "%s: %s OPEN_RING_FAILURE\n", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_RING_FAILURE;
- break;
-
- case OPEN_RING_BEACONING:
- printk(KERN_INFO "%s: %s OPEN_RING_BEACONING\n", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_RING_BEACONING;
- break;
-
- case OPEN_DUPLICATE_NODEADDR:
- printk(KERN_INFO "%s: %s OPEN_DUPLICATE_NODEADDR\n", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_DUPLICATE_NODEADDR;
- break;
-
- case OPEN_REQUEST_INIT:
- printk(KERN_INFO "%s: %s OPEN_REQUEST_INIT\n", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_REQUEST_INIT;
- break;
-
- case OPEN_REMOVE_RECEIVED:
- printk(KERN_INFO "%s: %s OPEN_REMOVE_RECEIVED", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_REMOVE_RECEIVED;
- break;
-
- case OPEN_FULLDUPLEX_SET:
- printk(KERN_INFO "%s: %s OPEN_FULLDUPLEX_SET\n", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_FULLDUPLEX_SET;
- break;
-
- default:
- printk(KERN_INFO "%s: %s Unknown open err code", dev->name, code_err);
- tp->LastOpenStatus =
- OPEN_FUNCTION_FAILURE;
- break;
- }
- }
-
- tp->AdapterOpenFlag = 0;
- tp->AdapterVirtOpenFlag = 0;
-
- return;
- }
- }
- else
- {
- if(ssb_cmd != READ_ERROR_LOG)
- return;
-
- /* Add values from the error log table to the MAC
- * statistics counters and update the errorlogtable
- * memory.
- */
- tp->MacStat.line_errors += tp->errorlogtable.Line_Error;
- tp->MacStat.burst_errors += tp->errorlogtable.Burst_Error;
- tp->MacStat.A_C_errors += tp->errorlogtable.ARI_FCI_Error;
- tp->MacStat.lost_frames += tp->errorlogtable.Lost_Frame_Error;
- tp->MacStat.recv_congest_count += tp->errorlogtable.Rx_Congest_Error;
- tp->MacStat.rx_errors += tp->errorlogtable.Rx_Congest_Error;
- tp->MacStat.frame_copied_errors += tp->errorlogtable.Frame_Copied_Error;
- tp->MacStat.token_errors += tp->errorlogtable.Token_Error;
- tp->MacStat.dummy1 += tp->errorlogtable.DMA_Bus_Error;
- tp->MacStat.dummy1 += tp->errorlogtable.DMA_Parity_Error;
- tp->MacStat.abort_delimiters += tp->errorlogtable.AbortDelimeters;
- tp->MacStat.frequency_errors += tp->errorlogtable.Frequency_Error;
- tp->MacStat.internal_errors += tp->errorlogtable.Internal_Error;
- }
-
- return;
-}
-
-/*
- * The inverse routine to sktr_open().
- */
-static int sktr_close(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
-
- dev->tbusy = 1;
- dev->start = 0;
-
- del_timer(&tp->timer);
-
- /* Flush the Tx and disable Rx here. */
-
- tp->HaltInProgress = 1;
- sktr_exec_cmd(dev, OC_CLOSE);
- tp->timer.expires = jiffies + 1*HZ;
- tp->timer.function = sktr_timer_end_wait;
- tp->timer.data = (unsigned long)dev;
- add_timer(&tp->timer);
-
- sktr_enable_interrupts(dev);
-
- tp->Sleeping = 1;
- interruptible_sleep_on(&tp->wait_for_tok_int);
- tp->TransmitCommandActive = 0;
-
- del_timer(&tp->timer);
- sktr_disable_interrupts(dev);
-
- if(dev->dma > 0)
- {
- unsigned long flags=claim_dma_lock();
- disable_dma(dev->dma);
- release_dma_lock(flags);
- }
-
- outw(0xFF00, dev->base_addr + SIFCMD);
- if(dev->dma > 0)
- outb(0xff, dev->base_addr + POSREG);
-
-#ifdef MODULE
- MOD_DEC_USE_COUNT;
-#endif
-
- sktr_cancel_tx_queue(tp);
-
- return (0);
-}
-
-/*
- * Get the current statistics. This may be called with the card open
- * or closed.
- */
-static struct enet_statistics *sktr_get_stats(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
-
- return ((struct enet_statistics *)&tp->MacStat);
-}
-
-/*
- * Set or clear the multicast filter for this adapter.
- */
-static void sktr_set_multicast_list(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned int OpenOptions;
-
- OpenOptions = tp->ocpl.OPENOptions &
- ~(PASS_ADAPTER_MAC_FRAMES
- | PASS_ATTENTION_FRAMES
- | PASS_BEACON_MAC_FRAMES
- | COPY_ALL_MAC_FRAMES
- | COPY_ALL_NON_MAC_FRAMES);
-
- tp->ocpl.FunctAddr = 0;
-
- if(dev->flags & IFF_PROMISC)
- /* Enable promiscuous mode */
- OpenOptions |= COPY_ALL_NON_MAC_FRAMES |
- COPY_ALL_MAC_FRAMES;
- else
- {
- if(dev->flags & IFF_ALLMULTI)
- {
- /* Disable promiscuous mode, use normal mode. */
- tp->ocpl.FunctAddr = 0xFFFFFFFF;
-
- }
- else
- {
- int i;
- struct dev_mc_list *mclist = dev->mc_list;
- for (i=0; i< dev->mc_count; i++)
- {
- ((char *)(&tp->ocpl.FunctAddr))[0] |=
- mclist->dmi_addr[2];
- ((char *)(&tp->ocpl.FunctAddr))[1] |=
- mclist->dmi_addr[3];
- ((char *)(&tp->ocpl.FunctAddr))[2] |=
- mclist->dmi_addr[4];
- ((char *)(&tp->ocpl.FunctAddr))[3] |=
- mclist->dmi_addr[5];
- mclist = mclist->next;
- }
- }
- sktr_exec_cmd(dev, OC_SET_FUNCT_ADDR);
- }
-
- tp->ocpl.OPENOptions = OpenOptions;
- sktr_exec_cmd(dev, OC_MODIFY_OPEN_PARMS);
- return;
-}
-
-/*
- * Wait for some time (microseconds)
- *
- * udelay() is a bit harsh, but using a looser timer causes
- * the bring-up-diags to stall indefinitly.
- *
- */
-
-static void sktr_wait(unsigned long time)
-{
- udelay(time);
- return;
-}
-
-/*
- * Write a command value to the SIFCMD register
- */
-static void sktr_exec_sifcmd(struct net_device *dev, unsigned int WriteValue)
-{
- int ioaddr = dev->base_addr;
- unsigned short cmd;
- unsigned short SifStsValue;
- unsigned long loop_counter;
-
- WriteValue = ((WriteValue ^ CMD_SYSTEM_IRQ) | CMD_INTERRUPT_ADAPTER);
- cmd = (unsigned short)WriteValue;
- loop_counter = 0,5 * 800000;
- do {
- SifStsValue = inw(ioaddr + SIFSTS);
- } while((SifStsValue & CMD_INTERRUPT_ADAPTER) && loop_counter--);
- outw(cmd, ioaddr + SIFCMD);
-
- return;
-}
-
-/*
- * Processes adapter hardware reset, halts adapter and downloads firmware,
- * clears the halt bit.
- */
-static int sktr_reset_adapter(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned short *fw_ptr = (unsigned short *)&sktr_code;
- unsigned short count, c;
- int ioaddr = dev->base_addr;
-
- /* Hardware adapter reset */
- outw(ACL_ARESET, ioaddr + SIFACL);
- sktr_wait(40);
-
- c = inw(ioaddr + SIFACL);
- sktr_wait(20);
-
- if(dev->dma == 0) /* For PCI adapters */
- {
- c &= ~(ACL_SPEED4 | ACL_SPEED16); /* Clear bits */
- if(tp->DataRate == SPEED_4)
- c |= ACL_SPEED4; /* Set 4Mbps */
- else
- c |= ACL_SPEED16; /* Set 16Mbps */
- }
-
- /* In case a command is pending - forget it */
- tp->ScbInUse = 0;
-
- c &= ~ACL_ARESET; /* Clear adapter reset bit */
- c |= ACL_CPHALT; /* Halt adapter CPU, allow download */
- c &= ~ACL_PSDMAEN; /* Clear pseudo dma bit */
- outw(c, ioaddr + SIFACL);
- sktr_wait(40);
-
- /* Download firmware via DIO interface: */
- do {
- /* Download first address part */
- outw(*fw_ptr, ioaddr + SIFADX);
- fw_ptr++;
-
- /* Download second address part */
- outw(*fw_ptr, ioaddr + SIFADD);
- fw_ptr++;
-
- if((count = *fw_ptr) != 0) /* Load loop counter */
- {
- fw_ptr++; /* Download block data */
- for(; count > 0; count--)
- {
- outw(*fw_ptr, ioaddr + SIFINC);
- fw_ptr++;
- }
- }
- else /* Stop, if last block downloaded */
- {
- c = inw(ioaddr + SIFACL);
- c &= (~ACL_CPHALT | ACL_SINTEN);
-
- /* Clear CPHALT and start BUD */
- outw(c, ioaddr + SIFACL);
- return (1);
- }
- } while(count == 0);
-
- return (-1);
-}
-
-/*
- * Starts bring up diagnostics of token ring adapter and evaluates
- * diagnostic results.
- */
-static int sktr_bringup_diags(struct net_device *dev)
-{
- int loop_cnt, retry_cnt;
- unsigned short Status;
- int ioaddr = dev->base_addr;
-
- sktr_wait(HALF_SECOND);
- sktr_exec_sifcmd(dev, EXEC_SOFT_RESET);
- sktr_wait(HALF_SECOND);
-
- retry_cnt = BUD_MAX_RETRIES; /* maximal number of retrys */
-
- do {
- retry_cnt--;
- if(sktr_debug > 3)
- printk(KERN_INFO "BUD-Status: \n");
- loop_cnt = BUD_MAX_LOOPCNT; /* maximum: three seconds*/
- do { /* Inspect BUD results */
- loop_cnt--;
- sktr_wait(HALF_SECOND);
- Status = inw(ioaddr + SIFSTS);
- Status &= STS_MASK;
-
- if(sktr_debug > 3)
- printk(KERN_INFO " %04X \n", Status);
- /* BUD successfully completed */
- if(Status == STS_INITIALIZE)
- return (1);
- /* Unrecoverable hardware error, BUD not completed? */
- } while((loop_cnt > 0) && ((Status & (STS_ERROR | STS_TEST))
- != (STS_ERROR | STS_TEST)));
-
- /* Error preventing completion of BUD */
- if(retry_cnt > 0)
- {
- printk(KERN_INFO "%s: Adapter Software Reset.\n",
- dev->name);
- sktr_exec_sifcmd(dev, EXEC_SOFT_RESET);
- sktr_wait(HALF_SECOND);
- }
- } while(retry_cnt > 0);
-
- Status = inw(ioaddr + SIFSTS);
- Status &= STS_ERROR_MASK; /* Hardware error occurred! */
-
- printk(KERN_INFO "%s: Bring Up Diagnostics Error (%04X) occurred\n",
- dev->name, Status);
-
- return (-1);
-}
-
-/*
- * Copy initialisation data to adapter memory, beginning at address
- * 1:0A00; Starting DMA test and evaluating result bits.
- */
-static int sktr_init_adapter(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
-
- const unsigned char SCB_Test[6] = {0x00, 0x00, 0xC1, 0xE2, 0xD4, 0x8B};
- const unsigned char SSB_Test[8] = {0xFF, 0xFF, 0xD1, 0xD7,
- 0xC5, 0xD9, 0xC3, 0xD4};
- void *ptr = (void *)&tp->ipb;
- unsigned short *ipb_ptr = (unsigned short *)ptr;
- unsigned char *cb_ptr = (unsigned char *) &tp->scb;
- unsigned char *sb_ptr = (unsigned char *) &tp->ssb;
- unsigned short Status;
- int i, loop_cnt, retry_cnt;
- int ioaddr = dev->base_addr;
-
- /* Normalize: byte order low/high, word order high/low! (only IPB!) */
- tp->ipb.SCB_Addr = SWAPW(virt_to_bus(&tp->scb));
- tp->ipb.SSB_Addr = SWAPW(virt_to_bus(&tp->ssb));
-
- /* Maximum: three initialization retries */
- retry_cnt = INIT_MAX_RETRIES;
-
- do {
- retry_cnt--;
-
- /* Transfer initialization block */
- outw(0x0001, ioaddr + SIFADX);
-
- /* To address 0001:0A00 of adapter RAM */
- outw(0x0A00, ioaddr + SIFADD);
-
- /* Write 11 words to adapter RAM */
- for(i = 0; i < 11; i++)
- outw(ipb_ptr[i], ioaddr + SIFINC);
-
- /* Execute SCB adapter command */
- sktr_exec_sifcmd(dev, CMD_EXECUTE);
-
- loop_cnt = INIT_MAX_LOOPCNT; /* Maximum: 11 seconds */
-
- /* While remaining retries, no error and not completed */
- do {
- Status = 0;
- loop_cnt--;
- sktr_wait(HALF_SECOND);
-
- /* Mask interesting status bits */
- Status = inw(ioaddr + SIFSTS);
- Status &= STS_MASK;
- } while(((Status &(STS_INITIALIZE | STS_ERROR | STS_TEST)) != 0)
- && ((Status & STS_ERROR) == 0) && (loop_cnt != 0));
-
- if((Status & (STS_INITIALIZE | STS_ERROR | STS_TEST)) == 0)
- {
- /* Initialization completed without error */
- i = 0;
- do { /* Test if contents of SCB is valid */
- if(SCB_Test[i] != *(cb_ptr + i))
- /* DMA data error: wrong data in SCB */
- return (-1);
- i++;
- } while(i < 6);
-
- i = 0;
- do { /* Test if contents of SSB is valid */
- if(SSB_Test[i] != *(sb_ptr + i))
- /* DMA data error: wrong data in SSB */
- return (-1);
- i++;
- } while (i < 8);
-
- return (1); /* Adapter successfully initialized */
- }
- else
- {
- if((Status & STS_ERROR) != 0)
- {
- /* Initialization error occurred */
- Status = inw(ioaddr + SIFSTS);
- Status &= STS_ERROR_MASK;
- /* ShowInitialisationErrorCode(Status); */
- return (-1); /* Unrecoverable error */
- }
- else
- {
- if(retry_cnt > 0)
- {
- /* Reset adapter and try init again */
- sktr_exec_sifcmd(dev, EXEC_SOFT_RESET);
- sktr_wait(HALF_SECOND);
- }
- }
- }
- } while(retry_cnt > 0);
-
- return (-1);
-}
-
-/*
- * Check for outstanding commands in command queue and tries to execute
- * command immediately. Corresponding command flag in command queue is cleared.
- */
-static void sktr_chk_outstanding_cmds(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned long Addr = 0;
- unsigned char i = 0;
-
- if(tp->CMDqueue == 0)
- return; /* No command execution */
-
- /* If SCB in use: no command */
- if(tp->ScbInUse == 1)
- return;
-
- /* Check if adapter is opened, avoiding COMMAND_REJECT
- * interrupt by the adapter!
- */
- if(tp->AdapterOpenFlag == 0)
- {
- if(tp->CMDqueue & OC_OPEN)
- {
- /* Execute OPEN command */
- tp->CMDqueue ^= OC_OPEN;
-
- /* Copy the 18 bytes of the product ID */
- while((AdapterName[i] != '\0') && (i < PROD_ID_SIZE))
- {
- tp->ProductID[i] = AdapterName[i];
- i++;
- }
-
- Addr = htonl(virt_to_bus(&tp->ocpl));
- tp->scb.Parm[0] = LOWORD(Addr);
- tp->scb.Parm[1] = HIWORD(Addr);
- tp->scb.CMD = OPEN;
- }
- else
- /* No OPEN command queued, but adapter closed. Note:
- * We'll try to re-open the adapter in DriverPoll()
- */
- return; /* No adapter command issued */
- }
- else
- {
- /* Adapter is open; evaluate command queue: try to execute
- * outstanding commands (depending on priority!) CLOSE
- * command queued
- */
- if(tp->CMDqueue & OC_CLOSE)
- {
- tp->CMDqueue ^= OC_CLOSE;
- tp->AdapterOpenFlag = 0;
- tp->scb.Parm[0] = 0; /* Parm[0], Parm[1] are ignored */
- tp->scb.Parm[1] = 0; /* but should be set to zero! */
- tp->scb.CMD = CLOSE;
- if(!tp->HaltInProgress)
- tp->CMDqueue |= OC_OPEN; /* re-open adapter */
- else
- tp->CMDqueue = 0; /* no more commands */
- }
- else
- {
- if(tp->CMDqueue & OC_RECEIVE)
- {
- tp->CMDqueue ^= OC_RECEIVE;
- Addr = htonl(virt_to_bus(tp->RplHead));
- tp->scb.Parm[0] = LOWORD(Addr);
- tp->scb.Parm[1] = HIWORD(Addr);
- tp->scb.CMD = RECEIVE;
- }
- else
- {
- if(tp->CMDqueue & OC_TRANSMIT_HALT)
- {
- /* NOTE: TRANSMIT.HALT must be checked
- * before TRANSMIT.
- */
- tp->CMDqueue ^= OC_TRANSMIT_HALT;
- tp->scb.CMD = TRANSMIT_HALT;
-
- /* Parm[0] and Parm[1] are ignored
- * but should be set to zero!
- */
- tp->scb.Parm[0] = 0;
- tp->scb.Parm[1] = 0;
- }
- else
- {
- if(tp->CMDqueue & OC_TRANSMIT)
- {
- /* NOTE: TRANSMIT must be
- * checked after TRANSMIT.HALT
- */
- if(tp->TransmitCommandActive)
- {
- if(!tp->TransmitHaltScheduled)
- {
- tp->TransmitHaltScheduled = 1;
- sktr_exec_cmd(dev, OC_TRANSMIT_HALT) ;
- }
- tp->TransmitCommandActive = 0;
- return;
- }
-
- tp->CMDqueue ^= OC_TRANSMIT;
- sktr_cancel_tx_queue(tp);
- Addr = htonl(virt_to_bus(tp->TplBusy));
- tp->scb.Parm[0] = LOWORD(Addr);
- tp->scb.Parm[1] = HIWORD(Addr);
- tp->scb.CMD = TRANSMIT;
- tp->TransmitCommandActive = 1;
- }
- else
- {
- if(tp->CMDqueue & OC_MODIFY_OPEN_PARMS)
- {
- tp->CMDqueue ^= OC_MODIFY_OPEN_PARMS;
- tp->scb.Parm[0] = tp->ocpl.OPENOptions; /* new OPEN options*/
- tp->scb.Parm[0] |= ENABLE_FULL_DUPLEX_SELECTION;
- tp->scb.Parm[1] = 0; /* is ignored but should be zero */
- tp->scb.CMD = MODIFY_OPEN_PARMS;
- }
- else
- {
- if(tp->CMDqueue & OC_SET_FUNCT_ADDR)
- {
- tp->CMDqueue ^= OC_SET_FUNCT_ADDR;
- tp->scb.Parm[0] = LOWORD(tp->ocpl.FunctAddr);
- tp->scb.Parm[1] = HIWORD(tp->ocpl.FunctAddr);
- tp->scb.CMD = SET_FUNCT_ADDR;
- }
- else
- {
- if(tp->CMDqueue & OC_SET_GROUP_ADDR)
- {
- tp->CMDqueue ^= OC_SET_GROUP_ADDR;
- tp->scb.Parm[0] = LOWORD(tp->ocpl.GroupAddr);
- tp->scb.Parm[1] = HIWORD(tp->ocpl.GroupAddr);
- tp->scb.CMD = SET_GROUP_ADDR;
- }
- else
- {
- if(tp->CMDqueue & OC_READ_ERROR_LOG)
- {
- tp->CMDqueue ^= OC_READ_ERROR_LOG;
- Addr = htonl(virt_to_bus(&tp->errorlogtable));
- tp->scb.Parm[0] = LOWORD(Addr);
- tp->scb.Parm[1] = HIWORD(Addr);
- tp->scb.CMD = READ_ERROR_LOG;
- }
- else
- {
- printk(KERN_WARNING "CheckForOutstandingCommand: unknown Command\n");
- tp->CMDqueue = 0;
- return;
- }
- }
- }
- }
- }
- }
- }
- }
- }
-
- tp->ScbInUse = 1; /* Set semaphore: SCB in use. */
-
- /* Execute SCB and generate IRQ when done. */
- sktr_exec_sifcmd(dev, CMD_EXECUTE | CMD_SCB_REQUEST);
-
- return;
-}
-
-/*
- * IRQ conditions: signal loss on the ring, transmit or receive of beacon
- * frames (disabled if bit 1 of OPEN option is set); report error MAC
- * frame transmit (disabled if bit 2 of OPEN option is set); open or short
- * cirquit fault on the lobe is detected; remove MAC frame received;
- * error counter overflow (255); opened adapter is the only station in ring.
- * After some of the IRQs the adapter is closed!
- */
-static void sktr_ring_status_irq(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
-
- tp->CurrentRingStatus = SWAPB(tp->ssb.Parm[0]);
-
- /* First: fill up statistics */
- if(tp->ssb.Parm[0] & SIGNAL_LOSS)
- {
- printk(KERN_INFO "%s: Signal Loss\n", dev->name);
- tp->MacStat.line_errors++;
- }
-
- /* Adapter is closed, but initialized */
- if(tp->ssb.Parm[0] & LOBE_WIRE_FAULT)
- {
- printk(KERN_INFO "%s: Lobe Wire Fault, Reopen Adapter\n",
- dev->name);
- tp->MacStat.line_errors++;
- }
-
- if(tp->ssb.Parm[0] & RING_RECOVERY)
- printk(KERN_INFO "%s: Ring Recovery\n", dev->name);
-
- /* Counter overflow: read error log */
- if(tp->ssb.Parm[0] & COUNTER_OVERFLOW)
- {
- printk(KERN_INFO "%s: Counter Overflow\n", dev->name);
- sktr_exec_cmd(dev, OC_READ_ERROR_LOG);
- }
-
- /* Adapter is closed, but initialized */
- if(tp->ssb.Parm[0] & REMOVE_RECEIVED)
- printk(KERN_INFO "%s: Remove Received, Reopen Adapter\n",
- dev->name);
-
- /* Adapter is closed, but initialized */
- if(tp->ssb.Parm[0] & AUTO_REMOVAL_ERROR)
- printk(KERN_INFO "%s: Auto Removal Error, Reopen Adapter\n",
- dev->name);
-
- if(tp->ssb.Parm[0] & HARD_ERROR)
- printk(KERN_INFO "%s: Hard Error\n", dev->name);
-
- if(tp->ssb.Parm[0] & SOFT_ERROR)
- printk(KERN_INFO "%s: Soft Error\n", dev->name);
-
- if(tp->ssb.Parm[0] & TRANSMIT_BEACON)
- printk(KERN_INFO "%s: Transmit Beacon\n", dev->name);
-
- if(tp->ssb.Parm[0] & SINGLE_STATION)
- printk(KERN_INFO "%s: Single Station\n", dev->name);
-
- /* Check if adapter has been closed */
- if(tp->ssb.Parm[0] & ADAPTER_CLOSED)
- {
- printk(KERN_INFO "%s: Adapter closed (Reopening),"
- "QueueSkb %d, CurrentRingStat %x\n",
- dev->name, tp->QueueSkb, tp->CurrentRingStatus);
- tp->AdapterOpenFlag = 0;
- sktr_open_adapter(dev);
- }
-
- return;
-}
-
-/*
- * Issued if adapter has encountered an unrecoverable hardware
- * or software error.
- */
-static void sktr_chk_irq(struct net_device *dev)
-{
- int i;
- unsigned short AdapterCheckBlock[4];
- unsigned short ioaddr = dev->base_addr;
- struct net_local *tp = (struct net_local *)dev->priv;
-
- tp->AdapterOpenFlag = 0; /* Adapter closed now */
-
- /* Page number of adapter memory */
- outw(0x0001, ioaddr + SIFADX);
- /* Address offset */
- outw(CHECKADDR, ioaddr + SIFADR);
-
- /* Reading 8 byte adapter check block. */
- for(i = 0; i < 4; i++)
- AdapterCheckBlock[i] = inw(ioaddr + SIFINC);
-
- if(sktr_debug > 3)
- {
- printk("%s: AdapterCheckBlock: ", dev->name);
- for (i = 0; i < 4; i++)
- printk("%04X", AdapterCheckBlock[i]);
- printk("\n");
- }
-
- switch(AdapterCheckBlock[0])
- {
- case DIO_PARITY:
- printk(KERN_INFO "%s: DIO parity error\n", dev->name);
- break;
-
- case DMA_READ_ABORT:
- printk(KERN_INFO "%s DMA read operation aborted:\n",
- dev->name);
- switch (AdapterCheckBlock[1])
- {
- case 0:
- printk(KERN_INFO "Timeout\n");
- printk(KERN_INFO "Address: %04X %04X\n",
- AdapterCheckBlock[2],
- AdapterCheckBlock[3]);
- break;
-
- case 1:
- printk(KERN_INFO "Parity error\n");
- printk(KERN_INFO "Address: %04X %04X\n",
- AdapterCheckBlock[2],
- AdapterCheckBlock[3]);
- break;
-
- case 2:
- printk(KERN_INFO "Bus error\n");
- printk(KERN_INFO "Address: %04X %04X\n",
- AdapterCheckBlock[2],
- AdapterCheckBlock[3]);
- break;
-
- default:
- printk(KERN_INFO "Unknown error.\n");
- break;
- }
- break;
-
- case DMA_WRITE_ABORT:
- printk(KERN_INFO "%s: DMA write operation aborted: \n",
- dev->name);
- switch (AdapterCheckBlock[1])
- {
- case 0:
- printk(KERN_INFO "Timeout\n");
- printk(KERN_INFO "Address: %04X %04X\n",
- AdapterCheckBlock[2],
- AdapterCheckBlock[3]);
- break;
-
- case 1:
- printk(KERN_INFO "Parity error\n");
- printk(KERN_INFO "Address: %04X %04X\n",
- AdapterCheckBlock[2],
- AdapterCheckBlock[3]);
- break;
-
- case 2:
- printk(KERN_INFO "Bus error\n");
- printk(KERN_INFO "Address: %04X %04X\n",
- AdapterCheckBlock[2],
- AdapterCheckBlock[3]);
- break;
-
- default:
- printk(KERN_INFO "Unknown error.\n");
- break;
- }
- break;
-
- case ILLEGAL_OP_CODE:
- printk("%s: Illegal operation code in firmware\n",
- dev->name);
- /* Parm[0-3]: adapter internal register R13-R15 */
- break;
-
- case PARITY_ERRORS:
- printk("%s: Adapter internal bus parity error\n",
- dev->name);
- /* Parm[0-3]: adapter internal register R13-R15 */
- break;
-
- case RAM_DATA_ERROR:
- printk("%s: RAM data error\n", dev->name);
- /* Parm[0-1]: MSW/LSW address of RAM location. */
- break;
-
- case RAM_PARITY_ERROR:
- printk("%s: RAM parity error\n", dev->name);
- /* Parm[0-1]: MSW/LSW address of RAM location. */
- break;
-
- case RING_UNDERRUN:
- printk("%s: Internal DMA underrun detected\n",
- dev->name);
- break;
-
- case INVALID_IRQ:
- printk("%s: Unrecognized interrupt detected\n",
- dev->name);
- /* Parm[0-3]: adapter internal register R13-R15 */
- break;
-
- case INVALID_ERROR_IRQ:
- printk("%s: Unrecognized error interrupt detected\n",
- dev->name);
- /* Parm[0-3]: adapter internal register R13-R15 */
- break;
-
- case INVALID_XOP:
- printk("%s: Unrecognized XOP request detected\n",
- dev->name);
- /* Parm[0-3]: adapter internal register R13-R15 */
- break;
-
- default:
- printk("%s: Unknown status", dev->name);
- break;
- }
-
- if(sktr_chipset_init(dev) == 1)
- {
- /* Restart of firmware successful */
- tp->AdapterOpenFlag = 1;
- }
-
- return;
-}
-
-/*
- * Internal adapter pointer to RAM data are copied from adapter into
- * host system.
- */
-static void sktr_read_ptr(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned short adapterram;
-
- sktr_read_ram(dev, (unsigned char *)&tp->intptrs.BurnedInAddrPtr,
- ADAPTER_INT_PTRS, 16);
- sktr_read_ram(dev, (unsigned char *)&adapterram,
- (unsigned short)SWAPB(tp->intptrs.AdapterRAMPtr), 2);
-
- printk(KERN_INFO "%s: Adapter RAM size: %d K\n",
- dev->name, SWAPB(adapterram));
-
- return;
-}
-
-/*
- * Reads a number of bytes from adapter to system memory.
- */
-static void sktr_read_ram(struct net_device *dev, unsigned char *Data,
- unsigned short Address, int Length)
-{
- int i;
- unsigned short old_sifadx, old_sifadr, InWord;
- unsigned short ioaddr = dev->base_addr;
-
- /* Save the current values */
- old_sifadx = inw(ioaddr + SIFADX);
- old_sifadr = inw(ioaddr + SIFADR);
-
- /* Page number of adapter memory */
- outw(0x0001, ioaddr + SIFADX);
- /* Address offset in adapter RAM */
- outw(Address, ioaddr + SIFADR);
-
- /* Copy len byte from adapter memory to system data area. */
- i = 0;
- for(;;)
- {
- InWord = inw(ioaddr + SIFINC);
-
- *(Data + i) = HIBYTE(InWord); /* Write first byte */
- if(++i == Length) /* All is done break */
- break;
-
- *(Data + i) = LOBYTE(InWord); /* Write second byte */
- if (++i == Length) /* All is done break */
- break;
- }
-
- /* Restore original values */
- outw(old_sifadx, ioaddr + SIFADX);
- outw(old_sifadr, ioaddr + SIFADR);
-
- return;
-}
-
-/*
- * Reads MAC address from adapter ROM.
- */
-static void sktr_read_addr(struct net_device *dev, unsigned char *Address)
-{
- int i, In;
- unsigned short ioaddr = dev->base_addr;
-
- /* Address: 0000:0000 */
- outw(0, ioaddr + SIFADX);
- outw(0, ioaddr + SIFADR);
-
- /* Read six byte MAC address data */
- for(i = 0; i < 6; i++)
- {
- In = inw(ioaddr + SIFINC);
- *(Address + i) = (unsigned char)(In >> 8);
- }
-
- return;
-}
-
-/*
- * Cancel all queued packets in the transmission queue.
- */
-static void sktr_cancel_tx_queue(struct net_local* tp)
-{
- TPL *tpl;
- struct sk_buff *skb;
-
- /*
- * NOTE: There must not be an active TRANSMIT command pending, when
- * this function is called.
- */
- if(tp->TransmitCommandActive)
- return;
-
- for(;;)
- {
- tpl = tp->TplBusy;
- if(!tpl->BusyFlag)
- break;
- /* "Remove" TPL from busy list. */
- tp->TplBusy = tpl->NextTPLPtr;
- sktr_write_tpl_status(tpl, 0); /* Clear VALID bit */
- tpl->BusyFlag = 0; /* "free" TPL */
-
- printk(KERN_INFO "Cancel tx (%08lXh).\n", (unsigned long)tpl);
-
- dev_kfree_skb(tpl->Skb);
- }
-
- for(;;)
- {
- skb = skb_dequeue(&tp->SendSkbQueue);
- if(skb == NULL)
- break;
- tp->QueueSkb++;
- dev_kfree_skb(skb);
- }
-
- return;
-}
-
-/*
- * This function is called whenever a transmit interrupt is generated by the
- * adapter. For a command complete interrupt, it is checked if we have to
- * issue a new transmit command or not.
- */
-static void sktr_tx_status_irq(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned char HighByte, HighAc, LowAc;
- TPL *tpl;
-
- /* NOTE: At this point the SSB from TRANSMIT STATUS is no longer
- * available, because the CLEAR SSB command has already been issued.
- *
- * Process all complete transmissions.
- */
-
- for(;;)
- {
- tpl = tp->TplBusy;
- if(!tpl->BusyFlag || (tpl->Status
- & (TX_VALID | TX_FRAME_COMPLETE))
- != TX_FRAME_COMPLETE)
- {
- break;
- }
-
- /* "Remove" TPL from busy list. */
- tp->TplBusy = tpl->NextTPLPtr ;
-
- if(sktr_debug > 3)
- sktr_dump(tpl->MData, SWAPB(tpl->FrameSize));
-
- /* Check the transmit status field only for directed frames*/
- if(DIRECTED_FRAME(tpl) && (tpl->Status & TX_ERROR) == 0)
- {
- HighByte = GET_TRANSMIT_STATUS_HIGH_BYTE(tpl->Status);
- HighAc = GET_FRAME_STATUS_HIGH_AC(HighByte);
- LowAc = GET_FRAME_STATUS_LOW_AC(HighByte);
-
- if((HighAc != LowAc) || (HighAc == AC_NOT_RECOGNIZED))
- {
- printk(KERN_INFO "%s: (DA=%08lX not recognized)",
- dev->name,
- *(unsigned long *)&tpl->MData[2+2]);
- }
- else
- {
- if(sktr_debug > 3)
- printk("%s: Directed frame tx'd\n",
- dev->name);
- }
- }
- else
- {
- if(!DIRECTED_FRAME(tpl))
- {
- if(sktr_debug > 3)
- printk("%s: Broadcast frame tx'd\n",
- dev->name);
- }
- }
-
- tp->MacStat.tx_packets++;
- dev_kfree_skb(tpl->Skb);
- tpl->BusyFlag = 0; /* "free" TPL */
- }
-
- dev->tbusy = 0;
- if(tp->QueueSkb < MAX_TX_QUEUE)
- sktr_hardware_send_packet(dev, tp);
-
- return;
-}
-
-/*
- * Called if a frame receive interrupt is generated by the adapter.
- * Check if the frame is valid and indicate it to system.
- */
-static void sktr_rcv_status_irq(struct net_device *dev)
-{
- struct net_local *tp = (struct net_local *)dev->priv;
- unsigned char *ReceiveDataPtr;
- struct sk_buff *skb;
- unsigned int Length, Length2;
- RPL *rpl;
- RPL *SaveHead;
-
- /* NOTE: At this point the SSB from RECEIVE STATUS is no longer
- * available, because the CLEAR SSB command has already been issued.
- *
- * Process all complete receives.
- */
-
- for(;;)
- {
- rpl = tp->RplHead;
- if(rpl->Status & RX_VALID)
- break; /* RPL still in use by adapter */
-
- /* Forward RPLHead pointer to next list. */
- SaveHead = tp->RplHead;
- tp->RplHead = rpl->NextRPLPtr;
-
- /* Get the frame size (Byte swap for Intel).
- * Do this early (see workaround comment below)
- */
- Length = (unsigned short)SWAPB(rpl->FrameSize);
-
- /* Check if the Frame_Start, Frame_End and
- * Frame_Complete bits are set.
- */
- if((rpl->Status & VALID_SINGLE_BUFFER_FRAME)
- == VALID_SINGLE_BUFFER_FRAME)
- {
- ReceiveDataPtr = rpl->MData;
-
- /* Workaround for delayed write of FrameSize on ISA
- * (FrameSize is false but valid-bit is reset)
- * Frame size is set to zero when the RPL is freed.
- * Length2 is there because there have also been
- * cases where the FrameSize was partially written
- */
- Length2 = (unsigned short)SWAPB(rpl->FrameSize);
-
- if(Length == 0 || Length != Length2)
- {
- tp->RplHead = SaveHead;
- break; /* Return to sktr_interrupt */
- }
-
- /* Drop frames sent by myself */
- if(sktr_chk_frame(dev, rpl->MData))
- {
- if(rpl->Skb != NULL)
- dev_kfree_skb(rpl->Skb);
- }
- else
- {
- sktr_update_rcv_stats(tp,ReceiveDataPtr,Length);
-
- if(sktr_debug > 3)
- printk("%s: Packet Length %04X (%d)\n",
- dev->name, Length, Length);
-
- /* Indicate the received frame to system.
- * The source routing padding is no more
- * necessary with 2.2.x kernel.
- * See: OpenOptions in sktr_init_opb()
- */
- skb = rpl->Skb;
- if(rpl->SkbStat == SKB_UNAVAILABLE)
- {
- /* Try again to allocate skb */
- skb = dev_alloc_skb(tp->MaxPacketSize);
- if(skb == NULL)
- {
- /* Update Stats ?? */
- }
- else
- {
- skb->dev = dev;
- skb_put(skb, tp->MaxPacketSize);
- rpl->SkbStat = SKB_DATA_COPY;
- ReceiveDataPtr = rpl->MData;
- }
- }
-
- if(rpl->SkbStat == SKB_DATA_COPY
- || rpl->SkbStat == SKB_DMA_DIRECT)
- {
- if(rpl->SkbStat == SKB_DATA_COPY)
- {
- memmove(skb->data, ReceiveDataPtr, Length);
- }
-
- /* Deliver frame to system */
- rpl->Skb = NULL;
- skb_trim(skb,Length);
- skb->dev = dev;
- skb->protocol = tr_type_trans(skb,dev);
- netif_rx(skb);
- }
- }
- }
- else /* Invalid frame */
- {
- if(rpl->Skb != NULL)
- dev_kfree_skb(rpl->Skb);
-
- /* Skip list. */
- if(rpl->Status & RX_START_FRAME)
- /* Frame start bit is set -> overflow. */
- tp->MacStat.rx_errors++;
- }
-
- /* Allocate new skb for rpl */
- rpl->Skb = dev_alloc_skb(tp->MaxPacketSize);
-
- /* skb == NULL ? then use local buffer */
- if(rpl->Skb == NULL)
- {
- rpl->SkbStat = SKB_UNAVAILABLE;
- rpl->FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[rpl->RPLIndex]));
- rpl->MData = tp->LocalRxBuffers[rpl->RPLIndex];
- }
- else /* skb != NULL */
- {
- rpl->Skb->dev = dev;
- skb_put(rpl->Skb, tp->MaxPacketSize);
-
- /* Data unreachable for DMA ? then use local buffer */
- if(tp->DeviceType == SK_ISA &&
- virt_to_bus(rpl->Skb->data) + tp->MaxPacketSize
- > ISA_MAX_ADDRESS)
- {
- rpl->SkbStat = SKB_DATA_COPY;
- rpl->FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[rpl->RPLIndex]));
- rpl->MData = tp->LocalRxBuffers[rpl->RPLIndex];
- }
- else
- {
- /* DMA directly in skb->data */
- rpl->SkbStat = SKB_DMA_DIRECT;
- rpl->FragList[0].DataAddr = htonl(virt_to_bus(rpl->Skb->data));
- rpl->MData = rpl->Skb->data;
- }
- }
-
- rpl->FragList[0].DataCount = SWAPB(tp->MaxPacketSize);
- rpl->FrameSize = 0;
-
- /* Pass the last RPL back to the adapter */
- tp->RplTail->FrameSize = 0;
-
- /* Reset the CSTAT field in the list. */
- sktr_write_rpl_status(tp->RplTail, RX_VALID | RX_FRAME_IRQ);
-
- /* Current RPL becomes last one in list. */
- tp->RplTail = tp->RplTail->NextRPLPtr;
-
- /* Inform adapter about RPL valid. */
- sktr_exec_sifcmd(dev, CMD_RX_VALID);
- }
-
- return;
-}
-
-/*
- * This function should be used whenever the status of any RPL must be
- * modified by the driver, because the compiler may otherwise change the
- * order of instructions such that writing the RPL status may be executed
- * at an undesireable time. When this function is used, the status is
- * always written when the function is called.
- */
-static void sktr_write_rpl_status(RPL *rpl, unsigned int Status)
-{
- rpl->Status = Status;
-
- return;
-}
-
-/*
- * The function updates the statistic counters in mac->MacStat.
- * It differtiates between directed and broadcast/multicast ( ==functional)
- * frames.
- */
-static void sktr_update_rcv_stats(struct net_local *tp, unsigned char DataPtr[],
- unsigned int Length)
-{
- tp->MacStat.rx_packets++;
-
- /* Test functional bit */
- if(DataPtr[2] & GROUP_BIT)
- tp->MacStat.multicast++;
-
- return;
-}
-
-/*
- * Check if it is a frame of myself. Compare source address with my current
- * address in reverse direction, and mask out the TR_RII.
- */
-static unsigned char sktr_chk_frame(struct net_device *dev, unsigned char *Addr)
-{
- int i;
-
- for(i = 5; i > 0; i--)
- {
- if(Addr[8 + i] != dev->dev_addr[i])
- return (0);
- }
-
- /* Mask out RIF bit. */
- if((Addr[8] & ~TR_RII) != (unsigned char)(dev->dev_addr[0]))
- return (0);
-
- return (1); /* It is my frame. */
-}
-
-/*
- * Dump Packet (data)
- */
-static void sktr_dump(unsigned char *Data, int length)
-{
- int i, j;
-
- for (i = 0, j = 0; i < length / 8; i++, j += 8)
- {
- printk(KERN_DEBUG "%02x %02x %02x %02x %02x %02x %02x %02x\n",
- Data[j+0],Data[j+1],Data[j+2],Data[j+3],
- Data[j+4],Data[j+5],Data[j+6],Data[j+7]);
- }
-
- return;
-}
-
-#ifdef MODULE
-
-static struct net_device* dev_sktr[SKTR_MAX_ADAPTERS];
-static int io[SKTR_MAX_ADAPTERS] = { 0, 0 };
-static int irq[SKTR_MAX_ADAPTERS] = { 0, 0 };
-static int mem[SKTR_MAX_ADAPTERS] = { 0, 0 };
-
-MODULE_PARM(io, "1-" __MODULE_STRING(SKTR_MAX_ADAPTERS) "i");
-MODULE_PARM(irq, "1-" __MODULE_STRING(SKTR_MAX_ADAPTERS) "i");
-MODULE_PARM(mem, "1-" __MODULE_STRING(SKTR_MAX_ADAPTERS) "i");
-
-int init_module(void)
-{
- int i;
-
- for(i = 0; i < SKTR_MAX_ADAPTERS; i++)
- {
- irq[i] = 0;
- mem[i] = 0;
- dev_sktr[i] = NULL;
- dev_sktr[i] = init_trdev(dev_sktr[i], 0);
- if(dev_sktr[i] == NULL)
- return (-ENOMEM);
-
- dev_sktr[i]->base_addr = io[i];
- dev_sktr[i]->irq = irq[i];
- dev_sktr[i]->mem_start = mem[i];
- dev_sktr[i]->init = &sktr_probe;
-
- if(register_trdev(dev_sktr[i]) != 0)
- {
- kfree_s(dev_sktr[i], sizeof(struct net_device));
- dev_sktr[i] = NULL;
- if(i == 0)
- {
- printk("sktr: register_trdev() returned non-zero.\n");
- return (-EIO);
- }
- else
- return (0);
- }
- }
-
- return (0);
-}
-
-void cleanup_module(void)
-{
- int i;
-
- for(i = 0; i < SKTR_MAX_ADAPTERS; i++)
- {
- if(dev_sktr[i])
- {
- unregister_trdev(dev_sktr[i]);
- release_region(dev_sktr[i]->base_addr, SKTR_IO_EXTENT);
- if(dev_sktr[i]->irq)
- free_irq(dev_sktr[i]->irq, dev_sktr[i]);
- if(dev_sktr[i]->dma > 0)
- free_dma(dev_sktr[i]->dma);
- if(dev_sktr[i]->priv)
- kfree_s(dev_sktr[i]->priv, sizeof(struct net_local));
- kfree_s(dev_sktr[i], sizeof(struct net_device));
- dev_sktr[i] = NULL;
- }
- }
-}
-#endif /* MODULE */
diff --git a/drivers/net/tokenring/sktr.h b/drivers/net/tokenring/sktr.h
index 90b5c382f..e69de29bb 100644
--- a/drivers/net/tokenring/sktr.h
+++ b/drivers/net/tokenring/sktr.h
@@ -1,1103 +0,0 @@
-/* sktr.h: SysKonnect TokenRing driver for Linux
- *
- * Authors:
- * - Christoph Goos <cgoos@syskonnect.de>
- */
-
-#ifndef __LINUX_SKTR_H
-#define __LINUX_SKTR_H
-
-#ifdef __KERNEL__
-
-#define SKTR_MAX_ADAPTERS 7
-
-#define SEND_TIMEOUT 10*HZ
-
-#define TR_RCF_LONGEST_FRAME_MASK 0x0070
-#define TR_RCF_FRAME4K 0x0030
-
-#define SK_ISA 0
-#define SK_PCI 1
-
-/*------------------------------------------------------------------*/
-/* Bit order for adapter communication with DMA */
-/* -------------------------------------------------------------- */
-/* Bit 8 | 9| 10| 11|| 12| 13| 14| 15|| 0| 1| 2| 3|| 4| 5| 6| 7| */
-/* -------------------------------------------------------------- */
-/* The bytes in a word must be byte swapped. Also, if a double */
-/* word is used for storage, then the words, as well as the bytes, */
-/* must be swapped. */
-/* Bit order for adapter communication with DIO */
-/* -------------------------------------------------------------- */
-/* Bit 0 | 1| 2| 3|| 4| 5| 6| 7|| 8| 9| 10| 11|| 12| 13| 14| 15| */
-/* -------------------------------------------------------------- */
-/*------------------------------------------------------------------*/
-
-/* Swap bytes of a word. */
-#define SWAPB(x) (((unsigned short)((x) << 8)) | ((unsigned short)((x) >> 8)))
-
-/* Swap words of a long. */
-#define SWAPW(x) (((x) << 16) | ((x) >> 16))
-
-/* Get the low byte of a word. */
-#define LOBYTE(w) ((unsigned char)(w))
-
-/* Get the high byte of a word. */
-#define HIBYTE(w) ((unsigned char)((unsigned short)(w) >> 8))
-
-/* Get the low word of a long. */
-#define LOWORD(l) ((unsigned short)(l))
-
-/* Get the high word of a long. */
-#define HIWORD(l) ((unsigned short)((unsigned long)(l) >> 16))
-
-
-
-/* Token ring adapter I/O addresses for normal mode. */
-#define SIFDAT 0L /* SIF/DMA data. */
-#define SIFINC 2L /* IO Word data with auto increment. */
-#define SIFINH 3L /* IO Byte data with auto increment. */
-#define SIFADR 4L /* SIF/DMA Address. */
-#define SIFCMD 6L /* SIF Command. */
-#define SIFSTS 6L /* SIF Status. */
-#define SIFACL 8L /* SIF Adapter Control Register. */
-#define SIFADD 10L /* SIF/DMA Address. */
-#define SIFADX 12L
-#define DMALEN 14L /* SIF DMA length. */
-#define POSREG 16L /* Adapter Program Option Select (POS)
- * Register: base IO address + 16 byte.
- */
-#define POSREG_2 24L /* only for TR4/16+ adapter
- * base IO address + 24 byte.
- */
-
-
-/* SIFCMD command codes (high-low) */
-#define CMD_INTERRUPT_ADAPTER 0x8000 /* Cause internal adapter interrupt */
-#define CMD_ADAPTER_RESET 0x4000 /* Hardware reset of adapter */
-#define CMD_SSB_CLEAR 0x2000 /* Acknowledge to adapter to
- * system interrupts.
- */
-#define CMD_EXECUTE 0x1000 /* Execute SCB command */
-#define CMD_SCB_REQUEST 0x0800 /* Request adapter to interrupt
- * system when SCB is available for
- * another command.
- */
-#define CMD_RX_CONTINUE 0x0400 /* Continue receive after odd pointer
- * stop. (odd pointer receive method)
- */
-#define CMD_RX_VALID 0x0200 /* Now actual RPL is valid. */
-#define CMD_TX_VALID 0x0100 /* Now actual TPL is valid. (valid
- * bit receive/transmit method)
- */
-#define CMD_SYSTEM_IRQ 0x0080 /* Adapter-to-attached-system
- * interrupt is reset.
- */
-#define CMD_CLEAR_SYSTEM_IRQ 0x0080 /* Clear SYSTEM_INTERRUPT bit.
- * (write: 1=ignore, 0=reset)
- */
-#define EXEC_SOFT_RESET 0xFF00 /* adapter soft reset. (restart
- * adapter after hardware reset)
- */
-
-
-/* ACL commands (high-low) */
-#define ACL_SWHLDA 0x0800 /* Software hold acknowledge. */
-#define ACL_SWDDIR 0x0400 /* Data transfer direction. */
-#define ACL_SWHRQ 0x0200 /* Pseudo DMA operation. */
-#define ACL_PSDMAEN 0x0100 /* Enable pseudo system DMA. */
-#define ACL_ARESET 0x0080 /* Adapter hardware reset command.
- * (held in reset condition as
- * long as bit is set)
- */
-#define ACL_CPHALT 0x0040 /* Communication processor halt.
- * (can only be set while ACL_ARESET
- * bit is set; prevents adapter
- * processor from executing code while
- * downloading firmware)
- */
-#define ACL_BOOT 0x0020
-#define ACL_SINTEN 0x0008 /* System interrupt enable/disable
- * (1/0): can be written if ACL_ARESET
- * is zero.
- */
-#define ACL_SPEED4 0x0003
-#define ACL_SPEED16 0x0001
-#define PS_DMA_MASK (ACL_SWHRQ | ACL_PSDMAEN)
-
-
-/* SIFSTS register return codes (high-low) */
-#define STS_SYSTEM_IRQ 0x0080 /* Adapter-to-attached-system
- * interrupt is valid.
- */
-#define STS_INITIALIZE 0x0040 /* INITIALIZE status. (ready to
- * initialize)
- */
-#define STS_TEST 0x0020 /* TEST status. (BUD not completed) */
-#define STS_ERROR 0x0010 /* ERROR status. (unrecoverable
- * HW error occurred)
- */
-#define STS_MASK 0x00F0 /* Mask interesting status bits. */
-#define STS_ERROR_MASK 0x000F /* Get Error Code by masking the
- * interrupt code bits.
- */
-#define ADAPTER_INT_PTRS 0x0A00 /* Address offset of adapter internal
- * pointers 01:0a00 (high-low) have to
- * be read after init and before open.
- */
-
-
-/* Interrupt Codes (only MAC IRQs) */
-#define STS_IRQ_ADAPTER_CHECK 0x0000 /* unrecoverable hardware or
- * software error.
- */
-#define STS_IRQ_RING_STATUS 0x0004 /* SSB is updated with ring status. */
-#define STS_IRQ_SCB_CLEAR 0x0006 /* SCB clear, following an
- * SCB_REQUEST IRQ.
- */
-#define STS_IRQ_COMMAND_STATUS 0x0008 /* SSB is updated with command
- * status.
- */
-#define STS_IRQ_RECEIVE_STATUS 0x000A /* SSB is updated with receive
- * status.
- */
-#define STS_IRQ_TRANSMIT_STATUS 0x000C /* SSB is updated with transmit
- * status
- */
-#define STS_IRQ_MASK 0x000F /* = STS_ERROR_MASK. */
-
-
-/* TRANSMIT_STATUS completion code: (SSB.Parm[0]) */
-#define COMMAND_COMPLETE 0x0080 /* TRANSMIT command completed
- * (avoid this!) issue another transmit
- * to send additional frames.
- */
-#define FRAME_COMPLETE 0x0040 /* Frame has been transmitted;
- * INTERRUPT_FRAME bit was set in the
- * CSTAT request; indication of possibly
- * more than one frame transmissions!
- * SSB.Parm[0-1]: 32 bit pointer to
- * TPL of last frame.
- */
-#define LIST_ERROR 0x0020 /* Error in one of the TPLs that
- * compose the frame; TRANSMIT
- * terminated; Parm[1-2]: 32 bit pointer
- * to TPL which starts the error
- * frame; error details in bits 8-13.
- * (14?)
- */
-#define FRAME_SIZE_ERROR 0x8000 /* FRAME_SIZE does not equal the sum of
- * the valid DATA_COUNT fields;
- * FRAME_SIZE less than header plus
- * information field. (15 bytes +
- * routing field) Or if FRAME_SIZE
- * was specified as zero in one list.
- */
-#define TX_THRESHOLD 0x4000 /* FRAME_SIZE greater than (BUFFER_SIZE
- * - 9) * TX_BUF_MAX.
- */
-#define ODD_ADDRESS 0x2000 /* Odd forward pointer value is
- * read on a list without END_FRAME
- * indication.
- */
-#define FRAME_ERROR 0x1000 /* START_FRAME bit is (not) anticipated,
- * but (not) set.
- */
-#define ACCESS_PRIORITY_ERROR 0x0800 /* Access priority requested has not
- * been allowed.
- */
-#define UNENABLED_MAC_FRAME 0x0400 /* MAC frame has source class of zero
- * or MAC frame PCF ATTN field is
- * greater than one.
- */
-#define ILLEGAL_FRAME_FORMAT 0x0200 /* Bit 0 or FC field was set to one. */
-
-
-/*
- * Since we need to support some functions even if the adapter is in a
- * CLOSED state, we have a (pseudo-) command queue which holds commands
- * that are outstandig to be executed.
- *
- * Each time a command completes, an interrupt occurs and the next
- * command is executed. The command queue is actually a simple word with
- * a bit for each outstandig command. Therefore the commands will not be
- * executed in the order they have been queued.
- *
- * The following defines the command code bits and the command queue:
- */
-#define OC_OPEN 0x0001 /* OPEN command */
-#define OC_TRANSMIT 0x0002 /* TRANSMIT command */
-#define OC_TRANSMIT_HALT 0x0004 /* TRANSMIT_HALT command */
-#define OC_RECEIVE 0x0008 /* RECEIVE command */
-#define OC_CLOSE 0x0010 /* CLOSE command */
-#define OC_SET_GROUP_ADDR 0x0020 /* SET_GROUP_ADDR command */
-#define OC_SET_FUNCT_ADDR 0x0040 /* SET_FUNCT_ADDR command */
-#define OC_READ_ERROR_LOG 0x0080 /* READ_ERROR_LOG command */
-#define OC_READ_ADAPTER 0x0100 /* READ_ADAPTER command */
-#define OC_MODIFY_OPEN_PARMS 0x0400 /* MODIFY_OPEN_PARMS command */
-#define OC_RESTORE_OPEN_PARMS 0x0800 /* RESTORE_OPEN_PARMS command */
-#define OC_SET_FIRST_16_GROUP 0x1000 /* SET_FIRST_16_GROUP command */
-#define OC_SET_BRIDGE_PARMS 0x2000 /* SET_BRIDGE_PARMS command */
-#define OC_CONFIG_BRIDGE_PARMS 0x4000 /* CONFIG_BRIDGE_PARMS command */
-
-#define OPEN 0x0300 /* C: open command. S: completion. */
-#define TRANSMIT 0x0400 /* C: transmit command. S: completion
- * status. (reject: COMMAND_REJECT if
- * adapter not opened, TRANSMIT already
- * issued or address passed in the SCB
- * not word aligned)
- */
-#define TRANSMIT_HALT 0x0500 /* C: interrupt TX TPL chain; if no
- * TRANSMIT command issued, the command
- * is ignored. (completion with TRANSMIT
- * status (0x0400)!)
- */
-#define RECEIVE 0x0600 /* C: receive command. S: completion
- * status. (reject: COMMAND_REJECT if
- * adapter not opened, RECEIVE already
- * issued or address passed in the SCB
- * not word aligned)
- */
-#define CLOSE 0x0700 /* C: close adapter. S: completion.
- * (COMMAND_REJECT if adapter not open)
- */
-#define SET_GROUP_ADDR 0x0800 /* C: alter adapter group address after
- * OPEN. S: completion. (COMMAND_REJECT
- * if adapter not open)
- */
-#define SET_FUNCT_ADDR 0x0900 /* C: alter adapter functional address
- * after OPEN. S: completion.
- * (COMMAND_REJECT if adapter not open)
- */
-#define READ_ERROR_LOG 0x0A00 /* C: read adapter error counters.
- * S: completion. (command ignored
- * if adapter not open!)
- */
-#define READ_ADAPTER 0x0B00 /* C: read data from adapter memory.
- * (important: after init and before
- * open!) S: completion. (ADAPTER_CHECK
- * interrupt if undefined storage area
- * read)
- */
-#define MODIFY_OPEN_PARMS 0x0D00 /* C: modify some adapter operational
- * parameters. (bit correspondend to
- * WRAP_INTERFACE is ignored)
- * S: completion. (reject:
- * COMMAND_REJECT)
- */
-#define RESTORE_OPEN_PARMS 0x0E00 /* C: modify some adapter operational
- * parameters. (bit correspondend
- * to WRAP_INTERFACE is ignored)
- * S: completion. (reject:
- * COMMAND_REJECT)
- */
-#define SET_FIRST_16_GROUP 0x0F00 /* C: alter the first two bytes in
- * adapter group address.
- * S: completion. (reject:
- * COMMAND_REJECT)
- */
-#define SET_BRIDGE_PARMS 0x1000 /* C: values and conditions for the
- * adapter hardware to use when frames
- * are copied for forwarding.
- * S: completion. (reject:
- * COMMAND_REJECT)
- */
-#define CONFIG_BRIDGE_PARMS 0x1100 /* C: ..
- * S: completion. (reject:
- * COMMAND_REJECT)
- */
-
-#define SPEED_4 4
-#define SPEED_16 16 /* Default transmission speed */
-
-
-/* Initialization Parameter Block (IPB); word alignment necessary! */
-#define BURST_SIZE 0x0018 /* Default burst size */
-#define BURST_MODE 0x9F00 /* Burst mode enable */
-#define DMA_RETRIES 0x0505 /* Magic DMA retry number... */
-
-#define CYCLE_TIME 3 /* Default AT-bus cycle time: 500 ns
- * (later adapter version: fix cycle time!)
- */
-#define LINE_SPEED_BIT 0x80
-
-/* Macro definition for the wait function. */
-#define ONE_SECOND_TICKS 1000000
-#define HALF_SECOND (ONE_SECOND_TICKS / 2)
-#define ONE_SECOND (ONE_SECOND_TICKS)
-#define TWO_SECONDS (ONE_SECOND_TICKS * 2)
-#define THREE_SECONDS (ONE_SECOND_TICKS * 3)
-#define FOUR_SECONDS (ONE_SECOND_TICKS * 4)
-#define FIVE_SECONDS (ONE_SECOND_TICKS * 5)
-
-#define BUFFER_SIZE 2048 /* Buffers on Adapter */
-
-#pragma pack(1)
-typedef struct {
- unsigned short Init_Options; /* Initialize with burst mode;
- * LLC disabled. (MAC only)
- */
-
- /* Interrupt vectors the adapter places on attached system bus. */
- unsigned char CMD_Status_IV; /* Interrupt vector: command status. */
- unsigned char TX_IV; /* Interrupt vector: transmit. */
- unsigned char RX_IV; /* Interrupt vector: receive. */
- unsigned char Ring_Status_IV; /* Interrupt vector: ring status. */
- unsigned char SCB_Clear_IV; /* Interrupt vector: SCB clear. */
- unsigned char Adapter_CHK_IV; /* Interrupt vector: adapter check. */
-
- unsigned short RX_Burst_Size; /* Max. number of transfer cycles. */
- unsigned short TX_Burst_Size; /* During DMA burst; even value! */
- unsigned short DMA_Abort_Thrhld; /* Number of DMA retries. */
-
- unsigned long SCB_Addr; /* SCB address: even, word aligned, high-low. */
- unsigned long SSB_Addr; /* SSB address: even, word aligned, high-low. */
-} IPB, *IPB_Ptr;
-#pragma pack()
-
-/*
- * OPEN Command Parameter List (OCPL) (can be reused, if the adapter has to
- * be reopened)
- */
-#define BUFFER_SIZE 2048 /* Buffers on Adapter. */
-#define TPL_SIZE 8+6*TX_FRAG_NUM /* Depending on fragments per TPL. */
-#define RPL_SIZE 14 /* (with TI firmware v2.26 handling
- * up to nine fragments possible)
- */
-#define TX_BUF_MIN 20 /* ??? (Stephan: calculation with */
-#define TX_BUF_MAX 40 /* BUFFER_SIZE and MAX_FRAME_SIZE) ???
- */
-#define DISABLE_EARLY_TOKEN_RELEASE 0x1000
-
-/* OPEN Options (high-low) */
-#define WRAP_INTERFACE 0x0080 /* Inserting omitted for test
- * purposes; transmit data appears
- * as receive data. (usefull for
- * testing; change: CLOSE necessary)
- */
-#define DISABLE_HARD_ERROR 0x0040 /* On HARD_ERROR & TRANSMIT_BEACON
- * no RING.STATUS interrupt.
- */
-#define DISABLE_SOFT_ERROR 0x0020 /* On SOFT_ERROR, no RING.STATUS
- * interrupt.
- */
-#define PASS_ADAPTER_MAC_FRAMES 0x0010 /* Passing unsupported MAC frames
- * to system.
- */
-#define PASS_ATTENTION_FRAMES 0x0008 /* All changed attention MAC frames are
- * passed to the system.
- */
-#define PAD_ROUTING_FIELD 0x0004 /* Routing field is padded to 18
- * bytes.
- */
-#define FRAME_HOLD 0x0002 /* Adapter waits for entire frame before
- * initiating DMA transfer; otherwise:
- * DMA transfer initiation if internal
- * buffer filled.
- */
-#define CONTENDER 0x0001 /* Adapter participates in the monitor
- * contention process.
- */
-#define PASS_BEACON_MAC_FRAMES 0x8000 /* Adapter passes beacon MAC frames
- * to the system.
- */
-#define EARLY_TOKEN_RELEASE 0x1000 /* Only valid in 16 Mbps operation;
- * 0 = ETR. (no effect in 4 Mbps
- * operation)
- */
-#define COPY_ALL_MAC_FRAMES 0x0400 /* All MAC frames are copied to
- * the system. (after OPEN: duplicate
- * address test (DAT) MAC frame is
- * first received frame copied to the
- * system)
- */
-#define COPY_ALL_NON_MAC_FRAMES 0x0200 /* All non MAC frames are copied to
- * the system.
- */
-#define PASS_FIRST_BUF_ONLY 0x0100 /* Passes only first internal buffer
- * of each received frame; FrameSize
- * of RPLs must contain internal
- * BUFFER_SIZE bits for promiscous mode.
- */
-#define ENABLE_FULL_DUPLEX_SELECTION 0x2000 /* Enable the use of full-duplex
- * settings with bits in byte 22 in
- * ocpl. (new feature in firmware
- * version 3.09)
- */
-
-/* Full-duplex settings */
-#define OPEN_FULL_DUPLEX_OFF 0x0000
-#define OPEN_FULL_DUPLEX_ON 0x00c0
-#define OPEN_FULL_DUPLEX_AUTO 0x0080
-
-#define PROD_ID_SIZE 18 /* Length of product ID. */
-
-#define TX_FRAG_NUM 3 /* Number of fragments used in one TPL. */
-#define TX_MORE_FRAGMENTS 0x8000 /* Bit set in DataCount to indicate more
- * fragments following.
- */
-
-#define ISA_MAX_ADDRESS 0x00ffffff
-
-#pragma pack(1)
-typedef struct {
- unsigned short OPENOptions;
- unsigned char NodeAddr[6]; /* Adapter node address; use ROM
- * address
- */
- unsigned long GroupAddr; /* Multicast: high order
- * bytes = 0xC000
- */
- unsigned long FunctAddr; /* High order bytes = 0xC000 */
- unsigned short RxListSize; /* RPL size: 0 (=26), 14, 20 or
- * 26 bytes read by the adapter.
- * (Depending on the number of
- * fragments/list)
- */
- unsigned short TxListSize; /* TPL size */
- unsigned short BufSize; /* Is automatically rounded up to the
- * nearest nK boundary.
- */
- unsigned short FullDuplex;
- unsigned short Reserved;
- unsigned char TXBufMin; /* Number of adapter buffers reserved
- * for transmission a minimum of 2
- * buffers must be allocated.
- */
- unsigned char TXBufMax; /* Maximum number of adapter buffers
- * for transmit; a minimum of 2 buffers
- * must be available for receive.
- * Default: 6
- */
- unsigned short ProdIDAddr[2]; /* Pointer to product ID. */
-} OPB, *OPB_Ptr;
-#pragma pack()
-
-/*
- * SCB: adapter commands enabled by the host system started by writing
- * CMD_INTERRUPT_ADAPTER | CMD_EXECUTE (|SCB_REQUEST) to the SIFCMD IO
- * register. (special case: | CMD_SYSTEM_IRQ for initialization)
- */
-#pragma pack(1)
-typedef struct {
- unsigned short CMD; /* Command code */
- unsigned short Parm[2]; /* Pointer to Command Parameter Block */
-} SCB; /* System Command Block (32 bit physical address; big endian)*/
-#pragma pack()
-
-/*
- * SSB: adapter command return status can be evaluated after COMMAND_STATUS
- * adapter to system interrupt after reading SSB, the availability of the SSB
- * has to be told the adapter by writing CMD_INTERRUPT_ADAPTER | CMD_SSB_CLEAR
- * in the SIFCMD IO register.
- */
-#pragma pack(1)
-typedef struct {
- unsigned short STS; /* Status code */
- unsigned short Parm[3]; /* Parameter or pointer to Status Parameter
- * Block.
- */
-} SSB; /* System Status Block (big endian - physical address) */
-#pragma pack()
-
-typedef struct {
- unsigned short BurnedInAddrPtr; /* Pointer to adapter burned in
- * address. (BIA)
- */
- unsigned short SoftwareLevelPtr;/* Pointer to software level data. */
- unsigned short AdapterAddrPtr; /* Pointer to adapter addresses. */
- unsigned short AdapterParmsPtr; /* Pointer to adapter parameters. */
- unsigned short MACBufferPtr; /* Pointer to MAC buffer. (internal) */
- unsigned short LLCCountersPtr; /* Pointer to LLC counters. */
- unsigned short SpeedFlagPtr; /* Pointer to data rate flag.
- * (4/16 Mbps)
- */
- unsigned short AdapterRAMPtr; /* Pointer to adapter RAM found. (KB) */
-} INTPTRS; /* Adapter internal pointers */
-
-#pragma pack(1)
-typedef struct {
- unsigned char Line_Error; /* Line error: code violation in
- * frame or in a token, or FCS error.
- */
- unsigned char Internal_Error; /* IBM specific. (Reserved_1) */
- unsigned char Burst_Error;
- unsigned char ARI_FCI_Error; /* ARI/FCI bit zero in AMP or
- * SMP MAC frame.
- */
- unsigned char AbortDelimeters; /* IBM specific. (Reserved_2) */
- unsigned char Reserved_3;
- unsigned char Lost_Frame_Error; /* Receive of end of transmitted
- * frame failed.
- */
- unsigned char Rx_Congest_Error; /* Adapter in repeat mode has not
- * enough buffer space to copy incoming
- * frame.
- */
- unsigned char Frame_Copied_Error;/* ARI bit not zero in frame
- * addressed to adapter.
- */
- unsigned char Frequency_Error; /* IBM specific. (Reserved_4) */
- unsigned char Token_Error; /* (active only in monitor station) */
- unsigned char Reserved_5;
- unsigned char DMA_Bus_Error; /* DMA bus errors not exceeding the
- * abort thresholds.
- */
- unsigned char DMA_Parity_Error; /* DMA parity errors not exceeding
- * the abort thresholds.
- */
-} ERRORTAB; /* Adapter error counters */
-#pragma pack()
-
-
-/*--------------------- Send and Receive definitions -------------------*/
-#pragma pack(1)
-typedef struct {
- unsigned short DataCount; /* Value 0, even and odd values are
- * permitted; value is unaltered most
- * significant bit set: following
- * fragments last fragment: most
- * significant bit is not evaluated.
- * (???)
- */
- unsigned long DataAddr; /* Pointer to frame data fragment;
- * even or odd.
- */
-} Fragment;
-#pragma pack()
-
-#define MAX_FRAG_NUMBERS 9 /* Maximal number of fragments possible to use
- * in one RPL/TPL. (depending on TI firmware
- * version)
- */
-#define MAX_TX_QUEUE 10 /* Maximal number of skb's queued in driver. */
-
-/*
- * AC (1), FC (1), Dst (6), Src (6), RIF (18), Data (4472) = 4504
- * The packet size can be one of the follows: 548, 1502, 2084, 4504, 8176,
- * 11439, 17832. Refer to TMS380 Second Generation Token Ring User's Guide
- * Page 2-27.
- */
-#define HEADER_SIZE (1 + 1 + 6 + 6)
-#define SRC_SIZE 18
-#define MIN_DATA_SIZE 516
-#define DEFAULT_DATA_SIZE 4472
-#define MAX_DATA_SIZE 17800
-
-#define DEFAULT_PACKET_SIZE (HEADER_SIZE + SRC_SIZE + DEFAULT_DATA_SIZE)
-#define MIN_PACKET_SIZE (HEADER_SIZE + SRC_SIZE + MIN_DATA_SIZE)
-#define MAX_PACKET_SIZE (HEADER_SIZE + SRC_SIZE + MAX_DATA_SIZE)
-
-/*
- * Macros to deal with the frame status field.
- */
-#define AC_NOT_RECOGNIZED 0x00
-#define GROUP_BIT 0x80
-#define GET_TRANSMIT_STATUS_HIGH_BYTE(Ts) ((unsigned char)((Ts) >> 8))
-#define GET_FRAME_STATUS_HIGH_AC(Fs) ((unsigned char)(((Fs) & 0xC0) >> 6))
-#define GET_FRAME_STATUS_LOW_AC(Fs) ((unsigned char)(((Fs) & 0x0C) >> 2))
-#define DIRECTED_FRAME(Context) (!((Context)->MData[2] & GROUP_BIT))
-
-
-/*--------------------- Send Functions ---------------------------------*/
-/* define TX_CSTAT _REQUEST (R) and _COMPLETE (C) values (high-low) */
-
-#define TX_VALID 0x0080 /* R: set via TRANSMIT.VALID interrupt.
- * C: always reset to zero!
- */
-#define TX_FRAME_COMPLETE 0x0040 /* R: must be reset to zero.
- * C: set to one.
- */
-#define TX_START_FRAME 0x0020 /* R: start of a frame: 1
- * C: unchanged.
- */
-#define TX_END_FRAME 0x0010 /* R: end of a frame: 1
- * C: unchanged.
- */
-#define TX_FRAME_IRQ 0x0008 /* R: request interrupt generation
- * after transmission.
- * C: unchanged.
- */
-#define TX_ERROR 0x0004 /* R: reserved.
- * C: set to one if Error occurred.
- */
-#define TX_INTERFRAME_WAIT 0x0004
-#define TX_PASS_CRC 0x0002 /* R: set if CRC value is already
- * calculated. (valid only in
- * FRAME_START TPL)
- * C: unchanged.
- */
-#define TX_PASS_SRC_ADDR 0x0001 /* R: adapter uses explicit frame
- * source address and does not overwrite
- * with the adapter node address.
- * (valid only in FRAME_START TPL)
- *
- * C: unchanged.
- */
-#define TX_STRIP_FS 0xFF00 /* R: reserved.
- * C: if no Transmission Error,
- * field contains copy of FS byte after
- * stripping of frame.
- */
-
-/*
- * Structure of Transmit Parameter Lists (TPLs) (only one frame every TPL,
- * but possibly multiple TPLs for one frame) the length of the TPLs has to be
- * initialized in the OPL. (OPEN parameter list)
- */
-#define TPL_NUM 9 /* Number of Transmit Parameter Lists.
- * !! MUST BE >= 3 !!
- */
-
-#pragma pack(1)
-typedef struct s_TPL TPL;
-
-struct s_TPL { /* Transmit Parameter List (align on even word boundaries) */
- unsigned long NextTPLAddr; /* Pointer to next TPL in chain; if
- * pointer is odd: this is the last
- * TPL. Pointing to itself can cause
- * problems!
- */
- volatile unsigned short Status; /* Initialized by the adapter:
- * CSTAT_REQUEST important: update least
- * significant bit first! Set by the
- * adapter: CSTAT_COMPLETE status.
- */
- unsigned short FrameSize; /* Number of bytes to be transmitted
- * as a frame including AC/FC,
- * Destination, Source, Routing field
- * not including CRC, FS, End Delimiter
- * (valid only if START_FRAME bit in
- * CSTAT nonzero) must not be zero in
- * any list; maximum value: (BUFFER_SIZE
- * - 8) * TX_BUF_MAX sum of DataCount
- * values in FragmentList must equal
- * Frame_Size value in START_FRAME TPL!
- * frame data fragment list.
- */
-
- /* TPL/RPL size in OPEN parameter list depending on maximal
- * numbers of fragments used in one parameter list.
- */
- Fragment FragList[TX_FRAG_NUM]; /* Maximum: nine frame fragments in one
- * TPL actual version of firmware: 9
- * fragments possible.
- */
-#pragma pack()
-
- /* Special proprietary data and precalculations */
-
- TPL *NextTPLPtr; /* Pointer to next TPL in chain. */
- unsigned char *MData;
- struct sk_buff *Skb;
- unsigned char TPLIndex;
- volatile unsigned char BusyFlag;/* Flag: TPL busy? */
-};
-
-/* ---------------------Receive Functions-------------------------------*
- * define RECEIVE_CSTAT_REQUEST (R) and RECEIVE_CSTAT_COMPLETE (C) values.
- * (high-low)
- */
-#define RX_VALID 0x0080 /* R: set; tell adapter with
- * RECEIVE.VALID interrupt.
- * C: reset to zero.
- */
-#define RX_FRAME_COMPLETE 0x0040 /* R: must be reset to zero,
- * C: set to one.
- */
-#define RX_START_FRAME 0x0020 /* R: must be reset to zero.
- * C: set to one on the list.
- */
-#define RX_END_FRAME 0x0010 /* R: must be reset to zero.
- * C: set to one on the list
- * that ends the frame.
- */
-#define RX_FRAME_IRQ 0x0008 /* R: request interrupt generation
- * after receive.
- * C: unchanged.
- */
-#define RX_INTERFRAME_WAIT 0x0004 /* R: after receiving a frame:
- * interrupt and wait for a
- * RECEIVE.CONTINUE.
- * C: unchanged.
- */
-#define RX_PASS_CRC 0x0002 /* R: if set, the adapter includes
- * the CRC in data passed. (last four
- * bytes; valid only if FRAME_START is
- * set)
- * C: set, if CRC is included in
- * received data.
- */
-#define RX_PASS_SRC_ADDR 0x0001 /* R: adapter uses explicit frame
- * source address and does not
- * overwrite with the adapter node
- * address. (valid only if FRAME_START
- * is set)
- * C: unchanged.
- */
-#define RX_RECEIVE_FS 0xFC00 /* R: reserved; must be reset to zero.
- * C: on lists with START_FRAME, field
- * contains frame status field from
- * received frame; otherwise cleared.
- */
-#define RX_ADDR_MATCH 0x0300 /* R: reserved; must be reset to zero.
- * C: address match code mask.
- */
-#define RX_STATUS_MASK 0x00FF /* Mask for receive status bits. */
-
-#define RX_INTERN_ADDR_MATCH 0x0100 /* C: internally address match. */
-#define RX_EXTERN_ADDR_MATCH 0x0200 /* C: externally matched via
- * XMATCH/XFAIL interface.
- */
-#define RX_INTEXT_ADDR_MATCH 0x0300 /* C: internally and externally
- * matched.
- */
-#define RX_READY (RX_VALID | RX_FRAME_IRQ) /* Ready for receive. */
-
-/* Constants for Command Status Interrupt.
- * COMMAND_REJECT status field bit functions (SSB.Parm[0])
- */
-#define ILLEGAL_COMMAND 0x0080 /* Set if an unknown command
- * is issued to the adapter
- */
-#define ADDRESS_ERROR 0x0040 /* Set if any address field in
- * the SCB is odd. (not word aligned)
- */
-#define ADAPTER_OPEN 0x0020 /* Command issued illegal with
- * open adapter.
- */
-#define ADAPTER_CLOSE 0x0010 /* Command issued illegal with
- * closed adapter.
- */
-#define SAME_COMMAND 0x0008 /* Command issued with same command
- * already executing.
- */
-
-/* OPEN_COMPLETION values (SSB.Parm[0], MSB) */
-#define NODE_ADDR_ERROR 0x0040 /* Wrong address or BIA read
- * zero address.
- */
-#define LIST_SIZE_ERROR 0x0020 /* If List_Size value not in 0,
- * 14, 20, 26.
- */
-#define BUF_SIZE_ERROR 0x0010 /* Not enough available memory for
- * two buffers.
- */
-#define TX_BUF_COUNT_ERROR 0x0004 /* Remaining receive buffers less than
- * two.
- */
-#define OPEN_ERROR 0x0002 /* Error during ring insertion; more
- * information in bits 8-15.
- */
-
-/* Standard return codes */
-#define GOOD_COMPLETION 0x0080 /* =OPEN_SUCCESSFULL */
-#define INVALID_OPEN_OPTION 0x0001 /* OPEN options are not supported by
- * the adapter.
- */
-
-/* OPEN phases; details of OPEN_ERROR (SSB.Parm[0], LSB) */
-#define OPEN_PHASES_MASK 0xF000 /* Check only the bits 8-11. */
-#define LOBE_MEDIA_TEST 0x1000
-#define PHYSICAL_INSERTION 0x2000
-#define ADDRESS_VERIFICATION 0x3000
-#define PARTICIPATION_IN_RING_POLL 0x4000
-#define REQUEST_INITIALISATION 0x5000
-#define FULLDUPLEX_CHECK 0x6000
-
-/* OPEN error codes; details of OPEN_ERROR (SSB.Parm[0], LSB) */
-#define OPEN_ERROR_CODES_MASK 0x0F00 /* Check only the bits 12-15. */
-#define OPEN_FUNCTION_FAILURE 0x0100 /* Unable to transmit to itself or
- * frames received before insertion.
- */
-#define OPEN_SIGNAL_LOSS 0x0200 /* Signal loss condition detected at
- * receiver.
- */
-#define OPEN_TIMEOUT 0x0500 /* Insertion timer expired before
- * logical insertion.
- */
-#define OPEN_RING_FAILURE 0x0600 /* Unable to receive own ring purge
- * MAC frames.
- */
-#define OPEN_RING_BEACONING 0x0700 /* Beacon MAC frame received after
- * ring insertion.
- */
-#define OPEN_DUPLICATE_NODEADDR 0x0800 /* Other station in ring found
- * with the same address.
- */
-#define OPEN_REQUEST_INIT 0x0900 /* RPS present but does not respond. */
-#define OPEN_REMOVE_RECEIVED 0x0A00 /* Adapter received a remove adapter
- * MAC frame.
- */
-#define OPEN_FULLDUPLEX_SET 0x0D00 /* Got this with full duplex on when
- * trying to connect to a normal ring.
- */
-
-/* SET_BRIDGE_PARMS return codes: */
-#define BRIDGE_INVALID_MAX_LEN 0x4000 /* MAX_ROUTING_FIELD_LENGTH odd,
- * less than 6 or > 30.
- */
-#define BRIDGE_INVALID_SRC_RING 0x2000 /* SOURCE_RING number zero, too large
- * or = TARGET_RING.
- */
-#define BRIDGE_INVALID_TRG_RING 0x1000 /* TARGET_RING number zero, too large
- * or = SOURCE_RING.
- */
-#define BRIDGE_INVALID_BRDGE_NO 0x0800 /* BRIDGE_NUMBER too large. */
-#define BRIDGE_INVALID_OPTIONS 0x0400 /* Invalid bridge options. */
-#define BRIDGE_DIAGS_FAILED 0x0200 /* Diagnostics of TMS380SRA failed. */
-#define BRIDGE_NO_SRA 0x0100 /* The TMS380SRA does not exist in HW
- * configuration.
- */
-
-/*
- * Bring Up Diagnostics error codes.
- */
-#define BUD_INITIAL_ERROR 0x0
-#define BUD_CHECKSUM_ERROR 0x1
-#define BUD_ADAPTER_RAM_ERROR 0x2
-#define BUD_INSTRUCTION_ERROR 0x3
-#define BUD_CONTEXT_ERROR 0x4
-#define BUD_PROTOCOL_ERROR 0x5
-#define BUD_INTERFACE_ERROR 0x6
-
-/* BUD constants */
-#define BUD_MAX_RETRIES 3
-#define BUD_MAX_LOOPCNT 6
-#define BUD_TIMEOUT 3000
-
-/* Initialization constants */
-#define INIT_MAX_RETRIES 3 /* Maximum three retries. */
-#define INIT_MAX_LOOPCNT 22 /* Maximum loop counts. */
-
-/* RING STATUS field values (high/low) */
-#define SIGNAL_LOSS 0x0080 /* Loss of signal on the ring
- * detected.
- */
-#define HARD_ERROR 0x0040 /* Transmitting or receiving beacon
- * frames.
- */
-#define SOFT_ERROR 0x0020 /* Report error MAC frame
- * transmitted.
- */
-#define TRANSMIT_BEACON 0x0010 /* Transmitting beacon frames on the
- * ring.
- */
-#define LOBE_WIRE_FAULT 0x0008 /* Open or short circuit in the
- * cable to concentrator; adapter
- * closed.
- */
-#define AUTO_REMOVAL_ERROR 0x0004 /* Lobe wrap test failed, deinserted;
- * adapter closed.
- */
-#define REMOVE_RECEIVED 0x0001 /* Received a remove ring station MAC
- * MAC frame request; adapter closed.
- */
-#define COUNTER_OVERFLOW 0x8000 /* Overflow of one of the adapters
- * error counters; READ.ERROR.LOG.
- */
-#define SINGLE_STATION 0x4000 /* Adapter is the only station on the
- * ring.
- */
-#define RING_RECOVERY 0x2000 /* Claim token MAC frames on the ring;
- * reset after ring purge frame.
- */
-
-#define ADAPTER_CLOSED (LOBE_WIRE_FAULT | AUTO_REMOVAL_ERROR |\
- REMOVE_RECEIVED)
-
-/* Adapter_check_block.Status field bit assignments: */
-#define DIO_PARITY 0x8000 /* Adapter detects bad parity
- * through direct I/O access.
- */
-#define DMA_READ_ABORT 0x4000 /* Aborting DMA read operation
- * from system Parm[0]: 0=timeout,
- * 1=parity error, 2=bus error;
- * Parm[1]: 32 bit pointer to host
- * system address at failure.
- */
-#define DMA_WRITE_ABORT 0x2000 /* Aborting DMA write operation
- * to system. (parameters analogous to
- * DMA_READ_ABORT)
- */
-#define ILLEGAL_OP_CODE 0x1000 /* Illegal operation code in the
- * the adapters firmware Parm[0]-2:
- * communications processor registers
- * R13-R15.
- */
-#define PARITY_ERRORS 0x0800 /* Adapter detects internal bus
- * parity error.
- */
-#define RAM_DATA_ERROR 0x0080 /* Valid only during RAM testing;
- * RAM data error Parm[0-1]: 32 bit
- * pointer to RAM location.
- */
-#define RAM_PARITY_ERROR 0x0040 /* Valid only during RAM testing;
- * RAM parity error Parm[0-1]: 32 bit
- * pointer to RAM location.
- */
-#define RING_UNDERRUN 0x0020 /* Internal DMA underrun when
- * transmitting onto ring.
- */
-#define INVALID_IRQ 0x0008 /* Unrecognized interrupt generated
- * internal to adapter Parm[0-2]:
- * adapter register R13-R15.
- */
-#define INVALID_ERROR_IRQ 0x0004 /* Unrecognized error interrupt
- * generated Parm[0-2]: adapter register
- * R13-R15.
- */
-#define INVALID_XOP 0x0002 /* Unrecognized XOP request in
- * communication processor Parm[0-2]:
- * adapter register R13-R15.
- */
-#define CHECKADDR 0x05E0 /* Adapter check status information
- * address offset.
- */
-#define ROM_PAGE_0 0x0000 /* Adapter ROM page 0. */
-
-/*
- * RECEIVE.STATUS interrupt result SSB values: (high-low)
- * (RECEIVE_COMPLETE field bit definitions in SSB.Parm[0])
- */
-#define RX_COMPLETE 0x0080 /* SSB.Parm[0]; SSB.Parm[1]: 32
- * bit pointer to last RPL.
- */
-#define RX_SUSPENDED 0x0040 /* SSB.Parm[0]; SSB.Parm[1]: 32
- * bit pointer to RPL with odd
- * forward pointer.
- */
-
-/* Valid receive CSTAT: */
-#define RX_FRAME_CONTROL_BITS (RX_VALID | RX_START_FRAME | RX_END_FRAME | \
- RX_FRAME_COMPLETE)
-#define VALID_SINGLE_BUFFER_FRAME (RX_START_FRAME | RX_END_FRAME | \
- RX_FRAME_COMPLETE)
-
-typedef enum SKB_STAT SKB_STAT;
-enum SKB_STAT {
- SKB_UNAVAILABLE,
- SKB_DMA_DIRECT,
- SKB_DATA_COPY
-};
-
-/* Receive Parameter List (RPL) The length of the RPLs has to be initialized
- * in the OPL. (OPEN parameter list)
- */
-#define RPL_NUM 3
-
-#define RX_FRAG_NUM 1 /* Maximal number of used fragments in one RPL.
- * (up to firmware v2.24: 3, now: up to 9)
- */
-
-#pragma pack(1)
-typedef struct s_RPL RPL;
-struct s_RPL { /* Receive Parameter List */
- unsigned long NextRPLAddr; /* Pointer to next RPL in chain
- * (normalized = physical 32 bit
- * address) if pointer is odd: this
- * is last RPL. Pointing to itself can
- * cause problems!
- */
- volatile unsigned short Status; /* Set by creation of Receive Parameter
- * List RECEIVE_CSTAT_COMPLETE set by
- * adapter in lists that start or end
- * a frame.
- */
- volatile unsigned short FrameSize; /* Number of bytes received as a
- * frame including AC/FC, Destination,
- * Source, Routing field not including
- * CRC, FS (Frame Status), End Delimiter
- * (valid only if START_FRAME bit in
- * CSTAT nonzero) must not be zero in
- * any list; maximum value: (BUFFER_SIZE
- * - 8) * TX_BUF_MAX sum of DataCount
- * values in FragmentList must equal
- * Frame_Size value in START_FRAME TPL!
- * frame data fragment list
- */
-
- /* TPL/RPL size in OPEN parameter list depending on maximal numbers
- * of fragments used in one parameter list.
- */
- Fragment FragList[RX_FRAG_NUM]; /* Maximum: nine frame fragments in
- * one TPL. Actual version of firmware:
- * 9 fragments possible.
- */
-#pragma pack()
-
- /* Special proprietary data and precalculations. */
- RPL *NextRPLPtr; /* Logical pointer to next RPL in chain. */
- unsigned char *MData;
- struct sk_buff *Skb;
- SKB_STAT SkbStat;
- int RPLIndex;
-};
-
-/* Information that need to be kept for each board. */
-typedef struct net_local {
-#pragma pack(1)
- IPB ipb; /* Initialization Parameter Block. */
- SCB scb; /* System Command Block: system to adapter
- * communication.
- */
- SSB ssb; /* System Status Block: adapter to system
- * communication.
- */
- OPB ocpl; /* Open Options Parameter Block. */
-
- ERRORTAB errorlogtable; /* Adapter statistic error counters.
- * (read from adapter memory)
- */
- unsigned char ProductID[PROD_ID_SIZE + 1]; /* Product ID */
-#pragma pack()
-
- TPL Tpl[TPL_NUM];
- TPL *TplFree;
- TPL *TplBusy;
- unsigned char LocalTxBuffers[TPL_NUM][DEFAULT_PACKET_SIZE];
-
- RPL Rpl[RPL_NUM];
- RPL *RplHead;
- RPL *RplTail;
- unsigned char LocalRxBuffers[RPL_NUM][DEFAULT_PACKET_SIZE];
-
- int DataRate;
- unsigned char ScbInUse;
- unsigned short CMDqueue;
-
- unsigned int DeviceType;
-
- unsigned long AdapterOpenFlag:1;
- unsigned long AdapterVirtOpenFlag:1;
- unsigned long OpenCommandIssued:1;
- unsigned long TransmitCommandActive:1;
- unsigned long TransmitHaltScheduled:1;
- unsigned long HaltInProgress:1;
- unsigned long LobeWireFaultLogged:1;
- unsigned long ReOpenInProgress:1;
- unsigned long Sleeping:1;
-
- unsigned long LastOpenStatus;
- unsigned short CurrentRingStatus;
- unsigned long MaxPacketSize;
-
- unsigned long StartTime;
- unsigned long LastSendTime;
-
- struct sk_buff_head SendSkbQueue;
- unsigned short QueueSkb;
-
- struct tr_statistics MacStat; /* MAC statistics structure */
-
- struct timer_list timer;
-
- wait_queue_head_t wait_for_tok_int;
-
- INTPTRS intptrs; /* Internal adapter pointer. Must be read
- * before OPEN command.
- */
-} NET_LOCAL;
-
-#endif /* __KERNEL__ */
-#endif /* __LINUX_SKTR_H */
diff --git a/drivers/net/tokenring/sktr_firmware.h b/drivers/net/tokenring/sktr_firmware.h
index 25dd973d4..e69de29bb 100644
--- a/drivers/net/tokenring/sktr_firmware.h
+++ b/drivers/net/tokenring/sktr_firmware.h
@@ -1,3616 +0,0 @@
-/*
- * The firmware this driver downloads into the tokenring card is a
- * separate program and is not GPL'd source code, even though the Linux
- * side driver and the routine that loads this data into the card are.
- *
- * This firmware is licensed to you strictly for use in conjunction
- * with the use of SysKonnect TokenRing adapters. There is no
- * waranty expressed or implied about its fitness for any purpose.
- */
-
-/* sktr_firmware.h: SysKonnect TokenRing driver firmware dump for Linux.
- *
- * Notes:
- * - Loaded from sktr_reset_adapter upon adapter reset.
- *
- * Authors:
- * - Christoph Goos <cgoos@syskonnect.de>
- */
-
-#include <linux/config.h>
-
-#if defined(CONFIG_SKTR) || defined(CONFIG_SKTR_MODULE)
-
-unsigned char sktr_code[] = {
- 0x00, 0x00, 0x00, 0xA0, 0x00, 0x20, 0x68, 0x54,
- 0x73, 0x69, 0x63, 0x20, 0x64, 0x6F, 0x20, 0x65,
- 0x73, 0x69, 0x72, 0x20, 0x6C, 0x65, 0x61, 0x65,
- 0x65, 0x73, 0x20, 0x64, 0x6E, 0x75, 0x65, 0x64,
- 0x20, 0x72, 0x69, 0x6C, 0x65, 0x63, 0x63, 0x6E,
- 0x20, 0x65, 0x6E, 0x4F, 0x79, 0x6C, 0x20, 0x2C,
- 0x6C, 0x41, 0x20, 0x6C, 0x69, 0x72, 0x68, 0x67,
- 0x73, 0x74, 0x72, 0x20, 0x73, 0x65, 0x72, 0x65,
- 0x65, 0x76, 0x2E, 0x64, 0x60, 0x01, 0x42, 0x01,
- 0x00, 0x08, 0x08, 0x16, 0xB0, 0x03, 0xE0, 0x04,
- 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0xFF, 0xFF,
- 0xFC, 0x13, 0x80, 0x03, 0xA0, 0x07, 0x42, 0x01,
- 0x00, 0x08, 0x20, 0x07, 0x00, 0x00, 0xE0, 0x04,
- 0x00, 0x01, 0x8B, 0x07, 0x00, 0x3D, 0x60, 0x01,
- 0x42, 0x01, 0x80, 0x00, 0x09, 0x13, 0x8B, 0x07,
- 0x00, 0x2D, 0x20, 0xC0, 0x4E, 0x01, 0x80, 0x02,
- 0x41, 0x0F, 0x02, 0x11, 0x8B, 0x07, 0x00, 0x3D,
- 0x0B, 0xC8, 0x4A, 0x01, 0x00, 0x02, 0x00, 0x90,
- 0xA0, 0x09, 0x00, 0xC8, 0x66, 0x01, 0xE0, 0x02,
- 0xA0, 0x00, 0xA0, 0x07, 0x04, 0x01, 0x20, 0x00,
- 0xA0, 0x01, 0x40, 0x01, 0x00, 0xFE, 0x20, 0x48,
- 0x2A, 0xE0, 0x42, 0x01, 0xE0, 0x04, 0x02, 0x01,
- 0xE0, 0x04, 0x60, 0x09, 0xE0, 0x04, 0x82, 0x01,
- 0x60, 0x01, 0x1C, 0x01, 0x04, 0x00, 0x03, 0x16,
- 0xE0, 0x01, 0x40, 0x01, 0x00, 0x0C, 0xA0, 0x06,
- 0xBC, 0xA1, 0xA0, 0x07, 0x04, 0x01, 0x2D, 0x00,
- 0x20, 0xC2, 0x00, 0xE0, 0x88, 0x02, 0x11, 0xE3,
- 0x14, 0x16, 0xA0, 0x07, 0x04, 0x01, 0x2E, 0x00,
- 0x60, 0x01, 0x42, 0x01, 0x00, 0x03, 0x0D, 0x16,
- 0xA0, 0x07, 0x04, 0x01, 0x21, 0x00, 0x88, 0x07,
- 0x00, 0xA0, 0x89, 0x07, 0xFE, 0xFF, 0xA8, 0x09,
- 0xA9, 0x09, 0x8A, 0x07, 0x02, 0xE0, 0xA0, 0x06,
- 0x84, 0xEC, 0x56, 0x10, 0x88, 0x07, 0x00, 0x90,
- 0x89, 0x07, 0xFE, 0x9F, 0xA8, 0x09, 0xA9, 0x09,
- 0x8A, 0x07, 0x78, 0xE0, 0xA0, 0x06, 0x84, 0xEC,
- 0x4B, 0x10, 0xA0, 0x05, 0x04, 0x01, 0x88, 0x07,
- 0x08, 0x00, 0x89, 0x07, 0x7A, 0x00, 0x00, 0x03,
- 0x01, 0x00, 0xA0, 0x06, 0xD2, 0xAC, 0x40, 0x10,
- 0xA0, 0x06, 0xBC, 0xA1, 0xE0, 0x02, 0xF4, 0x03,
- 0x88, 0x07, 0xA0, 0x00, 0x89, 0x07, 0xFE, 0x00,
- 0xA0, 0x06, 0xD2, 0xAC, 0x35, 0x10, 0xE0, 0x02,
- 0xA0, 0x00, 0xE0, 0x04, 0x7E, 0x01, 0xC8, 0x04,
- 0x09, 0x02, 0xF2, 0x03, 0x48, 0x62, 0xE0, 0xC1,
- 0x40, 0x01, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x04,
- 0x18, 0xCE, 0x09, 0x06, 0xFD, 0x16, 0xA0, 0x01,
- 0x40, 0x01, 0x00, 0x40, 0x07, 0xC8, 0x40, 0x01,
- 0x88, 0x07, 0xF4, 0x03, 0x89, 0x07, 0xFE, 0x3F,
- 0xA0, 0x06, 0xD2, 0xAC, 0x19, 0x10, 0xE0, 0x02,
- 0xA0, 0x00, 0xA0, 0x06, 0xFA, 0xAD, 0x14, 0x10,
- 0x08, 0xC8, 0x44, 0x04, 0x09, 0xC8, 0x46, 0x04,
- 0xA0, 0x06, 0x28, 0xAD, 0x0D, 0x10, 0x81, 0x07,
- 0x7C, 0xE0, 0xB1, 0xC0, 0x26, 0x13, 0x01, 0xC8,
- 0xE0, 0x00, 0xA0, 0x05, 0x04, 0x01, 0x92, 0x06,
- 0x03, 0x10, 0x60, 0xC0, 0xE0, 0x00, 0xF5, 0x10,
- 0xE0, 0x01, 0x04, 0x01, 0x10, 0x00, 0xB0, 0x03,
- 0xFF, 0x10, 0xA0, 0x01, 0x04, 0x01, 0x00, 0x80,
- 0x80, 0x03, 0x80, 0x07, 0xA0, 0x00, 0xC2, 0x04,
- 0x80, 0xCC, 0x81, 0x07, 0xAA, 0xA1, 0x82, 0x02,
- 0x1E, 0x00, 0x02, 0x16, 0x81, 0x07, 0xB4, 0xA1,
- 0x81, 0xC4, 0x81, 0x8C, 0xE9, 0x16, 0x82, 0x02,
- 0x7C, 0x00, 0xF2, 0x16, 0x00, 0x03, 0x0F, 0x00,
- 0x5B, 0x04, 0x81, 0x07, 0x08, 0xE1, 0x82, 0x07,
- 0x04, 0x00, 0xE0, 0x04, 0x80, 0x01, 0xE0, 0x04,
- 0x82, 0x01, 0x91, 0xC4, 0xB1, 0x8C, 0xD8, 0x16,
- 0x82, 0x02, 0x7C, 0x00, 0xFA, 0x16, 0x20, 0xC8,
- 0x04, 0xE0, 0x82, 0x01, 0x20, 0xE8, 0x0C, 0xE0,
- 0x82, 0x01, 0x20, 0xC8, 0x10, 0xE0, 0x80, 0x01,
- 0x81, 0x07, 0x86, 0xE0, 0xB1, 0xC0, 0x07, 0x13,
- 0xB1, 0xC4, 0xFC, 0x10, 0xA0, 0x07, 0x04, 0x01,
- 0x2E, 0x00, 0x60, 0x04, 0xAA, 0xA1, 0x81, 0x07,
- 0x34, 0xE0, 0x82, 0x07, 0xFC, 0x05, 0x83, 0x07,
- 0x0A, 0x00, 0xB1, 0xCC, 0x43, 0x06, 0xFD, 0x16,
- 0x02, 0x02, 0x00, 0x06, 0x60, 0xD0, 0x4E, 0x01,
- 0xED, 0x13, 0x21, 0x02, 0x00, 0xF7, 0x21, 0x02,
- 0x00, 0xC0, 0x81, 0xDC, 0x60, 0xD0, 0x4F, 0x01,
- 0xC1, 0xC0, 0x41, 0x09, 0x21, 0x02, 0x00, 0xF0,
- 0x81, 0xDC, 0x43, 0x02, 0x00, 0x0F, 0x23, 0x02,
- 0x00, 0xF0, 0x83, 0xDC, 0x01, 0x02, 0x32, 0x0C,
- 0xA0, 0xC0, 0x44, 0x04, 0xE0, 0xC0, 0x46, 0x04,
- 0x03, 0xC1, 0x02, 0x61, 0x84, 0x05, 0x04, 0xC8,
- 0x48, 0x04, 0x03, 0xC1, 0x84, 0x05, 0x04, 0xA1,
- 0x01, 0xA1, 0x04, 0xC8, 0x30, 0x0C, 0x03, 0xC1,
- 0x84, 0x05, 0xF1, 0x04, 0x04, 0x06, 0xFD, 0x16,
- 0x08, 0x02, 0x00, 0xA0, 0xA8, 0x09, 0x60, 0xC2,
- 0x30, 0x0C, 0x29, 0x02, 0xFF, 0x03, 0xA9, 0x09,
- 0x29, 0x02, 0x40, 0x00, 0x80, 0x07, 0x00, 0x90,
- 0xA0, 0x09, 0x8A, 0x07, 0xFE, 0x9F, 0x2A, 0x02,
- 0xFF, 0x03, 0xAA, 0x09, 0x01, 0x02, 0x32, 0x0C,
- 0x05, 0x02, 0x00, 0x00, 0x03, 0xC1, 0x84, 0x05,
- 0x11, 0x07, 0xC1, 0x05, 0x85, 0x05, 0x04, 0x06,
- 0x0B, 0x13, 0x85, 0x80, 0xF9, 0x1A, 0x05, 0x80,
- 0xF8, 0x1A, 0x85, 0x82, 0xF5, 0x1A, 0x05, 0x82,
- 0xF4, 0x1A, 0x45, 0x82, 0xF1, 0x1A, 0xF1, 0x10,
- 0x20, 0x2D, 0x02, 0x00, 0x60, 0x01, 0x40, 0x01,
- 0x00, 0x40, 0x06, 0x16, 0x8A, 0x07, 0x00, 0x08,
- 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40, 0x48, 0x10,
- 0x60, 0x01, 0x42, 0x01, 0x00, 0x80, 0x06, 0x16,
- 0x8A, 0x07, 0x00, 0x10, 0xA0, 0x01, 0x42, 0x01,
- 0x00, 0x80, 0x3E, 0x10, 0x60, 0x01, 0x02, 0x01,
- 0x00, 0x10, 0x0A, 0x16, 0x60, 0x01, 0x00, 0x01,
- 0x00, 0x04, 0x06, 0x16, 0x8A, 0x07, 0x00, 0x80,
- 0xA0, 0x01, 0x02, 0x01, 0x00, 0x10, 0x30, 0x10,
- 0x60, 0x01, 0x02, 0x01, 0x00, 0x08, 0x0A, 0x16,
- 0x60, 0x01, 0x00, 0x01, 0x00, 0x04, 0x06, 0x16,
- 0xA0, 0x01, 0x02, 0x01, 0x00, 0x08, 0x0D, 0x02,
- 0x01, 0x00, 0x0D, 0x10, 0x60, 0x01, 0x02, 0x01,
- 0x00, 0x04, 0x16, 0x16, 0x60, 0x01, 0x00, 0x01,
- 0x00, 0x08, 0x12, 0x16, 0xA0, 0x01, 0x02, 0x01,
- 0x00, 0x04, 0x0D, 0x02, 0x02, 0x00, 0xA0, 0xC3,
- 0x0E, 0x01, 0xE0, 0xC3, 0x10, 0x01, 0x8A, 0x07,
- 0x00, 0x20, 0x60, 0x01, 0x00, 0x01, 0x00, 0x80,
- 0x0B, 0x13, 0x8A, 0x07, 0x00, 0x40, 0x08, 0x10,
- 0x8A, 0x07, 0x04, 0x00, 0x05, 0x10, 0x8A, 0x07,
- 0x02, 0x00, 0x02, 0x10, 0x8A, 0x07, 0x08, 0x00,
- 0x00, 0x03, 0x00, 0x00, 0xE0, 0x04, 0x82, 0x01,
- 0x8B, 0x07, 0xE0, 0x05, 0xCA, 0xCE, 0xCD, 0xCE,
- 0xCE, 0xCE, 0xCF, 0xC6, 0x20, 0xC3, 0x58, 0x07,
- 0x20, 0x23, 0x04, 0xE0, 0x12, 0x13, 0x8B, 0x07,
- 0x18, 0xFF, 0x8A, 0x02, 0x00, 0x80, 0x0A, 0x13,
- 0x8B, 0x05, 0xCD, 0xA2, 0x8A, 0x02, 0x00, 0x40,
- 0x05, 0x13, 0x8A, 0x02, 0x00, 0x20, 0x02, 0x13,
- 0x8B, 0x07, 0x1D, 0xFF, 0x0B, 0xC8, 0x04, 0x01,
- 0x0D, 0x10, 0x20, 0xD3, 0x05, 0x01, 0xFD, 0x11,
- 0x20, 0xD8, 0xDF, 0x07, 0x17, 0x01, 0x8B, 0x07,
- 0x80, 0xFF, 0x0B, 0xC8, 0x04, 0x01, 0x20, 0xE8,
- 0x0A, 0xE0, 0x00, 0x01, 0xE0, 0xC2, 0x04, 0x01,
- 0xE0, 0x22, 0x86, 0xE1, 0xFB, 0x16, 0xE0, 0x02,
- 0xA0, 0x00, 0xE0, 0x04, 0x82, 0x01, 0x20, 0xE8,
- 0x0A, 0xE0, 0x00, 0x01, 0xE0, 0xC2, 0x00, 0x01,
- 0xE0, 0x22, 0x06, 0xE0, 0xF8, 0x13, 0xA0, 0x01,
- 0x40, 0x01, 0x00, 0xF6, 0x60, 0x04, 0x90, 0xA0,
- 0x00, 0x03, 0x02, 0x00, 0xA0, 0x07, 0x02, 0x01,
- 0xFF, 0xDF, 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03,
- 0x00, 0x03, 0x02, 0x00, 0x09, 0x07, 0xA0, 0xC2,
- 0x04, 0x01, 0x8A, 0x01, 0x80, 0x00, 0x4A, 0x52,
- 0x89, 0xD2, 0x0A, 0xC8, 0x04, 0x01, 0xA0, 0xD2,
- 0x04, 0x01, 0xF9, 0x16, 0x49, 0x05, 0x89, 0x01,
- 0x00, 0x80, 0x49, 0x01, 0x00, 0x40, 0x0E, 0x13,
- 0x09, 0xF8, 0x3A, 0x07, 0x60, 0xC2, 0x36, 0x07,
- 0x03, 0x16, 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03,
- 0xE0, 0x04, 0x36, 0x07, 0x54, 0x04, 0x90, 0x03,
- 0xFF, 0xFF, 0x80, 0x03, 0x60, 0x22, 0x86, 0xE1,
- 0xC2, 0x13, 0xE0, 0x04, 0x82, 0x01, 0x60, 0x04,
- 0xE0, 0xA3, 0x00, 0x03, 0x02, 0x00, 0xA0, 0x07,
- 0x62, 0x09, 0xE8, 0x03, 0xC9, 0x04, 0xA0, 0xC1,
- 0x34, 0x06, 0x04, 0x16, 0xA0, 0x06, 0x50, 0xB5,
- 0xE0, 0x04, 0x20, 0x09, 0x86, 0x07, 0xE8, 0x05,
- 0xA0, 0x01, 0x40, 0x01, 0x00, 0x80, 0x20, 0xC2,
- 0x84, 0x01, 0x20, 0x48, 0x08, 0xE0, 0x84, 0x01,
- 0x20, 0x22, 0x08, 0xE0, 0x08, 0x13, 0x60, 0x01,
- 0xAE, 0x01, 0x01, 0x00, 0x04, 0x16, 0xE0, 0x01,
- 0x34, 0x06, 0x00, 0x80, 0x06, 0x10, 0x20, 0xC2,
- 0x32, 0x09, 0x06, 0x13, 0xE0, 0x01, 0x34, 0x06,
- 0x00, 0x08, 0xE0, 0x04, 0x30, 0x06, 0x09, 0x07,
- 0xA0, 0x05, 0xEE, 0x05, 0x20, 0x06, 0xEC, 0x05,
- 0x02, 0x16, 0x16, 0xC2, 0x03, 0x16, 0x49, 0xC2,
- 0x12, 0x16, 0x80, 0x03, 0x98, 0xC5, 0xE8, 0xC1,
- 0x02, 0x00, 0xE0, 0xE9, 0x14, 0xE0, 0x04, 0x00,
- 0xD7, 0x04, 0x27, 0x02, 0x08, 0x00, 0xA0, 0x06,
- 0xE6, 0xB4, 0x16, 0xC2, 0x04, 0x13, 0x28, 0xC8,
- 0x08, 0x00, 0xEC, 0x05, 0xEF, 0x13, 0x54, 0x04,
- 0x00, 0x03, 0x02, 0x00, 0xE0, 0xC1, 0x86, 0x01,
- 0x47, 0x02, 0x0E, 0x00, 0xA7, 0xC2, 0x90, 0xE1,
- 0x5A, 0x04, 0x8A, 0x07, 0x00, 0xA0, 0x0A, 0xC8,
- 0x86, 0x01, 0xC7, 0xA1, 0x27, 0x02, 0x98, 0xE1,
- 0x37, 0xE8, 0x34, 0x06, 0x17, 0xE8, 0xD2, 0x06,
- 0xE0, 0x04, 0x30, 0x06, 0x60, 0x04, 0xF2, 0xA9,
- 0x0A, 0xE8, 0xD2, 0x06, 0xE0, 0x01, 0x34, 0x06,
- 0x00, 0x08, 0xE0, 0x04, 0x30, 0x06, 0x20, 0xE0,
- 0x18, 0xE0, 0x5B, 0x04, 0xA0, 0x05, 0x20, 0x09,
- 0x20, 0x88, 0x20, 0x09, 0x16, 0xE0, 0xE5, 0x1A,
- 0xE0, 0x04, 0x20, 0x09, 0xA0, 0x06, 0xD0, 0xD5,
- 0x80, 0x03, 0xA0, 0x05, 0x32, 0x09, 0x80, 0x03,
- 0x01, 0xC3, 0xFB, 0x13, 0x60, 0x01, 0x6A, 0x09,
- 0x01, 0x00, 0x78, 0x13, 0xA0, 0x05, 0x32, 0x09,
- 0x75, 0x10, 0x41, 0xC0, 0x06, 0x13, 0x01, 0xC8,
- 0x6C, 0x01, 0xE0, 0xC2, 0x02, 0xFC, 0x01, 0x11,
- 0x7B, 0x10, 0x60, 0x01, 0x9C, 0x01, 0x40, 0x00,
- 0x79, 0x16, 0x20, 0xD8, 0x2F, 0x09, 0x83, 0x01,
- 0x41, 0xC0, 0x04, 0x13, 0x01, 0xC8, 0x8A, 0x01,
- 0x01, 0xC8, 0x18, 0x09, 0x86, 0x07, 0x43, 0x00,
- 0x06, 0xC8, 0x6C, 0x01, 0x07, 0x02, 0x02, 0xFC,
- 0x17, 0xC2, 0x60, 0x04, 0xFA, 0xA6, 0xE0, 0x04,
- 0x18, 0x09, 0xC7, 0x61, 0x08, 0x07, 0x60, 0x01,
- 0x06, 0xFC, 0x40, 0x00, 0x02, 0x13, 0x08, 0x02,
- 0x01, 0x00, 0x09, 0x10, 0x4C, 0xC2, 0x20, 0xC3,
- 0x00, 0xFC, 0x2A, 0x13, 0x0C, 0xC8, 0x6C, 0x01,
- 0xE0, 0xC2, 0x02, 0xFC, 0x1B, 0x11, 0x4B, 0x01,
- 0x00, 0x01, 0xF4, 0x16, 0xC8, 0x22, 0x12, 0x13,
- 0xCB, 0x01, 0x00, 0x40, 0x0B, 0xC8, 0x02, 0xFC,
- 0x0D, 0x10, 0xE0, 0xC1, 0x18, 0x09, 0x01, 0xC3,
- 0x21, 0x13, 0x4C, 0xC2, 0x15, 0x13, 0x0C, 0xC8,
- 0x6C, 0x01, 0xE0, 0xC2, 0x02, 0xFC, 0x06, 0x11,
- 0xCC, 0x81, 0xD5, 0x13, 0x4C, 0xC2, 0x20, 0xC3,
- 0x00, 0xFC, 0xF4, 0x10, 0x09, 0xC8, 0x6C, 0x01,
- 0xE0, 0xC2, 0x02, 0xFC, 0x1E, 0x16, 0xA0, 0x07,
- 0x02, 0xFC, 0x00, 0x80, 0x09, 0xC3, 0x19, 0x10,
- 0x09, 0xC8, 0x6C, 0x01, 0xE0, 0xC2, 0x02, 0xFC,
- 0x05, 0x16, 0xA0, 0x07, 0x02, 0xFC, 0x00, 0x80,
- 0x09, 0xC3, 0x0F, 0x10, 0xE0, 0xC2, 0x02, 0x0C,
- 0x01, 0x11, 0x1E, 0x10, 0x20, 0xD8, 0x00, 0xE2,
- 0x83, 0x01, 0x8B, 0x09, 0x8B, 0x09, 0x8B, 0x09,
- 0x8B, 0x09, 0xA0, 0x07, 0x8A, 0x01, 0x43, 0x00,
- 0x13, 0x10, 0x0C, 0xC8, 0x8A, 0x01, 0x0C, 0xC8,
- 0x18, 0x09, 0x0E, 0x10, 0x00, 0x03, 0x02, 0x00,
- 0xE0, 0xC0, 0x6C, 0x01, 0x20, 0xC3, 0x8A, 0x01,
- 0x20, 0x98, 0x83, 0x01, 0x00, 0xE2, 0x81, 0x13,
- 0x60, 0x01, 0x9C, 0x01, 0x40, 0x00, 0xB9, 0x13,
- 0x01, 0x83, 0x31, 0x16, 0x03, 0xC8, 0x6C, 0x01,
- 0x40, 0x01, 0x10, 0x00, 0x14, 0x16, 0xE0, 0xC2,
- 0x2E, 0x06, 0x11, 0x13, 0xE0, 0xC2, 0xF8, 0x05,
- 0x0E, 0x13, 0xE0, 0x01, 0x3A, 0x07, 0x00, 0x80,
- 0x80, 0x01, 0x10, 0x00, 0xE0, 0xC2, 0x36, 0x07,
- 0x06, 0x13, 0xE0, 0x04, 0x36, 0x07, 0x80, 0x01,
- 0x20, 0x00, 0x60, 0x04, 0xF2, 0xA9, 0x40, 0x01,
- 0x20, 0x00, 0xF9, 0x13, 0x90, 0x03, 0xFF, 0x11,
- 0x80, 0x03, 0x08, 0x01, 0x00, 0x04, 0x19, 0x16,
- 0x60, 0x01, 0x6A, 0x09, 0x01, 0x00, 0x15, 0x16,
- 0x88, 0x01, 0x00, 0x1A, 0xC8, 0x01, 0x00, 0x01,
- 0xC8, 0xC5, 0x0F, 0x10, 0xE0, 0x04, 0x18, 0x09,
- 0xC0, 0x01, 0x04, 0x00, 0x15, 0x10, 0x81, 0xC1,
- 0x01, 0xC8, 0x6C, 0x01, 0x07, 0x02, 0x00, 0xFC,
- 0x77, 0xC0, 0x17, 0xC2, 0x48, 0x01, 0x00, 0x18,
- 0xE4, 0x13, 0x40, 0x01, 0x40, 0x00, 0x15, 0x16,
- 0x80, 0x01, 0x45, 0x00, 0x46, 0xC1, 0x20, 0xD0,
- 0x07, 0xFC, 0x60, 0x81, 0x18, 0x09, 0xE6, 0x13,
- 0xE0, 0xC2, 0x08, 0xFC, 0x08, 0x11, 0xE0, 0xC2,
- 0x0E, 0xFC, 0x07, 0x15, 0x06, 0x13, 0xE0, 0xC2,
- 0x14, 0xFC, 0x03, 0x15, 0x02, 0x13, 0xC0, 0x01,
- 0x01, 0x00, 0x48, 0x01, 0x00, 0x01, 0x11, 0x13,
- 0x40, 0x01, 0x80, 0x40, 0x69, 0x13, 0x60, 0x04,
- 0x66, 0xA6, 0x48, 0x01, 0x01, 0x00, 0x03, 0x16,
- 0x40, 0x01, 0x00, 0x40, 0x0B, 0x16, 0xC8, 0x01,
- 0x00, 0x40, 0xA0, 0x05, 0x32, 0x09, 0xC8, 0xC5,
- 0x05, 0x10, 0xC0, 0x01, 0x40, 0x00, 0x40, 0x01,
- 0x04, 0x00, 0xEF, 0x13, 0xB7, 0x01, 0x20, 0x00,
- 0xD7, 0xC2, 0xC4, 0x62, 0x0B, 0x05, 0x2B, 0x02,
- 0xFC, 0xFF, 0xCB, 0xC5, 0x02, 0x15, 0x46, 0x81,
- 0x6A, 0x13, 0x08, 0x01, 0x00, 0x5E, 0x67, 0x16,
- 0x08, 0x01, 0x88, 0x00, 0x13, 0x16, 0x86, 0x02,
- 0x43, 0x00, 0x25, 0x16, 0x40, 0x01, 0x00, 0x40,
- 0x0B, 0x13, 0x08, 0x01, 0x03, 0x00, 0x08, 0x13,
- 0x84, 0xC2, 0x2A, 0x02, 0xD8, 0xFF, 0x06, 0xC8,
- 0x6C, 0x01, 0x0A, 0x68, 0x04, 0xFC, 0x73, 0x10,
- 0x60, 0x04, 0xD2, 0xA8, 0x40, 0x01, 0x01, 0x00,
- 0xEA, 0x13, 0x08, 0x01, 0x02, 0x00, 0xE7, 0x16,
- 0x48, 0x01, 0x01, 0x00, 0xE4, 0x16, 0x40, 0x01,
- 0x00, 0x40, 0x04, 0x16, 0x60, 0x01, 0xA8, 0x09,
- 0x80, 0x00, 0xDD, 0x13, 0x8A, 0x07, 0x80, 0x00,
- 0xA0, 0x06, 0x32, 0xA5, 0xD8, 0x10, 0x00, 0xC0,
- 0xE7, 0x11, 0x60, 0xC2, 0x6A, 0x09, 0x40, 0x01,
- 0x00, 0x40, 0x0A, 0x13, 0x48, 0x01, 0x01, 0x00,
- 0x34, 0x13, 0x48, 0x01, 0x02, 0x00, 0x0A, 0x13,
- 0x49, 0x01, 0x04, 0x00, 0xD9, 0x16, 0x06, 0x10,
- 0x49, 0x01, 0x02, 0x00, 0x03, 0x13, 0x08, 0x01,
- 0x03, 0x00, 0x6E, 0x13, 0x49, 0x01, 0x01, 0x00,
- 0x12, 0x13, 0x40, 0x01, 0x80, 0x40, 0x01, 0x16,
- 0x46, 0xC1, 0xE0, 0x04, 0x00, 0xFC, 0x87, 0x07,
- 0xF8, 0x05, 0x17, 0xC2, 0x14, 0x13, 0xC7, 0x05,
- 0x17, 0xC8, 0x6C, 0x01, 0x05, 0xC8, 0x00, 0xFC,
- 0xC6, 0xC5, 0x60, 0x04, 0x66, 0xA6, 0x07, 0x02,
- 0x02, 0xFC, 0xE0, 0xA1, 0x2C, 0x09, 0xE0, 0xCD,
- 0xEE, 0x05, 0xE0, 0xC5, 0x04, 0xFC, 0x20, 0xC8,
- 0x2C, 0x09, 0x04, 0xFC, 0xE2, 0x10, 0xC5, 0xCD,
- 0xC6, 0xC5, 0x60, 0x04, 0x66, 0xA6, 0x60, 0x04,
- 0xB6, 0xA8, 0x06, 0xC8, 0x6C, 0x01, 0x85, 0x81,
- 0x1A, 0x13, 0xE0, 0xC2, 0x04, 0xFC, 0x17, 0x15,
- 0x86, 0xC2, 0x8A, 0xA2, 0xAA, 0xC1, 0x32, 0x0C,
- 0x06, 0xC8, 0x6C, 0x01, 0x0B, 0xA8, 0x04, 0xFC,
- 0x1A, 0x09, 0x0A, 0xC8, 0x6C, 0x01, 0xE0, 0xC2,
- 0x02, 0xFC, 0xE0, 0x04, 0x00, 0xFC, 0x06, 0xC8,
- 0x6C, 0x01, 0x0B, 0xC8, 0x02, 0xFC, 0xA0, 0x06,
- 0x3E, 0xB4, 0x06, 0xC8, 0x6C, 0x01, 0xE0, 0x04,
- 0x00, 0xFC, 0xA0, 0x01, 0x02, 0xFC, 0x02, 0x00,
- 0x87, 0x07, 0x30, 0x06, 0xE7, 0x01, 0x04, 0x00,
- 0x40, 0x00, 0xD7, 0x04, 0x27, 0x02, 0x0C, 0x00,
- 0x05, 0xC2, 0x60, 0x01, 0x6A, 0x09, 0x04, 0x00,
- 0x03, 0x16, 0xE0, 0x01, 0x02, 0xFC, 0x20, 0x00,
- 0xA0, 0x06, 0xFC, 0xB4, 0xC0, 0x01, 0x20, 0x00,
- 0x60, 0x04, 0x66, 0xA6, 0x48, 0x01, 0x00, 0x18,
- 0x03, 0x13, 0x48, 0x01, 0x00, 0x10, 0x02, 0x16,
- 0xA0, 0x05, 0x32, 0x09, 0x86, 0x02, 0x43, 0x00,
- 0x03, 0x13, 0x40, 0x01, 0x80, 0x40, 0x98, 0x13,
- 0x06, 0xC8, 0x6C, 0x01, 0xE0, 0x04, 0x00, 0xFC,
- 0x85, 0xC2, 0xA0, 0x06, 0x3E, 0xB4, 0x20, 0x06,
- 0x62, 0x09, 0xE6, 0x16, 0xA0, 0x06, 0xD0, 0xD5,
- 0xE3, 0x10, 0xA0, 0xC2, 0xF6, 0x05, 0x56, 0x16,
- 0x19, 0xC8, 0xF0, 0x05, 0xA9, 0xC2, 0x0A, 0x00,
- 0x0D, 0x11, 0xA0, 0xF2, 0x2E, 0x09, 0x0A, 0xD8,
- 0x80, 0x01, 0x29, 0xC8, 0x06, 0x00, 0x8C, 0x01,
- 0xA0, 0x07, 0x16, 0x09, 0x04, 0x00, 0x09, 0xC8,
- 0xF4, 0x05, 0x46, 0x10, 0x29, 0xC8, 0x06, 0x00,
- 0x6C, 0x01, 0x20, 0xC8, 0x0E, 0xFC, 0xBC, 0x01,
- 0x20, 0xC8, 0x10, 0xFC, 0xB0, 0x01, 0x20, 0xC8,
- 0x12, 0xFC, 0xB2, 0x01, 0xA0, 0xF2, 0x2E, 0x09,
- 0x8A, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x80, 0x01,
- 0x00, 0xC4, 0xE1, 0x10, 0x47, 0x01, 0x08, 0x00,
- 0x06, 0x16, 0xA8, 0xC2, 0x06, 0x00, 0xA0, 0x06,
- 0x3E, 0xB4, 0xE8, 0x04, 0x06, 0x00, 0x07, 0x01,
- 0x20, 0x00, 0x31, 0x13, 0xE8, 0x04, 0x02, 0x00,
- 0x3B, 0x10, 0xE0, 0x04, 0x00, 0xFC, 0xA0, 0x06,
- 0x3E, 0xB4, 0x29, 0x10, 0x00, 0x03, 0x02, 0x00,
- 0x20, 0xC2, 0x8C, 0x01, 0xE0, 0xC0, 0x6C, 0x01,
- 0x20, 0xC2, 0xF4, 0x05, 0x28, 0xC8, 0x08, 0x00,
- 0x6C, 0x01, 0xE8, 0xC1, 0x0A, 0x00, 0x20, 0xC3,
- 0x02, 0xFC, 0x8C, 0x01, 0x20, 0x00, 0x0C, 0xC8,
- 0x02, 0xFC, 0x0C, 0x01, 0x00, 0xFE, 0x3B, 0x16,
- 0x47, 0x01, 0x40, 0x00, 0x50, 0x13, 0x60, 0xC2,
- 0xF0, 0x05, 0xA7, 0x16, 0xE0, 0x04, 0xF4, 0x05,
- 0x0C, 0xCA, 0x08, 0x00, 0x47, 0x01, 0x80, 0x00,
- 0xC9, 0x16, 0x28, 0xC8, 0x06, 0x00, 0x6C, 0x01,
- 0xA0, 0xC2, 0x00, 0xFC, 0xD2, 0x16, 0xE8, 0xC1,
- 0x02, 0x00, 0xD7, 0xC2, 0x0F, 0x16, 0x27, 0x02,
- 0x10, 0x00, 0xD8, 0x04, 0x57, 0xC2, 0x0E, 0x13,
- 0xC7, 0x05, 0x57, 0xC2, 0x48, 0xC6, 0xC8, 0xC5,
- 0x03, 0xC8, 0x6C, 0x01, 0x0D, 0x11, 0x90, 0x03,
- 0xFF, 0x11, 0x80, 0x03, 0xD7, 0x04, 0xC3, 0x01,
- 0x00, 0x80, 0xED, 0x10, 0xE7, 0x01, 0xF4, 0xFF,
- 0x20, 0x00, 0xC8, 0xCD, 0xC8, 0xC5, 0xF0, 0x10,
- 0x90, 0x03, 0xF8, 0x11, 0xE0, 0x02, 0xC0, 0x00,
- 0x60, 0xC3, 0xFA, 0x00, 0xA0, 0xC3, 0xFC, 0x00,
- 0xE0, 0xC3, 0xFE, 0x00, 0x54, 0x04, 0xE8, 0xC2,
- 0x08, 0x00, 0xA8, 0xC2, 0x06, 0x00, 0x0C, 0xC3,
- 0x33, 0x11, 0x20, 0x23, 0x0A, 0xE0, 0x45, 0x13,
- 0x20, 0x23, 0x10, 0xE0, 0x46, 0x13, 0x20, 0x23,
- 0x0E, 0xE0, 0x13, 0x13, 0xE0, 0x21, 0x16, 0xE0,
- 0xB6, 0x16, 0x20, 0x23, 0x06, 0xE0, 0x03, 0x16,
- 0x20, 0x27, 0xA8, 0xE4, 0x0A, 0x13, 0xE8, 0xC2,
- 0x08, 0x00, 0xA8, 0xC2, 0x06, 0x00, 0x4C, 0x01,
- 0x88, 0x00, 0xA9, 0x16, 0x0C, 0x01, 0x44, 0x00,
- 0xA6, 0x16, 0x20, 0x06, 0x16, 0x09, 0xA3, 0x13,
- 0x0A, 0xC8, 0x6C, 0x01, 0x20, 0xC8, 0x04, 0xE0,
- 0x02, 0xFC, 0x0B, 0xC8, 0x6C, 0x01, 0xA0, 0x07,
- 0x02, 0xFC, 0x00, 0x81, 0x20, 0xC3, 0x80, 0x01,
- 0xA0, 0x01, 0x80, 0x01, 0x00, 0xC4, 0x0C, 0xC8,
- 0x80, 0x01, 0x0A, 0xC8, 0x8C, 0x01, 0xAC, 0x10,
- 0x0A, 0xC2, 0x0F, 0x13, 0x08, 0xC8, 0x6C, 0x01,
- 0xA0, 0xC2, 0x00, 0xFC, 0x20, 0xC3, 0x02, 0xFC,
- 0x20, 0x23, 0x12, 0xE0, 0xF5, 0x16, 0x0B, 0xC8,
- 0x6C, 0x01, 0x0C, 0xC8, 0x02, 0xFC, 0x60, 0x04,
- 0x72, 0xA9, 0x8A, 0x07, 0x00, 0x04, 0x60, 0x04,
- 0x8A, 0xA3, 0x8A, 0x07, 0x20, 0x00, 0x60, 0x04,
- 0x8A, 0xA3, 0x8A, 0x07, 0x00, 0x02, 0x20, 0x27,
- 0x0E, 0xE0, 0x04, 0x16, 0xA0, 0x06, 0x32, 0xA5,
- 0xC3, 0x01, 0x00, 0x80, 0xA8, 0xC2, 0x06, 0x00,
- 0x60, 0x04, 0x98, 0xA9, 0x00, 0x03, 0x02, 0x00,
- 0xC0, 0x01, 0x10, 0x00, 0xE0, 0xC2, 0x2E, 0x06,
- 0x08, 0x13, 0xE0, 0xC2, 0xF8, 0x05, 0x05, 0x13,
- 0xE0, 0x01, 0x3A, 0x07, 0x00, 0x80, 0x80, 0x01,
- 0x10, 0x00, 0x90, 0x03, 0xFF, 0x7F, 0x80, 0x03,
- 0x00, 0x03, 0x02, 0x00, 0x20, 0xC2, 0xF6, 0x05,
- 0x20, 0xE2, 0xF4, 0x05, 0x0E, 0x16, 0x20, 0xD8,
- 0x2E, 0x09, 0x80, 0x01, 0x2B, 0xC8, 0x06, 0x00,
- 0x8C, 0x01, 0xA0, 0x07, 0x16, 0x09, 0x04, 0x00,
- 0x0B, 0xC8, 0xF4, 0x05, 0x90, 0x03, 0xFF, 0xFF,
- 0x80, 0x03, 0x87, 0x07, 0xF0, 0x05, 0xDB, 0x04,
- 0x57, 0xC2, 0x05, 0x16, 0xCB, 0xCD, 0xCB, 0xC5,
- 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03, 0xC7, 0x05,
- 0x57, 0xC2, 0x4B, 0xC6, 0xCB, 0xC5, 0x90, 0x03,
- 0xFF, 0xFF, 0x80, 0x03, 0x00, 0x03, 0x02, 0x00,
- 0x0B, 0xC2, 0x20, 0xC3, 0xF4, 0x05, 0x0F, 0x13,
- 0xA8, 0xC2, 0x0A, 0x00, 0x4A, 0x01, 0x10, 0x00,
- 0x16, 0x16, 0xA0, 0x22, 0x04, 0xE0, 0x1A, 0x16,
- 0x08, 0xC3, 0xA0, 0x06, 0x36, 0xAC, 0x0C, 0xC2,
- 0x20, 0xC3, 0xF4, 0x05, 0x13, 0x16, 0x68, 0x01,
- 0x0A, 0x00, 0x10, 0x00, 0x03, 0x13, 0xE0, 0xC2,
- 0xF6, 0x05, 0x05, 0x16, 0xA0, 0x06, 0x78, 0xAC,
- 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03, 0x87, 0x07,
- 0xF0, 0x05, 0xA0, 0x06, 0xE6, 0xB4, 0x90, 0x03,
- 0xFF, 0xFF, 0x80, 0x03, 0x87, 0x07, 0xF0, 0x05,
- 0xA0, 0x06, 0x2C, 0xB5, 0x80, 0x03, 0x00, 0x03,
- 0x02, 0x00, 0x87, 0x07, 0xF0, 0x05, 0xCB, 0xC2,
- 0x08, 0x16, 0xA0, 0x06, 0x36, 0xAC, 0x20, 0x07,
- 0xF6, 0x05, 0x60, 0xCB, 0xF4, 0x05, 0x02, 0x00,
- 0x80, 0x03, 0xE0, 0x04, 0xF6, 0x05, 0x20, 0xC2,
- 0xF4, 0x05, 0x05, 0x16, 0x17, 0xC2, 0x03, 0x13,
- 0xD8, 0xC5, 0xA0, 0x06, 0x78, 0xAC, 0x80, 0x03,
- 0x00, 0x03, 0x02, 0x00, 0x0B, 0xC3, 0xA0, 0x06,
- 0x36, 0xAC, 0x8C, 0xC2, 0xCC, 0xC1, 0x27, 0x02,
- 0x10, 0x00, 0x88, 0x07, 0xF0, 0x05, 0x88, 0xC1,
- 0x18, 0xC2, 0x26, 0x13, 0xA8, 0x82, 0x02, 0x00,
- 0xFA, 0x16, 0xE8, 0xC2, 0x0A, 0x00, 0xE0, 0x22,
- 0x1E, 0xE0, 0xF5, 0x16, 0x98, 0xC5, 0xE0, 0x22,
- 0x1C, 0xE0, 0x0B, 0x16, 0x28, 0xC8, 0x06, 0x00,
- 0xF4, 0x00, 0xE0, 0x02, 0xE0, 0x00, 0xA0, 0x06,
- 0x3E, 0xB4, 0xE0, 0x02, 0xC0, 0x00, 0xE8, 0x04,
- 0x06, 0x00, 0xE0, 0x22, 0x18, 0xE0, 0xE4, 0x13,
- 0x20, 0xEA, 0x22, 0xE0, 0x0A, 0x00, 0xA0, 0xEA,
- 0x18, 0xE0, 0x04, 0x00, 0xDA, 0x04, 0xA0, 0x06,
- 0xE6, 0xB4, 0x47, 0x06, 0x06, 0xC2, 0xD8, 0x10,
- 0x06, 0xC8, 0xF2, 0x05, 0x60, 0xCB, 0xF4, 0x05,
- 0x02, 0x00, 0x54, 0x04, 0x20, 0xC2, 0xF4, 0x05,
- 0x13, 0x13, 0xE0, 0x01, 0x9C, 0x01, 0x00, 0x40,
- 0x8B, 0x0B, 0x8B, 0x0B, 0x60, 0x01, 0x9C, 0x01,
- 0x00, 0x40, 0x0A, 0x16, 0x60, 0xC2, 0x6C, 0x01,
- 0x28, 0xC8, 0x06, 0x00, 0x6C, 0x01, 0xA0, 0xC2,
- 0x02, 0xFC, 0x03, 0x11, 0x09, 0xC8, 0x6C, 0x01,
- 0x5B, 0x04, 0x09, 0xC8, 0x6C, 0x01, 0x4B, 0xC2,
- 0x87, 0x07, 0xF0, 0x05, 0xA0, 0x06, 0x2C, 0xB5,
- 0xE0, 0x04, 0xF4, 0x05, 0x59, 0x04, 0xA8, 0xC2,
- 0x0A, 0x00, 0x0D, 0x11, 0xA0, 0xF2, 0x2E, 0x09,
- 0x0A, 0xD8, 0x80, 0x01, 0x28, 0xC8, 0x06, 0x00,
- 0x8C, 0x01, 0xA0, 0x07, 0x16, 0x09, 0x04, 0x00,
- 0x08, 0xC8, 0xF4, 0x05, 0x5B, 0x04, 0x20, 0xC3,
- 0x6C, 0x01, 0x28, 0xC8, 0x06, 0x00, 0x6C, 0x01,
- 0x20, 0xC8, 0x0E, 0xFC, 0xBC, 0x01, 0x20, 0xC8,
- 0x10, 0xFC, 0xB0, 0x01, 0x20, 0xC8, 0x12, 0xFC,
- 0xB2, 0x01, 0x0C, 0xC8, 0x6C, 0x01, 0xA0, 0xF2,
- 0x2E, 0x09, 0x8A, 0x01, 0x00, 0x10, 0xA0, 0x01,
- 0x80, 0x01, 0x00, 0xC4, 0xDD, 0x10, 0x48, 0xC0,
- 0x89, 0xC0, 0x81, 0x60, 0xC2, 0x05, 0x5B, 0x04,
- 0x0B, 0xC3, 0xA0, 0x06, 0xC8, 0xAC, 0x41, 0xCC,
- 0x42, 0x06, 0xFD, 0x16, 0xA0, 0x06, 0xC8, 0xAC,
- 0x01, 0xC1, 0x44, 0x8C, 0x12, 0x16, 0xC4, 0x05,
- 0x42, 0x06, 0xFB, 0x16, 0x04, 0x02, 0x0E, 0xAD,
- 0x03, 0x02, 0x01, 0x01, 0x94, 0x06, 0x03, 0x02,
- 0x5A, 0x5A, 0x94, 0x06, 0x43, 0x05, 0x94, 0x06,
- 0x03, 0x07, 0x94, 0x06, 0xC3, 0x04, 0x94, 0x06,
- 0xCC, 0x05, 0x5C, 0x04, 0xCB, 0xC1, 0xA0, 0x06,
- 0xC8, 0xAC, 0x43, 0xCC, 0x42, 0x06, 0xFD, 0x16,
- 0xA0, 0x06, 0xC8, 0xAC, 0x43, 0x8C, 0xF5, 0x16,
- 0x42, 0x06, 0xFC, 0x16, 0x57, 0x04, 0x8B, 0xC2,
- 0x08, 0xC0, 0x49, 0xC1, 0x85, 0x05, 0x80, 0x02,
- 0x40, 0x00, 0x03, 0x11, 0x80, 0x02, 0x4F, 0x00,
- 0x45, 0x12, 0x01, 0x02, 0xC8, 0xAC, 0xA1, 0x09,
- 0x01, 0x80, 0x40, 0x13, 0x01, 0x02, 0xF8, 0xAD,
- 0xA1, 0x09, 0x01, 0x80, 0x3B, 0x13, 0x60, 0xC0,
- 0x06, 0x00, 0xA1, 0x09, 0x01, 0x80, 0x36, 0x13,
- 0x81, 0x05, 0x01, 0x80, 0x33, 0x13, 0x4A, 0xC0,
- 0xA1, 0x09, 0x01, 0x80, 0x2F, 0x13, 0x00, 0xC8,
- 0x6A, 0x01, 0x80, 0x02, 0x80, 0x00, 0x17, 0x14,
- 0x01, 0x02, 0x00, 0xF8, 0xA0, 0xC1, 0x40, 0x01,
- 0xA0, 0x01, 0x40, 0x01, 0x00, 0x04, 0x02, 0x02,
- 0x00, 0x10, 0x03, 0x02, 0x00, 0x04, 0xB1, 0xCC,
- 0x43, 0x06, 0xFD, 0x16, 0xA0, 0x01, 0x40, 0x01,
- 0x00, 0x40, 0x08, 0x02, 0x10, 0xF8, 0x06, 0xC8,
- 0x40, 0x01, 0x00, 0xC0, 0x02, 0x13, 0x08, 0x02,
- 0x00, 0xF8, 0x09, 0x02, 0xFE, 0xFB, 0xA0, 0x06,
- 0xD2, 0xAC, 0x25, 0x10, 0x80, 0x02, 0x80, 0x00,
- 0x09, 0x14, 0x01, 0x02, 0x00, 0xF8, 0x02, 0x02,
- 0x00, 0x10, 0x03, 0x02, 0x00, 0x04, 0x72, 0xCC,
- 0x43, 0x06, 0xFD, 0x16, 0x80, 0x05, 0x80, 0x02,
- 0x80, 0x00, 0x04, 0x12, 0x60, 0x01, 0x04, 0x01,
- 0x20, 0x00, 0x05, 0x13, 0x40, 0x81, 0xAB, 0x16,
- 0x80, 0x02, 0x80, 0x00, 0x0B, 0x14, 0xA0, 0x07,
- 0x6A, 0x01, 0x7E, 0x00, 0x02, 0x02, 0x00, 0x10,
- 0x03, 0x02, 0x00, 0x04, 0xC1, 0x04, 0x81, 0xCC,
- 0x43, 0x06, 0xFD, 0x16, 0xCA, 0x05, 0x5A, 0x04,
- 0x00, 0x02, 0xEA, 0xAD, 0x01, 0x02, 0x1A, 0xAF,
- 0x40, 0x02, 0x00, 0xFC, 0x41, 0x02, 0x00, 0xFC,
- 0x40, 0x80, 0x04, 0x13, 0xA0, 0x07, 0x04, 0x01,
- 0x3C, 0x00, 0x5B, 0x04, 0xC0, 0x04, 0x01, 0x02,
- 0x08, 0x00, 0x02, 0x02, 0x00, 0x12, 0xE0, 0xC1,
- 0x40, 0x01, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x04,
- 0x03, 0x02, 0x00, 0x01, 0x00, 0xC8, 0x6A, 0x01,
- 0xA0, 0xCC, 0x10, 0xF8, 0x80, 0x05, 0x03, 0x06,
- 0xF9, 0x16, 0x22, 0x02, 0x00, 0x02, 0x01, 0x06,
- 0xF3, 0x16, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40,
- 0x07, 0xC8, 0x40, 0x01, 0x00, 0x02, 0x00, 0x08,
- 0x40, 0xC0, 0x01, 0x06, 0x01, 0xC8, 0x6A, 0x01,
- 0x61, 0x02, 0x00, 0x80, 0x01, 0xC8, 0x10, 0xF8,
- 0x00, 0x06, 0xF6, 0x16, 0xC0, 0x04, 0xC8, 0x04,
- 0xC9, 0x04, 0x03, 0x02, 0x00, 0x08, 0x00, 0xC8,
- 0x6A, 0x01, 0x80, 0xC1, 0x66, 0x02, 0x00, 0x80,
- 0x20, 0xC1, 0x10, 0xF8, 0x06, 0x81, 0x15, 0x16,
- 0x08, 0xC2, 0x06, 0x13, 0x80, 0x05, 0x03, 0x06,
- 0xF2, 0x16, 0x08, 0xC2, 0x0D, 0x13, 0x19, 0x10,
- 0xA0, 0x07, 0x10, 0xF8, 0x55, 0x55, 0x20, 0xC1,
- 0x10, 0xF8, 0x84, 0x02, 0x55, 0x55, 0x02, 0x16,
- 0x06, 0xC2, 0xF0, 0x10, 0x06, 0x81, 0xEE, 0x13,
- 0x5B, 0x04, 0xA0, 0x07, 0x10, 0xF8, 0x55, 0x55,
- 0x60, 0xC1, 0x10, 0xF8, 0x05, 0x81, 0x03, 0x13,
- 0x85, 0x02, 0x55, 0x55, 0xF5, 0x16, 0x08, 0xC2,
- 0xE1, 0x13, 0x40, 0xC2, 0x09, 0x06, 0x48, 0x02,
- 0xFF, 0x07, 0xC0, 0x04, 0x01, 0x02, 0x08, 0x00,
- 0x02, 0x02, 0x00, 0x12, 0x03, 0x02, 0x00, 0x01,
- 0x00, 0xC8, 0x6A, 0x01, 0x32, 0xC8, 0x10, 0xF8,
- 0x80, 0x05, 0x03, 0x06, 0xF9, 0x16, 0x22, 0x02,
- 0x00, 0x02, 0x01, 0x06, 0xF3, 0x16, 0x88, 0x02,
- 0x40, 0x00, 0x13, 0x15, 0x89, 0x02, 0x4F, 0x00,
- 0x10, 0x11, 0xC0, 0x04, 0x02, 0x02, 0x00, 0x12,
- 0x01, 0x02, 0x08, 0x00, 0x03, 0x02, 0x00, 0x01,
- 0x80, 0xCC, 0x03, 0x06, 0xFD, 0x16, 0x22, 0x02,
- 0x00, 0x02, 0x01, 0x06, 0xF7, 0x16, 0xCB, 0x05,
- 0x5B, 0x04, 0xA0, 0x07, 0x04, 0x01, 0x37, 0x00,
- 0x5B, 0x04, 0x33, 0x07, 0x33, 0x07, 0x0C, 0x10,
- 0x13, 0x07, 0x23, 0x07, 0x02, 0x00, 0xCB, 0xC8,
- 0x06, 0x00, 0x23, 0x02, 0x18, 0x00, 0xE0, 0xCC,
- 0x6C, 0x01, 0xCD, 0xCC, 0xCE, 0xCC, 0xCF, 0xCC,
- 0x83, 0x07, 0x30, 0x06, 0xD3, 0xC1, 0x0A, 0x13,
- 0x83, 0x07, 0x36, 0x07, 0xD3, 0xC1, 0x06, 0x13,
- 0x83, 0x07, 0xA0, 0x00, 0x93, 0x00, 0x0C, 0xC8,
- 0x6C, 0x01, 0x80, 0x03, 0x63, 0x07, 0x02, 0x00,
- 0x2A, 0x15, 0x63, 0xC2, 0x04, 0x00, 0x63, 0x42,
- 0x06, 0x00, 0xDB, 0x13, 0x63, 0xC3, 0x1A, 0x00,
- 0x49, 0xD2, 0x0C, 0x13, 0xC9, 0x06, 0x49, 0x72,
- 0x69, 0xD2, 0xC0, 0xE1, 0xC9, 0x06, 0x49, 0x72,
- 0xE9, 0x48, 0x04, 0xE0, 0x04, 0x00, 0x49, 0xCB,
- 0x02, 0x00, 0x52, 0x04, 0x69, 0xC2, 0xC0, 0xE1,
- 0x49, 0x72, 0x29, 0x02, 0x10, 0x00, 0xC3, 0xC2,
- 0xE9, 0xA2, 0xA8, 0xE1, 0x1B, 0xC3, 0x89, 0x02,
- 0x12, 0x00, 0x0F, 0x13, 0xDC, 0xC6, 0x03, 0x16,
- 0xE9, 0x48, 0x04, 0xE0, 0x04, 0x00, 0x49, 0xCB,
- 0x02, 0x00, 0x4C, 0xCB, 0x04, 0x00, 0x90, 0x03,
- 0xFF, 0x01, 0x93, 0x00, 0x0C, 0xC8, 0x6C, 0x01,
- 0x80, 0x03, 0x0C, 0xC8, 0x6C, 0x01, 0xE0, 0xC6,
- 0x00, 0xFC, 0xF1, 0x16, 0xE9, 0x48, 0x04, 0xE0,
- 0x04, 0x00, 0x49, 0xCB, 0x02, 0x00, 0x4C, 0xCB,
- 0x04, 0x00, 0xED, 0x10, 0x00, 0x03, 0x02, 0x00,
- 0xDB, 0xC2, 0x63, 0xC2, 0x04, 0x00, 0x4B, 0x42,
- 0x9F, 0x13, 0x49, 0xD2, 0x0E, 0x13, 0xC9, 0x06,
- 0x49, 0x72, 0x69, 0xD2, 0xC0, 0xE1, 0xC9, 0x06,
- 0x49, 0x72, 0xE9, 0x48, 0x04, 0xE0, 0x04, 0x00,
- 0x49, 0xCB, 0x02, 0x00, 0x90, 0x03, 0xFF, 0xFF,
- 0x80, 0x03, 0x69, 0xC2, 0xC0, 0xE1, 0x49, 0x72,
- 0x29, 0x02, 0x10, 0x00, 0xC3, 0xC2, 0xE9, 0xA2,
- 0xA8, 0xE1, 0x1B, 0xC3, 0x89, 0x02, 0x12, 0x00,
- 0x0C, 0x13, 0xDC, 0xC6, 0x03, 0x16, 0xE9, 0x48,
- 0x04, 0xE0, 0x04, 0x00, 0x49, 0xCB, 0x02, 0x00,
- 0x4C, 0xCB, 0x04, 0x00, 0x90, 0x03, 0xFF, 0xFF,
- 0x80, 0x03, 0x0C, 0xC8, 0x6C, 0x01, 0xE0, 0xC6,
- 0x00, 0xFC, 0xF4, 0x16, 0xF0, 0x10, 0x00, 0x03,
- 0x02, 0x00, 0xBB, 0xC2, 0xBB, 0xC1, 0x86, 0xD1,
- 0x03, 0x13, 0x86, 0xEA, 0x04, 0x00, 0x13, 0x10,
- 0xA6, 0xD1, 0xC0, 0xE1, 0xC6, 0x06, 0x86, 0x71,
- 0xCA, 0xC1, 0xE6, 0xA1, 0xB8, 0xE1, 0xA6, 0xEA,
- 0x14, 0xE0, 0x04, 0x00, 0x1B, 0xC2, 0x86, 0x02,
- 0x02, 0x00, 0x03, 0x16, 0xA0, 0x06, 0x0C, 0xB5,
- 0x02, 0x10, 0xA0, 0x06, 0xE6, 0xB4, 0xDA, 0x04,
- 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0xAB, 0xC2,
- 0x06, 0x00, 0x8C, 0x07, 0xE8, 0x05, 0x5C, 0xC2,
- 0x16, 0x13, 0xA0, 0xC1, 0xEC, 0x05, 0x8A, 0x81,
- 0x1A, 0x1A, 0xC6, 0xC1, 0x09, 0xC2, 0x59, 0xC2,
- 0x20, 0x13, 0xE9, 0xA1, 0x08, 0x00, 0x87, 0x82,
- 0xF9, 0x12, 0xA9, 0xA2, 0x08, 0x00, 0x87, 0x62,
- 0xCA, 0xCA, 0x08, 0x00, 0x4A, 0x6A, 0x08, 0x00,
- 0xC9, 0xC6, 0x0B, 0xC6, 0x80, 0x03, 0xCA, 0xCA,
- 0x08, 0x00, 0x0A, 0xC8, 0xEC, 0x05, 0xDB, 0x04,
- 0x0B, 0xCF, 0x0B, 0xC7, 0x80, 0x03, 0x8A, 0x61,
- 0x46, 0xCA, 0x08, 0x00, 0xCA, 0xCA, 0x08, 0x00,
- 0x0A, 0xC8, 0xEC, 0x05, 0xC9, 0xC6, 0x0B, 0xC7,
- 0x80, 0x03, 0x87, 0x62, 0xCA, 0xCA, 0x08, 0x00,
- 0xDB, 0x04, 0x0B, 0xC6, 0x0B, 0xCB, 0x02, 0x00,
- 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0xBB, 0xC1,
- 0xDB, 0xC2, 0x8C, 0x07, 0xE8, 0x05, 0x4C, 0xC2,
- 0xED, 0x04, 0x02, 0x00, 0x09, 0xC2, 0x59, 0xC2,
- 0x18, 0x13, 0xA9, 0x81, 0x02, 0x00, 0xFA, 0x16,
- 0xE9, 0x82, 0x04, 0x00, 0xF7, 0x16, 0x49, 0xCB,
- 0x04, 0x00, 0x99, 0xC2, 0x0A, 0xC6, 0x0A, 0x13,
- 0x08, 0x83, 0x04, 0x13, 0xA9, 0xAA, 0x08, 0x00,
- 0x08, 0x00, 0x80, 0x03, 0x2A, 0xA8, 0x08, 0x00,
- 0xEC, 0x05, 0x80, 0x03, 0x08, 0xCB, 0x02, 0x00,
- 0x80, 0x03, 0x2D, 0x07, 0x02, 0x00, 0x8C, 0x07,
- 0x08, 0x00, 0x06, 0xA3, 0x4C, 0xC2, 0x09, 0xC2,
- 0x59, 0xC2, 0x13, 0x13, 0xE9, 0x82, 0x04, 0x00,
- 0xFA, 0x16, 0xAD, 0x07, 0x02, 0x00, 0x01, 0x00,
- 0x49, 0xCB, 0x04, 0x00, 0x19, 0xC6, 0x01, 0x13,
- 0x80, 0x03, 0x08, 0x83, 0x04, 0x16, 0xA0, 0x49,
- 0x14, 0xE0, 0x04, 0x00, 0x80, 0x03, 0x08, 0xCB,
- 0x02, 0x00, 0x80, 0x03, 0x00, 0x03, 0x02, 0x00,
- 0x0B, 0x06, 0x1F, 0x11, 0x4D, 0x13, 0x8B, 0x07,
- 0x00, 0x4E, 0x60, 0x01, 0x42, 0x01, 0x80, 0x00,
- 0x09, 0x13, 0x8B, 0x07, 0x00, 0x3A, 0x20, 0xC1,
- 0x4E, 0x01, 0x84, 0x02, 0x41, 0x0F, 0x02, 0x11,
- 0x8B, 0x07, 0x00, 0x4E, 0x0B, 0xC8, 0x44, 0x01,
- 0xA0, 0x07, 0x62, 0x09, 0xE8, 0x03, 0xE0, 0x01,
- 0x40, 0x01, 0x00, 0x02, 0xE0, 0x01, 0x40, 0x01,
- 0x00, 0x20, 0x84, 0x07, 0x34, 0xAF, 0x60, 0x04,
- 0x42, 0xAF, 0x20, 0xC8, 0x16, 0xE0, 0xE0, 0x00,
- 0xE0, 0xC2, 0x6A, 0x09, 0xE0, 0x22, 0x10, 0xE0,
- 0x03, 0x13, 0x20, 0xE8, 0x14, 0xE0, 0xE0, 0x00,
- 0x20, 0xC8, 0x04, 0xE0, 0x82, 0x01, 0x20, 0xC8,
- 0xE2, 0x00, 0x8A, 0x01, 0xE0, 0x04, 0x18, 0x09,
- 0xE0, 0x04, 0xF4, 0x05, 0xE0, 0x04, 0xF8, 0x05,
- 0xE0, 0x04, 0xF0, 0x05, 0xE0, 0x04, 0x42, 0x07,
- 0xA0, 0x07, 0x88, 0x01, 0x20, 0x00, 0xE0, 0xC2,
- 0x30, 0x09, 0x09, 0x13, 0xA0, 0x07, 0x88, 0x01,
- 0x80, 0x00, 0x20, 0xE8, 0x16, 0xE0, 0x80, 0x01,
- 0xE0, 0x01, 0x82, 0x01, 0x00, 0x03, 0x8B, 0x07,
- 0x00, 0xA0, 0x0B, 0xE8, 0x86, 0x01, 0x80, 0x03,
- 0xE0, 0x04, 0x86, 0x01, 0xE0, 0x01, 0x9C, 0x01,
- 0x40, 0x00, 0xE0, 0x01, 0x9C, 0x01, 0x00, 0x40,
- 0xCB, 0x04, 0xB0, 0x03, 0x0B, 0x06, 0x04, 0x13,
- 0x60, 0x01, 0x9C, 0x01, 0x00, 0x40, 0xF9, 0x16,
- 0xE0, 0x04, 0x82, 0x01, 0x20, 0xE8, 0x08, 0xE0,
- 0x6A, 0x09, 0x8B, 0x07, 0x00, 0x80, 0x0B, 0xC8,
- 0x98, 0x07, 0x0B, 0xC8, 0x78, 0x07, 0x20, 0xC8,
- 0x04, 0xE0, 0x82, 0x01, 0x8B, 0x07, 0x6F, 0x87,
- 0x0B, 0x48, 0x3A, 0x07, 0xE0, 0xC2, 0x50, 0x07,
- 0x8B, 0x02, 0x58, 0x07, 0x10, 0x13, 0x20, 0xE8,
- 0x0A, 0xE0, 0x00, 0x01, 0xE0, 0xC2, 0x00, 0x01,
- 0xE0, 0x22, 0x06, 0xE0, 0xF8, 0x13, 0x8B, 0x07,
- 0x58, 0x07, 0x0B, 0xC8, 0x50, 0x07, 0x8B, 0x07,
- 0x0C, 0xB8, 0x0B, 0xC8, 0x52, 0x07, 0x80, 0x03,
- 0x00, 0x03, 0x02, 0x00, 0xE0, 0xC2, 0x1A, 0x09,
- 0x0C, 0x13, 0x20, 0x06, 0x1C, 0x09, 0x0B, 0xC8,
- 0x6C, 0x01, 0x20, 0xC8, 0x00, 0xFC, 0x1A, 0x09,
- 0x4B, 0xCB, 0x02, 0x00, 0x90, 0x03, 0xFF, 0xFF,
- 0x80, 0x03, 0x41, 0xC0, 0x0F, 0x13, 0x81, 0x80,
- 0x0D, 0x13, 0x82, 0xA0, 0xE2, 0xC2, 0x32, 0x0C,
- 0x12, 0x09, 0x0B, 0xC8, 0x6C, 0x01, 0xE0, 0x04,
- 0x00, 0xFC, 0x20, 0xC3, 0x02, 0xFC, 0x07, 0x11,
- 0x02, 0xC8, 0x00, 0xFC, 0xED, 0x04, 0x02, 0x00,
- 0xE0, 0x04, 0x6C, 0x01, 0x80, 0x03, 0x42, 0xCB,
- 0x02, 0x00, 0x02, 0xC8, 0x6C, 0x01, 0x8B, 0xC0,
- 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0x83, 0x07,
- 0x00, 0x80, 0x60, 0xC2, 0x7E, 0x09, 0x09, 0xC1,
- 0x24, 0x02, 0xF8, 0xFF, 0xA9, 0x08, 0x01, 0x02,
- 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x0B, 0x02,
- 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x07, 0x02,
- 0x00, 0x00, 0x2C, 0xCB, 0x32, 0x0C, 0x32, 0x0C,
- 0x06, 0x13, 0x8B, 0x05, 0xCC, 0x05, 0x0B, 0x88,
- 0x46, 0x04, 0x27, 0x1B, 0xF6, 0x10, 0x09, 0xC2,
- 0x8B, 0xC2, 0x08, 0x06, 0x0A, 0x13, 0x8B, 0x05,
- 0xCC, 0x05, 0x0B, 0x88, 0x46, 0x04, 0x1D, 0x1B,
- 0x2C, 0xCB, 0x32, 0x0C, 0x32, 0x0C, 0xED, 0x16,
- 0xF4, 0x10, 0x82, 0xC0, 0x14, 0x13, 0x02, 0xC8,
- 0x6C, 0x01, 0x0A, 0xC8, 0x00, 0xFC, 0x0A, 0xC8,
- 0x6C, 0x01, 0xE0, 0x04, 0x00, 0xFC, 0xA0, 0x07,
- 0x02, 0xFC, 0x00, 0x80, 0x04, 0xC8, 0x04, 0xFC,
- 0x0A, 0xC2, 0x08, 0xA2, 0x02, 0xCA, 0x32, 0x0C,
- 0x8A, 0xC0, 0x87, 0x05, 0xD6, 0x10, 0x4A, 0xC0,
- 0xEE, 0x10, 0x47, 0xCB, 0x02, 0x00, 0xE0, 0x04,
- 0x6C, 0x01, 0x8B, 0x07, 0x43, 0x00, 0xE0, 0x04,
- 0x00, 0x0C, 0x00, 0x03, 0x02, 0x00, 0x0B, 0xC8,
- 0x6C, 0x01, 0x8B, 0x02, 0x43, 0x00, 0x04, 0x13,
- 0x60, 0x01, 0x02, 0xFC, 0x20, 0x00, 0x06, 0x13,
- 0x8B, 0xC2, 0xA0, 0x06, 0x42, 0xB4, 0x90, 0x03,
- 0x7F, 0x00, 0x80, 0x03, 0xA0, 0x01, 0x02, 0xFC,
- 0x20, 0x00, 0x60, 0x01, 0x6A, 0x09, 0x01, 0x00,
- 0x0B, 0x16, 0x0A, 0x02, 0x02, 0xFC, 0xA0, 0xA2,
- 0x2C, 0x09, 0xA0, 0xCE, 0xEE, 0x05, 0xA0, 0xC6,
- 0x04, 0xFC, 0x20, 0xC8, 0x2C, 0x09, 0x04, 0xFC,
- 0x8A, 0x07, 0xF8, 0x05, 0x5A, 0xC2, 0x08, 0x13,
- 0xCA, 0x05, 0x5A, 0xC2, 0x09, 0xC8, 0x6C, 0x01,
- 0x0B, 0xC8, 0x00, 0xFC, 0x8B, 0xC6, 0x02, 0x10,
- 0x8B, 0xCE, 0x8B, 0xC6, 0x20, 0x20, 0x1A, 0xE0,
- 0x05, 0x16, 0x20, 0xE8, 0x04, 0xE0, 0x3A, 0x07,
- 0xE0, 0x04, 0x36, 0x07, 0x90, 0x03, 0x7F, 0x00,
- 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0x0B, 0xC8,
- 0x6C, 0x01, 0xCC, 0x04, 0xE0, 0x04, 0x00, 0xFC,
- 0x8B, 0xC2, 0xA0, 0x06, 0x50, 0xB4, 0x90, 0x03,
- 0x7F, 0x00, 0x80, 0x03, 0xA0, 0x07, 0x02, 0xFC,
- 0x00, 0x80, 0x20, 0xC8, 0x8C, 0xE1, 0x04, 0xFC,
- 0x41, 0xC0, 0x0F, 0x16, 0x20, 0xD8, 0x00, 0xE2,
- 0x83, 0x01, 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B,
- 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B,
- 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B, 0x0A, 0xC8,
- 0x8A, 0x01, 0x5B, 0x04, 0x0A, 0xC8, 0x6C, 0x01,
- 0x20, 0xC3, 0x00, 0xFC, 0xE0, 0x04, 0x00, 0xFC,
- 0x8A, 0x02, 0x43, 0x00, 0xDF, 0x13, 0xA0, 0x07,
- 0x02, 0xFC, 0x00, 0x80, 0x04, 0xC8, 0x04, 0xFC,
- 0x20, 0x98, 0x84, 0x09, 0x1D, 0x09, 0x0A, 0x13,
- 0x20, 0xC8, 0x1A, 0x09, 0x00, 0xFC, 0x0A, 0xC8,
- 0x1A, 0x09, 0xA0, 0x05, 0x1C, 0x09, 0x8C, 0xC2,
- 0xE5, 0x16, 0x5B, 0x04, 0x41, 0xC0, 0x10, 0x13,
- 0x8A, 0xA2, 0x82, 0xCA, 0x32, 0x0C, 0x1A, 0x09,
- 0x02, 0xC8, 0x6C, 0x01, 0x0A, 0xC8, 0x00, 0xFC,
- 0x8A, 0xC0, 0x20, 0x98, 0x83, 0x01, 0x00, 0xE2,
- 0x09, 0x13, 0x8C, 0xC2, 0xD3, 0x16, 0x5B, 0x04,
- 0x4A, 0xC0, 0x8A, 0xC0, 0x20, 0x98, 0x83, 0x01,
- 0x00, 0xE2, 0x1B, 0x16, 0xE0, 0x01, 0x9C, 0x01,
- 0x40, 0x00, 0xA0, 0x07, 0x64, 0x09, 0x00, 0x70,
- 0x60, 0x01, 0x9C, 0x01, 0x40, 0x00, 0x07, 0x13,
- 0x20, 0x06, 0x64, 0x09, 0xF9, 0x16, 0x0A, 0x02,
- 0x00, 0x01, 0x60, 0x04, 0x8A, 0xA3, 0x60, 0x01,
- 0x02, 0x0C, 0x00, 0x01, 0xE2, 0x13, 0x20, 0xD8,
- 0x2F, 0x09, 0x83, 0x01, 0xA0, 0x07, 0x02, 0x0C,
- 0x00, 0x80, 0x0A, 0xC8, 0x8A, 0x01, 0x0A, 0xC8,
- 0x18, 0x09, 0xD7, 0x10, 0xD8, 0x04, 0x57, 0xC2,
- 0x03, 0x16, 0xC8, 0xCD, 0xC8, 0xC5, 0x5B, 0x04,
- 0xC7, 0x05, 0x57, 0xC2, 0x48, 0xC6, 0xC8, 0xC5,
- 0x5B, 0x04, 0x08, 0xC8, 0x6C, 0x01, 0x08, 0xA2,
- 0x20, 0xCA, 0x00, 0xFC, 0x32, 0x0C, 0x18, 0x09,
- 0x02, 0x10, 0x08, 0xC8, 0x6C, 0x01, 0xE0, 0x04,
- 0x00, 0xFC, 0x57, 0xC2, 0x03, 0x16, 0xC8, 0xCD,
- 0xC8, 0xC5, 0x5B, 0x04, 0xC7, 0x05, 0x17, 0xC8,
- 0x6C, 0x01, 0x08, 0xC8, 0x00, 0xFC, 0xC8, 0xC5,
- 0x5B, 0x04, 0x17, 0xC6, 0x02, 0x16, 0xC8, 0xC9,
- 0x02, 0x00, 0xC8, 0xC5, 0x5B, 0x04, 0x17, 0xC2,
- 0x08, 0xC8, 0x6C, 0x01, 0x07, 0x13, 0xE0, 0xC5,
- 0x00, 0xFC, 0x08, 0xA2, 0x28, 0xC8, 0x32, 0x0C,
- 0x00, 0xFC, 0x18, 0x09, 0x5B, 0x04, 0x60, 0x01,
- 0x82, 0x01, 0x00, 0x20, 0x0A, 0x16, 0x60, 0xC2,
- 0x84, 0x01, 0xA0, 0x01, 0x82, 0x01, 0x00, 0x20,
- 0xE0, 0x01, 0x82, 0x01, 0x00, 0x20, 0x09, 0xC8,
- 0x84, 0x01, 0xC9, 0x04, 0x5B, 0x04, 0xA0, 0x06,
- 0xBE, 0xB7, 0xD3, 0x04, 0xE0, 0x04, 0x02, 0x01,
- 0x20, 0xE8, 0x14, 0xE0, 0x00, 0x01, 0x20, 0xC8,
- 0x16, 0xE0, 0x04, 0x01, 0x05, 0x2C, 0x20, 0x48,
- 0x14, 0xE0, 0x00, 0x01, 0x8C, 0x07, 0x00, 0x0A,
- 0x8D, 0x07, 0xD8, 0x07, 0x8E, 0x07, 0x18, 0x00,
- 0x7C, 0xCF, 0x4E, 0x06, 0xFD, 0x16, 0xE0, 0x02,
- 0xD8, 0x07, 0x8F, 0x07, 0x11, 0xFF, 0x8B, 0x02,
- 0x3B, 0x59, 0x21, 0x16, 0x8A, 0x02, 0x3B, 0x59,
- 0x1E, 0x13, 0x8F, 0x05, 0x20, 0x20, 0x16, 0xE0,
- 0x01, 0x16, 0x19, 0x10, 0x20, 0x20, 0x04, 0xE0,
- 0x16, 0x16, 0x00, 0x01, 0xBF, 0x00, 0x13, 0x16,
- 0x8B, 0x07, 0xC0, 0x40, 0x00, 0x01, 0x00, 0x60,
- 0x10, 0x13, 0x40, 0x01, 0x00, 0x60, 0x0B, 0x16,
- 0x8B, 0x07, 0xC4, 0x44, 0xA0, 0xC3, 0x02, 0x01,
- 0x0E, 0x48, 0x02, 0x01, 0x4E, 0x01, 0x00, 0x10,
- 0x04, 0x16, 0x8F, 0x07, 0x18, 0xFF, 0x60, 0x04,
- 0x94, 0xB7, 0x0B, 0xC3, 0x4B, 0xC3, 0x20, 0x20,
- 0x0A, 0xE0, 0x02, 0x16, 0x6B, 0x02, 0x20, 0x20,
- 0x20, 0x20, 0x0C, 0xE0, 0x02, 0x16, 0x6C, 0x02,
- 0x00, 0x20, 0x20, 0x20, 0x0E, 0xE0, 0x02, 0x16,
- 0x6C, 0x02, 0x20, 0x00, 0x8F, 0x05, 0x20, 0x20,
- 0x10, 0xE0, 0x07, 0x16, 0x6D, 0x02, 0x20, 0x00,
- 0x20, 0x21, 0x22, 0xE0, 0xE4, 0x13, 0x04, 0xC1,
- 0x02, 0x16, 0x84, 0x07, 0xFE, 0x7F, 0x8F, 0x05,
- 0x20, 0x20, 0x12, 0xE0, 0x02, 0x16, 0x6D, 0x02,
- 0x00, 0x20, 0x60, 0x21, 0x22, 0xE0, 0xD7, 0x13,
- 0x45, 0xC1, 0x02, 0x16, 0x85, 0x07, 0xFE, 0x7F,
- 0x8F, 0x05, 0x86, 0xD1, 0x0B, 0x13, 0xA0, 0x25,
- 0x26, 0xE0, 0x08, 0x13, 0x8F, 0x05, 0x20, 0x26,
- 0x22, 0xE0, 0x04, 0x16, 0x8F, 0x05, 0xA0, 0x26,
- 0x22, 0xE0, 0x02, 0x13, 0x60, 0x04, 0x94, 0xB7,
- 0x01, 0xD8, 0xEC, 0x08, 0x20, 0xD8, 0xDB, 0x07,
- 0x00, 0x09, 0x02, 0xD8, 0xF6, 0x08, 0x20, 0xD8,
- 0xDD, 0x07, 0xE2, 0x08, 0xE0, 0x02, 0x58, 0x07,
- 0x20, 0xD8, 0xEF, 0x07, 0xF4, 0x07, 0x20, 0xD8,
- 0xF1, 0x07, 0xF6, 0x07, 0x20, 0xD8, 0xF3, 0x07,
- 0xF8, 0x07, 0x09, 0x02, 0x06, 0x00, 0xCB, 0x04,
- 0x0F, 0x02, 0xEE, 0x07, 0x8F, 0x05, 0xCB, 0xDF,
- 0x09, 0x06, 0xFC, 0x16, 0xA0, 0x06, 0xBE, 0xB7,
- 0x89, 0x07, 0x5C, 0xE3, 0xE0, 0x04, 0x1A, 0x01,
- 0x20, 0xC8, 0xE4, 0x07, 0x18, 0x01, 0x19, 0xC8,
- 0x0C, 0x01, 0x39, 0xC8, 0x0A, 0x01, 0x39, 0xC8,
- 0x12, 0x01, 0x09, 0x16, 0x79, 0xC3, 0x0F, 0x02,
- 0x00, 0xE0, 0x4F, 0x63, 0x2D, 0x02, 0x00, 0x90,
- 0x0D, 0xC8, 0x14, 0x01, 0x02, 0x10, 0x39, 0xC8,
- 0x14, 0x01, 0xF9, 0xC3, 0x3F, 0xC8, 0x0E, 0x01,
- 0x1F, 0xC8, 0x10, 0x01, 0xE0, 0x04, 0x14, 0x09,
- 0xB9, 0xC2, 0x1A, 0xC8, 0x00, 0x01, 0x96, 0x06,
- 0x89, 0x02, 0x84, 0xE3, 0xE0, 0x16, 0x8F, 0x07,
- 0x1C, 0xFF, 0x8C, 0x07, 0x00, 0x0A, 0x8D, 0x07,
- 0x84, 0xE3, 0x8E, 0x07, 0x10, 0x00, 0x7C, 0x8F,
- 0x44, 0x16, 0x4E, 0x06, 0xFC, 0x16, 0xA0, 0xC3,
- 0xE2, 0x07, 0xE0, 0xC3, 0xE0, 0x07, 0xCE, 0x83,
- 0x01, 0x14, 0xCE, 0xC3, 0x0F, 0xC8, 0x1A, 0x01,
- 0x8C, 0x07, 0x94, 0xE3, 0x8D, 0x07, 0x00, 0x0A,
- 0x8E, 0x07, 0xA4, 0xE3, 0x8C, 0x63, 0x7C, 0xCF,
- 0x4E, 0x06, 0xFD, 0x16, 0xE0, 0x04, 0x30, 0x09,
- 0x20, 0x01, 0x42, 0x01, 0x00, 0x04, 0x02, 0x16,
- 0x20, 0x07, 0x30, 0x09, 0x60, 0xC2, 0x62, 0x01,
- 0xE0, 0x04, 0x62, 0x01, 0x8E, 0x07, 0x00, 0x80,
- 0x8C, 0x07, 0x34, 0x09, 0x8D, 0x07, 0x06, 0x00,
- 0x3E, 0xDF, 0x8E, 0x05, 0x0D, 0x06, 0xFC, 0x16,
- 0xFE, 0xD3, 0xCF, 0x06, 0x8E, 0x05, 0xFE, 0xD3,
- 0xCF, 0x06, 0x8C, 0x07, 0x34, 0x09, 0x09, 0xC8,
- 0x62, 0x01, 0xC9, 0x04, 0x5C, 0xA3, 0x7C, 0xE2,
- 0x5C, 0xA3, 0x7C, 0xE2, 0x5C, 0xA3, 0x7C, 0xE2,
- 0x02, 0x13, 0xCD, 0x83, 0x09, 0x13, 0x20, 0x07,
- 0x34, 0x09, 0x06, 0x10, 0x8F, 0x07, 0x19, 0xFF,
- 0xCD, 0xA3, 0x0F, 0xC8, 0x04, 0x01, 0xFF, 0x10,
- 0xA0, 0x01, 0x02, 0x01, 0x00, 0x10, 0xE0, 0xC3,
- 0xEE, 0x07, 0xE0, 0x43, 0x06, 0xE0, 0x0F, 0xC8,
- 0x00, 0x01, 0x20, 0xC0, 0x04, 0xE0, 0xE0, 0x04,
- 0xFE, 0x06, 0xD3, 0x04, 0xE0, 0x04, 0x04, 0x01,
- 0x60, 0x04, 0x0C, 0xB8, 0x8C, 0x07, 0x00, 0x0A,
- 0x8D, 0x07, 0x18, 0x00, 0x8E, 0x07, 0x3B, 0x59,
- 0x0E, 0xCF, 0x4D, 0x06, 0xFD, 0x16, 0x5B, 0x04,
- 0x93, 0x01, 0x00, 0x80, 0x20, 0x04, 0xC0, 0xE2,
- 0x60, 0xD0, 0x98, 0x07, 0x1C, 0x13, 0x00, 0x03,
- 0x02, 0x00, 0xA0, 0xC0, 0x46, 0x07, 0x12, 0xC8,
- 0x46, 0x07, 0x02, 0x16, 0x93, 0x01, 0x20, 0x00,
- 0x00, 0x03, 0x0F, 0x00, 0x20, 0x04, 0xE8, 0xE2,
- 0x93, 0x01, 0x00, 0x20, 0x80, 0x01, 0x00, 0x40,
- 0x00, 0x01, 0xFE, 0x00, 0x49, 0x16, 0xC4, 0xC3,
- 0x25, 0x16, 0xD3, 0xC3, 0xC5, 0x43, 0x0C, 0x16,
- 0xE0, 0xC3, 0x98, 0x07, 0x03, 0x11, 0xE0, 0x02,
- 0x98, 0x07, 0x51, 0x04, 0xE0, 0xC3, 0x78, 0x07,
- 0x0A, 0x11, 0xE0, 0x02, 0x78, 0x07, 0x51, 0x04,
- 0xD3, 0x11, 0x4F, 0x01, 0x00, 0x20, 0xE4, 0x13,
- 0x4F, 0x01, 0x20, 0x00, 0xD1, 0x13, 0x05, 0x2C,
- 0x41, 0xA0, 0x21, 0x04, 0xC0, 0xE2, 0x8B, 0x07,
- 0x0C, 0xB8, 0x00, 0x01, 0x00, 0x40, 0x0F, 0x13,
- 0xDD, 0xC3, 0x4F, 0x02, 0x0F, 0x00, 0x2F, 0xE1,
- 0x14, 0xE0, 0x5B, 0x04, 0xE4, 0xC3, 0xC0, 0xE1,
- 0xCF, 0x73, 0x2F, 0x41, 0x14, 0xE0, 0x6F, 0xC3,
- 0xEC, 0xEA, 0x8B, 0x07, 0x0C, 0xB8, 0x4B, 0xC2,
- 0xA0, 0xC2, 0xF4, 0x07, 0x8C, 0x07, 0x08, 0x00,
- 0xBD, 0xC0, 0xA0, 0xC3, 0xEA, 0x07, 0xE0, 0xC3,
- 0xEC, 0x07, 0xA0, 0x06, 0x00, 0xBA, 0xC0, 0x01,
- 0x00, 0x40, 0x02, 0xD8, 0x17, 0x01, 0x62, 0x02,
- 0x80, 0xFF, 0xA0, 0x06, 0x54, 0xBA, 0x02, 0xC8,
- 0x04, 0x01, 0x90, 0x03, 0x3F, 0x60, 0x59, 0x04,
- 0xC0, 0xC3, 0xCF, 0x73, 0xEF, 0xC3, 0xC0, 0xE1,
- 0xCF, 0x73, 0xAF, 0xC3, 0xDE, 0xEA, 0x9E, 0xC3,
- 0x4E, 0x02, 0x0F, 0x00, 0x2E, 0x21, 0x14, 0xE0,
- 0x08, 0x13, 0x2F, 0x40, 0x14, 0xE0, 0xCF, 0xA3,
- 0x2F, 0x04, 0xF0, 0xE2, 0x40, 0x01, 0x00, 0x40,
- 0xA4, 0x13, 0xC4, 0xC3, 0xC7, 0x16, 0x00, 0x01,
- 0xFE, 0x00, 0xE6, 0x16, 0x9E, 0x10, 0x40, 0x01,
- 0x00, 0x40, 0x05, 0x16, 0x20, 0xE0, 0x14, 0xE0,
- 0x65, 0x02, 0x00, 0x58, 0x96, 0x10, 0x20, 0xD8,
- 0xDE, 0x07, 0x17, 0x01, 0x8F, 0x07, 0x86, 0xFF,
- 0x0F, 0xC8, 0x04, 0x01, 0xC0, 0x01, 0x00, 0x40,
- 0x45, 0x02, 0xFF, 0xA7, 0x8A, 0x10, 0x20, 0xC3,
- 0xFE, 0x06, 0x20, 0x27, 0x38, 0xE3, 0x07, 0x13,
- 0x20, 0x23, 0x22, 0xE0, 0x1A, 0x13, 0x65, 0x02,
- 0xFF, 0xDF, 0x20, 0x40, 0x14, 0xE0, 0x20, 0xE0,
- 0x16, 0xE0, 0x0C, 0xC8, 0xE6, 0x08, 0x8D, 0x07,
- 0xE2, 0x08, 0x58, 0x04, 0x20, 0x48, 0x08, 0xE0,
- 0xFE, 0x06, 0x20, 0xC3, 0xE6, 0x08, 0x20, 0x27,
- 0x38, 0xE3, 0x19, 0x16, 0x80, 0x03, 0x02, 0xC3,
- 0x6C, 0xC2, 0x0A, 0x00, 0x99, 0x06, 0x60, 0x04,
- 0x0C, 0xB8, 0xA0, 0xC2, 0xF4, 0x07, 0x8C, 0x07,
- 0x01, 0x00, 0x8D, 0x07, 0x06, 0x06, 0xCE, 0x04,
- 0xE0, 0xC3, 0x08, 0x06, 0x01, 0x13, 0x97, 0x06,
- 0x20, 0xD8, 0x07, 0x06, 0x17, 0x01, 0x8B, 0x07,
- 0x82, 0xFF, 0x0B, 0xC8, 0x04, 0x01, 0xA0, 0x06,
- 0xB4, 0xBE, 0x60, 0x04, 0x0C, 0xB8, 0xA0, 0xC2,
- 0xEE, 0x07, 0x8C, 0x07, 0x06, 0x00, 0x8D, 0x07,
- 0xEE, 0x08, 0xA0, 0xC3, 0xE6, 0x07, 0xE0, 0xC3,
- 0xE8, 0x07, 0x97, 0x06, 0xA0, 0xC2, 0xF4, 0x07,
- 0x8D, 0x07, 0xF4, 0x08, 0xDD, 0x04, 0x8C, 0x07,
- 0x02, 0x00, 0x97, 0x06, 0x8D, 0x07, 0x00, 0x80,
- 0xA0, 0xC2, 0xEE, 0x08, 0x0A, 0x88, 0x0C, 0x06,
- 0x14, 0x1B, 0x82, 0x07, 0xD0, 0xB9, 0xA0, 0xC3,
- 0xF0, 0x08, 0xE0, 0xC3, 0xF2, 0x08, 0x8B, 0x07,
- 0x0C, 0xE3, 0x8A, 0x02, 0x14, 0x00, 0x04, 0x1A,
- 0x8B, 0x07, 0xBA, 0xEA, 0x2A, 0x02, 0xEC, 0xFF,
- 0x8A, 0xA2, 0xCA, 0xA2, 0xDB, 0xC2, 0x01, 0x13,
- 0x9B, 0x06, 0x20, 0xC8, 0xEE, 0x08, 0xF2, 0x08,
- 0x20, 0xC8, 0x20, 0xE0, 0xEE, 0x08, 0x0D, 0xC8,
- 0xF0, 0x08, 0x8D, 0x07, 0xEC, 0x08, 0x20, 0xE0,
- 0x18, 0xE0, 0x65, 0x02, 0x00, 0x58, 0x58, 0x04,
- 0x45, 0x02, 0xFF, 0xA7, 0x80, 0x03, 0x60, 0xC0,
- 0xEE, 0x05, 0x21, 0x02, 0xE8, 0x03, 0x20, 0x01,
- 0x02, 0x01, 0x06, 0x00, 0x07, 0x16, 0x01, 0x88,
- 0xEE, 0x05, 0xF9, 0x16, 0x39, 0x10, 0x60, 0xD0,
- 0x03, 0x01, 0xF1, 0x13, 0x01, 0x02, 0x0A, 0x01,
- 0x4C, 0xCC, 0x4C, 0xCC, 0x4E, 0xCC, 0x4F, 0xCC,
- 0xB1, 0x07, 0x40, 0x00, 0x4D, 0xCC, 0x0A, 0xC8,
- 0x00, 0x01, 0x5B, 0x04, 0x60, 0xC0, 0xEE, 0x05,
- 0x21, 0x02, 0xE8, 0x03, 0x20, 0x01, 0x02, 0x01,
- 0x06, 0x00, 0x07, 0x16, 0x01, 0x88, 0xEE, 0x05,
- 0xF9, 0x16, 0x1E, 0x10, 0x60, 0xD0, 0x03, 0x01,
- 0xF1, 0x13, 0x01, 0x02, 0x0A, 0x01, 0x4C, 0xCC,
- 0x4C, 0xCC, 0x4E, 0xCC, 0x4F, 0xCC, 0xB1, 0x07,
- 0x40, 0x00, 0x4D, 0xCC, 0x0A, 0xC8, 0x00, 0x01,
- 0xA0, 0x03, 0x60, 0xD0, 0x03, 0x01, 0x01, 0x13,
- 0x5B, 0x04, 0x60, 0xC0, 0xEE, 0x05, 0x21, 0x02,
- 0xE8, 0x03, 0x20, 0x01, 0x02, 0x01, 0x06, 0x00,
- 0xF7, 0x16, 0x01, 0x88, 0xEE, 0x05, 0xF9, 0x16,
- 0xCD, 0x04, 0x8A, 0x07, 0x00, 0x40, 0x20, 0xC3,
- 0x00, 0x01, 0x0C, 0x01, 0x00, 0x80, 0x02, 0x13,
- 0x8A, 0x07, 0x00, 0x20, 0xA0, 0xC3, 0x0E, 0x01,
- 0xE0, 0xC3, 0x10, 0x01, 0xB0, 0x03, 0x20, 0xC3,
- 0x58, 0x07, 0x20, 0x23, 0x04, 0xE0, 0x02, 0x13,
- 0x60, 0x04, 0x8E, 0xB7, 0x60, 0x04, 0x8A, 0xA3,
- 0x8D, 0x07, 0x00, 0x20, 0x20, 0x20, 0x0A, 0xE0,
- 0x01, 0x16, 0x5B, 0x04, 0x0D, 0x02, 0x32, 0x0C,
- 0x5D, 0xC2, 0x01, 0x11, 0xDD, 0x04, 0xCD, 0x05,
- 0x0D, 0x88, 0x30, 0x0C, 0xF9, 0x16, 0x60, 0xC2,
- 0x0A, 0x06, 0x8D, 0x07, 0x6A, 0x09, 0xA0, 0x06,
- 0xF4, 0xBE, 0x09, 0x02, 0x48, 0x00, 0xE0, 0xC3,
- 0x30, 0x09, 0x03, 0x16, 0xE0, 0x01, 0x6A, 0x09,
- 0x10, 0x00, 0xE0, 0xC2, 0x6A, 0x09, 0x0F, 0x02,
- 0x00, 0x01, 0xC9, 0x26, 0x02, 0x13, 0x60, 0x04,
- 0x86, 0xBD, 0x09, 0x02, 0x00, 0x12, 0x4B, 0x01,
- 0x10, 0x00, 0x02, 0x13, 0x09, 0x02, 0x00, 0x13,
- 0x09, 0xD8, 0x2E, 0x09, 0x8F, 0x07, 0x00, 0x40,
- 0x89, 0x07, 0x6C, 0x09, 0xCB, 0x04, 0xF9, 0xE2,
- 0xF9, 0xE2, 0xF9, 0xE2, 0x07, 0x16, 0x8B, 0x07,
- 0x34, 0x09, 0x8C, 0x07, 0x6C, 0x09, 0x3B, 0xCF,
- 0x3B, 0xCF, 0x1B, 0xC7, 0x20, 0xC3, 0x6C, 0x09,
- 0x19, 0x11, 0x8F, 0x07, 0x00, 0x20, 0x89, 0x07,
- 0x7A, 0x09, 0xA0, 0x06, 0x3A, 0xBB, 0xA0, 0x06,
- 0x3A, 0xBB, 0x12, 0x10, 0x4C, 0xCE, 0x5B, 0x04,
- 0x19, 0xC3, 0x02, 0x16, 0x8C, 0x07, 0x1A, 0x00,
- 0x4C, 0xC3, 0x2D, 0x02, 0xF8, 0xFF, 0x0A, 0x02,
- 0x09, 0x00, 0x2D, 0x02, 0xFA, 0xFF, 0xF2, 0x13,
- 0x0A, 0x06, 0xFB, 0x16, 0x60, 0x04, 0x86, 0xBD,
- 0x8F, 0x07, 0x00, 0x10, 0xD9, 0xC2, 0xFA, 0x11,
- 0x02, 0x16, 0x8B, 0x07, 0x00, 0x04, 0x4B, 0xC3,
- 0x8D, 0x02, 0x20, 0x00, 0x02, 0x14, 0x0D, 0x02,
- 0x20, 0x00, 0x8D, 0x02, 0x00, 0x04, 0x02, 0x12,
- 0x0D, 0x02, 0x00, 0x04, 0x2D, 0x02, 0xF8, 0xFF,
- 0x0D, 0xC8, 0x2C, 0x09, 0x2B, 0x02, 0xFF, 0x03,
- 0x8B, 0x01, 0xFF, 0x03, 0x4B, 0xCE, 0x60, 0xC3,
- 0x6A, 0x09, 0x60, 0x23, 0x18, 0xE0, 0x0C, 0x16,
- 0x49, 0xC3, 0xDD, 0xC2, 0x0F, 0x02, 0x01, 0x01,
- 0x8B, 0x01, 0x80, 0xC0, 0xD7, 0x16, 0x8F, 0x05,
- 0xED, 0xC2, 0x02, 0x00, 0xD3, 0x16, 0x02, 0x10,
- 0x8D, 0x07, 0xBA, 0xEA, 0x3D, 0xC8, 0xA8, 0x09,
- 0x1D, 0xC8, 0xAA, 0x09, 0xCB, 0x04, 0xE0, 0x04,
- 0xF8, 0x05, 0xE0, 0x04, 0x66, 0x09, 0x20, 0xC8,
- 0x30, 0x0C, 0x80, 0x09, 0xA0, 0x07, 0x82, 0x09,
- 0xFE, 0xDF, 0x8D, 0x07, 0xFE, 0xDF, 0xE0, 0xC3,
- 0xD8, 0x07, 0xE0, 0x23, 0x16, 0xE0, 0x24, 0x16,
- 0xE0, 0xC3, 0x30, 0x0C, 0x4F, 0x63, 0xFF, 0x04,
- 0xFF, 0x04, 0x4D, 0x06, 0xFD, 0x16, 0x8D, 0x07,
- 0xFE, 0xDF, 0x20, 0x04, 0xA2, 0xEA, 0xA0, 0xC3,
- 0xA2, 0xEA, 0xEE, 0xC3, 0x12, 0x00, 0xAA, 0x16,
- 0x6E, 0xC3, 0x18, 0x00, 0xAD, 0x09, 0x8C, 0x07,
- 0x00, 0xE0, 0xAC, 0x09, 0x0D, 0x63, 0x0C, 0x13,
- 0x6E, 0xC3, 0x18, 0x00, 0xAD, 0x09, 0x2D, 0x02,
- 0x40, 0x00, 0x1D, 0x0A, 0x2D, 0x02, 0x32, 0x0C,
- 0xBD, 0x07, 0xFF, 0x7F, 0x0C, 0x06, 0xFC, 0x16,
- 0x20, 0xC3, 0x46, 0x04, 0x8C, 0x02, 0x80, 0x00,
- 0x13, 0x1A, 0xAC, 0x02, 0x0C, 0xC8, 0x9A, 0x00,
- 0xE0, 0x02, 0x80, 0x00, 0x88, 0x07, 0x80, 0x00,
- 0x60, 0xC2, 0x46, 0x04, 0xA0, 0x06, 0x28, 0xAD,
- 0x02, 0x10, 0x9D, 0x00, 0x05, 0x10, 0x9D, 0x00,
- 0x8F, 0x07, 0x00, 0x08, 0x60, 0x04, 0x86, 0xBD,
- 0x4B, 0x2D, 0x81, 0xC3, 0xC9, 0x05, 0x8F, 0x07,
- 0x00, 0x10, 0x8E, 0x02, 0x02, 0x00, 0xF6, 0x11,
- 0x8F, 0x07, 0x00, 0x04, 0xC9, 0x05, 0xD9, 0xC2,
- 0xE0, 0x26, 0x26, 0xE0, 0x02, 0x16, 0x2B, 0x02,
- 0x06, 0x00, 0x4B, 0xC6, 0x4B, 0xC3, 0xCB, 0x72,
- 0x2E, 0x02, 0xFE, 0xFF, 0x8B, 0x83, 0xE6, 0x1B,
- 0xCD, 0x06, 0x4D, 0x73, 0xCD, 0x82, 0xE2, 0x1B,
- 0xE0, 0x04, 0x1A, 0x09, 0xE0, 0x04, 0x1C, 0x09,
- 0x4D, 0xC3, 0x02, 0x13, 0x60, 0x66, 0x12, 0xE0,
- 0xC9, 0x05, 0xCF, 0x04, 0x81, 0x2D, 0x01, 0xC8,
- 0x6C, 0x01, 0xD4, 0x13, 0x0F, 0xC8, 0x00, 0xFC,
- 0xC1, 0xC3, 0x0D, 0x06, 0xF7, 0x15, 0x0D, 0x02,
- 0x36, 0x07, 0x0E, 0x02, 0x98, 0x08, 0x0C, 0x02,
- 0x03, 0x00, 0x8D, 0xCB, 0x02, 0x00, 0x81, 0x2D,
- 0x81, 0xCB, 0x06, 0x00, 0xC3, 0x13, 0xEE, 0x04,
- 0x0C, 0x00, 0x2E, 0x02, 0x18, 0x00, 0x0C, 0x06,
- 0xF4, 0x16, 0xE0, 0x04, 0x96, 0x08, 0x1F, 0x2E,
- 0xB9, 0xC3, 0xD9, 0xC3, 0x89, 0x07, 0x12, 0x00,
- 0x8D, 0x07, 0x3A, 0x09, 0xA0, 0x06, 0xF4, 0xBE,
- 0x60, 0xC3, 0xD8, 0x07, 0x60, 0x23, 0x16, 0xE0,
- 0x09, 0x16, 0x20, 0xE8, 0x10, 0xE0, 0x6A, 0x09,
- 0x20, 0xE8, 0x18, 0xE0, 0x98, 0x07, 0x20, 0xE8,
- 0x12, 0xE0, 0x78, 0x07, 0x60, 0xC3, 0x6A, 0x09,
- 0x60, 0x23, 0x1E, 0xE0, 0x03, 0x16, 0x20, 0x48,
- 0xA4, 0xE3, 0x6A, 0x09, 0x60, 0x23, 0x22, 0xE0,
- 0x06, 0x13, 0x60, 0x27, 0xA6, 0xE3, 0x03, 0x13,
- 0x20, 0xE8, 0x10, 0xE0, 0x6A, 0x09, 0x20, 0x2D,
- 0x00, 0x00, 0x8E, 0x07, 0x00, 0x00, 0xA0, 0x06,
- 0xD4, 0xBE, 0x4E, 0x05, 0x0E, 0x2C, 0xA0, 0xC0,
- 0x04, 0x08, 0xEF, 0xC3, 0x06, 0x00, 0x1B, 0x16,
- 0xA0, 0xC3, 0x72, 0x09, 0xE0, 0xC3, 0x74, 0x09,
- 0xA0, 0x06, 0xC2, 0xBD, 0xA0, 0xC3, 0x76, 0x09,
- 0xE0, 0xC3, 0x78, 0x09, 0xA0, 0x06, 0xE0, 0xBD,
- 0x20, 0xE0, 0x0A, 0xE0, 0x60, 0xC3, 0xD8, 0x07,
- 0x60, 0x23, 0x16, 0xE0, 0x05, 0x16, 0xE0, 0x04,
- 0x2E, 0x06, 0x60, 0x41, 0x04, 0xE0, 0x4D, 0x2E,
- 0x8D, 0x07, 0x00, 0x80, 0x52, 0x04, 0xCF, 0x73,
- 0x2F, 0x02, 0x00, 0x02, 0x4F, 0xC3, 0x52, 0x04,
- 0x20, 0x20, 0x0A, 0xE0, 0x03, 0x13, 0x8D, 0x07,
- 0x00, 0x10, 0x5B, 0x04, 0x20, 0x40, 0x0A, 0xE0,
- 0x40, 0x02, 0xFF, 0xF0, 0x8E, 0x07, 0x02, 0x00,
- 0xA0, 0x06, 0xD4, 0xBE, 0x4E, 0x05, 0x0E, 0x2C,
- 0xA0, 0xC0, 0x04, 0x08, 0xA0, 0x06, 0xB4, 0xBE,
- 0x60, 0xC3, 0xD8, 0x07, 0x60, 0x23, 0x16, 0xE0,
- 0x66, 0x16, 0x20, 0x04, 0xB6, 0xEA, 0x63, 0x10,
- 0x6E, 0x02, 0x00, 0x80, 0x8D, 0x07, 0x00, 0xC0,
- 0x0D, 0xC8, 0xA6, 0x01, 0x0E, 0xC8, 0x72, 0x09,
- 0x0F, 0xC8, 0x74, 0x09, 0x0E, 0xC8, 0xA8, 0x01,
- 0x0F, 0xC8, 0xAA, 0x01, 0x12, 0x10, 0x8F, 0x01,
- 0x01, 0x00, 0x8A, 0x07, 0x76, 0x09, 0xA0, 0xE3,
- 0x4E, 0x09, 0x8E, 0xCE, 0x9A, 0x01, 0xFE, 0xFF,
- 0xE0, 0xE3, 0x50, 0x09, 0x8F, 0xE6, 0x8A, 0x07,
- 0xAC, 0x01, 0x8E, 0xCE, 0x9A, 0x01, 0xFE, 0xFF,
- 0x8F, 0xE6, 0x20, 0x20, 0x0A, 0xE0, 0x3F, 0x13,
- 0x8D, 0x07, 0x00, 0x10, 0x5B, 0x04, 0x20, 0x20,
- 0x0A, 0xE0, 0x03, 0x13, 0x0D, 0x02, 0x00, 0x10,
- 0x5B, 0x04, 0x8E, 0xC3, 0x04, 0x13, 0xE0, 0x01,
- 0x50, 0x09, 0x00, 0x01, 0x06, 0x10, 0xA0, 0x01,
- 0x50, 0x09, 0x00, 0x01, 0xA0, 0x01, 0x78, 0x09,
- 0x00, 0x01, 0xA0, 0xC3, 0x76, 0x09, 0xE0, 0xC3,
- 0x78, 0x09, 0xA0, 0xE3, 0x4E, 0x09, 0xE0, 0xE3,
- 0x50, 0x09, 0x0E, 0xC8, 0xAC, 0x01, 0x0F, 0xC8,
- 0xAE, 0x01, 0x0E, 0xC8, 0x76, 0x09, 0x0F, 0xC8,
- 0x78, 0x09, 0x19, 0x10, 0x6E, 0x02, 0x00, 0x80,
- 0x0E, 0xC8, 0xA6, 0x01, 0x20, 0x20, 0x0A, 0xE0,
- 0x12, 0x13, 0x0D, 0x02, 0x00, 0x10, 0x5B, 0x04,
- 0x8D, 0x07, 0x28, 0x07, 0x89, 0x07, 0x0E, 0x00,
- 0xA0, 0x06, 0xFA, 0xBE, 0x8D, 0x07, 0x28, 0x07,
- 0xFD, 0x04, 0x8D, 0x02, 0x36, 0x07, 0xFC, 0x16,
- 0x20, 0x48, 0x14, 0xE0, 0xFE, 0x06, 0x8D, 0x07,
- 0x00, 0x80, 0x52, 0x04, 0xA0, 0xC2, 0xEE, 0x07,
- 0x8C, 0x07, 0x04, 0x00, 0x8D, 0x07, 0xF0, 0x08,
- 0x97, 0x06, 0x7D, 0xC2, 0x5D, 0xC3, 0x60, 0x43,
- 0x22, 0xE0, 0xA0, 0x06, 0xFA, 0xBE, 0xEF, 0x10,
- 0x0E, 0xC8, 0x06, 0x06, 0x0F, 0xC8, 0x08, 0x06,
- 0xEA, 0x10, 0xB0, 0x03, 0xA0, 0x01, 0x60, 0x07,
- 0x26, 0x00, 0x40, 0x02, 0x00, 0xC0, 0xE0, 0x04,
- 0x06, 0x06, 0x8C, 0x07, 0x10, 0x40, 0xCC, 0x44,
- 0xE0, 0x04, 0xFE, 0x06, 0x85, 0x07, 0x40, 0x80,
- 0x5B, 0x04, 0x02, 0xC8, 0x04, 0x08, 0x8F, 0x07,
- 0xFA, 0x07, 0xCE, 0xCB, 0x02, 0x00, 0x8E, 0x07,
- 0x36, 0x07, 0xCE, 0xCB, 0x04, 0x00, 0x8D, 0x07,
- 0x30, 0x06, 0x8E, 0x07, 0x10, 0x00, 0x4D, 0x2C,
- 0x5B, 0x04, 0xA0, 0xC2, 0xF2, 0x07, 0x02, 0x10,
- 0xA0, 0xC2, 0xF8, 0x07, 0x0B, 0xC8, 0xEA, 0x08,
- 0x09, 0xC3, 0x0A, 0x13, 0xA0, 0x06, 0x36, 0xBA,
- 0xA0, 0xC2, 0x00, 0x01, 0xA0, 0xE2, 0x06, 0xE0,
- 0x4C, 0xA3, 0xCC, 0xA3, 0x01, 0x17, 0x8E, 0x05,
- 0x4C, 0x62, 0xE0, 0xC2, 0xEA, 0x08, 0x5B, 0x04,
- 0x8D, 0x07, 0x00, 0x10, 0x20, 0x20, 0x0A, 0xE0,
- 0x01, 0x13, 0x5B, 0x04, 0x0D, 0x02, 0x48, 0x00,
- 0xE0, 0xC3, 0x30, 0x09, 0x02, 0x16, 0xCE, 0x01,
- 0x10, 0x00, 0x8D, 0x27, 0x03, 0x13, 0x0D, 0x02,
- 0x00, 0x01, 0x52, 0x04, 0x00, 0x03, 0x02, 0x00,
- 0x60, 0xC3, 0x6A, 0x09, 0x4D, 0x02, 0x08, 0x80,
- 0x4E, 0x02, 0xF7, 0x7F, 0x8D, 0xE3, 0xE0, 0xC3,
- 0xD8, 0x07, 0xE0, 0x23, 0x16, 0xE0, 0x04, 0x13,
- 0x8D, 0x07, 0x06, 0x00, 0x8D, 0x27, 0x02, 0x13,
- 0xA0, 0xE3, 0x10, 0xE0, 0x0E, 0xC8, 0x6A, 0x09,
- 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80, 0x09, 0x13,
- 0x0D, 0x02, 0x00, 0x12, 0x4E, 0x01, 0x10, 0x00,
- 0x02, 0x13, 0x0D, 0x02, 0x00, 0x13, 0x0D, 0xD8,
- 0x2E, 0x09, 0x60, 0xC3, 0x80, 0x01, 0x4E, 0x02,
- 0x01, 0x00, 0x4D, 0x02, 0xFE, 0xFF, 0x4E, 0xE3,
- 0x0D, 0xC8, 0x80, 0x01, 0x20, 0xD8, 0x40, 0xE2,
- 0x2F, 0x09, 0x20, 0x01, 0x6A, 0x09, 0x06, 0x00,
- 0x03, 0x13, 0x20, 0xD8, 0xD0, 0xE1, 0x2F, 0x09,
- 0x20, 0x98, 0x83, 0x01, 0x00, 0xE2, 0x03, 0x13,
- 0x20, 0xD8, 0x2F, 0x09, 0x83, 0x01, 0x00, 0x03,
- 0x0F, 0x00, 0x60, 0x04, 0x88, 0xBE, 0x20, 0x20,
- 0x0A, 0xE0, 0x03, 0x13, 0x0D, 0x02, 0x00, 0x10,
- 0x5B, 0x04, 0x09, 0x02, 0x08, 0x00, 0x0D, 0x02,
- 0x58, 0x09, 0xA0, 0x06, 0xF4, 0xBE, 0xA0, 0x07,
- 0x02, 0x02, 0x00, 0x00, 0x0D, 0x02, 0x00, 0x04,
- 0xE0, 0xC3, 0x58, 0x09, 0x0F, 0x01, 0x00, 0x7C,
- 0x01, 0x13, 0x52, 0x04, 0x8F, 0xC3, 0x4E, 0x02,
- 0x0F, 0x00, 0xFB, 0x13, 0x8E, 0x02, 0x0F, 0x00,
- 0xF8, 0x13, 0x0D, 0x02, 0x00, 0x40, 0x4F, 0xC2,
- 0x49, 0x09, 0x49, 0x02, 0x3F, 0x00, 0x09, 0x01,
- 0x01, 0x00, 0xEF, 0x16, 0x89, 0x02, 0x06, 0x00,
- 0xEC, 0x1A, 0x89, 0x02, 0x20, 0x00, 0xE9, 0x14,
- 0xC9, 0x06, 0x1F, 0x09, 0x4F, 0x02, 0x00, 0x40,
- 0x4F, 0xE2, 0x69, 0x02, 0x00, 0x80, 0x09, 0xC8,
- 0x58, 0x09, 0x0F, 0x02, 0xFF, 0xFF, 0x4E, 0xC2,
- 0x1F, 0x09, 0x09, 0x06, 0xFD, 0x16, 0x4F, 0x05,
- 0x0D, 0x02, 0x00, 0x20, 0x60, 0xC2, 0x5A, 0x09,
- 0xD4, 0x13, 0x4F, 0x26, 0xD2, 0x16, 0x0D, 0x02,
- 0x00, 0x10, 0x60, 0xC2, 0x5C, 0x09, 0xCD, 0x13,
- 0x4F, 0x26, 0xCB, 0x16, 0x0D, 0x02, 0x00, 0x30,
- 0x20, 0x88, 0x5A, 0x09, 0x5C, 0x09, 0xC5, 0x13,
- 0xE0, 0xC3, 0x5A, 0x09, 0x4E, 0xC2, 0x1F, 0x0A,
- 0x09, 0x06, 0xFD, 0x16, 0xE0, 0xE3, 0x5E, 0x09,
- 0x0F, 0xC8, 0x5A, 0x09, 0xE0, 0xC3, 0x5C, 0x09,
- 0x4E, 0xC2, 0x1F, 0x0A, 0x09, 0x06, 0xFD, 0x16,
- 0xE0, 0xE3, 0x5E, 0x09, 0x0F, 0xC8, 0x5C, 0x09,
- 0x0F, 0x02, 0xFF, 0xFF, 0x4E, 0xC2, 0x1F, 0x0A,
- 0x09, 0x06, 0xFD, 0x16, 0x0D, 0x02, 0x00, 0x08,
- 0x60, 0xC2, 0x5E, 0x09, 0x4F, 0x26, 0xA5, 0x16,
- 0x4F, 0x05, 0x0F, 0xC8, 0x5E, 0x09, 0x0F, 0x02,
- 0x02, 0x02, 0x0E, 0x02, 0x03, 0x00, 0x60, 0xC3,
- 0x40, 0x01, 0x0C, 0x02, 0xFE, 0xC0, 0xA0, 0x01,
- 0x40, 0x01, 0x00, 0x04, 0xCF, 0x05, 0x09, 0x02,
- 0x55, 0x55, 0x9C, 0x06, 0x49, 0x05, 0x9C, 0x06,
- 0x09, 0x07, 0x9C, 0x06, 0x49, 0x05, 0x9C, 0x06,
- 0x0E, 0x06, 0xF4, 0x16, 0xA0, 0x01, 0x40, 0x01,
- 0x00, 0x40, 0x0D, 0xC8, 0x40, 0x01, 0x09, 0x02,
- 0x08, 0x00, 0x0E, 0x02, 0x58, 0x09, 0x0F, 0x02,
- 0x02, 0x02, 0xFE, 0xCF, 0x49, 0x06, 0xFD, 0x16,
- 0x60, 0x04, 0x88, 0xBE, 0xC9, 0xC7, 0x5F, 0x82,
- 0x01, 0x16, 0x5B, 0x04, 0xA0, 0x01, 0x40, 0x01,
- 0x00, 0x40, 0x0D, 0xC8, 0x40, 0x01, 0x0D, 0x02,
- 0x00, 0x01, 0x52, 0x04, 0x8D, 0x07, 0x00, 0x10,
- 0x20, 0x20, 0x0A, 0xE0, 0x0A, 0x16, 0x8D, 0x07,
- 0x00, 0x08, 0x20, 0x20, 0x10, 0xE0, 0x05, 0x13,
- 0x8D, 0x07, 0x00, 0x40, 0x4F, 0x01, 0x01, 0x00,
- 0x01, 0x16, 0x5B, 0x04, 0x20, 0xE0, 0x10, 0xE0,
- 0x20, 0x07, 0x9C, 0x08, 0x20, 0x07, 0xB4, 0x08,
- 0x20, 0x07, 0xCC, 0x08, 0xA0, 0x07, 0xA2, 0x08,
- 0x84, 0x02, 0xA0, 0x07, 0xBA, 0x08, 0x84, 0x02,
- 0xA0, 0x07, 0xD2, 0x08, 0x84, 0x02, 0xA0, 0x07,
- 0x04, 0x09, 0x00, 0x40, 0xE0, 0x04, 0x06, 0x09,
- 0xE0, 0x04, 0x08, 0x09, 0x0E, 0xC8, 0x4C, 0x08,
- 0x0F, 0xC8, 0x4E, 0x08, 0x0E, 0xC8, 0x8E, 0x08,
- 0x0F, 0xC8, 0x90, 0x08, 0xE0, 0x04, 0x5A, 0x08,
- 0xE0, 0x04, 0x60, 0x08, 0xE0, 0x02, 0x78, 0x07,
- 0xE0, 0x04, 0x94, 0x08, 0x20, 0x40, 0x40, 0xE3,
- 0x20, 0xE0, 0x0C, 0xE0, 0x60, 0x04, 0xBC, 0xC6,
- 0x80, 0x01, 0x00, 0xF0, 0xC0, 0x01, 0x00, 0x40,
- 0x10, 0x10, 0x80, 0x01, 0x00, 0xF0, 0x0D, 0x10,
- 0xC0, 0x01, 0x00, 0xF0, 0x20, 0x40, 0x06, 0xE0,
- 0x08, 0x10, 0xC0, 0x01, 0x00, 0xF0, 0x80, 0x01,
- 0x00, 0x20, 0xE0, 0xC3, 0x94, 0x08, 0x01, 0x16,
- 0x5B, 0x04, 0x4B, 0xC0, 0x20, 0x04, 0xDA, 0xEA,
- 0x40, 0x01, 0x00, 0x20, 0xFB, 0x16, 0x51, 0x04,
- 0xA0, 0xC2, 0xD8, 0x07, 0x4A, 0x01, 0x40, 0x00,
- 0x01, 0x16, 0x5B, 0x04, 0xE0, 0x02, 0x78, 0x07,
- 0x20, 0x20, 0x0C, 0xE0, 0xEF, 0x16, 0x43, 0xC2,
- 0x02, 0x13, 0xA0, 0x06, 0x1A, 0xC3, 0x20, 0x2F,
- 0x36, 0x07, 0x20, 0x40, 0x0C, 0xE0, 0xA0, 0x06,
- 0xAC, 0xC1, 0xA0, 0xC3, 0x94, 0x08, 0xFB, 0x16,
- 0xA0, 0x06, 0x3A, 0xC2, 0x8E, 0x07, 0x04, 0x09,
- 0x9E, 0x07, 0x00, 0x80, 0x20, 0x20, 0x10, 0xE0,
- 0x05, 0x16, 0x8F, 0x07, 0x4C, 0x08, 0xBF, 0xCF,
- 0xBF, 0xCF, 0x9F, 0xC7, 0xA0, 0x06, 0x5A, 0xC2,
- 0x20, 0xE8, 0x3C, 0xE3, 0x62, 0x07, 0xA0, 0x06,
- 0x3A, 0xC2, 0x20, 0x48, 0x3C, 0xE3, 0x62, 0x07,
- 0x20, 0x40, 0x40, 0xE3, 0x20, 0xE0, 0x04, 0xE0,
- 0x20, 0x48, 0x10, 0xE0, 0x58, 0x07, 0x5B, 0x04,
- 0x80, 0x01, 0x00, 0xF0, 0x20, 0xE0, 0x04, 0xE0,
- 0x60, 0x01, 0x60, 0x07, 0x02, 0x00, 0x02, 0x13,
- 0x9B, 0x06, 0xB8, 0x10, 0x20, 0xE8, 0x1E, 0xE0,
- 0x58, 0x07, 0xB4, 0x10, 0x9B, 0x06, 0x80, 0x03,
- 0xE0, 0x02, 0x58, 0x07, 0x00, 0x01, 0x00, 0x40,
- 0x07, 0x16, 0x8D, 0x07, 0x00, 0x09, 0xA0, 0x06,
- 0x68, 0xB8, 0xE0, 0x02, 0x78, 0x07, 0x5B, 0x04,
- 0xC4, 0x01, 0x02, 0x00, 0xE0, 0x02, 0x78, 0x07,
- 0x5B, 0x04, 0x0E, 0x68, 0x96, 0x08, 0xE9, 0x04,
- 0x0C, 0x00, 0x11, 0x10, 0x0E, 0x02, 0x00, 0x23,
- 0x4E, 0xDB, 0x01, 0x00, 0xCC, 0x01, 0x00, 0x04,
- 0x4C, 0xD7, 0x1C, 0x10, 0x60, 0xC2, 0x5C, 0x07,
- 0x20, 0x06, 0x94, 0x08, 0xA9, 0xC2, 0x08, 0x00,
- 0xA9, 0xC3, 0x0C, 0x00, 0xEA, 0x16, 0x29, 0x07,
- 0x04, 0x00, 0x69, 0x01, 0x0A, 0x00, 0x01, 0x00,
- 0x2D, 0x13, 0x49, 0xC3, 0x2D, 0x02, 0x0E, 0x00,
- 0x0A, 0xC3, 0x1D, 0xD3, 0x8C, 0x01, 0x00, 0x84,
- 0xCC, 0x01, 0x00, 0x40, 0x0A, 0x01, 0x00, 0x5E,
- 0xDD, 0x16, 0x4C, 0xC7, 0xA9, 0xC3, 0x10, 0x00,
- 0xE9, 0xC3, 0x12, 0x00, 0x41, 0xCA, 0x10, 0x00,
- 0x2F, 0x02, 0x04, 0x00, 0x01, 0x17, 0x8E, 0x05,
- 0x8C, 0x07, 0x02, 0x00, 0xA0, 0xC2, 0xF6, 0x07,
- 0xA0, 0x06, 0x00, 0xBA, 0x69, 0xC0, 0x10, 0x00,
- 0x29, 0xC8, 0x14, 0x00, 0x06, 0x09, 0x29, 0xC8,
- 0x16, 0x00, 0x08, 0x09, 0x69, 0x01, 0x0E, 0x00,
- 0x00, 0x08, 0x04, 0x16, 0x90, 0x03, 0x7F, 0x00,
- 0xA0, 0x06, 0x5A, 0xC2, 0x40, 0x01, 0x00, 0x40,
- 0x01, 0x16, 0x51, 0x04, 0x60, 0x04, 0xBE, 0xC1,
- 0xA9, 0xC3, 0x0C, 0x00, 0x0B, 0x13, 0x0E, 0x68,
- 0x96, 0x08, 0xE9, 0x04, 0x0C, 0x00, 0x29, 0xC8,
- 0x06, 0x00, 0x6C, 0x01, 0xA0, 0xC3, 0x00, 0xFC,
- 0x01, 0x13, 0x1E, 0x2E, 0x29, 0x07, 0x04, 0x00,
- 0x5B, 0x04, 0x81, 0x07, 0x20, 0x20, 0x89, 0x07,
- 0x4C, 0x08, 0x41, 0xCE, 0x63, 0xCE, 0x10, 0x00,
- 0x63, 0xC6, 0x12, 0x00, 0xA0, 0x06, 0x54, 0xBA,
- 0x43, 0xC2, 0x02, 0x13, 0xA0, 0x06, 0x1A, 0xC3,
- 0x20, 0xE0, 0x10, 0xE0, 0x60, 0x04, 0xEC, 0xC1,
- 0x40, 0x01, 0x00, 0x04, 0xEA, 0x16, 0xA0, 0x06,
- 0xAC, 0xC1, 0xA0, 0xC2, 0xF0, 0x07, 0x8C, 0x07,
- 0x04, 0x00, 0x8D, 0x07, 0x4C, 0x08, 0xA0, 0xC3,
- 0x8E, 0x08, 0xE0, 0xC3, 0x90, 0x08, 0xA0, 0x06,
- 0x36, 0xBA, 0xE0, 0xC3, 0x4E, 0x08, 0x4F, 0x01,
- 0x01, 0x00, 0x13, 0x16, 0xE0, 0xC2, 0x94, 0x08,
- 0xEA, 0x16, 0x60, 0x04, 0xEC, 0xC1, 0xE0, 0xC3,
- 0x4E, 0x08, 0x4F, 0x01, 0x01, 0x00, 0x09, 0x16,
- 0x60, 0x04, 0xEC, 0xC1, 0xA0, 0x06, 0x54, 0xBA,
- 0xE0, 0xC3, 0x4E, 0x08, 0x4F, 0x01, 0x01, 0x00,
- 0xD7, 0x13, 0xA0, 0xC2, 0xF0, 0x07, 0x20, 0xC3,
- 0x7C, 0x09, 0x8D, 0x07, 0x4C, 0x08, 0x9D, 0xC3,
- 0xA0, 0x06, 0x36, 0xBA, 0xC0, 0x06, 0x20, 0xD0,
- 0x50, 0x08, 0xC0, 0x06, 0x40, 0x01, 0x00, 0x04,
- 0x0A, 0x16, 0x40, 0x01, 0x80, 0x00, 0x07, 0x13,
- 0x0E, 0xC8, 0x4C, 0x08, 0x0F, 0xC8, 0x4E, 0x08,
- 0xA0, 0x06, 0xA2, 0xC1, 0xD8, 0x10, 0x0E, 0xC8,
- 0x8E, 0x08, 0x0F, 0xC8, 0x90, 0x08, 0x40, 0x01,
- 0x00, 0x04, 0x0C, 0x13, 0x40, 0x01, 0x20, 0x00,
- 0x58, 0x16, 0x81, 0x07, 0x10, 0x20, 0x9F, 0x10,
- 0xA0, 0x06, 0xAC, 0xC1, 0xA0, 0xC3, 0x8E, 0x08,
- 0xE0, 0xC3, 0x90, 0x08, 0x83, 0x07, 0x98, 0x08,
- 0x63, 0x07, 0x04, 0x00, 0x2D, 0x11, 0x83, 0x07,
- 0xB0, 0x08, 0x63, 0x07, 0x04, 0x00, 0x28, 0x11,
- 0x83, 0x07, 0xC8, 0x08, 0x63, 0x07, 0x04, 0x00,
- 0x23, 0x11, 0xC3, 0x60, 0x60, 0xC2, 0x46, 0x07,
- 0xE7, 0x13, 0x69, 0x01, 0x0E, 0x00, 0x00, 0x08,
- 0xE3, 0x13, 0x00, 0x03, 0x02, 0x00, 0x19, 0xC8,
- 0x46, 0x07, 0x03, 0x16, 0xA0, 0x01, 0x3A, 0x07,
- 0x20, 0x00, 0x00, 0x03, 0x0F, 0x00, 0xC0, 0x01,
- 0x00, 0xF0, 0x80, 0x01, 0x00, 0x20, 0x01, 0x02,
- 0x06, 0xC4, 0x60, 0x04, 0x9A, 0xC2, 0x81, 0x07,
- 0x80, 0x20, 0xE0, 0xC8, 0x8E, 0x08, 0x14, 0x00,
- 0xE0, 0xC8, 0x90, 0x08, 0x16, 0x00, 0xC7, 0x10,
- 0xE0, 0xC8, 0x50, 0x08, 0x0E, 0x00, 0xCE, 0xC8,
- 0x10, 0x00, 0xCF, 0xC8, 0x12, 0x00, 0x40, 0x01,
- 0x20, 0x00, 0xBB, 0x16, 0xE3, 0xC1, 0x06, 0x00,
- 0xC7, 0xC8, 0x08, 0x00, 0x07, 0xC8, 0x6C, 0x01,
- 0x07, 0xC8, 0xE0, 0x08, 0x08, 0x02, 0x02, 0xFC,
- 0xB8, 0x07, 0x00, 0x81, 0xE0, 0xC1, 0xE8, 0x00,
- 0x07, 0xCE, 0x20, 0xC8, 0x52, 0x08, 0x92, 0x08,
- 0xDA, 0x13, 0xCE, 0xC8, 0x14, 0x00, 0xCF, 0xC8,
- 0x16, 0x00, 0x80, 0x01, 0x00, 0x04, 0x82, 0x07,
- 0x54, 0x08, 0x32, 0xC1, 0x08, 0x11, 0x72, 0xC1,
- 0x92, 0xC1, 0x82, 0x07, 0x8A, 0x08, 0x04, 0xC1,
- 0x07, 0x16, 0x60, 0x04, 0x8E, 0xC5, 0x72, 0xC1,
- 0xB2, 0xC1, 0x84, 0x01, 0x00, 0x80, 0xF9, 0x13,
- 0x04, 0x68, 0x92, 0x08, 0xC7, 0xC1, 0x37, 0x16,
- 0x20, 0x98, 0x97, 0x08, 0x85, 0x09, 0x16, 0x16,
- 0x81, 0x07, 0x40, 0x20, 0xE0, 0xC1, 0x94, 0x08,
- 0x57, 0x13, 0xA0, 0x06, 0xAC, 0xC1, 0xF4, 0x10,
- 0xE0, 0xC2, 0x3A, 0x07, 0xE0, 0x42, 0x62, 0x07,
- 0xE0, 0x26, 0x3A, 0xE3, 0x02, 0x13, 0xA0, 0x06,
- 0x92, 0xC1, 0xA0, 0x06, 0x54, 0xBA, 0x22, 0x10,
- 0xA0, 0x06, 0x9C, 0xC1, 0x81, 0x2D, 0x01, 0xC2,
- 0xFB, 0x13, 0xA0, 0x05, 0x96, 0x08, 0x23, 0xC8,
- 0x08, 0x00, 0x6C, 0x01, 0xA0, 0x07, 0x02, 0xFC,
- 0x00, 0x80, 0xC3, 0xC1, 0x27, 0x02, 0x06, 0x00,
- 0xA0, 0x06, 0x0C, 0xB5, 0xA3, 0x05, 0x0C, 0x00,
- 0x08, 0xC8, 0x6C, 0x01, 0x08, 0xC8, 0xE0, 0x08,
- 0x08, 0x02, 0x02, 0xFC, 0xB8, 0x07, 0x00, 0x81,
- 0xF8, 0xC1, 0x04, 0xC1, 0x37, 0x13, 0xE0, 0xD2,
- 0x03, 0x01, 0xD2, 0x13, 0x0B, 0x02, 0x0A, 0x01,
- 0xC4, 0xCE, 0xC7, 0xCE, 0xC5, 0xCE, 0xC6, 0xCE,
- 0xFB, 0x04, 0x09, 0x02, 0x00, 0x04, 0x48, 0xA2,
- 0xC9, 0xC6, 0x20, 0xA8, 0xE0, 0x08, 0x12, 0x01,
- 0x20, 0xC8, 0xF2, 0x07, 0x00, 0x01, 0x47, 0xC2,
- 0xC4, 0x81, 0x01, 0x14, 0x44, 0xC2, 0xC9, 0x61,
- 0x09, 0xA2, 0x89, 0xA1, 0x01, 0x17, 0x85, 0x05,
- 0x09, 0x61, 0xA8, 0x16, 0x82, 0x02, 0x8A, 0x08,
- 0x05, 0x16, 0x40, 0x01, 0x10, 0x00, 0x12, 0x13,
- 0x60, 0x04, 0xA6, 0xC3, 0x60, 0x04, 0xBC, 0xC4,
- 0x60, 0x04, 0x40, 0xC3, 0x81, 0x07, 0x80, 0x20,
- 0xFB, 0x10, 0x81, 0x07, 0x80, 0x20, 0xF8, 0x10,
- 0x81, 0x07, 0x02, 0x20, 0xF5, 0x10, 0x81, 0x07,
- 0x04, 0x20, 0xF2, 0x10, 0x23, 0xC8, 0x08, 0x00,
- 0x6C, 0x01, 0x07, 0x05, 0xE0, 0xA1, 0xE8, 0x00,
- 0x0C, 0x02, 0x04, 0xFC, 0x07, 0xCF, 0xE0, 0xC2,
- 0x92, 0x08, 0xE8, 0x16, 0xE0, 0xD2, 0x03, 0x01,
- 0x10, 0x16, 0xE0, 0xC2, 0x3A, 0x07, 0xE0, 0x42,
- 0x62, 0x07, 0xE0, 0x26, 0x3A, 0xE3, 0x07, 0x13,
- 0x90, 0x03, 0xC8, 0x2F, 0xA0, 0x06, 0x92, 0xC1,
- 0xE0, 0xD2, 0x03, 0x01, 0x02, 0x16, 0xA0, 0x06,
- 0x54, 0xBA, 0x23, 0xC8, 0x06, 0x00, 0x6C, 0x01,
- 0xA3, 0xC2, 0x0E, 0x00, 0x4A, 0x01, 0x00, 0x01,
- 0x0B, 0x13, 0x0C, 0x02, 0x0E, 0xFC, 0x5C, 0xC2,
- 0x49, 0x02, 0x00, 0x80, 0x0D, 0x02, 0x6C, 0x09,
- 0x7D, 0xE2, 0x09, 0xCF, 0x3D, 0xCF, 0x3D, 0xCF,
- 0x0C, 0x02, 0x00, 0xFC, 0x6C, 0xC3, 0x06, 0x00,
- 0x4D, 0x02, 0xFF, 0xE0, 0x4A, 0x02, 0x00, 0x02,
- 0x8A, 0xA2, 0x8A, 0xA2, 0x4A, 0xE3, 0x60, 0xE3,
- 0x9E, 0x09, 0x0D, 0xCB, 0x06, 0x00, 0xCD, 0x06,
- 0x0B, 0x02, 0x0F, 0x00, 0xEC, 0x82, 0x04, 0x00,
- 0xAD, 0x11, 0xEC, 0xC3, 0x0E, 0x00, 0x11, 0x15,
- 0x10, 0x13, 0x6C, 0xC2, 0x14, 0x00, 0x49, 0x02,
- 0x00, 0x1F, 0xA7, 0x13, 0xC9, 0x06, 0x89, 0x02,
- 0x12, 0x00, 0xA3, 0x1B, 0x49, 0x01, 0x01, 0x00,
- 0xA0, 0x13, 0xC9, 0xA2, 0xEC, 0x82, 0x04, 0x00,
- 0x9C, 0x11, 0x4D, 0xA3, 0x9D, 0x18, 0x14, 0x11,
- 0x60, 0x01, 0x6A, 0x09, 0x00, 0x80, 0x18, 0x13,
- 0x1D, 0x09, 0xCC, 0xA2, 0xEB, 0xC2, 0x08, 0x00,
- 0x7B, 0x09, 0x4B, 0x02, 0x1E, 0x00, 0xA0, 0xC3,
- 0xF0, 0x06, 0xAB, 0x23, 0x04, 0xE0, 0x8F, 0x16,
- 0x60, 0x27, 0x3E, 0xE3, 0x8C, 0x16, 0x4D, 0xA3,
- 0x4D, 0xA3, 0x4D, 0xA3, 0xCD, 0x06, 0x4D, 0x02,
- 0x07, 0x00, 0x0D, 0x88, 0xEE, 0x06, 0x0A, 0x15,
- 0x90, 0x03, 0xFF, 0x6F, 0x53, 0x2F, 0xA0, 0x05,
- 0x94, 0x08, 0xC3, 0x04, 0xC0, 0x01, 0x00, 0x04,
- 0x60, 0x04, 0xAA, 0xC3, 0x60, 0x01, 0x6A, 0x09,
- 0x00, 0x80, 0xF2, 0x13, 0x01, 0x02, 0x08, 0x20,
- 0x60, 0x04, 0xA2, 0xC5, 0x8D, 0x07, 0x00, 0x10,
- 0x20, 0x20, 0x0A, 0xE0, 0x0A, 0x16, 0x8D, 0x07,
- 0x00, 0x08, 0x20, 0x20, 0x0E, 0xE0, 0x05, 0x13,
- 0x8D, 0x07, 0x00, 0x40, 0x4F, 0x01, 0x01, 0x00,
- 0x01, 0x16, 0x5B, 0x04, 0x20, 0xE0, 0x0E, 0xE0,
- 0xA0, 0x07, 0xFA, 0x08, 0x00, 0x80, 0x0E, 0xC8,
- 0xFA, 0x07, 0x0F, 0xC8, 0xFC, 0x07, 0x0E, 0xC8,
- 0x3C, 0x08, 0x0F, 0xC8, 0x3E, 0x08, 0xE0, 0x04,
- 0x08, 0x08, 0xE0, 0x04, 0x0E, 0x08, 0xE0, 0x02,
- 0x98, 0x07, 0x20, 0x40, 0x4C, 0xE3, 0x20, 0x07,
- 0x2E, 0x06, 0x60, 0x04, 0x12, 0xCA, 0x00, 0x70,
- 0x4B, 0xC0, 0xE0, 0x04, 0x2E, 0x06, 0x0B, 0x10,
- 0x20, 0xF0, 0x4B, 0xE3, 0x02, 0x10, 0x20, 0xF0,
- 0x4A, 0xE3, 0x4B, 0xC0, 0xE0, 0x04, 0x2E, 0x06,
- 0xE0, 0x01, 0x62, 0x07, 0x40, 0x00, 0x20, 0xE8,
- 0x46, 0xE3, 0x62, 0x07, 0x20, 0x04, 0xDA, 0xEA,
- 0x40, 0x01, 0x00, 0x20, 0x04, 0x13, 0xFA, 0x10,
- 0x40, 0x01, 0x00, 0x40, 0xF7, 0x16, 0x20, 0x07,
- 0x2E, 0x06, 0x20, 0x50, 0x50, 0xE3, 0x51, 0x04,
- 0xF1, 0x10, 0xE0, 0x02, 0x58, 0x07, 0x00, 0x01,
- 0x00, 0x40, 0x07, 0x16, 0x8D, 0x07, 0xF6, 0x08,
- 0xA0, 0x06, 0x68, 0xB8, 0xE0, 0x02, 0x98, 0x07,
- 0x5B, 0x04, 0xC4, 0x01, 0x04, 0x00, 0xE0, 0x02,
- 0x98, 0x07, 0x5B, 0x04, 0x60, 0x01, 0x60, 0x07,
- 0x04, 0x00, 0x06, 0x16, 0x20, 0xE8, 0x1C, 0xE0,
- 0x58, 0x07, 0x80, 0x03, 0xE0, 0x02, 0x98, 0x07,
- 0x20, 0xD8, 0xDC, 0x07, 0x17, 0x01, 0x8F, 0x07,
- 0x8E, 0xFF, 0x0F, 0xC8, 0x04, 0x01, 0x20, 0xE8,
- 0x06, 0xE0, 0x58, 0x07, 0x80, 0x01, 0x00, 0x80,
- 0x5B, 0x04, 0xE0, 0xC2, 0x4A, 0x08, 0xC3, 0x82,
- 0x03, 0x13, 0xDB, 0x2D, 0x03, 0xC8, 0x4A, 0x08,
- 0x49, 0x01, 0x00, 0x01, 0x02, 0x16, 0x60, 0x04,
- 0x52, 0xC9, 0xE0, 0xC0, 0xF8, 0x05, 0xFD, 0x13,
- 0x03, 0xC8, 0x6C, 0x01, 0x20, 0xC8, 0x00, 0xFC,
- 0xF8, 0x05, 0x88, 0x07, 0x02, 0xFC, 0x78, 0xC2,
- 0xF8, 0xC1, 0x28, 0x02, 0x00, 0x04, 0x49, 0x01,
- 0x00, 0x01, 0x4D, 0x16, 0x09, 0x01, 0x00, 0x5E,
- 0x29, 0x16, 0x49, 0x01, 0x02, 0x00, 0x0B, 0x16,
- 0x60, 0x01, 0x46, 0x08, 0x00, 0x02, 0x0A, 0x16,
- 0x27, 0x02, 0x04, 0x00, 0x07, 0x88, 0x7E, 0x09,
- 0x05, 0x12, 0x27, 0x02, 0xFC, 0xFF, 0xA0, 0x01,
- 0x46, 0x08, 0x00, 0x02, 0xC7, 0xC1, 0x37, 0x15,
- 0xD3, 0x2D, 0xE0, 0xC0, 0x4A, 0x08, 0x07, 0xA8,
- 0x48, 0x08, 0x07, 0xA8, 0x44, 0x08, 0x0C, 0x15,
- 0x20, 0xC8, 0x3C, 0x08, 0xFA, 0x07, 0x20, 0xC8,
- 0x3E, 0x08, 0xFC, 0x07, 0x20, 0xC8, 0x40, 0x08,
- 0x3C, 0x08, 0x20, 0xC8, 0x42, 0x08, 0x3E, 0x08,
- 0x60, 0x04, 0x52, 0xC9, 0xA0, 0x06, 0x54, 0xBA,
- 0xD3, 0x2D, 0xE0, 0xC2, 0x4A, 0x08, 0xC3, 0x82,
- 0x01, 0x13, 0xDB, 0x2D, 0x20, 0x88, 0x3E, 0x08,
- 0x3A, 0x08, 0x0D, 0x16, 0x20, 0x88, 0x3C, 0x08,
- 0x38, 0x08, 0x09, 0x16, 0xE0, 0x04, 0x44, 0x08,
- 0x82, 0x07, 0x02, 0x08, 0x04, 0x61, 0xE0, 0x04,
- 0x48, 0x08, 0x60, 0x04, 0x1E, 0xCA, 0x20, 0xC8,
- 0x38, 0x08, 0xFA, 0x07, 0x20, 0xC8, 0x3A, 0x08,
- 0xFC, 0x07, 0x60, 0x04, 0x12, 0xCA, 0x07, 0xA8,
- 0x48, 0x08, 0x04, 0xC1, 0x1B, 0x16, 0x82, 0x02,
- 0x38, 0x08, 0x0A, 0x16, 0x60, 0x01, 0xFC, 0x07,
- 0x01, 0x00, 0x02, 0x16, 0xA0, 0x06, 0x6E, 0xCB,
- 0xA0, 0x06, 0xFC, 0xCA, 0x80, 0x01, 0x10, 0x00,
- 0x32, 0xC1, 0x07, 0x11, 0x72, 0xC1, 0x92, 0xC1,
- 0x82, 0x07, 0x38, 0x08, 0x04, 0xC1, 0x06, 0x16,
- 0xEA, 0x10, 0x72, 0xC1, 0xB2, 0xC1, 0x84, 0x01,
- 0x00, 0x80, 0xE5, 0x13, 0xE0, 0xD2, 0x03, 0x01,
- 0x34, 0x13, 0x0B, 0x02, 0x0A, 0x01, 0xC4, 0xCE,
- 0xC7, 0xCE, 0xC5, 0xCE, 0xC6, 0xCE, 0xFB, 0x04,
- 0xC8, 0xC6, 0x03, 0xA8, 0x12, 0x01, 0x20, 0xC8,
- 0xF8, 0x07, 0x00, 0x01, 0xC7, 0xC2, 0xC4, 0x81,
- 0x01, 0x14, 0xC4, 0xC2, 0x0B, 0xA8, 0x44, 0x08,
- 0x0B, 0x61, 0x0B, 0xA2, 0x8B, 0xA1, 0x01, 0x17,
- 0x85, 0x05, 0xCB, 0x61, 0xC6, 0x16, 0x40, 0x01,
- 0x40, 0x00, 0x15, 0x16, 0x87, 0x07, 0x20, 0x00,
- 0xE0, 0x61, 0x44, 0x08, 0xC4, 0x81, 0x08, 0x1A,
- 0x07, 0xA8, 0x48, 0x08, 0x07, 0xA8, 0x44, 0x08,
- 0x07, 0x61, 0x87, 0xA1, 0x01, 0x17, 0x85, 0x05,
- 0x80, 0x01, 0x40, 0x00, 0x03, 0xC8, 0x6C, 0x01,
- 0xE0, 0xC1, 0x04, 0xFC, 0xAC, 0x10, 0x60, 0x04,
- 0xBC, 0xC7, 0x20, 0x01, 0x3A, 0x07, 0x00, 0x70,
- 0x04, 0x13, 0xA0, 0x06, 0x28, 0xC7, 0x20, 0x07,
- 0x2E, 0x06, 0xA0, 0x06, 0x54, 0xBA, 0xC1, 0x10,
- 0xE0, 0xD2, 0x03, 0x01, 0x0A, 0x16, 0x20, 0x01,
- 0x3A, 0x07, 0x00, 0x70, 0x04, 0x13, 0xA0, 0x06,
- 0x28, 0xC7, 0x20, 0x07, 0x2E, 0x06, 0xA0, 0x06,
- 0x54, 0xBA, 0x90, 0x03, 0xBF, 0x4F, 0xD3, 0x2D,
- 0x60, 0x01, 0xFC, 0x07, 0x01, 0x00, 0x02, 0x16,
- 0xA0, 0x06, 0x6E, 0xCB, 0x60, 0xD2, 0x46, 0x08,
- 0x89, 0x01, 0x00, 0xF1, 0xC9, 0x01, 0x00, 0x70,
- 0x40, 0x01, 0x10, 0x00, 0x1C, 0x13, 0x20, 0x88,
- 0x3E, 0x08, 0x3A, 0x08, 0x04, 0x16, 0x20, 0x88,
- 0x3C, 0x08, 0x38, 0x08, 0x14, 0x13, 0x89, 0x01,
- 0x00, 0x10, 0x8D, 0x07, 0x44, 0x08, 0x9D, 0x07,
- 0x00, 0x50, 0xA0, 0xC2, 0xF6, 0x07, 0x8C, 0x07,
- 0x02, 0x00, 0xA0, 0xC3, 0x3C, 0x08, 0xE0, 0xC3,
- 0x3E, 0x08, 0x2F, 0x02, 0x04, 0x00, 0x01, 0x17,
- 0x8E, 0x05, 0xA0, 0x06, 0x00, 0xBA, 0x8D, 0x07,
- 0x46, 0x08, 0x49, 0xC7, 0xA0, 0xC2, 0xF6, 0x07,
- 0x8C, 0x07, 0x04, 0x00, 0xA0, 0xC3, 0x38, 0x08,
- 0xE0, 0xC3, 0x3A, 0x08, 0xCC, 0xA3, 0x01, 0x17,
- 0x8E, 0x05, 0xA0, 0x06, 0x00, 0xBA, 0x20, 0xC8,
- 0x3C, 0x08, 0xFC, 0x08, 0x20, 0xC8, 0x3E, 0x08,
- 0xFE, 0x08, 0x09, 0x01, 0x00, 0x0C, 0x0C, 0x13,
- 0x49, 0x01, 0x00, 0x04, 0x05, 0x16, 0xA0, 0x06,
- 0x6C, 0xC7, 0xA0, 0x06, 0x38, 0xC7, 0x04, 0x10,
- 0x90, 0x03, 0x7F, 0x40, 0xA0, 0x06, 0x6C, 0xC7,
- 0xC0, 0x01, 0x90, 0x00, 0xA0, 0x06, 0xFC, 0xCA,
- 0x0B, 0xC8, 0x46, 0x08, 0xE0, 0xC2, 0x42, 0x07,
- 0x2D, 0x13, 0xE0, 0xC2, 0x2E, 0x06, 0x2A, 0x13,
- 0xE0, 0x02, 0x58, 0x07, 0x8F, 0x07, 0xBF, 0xFF,
- 0x0F, 0x2C, 0xE0, 0x02, 0x98, 0x07, 0xE0, 0xC0,
- 0x5C, 0x07, 0x03, 0xC8, 0x4A, 0x08, 0x03, 0xC8,
- 0x6C, 0x01, 0xC3, 0xC2, 0xCB, 0xA2, 0xEB, 0xC2,
- 0x32, 0x0C, 0x32, 0x13, 0x0B, 0xC8, 0x00, 0xFC,
- 0x0B, 0xC3, 0x4B, 0xC3, 0x0B, 0xC8, 0x6C, 0x01,
- 0xE0, 0xC2, 0x00, 0xFC, 0xFA, 0x16, 0x00, 0x03,
- 0x02, 0x00, 0x20, 0xC8, 0xF8, 0x05, 0x00, 0xFC,
- 0x02, 0x16, 0x0D, 0xC8, 0xFA, 0x05, 0x0C, 0xC8,
- 0xF8, 0x05, 0x00, 0x03, 0x0F, 0x00, 0x03, 0xC8,
- 0x6C, 0x01, 0x1A, 0x10, 0xA0, 0xC3, 0x2E, 0x06,
- 0x03, 0x13, 0xE0, 0xC0, 0xF8, 0x05, 0x0D, 0x16,
- 0x4F, 0x2E, 0xC0, 0x01, 0x00, 0x80, 0xA0, 0x01,
- 0x62, 0x07, 0x00, 0x80, 0x8E, 0xC3, 0x03, 0x13,
- 0xA0, 0x01, 0x62, 0x07, 0x40, 0x00, 0x60, 0x04,
- 0x4E, 0xC7, 0x03, 0xC8, 0x6C, 0x01, 0x20, 0xC8,
- 0x00, 0xFC, 0xF8, 0x05, 0x03, 0xC8, 0x4A, 0x08,
- 0x60, 0x01, 0x6A, 0x09, 0x00, 0x04, 0x02, 0x13,
- 0x60, 0x04, 0xE4, 0xC7, 0x8C, 0x07, 0x0E, 0x00,
- 0x20, 0xC2, 0x0E, 0xFC, 0x0A, 0x15, 0x09, 0x13,
- 0x20, 0xC2, 0x14, 0xFC, 0x48, 0x02, 0x00, 0x1F,
- 0xC8, 0x06, 0x88, 0x02, 0x12, 0x00, 0xF0, 0x1B,
- 0x08, 0xA3, 0x88, 0x07, 0x02, 0xFC, 0x78, 0xC2,
- 0xF8, 0xC1, 0x28, 0x02, 0x00, 0x04, 0x07, 0x83,
- 0xE7, 0x1A, 0xCC, 0x61, 0x07, 0xC8, 0x04, 0xFC,
- 0xCC, 0xC1, 0xC0, 0x01, 0x40, 0x00, 0x60, 0x04,
- 0xF0, 0xC7, 0x4B, 0xC1, 0xA0, 0xC2, 0xF0, 0x07,
- 0x20, 0xC3, 0x7A, 0x09, 0x8D, 0x07, 0xFA, 0x07,
- 0x9D, 0xC3, 0xE0, 0xC3, 0xFC, 0x07, 0xA0, 0x06,
- 0x00, 0xBA, 0x20, 0xC8, 0x3C, 0x08, 0x40, 0x08,
- 0x20, 0xC8, 0x3E, 0x08, 0x42, 0x08, 0x0E, 0xC8,
- 0x3C, 0x08, 0x0F, 0xC8, 0x3E, 0x08, 0xC4, 0x04,
- 0x82, 0x07, 0x02, 0x08, 0xE0, 0x04, 0x44, 0x08,
- 0x40, 0x01, 0x80, 0x00, 0x06, 0x16, 0x0E, 0xC8,
- 0x38, 0x08, 0x0F, 0xC8, 0x3A, 0x08, 0xE0, 0x04,
- 0x48, 0x08, 0xA0, 0x06, 0x54, 0xBA, 0xE0, 0xC2,
- 0xFE, 0x07, 0x0D, 0x11, 0x0E, 0xC8, 0xFA, 0x07,
- 0x0F, 0xC8, 0xFC, 0x07, 0x20, 0xC8, 0x40, 0x08,
- 0x3C, 0x08, 0x20, 0xC8, 0x42, 0x08, 0x3E, 0x08,
- 0xA0, 0x06, 0x32, 0xC7, 0xCB, 0x10, 0x80, 0x01,
- 0x80, 0x00, 0x55, 0x04, 0x8B, 0xC0, 0xA0, 0xC2,
- 0xF0, 0x07, 0x8C, 0x07, 0x04, 0x00, 0x8D, 0x07,
- 0xFA, 0x07, 0xA0, 0xC3, 0x3C, 0x08, 0xE0, 0xC3,
- 0x3E, 0x08, 0xA0, 0x06, 0x36, 0xBA, 0x60, 0x01,
- 0xFC, 0x07, 0x01, 0x00, 0x04, 0x13, 0xA0, 0x07,
- 0xFA, 0x08, 0x00, 0x80, 0x52, 0x04, 0x60, 0x01,
- 0x60, 0x07, 0x04, 0x00, 0x07, 0x16, 0x20, 0xD0,
- 0x04, 0xE0, 0x20, 0xE8, 0x1A, 0xE0, 0x58, 0x07,
- 0x60, 0x04, 0x3E, 0xC7, 0xA0, 0x07, 0xFA, 0x08,
- 0x00, 0x40, 0x20, 0xC8, 0x3C, 0x08, 0xFC, 0x08,
- 0x20, 0xC8, 0x3E, 0x08, 0xFE, 0x08, 0xA0, 0x06,
- 0x6C, 0xC7, 0xA0, 0x06, 0x38, 0xC7, 0xD3, 0x10,
- 0xAD, 0xC2, 0x02, 0x00, 0x6D, 0xC2, 0x00, 0x00,
- 0x05, 0x16, 0xAA, 0x07, 0x02, 0x00, 0x36, 0x07,
- 0x9A, 0x2C, 0x80, 0x03, 0xEA, 0x2C, 0x02, 0x00,
- 0x41, 0xCB, 0x00, 0x00, 0x80, 0x03, 0x2D, 0xC3,
- 0x18, 0x00, 0xAC, 0x07, 0x02, 0x00, 0x36, 0x07,
- 0x20, 0x4B, 0x06, 0xEB, 0x0A, 0x00, 0x20, 0xEB,
- 0x00, 0xEB, 0x0A, 0x00, 0x9C, 0x2E, 0x80, 0x03,
- 0xA0, 0xC2, 0x22, 0xE0, 0x60, 0x04, 0x8A, 0xA3,
- 0xED, 0xC0, 0x18, 0x00, 0xA0, 0x06, 0x3A, 0xCC,
- 0x80, 0x03, 0x44, 0xC2, 0xC3, 0xC0, 0x02, 0x13,
- 0xA0, 0x06, 0x3A, 0xCC, 0x19, 0xC3, 0x09, 0xCB,
- 0x18, 0x00, 0xC9, 0x05, 0x19, 0xCB, 0x16, 0x00,
- 0x4C, 0xC2, 0x2C, 0x02, 0x1A, 0x00, 0x0D, 0xCF,
- 0x0E, 0xCF, 0x0F, 0xC7, 0x99, 0x00, 0x5B, 0x04,
- 0x8C, 0x07, 0x0A, 0x09, 0x9C, 0xC2, 0xA0, 0x22,
- 0x14, 0xE0, 0x06, 0x13, 0xA0, 0xC2, 0x58, 0x07,
- 0xA0, 0x22, 0x20, 0xE0, 0x01, 0x16, 0x80, 0x03,
- 0x03, 0xC1, 0xC3, 0x04, 0x8A, 0x07, 0x04, 0x00,
- 0x84, 0xA2, 0x3A, 0xCF, 0x3A, 0xCF, 0x3A, 0xCF,
- 0x3A, 0xCF, 0x3A, 0xCF, 0xE0, 0x02, 0x58, 0x07,
- 0x8D, 0x07, 0x0A, 0x09, 0x0B, 0xC8, 0xC2, 0x07,
- 0xA0, 0x06, 0x44, 0xB8, 0xE0, 0xC2, 0xC2, 0x07,
- 0x20, 0xE0, 0x20, 0xE0, 0xE0, 0x02, 0xB8, 0x07,
- 0x5B, 0x04, 0x2D, 0xC3, 0x18, 0x00, 0x8C, 0xC2,
- 0x60, 0xC2, 0x6C, 0x01, 0x0A, 0xC8, 0x6C, 0x01,
- 0xE0, 0xC2, 0x00, 0xFC, 0x02, 0x13, 0x8B, 0xC2,
- 0xF9, 0x10, 0x09, 0xC8, 0x6C, 0x01, 0x8B, 0x07,
- 0xF8, 0x05, 0x5B, 0xC2, 0x0C, 0x13, 0xCB, 0x05,
- 0x5B, 0xC2, 0xCA, 0xC6, 0xE0, 0xC2, 0x6C, 0x01,
- 0x09, 0xC8, 0x6C, 0x01, 0x0C, 0xC8, 0x00, 0xFC,
- 0x0B, 0xC8, 0x6C, 0x01, 0x02, 0x10, 0xCC, 0xCE,
- 0xCA, 0xC6, 0xA0, 0xC2, 0xE0, 0x00, 0xA0, 0x22,
- 0x1A, 0xE0, 0x06, 0x16, 0x20, 0xE8, 0x04, 0xE0,
- 0x3A, 0x07, 0x20, 0x48, 0x1A, 0xE0, 0xE0, 0x00,
- 0x80, 0x03, 0xE0, 0xD3, 0xAB, 0xE3, 0xE0, 0x04,
- 0x8E, 0x09, 0xE0, 0xC1, 0xA8, 0x06, 0x05, 0x16,
- 0x07, 0x02, 0xA2, 0x06, 0xA0, 0x06, 0x38, 0xB5,
- 0x0B, 0x16, 0xE0, 0xC1, 0xBA, 0x06, 0x23, 0x16,
- 0x07, 0x02, 0xB4, 0x06, 0xA0, 0x06, 0x38, 0xB5,
- 0x1E, 0x13, 0x07, 0x02, 0xB8, 0x06, 0x02, 0x10,
- 0x07, 0x02, 0xA6, 0x06, 0x60, 0xC1, 0x02, 0xFC,
- 0x25, 0xC8, 0x0C, 0x00, 0x02, 0xFC, 0xC5, 0xC9,
- 0x0C, 0x00, 0xF5, 0xCD, 0xF5, 0xCD, 0xF5, 0xCD,
- 0xF5, 0xCD, 0xF5, 0xCD, 0xF5, 0xC5, 0xB7, 0x01,
- 0x28, 0x00, 0x27, 0x02, 0xF4, 0xFF, 0xA7, 0x07,
- 0x04, 0x00, 0x52, 0xCE, 0x20, 0xE8, 0x9E, 0x09,
- 0x06, 0xFC, 0x97, 0x2E, 0xD2, 0x10, 0x00, 0x03,
- 0x02, 0x00, 0xA0, 0x06, 0x50, 0xB5, 0x00, 0x03,
- 0x0F, 0x00, 0x20, 0x2C, 0xF0, 0xED, 0xE0, 0x93,
- 0xAB, 0xE3, 0x03, 0x16, 0x81, 0x02, 0x16, 0x00,
- 0xC4, 0x16, 0x21, 0xC1, 0x10, 0xEB, 0x54, 0x04,
- 0xE0, 0x93, 0x10, 0xE0, 0x03, 0x16, 0xA0, 0xD2,
- 0xA8, 0xE3, 0x0B, 0x10, 0xCF, 0xD3, 0x09, 0x16,
- 0xA0, 0x23, 0x08, 0xE0, 0x06, 0x16, 0x84, 0x07,
- 0x20, 0x00, 0x04, 0xE8, 0xD2, 0x06, 0xA0, 0xD2,
- 0x0C, 0xE0, 0x60, 0x04, 0xD2, 0xCE, 0x60, 0x04,
- 0x70, 0xD1, 0x22, 0xC1, 0x04, 0x00, 0xE2, 0x04,
- 0x02, 0x00, 0x54, 0x04, 0x02, 0xC8, 0x6C, 0x01,
- 0x82, 0xA0, 0x22, 0xC8, 0x32, 0x0C, 0x00, 0xFC,
- 0x02, 0x02, 0x00, 0xFC, 0xE0, 0x93, 0xAA, 0xE3,
- 0x13, 0x16, 0xB0, 0x03, 0x20, 0x98, 0xAA, 0xE3,
- 0x65, 0x06, 0x0D, 0x16, 0x8B, 0x07, 0x17, 0xFC,
- 0xDB, 0xD2, 0x8B, 0x09, 0x8B, 0x02, 0x15, 0x00,
- 0x7B, 0x1B, 0xEB, 0xD2, 0xC4, 0xEA, 0x06, 0x13,
- 0x77, 0x15, 0x20, 0x07, 0xA0, 0x09, 0x74, 0x10,
- 0xA0, 0x06, 0x02, 0xD0, 0xA0, 0x48, 0x04, 0xE0,
- 0x0E, 0x00, 0x85, 0x02, 0x07, 0x00, 0x0E, 0x13,
- 0x0E, 0x01, 0x03, 0x00, 0x0B, 0x13, 0xA0, 0x23,
- 0x22, 0xE0, 0x03, 0x16, 0xA0, 0xD2, 0x0E, 0xE0,
- 0x02, 0x10, 0xA0, 0xD2, 0xA8, 0xE3, 0x8E, 0x01,
- 0x03, 0x00, 0x5E, 0x10, 0x05, 0xC8, 0xFC, 0x06,
- 0xC3, 0xC0, 0x57, 0x16, 0xA0, 0x43, 0x10, 0xE0,
- 0x22, 0x88, 0x0E, 0x00, 0x6C, 0x09, 0x0A, 0x16,
- 0x22, 0x88, 0x10, 0x00, 0x6E, 0x09, 0x06, 0x16,
- 0x22, 0x88, 0x12, 0x00, 0x70, 0x09, 0x02, 0x16,
- 0xA0, 0xE3, 0x10, 0xE0, 0x85, 0x02, 0x09, 0x00,
- 0x02, 0x13, 0xA0, 0x06, 0xB8, 0xD7, 0x45, 0xA1,
- 0x65, 0xC1, 0xAC, 0xE3, 0x55, 0x04, 0x62, 0xC0,
- 0x04, 0x00, 0x22, 0xC8, 0x06, 0x00, 0x6C, 0x01,
- 0x82, 0x02, 0x48, 0x04, 0x02, 0x1B, 0xA0, 0x43,
- 0x0C, 0xE0, 0x22, 0xC1, 0x0E, 0x00, 0x51, 0x04,
- 0x42, 0xC0, 0xE1, 0x04, 0x02, 0x00, 0xA2, 0xC0,
- 0x0C, 0x00, 0x22, 0xC1, 0x0A, 0x00, 0x20, 0x21,
- 0x18, 0xE0, 0x07, 0x13, 0xA1, 0xC8, 0x0A, 0x00,
- 0x0A, 0x00, 0xA1, 0xC8, 0x08, 0x00, 0x08, 0x00,
- 0xE2, 0x10, 0x22, 0xC8, 0x06, 0x00, 0x6C, 0x01,
- 0xA0, 0x06, 0x66, 0xD6, 0x60, 0x04, 0xB0, 0xCE,
- 0x02, 0xC8, 0xD4, 0x06, 0x62, 0xC1, 0x02, 0x00,
- 0x65, 0xC1, 0xD8, 0xE3, 0x55, 0x04, 0x0F, 0x10,
- 0x0E, 0x10, 0x85, 0x07, 0xF4, 0x03, 0xF5, 0x04,
- 0x60, 0xCD, 0xCE, 0xED, 0xA0, 0x06, 0xA2, 0xD8,
- 0xA0, 0xE3, 0x0C, 0xE0, 0x20, 0xE8, 0x9E, 0x09,
- 0x06, 0x04, 0xA0, 0x2E, 0xF4, 0x03, 0x60, 0x04,
- 0xE4, 0xCC, 0xA0, 0x06, 0x26, 0xD5, 0x0C, 0x10,
- 0xA0, 0x06, 0x66, 0xD6, 0x09, 0x10, 0xA0, 0x06,
- 0x2A, 0xD8, 0x06, 0x10, 0xA0, 0x06, 0x66, 0xD6,
- 0x03, 0xC8, 0x2A, 0x09, 0xA0, 0xD2, 0xAA, 0xE3,
- 0xA0, 0x06, 0x6E, 0xCF, 0xA0, 0x92, 0x26, 0xE0,
- 0x0C, 0x16, 0xE0, 0xD3, 0x26, 0xE0, 0xE0, 0x23,
- 0x14, 0xE0, 0x0A, 0x13, 0x0A, 0xC1, 0xC4, 0x83,
- 0x07, 0x13, 0xC4, 0xC3, 0x24, 0xC1, 0xDC, 0xE3,
- 0x54, 0x04, 0xCA, 0x93, 0xDC, 0x13, 0xCA, 0xD3,
- 0xB0, 0x03, 0x0F, 0xD8, 0x59, 0x06, 0x04, 0x71,
- 0x24, 0xC1, 0xEC, 0xE3, 0x54, 0x04, 0xA0, 0x23,
- 0x0C, 0xE0, 0xD1, 0x13, 0x4D, 0xC3, 0xCF, 0x13,
- 0x4D, 0x01, 0x00, 0x04, 0x0B, 0x13, 0x86, 0x07,
- 0x02, 0x00, 0x84, 0x07, 0x26, 0x00, 0x46, 0x23,
- 0x03, 0x13, 0x44, 0x06, 0x86, 0xA1, 0xFB, 0x10,
- 0x46, 0x43, 0xB3, 0x10, 0x84, 0x07, 0x18, 0x00,
- 0x8D, 0x01, 0x00, 0x04, 0x85, 0x07, 0xF4, 0x03,
- 0xF5, 0x04, 0x60, 0xCD, 0xCE, 0xED, 0xA0, 0x06,
- 0xA2, 0xD8, 0x20, 0xE8, 0x9C, 0x09, 0xFE, 0x03,
- 0x20, 0xE8, 0x9E, 0x09, 0x06, 0x04, 0xA8, 0x10,
- 0x85, 0x07, 0x1C, 0x07, 0x86, 0x07, 0x1A, 0x04,
- 0x76, 0x6D, 0x76, 0x6D, 0x76, 0x6D, 0xC6, 0x05,
- 0x76, 0x6D, 0x76, 0x6D, 0x76, 0x6D, 0x83, 0x07,
- 0x00, 0x90, 0xA9, 0x10, 0x0B, 0xC3, 0x86, 0x07,
- 0x00, 0x01, 0x85, 0x07, 0x00, 0x80, 0x20, 0xC1,
- 0xD2, 0x06, 0x37, 0x13, 0xC4, 0x04, 0x60, 0xC0,
- 0xD2, 0x06, 0x45, 0x20, 0x04, 0x13, 0x84, 0x05,
- 0x15, 0x09, 0xF9, 0x16, 0x2E, 0x10, 0xCF, 0xD3,
- 0x06, 0x16, 0xE0, 0x23, 0x14, 0xE0, 0x03, 0x16,
- 0x0E, 0x01, 0x03, 0x00, 0x03, 0x13, 0xE0, 0x04,
- 0xD2, 0x06, 0x23, 0x10, 0x64, 0xD0, 0x1C, 0x07,
- 0x46, 0xB0, 0x10, 0x18, 0x01, 0xD9, 0x1C, 0x07,
- 0x60, 0x23, 0x20, 0xE0, 0x0B, 0x13, 0x81, 0x07,
- 0x18, 0x00, 0x61, 0xC0, 0xFC, 0xE3, 0x11, 0x88,
- 0xCE, 0xED, 0x04, 0x13, 0x08, 0x02, 0x18, 0x80,
- 0xA0, 0x06, 0xDA, 0xD4, 0x64, 0xD0, 0x28, 0x07,
- 0x46, 0xB0, 0x08, 0x18, 0x01, 0xD9, 0x28, 0x07,
- 0x46, 0xB0, 0x04, 0x17, 0x83, 0x07, 0x40, 0x80,
- 0xA0, 0x06, 0x2A, 0xD8, 0x05, 0x48, 0xD2, 0x06,
- 0xCA, 0x16, 0x20, 0xC1, 0x32, 0x09, 0x01, 0x16,
- 0x5C, 0x04, 0x04, 0x02, 0x07, 0x00, 0x20, 0x06,
- 0x32, 0x09, 0x05, 0x02, 0x00, 0x01, 0xC7, 0x10,
- 0x0B, 0xC3, 0xC5, 0x04, 0x42, 0xC0, 0xC7, 0x04,
- 0x20, 0xC2, 0x6C, 0x01, 0xE1, 0xA1, 0x04, 0x00,
- 0x11, 0xC8, 0x6C, 0x01, 0xFB, 0x16, 0x08, 0xC8,
- 0x6C, 0x01, 0xC8, 0x04, 0xA0, 0x43, 0x1A, 0xE0,
- 0x22, 0xC1, 0x0E, 0x00, 0x0D, 0x15, 0x0C, 0x13,
- 0xA0, 0xE3, 0x1A, 0xE0, 0xA0, 0x06, 0x14, 0xD8,
- 0x08, 0xC2, 0x48, 0x13, 0x88, 0x02, 0x12, 0x00,
- 0x45, 0x1B, 0x20, 0x22, 0x22, 0xE0, 0x42, 0x13,
- 0x02, 0xC1, 0x08, 0xA1, 0x08, 0x05, 0x28, 0x02,
- 0xF2, 0xFF, 0x07, 0xA2, 0x83, 0x07, 0x01, 0x80,
- 0x88, 0x02, 0x04, 0x00, 0x6E, 0x11, 0x64, 0xC2,
- 0x16, 0x00, 0x49, 0xD2, 0x02, 0x16, 0x02, 0x81,
- 0x31, 0x16, 0x09, 0x01, 0x00, 0xF0, 0x28, 0x16,
- 0x49, 0xC1, 0x45, 0x71, 0xC3, 0x04, 0x85, 0x02,
- 0x09, 0x00, 0x7C, 0x13, 0x83, 0x07, 0x02, 0x80,
- 0xA4, 0xC1, 0x14, 0x00, 0x88, 0x81, 0x76, 0x16,
- 0x83, 0x05, 0x85, 0x02, 0x15, 0x00, 0x13, 0x1B,
- 0x83, 0x05, 0x49, 0x99, 0x30, 0xEB, 0x0A, 0x13,
- 0x09, 0x98, 0x0E, 0xE0, 0x6B, 0x16, 0x25, 0x98,
- 0x30, 0xEB, 0x0C, 0xE0, 0x67, 0x16, 0xE0, 0xC1,
- 0xEC, 0x06, 0x64, 0x16, 0xC3, 0x04, 0x52, 0xC2,
- 0x0F, 0x13, 0x83, 0x07, 0x09, 0x80, 0xE0, 0xC1,
- 0x6A, 0x09, 0x47, 0x01, 0x00, 0x10, 0x5A, 0x16,
- 0xA0, 0xC0, 0x6C, 0x01, 0xA0, 0x06, 0xBE, 0xD6,
- 0x60, 0x04, 0xB0, 0xCE, 0x60, 0x04, 0xBA, 0xCE,
- 0x89, 0x07, 0x0E, 0x07, 0xC7, 0x04, 0xE5, 0xD1,
- 0x46, 0xEB, 0x05, 0x13, 0xC7, 0x06, 0x27, 0x02,
- 0x5C, 0xEB, 0x77, 0xCE, 0xFE, 0x15, 0x44, 0xC0,
- 0x21, 0x02, 0x18, 0x00, 0x28, 0x02, 0xFC, 0xFF,
- 0x36, 0x13, 0x91, 0xC1, 0x86, 0xD1, 0x1F, 0x13,
- 0xC6, 0x06, 0x87, 0x07, 0x0E, 0x07, 0xF7, 0xC0,
- 0x46, 0x02, 0xFF, 0xBF, 0x43, 0x02, 0xFF, 0x3F,
- 0xA0, 0x91, 0xF5, 0xED, 0x09, 0x16, 0xB0, 0x03,
- 0x20, 0x98, 0x0E, 0xE0, 0x5D, 0x06, 0x0F, 0x16,
- 0x21, 0xC8, 0x02, 0x00, 0x0C, 0x07, 0x17, 0x10,
- 0x47, 0x82, 0x0C, 0x1B, 0xC6, 0x90, 0xEB, 0x16,
- 0x47, 0x06, 0xF7, 0x04, 0xB0, 0x03, 0x20, 0x98,
- 0x5D, 0x06, 0x57, 0x06, 0x0C, 0x13, 0x83, 0x07,
- 0x05, 0x80, 0x1C, 0x10, 0xD1, 0xC0, 0xE0, 0x20,
- 0x16, 0xE0, 0x03, 0x16, 0x83, 0x07, 0x08, 0x80,
- 0x15, 0x10, 0x60, 0x44, 0x26, 0xE0, 0x86, 0x71,
- 0x46, 0xA0, 0x06, 0x62, 0x83, 0x07, 0x05, 0x80,
- 0x08, 0xC2, 0xCB, 0x15, 0x0B, 0x16, 0xC3, 0x04,
- 0x87, 0x07, 0x0E, 0x07, 0x77, 0xC0, 0x47, 0x82,
- 0x05, 0x1B, 0x60, 0x20, 0x06, 0xE0, 0xFA, 0x16,
- 0x83, 0x07, 0x07, 0x80, 0x5C, 0x04, 0xA0, 0x92,
- 0x0E, 0xE0, 0x11, 0x16, 0x20, 0xC8, 0x20, 0xE0,
- 0x08, 0x07, 0xE0, 0x04, 0x84, 0x01, 0x60, 0x05,
- 0x02, 0x07, 0x4B, 0x13, 0x20, 0x48, 0x06, 0xE0,
- 0x82, 0x01, 0xA0, 0x06, 0xD0, 0xD4, 0x83, 0x07,
- 0x00, 0xC0, 0xA0, 0x06, 0x2A, 0xD8, 0x20, 0xC8,
- 0x1E, 0xE0, 0x02, 0x07, 0xA0, 0xE3, 0x04, 0xE0,
- 0x08, 0x02, 0x24, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0x42, 0x10, 0x20, 0xC1, 0x84, 0x01, 0x44, 0x02,
- 0x00, 0x88, 0x2A, 0x13, 0x04, 0x48, 0x84, 0x01,
- 0x20, 0x06, 0x02, 0x07, 0xF1, 0x16, 0x60, 0x01,
- 0x8E, 0x09, 0x00, 0x80, 0x15, 0x13, 0xA0, 0x23,
- 0x22, 0xE0, 0x05, 0x16, 0xA0, 0x43, 0x22, 0xE0,
- 0xA0, 0xD2, 0x0E, 0xE0, 0xCF, 0x10, 0xE0, 0x23,
- 0x14, 0xE0, 0x04, 0x13, 0x20, 0x98, 0xA9, 0xE3,
- 0x65, 0x06, 0x0C, 0x16, 0xA0, 0x92, 0x0E, 0xE0,
- 0xC5, 0x13, 0xA0, 0xD2, 0xA8, 0xE3, 0xD3, 0x10,
- 0x20, 0xC8, 0x20, 0xE0, 0x08, 0x07, 0x83, 0x07,
- 0x00, 0xC0, 0x04, 0x10, 0x83, 0x07, 0x02, 0x00,
- 0x60, 0x04, 0xCA, 0xCE, 0x60, 0x04, 0xC0, 0xCE,
- 0x20, 0xE8, 0x06, 0xE0, 0x82, 0x01, 0xA0, 0x06,
- 0xD0, 0xD4, 0x20, 0x07, 0x02, 0x07, 0xA0, 0x43,
- 0x04, 0xE0, 0x20, 0xC8, 0xAE, 0xE4, 0x86, 0x01,
- 0x20, 0x88, 0x20, 0xE0, 0x08, 0x07, 0x03, 0x16,
- 0x20, 0xC8, 0x78, 0xEB, 0x08, 0x07, 0x60, 0x04,
- 0xD2, 0xCE, 0x0E, 0x01, 0x03, 0x00, 0x16, 0x13,
- 0xCF, 0xD3, 0x08, 0x16, 0xA0, 0x23, 0x20, 0xE0,
- 0x03, 0x16, 0xA0, 0xD2, 0xA8, 0xE3, 0x02, 0x10,
- 0xA0, 0xD2, 0x0E, 0xE0, 0x8E, 0x01, 0x03, 0x00,
- 0x09, 0x10, 0x60, 0xC1, 0x84, 0x01, 0x60, 0x21,
- 0x0A, 0xE0, 0x04, 0x16, 0x83, 0x07, 0x00, 0x84,
- 0x60, 0x04, 0xCA, 0xCE, 0x20, 0xC8, 0x2E, 0xE0,
- 0x84, 0x01, 0x08, 0x02, 0x06, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x60, 0x04, 0xD2, 0xCE, 0x60, 0xE3,
- 0x20, 0xE0, 0x60, 0x04, 0xD2, 0xCE, 0xE0, 0x93,
- 0x26, 0xE0, 0x10, 0x16, 0xA0, 0x23, 0x08, 0xE0,
- 0x0D, 0x16, 0xA0, 0x23, 0x06, 0xE0, 0x02, 0x13,
- 0x60, 0xE3, 0x1C, 0xE0, 0x60, 0xE3, 0x18, 0xE0,
- 0xA0, 0x43, 0x06, 0xE0, 0x08, 0x02, 0x3C, 0x80,
- 0xA0, 0x06, 0xDA, 0xD4, 0x60, 0x04, 0xD2, 0xCE,
- 0xA0, 0x92, 0xA8, 0xE3, 0x03, 0x13, 0xA0, 0x92,
- 0xA9, 0xE3, 0x1E, 0x16, 0xE0, 0x23, 0x14, 0xE0,
- 0x08, 0x13, 0x20, 0x98, 0xA9, 0xE3, 0x65, 0x06,
- 0x04, 0x13, 0x83, 0x07, 0x07, 0x00, 0x60, 0x04,
- 0xCA, 0xCE, 0xA0, 0xD2, 0x0E, 0xE0, 0x20, 0xC8,
- 0x20, 0xE0, 0x08, 0x07, 0xA0, 0x27, 0x04, 0xE0,
- 0x0B, 0x16, 0x20, 0xC8, 0x1E, 0xE0, 0x08, 0x07,
- 0xE0, 0x93, 0xA8, 0xE3, 0x05, 0x16, 0xA0, 0x23,
- 0x12, 0xE0, 0x02, 0x13, 0x20, 0x06, 0x08, 0x07,
- 0x60, 0x04, 0xD2, 0xCE, 0xE0, 0x23, 0x14, 0xE0,
- 0x3E, 0x13, 0xB0, 0x03, 0x20, 0x98, 0x0E, 0xE0,
- 0x6F, 0x06, 0x0F, 0x16, 0xCF, 0xD3, 0x37, 0x16,
- 0xA0, 0xD2, 0xA8, 0xE3, 0x60, 0x04, 0xD2, 0xCE,
- 0xA0, 0x92, 0x0C, 0xE0, 0x30, 0x16, 0xE0, 0x23,
- 0x14, 0xE0, 0xF6, 0x13, 0x83, 0x07, 0x06, 0x00,
- 0x07, 0x10, 0x83, 0x07, 0x05, 0x00, 0xE0, 0x93,
- 0x0E, 0xE0, 0x02, 0x16, 0x83, 0x07, 0x07, 0x00,
- 0x60, 0x04, 0xCA, 0xCE, 0x60, 0xE3, 0x12, 0xE0,
- 0xE0, 0x23, 0x14, 0xE0, 0x11, 0x13, 0x20, 0x98,
- 0x0C, 0xE0, 0x65, 0x06, 0x03, 0x16, 0x20, 0xD8,
- 0xA9, 0xE3, 0x65, 0x06, 0x14, 0x10, 0x60, 0x01,
- 0x8E, 0x09, 0x00, 0x80, 0x10, 0x13, 0x20, 0xC1,
- 0x84, 0x01, 0x20, 0x21, 0x06, 0xE0, 0xD2, 0x16,
- 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80, 0x07, 0x13,
- 0x20, 0x48, 0x06, 0xE0, 0x84, 0x01, 0x08, 0x02,
- 0x30, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x60, 0x04,
- 0xD2, 0xCE, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x20,
- 0xFA, 0x16, 0x08, 0x02, 0x78, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x20, 0xC2, 0xA2, 0x09, 0x03, 0x13,
- 0x20, 0x06, 0xA2, 0x09, 0x21, 0x13, 0x20, 0xC2,
- 0xA4, 0x09, 0xED, 0x13, 0x20, 0x06, 0xA4, 0x09,
- 0xEA, 0x16, 0xA0, 0x07, 0xA4, 0x09, 0x05, 0x00,
- 0xCD, 0x01, 0x00, 0x04, 0xE4, 0x10, 0x60, 0x01,
- 0x8E, 0x09, 0x80, 0x00, 0x3E, 0x13, 0x60, 0x01,
- 0x8E, 0x09, 0x00, 0x10, 0x02, 0x16, 0xA0, 0x06,
- 0xE6, 0xD5, 0xA0, 0x01, 0x8E, 0x09, 0x00, 0x10,
- 0xE0, 0x01, 0x8E, 0x09, 0x80, 0x00, 0x83, 0x07,
- 0x00, 0xA8, 0xA0, 0x06, 0x2A, 0xD8, 0x16, 0x10,
- 0x60, 0x01, 0x8E, 0x09, 0x00, 0x04, 0x21, 0x13,
- 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x10, 0xA0, 0x07,
- 0x08, 0x07, 0x05, 0x00, 0x83, 0x07, 0x08, 0xA8,
- 0xA0, 0x23, 0x04, 0xE0, 0x05, 0x16, 0x20, 0xC8,
- 0x20, 0xE0, 0x08, 0x07, 0x83, 0x07, 0x08, 0xE8,
- 0xA0, 0x06, 0x2A, 0xD8, 0xA0, 0x01, 0x8E, 0x09,
- 0x00, 0x20, 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x01,
- 0xE0, 0x01, 0x82, 0x01, 0x00, 0x08, 0xA0, 0xD2,
- 0x0E, 0xE0, 0x83, 0x07, 0x10, 0x80, 0x60, 0x04,
- 0xC0, 0xCE, 0x08, 0x02, 0x78, 0x00, 0xA0, 0x06,
- 0xDA, 0xD4, 0x83, 0x07, 0x00, 0x82, 0x60, 0x04,
- 0xCA, 0xCE, 0x60, 0x04, 0xD2, 0xCE, 0x20, 0x06,
- 0x90, 0x09, 0x07, 0x15, 0xA0, 0xD2, 0x10, 0xE0,
- 0xCA, 0x06, 0xA0, 0xD2, 0x26, 0xE0, 0xCF, 0x04,
- 0xF4, 0x10, 0x08, 0x02, 0x7E, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x20, 0xC2, 0x90, 0x09, 0x88, 0x02,
- 0x96, 0x00, 0x0D, 0x1B, 0xEA, 0x16, 0x20, 0x48,
- 0x08, 0xE0, 0x82, 0x01, 0xA0, 0x01, 0x8E, 0x09,
- 0x00, 0x10, 0xA0, 0x06, 0xE6, 0xD5, 0x83, 0x07,
- 0x00, 0x28, 0x60, 0x04, 0xC0, 0xCE, 0x60, 0x01,
- 0x8E, 0x09, 0x00, 0x10, 0xDA, 0x16, 0x84, 0x07,
- 0x04, 0x00, 0x85, 0x07, 0xF4, 0x03, 0xF5, 0x04,
- 0xB5, 0x07, 0x30, 0x06, 0xA0, 0x06, 0xA2, 0xD8,
- 0xA0, 0x07, 0xF8, 0x03, 0x34, 0xD4, 0x60, 0x04,
- 0xC0, 0xDB, 0xA0, 0x07, 0x90, 0x09, 0xF4, 0x01,
- 0x08, 0x02, 0x7E, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0x08, 0x02, 0x36, 0x00, 0xA0, 0x06, 0xDA, 0xD4,
- 0x20, 0xE8, 0x0C, 0xE0, 0x82, 0x01, 0xA0, 0x23,
- 0x18, 0xE0, 0x06, 0x13, 0xA0, 0xE3, 0x18, 0xE0,
- 0xE0, 0x2E, 0x00, 0x00, 0x41, 0xC0, 0xFA, 0x16,
- 0xA0, 0x06, 0xE6, 0xD5, 0xB2, 0x10, 0x04, 0x02,
- 0x64, 0x00, 0x04, 0x06, 0xFE, 0x16, 0x5B, 0x04,
- 0xA0, 0xE3, 0x0A, 0xE0, 0x08, 0xC2, 0x02, 0x11,
- 0xA0, 0x43, 0x0A, 0xE0, 0x20, 0x42, 0x04, 0xE0,
- 0x28, 0x02, 0xFC, 0xE3, 0x58, 0xC0, 0x02, 0xC0,
- 0x11, 0x88, 0xCE, 0xED, 0x03, 0x16, 0xD1, 0x2C,
- 0x58, 0xC0, 0xD1, 0x04, 0x80, 0xC0, 0x0E, 0x01,
- 0x00, 0x10, 0x0F, 0x13, 0x60, 0xCC, 0xCE, 0xED,
- 0xC8, 0x05, 0x78, 0xCC, 0x03, 0x16, 0x41, 0x06,
- 0x60, 0xCC, 0xD6, 0x06, 0x58, 0xC4, 0x02, 0x16,
- 0x60, 0xC4, 0x00, 0x07, 0x21, 0x02, 0xFA, 0xFF,
- 0x91, 0x2C, 0x5B, 0x04, 0x0B, 0xC3, 0xA0, 0x06,
- 0xC2, 0xD5, 0xA0, 0x06, 0x9C, 0xD5, 0x08, 0xC2,
- 0x05, 0x16, 0x62, 0xC2, 0x02, 0x00, 0x60, 0x26,
- 0xA8, 0xE4, 0x0D, 0x16, 0x42, 0xC2, 0xC9, 0x05,
- 0x60, 0xCE, 0xF2, 0xED, 0x60, 0xC6, 0x7C, 0xEB,
- 0xA0, 0x06, 0x10, 0xD6, 0x18, 0xCA, 0x0A, 0x00,
- 0x20, 0x46, 0x26, 0xE0, 0x04, 0x16, 0xA0, 0xC0,
- 0x6C, 0x01, 0x12, 0x2E, 0x1D, 0x10, 0x12, 0xC1,
- 0x05, 0x13, 0x60, 0xC1, 0x6C, 0x01, 0x14, 0x2E,
- 0x05, 0xC8, 0x6C, 0x01, 0xD2, 0x04, 0x48, 0x06,
- 0x84, 0x07, 0x02, 0x00, 0x48, 0xC1, 0xA0, 0xC0,
- 0x6C, 0x01, 0x02, 0xC0, 0xA0, 0x06, 0xA2, 0xD8,
- 0x60, 0xC5, 0x02, 0xFC, 0x07, 0x02, 0xA2, 0x06,
- 0x25, 0x02, 0xF4, 0xFF, 0x05, 0xC8, 0x02, 0xFC,
- 0x20, 0xC2, 0x6C, 0x01, 0xA0, 0x06, 0xFC, 0xB4,
- 0x5C, 0x04, 0x42, 0xC2, 0x29, 0x02, 0x08, 0x00,
- 0x39, 0xC2, 0x48, 0x02, 0x00, 0xC0, 0x88, 0x02,
- 0x00, 0xC0, 0x08, 0x16, 0x60, 0x8E, 0x2E, 0xE0,
- 0x05, 0x16, 0x60, 0x86, 0x2E, 0xE0, 0x02, 0x16,
- 0xC8, 0x04, 0x5B, 0x04, 0x08, 0x07, 0x5B, 0x04,
- 0x20, 0x88, 0x8E, 0xE1, 0x6C, 0x01, 0x02, 0x16,
- 0x60, 0x04, 0xBA, 0xCE, 0x5B, 0x04, 0x88, 0x07,
- 0xAE, 0x01, 0x20, 0xE8, 0x0E, 0xE0, 0x80, 0x01,
- 0x08, 0x06, 0xFE, 0x16, 0x20, 0x48, 0x0E, 0xE0,
- 0x80, 0x01, 0x5B, 0x04, 0xC2, 0x04, 0xA0, 0x23,
- 0x0C, 0xE0, 0x10, 0x16, 0x20, 0x2F, 0x30, 0x06,
- 0x82, 0x07, 0xDF, 0xFF, 0x02, 0x2C, 0x82, 0x02,
- 0xF4, 0x03, 0x06, 0x13, 0xE2, 0x04, 0x02, 0x00,
- 0xA2, 0xC0, 0x06, 0x00, 0x12, 0x2E, 0xF4, 0x10,
- 0xA0, 0x43, 0x0C, 0xE0, 0x5B, 0x04, 0x42, 0xC2,
- 0x88, 0x07, 0x0E, 0x00, 0x09, 0xA2, 0x29, 0x02,
- 0x08, 0x00, 0x78, 0xCE, 0x78, 0xCE, 0x78, 0xCE,
- 0x60, 0xCE, 0x6C, 0x09, 0x60, 0xCE, 0x6E, 0x09,
- 0x60, 0xCE, 0x70, 0x09, 0xA0, 0x23, 0x1A, 0xE0,
- 0x0F, 0x16, 0x58, 0xC2, 0x49, 0x02, 0x80, 0x1F,
- 0x60, 0x2A, 0x14, 0xE0, 0xA0, 0xE8, 0x04, 0xE0,
- 0x0E, 0x00, 0x09, 0xC6, 0x49, 0x02, 0x00, 0x1F,
- 0xC9, 0x06, 0x09, 0xA2, 0x89, 0xA8, 0x04, 0x00,
- 0x28, 0x02, 0x02, 0x00, 0x58, 0xC2, 0x49, 0x0A,
- 0x49, 0x02, 0x00, 0xF0, 0x09, 0xD6, 0xE2, 0x04,
- 0x06, 0x00, 0x5B, 0x04, 0x00, 0x07, 0x82, 0xC0,
- 0x53, 0x13, 0xA0, 0xC0, 0x6C, 0x01, 0xA0, 0xC1,
- 0x06, 0xFC, 0x46, 0x02, 0x0F, 0x00, 0x86, 0x02,
- 0x01, 0x00, 0x3D, 0x12, 0x06, 0x88, 0xF2, 0x06,
- 0x12, 0x16, 0x01, 0x02, 0x0E, 0xFC, 0x31, 0x88,
- 0xF4, 0x06, 0x0D, 0x16, 0x31, 0x88, 0xF6, 0x06,
- 0x0A, 0x16, 0x31, 0x88, 0xF8, 0x06, 0x07, 0x16,
- 0x86, 0x02, 0x02, 0x00, 0x2C, 0x16, 0x20, 0x88,
- 0x0A, 0x07, 0xFA, 0x06, 0x28, 0x13, 0x20, 0xC1,
- 0x6A, 0x09, 0x44, 0x01, 0x00, 0x08, 0x06, 0x13,
- 0x86, 0x02, 0x02, 0x00, 0x20, 0x16, 0x44, 0x01,
- 0x80, 0x00, 0x1D, 0x16, 0x00, 0x07, 0xE0, 0x23,
- 0x14, 0xE0, 0x19, 0x16, 0x82, 0x02, 0x43, 0x00,
- 0x16, 0x13, 0x00, 0x02, 0x02, 0xFC, 0x40, 0xC0,
- 0xB0, 0x01, 0x20, 0x00, 0x60, 0x01, 0x6A, 0x09,
- 0x01, 0x00, 0x07, 0x16, 0x60, 0xA0, 0x2C, 0x09,
- 0x60, 0xCC, 0xEE, 0x05, 0x50, 0xC4, 0x20, 0xC4,
- 0x2C, 0x09, 0x80, 0x07, 0x36, 0x07, 0x81, 0x07,
- 0x40, 0x00, 0x40, 0x2C, 0xC0, 0x04, 0x84, 0x07,
- 0xF2, 0x06, 0x06, 0xCD, 0x01, 0x02, 0x0E, 0xFC,
- 0x31, 0xCD, 0x31, 0xCD, 0x31, 0xCD, 0x20, 0xC5,
- 0x0A, 0x07, 0x00, 0xC0, 0x01, 0x13, 0x12, 0x2E,
- 0xE0, 0x04, 0x6C, 0x01, 0x5B, 0x04, 0x60, 0x01,
- 0x8A, 0x09, 0x00, 0x80, 0x12, 0x13, 0x0B, 0xC8,
- 0x22, 0x09, 0xA0, 0x06, 0x3E, 0xD7, 0x08, 0x02,
- 0x42, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x08, 0x02,
- 0x30, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xE0, 0xC2,
- 0x22, 0x09, 0x5B, 0x04, 0x20, 0x48, 0xAC, 0xE4,
- 0x80, 0x01, 0x20, 0x48, 0x7E, 0xEB, 0x82, 0x01,
- 0x20, 0x48, 0x22, 0xE0, 0xAE, 0x01, 0x20, 0x48,
- 0x22, 0xE0, 0x78, 0x09, 0x60, 0x43, 0x18, 0xE0,
- 0xA0, 0x43, 0x08, 0xE0, 0x60, 0x01, 0x8A, 0x09,
- 0x00, 0x80, 0xEB, 0x13, 0x0B, 0xC3, 0x08, 0x02,
- 0x42, 0x00, 0xA0, 0x06, 0xDA, 0xD4, 0x5C, 0x04,
- 0x0B, 0xC3, 0x20, 0xE8, 0x0E, 0xE0, 0x82, 0x01,
- 0x20, 0xE8, 0x22, 0xE0, 0xAE, 0x01, 0x20, 0xE8,
- 0x22, 0xE0, 0x78, 0x09, 0xA0, 0xE3, 0x08, 0xE0,
- 0x60, 0xE3, 0x18, 0xE0, 0xA0, 0x43, 0x06, 0xE0,
- 0x08, 0x02, 0x3C, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0x08, 0x02, 0x42, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0x5C, 0x04, 0x0B, 0xC3, 0x83, 0x07, 0x00, 0x68,
- 0xA0, 0x06, 0x2A, 0xD8, 0x83, 0x07, 0x10, 0x80,
- 0xA0, 0x06, 0x2A, 0xD8, 0x5C, 0x04, 0x0B, 0xC3,
- 0xA0, 0x06, 0x14, 0xD8, 0x02, 0xA2, 0x68, 0xC2,
- 0x14, 0x00, 0x29, 0x02, 0xFC, 0xFF, 0x24, 0x13,
- 0x28, 0x02, 0x18, 0x00, 0x87, 0x07, 0x0E, 0x00,
- 0x81, 0x07, 0x0E, 0x07, 0xF1, 0x04, 0x47, 0x06,
- 0xFD, 0x15, 0x58, 0xC0, 0xB0, 0x03, 0x01, 0x78,
- 0x63, 0x06, 0x41, 0x02, 0x3F, 0x00, 0x0E, 0x13,
- 0x81, 0x02, 0x1F, 0x00, 0x0B, 0x1B, 0x41, 0xA0,
- 0x61, 0xC0, 0x86, 0xE4, 0xF8, 0xC1, 0xC7, 0x06,
- 0xC7, 0x71, 0x47, 0x06, 0x78, 0xCC, 0x47, 0x06,
- 0xFD, 0x15, 0x04, 0x10, 0x58, 0xC0, 0xC1, 0x06,
- 0x41, 0x70, 0x01, 0xA2, 0x49, 0xC2, 0xE5, 0x15,
- 0x5C, 0x04, 0xA0, 0x23, 0x1A, 0xE0, 0x02, 0x13,
- 0xC8, 0x04, 0x5B, 0x04, 0x22, 0xC2, 0x14, 0x00,
- 0x48, 0x02, 0x00, 0x1F, 0xC8, 0x06, 0x5B, 0x04,
- 0x83, 0x02, 0x0F, 0x00, 0x17, 0x1B, 0xA0, 0xC1,
- 0xD4, 0x06, 0x35, 0x13, 0x26, 0x02, 0x04, 0x00,
- 0xA0, 0xCD, 0xCE, 0xED, 0x83, 0xC5, 0x04, 0x13,
- 0x4A, 0xC2, 0x39, 0x0A, 0xC9, 0xE0, 0x83, 0xC5,
- 0x86, 0x07, 0x36, 0x07, 0x87, 0x07, 0x10, 0x00,
- 0x20, 0xC2, 0xD4, 0x06, 0xE0, 0x04, 0xD4, 0x06,
- 0x46, 0x2C, 0x5B, 0x04, 0x60, 0xC0, 0xFE, 0x06,
- 0x20, 0xC2, 0x6A, 0x09, 0x48, 0x02, 0x00, 0x60,
- 0x20, 0x22, 0x06, 0xE0, 0x04, 0x16, 0x20, 0xE2,
- 0x0A, 0xE0, 0x20, 0xE2, 0x18, 0xE0, 0x13, 0x0A,
- 0x04, 0x18, 0x41, 0x05, 0x03, 0x48, 0xFE, 0x06,
- 0x06, 0x10, 0x83, 0x02, 0x02, 0x00, 0x01, 0x16,
- 0x13, 0x09, 0x03, 0xE8, 0xFE, 0x06, 0xC8, 0x40,
- 0xC1, 0x40, 0x05, 0x13, 0x88, 0x07, 0x36, 0x07,
- 0x89, 0x07, 0x00, 0x40, 0x48, 0x2C, 0x5B, 0x04,
- 0xC9, 0x04, 0x24, 0xC1, 0x94, 0xEB, 0x84, 0xC1,
- 0x86, 0x71, 0x86, 0xA1, 0x26, 0x02, 0x56, 0xEC,
- 0xC4, 0x06, 0x04, 0x71, 0x24, 0x02, 0xC2, 0xEB,
- 0x14, 0xD2, 0xC8, 0x09, 0x08, 0xA2, 0xB0, 0x03,
- 0x34, 0xD8, 0x5F, 0x06, 0x47, 0x02, 0x0F, 0x00,
- 0xC7, 0xA1, 0x28, 0xC2, 0x82, 0xEB, 0x58, 0x04,
- 0x76, 0xCD, 0x47, 0x06, 0xFD, 0x16, 0x32, 0x10,
- 0x36, 0xC2, 0x26, 0x10, 0x17, 0x09, 0x47, 0xA1,
- 0x2D, 0x10, 0x17, 0x09, 0x47, 0x61, 0x2A, 0x10,
- 0xA0, 0x43, 0x16, 0xE0, 0x5B, 0x04, 0xA0, 0x43,
- 0x16, 0xE0, 0x49, 0xC2, 0x03, 0x16, 0x44, 0xC2,
- 0x06, 0xC8, 0x22, 0x09, 0x27, 0xC1, 0x8E, 0xED,
- 0x84, 0xC1, 0x86, 0x71, 0x26, 0x02, 0xC4, 0xED,
- 0xC4, 0x06, 0x04, 0x71, 0x24, 0x02, 0xAA, 0xED,
- 0xD3, 0x10, 0x09, 0xC1, 0xA0, 0xC1, 0x22, 0x09,
- 0xC9, 0x04, 0x10, 0x10, 0x36, 0xC2, 0x78, 0xD5,
- 0x60, 0x41, 0x22, 0xE0, 0xC5, 0x05, 0x0A, 0x10,
- 0x78, 0xCD, 0x47, 0x06, 0xFD, 0x15, 0x06, 0x10,
- 0xA0, 0x23, 0x16, 0xE0, 0xCD, 0x16, 0x49, 0xC2,
- 0xEC, 0x16, 0xD6, 0x10, 0xA0, 0xE3, 0x16, 0xE0,
- 0xBB, 0x10, 0x08, 0x02, 0x5A, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x44, 0x10, 0xA0, 0x92, 0x0C, 0xE0,
- 0x15, 0x16, 0x44, 0x02, 0x00, 0x5E, 0x14, 0x16,
- 0x20, 0x48, 0xAC, 0xE4, 0x80, 0x01, 0xA0, 0x06,
- 0x72, 0xD7, 0x20, 0xC8, 0x9E, 0x01, 0x9E, 0x01,
- 0xE0, 0x2E, 0x01, 0x00, 0xA0, 0x43, 0x18, 0xE0,
- 0xA0, 0xD2, 0x26, 0xE0, 0x83, 0x07, 0x10, 0x00,
- 0xA0, 0x06, 0x2A, 0xD8, 0x60, 0x04, 0xD2, 0xCE,
- 0x84, 0x07, 0x08, 0x00, 0x60, 0x04, 0x94, 0xCE,
- 0x85, 0x07, 0x03, 0x02, 0x05, 0xC8, 0xCE, 0x06,
- 0xA0, 0x43, 0x12, 0xE0, 0xE0, 0x04, 0xFA, 0x06,
- 0xA0, 0x06, 0xA4, 0xD7, 0x08, 0x02, 0x48, 0x80,
- 0xA0, 0x06, 0xDA, 0xD4, 0x17, 0x10, 0x60, 0x01,
- 0x8E, 0x09, 0x00, 0x80, 0x02, 0x16, 0x60, 0x04,
- 0x9C, 0xD4, 0xA0, 0x27, 0x2C, 0xE0, 0x04, 0x16,
- 0x08, 0x02, 0x54, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0x83, 0x07, 0x00, 0xA8, 0x20, 0x88, 0x08, 0x07,
- 0x20, 0xE0, 0x02, 0x16, 0x83, 0x07, 0x00, 0xE8,
- 0xA0, 0x06, 0x2A, 0xD8, 0x08, 0x02, 0x36, 0x00,
- 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xE8, 0x0C, 0xE0,
- 0x82, 0x01, 0xA0, 0x23, 0x18, 0xE0, 0x06, 0x13,
- 0xA0, 0xE3, 0x18, 0xE0, 0xE0, 0x2E, 0x00, 0x00,
- 0x41, 0xC0, 0xFA, 0x16, 0xA0, 0x06, 0xE6, 0xD5,
- 0x82, 0xC0, 0x02, 0x13, 0x4F, 0x02, 0x80, 0xFF,
- 0xC4, 0x04, 0x0F, 0xD1, 0xC4, 0x06, 0x60, 0x04,
- 0x94, 0xCE, 0xA0, 0x06, 0x32, 0xDA, 0x08, 0x02,
- 0x36, 0x80, 0xA0, 0x07, 0xD6, 0x06, 0x20, 0xDA,
- 0xA0, 0x06, 0xDA, 0xD4, 0x10, 0x10, 0xA0, 0x06,
- 0x32, 0xDA, 0x20, 0xD1, 0xCE, 0x06, 0xE6, 0x13,
- 0x20, 0x78, 0x12, 0xE0, 0xCE, 0x06, 0xE2, 0x10,
- 0x20, 0xC1, 0x16, 0x04, 0x14, 0x0A, 0xC4, 0x06,
- 0x0A, 0x91, 0x01, 0x16, 0x5B, 0x04, 0x60, 0x04,
- 0xD2, 0xCE, 0xB0, 0x03, 0x20, 0x98, 0xAB, 0xE3,
- 0x65, 0x06, 0x02, 0x13, 0x60, 0x04, 0xBA, 0xCE,
- 0x60, 0xC1, 0x94, 0x09, 0x02, 0x13, 0x60, 0x04,
- 0x22, 0xDE, 0x60, 0xD1, 0x0E, 0xE0, 0x3D, 0x10,
- 0x85, 0x07, 0xBE, 0xEA, 0x35, 0xC8, 0x8A, 0x09,
- 0x15, 0xC8, 0x8C, 0x09, 0x0B, 0x10, 0xE0, 0x04,
- 0xA0, 0x09, 0x20, 0xD8, 0x2E, 0x09, 0xA6, 0x09,
- 0x20, 0xC8, 0xA8, 0x09, 0x8A, 0x09, 0x20, 0xC8,
- 0xAA, 0x09, 0x8C, 0x09, 0xE0, 0x04, 0x8E, 0x09,
- 0xCA, 0x04, 0xCD, 0x04, 0xCE, 0x04, 0xCF, 0x04,
- 0xE0, 0x04, 0xA8, 0x06, 0xE0, 0x04, 0xBA, 0x06,
- 0x84, 0x07, 0xA0, 0x01, 0x85, 0x07, 0x10, 0x00,
- 0xF4, 0x04, 0x45, 0x06, 0xFD, 0x15, 0x84, 0x07,
- 0xD8, 0x06, 0x85, 0x07, 0x34, 0x07, 0x44, 0x61,
- 0xF4, 0x04, 0x45, 0x06, 0xFD, 0x15, 0x84, 0x07,
- 0xC8, 0x00, 0x04, 0xC8, 0x00, 0x07, 0x84, 0x07,
- 0xFF, 0x7F, 0x04, 0xC8, 0xF0, 0x06, 0x84, 0x07,
- 0x06, 0x00, 0x04, 0xC8, 0xEE, 0x06, 0x85, 0x07,
- 0x02, 0x0C, 0x20, 0xC1, 0x8A, 0x09, 0x01, 0x11,
- 0xC5, 0x06, 0xB0, 0x03, 0x05, 0xD8, 0x65, 0x06,
- 0x60, 0x04, 0xD2, 0xCE, 0xB0, 0x03, 0x20, 0x98,
- 0xAA, 0xE3, 0x65, 0x06, 0x79, 0x16, 0x60, 0xD1,
- 0x10, 0xE0, 0xF3, 0x10, 0x60, 0xD1, 0xAB, 0xE3,
- 0xA0, 0x01, 0x8E, 0x09, 0x00, 0x02, 0xE0, 0x01,
- 0x80, 0x01, 0x00, 0x20, 0xC8, 0x04, 0x20, 0xD2,
- 0x80, 0x01, 0x08, 0xC8, 0x9C, 0x09, 0x08, 0xD8,
- 0x2E, 0x09, 0xE3, 0x10, 0x20, 0xF8, 0x19, 0xEE,
- 0x82, 0x01, 0x20, 0xC8, 0x10, 0xE0, 0xC6, 0x06,
- 0x20, 0xC8, 0x20, 0xE0, 0xC8, 0x06, 0x20, 0xC8,
- 0xC2, 0xEA, 0x90, 0x09, 0xE0, 0x2E, 0x00, 0x00,
- 0xA0, 0x06, 0xE6, 0xD5, 0x20, 0xC8, 0x6C, 0x09,
- 0xA0, 0x01, 0x20, 0xC8, 0x6E, 0x09, 0xA2, 0x01,
- 0x20, 0xC8, 0x70, 0x09, 0xA4, 0x01, 0x20, 0xC8,
- 0x6E, 0x09, 0xB0, 0x01, 0x20, 0xC8, 0x70, 0x09,
- 0xB2, 0x01, 0x20, 0xC8, 0x70, 0x09, 0xCC, 0x06,
- 0x20, 0xF8, 0x18, 0xEE, 0x80, 0x01, 0xB0, 0x03,
- 0xA0, 0x01, 0x8E, 0x09, 0x00, 0x02, 0x20, 0x98,
- 0xAA, 0xE3, 0x65, 0x06, 0x3A, 0x13, 0xE0, 0x01,
- 0x8E, 0x09, 0x00, 0x02, 0x88, 0x07, 0x56, 0xDF,
- 0xE0, 0xC2, 0x8A, 0x09, 0x05, 0x11, 0xA0, 0x01,
- 0x8E, 0x09, 0x00, 0x02, 0x88, 0x07, 0x9A, 0xDF,
- 0x98, 0x06, 0x08, 0x02, 0x12, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x84, 0x07, 0x0A, 0x00, 0x85, 0x07,
- 0xF4, 0x03, 0x20, 0x88, 0xC6, 0x06, 0x20, 0xE0,
- 0x08, 0x1B, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
- 0xA5, 0x13, 0x84, 0x07, 0x1C, 0x00, 0x85, 0x07,
- 0xF8, 0x03, 0xA0, 0x06, 0xA2, 0xD8, 0x85, 0x07,
- 0x42, 0xDC, 0x05, 0xC8, 0xF8, 0x03, 0x20, 0xC8,
- 0xA0, 0x09, 0xA0, 0x09, 0x6C, 0x16, 0x20, 0xE8,
- 0x9C, 0x09, 0xFE, 0x03, 0x20, 0xE8, 0x9E, 0x09,
- 0x06, 0x04, 0xA0, 0x23, 0x0C, 0xE0, 0x32, 0x13,
- 0xA0, 0xE3, 0x0C, 0xE0, 0xA0, 0x2E, 0xF4, 0x03,
- 0x2D, 0x10, 0xA0, 0x06, 0x56, 0xDF, 0x60, 0x01,
- 0x8E, 0x09, 0x00, 0x40, 0x08, 0x13, 0x08, 0x02,
- 0x6C, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x22, 0x10,
- 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x40, 0x08, 0x02,
- 0x60, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x84, 0x07,
- 0x2A, 0x00, 0x85, 0x07, 0xF4, 0x03, 0xA0, 0x06,
- 0xA2, 0xD8, 0xD5, 0x10, 0xB0, 0x03, 0x20, 0x98,
- 0xAA, 0xE3, 0x65, 0x06, 0x0F, 0x16, 0x20, 0x06,
- 0x90, 0x09, 0x9A, 0x16, 0x60, 0x01, 0x8A, 0x09,
- 0x00, 0x40, 0x39, 0x13, 0xE0, 0x04, 0x8A, 0x09,
- 0xE0, 0x04, 0x8C, 0x09, 0xE0, 0x04, 0x8E, 0x09,
- 0x60, 0x04, 0x62, 0xDA, 0x60, 0x04, 0xB0, 0xCE,
- 0xB0, 0x03, 0x20, 0x98, 0x10, 0xE0, 0x65, 0x06,
- 0xF9, 0x16, 0x44, 0x02, 0x00, 0x5E, 0x04, 0x16,
- 0x20, 0x06, 0xC6, 0x06, 0x9A, 0x16, 0x0A, 0x10,
- 0xB0, 0x03, 0x20, 0x98, 0x10, 0xE0, 0x65, 0x06,
- 0xED, 0x16, 0x20, 0x06, 0xC8, 0x06, 0x02, 0x13,
- 0x60, 0x04, 0x5A, 0xDB, 0x60, 0x01, 0x8E, 0x09,
- 0x00, 0x01, 0x02, 0x16, 0xCE, 0x01, 0x03, 0x00,
- 0x0E, 0x01, 0x03, 0x00, 0x03, 0x13, 0x83, 0x07,
- 0x00, 0x82, 0x07, 0x10, 0x83, 0x07, 0x01, 0x00,
- 0xE0, 0x04, 0x8E, 0x09, 0x20, 0xE8, 0x0C, 0xE0,
- 0x82, 0x01, 0x60, 0x04, 0xCA, 0xCE, 0x60, 0x01,
- 0x8A, 0x09, 0x00, 0x40, 0xC7, 0x16, 0x83, 0x07,
- 0x0D, 0x00, 0xF2, 0x10, 0xB0, 0x03, 0x20, 0x98,
- 0xAA, 0xE3, 0x65, 0x06, 0xC7, 0x16, 0x20, 0x88,
- 0x98, 0x09, 0x20, 0xE0, 0xF0, 0x16, 0x22, 0xC8,
- 0x0E, 0x00, 0xDC, 0x06, 0x22, 0xC8, 0x10, 0x00,
- 0xDE, 0x06, 0x22, 0xC8, 0x12, 0x00, 0xE0, 0x06,
- 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x80, 0x08, 0x02,
- 0x66, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xB2, 0x10,
- 0xA0, 0x07, 0x9A, 0x09, 0x5A, 0x00, 0xA0, 0x07,
- 0xA2, 0x09, 0x19, 0x00, 0xA0, 0x07, 0xA4, 0x09,
- 0x05, 0x00, 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x20,
- 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x04, 0x08, 0x02,
- 0x78, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xB0, 0x03,
- 0x20, 0x98, 0xAB, 0xE3, 0x65, 0x06, 0x9A, 0x16,
- 0x08, 0x02, 0x72, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0x20, 0xE8, 0x0C, 0xE0, 0x82, 0x01, 0xA0, 0x06,
- 0xD0, 0xD5, 0x20, 0x06, 0x9A, 0x09, 0xBF, 0x13,
- 0x84, 0x07, 0x2C, 0x00, 0x85, 0x07, 0xF4, 0x03,
- 0xA0, 0x06, 0xA2, 0xD8, 0x60, 0x04, 0xC0, 0xDB,
- 0x20, 0x48, 0x0C, 0xE0, 0x82, 0x01, 0x82, 0x10,
- 0x0E, 0x01, 0x03, 0x00, 0x0A, 0x13, 0x08, 0x02,
- 0x0C, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xE0, 0xE3,
- 0x14, 0xE0, 0x20, 0xC8, 0xAE, 0xE4, 0x86, 0x01,
- 0x26, 0x10, 0x20, 0x48, 0x0C, 0xE0, 0x82, 0x01,
- 0xE0, 0x2E, 0x01, 0x00, 0x60, 0xC1, 0x1E, 0x09,
- 0x35, 0x0A, 0x05, 0xE8, 0x82, 0x01, 0x20, 0xC1,
- 0x6A, 0x09, 0x04, 0x01, 0x06, 0x00, 0x06, 0x13,
- 0x20, 0xD8, 0xD0, 0xE1, 0x2F, 0x09, 0x20, 0xD8,
- 0xD0, 0xE1, 0x83, 0x01, 0x20, 0x21, 0x22, 0xE0,
- 0x03, 0x16, 0x20, 0xE8, 0x22, 0xE0, 0x80, 0x01,
- 0x20, 0x21, 0x04, 0xE0, 0x04, 0x16, 0xA0, 0xE3,
- 0x14, 0xE0, 0x60, 0x04, 0x0A, 0xD3, 0x08, 0x02,
- 0x00, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xE8,
- 0x08, 0xE0, 0x82, 0x01, 0xE0, 0xC2, 0x8A, 0x09,
- 0x02, 0x11, 0x60, 0x04, 0xB0, 0xCE, 0xA0, 0x01,
- 0x8E, 0x09, 0x00, 0x04, 0x6B, 0x10, 0x20, 0xC8,
- 0xAE, 0xE4, 0x86, 0x01, 0x08, 0x02, 0x00, 0x80,
- 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xC2, 0x1E, 0x09,
- 0x08, 0xA2, 0x08, 0x05, 0x28, 0xC8, 0x22, 0xE0,
- 0xCA, 0x06, 0x20, 0xC8, 0x20, 0xE0, 0xC6, 0x06,
- 0x20, 0xC8, 0x20, 0xE0, 0xC8, 0x06, 0x60, 0xE3,
- 0x16, 0xE0, 0x60, 0x04, 0xD2, 0xCE, 0x44, 0xC1,
- 0x44, 0x02, 0x00, 0x5E, 0xF8, 0x16, 0x60, 0x25,
- 0xA8, 0xE4, 0x0F, 0x16, 0x20, 0x06, 0xC6, 0x06,
- 0xF2, 0x16, 0x20, 0x06, 0xCA, 0x06, 0x03, 0x13,
- 0xA0, 0x05, 0xCC, 0x06, 0xE6, 0x10, 0xB0, 0x03,
- 0x20, 0xD8, 0x0C, 0xE0, 0x65, 0x06, 0x60, 0x04,
- 0xD2, 0xCE, 0x20, 0x06, 0xC8, 0x06, 0xE3, 0x16,
- 0x20, 0x88, 0x70, 0x09, 0xCC, 0x06, 0x03, 0x16,
- 0x83, 0x07, 0x08, 0x00, 0x02, 0x10, 0x83, 0x07,
- 0x0C, 0x00, 0x60, 0x04, 0x8A, 0xDC, 0x60, 0x04,
- 0xD2, 0xCE, 0xA0, 0x23, 0x08, 0xE0, 0x03, 0x13,
- 0x60, 0x23, 0x12, 0xE0, 0x06, 0x16, 0xB0, 0x03,
- 0x20, 0xD8, 0xA9, 0xE3, 0x65, 0x06, 0x60, 0x04,
- 0xD2, 0xCE, 0x08, 0x02, 0x00, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x60, 0x04, 0xB0, 0xCE, 0x08, 0x02,
- 0x00, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xC8,
- 0x1E, 0xE0, 0xC6, 0x06, 0x20, 0xC8, 0x1E, 0xE0,
- 0xC8, 0x06, 0x60, 0xE3, 0x10, 0xE0, 0x60, 0x04,
- 0xD2, 0xCE, 0xE0, 0x23, 0x14, 0xE0, 0x30, 0x13,
- 0x44, 0xC1, 0x44, 0x02, 0x00, 0x1E, 0xF5, 0x16,
- 0x60, 0x25, 0xA8, 0xE4, 0x1D, 0x16, 0x20, 0x06,
- 0xC8, 0x06, 0xEF, 0x16, 0x60, 0x01, 0x8E, 0x09,
- 0x00, 0x80, 0x13, 0x16, 0x60, 0x01, 0x8E, 0x09,
- 0x00, 0x01, 0x0C, 0x16, 0xA0, 0x01, 0x8E, 0x09,
- 0x00, 0x01, 0xA0, 0x01, 0x8E, 0x09, 0x80, 0x00,
- 0xA0, 0x43, 0x04, 0xE0, 0x83, 0x07, 0x18, 0x68,
- 0xA0, 0x06, 0x2A, 0xD8, 0x20, 0xC8, 0xAE, 0xE4,
- 0x86, 0x01, 0xC2, 0x04, 0x60, 0x04, 0x2C, 0xE4,
- 0x08, 0x02, 0x1E, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0x07, 0x10, 0x20, 0x06, 0xC6, 0x06, 0xCD, 0x16,
- 0x83, 0x07, 0x09, 0x00, 0xA0, 0x06, 0x8A, 0xDC,
- 0x60, 0x04, 0xB0, 0xCE, 0xCE, 0x04, 0xE0, 0x04,
- 0x2A, 0x09, 0xE0, 0xD3, 0xAA, 0xE3, 0x8F, 0xC2,
- 0x20, 0xC8, 0xB0, 0xE4, 0x86, 0x01, 0x20, 0x48,
- 0x08, 0xE0, 0x82, 0x01, 0x86, 0x07, 0x05, 0x00,
- 0x84, 0x07, 0x72, 0x06, 0x54, 0xC1, 0x01, 0x13,
- 0xD4, 0x2C, 0x24, 0x02, 0x0A, 0x00, 0x06, 0x06,
- 0xF9, 0x16, 0x08, 0x02, 0x2A, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x20, 0x2C, 0x1A, 0xE0, 0x60, 0x04,
- 0x50, 0xCD, 0xA0, 0x06, 0x3E, 0xD7, 0xCD, 0x04,
- 0xA0, 0x23, 0x1C, 0xE0, 0x0D, 0x13, 0x0E, 0x01,
- 0x03, 0x00, 0x0A, 0x13, 0xA0, 0xE3, 0x1C, 0xE0,
- 0xB0, 0x03, 0x20, 0xD8, 0x10, 0xE0, 0x65, 0x06,
- 0xA0, 0xD2, 0x26, 0xE0, 0xCF, 0x04, 0x08, 0x10,
- 0x20, 0x2D, 0x01, 0x00, 0xE0, 0xC0, 0x2A, 0x09,
- 0xA0, 0x06, 0x2A, 0xD8, 0xA0, 0xD2, 0xAB, 0xE3,
- 0x60, 0x04, 0xD2, 0xCE, 0xA0, 0x01, 0x80, 0x01,
- 0x00, 0x01, 0xE0, 0x01, 0x80, 0x01, 0x00, 0xAC,
- 0xA0, 0x01, 0x82, 0x01, 0x00, 0x03, 0xE0, 0x01,
- 0x82, 0x01, 0x00, 0x08, 0x88, 0x07, 0xAE, 0x01,
- 0x08, 0x06, 0xFE, 0x16, 0x60, 0x01, 0x8E, 0x09,
- 0x00, 0x02, 0x03, 0x16, 0xA0, 0x01, 0x80, 0x01,
- 0x00, 0x20, 0xC8, 0x04, 0x20, 0xD2, 0x80, 0x01,
- 0x08, 0xC8, 0x9C, 0x09, 0x08, 0xD8, 0x2E, 0x09,
- 0xA0, 0x07, 0x9E, 0x09, 0x00, 0x10, 0x5B, 0x04,
- 0x20, 0xD8, 0xA6, 0x09, 0x2E, 0x09, 0xE0, 0x01,
- 0x80, 0x01, 0x00, 0x04, 0xE0, 0x01, 0x82, 0x01,
- 0x00, 0x08, 0xA0, 0x01, 0x82, 0x01, 0x00, 0x03,
- 0x20, 0xC2, 0x30, 0x09, 0x03, 0x13, 0xE0, 0x01,
- 0x82, 0x01, 0x00, 0x03, 0xA0, 0x01, 0x80, 0x01,
- 0x00, 0xA1, 0x20, 0xF8, 0x2E, 0x09, 0x80, 0x01,
- 0x88, 0x07, 0xAE, 0x01, 0x08, 0x06, 0xFE, 0x16,
- 0xA0, 0x01, 0x80, 0x01, 0x00, 0x0C, 0xE0, 0x04,
- 0x9E, 0x01, 0xE0, 0x04, 0x9C, 0x09, 0xE0, 0x04,
- 0x9E, 0x09, 0x5B, 0x04, 0x20, 0x01, 0xA8, 0x09,
- 0x00, 0x80, 0x11, 0x13, 0xE0, 0x93, 0x26, 0xE0,
- 0x0E, 0x16, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
- 0x0A, 0x13, 0x08, 0x02, 0x84, 0x80, 0x00, 0x00,
- 0x00, 0xE0, 0xDC, 0x0F, 0xA0, 0x06, 0xDA, 0xD4,
- 0x20, 0x48, 0x08, 0xE0, 0x82, 0x01, 0x02, 0x10,
- 0x60, 0x04, 0x70, 0xDA, 0x60, 0x04, 0xBA, 0xCE,
- 0xA0, 0x06, 0x9C, 0xD5, 0x08, 0xC2, 0x19, 0x13,
- 0x83, 0x07, 0x80, 0x80, 0xE0, 0x23, 0x14, 0xE0,
- 0x02, 0x13, 0x83, 0x07, 0x0A, 0x00, 0x60, 0x04,
- 0xC6, 0xCE, 0x20, 0xC1, 0x06, 0x06, 0x0D, 0x13,
- 0xA0, 0x06, 0x9C, 0xD5, 0x08, 0xC2, 0x09, 0x13,
- 0x83, 0x07, 0x0B, 0x00, 0xE0, 0x23, 0x14, 0xE0,
- 0x02, 0x16, 0x83, 0x07, 0x01, 0x80, 0x60, 0x04,
- 0xC6, 0xCE, 0x83, 0x07, 0x0A, 0x80, 0x60, 0x04,
- 0xB4, 0xCE, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
- 0x06, 0x16, 0xA0, 0x06, 0xA8, 0xE5, 0x47, 0x10,
- 0xD0, 0x03, 0x60, 0x04, 0xB0, 0xD3, 0xE0, 0x93,
- 0x0E, 0xE0, 0x5E, 0x13, 0xE0, 0x93, 0x10, 0xE0,
- 0x17, 0x13, 0xE0, 0x23, 0x14, 0xE0, 0x04, 0x13,
- 0x83, 0x07, 0x07, 0x00, 0x60, 0x04, 0xC6, 0xCE,
- 0x83, 0x07, 0x00, 0xA0, 0xA0, 0x06, 0x2A, 0xD8,
- 0x83, 0x07, 0x00, 0x48, 0xA0, 0x06, 0x2A, 0xD8,
- 0xA0, 0xD2, 0x10, 0xE0, 0x20, 0xC8, 0x1C, 0xE0,
- 0xCA, 0x06, 0x20, 0xC8, 0x20, 0xE0, 0xCC, 0x06,
- 0xA0, 0x06, 0x3E, 0xD7, 0x08, 0x02, 0x4E, 0x80,
- 0xA0, 0x06, 0xDA, 0xD4, 0xA0, 0x23, 0x1C, 0xE0,
- 0x20, 0x13, 0x20, 0x88, 0x6C, 0x09, 0x0E, 0x07,
- 0x1C, 0x16, 0x20, 0x88, 0x6E, 0x09, 0x10, 0x07,
- 0x18, 0x16, 0x20, 0x88, 0x70, 0x09, 0x12, 0x07,
- 0x14, 0x16, 0x20, 0x88, 0x0A, 0x07, 0x22, 0xE0,
- 0x10, 0x13, 0x20, 0x06, 0xCA, 0x06, 0x38, 0x16,
- 0xA0, 0xE3, 0x20, 0xE0, 0x06, 0x10, 0xE0, 0x23,
- 0x14, 0xE0, 0xCA, 0x16, 0xA0, 0xE3, 0x22, 0xE0,
- 0xC2, 0x04, 0xA0, 0xD2, 0xAA, 0xE3, 0x60, 0x04,
- 0xBA, 0xCE, 0x20, 0xC8, 0x1C, 0xE0, 0xCA, 0x06,
- 0xA0, 0x88, 0xDC, 0x06, 0x0E, 0x00, 0x10, 0x16,
- 0xA0, 0x88, 0xDE, 0x06, 0x10, 0x00, 0x0C, 0x16,
- 0xA0, 0x88, 0xE0, 0x06, 0x12, 0x00, 0x08, 0x16,
- 0x20, 0x06, 0xCC, 0x06, 0x19, 0x16, 0x20, 0xE8,
- 0x0E, 0xE0, 0x82, 0x01, 0xA0, 0xE3, 0x1E, 0xE0,
- 0x20, 0xC8, 0x20, 0xE0, 0xCC, 0x06, 0x10, 0x10,
- 0xA0, 0x23, 0x10, 0xE0, 0x08, 0x16, 0x64, 0xC1,
- 0x06, 0x00, 0x60, 0x21, 0x0C, 0xE0, 0x08, 0x13,
- 0xA0, 0xD2, 0xA8, 0xE3, 0x05, 0x10, 0x20, 0x88,
- 0x0A, 0x07, 0x08, 0x07, 0x96, 0x12, 0x00, 0x10,
- 0x60, 0x04, 0xBA, 0xCE, 0x60, 0x01, 0x8E, 0x09,
- 0x00, 0x80, 0x06, 0x16, 0x83, 0x07, 0x00, 0x82,
- 0xA0, 0x06, 0x2A, 0xD8, 0x60, 0x04, 0xCA, 0xCE,
- 0xE0, 0x93, 0x0E, 0xE0, 0x50, 0x13, 0xE0, 0x93,
- 0xA9, 0xE3, 0x4D, 0x13, 0xE0, 0x93, 0xA8, 0xE3,
- 0x1C, 0x13, 0xA0, 0x06, 0xA4, 0xD7, 0xA0, 0x23,
- 0x10, 0xE0, 0x45, 0x13, 0xA0, 0x23, 0x08, 0xE0,
- 0x06, 0x16, 0x60, 0xE3, 0x1E, 0xE0, 0x20, 0xC8,
- 0x22, 0xE0, 0x06, 0x07, 0x34, 0x10, 0xE0, 0x23,
- 0x14, 0xE0, 0x31, 0x16, 0x60, 0xC1, 0x6A, 0x09,
- 0x60, 0x21, 0x12, 0xE0, 0x2C, 0x16, 0xA0, 0x06,
- 0x0E, 0xE2, 0x31, 0x10, 0xA0, 0xD2, 0xA8, 0xE3,
- 0x2E, 0x10, 0xA0, 0xE3, 0x12, 0xE0, 0xA0, 0x06,
- 0x0E, 0xE2, 0x64, 0xC1, 0x06, 0x00, 0x60, 0x21,
- 0x0C, 0xE0, 0x25, 0x13, 0x20, 0x88, 0x0E, 0x07,
- 0xDC, 0x06, 0x14, 0x16, 0x20, 0x88, 0x10, 0x07,
- 0xDE, 0x06, 0x10, 0x16, 0x20, 0x88, 0x12, 0x07,
- 0xE0, 0x06, 0x0C, 0x16, 0x20, 0x98, 0xCE, 0x06,
- 0xCF, 0x06, 0x15, 0x13, 0x20, 0x06, 0xCE, 0x06,
- 0x12, 0x16, 0x60, 0xE3, 0x1A, 0xE0, 0xA0, 0xD2,
- 0x0C, 0xE0, 0x0D, 0x10, 0x60, 0xE3, 0x1E, 0xE0,
- 0x20, 0xC8, 0x32, 0xE0, 0x06, 0x07, 0xA0, 0x06,
- 0x3E, 0xD7, 0x08, 0x02, 0x48, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0xA0, 0xD2, 0xA9, 0xE3, 0x60, 0x04,
- 0xBA, 0xCE, 0x22, 0x88, 0x0E, 0x00, 0x6C, 0x09,
- 0xC9, 0x1A, 0x0B, 0x1B, 0x22, 0x88, 0x10, 0x00,
- 0x6E, 0x09, 0xC4, 0x1A, 0x06, 0x1B, 0x22, 0x88,
- 0x12, 0x00, 0x70, 0x09, 0xBF, 0x1A, 0x01, 0x1B,
- 0x5B, 0x04, 0x60, 0xC1, 0x6C, 0x01, 0x85, 0x02,
- 0x43, 0x00, 0xE1, 0x13, 0xE0, 0x93, 0xA8, 0xE3,
- 0xDE, 0x16, 0xA0, 0xC8, 0x00, 0xEE, 0x02, 0x00,
- 0x84, 0x07, 0x0E, 0x00, 0x42, 0xC1, 0xA0, 0xC0,
- 0x6C, 0x01, 0x02, 0xC0, 0x25, 0x02, 0x48, 0x00,
- 0x81, 0x07, 0x60, 0xE2, 0x83, 0x07, 0x14, 0xAE,
- 0x60, 0x04, 0x9E, 0xE5, 0x02, 0x02, 0x00, 0xFC,
- 0xCA, 0x10, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
- 0x06, 0x16, 0x83, 0x07, 0x00, 0x82, 0xA0, 0x06,
- 0x2A, 0xD8, 0x60, 0x04, 0xCA, 0xCE, 0x20, 0x98,
- 0x0E, 0xE0, 0x65, 0x06, 0x03, 0x16, 0x20, 0xD8,
- 0xA8, 0xE3, 0x65, 0x06, 0xE0, 0x93, 0xA9, 0xE3,
- 0x0D, 0x13, 0xA0, 0x23, 0x08, 0xE0, 0x19, 0x16,
- 0xA0, 0x23, 0x10, 0xE0, 0x16, 0x13, 0x60, 0xE3,
- 0x1E, 0xE0, 0x20, 0xC8, 0x20, 0xE0, 0x06, 0x07,
- 0xA0, 0x06, 0x3E, 0xD7, 0xA0, 0x43, 0x18, 0xE0,
- 0xE0, 0x2E, 0x01, 0x00, 0xA0, 0xD2, 0x26, 0xE0,
- 0x83, 0x07, 0x10, 0x00, 0xA0, 0x06, 0x2A, 0xD8,
- 0xE0, 0x23, 0x14, 0xE0, 0x02, 0x16, 0xA0, 0x06,
- 0x18, 0xD7, 0xA0, 0x43, 0x2C, 0xE0, 0x20, 0xC8,
- 0x20, 0xE0, 0x24, 0x09, 0x60, 0x04, 0xBA, 0xCE,
- 0xA0, 0x06, 0xA8, 0xE5, 0x01, 0x10, 0x03, 0x10,
- 0x20, 0x07, 0xA0, 0x09, 0x03, 0x10, 0xA0, 0x07,
- 0xA2, 0x09, 0x19, 0x00, 0x60, 0x04, 0xBA, 0xCE,
- 0xA0, 0x43, 0x0E, 0xE0, 0xA0, 0xC1, 0x24, 0x09,
- 0x02, 0x13, 0x20, 0x06, 0x24, 0x09, 0xE0, 0x23,
- 0x14, 0xE0, 0x03, 0x13, 0xA0, 0x23, 0x08, 0xE0,
- 0x29, 0x16, 0x20, 0xC2, 0x8A, 0x09, 0xE4, 0x11,
- 0x08, 0x02, 0x42, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
- 0xA0, 0x23, 0x08, 0xE0, 0x1F, 0x16, 0xA0, 0x23,
- 0x10, 0xE0, 0x0A, 0x16, 0x22, 0xC1, 0x02, 0x00,
- 0x20, 0x25, 0xA8, 0xE4, 0x23, 0x16, 0x83, 0x07,
- 0x20, 0x80, 0xA0, 0x06, 0x2A, 0xD8, 0x12, 0x10,
- 0xA0, 0x06, 0x3E, 0xD7, 0xE0, 0x23, 0x14, 0xE0,
- 0x02, 0x16, 0xA0, 0x06, 0x18, 0xD7, 0x60, 0xE3,
- 0x1E, 0xE0, 0x20, 0xC8, 0x20, 0xE0, 0x06, 0x07,
- 0xA0, 0x23, 0x08, 0xE0, 0x03, 0x16, 0xA0, 0x23,
- 0x06, 0xE0, 0x51, 0x13, 0x20, 0x98, 0x0E, 0xE0,
- 0x65, 0x06, 0x03, 0x16, 0x20, 0xD8, 0xA8, 0xE3,
- 0x65, 0x06, 0x22, 0xC1, 0x02, 0x00, 0x20, 0x25,
- 0xA8, 0xE4, 0x0E, 0x13, 0x83, 0x07, 0x20, 0x00,
- 0xA0, 0x06, 0x2A, 0xD8, 0x22, 0xC8, 0x0E, 0x00,
- 0xE6, 0x06, 0x22, 0xC8, 0x10, 0x00, 0xE8, 0x06,
- 0x22, 0xC8, 0x12, 0x00, 0xEA, 0x06, 0x37, 0x10,
- 0x22, 0x88, 0x0E, 0x00, 0xDC, 0x06, 0x08, 0x16,
- 0x22, 0x88, 0x10, 0x00, 0xDE, 0x06, 0x04, 0x16,
- 0x22, 0x88, 0x12, 0x00, 0xE0, 0x06, 0x0B, 0x13,
- 0x22, 0xC8, 0x0E, 0x00, 0xDC, 0x06, 0x22, 0xC8,
- 0x10, 0x00, 0xDE, 0x06, 0x22, 0xC8, 0x12, 0x00,
- 0xE0, 0x06, 0x60, 0xE3, 0x14, 0xE0, 0xA0, 0x23,
- 0x0E, 0xE0, 0x08, 0x16, 0xA0, 0xC1, 0x24, 0x09,
- 0x1A, 0x16, 0x86, 0x07, 0x00, 0x10, 0x06, 0xE8,
- 0xD2, 0x06, 0x15, 0x10, 0xA0, 0xE3, 0x0E, 0xE0,
- 0xA0, 0x23, 0x08, 0xE0, 0x09, 0x16, 0xA0, 0xE3,
- 0x06, 0xE0, 0xE0, 0x04, 0xE6, 0x06, 0xE0, 0x04,
- 0xE8, 0x06, 0xE0, 0x04, 0xEA, 0x06, 0x07, 0x10,
- 0x08, 0x02, 0x36, 0x80, 0xA0, 0x07, 0xD6, 0x06,
- 0x36, 0xD3, 0xA0, 0x06, 0xDA, 0xD4, 0x60, 0x04,
- 0xBA, 0xCE, 0x20, 0x98, 0x65, 0x06, 0x10, 0xE0,
- 0x03, 0x16, 0x20, 0xD8, 0x0E, 0xE0, 0x65, 0x06,
- 0x60, 0x04, 0xBA, 0xCE, 0xE0, 0x23, 0x14, 0xE0,
- 0x02, 0x13, 0x60, 0x04, 0xBA, 0xCE, 0x2E, 0x10,
- 0xB0, 0x03, 0x20, 0x98, 0xA9, 0xE3, 0x6F, 0x06,
- 0x19, 0x16, 0x24, 0xC2, 0x08, 0x00, 0x16, 0x11,
- 0xE0, 0xE3, 0x14, 0xE0, 0x83, 0x07, 0x00, 0x00,
- 0xA0, 0x06, 0x2A, 0xD8, 0xA0, 0x23, 0x14, 0xE0,
- 0x04, 0x13, 0x08, 0x02, 0x06, 0x80, 0xA0, 0x06,
- 0xDA, 0xD4, 0x08, 0x02, 0x1E, 0x00, 0xA0, 0x06,
- 0xDA, 0xD4, 0xA0, 0x23, 0x08, 0xE0, 0x02, 0x13,
- 0xA0, 0x06, 0x18, 0xD7, 0x82, 0xC0, 0x02, 0x16,
- 0x60, 0x04, 0xD2, 0xCE, 0x20, 0xE8, 0x1C, 0xEE,
- 0xF0, 0x06, 0x20, 0x99, 0x0E, 0xE0, 0x16, 0x00,
- 0x05, 0x16, 0xE0, 0x04, 0xEC, 0x06, 0x20, 0x48,
- 0x14, 0xE0, 0xF0, 0x06, 0x83, 0x07, 0x01, 0x00,
- 0x60, 0x04, 0xB4, 0xCE, 0x64, 0xC2, 0x14, 0x00,
- 0x24, 0x02, 0x18, 0x00, 0xC4, 0xC1, 0xC2, 0x61,
- 0x27, 0x02, 0xFC, 0xFF, 0x74, 0xC1, 0x85, 0xC1,
- 0x45, 0x71, 0x85, 0x02, 0x27, 0x00, 0x46, 0x16,
- 0x54, 0xC1, 0x45, 0x02, 0xCF, 0xFF, 0x42, 0x16,
- 0xC8, 0x04, 0x64, 0xC1, 0x08, 0x00, 0x06, 0x15,
- 0x05, 0x13, 0x24, 0xC2, 0x0E, 0x00, 0x48, 0x02,
- 0x00, 0x1F, 0xC8, 0x06, 0x28, 0x02, 0x11, 0x00,
- 0x04, 0xA2, 0x18, 0x98, 0x21, 0xEE, 0x32, 0x16,
- 0x42, 0xC1, 0x25, 0x02, 0x04, 0x00, 0x47, 0x65,
- 0x35, 0xC2, 0x74, 0xCD, 0x48, 0x06, 0xFD, 0x15,
- 0xA0, 0xC0, 0x6C, 0x01, 0x02, 0xC1, 0x04, 0xC8,
- 0x6C, 0x01, 0xA0, 0xC1, 0x00, 0xFC, 0x05, 0x13,
- 0x20, 0xC8, 0x80, 0xEB, 0x02, 0xFC, 0x06, 0xC1,
- 0xF6, 0x10, 0x20, 0xC8, 0x00, 0xEE, 0x02, 0xFC,
- 0x02, 0xC8, 0x6C, 0x01, 0x81, 0x07, 0x08, 0xE5,
- 0x04, 0xC0, 0x83, 0x07, 0x10, 0x02, 0x84, 0x07,
- 0x0E, 0x00, 0x3B, 0x10, 0x84, 0x07, 0x0C, 0x00,
- 0xE2, 0xC0, 0x08, 0x00, 0x05, 0x02, 0x00, 0xFC,
- 0xA0, 0xC0, 0x6C, 0x01, 0x02, 0xC0, 0x95, 0xC1,
- 0x30, 0x13, 0xD5, 0x04, 0x16, 0x2E, 0x02, 0xC8,
- 0x6C, 0x01, 0x2B, 0x10, 0xA0, 0xC8, 0x22, 0xEE,
- 0x0E, 0x00, 0xA0, 0xC8, 0x24, 0xEE, 0x10, 0x00,
- 0xA0, 0xC8, 0x26, 0xEE, 0x12, 0x00, 0x83, 0x07,
- 0x06, 0x80, 0x60, 0x04, 0xB4, 0xCE, 0x60, 0x04,
- 0xD2, 0xCE, 0x84, 0x07, 0x10, 0x00, 0x85, 0x07,
- 0x34, 0x00, 0x09, 0x10, 0x84, 0x07, 0x12, 0x00,
- 0x85, 0x07, 0x32, 0x00, 0x04, 0x10, 0x84, 0x07,
- 0x14, 0x00, 0x85, 0x07, 0x38, 0x00, 0xA0, 0x06,
- 0xC2, 0xD5, 0x85, 0xC8, 0x04, 0x00, 0xA0, 0x06,
- 0x10, 0xD6, 0xA0, 0xC8, 0x00, 0xEE, 0x02, 0x00,
- 0xA0, 0xC0, 0x6C, 0x01, 0x02, 0xC0, 0x48, 0x06,
- 0x48, 0xC1, 0xA0, 0x06, 0xA2, 0xD8, 0x07, 0x02,
- 0xA2, 0x06, 0x60, 0xC5, 0x02, 0xFC, 0x25, 0x02,
- 0xF4, 0xFF, 0x05, 0xC8, 0x02, 0xFC, 0x20, 0xC2,
- 0x6C, 0x01, 0xA0, 0x06, 0xFC, 0xB4, 0x60, 0x04,
- 0xB0, 0xCE, 0xA0, 0x06, 0xA2, 0xD8, 0x07, 0x02,
- 0xB4, 0x06, 0xEF, 0x10, 0x22, 0x88, 0x12, 0x00,
- 0x70, 0x09, 0x08, 0x16, 0x22, 0x88, 0x10, 0x00,
- 0x6E, 0x09, 0x04, 0x16, 0x22, 0x88, 0x0E, 0x00,
- 0x6C, 0x09, 0x0E, 0x13, 0x22, 0x88, 0x12, 0x00,
- 0xE0, 0x06, 0x08, 0x16, 0x22, 0x88, 0x10, 0x00,
- 0xDE, 0x06, 0x04, 0x16, 0x22, 0x88, 0x0E, 0x00,
- 0xDC, 0x06, 0x01, 0x13, 0xCB, 0x05, 0xCB, 0x05,
- 0x5B, 0x04, 0x0B, 0xC3, 0x00, 0x03, 0x02, 0x00,
- 0x82, 0x07, 0xC0, 0x00, 0x20, 0xC8, 0x0C, 0x00,
- 0xC0, 0x00, 0x20, 0xC8, 0x0E, 0x00, 0xC2, 0x00,
- 0x20, 0xC8, 0x10, 0x00, 0xC4, 0x00, 0x20, 0xC8,
- 0x12, 0x00, 0xC6, 0x00, 0x20, 0xC8, 0x14, 0x00,
- 0xC8, 0x00, 0x20, 0xC8, 0x16, 0x00, 0xCA, 0x00,
- 0x20, 0xC8, 0x04, 0x00, 0xCC, 0x00, 0x20, 0xC8,
- 0x06, 0x00, 0xCE, 0x00, 0x02, 0xC8, 0x0C, 0x00,
- 0xA0, 0x07, 0x0E, 0x00, 0x7E, 0xE6, 0x02, 0xC8,
- 0x10, 0x00, 0xA0, 0x07, 0x12, 0x00, 0x88, 0xE6,
- 0x02, 0xC8, 0x14, 0x00, 0xA0, 0x07, 0x16, 0x00,
- 0xB8, 0xE6, 0x02, 0xC8, 0x04, 0x00, 0xA0, 0x07,
- 0x06, 0x00, 0xCE, 0xE6, 0x60, 0x01, 0x1C, 0x01,
- 0x04, 0x00, 0x09, 0x16, 0xE0, 0x01, 0x40, 0x01,
- 0x00, 0x08, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40,
- 0xE0, 0x01, 0x40, 0x01, 0x00, 0x04, 0xA0, 0x06,
- 0x8E, 0xE9, 0x05, 0x02, 0x00, 0x80, 0x05, 0xD8,
- 0x80, 0x04, 0xC7, 0x04, 0x00, 0x03, 0x0F, 0x00,
- 0x88, 0x07, 0x00, 0x10, 0x09, 0x02, 0x00, 0x20,
- 0x8A, 0x07, 0xE6, 0xE6, 0x03, 0x02, 0x3E, 0xE6,
- 0x5A, 0x04, 0x00, 0x03, 0x00, 0x00, 0x20, 0xD2,
- 0x87, 0x01, 0x06, 0x10, 0x00, 0x03, 0x00, 0x00,
- 0x20, 0xC2, 0x8A, 0x01, 0x08, 0x02, 0x00, 0x1A,
- 0x60, 0xC2, 0xAE, 0x00, 0x48, 0xDA, 0x80, 0x04,
- 0x89, 0x05, 0x89, 0x02, 0x06, 0x00, 0x07, 0x15,
- 0x88, 0x07, 0x00, 0x80, 0x48, 0xDA, 0x80, 0x04,
- 0x09, 0xC8, 0xAE, 0x00, 0x80, 0x03, 0xE0, 0x02,
- 0xA0, 0x00, 0x5C, 0x04, 0x00, 0x03, 0x00, 0x00,
- 0x60, 0x01, 0x9C, 0x01, 0x20, 0x00, 0xE2, 0x13,
- 0x20, 0xC2, 0x8C, 0x01, 0x08, 0x02, 0x00, 0x1C,
- 0xE3, 0x10, 0x00, 0x03, 0x00, 0x00, 0x60, 0x01,
- 0x40, 0x01, 0x00, 0x40, 0xEC, 0x16, 0xA0, 0x01,
- 0x40, 0x01, 0x00, 0x40, 0x08, 0x02, 0x00, 0x02,
- 0xD7, 0x10, 0xB3, 0xC0, 0x92, 0x06, 0xFD, 0x10,
- 0xB3, 0xC0, 0x48, 0xC0, 0x72, 0xCC, 0x72, 0xCC,
- 0x32, 0xC1, 0x44, 0xCC, 0x72, 0xDC, 0x04, 0x06,
- 0xFD, 0x16, 0x5B, 0x04, 0x48, 0xC0, 0x02, 0x02,
- 0xD0, 0xE9, 0x84, 0x07, 0x06, 0x00, 0xF6, 0x10,
- 0x02, 0x02, 0x1E, 0xE6, 0x49, 0xC0, 0x84, 0x07,
- 0x06, 0x00, 0xF0, 0x10, 0xB3, 0xC0, 0x32, 0xC1,
- 0x01, 0x02, 0x01, 0x00, 0x44, 0xD0, 0xC1, 0x06,
- 0x44, 0x02, 0xFF, 0x00, 0xE7, 0x10, 0x33, 0xC1,
- 0x73, 0xC0, 0x44, 0xD1, 0x44, 0x02, 0xFF, 0x00,
- 0x45, 0xDC, 0x04, 0x06, 0xFD, 0x16, 0x5A, 0x04,
- 0xA0, 0x06, 0x0E, 0xE9, 0x33, 0xC8, 0x9E, 0x01,
- 0x5A, 0x04, 0xA0, 0x06, 0x0C, 0xE7, 0x89, 0xC1,
- 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8,
- 0x8A, 0x01, 0x88, 0xC1, 0xA6, 0x09, 0x66, 0x02,
- 0x40, 0x00, 0x06, 0xC8, 0x8C, 0x01, 0xC2, 0x04,
- 0xC7, 0xC1, 0x03, 0x16, 0x02, 0x06, 0xFC, 0x16,
- 0x4D, 0x10, 0x5A, 0x04, 0xA0, 0x06, 0x58, 0xE8,
- 0x89, 0xC1, 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00,
- 0x06, 0xC8, 0x8A, 0x01, 0x88, 0xC1, 0xA6, 0x09,
- 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8, 0x8C, 0x01,
- 0x33, 0xC8, 0x9E, 0x01, 0xE8, 0x10, 0x33, 0x8A,
- 0x02, 0x00, 0x38, 0x16, 0x73, 0x8A, 0x02, 0x00,
- 0x35, 0x16, 0x5A, 0x04, 0x20, 0x8A, 0xCA, 0xE9,
- 0x02, 0x00, 0x30, 0x16, 0x60, 0x8A, 0xCE, 0xE9,
- 0x02, 0x00, 0x2C, 0x16, 0x82, 0x07, 0x74, 0xEA,
- 0x01, 0x10, 0xB3, 0xC0, 0x04, 0x02, 0x80, 0x04,
- 0x52, 0xD1, 0x03, 0x13, 0x32, 0x9D, 0x22, 0x16,
- 0xFB, 0x10, 0x85, 0x07, 0x00, 0x80, 0x05, 0xD8,
- 0x80, 0x04, 0xC7, 0x04, 0x5A, 0x04, 0x20, 0xC8,
- 0xC0, 0x00, 0x0C, 0x00, 0x20, 0xC8, 0xC2, 0x00,
- 0x0E, 0x00, 0x20, 0xC8, 0xC4, 0x00, 0x10, 0x00,
- 0x20, 0xC8, 0xC6, 0x00, 0x12, 0x00, 0x20, 0xC8,
- 0xC8, 0x00, 0x14, 0x00, 0x20, 0xC8, 0xCA, 0x00,
- 0x16, 0x00, 0x20, 0xC8, 0xCC, 0x00, 0x04, 0x00,
- 0x20, 0xC8, 0xCE, 0x00, 0x06, 0x00, 0x00, 0x03,
- 0x0F, 0x00, 0xCC, 0x05, 0x5C, 0x04, 0xE0, 0x04,
- 0x82, 0x01, 0x02, 0x02, 0x18, 0xE6, 0x32, 0xC8,
- 0x82, 0x01, 0x32, 0xC8, 0x80, 0x01, 0xA0, 0x06,
- 0x24, 0xE8, 0x12, 0xC8, 0x82, 0x01, 0xCA, 0xC2,
- 0x84, 0x07, 0xD0, 0x07, 0xE0, 0x04, 0x84, 0x01,
- 0x04, 0x06, 0xFC, 0x16, 0x20, 0xC1, 0x84, 0x01,
- 0xE9, 0x16, 0x04, 0x02, 0x32, 0x00, 0x85, 0x07,
- 0x00, 0x80, 0x05, 0xD8, 0x80, 0x04, 0xC7, 0x04,
- 0x60, 0xC1, 0x86, 0x01, 0x04, 0x06, 0xFC, 0x16,
- 0x20, 0xC1, 0x84, 0x01, 0x5B, 0x04, 0xB3, 0xC0,
- 0xB3, 0xC4, 0x5B, 0x04, 0x48, 0xC0, 0xB3, 0xC0,
- 0x73, 0xA0, 0x42, 0xC4, 0x5B, 0x04, 0x33, 0x88,
- 0x84, 0x01, 0xE6, 0x16, 0x5A, 0x04, 0x89, 0xC1,
- 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8,
- 0x8A, 0x01, 0x5B, 0x04, 0xC5, 0x04, 0xA0, 0x07,
- 0x9C, 0x01, 0x40, 0x00, 0x60, 0x01, 0x9C, 0x01,
- 0x40, 0x00, 0x03, 0x13, 0x05, 0x06, 0xF7, 0x16,
- 0x5C, 0x04, 0x5B, 0x04, 0xA0, 0x06, 0xAC, 0xE8,
- 0x60, 0xC0, 0x40, 0x01, 0x05, 0xC8, 0x40, 0x01,
- 0x02, 0xC5, 0x01, 0xC8, 0x40, 0x01, 0x5A, 0x04,
- 0xA0, 0x06, 0xAC, 0xE8, 0x08, 0xA1, 0xF4, 0x10,
- 0xB3, 0xC0, 0x33, 0xC1, 0x60, 0xC1, 0x40, 0x01,
- 0x85, 0x01, 0x00, 0x04, 0xC5, 0x01, 0x00, 0x10,
- 0x5B, 0x04, 0x08, 0xC1, 0x09, 0xC2, 0x44, 0xC2,
- 0x5B, 0x04, 0x05, 0x02, 0xC8, 0x00, 0x05, 0x06,
- 0xFE, 0x16, 0x5B, 0x04, 0x33, 0xC1, 0x03, 0xC0,
- 0xC4, 0xC0, 0x5B, 0x04, 0xC0, 0xC0, 0x5B, 0x04,
- 0xE0, 0x94, 0x9E, 0x01, 0xC2, 0x16, 0xC3, 0x05,
- 0x5B, 0x04, 0x73, 0xC0, 0xA0, 0x06, 0x26, 0xE9,
- 0x2D, 0x02, 0x08, 0x00, 0x85, 0x07, 0x08, 0x00,
- 0x71, 0x9F, 0xB7, 0x16, 0x05, 0x06, 0xFC, 0x16,
- 0x5A, 0x04, 0x02, 0x02, 0x24, 0xE6, 0x60, 0x04,
- 0x10, 0xE7, 0xE9, 0x8C, 0x04, 0x00, 0xAD, 0x16,
- 0x5B, 0x04, 0x20, 0xC1, 0x80, 0x01, 0x85, 0x07,
- 0xD0, 0x07, 0xE0, 0x01, 0x80, 0x01, 0x00, 0x04,
- 0x45, 0x06, 0xFE, 0x16, 0x04, 0xC8, 0x80, 0x01,
- 0x5B, 0x04, 0x33, 0xC1, 0x48, 0xC3, 0x04, 0xC1,
- 0x04, 0x13, 0x2D, 0x02, 0x00, 0x04, 0x04, 0x06,
- 0xFC, 0x16, 0x5B, 0x04, 0x8D, 0xC3, 0xA0, 0x06,
- 0x26, 0xE9, 0x8D, 0xC1, 0xA6, 0x09, 0x66, 0x02,
- 0x40, 0x00, 0x86, 0xC7, 0x5A, 0x04, 0x8D, 0xC1,
- 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8,
- 0x8A, 0x01, 0x5B, 0x04, 0x8D, 0xC1, 0xA6, 0x09,
- 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8, 0x8C, 0x01,
- 0x5B, 0x04, 0x4D, 0xC0, 0x04, 0x02, 0x28, 0x00,
- 0x85, 0x07, 0x00, 0x55, 0x60, 0x04, 0x34, 0xE7,
- 0x4D, 0xC0, 0xB3, 0xC0, 0x32, 0xC1, 0x60, 0x04,
- 0xF8, 0xE6, 0x33, 0xC1, 0x60, 0x01, 0x1C, 0x01,
- 0x04, 0x00, 0x01, 0x16, 0x5B, 0x04, 0xC4, 0xC0,
- 0x5B, 0x04, 0x89, 0x07, 0x66, 0xE5, 0x39, 0xC2,
- 0x07, 0x13, 0x39, 0xC6, 0x39, 0x86, 0x25, 0x16,
- 0x39, 0xC6, 0x39, 0x86, 0x22, 0x16, 0xF7, 0x10,
- 0x02, 0x02, 0xAC, 0xE9, 0xC4, 0x04, 0xC5, 0x04,
- 0x39, 0xC2, 0x02, 0x13, 0x60, 0x04, 0xE8, 0xE9,
- 0x02, 0x02, 0xBA, 0xE9, 0xC4, 0x04, 0x39, 0xC2,
- 0x03, 0x13, 0x79, 0xC1, 0x60, 0x04, 0xE8, 0xE9,
- 0x02, 0x02, 0xCA, 0xE9, 0xC5, 0x04, 0x39, 0xC2,
- 0x03, 0x13, 0x39, 0xC1, 0x60, 0x04, 0xE8, 0xE9,
- 0x79, 0xC0, 0xB9, 0xC0, 0x81, 0x60, 0xC2, 0x05,
- 0x12, 0x09, 0xF1, 0x04, 0x02, 0x06, 0xFD, 0x16,
- 0x5B, 0x04, 0x5C, 0x04, 0x01, 0x02, 0xAA, 0xAA,
- 0x01, 0xC6, 0x44, 0xE0, 0x45, 0x40, 0x58, 0x80,
- 0xF8, 0x16, 0x01, 0x02, 0x14, 0x00, 0x01, 0x06,
- 0xFE, 0x16, 0x01, 0x02, 0x55, 0x55, 0x01, 0xC6,
- 0x44, 0xE0, 0x45, 0x40, 0x58, 0x80, 0xED, 0x16,
- 0x52, 0x04, 0xE0, 0x02, 0xA0, 0x00, 0x88, 0x07,
- 0xC0, 0x00, 0x09, 0x02, 0x62, 0xEA, 0x84, 0x07,
- 0x2A, 0xE6, 0x05, 0x02, 0x01, 0x00, 0x8B, 0xC2,
- 0xCC, 0x04, 0xA0, 0x06, 0x6C, 0xEA, 0x60, 0x2C,
- 0x01, 0x00, 0x99, 0x06, 0xA0, 0x2C, 0x02, 0x00,
- 0x99, 0x06, 0x20, 0x2D, 0x04, 0x00, 0x99, 0x06,
- 0x20, 0x2E, 0x08, 0x00, 0x99, 0x06, 0xA0, 0x2F,
- 0x10, 0x00, 0x8C, 0x05, 0x09, 0x16, 0x80, 0xCC,
- 0x81, 0xC4, 0x83, 0x07, 0xB0, 0xEA, 0x88, 0xC0,
- 0x02, 0x04, 0x8C, 0x05, 0x01, 0x16, 0x33, 0x10,
- 0xE0, 0x02, 0xA0, 0x00, 0x5A, 0x04, 0x8C, 0x05,
- 0xFB, 0x16, 0x80, 0xCC, 0x81, 0xC4, 0x15, 0x0A,
- 0xB4, 0xC0, 0x12, 0xC0, 0x88, 0xCC, 0x52, 0xC0,
- 0xB4, 0xC4, 0x42, 0x06, 0x5B, 0x04, 0x2D, 0x07,
- 0x18, 0x00, 0x41, 0x8B, 0x0A, 0x00, 0xEC, 0x16,
- 0xC1, 0x82, 0xEA, 0x16, 0xC2, 0x02, 0x42, 0x02,
- 0x00, 0x02, 0xE6, 0x16, 0x80, 0x03, 0x81, 0x07,
- 0x01, 0x00, 0xF1, 0x10, 0x01, 0x02, 0x02, 0x00,
- 0xEE, 0x10, 0x01, 0x02, 0x04, 0x00, 0xEB, 0x10,
- 0x01, 0x02, 0x08, 0x00, 0xE8, 0x10, 0x01, 0x02,
- 0x10, 0x00, 0xE5, 0x10, 0xA1, 0x02, 0x41, 0x8B,
- 0x10, 0x00, 0x02, 0x13, 0x60, 0x04, 0x5C, 0xEA,
- 0x2D, 0x07, 0x18, 0x00, 0x80, 0x03, 0x09, 0x02,
- 0x00, 0x08, 0x03, 0x02, 0x04, 0x00, 0xC7, 0x04,
- 0xA0, 0x06, 0xDC, 0xEB, 0x60, 0x01, 0x1C, 0x01,
- 0x04, 0x00, 0x1C, 0x16, 0xA0, 0x01, 0x40, 0x01,
- 0x00, 0x08, 0xE0, 0x01, 0x40, 0x01, 0x00, 0x10,
- 0x04, 0x02, 0x01, 0x00, 0x44, 0xCE, 0xC4, 0x06,
- 0x44, 0xC6, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x10,
- 0x49, 0x06, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40,
- 0xE0, 0x01, 0x40, 0x01, 0x00, 0x04, 0xE0, 0x01,
- 0x40, 0x01, 0x00, 0x08, 0xA0, 0x06, 0x7A, 0xEC,
- 0xA0, 0x06, 0x7A, 0xEC, 0xC7, 0x05, 0x04, 0x02,
- 0xE4, 0xE4, 0xE0, 0x04, 0xD0, 0x03, 0x74, 0xC1,
- 0xB4, 0xC1, 0x86, 0x05, 0x1C, 0x13, 0xE0, 0x02,
- 0xC0, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0xC0,
- 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0xC1, 0x40, 0xC1,
- 0x80, 0xC1, 0xC0, 0xC1, 0x00, 0xC2, 0x40, 0xC2,
- 0x80, 0xC2, 0xC0, 0xC2, 0x00, 0xC3, 0x40, 0xC3,
- 0x80, 0xC3, 0xC0, 0xC3, 0xA0, 0x04, 0xAA, 0x00,
- 0xD0, 0x03, 0xD0, 0x03, 0x3F, 0x10, 0x85, 0x05,
- 0x85, 0x81, 0xE1, 0x13, 0xE4, 0x10, 0xC7, 0x05,
- 0x05, 0x02, 0xFF, 0x7F, 0x45, 0xA1, 0xD0, 0x03,
- 0xD0, 0x03, 0x34, 0x10, 0xC0, 0xCC, 0xC1, 0xC4,
- 0x03, 0x02, 0x28, 0x00, 0xA0, 0x06, 0xDC, 0xEB,
- 0xE0, 0x01, 0x42, 0x01, 0x00, 0x10, 0xC7, 0x05,
- 0xD0, 0x03, 0xD0, 0x03, 0x27, 0x10, 0xC7, 0x05,
- 0xA0, 0xC1, 0x4A, 0x01, 0xA0, 0x07, 0x4A, 0x01,
- 0x00, 0x0E, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x02,
- 0x20, 0x07, 0x44, 0x01, 0x60, 0xC1, 0x44, 0x01,
- 0x85, 0x02, 0x00, 0xFF, 0x17, 0x16, 0xE0, 0x01,
- 0x40, 0x01, 0x00, 0x22, 0x05, 0x02, 0xC0, 0x00,
- 0x05, 0x06, 0xD0, 0x03, 0xFD, 0x16, 0x60, 0xC1,
- 0x46, 0x01, 0x85, 0x02, 0x00, 0xFF, 0x0A, 0x13,
- 0x05, 0x02, 0x93, 0x33, 0x05, 0x06, 0x00, 0x10,
- 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
- 0xD0, 0x03, 0xF8, 0x16, 0x51, 0x10, 0x06, 0xC8,
- 0x4A, 0x01, 0xC0, 0xCC, 0xC1, 0xC4, 0x4B, 0x10,
- 0x13, 0xC0, 0xC8, 0xCC, 0x53, 0xC0, 0x02, 0x02,
- 0xEC, 0xEB, 0xC2, 0xC4, 0x43, 0x06, 0x5B, 0x04,
- 0x60, 0xC0, 0xAE, 0x00, 0xC4, 0x02, 0x44, 0x02,
- 0x0F, 0x00, 0x44, 0x88, 0xCA, 0xE4, 0x3C, 0x16,
- 0x81, 0x02, 0x08, 0x00, 0x27, 0x13, 0x21, 0xC1,
- 0xDC, 0xE4, 0x14, 0xC1, 0x21, 0x21, 0xBA, 0xE4,
- 0x33, 0x16, 0x21, 0xC1, 0xC2, 0xE4, 0x81, 0x02,
- 0x00, 0x00, 0x0B, 0x13, 0x0D, 0x02, 0xA0, 0x00,
- 0x84, 0x83, 0x09, 0x13, 0xC4, 0x05, 0x84, 0x83,
- 0x06, 0x13, 0xC4, 0x05, 0x84, 0x83, 0x03, 0x13,
- 0x23, 0x10, 0x0E, 0x81, 0x21, 0x16, 0x21, 0xC1,
- 0xDC, 0xE4, 0x21, 0x45, 0xBA, 0xE4, 0xE0, 0x01,
- 0x42, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x42, 0x01,
- 0x00, 0x10, 0xA1, 0xC3, 0xD4, 0xE4, 0x0F, 0x02,
- 0x2F, 0x00, 0x80, 0x03, 0xA0, 0x01, 0x40, 0x01,
- 0x00, 0x02, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x80,
- 0x6D, 0xC0, 0x0A, 0x00, 0x09, 0x13, 0x81, 0x02,
- 0x5C, 0x12, 0x06, 0x1B, 0x0E, 0x02, 0xD2, 0xEB,
- 0x0F, 0x02, 0x0F, 0x00, 0x80, 0x03, 0xCA, 0x05,
- 0xE0, 0x02, 0xA0, 0x00, 0x5A, 0x04, 0x59, 0xCE,
- 0x20, 0x88, 0xE4, 0xE4, 0xE4, 0xE4, 0xF8, 0x10,
- 0xC1, 0x04, 0x48, 0x62, 0x89, 0x05, 0xA0, 0xC0,
- 0x6C, 0x01, 0x08, 0xC8, 0x6C, 0x01, 0x03, 0x02,
- 0x00, 0xFC, 0x04, 0x02, 0x00, 0x02, 0x73, 0xA0,
- 0x04, 0x06, 0xFD, 0x16, 0x88, 0x05, 0x09, 0x06,
- 0xF4, 0x16, 0x02, 0xC8, 0x6C, 0x01, 0x81, 0x86,
- 0x02, 0x16, 0xD0, 0x03, 0xCB, 0x05, 0x5B, 0x04,
- 0x43, 0x28, 0x31, 0x29, 0x38, 0x39, 0x2D, 0x33,
- 0x38, 0x38, 0x42, 0x20, 0x20, 0x59, 0x49, 0x54,
- 0x4B, 0xC2, 0xA8, 0x02, 0x98, 0x00, 0x83, 0x07,
- 0x02, 0x00, 0x28, 0x02, 0x08, 0x00, 0x23, 0xC6,
- 0x36, 0xE5, 0x48, 0x06, 0xC4, 0xC0, 0x73, 0x0A,
- 0x65, 0x17, 0xA0, 0x06, 0xAA, 0xED, 0xC8, 0xC1,
- 0xC7, 0x05, 0x03, 0x02, 0xA5, 0x00, 0xB0, 0x03,
- 0xF8, 0xCD, 0xF8, 0xCD, 0xA6, 0x02, 0x06, 0x62,
- 0x88, 0x02, 0x0A, 0x00, 0x57, 0x16, 0x03, 0x29,
- 0x55, 0x16, 0x05, 0x29, 0xC4, 0x80, 0x52, 0x16,
- 0x15, 0x09, 0x50, 0x17, 0x15, 0x09, 0x4E, 0x18,
- 0x85, 0x02, 0x29, 0x00, 0x4B, 0x16, 0xC6, 0x05,
- 0x96, 0x00, 0x03, 0x07, 0xC4, 0x04, 0x45, 0x06,
- 0x95, 0x00, 0x44, 0x05, 0x43, 0x16, 0x44, 0x81,
- 0x41, 0x16, 0x00, 0x03, 0x05, 0x00, 0xC4, 0x02,
- 0x00, 0x03, 0x0A, 0x00, 0x44, 0x02, 0x0F, 0x00,
- 0x84, 0x02, 0x05, 0x00, 0x37, 0x16, 0xC4, 0x02,
- 0x00, 0x03, 0x0F, 0x00, 0x44, 0x02, 0x0F, 0x00,
- 0x84, 0x02, 0x0A, 0x00, 0x2F, 0x16, 0x04, 0x02,
- 0xFE, 0xFF, 0x2C, 0x13, 0x2B, 0x15, 0x2A, 0x1A,
- 0x84, 0x05, 0x28, 0x12, 0x27, 0x15, 0x26, 0x1A,
- 0x25, 0x18, 0x84, 0x05, 0x23, 0x16, 0x22, 0x1B,
- 0x21, 0x17, 0x84, 0x05, 0x1F, 0x13, 0x1E, 0x1A,
- 0x1D, 0x11, 0x04, 0x06, 0x1B, 0x16, 0xA5, 0x02,
- 0xC5, 0xC1, 0x25, 0x02, 0x06, 0x00, 0x03, 0x02,
- 0xA5, 0xA5, 0x83, 0xC1, 0x95, 0x00, 0x03, 0x38,
- 0x94, 0x00, 0x83, 0x02, 0x2E, 0x6B, 0x0E, 0x16,
- 0x84, 0x02, 0x59, 0x1C, 0x0B, 0x16, 0x24, 0x02,
- 0x69, 0x00, 0x95, 0x00, 0x03, 0x3C, 0x94, 0x00,
- 0x83, 0x81, 0x04, 0x16, 0x84, 0x02, 0x69, 0x00,
- 0x01, 0x16, 0xC9, 0x05, 0x59, 0x04, 0xC3, 0xD0,
- 0xFD, 0x13, 0x01, 0x1C, 0xFB, 0x10, 0xE0, 0x90,
- 0x3D, 0xE5, 0xF8, 0x16, 0xC3, 0x06, 0xC3, 0xD0,
- 0xF5, 0x1C, 0xF4, 0x16, 0xE0, 0x90, 0x3A, 0xE5,
- 0xF1, 0x16, 0x5B, 0x04, 0x0B, 0xC3, 0x09, 0x02,
- 0x3E, 0xE5, 0xA0, 0x06, 0x92, 0xE9, 0xCC, 0x05,
- 0x5C, 0x04, 0x88, 0x07, 0x00, 0xA0, 0x89, 0x07,
- 0xFE, 0xFF, 0xA8, 0x09, 0xA9, 0x09, 0x8A, 0x07,
- 0x02, 0xE0, 0xA0, 0x06, 0x84, 0xEC, 0x00, 0x00,
- 0x88, 0x07, 0x00, 0x90, 0x89, 0x07, 0xFE, 0x9F,
- 0xA8, 0x09, 0xA9, 0x09, 0x8A, 0x07, 0x78, 0xE0,
- 0xA0, 0x06, 0x84, 0xEC, 0x00, 0x00, 0xA0, 0x06,
- 0xC4, 0xEC, 0x00, 0x00, 0xE6, 0x10, 0xE5, 0x10,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
- 0x00, 0x08, 0x11, 0xE3, 0x6C, 0xCC, 0x00, 0x80,
- 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08,
- 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00,
- 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00,
- 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0xFF,
- 0xFF, 0x00, 0xF0, 0xFF, 0x00, 0xF0, 0x0F, 0x00,
- 0xFF, 0xFF, 0xFF, 0x7F, 0x03, 0x00, 0x00, 0x00,
- 0xC3, 0x00, 0xE7, 0xE7, 0xF3, 0xE7, 0xF1, 0xF1,
- 0x43, 0x28, 0x20, 0x29, 0x4F, 0x43, 0x59, 0x50,
- 0x49, 0x52, 0x48, 0x47, 0x20, 0x54, 0x42, 0x49,
- 0x20, 0x4D, 0x39, 0x31, 0x33, 0x38, 0x34, 0x2C,
- 0x35, 0x2C, 0x36, 0x2C, 0x43, 0x28, 0x20, 0x29,
- 0x4F, 0x43, 0x59, 0x50, 0x49, 0x52, 0x48, 0x47,
- 0x20, 0x54, 0x49, 0x54, 0x31, 0x20, 0x38, 0x39,
- 0x2D, 0x33, 0x39, 0x38, 0x39, 0x2C, 0x2D, 0x30,
- 0x38, 0x39, 0x00, 0x00, 0x61, 0x9B, 0xC4, 0xEC,
- 0x0E, 0xEA, 0xDE, 0xE5, 0xC8, 0xED, 0x00, 0x00,
- 0xC4, 0x00, 0xB8, 0xAF, 0x4A, 0x06, 0x50, 0x06,
- 0x4C, 0x06, 0xDC, 0xCC, 0x4E, 0x06, 0x0F, 0x00,
- 0x32, 0x06, 0x01, 0x00, 0x50, 0x07, 0x58, 0x07,
- 0x52, 0x07, 0x70, 0xB5, 0x54, 0x07, 0x0F, 0x00,
- 0x38, 0x07, 0x01, 0x00, 0xBA, 0x00, 0xA0, 0x00,
- 0xBC, 0x00, 0xD6, 0xED, 0xBE, 0x00, 0x0F, 0x00,
- 0x5E, 0x07, 0x3A, 0x07, 0x62, 0x07, 0x40, 0x80,
- 0x64, 0x07, 0x54, 0xBA, 0x66, 0x07, 0x36, 0xBA,
- 0x68, 0x07, 0x40, 0xB8, 0x98, 0x07, 0x00, 0x80,
- 0x78, 0x07, 0x00, 0x80, 0xE2, 0x08, 0x04, 0x00,
- 0xE4, 0x08, 0x01, 0x00, 0xEC, 0x08, 0x08, 0x00,
- 0xF6, 0x08, 0x0A, 0x00, 0xF8, 0x08, 0x06, 0x00,
- 0x00, 0x09, 0x0C, 0x00, 0x02, 0x09, 0x04, 0x00,
- 0xAE, 0x01, 0x00, 0x00, 0x1E, 0x09, 0x00, 0x00,
- 0x66, 0x09, 0x00, 0x00, 0x0C, 0x06, 0x13, 0x00,
- 0x0A, 0x06, 0x20, 0x00, 0x00, 0x00, 0xE0, 0x00,
- 0x86, 0xA3, 0xE0, 0x00, 0xE6, 0xA2, 0xE0, 0x00,
- 0x86, 0xA3, 0xE0, 0x00, 0x02, 0xA5, 0xE0, 0x00,
- 0x5E, 0xA6, 0xE0, 0x00, 0x66, 0xA9, 0xE0, 0x00,
- 0x12, 0xA4, 0xC0, 0x00, 0x22, 0xA4, 0xE0, 0x00,
- 0x86, 0xA3, 0xE0, 0x00, 0x86, 0xA3, 0xC0, 0x00,
- 0x74, 0xA4, 0xE0, 0x00, 0x86, 0xA3, 0xE0, 0x00,
- 0x86, 0xA3, 0xE0, 0x00, 0x86, 0xA3, 0xE0, 0x00,
- 0x86, 0xA3, 0xE0, 0x00, 0x86, 0xA3, 0xC0, 0x00,
- 0xDE, 0xAF, 0xC0, 0x00, 0x48, 0xB0, 0xC0, 0x00,
- 0x84, 0xB0, 0xC0, 0x00, 0xF4, 0xB0, 0xC0, 0x00,
- 0x76, 0xB1, 0xE0, 0x00, 0xE4, 0xB2, 0xE0, 0x00,
- 0x8A, 0xB2, 0xE0, 0x00, 0xF4, 0xB3, 0xE0, 0x00,
- 0x7C, 0xB3, 0xE0, 0x00, 0xC6, 0xAA, 0xC0, 0x00,
- 0x36, 0xAB, 0xC0, 0x00, 0x90, 0xAB, 0xC0, 0x00,
- 0xC2, 0xAB, 0xC0, 0x00, 0xEA, 0xAA, 0xC0, 0x00,
- 0x80, 0xA3, 0xC0, 0x00, 0x80, 0xA3, 0x00, 0x3F,
- 0x00, 0x7F, 0x00, 0x5E, 0x30, 0x00, 0x28, 0x00,
- 0x43, 0x00, 0xB6, 0xA6, 0xB6, 0xA6, 0x1C, 0xA5,
- 0x14, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x62, 0xA5,
- 0xB6, 0xA6, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20,
- 0x00, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08,
- 0x00, 0x80, 0x00, 0x08, 0x00, 0x01, 0x00, 0x10,
- 0x00, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x10, 0x00,
- 0x14, 0x00, 0x0E, 0x10, 0x0C, 0x0C, 0x0A, 0x0A,
- 0x0A, 0x0A, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
- 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
- 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
- 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
- 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
- 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
- 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
- 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x98, 0x07, 0x7E, 0xCA, 0x58, 0x07,
- 0xF8, 0xB8, 0x58, 0x07, 0xFE, 0xB7, 0x58, 0x07,
- 0x68, 0xB9, 0x58, 0x07, 0xD0, 0xB8, 0x98, 0x07,
- 0x5A, 0xC7, 0x98, 0x07, 0x52, 0xC7, 0x78, 0x07,
- 0xC2, 0xC1, 0x58, 0x07, 0x30, 0xB9, 0x98, 0x07,
- 0x38, 0xCA, 0x78, 0x07, 0x96, 0xC2, 0x58, 0x07,
- 0x6A, 0xC7, 0x58, 0x07, 0xE0, 0xB8, 0x58, 0x07,
- 0x1E, 0xB9, 0x58, 0x07, 0xE2, 0xB9, 0x98, 0x07,
- 0xAE, 0xCB, 0x98, 0x07, 0x8E, 0xC7, 0x78, 0x07,
- 0x56, 0xC2, 0xB8, 0x07, 0x14, 0xCC, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xA2, 0xBA, 0x16, 0xC1,
- 0xCA, 0xC1, 0xD6, 0xC6, 0x8A, 0xBD, 0xC2, 0xBD,
- 0xE0, 0xBD, 0x6A, 0xBE, 0x8E, 0xBE, 0xAA, 0xBE,
- 0x22, 0xBF, 0x22, 0xBF, 0x56, 0xBE, 0xC8, 0xBF,
- 0x10, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C,
- 0x00, 0x0C, 0x01, 0x0F, 0xFF, 0xFE, 0x00, 0x58,
- 0x00, 0x0E, 0xFF, 0xFE, 0x0E, 0x00, 0x00, 0x70,
- 0x40, 0x80, 0x00, 0x5E, 0xA0, 0xC0, 0xDF, 0xFF,
- 0x00, 0x18, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x50,
- 0x00, 0x60, 0x00, 0x70, 0x00, 0x0C, 0x06, 0x00,
- 0x00, 0x00, 0x84, 0xE3, 0xE6, 0x07, 0xF4, 0x07,
- 0x08, 0x00, 0x00, 0x00, 0x8A, 0xE3, 0xEA, 0x07,
- 0xF4, 0x07, 0x06, 0x00, 0x40, 0x00, 0x00, 0x0A,
- 0xE6, 0x07, 0xEE, 0x07, 0x08, 0x00, 0x40, 0x00,
- 0x06, 0x0A, 0xEA, 0x07, 0xEE, 0x07, 0x00, 0x00,
- 0xE2, 0xC1, 0x8B, 0xD4, 0xFF, 0xFF, 0xD7, 0xD1,
- 0xD9, 0xC5, 0xD4, 0xC3, 0x3B, 0x59, 0x34, 0x09,
- 0xFC, 0x05, 0x6C, 0x09, 0xD8, 0x06, 0x06, 0x04,
- 0xBA, 0xEA, 0x30, 0x09, 0x48, 0x04, 0x80, 0x08,
- 0x06, 0x00, 0x0A, 0x06, 0x0E, 0x0C, 0xBA, 0xCE,
- 0x2E, 0xE0, 0x56, 0xE0, 0x50, 0xE1, 0x66, 0xE2,
- 0xEC, 0xE2, 0x4C, 0xE3, 0xFE, 0xE3, 0xBA, 0xCE,
- 0x80, 0xE4, 0x10, 0xE4, 0x14, 0xE0, 0x1C, 0xE4,
- 0x1C, 0xE4, 0x46, 0xE5, 0x50, 0xE5, 0x5A, 0xE5,
- 0xBA, 0xCE, 0xA6, 0xDC, 0xBA, 0xCE, 0x44, 0xDA,
- 0xE6, 0xDF, 0x70, 0xDA, 0xDE, 0xDE, 0xB0, 0xCE,
- 0x16, 0xDB, 0x3A, 0xDD, 0xB8, 0xDD, 0x34, 0xDE,
- 0x58, 0xDE, 0x16, 0xDB, 0xDA, 0xDC, 0x08, 0xCF,
- 0xB0, 0xCE, 0xA8, 0xD9, 0x8A, 0xD9, 0x44, 0xD9,
- 0xB0, 0xCE, 0xEA, 0xDE, 0xB0, 0xCE, 0x72, 0x06,
- 0xF6, 0xD2, 0x08, 0x07, 0x72, 0x06, 0x54, 0xD2,
- 0xF4, 0x01, 0x72, 0x06, 0x34, 0xD2, 0x08, 0x07,
- 0x7C, 0x06, 0x5A, 0xDC, 0x04, 0x00, 0x7C, 0x06,
- 0x78, 0xD2, 0x00, 0x00, 0x7C, 0x06, 0xCC, 0xDE,
- 0xFA, 0x00, 0x86, 0x06, 0xAC, 0xD1, 0x05, 0x00,
- 0x90, 0x06, 0x1C, 0xDF, 0x28, 0x00, 0x90, 0x06,
- 0x50, 0xD3, 0x04, 0x01, 0x90, 0x06, 0x00, 0x00,
- 0x02, 0x00, 0x90, 0x06, 0x80, 0xD2, 0xBC, 0x02,
- 0x9A, 0x06, 0x06, 0xD3, 0xDC, 0x05, 0x9A, 0x06,
- 0xAA, 0xD2, 0x64, 0x00, 0x9A, 0x06, 0x0A, 0xD3,
- 0x14, 0x00, 0x9A, 0x06, 0xE2, 0xE0, 0x40, 0x06,
- 0x9A, 0x06, 0x12, 0xD3, 0x64, 0x00, 0x7C, 0x06,
- 0x16, 0xDC, 0x04, 0x00, 0x7C, 0x06, 0xE6, 0xDA,
- 0x16, 0x00, 0x7C, 0x06, 0xFA, 0xDB, 0x05, 0x00,
- 0x7C, 0x06, 0x00, 0xDD, 0x14, 0x00, 0x9A, 0x06,
- 0x7C, 0xD3, 0x14, 0x00, 0x9A, 0x06, 0x38, 0xD4,
- 0x02, 0x00, 0x7C, 0x06, 0x0C, 0xE0, 0x19, 0x00,
- 0x00, 0x00, 0x0A, 0x07, 0x0E, 0x07, 0x04, 0x07,
- 0xD8, 0x06, 0x00, 0x07, 0xF0, 0x06, 0xEE, 0x06,
- 0xEC, 0x06, 0x0C, 0x07, 0xE6, 0x06, 0x18, 0x07,
- 0x92, 0x09, 0x94, 0x09, 0x96, 0x09, 0x98, 0x09,
- 0x00, 0x50, 0xCC, 0x00, 0x03, 0x00, 0x00, 0x84,
- 0x00, 0xA8, 0x00, 0xA0, 0x00, 0x20, 0x00, 0x80,
- 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, 0x80,
- 0x00, 0x40, 0x00, 0x10, 0x82, 0xEC, 0x48, 0xEB,
- 0x62, 0xEB, 0x7C, 0xEB, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, 0xEA, 0xEB,
- 0x52, 0xEB, 0x68, 0xEB, 0x82, 0xEB, 0x40, 0x01,
- 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x00, 0x00,
- 0x7F, 0x00, 0xA0, 0x00, 0xFF, 0x00, 0x10, 0x02,
- 0x1F, 0x02, 0x30, 0x02, 0x3F, 0x02, 0x50, 0x02,
- 0x5F, 0x02, 0x70, 0x02, 0x7F, 0x02, 0x90, 0x02,
- 0x9F, 0x02, 0xB0, 0x02, 0xBF, 0x02, 0xD0, 0x02,
- 0xDF, 0x02, 0xE1, 0x02, 0xFF, 0x02, 0x01, 0x03,
- 0x7F, 0x03, 0x81, 0x03, 0x8F, 0x03, 0x91, 0x03,
- 0x9F, 0x03, 0xA1, 0x03, 0xAF, 0x03, 0xB1, 0x03,
- 0xBF, 0x03, 0xC1, 0x03, 0xCF, 0x03, 0xE1, 0x03,
- 0xFF, 0x03, 0xC0, 0x07, 0xFF, 0x07, 0x00, 0x0C,
- 0xFF, 0x0F, 0x00, 0x30, 0xFF, 0x37, 0xFF, 0xFF,
- 0xFF, 0xFF, 0xBC, 0xFE, 0x07, 0x00, 0x5E, 0x02,
- 0x00, 0x01, 0xFF, 0xBA, 0x80, 0xBA, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x0A, 0x01,
- 0x0E, 0x01, 0x10, 0x01, 0x14, 0x01, 0x00, 0x00,
- 0x12, 0x01, 0x00, 0xF8, 0x16, 0x01, 0x00, 0xFF,
- 0x00, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x1C, 0x01,
- 0x82, 0x01, 0x66, 0x96, 0x66, 0x96, 0x55, 0x55,
- 0x00, 0x00, 0x82, 0x01, 0x2A, 0x8A, 0x2A, 0x8A,
- 0x18, 0xC9, 0x18, 0xC9, 0x86, 0x01, 0xAA, 0xA2,
- 0x1E, 0xA0, 0x55, 0x55, 0x1E, 0x54, 0x8A, 0x01,
- 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00,
- 0x8C, 0x01, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8,
- 0x00, 0x00, 0x8E, 0x01, 0x00, 0x50, 0x00, 0x00,
- 0x00, 0xA8, 0x00, 0x00, 0x90, 0x01, 0x00, 0x50,
- 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x92, 0x01,
- 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00,
- 0x94, 0x01, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8,
- 0x00, 0x00, 0x96, 0x01, 0x00, 0x50, 0x00, 0x00,
- 0x00, 0xA8, 0x00, 0x00, 0x98, 0x01, 0x00, 0x50,
- 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x9A, 0x01,
- 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00,
- 0x9C, 0x01, 0x55, 0x55, 0xC0, 0x7F, 0xAA, 0xAA,
- 0xC0, 0x7F, 0x00, 0x00, 0xA2, 0x01, 0xA4, 0x01,
- 0xA8, 0x01, 0xAA, 0x01, 0xAE, 0x01, 0xB0, 0x01,
- 0xB2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x88, 0x01,
- 0x00, 0xFF, 0x9E, 0x01, 0xFF, 0x00, 0xA0, 0x01,
- 0x00, 0x80, 0xAC, 0x01, 0x00, 0x80, 0x00, 0x00,
- 0xA6, 0x01, 0x00, 0x80, 0x00, 0x00, 0x80, 0x01,
- 0xBC, 0x01, 0x00, 0x88, 0x00, 0x06, 0x00, 0xC8,
- 0x00, 0x00, 0x00, 0x80, 0x30, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x02, 0x00, 0x44, 0x00, 0x92, 0xEA,
- 0x48, 0x00, 0x98, 0xEA, 0x50, 0x00, 0x9E, 0xEA,
- 0x60, 0x00, 0xA4, 0xEA, 0x78, 0x00, 0xAA, 0xEA,
- 0x0A, 0xE8, 0x18, 0xE7, 0x3C, 0xEA, 0x2A, 0xE7,
- 0x14, 0x55, 0xA0, 0x01, 0xEC, 0xE6, 0xD0, 0xE9,
- 0x46, 0xE7, 0xA0, 0xE7, 0x00, 0xE7, 0x58, 0xE8,
- 0x00, 0x00, 0x1E, 0x00, 0x46, 0xE7, 0x92, 0xE7,
- 0x00, 0x41, 0x01, 0x41, 0xB6, 0xE7, 0x73, 0xEA,
- 0x18, 0xE7, 0x48, 0xEA, 0xEC, 0xE6, 0x04, 0xEA,
- 0x56, 0xE7, 0x62, 0xE7, 0xB6, 0xE7, 0x6E, 0xEA,
- 0x62, 0xE8, 0x00, 0x00, 0x36, 0xE8, 0xEC, 0xE6,
- 0xFA, 0xE9, 0x56, 0xE7, 0x62, 0xE7, 0x36, 0xE8,
- 0x62, 0xE8, 0x00, 0x00, 0xEC, 0xE6, 0xF0, 0xE9,
- 0x0C, 0xE7, 0x4A, 0xE7, 0x62, 0xE7, 0x36, 0xE8,
- 0xEC, 0xE6, 0xFA, 0xE9, 0x56, 0xE7, 0x62, 0xE7,
- 0x36, 0xE8, 0x62, 0xE8, 0x00, 0x20, 0x2A, 0xE7,
- 0x14, 0x55, 0xA0, 0x01, 0x18, 0xE7, 0x50, 0xEA,
- 0xEC, 0xE6, 0xD0, 0xE9, 0x58, 0xE8, 0x50, 0x55,
- 0x0C, 0x00, 0x46, 0xE7, 0x92, 0xE7, 0x00, 0x01,
- 0x00, 0x00, 0xB6, 0xE7, 0x75, 0xEA, 0x00, 0xE7,
- 0x58, 0xE8, 0x55, 0x55, 0x0C, 0x00, 0x56, 0xE7,
- 0xA0, 0xE7, 0x00, 0xE7, 0x58, 0xE8, 0xFF, 0xFF,
- 0x08, 0x00, 0x58, 0xE8, 0x02, 0x10, 0x06, 0x00,
- 0x46, 0xE7, 0x92, 0xE7, 0x00, 0x01, 0x01, 0x01,
- 0xB6, 0xE7, 0x80, 0xEA, 0x00, 0xE7, 0x58, 0xE8,
- 0x00, 0xC0, 0x08, 0x00, 0x58, 0xE8, 0xFF, 0xFF,
- 0x0A, 0x00, 0x58, 0xE8, 0xFF, 0xFF, 0x0C, 0x00,
- 0x58, 0xE8, 0x0D, 0x10, 0x06, 0x00, 0x46, 0xE7,
- 0x92, 0xE7, 0x00, 0x01, 0x01, 0x01, 0xB6, 0xE7,
- 0x74, 0xEA, 0x62, 0xE8, 0x08, 0x20, 0x00, 0xE7,
- 0x52, 0xE8, 0x82, 0x01, 0x02, 0xC9, 0x46, 0xE7,
- 0xB6, 0xE7, 0x80, 0xEA, 0x62, 0xE8, 0x34, 0x20,
- 0x00, 0xE7, 0x58, 0xE8, 0x00, 0x10, 0x06, 0x00,
- 0x46, 0xE7, 0xC6, 0xE8, 0xB6, 0xE7, 0x78, 0xEA,
- 0x52, 0xE8, 0x9C, 0x01, 0x40, 0x00, 0x18, 0xE7,
- 0x50, 0xEA, 0x2A, 0xE7, 0xFF, 0x00, 0x80, 0x07,
- 0x26, 0xE9, 0x03, 0x00, 0x66, 0xE9, 0x74, 0xE9,
- 0x12, 0xEA, 0x38, 0xE9, 0x00, 0x00, 0x74, 0xE9,
- 0x1C, 0xEA, 0x38, 0xE9, 0x04, 0x00, 0x74, 0xE9,
- 0x24, 0xEA, 0x38, 0xE9, 0x07, 0x00, 0x74, 0xE9,
- 0x2C, 0xEA, 0x26, 0xE9, 0x01, 0x00, 0x74, 0xE9,
- 0x34, 0xEA, 0x38, 0xE9, 0x02, 0x00, 0x74, 0xE9,
- 0x34, 0xEA, 0x38, 0xE9, 0x06, 0x00, 0x74, 0xE9,
- 0x34, 0xEA, 0x38, 0xE9, 0x05, 0x00, 0x74, 0xE9,
- 0x34, 0xEA, 0x26, 0xE9, 0x01, 0x00, 0x4A, 0xE9,
- 0x26, 0xE9, 0x03, 0x00, 0x58, 0xE9, 0x62, 0xE7,
- 0xE6, 0xE8, 0xD8, 0xE9, 0x01, 0x00, 0xE6, 0xE8,
- 0x25, 0xEA, 0x02, 0x00, 0xE6, 0xE8, 0x2F, 0xEA,
- 0x06, 0x00, 0xE6, 0xE8, 0x3A, 0xEA, 0x05, 0x00,
- 0xB6, 0xE7, 0x74, 0xEA, 0x36, 0xE8, 0xEC, 0xE6,
- 0xD0, 0xE9, 0x56, 0xE7, 0xC6, 0xE8, 0x0C, 0xE7,
- 0x92, 0xE7, 0x00, 0x01, 0x00, 0x80, 0xB6, 0xE7,
- 0x78, 0xEA, 0x00, 0xE7, 0xFE, 0xE8, 0x52, 0xE8,
- 0x80, 0x01, 0x41, 0x8E, 0x4A, 0xE7, 0x92, 0xE7,
- 0x00, 0x01, 0x01, 0x1B, 0x06, 0xE9, 0xE4, 0xFF,
- 0xB6, 0xE7, 0x7C, 0xEA, 0xBE, 0xE8, 0x18, 0xE7,
- 0x56, 0xEA, 0x0C, 0xE7, 0x6A, 0xE8, 0x3C, 0xE7,
- 0x00, 0xE0, 0xC6, 0xE8, 0xB6, 0xE7, 0x86, 0xEA,
- 0x3C, 0xE7, 0x00, 0xE8, 0x62, 0xE7, 0xB6, 0xE7,
- 0x85, 0xEA, 0x3C, 0xE7, 0x00, 0x08, 0xC6, 0xE8,
- 0xB6, 0xE7, 0x86, 0xEA, 0x3C, 0xE7, 0x00, 0xF8,
- 0x62, 0xE7, 0xB6, 0xE7, 0x85, 0xEA, 0x52, 0xE8,
- 0x80, 0x01, 0x00, 0x02, 0x3C, 0xE7, 0x00, 0xE0,
- 0x62, 0xE7, 0xB6, 0xE7, 0x85, 0xEA, 0x52, 0xE8,
- 0x84, 0x01, 0x00, 0x00, 0x62, 0xE8, 0x34, 0x00,
- 0x3C, 0xE7, 0x00, 0x00, 0xC6, 0xE8, 0x62, 0xE8,
- 0x34, 0x60, 0x0E, 0xE9, 0x52, 0xE8, 0x84, 0x01,
- 0x00, 0x00, 0xB6, 0xE7, 0x86, 0xEA, 0x52, 0xE8,
- 0x82, 0x01, 0x00, 0xC8, 0x3C, 0xE7, 0x00, 0xE0,
- 0xC6, 0xE8, 0x3C, 0xE7, 0x00, 0x10, 0xC6, 0xE8,
- 0x62, 0xE8, 0x34, 0x60, 0x52, 0xE8, 0x80, 0x01,
- 0x00, 0x06, 0x3C, 0xE7, 0x10, 0x00, 0x78, 0xE8,
- 0x36, 0xE8, 0x52, 0xE8, 0x84, 0x01, 0x00, 0x00,
- 0x62, 0xE8, 0x34, 0x00, 0xEC, 0xE6, 0xD0, 0xE9,
- 0x18, 0xE7, 0x5C, 0xEA, 0xD0, 0xE8, 0x92, 0xE9,
- 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0xF0,
- 0x06, 0x00, 0x00, 0xC7, 0xA0, 0xE7, 0xDC, 0xE8,
- 0x00, 0xE0, 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7,
- 0x40, 0xD0, 0x06, 0x00, 0x00, 0xE0, 0xA0, 0xE7,
- 0xDC, 0xE8, 0x00, 0xC0, 0x00, 0xE7, 0x0C, 0xE7,
- 0x70, 0xE7, 0x40, 0x90, 0x06, 0x00, 0x00, 0xA0,
- 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x80, 0x00, 0xE7,
- 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x50, 0x06, 0x00,
- 0x00, 0x60, 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x40,
- 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x10,
- 0x06, 0x00, 0x00, 0x20, 0xA0, 0xE7, 0xDC, 0xE8,
- 0x00, 0x00, 0xD0, 0xE8, 0x92, 0xE9, 0x00, 0xE7,
- 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0xD0, 0x06, 0x00,
- 0x00, 0xA6, 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0xC0,
- 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x90,
- 0x06, 0x00, 0x00, 0xC0, 0xA0, 0xE7, 0xDC, 0xE8,
- 0x00, 0x80, 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7,
- 0x40, 0x50, 0x06, 0x00, 0x00, 0x40, 0xA0, 0xE7,
- 0xDC, 0xE8, 0x00, 0x40, 0x00, 0xE7, 0x0C, 0xE7,
- 0x70, 0xE7, 0x40, 0x70, 0x06, 0x00, 0x00, 0x60,
- 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x60, 0x7E, 0xE9,
- 0x90, 0xE9, 0x18, 0xE7, 0x62, 0xEA, 0xEC, 0xE6,
- 0xD0, 0xE9, 0xA4, 0xE8, 0x55, 0x55, 0x16, 0x00,
- 0x46, 0xE7, 0x92, 0xE7, 0x00, 0x00, 0x00, 0x00,
- 0xB6, 0xE7, 0x8B, 0xEA, 0x0A, 0xE8, 0x18, 0xE7,
- 0x62, 0xEA, 0x58, 0xE8, 0x55, 0x55, 0x16, 0x00,
- 0x00, 0xE7, 0x46, 0xE7, 0xA0, 0xE7, 0x2A, 0xE7,
- 0xFF, 0x00, 0x00, 0x08, 0x2A, 0xE7, 0xFF, 0x00,
- 0x00, 0x0C, 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x10,
- 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x14, 0x2A, 0xE7,
- 0xFF, 0x00, 0x00, 0x18, 0x2A, 0xE7, 0xFF, 0x00,
- 0x00, 0x1C, 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x20,
- 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x24, 0x2A, 0xE7,
- 0xFF, 0x00, 0x00, 0x28, 0x2A, 0xE7, 0xFF, 0x00,
- 0x00, 0x2C, 0xD2, 0xE7, 0x00, 0xE7, 0x0C, 0xE7,
- 0x70, 0xE7, 0x40, 0x30, 0x06, 0x00, 0x00, 0x01,
- 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x20, 0x00, 0xE7,
- 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x70, 0x06, 0x00,
- 0x00, 0x43, 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x60,
- 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0xB0,
- 0x06, 0x00, 0x00, 0x85, 0xA0, 0xE7, 0xDC, 0xE8,
- 0x00, 0xA0, 0xD8, 0xE8, 0x00, 0x01, 0x03, 0x01,
- 0x01, 0x01, 0x00, 0x00, 0x00, 0x81, 0x1A, 0x00,
- 0x40, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
- 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x72, 0x82,
- 0x4A, 0xA9, 0xA5, 0x5A, 0xDA, 0xE7, 0x03, 0x09,
- 0x11, 0x9D, 0x00, 0x00, 0x00, 0x81, 0x04, 0x00,
- 0xD8, 0x90, 0x00, 0x10, 0x00, 0x00, 0x00, 0x81,
- 0x04, 0x00, 0xD8, 0x90, 0xD8, 0xB4, 0x00, 0x00,
- 0x00, 0x81, 0x08, 0x00, 0xD8, 0x90, 0x46, 0x16,
- 0x00, 0x40, 0xD8, 0xB4, 0x08, 0x00, 0x00, 0x00,
- 0x00, 0x80, 0x13, 0x00, 0x40, 0x10, 0x16, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x15, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x15, 0x00,
- 0x00, 0x00, 0x00, 0x81, 0x0F, 0x00, 0x06, 0x00,
- 0x00, 0x00, 0x00, 0x80, 0x12, 0x00, 0x0A, 0x80,
- 0x40, 0x9E, 0x00, 0xC8, 0x00, 0x00, 0x5E, 0x80,
- 0x0F, 0x00, 0x06, 0x80, 0x40, 0xFE, 0x00, 0xCC,
- 0x00, 0x00, 0x04, 0x80, 0x40, 0x8E, 0x00, 0xC9,
- 0x04, 0x80, 0x00, 0x06, 0x00, 0xCC, 0x04, 0x80,
- 0x40, 0x0A, 0x00, 0xC8, 0x0A, 0x80, 0x40, 0x8A,
- 0x00, 0xC8, 0x00, 0x00, 0x5E, 0x80, 0x0F, 0x00,
- 0x0A, 0x08, 0x80, 0x1C, 0x0A, 0x00, 0x1C, 0x1A,
- 0x00, 0x80, 0x1C, 0x0C, 0x00, 0x80, 0x1C, 0x1A,
- 0x00, 0x80, 0x1A, 0x0E, 0x80, 0x1C, 0x04, 0x00,
- 0x00, 0x80, 0x80, 0x02, 0x02, 0x00, 0x00, 0x80,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x80,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
- 0x40, 0x00, 0x00, 0x00, 0x58, 0x07, 0x0C, 0xB8,
- 0x16, 0xE0, 0xE2, 0x08, 0xEC, 0x08, 0xF6, 0x08,
- 0x16, 0xE0, 0x00, 0x09, 0x0A, 0x09, 0x00, 0x00,
- 0x00, 0x00, 0xE2, 0x08, 0x00, 0x00, 0xEC, 0x08,
- 0xF6, 0x08, 0x00, 0x09, 0x00, 0x00, 0xB8, 0x07,
- 0xCA, 0xCB, 0x80, 0x02, 0xB8, 0x07, 0xE8, 0xCB,
- 0x84, 0xFF, 0xB8, 0x07, 0x0A, 0xCC, 0xB8, 0x07,
- 0x84, 0xCC, 0x6E, 0xCD, 0x62, 0xCD, 0x88, 0xCD,
- 0x90, 0xCE, 0x84, 0xCD, 0x92, 0xCE, 0x92, 0xCE,
- 0x92, 0xCE, 0x8C, 0xCD, 0x96, 0xCD, 0x38, 0xCE,
- 0x82, 0xCE, 0x92, 0xCE, 0x92, 0xCE, 0x92, 0xCE,
- 0x92, 0xCE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x08, 0x00, 0x08, 0x01, 0x05, 0x08,
- 0x08, 0x08, 0x03, 0x08, 0x03, 0x03, 0x03, 0x03,
- 0x00, 0x00, 0x04, 0x02, 0x04, 0x04, 0x00, 0x04,
- 0x0A, 0x08, 0x00, 0x00, 0x10, 0x0C, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x18, 0x00, 0x1A, 0x00, 0x00,
- 0x04, 0x41, 0x06, 0x0B, 0x08, 0xC2, 0x00, 0xE6,
- 0x00, 0xE7, 0x04, 0x06, 0x04, 0x07, 0x04, 0x03,
- 0x06, 0x04, 0x04, 0x05, 0x04, 0x88, 0x04, 0xCF,
- 0x04, 0xCD, 0x03, 0x00, 0x05, 0x00, 0x1C, 0x00,
- 0x00, 0x0C, 0x00, 0x80, 0xD2, 0xD8, 0xDA, 0xD8,
- 0x1E, 0xD9, 0xDE, 0xD8, 0xEA, 0xD8, 0xF0, 0xD8,
- 0x14, 0xD9, 0xE4, 0xD8, 0x32, 0xD9, 0x00, 0x06,
- 0x00, 0x00, 0x03, 0x07, 0x0A, 0x0E, 0x0F, 0x14,
- 0x26, 0x2A, 0x52, 0x42, 0x50, 0x48, 0x5D, 0x4D,
- 0x62, 0x62, 0x6D, 0x57, 0x46, 0x39, 0x1A, 0x1D,
- 0x7C, 0x76, 0x1F, 0x23, 0x15, 0x1D, 0x74, 0x6F,
- 0x84, 0x7C, 0x8B, 0x82, 0x92, 0x89, 0x00, 0x00,
- 0x32, 0x2F, 0x3F, 0x34, 0x32, 0x01, 0x01, 0x57,
- 0x32, 0x11, 0x81, 0x51, 0x02, 0x56, 0x03, 0x55,
- 0x54, 0x11, 0x56, 0x81, 0x55, 0x02, 0x54, 0x02,
- 0x56, 0x81, 0x01, 0x76, 0x02, 0x34, 0x02, 0x55,
- 0x81, 0x54, 0x02, 0x58, 0x02, 0x55, 0x81, 0x54,
- 0x02, 0x58, 0x11, 0x12, 0x02, 0x52, 0x58, 0x83,
- 0x52, 0x05, 0x83, 0x04, 0x02, 0x58, 0x08, 0x55,
- 0x58, 0x83, 0x55, 0x02, 0x81, 0x02, 0x05, 0x58,
- 0x03, 0x52, 0x5C, 0x15, 0x53, 0x5B, 0x52, 0x87,
- 0x11, 0x03, 0x41, 0x51, 0x78, 0x51, 0x34, 0x11,
- 0x81, 0x11, 0x20, 0x31, 0x54, 0x57, 0x01, 0x53,
- 0x5A, 0x12, 0x81, 0x51, 0x20, 0x31, 0x5B, 0x57,
- 0x01, 0x5A, 0x01, 0x11, 0x51, 0x11, 0x31, 0x81,
- 0x57, 0x20, 0x15, 0x01, 0x13, 0x01, 0x11, 0x01,
- 0x11, 0x11, 0x81, 0x51, 0x05, 0x58, 0x02, 0x52,
- 0x5B, 0x54, 0x5D, 0x81, 0x52, 0x05, 0x54, 0x02,
- 0x58, 0x81, 0x50, 0x02, 0x13, 0x03, 0x58, 0x81,
- 0x50, 0x02, 0x11, 0x03, 0x81, 0x54, 0x72, 0x5D,
- 0x50, 0x03, 0x13, 0x03, 0x13, 0x01, 0x40, 0x54,
- 0x0E, 0x00, 0x20, 0x06, 0x56, 0x06, 0x0C, 0xDA,
- 0x24, 0x00, 0x02, 0x10, 0x16, 0x00, 0x02, 0x00,
- 0x01, 0x04, 0x08, 0x07, 0x0C, 0xDA, 0x20, 0x00,
- 0x03, 0x10, 0x12, 0x00, 0x03, 0x00, 0x4E, 0xD9,
- 0x14, 0x8E, 0x20, 0x00, 0x04, 0x10, 0x12, 0x00,
- 0x04, 0x00, 0xD2, 0xCE, 0x20, 0x00, 0x05, 0xE0,
- 0x12, 0x00, 0x05, 0x00, 0xD2, 0xCE, 0x20, 0x00,
- 0x06, 0xE0, 0x12, 0x00, 0x06, 0x00, 0xE8, 0xDD,
- 0x12, 0x00, 0x01, 0xE0, 0x6C, 0x09, 0xCC, 0x06,
- 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x30, 0x06,
- 0x42, 0xDC, 0xF0, 0x05, 0x00, 0xE0, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xE2, 0x05, 0x08, 0x00,
- 0x26, 0xFF, 0xDC, 0x05, 0x00, 0x00, 0x30, 0x06,
- 0xF8, 0xDB, 0x1E, 0x00, 0x01, 0xE0, 0x10, 0x00,
- 0x11, 0x30, 0x0C, 0x04, 0x01, 0x00, 0x0E, 0x04,
- 0x02, 0x00, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00,
- 0x30, 0x06, 0x32, 0xDD, 0x12, 0x00, 0x01, 0xE0,
- 0x04, 0x00, 0x13, 0x30, 0x74, 0xDE, 0x3E, 0x00,
- 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00, 0x02, 0x00,
- 0x30, 0x00, 0x20, 0x50, 0x23, 0x0C, 0xFC, 0x05,
- 0x52, 0x06, 0x56, 0x06, 0x00, 0x00, 0x00, 0x81,
- 0x16, 0x00, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00,
- 0x10, 0x00, 0x08, 0x00, 0x2A, 0x40, 0x2A, 0x04,
- 0x56, 0x06, 0x26, 0x00, 0x19, 0xED, 0x2B, 0x06,
- 0x72, 0x09, 0x22, 0x00, 0x24, 0x00, 0x2F, 0xED,
- 0x23, 0x0C, 0xFC, 0x05, 0x28, 0x08, 0x34, 0x09,
- 0x29, 0x08, 0x58, 0x07, 0x78, 0x07, 0x98, 0x07,
- 0x23, 0x00, 0x2A, 0x00, 0x3D, 0xED, 0x06, 0x04,
- 0xF0, 0x06, 0x07, 0x04, 0xEE, 0x06, 0x24, 0x00,
- 0xD2, 0xCE, 0x34, 0x00, 0x00, 0xE0, 0x00, 0xC0,
- 0x00, 0x00, 0x10, 0x00, 0x26, 0x00, 0x25, 0x40,
- 0xD2, 0xCE, 0x20, 0x00, 0x00, 0xE0, 0x00, 0xC0,
- 0x00, 0x00, 0x10, 0x00, 0x12, 0x00, 0x26, 0x40,
- 0xD2, 0xCE, 0x1A, 0x00, 0x00, 0xE0, 0x0C, 0x00,
- 0x27, 0x60, 0x0A, 0x08, 0xE6, 0x06, 0xD2, 0xCE,
- 0x24, 0x00, 0x00, 0xE0, 0x16, 0x00, 0x28, 0x60,
- 0x30, 0x04, 0x06, 0x07, 0x52, 0xCF, 0x00, 0x81,
- 0x30, 0x00, 0x00, 0xE0, 0x22, 0x00, 0x29, 0x60,
- 0x2D, 0x08, 0x1C, 0x07, 0x2E, 0x08, 0x22, 0x07,
- 0x00, 0x00, 0x08, 0x02, 0x06, 0x01, 0x14, 0x06,
- 0x18, 0x08, 0x20, 0x0C, 0x26, 0x0E, 0x30, 0x0F,
- 0x34, 0x11, 0x3E, 0x12, 0x42, 0x14, 0x46, 0x16,
- 0x1C, 0x0A, 0x4A, 0x18, 0x13, 0x03, 0x11, 0x83,
- 0x01, 0x11, 0x11, 0x81, 0x12, 0x81, 0x13, 0x01,
- 0x52, 0x83, 0x81, 0x85, 0x85, 0x11, 0x12, 0x81,
- 0x12, 0x81, 0x19, 0x81, 0x60, 0x85, 0x00, 0xC0,
- 0x00, 0x00, 0x08, 0x00, 0x6C, 0x09, 0x00, 0x00,
- 0x30, 0x06, 0x08, 0xE5, 0x54, 0x06, 0x50, 0x06,
- 0x38, 0x02, 0x21, 0x04, 0x1E, 0x09, 0x0B, 0x06,
- 0xD8, 0x06, 0x02, 0x08, 0xDC, 0x06, 0x00, 0xC0,
- 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0x00, 0x41, 0x00,
- 0x14, 0xAE, 0x00, 0x00, 0x00, 0x81, 0x09, 0x04,
- 0x0C, 0x07, 0x41, 0x00, 0x41, 0x00, 0x14, 0x02,
- 0x00, 0x00, 0x00, 0x81, 0x0B, 0x06, 0xD8, 0x06,
- 0x2C, 0x06, 0x76, 0x09, 0x22, 0x14, 0x3A, 0x09,
- 0x41, 0x00, 0x41, 0x00, 0x54, 0x02, 0x00, 0x00,
- 0x00, 0x81, 0xD8, 0x06, 0x00, 0x84, 0x00, 0x48,
- 0xFC, 0xFF, 0x09, 0x00, 0x00, 0xC0, 0x00, 0x00,
- 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00, 0xB8, 0xFF, 0x20, 0x00,
- 0x43, 0x28, 0x31, 0x29, 0x38, 0x39, 0x2D, 0x33,
- 0x39, 0x38, 0x39, 0x2C, 0x2D, 0x30, 0x38, 0x39,
- 0x54, 0x20, 0x78, 0x65, 0x73, 0x61, 0x49, 0x20,
- 0x73, 0x6E, 0x72, 0x74, 0x6D, 0x75, 0x6E, 0x65,
- 0x73, 0x74, 0x28, 0x0A, 0x29, 0x43, 0x39, 0x31,
- 0x33, 0x38, 0x34, 0x2C, 0x35, 0x2C, 0x36, 0x2C,
- 0x49, 0x20, 0x4D, 0x42, 0x43, 0x20, 0x72, 0x6F,
- 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x34, 0x90,
- 0x00, 0x00, 0xFA, 0xFF, 0x01, 0x00, 0xB8, 0xFF,
- 0x00, 0x00, 0xFC, 0xFF, 0x02, 0x00, 0x80, 0x00,
- 0x3E, 0xA0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
-};
-#endif /* CONFIG_SKTR */
diff --git a/drivers/net/tokenring/tms380tr.c b/drivers/net/tokenring/tms380tr.c
new file mode 100644
index 000000000..0a0da8840
--- /dev/null
+++ b/drivers/net/tokenring/tms380tr.c
@@ -0,0 +1,2749 @@
+/*
+ * tms380tr.c: A network driver for Texas Instruments TMS380-based
+ * Token Ring Adapters.
+ *
+ * Originally sktr.c: Written 1997 by Christoph Goos
+ *
+ * A fine result of the Linux Systems Network Architecture Project.
+ * http://www.linux-sna.org
+ *
+ * This software may be used and distributed according to the terms
+ * of the GNU Public License, incorporated herein by reference.
+ *
+ * This device driver works with the following TMS380 adapters:
+ * - SysKonnect TR4/16(+) ISA (SK-4190)
+ * - SysKonnect TR4/16(+) PCI (SK-4590)
+ * - SysKonnect TR4/16 PCI (SK-4591)
+ * - Compaq TR 4/16 PCI
+ * - Thomas-Conrad TC4048 4/16 PCI
+ * - Any ISA or PCI adapter using only the TMS380 chipset
+ *
+ * Sources:
+ * - The hardware related parts of this driver are take from
+ * the SysKonnect Token Ring driver for Windows NT.
+ * - I used the IBM Token Ring driver 'ibmtr.c' as a base for this
+ * driver, as well as the 'skeleton.c' driver by Donald Becker.
+ * - Also various other drivers in the linux source tree were taken
+ * as samples for some tasks.
+ * - TI TMS380 Second-Generation Token Ring User's Guide
+ * - TI datasheets for respective chips
+ * - David Hein at Texas Instruments
+ *
+ * Maintainer(s):
+ * JS Jay Schulist jschlst@samba.anu.edu.au
+ * CG Christoph Goos cgoos@syskonnect.de
+ * AF Adam Fritzler mid@auk.cx
+ *
+ * Modification History:
+ * 29-Aug-97 CG Created
+ * 04-Apr-98 CG Fixed problems caused by tok_timer_check
+ * 10-Apr-98 CG Fixed lockups at cable disconnection
+ * 27-May-98 JS Formated to Linux Kernel Format
+ * 31-May-98 JS Hacked in PCI support
+ * 16-Jun-98 JS Modulized for multiple cards with one driver
+ * Sep-99 AF Renamed to tms380tr (supports more than SK's)
+ * 23-Sep-99 AF Added Compaq and Thomas-Conrad PCI support
+ * Fixed a bug causing double copies on PCI
+ * Fixed for new multicast stuff (2.2/2.3)
+ * 25-Sep-99 AF Uped TPL_NUM from 3 to 9
+ * Removed extraneous 'No free TPL'
+ *
+ * To do:
+ * 1. Selectable 16 Mbps or 4Mbps
+ * 2. Multi/Broadcast packet handling (this may have fixed itself)
+ *
+ */
+
+static const char *version = "tms380tr.c: v1.03 29/09/1999 by Christoph Goos, Adam Fritzler\n";
+
+#ifdef MODULE
+#include <linux/module.h>
+#include <linux/version.h>
+#endif
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/types.h>
+#include <linux/fcntl.h>
+#include <linux/interrupt.h>
+#include <linux/ptrace.h>
+#include <linux/ioport.h>
+#include <linux/in.h>
+#include <linux/malloc.h>
+#include <linux/string.h>
+#include <linux/time.h>
+#include <asm/system.h>
+#include <asm/bitops.h>
+#include <asm/io.h>
+#include <asm/dma.h>
+#include <asm/irq.h>
+#include <linux/errno.h>
+#include <linux/init.h>
+#include <linux/pci.h>
+
+#include <linux/netdevice.h>
+#include <linux/etherdevice.h>
+#include <linux/skbuff.h>
+#include <linux/trdevice.h>
+
+#include "tms380tr.h" /* Our Stuff */
+#include "tms380tr_microcode.h" /* TI microcode for COMMprocessor */
+
+/* A zero-terminated list of I/O addresses to be probed. */
+static unsigned int tms380tr_portlist[] __initdata = {
+ 0x0A20, 0x1A20, 0x0B20, 0x1B20, 0x0980, 0x1980, 0x0900, 0x1900,
+ 0
+};
+
+/* A zero-terminated list of IRQs to be probed.
+ * Used again after initial probe for tms380tr_chipset_init, called from tms380tr_open.
+ */
+static unsigned short tms380tr_irqlist[] = {
+ 3, 5, 9, 10, 11, 12, 15,
+ 0
+};
+
+/* A zero-terminated list of DMAs to be probed. */
+static int tms380tr_dmalist[] __initdata = {
+ 5, 6, 7,
+ 0
+};
+
+/*
+ * Table used for card detection and type determination.
+ */
+struct cardinfo_table cardinfo[] = {
+ { 0, 0, 0,
+ "Unknown TMS380 Token Ring Adapter"},
+ { TMS_ISA, 0, 0,
+ "SK NET TR 4/16 ISA"},
+ { TMS_PCI, PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_TOKENRING,
+ "Compaq 4/16 TR PCI"},
+ { TMS_PCI, PCI_VENDOR_ID_SK, PCI_DEVICE_ID_SK_TR,
+ "SK NET TR 4/16 PCI"},
+ { TMS_PCI, PCI_VENDOR_ID_TCONRAD, PCI_DEVICE_ID_TCONRAD_TOKENRING,
+ "Thomas-Conrad TC4048 PCI 4/16"},
+ { 0, 0, 0, NULL}
+};
+
+/* Use 0 for production, 1 for verification, 2 for debug, and
+ * 3 for very verbose debug.
+ */
+#ifndef TMS380TR_DEBUG
+#define TMS380TR_DEBUG 0
+#endif
+static unsigned int tms380tr_debug = TMS380TR_DEBUG;
+
+/* The number of low I/O ports used by the tokencard. */
+#define TMS380TR_IO_EXTENT 32
+
+/* Index to functions, as function prototypes.
+ * Alphabetical by function name.
+ */
+
+/* "B" */
+static int tms380tr_bringup_diags(struct net_device *dev);
+/* "C" */
+static void tms380tr_cancel_tx_queue(struct net_local* tp);
+static int tms380tr_chipset_init(struct net_device *dev);
+static void tms380tr_chk_irq(struct net_device *dev);
+static unsigned char tms380tr_chk_frame(struct net_device *dev, unsigned char *Addr);
+static void tms380tr_chk_outstanding_cmds(struct net_device *dev);
+static void tms380tr_chk_src_addr(unsigned char *frame, unsigned char *hw_addr);
+static unsigned char tms380tr_chk_ssb(struct net_local *tp, unsigned short IrqType);
+static int tms380tr_close(struct net_device *dev);
+static void tms380tr_cmd_status_irq(struct net_device *dev);
+/* "D" */
+static void tms380tr_disable_interrupts(struct net_device *dev);
+#if TMS380TR_DEBUG > 0
+static void tms380tr_dump(unsigned char *Data, int length);
+#endif
+/* "E" */
+static void tms380tr_enable_interrupts(struct net_device *dev);
+static void tms380tr_exec_cmd(struct net_device *dev, unsigned short Command);
+static void tms380tr_exec_sifcmd(struct net_device *dev, unsigned int WriteValue);
+/* "F" */
+/* "G" */
+static struct enet_statistics *tms380tr_get_stats(struct net_device *dev);
+/* "H" */
+static void tms380tr_hardware_send_packet(struct net_device *dev,
+ struct net_local* tp);
+/* "I" */
+static int tms380tr_init_adapter(struct net_device *dev);
+static int tms380tr_init_card(struct net_device *dev);
+static void tms380tr_init_ipb(struct net_local *tp);
+static void tms380tr_init_net_local(struct net_device *dev);
+static void tms380tr_init_opb(struct net_local *tp);
+static void tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs);
+static int tms380tr_isa_chk_card(struct net_device *dev, int ioaddr, struct cardinfo_table **outcard);
+static int tms380tr_isa_chk_ioaddr(int ioaddr);
+/* "O" */
+static int tms380tr_open(struct net_device *dev);
+static void tms380tr_open_adapter(struct net_device *dev);
+/* "P" */
+static int tms380tr_pci_chk_card(struct net_device *dev, struct cardinfo_table **outcard);
+int tms380tr_probe(struct net_device *dev);
+static int tms380tr_probe1(struct net_device *dev, int ioaddr);
+/* "R" */
+static void tms380tr_rcv_status_irq(struct net_device *dev);
+static void tms380tr_read_addr(struct net_device *dev, unsigned char *Address);
+static int tms380tr_read_ptr(struct net_device *dev);
+static void tms380tr_read_ram(struct net_device *dev, unsigned char *Data,
+ unsigned short Address, int Length);
+static int tms380tr_reset_adapter(struct net_device *dev);
+static void tms380tr_reset_interrupt(struct net_device *dev);
+static void tms380tr_ring_status_irq(struct net_device *dev);
+/* "S" */
+static int tms380tr_send_packet(struct sk_buff *skb, struct net_device *dev);
+static void tms380tr_set_multicast_list(struct net_device *dev);
+/* "T" */
+static void tms380tr_timer_chk(unsigned long data);
+static void tms380tr_timer_end_wait(unsigned long data);
+static void tms380tr_tx_status_irq(struct net_device *dev);
+/* "U" */
+static void tms380tr_update_rcv_stats(struct net_local *tp,
+ unsigned char DataPtr[], unsigned int Length);
+/* "W" */
+static void tms380tr_wait(unsigned long time);
+static void tms380tr_write_rpl_status(RPL *rpl, unsigned int Status);
+static void tms380tr_write_tpl_status(TPL *tpl, unsigned int Status);
+
+/*
+ * Check for a network adapter of this type, and return '0' if one exists.
+ * If dev->base_addr == 0, probe all likely locations.
+ * If dev->base_addr == 1, always return failure.
+ */
+int __init tms380tr_probe(struct net_device *dev)
+{
+ int i;
+ int base_addr = dev ? dev->base_addr : 0;
+
+ if(base_addr > 0x1ff) /* Check a single specified location. */
+ return (tms380tr_probe1(dev, base_addr));
+ else if(base_addr != 0) /* Don't probe at all. */
+ return (-ENXIO);
+
+ for(i = 0; tms380tr_portlist[i]; i++)
+ {
+ int ioaddr = tms380tr_portlist[i];
+ if(check_region(ioaddr, TMS380TR_IO_EXTENT))
+ continue;
+ if(tms380tr_probe1(dev, ioaddr))
+ {
+#ifndef MODULE
+ tr_freedev(dev);
+#endif
+ }
+ else
+ return (0);
+ }
+
+ return (-ENODEV);
+}
+
+struct cardinfo_table * __init tms380tr_pci_getcardinfo(unsigned short vendor,
+ unsigned short device)
+{
+ int cur;
+
+ for (cur = 1; cardinfo[cur].name != NULL; cur++) {
+ if (cardinfo[cur].type == 2) /* PCI */
+ {
+ if ((cardinfo[cur].vendor_id == vendor) && (cardinfo[cur].device_id == device))
+ return &cardinfo[cur];
+ }
+ }
+
+ return NULL;
+}
+
+/*
+ * Detect and setup the PCI SysKonnect TR cards in slot order.
+ */
+static int __init tms380tr_pci_chk_card(struct net_device *dev,
+ struct cardinfo_table **outcard)
+{
+ static int pci_index = 0;
+ unsigned char pci_bus, pci_device_fn;
+ struct cardinfo_table *card;
+ int i;
+
+ if(!pci_present())
+ return (-1); /* No PCI present. */
+
+ for(; pci_index < 0xff; pci_index++)
+ {
+ unsigned int pci_irq_line;
+ struct pci_dev *pdev;
+ unsigned short pci_command, new_command, vendor, device;
+ unsigned int pci_ioaddr;
+
+ if(pcibios_find_class(PCI_CLASS_NETWORK_TOKEN_RING << 8,
+ pci_index, &pci_bus, &pci_device_fn)
+ != PCIBIOS_SUCCESSFUL)
+ {
+ break;
+ }
+
+ pcibios_read_config_word(pci_bus, pci_device_fn,
+ PCI_VENDOR_ID, &vendor);
+ pcibios_read_config_word(pci_bus, pci_device_fn,
+ PCI_DEVICE_ID, &device);
+
+ pdev = pci_find_slot(pci_bus, pci_device_fn);
+ pci_irq_line = pdev->irq;
+ pci_ioaddr = pdev->resource[0].start;
+
+ pcibios_read_config_word(pci_bus, pci_device_fn,
+ PCI_COMMAND, &pci_command);
+
+ /* Remove I/O space marker in bit 0. */
+ pci_ioaddr &= ~3;
+
+ if (!(card = tms380tr_pci_getcardinfo(vendor, device)))
+ return -ENODEV;
+
+ if(check_region(pci_ioaddr, TMS380TR_IO_EXTENT))
+ continue;
+ request_region(pci_ioaddr, TMS380TR_IO_EXTENT, card->name);
+ if(request_irq(pdev->irq, tms380tr_interrupt, SA_SHIRQ,
+ card->name, dev))
+ return (-ENODEV); /* continue; ?? */
+
+ new_command = (pci_command|PCI_COMMAND_MASTER|PCI_COMMAND_IO);
+
+ if(pci_command != new_command)
+ {
+ printk("The PCI BIOS has not enabled this"
+ "device! Updating PCI command %4.4x->%4.4x.\n",
+ pci_command, new_command);
+ pcibios_write_config_word(pci_bus, pci_device_fn,
+ PCI_COMMAND, new_command);
+ }
+
+ /* At this point we have found a valid PCI TR card. */
+ dev->base_addr = pci_ioaddr;
+ dev->irq = pci_irq_line;
+ dev->dma = 0;
+
+ dev->addr_len = 6;
+ tms380tr_read_addr(dev, (unsigned char*)dev->dev_addr);
+
+ printk("%s: %s found at %#4x, IRQ %d, ring station ",
+ dev->name, card->name, pci_ioaddr, dev->irq);
+ printk("%2.2x", dev->dev_addr[0]);
+ for (i = 1; i < 6; i++)
+ printk(":%2.2x", dev->dev_addr[i]);
+ printk(".\n");
+
+ if (outcard)
+ *outcard = card;
+
+ return (0);
+ }
+
+ return (-1);
+}
+
+/*
+ * Detect and setup the ISA SysKonnect TR cards.
+ */
+static int __init tms380tr_isa_chk_card(struct net_device *dev, int ioaddr,
+ struct cardinfo_table **outcard)
+{
+ int i, err;
+ unsigned long flags;
+ struct cardinfo_table *card = NULL;
+
+ err = tms380tr_isa_chk_ioaddr(ioaddr);
+ if(err < 0)
+ return (-ENODEV);
+
+ if(virt_to_bus((void*)((unsigned long)dev->priv+sizeof(struct net_local)))
+ > ISA_MAX_ADDRESS)
+ {
+ printk("%s: Memory not accessible for DMA\n", dev->name);
+ kfree(dev->priv);
+ return (-EAGAIN);
+ }
+
+ /* FIXME */
+ card = &cardinfo[1];
+
+ /* Grab the region so that no one else tries to probe our ioports. */
+ request_region(ioaddr, TMS380TR_IO_EXTENT, card->name);
+ dev->base_addr = ioaddr;
+
+ /* Autoselect IRQ and DMA if dev->irq == 0 */
+ if(dev->irq == 0)
+ {
+ for(i = 0; tms380tr_irqlist[i] != 0; i++)
+ {
+ dev->irq = tms380tr_irqlist[i];
+ err = request_irq(dev->irq, &tms380tr_interrupt, 0, card->name, dev);
+ if(!err)
+ break;
+ }
+
+ if(tms380tr_irqlist[i] == 0)
+ {
+ printk("%s: AutoSelect no IRQ available\n", dev->name);
+ return (-EAGAIN);
+ }
+ }
+ else
+ {
+ err = request_irq(dev->irq, &tms380tr_interrupt, 0, card->name, dev);
+ if(err)
+ {
+ printk("%s: Selected IRQ not available\n", dev->name);
+ return (-EAGAIN);
+ }
+ }
+
+ /* Always allocate the DMA channel after IRQ and clean up on failure */
+ if(dev->dma == 0)
+ {
+ for(i = 0; tms380tr_dmalist[i] != 0; i++)
+ {
+ dev->dma = tms380tr_dmalist[i];
+ err = request_dma(dev->dma, card->name);
+ if(!err)
+ break;
+ }
+
+ if(dev->dma == 0)
+ {
+ printk("%s: AutoSelect no DMA available\n", dev->name);
+ free_irq(dev->irq, NULL);
+ return (-EAGAIN);
+ }
+ }
+ else
+ {
+ err = request_dma(dev->dma, card->name);
+ if(err)
+ {
+ printk("%s: Selected DMA not available\n", dev->name);
+ free_irq(dev->irq, NULL);
+ return (-EAGAIN);
+ }
+ }
+
+ flags=claim_dma_lock();
+ disable_dma(dev->dma);
+ set_dma_mode(dev->dma, DMA_MODE_CASCADE);
+ enable_dma(dev->dma);
+ release_dma_lock(flags);
+
+ printk("%s: %s found at %#4x, using IRQ %d and DMA %d.\n",
+ dev->name, card->name, ioaddr, dev->irq, dev->dma);
+
+ if (outcard)
+ *outcard = card;
+
+ return (0);
+}
+
+static int __init tms380tr_probe1(struct net_device *dev, int ioaddr)
+{
+ static unsigned version_printed = 0;
+ struct net_local *tp;
+ int err;
+ struct cardinfo_table *card = NULL;
+
+ if(tms380tr_debug && version_printed++ == 0)
+ printk(KERN_INFO "%s", version);
+
+#ifndef MODULE
+ dev = init_trdev(dev, 0);
+ if(dev == NULL)
+ return (-ENOMEM);
+#endif
+
+ err = tms380tr_pci_chk_card(dev, &card);
+ if(err < 0)
+ {
+ err = tms380tr_isa_chk_card(dev, ioaddr, &card);
+ if(err < 0)
+ return (-ENODEV);
+ }
+
+ /* Setup this devices private information structure */
+ tp = (struct net_local *)kmalloc(sizeof(struct net_local), GFP_KERNEL | GFP_DMA);
+ if(tp == NULL)
+ return (-ENOMEM);
+ memset(tp, 0, sizeof(struct net_local));
+ init_waitqueue_head(&tp->wait_for_tok_int);
+ tp->CardType = card;
+
+ dev->priv = tp;
+ dev->init = tms380tr_init_card;
+ dev->open = tms380tr_open;
+ dev->stop = tms380tr_close;
+ dev->hard_start_xmit = tms380tr_send_packet;
+ dev->get_stats = tms380tr_get_stats;
+ dev->set_multicast_list = &tms380tr_set_multicast_list;
+
+ return (0);
+}
+
+/* Dummy function */
+static int __init tms380tr_init_card(struct net_device *dev)
+{
+ if(tms380tr_debug > 3)
+ printk("%s: tms380tr_init_card\n", dev->name);
+
+ return (0);
+}
+
+/*
+ * This function tests if an adapter is really installed at the
+ * given I/O address. Return negative if no adapter at IO addr.
+ */
+static int __init tms380tr_isa_chk_ioaddr(int ioaddr)
+{
+ unsigned char old, chk1, chk2;
+
+ old = inb(ioaddr + SIFADR); /* Get the old SIFADR value */
+
+ chk1 = 0; /* Begin with check value 0 */
+ do {
+ /* Write new SIFADR value */
+ outb(chk1, ioaddr + SIFADR);
+
+ /* Read, invert and write */
+ chk2 = inb(ioaddr + SIFADD);
+ chk2 ^= 0x0FE;
+ outb(chk2, ioaddr + SIFADR);
+
+ /* Read, invert and compare */
+ chk2 = inb(ioaddr + SIFADD);
+ chk2 ^= 0x0FE;
+
+ if(chk1 != chk2)
+ return (-1); /* No adapter */
+
+ chk1 -= 2;
+ } while(chk1 != 0); /* Repeat 128 times (all byte values) */
+
+ /* Restore the SIFADR value */
+ outb(old, ioaddr + SIFADR);
+
+ return (0);
+}
+
+/*
+ * Open/initialize the board. This is called sometime after
+ * booting when the 'ifconfig' program is run.
+ *
+ * This routine should set everything up anew at each open, even
+ * registers that "should" only need to be set once at boot, so that
+ * there is non-reboot way to recover if something goes wrong.
+ */
+static int tms380tr_open(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ int err;
+
+ /* Reset the hardware here. Don't forget to set the station address. */
+ err = tms380tr_chipset_init(dev);
+ if(err)
+ {
+ printk(KERN_INFO "%s: Chipset initialization error\n",
+ dev->name);
+ return (-1);
+ }
+
+ init_timer(&tp->timer);
+ tp->timer.expires = jiffies + 30*HZ;
+ tp->timer.function = tms380tr_timer_end_wait;
+ tp->timer.data = (unsigned long)dev;
+ tp->timer.next = NULL;
+ tp->timer.prev = NULL;
+ add_timer(&tp->timer);
+
+ printk(KERN_INFO "%s: Adapter RAM size: %dK\n",
+ dev->name, tms380tr_read_ptr(dev));
+ tms380tr_enable_interrupts(dev);
+ tms380tr_open_adapter(dev);
+
+ dev->tbusy = 0;
+ dev->interrupt = 0;
+ dev->start = 0;
+
+ /* Wait for interrupt from hardware. If interrupt does not come,
+ * there will be a timeout from the timer.
+ */
+ tp->Sleeping = 1;
+ interruptible_sleep_on(&tp->wait_for_tok_int);
+ del_timer(&tp->timer);
+
+ /* If AdapterVirtOpenFlag is 1, the adapter is now open for use */
+ if(tp->AdapterVirtOpenFlag == 0)
+ {
+ tms380tr_disable_interrupts(dev);
+ return (-1);
+ }
+
+ dev->start = 1;
+
+ tp->StartTime = jiffies;
+
+ /* Start function control timer */
+ tp->timer.expires = jiffies + 2*HZ;
+ tp->timer.function = tms380tr_timer_chk;
+ tp->timer.data = (unsigned long)dev;
+ add_timer(&tp->timer);
+
+#ifdef MODULE
+ MOD_INC_USE_COUNT;
+#endif
+
+ return (0);
+}
+
+/*
+ * Timeout function while waiting for event
+ */
+static void tms380tr_timer_end_wait(unsigned long data)
+{
+ struct net_device *dev = (struct net_device*)data;
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ if(tp->Sleeping)
+ {
+ tp->Sleeping = 0;
+ wake_up_interruptible(&tp->wait_for_tok_int);
+ }
+
+ return;
+}
+
+/*
+ * Initialize the chipset
+ */
+static int tms380tr_chipset_init(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned char PosReg, Tmp;
+ int i, err;
+
+ tms380tr_init_ipb(tp);
+ tms380tr_init_opb(tp);
+ tms380tr_init_net_local(dev);
+
+ /* Set pos register: selects irq and dma channel.
+ * Only for ISA bus adapters.
+ */
+ if(dev->dma > 0)
+ {
+ PosReg = 0;
+ for(i = 0; tms380tr_irqlist[i] != 0; i++)
+ {
+ if(tms380tr_irqlist[i] == dev->irq)
+ break;
+ }
+
+ /* Choose default cycle time, 500 nsec */
+ PosReg |= CYCLE_TIME << 2;
+ PosReg |= i << 4;
+ i = dev->dma - 5;
+ PosReg |= i;
+
+ if(tp->DataRate == SPEED_4)
+ PosReg |= LINE_SPEED_BIT;
+ else
+ PosReg &= ~LINE_SPEED_BIT;
+
+ outb(PosReg, dev->base_addr + POSREG);
+ Tmp = inb(dev->base_addr + POSREG);
+ if((Tmp & ~CYCLE_TIME) != (PosReg & ~CYCLE_TIME))
+ printk(KERN_INFO "%s: POSREG error\n", dev->name);
+ }
+
+ err = tms380tr_reset_adapter(dev);
+ if(err < 0)
+ return (-1);
+
+ err = tms380tr_bringup_diags(dev);
+ if(err < 0)
+ return (-1);
+
+ err = tms380tr_init_adapter(dev);
+ if(err < 0)
+ return (-1);
+
+ return (0);
+}
+
+/*
+ * Initializes the net_local structure.
+ */
+static void tms380tr_init_net_local(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ int i;
+
+ tp->scb.CMD = 0;
+ tp->scb.Parm[0] = 0;
+ tp->scb.Parm[1] = 0;
+
+ tp->ssb.STS = 0;
+ tp->ssb.Parm[0] = 0;
+ tp->ssb.Parm[1] = 0;
+ tp->ssb.Parm[2] = 0;
+
+ tp->CMDqueue = 0;
+
+ tp->AdapterOpenFlag = 0;
+ tp->AdapterVirtOpenFlag = 0;
+ tp->ScbInUse = 0;
+ tp->OpenCommandIssued = 0;
+ tp->ReOpenInProgress = 0;
+ tp->HaltInProgress = 0;
+ tp->TransmitHaltScheduled = 0;
+ tp->LobeWireFaultLogged = 0;
+ tp->LastOpenStatus = 0;
+ tp->MaxPacketSize = DEFAULT_PACKET_SIZE;
+
+ skb_queue_head_init(&tp->SendSkbQueue);
+ tp->QueueSkb = MAX_TX_QUEUE;
+
+ /* Create circular chain of transmit lists */
+ for (i = 0; i < TPL_NUM; i++)
+ {
+ tp->Tpl[i].NextTPLAddr = htonl((unsigned long) virt_to_bus(&tp->Tpl[(i+1) % TPL_NUM]));
+ tp->Tpl[i].Status = 0;
+ tp->Tpl[i].FrameSize = 0;
+ tp->Tpl[i].FragList[0].DataCount = 0;
+ tp->Tpl[i].FragList[0].DataAddr = 0;
+ tp->Tpl[i].NextTPLPtr = &tp->Tpl[(i+1) % TPL_NUM];
+ tp->Tpl[i].MData = NULL;
+ tp->Tpl[i].TPLIndex = i;
+ tp->Tpl[i].BusyFlag = 0;
+ }
+
+ tp->TplFree = tp->TplBusy = &tp->Tpl[0];
+
+ /* Create circular chain of receive lists */
+ for (i = 0; i < RPL_NUM; i++)
+ {
+ tp->Rpl[i].NextRPLAddr = htonl((unsigned long) virt_to_bus(&tp->Rpl[(i+1) % RPL_NUM]));
+ tp->Rpl[i].Status = (RX_VALID | RX_START_FRAME | RX_END_FRAME | RX_FRAME_IRQ);
+ tp->Rpl[i].FrameSize = 0;
+ tp->Rpl[i].FragList[0].DataCount = SWAPB(tp->MaxPacketSize);
+
+ /* Alloc skb and point adapter to data area */
+ tp->Rpl[i].Skb = dev_alloc_skb(tp->MaxPacketSize);
+
+ /* skb == NULL ? then use local buffer */
+ if(tp->Rpl[i].Skb == NULL)
+ {
+ tp->Rpl[i].SkbStat = SKB_UNAVAILABLE;
+ tp->Rpl[i].FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[i]));
+ tp->Rpl[i].MData = tp->LocalRxBuffers[i];
+ }
+ else /* SKB != NULL */
+ {
+ tp->Rpl[i].Skb->dev = dev;
+ skb_put(tp->Rpl[i].Skb, tp->MaxPacketSize);
+
+ /* data unreachable for DMA ? then use local buffer */
+ if(tp->CardType->type == TMS_ISA && virt_to_bus(tp->Rpl[i].Skb->data) + tp->MaxPacketSize > ISA_MAX_ADDRESS)
+ {
+ tp->Rpl[i].SkbStat = SKB_DATA_COPY;
+ tp->Rpl[i].FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[i]));
+ tp->Rpl[i].MData = tp->LocalRxBuffers[i];
+ }
+ else /* DMA directly in skb->data */
+ {
+ tp->Rpl[i].SkbStat = SKB_DMA_DIRECT;
+ tp->Rpl[i].FragList[0].DataAddr = htonl(virt_to_bus(tp->Rpl[i].Skb->data));
+ tp->Rpl[i].MData = tp->Rpl[i].Skb->data;
+ }
+ }
+
+ tp->Rpl[i].NextRPLPtr = &tp->Rpl[(i+1) % RPL_NUM];
+ tp->Rpl[i].RPLIndex = i;
+ }
+
+ tp->RplHead = &tp->Rpl[0];
+ tp->RplTail = &tp->Rpl[RPL_NUM-1];
+ tp->RplTail->Status = (RX_START_FRAME | RX_END_FRAME | RX_FRAME_IRQ);
+
+ return;
+}
+
+/*
+ * Initializes the initialisation parameter block.
+ */
+static void tms380tr_init_ipb(struct net_local *tp)
+{
+ tp->ipb.Init_Options = BURST_MODE;
+ tp->ipb.CMD_Status_IV = 0;
+ tp->ipb.TX_IV = 0;
+ tp->ipb.RX_IV = 0;
+ tp->ipb.Ring_Status_IV = 0;
+ tp->ipb.SCB_Clear_IV = 0;
+ tp->ipb.Adapter_CHK_IV = 0;
+ tp->ipb.RX_Burst_Size = BURST_SIZE;
+ tp->ipb.TX_Burst_Size = BURST_SIZE;
+ tp->ipb.DMA_Abort_Thrhld = DMA_RETRIES;
+ tp->ipb.SCB_Addr = 0;
+ tp->ipb.SSB_Addr = 0;
+
+ return;
+}
+
+/*
+ * Initializes the open parameter block.
+ */
+static void tms380tr_init_opb(struct net_local *tp)
+{
+ unsigned long Addr;
+ unsigned short RplSize = RPL_SIZE;
+ unsigned short TplSize = TPL_SIZE;
+ unsigned short BufferSize = BUFFER_SIZE;
+
+ tp->ocpl.OPENOptions = 0;
+ tp->ocpl.OPENOptions |= ENABLE_FULL_DUPLEX_SELECTION;
+ tp->ocpl.FullDuplex = 0;
+ tp->ocpl.FullDuplex |= OPEN_FULL_DUPLEX_OFF;
+
+ /* Fixme: If mac address setable:
+ * for (i=0; i<LENGTH_OF_ADDRESS; i++)
+ * mac->Vam->ocpl.NodeAddr[i] = mac->CurrentAddress[i];
+ */
+
+ tp->ocpl.GroupAddr = 0;
+ tp->ocpl.FunctAddr = 0;
+ tp->ocpl.RxListSize = SWAPB(RplSize);
+ tp->ocpl.TxListSize = SWAPB(TplSize);
+ tp->ocpl.BufSize = SWAPB(BufferSize);
+ tp->ocpl.Reserved = 0;
+ tp->ocpl.TXBufMin = TX_BUF_MIN;
+ tp->ocpl.TXBufMax = TX_BUF_MAX;
+
+ Addr = htonl(virt_to_bus(tp->ProductID));
+
+ tp->ocpl.ProdIDAddr[0] = LOWORD(Addr);
+ tp->ocpl.ProdIDAddr[1] = HIWORD(Addr);
+
+ return;
+}
+
+/*
+ * Send OPEN command to adapter
+ */
+static void tms380tr_open_adapter(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ if(tp->OpenCommandIssued)
+ return;
+
+ tp->OpenCommandIssued = 1;
+ tms380tr_exec_cmd(dev, OC_OPEN);
+
+ return;
+}
+
+/*
+ * Clear the adapter's interrupt flag. Clear system interrupt enable
+ * (SINTEN): disable adapter to system interrupts.
+ */
+static void tms380tr_disable_interrupts(struct net_device *dev)
+{
+ outb(0, dev->base_addr + SIFACL);
+
+ return;
+}
+
+/*
+ * Set the adapter's interrupt flag. Set system interrupt enable
+ * (SINTEN): enable adapter to system interrupts.
+ */
+static void tms380tr_enable_interrupts(struct net_device *dev)
+{
+ outb(ACL_SINTEN, dev->base_addr + SIFACL);
+
+ return;
+}
+
+/*
+ * Put command in command queue, try to execute it.
+ */
+static void tms380tr_exec_cmd(struct net_device *dev, unsigned short Command)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ tp->CMDqueue |= Command;
+ tms380tr_chk_outstanding_cmds(dev);
+
+ return;
+}
+
+/*
+ * Gets skb from system, queues it and checks if it can be sent
+ */
+static int tms380tr_send_packet(struct sk_buff *skb, struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ if(dev->tbusy)
+ {
+ /*
+ * If we get here, some higher level has decided we are broken.
+ * There should really be a "kick me" function call instead.
+ *
+ * Resetting the token ring adapter takes a long time so just
+ * fake transmission time and go on trying. Our own timeout
+ * routine is in tms380tr_timer_chk()
+ */
+ dev->tbusy = 0;
+ dev->trans_start = jiffies;
+ return (1);
+ }
+
+ /*
+ * If some higher layer thinks we've missed an tx-done interrupt we
+ * are passed NULL.
+ */
+ if(skb == NULL)
+ return (0);
+
+ /*
+ * Block a timer-based transmit from overlapping. This could better be
+ * done with atomic_swap(1, dev->tbusy), but set_bit() works as well.
+ */
+ if(test_and_set_bit(0, (void*)&dev->tbusy) != 0)
+ {
+ printk("%s: Transmitter access conflict.\n", dev->name);
+ return (1);
+ }
+
+ if(tp->QueueSkb == 0)
+ return (1); /* Return with tbusy set: queue full */
+
+ tp->QueueSkb--;
+ skb_queue_tail(&tp->SendSkbQueue, skb);
+ tms380tr_hardware_send_packet(dev, tp);
+ if(tp->QueueSkb > 0)
+ dev->tbusy = 0;
+
+ return (0);
+}
+
+/*
+ * Move frames from internal skb queue into adapter tx queue
+ */
+static void tms380tr_hardware_send_packet(struct net_device *dev, struct net_local* tp)
+{
+ TPL *tpl;
+ short length;
+ unsigned char *buf, *newbuf;
+ struct sk_buff *skb;
+ int i;
+
+ for(;;)
+ {
+ /* Try to get a free TPL from the chain.
+ *
+ * NOTE: We *must* always leave one unused TPL in the chain,
+ * because otherwise the adapter might send frames twice.
+ */
+ if(tp->TplFree->NextTPLPtr->BusyFlag) /* No free TPL */
+ {
+ if (tms380tr_debug > 0)
+ printk(KERN_INFO "%s: No free TPL\n", dev->name);
+ return;
+ }
+
+ /* Send first buffer from queue */
+ skb = skb_dequeue(&tp->SendSkbQueue);
+ if(skb == NULL)
+ return;
+
+ tp->QueueSkb++;
+ /* Is buffer reachable for Busmaster-DMA? */
+ if(tp->CardType->type == TMS_ISA && virt_to_bus((void*)(((long) skb->data) + skb->len))
+ > ISA_MAX_ADDRESS)
+ {
+ /* Copy frame to local buffer */
+ i = tp->TplFree->TPLIndex;
+ length = skb->len;
+ buf = tp->LocalTxBuffers[i];
+ memcpy(buf, skb->data, length);
+ newbuf = buf;
+ }
+ else
+ {
+ /* Send direct from skb->data */
+ length = skb->len;
+ newbuf = skb->data;
+ }
+
+ /* Source address in packet? */
+ tms380tr_chk_src_addr(newbuf, dev->dev_addr);
+
+ tp->LastSendTime = jiffies;
+ tpl = tp->TplFree; /* Get the "free" TPL */
+ tpl->BusyFlag = 1; /* Mark TPL as busy */
+ tp->TplFree = tpl->NextTPLPtr;
+
+ /* Save the skb for delayed return of skb to system */
+ tpl->Skb = skb;
+ tpl->FragList[0].DataCount = (unsigned short) SWAPB(length);
+ tpl->FragList[0].DataAddr = htonl(virt_to_bus(newbuf));
+
+ /* Write the data length in the transmit list. */
+ tpl->FrameSize = (unsigned short) SWAPB(length);
+ tpl->MData = newbuf;
+
+ /* Transmit the frame and set the status values. */
+ tms380tr_write_tpl_status(tpl, TX_VALID | TX_START_FRAME
+ | TX_END_FRAME | TX_PASS_SRC_ADDR
+ | TX_FRAME_IRQ);
+
+ /* Let adapter send the frame. */
+ tms380tr_exec_sifcmd(dev, CMD_TX_VALID);
+ }
+
+ return;
+}
+
+/*
+ * Write the given value to the 'Status' field of the specified TPL.
+ * NOTE: This function should be used whenever the status of any TPL must be
+ * modified by the driver, because the compiler may otherwise change the
+ * order of instructions such that writing the TPL status may be executed at
+ * an undesireable time. When this function is used, the status is always
+ * written when the function is called.
+ */
+static void tms380tr_write_tpl_status(TPL *tpl, unsigned int Status)
+{
+ tpl->Status = Status;
+}
+
+static void tms380tr_chk_src_addr(unsigned char *frame, unsigned char *hw_addr)
+{
+ unsigned char SRBit;
+
+ if((((unsigned long)frame[8]) & ~0x80) != 0) /* Compare 4 bytes */
+ return;
+ if((unsigned short)frame[12] != 0) /* Compare 2 bytes */
+ return;
+
+ SRBit = frame[8] & 0x80;
+ memcpy(&frame[8], hw_addr, 6);
+ frame[8] |= SRBit;
+
+ return;
+}
+
+/*
+ * The timer routine: Check if adapter still open and working, reopen if not.
+ */
+static void tms380tr_timer_chk(unsigned long data)
+{
+ struct net_device *dev = (struct net_device*)data;
+ struct net_local *tp = (struct net_local*)dev->priv;
+
+ if(tp->HaltInProgress)
+ return;
+
+ tms380tr_chk_outstanding_cmds(dev);
+ if(time_before(tp->LastSendTime + SEND_TIMEOUT, jiffies)
+ && (tp->QueueSkb < MAX_TX_QUEUE || tp->TplFree != tp->TplBusy))
+ {
+ /* Anything to send, but stalled to long */
+ tp->LastSendTime = jiffies;
+ tms380tr_exec_cmd(dev, OC_CLOSE); /* Does reopen automatically */
+ }
+
+ tp->timer.expires = jiffies + 2*HZ;
+ add_timer(&tp->timer);
+
+ if(tp->AdapterOpenFlag || tp->ReOpenInProgress)
+ return;
+ tp->ReOpenInProgress = 1;
+ tms380tr_open_adapter(dev);
+
+ return;
+}
+
+/*
+ * The typical workload of the driver: Handle the network interface interrupts.
+ */
+static void tms380tr_interrupt(int irq, void *dev_id, struct pt_regs *regs)
+{
+ struct net_device *dev = dev_id;
+ struct net_local *tp;
+ int ioaddr;
+ unsigned short irq_type;
+
+ if(dev == NULL)
+ {
+ printk("%s: irq %d for unknown device.\n", dev->name, irq);
+ return;
+ }
+
+ dev->interrupt = 1;
+
+ ioaddr = dev->base_addr;
+ tp = (struct net_local *)dev->priv;
+
+ irq_type = inw(ioaddr + SIFSTS);
+
+ while(irq_type & STS_SYSTEM_IRQ)
+ {
+ irq_type &= STS_IRQ_MASK;
+
+ if(!tms380tr_chk_ssb(tp, irq_type))
+ {
+ printk(KERN_INFO "%s: DATA LATE occurred\n", dev->name);
+ break;
+ }
+
+ switch(irq_type)
+ {
+ case STS_IRQ_RECEIVE_STATUS:
+ tms380tr_reset_interrupt(dev);
+ tms380tr_rcv_status_irq(dev);
+ break;
+
+ case STS_IRQ_TRANSMIT_STATUS:
+ /* Check if TRANSMIT.HALT command is complete */
+ if(tp->ssb.Parm[0] & COMMAND_COMPLETE)
+ {
+ tp->TransmitCommandActive = 0;
+ tp->TransmitHaltScheduled = 0;
+
+ /* Issue a new transmit command. */
+ tms380tr_exec_cmd(dev, OC_TRANSMIT);
+ }
+
+ tms380tr_reset_interrupt(dev);
+ tms380tr_tx_status_irq(dev);
+ break;
+
+ case STS_IRQ_COMMAND_STATUS:
+ /* The SSB contains status of last command
+ * other than receive/transmit.
+ */
+ tms380tr_cmd_status_irq(dev);
+ break;
+
+ case STS_IRQ_SCB_CLEAR:
+ /* The SCB is free for another command. */
+ tp->ScbInUse = 0;
+ tms380tr_chk_outstanding_cmds(dev);
+ break;
+
+ case STS_IRQ_RING_STATUS:
+ tms380tr_ring_status_irq(dev);
+ break;
+
+ case STS_IRQ_ADAPTER_CHECK:
+ tms380tr_chk_irq(dev);
+ break;
+
+ default:
+ printk(KERN_INFO "Unknown Token Ring IRQ\n");
+ break;
+ }
+
+ /* Reset system interrupt if not already done. */
+ if(irq_type != STS_IRQ_TRANSMIT_STATUS
+ && irq_type != STS_IRQ_RECEIVE_STATUS)
+ {
+ tms380tr_reset_interrupt(dev);
+ }
+
+ irq_type = inw(ioaddr + SIFSTS);
+ }
+
+ dev->interrupt = 0;
+
+ return;
+}
+
+/*
+ * Reset the INTERRUPT SYSTEM bit and issue SSB CLEAR command.
+ */
+static void tms380tr_reset_interrupt(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ SSB *ssb = &tp->ssb;
+
+ /*
+ * [Workaround for "Data Late"]
+ * Set all fields of the SSB to well-defined values so we can
+ * check if the adapter has written the SSB.
+ */
+
+ ssb->STS = (unsigned short) -1;
+ ssb->Parm[0] = (unsigned short) -1;
+ ssb->Parm[1] = (unsigned short) -1;
+ ssb->Parm[2] = (unsigned short) -1;
+
+ /* Free SSB by issuing SSB_CLEAR command after reading IRQ code
+ * and clear STS_SYSTEM_IRQ bit: enable adapter for further interrupts.
+ */
+ tms380tr_exec_sifcmd(dev, CMD_SSB_CLEAR | CMD_CLEAR_SYSTEM_IRQ);
+
+ return;
+}
+
+/*
+ * Check if the SSB has actually been written by the adapter.
+ */
+static unsigned char tms380tr_chk_ssb(struct net_local *tp, unsigned short IrqType)
+{
+ SSB *ssb = &tp->ssb; /* The address of the SSB. */
+
+ /* C 0 1 2 INTERRUPT CODE
+ * - - - - --------------
+ * 1 1 1 1 TRANSMIT STATUS
+ * 1 1 1 1 RECEIVE STATUS
+ * 1 ? ? 0 COMMAND STATUS
+ * 0 0 0 0 SCB CLEAR
+ * 1 1 0 0 RING STATUS
+ * 0 0 0 0 ADAPTER CHECK
+ *
+ * 0 = SSB field not affected by interrupt
+ * 1 = SSB field is affected by interrupt
+ *
+ * C = SSB ADDRESS +0: COMMAND
+ * 0 = SSB ADDRESS +2: STATUS 0
+ * 1 = SSB ADDRESS +4: STATUS 1
+ * 2 = SSB ADDRESS +6: STATUS 2
+ */
+
+ /* Check if this interrupt does use the SSB. */
+
+ if(IrqType != STS_IRQ_TRANSMIT_STATUS
+ && IrqType != STS_IRQ_RECEIVE_STATUS
+ && IrqType != STS_IRQ_COMMAND_STATUS
+ && IrqType != STS_IRQ_RING_STATUS)
+ {
+ return (1); /* SSB not involved. */
+ }
+
+ /* Note: All fields of the SSB have been set to all ones (-1) after it
+ * has last been used by the software (see DriverIsr()).
+ *
+ * Check if the affected SSB fields are still unchanged.
+ */
+
+ if(ssb->STS == (unsigned short) -1)
+ return (0); /* Command field not yet available. */
+ if(IrqType == STS_IRQ_COMMAND_STATUS)
+ return (1); /* Status fields not always affected. */
+ if(ssb->Parm[0] == (unsigned short) -1)
+ return (0); /* Status 1 field not yet available. */
+ if(IrqType == STS_IRQ_RING_STATUS)
+ return (1); /* Status 2 & 3 fields not affected. */
+
+ /* Note: At this point, the interrupt is either TRANSMIT or RECEIVE. */
+ if(ssb->Parm[1] == (unsigned short) -1)
+ return (0); /* Status 2 field not yet available. */
+ if(ssb->Parm[2] == (unsigned short) -1)
+ return (0); /* Status 3 field not yet available. */
+
+ return (1); /* All SSB fields have been written by the adapter. */
+}
+
+/*
+ * Evaluates the command results status in the SSB status field.
+ */
+static void tms380tr_cmd_status_irq(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned short ssb_cmd, ssb_parm_0;
+ unsigned short ssb_parm_1;
+ char *open_err = "Open error -";
+ char *code_err = "Open code -";
+
+ /* Copy the ssb values to local variables */
+ ssb_cmd = tp->ssb.STS;
+ ssb_parm_0 = tp->ssb.Parm[0];
+ ssb_parm_1 = tp->ssb.Parm[1];
+
+ if(ssb_cmd == OPEN)
+ {
+ tp->Sleeping = 0;
+ if(!tp->ReOpenInProgress)
+ wake_up_interruptible(&tp->wait_for_tok_int);
+
+ tp->OpenCommandIssued = 0;
+ tp->ScbInUse = 0;
+
+ if((ssb_parm_0 & 0x00FF) == GOOD_COMPLETION)
+ {
+ /* Success, the adapter is open. */
+ tp->LobeWireFaultLogged = 0;
+ tp->AdapterOpenFlag = 1;
+ tp->AdapterVirtOpenFlag = 1;
+ tp->TransmitCommandActive = 0;
+ tms380tr_exec_cmd(dev, OC_TRANSMIT);
+ tms380tr_exec_cmd(dev, OC_RECEIVE);
+
+ if(tp->ReOpenInProgress)
+ tp->ReOpenInProgress = 0;
+
+ return;
+ }
+ else /* The adapter did not open. */
+ {
+ if(ssb_parm_0 & NODE_ADDR_ERROR)
+ printk(KERN_INFO "%s: Node address error\n",
+ dev->name);
+ if(ssb_parm_0 & LIST_SIZE_ERROR)
+ printk(KERN_INFO "%s: List size error\n",
+ dev->name);
+ if(ssb_parm_0 & BUF_SIZE_ERROR)
+ printk(KERN_INFO "%s: Buffer size error\n",
+ dev->name);
+ if(ssb_parm_0 & TX_BUF_COUNT_ERROR)
+ printk(KERN_INFO "%s: Tx buffer count error\n",
+ dev->name);
+ if(ssb_parm_0 & INVALID_OPEN_OPTION)
+ printk(KERN_INFO "%s: Invalid open option\n",
+ dev->name);
+ if(ssb_parm_0 & OPEN_ERROR)
+ {
+ /* Show the open phase. */
+ switch(ssb_parm_0 & OPEN_PHASES_MASK)
+ {
+ case LOBE_MEDIA_TEST:
+ if(!tp->LobeWireFaultLogged)
+ {
+ tp->LobeWireFaultLogged = 1;
+ printk(KERN_INFO "%s: %s Lobe wire fault (check cable !).\n", dev->name, open_err);
+ }
+ tp->ReOpenInProgress = 1;
+ tp->AdapterOpenFlag = 0;
+ tp->AdapterVirtOpenFlag = 1;
+ tms380tr_open_adapter(dev);
+ return;
+
+ case PHYSICAL_INSERTION:
+ printk(KERN_INFO "%s: %s Physical insertion.\n", dev->name, open_err);
+ break;
+
+ case ADDRESS_VERIFICATION:
+ printk(KERN_INFO "%s: %s Address verification.\n", dev->name, open_err);
+ break;
+
+ case PARTICIPATION_IN_RING_POLL:
+ printk(KERN_INFO "%s: %s Participation in ring poll.\n", dev->name, open_err);
+ break;
+
+ case REQUEST_INITIALISATION:
+ printk(KERN_INFO "%s: %s Request initialisation.\n", dev->name, open_err);
+ break;
+
+ case FULLDUPLEX_CHECK:
+ printk(KERN_INFO "%s: %s Full duplex check.\n", dev->name, open_err);
+ break;
+
+ default:
+ printk(KERN_INFO "%s: %s Unknown open phase\n", dev->name, open_err);
+ break;
+ }
+
+ /* Show the open errors. */
+ switch(ssb_parm_0 & OPEN_ERROR_CODES_MASK)
+ {
+ case OPEN_FUNCTION_FAILURE:
+ printk(KERN_INFO "%s: %s OPEN_FUNCTION_FAILURE", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_FUNCTION_FAILURE;
+ break;
+
+ case OPEN_SIGNAL_LOSS:
+ printk(KERN_INFO "%s: %s OPEN_SIGNAL_LOSS\n", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_SIGNAL_LOSS;
+ break;
+
+ case OPEN_TIMEOUT:
+ printk(KERN_INFO "%s: %s OPEN_TIMEOUT\n", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_TIMEOUT;
+ break;
+
+ case OPEN_RING_FAILURE:
+ printk(KERN_INFO "%s: %s OPEN_RING_FAILURE\n", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_RING_FAILURE;
+ break;
+
+ case OPEN_RING_BEACONING:
+ printk(KERN_INFO "%s: %s OPEN_RING_BEACONING\n", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_RING_BEACONING;
+ break;
+
+ case OPEN_DUPLICATE_NODEADDR:
+ printk(KERN_INFO "%s: %s OPEN_DUPLICATE_NODEADDR\n", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_DUPLICATE_NODEADDR;
+ break;
+
+ case OPEN_REQUEST_INIT:
+ printk(KERN_INFO "%s: %s OPEN_REQUEST_INIT\n", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_REQUEST_INIT;
+ break;
+
+ case OPEN_REMOVE_RECEIVED:
+ printk(KERN_INFO "%s: %s OPEN_REMOVE_RECEIVED", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_REMOVE_RECEIVED;
+ break;
+
+ case OPEN_FULLDUPLEX_SET:
+ printk(KERN_INFO "%s: %s OPEN_FULLDUPLEX_SET\n", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_FULLDUPLEX_SET;
+ break;
+
+ default:
+ printk(KERN_INFO "%s: %s Unknown open err code", dev->name, code_err);
+ tp->LastOpenStatus =
+ OPEN_FUNCTION_FAILURE;
+ break;
+ }
+ }
+
+ tp->AdapterOpenFlag = 0;
+ tp->AdapterVirtOpenFlag = 0;
+
+ return;
+ }
+ }
+ else
+ {
+ if(ssb_cmd != READ_ERROR_LOG)
+ return;
+
+ /* Add values from the error log table to the MAC
+ * statistics counters and update the errorlogtable
+ * memory.
+ */
+ tp->MacStat.line_errors += tp->errorlogtable.Line_Error;
+ tp->MacStat.burst_errors += tp->errorlogtable.Burst_Error;
+ tp->MacStat.A_C_errors += tp->errorlogtable.ARI_FCI_Error;
+ tp->MacStat.lost_frames += tp->errorlogtable.Lost_Frame_Error;
+ tp->MacStat.recv_congest_count += tp->errorlogtable.Rx_Congest_Error;
+ tp->MacStat.rx_errors += tp->errorlogtable.Rx_Congest_Error;
+ tp->MacStat.frame_copied_errors += tp->errorlogtable.Frame_Copied_Error;
+ tp->MacStat.token_errors += tp->errorlogtable.Token_Error;
+ tp->MacStat.dummy1 += tp->errorlogtable.DMA_Bus_Error;
+ tp->MacStat.dummy1 += tp->errorlogtable.DMA_Parity_Error;
+ tp->MacStat.abort_delimiters += tp->errorlogtable.AbortDelimeters;
+ tp->MacStat.frequency_errors += tp->errorlogtable.Frequency_Error;
+ tp->MacStat.internal_errors += tp->errorlogtable.Internal_Error;
+ }
+
+ return;
+}
+
+/*
+ * The inverse routine to tms380tr_open().
+ */
+static int tms380tr_close(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ dev->tbusy = 1;
+ dev->start = 0;
+
+ del_timer(&tp->timer);
+
+ /* Flush the Tx and disable Rx here. */
+
+ tp->HaltInProgress = 1;
+ tms380tr_exec_cmd(dev, OC_CLOSE);
+ tp->timer.expires = jiffies + 1*HZ;
+ tp->timer.function = tms380tr_timer_end_wait;
+ tp->timer.data = (unsigned long)dev;
+ add_timer(&tp->timer);
+
+ tms380tr_enable_interrupts(dev);
+
+ tp->Sleeping = 1;
+ interruptible_sleep_on(&tp->wait_for_tok_int);
+ tp->TransmitCommandActive = 0;
+
+ del_timer(&tp->timer);
+ tms380tr_disable_interrupts(dev);
+
+ if(dev->dma > 0)
+ {
+ unsigned long flags=claim_dma_lock();
+ disable_dma(dev->dma);
+ release_dma_lock(flags);
+ }
+
+ outw(0xFF00, dev->base_addr + SIFCMD);
+ if(dev->dma > 0)
+ outb(0xff, dev->base_addr + POSREG);
+
+#ifdef MODULE
+ MOD_DEC_USE_COUNT;
+#endif
+
+ tms380tr_cancel_tx_queue(tp);
+
+ return (0);
+}
+
+/*
+ * Get the current statistics. This may be called with the card open
+ * or closed.
+ */
+static struct enet_statistics *tms380tr_get_stats(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ return ((struct enet_statistics *)&tp->MacStat);
+}
+
+/*
+ * Set or clear the multicast filter for this adapter.
+ */
+static void tms380tr_set_multicast_list(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned int OpenOptions;
+
+ OpenOptions = tp->ocpl.OPENOptions &
+ ~(PASS_ADAPTER_MAC_FRAMES
+ | PASS_ATTENTION_FRAMES
+ | PASS_BEACON_MAC_FRAMES
+ | COPY_ALL_MAC_FRAMES
+ | COPY_ALL_NON_MAC_FRAMES);
+
+ tp->ocpl.FunctAddr = 0;
+
+ if(dev->flags & IFF_PROMISC)
+ /* Enable promiscuous mode */
+ OpenOptions |= COPY_ALL_NON_MAC_FRAMES |
+ COPY_ALL_MAC_FRAMES;
+ else
+ {
+ if(dev->flags & IFF_ALLMULTI)
+ {
+ /* Disable promiscuous mode, use normal mode. */
+ tp->ocpl.FunctAddr = 0xFFFFFFFF;
+
+ }
+ else
+ {
+ int i;
+ struct dev_mc_list *mclist = dev->mc_list;
+ for (i=0; i< dev->mc_count; i++)
+ {
+ ((char *)(&tp->ocpl.FunctAddr))[0] |=
+ mclist->dmi_addr[2];
+ ((char *)(&tp->ocpl.FunctAddr))[1] |=
+ mclist->dmi_addr[3];
+ ((char *)(&tp->ocpl.FunctAddr))[2] |=
+ mclist->dmi_addr[4];
+ ((char *)(&tp->ocpl.FunctAddr))[3] |=
+ mclist->dmi_addr[5];
+ mclist = mclist->next;
+ }
+ }
+ tms380tr_exec_cmd(dev, OC_SET_FUNCT_ADDR);
+ }
+
+ tp->ocpl.OPENOptions = OpenOptions;
+ tms380tr_exec_cmd(dev, OC_MODIFY_OPEN_PARMS);
+ return;
+}
+
+/*
+ * Wait for some time (microseconds)
+ */
+static void tms380tr_wait(unsigned long time)
+{
+#if 0
+ long tmp;
+
+ tmp = jiffies + time/(1000000/HZ);
+ do {
+ current->state = TASK_INTERRUPTIBLE;
+ tmp = schedule_timeout(tmp);
+ } while(time_after(tmp, jiffies));
+#else
+ udelay(time);
+#endif
+ return;
+}
+
+/*
+ * Write a command value to the SIFCMD register
+ */
+static void tms380tr_exec_sifcmd(struct net_device *dev, unsigned int WriteValue)
+{
+ int ioaddr = dev->base_addr;
+ unsigned short cmd;
+ unsigned short SifStsValue;
+ unsigned long loop_counter;
+
+ WriteValue = ((WriteValue ^ CMD_SYSTEM_IRQ) | CMD_INTERRUPT_ADAPTER);
+ cmd = (unsigned short)WriteValue;
+ loop_counter = 0,5 * 800000;
+ do {
+ SifStsValue = inw(ioaddr + SIFSTS);
+ } while((SifStsValue & CMD_INTERRUPT_ADAPTER) && loop_counter--);
+ outw(cmd, ioaddr + SIFCMD);
+
+ return;
+}
+
+/*
+ * Processes adapter hardware reset, halts adapter and downloads firmware,
+ * clears the halt bit.
+ */
+static int tms380tr_reset_adapter(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned short *fw_ptr = (unsigned short *)&tms380tr_code;
+ unsigned short count, c;
+ int ioaddr = dev->base_addr;
+
+ /* Hardware adapter reset */
+ outw(ACL_ARESET, ioaddr + SIFACL);
+ tms380tr_wait(40);
+
+ c = inw(ioaddr + SIFACL);
+ tms380tr_wait(20);
+
+ if(dev->dma == 0) /* For PCI adapters */
+ {
+ c &= ~(ACL_SPEED4 | ACL_SPEED16); /* Clear bits */
+ if(tp->DataRate == SPEED_4)
+ c |= ACL_SPEED4; /* Set 4Mbps */
+ else
+ c |= ACL_SPEED16; /* Set 16Mbps */
+ }
+
+ /* In case a command is pending - forget it */
+ tp->ScbInUse = 0;
+
+ c &= ~ACL_ARESET; /* Clear adapter reset bit */
+ c |= ACL_CPHALT; /* Halt adapter CPU, allow download */
+ c &= ~ACL_PSDMAEN; /* Clear pseudo dma bit */
+ outw(c, ioaddr + SIFACL);
+ tms380tr_wait(40);
+
+ /* Download firmware via DIO interface: */
+ do {
+ /* Download first address part */
+ outw(*fw_ptr, ioaddr + SIFADX);
+ fw_ptr++;
+
+ /* Download second address part */
+ outw(*fw_ptr, ioaddr + SIFADD);
+ fw_ptr++;
+
+ if((count = *fw_ptr) != 0) /* Load loop counter */
+ {
+ fw_ptr++; /* Download block data */
+ for(; count > 0; count--)
+ {
+ outw(*fw_ptr, ioaddr + SIFINC);
+ fw_ptr++;
+ }
+ }
+ else /* Stop, if last block downloaded */
+ {
+ c = inw(ioaddr + SIFACL);
+ c &= (~ACL_CPHALT | ACL_SINTEN);
+
+ /* Clear CPHALT and start BUD */
+ outw(c, ioaddr + SIFACL);
+ return (1);
+ }
+ } while(count == 0);
+
+ return (-1);
+}
+
+/*
+ * Starts bring up diagnostics of token ring adapter and evaluates
+ * diagnostic results.
+ */
+static int tms380tr_bringup_diags(struct net_device *dev)
+{
+ int loop_cnt, retry_cnt;
+ unsigned short Status;
+ int ioaddr = dev->base_addr;
+
+ tms380tr_wait(HALF_SECOND);
+ tms380tr_exec_sifcmd(dev, EXEC_SOFT_RESET);
+ tms380tr_wait(HALF_SECOND);
+
+ retry_cnt = BUD_MAX_RETRIES; /* maximal number of retrys */
+
+ do {
+ retry_cnt--;
+ if(tms380tr_debug > 3)
+ printk(KERN_INFO "BUD-Status: ");
+ loop_cnt = BUD_MAX_LOOPCNT; /* maximum: three seconds*/
+ do { /* Inspect BUD results */
+ loop_cnt--;
+ tms380tr_wait(HALF_SECOND);
+ Status = inw(ioaddr + SIFSTS);
+ Status &= STS_MASK;
+
+ if(tms380tr_debug > 3)
+ printk(KERN_INFO " %04X \n", Status);
+ /* BUD successfully completed */
+ if(Status == STS_INITIALIZE)
+ return (1);
+ /* Unrecoverable hardware error, BUD not completed? */
+ } while((loop_cnt > 0) && ((Status & (STS_ERROR | STS_TEST))
+ != (STS_ERROR | STS_TEST)));
+
+ /* Error preventing completion of BUD */
+ if(retry_cnt > 0)
+ {
+ printk(KERN_INFO "%s: Adapter Software Reset.\n",
+ dev->name);
+ tms380tr_exec_sifcmd(dev, EXEC_SOFT_RESET);
+ tms380tr_wait(HALF_SECOND);
+ }
+ } while(retry_cnt > 0);
+
+ Status = inw(ioaddr + SIFSTS);
+ Status &= STS_ERROR_MASK; /* Hardware error occurred! */
+
+ printk(KERN_INFO "%s: Bring Up Diagnostics Error (%04X) occurred\n",
+ dev->name, Status);
+
+ return (-1);
+}
+
+/*
+ * Copy initialisation data to adapter memory, beginning at address
+ * 1:0A00; Starting DMA test and evaluating result bits.
+ */
+static int tms380tr_init_adapter(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ const unsigned char SCB_Test[6] = {0x00, 0x00, 0xC1, 0xE2, 0xD4, 0x8B};
+ const unsigned char SSB_Test[8] = {0xFF, 0xFF, 0xD1, 0xD7,
+ 0xC5, 0xD9, 0xC3, 0xD4};
+ void *ptr = (void *)&tp->ipb;
+ unsigned short *ipb_ptr = (unsigned short *)ptr;
+ unsigned char *cb_ptr = (unsigned char *) &tp->scb;
+ unsigned char *sb_ptr = (unsigned char *) &tp->ssb;
+ unsigned short Status;
+ int i, loop_cnt, retry_cnt;
+ int ioaddr = dev->base_addr;
+
+ /* Normalize: byte order low/high, word order high/low! (only IPB!) */
+ tp->ipb.SCB_Addr = SWAPW(virt_to_bus(&tp->scb));
+ tp->ipb.SSB_Addr = SWAPW(virt_to_bus(&tp->ssb));
+
+ /* Maximum: three initialization retries */
+ retry_cnt = INIT_MAX_RETRIES;
+
+ do {
+ retry_cnt--;
+
+ /* Transfer initialization block */
+ outw(0x0001, ioaddr + SIFADX);
+
+ /* To address 0001:0A00 of adapter RAM */
+ outw(0x0A00, ioaddr + SIFADD);
+
+ /* Write 11 words to adapter RAM */
+ for(i = 0; i < 11; i++)
+ outw(ipb_ptr[i], ioaddr + SIFINC);
+
+ /* Execute SCB adapter command */
+ tms380tr_exec_sifcmd(dev, CMD_EXECUTE);
+
+ loop_cnt = INIT_MAX_LOOPCNT; /* Maximum: 11 seconds */
+
+ /* While remaining retries, no error and not completed */
+ do {
+ Status = 0;
+ loop_cnt--;
+ tms380tr_wait(HALF_SECOND);
+
+ /* Mask interesting status bits */
+ Status = inw(ioaddr + SIFSTS);
+ Status &= STS_MASK;
+ } while(((Status &(STS_INITIALIZE | STS_ERROR | STS_TEST)) != 0)
+ && ((Status & STS_ERROR) == 0) && (loop_cnt != 0));
+
+ if((Status & (STS_INITIALIZE | STS_ERROR | STS_TEST)) == 0)
+ {
+ /* Initialization completed without error */
+ i = 0;
+ do { /* Test if contents of SCB is valid */
+ if(SCB_Test[i] != *(cb_ptr + i))
+ /* DMA data error: wrong data in SCB */
+ return (-1);
+ i++;
+ } while(i < 6);
+
+ i = 0;
+ do { /* Test if contents of SSB is valid */
+ if(SSB_Test[i] != *(sb_ptr + i))
+ /* DMA data error: wrong data in SSB */
+ return (-1);
+ i++;
+ } while (i < 8);
+
+ return (1); /* Adapter successfully initialized */
+ }
+ else
+ {
+ if((Status & STS_ERROR) != 0)
+ {
+ /* Initialization error occurred */
+ Status = inw(ioaddr + SIFSTS);
+ Status &= STS_ERROR_MASK;
+ /* ShowInitialisationErrorCode(Status); */
+ return (-1); /* Unrecoverable error */
+ }
+ else
+ {
+ if(retry_cnt > 0)
+ {
+ /* Reset adapter and try init again */
+ tms380tr_exec_sifcmd(dev, EXEC_SOFT_RESET);
+ tms380tr_wait(HALF_SECOND);
+ }
+ }
+ }
+ } while(retry_cnt > 0);
+
+ return (-1);
+}
+
+/*
+ * Check for outstanding commands in command queue and tries to execute
+ * command immediately. Corresponding command flag in command queue is cleared.
+ */
+static void tms380tr_chk_outstanding_cmds(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned long Addr = 0;
+ unsigned char i = 0;
+
+ if(tp->CMDqueue == 0)
+ return; /* No command execution */
+
+ /* If SCB in use: no command */
+ if(tp->ScbInUse == 1)
+ return;
+
+ /* Check if adapter is opened, avoiding COMMAND_REJECT
+ * interrupt by the adapter!
+ */
+ if(tp->AdapterOpenFlag == 0)
+ {
+ if(tp->CMDqueue & OC_OPEN)
+ {
+ /* Execute OPEN command */
+ tp->CMDqueue ^= OC_OPEN;
+
+ /* Copy the 18 bytes of the product ID */
+ while((tp->CardType->name[i] != '\0')
+ && (i < PROD_ID_SIZE))
+ {
+ tp->ProductID[i] = tp->CardType->name[i];
+ i++;
+ }
+
+ Addr = htonl(virt_to_bus(&tp->ocpl));
+ tp->scb.Parm[0] = LOWORD(Addr);
+ tp->scb.Parm[1] = HIWORD(Addr);
+ tp->scb.CMD = OPEN;
+ }
+ else
+ /* No OPEN command queued, but adapter closed. Note:
+ * We'll try to re-open the adapter in DriverPoll()
+ */
+ return; /* No adapter command issued */
+ }
+ else
+ {
+ /* Adapter is open; evaluate command queue: try to execute
+ * outstanding commands (depending on priority!) CLOSE
+ * command queued
+ */
+ if(tp->CMDqueue & OC_CLOSE)
+ {
+ tp->CMDqueue ^= OC_CLOSE;
+ tp->AdapterOpenFlag = 0;
+ tp->scb.Parm[0] = 0; /* Parm[0], Parm[1] are ignored */
+ tp->scb.Parm[1] = 0; /* but should be set to zero! */
+ tp->scb.CMD = CLOSE;
+ if(!tp->HaltInProgress)
+ tp->CMDqueue |= OC_OPEN; /* re-open adapter */
+ else
+ tp->CMDqueue = 0; /* no more commands */
+ }
+ else
+ {
+ if(tp->CMDqueue & OC_RECEIVE)
+ {
+ tp->CMDqueue ^= OC_RECEIVE;
+ Addr = htonl(virt_to_bus(tp->RplHead));
+ tp->scb.Parm[0] = LOWORD(Addr);
+ tp->scb.Parm[1] = HIWORD(Addr);
+ tp->scb.CMD = RECEIVE;
+ }
+ else
+ {
+ if(tp->CMDqueue & OC_TRANSMIT_HALT)
+ {
+ /* NOTE: TRANSMIT.HALT must be checked
+ * before TRANSMIT.
+ */
+ tp->CMDqueue ^= OC_TRANSMIT_HALT;
+ tp->scb.CMD = TRANSMIT_HALT;
+
+ /* Parm[0] and Parm[1] are ignored
+ * but should be set to zero!
+ */
+ tp->scb.Parm[0] = 0;
+ tp->scb.Parm[1] = 0;
+ }
+ else
+ {
+ if(tp->CMDqueue & OC_TRANSMIT)
+ {
+ /* NOTE: TRANSMIT must be
+ * checked after TRANSMIT.HALT
+ */
+ if(tp->TransmitCommandActive)
+ {
+ if(!tp->TransmitHaltScheduled)
+ {
+ tp->TransmitHaltScheduled = 1;
+ tms380tr_exec_cmd(dev, OC_TRANSMIT_HALT) ;
+ }
+ tp->TransmitCommandActive = 0;
+ return;
+ }
+
+ tp->CMDqueue ^= OC_TRANSMIT;
+ tms380tr_cancel_tx_queue(tp);
+ Addr = htonl(virt_to_bus(tp->TplBusy));
+ tp->scb.Parm[0] = LOWORD(Addr);
+ tp->scb.Parm[1] = HIWORD(Addr);
+ tp->scb.CMD = TRANSMIT;
+ tp->TransmitCommandActive = 1;
+ }
+ else
+ {
+ if(tp->CMDqueue & OC_MODIFY_OPEN_PARMS)
+ {
+ tp->CMDqueue ^= OC_MODIFY_OPEN_PARMS;
+ tp->scb.Parm[0] = tp->ocpl.OPENOptions; /* new OPEN options*/
+ tp->scb.Parm[0] |= ENABLE_FULL_DUPLEX_SELECTION;
+ tp->scb.Parm[1] = 0; /* is ignored but should be zero */
+ tp->scb.CMD = MODIFY_OPEN_PARMS;
+ }
+ else
+ {
+ if(tp->CMDqueue & OC_SET_FUNCT_ADDR)
+ {
+ tp->CMDqueue ^= OC_SET_FUNCT_ADDR;
+ tp->scb.Parm[0] = LOWORD(tp->ocpl.FunctAddr);
+ tp->scb.Parm[1] = HIWORD(tp->ocpl.FunctAddr);
+ tp->scb.CMD = SET_FUNCT_ADDR;
+ }
+ else
+ {
+ if(tp->CMDqueue & OC_SET_GROUP_ADDR)
+ {
+ tp->CMDqueue ^= OC_SET_GROUP_ADDR;
+ tp->scb.Parm[0] = LOWORD(tp->ocpl.GroupAddr);
+ tp->scb.Parm[1] = HIWORD(tp->ocpl.GroupAddr);
+ tp->scb.CMD = SET_GROUP_ADDR;
+ }
+ else
+ {
+ if(tp->CMDqueue & OC_READ_ERROR_LOG)
+ {
+ tp->CMDqueue ^= OC_READ_ERROR_LOG;
+ Addr = htonl(virt_to_bus(&tp->errorlogtable));
+ tp->scb.Parm[0] = LOWORD(Addr);
+ tp->scb.Parm[1] = HIWORD(Addr);
+ tp->scb.CMD = READ_ERROR_LOG;
+ }
+ else
+ {
+ printk(KERN_WARNING "CheckForOutstandingCommand: unknown Command\n");
+ tp->CMDqueue = 0;
+ return;
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ tp->ScbInUse = 1; /* Set semaphore: SCB in use. */
+
+ /* Execute SCB and generate IRQ when done. */
+ tms380tr_exec_sifcmd(dev, CMD_EXECUTE | CMD_SCB_REQUEST);
+
+ return;
+}
+
+/*
+ * IRQ conditions: signal loss on the ring, transmit or receive of beacon
+ * frames (disabled if bit 1 of OPEN option is set); report error MAC
+ * frame transmit (disabled if bit 2 of OPEN option is set); open or short
+ * circuit fault on the lobe is detected; remove MAC frame received;
+ * error counter overflow (255); opened adapter is the only station in ring.
+ * After some of the IRQs the adapter is closed!
+ */
+static void tms380tr_ring_status_irq(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ tp->CurrentRingStatus = SWAPB(tp->ssb.Parm[0]);
+
+ /* First: fill up statistics */
+ if(tp->ssb.Parm[0] & SIGNAL_LOSS)
+ {
+ printk(KERN_INFO "%s: Signal Loss\n", dev->name);
+ tp->MacStat.line_errors++;
+ }
+
+ /* Adapter is closed, but initialized */
+ if(tp->ssb.Parm[0] & LOBE_WIRE_FAULT)
+ {
+ printk(KERN_INFO "%s: Lobe Wire Fault, Reopen Adapter\n",
+ dev->name);
+ tp->MacStat.line_errors++;
+ }
+
+ if(tp->ssb.Parm[0] & RING_RECOVERY)
+ printk(KERN_INFO "%s: Ring Recovery\n", dev->name);
+
+ /* Counter overflow: read error log */
+ if(tp->ssb.Parm[0] & COUNTER_OVERFLOW)
+ {
+ printk(KERN_INFO "%s: Counter Overflow\n", dev->name);
+ tms380tr_exec_cmd(dev, OC_READ_ERROR_LOG);
+ }
+
+ /* Adapter is closed, but initialized */
+ if(tp->ssb.Parm[0] & REMOVE_RECEIVED)
+ printk(KERN_INFO "%s: Remove Received, Reopen Adapter\n",
+ dev->name);
+
+ /* Adapter is closed, but initialized */
+ if(tp->ssb.Parm[0] & AUTO_REMOVAL_ERROR)
+ printk(KERN_INFO "%s: Auto Removal Error, Reopen Adapter\n",
+ dev->name);
+
+ if(tp->ssb.Parm[0] & HARD_ERROR)
+ printk(KERN_INFO "%s: Hard Error\n", dev->name);
+
+ if(tp->ssb.Parm[0] & SOFT_ERROR)
+ printk(KERN_INFO "%s: Soft Error\n", dev->name);
+
+ if(tp->ssb.Parm[0] & TRANSMIT_BEACON)
+ printk(KERN_INFO "%s: Transmit Beacon\n", dev->name);
+
+ if(tp->ssb.Parm[0] & SINGLE_STATION)
+ printk(KERN_INFO "%s: Single Station\n", dev->name);
+
+ /* Check if adapter has been closed */
+ if(tp->ssb.Parm[0] & ADAPTER_CLOSED)
+ {
+ printk(KERN_INFO "%s: Adapter closed (Reopening),"
+ "QueueSkb %d, CurrentRingStat %x\n",
+ dev->name, tp->QueueSkb, tp->CurrentRingStatus);
+ tp->AdapterOpenFlag = 0;
+ tms380tr_open_adapter(dev);
+ }
+
+ return;
+}
+
+/*
+ * Issued if adapter has encountered an unrecoverable hardware
+ * or software error.
+ */
+static void tms380tr_chk_irq(struct net_device *dev)
+{
+ int i;
+ unsigned short AdapterCheckBlock[4];
+ unsigned short ioaddr = dev->base_addr;
+ struct net_local *tp = (struct net_local *)dev->priv;
+
+ tp->AdapterOpenFlag = 0; /* Adapter closed now */
+
+ /* Page number of adapter memory */
+ outw(0x0001, ioaddr + SIFADX);
+ /* Address offset */
+ outw(CHECKADDR, ioaddr + SIFADR);
+
+ /* Reading 8 byte adapter check block. */
+ for(i = 0; i < 4; i++)
+ AdapterCheckBlock[i] = inw(ioaddr + SIFINC);
+
+ if(tms380tr_debug > 3)
+ {
+ printk("%s: AdapterCheckBlock: ", dev->name);
+ for (i = 0; i < 4; i++)
+ printk("%04X", AdapterCheckBlock[i]);
+ printk("\n");
+ }
+
+ switch(AdapterCheckBlock[0])
+ {
+ case DIO_PARITY:
+ printk(KERN_INFO "%s: DIO parity error\n", dev->name);
+ break;
+
+ case DMA_READ_ABORT:
+ printk(KERN_INFO "%s DMA read operation aborted:\n",
+ dev->name);
+ switch (AdapterCheckBlock[1])
+ {
+ case 0:
+ printk(KERN_INFO "Timeout\n");
+ printk(KERN_INFO "Address: %04X %04X\n",
+ AdapterCheckBlock[2],
+ AdapterCheckBlock[3]);
+ break;
+
+ case 1:
+ printk(KERN_INFO "Parity error\n");
+ printk(KERN_INFO "Address: %04X %04X\n",
+ AdapterCheckBlock[2],
+ AdapterCheckBlock[3]);
+ break;
+
+ case 2:
+ printk(KERN_INFO "Bus error\n");
+ printk(KERN_INFO "Address: %04X %04X\n",
+ AdapterCheckBlock[2],
+ AdapterCheckBlock[3]);
+ break;
+
+ default:
+ printk(KERN_INFO "Unknown error.\n");
+ break;
+ }
+ break;
+
+ case DMA_WRITE_ABORT:
+ printk(KERN_INFO "%s: DMA write operation aborted: \n",
+ dev->name);
+ switch (AdapterCheckBlock[1])
+ {
+ case 0:
+ printk(KERN_INFO "Timeout\n");
+ printk(KERN_INFO "Address: %04X %04X\n",
+ AdapterCheckBlock[2],
+ AdapterCheckBlock[3]);
+ break;
+
+ case 1:
+ printk(KERN_INFO "Parity error\n");
+ printk(KERN_INFO "Address: %04X %04X\n",
+ AdapterCheckBlock[2],
+ AdapterCheckBlock[3]);
+ break;
+
+ case 2:
+ printk(KERN_INFO "Bus error\n");
+ printk(KERN_INFO "Address: %04X %04X\n",
+ AdapterCheckBlock[2],
+ AdapterCheckBlock[3]);
+ break;
+
+ default:
+ printk(KERN_INFO "Unknown error.\n");
+ break;
+ }
+ break;
+
+ case ILLEGAL_OP_CODE:
+ printk("%s: Illegal operation code in firmware\n",
+ dev->name);
+ /* Parm[0-3]: adapter internal register R13-R15 */
+ break;
+
+ case PARITY_ERRORS:
+ printk("%s: Adapter internal bus parity error\n",
+ dev->name);
+ /* Parm[0-3]: adapter internal register R13-R15 */
+ break;
+
+ case RAM_DATA_ERROR:
+ printk("%s: RAM data error\n", dev->name);
+ /* Parm[0-1]: MSW/LSW address of RAM location. */
+ break;
+
+ case RAM_PARITY_ERROR:
+ printk("%s: RAM parity error\n", dev->name);
+ /* Parm[0-1]: MSW/LSW address of RAM location. */
+ break;
+
+ case RING_UNDERRUN:
+ printk("%s: Internal DMA underrun detected\n",
+ dev->name);
+ break;
+
+ case INVALID_IRQ:
+ printk("%s: Unrecognized interrupt detected\n",
+ dev->name);
+ /* Parm[0-3]: adapter internal register R13-R15 */
+ break;
+
+ case INVALID_ERROR_IRQ:
+ printk("%s: Unrecognized error interrupt detected\n",
+ dev->name);
+ /* Parm[0-3]: adapter internal register R13-R15 */
+ break;
+
+ case INVALID_XOP:
+ printk("%s: Unrecognized XOP request detected\n",
+ dev->name);
+ /* Parm[0-3]: adapter internal register R13-R15 */
+ break;
+
+ default:
+ printk("%s: Unknown status", dev->name);
+ break;
+ }
+
+ if(tms380tr_chipset_init(dev) == 1)
+ {
+ /* Restart of firmware successful */
+ tp->AdapterOpenFlag = 1;
+ }
+
+ return;
+}
+
+/*
+ * Internal adapter pointer to RAM data are copied from adapter into
+ * host system.
+ */
+static int tms380tr_read_ptr(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned short adapterram;
+
+ tms380tr_read_ram(dev, (unsigned char *)&tp->intptrs.BurnedInAddrPtr,
+ ADAPTER_INT_PTRS, 16);
+ tms380tr_read_ram(dev, (unsigned char *)&adapterram,
+ (unsigned short)SWAPB(tp->intptrs.AdapterRAMPtr), 2);
+
+ return SWAPB(adapterram);
+}
+
+/*
+ * Reads a number of bytes from adapter to system memory.
+ */
+static void tms380tr_read_ram(struct net_device *dev, unsigned char *Data,
+ unsigned short Address, int Length)
+{
+ int i;
+ unsigned short old_sifadx, old_sifadr, InWord;
+ unsigned short ioaddr = dev->base_addr;
+
+ /* Save the current values */
+ old_sifadx = inw(ioaddr + SIFADX);
+ old_sifadr = inw(ioaddr + SIFADR);
+
+ /* Page number of adapter memory */
+ outw(0x0001, ioaddr + SIFADX);
+ /* Address offset in adapter RAM */
+ outw(Address, ioaddr + SIFADR);
+
+ /* Copy len byte from adapter memory to system data area. */
+ i = 0;
+ for(;;)
+ {
+ InWord = inw(ioaddr + SIFINC);
+
+ *(Data + i) = HIBYTE(InWord); /* Write first byte */
+ if(++i == Length) /* All is done break */
+ break;
+
+ *(Data + i) = LOBYTE(InWord); /* Write second byte */
+ if (++i == Length) /* All is done break */
+ break;
+ }
+
+ /* Restore original values */
+ outw(old_sifadx, ioaddr + SIFADX);
+ outw(old_sifadr, ioaddr + SIFADR);
+
+ return;
+}
+
+/*
+ * Reads MAC address from adapter ROM.
+ */
+static void tms380tr_read_addr(struct net_device *dev, unsigned char *Address)
+{
+ int i, In;
+ unsigned short ioaddr = dev->base_addr;
+
+ /* Address: 0000:0000 */
+ outw(0, ioaddr + SIFADX);
+ outw(0, ioaddr + SIFADR);
+
+ /* Read six byte MAC address data */
+ for(i = 0; i < 6; i++)
+ {
+ In = inw(ioaddr + SIFINC);
+ *(Address + i) = (unsigned char)(In >> 8);
+ }
+
+ return;
+}
+
+/*
+ * Cancel all queued packets in the transmission queue.
+ */
+static void tms380tr_cancel_tx_queue(struct net_local* tp)
+{
+ TPL *tpl;
+ struct sk_buff *skb;
+
+ /*
+ * NOTE: There must not be an active TRANSMIT command pending, when
+ * this function is called.
+ */
+ if(tp->TransmitCommandActive)
+ return;
+
+ for(;;)
+ {
+ tpl = tp->TplBusy;
+ if(!tpl->BusyFlag)
+ break;
+ /* "Remove" TPL from busy list. */
+ tp->TplBusy = tpl->NextTPLPtr;
+ tms380tr_write_tpl_status(tpl, 0); /* Clear VALID bit */
+ tpl->BusyFlag = 0; /* "free" TPL */
+
+ printk(KERN_INFO "Cancel tx (%08lXh).\n", (unsigned long)tpl);
+
+ dev_kfree_skb(tpl->Skb);
+ }
+
+ for(;;)
+ {
+ skb = skb_dequeue(&tp->SendSkbQueue);
+ if(skb == NULL)
+ break;
+ tp->QueueSkb++;
+ dev_kfree_skb(skb);
+ }
+
+ return;
+}
+
+/*
+ * This function is called whenever a transmit interrupt is generated by the
+ * adapter. For a command complete interrupt, it is checked if we have to
+ * issue a new transmit command or not.
+ */
+static void tms380tr_tx_status_irq(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned char HighByte, HighAc, LowAc;
+ TPL *tpl;
+
+ /* NOTE: At this point the SSB from TRANSMIT STATUS is no longer
+ * available, because the CLEAR SSB command has already been issued.
+ *
+ * Process all complete transmissions.
+ */
+
+ for(;;)
+ {
+ tpl = tp->TplBusy;
+ if(!tpl->BusyFlag || (tpl->Status
+ & (TX_VALID | TX_FRAME_COMPLETE))
+ != TX_FRAME_COMPLETE)
+ {
+ break;
+ }
+
+ /* "Remove" TPL from busy list. */
+ tp->TplBusy = tpl->NextTPLPtr ;
+
+ /* Check the transmit status field only for directed frames*/
+ if(DIRECTED_FRAME(tpl) && (tpl->Status & TX_ERROR) == 0)
+ {
+ HighByte = GET_TRANSMIT_STATUS_HIGH_BYTE(tpl->Status);
+ HighAc = GET_FRAME_STATUS_HIGH_AC(HighByte);
+ LowAc = GET_FRAME_STATUS_LOW_AC(HighByte);
+
+ if((HighAc != LowAc) || (HighAc == AC_NOT_RECOGNIZED))
+ {
+ printk(KERN_INFO "%s: (DA=%08lX not recognized)",
+ dev->name,
+ *(unsigned long *)&tpl->MData[2+2]);
+ }
+ else
+ {
+ if(tms380tr_debug > 3)
+ printk("%s: Directed frame tx'd\n",
+ dev->name);
+ }
+ }
+ else
+ {
+ if(!DIRECTED_FRAME(tpl))
+ {
+ if(tms380tr_debug > 3)
+ printk("%s: Broadcast frame tx'd\n",
+ dev->name);
+ }
+ }
+
+ tp->MacStat.tx_packets++;
+ dev_kfree_skb(tpl->Skb);
+ tpl->BusyFlag = 0; /* "free" TPL */
+ }
+
+ dev->tbusy = 0;
+ if(tp->QueueSkb < MAX_TX_QUEUE)
+ tms380tr_hardware_send_packet(dev, tp);
+
+ return;
+}
+
+/*
+ * Called if a frame receive interrupt is generated by the adapter.
+ * Check if the frame is valid and indicate it to system.
+ */
+static void tms380tr_rcv_status_irq(struct net_device *dev)
+{
+ struct net_local *tp = (struct net_local *)dev->priv;
+ unsigned char *ReceiveDataPtr;
+ struct sk_buff *skb;
+ unsigned int Length, Length2;
+ RPL *rpl;
+ RPL *SaveHead;
+
+ /* NOTE: At this point the SSB from RECEIVE STATUS is no longer
+ * available, because the CLEAR SSB command has already been issued.
+ *
+ * Process all complete receives.
+ */
+
+ for(;;)
+ {
+ rpl = tp->RplHead;
+ if(rpl->Status & RX_VALID)
+ break; /* RPL still in use by adapter */
+
+ /* Forward RPLHead pointer to next list. */
+ SaveHead = tp->RplHead;
+ tp->RplHead = rpl->NextRPLPtr;
+
+ /* Get the frame size (Byte swap for Intel).
+ * Do this early (see workaround comment below)
+ */
+ Length = (unsigned short)SWAPB(rpl->FrameSize);
+
+ /* Check if the Frame_Start, Frame_End and
+ * Frame_Complete bits are set.
+ */
+ if((rpl->Status & VALID_SINGLE_BUFFER_FRAME)
+ == VALID_SINGLE_BUFFER_FRAME)
+ {
+ ReceiveDataPtr = rpl->MData;
+
+ /* Workaround for delayed write of FrameSize on ISA
+ * (FrameSize is false but valid-bit is reset)
+ * Frame size is set to zero when the RPL is freed.
+ * Length2 is there because there have also been
+ * cases where the FrameSize was partially written
+ */
+ Length2 = (unsigned short)SWAPB(rpl->FrameSize);
+
+ if(Length == 0 || Length != Length2)
+ {
+ tp->RplHead = SaveHead;
+ break; /* Return to tms380tr_interrupt */
+ }
+
+ /* Drop frames sent by myself */
+ if(tms380tr_chk_frame(dev, rpl->MData))
+ {
+ printk(KERN_INFO "%s: Received my own frame\n",
+ dev->name);
+ if(rpl->Skb != NULL)
+ dev_kfree_skb(rpl->Skb);
+ }
+ else
+ {
+ tms380tr_update_rcv_stats(tp,ReceiveDataPtr,Length);
+
+ if(tms380tr_debug > 3)
+ printk("%s: Packet Length %04X (%d)\n",
+ dev->name, Length, Length);
+
+ /* Indicate the received frame to system the
+ * adapter does the Source-Routing padding for
+ * us. See: OpenOptions in tms380tr_init_opb()
+ */
+ skb = rpl->Skb;
+ if(rpl->SkbStat == SKB_UNAVAILABLE)
+ {
+ /* Try again to allocate skb */
+ skb = dev_alloc_skb(tp->MaxPacketSize);
+ if(skb == NULL)
+ {
+ /* Update Stats ?? */
+ }
+ else
+ {
+ skb->dev = dev;
+ skb_put(skb, tp->MaxPacketSize);
+ rpl->SkbStat = SKB_DATA_COPY;
+ ReceiveDataPtr = rpl->MData;
+ }
+ }
+
+ if(rpl->SkbStat == SKB_DATA_COPY
+ || rpl->SkbStat == SKB_DMA_DIRECT)
+ {
+ if(rpl->SkbStat == SKB_DATA_COPY)
+ memmove(skb->data, ReceiveDataPtr, Length);
+
+ /* Deliver frame to system */
+ rpl->Skb = NULL;
+ skb_trim(skb,Length);
+ skb->protocol = tr_type_trans(skb,dev);
+ netif_rx(skb);
+ }
+ }
+ }
+ else /* Invalid frame */
+ {
+ if(rpl->Skb != NULL)
+ dev_kfree_skb(rpl->Skb);
+
+ /* Skip list. */
+ if(rpl->Status & RX_START_FRAME)
+ /* Frame start bit is set -> overflow. */
+ tp->MacStat.rx_errors++;
+ }
+
+ /* Allocate new skb for rpl */
+ rpl->Skb = dev_alloc_skb(tp->MaxPacketSize);
+
+ /* skb == NULL ? then use local buffer */
+ if(rpl->Skb == NULL)
+ {
+ rpl->SkbStat = SKB_UNAVAILABLE;
+ rpl->FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[rpl->RPLIndex]));
+ rpl->MData = tp->LocalRxBuffers[rpl->RPLIndex];
+ }
+ else /* skb != NULL */
+ {
+ rpl->Skb->dev = dev;
+ skb_put(rpl->Skb, tp->MaxPacketSize);
+
+ /* Data unreachable for DMA ? then use local buffer */
+ if(tp->CardType->type == TMS_ISA && virt_to_bus(rpl->Skb->data) + tp->MaxPacketSize
+ > ISA_MAX_ADDRESS)
+ {
+ rpl->SkbStat = SKB_DATA_COPY;
+ rpl->FragList[0].DataAddr = htonl(virt_to_bus(tp->LocalRxBuffers[rpl->RPLIndex]));
+ rpl->MData = tp->LocalRxBuffers[rpl->RPLIndex];
+ }
+ else
+ {
+ /* DMA directly in skb->data */
+ rpl->SkbStat = SKB_DMA_DIRECT;
+ rpl->FragList[0].DataAddr = htonl(virt_to_bus(rpl->Skb->data));
+ rpl->MData = rpl->Skb->data;
+ }
+ }
+
+ rpl->FragList[0].DataCount = SWAPB(tp->MaxPacketSize);
+ rpl->FrameSize = 0;
+
+ /* Pass the last RPL back to the adapter */
+ tp->RplTail->FrameSize = 0;
+
+ /* Reset the CSTAT field in the list. */
+ tms380tr_write_rpl_status(tp->RplTail, RX_VALID | RX_FRAME_IRQ);
+
+ /* Current RPL becomes last one in list. */
+ tp->RplTail = tp->RplTail->NextRPLPtr;
+
+ /* Inform adapter about RPL valid. */
+ tms380tr_exec_sifcmd(dev, CMD_RX_VALID);
+ }
+
+ return;
+}
+
+/*
+ * This function should be used whenever the status of any RPL must be
+ * modified by the driver, because the compiler may otherwise change the
+ * order of instructions such that writing the RPL status may be executed
+ * at an undesireable time. When this function is used, the status is
+ * always written when the function is called.
+ */
+static void tms380tr_write_rpl_status(RPL *rpl, unsigned int Status)
+{
+ rpl->Status = Status;
+
+ return;
+}
+
+/*
+ * The function updates the statistic counters in mac->MacStat.
+ * It differtiates between directed and broadcast/multicast ( ==functional)
+ * frames.
+ */
+static void tms380tr_update_rcv_stats(struct net_local *tp, unsigned char DataPtr[],
+ unsigned int Length)
+{
+ tp->MacStat.rx_packets++;
+ tp->MacStat.rx_bytes += Length;
+
+ /* Test functional bit */
+ if(DataPtr[2] & GROUP_BIT)
+ tp->MacStat.multicast++;
+
+ return;
+}
+
+/*
+ * Check if it is a frame of myself. Compare source address with my current
+ * address in reverse direction, and mask out the TR_RII.
+ */
+static unsigned char tms380tr_chk_frame(struct net_device *dev, unsigned char *Addr)
+{
+ int i;
+
+ for(i = 5; i > 0; i--)
+ {
+ if(Addr[8 + i] != dev->dev_addr[i])
+ return (0);
+ }
+
+ /* Mask out RIF bit. */
+ if((Addr[8] & ~TR_RII) != (unsigned char)(dev->dev_addr[0]))
+ return (0);
+
+ return (1); /* It is my frame. */
+}
+
+#if TMS380TR_DEBUG > 0
+/*
+ * Dump Packet (data)
+ */
+static void tms380tr_dump(unsigned char *Data, int length)
+{
+ int i, j;
+
+ for (i = 0, j = 0; i < length / 8; i++, j += 8)
+ {
+ printk(KERN_DEBUG "%02x %02x %02x %02x %02x %02x %02x %02x\n",
+ Data[j+0],Data[j+1],Data[j+2],Data[j+3],
+ Data[j+4],Data[j+5],Data[j+6],Data[j+7]);
+ }
+
+ return;
+}
+#endif
+
+#ifdef MODULE
+
+static struct net_device* dev_tms380tr[TMS380TR_MAX_ADAPTERS];
+static int io[TMS380TR_MAX_ADAPTERS] = { 0, 0 };
+static int irq[TMS380TR_MAX_ADAPTERS] = { 0, 0 };
+static int mem[TMS380TR_MAX_ADAPTERS] = { 0, 0 };
+
+MODULE_PARM(io, "1-" __MODULE_STRING(TMS380TR_MAX_ADAPTERS) "i");
+MODULE_PARM(irq, "1-" __MODULE_STRING(TMS380TR_MAX_ADAPTERS) "i");
+MODULE_PARM(mem, "1-" __MODULE_STRING(TMS380TR_MAX_ADAPTERS) "i");
+
+int init_module(void)
+{
+ int i;
+
+ for(i = 0; i < TMS380TR_MAX_ADAPTERS; i++)
+ {
+ irq[i] = 0;
+ mem[i] = 0;
+ dev_tms380tr[i] = NULL;
+ dev_tms380tr[i] = init_trdev(dev_tms380tr[i], 0);
+ if(dev_tms380tr[i] == NULL)
+ return (-ENOMEM);
+
+ dev_tms380tr[i]->base_addr = io[i];
+ dev_tms380tr[i]->irq = irq[i];
+ dev_tms380tr[i]->mem_start = mem[i];
+ dev_tms380tr[i]->init = &tms380tr_probe;
+
+ if(register_trdev(dev_tms380tr[i]) != 0)
+ {
+ kfree_s(dev_tms380tr[i], sizeof(struct net_device));
+ dev_tms380tr[i] = NULL;
+ if(i == 0)
+ {
+ printk("tms380tr: register_trdev() returned non-zero.\n");
+ return (-EIO);
+ }
+ else
+ return (0);
+ }
+ }
+
+ return (0);
+}
+
+void cleanup_module(void)
+{
+ int i;
+
+ for(i = 0; i < TMS380TR_MAX_ADAPTERS; i++)
+ {
+ if(dev_tms380tr[i])
+ {
+ unregister_trdev(dev_tms380tr[i]);
+ release_region(dev_tms380tr[i]->base_addr, TMS380TR_IO_EXTENT);
+ if(dev_tms380tr[i]->irq)
+ free_irq(dev_tms380tr[i]->irq, dev_tms380tr[i]);
+ if(dev_tms380tr[i]->dma > 0)
+ free_dma(dev_tms380tr[i]->dma);
+ if(dev_tms380tr[i]->priv)
+ kfree_s(dev_tms380tr[i]->priv, sizeof(struct net_local));
+ kfree_s(dev_tms380tr[i], sizeof(struct net_device));
+ dev_tms380tr[i] = NULL;
+ }
+ }
+}
+#endif /* MODULE */
diff --git a/drivers/net/tokenring/tms380tr.h b/drivers/net/tokenring/tms380tr.h
new file mode 100644
index 000000000..7896be0a0
--- /dev/null
+++ b/drivers/net/tokenring/tms380tr.h
@@ -0,0 +1,1109 @@
+/* tms380tr.h: TI TMS380 Token Ring driver for Linux
+ *
+ * Authors:
+ * - Christoph Goos <cgoos@syskonnect.de>
+ */
+
+#ifndef __LINUX_TMS380TR_H
+#define __LINUX_TMS380TR_H
+
+#ifdef __KERNEL__
+
+#define TMS380TR_MAX_ADAPTERS 7
+
+#define SEND_TIMEOUT 10*HZ
+
+#define TR_RCF_LONGEST_FRAME_MASK 0x0070
+#define TR_RCF_FRAME4K 0x0030
+
+/*------------------------------------------------------------------*/
+/* Bit order for adapter communication with DMA */
+/* -------------------------------------------------------------- */
+/* Bit 8 | 9| 10| 11|| 12| 13| 14| 15|| 0| 1| 2| 3|| 4| 5| 6| 7| */
+/* -------------------------------------------------------------- */
+/* The bytes in a word must be byte swapped. Also, if a double */
+/* word is used for storage, then the words, as well as the bytes, */
+/* must be swapped. */
+/* Bit order for adapter communication with DIO */
+/* -------------------------------------------------------------- */
+/* Bit 0 | 1| 2| 3|| 4| 5| 6| 7|| 8| 9| 10| 11|| 12| 13| 14| 15| */
+/* -------------------------------------------------------------- */
+/*------------------------------------------------------------------*/
+
+/* Swap bytes of a word. */
+#define SWAPB(x) (((unsigned short)((x) << 8)) | ((unsigned short)((x) >> 8)))
+
+/* Swap words of a long. */
+#define SWAPW(x) (((x) << 16) | ((x) >> 16))
+
+/* Get the low byte of a word. */
+#define LOBYTE(w) ((unsigned char)(w))
+
+/* Get the high byte of a word. */
+#define HIBYTE(w) ((unsigned char)((unsigned short)(w) >> 8))
+
+/* Get the low word of a long. */
+#define LOWORD(l) ((unsigned short)(l))
+
+/* Get the high word of a long. */
+#define HIWORD(l) ((unsigned short)((unsigned long)(l) >> 16))
+
+
+
+/* Token ring adapter I/O addresses for normal mode. */
+#define SIFDAT 0L /* SIF/DMA data. */
+#define SIFINC 2L /* IO Word data with auto increment. */
+#define SIFINH 3L /* IO Byte data with auto increment. */
+#define SIFADR 4L /* SIF/DMA Address. */
+#define SIFCMD 6L /* SIF Command. */
+#define SIFSTS 6L /* SIF Status. */
+#define SIFACL 8L /* SIF Adapter Control Register. */
+#define SIFADD 10L /* SIF/DMA Address. */
+#define SIFADX 12L
+#define DMALEN 14L /* SIF DMA length. */
+#define POSREG 16L /* Adapter Program Option Select (POS)
+ * Register: base IO address + 16 byte.
+ */
+#define POSREG_2 24L /* only for TR4/16+ adapter
+ * base IO address + 24 byte.
+ */
+
+
+/* SIFCMD command codes (high-low) */
+#define CMD_INTERRUPT_ADAPTER 0x8000 /* Cause internal adapter interrupt */
+#define CMD_ADAPTER_RESET 0x4000 /* Hardware reset of adapter */
+#define CMD_SSB_CLEAR 0x2000 /* Acknowledge to adapter to
+ * system interrupts.
+ */
+#define CMD_EXECUTE 0x1000 /* Execute SCB command */
+#define CMD_SCB_REQUEST 0x0800 /* Request adapter to interrupt
+ * system when SCB is available for
+ * another command.
+ */
+#define CMD_RX_CONTINUE 0x0400 /* Continue receive after odd pointer
+ * stop. (odd pointer receive method)
+ */
+#define CMD_RX_VALID 0x0200 /* Now actual RPL is valid. */
+#define CMD_TX_VALID 0x0100 /* Now actual TPL is valid. (valid
+ * bit receive/transmit method)
+ */
+#define CMD_SYSTEM_IRQ 0x0080 /* Adapter-to-attached-system
+ * interrupt is reset.
+ */
+#define CMD_CLEAR_SYSTEM_IRQ 0x0080 /* Clear SYSTEM_INTERRUPT bit.
+ * (write: 1=ignore, 0=reset)
+ */
+#define EXEC_SOFT_RESET 0xFF00 /* adapter soft reset. (restart
+ * adapter after hardware reset)
+ */
+
+
+/* ACL commands (high-low) */
+#define ACL_SWHLDA 0x0800 /* Software hold acknowledge. */
+#define ACL_SWDDIR 0x0400 /* Data transfer direction. */
+#define ACL_SWHRQ 0x0200 /* Pseudo DMA operation. */
+#define ACL_PSDMAEN 0x0100 /* Enable pseudo system DMA. */
+#define ACL_ARESET 0x0080 /* Adapter hardware reset command.
+ * (held in reset condition as
+ * long as bit is set)
+ */
+#define ACL_CPHALT 0x0040 /* Communication processor halt.
+ * (can only be set while ACL_ARESET
+ * bit is set; prevents adapter
+ * processor from executing code while
+ * downloading firmware)
+ */
+#define ACL_BOOT 0x0020
+#define ACL_SINTEN 0x0008 /* System interrupt enable/disable
+ * (1/0): can be written if ACL_ARESET
+ * is zero.
+ */
+#define ACL_SPEED4 0x0003
+#define ACL_SPEED16 0x0001
+#define PS_DMA_MASK (ACL_SWHRQ | ACL_PSDMAEN)
+
+
+/* SIFSTS register return codes (high-low) */
+#define STS_SYSTEM_IRQ 0x0080 /* Adapter-to-attached-system
+ * interrupt is valid.
+ */
+#define STS_INITIALIZE 0x0040 /* INITIALIZE status. (ready to
+ * initialize)
+ */
+#define STS_TEST 0x0020 /* TEST status. (BUD not completed) */
+#define STS_ERROR 0x0010 /* ERROR status. (unrecoverable
+ * HW error occurred)
+ */
+#define STS_MASK 0x00F0 /* Mask interesting status bits. */
+#define STS_ERROR_MASK 0x000F /* Get Error Code by masking the
+ * interrupt code bits.
+ */
+#define ADAPTER_INT_PTRS 0x0A00 /* Address offset of adapter internal
+ * pointers 01:0a00 (high-low) have to
+ * be read after init and before open.
+ */
+
+
+/* Interrupt Codes (only MAC IRQs) */
+#define STS_IRQ_ADAPTER_CHECK 0x0000 /* unrecoverable hardware or
+ * software error.
+ */
+#define STS_IRQ_RING_STATUS 0x0004 /* SSB is updated with ring status. */
+#define STS_IRQ_SCB_CLEAR 0x0006 /* SCB clear, following an
+ * SCB_REQUEST IRQ.
+ */
+#define STS_IRQ_COMMAND_STATUS 0x0008 /* SSB is updated with command
+ * status.
+ */
+#define STS_IRQ_RECEIVE_STATUS 0x000A /* SSB is updated with receive
+ * status.
+ */
+#define STS_IRQ_TRANSMIT_STATUS 0x000C /* SSB is updated with transmit
+ * status
+ */
+#define STS_IRQ_MASK 0x000F /* = STS_ERROR_MASK. */
+
+
+/* TRANSMIT_STATUS completion code: (SSB.Parm[0]) */
+#define COMMAND_COMPLETE 0x0080 /* TRANSMIT command completed
+ * (avoid this!) issue another transmit
+ * to send additional frames.
+ */
+#define FRAME_COMPLETE 0x0040 /* Frame has been transmitted;
+ * INTERRUPT_FRAME bit was set in the
+ * CSTAT request; indication of possibly
+ * more than one frame transmissions!
+ * SSB.Parm[0-1]: 32 bit pointer to
+ * TPL of last frame.
+ */
+#define LIST_ERROR 0x0020 /* Error in one of the TPLs that
+ * compose the frame; TRANSMIT
+ * terminated; Parm[1-2]: 32 bit pointer
+ * to TPL which starts the error
+ * frame; error details in bits 8-13.
+ * (14?)
+ */
+#define FRAME_SIZE_ERROR 0x8000 /* FRAME_SIZE does not equal the sum of
+ * the valid DATA_COUNT fields;
+ * FRAME_SIZE less than header plus
+ * information field. (15 bytes +
+ * routing field) Or if FRAME_SIZE
+ * was specified as zero in one list.
+ */
+#define TX_THRESHOLD 0x4000 /* FRAME_SIZE greater than (BUFFER_SIZE
+ * - 9) * TX_BUF_MAX.
+ */
+#define ODD_ADDRESS 0x2000 /* Odd forward pointer value is
+ * read on a list without END_FRAME
+ * indication.
+ */
+#define FRAME_ERROR 0x1000 /* START_FRAME bit is (not) anticipated,
+ * but (not) set.
+ */
+#define ACCESS_PRIORITY_ERROR 0x0800 /* Access priority requested has not
+ * been allowed.
+ */
+#define UNENABLED_MAC_FRAME 0x0400 /* MAC frame has source class of zero
+ * or MAC frame PCF ATTN field is
+ * greater than one.
+ */
+#define ILLEGAL_FRAME_FORMAT 0x0200 /* Bit 0 or FC field was set to one. */
+
+
+/*
+ * Since we need to support some functions even if the adapter is in a
+ * CLOSED state, we have a (pseudo-) command queue which holds commands
+ * that are outstandig to be executed.
+ *
+ * Each time a command completes, an interrupt occurs and the next
+ * command is executed. The command queue is actually a simple word with
+ * a bit for each outstandig command. Therefore the commands will not be
+ * executed in the order they have been queued.
+ *
+ * The following defines the command code bits and the command queue:
+ */
+#define OC_OPEN 0x0001 /* OPEN command */
+#define OC_TRANSMIT 0x0002 /* TRANSMIT command */
+#define OC_TRANSMIT_HALT 0x0004 /* TRANSMIT_HALT command */
+#define OC_RECEIVE 0x0008 /* RECEIVE command */
+#define OC_CLOSE 0x0010 /* CLOSE command */
+#define OC_SET_GROUP_ADDR 0x0020 /* SET_GROUP_ADDR command */
+#define OC_SET_FUNCT_ADDR 0x0040 /* SET_FUNCT_ADDR command */
+#define OC_READ_ERROR_LOG 0x0080 /* READ_ERROR_LOG command */
+#define OC_READ_ADAPTER 0x0100 /* READ_ADAPTER command */
+#define OC_MODIFY_OPEN_PARMS 0x0400 /* MODIFY_OPEN_PARMS command */
+#define OC_RESTORE_OPEN_PARMS 0x0800 /* RESTORE_OPEN_PARMS command */
+#define OC_SET_FIRST_16_GROUP 0x1000 /* SET_FIRST_16_GROUP command */
+#define OC_SET_BRIDGE_PARMS 0x2000 /* SET_BRIDGE_PARMS command */
+#define OC_CONFIG_BRIDGE_PARMS 0x4000 /* CONFIG_BRIDGE_PARMS command */
+
+#define OPEN 0x0300 /* C: open command. S: completion. */
+#define TRANSMIT 0x0400 /* C: transmit command. S: completion
+ * status. (reject: COMMAND_REJECT if
+ * adapter not opened, TRANSMIT already
+ * issued or address passed in the SCB
+ * not word aligned)
+ */
+#define TRANSMIT_HALT 0x0500 /* C: interrupt TX TPL chain; if no
+ * TRANSMIT command issued, the command
+ * is ignored. (completion with TRANSMIT
+ * status (0x0400)!)
+ */
+#define RECEIVE 0x0600 /* C: receive command. S: completion
+ * status. (reject: COMMAND_REJECT if
+ * adapter not opened, RECEIVE already
+ * issued or address passed in the SCB
+ * not word aligned)
+ */
+#define CLOSE 0x0700 /* C: close adapter. S: completion.
+ * (COMMAND_REJECT if adapter not open)
+ */
+#define SET_GROUP_ADDR 0x0800 /* C: alter adapter group address after
+ * OPEN. S: completion. (COMMAND_REJECT
+ * if adapter not open)
+ */
+#define SET_FUNCT_ADDR 0x0900 /* C: alter adapter functional address
+ * after OPEN. S: completion.
+ * (COMMAND_REJECT if adapter not open)
+ */
+#define READ_ERROR_LOG 0x0A00 /* C: read adapter error counters.
+ * S: completion. (command ignored
+ * if adapter not open!)
+ */
+#define READ_ADAPTER 0x0B00 /* C: read data from adapter memory.
+ * (important: after init and before
+ * open!) S: completion. (ADAPTER_CHECK
+ * interrupt if undefined storage area
+ * read)
+ */
+#define MODIFY_OPEN_PARMS 0x0D00 /* C: modify some adapter operational
+ * parameters. (bit correspondend to
+ * WRAP_INTERFACE is ignored)
+ * S: completion. (reject:
+ * COMMAND_REJECT)
+ */
+#define RESTORE_OPEN_PARMS 0x0E00 /* C: modify some adapter operational
+ * parameters. (bit correspondend
+ * to WRAP_INTERFACE is ignored)
+ * S: completion. (reject:
+ * COMMAND_REJECT)
+ */
+#define SET_FIRST_16_GROUP 0x0F00 /* C: alter the first two bytes in
+ * adapter group address.
+ * S: completion. (reject:
+ * COMMAND_REJECT)
+ */
+#define SET_BRIDGE_PARMS 0x1000 /* C: values and conditions for the
+ * adapter hardware to use when frames
+ * are copied for forwarding.
+ * S: completion. (reject:
+ * COMMAND_REJECT)
+ */
+#define CONFIG_BRIDGE_PARMS 0x1100 /* C: ..
+ * S: completion. (reject:
+ * COMMAND_REJECT)
+ */
+
+#define SPEED_4 4
+#define SPEED_16 16 /* Default transmission speed */
+
+
+/* Initialization Parameter Block (IPB); word alignment necessary! */
+#define BURST_SIZE 0x0018 /* Default burst size */
+#define BURST_MODE 0x9F00 /* Burst mode enable */
+#define DMA_RETRIES 0x0505 /* Magic DMA retry number... */
+
+#define CYCLE_TIME 3 /* Default AT-bus cycle time: 500 ns
+ * (later adapter version: fix cycle time!)
+ */
+#define LINE_SPEED_BIT 0x80
+
+/* Macro definition for the wait function. */
+#define ONE_SECOND_TICKS 1000000
+#define HALF_SECOND (ONE_SECOND_TICKS / 2)
+#define ONE_SECOND (ONE_SECOND_TICKS)
+#define TWO_SECONDS (ONE_SECOND_TICKS * 2)
+#define THREE_SECONDS (ONE_SECOND_TICKS * 3)
+#define FOUR_SECONDS (ONE_SECOND_TICKS * 4)
+#define FIVE_SECONDS (ONE_SECOND_TICKS * 5)
+
+#define BUFFER_SIZE 2048 /* Buffers on Adapter */
+
+#pragma pack(1)
+typedef struct {
+ unsigned short Init_Options; /* Initialize with burst mode;
+ * LLC disabled. (MAC only)
+ */
+
+ /* Interrupt vectors the adapter places on attached system bus. */
+ unsigned char CMD_Status_IV; /* Interrupt vector: command status. */
+ unsigned char TX_IV; /* Interrupt vector: transmit. */
+ unsigned char RX_IV; /* Interrupt vector: receive. */
+ unsigned char Ring_Status_IV; /* Interrupt vector: ring status. */
+ unsigned char SCB_Clear_IV; /* Interrupt vector: SCB clear. */
+ unsigned char Adapter_CHK_IV; /* Interrupt vector: adapter check. */
+
+ unsigned short RX_Burst_Size; /* Max. number of transfer cycles. */
+ unsigned short TX_Burst_Size; /* During DMA burst; even value! */
+ unsigned short DMA_Abort_Thrhld; /* Number of DMA retries. */
+
+ unsigned long SCB_Addr; /* SCB address: even, word aligned, high-low. */
+ unsigned long SSB_Addr; /* SSB address: even, word aligned, high-low. */
+} IPB, *IPB_Ptr;
+#pragma pack()
+
+/*
+ * OPEN Command Parameter List (OCPL) (can be reused, if the adapter has to
+ * be reopened)
+ */
+#define BUFFER_SIZE 2048 /* Buffers on Adapter. */
+#define TPL_SIZE 8+6*TX_FRAG_NUM /* Depending on fragments per TPL. */
+#define RPL_SIZE 14 /* (with TI firmware v2.26 handling
+ * up to nine fragments possible)
+ */
+#define TX_BUF_MIN 20 /* ??? (Stephan: calculation with */
+#define TX_BUF_MAX 40 /* BUFFER_SIZE and MAX_FRAME_SIZE) ???
+ */
+#define DISABLE_EARLY_TOKEN_RELEASE 0x1000
+
+/* OPEN Options (high-low) */
+#define WRAP_INTERFACE 0x0080 /* Inserting omitted for test
+ * purposes; transmit data appears
+ * as receive data. (usefull for
+ * testing; change: CLOSE necessary)
+ */
+#define DISABLE_HARD_ERROR 0x0040 /* On HARD_ERROR & TRANSMIT_BEACON
+ * no RING.STATUS interrupt.
+ */
+#define DISABLE_SOFT_ERROR 0x0020 /* On SOFT_ERROR, no RING.STATUS
+ * interrupt.
+ */
+#define PASS_ADAPTER_MAC_FRAMES 0x0010 /* Passing unsupported MAC frames
+ * to system.
+ */
+#define PASS_ATTENTION_FRAMES 0x0008 /* All changed attention MAC frames are
+ * passed to the system.
+ */
+#define PAD_ROUTING_FIELD 0x0004 /* Routing field is padded to 18
+ * bytes.
+ */
+#define FRAME_HOLD 0x0002 /* Adapter waits for entire frame before
+ * initiating DMA transfer; otherwise:
+ * DMA transfer initiation if internal
+ * buffer filled.
+ */
+#define CONTENDER 0x0001 /* Adapter participates in the monitor
+ * contention process.
+ */
+#define PASS_BEACON_MAC_FRAMES 0x8000 /* Adapter passes beacon MAC frames
+ * to the system.
+ */
+#define EARLY_TOKEN_RELEASE 0x1000 /* Only valid in 16 Mbps operation;
+ * 0 = ETR. (no effect in 4 Mbps
+ * operation)
+ */
+#define COPY_ALL_MAC_FRAMES 0x0400 /* All MAC frames are copied to
+ * the system. (after OPEN: duplicate
+ * address test (DAT) MAC frame is
+ * first received frame copied to the
+ * system)
+ */
+#define COPY_ALL_NON_MAC_FRAMES 0x0200 /* All non MAC frames are copied to
+ * the system.
+ */
+#define PASS_FIRST_BUF_ONLY 0x0100 /* Passes only first internal buffer
+ * of each received frame; FrameSize
+ * of RPLs must contain internal
+ * BUFFER_SIZE bits for promiscous mode.
+ */
+#define ENABLE_FULL_DUPLEX_SELECTION 0x2000 /* Enable the use of full-duplex
+ * settings with bits in byte 22 in
+ * ocpl. (new feature in firmware
+ * version 3.09)
+ */
+
+/* Full-duplex settings */
+#define OPEN_FULL_DUPLEX_OFF 0x0000
+#define OPEN_FULL_DUPLEX_ON 0x00c0
+#define OPEN_FULL_DUPLEX_AUTO 0x0080
+
+#define PROD_ID_SIZE 18 /* Length of product ID. */
+
+#define TX_FRAG_NUM 3 /* Number of fragments used in one TPL. */
+#define TX_MORE_FRAGMENTS 0x8000 /* Bit set in DataCount to indicate more
+ * fragments following.
+ */
+
+#define ISA_MAX_ADDRESS 0x00ffffff
+
+#pragma pack(1)
+typedef struct {
+ unsigned short OPENOptions;
+ unsigned char NodeAddr[6]; /* Adapter node address; use ROM
+ * address
+ */
+ unsigned long GroupAddr; /* Multicast: high order
+ * bytes = 0xC000
+ */
+ unsigned long FunctAddr; /* High order bytes = 0xC000 */
+ unsigned short RxListSize; /* RPL size: 0 (=26), 14, 20 or
+ * 26 bytes read by the adapter.
+ * (Depending on the number of
+ * fragments/list)
+ */
+ unsigned short TxListSize; /* TPL size */
+ unsigned short BufSize; /* Is automatically rounded up to the
+ * nearest nK boundary.
+ */
+ unsigned short FullDuplex;
+ unsigned short Reserved;
+ unsigned char TXBufMin; /* Number of adapter buffers reserved
+ * for transmission a minimum of 2
+ * buffers must be allocated.
+ */
+ unsigned char TXBufMax; /* Maximum number of adapter buffers
+ * for transmit; a minimum of 2 buffers
+ * must be available for receive.
+ * Default: 6
+ */
+ unsigned short ProdIDAddr[2]; /* Pointer to product ID. */
+} OPB, *OPB_Ptr;
+#pragma pack()
+
+/*
+ * SCB: adapter commands enabled by the host system started by writing
+ * CMD_INTERRUPT_ADAPTER | CMD_EXECUTE (|SCB_REQUEST) to the SIFCMD IO
+ * register. (special case: | CMD_SYSTEM_IRQ for initialization)
+ */
+#pragma pack(1)
+typedef struct {
+ unsigned short CMD; /* Command code */
+ unsigned short Parm[2]; /* Pointer to Command Parameter Block */
+} SCB; /* System Command Block (32 bit physical address; big endian)*/
+#pragma pack()
+
+/*
+ * SSB: adapter command return status can be evaluated after COMMAND_STATUS
+ * adapter to system interrupt after reading SSB, the availability of the SSB
+ * has to be told the adapter by writing CMD_INTERRUPT_ADAPTER | CMD_SSB_CLEAR
+ * in the SIFCMD IO register.
+ */
+#pragma pack(1)
+typedef struct {
+ unsigned short STS; /* Status code */
+ unsigned short Parm[3]; /* Parameter or pointer to Status Parameter
+ * Block.
+ */
+} SSB; /* System Status Block (big endian - physical address) */
+#pragma pack()
+
+typedef struct {
+ unsigned short BurnedInAddrPtr; /* Pointer to adapter burned in
+ * address. (BIA)
+ */
+ unsigned short SoftwareLevelPtr;/* Pointer to software level data. */
+ unsigned short AdapterAddrPtr; /* Pointer to adapter addresses. */
+ unsigned short AdapterParmsPtr; /* Pointer to adapter parameters. */
+ unsigned short MACBufferPtr; /* Pointer to MAC buffer. (internal) */
+ unsigned short LLCCountersPtr; /* Pointer to LLC counters. */
+ unsigned short SpeedFlagPtr; /* Pointer to data rate flag.
+ * (4/16 Mbps)
+ */
+ unsigned short AdapterRAMPtr; /* Pointer to adapter RAM found. (KB) */
+} INTPTRS; /* Adapter internal pointers */
+
+#pragma pack(1)
+typedef struct {
+ unsigned char Line_Error; /* Line error: code violation in
+ * frame or in a token, or FCS error.
+ */
+ unsigned char Internal_Error; /* IBM specific. (Reserved_1) */
+ unsigned char Burst_Error;
+ unsigned char ARI_FCI_Error; /* ARI/FCI bit zero in AMP or
+ * SMP MAC frame.
+ */
+ unsigned char AbortDelimeters; /* IBM specific. (Reserved_2) */
+ unsigned char Reserved_3;
+ unsigned char Lost_Frame_Error; /* Receive of end of transmitted
+ * frame failed.
+ */
+ unsigned char Rx_Congest_Error; /* Adapter in repeat mode has not
+ * enough buffer space to copy incoming
+ * frame.
+ */
+ unsigned char Frame_Copied_Error;/* ARI bit not zero in frame
+ * addressed to adapter.
+ */
+ unsigned char Frequency_Error; /* IBM specific. (Reserved_4) */
+ unsigned char Token_Error; /* (active only in monitor station) */
+ unsigned char Reserved_5;
+ unsigned char DMA_Bus_Error; /* DMA bus errors not exceeding the
+ * abort thresholds.
+ */
+ unsigned char DMA_Parity_Error; /* DMA parity errors not exceeding
+ * the abort thresholds.
+ */
+} ERRORTAB; /* Adapter error counters */
+#pragma pack()
+
+
+/*--------------------- Send and Receive definitions -------------------*/
+#pragma pack(1)
+typedef struct {
+ unsigned short DataCount; /* Value 0, even and odd values are
+ * permitted; value is unaltered most
+ * significant bit set: following
+ * fragments last fragment: most
+ * significant bit is not evaluated.
+ * (???)
+ */
+ unsigned long DataAddr; /* Pointer to frame data fragment;
+ * even or odd.
+ */
+} Fragment;
+#pragma pack()
+
+#define MAX_FRAG_NUMBERS 9 /* Maximal number of fragments possible to use
+ * in one RPL/TPL. (depending on TI firmware
+ * version)
+ */
+#define MAX_TX_QUEUE 10 /* Maximal number of skb's queued in driver. */
+
+/*
+ * AC (1), FC (1), Dst (6), Src (6), RIF (18), Data (4472) = 4504
+ * The packet size can be one of the follows: 548, 1502, 2084, 4504, 8176,
+ * 11439, 17832. Refer to TMS380 Second Generation Token Ring User's Guide
+ * Page 2-27.
+ */
+#define HEADER_SIZE (1 + 1 + 6 + 6)
+#define SRC_SIZE 18
+#define MIN_DATA_SIZE 516
+#define DEFAULT_DATA_SIZE 4472
+#define MAX_DATA_SIZE 17800
+
+#define DEFAULT_PACKET_SIZE (HEADER_SIZE + SRC_SIZE + DEFAULT_DATA_SIZE)
+#define MIN_PACKET_SIZE (HEADER_SIZE + SRC_SIZE + MIN_DATA_SIZE)
+#define MAX_PACKET_SIZE (HEADER_SIZE + SRC_SIZE + MAX_DATA_SIZE)
+
+/*
+ * Macros to deal with the frame status field.
+ */
+#define AC_NOT_RECOGNIZED 0x00
+#define GROUP_BIT 0x80
+#define GET_TRANSMIT_STATUS_HIGH_BYTE(Ts) ((unsigned char)((Ts) >> 8))
+#define GET_FRAME_STATUS_HIGH_AC(Fs) ((unsigned char)(((Fs) & 0xC0) >> 6))
+#define GET_FRAME_STATUS_LOW_AC(Fs) ((unsigned char)(((Fs) & 0x0C) >> 2))
+#define DIRECTED_FRAME(Context) (!((Context)->MData[2] & GROUP_BIT))
+
+
+/*--------------------- Send Functions ---------------------------------*/
+/* define TX_CSTAT _REQUEST (R) and _COMPLETE (C) values (high-low) */
+
+#define TX_VALID 0x0080 /* R: set via TRANSMIT.VALID interrupt.
+ * C: always reset to zero!
+ */
+#define TX_FRAME_COMPLETE 0x0040 /* R: must be reset to zero.
+ * C: set to one.
+ */
+#define TX_START_FRAME 0x0020 /* R: start of a frame: 1
+ * C: unchanged.
+ */
+#define TX_END_FRAME 0x0010 /* R: end of a frame: 1
+ * C: unchanged.
+ */
+#define TX_FRAME_IRQ 0x0008 /* R: request interrupt generation
+ * after transmission.
+ * C: unchanged.
+ */
+#define TX_ERROR 0x0004 /* R: reserved.
+ * C: set to one if Error occurred.
+ */
+#define TX_INTERFRAME_WAIT 0x0004
+#define TX_PASS_CRC 0x0002 /* R: set if CRC value is already
+ * calculated. (valid only in
+ * FRAME_START TPL)
+ * C: unchanged.
+ */
+#define TX_PASS_SRC_ADDR 0x0001 /* R: adapter uses explicit frame
+ * source address and does not overwrite
+ * with the adapter node address.
+ * (valid only in FRAME_START TPL)
+ *
+ * C: unchanged.
+ */
+#define TX_STRIP_FS 0xFF00 /* R: reserved.
+ * C: if no Transmission Error,
+ * field contains copy of FS byte after
+ * stripping of frame.
+ */
+
+/*
+ * Structure of Transmit Parameter Lists (TPLs) (only one frame every TPL,
+ * but possibly multiple TPLs for one frame) the length of the TPLs has to be
+ * initialized in the OPL. (OPEN parameter list)
+ */
+#define TPL_NUM 3 /* Number of Transmit Parameter Lists.
+ * !! MUST BE >= 3 !!
+ */
+
+#pragma pack(1)
+typedef struct s_TPL TPL;
+
+struct s_TPL { /* Transmit Parameter List (align on even word boundaries) */
+ unsigned long NextTPLAddr; /* Pointer to next TPL in chain; if
+ * pointer is odd: this is the last
+ * TPL. Pointing to itself can cause
+ * problems!
+ */
+ volatile unsigned short Status; /* Initialized by the adapter:
+ * CSTAT_REQUEST important: update least
+ * significant bit first! Set by the
+ * adapter: CSTAT_COMPLETE status.
+ */
+ unsigned short FrameSize; /* Number of bytes to be transmitted
+ * as a frame including AC/FC,
+ * Destination, Source, Routing field
+ * not including CRC, FS, End Delimiter
+ * (valid only if START_FRAME bit in
+ * CSTAT nonzero) must not be zero in
+ * any list; maximum value: (BUFFER_SIZE
+ * - 8) * TX_BUF_MAX sum of DataCount
+ * values in FragmentList must equal
+ * Frame_Size value in START_FRAME TPL!
+ * frame data fragment list.
+ */
+
+ /* TPL/RPL size in OPEN parameter list depending on maximal
+ * numbers of fragments used in one parameter list.
+ */
+ Fragment FragList[TX_FRAG_NUM]; /* Maximum: nine frame fragments in one
+ * TPL actual version of firmware: 9
+ * fragments possible.
+ */
+#pragma pack()
+
+ /* Special proprietary data and precalculations */
+
+ TPL *NextTPLPtr; /* Pointer to next TPL in chain. */
+ unsigned char *MData;
+ struct sk_buff *Skb;
+ unsigned char TPLIndex;
+ volatile unsigned char BusyFlag;/* Flag: TPL busy? */
+};
+
+/* ---------------------Receive Functions-------------------------------*
+ * define RECEIVE_CSTAT_REQUEST (R) and RECEIVE_CSTAT_COMPLETE (C) values.
+ * (high-low)
+ */
+#define RX_VALID 0x0080 /* R: set; tell adapter with
+ * RECEIVE.VALID interrupt.
+ * C: reset to zero.
+ */
+#define RX_FRAME_COMPLETE 0x0040 /* R: must be reset to zero,
+ * C: set to one.
+ */
+#define RX_START_FRAME 0x0020 /* R: must be reset to zero.
+ * C: set to one on the list.
+ */
+#define RX_END_FRAME 0x0010 /* R: must be reset to zero.
+ * C: set to one on the list
+ * that ends the frame.
+ */
+#define RX_FRAME_IRQ 0x0008 /* R: request interrupt generation
+ * after receive.
+ * C: unchanged.
+ */
+#define RX_INTERFRAME_WAIT 0x0004 /* R: after receiving a frame:
+ * interrupt and wait for a
+ * RECEIVE.CONTINUE.
+ * C: unchanged.
+ */
+#define RX_PASS_CRC 0x0002 /* R: if set, the adapter includes
+ * the CRC in data passed. (last four
+ * bytes; valid only if FRAME_START is
+ * set)
+ * C: set, if CRC is included in
+ * received data.
+ */
+#define RX_PASS_SRC_ADDR 0x0001 /* R: adapter uses explicit frame
+ * source address and does not
+ * overwrite with the adapter node
+ * address. (valid only if FRAME_START
+ * is set)
+ * C: unchanged.
+ */
+#define RX_RECEIVE_FS 0xFC00 /* R: reserved; must be reset to zero.
+ * C: on lists with START_FRAME, field
+ * contains frame status field from
+ * received frame; otherwise cleared.
+ */
+#define RX_ADDR_MATCH 0x0300 /* R: reserved; must be reset to zero.
+ * C: address match code mask.
+ */
+#define RX_STATUS_MASK 0x00FF /* Mask for receive status bits. */
+
+#define RX_INTERN_ADDR_MATCH 0x0100 /* C: internally address match. */
+#define RX_EXTERN_ADDR_MATCH 0x0200 /* C: externally matched via
+ * XMATCH/XFAIL interface.
+ */
+#define RX_INTEXT_ADDR_MATCH 0x0300 /* C: internally and externally
+ * matched.
+ */
+#define RX_READY (RX_VALID | RX_FRAME_IRQ) /* Ready for receive. */
+
+/* Constants for Command Status Interrupt.
+ * COMMAND_REJECT status field bit functions (SSB.Parm[0])
+ */
+#define ILLEGAL_COMMAND 0x0080 /* Set if an unknown command
+ * is issued to the adapter
+ */
+#define ADDRESS_ERROR 0x0040 /* Set if any address field in
+ * the SCB is odd. (not word aligned)
+ */
+#define ADAPTER_OPEN 0x0020 /* Command issued illegal with
+ * open adapter.
+ */
+#define ADAPTER_CLOSE 0x0010 /* Command issued illegal with
+ * closed adapter.
+ */
+#define SAME_COMMAND 0x0008 /* Command issued with same command
+ * already executing.
+ */
+
+/* OPEN_COMPLETION values (SSB.Parm[0], MSB) */
+#define NODE_ADDR_ERROR 0x0040 /* Wrong address or BIA read
+ * zero address.
+ */
+#define LIST_SIZE_ERROR 0x0020 /* If List_Size value not in 0,
+ * 14, 20, 26.
+ */
+#define BUF_SIZE_ERROR 0x0010 /* Not enough available memory for
+ * two buffers.
+ */
+#define TX_BUF_COUNT_ERROR 0x0004 /* Remaining receive buffers less than
+ * two.
+ */
+#define OPEN_ERROR 0x0002 /* Error during ring insertion; more
+ * information in bits 8-15.
+ */
+
+/* Standard return codes */
+#define GOOD_COMPLETION 0x0080 /* =OPEN_SUCCESSFULL */
+#define INVALID_OPEN_OPTION 0x0001 /* OPEN options are not supported by
+ * the adapter.
+ */
+
+/* OPEN phases; details of OPEN_ERROR (SSB.Parm[0], LSB) */
+#define OPEN_PHASES_MASK 0xF000 /* Check only the bits 8-11. */
+#define LOBE_MEDIA_TEST 0x1000
+#define PHYSICAL_INSERTION 0x2000
+#define ADDRESS_VERIFICATION 0x3000
+#define PARTICIPATION_IN_RING_POLL 0x4000
+#define REQUEST_INITIALISATION 0x5000
+#define FULLDUPLEX_CHECK 0x6000
+
+/* OPEN error codes; details of OPEN_ERROR (SSB.Parm[0], LSB) */
+#define OPEN_ERROR_CODES_MASK 0x0F00 /* Check only the bits 12-15. */
+#define OPEN_FUNCTION_FAILURE 0x0100 /* Unable to transmit to itself or
+ * frames received before insertion.
+ */
+#define OPEN_SIGNAL_LOSS 0x0200 /* Signal loss condition detected at
+ * receiver.
+ */
+#define OPEN_TIMEOUT 0x0500 /* Insertion timer expired before
+ * logical insertion.
+ */
+#define OPEN_RING_FAILURE 0x0600 /* Unable to receive own ring purge
+ * MAC frames.
+ */
+#define OPEN_RING_BEACONING 0x0700 /* Beacon MAC frame received after
+ * ring insertion.
+ */
+#define OPEN_DUPLICATE_NODEADDR 0x0800 /* Other station in ring found
+ * with the same address.
+ */
+#define OPEN_REQUEST_INIT 0x0900 /* RPS present but does not respond. */
+#define OPEN_REMOVE_RECEIVED 0x0A00 /* Adapter received a remove adapter
+ * MAC frame.
+ */
+#define OPEN_FULLDUPLEX_SET 0x0D00 /* Got this with full duplex on when
+ * trying to connect to a normal ring.
+ */
+
+/* SET_BRIDGE_PARMS return codes: */
+#define BRIDGE_INVALID_MAX_LEN 0x4000 /* MAX_ROUTING_FIELD_LENGTH odd,
+ * less than 6 or > 30.
+ */
+#define BRIDGE_INVALID_SRC_RING 0x2000 /* SOURCE_RING number zero, too large
+ * or = TARGET_RING.
+ */
+#define BRIDGE_INVALID_TRG_RING 0x1000 /* TARGET_RING number zero, too large
+ * or = SOURCE_RING.
+ */
+#define BRIDGE_INVALID_BRDGE_NO 0x0800 /* BRIDGE_NUMBER too large. */
+#define BRIDGE_INVALID_OPTIONS 0x0400 /* Invalid bridge options. */
+#define BRIDGE_DIAGS_FAILED 0x0200 /* Diagnostics of TMS380SRA failed. */
+#define BRIDGE_NO_SRA 0x0100 /* The TMS380SRA does not exist in HW
+ * configuration.
+ */
+
+/*
+ * Bring Up Diagnostics error codes.
+ */
+#define BUD_INITIAL_ERROR 0x0
+#define BUD_CHECKSUM_ERROR 0x1
+#define BUD_ADAPTER_RAM_ERROR 0x2
+#define BUD_INSTRUCTION_ERROR 0x3
+#define BUD_CONTEXT_ERROR 0x4
+#define BUD_PROTOCOL_ERROR 0x5
+#define BUD_INTERFACE_ERROR 0x6
+
+/* BUD constants */
+#define BUD_MAX_RETRIES 3
+#define BUD_MAX_LOOPCNT 6
+#define BUD_TIMEOUT 3000
+
+/* Initialization constants */
+#define INIT_MAX_RETRIES 3 /* Maximum three retries. */
+#define INIT_MAX_LOOPCNT 22 /* Maximum loop counts. */
+
+/* RING STATUS field values (high/low) */
+#define SIGNAL_LOSS 0x0080 /* Loss of signal on the ring
+ * detected.
+ */
+#define HARD_ERROR 0x0040 /* Transmitting or receiving beacon
+ * frames.
+ */
+#define SOFT_ERROR 0x0020 /* Report error MAC frame
+ * transmitted.
+ */
+#define TRANSMIT_BEACON 0x0010 /* Transmitting beacon frames on the
+ * ring.
+ */
+#define LOBE_WIRE_FAULT 0x0008 /* Open or short circuit in the
+ * cable to concentrator; adapter
+ * closed.
+ */
+#define AUTO_REMOVAL_ERROR 0x0004 /* Lobe wrap test failed, deinserted;
+ * adapter closed.
+ */
+#define REMOVE_RECEIVED 0x0001 /* Received a remove ring station MAC
+ * MAC frame request; adapter closed.
+ */
+#define COUNTER_OVERFLOW 0x8000 /* Overflow of one of the adapters
+ * error counters; READ.ERROR.LOG.
+ */
+#define SINGLE_STATION 0x4000 /* Adapter is the only station on the
+ * ring.
+ */
+#define RING_RECOVERY 0x2000 /* Claim token MAC frames on the ring;
+ * reset after ring purge frame.
+ */
+
+#define ADAPTER_CLOSED (LOBE_WIRE_FAULT | AUTO_REMOVAL_ERROR |\
+ REMOVE_RECEIVED)
+
+/* Adapter_check_block.Status field bit assignments: */
+#define DIO_PARITY 0x8000 /* Adapter detects bad parity
+ * through direct I/O access.
+ */
+#define DMA_READ_ABORT 0x4000 /* Aborting DMA read operation
+ * from system Parm[0]: 0=timeout,
+ * 1=parity error, 2=bus error;
+ * Parm[1]: 32 bit pointer to host
+ * system address at failure.
+ */
+#define DMA_WRITE_ABORT 0x2000 /* Aborting DMA write operation
+ * to system. (parameters analogous to
+ * DMA_READ_ABORT)
+ */
+#define ILLEGAL_OP_CODE 0x1000 /* Illegal operation code in the
+ * the adapters firmware Parm[0]-2:
+ * communications processor registers
+ * R13-R15.
+ */
+#define PARITY_ERRORS 0x0800 /* Adapter detects internal bus
+ * parity error.
+ */
+#define RAM_DATA_ERROR 0x0080 /* Valid only during RAM testing;
+ * RAM data error Parm[0-1]: 32 bit
+ * pointer to RAM location.
+ */
+#define RAM_PARITY_ERROR 0x0040 /* Valid only during RAM testing;
+ * RAM parity error Parm[0-1]: 32 bit
+ * pointer to RAM location.
+ */
+#define RING_UNDERRUN 0x0020 /* Internal DMA underrun when
+ * transmitting onto ring.
+ */
+#define INVALID_IRQ 0x0008 /* Unrecognized interrupt generated
+ * internal to adapter Parm[0-2]:
+ * adapter register R13-R15.
+ */
+#define INVALID_ERROR_IRQ 0x0004 /* Unrecognized error interrupt
+ * generated Parm[0-2]: adapter register
+ * R13-R15.
+ */
+#define INVALID_XOP 0x0002 /* Unrecognized XOP request in
+ * communication processor Parm[0-2]:
+ * adapter register R13-R15.
+ */
+#define CHECKADDR 0x05E0 /* Adapter check status information
+ * address offset.
+ */
+#define ROM_PAGE_0 0x0000 /* Adapter ROM page 0. */
+
+/*
+ * RECEIVE.STATUS interrupt result SSB values: (high-low)
+ * (RECEIVE_COMPLETE field bit definitions in SSB.Parm[0])
+ */
+#define RX_COMPLETE 0x0080 /* SSB.Parm[0]; SSB.Parm[1]: 32
+ * bit pointer to last RPL.
+ */
+#define RX_SUSPENDED 0x0040 /* SSB.Parm[0]; SSB.Parm[1]: 32
+ * bit pointer to RPL with odd
+ * forward pointer.
+ */
+
+/* Valid receive CSTAT: */
+#define RX_FRAME_CONTROL_BITS (RX_VALID | RX_START_FRAME | RX_END_FRAME | \
+ RX_FRAME_COMPLETE)
+#define VALID_SINGLE_BUFFER_FRAME (RX_START_FRAME | RX_END_FRAME | \
+ RX_FRAME_COMPLETE)
+
+typedef enum SKB_STAT SKB_STAT;
+enum SKB_STAT {
+ SKB_UNAVAILABLE,
+ SKB_DMA_DIRECT,
+ SKB_DATA_COPY
+};
+
+/* Receive Parameter List (RPL) The length of the RPLs has to be initialized
+ * in the OPL. (OPEN parameter list)
+ */
+#define RPL_NUM 3
+
+#define RX_FRAG_NUM 1 /* Maximal number of used fragments in one RPL.
+ * (up to firmware v2.24: 3, now: up to 9)
+ */
+
+#pragma pack(1)
+typedef struct s_RPL RPL;
+struct s_RPL { /* Receive Parameter List */
+ unsigned long NextRPLAddr; /* Pointer to next RPL in chain
+ * (normalized = physical 32 bit
+ * address) if pointer is odd: this
+ * is last RPL. Pointing to itself can
+ * cause problems!
+ */
+ volatile unsigned short Status; /* Set by creation of Receive Parameter
+ * List RECEIVE_CSTAT_COMPLETE set by
+ * adapter in lists that start or end
+ * a frame.
+ */
+ volatile unsigned short FrameSize; /* Number of bytes received as a
+ * frame including AC/FC, Destination,
+ * Source, Routing field not including
+ * CRC, FS (Frame Status), End Delimiter
+ * (valid only if START_FRAME bit in
+ * CSTAT nonzero) must not be zero in
+ * any list; maximum value: (BUFFER_SIZE
+ * - 8) * TX_BUF_MAX sum of DataCount
+ * values in FragmentList must equal
+ * Frame_Size value in START_FRAME TPL!
+ * frame data fragment list
+ */
+
+ /* TPL/RPL size in OPEN parameter list depending on maximal numbers
+ * of fragments used in one parameter list.
+ */
+ Fragment FragList[RX_FRAG_NUM]; /* Maximum: nine frame fragments in
+ * one TPL. Actual version of firmware:
+ * 9 fragments possible.
+ */
+#pragma pack()
+
+ /* Special proprietary data and precalculations. */
+ RPL *NextRPLPtr; /* Logical pointer to next RPL in chain. */
+ unsigned char *MData;
+ struct sk_buff *Skb;
+ SKB_STAT SkbStat;
+ int RPLIndex;
+};
+
+#define TMS_ISA 1
+#define TMS_PCI 2
+struct cardinfo_table {
+ int type; /* 1 = ISA, 2 = PCI */
+ int vendor_id;
+ int device_id;
+ char *name;
+};
+
+/* Information that need to be kept for each board. */
+typedef struct net_local {
+#pragma pack(1)
+ IPB ipb; /* Initialization Parameter Block. */
+ SCB scb; /* System Command Block: system to adapter
+ * communication.
+ */
+ SSB ssb; /* System Status Block: adapter to system
+ * communication.
+ */
+ OPB ocpl; /* Open Options Parameter Block. */
+
+ ERRORTAB errorlogtable; /* Adapter statistic error counters.
+ * (read from adapter memory)
+ */
+ unsigned char ProductID[PROD_ID_SIZE + 1]; /* Product ID */
+#pragma pack()
+
+ TPL Tpl[TPL_NUM];
+ TPL *TplFree;
+ TPL *TplBusy;
+ unsigned char LocalTxBuffers[TPL_NUM][DEFAULT_PACKET_SIZE];
+
+ RPL Rpl[RPL_NUM];
+ RPL *RplHead;
+ RPL *RplTail;
+ unsigned char LocalRxBuffers[RPL_NUM][DEFAULT_PACKET_SIZE];
+
+ int DataRate;
+ unsigned char ScbInUse;
+ unsigned short CMDqueue;
+
+ unsigned long AdapterOpenFlag:1;
+ unsigned long AdapterVirtOpenFlag:1;
+ unsigned long OpenCommandIssued:1;
+ unsigned long TransmitCommandActive:1;
+ unsigned long TransmitHaltScheduled:1;
+ unsigned long HaltInProgress:1;
+ unsigned long LobeWireFaultLogged:1;
+ unsigned long ReOpenInProgress:1;
+ unsigned long Sleeping:1;
+
+ unsigned long LastOpenStatus;
+ unsigned short CurrentRingStatus;
+ unsigned long MaxPacketSize;
+
+ unsigned long StartTime;
+ unsigned long LastSendTime;
+
+ struct sk_buff_head SendSkbQueue;
+ unsigned short QueueSkb;
+
+ struct tr_statistics MacStat; /* MAC statistics structure */
+
+ struct cardinfo_table *CardType;
+
+ struct timer_list timer;
+
+ wait_queue_head_t wait_for_tok_int;
+
+ INTPTRS intptrs; /* Internal adapter pointer. Must be read
+ * before OPEN command.
+ */
+} NET_LOCAL;
+
+#endif /* __KERNEL__ */
+#endif /* __LINUX_TMS380TR_H */
diff --git a/drivers/net/tokenring/tms380tr_microcode.h b/drivers/net/tokenring/tms380tr_microcode.h
new file mode 100644
index 000000000..3c03f1f6f
--- /dev/null
+++ b/drivers/net/tokenring/tms380tr_microcode.h
@@ -0,0 +1,3622 @@
+/*
+ * The firmware this driver downloads into the tokenring card is a
+ * separate program and is not GPL'd source code, even though the Linux
+ * side driver and the routine that loads this data into the card are.
+ *
+ * This firmware is licensed to you strictly for use in conjunction
+ * with the use of SysKonnect TokenRing adapters. There is no
+ * waranty expressed or implied about its fitness for any purpose.
+ */
+
+/* tms380tr_microcode.h: TI TMS380 Token Ring driver COMMprocessor microcode
+ *
+ * Notes:
+ * - Loaded from tms380tr_reset_adapter upon adapter reset.
+ *
+ * This microcode is loaded into the TMS380 COMMprocessor during adapter
+ * initialization. It is copyright Texas Instruments and contains
+ * intellectual property of both TI and their contractors.
+ *
+ * TMS380 COMMprocessor Microcode Version 3.11 for Token Ring.
+ *
+ * Available from TI in COFF format (EAGLECAF.OUT).
+ *
+ */
+
+#include <linux/config.h>
+
+#if defined(CONFIG_TMS380TR) || defined(CONFIG_TMS380TR_MODULE)
+
+unsigned char tms380tr_code[] = {
+ 0x00, 0x00, 0x00, 0xA0, 0x00, 0x20, 0x68, 0x54,
+ 0x73, 0x69, 0x63, 0x20, 0x64, 0x6F, 0x20, 0x65,
+ 0x73, 0x69, 0x72, 0x20, 0x6C, 0x65, 0x61, 0x65,
+ 0x65, 0x73, 0x20, 0x64, 0x6E, 0x75, 0x65, 0x64,
+ 0x20, 0x72, 0x69, 0x6C, 0x65, 0x63, 0x63, 0x6E,
+ 0x20, 0x65, 0x6E, 0x4F, 0x79, 0x6C, 0x20, 0x2C,
+ 0x6C, 0x41, 0x20, 0x6C, 0x69, 0x72, 0x68, 0x67,
+ 0x73, 0x74, 0x72, 0x20, 0x73, 0x65, 0x72, 0x65,
+ 0x65, 0x76, 0x2E, 0x64, 0x60, 0x01, 0x42, 0x01,
+ 0x00, 0x08, 0x08, 0x16, 0xB0, 0x03, 0xE0, 0x04,
+ 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0xFF, 0xFF,
+ 0xFC, 0x13, 0x80, 0x03, 0xA0, 0x07, 0x42, 0x01,
+ 0x00, 0x08, 0x20, 0x07, 0x00, 0x00, 0xE0, 0x04,
+ 0x00, 0x01, 0x8B, 0x07, 0x00, 0x3D, 0x60, 0x01,
+ 0x42, 0x01, 0x80, 0x00, 0x09, 0x13, 0x8B, 0x07,
+ 0x00, 0x2D, 0x20, 0xC0, 0x4E, 0x01, 0x80, 0x02,
+ 0x41, 0x0F, 0x02, 0x11, 0x8B, 0x07, 0x00, 0x3D,
+ 0x0B, 0xC8, 0x4A, 0x01, 0x00, 0x02, 0x00, 0x90,
+ 0xA0, 0x09, 0x00, 0xC8, 0x66, 0x01, 0xE0, 0x02,
+ 0xA0, 0x00, 0xA0, 0x07, 0x04, 0x01, 0x20, 0x00,
+ 0xA0, 0x01, 0x40, 0x01, 0x00, 0xFE, 0x20, 0x48,
+ 0x2A, 0xE0, 0x42, 0x01, 0xE0, 0x04, 0x02, 0x01,
+ 0xE0, 0x04, 0x60, 0x09, 0xE0, 0x04, 0x82, 0x01,
+ 0x60, 0x01, 0x1C, 0x01, 0x04, 0x00, 0x03, 0x16,
+ 0xE0, 0x01, 0x40, 0x01, 0x00, 0x0C, 0xA0, 0x06,
+ 0xBC, 0xA1, 0xA0, 0x07, 0x04, 0x01, 0x2D, 0x00,
+ 0x20, 0xC2, 0x00, 0xE0, 0x88, 0x02, 0x11, 0xE3,
+ 0x14, 0x16, 0xA0, 0x07, 0x04, 0x01, 0x2E, 0x00,
+ 0x60, 0x01, 0x42, 0x01, 0x00, 0x03, 0x0D, 0x16,
+ 0xA0, 0x07, 0x04, 0x01, 0x21, 0x00, 0x88, 0x07,
+ 0x00, 0xA0, 0x89, 0x07, 0xFE, 0xFF, 0xA8, 0x09,
+ 0xA9, 0x09, 0x8A, 0x07, 0x02, 0xE0, 0xA0, 0x06,
+ 0x84, 0xEC, 0x56, 0x10, 0x88, 0x07, 0x00, 0x90,
+ 0x89, 0x07, 0xFE, 0x9F, 0xA8, 0x09, 0xA9, 0x09,
+ 0x8A, 0x07, 0x78, 0xE0, 0xA0, 0x06, 0x84, 0xEC,
+ 0x4B, 0x10, 0xA0, 0x05, 0x04, 0x01, 0x88, 0x07,
+ 0x08, 0x00, 0x89, 0x07, 0x7A, 0x00, 0x00, 0x03,
+ 0x01, 0x00, 0xA0, 0x06, 0xD2, 0xAC, 0x40, 0x10,
+ 0xA0, 0x06, 0xBC, 0xA1, 0xE0, 0x02, 0xF4, 0x03,
+ 0x88, 0x07, 0xA0, 0x00, 0x89, 0x07, 0xFE, 0x00,
+ 0xA0, 0x06, 0xD2, 0xAC, 0x35, 0x10, 0xE0, 0x02,
+ 0xA0, 0x00, 0xE0, 0x04, 0x7E, 0x01, 0xC8, 0x04,
+ 0x09, 0x02, 0xF2, 0x03, 0x48, 0x62, 0xE0, 0xC1,
+ 0x40, 0x01, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x04,
+ 0x18, 0xCE, 0x09, 0x06, 0xFD, 0x16, 0xA0, 0x01,
+ 0x40, 0x01, 0x00, 0x40, 0x07, 0xC8, 0x40, 0x01,
+ 0x88, 0x07, 0xF4, 0x03, 0x89, 0x07, 0xFE, 0x3F,
+ 0xA0, 0x06, 0xD2, 0xAC, 0x19, 0x10, 0xE0, 0x02,
+ 0xA0, 0x00, 0xA0, 0x06, 0xFA, 0xAD, 0x14, 0x10,
+ 0x08, 0xC8, 0x44, 0x04, 0x09, 0xC8, 0x46, 0x04,
+ 0xA0, 0x06, 0x28, 0xAD, 0x0D, 0x10, 0x81, 0x07,
+ 0x7C, 0xE0, 0xB1, 0xC0, 0x26, 0x13, 0x01, 0xC8,
+ 0xE0, 0x00, 0xA0, 0x05, 0x04, 0x01, 0x92, 0x06,
+ 0x03, 0x10, 0x60, 0xC0, 0xE0, 0x00, 0xF5, 0x10,
+ 0xE0, 0x01, 0x04, 0x01, 0x10, 0x00, 0xB0, 0x03,
+ 0xFF, 0x10, 0xA0, 0x01, 0x04, 0x01, 0x00, 0x80,
+ 0x80, 0x03, 0x80, 0x07, 0xA0, 0x00, 0xC2, 0x04,
+ 0x80, 0xCC, 0x81, 0x07, 0xAA, 0xA1, 0x82, 0x02,
+ 0x1E, 0x00, 0x02, 0x16, 0x81, 0x07, 0xB4, 0xA1,
+ 0x81, 0xC4, 0x81, 0x8C, 0xE9, 0x16, 0x82, 0x02,
+ 0x7C, 0x00, 0xF2, 0x16, 0x00, 0x03, 0x0F, 0x00,
+ 0x5B, 0x04, 0x81, 0x07, 0x08, 0xE1, 0x82, 0x07,
+ 0x04, 0x00, 0xE0, 0x04, 0x80, 0x01, 0xE0, 0x04,
+ 0x82, 0x01, 0x91, 0xC4, 0xB1, 0x8C, 0xD8, 0x16,
+ 0x82, 0x02, 0x7C, 0x00, 0xFA, 0x16, 0x20, 0xC8,
+ 0x04, 0xE0, 0x82, 0x01, 0x20, 0xE8, 0x0C, 0xE0,
+ 0x82, 0x01, 0x20, 0xC8, 0x10, 0xE0, 0x80, 0x01,
+ 0x81, 0x07, 0x86, 0xE0, 0xB1, 0xC0, 0x07, 0x13,
+ 0xB1, 0xC4, 0xFC, 0x10, 0xA0, 0x07, 0x04, 0x01,
+ 0x2E, 0x00, 0x60, 0x04, 0xAA, 0xA1, 0x81, 0x07,
+ 0x34, 0xE0, 0x82, 0x07, 0xFC, 0x05, 0x83, 0x07,
+ 0x0A, 0x00, 0xB1, 0xCC, 0x43, 0x06, 0xFD, 0x16,
+ 0x02, 0x02, 0x00, 0x06, 0x60, 0xD0, 0x4E, 0x01,
+ 0xED, 0x13, 0x21, 0x02, 0x00, 0xF7, 0x21, 0x02,
+ 0x00, 0xC0, 0x81, 0xDC, 0x60, 0xD0, 0x4F, 0x01,
+ 0xC1, 0xC0, 0x41, 0x09, 0x21, 0x02, 0x00, 0xF0,
+ 0x81, 0xDC, 0x43, 0x02, 0x00, 0x0F, 0x23, 0x02,
+ 0x00, 0xF0, 0x83, 0xDC, 0x01, 0x02, 0x32, 0x0C,
+ 0xA0, 0xC0, 0x44, 0x04, 0xE0, 0xC0, 0x46, 0x04,
+ 0x03, 0xC1, 0x02, 0x61, 0x84, 0x05, 0x04, 0xC8,
+ 0x48, 0x04, 0x03, 0xC1, 0x84, 0x05, 0x04, 0xA1,
+ 0x01, 0xA1, 0x04, 0xC8, 0x30, 0x0C, 0x03, 0xC1,
+ 0x84, 0x05, 0xF1, 0x04, 0x04, 0x06, 0xFD, 0x16,
+ 0x08, 0x02, 0x00, 0xA0, 0xA8, 0x09, 0x60, 0xC2,
+ 0x30, 0x0C, 0x29, 0x02, 0xFF, 0x03, 0xA9, 0x09,
+ 0x29, 0x02, 0x40, 0x00, 0x80, 0x07, 0x00, 0x90,
+ 0xA0, 0x09, 0x8A, 0x07, 0xFE, 0x9F, 0x2A, 0x02,
+ 0xFF, 0x03, 0xAA, 0x09, 0x01, 0x02, 0x32, 0x0C,
+ 0x05, 0x02, 0x00, 0x00, 0x03, 0xC1, 0x84, 0x05,
+ 0x11, 0x07, 0xC1, 0x05, 0x85, 0x05, 0x04, 0x06,
+ 0x0B, 0x13, 0x85, 0x80, 0xF9, 0x1A, 0x05, 0x80,
+ 0xF8, 0x1A, 0x85, 0x82, 0xF5, 0x1A, 0x05, 0x82,
+ 0xF4, 0x1A, 0x45, 0x82, 0xF1, 0x1A, 0xF1, 0x10,
+ 0x20, 0x2D, 0x02, 0x00, 0x60, 0x01, 0x40, 0x01,
+ 0x00, 0x40, 0x06, 0x16, 0x8A, 0x07, 0x00, 0x08,
+ 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40, 0x48, 0x10,
+ 0x60, 0x01, 0x42, 0x01, 0x00, 0x80, 0x06, 0x16,
+ 0x8A, 0x07, 0x00, 0x10, 0xA0, 0x01, 0x42, 0x01,
+ 0x00, 0x80, 0x3E, 0x10, 0x60, 0x01, 0x02, 0x01,
+ 0x00, 0x10, 0x0A, 0x16, 0x60, 0x01, 0x00, 0x01,
+ 0x00, 0x04, 0x06, 0x16, 0x8A, 0x07, 0x00, 0x80,
+ 0xA0, 0x01, 0x02, 0x01, 0x00, 0x10, 0x30, 0x10,
+ 0x60, 0x01, 0x02, 0x01, 0x00, 0x08, 0x0A, 0x16,
+ 0x60, 0x01, 0x00, 0x01, 0x00, 0x04, 0x06, 0x16,
+ 0xA0, 0x01, 0x02, 0x01, 0x00, 0x08, 0x0D, 0x02,
+ 0x01, 0x00, 0x0D, 0x10, 0x60, 0x01, 0x02, 0x01,
+ 0x00, 0x04, 0x16, 0x16, 0x60, 0x01, 0x00, 0x01,
+ 0x00, 0x08, 0x12, 0x16, 0xA0, 0x01, 0x02, 0x01,
+ 0x00, 0x04, 0x0D, 0x02, 0x02, 0x00, 0xA0, 0xC3,
+ 0x0E, 0x01, 0xE0, 0xC3, 0x10, 0x01, 0x8A, 0x07,
+ 0x00, 0x20, 0x60, 0x01, 0x00, 0x01, 0x00, 0x80,
+ 0x0B, 0x13, 0x8A, 0x07, 0x00, 0x40, 0x08, 0x10,
+ 0x8A, 0x07, 0x04, 0x00, 0x05, 0x10, 0x8A, 0x07,
+ 0x02, 0x00, 0x02, 0x10, 0x8A, 0x07, 0x08, 0x00,
+ 0x00, 0x03, 0x00, 0x00, 0xE0, 0x04, 0x82, 0x01,
+ 0x8B, 0x07, 0xE0, 0x05, 0xCA, 0xCE, 0xCD, 0xCE,
+ 0xCE, 0xCE, 0xCF, 0xC6, 0x20, 0xC3, 0x58, 0x07,
+ 0x20, 0x23, 0x04, 0xE0, 0x12, 0x13, 0x8B, 0x07,
+ 0x18, 0xFF, 0x8A, 0x02, 0x00, 0x80, 0x0A, 0x13,
+ 0x8B, 0x05, 0xCD, 0xA2, 0x8A, 0x02, 0x00, 0x40,
+ 0x05, 0x13, 0x8A, 0x02, 0x00, 0x20, 0x02, 0x13,
+ 0x8B, 0x07, 0x1D, 0xFF, 0x0B, 0xC8, 0x04, 0x01,
+ 0x0D, 0x10, 0x20, 0xD3, 0x05, 0x01, 0xFD, 0x11,
+ 0x20, 0xD8, 0xDF, 0x07, 0x17, 0x01, 0x8B, 0x07,
+ 0x80, 0xFF, 0x0B, 0xC8, 0x04, 0x01, 0x20, 0xE8,
+ 0x0A, 0xE0, 0x00, 0x01, 0xE0, 0xC2, 0x04, 0x01,
+ 0xE0, 0x22, 0x86, 0xE1, 0xFB, 0x16, 0xE0, 0x02,
+ 0xA0, 0x00, 0xE0, 0x04, 0x82, 0x01, 0x20, 0xE8,
+ 0x0A, 0xE0, 0x00, 0x01, 0xE0, 0xC2, 0x00, 0x01,
+ 0xE0, 0x22, 0x06, 0xE0, 0xF8, 0x13, 0xA0, 0x01,
+ 0x40, 0x01, 0x00, 0xF6, 0x60, 0x04, 0x90, 0xA0,
+ 0x00, 0x03, 0x02, 0x00, 0xA0, 0x07, 0x02, 0x01,
+ 0xFF, 0xDF, 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03,
+ 0x00, 0x03, 0x02, 0x00, 0x09, 0x07, 0xA0, 0xC2,
+ 0x04, 0x01, 0x8A, 0x01, 0x80, 0x00, 0x4A, 0x52,
+ 0x89, 0xD2, 0x0A, 0xC8, 0x04, 0x01, 0xA0, 0xD2,
+ 0x04, 0x01, 0xF9, 0x16, 0x49, 0x05, 0x89, 0x01,
+ 0x00, 0x80, 0x49, 0x01, 0x00, 0x40, 0x0E, 0x13,
+ 0x09, 0xF8, 0x3A, 0x07, 0x60, 0xC2, 0x36, 0x07,
+ 0x03, 0x16, 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03,
+ 0xE0, 0x04, 0x36, 0x07, 0x54, 0x04, 0x90, 0x03,
+ 0xFF, 0xFF, 0x80, 0x03, 0x60, 0x22, 0x86, 0xE1,
+ 0xC2, 0x13, 0xE0, 0x04, 0x82, 0x01, 0x60, 0x04,
+ 0xE0, 0xA3, 0x00, 0x03, 0x02, 0x00, 0xA0, 0x07,
+ 0x62, 0x09, 0xE8, 0x03, 0xC9, 0x04, 0xA0, 0xC1,
+ 0x34, 0x06, 0x04, 0x16, 0xA0, 0x06, 0x50, 0xB5,
+ 0xE0, 0x04, 0x20, 0x09, 0x86, 0x07, 0xE8, 0x05,
+ 0xA0, 0x01, 0x40, 0x01, 0x00, 0x80, 0x20, 0xC2,
+ 0x84, 0x01, 0x20, 0x48, 0x08, 0xE0, 0x84, 0x01,
+ 0x20, 0x22, 0x08, 0xE0, 0x08, 0x13, 0x60, 0x01,
+ 0xAE, 0x01, 0x01, 0x00, 0x04, 0x16, 0xE0, 0x01,
+ 0x34, 0x06, 0x00, 0x80, 0x06, 0x10, 0x20, 0xC2,
+ 0x32, 0x09, 0x06, 0x13, 0xE0, 0x01, 0x34, 0x06,
+ 0x00, 0x08, 0xE0, 0x04, 0x30, 0x06, 0x09, 0x07,
+ 0xA0, 0x05, 0xEE, 0x05, 0x20, 0x06, 0xEC, 0x05,
+ 0x02, 0x16, 0x16, 0xC2, 0x03, 0x16, 0x49, 0xC2,
+ 0x12, 0x16, 0x80, 0x03, 0x98, 0xC5, 0xE8, 0xC1,
+ 0x02, 0x00, 0xE0, 0xE9, 0x14, 0xE0, 0x04, 0x00,
+ 0xD7, 0x04, 0x27, 0x02, 0x08, 0x00, 0xA0, 0x06,
+ 0xE6, 0xB4, 0x16, 0xC2, 0x04, 0x13, 0x28, 0xC8,
+ 0x08, 0x00, 0xEC, 0x05, 0xEF, 0x13, 0x54, 0x04,
+ 0x00, 0x03, 0x02, 0x00, 0xE0, 0xC1, 0x86, 0x01,
+ 0x47, 0x02, 0x0E, 0x00, 0xA7, 0xC2, 0x90, 0xE1,
+ 0x5A, 0x04, 0x8A, 0x07, 0x00, 0xA0, 0x0A, 0xC8,
+ 0x86, 0x01, 0xC7, 0xA1, 0x27, 0x02, 0x98, 0xE1,
+ 0x37, 0xE8, 0x34, 0x06, 0x17, 0xE8, 0xD2, 0x06,
+ 0xE0, 0x04, 0x30, 0x06, 0x60, 0x04, 0xF2, 0xA9,
+ 0x0A, 0xE8, 0xD2, 0x06, 0xE0, 0x01, 0x34, 0x06,
+ 0x00, 0x08, 0xE0, 0x04, 0x30, 0x06, 0x20, 0xE0,
+ 0x18, 0xE0, 0x5B, 0x04, 0xA0, 0x05, 0x20, 0x09,
+ 0x20, 0x88, 0x20, 0x09, 0x16, 0xE0, 0xE5, 0x1A,
+ 0xE0, 0x04, 0x20, 0x09, 0xA0, 0x06, 0xD0, 0xD5,
+ 0x80, 0x03, 0xA0, 0x05, 0x32, 0x09, 0x80, 0x03,
+ 0x01, 0xC3, 0xFB, 0x13, 0x60, 0x01, 0x6A, 0x09,
+ 0x01, 0x00, 0x78, 0x13, 0xA0, 0x05, 0x32, 0x09,
+ 0x75, 0x10, 0x41, 0xC0, 0x06, 0x13, 0x01, 0xC8,
+ 0x6C, 0x01, 0xE0, 0xC2, 0x02, 0xFC, 0x01, 0x11,
+ 0x7B, 0x10, 0x60, 0x01, 0x9C, 0x01, 0x40, 0x00,
+ 0x79, 0x16, 0x20, 0xD8, 0x2F, 0x09, 0x83, 0x01,
+ 0x41, 0xC0, 0x04, 0x13, 0x01, 0xC8, 0x8A, 0x01,
+ 0x01, 0xC8, 0x18, 0x09, 0x86, 0x07, 0x43, 0x00,
+ 0x06, 0xC8, 0x6C, 0x01, 0x07, 0x02, 0x02, 0xFC,
+ 0x17, 0xC2, 0x60, 0x04, 0xFA, 0xA6, 0xE0, 0x04,
+ 0x18, 0x09, 0xC7, 0x61, 0x08, 0x07, 0x60, 0x01,
+ 0x06, 0xFC, 0x40, 0x00, 0x02, 0x13, 0x08, 0x02,
+ 0x01, 0x00, 0x09, 0x10, 0x4C, 0xC2, 0x20, 0xC3,
+ 0x00, 0xFC, 0x2A, 0x13, 0x0C, 0xC8, 0x6C, 0x01,
+ 0xE0, 0xC2, 0x02, 0xFC, 0x1B, 0x11, 0x4B, 0x01,
+ 0x00, 0x01, 0xF4, 0x16, 0xC8, 0x22, 0x12, 0x13,
+ 0xCB, 0x01, 0x00, 0x40, 0x0B, 0xC8, 0x02, 0xFC,
+ 0x0D, 0x10, 0xE0, 0xC1, 0x18, 0x09, 0x01, 0xC3,
+ 0x21, 0x13, 0x4C, 0xC2, 0x15, 0x13, 0x0C, 0xC8,
+ 0x6C, 0x01, 0xE0, 0xC2, 0x02, 0xFC, 0x06, 0x11,
+ 0xCC, 0x81, 0xD5, 0x13, 0x4C, 0xC2, 0x20, 0xC3,
+ 0x00, 0xFC, 0xF4, 0x10, 0x09, 0xC8, 0x6C, 0x01,
+ 0xE0, 0xC2, 0x02, 0xFC, 0x1E, 0x16, 0xA0, 0x07,
+ 0x02, 0xFC, 0x00, 0x80, 0x09, 0xC3, 0x19, 0x10,
+ 0x09, 0xC8, 0x6C, 0x01, 0xE0, 0xC2, 0x02, 0xFC,
+ 0x05, 0x16, 0xA0, 0x07, 0x02, 0xFC, 0x00, 0x80,
+ 0x09, 0xC3, 0x0F, 0x10, 0xE0, 0xC2, 0x02, 0x0C,
+ 0x01, 0x11, 0x1E, 0x10, 0x20, 0xD8, 0x00, 0xE2,
+ 0x83, 0x01, 0x8B, 0x09, 0x8B, 0x09, 0x8B, 0x09,
+ 0x8B, 0x09, 0xA0, 0x07, 0x8A, 0x01, 0x43, 0x00,
+ 0x13, 0x10, 0x0C, 0xC8, 0x8A, 0x01, 0x0C, 0xC8,
+ 0x18, 0x09, 0x0E, 0x10, 0x00, 0x03, 0x02, 0x00,
+ 0xE0, 0xC0, 0x6C, 0x01, 0x20, 0xC3, 0x8A, 0x01,
+ 0x20, 0x98, 0x83, 0x01, 0x00, 0xE2, 0x81, 0x13,
+ 0x60, 0x01, 0x9C, 0x01, 0x40, 0x00, 0xB9, 0x13,
+ 0x01, 0x83, 0x31, 0x16, 0x03, 0xC8, 0x6C, 0x01,
+ 0x40, 0x01, 0x10, 0x00, 0x14, 0x16, 0xE0, 0xC2,
+ 0x2E, 0x06, 0x11, 0x13, 0xE0, 0xC2, 0xF8, 0x05,
+ 0x0E, 0x13, 0xE0, 0x01, 0x3A, 0x07, 0x00, 0x80,
+ 0x80, 0x01, 0x10, 0x00, 0xE0, 0xC2, 0x36, 0x07,
+ 0x06, 0x13, 0xE0, 0x04, 0x36, 0x07, 0x80, 0x01,
+ 0x20, 0x00, 0x60, 0x04, 0xF2, 0xA9, 0x40, 0x01,
+ 0x20, 0x00, 0xF9, 0x13, 0x90, 0x03, 0xFF, 0x11,
+ 0x80, 0x03, 0x08, 0x01, 0x00, 0x04, 0x19, 0x16,
+ 0x60, 0x01, 0x6A, 0x09, 0x01, 0x00, 0x15, 0x16,
+ 0x88, 0x01, 0x00, 0x1A, 0xC8, 0x01, 0x00, 0x01,
+ 0xC8, 0xC5, 0x0F, 0x10, 0xE0, 0x04, 0x18, 0x09,
+ 0xC0, 0x01, 0x04, 0x00, 0x15, 0x10, 0x81, 0xC1,
+ 0x01, 0xC8, 0x6C, 0x01, 0x07, 0x02, 0x00, 0xFC,
+ 0x77, 0xC0, 0x17, 0xC2, 0x48, 0x01, 0x00, 0x18,
+ 0xE4, 0x13, 0x40, 0x01, 0x40, 0x00, 0x15, 0x16,
+ 0x80, 0x01, 0x45, 0x00, 0x46, 0xC1, 0x20, 0xD0,
+ 0x07, 0xFC, 0x60, 0x81, 0x18, 0x09, 0xE6, 0x13,
+ 0xE0, 0xC2, 0x08, 0xFC, 0x08, 0x11, 0xE0, 0xC2,
+ 0x0E, 0xFC, 0x07, 0x15, 0x06, 0x13, 0xE0, 0xC2,
+ 0x14, 0xFC, 0x03, 0x15, 0x02, 0x13, 0xC0, 0x01,
+ 0x01, 0x00, 0x48, 0x01, 0x00, 0x01, 0x11, 0x13,
+ 0x40, 0x01, 0x80, 0x40, 0x69, 0x13, 0x60, 0x04,
+ 0x66, 0xA6, 0x48, 0x01, 0x01, 0x00, 0x03, 0x16,
+ 0x40, 0x01, 0x00, 0x40, 0x0B, 0x16, 0xC8, 0x01,
+ 0x00, 0x40, 0xA0, 0x05, 0x32, 0x09, 0xC8, 0xC5,
+ 0x05, 0x10, 0xC0, 0x01, 0x40, 0x00, 0x40, 0x01,
+ 0x04, 0x00, 0xEF, 0x13, 0xB7, 0x01, 0x20, 0x00,
+ 0xD7, 0xC2, 0xC4, 0x62, 0x0B, 0x05, 0x2B, 0x02,
+ 0xFC, 0xFF, 0xCB, 0xC5, 0x02, 0x15, 0x46, 0x81,
+ 0x6A, 0x13, 0x08, 0x01, 0x00, 0x5E, 0x67, 0x16,
+ 0x08, 0x01, 0x88, 0x00, 0x13, 0x16, 0x86, 0x02,
+ 0x43, 0x00, 0x25, 0x16, 0x40, 0x01, 0x00, 0x40,
+ 0x0B, 0x13, 0x08, 0x01, 0x03, 0x00, 0x08, 0x13,
+ 0x84, 0xC2, 0x2A, 0x02, 0xD8, 0xFF, 0x06, 0xC8,
+ 0x6C, 0x01, 0x0A, 0x68, 0x04, 0xFC, 0x73, 0x10,
+ 0x60, 0x04, 0xD2, 0xA8, 0x40, 0x01, 0x01, 0x00,
+ 0xEA, 0x13, 0x08, 0x01, 0x02, 0x00, 0xE7, 0x16,
+ 0x48, 0x01, 0x01, 0x00, 0xE4, 0x16, 0x40, 0x01,
+ 0x00, 0x40, 0x04, 0x16, 0x60, 0x01, 0xA8, 0x09,
+ 0x80, 0x00, 0xDD, 0x13, 0x8A, 0x07, 0x80, 0x00,
+ 0xA0, 0x06, 0x32, 0xA5, 0xD8, 0x10, 0x00, 0xC0,
+ 0xE7, 0x11, 0x60, 0xC2, 0x6A, 0x09, 0x40, 0x01,
+ 0x00, 0x40, 0x0A, 0x13, 0x48, 0x01, 0x01, 0x00,
+ 0x34, 0x13, 0x48, 0x01, 0x02, 0x00, 0x0A, 0x13,
+ 0x49, 0x01, 0x04, 0x00, 0xD9, 0x16, 0x06, 0x10,
+ 0x49, 0x01, 0x02, 0x00, 0x03, 0x13, 0x08, 0x01,
+ 0x03, 0x00, 0x6E, 0x13, 0x49, 0x01, 0x01, 0x00,
+ 0x12, 0x13, 0x40, 0x01, 0x80, 0x40, 0x01, 0x16,
+ 0x46, 0xC1, 0xE0, 0x04, 0x00, 0xFC, 0x87, 0x07,
+ 0xF8, 0x05, 0x17, 0xC2, 0x14, 0x13, 0xC7, 0x05,
+ 0x17, 0xC8, 0x6C, 0x01, 0x05, 0xC8, 0x00, 0xFC,
+ 0xC6, 0xC5, 0x60, 0x04, 0x66, 0xA6, 0x07, 0x02,
+ 0x02, 0xFC, 0xE0, 0xA1, 0x2C, 0x09, 0xE0, 0xCD,
+ 0xEE, 0x05, 0xE0, 0xC5, 0x04, 0xFC, 0x20, 0xC8,
+ 0x2C, 0x09, 0x04, 0xFC, 0xE2, 0x10, 0xC5, 0xCD,
+ 0xC6, 0xC5, 0x60, 0x04, 0x66, 0xA6, 0x60, 0x04,
+ 0xB6, 0xA8, 0x06, 0xC8, 0x6C, 0x01, 0x85, 0x81,
+ 0x1A, 0x13, 0xE0, 0xC2, 0x04, 0xFC, 0x17, 0x15,
+ 0x86, 0xC2, 0x8A, 0xA2, 0xAA, 0xC1, 0x32, 0x0C,
+ 0x06, 0xC8, 0x6C, 0x01, 0x0B, 0xA8, 0x04, 0xFC,
+ 0x1A, 0x09, 0x0A, 0xC8, 0x6C, 0x01, 0xE0, 0xC2,
+ 0x02, 0xFC, 0xE0, 0x04, 0x00, 0xFC, 0x06, 0xC8,
+ 0x6C, 0x01, 0x0B, 0xC8, 0x02, 0xFC, 0xA0, 0x06,
+ 0x3E, 0xB4, 0x06, 0xC8, 0x6C, 0x01, 0xE0, 0x04,
+ 0x00, 0xFC, 0xA0, 0x01, 0x02, 0xFC, 0x02, 0x00,
+ 0x87, 0x07, 0x30, 0x06, 0xE7, 0x01, 0x04, 0x00,
+ 0x40, 0x00, 0xD7, 0x04, 0x27, 0x02, 0x0C, 0x00,
+ 0x05, 0xC2, 0x60, 0x01, 0x6A, 0x09, 0x04, 0x00,
+ 0x03, 0x16, 0xE0, 0x01, 0x02, 0xFC, 0x20, 0x00,
+ 0xA0, 0x06, 0xFC, 0xB4, 0xC0, 0x01, 0x20, 0x00,
+ 0x60, 0x04, 0x66, 0xA6, 0x48, 0x01, 0x00, 0x18,
+ 0x03, 0x13, 0x48, 0x01, 0x00, 0x10, 0x02, 0x16,
+ 0xA0, 0x05, 0x32, 0x09, 0x86, 0x02, 0x43, 0x00,
+ 0x03, 0x13, 0x40, 0x01, 0x80, 0x40, 0x98, 0x13,
+ 0x06, 0xC8, 0x6C, 0x01, 0xE0, 0x04, 0x00, 0xFC,
+ 0x85, 0xC2, 0xA0, 0x06, 0x3E, 0xB4, 0x20, 0x06,
+ 0x62, 0x09, 0xE6, 0x16, 0xA0, 0x06, 0xD0, 0xD5,
+ 0xE3, 0x10, 0xA0, 0xC2, 0xF6, 0x05, 0x56, 0x16,
+ 0x19, 0xC8, 0xF0, 0x05, 0xA9, 0xC2, 0x0A, 0x00,
+ 0x0D, 0x11, 0xA0, 0xF2, 0x2E, 0x09, 0x0A, 0xD8,
+ 0x80, 0x01, 0x29, 0xC8, 0x06, 0x00, 0x8C, 0x01,
+ 0xA0, 0x07, 0x16, 0x09, 0x04, 0x00, 0x09, 0xC8,
+ 0xF4, 0x05, 0x46, 0x10, 0x29, 0xC8, 0x06, 0x00,
+ 0x6C, 0x01, 0x20, 0xC8, 0x0E, 0xFC, 0xBC, 0x01,
+ 0x20, 0xC8, 0x10, 0xFC, 0xB0, 0x01, 0x20, 0xC8,
+ 0x12, 0xFC, 0xB2, 0x01, 0xA0, 0xF2, 0x2E, 0x09,
+ 0x8A, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x80, 0x01,
+ 0x00, 0xC4, 0xE1, 0x10, 0x47, 0x01, 0x08, 0x00,
+ 0x06, 0x16, 0xA8, 0xC2, 0x06, 0x00, 0xA0, 0x06,
+ 0x3E, 0xB4, 0xE8, 0x04, 0x06, 0x00, 0x07, 0x01,
+ 0x20, 0x00, 0x31, 0x13, 0xE8, 0x04, 0x02, 0x00,
+ 0x3B, 0x10, 0xE0, 0x04, 0x00, 0xFC, 0xA0, 0x06,
+ 0x3E, 0xB4, 0x29, 0x10, 0x00, 0x03, 0x02, 0x00,
+ 0x20, 0xC2, 0x8C, 0x01, 0xE0, 0xC0, 0x6C, 0x01,
+ 0x20, 0xC2, 0xF4, 0x05, 0x28, 0xC8, 0x08, 0x00,
+ 0x6C, 0x01, 0xE8, 0xC1, 0x0A, 0x00, 0x20, 0xC3,
+ 0x02, 0xFC, 0x8C, 0x01, 0x20, 0x00, 0x0C, 0xC8,
+ 0x02, 0xFC, 0x0C, 0x01, 0x00, 0xFE, 0x3B, 0x16,
+ 0x47, 0x01, 0x40, 0x00, 0x50, 0x13, 0x60, 0xC2,
+ 0xF0, 0x05, 0xA7, 0x16, 0xE0, 0x04, 0xF4, 0x05,
+ 0x0C, 0xCA, 0x08, 0x00, 0x47, 0x01, 0x80, 0x00,
+ 0xC9, 0x16, 0x28, 0xC8, 0x06, 0x00, 0x6C, 0x01,
+ 0xA0, 0xC2, 0x00, 0xFC, 0xD2, 0x16, 0xE8, 0xC1,
+ 0x02, 0x00, 0xD7, 0xC2, 0x0F, 0x16, 0x27, 0x02,
+ 0x10, 0x00, 0xD8, 0x04, 0x57, 0xC2, 0x0E, 0x13,
+ 0xC7, 0x05, 0x57, 0xC2, 0x48, 0xC6, 0xC8, 0xC5,
+ 0x03, 0xC8, 0x6C, 0x01, 0x0D, 0x11, 0x90, 0x03,
+ 0xFF, 0x11, 0x80, 0x03, 0xD7, 0x04, 0xC3, 0x01,
+ 0x00, 0x80, 0xED, 0x10, 0xE7, 0x01, 0xF4, 0xFF,
+ 0x20, 0x00, 0xC8, 0xCD, 0xC8, 0xC5, 0xF0, 0x10,
+ 0x90, 0x03, 0xF8, 0x11, 0xE0, 0x02, 0xC0, 0x00,
+ 0x60, 0xC3, 0xFA, 0x00, 0xA0, 0xC3, 0xFC, 0x00,
+ 0xE0, 0xC3, 0xFE, 0x00, 0x54, 0x04, 0xE8, 0xC2,
+ 0x08, 0x00, 0xA8, 0xC2, 0x06, 0x00, 0x0C, 0xC3,
+ 0x33, 0x11, 0x20, 0x23, 0x0A, 0xE0, 0x45, 0x13,
+ 0x20, 0x23, 0x10, 0xE0, 0x46, 0x13, 0x20, 0x23,
+ 0x0E, 0xE0, 0x13, 0x13, 0xE0, 0x21, 0x16, 0xE0,
+ 0xB6, 0x16, 0x20, 0x23, 0x06, 0xE0, 0x03, 0x16,
+ 0x20, 0x27, 0xA8, 0xE4, 0x0A, 0x13, 0xE8, 0xC2,
+ 0x08, 0x00, 0xA8, 0xC2, 0x06, 0x00, 0x4C, 0x01,
+ 0x88, 0x00, 0xA9, 0x16, 0x0C, 0x01, 0x44, 0x00,
+ 0xA6, 0x16, 0x20, 0x06, 0x16, 0x09, 0xA3, 0x13,
+ 0x0A, 0xC8, 0x6C, 0x01, 0x20, 0xC8, 0x04, 0xE0,
+ 0x02, 0xFC, 0x0B, 0xC8, 0x6C, 0x01, 0xA0, 0x07,
+ 0x02, 0xFC, 0x00, 0x81, 0x20, 0xC3, 0x80, 0x01,
+ 0xA0, 0x01, 0x80, 0x01, 0x00, 0xC4, 0x0C, 0xC8,
+ 0x80, 0x01, 0x0A, 0xC8, 0x8C, 0x01, 0xAC, 0x10,
+ 0x0A, 0xC2, 0x0F, 0x13, 0x08, 0xC8, 0x6C, 0x01,
+ 0xA0, 0xC2, 0x00, 0xFC, 0x20, 0xC3, 0x02, 0xFC,
+ 0x20, 0x23, 0x12, 0xE0, 0xF5, 0x16, 0x0B, 0xC8,
+ 0x6C, 0x01, 0x0C, 0xC8, 0x02, 0xFC, 0x60, 0x04,
+ 0x72, 0xA9, 0x8A, 0x07, 0x00, 0x04, 0x60, 0x04,
+ 0x8A, 0xA3, 0x8A, 0x07, 0x20, 0x00, 0x60, 0x04,
+ 0x8A, 0xA3, 0x8A, 0x07, 0x00, 0x02, 0x20, 0x27,
+ 0x0E, 0xE0, 0x04, 0x16, 0xA0, 0x06, 0x32, 0xA5,
+ 0xC3, 0x01, 0x00, 0x80, 0xA8, 0xC2, 0x06, 0x00,
+ 0x60, 0x04, 0x98, 0xA9, 0x00, 0x03, 0x02, 0x00,
+ 0xC0, 0x01, 0x10, 0x00, 0xE0, 0xC2, 0x2E, 0x06,
+ 0x08, 0x13, 0xE0, 0xC2, 0xF8, 0x05, 0x05, 0x13,
+ 0xE0, 0x01, 0x3A, 0x07, 0x00, 0x80, 0x80, 0x01,
+ 0x10, 0x00, 0x90, 0x03, 0xFF, 0x7F, 0x80, 0x03,
+ 0x00, 0x03, 0x02, 0x00, 0x20, 0xC2, 0xF6, 0x05,
+ 0x20, 0xE2, 0xF4, 0x05, 0x0E, 0x16, 0x20, 0xD8,
+ 0x2E, 0x09, 0x80, 0x01, 0x2B, 0xC8, 0x06, 0x00,
+ 0x8C, 0x01, 0xA0, 0x07, 0x16, 0x09, 0x04, 0x00,
+ 0x0B, 0xC8, 0xF4, 0x05, 0x90, 0x03, 0xFF, 0xFF,
+ 0x80, 0x03, 0x87, 0x07, 0xF0, 0x05, 0xDB, 0x04,
+ 0x57, 0xC2, 0x05, 0x16, 0xCB, 0xCD, 0xCB, 0xC5,
+ 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03, 0xC7, 0x05,
+ 0x57, 0xC2, 0x4B, 0xC6, 0xCB, 0xC5, 0x90, 0x03,
+ 0xFF, 0xFF, 0x80, 0x03, 0x00, 0x03, 0x02, 0x00,
+ 0x0B, 0xC2, 0x20, 0xC3, 0xF4, 0x05, 0x0F, 0x13,
+ 0xA8, 0xC2, 0x0A, 0x00, 0x4A, 0x01, 0x10, 0x00,
+ 0x16, 0x16, 0xA0, 0x22, 0x04, 0xE0, 0x1A, 0x16,
+ 0x08, 0xC3, 0xA0, 0x06, 0x36, 0xAC, 0x0C, 0xC2,
+ 0x20, 0xC3, 0xF4, 0x05, 0x13, 0x16, 0x68, 0x01,
+ 0x0A, 0x00, 0x10, 0x00, 0x03, 0x13, 0xE0, 0xC2,
+ 0xF6, 0x05, 0x05, 0x16, 0xA0, 0x06, 0x78, 0xAC,
+ 0x90, 0x03, 0xFF, 0xFF, 0x80, 0x03, 0x87, 0x07,
+ 0xF0, 0x05, 0xA0, 0x06, 0xE6, 0xB4, 0x90, 0x03,
+ 0xFF, 0xFF, 0x80, 0x03, 0x87, 0x07, 0xF0, 0x05,
+ 0xA0, 0x06, 0x2C, 0xB5, 0x80, 0x03, 0x00, 0x03,
+ 0x02, 0x00, 0x87, 0x07, 0xF0, 0x05, 0xCB, 0xC2,
+ 0x08, 0x16, 0xA0, 0x06, 0x36, 0xAC, 0x20, 0x07,
+ 0xF6, 0x05, 0x60, 0xCB, 0xF4, 0x05, 0x02, 0x00,
+ 0x80, 0x03, 0xE0, 0x04, 0xF6, 0x05, 0x20, 0xC2,
+ 0xF4, 0x05, 0x05, 0x16, 0x17, 0xC2, 0x03, 0x13,
+ 0xD8, 0xC5, 0xA0, 0x06, 0x78, 0xAC, 0x80, 0x03,
+ 0x00, 0x03, 0x02, 0x00, 0x0B, 0xC3, 0xA0, 0x06,
+ 0x36, 0xAC, 0x8C, 0xC2, 0xCC, 0xC1, 0x27, 0x02,
+ 0x10, 0x00, 0x88, 0x07, 0xF0, 0x05, 0x88, 0xC1,
+ 0x18, 0xC2, 0x26, 0x13, 0xA8, 0x82, 0x02, 0x00,
+ 0xFA, 0x16, 0xE8, 0xC2, 0x0A, 0x00, 0xE0, 0x22,
+ 0x1E, 0xE0, 0xF5, 0x16, 0x98, 0xC5, 0xE0, 0x22,
+ 0x1C, 0xE0, 0x0B, 0x16, 0x28, 0xC8, 0x06, 0x00,
+ 0xF4, 0x00, 0xE0, 0x02, 0xE0, 0x00, 0xA0, 0x06,
+ 0x3E, 0xB4, 0xE0, 0x02, 0xC0, 0x00, 0xE8, 0x04,
+ 0x06, 0x00, 0xE0, 0x22, 0x18, 0xE0, 0xE4, 0x13,
+ 0x20, 0xEA, 0x22, 0xE0, 0x0A, 0x00, 0xA0, 0xEA,
+ 0x18, 0xE0, 0x04, 0x00, 0xDA, 0x04, 0xA0, 0x06,
+ 0xE6, 0xB4, 0x47, 0x06, 0x06, 0xC2, 0xD8, 0x10,
+ 0x06, 0xC8, 0xF2, 0x05, 0x60, 0xCB, 0xF4, 0x05,
+ 0x02, 0x00, 0x54, 0x04, 0x20, 0xC2, 0xF4, 0x05,
+ 0x13, 0x13, 0xE0, 0x01, 0x9C, 0x01, 0x00, 0x40,
+ 0x8B, 0x0B, 0x8B, 0x0B, 0x60, 0x01, 0x9C, 0x01,
+ 0x00, 0x40, 0x0A, 0x16, 0x60, 0xC2, 0x6C, 0x01,
+ 0x28, 0xC8, 0x06, 0x00, 0x6C, 0x01, 0xA0, 0xC2,
+ 0x02, 0xFC, 0x03, 0x11, 0x09, 0xC8, 0x6C, 0x01,
+ 0x5B, 0x04, 0x09, 0xC8, 0x6C, 0x01, 0x4B, 0xC2,
+ 0x87, 0x07, 0xF0, 0x05, 0xA0, 0x06, 0x2C, 0xB5,
+ 0xE0, 0x04, 0xF4, 0x05, 0x59, 0x04, 0xA8, 0xC2,
+ 0x0A, 0x00, 0x0D, 0x11, 0xA0, 0xF2, 0x2E, 0x09,
+ 0x0A, 0xD8, 0x80, 0x01, 0x28, 0xC8, 0x06, 0x00,
+ 0x8C, 0x01, 0xA0, 0x07, 0x16, 0x09, 0x04, 0x00,
+ 0x08, 0xC8, 0xF4, 0x05, 0x5B, 0x04, 0x20, 0xC3,
+ 0x6C, 0x01, 0x28, 0xC8, 0x06, 0x00, 0x6C, 0x01,
+ 0x20, 0xC8, 0x0E, 0xFC, 0xBC, 0x01, 0x20, 0xC8,
+ 0x10, 0xFC, 0xB0, 0x01, 0x20, 0xC8, 0x12, 0xFC,
+ 0xB2, 0x01, 0x0C, 0xC8, 0x6C, 0x01, 0xA0, 0xF2,
+ 0x2E, 0x09, 0x8A, 0x01, 0x00, 0x10, 0xA0, 0x01,
+ 0x80, 0x01, 0x00, 0xC4, 0xDD, 0x10, 0x48, 0xC0,
+ 0x89, 0xC0, 0x81, 0x60, 0xC2, 0x05, 0x5B, 0x04,
+ 0x0B, 0xC3, 0xA0, 0x06, 0xC8, 0xAC, 0x41, 0xCC,
+ 0x42, 0x06, 0xFD, 0x16, 0xA0, 0x06, 0xC8, 0xAC,
+ 0x01, 0xC1, 0x44, 0x8C, 0x12, 0x16, 0xC4, 0x05,
+ 0x42, 0x06, 0xFB, 0x16, 0x04, 0x02, 0x0E, 0xAD,
+ 0x03, 0x02, 0x01, 0x01, 0x94, 0x06, 0x03, 0x02,
+ 0x5A, 0x5A, 0x94, 0x06, 0x43, 0x05, 0x94, 0x06,
+ 0x03, 0x07, 0x94, 0x06, 0xC3, 0x04, 0x94, 0x06,
+ 0xCC, 0x05, 0x5C, 0x04, 0xCB, 0xC1, 0xA0, 0x06,
+ 0xC8, 0xAC, 0x43, 0xCC, 0x42, 0x06, 0xFD, 0x16,
+ 0xA0, 0x06, 0xC8, 0xAC, 0x43, 0x8C, 0xF5, 0x16,
+ 0x42, 0x06, 0xFC, 0x16, 0x57, 0x04, 0x8B, 0xC2,
+ 0x08, 0xC0, 0x49, 0xC1, 0x85, 0x05, 0x80, 0x02,
+ 0x40, 0x00, 0x03, 0x11, 0x80, 0x02, 0x4F, 0x00,
+ 0x45, 0x12, 0x01, 0x02, 0xC8, 0xAC, 0xA1, 0x09,
+ 0x01, 0x80, 0x40, 0x13, 0x01, 0x02, 0xF8, 0xAD,
+ 0xA1, 0x09, 0x01, 0x80, 0x3B, 0x13, 0x60, 0xC0,
+ 0x06, 0x00, 0xA1, 0x09, 0x01, 0x80, 0x36, 0x13,
+ 0x81, 0x05, 0x01, 0x80, 0x33, 0x13, 0x4A, 0xC0,
+ 0xA1, 0x09, 0x01, 0x80, 0x2F, 0x13, 0x00, 0xC8,
+ 0x6A, 0x01, 0x80, 0x02, 0x80, 0x00, 0x17, 0x14,
+ 0x01, 0x02, 0x00, 0xF8, 0xA0, 0xC1, 0x40, 0x01,
+ 0xA0, 0x01, 0x40, 0x01, 0x00, 0x04, 0x02, 0x02,
+ 0x00, 0x10, 0x03, 0x02, 0x00, 0x04, 0xB1, 0xCC,
+ 0x43, 0x06, 0xFD, 0x16, 0xA0, 0x01, 0x40, 0x01,
+ 0x00, 0x40, 0x08, 0x02, 0x10, 0xF8, 0x06, 0xC8,
+ 0x40, 0x01, 0x00, 0xC0, 0x02, 0x13, 0x08, 0x02,
+ 0x00, 0xF8, 0x09, 0x02, 0xFE, 0xFB, 0xA0, 0x06,
+ 0xD2, 0xAC, 0x25, 0x10, 0x80, 0x02, 0x80, 0x00,
+ 0x09, 0x14, 0x01, 0x02, 0x00, 0xF8, 0x02, 0x02,
+ 0x00, 0x10, 0x03, 0x02, 0x00, 0x04, 0x72, 0xCC,
+ 0x43, 0x06, 0xFD, 0x16, 0x80, 0x05, 0x80, 0x02,
+ 0x80, 0x00, 0x04, 0x12, 0x60, 0x01, 0x04, 0x01,
+ 0x20, 0x00, 0x05, 0x13, 0x40, 0x81, 0xAB, 0x16,
+ 0x80, 0x02, 0x80, 0x00, 0x0B, 0x14, 0xA0, 0x07,
+ 0x6A, 0x01, 0x7E, 0x00, 0x02, 0x02, 0x00, 0x10,
+ 0x03, 0x02, 0x00, 0x04, 0xC1, 0x04, 0x81, 0xCC,
+ 0x43, 0x06, 0xFD, 0x16, 0xCA, 0x05, 0x5A, 0x04,
+ 0x00, 0x02, 0xEA, 0xAD, 0x01, 0x02, 0x1A, 0xAF,
+ 0x40, 0x02, 0x00, 0xFC, 0x41, 0x02, 0x00, 0xFC,
+ 0x40, 0x80, 0x04, 0x13, 0xA0, 0x07, 0x04, 0x01,
+ 0x3C, 0x00, 0x5B, 0x04, 0xC0, 0x04, 0x01, 0x02,
+ 0x08, 0x00, 0x02, 0x02, 0x00, 0x12, 0xE0, 0xC1,
+ 0x40, 0x01, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x04,
+ 0x03, 0x02, 0x00, 0x01, 0x00, 0xC8, 0x6A, 0x01,
+ 0xA0, 0xCC, 0x10, 0xF8, 0x80, 0x05, 0x03, 0x06,
+ 0xF9, 0x16, 0x22, 0x02, 0x00, 0x02, 0x01, 0x06,
+ 0xF3, 0x16, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40,
+ 0x07, 0xC8, 0x40, 0x01, 0x00, 0x02, 0x00, 0x08,
+ 0x40, 0xC0, 0x01, 0x06, 0x01, 0xC8, 0x6A, 0x01,
+ 0x61, 0x02, 0x00, 0x80, 0x01, 0xC8, 0x10, 0xF8,
+ 0x00, 0x06, 0xF6, 0x16, 0xC0, 0x04, 0xC8, 0x04,
+ 0xC9, 0x04, 0x03, 0x02, 0x00, 0x08, 0x00, 0xC8,
+ 0x6A, 0x01, 0x80, 0xC1, 0x66, 0x02, 0x00, 0x80,
+ 0x20, 0xC1, 0x10, 0xF8, 0x06, 0x81, 0x15, 0x16,
+ 0x08, 0xC2, 0x06, 0x13, 0x80, 0x05, 0x03, 0x06,
+ 0xF2, 0x16, 0x08, 0xC2, 0x0D, 0x13, 0x19, 0x10,
+ 0xA0, 0x07, 0x10, 0xF8, 0x55, 0x55, 0x20, 0xC1,
+ 0x10, 0xF8, 0x84, 0x02, 0x55, 0x55, 0x02, 0x16,
+ 0x06, 0xC2, 0xF0, 0x10, 0x06, 0x81, 0xEE, 0x13,
+ 0x5B, 0x04, 0xA0, 0x07, 0x10, 0xF8, 0x55, 0x55,
+ 0x60, 0xC1, 0x10, 0xF8, 0x05, 0x81, 0x03, 0x13,
+ 0x85, 0x02, 0x55, 0x55, 0xF5, 0x16, 0x08, 0xC2,
+ 0xE1, 0x13, 0x40, 0xC2, 0x09, 0x06, 0x48, 0x02,
+ 0xFF, 0x07, 0xC0, 0x04, 0x01, 0x02, 0x08, 0x00,
+ 0x02, 0x02, 0x00, 0x12, 0x03, 0x02, 0x00, 0x01,
+ 0x00, 0xC8, 0x6A, 0x01, 0x32, 0xC8, 0x10, 0xF8,
+ 0x80, 0x05, 0x03, 0x06, 0xF9, 0x16, 0x22, 0x02,
+ 0x00, 0x02, 0x01, 0x06, 0xF3, 0x16, 0x88, 0x02,
+ 0x40, 0x00, 0x13, 0x15, 0x89, 0x02, 0x4F, 0x00,
+ 0x10, 0x11, 0xC0, 0x04, 0x02, 0x02, 0x00, 0x12,
+ 0x01, 0x02, 0x08, 0x00, 0x03, 0x02, 0x00, 0x01,
+ 0x80, 0xCC, 0x03, 0x06, 0xFD, 0x16, 0x22, 0x02,
+ 0x00, 0x02, 0x01, 0x06, 0xF7, 0x16, 0xCB, 0x05,
+ 0x5B, 0x04, 0xA0, 0x07, 0x04, 0x01, 0x37, 0x00,
+ 0x5B, 0x04, 0x33, 0x07, 0x33, 0x07, 0x0C, 0x10,
+ 0x13, 0x07, 0x23, 0x07, 0x02, 0x00, 0xCB, 0xC8,
+ 0x06, 0x00, 0x23, 0x02, 0x18, 0x00, 0xE0, 0xCC,
+ 0x6C, 0x01, 0xCD, 0xCC, 0xCE, 0xCC, 0xCF, 0xCC,
+ 0x83, 0x07, 0x30, 0x06, 0xD3, 0xC1, 0x0A, 0x13,
+ 0x83, 0x07, 0x36, 0x07, 0xD3, 0xC1, 0x06, 0x13,
+ 0x83, 0x07, 0xA0, 0x00, 0x93, 0x00, 0x0C, 0xC8,
+ 0x6C, 0x01, 0x80, 0x03, 0x63, 0x07, 0x02, 0x00,
+ 0x2A, 0x15, 0x63, 0xC2, 0x04, 0x00, 0x63, 0x42,
+ 0x06, 0x00, 0xDB, 0x13, 0x63, 0xC3, 0x1A, 0x00,
+ 0x49, 0xD2, 0x0C, 0x13, 0xC9, 0x06, 0x49, 0x72,
+ 0x69, 0xD2, 0xC0, 0xE1, 0xC9, 0x06, 0x49, 0x72,
+ 0xE9, 0x48, 0x04, 0xE0, 0x04, 0x00, 0x49, 0xCB,
+ 0x02, 0x00, 0x52, 0x04, 0x69, 0xC2, 0xC0, 0xE1,
+ 0x49, 0x72, 0x29, 0x02, 0x10, 0x00, 0xC3, 0xC2,
+ 0xE9, 0xA2, 0xA8, 0xE1, 0x1B, 0xC3, 0x89, 0x02,
+ 0x12, 0x00, 0x0F, 0x13, 0xDC, 0xC6, 0x03, 0x16,
+ 0xE9, 0x48, 0x04, 0xE0, 0x04, 0x00, 0x49, 0xCB,
+ 0x02, 0x00, 0x4C, 0xCB, 0x04, 0x00, 0x90, 0x03,
+ 0xFF, 0x01, 0x93, 0x00, 0x0C, 0xC8, 0x6C, 0x01,
+ 0x80, 0x03, 0x0C, 0xC8, 0x6C, 0x01, 0xE0, 0xC6,
+ 0x00, 0xFC, 0xF1, 0x16, 0xE9, 0x48, 0x04, 0xE0,
+ 0x04, 0x00, 0x49, 0xCB, 0x02, 0x00, 0x4C, 0xCB,
+ 0x04, 0x00, 0xED, 0x10, 0x00, 0x03, 0x02, 0x00,
+ 0xDB, 0xC2, 0x63, 0xC2, 0x04, 0x00, 0x4B, 0x42,
+ 0x9F, 0x13, 0x49, 0xD2, 0x0E, 0x13, 0xC9, 0x06,
+ 0x49, 0x72, 0x69, 0xD2, 0xC0, 0xE1, 0xC9, 0x06,
+ 0x49, 0x72, 0xE9, 0x48, 0x04, 0xE0, 0x04, 0x00,
+ 0x49, 0xCB, 0x02, 0x00, 0x90, 0x03, 0xFF, 0xFF,
+ 0x80, 0x03, 0x69, 0xC2, 0xC0, 0xE1, 0x49, 0x72,
+ 0x29, 0x02, 0x10, 0x00, 0xC3, 0xC2, 0xE9, 0xA2,
+ 0xA8, 0xE1, 0x1B, 0xC3, 0x89, 0x02, 0x12, 0x00,
+ 0x0C, 0x13, 0xDC, 0xC6, 0x03, 0x16, 0xE9, 0x48,
+ 0x04, 0xE0, 0x04, 0x00, 0x49, 0xCB, 0x02, 0x00,
+ 0x4C, 0xCB, 0x04, 0x00, 0x90, 0x03, 0xFF, 0xFF,
+ 0x80, 0x03, 0x0C, 0xC8, 0x6C, 0x01, 0xE0, 0xC6,
+ 0x00, 0xFC, 0xF4, 0x16, 0xF0, 0x10, 0x00, 0x03,
+ 0x02, 0x00, 0xBB, 0xC2, 0xBB, 0xC1, 0x86, 0xD1,
+ 0x03, 0x13, 0x86, 0xEA, 0x04, 0x00, 0x13, 0x10,
+ 0xA6, 0xD1, 0xC0, 0xE1, 0xC6, 0x06, 0x86, 0x71,
+ 0xCA, 0xC1, 0xE6, 0xA1, 0xB8, 0xE1, 0xA6, 0xEA,
+ 0x14, 0xE0, 0x04, 0x00, 0x1B, 0xC2, 0x86, 0x02,
+ 0x02, 0x00, 0x03, 0x16, 0xA0, 0x06, 0x0C, 0xB5,
+ 0x02, 0x10, 0xA0, 0x06, 0xE6, 0xB4, 0xDA, 0x04,
+ 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0xAB, 0xC2,
+ 0x06, 0x00, 0x8C, 0x07, 0xE8, 0x05, 0x5C, 0xC2,
+ 0x16, 0x13, 0xA0, 0xC1, 0xEC, 0x05, 0x8A, 0x81,
+ 0x1A, 0x1A, 0xC6, 0xC1, 0x09, 0xC2, 0x59, 0xC2,
+ 0x20, 0x13, 0xE9, 0xA1, 0x08, 0x00, 0x87, 0x82,
+ 0xF9, 0x12, 0xA9, 0xA2, 0x08, 0x00, 0x87, 0x62,
+ 0xCA, 0xCA, 0x08, 0x00, 0x4A, 0x6A, 0x08, 0x00,
+ 0xC9, 0xC6, 0x0B, 0xC6, 0x80, 0x03, 0xCA, 0xCA,
+ 0x08, 0x00, 0x0A, 0xC8, 0xEC, 0x05, 0xDB, 0x04,
+ 0x0B, 0xCF, 0x0B, 0xC7, 0x80, 0x03, 0x8A, 0x61,
+ 0x46, 0xCA, 0x08, 0x00, 0xCA, 0xCA, 0x08, 0x00,
+ 0x0A, 0xC8, 0xEC, 0x05, 0xC9, 0xC6, 0x0B, 0xC7,
+ 0x80, 0x03, 0x87, 0x62, 0xCA, 0xCA, 0x08, 0x00,
+ 0xDB, 0x04, 0x0B, 0xC6, 0x0B, 0xCB, 0x02, 0x00,
+ 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0xBB, 0xC1,
+ 0xDB, 0xC2, 0x8C, 0x07, 0xE8, 0x05, 0x4C, 0xC2,
+ 0xED, 0x04, 0x02, 0x00, 0x09, 0xC2, 0x59, 0xC2,
+ 0x18, 0x13, 0xA9, 0x81, 0x02, 0x00, 0xFA, 0x16,
+ 0xE9, 0x82, 0x04, 0x00, 0xF7, 0x16, 0x49, 0xCB,
+ 0x04, 0x00, 0x99, 0xC2, 0x0A, 0xC6, 0x0A, 0x13,
+ 0x08, 0x83, 0x04, 0x13, 0xA9, 0xAA, 0x08, 0x00,
+ 0x08, 0x00, 0x80, 0x03, 0x2A, 0xA8, 0x08, 0x00,
+ 0xEC, 0x05, 0x80, 0x03, 0x08, 0xCB, 0x02, 0x00,
+ 0x80, 0x03, 0x2D, 0x07, 0x02, 0x00, 0x8C, 0x07,
+ 0x08, 0x00, 0x06, 0xA3, 0x4C, 0xC2, 0x09, 0xC2,
+ 0x59, 0xC2, 0x13, 0x13, 0xE9, 0x82, 0x04, 0x00,
+ 0xFA, 0x16, 0xAD, 0x07, 0x02, 0x00, 0x01, 0x00,
+ 0x49, 0xCB, 0x04, 0x00, 0x19, 0xC6, 0x01, 0x13,
+ 0x80, 0x03, 0x08, 0x83, 0x04, 0x16, 0xA0, 0x49,
+ 0x14, 0xE0, 0x04, 0x00, 0x80, 0x03, 0x08, 0xCB,
+ 0x02, 0x00, 0x80, 0x03, 0x00, 0x03, 0x02, 0x00,
+ 0x0B, 0x06, 0x1F, 0x11, 0x4D, 0x13, 0x8B, 0x07,
+ 0x00, 0x4E, 0x60, 0x01, 0x42, 0x01, 0x80, 0x00,
+ 0x09, 0x13, 0x8B, 0x07, 0x00, 0x3A, 0x20, 0xC1,
+ 0x4E, 0x01, 0x84, 0x02, 0x41, 0x0F, 0x02, 0x11,
+ 0x8B, 0x07, 0x00, 0x4E, 0x0B, 0xC8, 0x44, 0x01,
+ 0xA0, 0x07, 0x62, 0x09, 0xE8, 0x03, 0xE0, 0x01,
+ 0x40, 0x01, 0x00, 0x02, 0xE0, 0x01, 0x40, 0x01,
+ 0x00, 0x20, 0x84, 0x07, 0x34, 0xAF, 0x60, 0x04,
+ 0x42, 0xAF, 0x20, 0xC8, 0x16, 0xE0, 0xE0, 0x00,
+ 0xE0, 0xC2, 0x6A, 0x09, 0xE0, 0x22, 0x10, 0xE0,
+ 0x03, 0x13, 0x20, 0xE8, 0x14, 0xE0, 0xE0, 0x00,
+ 0x20, 0xC8, 0x04, 0xE0, 0x82, 0x01, 0x20, 0xC8,
+ 0xE2, 0x00, 0x8A, 0x01, 0xE0, 0x04, 0x18, 0x09,
+ 0xE0, 0x04, 0xF4, 0x05, 0xE0, 0x04, 0xF8, 0x05,
+ 0xE0, 0x04, 0xF0, 0x05, 0xE0, 0x04, 0x42, 0x07,
+ 0xA0, 0x07, 0x88, 0x01, 0x20, 0x00, 0xE0, 0xC2,
+ 0x30, 0x09, 0x09, 0x13, 0xA0, 0x07, 0x88, 0x01,
+ 0x80, 0x00, 0x20, 0xE8, 0x16, 0xE0, 0x80, 0x01,
+ 0xE0, 0x01, 0x82, 0x01, 0x00, 0x03, 0x8B, 0x07,
+ 0x00, 0xA0, 0x0B, 0xE8, 0x86, 0x01, 0x80, 0x03,
+ 0xE0, 0x04, 0x86, 0x01, 0xE0, 0x01, 0x9C, 0x01,
+ 0x40, 0x00, 0xE0, 0x01, 0x9C, 0x01, 0x00, 0x40,
+ 0xCB, 0x04, 0xB0, 0x03, 0x0B, 0x06, 0x04, 0x13,
+ 0x60, 0x01, 0x9C, 0x01, 0x00, 0x40, 0xF9, 0x16,
+ 0xE0, 0x04, 0x82, 0x01, 0x20, 0xE8, 0x08, 0xE0,
+ 0x6A, 0x09, 0x8B, 0x07, 0x00, 0x80, 0x0B, 0xC8,
+ 0x98, 0x07, 0x0B, 0xC8, 0x78, 0x07, 0x20, 0xC8,
+ 0x04, 0xE0, 0x82, 0x01, 0x8B, 0x07, 0x6F, 0x87,
+ 0x0B, 0x48, 0x3A, 0x07, 0xE0, 0xC2, 0x50, 0x07,
+ 0x8B, 0x02, 0x58, 0x07, 0x10, 0x13, 0x20, 0xE8,
+ 0x0A, 0xE0, 0x00, 0x01, 0xE0, 0xC2, 0x00, 0x01,
+ 0xE0, 0x22, 0x06, 0xE0, 0xF8, 0x13, 0x8B, 0x07,
+ 0x58, 0x07, 0x0B, 0xC8, 0x50, 0x07, 0x8B, 0x07,
+ 0x0C, 0xB8, 0x0B, 0xC8, 0x52, 0x07, 0x80, 0x03,
+ 0x00, 0x03, 0x02, 0x00, 0xE0, 0xC2, 0x1A, 0x09,
+ 0x0C, 0x13, 0x20, 0x06, 0x1C, 0x09, 0x0B, 0xC8,
+ 0x6C, 0x01, 0x20, 0xC8, 0x00, 0xFC, 0x1A, 0x09,
+ 0x4B, 0xCB, 0x02, 0x00, 0x90, 0x03, 0xFF, 0xFF,
+ 0x80, 0x03, 0x41, 0xC0, 0x0F, 0x13, 0x81, 0x80,
+ 0x0D, 0x13, 0x82, 0xA0, 0xE2, 0xC2, 0x32, 0x0C,
+ 0x12, 0x09, 0x0B, 0xC8, 0x6C, 0x01, 0xE0, 0x04,
+ 0x00, 0xFC, 0x20, 0xC3, 0x02, 0xFC, 0x07, 0x11,
+ 0x02, 0xC8, 0x00, 0xFC, 0xED, 0x04, 0x02, 0x00,
+ 0xE0, 0x04, 0x6C, 0x01, 0x80, 0x03, 0x42, 0xCB,
+ 0x02, 0x00, 0x02, 0xC8, 0x6C, 0x01, 0x8B, 0xC0,
+ 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0x83, 0x07,
+ 0x00, 0x80, 0x60, 0xC2, 0x7E, 0x09, 0x09, 0xC1,
+ 0x24, 0x02, 0xF8, 0xFF, 0xA9, 0x08, 0x01, 0x02,
+ 0x00, 0x00, 0x02, 0x02, 0x00, 0x00, 0x0B, 0x02,
+ 0x00, 0x00, 0x0C, 0x02, 0x00, 0x00, 0x07, 0x02,
+ 0x00, 0x00, 0x2C, 0xCB, 0x32, 0x0C, 0x32, 0x0C,
+ 0x06, 0x13, 0x8B, 0x05, 0xCC, 0x05, 0x0B, 0x88,
+ 0x46, 0x04, 0x27, 0x1B, 0xF6, 0x10, 0x09, 0xC2,
+ 0x8B, 0xC2, 0x08, 0x06, 0x0A, 0x13, 0x8B, 0x05,
+ 0xCC, 0x05, 0x0B, 0x88, 0x46, 0x04, 0x1D, 0x1B,
+ 0x2C, 0xCB, 0x32, 0x0C, 0x32, 0x0C, 0xED, 0x16,
+ 0xF4, 0x10, 0x82, 0xC0, 0x14, 0x13, 0x02, 0xC8,
+ 0x6C, 0x01, 0x0A, 0xC8, 0x00, 0xFC, 0x0A, 0xC8,
+ 0x6C, 0x01, 0xE0, 0x04, 0x00, 0xFC, 0xA0, 0x07,
+ 0x02, 0xFC, 0x00, 0x80, 0x04, 0xC8, 0x04, 0xFC,
+ 0x0A, 0xC2, 0x08, 0xA2, 0x02, 0xCA, 0x32, 0x0C,
+ 0x8A, 0xC0, 0x87, 0x05, 0xD6, 0x10, 0x4A, 0xC0,
+ 0xEE, 0x10, 0x47, 0xCB, 0x02, 0x00, 0xE0, 0x04,
+ 0x6C, 0x01, 0x8B, 0x07, 0x43, 0x00, 0xE0, 0x04,
+ 0x00, 0x0C, 0x00, 0x03, 0x02, 0x00, 0x0B, 0xC8,
+ 0x6C, 0x01, 0x8B, 0x02, 0x43, 0x00, 0x04, 0x13,
+ 0x60, 0x01, 0x02, 0xFC, 0x20, 0x00, 0x06, 0x13,
+ 0x8B, 0xC2, 0xA0, 0x06, 0x42, 0xB4, 0x90, 0x03,
+ 0x7F, 0x00, 0x80, 0x03, 0xA0, 0x01, 0x02, 0xFC,
+ 0x20, 0x00, 0x60, 0x01, 0x6A, 0x09, 0x01, 0x00,
+ 0x0B, 0x16, 0x0A, 0x02, 0x02, 0xFC, 0xA0, 0xA2,
+ 0x2C, 0x09, 0xA0, 0xCE, 0xEE, 0x05, 0xA0, 0xC6,
+ 0x04, 0xFC, 0x20, 0xC8, 0x2C, 0x09, 0x04, 0xFC,
+ 0x8A, 0x07, 0xF8, 0x05, 0x5A, 0xC2, 0x08, 0x13,
+ 0xCA, 0x05, 0x5A, 0xC2, 0x09, 0xC8, 0x6C, 0x01,
+ 0x0B, 0xC8, 0x00, 0xFC, 0x8B, 0xC6, 0x02, 0x10,
+ 0x8B, 0xCE, 0x8B, 0xC6, 0x20, 0x20, 0x1A, 0xE0,
+ 0x05, 0x16, 0x20, 0xE8, 0x04, 0xE0, 0x3A, 0x07,
+ 0xE0, 0x04, 0x36, 0x07, 0x90, 0x03, 0x7F, 0x00,
+ 0x80, 0x03, 0x00, 0x03, 0x02, 0x00, 0x0B, 0xC8,
+ 0x6C, 0x01, 0xCC, 0x04, 0xE0, 0x04, 0x00, 0xFC,
+ 0x8B, 0xC2, 0xA0, 0x06, 0x50, 0xB4, 0x90, 0x03,
+ 0x7F, 0x00, 0x80, 0x03, 0xA0, 0x07, 0x02, 0xFC,
+ 0x00, 0x80, 0x20, 0xC8, 0x8C, 0xE1, 0x04, 0xFC,
+ 0x41, 0xC0, 0x0F, 0x16, 0x20, 0xD8, 0x00, 0xE2,
+ 0x83, 0x01, 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B,
+ 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B,
+ 0x8B, 0x0B, 0x8B, 0x0B, 0x8B, 0x0B, 0x0A, 0xC8,
+ 0x8A, 0x01, 0x5B, 0x04, 0x0A, 0xC8, 0x6C, 0x01,
+ 0x20, 0xC3, 0x00, 0xFC, 0xE0, 0x04, 0x00, 0xFC,
+ 0x8A, 0x02, 0x43, 0x00, 0xDF, 0x13, 0xA0, 0x07,
+ 0x02, 0xFC, 0x00, 0x80, 0x04, 0xC8, 0x04, 0xFC,
+ 0x20, 0x98, 0x84, 0x09, 0x1D, 0x09, 0x0A, 0x13,
+ 0x20, 0xC8, 0x1A, 0x09, 0x00, 0xFC, 0x0A, 0xC8,
+ 0x1A, 0x09, 0xA0, 0x05, 0x1C, 0x09, 0x8C, 0xC2,
+ 0xE5, 0x16, 0x5B, 0x04, 0x41, 0xC0, 0x10, 0x13,
+ 0x8A, 0xA2, 0x82, 0xCA, 0x32, 0x0C, 0x1A, 0x09,
+ 0x02, 0xC8, 0x6C, 0x01, 0x0A, 0xC8, 0x00, 0xFC,
+ 0x8A, 0xC0, 0x20, 0x98, 0x83, 0x01, 0x00, 0xE2,
+ 0x09, 0x13, 0x8C, 0xC2, 0xD3, 0x16, 0x5B, 0x04,
+ 0x4A, 0xC0, 0x8A, 0xC0, 0x20, 0x98, 0x83, 0x01,
+ 0x00, 0xE2, 0x1B, 0x16, 0xE0, 0x01, 0x9C, 0x01,
+ 0x40, 0x00, 0xA0, 0x07, 0x64, 0x09, 0x00, 0x70,
+ 0x60, 0x01, 0x9C, 0x01, 0x40, 0x00, 0x07, 0x13,
+ 0x20, 0x06, 0x64, 0x09, 0xF9, 0x16, 0x0A, 0x02,
+ 0x00, 0x01, 0x60, 0x04, 0x8A, 0xA3, 0x60, 0x01,
+ 0x02, 0x0C, 0x00, 0x01, 0xE2, 0x13, 0x20, 0xD8,
+ 0x2F, 0x09, 0x83, 0x01, 0xA0, 0x07, 0x02, 0x0C,
+ 0x00, 0x80, 0x0A, 0xC8, 0x8A, 0x01, 0x0A, 0xC8,
+ 0x18, 0x09, 0xD7, 0x10, 0xD8, 0x04, 0x57, 0xC2,
+ 0x03, 0x16, 0xC8, 0xCD, 0xC8, 0xC5, 0x5B, 0x04,
+ 0xC7, 0x05, 0x57, 0xC2, 0x48, 0xC6, 0xC8, 0xC5,
+ 0x5B, 0x04, 0x08, 0xC8, 0x6C, 0x01, 0x08, 0xA2,
+ 0x20, 0xCA, 0x00, 0xFC, 0x32, 0x0C, 0x18, 0x09,
+ 0x02, 0x10, 0x08, 0xC8, 0x6C, 0x01, 0xE0, 0x04,
+ 0x00, 0xFC, 0x57, 0xC2, 0x03, 0x16, 0xC8, 0xCD,
+ 0xC8, 0xC5, 0x5B, 0x04, 0xC7, 0x05, 0x17, 0xC8,
+ 0x6C, 0x01, 0x08, 0xC8, 0x00, 0xFC, 0xC8, 0xC5,
+ 0x5B, 0x04, 0x17, 0xC6, 0x02, 0x16, 0xC8, 0xC9,
+ 0x02, 0x00, 0xC8, 0xC5, 0x5B, 0x04, 0x17, 0xC2,
+ 0x08, 0xC8, 0x6C, 0x01, 0x07, 0x13, 0xE0, 0xC5,
+ 0x00, 0xFC, 0x08, 0xA2, 0x28, 0xC8, 0x32, 0x0C,
+ 0x00, 0xFC, 0x18, 0x09, 0x5B, 0x04, 0x60, 0x01,
+ 0x82, 0x01, 0x00, 0x20, 0x0A, 0x16, 0x60, 0xC2,
+ 0x84, 0x01, 0xA0, 0x01, 0x82, 0x01, 0x00, 0x20,
+ 0xE0, 0x01, 0x82, 0x01, 0x00, 0x20, 0x09, 0xC8,
+ 0x84, 0x01, 0xC9, 0x04, 0x5B, 0x04, 0xA0, 0x06,
+ 0xBE, 0xB7, 0xD3, 0x04, 0xE0, 0x04, 0x02, 0x01,
+ 0x20, 0xE8, 0x14, 0xE0, 0x00, 0x01, 0x20, 0xC8,
+ 0x16, 0xE0, 0x04, 0x01, 0x05, 0x2C, 0x20, 0x48,
+ 0x14, 0xE0, 0x00, 0x01, 0x8C, 0x07, 0x00, 0x0A,
+ 0x8D, 0x07, 0xD8, 0x07, 0x8E, 0x07, 0x18, 0x00,
+ 0x7C, 0xCF, 0x4E, 0x06, 0xFD, 0x16, 0xE0, 0x02,
+ 0xD8, 0x07, 0x8F, 0x07, 0x11, 0xFF, 0x8B, 0x02,
+ 0x3B, 0x59, 0x21, 0x16, 0x8A, 0x02, 0x3B, 0x59,
+ 0x1E, 0x13, 0x8F, 0x05, 0x20, 0x20, 0x16, 0xE0,
+ 0x01, 0x16, 0x19, 0x10, 0x20, 0x20, 0x04, 0xE0,
+ 0x16, 0x16, 0x00, 0x01, 0xBF, 0x00, 0x13, 0x16,
+ 0x8B, 0x07, 0xC0, 0x40, 0x00, 0x01, 0x00, 0x60,
+ 0x10, 0x13, 0x40, 0x01, 0x00, 0x60, 0x0B, 0x16,
+ 0x8B, 0x07, 0xC4, 0x44, 0xA0, 0xC3, 0x02, 0x01,
+ 0x0E, 0x48, 0x02, 0x01, 0x4E, 0x01, 0x00, 0x10,
+ 0x04, 0x16, 0x8F, 0x07, 0x18, 0xFF, 0x60, 0x04,
+ 0x94, 0xB7, 0x0B, 0xC3, 0x4B, 0xC3, 0x20, 0x20,
+ 0x0A, 0xE0, 0x02, 0x16, 0x6B, 0x02, 0x20, 0x20,
+ 0x20, 0x20, 0x0C, 0xE0, 0x02, 0x16, 0x6C, 0x02,
+ 0x00, 0x20, 0x20, 0x20, 0x0E, 0xE0, 0x02, 0x16,
+ 0x6C, 0x02, 0x20, 0x00, 0x8F, 0x05, 0x20, 0x20,
+ 0x10, 0xE0, 0x07, 0x16, 0x6D, 0x02, 0x20, 0x00,
+ 0x20, 0x21, 0x22, 0xE0, 0xE4, 0x13, 0x04, 0xC1,
+ 0x02, 0x16, 0x84, 0x07, 0xFE, 0x7F, 0x8F, 0x05,
+ 0x20, 0x20, 0x12, 0xE0, 0x02, 0x16, 0x6D, 0x02,
+ 0x00, 0x20, 0x60, 0x21, 0x22, 0xE0, 0xD7, 0x13,
+ 0x45, 0xC1, 0x02, 0x16, 0x85, 0x07, 0xFE, 0x7F,
+ 0x8F, 0x05, 0x86, 0xD1, 0x0B, 0x13, 0xA0, 0x25,
+ 0x26, 0xE0, 0x08, 0x13, 0x8F, 0x05, 0x20, 0x26,
+ 0x22, 0xE0, 0x04, 0x16, 0x8F, 0x05, 0xA0, 0x26,
+ 0x22, 0xE0, 0x02, 0x13, 0x60, 0x04, 0x94, 0xB7,
+ 0x01, 0xD8, 0xEC, 0x08, 0x20, 0xD8, 0xDB, 0x07,
+ 0x00, 0x09, 0x02, 0xD8, 0xF6, 0x08, 0x20, 0xD8,
+ 0xDD, 0x07, 0xE2, 0x08, 0xE0, 0x02, 0x58, 0x07,
+ 0x20, 0xD8, 0xEF, 0x07, 0xF4, 0x07, 0x20, 0xD8,
+ 0xF1, 0x07, 0xF6, 0x07, 0x20, 0xD8, 0xF3, 0x07,
+ 0xF8, 0x07, 0x09, 0x02, 0x06, 0x00, 0xCB, 0x04,
+ 0x0F, 0x02, 0xEE, 0x07, 0x8F, 0x05, 0xCB, 0xDF,
+ 0x09, 0x06, 0xFC, 0x16, 0xA0, 0x06, 0xBE, 0xB7,
+ 0x89, 0x07, 0x5C, 0xE3, 0xE0, 0x04, 0x1A, 0x01,
+ 0x20, 0xC8, 0xE4, 0x07, 0x18, 0x01, 0x19, 0xC8,
+ 0x0C, 0x01, 0x39, 0xC8, 0x0A, 0x01, 0x39, 0xC8,
+ 0x12, 0x01, 0x09, 0x16, 0x79, 0xC3, 0x0F, 0x02,
+ 0x00, 0xE0, 0x4F, 0x63, 0x2D, 0x02, 0x00, 0x90,
+ 0x0D, 0xC8, 0x14, 0x01, 0x02, 0x10, 0x39, 0xC8,
+ 0x14, 0x01, 0xF9, 0xC3, 0x3F, 0xC8, 0x0E, 0x01,
+ 0x1F, 0xC8, 0x10, 0x01, 0xE0, 0x04, 0x14, 0x09,
+ 0xB9, 0xC2, 0x1A, 0xC8, 0x00, 0x01, 0x96, 0x06,
+ 0x89, 0x02, 0x84, 0xE3, 0xE0, 0x16, 0x8F, 0x07,
+ 0x1C, 0xFF, 0x8C, 0x07, 0x00, 0x0A, 0x8D, 0x07,
+ 0x84, 0xE3, 0x8E, 0x07, 0x10, 0x00, 0x7C, 0x8F,
+ 0x44, 0x16, 0x4E, 0x06, 0xFC, 0x16, 0xA0, 0xC3,
+ 0xE2, 0x07, 0xE0, 0xC3, 0xE0, 0x07, 0xCE, 0x83,
+ 0x01, 0x14, 0xCE, 0xC3, 0x0F, 0xC8, 0x1A, 0x01,
+ 0x8C, 0x07, 0x94, 0xE3, 0x8D, 0x07, 0x00, 0x0A,
+ 0x8E, 0x07, 0xA4, 0xE3, 0x8C, 0x63, 0x7C, 0xCF,
+ 0x4E, 0x06, 0xFD, 0x16, 0xE0, 0x04, 0x30, 0x09,
+ 0x20, 0x01, 0x42, 0x01, 0x00, 0x04, 0x02, 0x16,
+ 0x20, 0x07, 0x30, 0x09, 0x60, 0xC2, 0x62, 0x01,
+ 0xE0, 0x04, 0x62, 0x01, 0x8E, 0x07, 0x00, 0x80,
+ 0x8C, 0x07, 0x34, 0x09, 0x8D, 0x07, 0x06, 0x00,
+ 0x3E, 0xDF, 0x8E, 0x05, 0x0D, 0x06, 0xFC, 0x16,
+ 0xFE, 0xD3, 0xCF, 0x06, 0x8E, 0x05, 0xFE, 0xD3,
+ 0xCF, 0x06, 0x8C, 0x07, 0x34, 0x09, 0x09, 0xC8,
+ 0x62, 0x01, 0xC9, 0x04, 0x5C, 0xA3, 0x7C, 0xE2,
+ 0x5C, 0xA3, 0x7C, 0xE2, 0x5C, 0xA3, 0x7C, 0xE2,
+ 0x02, 0x13, 0xCD, 0x83, 0x09, 0x13, 0x20, 0x07,
+ 0x34, 0x09, 0x06, 0x10, 0x8F, 0x07, 0x19, 0xFF,
+ 0xCD, 0xA3, 0x0F, 0xC8, 0x04, 0x01, 0xFF, 0x10,
+ 0xA0, 0x01, 0x02, 0x01, 0x00, 0x10, 0xE0, 0xC3,
+ 0xEE, 0x07, 0xE0, 0x43, 0x06, 0xE0, 0x0F, 0xC8,
+ 0x00, 0x01, 0x20, 0xC0, 0x04, 0xE0, 0xE0, 0x04,
+ 0xFE, 0x06, 0xD3, 0x04, 0xE0, 0x04, 0x04, 0x01,
+ 0x60, 0x04, 0x0C, 0xB8, 0x8C, 0x07, 0x00, 0x0A,
+ 0x8D, 0x07, 0x18, 0x00, 0x8E, 0x07, 0x3B, 0x59,
+ 0x0E, 0xCF, 0x4D, 0x06, 0xFD, 0x16, 0x5B, 0x04,
+ 0x93, 0x01, 0x00, 0x80, 0x20, 0x04, 0xC0, 0xE2,
+ 0x60, 0xD0, 0x98, 0x07, 0x1C, 0x13, 0x00, 0x03,
+ 0x02, 0x00, 0xA0, 0xC0, 0x46, 0x07, 0x12, 0xC8,
+ 0x46, 0x07, 0x02, 0x16, 0x93, 0x01, 0x20, 0x00,
+ 0x00, 0x03, 0x0F, 0x00, 0x20, 0x04, 0xE8, 0xE2,
+ 0x93, 0x01, 0x00, 0x20, 0x80, 0x01, 0x00, 0x40,
+ 0x00, 0x01, 0xFE, 0x00, 0x49, 0x16, 0xC4, 0xC3,
+ 0x25, 0x16, 0xD3, 0xC3, 0xC5, 0x43, 0x0C, 0x16,
+ 0xE0, 0xC3, 0x98, 0x07, 0x03, 0x11, 0xE0, 0x02,
+ 0x98, 0x07, 0x51, 0x04, 0xE0, 0xC3, 0x78, 0x07,
+ 0x0A, 0x11, 0xE0, 0x02, 0x78, 0x07, 0x51, 0x04,
+ 0xD3, 0x11, 0x4F, 0x01, 0x00, 0x20, 0xE4, 0x13,
+ 0x4F, 0x01, 0x20, 0x00, 0xD1, 0x13, 0x05, 0x2C,
+ 0x41, 0xA0, 0x21, 0x04, 0xC0, 0xE2, 0x8B, 0x07,
+ 0x0C, 0xB8, 0x00, 0x01, 0x00, 0x40, 0x0F, 0x13,
+ 0xDD, 0xC3, 0x4F, 0x02, 0x0F, 0x00, 0x2F, 0xE1,
+ 0x14, 0xE0, 0x5B, 0x04, 0xE4, 0xC3, 0xC0, 0xE1,
+ 0xCF, 0x73, 0x2F, 0x41, 0x14, 0xE0, 0x6F, 0xC3,
+ 0xEC, 0xEA, 0x8B, 0x07, 0x0C, 0xB8, 0x4B, 0xC2,
+ 0xA0, 0xC2, 0xF4, 0x07, 0x8C, 0x07, 0x08, 0x00,
+ 0xBD, 0xC0, 0xA0, 0xC3, 0xEA, 0x07, 0xE0, 0xC3,
+ 0xEC, 0x07, 0xA0, 0x06, 0x00, 0xBA, 0xC0, 0x01,
+ 0x00, 0x40, 0x02, 0xD8, 0x17, 0x01, 0x62, 0x02,
+ 0x80, 0xFF, 0xA0, 0x06, 0x54, 0xBA, 0x02, 0xC8,
+ 0x04, 0x01, 0x90, 0x03, 0x3F, 0x60, 0x59, 0x04,
+ 0xC0, 0xC3, 0xCF, 0x73, 0xEF, 0xC3, 0xC0, 0xE1,
+ 0xCF, 0x73, 0xAF, 0xC3, 0xDE, 0xEA, 0x9E, 0xC3,
+ 0x4E, 0x02, 0x0F, 0x00, 0x2E, 0x21, 0x14, 0xE0,
+ 0x08, 0x13, 0x2F, 0x40, 0x14, 0xE0, 0xCF, 0xA3,
+ 0x2F, 0x04, 0xF0, 0xE2, 0x40, 0x01, 0x00, 0x40,
+ 0xA4, 0x13, 0xC4, 0xC3, 0xC7, 0x16, 0x00, 0x01,
+ 0xFE, 0x00, 0xE6, 0x16, 0x9E, 0x10, 0x40, 0x01,
+ 0x00, 0x40, 0x05, 0x16, 0x20, 0xE0, 0x14, 0xE0,
+ 0x65, 0x02, 0x00, 0x58, 0x96, 0x10, 0x20, 0xD8,
+ 0xDE, 0x07, 0x17, 0x01, 0x8F, 0x07, 0x86, 0xFF,
+ 0x0F, 0xC8, 0x04, 0x01, 0xC0, 0x01, 0x00, 0x40,
+ 0x45, 0x02, 0xFF, 0xA7, 0x8A, 0x10, 0x20, 0xC3,
+ 0xFE, 0x06, 0x20, 0x27, 0x38, 0xE3, 0x07, 0x13,
+ 0x20, 0x23, 0x22, 0xE0, 0x1A, 0x13, 0x65, 0x02,
+ 0xFF, 0xDF, 0x20, 0x40, 0x14, 0xE0, 0x20, 0xE0,
+ 0x16, 0xE0, 0x0C, 0xC8, 0xE6, 0x08, 0x8D, 0x07,
+ 0xE2, 0x08, 0x58, 0x04, 0x20, 0x48, 0x08, 0xE0,
+ 0xFE, 0x06, 0x20, 0xC3, 0xE6, 0x08, 0x20, 0x27,
+ 0x38, 0xE3, 0x19, 0x16, 0x80, 0x03, 0x02, 0xC3,
+ 0x6C, 0xC2, 0x0A, 0x00, 0x99, 0x06, 0x60, 0x04,
+ 0x0C, 0xB8, 0xA0, 0xC2, 0xF4, 0x07, 0x8C, 0x07,
+ 0x01, 0x00, 0x8D, 0x07, 0x06, 0x06, 0xCE, 0x04,
+ 0xE0, 0xC3, 0x08, 0x06, 0x01, 0x13, 0x97, 0x06,
+ 0x20, 0xD8, 0x07, 0x06, 0x17, 0x01, 0x8B, 0x07,
+ 0x82, 0xFF, 0x0B, 0xC8, 0x04, 0x01, 0xA0, 0x06,
+ 0xB4, 0xBE, 0x60, 0x04, 0x0C, 0xB8, 0xA0, 0xC2,
+ 0xEE, 0x07, 0x8C, 0x07, 0x06, 0x00, 0x8D, 0x07,
+ 0xEE, 0x08, 0xA0, 0xC3, 0xE6, 0x07, 0xE0, 0xC3,
+ 0xE8, 0x07, 0x97, 0x06, 0xA0, 0xC2, 0xF4, 0x07,
+ 0x8D, 0x07, 0xF4, 0x08, 0xDD, 0x04, 0x8C, 0x07,
+ 0x02, 0x00, 0x97, 0x06, 0x8D, 0x07, 0x00, 0x80,
+ 0xA0, 0xC2, 0xEE, 0x08, 0x0A, 0x88, 0x0C, 0x06,
+ 0x14, 0x1B, 0x82, 0x07, 0xD0, 0xB9, 0xA0, 0xC3,
+ 0xF0, 0x08, 0xE0, 0xC3, 0xF2, 0x08, 0x8B, 0x07,
+ 0x0C, 0xE3, 0x8A, 0x02, 0x14, 0x00, 0x04, 0x1A,
+ 0x8B, 0x07, 0xBA, 0xEA, 0x2A, 0x02, 0xEC, 0xFF,
+ 0x8A, 0xA2, 0xCA, 0xA2, 0xDB, 0xC2, 0x01, 0x13,
+ 0x9B, 0x06, 0x20, 0xC8, 0xEE, 0x08, 0xF2, 0x08,
+ 0x20, 0xC8, 0x20, 0xE0, 0xEE, 0x08, 0x0D, 0xC8,
+ 0xF0, 0x08, 0x8D, 0x07, 0xEC, 0x08, 0x20, 0xE0,
+ 0x18, 0xE0, 0x65, 0x02, 0x00, 0x58, 0x58, 0x04,
+ 0x45, 0x02, 0xFF, 0xA7, 0x80, 0x03, 0x60, 0xC0,
+ 0xEE, 0x05, 0x21, 0x02, 0xE8, 0x03, 0x20, 0x01,
+ 0x02, 0x01, 0x06, 0x00, 0x07, 0x16, 0x01, 0x88,
+ 0xEE, 0x05, 0xF9, 0x16, 0x39, 0x10, 0x60, 0xD0,
+ 0x03, 0x01, 0xF1, 0x13, 0x01, 0x02, 0x0A, 0x01,
+ 0x4C, 0xCC, 0x4C, 0xCC, 0x4E, 0xCC, 0x4F, 0xCC,
+ 0xB1, 0x07, 0x40, 0x00, 0x4D, 0xCC, 0x0A, 0xC8,
+ 0x00, 0x01, 0x5B, 0x04, 0x60, 0xC0, 0xEE, 0x05,
+ 0x21, 0x02, 0xE8, 0x03, 0x20, 0x01, 0x02, 0x01,
+ 0x06, 0x00, 0x07, 0x16, 0x01, 0x88, 0xEE, 0x05,
+ 0xF9, 0x16, 0x1E, 0x10, 0x60, 0xD0, 0x03, 0x01,
+ 0xF1, 0x13, 0x01, 0x02, 0x0A, 0x01, 0x4C, 0xCC,
+ 0x4C, 0xCC, 0x4E, 0xCC, 0x4F, 0xCC, 0xB1, 0x07,
+ 0x40, 0x00, 0x4D, 0xCC, 0x0A, 0xC8, 0x00, 0x01,
+ 0xA0, 0x03, 0x60, 0xD0, 0x03, 0x01, 0x01, 0x13,
+ 0x5B, 0x04, 0x60, 0xC0, 0xEE, 0x05, 0x21, 0x02,
+ 0xE8, 0x03, 0x20, 0x01, 0x02, 0x01, 0x06, 0x00,
+ 0xF7, 0x16, 0x01, 0x88, 0xEE, 0x05, 0xF9, 0x16,
+ 0xCD, 0x04, 0x8A, 0x07, 0x00, 0x40, 0x20, 0xC3,
+ 0x00, 0x01, 0x0C, 0x01, 0x00, 0x80, 0x02, 0x13,
+ 0x8A, 0x07, 0x00, 0x20, 0xA0, 0xC3, 0x0E, 0x01,
+ 0xE0, 0xC3, 0x10, 0x01, 0xB0, 0x03, 0x20, 0xC3,
+ 0x58, 0x07, 0x20, 0x23, 0x04, 0xE0, 0x02, 0x13,
+ 0x60, 0x04, 0x8E, 0xB7, 0x60, 0x04, 0x8A, 0xA3,
+ 0x8D, 0x07, 0x00, 0x20, 0x20, 0x20, 0x0A, 0xE0,
+ 0x01, 0x16, 0x5B, 0x04, 0x0D, 0x02, 0x32, 0x0C,
+ 0x5D, 0xC2, 0x01, 0x11, 0xDD, 0x04, 0xCD, 0x05,
+ 0x0D, 0x88, 0x30, 0x0C, 0xF9, 0x16, 0x60, 0xC2,
+ 0x0A, 0x06, 0x8D, 0x07, 0x6A, 0x09, 0xA0, 0x06,
+ 0xF4, 0xBE, 0x09, 0x02, 0x48, 0x00, 0xE0, 0xC3,
+ 0x30, 0x09, 0x03, 0x16, 0xE0, 0x01, 0x6A, 0x09,
+ 0x10, 0x00, 0xE0, 0xC2, 0x6A, 0x09, 0x0F, 0x02,
+ 0x00, 0x01, 0xC9, 0x26, 0x02, 0x13, 0x60, 0x04,
+ 0x86, 0xBD, 0x09, 0x02, 0x00, 0x12, 0x4B, 0x01,
+ 0x10, 0x00, 0x02, 0x13, 0x09, 0x02, 0x00, 0x13,
+ 0x09, 0xD8, 0x2E, 0x09, 0x8F, 0x07, 0x00, 0x40,
+ 0x89, 0x07, 0x6C, 0x09, 0xCB, 0x04, 0xF9, 0xE2,
+ 0xF9, 0xE2, 0xF9, 0xE2, 0x07, 0x16, 0x8B, 0x07,
+ 0x34, 0x09, 0x8C, 0x07, 0x6C, 0x09, 0x3B, 0xCF,
+ 0x3B, 0xCF, 0x1B, 0xC7, 0x20, 0xC3, 0x6C, 0x09,
+ 0x19, 0x11, 0x8F, 0x07, 0x00, 0x20, 0x89, 0x07,
+ 0x7A, 0x09, 0xA0, 0x06, 0x3A, 0xBB, 0xA0, 0x06,
+ 0x3A, 0xBB, 0x12, 0x10, 0x4C, 0xCE, 0x5B, 0x04,
+ 0x19, 0xC3, 0x02, 0x16, 0x8C, 0x07, 0x1A, 0x00,
+ 0x4C, 0xC3, 0x2D, 0x02, 0xF8, 0xFF, 0x0A, 0x02,
+ 0x09, 0x00, 0x2D, 0x02, 0xFA, 0xFF, 0xF2, 0x13,
+ 0x0A, 0x06, 0xFB, 0x16, 0x60, 0x04, 0x86, 0xBD,
+ 0x8F, 0x07, 0x00, 0x10, 0xD9, 0xC2, 0xFA, 0x11,
+ 0x02, 0x16, 0x8B, 0x07, 0x00, 0x04, 0x4B, 0xC3,
+ 0x8D, 0x02, 0x20, 0x00, 0x02, 0x14, 0x0D, 0x02,
+ 0x20, 0x00, 0x8D, 0x02, 0x00, 0x04, 0x02, 0x12,
+ 0x0D, 0x02, 0x00, 0x04, 0x2D, 0x02, 0xF8, 0xFF,
+ 0x0D, 0xC8, 0x2C, 0x09, 0x2B, 0x02, 0xFF, 0x03,
+ 0x8B, 0x01, 0xFF, 0x03, 0x4B, 0xCE, 0x60, 0xC3,
+ 0x6A, 0x09, 0x60, 0x23, 0x18, 0xE0, 0x0C, 0x16,
+ 0x49, 0xC3, 0xDD, 0xC2, 0x0F, 0x02, 0x01, 0x01,
+ 0x8B, 0x01, 0x80, 0xC0, 0xD7, 0x16, 0x8F, 0x05,
+ 0xED, 0xC2, 0x02, 0x00, 0xD3, 0x16, 0x02, 0x10,
+ 0x8D, 0x07, 0xBA, 0xEA, 0x3D, 0xC8, 0xA8, 0x09,
+ 0x1D, 0xC8, 0xAA, 0x09, 0xCB, 0x04, 0xE0, 0x04,
+ 0xF8, 0x05, 0xE0, 0x04, 0x66, 0x09, 0x20, 0xC8,
+ 0x30, 0x0C, 0x80, 0x09, 0xA0, 0x07, 0x82, 0x09,
+ 0xFE, 0xDF, 0x8D, 0x07, 0xFE, 0xDF, 0xE0, 0xC3,
+ 0xD8, 0x07, 0xE0, 0x23, 0x16, 0xE0, 0x24, 0x16,
+ 0xE0, 0xC3, 0x30, 0x0C, 0x4F, 0x63, 0xFF, 0x04,
+ 0xFF, 0x04, 0x4D, 0x06, 0xFD, 0x16, 0x8D, 0x07,
+ 0xFE, 0xDF, 0x20, 0x04, 0xA2, 0xEA, 0xA0, 0xC3,
+ 0xA2, 0xEA, 0xEE, 0xC3, 0x12, 0x00, 0xAA, 0x16,
+ 0x6E, 0xC3, 0x18, 0x00, 0xAD, 0x09, 0x8C, 0x07,
+ 0x00, 0xE0, 0xAC, 0x09, 0x0D, 0x63, 0x0C, 0x13,
+ 0x6E, 0xC3, 0x18, 0x00, 0xAD, 0x09, 0x2D, 0x02,
+ 0x40, 0x00, 0x1D, 0x0A, 0x2D, 0x02, 0x32, 0x0C,
+ 0xBD, 0x07, 0xFF, 0x7F, 0x0C, 0x06, 0xFC, 0x16,
+ 0x20, 0xC3, 0x46, 0x04, 0x8C, 0x02, 0x80, 0x00,
+ 0x13, 0x1A, 0xAC, 0x02, 0x0C, 0xC8, 0x9A, 0x00,
+ 0xE0, 0x02, 0x80, 0x00, 0x88, 0x07, 0x80, 0x00,
+ 0x60, 0xC2, 0x46, 0x04, 0xA0, 0x06, 0x28, 0xAD,
+ 0x02, 0x10, 0x9D, 0x00, 0x05, 0x10, 0x9D, 0x00,
+ 0x8F, 0x07, 0x00, 0x08, 0x60, 0x04, 0x86, 0xBD,
+ 0x4B, 0x2D, 0x81, 0xC3, 0xC9, 0x05, 0x8F, 0x07,
+ 0x00, 0x10, 0x8E, 0x02, 0x02, 0x00, 0xF6, 0x11,
+ 0x8F, 0x07, 0x00, 0x04, 0xC9, 0x05, 0xD9, 0xC2,
+ 0xE0, 0x26, 0x26, 0xE0, 0x02, 0x16, 0x2B, 0x02,
+ 0x06, 0x00, 0x4B, 0xC6, 0x4B, 0xC3, 0xCB, 0x72,
+ 0x2E, 0x02, 0xFE, 0xFF, 0x8B, 0x83, 0xE6, 0x1B,
+ 0xCD, 0x06, 0x4D, 0x73, 0xCD, 0x82, 0xE2, 0x1B,
+ 0xE0, 0x04, 0x1A, 0x09, 0xE0, 0x04, 0x1C, 0x09,
+ 0x4D, 0xC3, 0x02, 0x13, 0x60, 0x66, 0x12, 0xE0,
+ 0xC9, 0x05, 0xCF, 0x04, 0x81, 0x2D, 0x01, 0xC8,
+ 0x6C, 0x01, 0xD4, 0x13, 0x0F, 0xC8, 0x00, 0xFC,
+ 0xC1, 0xC3, 0x0D, 0x06, 0xF7, 0x15, 0x0D, 0x02,
+ 0x36, 0x07, 0x0E, 0x02, 0x98, 0x08, 0x0C, 0x02,
+ 0x03, 0x00, 0x8D, 0xCB, 0x02, 0x00, 0x81, 0x2D,
+ 0x81, 0xCB, 0x06, 0x00, 0xC3, 0x13, 0xEE, 0x04,
+ 0x0C, 0x00, 0x2E, 0x02, 0x18, 0x00, 0x0C, 0x06,
+ 0xF4, 0x16, 0xE0, 0x04, 0x96, 0x08, 0x1F, 0x2E,
+ 0xB9, 0xC3, 0xD9, 0xC3, 0x89, 0x07, 0x12, 0x00,
+ 0x8D, 0x07, 0x3A, 0x09, 0xA0, 0x06, 0xF4, 0xBE,
+ 0x60, 0xC3, 0xD8, 0x07, 0x60, 0x23, 0x16, 0xE0,
+ 0x09, 0x16, 0x20, 0xE8, 0x10, 0xE0, 0x6A, 0x09,
+ 0x20, 0xE8, 0x18, 0xE0, 0x98, 0x07, 0x20, 0xE8,
+ 0x12, 0xE0, 0x78, 0x07, 0x60, 0xC3, 0x6A, 0x09,
+ 0x60, 0x23, 0x1E, 0xE0, 0x03, 0x16, 0x20, 0x48,
+ 0xA4, 0xE3, 0x6A, 0x09, 0x60, 0x23, 0x22, 0xE0,
+ 0x06, 0x13, 0x60, 0x27, 0xA6, 0xE3, 0x03, 0x13,
+ 0x20, 0xE8, 0x10, 0xE0, 0x6A, 0x09, 0x20, 0x2D,
+ 0x00, 0x00, 0x8E, 0x07, 0x00, 0x00, 0xA0, 0x06,
+ 0xD4, 0xBE, 0x4E, 0x05, 0x0E, 0x2C, 0xA0, 0xC0,
+ 0x04, 0x08, 0xEF, 0xC3, 0x06, 0x00, 0x1B, 0x16,
+ 0xA0, 0xC3, 0x72, 0x09, 0xE0, 0xC3, 0x74, 0x09,
+ 0xA0, 0x06, 0xC2, 0xBD, 0xA0, 0xC3, 0x76, 0x09,
+ 0xE0, 0xC3, 0x78, 0x09, 0xA0, 0x06, 0xE0, 0xBD,
+ 0x20, 0xE0, 0x0A, 0xE0, 0x60, 0xC3, 0xD8, 0x07,
+ 0x60, 0x23, 0x16, 0xE0, 0x05, 0x16, 0xE0, 0x04,
+ 0x2E, 0x06, 0x60, 0x41, 0x04, 0xE0, 0x4D, 0x2E,
+ 0x8D, 0x07, 0x00, 0x80, 0x52, 0x04, 0xCF, 0x73,
+ 0x2F, 0x02, 0x00, 0x02, 0x4F, 0xC3, 0x52, 0x04,
+ 0x20, 0x20, 0x0A, 0xE0, 0x03, 0x13, 0x8D, 0x07,
+ 0x00, 0x10, 0x5B, 0x04, 0x20, 0x40, 0x0A, 0xE0,
+ 0x40, 0x02, 0xFF, 0xF0, 0x8E, 0x07, 0x02, 0x00,
+ 0xA0, 0x06, 0xD4, 0xBE, 0x4E, 0x05, 0x0E, 0x2C,
+ 0xA0, 0xC0, 0x04, 0x08, 0xA0, 0x06, 0xB4, 0xBE,
+ 0x60, 0xC3, 0xD8, 0x07, 0x60, 0x23, 0x16, 0xE0,
+ 0x66, 0x16, 0x20, 0x04, 0xB6, 0xEA, 0x63, 0x10,
+ 0x6E, 0x02, 0x00, 0x80, 0x8D, 0x07, 0x00, 0xC0,
+ 0x0D, 0xC8, 0xA6, 0x01, 0x0E, 0xC8, 0x72, 0x09,
+ 0x0F, 0xC8, 0x74, 0x09, 0x0E, 0xC8, 0xA8, 0x01,
+ 0x0F, 0xC8, 0xAA, 0x01, 0x12, 0x10, 0x8F, 0x01,
+ 0x01, 0x00, 0x8A, 0x07, 0x76, 0x09, 0xA0, 0xE3,
+ 0x4E, 0x09, 0x8E, 0xCE, 0x9A, 0x01, 0xFE, 0xFF,
+ 0xE0, 0xE3, 0x50, 0x09, 0x8F, 0xE6, 0x8A, 0x07,
+ 0xAC, 0x01, 0x8E, 0xCE, 0x9A, 0x01, 0xFE, 0xFF,
+ 0x8F, 0xE6, 0x20, 0x20, 0x0A, 0xE0, 0x3F, 0x13,
+ 0x8D, 0x07, 0x00, 0x10, 0x5B, 0x04, 0x20, 0x20,
+ 0x0A, 0xE0, 0x03, 0x13, 0x0D, 0x02, 0x00, 0x10,
+ 0x5B, 0x04, 0x8E, 0xC3, 0x04, 0x13, 0xE0, 0x01,
+ 0x50, 0x09, 0x00, 0x01, 0x06, 0x10, 0xA0, 0x01,
+ 0x50, 0x09, 0x00, 0x01, 0xA0, 0x01, 0x78, 0x09,
+ 0x00, 0x01, 0xA0, 0xC3, 0x76, 0x09, 0xE0, 0xC3,
+ 0x78, 0x09, 0xA0, 0xE3, 0x4E, 0x09, 0xE0, 0xE3,
+ 0x50, 0x09, 0x0E, 0xC8, 0xAC, 0x01, 0x0F, 0xC8,
+ 0xAE, 0x01, 0x0E, 0xC8, 0x76, 0x09, 0x0F, 0xC8,
+ 0x78, 0x09, 0x19, 0x10, 0x6E, 0x02, 0x00, 0x80,
+ 0x0E, 0xC8, 0xA6, 0x01, 0x20, 0x20, 0x0A, 0xE0,
+ 0x12, 0x13, 0x0D, 0x02, 0x00, 0x10, 0x5B, 0x04,
+ 0x8D, 0x07, 0x28, 0x07, 0x89, 0x07, 0x0E, 0x00,
+ 0xA0, 0x06, 0xFA, 0xBE, 0x8D, 0x07, 0x28, 0x07,
+ 0xFD, 0x04, 0x8D, 0x02, 0x36, 0x07, 0xFC, 0x16,
+ 0x20, 0x48, 0x14, 0xE0, 0xFE, 0x06, 0x8D, 0x07,
+ 0x00, 0x80, 0x52, 0x04, 0xA0, 0xC2, 0xEE, 0x07,
+ 0x8C, 0x07, 0x04, 0x00, 0x8D, 0x07, 0xF0, 0x08,
+ 0x97, 0x06, 0x7D, 0xC2, 0x5D, 0xC3, 0x60, 0x43,
+ 0x22, 0xE0, 0xA0, 0x06, 0xFA, 0xBE, 0xEF, 0x10,
+ 0x0E, 0xC8, 0x06, 0x06, 0x0F, 0xC8, 0x08, 0x06,
+ 0xEA, 0x10, 0xB0, 0x03, 0xA0, 0x01, 0x60, 0x07,
+ 0x26, 0x00, 0x40, 0x02, 0x00, 0xC0, 0xE0, 0x04,
+ 0x06, 0x06, 0x8C, 0x07, 0x10, 0x40, 0xCC, 0x44,
+ 0xE0, 0x04, 0xFE, 0x06, 0x85, 0x07, 0x40, 0x80,
+ 0x5B, 0x04, 0x02, 0xC8, 0x04, 0x08, 0x8F, 0x07,
+ 0xFA, 0x07, 0xCE, 0xCB, 0x02, 0x00, 0x8E, 0x07,
+ 0x36, 0x07, 0xCE, 0xCB, 0x04, 0x00, 0x8D, 0x07,
+ 0x30, 0x06, 0x8E, 0x07, 0x10, 0x00, 0x4D, 0x2C,
+ 0x5B, 0x04, 0xA0, 0xC2, 0xF2, 0x07, 0x02, 0x10,
+ 0xA0, 0xC2, 0xF8, 0x07, 0x0B, 0xC8, 0xEA, 0x08,
+ 0x09, 0xC3, 0x0A, 0x13, 0xA0, 0x06, 0x36, 0xBA,
+ 0xA0, 0xC2, 0x00, 0x01, 0xA0, 0xE2, 0x06, 0xE0,
+ 0x4C, 0xA3, 0xCC, 0xA3, 0x01, 0x17, 0x8E, 0x05,
+ 0x4C, 0x62, 0xE0, 0xC2, 0xEA, 0x08, 0x5B, 0x04,
+ 0x8D, 0x07, 0x00, 0x10, 0x20, 0x20, 0x0A, 0xE0,
+ 0x01, 0x13, 0x5B, 0x04, 0x0D, 0x02, 0x48, 0x00,
+ 0xE0, 0xC3, 0x30, 0x09, 0x02, 0x16, 0xCE, 0x01,
+ 0x10, 0x00, 0x8D, 0x27, 0x03, 0x13, 0x0D, 0x02,
+ 0x00, 0x01, 0x52, 0x04, 0x00, 0x03, 0x02, 0x00,
+ 0x60, 0xC3, 0x6A, 0x09, 0x4D, 0x02, 0x08, 0x80,
+ 0x4E, 0x02, 0xF7, 0x7F, 0x8D, 0xE3, 0xE0, 0xC3,
+ 0xD8, 0x07, 0xE0, 0x23, 0x16, 0xE0, 0x04, 0x13,
+ 0x8D, 0x07, 0x06, 0x00, 0x8D, 0x27, 0x02, 0x13,
+ 0xA0, 0xE3, 0x10, 0xE0, 0x0E, 0xC8, 0x6A, 0x09,
+ 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80, 0x09, 0x13,
+ 0x0D, 0x02, 0x00, 0x12, 0x4E, 0x01, 0x10, 0x00,
+ 0x02, 0x13, 0x0D, 0x02, 0x00, 0x13, 0x0D, 0xD8,
+ 0x2E, 0x09, 0x60, 0xC3, 0x80, 0x01, 0x4E, 0x02,
+ 0x01, 0x00, 0x4D, 0x02, 0xFE, 0xFF, 0x4E, 0xE3,
+ 0x0D, 0xC8, 0x80, 0x01, 0x20, 0xD8, 0x40, 0xE2,
+ 0x2F, 0x09, 0x20, 0x01, 0x6A, 0x09, 0x06, 0x00,
+ 0x03, 0x13, 0x20, 0xD8, 0xD0, 0xE1, 0x2F, 0x09,
+ 0x20, 0x98, 0x83, 0x01, 0x00, 0xE2, 0x03, 0x13,
+ 0x20, 0xD8, 0x2F, 0x09, 0x83, 0x01, 0x00, 0x03,
+ 0x0F, 0x00, 0x60, 0x04, 0x88, 0xBE, 0x20, 0x20,
+ 0x0A, 0xE0, 0x03, 0x13, 0x0D, 0x02, 0x00, 0x10,
+ 0x5B, 0x04, 0x09, 0x02, 0x08, 0x00, 0x0D, 0x02,
+ 0x58, 0x09, 0xA0, 0x06, 0xF4, 0xBE, 0xA0, 0x07,
+ 0x02, 0x02, 0x00, 0x00, 0x0D, 0x02, 0x00, 0x04,
+ 0xE0, 0xC3, 0x58, 0x09, 0x0F, 0x01, 0x00, 0x7C,
+ 0x01, 0x13, 0x52, 0x04, 0x8F, 0xC3, 0x4E, 0x02,
+ 0x0F, 0x00, 0xFB, 0x13, 0x8E, 0x02, 0x0F, 0x00,
+ 0xF8, 0x13, 0x0D, 0x02, 0x00, 0x40, 0x4F, 0xC2,
+ 0x49, 0x09, 0x49, 0x02, 0x3F, 0x00, 0x09, 0x01,
+ 0x01, 0x00, 0xEF, 0x16, 0x89, 0x02, 0x06, 0x00,
+ 0xEC, 0x1A, 0x89, 0x02, 0x20, 0x00, 0xE9, 0x14,
+ 0xC9, 0x06, 0x1F, 0x09, 0x4F, 0x02, 0x00, 0x40,
+ 0x4F, 0xE2, 0x69, 0x02, 0x00, 0x80, 0x09, 0xC8,
+ 0x58, 0x09, 0x0F, 0x02, 0xFF, 0xFF, 0x4E, 0xC2,
+ 0x1F, 0x09, 0x09, 0x06, 0xFD, 0x16, 0x4F, 0x05,
+ 0x0D, 0x02, 0x00, 0x20, 0x60, 0xC2, 0x5A, 0x09,
+ 0xD4, 0x13, 0x4F, 0x26, 0xD2, 0x16, 0x0D, 0x02,
+ 0x00, 0x10, 0x60, 0xC2, 0x5C, 0x09, 0xCD, 0x13,
+ 0x4F, 0x26, 0xCB, 0x16, 0x0D, 0x02, 0x00, 0x30,
+ 0x20, 0x88, 0x5A, 0x09, 0x5C, 0x09, 0xC5, 0x13,
+ 0xE0, 0xC3, 0x5A, 0x09, 0x4E, 0xC2, 0x1F, 0x0A,
+ 0x09, 0x06, 0xFD, 0x16, 0xE0, 0xE3, 0x5E, 0x09,
+ 0x0F, 0xC8, 0x5A, 0x09, 0xE0, 0xC3, 0x5C, 0x09,
+ 0x4E, 0xC2, 0x1F, 0x0A, 0x09, 0x06, 0xFD, 0x16,
+ 0xE0, 0xE3, 0x5E, 0x09, 0x0F, 0xC8, 0x5C, 0x09,
+ 0x0F, 0x02, 0xFF, 0xFF, 0x4E, 0xC2, 0x1F, 0x0A,
+ 0x09, 0x06, 0xFD, 0x16, 0x0D, 0x02, 0x00, 0x08,
+ 0x60, 0xC2, 0x5E, 0x09, 0x4F, 0x26, 0xA5, 0x16,
+ 0x4F, 0x05, 0x0F, 0xC8, 0x5E, 0x09, 0x0F, 0x02,
+ 0x02, 0x02, 0x0E, 0x02, 0x03, 0x00, 0x60, 0xC3,
+ 0x40, 0x01, 0x0C, 0x02, 0xFE, 0xC0, 0xA0, 0x01,
+ 0x40, 0x01, 0x00, 0x04, 0xCF, 0x05, 0x09, 0x02,
+ 0x55, 0x55, 0x9C, 0x06, 0x49, 0x05, 0x9C, 0x06,
+ 0x09, 0x07, 0x9C, 0x06, 0x49, 0x05, 0x9C, 0x06,
+ 0x0E, 0x06, 0xF4, 0x16, 0xA0, 0x01, 0x40, 0x01,
+ 0x00, 0x40, 0x0D, 0xC8, 0x40, 0x01, 0x09, 0x02,
+ 0x08, 0x00, 0x0E, 0x02, 0x58, 0x09, 0x0F, 0x02,
+ 0x02, 0x02, 0xFE, 0xCF, 0x49, 0x06, 0xFD, 0x16,
+ 0x60, 0x04, 0x88, 0xBE, 0xC9, 0xC7, 0x5F, 0x82,
+ 0x01, 0x16, 0x5B, 0x04, 0xA0, 0x01, 0x40, 0x01,
+ 0x00, 0x40, 0x0D, 0xC8, 0x40, 0x01, 0x0D, 0x02,
+ 0x00, 0x01, 0x52, 0x04, 0x8D, 0x07, 0x00, 0x10,
+ 0x20, 0x20, 0x0A, 0xE0, 0x0A, 0x16, 0x8D, 0x07,
+ 0x00, 0x08, 0x20, 0x20, 0x10, 0xE0, 0x05, 0x13,
+ 0x8D, 0x07, 0x00, 0x40, 0x4F, 0x01, 0x01, 0x00,
+ 0x01, 0x16, 0x5B, 0x04, 0x20, 0xE0, 0x10, 0xE0,
+ 0x20, 0x07, 0x9C, 0x08, 0x20, 0x07, 0xB4, 0x08,
+ 0x20, 0x07, 0xCC, 0x08, 0xA0, 0x07, 0xA2, 0x08,
+ 0x84, 0x02, 0xA0, 0x07, 0xBA, 0x08, 0x84, 0x02,
+ 0xA0, 0x07, 0xD2, 0x08, 0x84, 0x02, 0xA0, 0x07,
+ 0x04, 0x09, 0x00, 0x40, 0xE0, 0x04, 0x06, 0x09,
+ 0xE0, 0x04, 0x08, 0x09, 0x0E, 0xC8, 0x4C, 0x08,
+ 0x0F, 0xC8, 0x4E, 0x08, 0x0E, 0xC8, 0x8E, 0x08,
+ 0x0F, 0xC8, 0x90, 0x08, 0xE0, 0x04, 0x5A, 0x08,
+ 0xE0, 0x04, 0x60, 0x08, 0xE0, 0x02, 0x78, 0x07,
+ 0xE0, 0x04, 0x94, 0x08, 0x20, 0x40, 0x40, 0xE3,
+ 0x20, 0xE0, 0x0C, 0xE0, 0x60, 0x04, 0xBC, 0xC6,
+ 0x80, 0x01, 0x00, 0xF0, 0xC0, 0x01, 0x00, 0x40,
+ 0x10, 0x10, 0x80, 0x01, 0x00, 0xF0, 0x0D, 0x10,
+ 0xC0, 0x01, 0x00, 0xF0, 0x20, 0x40, 0x06, 0xE0,
+ 0x08, 0x10, 0xC0, 0x01, 0x00, 0xF0, 0x80, 0x01,
+ 0x00, 0x20, 0xE0, 0xC3, 0x94, 0x08, 0x01, 0x16,
+ 0x5B, 0x04, 0x4B, 0xC0, 0x20, 0x04, 0xDA, 0xEA,
+ 0x40, 0x01, 0x00, 0x20, 0xFB, 0x16, 0x51, 0x04,
+ 0xA0, 0xC2, 0xD8, 0x07, 0x4A, 0x01, 0x40, 0x00,
+ 0x01, 0x16, 0x5B, 0x04, 0xE0, 0x02, 0x78, 0x07,
+ 0x20, 0x20, 0x0C, 0xE0, 0xEF, 0x16, 0x43, 0xC2,
+ 0x02, 0x13, 0xA0, 0x06, 0x1A, 0xC3, 0x20, 0x2F,
+ 0x36, 0x07, 0x20, 0x40, 0x0C, 0xE0, 0xA0, 0x06,
+ 0xAC, 0xC1, 0xA0, 0xC3, 0x94, 0x08, 0xFB, 0x16,
+ 0xA0, 0x06, 0x3A, 0xC2, 0x8E, 0x07, 0x04, 0x09,
+ 0x9E, 0x07, 0x00, 0x80, 0x20, 0x20, 0x10, 0xE0,
+ 0x05, 0x16, 0x8F, 0x07, 0x4C, 0x08, 0xBF, 0xCF,
+ 0xBF, 0xCF, 0x9F, 0xC7, 0xA0, 0x06, 0x5A, 0xC2,
+ 0x20, 0xE8, 0x3C, 0xE3, 0x62, 0x07, 0xA0, 0x06,
+ 0x3A, 0xC2, 0x20, 0x48, 0x3C, 0xE3, 0x62, 0x07,
+ 0x20, 0x40, 0x40, 0xE3, 0x20, 0xE0, 0x04, 0xE0,
+ 0x20, 0x48, 0x10, 0xE0, 0x58, 0x07, 0x5B, 0x04,
+ 0x80, 0x01, 0x00, 0xF0, 0x20, 0xE0, 0x04, 0xE0,
+ 0x60, 0x01, 0x60, 0x07, 0x02, 0x00, 0x02, 0x13,
+ 0x9B, 0x06, 0xB8, 0x10, 0x20, 0xE8, 0x1E, 0xE0,
+ 0x58, 0x07, 0xB4, 0x10, 0x9B, 0x06, 0x80, 0x03,
+ 0xE0, 0x02, 0x58, 0x07, 0x00, 0x01, 0x00, 0x40,
+ 0x07, 0x16, 0x8D, 0x07, 0x00, 0x09, 0xA0, 0x06,
+ 0x68, 0xB8, 0xE0, 0x02, 0x78, 0x07, 0x5B, 0x04,
+ 0xC4, 0x01, 0x02, 0x00, 0xE0, 0x02, 0x78, 0x07,
+ 0x5B, 0x04, 0x0E, 0x68, 0x96, 0x08, 0xE9, 0x04,
+ 0x0C, 0x00, 0x11, 0x10, 0x0E, 0x02, 0x00, 0x23,
+ 0x4E, 0xDB, 0x01, 0x00, 0xCC, 0x01, 0x00, 0x04,
+ 0x4C, 0xD7, 0x1C, 0x10, 0x60, 0xC2, 0x5C, 0x07,
+ 0x20, 0x06, 0x94, 0x08, 0xA9, 0xC2, 0x08, 0x00,
+ 0xA9, 0xC3, 0x0C, 0x00, 0xEA, 0x16, 0x29, 0x07,
+ 0x04, 0x00, 0x69, 0x01, 0x0A, 0x00, 0x01, 0x00,
+ 0x2D, 0x13, 0x49, 0xC3, 0x2D, 0x02, 0x0E, 0x00,
+ 0x0A, 0xC3, 0x1D, 0xD3, 0x8C, 0x01, 0x00, 0x84,
+ 0xCC, 0x01, 0x00, 0x40, 0x0A, 0x01, 0x00, 0x5E,
+ 0xDD, 0x16, 0x4C, 0xC7, 0xA9, 0xC3, 0x10, 0x00,
+ 0xE9, 0xC3, 0x12, 0x00, 0x41, 0xCA, 0x10, 0x00,
+ 0x2F, 0x02, 0x04, 0x00, 0x01, 0x17, 0x8E, 0x05,
+ 0x8C, 0x07, 0x02, 0x00, 0xA0, 0xC2, 0xF6, 0x07,
+ 0xA0, 0x06, 0x00, 0xBA, 0x69, 0xC0, 0x10, 0x00,
+ 0x29, 0xC8, 0x14, 0x00, 0x06, 0x09, 0x29, 0xC8,
+ 0x16, 0x00, 0x08, 0x09, 0x69, 0x01, 0x0E, 0x00,
+ 0x00, 0x08, 0x04, 0x16, 0x90, 0x03, 0x7F, 0x00,
+ 0xA0, 0x06, 0x5A, 0xC2, 0x40, 0x01, 0x00, 0x40,
+ 0x01, 0x16, 0x51, 0x04, 0x60, 0x04, 0xBE, 0xC1,
+ 0xA9, 0xC3, 0x0C, 0x00, 0x0B, 0x13, 0x0E, 0x68,
+ 0x96, 0x08, 0xE9, 0x04, 0x0C, 0x00, 0x29, 0xC8,
+ 0x06, 0x00, 0x6C, 0x01, 0xA0, 0xC3, 0x00, 0xFC,
+ 0x01, 0x13, 0x1E, 0x2E, 0x29, 0x07, 0x04, 0x00,
+ 0x5B, 0x04, 0x81, 0x07, 0x20, 0x20, 0x89, 0x07,
+ 0x4C, 0x08, 0x41, 0xCE, 0x63, 0xCE, 0x10, 0x00,
+ 0x63, 0xC6, 0x12, 0x00, 0xA0, 0x06, 0x54, 0xBA,
+ 0x43, 0xC2, 0x02, 0x13, 0xA0, 0x06, 0x1A, 0xC3,
+ 0x20, 0xE0, 0x10, 0xE0, 0x60, 0x04, 0xEC, 0xC1,
+ 0x40, 0x01, 0x00, 0x04, 0xEA, 0x16, 0xA0, 0x06,
+ 0xAC, 0xC1, 0xA0, 0xC2, 0xF0, 0x07, 0x8C, 0x07,
+ 0x04, 0x00, 0x8D, 0x07, 0x4C, 0x08, 0xA0, 0xC3,
+ 0x8E, 0x08, 0xE0, 0xC3, 0x90, 0x08, 0xA0, 0x06,
+ 0x36, 0xBA, 0xE0, 0xC3, 0x4E, 0x08, 0x4F, 0x01,
+ 0x01, 0x00, 0x13, 0x16, 0xE0, 0xC2, 0x94, 0x08,
+ 0xEA, 0x16, 0x60, 0x04, 0xEC, 0xC1, 0xE0, 0xC3,
+ 0x4E, 0x08, 0x4F, 0x01, 0x01, 0x00, 0x09, 0x16,
+ 0x60, 0x04, 0xEC, 0xC1, 0xA0, 0x06, 0x54, 0xBA,
+ 0xE0, 0xC3, 0x4E, 0x08, 0x4F, 0x01, 0x01, 0x00,
+ 0xD7, 0x13, 0xA0, 0xC2, 0xF0, 0x07, 0x20, 0xC3,
+ 0x7C, 0x09, 0x8D, 0x07, 0x4C, 0x08, 0x9D, 0xC3,
+ 0xA0, 0x06, 0x36, 0xBA, 0xC0, 0x06, 0x20, 0xD0,
+ 0x50, 0x08, 0xC0, 0x06, 0x40, 0x01, 0x00, 0x04,
+ 0x0A, 0x16, 0x40, 0x01, 0x80, 0x00, 0x07, 0x13,
+ 0x0E, 0xC8, 0x4C, 0x08, 0x0F, 0xC8, 0x4E, 0x08,
+ 0xA0, 0x06, 0xA2, 0xC1, 0xD8, 0x10, 0x0E, 0xC8,
+ 0x8E, 0x08, 0x0F, 0xC8, 0x90, 0x08, 0x40, 0x01,
+ 0x00, 0x04, 0x0C, 0x13, 0x40, 0x01, 0x20, 0x00,
+ 0x58, 0x16, 0x81, 0x07, 0x10, 0x20, 0x9F, 0x10,
+ 0xA0, 0x06, 0xAC, 0xC1, 0xA0, 0xC3, 0x8E, 0x08,
+ 0xE0, 0xC3, 0x90, 0x08, 0x83, 0x07, 0x98, 0x08,
+ 0x63, 0x07, 0x04, 0x00, 0x2D, 0x11, 0x83, 0x07,
+ 0xB0, 0x08, 0x63, 0x07, 0x04, 0x00, 0x28, 0x11,
+ 0x83, 0x07, 0xC8, 0x08, 0x63, 0x07, 0x04, 0x00,
+ 0x23, 0x11, 0xC3, 0x60, 0x60, 0xC2, 0x46, 0x07,
+ 0xE7, 0x13, 0x69, 0x01, 0x0E, 0x00, 0x00, 0x08,
+ 0xE3, 0x13, 0x00, 0x03, 0x02, 0x00, 0x19, 0xC8,
+ 0x46, 0x07, 0x03, 0x16, 0xA0, 0x01, 0x3A, 0x07,
+ 0x20, 0x00, 0x00, 0x03, 0x0F, 0x00, 0xC0, 0x01,
+ 0x00, 0xF0, 0x80, 0x01, 0x00, 0x20, 0x01, 0x02,
+ 0x06, 0xC4, 0x60, 0x04, 0x9A, 0xC2, 0x81, 0x07,
+ 0x80, 0x20, 0xE0, 0xC8, 0x8E, 0x08, 0x14, 0x00,
+ 0xE0, 0xC8, 0x90, 0x08, 0x16, 0x00, 0xC7, 0x10,
+ 0xE0, 0xC8, 0x50, 0x08, 0x0E, 0x00, 0xCE, 0xC8,
+ 0x10, 0x00, 0xCF, 0xC8, 0x12, 0x00, 0x40, 0x01,
+ 0x20, 0x00, 0xBB, 0x16, 0xE3, 0xC1, 0x06, 0x00,
+ 0xC7, 0xC8, 0x08, 0x00, 0x07, 0xC8, 0x6C, 0x01,
+ 0x07, 0xC8, 0xE0, 0x08, 0x08, 0x02, 0x02, 0xFC,
+ 0xB8, 0x07, 0x00, 0x81, 0xE0, 0xC1, 0xE8, 0x00,
+ 0x07, 0xCE, 0x20, 0xC8, 0x52, 0x08, 0x92, 0x08,
+ 0xDA, 0x13, 0xCE, 0xC8, 0x14, 0x00, 0xCF, 0xC8,
+ 0x16, 0x00, 0x80, 0x01, 0x00, 0x04, 0x82, 0x07,
+ 0x54, 0x08, 0x32, 0xC1, 0x08, 0x11, 0x72, 0xC1,
+ 0x92, 0xC1, 0x82, 0x07, 0x8A, 0x08, 0x04, 0xC1,
+ 0x07, 0x16, 0x60, 0x04, 0x8E, 0xC5, 0x72, 0xC1,
+ 0xB2, 0xC1, 0x84, 0x01, 0x00, 0x80, 0xF9, 0x13,
+ 0x04, 0x68, 0x92, 0x08, 0xC7, 0xC1, 0x37, 0x16,
+ 0x20, 0x98, 0x97, 0x08, 0x85, 0x09, 0x16, 0x16,
+ 0x81, 0x07, 0x40, 0x20, 0xE0, 0xC1, 0x94, 0x08,
+ 0x57, 0x13, 0xA0, 0x06, 0xAC, 0xC1, 0xF4, 0x10,
+ 0xE0, 0xC2, 0x3A, 0x07, 0xE0, 0x42, 0x62, 0x07,
+ 0xE0, 0x26, 0x3A, 0xE3, 0x02, 0x13, 0xA0, 0x06,
+ 0x92, 0xC1, 0xA0, 0x06, 0x54, 0xBA, 0x22, 0x10,
+ 0xA0, 0x06, 0x9C, 0xC1, 0x81, 0x2D, 0x01, 0xC2,
+ 0xFB, 0x13, 0xA0, 0x05, 0x96, 0x08, 0x23, 0xC8,
+ 0x08, 0x00, 0x6C, 0x01, 0xA0, 0x07, 0x02, 0xFC,
+ 0x00, 0x80, 0xC3, 0xC1, 0x27, 0x02, 0x06, 0x00,
+ 0xA0, 0x06, 0x0C, 0xB5, 0xA3, 0x05, 0x0C, 0x00,
+ 0x08, 0xC8, 0x6C, 0x01, 0x08, 0xC8, 0xE0, 0x08,
+ 0x08, 0x02, 0x02, 0xFC, 0xB8, 0x07, 0x00, 0x81,
+ 0xF8, 0xC1, 0x04, 0xC1, 0x37, 0x13, 0xE0, 0xD2,
+ 0x03, 0x01, 0xD2, 0x13, 0x0B, 0x02, 0x0A, 0x01,
+ 0xC4, 0xCE, 0xC7, 0xCE, 0xC5, 0xCE, 0xC6, 0xCE,
+ 0xFB, 0x04, 0x09, 0x02, 0x00, 0x04, 0x48, 0xA2,
+ 0xC9, 0xC6, 0x20, 0xA8, 0xE0, 0x08, 0x12, 0x01,
+ 0x20, 0xC8, 0xF2, 0x07, 0x00, 0x01, 0x47, 0xC2,
+ 0xC4, 0x81, 0x01, 0x14, 0x44, 0xC2, 0xC9, 0x61,
+ 0x09, 0xA2, 0x89, 0xA1, 0x01, 0x17, 0x85, 0x05,
+ 0x09, 0x61, 0xA8, 0x16, 0x82, 0x02, 0x8A, 0x08,
+ 0x05, 0x16, 0x40, 0x01, 0x10, 0x00, 0x12, 0x13,
+ 0x60, 0x04, 0xA6, 0xC3, 0x60, 0x04, 0xBC, 0xC4,
+ 0x60, 0x04, 0x40, 0xC3, 0x81, 0x07, 0x80, 0x20,
+ 0xFB, 0x10, 0x81, 0x07, 0x80, 0x20, 0xF8, 0x10,
+ 0x81, 0x07, 0x02, 0x20, 0xF5, 0x10, 0x81, 0x07,
+ 0x04, 0x20, 0xF2, 0x10, 0x23, 0xC8, 0x08, 0x00,
+ 0x6C, 0x01, 0x07, 0x05, 0xE0, 0xA1, 0xE8, 0x00,
+ 0x0C, 0x02, 0x04, 0xFC, 0x07, 0xCF, 0xE0, 0xC2,
+ 0x92, 0x08, 0xE8, 0x16, 0xE0, 0xD2, 0x03, 0x01,
+ 0x10, 0x16, 0xE0, 0xC2, 0x3A, 0x07, 0xE0, 0x42,
+ 0x62, 0x07, 0xE0, 0x26, 0x3A, 0xE3, 0x07, 0x13,
+ 0x90, 0x03, 0xC8, 0x2F, 0xA0, 0x06, 0x92, 0xC1,
+ 0xE0, 0xD2, 0x03, 0x01, 0x02, 0x16, 0xA0, 0x06,
+ 0x54, 0xBA, 0x23, 0xC8, 0x06, 0x00, 0x6C, 0x01,
+ 0xA3, 0xC2, 0x0E, 0x00, 0x4A, 0x01, 0x00, 0x01,
+ 0x0B, 0x13, 0x0C, 0x02, 0x0E, 0xFC, 0x5C, 0xC2,
+ 0x49, 0x02, 0x00, 0x80, 0x0D, 0x02, 0x6C, 0x09,
+ 0x7D, 0xE2, 0x09, 0xCF, 0x3D, 0xCF, 0x3D, 0xCF,
+ 0x0C, 0x02, 0x00, 0xFC, 0x6C, 0xC3, 0x06, 0x00,
+ 0x4D, 0x02, 0xFF, 0xE0, 0x4A, 0x02, 0x00, 0x02,
+ 0x8A, 0xA2, 0x8A, 0xA2, 0x4A, 0xE3, 0x60, 0xE3,
+ 0x9E, 0x09, 0x0D, 0xCB, 0x06, 0x00, 0xCD, 0x06,
+ 0x0B, 0x02, 0x0F, 0x00, 0xEC, 0x82, 0x04, 0x00,
+ 0xAD, 0x11, 0xEC, 0xC3, 0x0E, 0x00, 0x11, 0x15,
+ 0x10, 0x13, 0x6C, 0xC2, 0x14, 0x00, 0x49, 0x02,
+ 0x00, 0x1F, 0xA7, 0x13, 0xC9, 0x06, 0x89, 0x02,
+ 0x12, 0x00, 0xA3, 0x1B, 0x49, 0x01, 0x01, 0x00,
+ 0xA0, 0x13, 0xC9, 0xA2, 0xEC, 0x82, 0x04, 0x00,
+ 0x9C, 0x11, 0x4D, 0xA3, 0x9D, 0x18, 0x14, 0x11,
+ 0x60, 0x01, 0x6A, 0x09, 0x00, 0x80, 0x18, 0x13,
+ 0x1D, 0x09, 0xCC, 0xA2, 0xEB, 0xC2, 0x08, 0x00,
+ 0x7B, 0x09, 0x4B, 0x02, 0x1E, 0x00, 0xA0, 0xC3,
+ 0xF0, 0x06, 0xAB, 0x23, 0x04, 0xE0, 0x8F, 0x16,
+ 0x60, 0x27, 0x3E, 0xE3, 0x8C, 0x16, 0x4D, 0xA3,
+ 0x4D, 0xA3, 0x4D, 0xA3, 0xCD, 0x06, 0x4D, 0x02,
+ 0x07, 0x00, 0x0D, 0x88, 0xEE, 0x06, 0x0A, 0x15,
+ 0x90, 0x03, 0xFF, 0x6F, 0x53, 0x2F, 0xA0, 0x05,
+ 0x94, 0x08, 0xC3, 0x04, 0xC0, 0x01, 0x00, 0x04,
+ 0x60, 0x04, 0xAA, 0xC3, 0x60, 0x01, 0x6A, 0x09,
+ 0x00, 0x80, 0xF2, 0x13, 0x01, 0x02, 0x08, 0x20,
+ 0x60, 0x04, 0xA2, 0xC5, 0x8D, 0x07, 0x00, 0x10,
+ 0x20, 0x20, 0x0A, 0xE0, 0x0A, 0x16, 0x8D, 0x07,
+ 0x00, 0x08, 0x20, 0x20, 0x0E, 0xE0, 0x05, 0x13,
+ 0x8D, 0x07, 0x00, 0x40, 0x4F, 0x01, 0x01, 0x00,
+ 0x01, 0x16, 0x5B, 0x04, 0x20, 0xE0, 0x0E, 0xE0,
+ 0xA0, 0x07, 0xFA, 0x08, 0x00, 0x80, 0x0E, 0xC8,
+ 0xFA, 0x07, 0x0F, 0xC8, 0xFC, 0x07, 0x0E, 0xC8,
+ 0x3C, 0x08, 0x0F, 0xC8, 0x3E, 0x08, 0xE0, 0x04,
+ 0x08, 0x08, 0xE0, 0x04, 0x0E, 0x08, 0xE0, 0x02,
+ 0x98, 0x07, 0x20, 0x40, 0x4C, 0xE3, 0x20, 0x07,
+ 0x2E, 0x06, 0x60, 0x04, 0x12, 0xCA, 0x00, 0x70,
+ 0x4B, 0xC0, 0xE0, 0x04, 0x2E, 0x06, 0x0B, 0x10,
+ 0x20, 0xF0, 0x4B, 0xE3, 0x02, 0x10, 0x20, 0xF0,
+ 0x4A, 0xE3, 0x4B, 0xC0, 0xE0, 0x04, 0x2E, 0x06,
+ 0xE0, 0x01, 0x62, 0x07, 0x40, 0x00, 0x20, 0xE8,
+ 0x46, 0xE3, 0x62, 0x07, 0x20, 0x04, 0xDA, 0xEA,
+ 0x40, 0x01, 0x00, 0x20, 0x04, 0x13, 0xFA, 0x10,
+ 0x40, 0x01, 0x00, 0x40, 0xF7, 0x16, 0x20, 0x07,
+ 0x2E, 0x06, 0x20, 0x50, 0x50, 0xE3, 0x51, 0x04,
+ 0xF1, 0x10, 0xE0, 0x02, 0x58, 0x07, 0x00, 0x01,
+ 0x00, 0x40, 0x07, 0x16, 0x8D, 0x07, 0xF6, 0x08,
+ 0xA0, 0x06, 0x68, 0xB8, 0xE0, 0x02, 0x98, 0x07,
+ 0x5B, 0x04, 0xC4, 0x01, 0x04, 0x00, 0xE0, 0x02,
+ 0x98, 0x07, 0x5B, 0x04, 0x60, 0x01, 0x60, 0x07,
+ 0x04, 0x00, 0x06, 0x16, 0x20, 0xE8, 0x1C, 0xE0,
+ 0x58, 0x07, 0x80, 0x03, 0xE0, 0x02, 0x98, 0x07,
+ 0x20, 0xD8, 0xDC, 0x07, 0x17, 0x01, 0x8F, 0x07,
+ 0x8E, 0xFF, 0x0F, 0xC8, 0x04, 0x01, 0x20, 0xE8,
+ 0x06, 0xE0, 0x58, 0x07, 0x80, 0x01, 0x00, 0x80,
+ 0x5B, 0x04, 0xE0, 0xC2, 0x4A, 0x08, 0xC3, 0x82,
+ 0x03, 0x13, 0xDB, 0x2D, 0x03, 0xC8, 0x4A, 0x08,
+ 0x49, 0x01, 0x00, 0x01, 0x02, 0x16, 0x60, 0x04,
+ 0x52, 0xC9, 0xE0, 0xC0, 0xF8, 0x05, 0xFD, 0x13,
+ 0x03, 0xC8, 0x6C, 0x01, 0x20, 0xC8, 0x00, 0xFC,
+ 0xF8, 0x05, 0x88, 0x07, 0x02, 0xFC, 0x78, 0xC2,
+ 0xF8, 0xC1, 0x28, 0x02, 0x00, 0x04, 0x49, 0x01,
+ 0x00, 0x01, 0x4D, 0x16, 0x09, 0x01, 0x00, 0x5E,
+ 0x29, 0x16, 0x49, 0x01, 0x02, 0x00, 0x0B, 0x16,
+ 0x60, 0x01, 0x46, 0x08, 0x00, 0x02, 0x0A, 0x16,
+ 0x27, 0x02, 0x04, 0x00, 0x07, 0x88, 0x7E, 0x09,
+ 0x05, 0x12, 0x27, 0x02, 0xFC, 0xFF, 0xA0, 0x01,
+ 0x46, 0x08, 0x00, 0x02, 0xC7, 0xC1, 0x37, 0x15,
+ 0xD3, 0x2D, 0xE0, 0xC0, 0x4A, 0x08, 0x07, 0xA8,
+ 0x48, 0x08, 0x07, 0xA8, 0x44, 0x08, 0x0C, 0x15,
+ 0x20, 0xC8, 0x3C, 0x08, 0xFA, 0x07, 0x20, 0xC8,
+ 0x3E, 0x08, 0xFC, 0x07, 0x20, 0xC8, 0x40, 0x08,
+ 0x3C, 0x08, 0x20, 0xC8, 0x42, 0x08, 0x3E, 0x08,
+ 0x60, 0x04, 0x52, 0xC9, 0xA0, 0x06, 0x54, 0xBA,
+ 0xD3, 0x2D, 0xE0, 0xC2, 0x4A, 0x08, 0xC3, 0x82,
+ 0x01, 0x13, 0xDB, 0x2D, 0x20, 0x88, 0x3E, 0x08,
+ 0x3A, 0x08, 0x0D, 0x16, 0x20, 0x88, 0x3C, 0x08,
+ 0x38, 0x08, 0x09, 0x16, 0xE0, 0x04, 0x44, 0x08,
+ 0x82, 0x07, 0x02, 0x08, 0x04, 0x61, 0xE0, 0x04,
+ 0x48, 0x08, 0x60, 0x04, 0x1E, 0xCA, 0x20, 0xC8,
+ 0x38, 0x08, 0xFA, 0x07, 0x20, 0xC8, 0x3A, 0x08,
+ 0xFC, 0x07, 0x60, 0x04, 0x12, 0xCA, 0x07, 0xA8,
+ 0x48, 0x08, 0x04, 0xC1, 0x1B, 0x16, 0x82, 0x02,
+ 0x38, 0x08, 0x0A, 0x16, 0x60, 0x01, 0xFC, 0x07,
+ 0x01, 0x00, 0x02, 0x16, 0xA0, 0x06, 0x6E, 0xCB,
+ 0xA0, 0x06, 0xFC, 0xCA, 0x80, 0x01, 0x10, 0x00,
+ 0x32, 0xC1, 0x07, 0x11, 0x72, 0xC1, 0x92, 0xC1,
+ 0x82, 0x07, 0x38, 0x08, 0x04, 0xC1, 0x06, 0x16,
+ 0xEA, 0x10, 0x72, 0xC1, 0xB2, 0xC1, 0x84, 0x01,
+ 0x00, 0x80, 0xE5, 0x13, 0xE0, 0xD2, 0x03, 0x01,
+ 0x34, 0x13, 0x0B, 0x02, 0x0A, 0x01, 0xC4, 0xCE,
+ 0xC7, 0xCE, 0xC5, 0xCE, 0xC6, 0xCE, 0xFB, 0x04,
+ 0xC8, 0xC6, 0x03, 0xA8, 0x12, 0x01, 0x20, 0xC8,
+ 0xF8, 0x07, 0x00, 0x01, 0xC7, 0xC2, 0xC4, 0x81,
+ 0x01, 0x14, 0xC4, 0xC2, 0x0B, 0xA8, 0x44, 0x08,
+ 0x0B, 0x61, 0x0B, 0xA2, 0x8B, 0xA1, 0x01, 0x17,
+ 0x85, 0x05, 0xCB, 0x61, 0xC6, 0x16, 0x40, 0x01,
+ 0x40, 0x00, 0x15, 0x16, 0x87, 0x07, 0x20, 0x00,
+ 0xE0, 0x61, 0x44, 0x08, 0xC4, 0x81, 0x08, 0x1A,
+ 0x07, 0xA8, 0x48, 0x08, 0x07, 0xA8, 0x44, 0x08,
+ 0x07, 0x61, 0x87, 0xA1, 0x01, 0x17, 0x85, 0x05,
+ 0x80, 0x01, 0x40, 0x00, 0x03, 0xC8, 0x6C, 0x01,
+ 0xE0, 0xC1, 0x04, 0xFC, 0xAC, 0x10, 0x60, 0x04,
+ 0xBC, 0xC7, 0x20, 0x01, 0x3A, 0x07, 0x00, 0x70,
+ 0x04, 0x13, 0xA0, 0x06, 0x28, 0xC7, 0x20, 0x07,
+ 0x2E, 0x06, 0xA0, 0x06, 0x54, 0xBA, 0xC1, 0x10,
+ 0xE0, 0xD2, 0x03, 0x01, 0x0A, 0x16, 0x20, 0x01,
+ 0x3A, 0x07, 0x00, 0x70, 0x04, 0x13, 0xA0, 0x06,
+ 0x28, 0xC7, 0x20, 0x07, 0x2E, 0x06, 0xA0, 0x06,
+ 0x54, 0xBA, 0x90, 0x03, 0xBF, 0x4F, 0xD3, 0x2D,
+ 0x60, 0x01, 0xFC, 0x07, 0x01, 0x00, 0x02, 0x16,
+ 0xA0, 0x06, 0x6E, 0xCB, 0x60, 0xD2, 0x46, 0x08,
+ 0x89, 0x01, 0x00, 0xF1, 0xC9, 0x01, 0x00, 0x70,
+ 0x40, 0x01, 0x10, 0x00, 0x1C, 0x13, 0x20, 0x88,
+ 0x3E, 0x08, 0x3A, 0x08, 0x04, 0x16, 0x20, 0x88,
+ 0x3C, 0x08, 0x38, 0x08, 0x14, 0x13, 0x89, 0x01,
+ 0x00, 0x10, 0x8D, 0x07, 0x44, 0x08, 0x9D, 0x07,
+ 0x00, 0x50, 0xA0, 0xC2, 0xF6, 0x07, 0x8C, 0x07,
+ 0x02, 0x00, 0xA0, 0xC3, 0x3C, 0x08, 0xE0, 0xC3,
+ 0x3E, 0x08, 0x2F, 0x02, 0x04, 0x00, 0x01, 0x17,
+ 0x8E, 0x05, 0xA0, 0x06, 0x00, 0xBA, 0x8D, 0x07,
+ 0x46, 0x08, 0x49, 0xC7, 0xA0, 0xC2, 0xF6, 0x07,
+ 0x8C, 0x07, 0x04, 0x00, 0xA0, 0xC3, 0x38, 0x08,
+ 0xE0, 0xC3, 0x3A, 0x08, 0xCC, 0xA3, 0x01, 0x17,
+ 0x8E, 0x05, 0xA0, 0x06, 0x00, 0xBA, 0x20, 0xC8,
+ 0x3C, 0x08, 0xFC, 0x08, 0x20, 0xC8, 0x3E, 0x08,
+ 0xFE, 0x08, 0x09, 0x01, 0x00, 0x0C, 0x0C, 0x13,
+ 0x49, 0x01, 0x00, 0x04, 0x05, 0x16, 0xA0, 0x06,
+ 0x6C, 0xC7, 0xA0, 0x06, 0x38, 0xC7, 0x04, 0x10,
+ 0x90, 0x03, 0x7F, 0x40, 0xA0, 0x06, 0x6C, 0xC7,
+ 0xC0, 0x01, 0x90, 0x00, 0xA0, 0x06, 0xFC, 0xCA,
+ 0x0B, 0xC8, 0x46, 0x08, 0xE0, 0xC2, 0x42, 0x07,
+ 0x2D, 0x13, 0xE0, 0xC2, 0x2E, 0x06, 0x2A, 0x13,
+ 0xE0, 0x02, 0x58, 0x07, 0x8F, 0x07, 0xBF, 0xFF,
+ 0x0F, 0x2C, 0xE0, 0x02, 0x98, 0x07, 0xE0, 0xC0,
+ 0x5C, 0x07, 0x03, 0xC8, 0x4A, 0x08, 0x03, 0xC8,
+ 0x6C, 0x01, 0xC3, 0xC2, 0xCB, 0xA2, 0xEB, 0xC2,
+ 0x32, 0x0C, 0x32, 0x13, 0x0B, 0xC8, 0x00, 0xFC,
+ 0x0B, 0xC3, 0x4B, 0xC3, 0x0B, 0xC8, 0x6C, 0x01,
+ 0xE0, 0xC2, 0x00, 0xFC, 0xFA, 0x16, 0x00, 0x03,
+ 0x02, 0x00, 0x20, 0xC8, 0xF8, 0x05, 0x00, 0xFC,
+ 0x02, 0x16, 0x0D, 0xC8, 0xFA, 0x05, 0x0C, 0xC8,
+ 0xF8, 0x05, 0x00, 0x03, 0x0F, 0x00, 0x03, 0xC8,
+ 0x6C, 0x01, 0x1A, 0x10, 0xA0, 0xC3, 0x2E, 0x06,
+ 0x03, 0x13, 0xE0, 0xC0, 0xF8, 0x05, 0x0D, 0x16,
+ 0x4F, 0x2E, 0xC0, 0x01, 0x00, 0x80, 0xA0, 0x01,
+ 0x62, 0x07, 0x00, 0x80, 0x8E, 0xC3, 0x03, 0x13,
+ 0xA0, 0x01, 0x62, 0x07, 0x40, 0x00, 0x60, 0x04,
+ 0x4E, 0xC7, 0x03, 0xC8, 0x6C, 0x01, 0x20, 0xC8,
+ 0x00, 0xFC, 0xF8, 0x05, 0x03, 0xC8, 0x4A, 0x08,
+ 0x60, 0x01, 0x6A, 0x09, 0x00, 0x04, 0x02, 0x13,
+ 0x60, 0x04, 0xE4, 0xC7, 0x8C, 0x07, 0x0E, 0x00,
+ 0x20, 0xC2, 0x0E, 0xFC, 0x0A, 0x15, 0x09, 0x13,
+ 0x20, 0xC2, 0x14, 0xFC, 0x48, 0x02, 0x00, 0x1F,
+ 0xC8, 0x06, 0x88, 0x02, 0x12, 0x00, 0xF0, 0x1B,
+ 0x08, 0xA3, 0x88, 0x07, 0x02, 0xFC, 0x78, 0xC2,
+ 0xF8, 0xC1, 0x28, 0x02, 0x00, 0x04, 0x07, 0x83,
+ 0xE7, 0x1A, 0xCC, 0x61, 0x07, 0xC8, 0x04, 0xFC,
+ 0xCC, 0xC1, 0xC0, 0x01, 0x40, 0x00, 0x60, 0x04,
+ 0xF0, 0xC7, 0x4B, 0xC1, 0xA0, 0xC2, 0xF0, 0x07,
+ 0x20, 0xC3, 0x7A, 0x09, 0x8D, 0x07, 0xFA, 0x07,
+ 0x9D, 0xC3, 0xE0, 0xC3, 0xFC, 0x07, 0xA0, 0x06,
+ 0x00, 0xBA, 0x20, 0xC8, 0x3C, 0x08, 0x40, 0x08,
+ 0x20, 0xC8, 0x3E, 0x08, 0x42, 0x08, 0x0E, 0xC8,
+ 0x3C, 0x08, 0x0F, 0xC8, 0x3E, 0x08, 0xC4, 0x04,
+ 0x82, 0x07, 0x02, 0x08, 0xE0, 0x04, 0x44, 0x08,
+ 0x40, 0x01, 0x80, 0x00, 0x06, 0x16, 0x0E, 0xC8,
+ 0x38, 0x08, 0x0F, 0xC8, 0x3A, 0x08, 0xE0, 0x04,
+ 0x48, 0x08, 0xA0, 0x06, 0x54, 0xBA, 0xE0, 0xC2,
+ 0xFE, 0x07, 0x0D, 0x11, 0x0E, 0xC8, 0xFA, 0x07,
+ 0x0F, 0xC8, 0xFC, 0x07, 0x20, 0xC8, 0x40, 0x08,
+ 0x3C, 0x08, 0x20, 0xC8, 0x42, 0x08, 0x3E, 0x08,
+ 0xA0, 0x06, 0x32, 0xC7, 0xCB, 0x10, 0x80, 0x01,
+ 0x80, 0x00, 0x55, 0x04, 0x8B, 0xC0, 0xA0, 0xC2,
+ 0xF0, 0x07, 0x8C, 0x07, 0x04, 0x00, 0x8D, 0x07,
+ 0xFA, 0x07, 0xA0, 0xC3, 0x3C, 0x08, 0xE0, 0xC3,
+ 0x3E, 0x08, 0xA0, 0x06, 0x36, 0xBA, 0x60, 0x01,
+ 0xFC, 0x07, 0x01, 0x00, 0x04, 0x13, 0xA0, 0x07,
+ 0xFA, 0x08, 0x00, 0x80, 0x52, 0x04, 0x60, 0x01,
+ 0x60, 0x07, 0x04, 0x00, 0x07, 0x16, 0x20, 0xD0,
+ 0x04, 0xE0, 0x20, 0xE8, 0x1A, 0xE0, 0x58, 0x07,
+ 0x60, 0x04, 0x3E, 0xC7, 0xA0, 0x07, 0xFA, 0x08,
+ 0x00, 0x40, 0x20, 0xC8, 0x3C, 0x08, 0xFC, 0x08,
+ 0x20, 0xC8, 0x3E, 0x08, 0xFE, 0x08, 0xA0, 0x06,
+ 0x6C, 0xC7, 0xA0, 0x06, 0x38, 0xC7, 0xD3, 0x10,
+ 0xAD, 0xC2, 0x02, 0x00, 0x6D, 0xC2, 0x00, 0x00,
+ 0x05, 0x16, 0xAA, 0x07, 0x02, 0x00, 0x36, 0x07,
+ 0x9A, 0x2C, 0x80, 0x03, 0xEA, 0x2C, 0x02, 0x00,
+ 0x41, 0xCB, 0x00, 0x00, 0x80, 0x03, 0x2D, 0xC3,
+ 0x18, 0x00, 0xAC, 0x07, 0x02, 0x00, 0x36, 0x07,
+ 0x20, 0x4B, 0x06, 0xEB, 0x0A, 0x00, 0x20, 0xEB,
+ 0x00, 0xEB, 0x0A, 0x00, 0x9C, 0x2E, 0x80, 0x03,
+ 0xA0, 0xC2, 0x22, 0xE0, 0x60, 0x04, 0x8A, 0xA3,
+ 0xED, 0xC0, 0x18, 0x00, 0xA0, 0x06, 0x3A, 0xCC,
+ 0x80, 0x03, 0x44, 0xC2, 0xC3, 0xC0, 0x02, 0x13,
+ 0xA0, 0x06, 0x3A, 0xCC, 0x19, 0xC3, 0x09, 0xCB,
+ 0x18, 0x00, 0xC9, 0x05, 0x19, 0xCB, 0x16, 0x00,
+ 0x4C, 0xC2, 0x2C, 0x02, 0x1A, 0x00, 0x0D, 0xCF,
+ 0x0E, 0xCF, 0x0F, 0xC7, 0x99, 0x00, 0x5B, 0x04,
+ 0x8C, 0x07, 0x0A, 0x09, 0x9C, 0xC2, 0xA0, 0x22,
+ 0x14, 0xE0, 0x06, 0x13, 0xA0, 0xC2, 0x58, 0x07,
+ 0xA0, 0x22, 0x20, 0xE0, 0x01, 0x16, 0x80, 0x03,
+ 0x03, 0xC1, 0xC3, 0x04, 0x8A, 0x07, 0x04, 0x00,
+ 0x84, 0xA2, 0x3A, 0xCF, 0x3A, 0xCF, 0x3A, 0xCF,
+ 0x3A, 0xCF, 0x3A, 0xCF, 0xE0, 0x02, 0x58, 0x07,
+ 0x8D, 0x07, 0x0A, 0x09, 0x0B, 0xC8, 0xC2, 0x07,
+ 0xA0, 0x06, 0x44, 0xB8, 0xE0, 0xC2, 0xC2, 0x07,
+ 0x20, 0xE0, 0x20, 0xE0, 0xE0, 0x02, 0xB8, 0x07,
+ 0x5B, 0x04, 0x2D, 0xC3, 0x18, 0x00, 0x8C, 0xC2,
+ 0x60, 0xC2, 0x6C, 0x01, 0x0A, 0xC8, 0x6C, 0x01,
+ 0xE0, 0xC2, 0x00, 0xFC, 0x02, 0x13, 0x8B, 0xC2,
+ 0xF9, 0x10, 0x09, 0xC8, 0x6C, 0x01, 0x8B, 0x07,
+ 0xF8, 0x05, 0x5B, 0xC2, 0x0C, 0x13, 0xCB, 0x05,
+ 0x5B, 0xC2, 0xCA, 0xC6, 0xE0, 0xC2, 0x6C, 0x01,
+ 0x09, 0xC8, 0x6C, 0x01, 0x0C, 0xC8, 0x00, 0xFC,
+ 0x0B, 0xC8, 0x6C, 0x01, 0x02, 0x10, 0xCC, 0xCE,
+ 0xCA, 0xC6, 0xA0, 0xC2, 0xE0, 0x00, 0xA0, 0x22,
+ 0x1A, 0xE0, 0x06, 0x16, 0x20, 0xE8, 0x04, 0xE0,
+ 0x3A, 0x07, 0x20, 0x48, 0x1A, 0xE0, 0xE0, 0x00,
+ 0x80, 0x03, 0xE0, 0xD3, 0xAB, 0xE3, 0xE0, 0x04,
+ 0x8E, 0x09, 0xE0, 0xC1, 0xA8, 0x06, 0x05, 0x16,
+ 0x07, 0x02, 0xA2, 0x06, 0xA0, 0x06, 0x38, 0xB5,
+ 0x0B, 0x16, 0xE0, 0xC1, 0xBA, 0x06, 0x23, 0x16,
+ 0x07, 0x02, 0xB4, 0x06, 0xA0, 0x06, 0x38, 0xB5,
+ 0x1E, 0x13, 0x07, 0x02, 0xB8, 0x06, 0x02, 0x10,
+ 0x07, 0x02, 0xA6, 0x06, 0x60, 0xC1, 0x02, 0xFC,
+ 0x25, 0xC8, 0x0C, 0x00, 0x02, 0xFC, 0xC5, 0xC9,
+ 0x0C, 0x00, 0xF5, 0xCD, 0xF5, 0xCD, 0xF5, 0xCD,
+ 0xF5, 0xCD, 0xF5, 0xCD, 0xF5, 0xC5, 0xB7, 0x01,
+ 0x28, 0x00, 0x27, 0x02, 0xF4, 0xFF, 0xA7, 0x07,
+ 0x04, 0x00, 0x52, 0xCE, 0x20, 0xE8, 0x9E, 0x09,
+ 0x06, 0xFC, 0x97, 0x2E, 0xD2, 0x10, 0x00, 0x03,
+ 0x02, 0x00, 0xA0, 0x06, 0x50, 0xB5, 0x00, 0x03,
+ 0x0F, 0x00, 0x20, 0x2C, 0xF0, 0xED, 0xE0, 0x93,
+ 0xAB, 0xE3, 0x03, 0x16, 0x81, 0x02, 0x16, 0x00,
+ 0xC4, 0x16, 0x21, 0xC1, 0x10, 0xEB, 0x54, 0x04,
+ 0xE0, 0x93, 0x10, 0xE0, 0x03, 0x16, 0xA0, 0xD2,
+ 0xA8, 0xE3, 0x0B, 0x10, 0xCF, 0xD3, 0x09, 0x16,
+ 0xA0, 0x23, 0x08, 0xE0, 0x06, 0x16, 0x84, 0x07,
+ 0x20, 0x00, 0x04, 0xE8, 0xD2, 0x06, 0xA0, 0xD2,
+ 0x0C, 0xE0, 0x60, 0x04, 0xD2, 0xCE, 0x60, 0x04,
+ 0x70, 0xD1, 0x22, 0xC1, 0x04, 0x00, 0xE2, 0x04,
+ 0x02, 0x00, 0x54, 0x04, 0x02, 0xC8, 0x6C, 0x01,
+ 0x82, 0xA0, 0x22, 0xC8, 0x32, 0x0C, 0x00, 0xFC,
+ 0x02, 0x02, 0x00, 0xFC, 0xE0, 0x93, 0xAA, 0xE3,
+ 0x13, 0x16, 0xB0, 0x03, 0x20, 0x98, 0xAA, 0xE3,
+ 0x65, 0x06, 0x0D, 0x16, 0x8B, 0x07, 0x17, 0xFC,
+ 0xDB, 0xD2, 0x8B, 0x09, 0x8B, 0x02, 0x15, 0x00,
+ 0x7B, 0x1B, 0xEB, 0xD2, 0xC4, 0xEA, 0x06, 0x13,
+ 0x77, 0x15, 0x20, 0x07, 0xA0, 0x09, 0x74, 0x10,
+ 0xA0, 0x06, 0x02, 0xD0, 0xA0, 0x48, 0x04, 0xE0,
+ 0x0E, 0x00, 0x85, 0x02, 0x07, 0x00, 0x0E, 0x13,
+ 0x0E, 0x01, 0x03, 0x00, 0x0B, 0x13, 0xA0, 0x23,
+ 0x22, 0xE0, 0x03, 0x16, 0xA0, 0xD2, 0x0E, 0xE0,
+ 0x02, 0x10, 0xA0, 0xD2, 0xA8, 0xE3, 0x8E, 0x01,
+ 0x03, 0x00, 0x5E, 0x10, 0x05, 0xC8, 0xFC, 0x06,
+ 0xC3, 0xC0, 0x57, 0x16, 0xA0, 0x43, 0x10, 0xE0,
+ 0x22, 0x88, 0x0E, 0x00, 0x6C, 0x09, 0x0A, 0x16,
+ 0x22, 0x88, 0x10, 0x00, 0x6E, 0x09, 0x06, 0x16,
+ 0x22, 0x88, 0x12, 0x00, 0x70, 0x09, 0x02, 0x16,
+ 0xA0, 0xE3, 0x10, 0xE0, 0x85, 0x02, 0x09, 0x00,
+ 0x02, 0x13, 0xA0, 0x06, 0xB8, 0xD7, 0x45, 0xA1,
+ 0x65, 0xC1, 0xAC, 0xE3, 0x55, 0x04, 0x62, 0xC0,
+ 0x04, 0x00, 0x22, 0xC8, 0x06, 0x00, 0x6C, 0x01,
+ 0x82, 0x02, 0x48, 0x04, 0x02, 0x1B, 0xA0, 0x43,
+ 0x0C, 0xE0, 0x22, 0xC1, 0x0E, 0x00, 0x51, 0x04,
+ 0x42, 0xC0, 0xE1, 0x04, 0x02, 0x00, 0xA2, 0xC0,
+ 0x0C, 0x00, 0x22, 0xC1, 0x0A, 0x00, 0x20, 0x21,
+ 0x18, 0xE0, 0x07, 0x13, 0xA1, 0xC8, 0x0A, 0x00,
+ 0x0A, 0x00, 0xA1, 0xC8, 0x08, 0x00, 0x08, 0x00,
+ 0xE2, 0x10, 0x22, 0xC8, 0x06, 0x00, 0x6C, 0x01,
+ 0xA0, 0x06, 0x66, 0xD6, 0x60, 0x04, 0xB0, 0xCE,
+ 0x02, 0xC8, 0xD4, 0x06, 0x62, 0xC1, 0x02, 0x00,
+ 0x65, 0xC1, 0xD8, 0xE3, 0x55, 0x04, 0x0F, 0x10,
+ 0x0E, 0x10, 0x85, 0x07, 0xF4, 0x03, 0xF5, 0x04,
+ 0x60, 0xCD, 0xCE, 0xED, 0xA0, 0x06, 0xA2, 0xD8,
+ 0xA0, 0xE3, 0x0C, 0xE0, 0x20, 0xE8, 0x9E, 0x09,
+ 0x06, 0x04, 0xA0, 0x2E, 0xF4, 0x03, 0x60, 0x04,
+ 0xE4, 0xCC, 0xA0, 0x06, 0x26, 0xD5, 0x0C, 0x10,
+ 0xA0, 0x06, 0x66, 0xD6, 0x09, 0x10, 0xA0, 0x06,
+ 0x2A, 0xD8, 0x06, 0x10, 0xA0, 0x06, 0x66, 0xD6,
+ 0x03, 0xC8, 0x2A, 0x09, 0xA0, 0xD2, 0xAA, 0xE3,
+ 0xA0, 0x06, 0x6E, 0xCF, 0xA0, 0x92, 0x26, 0xE0,
+ 0x0C, 0x16, 0xE0, 0xD3, 0x26, 0xE0, 0xE0, 0x23,
+ 0x14, 0xE0, 0x0A, 0x13, 0x0A, 0xC1, 0xC4, 0x83,
+ 0x07, 0x13, 0xC4, 0xC3, 0x24, 0xC1, 0xDC, 0xE3,
+ 0x54, 0x04, 0xCA, 0x93, 0xDC, 0x13, 0xCA, 0xD3,
+ 0xB0, 0x03, 0x0F, 0xD8, 0x59, 0x06, 0x04, 0x71,
+ 0x24, 0xC1, 0xEC, 0xE3, 0x54, 0x04, 0xA0, 0x23,
+ 0x0C, 0xE0, 0xD1, 0x13, 0x4D, 0xC3, 0xCF, 0x13,
+ 0x4D, 0x01, 0x00, 0x04, 0x0B, 0x13, 0x86, 0x07,
+ 0x02, 0x00, 0x84, 0x07, 0x26, 0x00, 0x46, 0x23,
+ 0x03, 0x13, 0x44, 0x06, 0x86, 0xA1, 0xFB, 0x10,
+ 0x46, 0x43, 0xB3, 0x10, 0x84, 0x07, 0x18, 0x00,
+ 0x8D, 0x01, 0x00, 0x04, 0x85, 0x07, 0xF4, 0x03,
+ 0xF5, 0x04, 0x60, 0xCD, 0xCE, 0xED, 0xA0, 0x06,
+ 0xA2, 0xD8, 0x20, 0xE8, 0x9C, 0x09, 0xFE, 0x03,
+ 0x20, 0xE8, 0x9E, 0x09, 0x06, 0x04, 0xA8, 0x10,
+ 0x85, 0x07, 0x1C, 0x07, 0x86, 0x07, 0x1A, 0x04,
+ 0x76, 0x6D, 0x76, 0x6D, 0x76, 0x6D, 0xC6, 0x05,
+ 0x76, 0x6D, 0x76, 0x6D, 0x76, 0x6D, 0x83, 0x07,
+ 0x00, 0x90, 0xA9, 0x10, 0x0B, 0xC3, 0x86, 0x07,
+ 0x00, 0x01, 0x85, 0x07, 0x00, 0x80, 0x20, 0xC1,
+ 0xD2, 0x06, 0x37, 0x13, 0xC4, 0x04, 0x60, 0xC0,
+ 0xD2, 0x06, 0x45, 0x20, 0x04, 0x13, 0x84, 0x05,
+ 0x15, 0x09, 0xF9, 0x16, 0x2E, 0x10, 0xCF, 0xD3,
+ 0x06, 0x16, 0xE0, 0x23, 0x14, 0xE0, 0x03, 0x16,
+ 0x0E, 0x01, 0x03, 0x00, 0x03, 0x13, 0xE0, 0x04,
+ 0xD2, 0x06, 0x23, 0x10, 0x64, 0xD0, 0x1C, 0x07,
+ 0x46, 0xB0, 0x10, 0x18, 0x01, 0xD9, 0x1C, 0x07,
+ 0x60, 0x23, 0x20, 0xE0, 0x0B, 0x13, 0x81, 0x07,
+ 0x18, 0x00, 0x61, 0xC0, 0xFC, 0xE3, 0x11, 0x88,
+ 0xCE, 0xED, 0x04, 0x13, 0x08, 0x02, 0x18, 0x80,
+ 0xA0, 0x06, 0xDA, 0xD4, 0x64, 0xD0, 0x28, 0x07,
+ 0x46, 0xB0, 0x08, 0x18, 0x01, 0xD9, 0x28, 0x07,
+ 0x46, 0xB0, 0x04, 0x17, 0x83, 0x07, 0x40, 0x80,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x05, 0x48, 0xD2, 0x06,
+ 0xCA, 0x16, 0x20, 0xC1, 0x32, 0x09, 0x01, 0x16,
+ 0x5C, 0x04, 0x04, 0x02, 0x07, 0x00, 0x20, 0x06,
+ 0x32, 0x09, 0x05, 0x02, 0x00, 0x01, 0xC7, 0x10,
+ 0x0B, 0xC3, 0xC5, 0x04, 0x42, 0xC0, 0xC7, 0x04,
+ 0x20, 0xC2, 0x6C, 0x01, 0xE1, 0xA1, 0x04, 0x00,
+ 0x11, 0xC8, 0x6C, 0x01, 0xFB, 0x16, 0x08, 0xC8,
+ 0x6C, 0x01, 0xC8, 0x04, 0xA0, 0x43, 0x1A, 0xE0,
+ 0x22, 0xC1, 0x0E, 0x00, 0x0D, 0x15, 0x0C, 0x13,
+ 0xA0, 0xE3, 0x1A, 0xE0, 0xA0, 0x06, 0x14, 0xD8,
+ 0x08, 0xC2, 0x48, 0x13, 0x88, 0x02, 0x12, 0x00,
+ 0x45, 0x1B, 0x20, 0x22, 0x22, 0xE0, 0x42, 0x13,
+ 0x02, 0xC1, 0x08, 0xA1, 0x08, 0x05, 0x28, 0x02,
+ 0xF2, 0xFF, 0x07, 0xA2, 0x83, 0x07, 0x01, 0x80,
+ 0x88, 0x02, 0x04, 0x00, 0x6E, 0x11, 0x64, 0xC2,
+ 0x16, 0x00, 0x49, 0xD2, 0x02, 0x16, 0x02, 0x81,
+ 0x31, 0x16, 0x09, 0x01, 0x00, 0xF0, 0x28, 0x16,
+ 0x49, 0xC1, 0x45, 0x71, 0xC3, 0x04, 0x85, 0x02,
+ 0x09, 0x00, 0x7C, 0x13, 0x83, 0x07, 0x02, 0x80,
+ 0xA4, 0xC1, 0x14, 0x00, 0x88, 0x81, 0x76, 0x16,
+ 0x83, 0x05, 0x85, 0x02, 0x15, 0x00, 0x13, 0x1B,
+ 0x83, 0x05, 0x49, 0x99, 0x30, 0xEB, 0x0A, 0x13,
+ 0x09, 0x98, 0x0E, 0xE0, 0x6B, 0x16, 0x25, 0x98,
+ 0x30, 0xEB, 0x0C, 0xE0, 0x67, 0x16, 0xE0, 0xC1,
+ 0xEC, 0x06, 0x64, 0x16, 0xC3, 0x04, 0x52, 0xC2,
+ 0x0F, 0x13, 0x83, 0x07, 0x09, 0x80, 0xE0, 0xC1,
+ 0x6A, 0x09, 0x47, 0x01, 0x00, 0x10, 0x5A, 0x16,
+ 0xA0, 0xC0, 0x6C, 0x01, 0xA0, 0x06, 0xBE, 0xD6,
+ 0x60, 0x04, 0xB0, 0xCE, 0x60, 0x04, 0xBA, 0xCE,
+ 0x89, 0x07, 0x0E, 0x07, 0xC7, 0x04, 0xE5, 0xD1,
+ 0x46, 0xEB, 0x05, 0x13, 0xC7, 0x06, 0x27, 0x02,
+ 0x5C, 0xEB, 0x77, 0xCE, 0xFE, 0x15, 0x44, 0xC0,
+ 0x21, 0x02, 0x18, 0x00, 0x28, 0x02, 0xFC, 0xFF,
+ 0x36, 0x13, 0x91, 0xC1, 0x86, 0xD1, 0x1F, 0x13,
+ 0xC6, 0x06, 0x87, 0x07, 0x0E, 0x07, 0xF7, 0xC0,
+ 0x46, 0x02, 0xFF, 0xBF, 0x43, 0x02, 0xFF, 0x3F,
+ 0xA0, 0x91, 0xF5, 0xED, 0x09, 0x16, 0xB0, 0x03,
+ 0x20, 0x98, 0x0E, 0xE0, 0x5D, 0x06, 0x0F, 0x16,
+ 0x21, 0xC8, 0x02, 0x00, 0x0C, 0x07, 0x17, 0x10,
+ 0x47, 0x82, 0x0C, 0x1B, 0xC6, 0x90, 0xEB, 0x16,
+ 0x47, 0x06, 0xF7, 0x04, 0xB0, 0x03, 0x20, 0x98,
+ 0x5D, 0x06, 0x57, 0x06, 0x0C, 0x13, 0x83, 0x07,
+ 0x05, 0x80, 0x1C, 0x10, 0xD1, 0xC0, 0xE0, 0x20,
+ 0x16, 0xE0, 0x03, 0x16, 0x83, 0x07, 0x08, 0x80,
+ 0x15, 0x10, 0x60, 0x44, 0x26, 0xE0, 0x86, 0x71,
+ 0x46, 0xA0, 0x06, 0x62, 0x83, 0x07, 0x05, 0x80,
+ 0x08, 0xC2, 0xCB, 0x15, 0x0B, 0x16, 0xC3, 0x04,
+ 0x87, 0x07, 0x0E, 0x07, 0x77, 0xC0, 0x47, 0x82,
+ 0x05, 0x1B, 0x60, 0x20, 0x06, 0xE0, 0xFA, 0x16,
+ 0x83, 0x07, 0x07, 0x80, 0x5C, 0x04, 0xA0, 0x92,
+ 0x0E, 0xE0, 0x11, 0x16, 0x20, 0xC8, 0x20, 0xE0,
+ 0x08, 0x07, 0xE0, 0x04, 0x84, 0x01, 0x60, 0x05,
+ 0x02, 0x07, 0x4B, 0x13, 0x20, 0x48, 0x06, 0xE0,
+ 0x82, 0x01, 0xA0, 0x06, 0xD0, 0xD4, 0x83, 0x07,
+ 0x00, 0xC0, 0xA0, 0x06, 0x2A, 0xD8, 0x20, 0xC8,
+ 0x1E, 0xE0, 0x02, 0x07, 0xA0, 0xE3, 0x04, 0xE0,
+ 0x08, 0x02, 0x24, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x42, 0x10, 0x20, 0xC1, 0x84, 0x01, 0x44, 0x02,
+ 0x00, 0x88, 0x2A, 0x13, 0x04, 0x48, 0x84, 0x01,
+ 0x20, 0x06, 0x02, 0x07, 0xF1, 0x16, 0x60, 0x01,
+ 0x8E, 0x09, 0x00, 0x80, 0x15, 0x13, 0xA0, 0x23,
+ 0x22, 0xE0, 0x05, 0x16, 0xA0, 0x43, 0x22, 0xE0,
+ 0xA0, 0xD2, 0x0E, 0xE0, 0xCF, 0x10, 0xE0, 0x23,
+ 0x14, 0xE0, 0x04, 0x13, 0x20, 0x98, 0xA9, 0xE3,
+ 0x65, 0x06, 0x0C, 0x16, 0xA0, 0x92, 0x0E, 0xE0,
+ 0xC5, 0x13, 0xA0, 0xD2, 0xA8, 0xE3, 0xD3, 0x10,
+ 0x20, 0xC8, 0x20, 0xE0, 0x08, 0x07, 0x83, 0x07,
+ 0x00, 0xC0, 0x04, 0x10, 0x83, 0x07, 0x02, 0x00,
+ 0x60, 0x04, 0xCA, 0xCE, 0x60, 0x04, 0xC0, 0xCE,
+ 0x20, 0xE8, 0x06, 0xE0, 0x82, 0x01, 0xA0, 0x06,
+ 0xD0, 0xD4, 0x20, 0x07, 0x02, 0x07, 0xA0, 0x43,
+ 0x04, 0xE0, 0x20, 0xC8, 0xAE, 0xE4, 0x86, 0x01,
+ 0x20, 0x88, 0x20, 0xE0, 0x08, 0x07, 0x03, 0x16,
+ 0x20, 0xC8, 0x78, 0xEB, 0x08, 0x07, 0x60, 0x04,
+ 0xD2, 0xCE, 0x0E, 0x01, 0x03, 0x00, 0x16, 0x13,
+ 0xCF, 0xD3, 0x08, 0x16, 0xA0, 0x23, 0x20, 0xE0,
+ 0x03, 0x16, 0xA0, 0xD2, 0xA8, 0xE3, 0x02, 0x10,
+ 0xA0, 0xD2, 0x0E, 0xE0, 0x8E, 0x01, 0x03, 0x00,
+ 0x09, 0x10, 0x60, 0xC1, 0x84, 0x01, 0x60, 0x21,
+ 0x0A, 0xE0, 0x04, 0x16, 0x83, 0x07, 0x00, 0x84,
+ 0x60, 0x04, 0xCA, 0xCE, 0x20, 0xC8, 0x2E, 0xE0,
+ 0x84, 0x01, 0x08, 0x02, 0x06, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x60, 0x04, 0xD2, 0xCE, 0x60, 0xE3,
+ 0x20, 0xE0, 0x60, 0x04, 0xD2, 0xCE, 0xE0, 0x93,
+ 0x26, 0xE0, 0x10, 0x16, 0xA0, 0x23, 0x08, 0xE0,
+ 0x0D, 0x16, 0xA0, 0x23, 0x06, 0xE0, 0x02, 0x13,
+ 0x60, 0xE3, 0x1C, 0xE0, 0x60, 0xE3, 0x18, 0xE0,
+ 0xA0, 0x43, 0x06, 0xE0, 0x08, 0x02, 0x3C, 0x80,
+ 0xA0, 0x06, 0xDA, 0xD4, 0x60, 0x04, 0xD2, 0xCE,
+ 0xA0, 0x92, 0xA8, 0xE3, 0x03, 0x13, 0xA0, 0x92,
+ 0xA9, 0xE3, 0x1E, 0x16, 0xE0, 0x23, 0x14, 0xE0,
+ 0x08, 0x13, 0x20, 0x98, 0xA9, 0xE3, 0x65, 0x06,
+ 0x04, 0x13, 0x83, 0x07, 0x07, 0x00, 0x60, 0x04,
+ 0xCA, 0xCE, 0xA0, 0xD2, 0x0E, 0xE0, 0x20, 0xC8,
+ 0x20, 0xE0, 0x08, 0x07, 0xA0, 0x27, 0x04, 0xE0,
+ 0x0B, 0x16, 0x20, 0xC8, 0x1E, 0xE0, 0x08, 0x07,
+ 0xE0, 0x93, 0xA8, 0xE3, 0x05, 0x16, 0xA0, 0x23,
+ 0x12, 0xE0, 0x02, 0x13, 0x20, 0x06, 0x08, 0x07,
+ 0x60, 0x04, 0xD2, 0xCE, 0xE0, 0x23, 0x14, 0xE0,
+ 0x3E, 0x13, 0xB0, 0x03, 0x20, 0x98, 0x0E, 0xE0,
+ 0x6F, 0x06, 0x0F, 0x16, 0xCF, 0xD3, 0x37, 0x16,
+ 0xA0, 0xD2, 0xA8, 0xE3, 0x60, 0x04, 0xD2, 0xCE,
+ 0xA0, 0x92, 0x0C, 0xE0, 0x30, 0x16, 0xE0, 0x23,
+ 0x14, 0xE0, 0xF6, 0x13, 0x83, 0x07, 0x06, 0x00,
+ 0x07, 0x10, 0x83, 0x07, 0x05, 0x00, 0xE0, 0x93,
+ 0x0E, 0xE0, 0x02, 0x16, 0x83, 0x07, 0x07, 0x00,
+ 0x60, 0x04, 0xCA, 0xCE, 0x60, 0xE3, 0x12, 0xE0,
+ 0xE0, 0x23, 0x14, 0xE0, 0x11, 0x13, 0x20, 0x98,
+ 0x0C, 0xE0, 0x65, 0x06, 0x03, 0x16, 0x20, 0xD8,
+ 0xA9, 0xE3, 0x65, 0x06, 0x14, 0x10, 0x60, 0x01,
+ 0x8E, 0x09, 0x00, 0x80, 0x10, 0x13, 0x20, 0xC1,
+ 0x84, 0x01, 0x20, 0x21, 0x06, 0xE0, 0xD2, 0x16,
+ 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80, 0x07, 0x13,
+ 0x20, 0x48, 0x06, 0xE0, 0x84, 0x01, 0x08, 0x02,
+ 0x30, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x60, 0x04,
+ 0xD2, 0xCE, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x20,
+ 0xFA, 0x16, 0x08, 0x02, 0x78, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x20, 0xC2, 0xA2, 0x09, 0x03, 0x13,
+ 0x20, 0x06, 0xA2, 0x09, 0x21, 0x13, 0x20, 0xC2,
+ 0xA4, 0x09, 0xED, 0x13, 0x20, 0x06, 0xA4, 0x09,
+ 0xEA, 0x16, 0xA0, 0x07, 0xA4, 0x09, 0x05, 0x00,
+ 0xCD, 0x01, 0x00, 0x04, 0xE4, 0x10, 0x60, 0x01,
+ 0x8E, 0x09, 0x80, 0x00, 0x3E, 0x13, 0x60, 0x01,
+ 0x8E, 0x09, 0x00, 0x10, 0x02, 0x16, 0xA0, 0x06,
+ 0xE6, 0xD5, 0xA0, 0x01, 0x8E, 0x09, 0x00, 0x10,
+ 0xE0, 0x01, 0x8E, 0x09, 0x80, 0x00, 0x83, 0x07,
+ 0x00, 0xA8, 0xA0, 0x06, 0x2A, 0xD8, 0x16, 0x10,
+ 0x60, 0x01, 0x8E, 0x09, 0x00, 0x04, 0x21, 0x13,
+ 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x10, 0xA0, 0x07,
+ 0x08, 0x07, 0x05, 0x00, 0x83, 0x07, 0x08, 0xA8,
+ 0xA0, 0x23, 0x04, 0xE0, 0x05, 0x16, 0x20, 0xC8,
+ 0x20, 0xE0, 0x08, 0x07, 0x83, 0x07, 0x08, 0xE8,
+ 0xA0, 0x06, 0x2A, 0xD8, 0xA0, 0x01, 0x8E, 0x09,
+ 0x00, 0x20, 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x01,
+ 0xE0, 0x01, 0x82, 0x01, 0x00, 0x08, 0xA0, 0xD2,
+ 0x0E, 0xE0, 0x83, 0x07, 0x10, 0x80, 0x60, 0x04,
+ 0xC0, 0xCE, 0x08, 0x02, 0x78, 0x00, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x83, 0x07, 0x00, 0x82, 0x60, 0x04,
+ 0xCA, 0xCE, 0x60, 0x04, 0xD2, 0xCE, 0x20, 0x06,
+ 0x90, 0x09, 0x07, 0x15, 0xA0, 0xD2, 0x10, 0xE0,
+ 0xCA, 0x06, 0xA0, 0xD2, 0x26, 0xE0, 0xCF, 0x04,
+ 0xF4, 0x10, 0x08, 0x02, 0x7E, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x20, 0xC2, 0x90, 0x09, 0x88, 0x02,
+ 0x96, 0x00, 0x0D, 0x1B, 0xEA, 0x16, 0x20, 0x48,
+ 0x08, 0xE0, 0x82, 0x01, 0xA0, 0x01, 0x8E, 0x09,
+ 0x00, 0x10, 0xA0, 0x06, 0xE6, 0xD5, 0x83, 0x07,
+ 0x00, 0x28, 0x60, 0x04, 0xC0, 0xCE, 0x60, 0x01,
+ 0x8E, 0x09, 0x00, 0x10, 0xDA, 0x16, 0x84, 0x07,
+ 0x04, 0x00, 0x85, 0x07, 0xF4, 0x03, 0xF5, 0x04,
+ 0xB5, 0x07, 0x30, 0x06, 0xA0, 0x06, 0xA2, 0xD8,
+ 0xA0, 0x07, 0xF8, 0x03, 0x34, 0xD4, 0x60, 0x04,
+ 0xC0, 0xDB, 0xA0, 0x07, 0x90, 0x09, 0xF4, 0x01,
+ 0x08, 0x02, 0x7E, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x08, 0x02, 0x36, 0x00, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x20, 0xE8, 0x0C, 0xE0, 0x82, 0x01, 0xA0, 0x23,
+ 0x18, 0xE0, 0x06, 0x13, 0xA0, 0xE3, 0x18, 0xE0,
+ 0xE0, 0x2E, 0x00, 0x00, 0x41, 0xC0, 0xFA, 0x16,
+ 0xA0, 0x06, 0xE6, 0xD5, 0xB2, 0x10, 0x04, 0x02,
+ 0x64, 0x00, 0x04, 0x06, 0xFE, 0x16, 0x5B, 0x04,
+ 0xA0, 0xE3, 0x0A, 0xE0, 0x08, 0xC2, 0x02, 0x11,
+ 0xA0, 0x43, 0x0A, 0xE0, 0x20, 0x42, 0x04, 0xE0,
+ 0x28, 0x02, 0xFC, 0xE3, 0x58, 0xC0, 0x02, 0xC0,
+ 0x11, 0x88, 0xCE, 0xED, 0x03, 0x16, 0xD1, 0x2C,
+ 0x58, 0xC0, 0xD1, 0x04, 0x80, 0xC0, 0x0E, 0x01,
+ 0x00, 0x10, 0x0F, 0x13, 0x60, 0xCC, 0xCE, 0xED,
+ 0xC8, 0x05, 0x78, 0xCC, 0x03, 0x16, 0x41, 0x06,
+ 0x60, 0xCC, 0xD6, 0x06, 0x58, 0xC4, 0x02, 0x16,
+ 0x60, 0xC4, 0x00, 0x07, 0x21, 0x02, 0xFA, 0xFF,
+ 0x91, 0x2C, 0x5B, 0x04, 0x0B, 0xC3, 0xA0, 0x06,
+ 0xC2, 0xD5, 0xA0, 0x06, 0x9C, 0xD5, 0x08, 0xC2,
+ 0x05, 0x16, 0x62, 0xC2, 0x02, 0x00, 0x60, 0x26,
+ 0xA8, 0xE4, 0x0D, 0x16, 0x42, 0xC2, 0xC9, 0x05,
+ 0x60, 0xCE, 0xF2, 0xED, 0x60, 0xC6, 0x7C, 0xEB,
+ 0xA0, 0x06, 0x10, 0xD6, 0x18, 0xCA, 0x0A, 0x00,
+ 0x20, 0x46, 0x26, 0xE0, 0x04, 0x16, 0xA0, 0xC0,
+ 0x6C, 0x01, 0x12, 0x2E, 0x1D, 0x10, 0x12, 0xC1,
+ 0x05, 0x13, 0x60, 0xC1, 0x6C, 0x01, 0x14, 0x2E,
+ 0x05, 0xC8, 0x6C, 0x01, 0xD2, 0x04, 0x48, 0x06,
+ 0x84, 0x07, 0x02, 0x00, 0x48, 0xC1, 0xA0, 0xC0,
+ 0x6C, 0x01, 0x02, 0xC0, 0xA0, 0x06, 0xA2, 0xD8,
+ 0x60, 0xC5, 0x02, 0xFC, 0x07, 0x02, 0xA2, 0x06,
+ 0x25, 0x02, 0xF4, 0xFF, 0x05, 0xC8, 0x02, 0xFC,
+ 0x20, 0xC2, 0x6C, 0x01, 0xA0, 0x06, 0xFC, 0xB4,
+ 0x5C, 0x04, 0x42, 0xC2, 0x29, 0x02, 0x08, 0x00,
+ 0x39, 0xC2, 0x48, 0x02, 0x00, 0xC0, 0x88, 0x02,
+ 0x00, 0xC0, 0x08, 0x16, 0x60, 0x8E, 0x2E, 0xE0,
+ 0x05, 0x16, 0x60, 0x86, 0x2E, 0xE0, 0x02, 0x16,
+ 0xC8, 0x04, 0x5B, 0x04, 0x08, 0x07, 0x5B, 0x04,
+ 0x20, 0x88, 0x8E, 0xE1, 0x6C, 0x01, 0x02, 0x16,
+ 0x60, 0x04, 0xBA, 0xCE, 0x5B, 0x04, 0x88, 0x07,
+ 0xAE, 0x01, 0x20, 0xE8, 0x0E, 0xE0, 0x80, 0x01,
+ 0x08, 0x06, 0xFE, 0x16, 0x20, 0x48, 0x0E, 0xE0,
+ 0x80, 0x01, 0x5B, 0x04, 0xC2, 0x04, 0xA0, 0x23,
+ 0x0C, 0xE0, 0x10, 0x16, 0x20, 0x2F, 0x30, 0x06,
+ 0x82, 0x07, 0xDF, 0xFF, 0x02, 0x2C, 0x82, 0x02,
+ 0xF4, 0x03, 0x06, 0x13, 0xE2, 0x04, 0x02, 0x00,
+ 0xA2, 0xC0, 0x06, 0x00, 0x12, 0x2E, 0xF4, 0x10,
+ 0xA0, 0x43, 0x0C, 0xE0, 0x5B, 0x04, 0x42, 0xC2,
+ 0x88, 0x07, 0x0E, 0x00, 0x09, 0xA2, 0x29, 0x02,
+ 0x08, 0x00, 0x78, 0xCE, 0x78, 0xCE, 0x78, 0xCE,
+ 0x60, 0xCE, 0x6C, 0x09, 0x60, 0xCE, 0x6E, 0x09,
+ 0x60, 0xCE, 0x70, 0x09, 0xA0, 0x23, 0x1A, 0xE0,
+ 0x0F, 0x16, 0x58, 0xC2, 0x49, 0x02, 0x80, 0x1F,
+ 0x60, 0x2A, 0x14, 0xE0, 0xA0, 0xE8, 0x04, 0xE0,
+ 0x0E, 0x00, 0x09, 0xC6, 0x49, 0x02, 0x00, 0x1F,
+ 0xC9, 0x06, 0x09, 0xA2, 0x89, 0xA8, 0x04, 0x00,
+ 0x28, 0x02, 0x02, 0x00, 0x58, 0xC2, 0x49, 0x0A,
+ 0x49, 0x02, 0x00, 0xF0, 0x09, 0xD6, 0xE2, 0x04,
+ 0x06, 0x00, 0x5B, 0x04, 0x00, 0x07, 0x82, 0xC0,
+ 0x53, 0x13, 0xA0, 0xC0, 0x6C, 0x01, 0xA0, 0xC1,
+ 0x06, 0xFC, 0x46, 0x02, 0x0F, 0x00, 0x86, 0x02,
+ 0x01, 0x00, 0x3D, 0x12, 0x06, 0x88, 0xF2, 0x06,
+ 0x12, 0x16, 0x01, 0x02, 0x0E, 0xFC, 0x31, 0x88,
+ 0xF4, 0x06, 0x0D, 0x16, 0x31, 0x88, 0xF6, 0x06,
+ 0x0A, 0x16, 0x31, 0x88, 0xF8, 0x06, 0x07, 0x16,
+ 0x86, 0x02, 0x02, 0x00, 0x2C, 0x16, 0x20, 0x88,
+ 0x0A, 0x07, 0xFA, 0x06, 0x28, 0x13, 0x20, 0xC1,
+ 0x6A, 0x09, 0x44, 0x01, 0x00, 0x08, 0x06, 0x13,
+ 0x86, 0x02, 0x02, 0x00, 0x20, 0x16, 0x44, 0x01,
+ 0x80, 0x00, 0x1D, 0x16, 0x00, 0x07, 0xE0, 0x23,
+ 0x14, 0xE0, 0x19, 0x16, 0x82, 0x02, 0x43, 0x00,
+ 0x16, 0x13, 0x00, 0x02, 0x02, 0xFC, 0x40, 0xC0,
+ 0xB0, 0x01, 0x20, 0x00, 0x60, 0x01, 0x6A, 0x09,
+ 0x01, 0x00, 0x07, 0x16, 0x60, 0xA0, 0x2C, 0x09,
+ 0x60, 0xCC, 0xEE, 0x05, 0x50, 0xC4, 0x20, 0xC4,
+ 0x2C, 0x09, 0x80, 0x07, 0x36, 0x07, 0x81, 0x07,
+ 0x40, 0x00, 0x40, 0x2C, 0xC0, 0x04, 0x84, 0x07,
+ 0xF2, 0x06, 0x06, 0xCD, 0x01, 0x02, 0x0E, 0xFC,
+ 0x31, 0xCD, 0x31, 0xCD, 0x31, 0xCD, 0x20, 0xC5,
+ 0x0A, 0x07, 0x00, 0xC0, 0x01, 0x13, 0x12, 0x2E,
+ 0xE0, 0x04, 0x6C, 0x01, 0x5B, 0x04, 0x60, 0x01,
+ 0x8A, 0x09, 0x00, 0x80, 0x12, 0x13, 0x0B, 0xC8,
+ 0x22, 0x09, 0xA0, 0x06, 0x3E, 0xD7, 0x08, 0x02,
+ 0x42, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x08, 0x02,
+ 0x30, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xE0, 0xC2,
+ 0x22, 0x09, 0x5B, 0x04, 0x20, 0x48, 0xAC, 0xE4,
+ 0x80, 0x01, 0x20, 0x48, 0x7E, 0xEB, 0x82, 0x01,
+ 0x20, 0x48, 0x22, 0xE0, 0xAE, 0x01, 0x20, 0x48,
+ 0x22, 0xE0, 0x78, 0x09, 0x60, 0x43, 0x18, 0xE0,
+ 0xA0, 0x43, 0x08, 0xE0, 0x60, 0x01, 0x8A, 0x09,
+ 0x00, 0x80, 0xEB, 0x13, 0x0B, 0xC3, 0x08, 0x02,
+ 0x42, 0x00, 0xA0, 0x06, 0xDA, 0xD4, 0x5C, 0x04,
+ 0x0B, 0xC3, 0x20, 0xE8, 0x0E, 0xE0, 0x82, 0x01,
+ 0x20, 0xE8, 0x22, 0xE0, 0xAE, 0x01, 0x20, 0xE8,
+ 0x22, 0xE0, 0x78, 0x09, 0xA0, 0xE3, 0x08, 0xE0,
+ 0x60, 0xE3, 0x18, 0xE0, 0xA0, 0x43, 0x06, 0xE0,
+ 0x08, 0x02, 0x3C, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x08, 0x02, 0x42, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x5C, 0x04, 0x0B, 0xC3, 0x83, 0x07, 0x00, 0x68,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x83, 0x07, 0x10, 0x80,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x5C, 0x04, 0x0B, 0xC3,
+ 0xA0, 0x06, 0x14, 0xD8, 0x02, 0xA2, 0x68, 0xC2,
+ 0x14, 0x00, 0x29, 0x02, 0xFC, 0xFF, 0x24, 0x13,
+ 0x28, 0x02, 0x18, 0x00, 0x87, 0x07, 0x0E, 0x00,
+ 0x81, 0x07, 0x0E, 0x07, 0xF1, 0x04, 0x47, 0x06,
+ 0xFD, 0x15, 0x58, 0xC0, 0xB0, 0x03, 0x01, 0x78,
+ 0x63, 0x06, 0x41, 0x02, 0x3F, 0x00, 0x0E, 0x13,
+ 0x81, 0x02, 0x1F, 0x00, 0x0B, 0x1B, 0x41, 0xA0,
+ 0x61, 0xC0, 0x86, 0xE4, 0xF8, 0xC1, 0xC7, 0x06,
+ 0xC7, 0x71, 0x47, 0x06, 0x78, 0xCC, 0x47, 0x06,
+ 0xFD, 0x15, 0x04, 0x10, 0x58, 0xC0, 0xC1, 0x06,
+ 0x41, 0x70, 0x01, 0xA2, 0x49, 0xC2, 0xE5, 0x15,
+ 0x5C, 0x04, 0xA0, 0x23, 0x1A, 0xE0, 0x02, 0x13,
+ 0xC8, 0x04, 0x5B, 0x04, 0x22, 0xC2, 0x14, 0x00,
+ 0x48, 0x02, 0x00, 0x1F, 0xC8, 0x06, 0x5B, 0x04,
+ 0x83, 0x02, 0x0F, 0x00, 0x17, 0x1B, 0xA0, 0xC1,
+ 0xD4, 0x06, 0x35, 0x13, 0x26, 0x02, 0x04, 0x00,
+ 0xA0, 0xCD, 0xCE, 0xED, 0x83, 0xC5, 0x04, 0x13,
+ 0x4A, 0xC2, 0x39, 0x0A, 0xC9, 0xE0, 0x83, 0xC5,
+ 0x86, 0x07, 0x36, 0x07, 0x87, 0x07, 0x10, 0x00,
+ 0x20, 0xC2, 0xD4, 0x06, 0xE0, 0x04, 0xD4, 0x06,
+ 0x46, 0x2C, 0x5B, 0x04, 0x60, 0xC0, 0xFE, 0x06,
+ 0x20, 0xC2, 0x6A, 0x09, 0x48, 0x02, 0x00, 0x60,
+ 0x20, 0x22, 0x06, 0xE0, 0x04, 0x16, 0x20, 0xE2,
+ 0x0A, 0xE0, 0x20, 0xE2, 0x18, 0xE0, 0x13, 0x0A,
+ 0x04, 0x18, 0x41, 0x05, 0x03, 0x48, 0xFE, 0x06,
+ 0x06, 0x10, 0x83, 0x02, 0x02, 0x00, 0x01, 0x16,
+ 0x13, 0x09, 0x03, 0xE8, 0xFE, 0x06, 0xC8, 0x40,
+ 0xC1, 0x40, 0x05, 0x13, 0x88, 0x07, 0x36, 0x07,
+ 0x89, 0x07, 0x00, 0x40, 0x48, 0x2C, 0x5B, 0x04,
+ 0xC9, 0x04, 0x24, 0xC1, 0x94, 0xEB, 0x84, 0xC1,
+ 0x86, 0x71, 0x86, 0xA1, 0x26, 0x02, 0x56, 0xEC,
+ 0xC4, 0x06, 0x04, 0x71, 0x24, 0x02, 0xC2, 0xEB,
+ 0x14, 0xD2, 0xC8, 0x09, 0x08, 0xA2, 0xB0, 0x03,
+ 0x34, 0xD8, 0x5F, 0x06, 0x47, 0x02, 0x0F, 0x00,
+ 0xC7, 0xA1, 0x28, 0xC2, 0x82, 0xEB, 0x58, 0x04,
+ 0x76, 0xCD, 0x47, 0x06, 0xFD, 0x16, 0x32, 0x10,
+ 0x36, 0xC2, 0x26, 0x10, 0x17, 0x09, 0x47, 0xA1,
+ 0x2D, 0x10, 0x17, 0x09, 0x47, 0x61, 0x2A, 0x10,
+ 0xA0, 0x43, 0x16, 0xE0, 0x5B, 0x04, 0xA0, 0x43,
+ 0x16, 0xE0, 0x49, 0xC2, 0x03, 0x16, 0x44, 0xC2,
+ 0x06, 0xC8, 0x22, 0x09, 0x27, 0xC1, 0x8E, 0xED,
+ 0x84, 0xC1, 0x86, 0x71, 0x26, 0x02, 0xC4, 0xED,
+ 0xC4, 0x06, 0x04, 0x71, 0x24, 0x02, 0xAA, 0xED,
+ 0xD3, 0x10, 0x09, 0xC1, 0xA0, 0xC1, 0x22, 0x09,
+ 0xC9, 0x04, 0x10, 0x10, 0x36, 0xC2, 0x78, 0xD5,
+ 0x60, 0x41, 0x22, 0xE0, 0xC5, 0x05, 0x0A, 0x10,
+ 0x78, 0xCD, 0x47, 0x06, 0xFD, 0x15, 0x06, 0x10,
+ 0xA0, 0x23, 0x16, 0xE0, 0xCD, 0x16, 0x49, 0xC2,
+ 0xEC, 0x16, 0xD6, 0x10, 0xA0, 0xE3, 0x16, 0xE0,
+ 0xBB, 0x10, 0x08, 0x02, 0x5A, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x44, 0x10, 0xA0, 0x92, 0x0C, 0xE0,
+ 0x15, 0x16, 0x44, 0x02, 0x00, 0x5E, 0x14, 0x16,
+ 0x20, 0x48, 0xAC, 0xE4, 0x80, 0x01, 0xA0, 0x06,
+ 0x72, 0xD7, 0x20, 0xC8, 0x9E, 0x01, 0x9E, 0x01,
+ 0xE0, 0x2E, 0x01, 0x00, 0xA0, 0x43, 0x18, 0xE0,
+ 0xA0, 0xD2, 0x26, 0xE0, 0x83, 0x07, 0x10, 0x00,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x60, 0x04, 0xD2, 0xCE,
+ 0x84, 0x07, 0x08, 0x00, 0x60, 0x04, 0x94, 0xCE,
+ 0x85, 0x07, 0x03, 0x02, 0x05, 0xC8, 0xCE, 0x06,
+ 0xA0, 0x43, 0x12, 0xE0, 0xE0, 0x04, 0xFA, 0x06,
+ 0xA0, 0x06, 0xA4, 0xD7, 0x08, 0x02, 0x48, 0x80,
+ 0xA0, 0x06, 0xDA, 0xD4, 0x17, 0x10, 0x60, 0x01,
+ 0x8E, 0x09, 0x00, 0x80, 0x02, 0x16, 0x60, 0x04,
+ 0x9C, 0xD4, 0xA0, 0x27, 0x2C, 0xE0, 0x04, 0x16,
+ 0x08, 0x02, 0x54, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x83, 0x07, 0x00, 0xA8, 0x20, 0x88, 0x08, 0x07,
+ 0x20, 0xE0, 0x02, 0x16, 0x83, 0x07, 0x00, 0xE8,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x08, 0x02, 0x36, 0x00,
+ 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xE8, 0x0C, 0xE0,
+ 0x82, 0x01, 0xA0, 0x23, 0x18, 0xE0, 0x06, 0x13,
+ 0xA0, 0xE3, 0x18, 0xE0, 0xE0, 0x2E, 0x00, 0x00,
+ 0x41, 0xC0, 0xFA, 0x16, 0xA0, 0x06, 0xE6, 0xD5,
+ 0x82, 0xC0, 0x02, 0x13, 0x4F, 0x02, 0x80, 0xFF,
+ 0xC4, 0x04, 0x0F, 0xD1, 0xC4, 0x06, 0x60, 0x04,
+ 0x94, 0xCE, 0xA0, 0x06, 0x32, 0xDA, 0x08, 0x02,
+ 0x36, 0x80, 0xA0, 0x07, 0xD6, 0x06, 0x20, 0xDA,
+ 0xA0, 0x06, 0xDA, 0xD4, 0x10, 0x10, 0xA0, 0x06,
+ 0x32, 0xDA, 0x20, 0xD1, 0xCE, 0x06, 0xE6, 0x13,
+ 0x20, 0x78, 0x12, 0xE0, 0xCE, 0x06, 0xE2, 0x10,
+ 0x20, 0xC1, 0x16, 0x04, 0x14, 0x0A, 0xC4, 0x06,
+ 0x0A, 0x91, 0x01, 0x16, 0x5B, 0x04, 0x60, 0x04,
+ 0xD2, 0xCE, 0xB0, 0x03, 0x20, 0x98, 0xAB, 0xE3,
+ 0x65, 0x06, 0x02, 0x13, 0x60, 0x04, 0xBA, 0xCE,
+ 0x60, 0xC1, 0x94, 0x09, 0x02, 0x13, 0x60, 0x04,
+ 0x22, 0xDE, 0x60, 0xD1, 0x0E, 0xE0, 0x3D, 0x10,
+ 0x85, 0x07, 0xBE, 0xEA, 0x35, 0xC8, 0x8A, 0x09,
+ 0x15, 0xC8, 0x8C, 0x09, 0x0B, 0x10, 0xE0, 0x04,
+ 0xA0, 0x09, 0x20, 0xD8, 0x2E, 0x09, 0xA6, 0x09,
+ 0x20, 0xC8, 0xA8, 0x09, 0x8A, 0x09, 0x20, 0xC8,
+ 0xAA, 0x09, 0x8C, 0x09, 0xE0, 0x04, 0x8E, 0x09,
+ 0xCA, 0x04, 0xCD, 0x04, 0xCE, 0x04, 0xCF, 0x04,
+ 0xE0, 0x04, 0xA8, 0x06, 0xE0, 0x04, 0xBA, 0x06,
+ 0x84, 0x07, 0xA0, 0x01, 0x85, 0x07, 0x10, 0x00,
+ 0xF4, 0x04, 0x45, 0x06, 0xFD, 0x15, 0x84, 0x07,
+ 0xD8, 0x06, 0x85, 0x07, 0x34, 0x07, 0x44, 0x61,
+ 0xF4, 0x04, 0x45, 0x06, 0xFD, 0x15, 0x84, 0x07,
+ 0xC8, 0x00, 0x04, 0xC8, 0x00, 0x07, 0x84, 0x07,
+ 0xFF, 0x7F, 0x04, 0xC8, 0xF0, 0x06, 0x84, 0x07,
+ 0x06, 0x00, 0x04, 0xC8, 0xEE, 0x06, 0x85, 0x07,
+ 0x02, 0x0C, 0x20, 0xC1, 0x8A, 0x09, 0x01, 0x11,
+ 0xC5, 0x06, 0xB0, 0x03, 0x05, 0xD8, 0x65, 0x06,
+ 0x60, 0x04, 0xD2, 0xCE, 0xB0, 0x03, 0x20, 0x98,
+ 0xAA, 0xE3, 0x65, 0x06, 0x79, 0x16, 0x60, 0xD1,
+ 0x10, 0xE0, 0xF3, 0x10, 0x60, 0xD1, 0xAB, 0xE3,
+ 0xA0, 0x01, 0x8E, 0x09, 0x00, 0x02, 0xE0, 0x01,
+ 0x80, 0x01, 0x00, 0x20, 0xC8, 0x04, 0x20, 0xD2,
+ 0x80, 0x01, 0x08, 0xC8, 0x9C, 0x09, 0x08, 0xD8,
+ 0x2E, 0x09, 0xE3, 0x10, 0x20, 0xF8, 0x19, 0xEE,
+ 0x82, 0x01, 0x20, 0xC8, 0x10, 0xE0, 0xC6, 0x06,
+ 0x20, 0xC8, 0x20, 0xE0, 0xC8, 0x06, 0x20, 0xC8,
+ 0xC2, 0xEA, 0x90, 0x09, 0xE0, 0x2E, 0x00, 0x00,
+ 0xA0, 0x06, 0xE6, 0xD5, 0x20, 0xC8, 0x6C, 0x09,
+ 0xA0, 0x01, 0x20, 0xC8, 0x6E, 0x09, 0xA2, 0x01,
+ 0x20, 0xC8, 0x70, 0x09, 0xA4, 0x01, 0x20, 0xC8,
+ 0x6E, 0x09, 0xB0, 0x01, 0x20, 0xC8, 0x70, 0x09,
+ 0xB2, 0x01, 0x20, 0xC8, 0x70, 0x09, 0xCC, 0x06,
+ 0x20, 0xF8, 0x18, 0xEE, 0x80, 0x01, 0xB0, 0x03,
+ 0xA0, 0x01, 0x8E, 0x09, 0x00, 0x02, 0x20, 0x98,
+ 0xAA, 0xE3, 0x65, 0x06, 0x3A, 0x13, 0xE0, 0x01,
+ 0x8E, 0x09, 0x00, 0x02, 0x88, 0x07, 0x56, 0xDF,
+ 0xE0, 0xC2, 0x8A, 0x09, 0x05, 0x11, 0xA0, 0x01,
+ 0x8E, 0x09, 0x00, 0x02, 0x88, 0x07, 0x9A, 0xDF,
+ 0x98, 0x06, 0x08, 0x02, 0x12, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x84, 0x07, 0x0A, 0x00, 0x85, 0x07,
+ 0xF4, 0x03, 0x20, 0x88, 0xC6, 0x06, 0x20, 0xE0,
+ 0x08, 0x1B, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
+ 0xA5, 0x13, 0x84, 0x07, 0x1C, 0x00, 0x85, 0x07,
+ 0xF8, 0x03, 0xA0, 0x06, 0xA2, 0xD8, 0x85, 0x07,
+ 0x42, 0xDC, 0x05, 0xC8, 0xF8, 0x03, 0x20, 0xC8,
+ 0xA0, 0x09, 0xA0, 0x09, 0x6C, 0x16, 0x20, 0xE8,
+ 0x9C, 0x09, 0xFE, 0x03, 0x20, 0xE8, 0x9E, 0x09,
+ 0x06, 0x04, 0xA0, 0x23, 0x0C, 0xE0, 0x32, 0x13,
+ 0xA0, 0xE3, 0x0C, 0xE0, 0xA0, 0x2E, 0xF4, 0x03,
+ 0x2D, 0x10, 0xA0, 0x06, 0x56, 0xDF, 0x60, 0x01,
+ 0x8E, 0x09, 0x00, 0x40, 0x08, 0x13, 0x08, 0x02,
+ 0x6C, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x22, 0x10,
+ 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x40, 0x08, 0x02,
+ 0x60, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x84, 0x07,
+ 0x2A, 0x00, 0x85, 0x07, 0xF4, 0x03, 0xA0, 0x06,
+ 0xA2, 0xD8, 0xD5, 0x10, 0xB0, 0x03, 0x20, 0x98,
+ 0xAA, 0xE3, 0x65, 0x06, 0x0F, 0x16, 0x20, 0x06,
+ 0x90, 0x09, 0x9A, 0x16, 0x60, 0x01, 0x8A, 0x09,
+ 0x00, 0x40, 0x39, 0x13, 0xE0, 0x04, 0x8A, 0x09,
+ 0xE0, 0x04, 0x8C, 0x09, 0xE0, 0x04, 0x8E, 0x09,
+ 0x60, 0x04, 0x62, 0xDA, 0x60, 0x04, 0xB0, 0xCE,
+ 0xB0, 0x03, 0x20, 0x98, 0x10, 0xE0, 0x65, 0x06,
+ 0xF9, 0x16, 0x44, 0x02, 0x00, 0x5E, 0x04, 0x16,
+ 0x20, 0x06, 0xC6, 0x06, 0x9A, 0x16, 0x0A, 0x10,
+ 0xB0, 0x03, 0x20, 0x98, 0x10, 0xE0, 0x65, 0x06,
+ 0xED, 0x16, 0x20, 0x06, 0xC8, 0x06, 0x02, 0x13,
+ 0x60, 0x04, 0x5A, 0xDB, 0x60, 0x01, 0x8E, 0x09,
+ 0x00, 0x01, 0x02, 0x16, 0xCE, 0x01, 0x03, 0x00,
+ 0x0E, 0x01, 0x03, 0x00, 0x03, 0x13, 0x83, 0x07,
+ 0x00, 0x82, 0x07, 0x10, 0x83, 0x07, 0x01, 0x00,
+ 0xE0, 0x04, 0x8E, 0x09, 0x20, 0xE8, 0x0C, 0xE0,
+ 0x82, 0x01, 0x60, 0x04, 0xCA, 0xCE, 0x60, 0x01,
+ 0x8A, 0x09, 0x00, 0x40, 0xC7, 0x16, 0x83, 0x07,
+ 0x0D, 0x00, 0xF2, 0x10, 0xB0, 0x03, 0x20, 0x98,
+ 0xAA, 0xE3, 0x65, 0x06, 0xC7, 0x16, 0x20, 0x88,
+ 0x98, 0x09, 0x20, 0xE0, 0xF0, 0x16, 0x22, 0xC8,
+ 0x0E, 0x00, 0xDC, 0x06, 0x22, 0xC8, 0x10, 0x00,
+ 0xDE, 0x06, 0x22, 0xC8, 0x12, 0x00, 0xE0, 0x06,
+ 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x80, 0x08, 0x02,
+ 0x66, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xB2, 0x10,
+ 0xA0, 0x07, 0x9A, 0x09, 0x5A, 0x00, 0xA0, 0x07,
+ 0xA2, 0x09, 0x19, 0x00, 0xA0, 0x07, 0xA4, 0x09,
+ 0x05, 0x00, 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x20,
+ 0xE0, 0x01, 0x8E, 0x09, 0x00, 0x04, 0x08, 0x02,
+ 0x78, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xB0, 0x03,
+ 0x20, 0x98, 0xAB, 0xE3, 0x65, 0x06, 0x9A, 0x16,
+ 0x08, 0x02, 0x72, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x20, 0xE8, 0x0C, 0xE0, 0x82, 0x01, 0xA0, 0x06,
+ 0xD0, 0xD5, 0x20, 0x06, 0x9A, 0x09, 0xBF, 0x13,
+ 0x84, 0x07, 0x2C, 0x00, 0x85, 0x07, 0xF4, 0x03,
+ 0xA0, 0x06, 0xA2, 0xD8, 0x60, 0x04, 0xC0, 0xDB,
+ 0x20, 0x48, 0x0C, 0xE0, 0x82, 0x01, 0x82, 0x10,
+ 0x0E, 0x01, 0x03, 0x00, 0x0A, 0x13, 0x08, 0x02,
+ 0x0C, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0xE0, 0xE3,
+ 0x14, 0xE0, 0x20, 0xC8, 0xAE, 0xE4, 0x86, 0x01,
+ 0x26, 0x10, 0x20, 0x48, 0x0C, 0xE0, 0x82, 0x01,
+ 0xE0, 0x2E, 0x01, 0x00, 0x60, 0xC1, 0x1E, 0x09,
+ 0x35, 0x0A, 0x05, 0xE8, 0x82, 0x01, 0x20, 0xC1,
+ 0x6A, 0x09, 0x04, 0x01, 0x06, 0x00, 0x06, 0x13,
+ 0x20, 0xD8, 0xD0, 0xE1, 0x2F, 0x09, 0x20, 0xD8,
+ 0xD0, 0xE1, 0x83, 0x01, 0x20, 0x21, 0x22, 0xE0,
+ 0x03, 0x16, 0x20, 0xE8, 0x22, 0xE0, 0x80, 0x01,
+ 0x20, 0x21, 0x04, 0xE0, 0x04, 0x16, 0xA0, 0xE3,
+ 0x14, 0xE0, 0x60, 0x04, 0x0A, 0xD3, 0x08, 0x02,
+ 0x00, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xE8,
+ 0x08, 0xE0, 0x82, 0x01, 0xE0, 0xC2, 0x8A, 0x09,
+ 0x02, 0x11, 0x60, 0x04, 0xB0, 0xCE, 0xA0, 0x01,
+ 0x8E, 0x09, 0x00, 0x04, 0x6B, 0x10, 0x20, 0xC8,
+ 0xAE, 0xE4, 0x86, 0x01, 0x08, 0x02, 0x00, 0x80,
+ 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xC2, 0x1E, 0x09,
+ 0x08, 0xA2, 0x08, 0x05, 0x28, 0xC8, 0x22, 0xE0,
+ 0xCA, 0x06, 0x20, 0xC8, 0x20, 0xE0, 0xC6, 0x06,
+ 0x20, 0xC8, 0x20, 0xE0, 0xC8, 0x06, 0x60, 0xE3,
+ 0x16, 0xE0, 0x60, 0x04, 0xD2, 0xCE, 0x44, 0xC1,
+ 0x44, 0x02, 0x00, 0x5E, 0xF8, 0x16, 0x60, 0x25,
+ 0xA8, 0xE4, 0x0F, 0x16, 0x20, 0x06, 0xC6, 0x06,
+ 0xF2, 0x16, 0x20, 0x06, 0xCA, 0x06, 0x03, 0x13,
+ 0xA0, 0x05, 0xCC, 0x06, 0xE6, 0x10, 0xB0, 0x03,
+ 0x20, 0xD8, 0x0C, 0xE0, 0x65, 0x06, 0x60, 0x04,
+ 0xD2, 0xCE, 0x20, 0x06, 0xC8, 0x06, 0xE3, 0x16,
+ 0x20, 0x88, 0x70, 0x09, 0xCC, 0x06, 0x03, 0x16,
+ 0x83, 0x07, 0x08, 0x00, 0x02, 0x10, 0x83, 0x07,
+ 0x0C, 0x00, 0x60, 0x04, 0x8A, 0xDC, 0x60, 0x04,
+ 0xD2, 0xCE, 0xA0, 0x23, 0x08, 0xE0, 0x03, 0x13,
+ 0x60, 0x23, 0x12, 0xE0, 0x06, 0x16, 0xB0, 0x03,
+ 0x20, 0xD8, 0xA9, 0xE3, 0x65, 0x06, 0x60, 0x04,
+ 0xD2, 0xCE, 0x08, 0x02, 0x00, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x60, 0x04, 0xB0, 0xCE, 0x08, 0x02,
+ 0x00, 0x80, 0xA0, 0x06, 0xDA, 0xD4, 0x20, 0xC8,
+ 0x1E, 0xE0, 0xC6, 0x06, 0x20, 0xC8, 0x1E, 0xE0,
+ 0xC8, 0x06, 0x60, 0xE3, 0x10, 0xE0, 0x60, 0x04,
+ 0xD2, 0xCE, 0xE0, 0x23, 0x14, 0xE0, 0x30, 0x13,
+ 0x44, 0xC1, 0x44, 0x02, 0x00, 0x1E, 0xF5, 0x16,
+ 0x60, 0x25, 0xA8, 0xE4, 0x1D, 0x16, 0x20, 0x06,
+ 0xC8, 0x06, 0xEF, 0x16, 0x60, 0x01, 0x8E, 0x09,
+ 0x00, 0x80, 0x13, 0x16, 0x60, 0x01, 0x8E, 0x09,
+ 0x00, 0x01, 0x0C, 0x16, 0xA0, 0x01, 0x8E, 0x09,
+ 0x00, 0x01, 0xA0, 0x01, 0x8E, 0x09, 0x80, 0x00,
+ 0xA0, 0x43, 0x04, 0xE0, 0x83, 0x07, 0x18, 0x68,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x20, 0xC8, 0xAE, 0xE4,
+ 0x86, 0x01, 0xC2, 0x04, 0x60, 0x04, 0x2C, 0xE4,
+ 0x08, 0x02, 0x1E, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x07, 0x10, 0x20, 0x06, 0xC6, 0x06, 0xCD, 0x16,
+ 0x83, 0x07, 0x09, 0x00, 0xA0, 0x06, 0x8A, 0xDC,
+ 0x60, 0x04, 0xB0, 0xCE, 0xCE, 0x04, 0xE0, 0x04,
+ 0x2A, 0x09, 0xE0, 0xD3, 0xAA, 0xE3, 0x8F, 0xC2,
+ 0x20, 0xC8, 0xB0, 0xE4, 0x86, 0x01, 0x20, 0x48,
+ 0x08, 0xE0, 0x82, 0x01, 0x86, 0x07, 0x05, 0x00,
+ 0x84, 0x07, 0x72, 0x06, 0x54, 0xC1, 0x01, 0x13,
+ 0xD4, 0x2C, 0x24, 0x02, 0x0A, 0x00, 0x06, 0x06,
+ 0xF9, 0x16, 0x08, 0x02, 0x2A, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x20, 0x2C, 0x1A, 0xE0, 0x60, 0x04,
+ 0x50, 0xCD, 0xA0, 0x06, 0x3E, 0xD7, 0xCD, 0x04,
+ 0xA0, 0x23, 0x1C, 0xE0, 0x0D, 0x13, 0x0E, 0x01,
+ 0x03, 0x00, 0x0A, 0x13, 0xA0, 0xE3, 0x1C, 0xE0,
+ 0xB0, 0x03, 0x20, 0xD8, 0x10, 0xE0, 0x65, 0x06,
+ 0xA0, 0xD2, 0x26, 0xE0, 0xCF, 0x04, 0x08, 0x10,
+ 0x20, 0x2D, 0x01, 0x00, 0xE0, 0xC0, 0x2A, 0x09,
+ 0xA0, 0x06, 0x2A, 0xD8, 0xA0, 0xD2, 0xAB, 0xE3,
+ 0x60, 0x04, 0xD2, 0xCE, 0xA0, 0x01, 0x80, 0x01,
+ 0x00, 0x01, 0xE0, 0x01, 0x80, 0x01, 0x00, 0xAC,
+ 0xA0, 0x01, 0x82, 0x01, 0x00, 0x03, 0xE0, 0x01,
+ 0x82, 0x01, 0x00, 0x08, 0x88, 0x07, 0xAE, 0x01,
+ 0x08, 0x06, 0xFE, 0x16, 0x60, 0x01, 0x8E, 0x09,
+ 0x00, 0x02, 0x03, 0x16, 0xA0, 0x01, 0x80, 0x01,
+ 0x00, 0x20, 0xC8, 0x04, 0x20, 0xD2, 0x80, 0x01,
+ 0x08, 0xC8, 0x9C, 0x09, 0x08, 0xD8, 0x2E, 0x09,
+ 0xA0, 0x07, 0x9E, 0x09, 0x00, 0x10, 0x5B, 0x04,
+ 0x20, 0xD8, 0xA6, 0x09, 0x2E, 0x09, 0xE0, 0x01,
+ 0x80, 0x01, 0x00, 0x04, 0xE0, 0x01, 0x82, 0x01,
+ 0x00, 0x08, 0xA0, 0x01, 0x82, 0x01, 0x00, 0x03,
+ 0x20, 0xC2, 0x30, 0x09, 0x03, 0x13, 0xE0, 0x01,
+ 0x82, 0x01, 0x00, 0x03, 0xA0, 0x01, 0x80, 0x01,
+ 0x00, 0xA1, 0x20, 0xF8, 0x2E, 0x09, 0x80, 0x01,
+ 0x88, 0x07, 0xAE, 0x01, 0x08, 0x06, 0xFE, 0x16,
+ 0xA0, 0x01, 0x80, 0x01, 0x00, 0x0C, 0xE0, 0x04,
+ 0x9E, 0x01, 0xE0, 0x04, 0x9C, 0x09, 0xE0, 0x04,
+ 0x9E, 0x09, 0x5B, 0x04, 0x20, 0x01, 0xA8, 0x09,
+ 0x00, 0x80, 0x11, 0x13, 0xE0, 0x93, 0x26, 0xE0,
+ 0x0E, 0x16, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
+ 0x0A, 0x13, 0x08, 0x02, 0x84, 0x80, 0x00, 0x00,
+ 0x00, 0xE0, 0xDC, 0x0F, 0xA0, 0x06, 0xDA, 0xD4,
+ 0x20, 0x48, 0x08, 0xE0, 0x82, 0x01, 0x02, 0x10,
+ 0x60, 0x04, 0x70, 0xDA, 0x60, 0x04, 0xBA, 0xCE,
+ 0xA0, 0x06, 0x9C, 0xD5, 0x08, 0xC2, 0x19, 0x13,
+ 0x83, 0x07, 0x80, 0x80, 0xE0, 0x23, 0x14, 0xE0,
+ 0x02, 0x13, 0x83, 0x07, 0x0A, 0x00, 0x60, 0x04,
+ 0xC6, 0xCE, 0x20, 0xC1, 0x06, 0x06, 0x0D, 0x13,
+ 0xA0, 0x06, 0x9C, 0xD5, 0x08, 0xC2, 0x09, 0x13,
+ 0x83, 0x07, 0x0B, 0x00, 0xE0, 0x23, 0x14, 0xE0,
+ 0x02, 0x16, 0x83, 0x07, 0x01, 0x80, 0x60, 0x04,
+ 0xC6, 0xCE, 0x83, 0x07, 0x0A, 0x80, 0x60, 0x04,
+ 0xB4, 0xCE, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
+ 0x06, 0x16, 0xA0, 0x06, 0xA8, 0xE5, 0x47, 0x10,
+ 0xD0, 0x03, 0x60, 0x04, 0xB0, 0xD3, 0xE0, 0x93,
+ 0x0E, 0xE0, 0x5E, 0x13, 0xE0, 0x93, 0x10, 0xE0,
+ 0x17, 0x13, 0xE0, 0x23, 0x14, 0xE0, 0x04, 0x13,
+ 0x83, 0x07, 0x07, 0x00, 0x60, 0x04, 0xC6, 0xCE,
+ 0x83, 0x07, 0x00, 0xA0, 0xA0, 0x06, 0x2A, 0xD8,
+ 0x83, 0x07, 0x00, 0x48, 0xA0, 0x06, 0x2A, 0xD8,
+ 0xA0, 0xD2, 0x10, 0xE0, 0x20, 0xC8, 0x1C, 0xE0,
+ 0xCA, 0x06, 0x20, 0xC8, 0x20, 0xE0, 0xCC, 0x06,
+ 0xA0, 0x06, 0x3E, 0xD7, 0x08, 0x02, 0x4E, 0x80,
+ 0xA0, 0x06, 0xDA, 0xD4, 0xA0, 0x23, 0x1C, 0xE0,
+ 0x20, 0x13, 0x20, 0x88, 0x6C, 0x09, 0x0E, 0x07,
+ 0x1C, 0x16, 0x20, 0x88, 0x6E, 0x09, 0x10, 0x07,
+ 0x18, 0x16, 0x20, 0x88, 0x70, 0x09, 0x12, 0x07,
+ 0x14, 0x16, 0x20, 0x88, 0x0A, 0x07, 0x22, 0xE0,
+ 0x10, 0x13, 0x20, 0x06, 0xCA, 0x06, 0x38, 0x16,
+ 0xA0, 0xE3, 0x20, 0xE0, 0x06, 0x10, 0xE0, 0x23,
+ 0x14, 0xE0, 0xCA, 0x16, 0xA0, 0xE3, 0x22, 0xE0,
+ 0xC2, 0x04, 0xA0, 0xD2, 0xAA, 0xE3, 0x60, 0x04,
+ 0xBA, 0xCE, 0x20, 0xC8, 0x1C, 0xE0, 0xCA, 0x06,
+ 0xA0, 0x88, 0xDC, 0x06, 0x0E, 0x00, 0x10, 0x16,
+ 0xA0, 0x88, 0xDE, 0x06, 0x10, 0x00, 0x0C, 0x16,
+ 0xA0, 0x88, 0xE0, 0x06, 0x12, 0x00, 0x08, 0x16,
+ 0x20, 0x06, 0xCC, 0x06, 0x19, 0x16, 0x20, 0xE8,
+ 0x0E, 0xE0, 0x82, 0x01, 0xA0, 0xE3, 0x1E, 0xE0,
+ 0x20, 0xC8, 0x20, 0xE0, 0xCC, 0x06, 0x10, 0x10,
+ 0xA0, 0x23, 0x10, 0xE0, 0x08, 0x16, 0x64, 0xC1,
+ 0x06, 0x00, 0x60, 0x21, 0x0C, 0xE0, 0x08, 0x13,
+ 0xA0, 0xD2, 0xA8, 0xE3, 0x05, 0x10, 0x20, 0x88,
+ 0x0A, 0x07, 0x08, 0x07, 0x96, 0x12, 0x00, 0x10,
+ 0x60, 0x04, 0xBA, 0xCE, 0x60, 0x01, 0x8E, 0x09,
+ 0x00, 0x80, 0x06, 0x16, 0x83, 0x07, 0x00, 0x82,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x60, 0x04, 0xCA, 0xCE,
+ 0xE0, 0x93, 0x0E, 0xE0, 0x50, 0x13, 0xE0, 0x93,
+ 0xA9, 0xE3, 0x4D, 0x13, 0xE0, 0x93, 0xA8, 0xE3,
+ 0x1C, 0x13, 0xA0, 0x06, 0xA4, 0xD7, 0xA0, 0x23,
+ 0x10, 0xE0, 0x45, 0x13, 0xA0, 0x23, 0x08, 0xE0,
+ 0x06, 0x16, 0x60, 0xE3, 0x1E, 0xE0, 0x20, 0xC8,
+ 0x22, 0xE0, 0x06, 0x07, 0x34, 0x10, 0xE0, 0x23,
+ 0x14, 0xE0, 0x31, 0x16, 0x60, 0xC1, 0x6A, 0x09,
+ 0x60, 0x21, 0x12, 0xE0, 0x2C, 0x16, 0xA0, 0x06,
+ 0x0E, 0xE2, 0x31, 0x10, 0xA0, 0xD2, 0xA8, 0xE3,
+ 0x2E, 0x10, 0xA0, 0xE3, 0x12, 0xE0, 0xA0, 0x06,
+ 0x0E, 0xE2, 0x64, 0xC1, 0x06, 0x00, 0x60, 0x21,
+ 0x0C, 0xE0, 0x25, 0x13, 0x20, 0x88, 0x0E, 0x07,
+ 0xDC, 0x06, 0x14, 0x16, 0x20, 0x88, 0x10, 0x07,
+ 0xDE, 0x06, 0x10, 0x16, 0x20, 0x88, 0x12, 0x07,
+ 0xE0, 0x06, 0x0C, 0x16, 0x20, 0x98, 0xCE, 0x06,
+ 0xCF, 0x06, 0x15, 0x13, 0x20, 0x06, 0xCE, 0x06,
+ 0x12, 0x16, 0x60, 0xE3, 0x1A, 0xE0, 0xA0, 0xD2,
+ 0x0C, 0xE0, 0x0D, 0x10, 0x60, 0xE3, 0x1E, 0xE0,
+ 0x20, 0xC8, 0x32, 0xE0, 0x06, 0x07, 0xA0, 0x06,
+ 0x3E, 0xD7, 0x08, 0x02, 0x48, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0xA0, 0xD2, 0xA9, 0xE3, 0x60, 0x04,
+ 0xBA, 0xCE, 0x22, 0x88, 0x0E, 0x00, 0x6C, 0x09,
+ 0xC9, 0x1A, 0x0B, 0x1B, 0x22, 0x88, 0x10, 0x00,
+ 0x6E, 0x09, 0xC4, 0x1A, 0x06, 0x1B, 0x22, 0x88,
+ 0x12, 0x00, 0x70, 0x09, 0xBF, 0x1A, 0x01, 0x1B,
+ 0x5B, 0x04, 0x60, 0xC1, 0x6C, 0x01, 0x85, 0x02,
+ 0x43, 0x00, 0xE1, 0x13, 0xE0, 0x93, 0xA8, 0xE3,
+ 0xDE, 0x16, 0xA0, 0xC8, 0x00, 0xEE, 0x02, 0x00,
+ 0x84, 0x07, 0x0E, 0x00, 0x42, 0xC1, 0xA0, 0xC0,
+ 0x6C, 0x01, 0x02, 0xC0, 0x25, 0x02, 0x48, 0x00,
+ 0x81, 0x07, 0x60, 0xE2, 0x83, 0x07, 0x14, 0xAE,
+ 0x60, 0x04, 0x9E, 0xE5, 0x02, 0x02, 0x00, 0xFC,
+ 0xCA, 0x10, 0x60, 0x01, 0x8E, 0x09, 0x00, 0x80,
+ 0x06, 0x16, 0x83, 0x07, 0x00, 0x82, 0xA0, 0x06,
+ 0x2A, 0xD8, 0x60, 0x04, 0xCA, 0xCE, 0x20, 0x98,
+ 0x0E, 0xE0, 0x65, 0x06, 0x03, 0x16, 0x20, 0xD8,
+ 0xA8, 0xE3, 0x65, 0x06, 0xE0, 0x93, 0xA9, 0xE3,
+ 0x0D, 0x13, 0xA0, 0x23, 0x08, 0xE0, 0x19, 0x16,
+ 0xA0, 0x23, 0x10, 0xE0, 0x16, 0x13, 0x60, 0xE3,
+ 0x1E, 0xE0, 0x20, 0xC8, 0x20, 0xE0, 0x06, 0x07,
+ 0xA0, 0x06, 0x3E, 0xD7, 0xA0, 0x43, 0x18, 0xE0,
+ 0xE0, 0x2E, 0x01, 0x00, 0xA0, 0xD2, 0x26, 0xE0,
+ 0x83, 0x07, 0x10, 0x00, 0xA0, 0x06, 0x2A, 0xD8,
+ 0xE0, 0x23, 0x14, 0xE0, 0x02, 0x16, 0xA0, 0x06,
+ 0x18, 0xD7, 0xA0, 0x43, 0x2C, 0xE0, 0x20, 0xC8,
+ 0x20, 0xE0, 0x24, 0x09, 0x60, 0x04, 0xBA, 0xCE,
+ 0xA0, 0x06, 0xA8, 0xE5, 0x01, 0x10, 0x03, 0x10,
+ 0x20, 0x07, 0xA0, 0x09, 0x03, 0x10, 0xA0, 0x07,
+ 0xA2, 0x09, 0x19, 0x00, 0x60, 0x04, 0xBA, 0xCE,
+ 0xA0, 0x43, 0x0E, 0xE0, 0xA0, 0xC1, 0x24, 0x09,
+ 0x02, 0x13, 0x20, 0x06, 0x24, 0x09, 0xE0, 0x23,
+ 0x14, 0xE0, 0x03, 0x13, 0xA0, 0x23, 0x08, 0xE0,
+ 0x29, 0x16, 0x20, 0xC2, 0x8A, 0x09, 0xE4, 0x11,
+ 0x08, 0x02, 0x42, 0x80, 0xA0, 0x06, 0xDA, 0xD4,
+ 0xA0, 0x23, 0x08, 0xE0, 0x1F, 0x16, 0xA0, 0x23,
+ 0x10, 0xE0, 0x0A, 0x16, 0x22, 0xC1, 0x02, 0x00,
+ 0x20, 0x25, 0xA8, 0xE4, 0x23, 0x16, 0x83, 0x07,
+ 0x20, 0x80, 0xA0, 0x06, 0x2A, 0xD8, 0x12, 0x10,
+ 0xA0, 0x06, 0x3E, 0xD7, 0xE0, 0x23, 0x14, 0xE0,
+ 0x02, 0x16, 0xA0, 0x06, 0x18, 0xD7, 0x60, 0xE3,
+ 0x1E, 0xE0, 0x20, 0xC8, 0x20, 0xE0, 0x06, 0x07,
+ 0xA0, 0x23, 0x08, 0xE0, 0x03, 0x16, 0xA0, 0x23,
+ 0x06, 0xE0, 0x51, 0x13, 0x20, 0x98, 0x0E, 0xE0,
+ 0x65, 0x06, 0x03, 0x16, 0x20, 0xD8, 0xA8, 0xE3,
+ 0x65, 0x06, 0x22, 0xC1, 0x02, 0x00, 0x20, 0x25,
+ 0xA8, 0xE4, 0x0E, 0x13, 0x83, 0x07, 0x20, 0x00,
+ 0xA0, 0x06, 0x2A, 0xD8, 0x22, 0xC8, 0x0E, 0x00,
+ 0xE6, 0x06, 0x22, 0xC8, 0x10, 0x00, 0xE8, 0x06,
+ 0x22, 0xC8, 0x12, 0x00, 0xEA, 0x06, 0x37, 0x10,
+ 0x22, 0x88, 0x0E, 0x00, 0xDC, 0x06, 0x08, 0x16,
+ 0x22, 0x88, 0x10, 0x00, 0xDE, 0x06, 0x04, 0x16,
+ 0x22, 0x88, 0x12, 0x00, 0xE0, 0x06, 0x0B, 0x13,
+ 0x22, 0xC8, 0x0E, 0x00, 0xDC, 0x06, 0x22, 0xC8,
+ 0x10, 0x00, 0xDE, 0x06, 0x22, 0xC8, 0x12, 0x00,
+ 0xE0, 0x06, 0x60, 0xE3, 0x14, 0xE0, 0xA0, 0x23,
+ 0x0E, 0xE0, 0x08, 0x16, 0xA0, 0xC1, 0x24, 0x09,
+ 0x1A, 0x16, 0x86, 0x07, 0x00, 0x10, 0x06, 0xE8,
+ 0xD2, 0x06, 0x15, 0x10, 0xA0, 0xE3, 0x0E, 0xE0,
+ 0xA0, 0x23, 0x08, 0xE0, 0x09, 0x16, 0xA0, 0xE3,
+ 0x06, 0xE0, 0xE0, 0x04, 0xE6, 0x06, 0xE0, 0x04,
+ 0xE8, 0x06, 0xE0, 0x04, 0xEA, 0x06, 0x07, 0x10,
+ 0x08, 0x02, 0x36, 0x80, 0xA0, 0x07, 0xD6, 0x06,
+ 0x36, 0xD3, 0xA0, 0x06, 0xDA, 0xD4, 0x60, 0x04,
+ 0xBA, 0xCE, 0x20, 0x98, 0x65, 0x06, 0x10, 0xE0,
+ 0x03, 0x16, 0x20, 0xD8, 0x0E, 0xE0, 0x65, 0x06,
+ 0x60, 0x04, 0xBA, 0xCE, 0xE0, 0x23, 0x14, 0xE0,
+ 0x02, 0x13, 0x60, 0x04, 0xBA, 0xCE, 0x2E, 0x10,
+ 0xB0, 0x03, 0x20, 0x98, 0xA9, 0xE3, 0x6F, 0x06,
+ 0x19, 0x16, 0x24, 0xC2, 0x08, 0x00, 0x16, 0x11,
+ 0xE0, 0xE3, 0x14, 0xE0, 0x83, 0x07, 0x00, 0x00,
+ 0xA0, 0x06, 0x2A, 0xD8, 0xA0, 0x23, 0x14, 0xE0,
+ 0x04, 0x13, 0x08, 0x02, 0x06, 0x80, 0xA0, 0x06,
+ 0xDA, 0xD4, 0x08, 0x02, 0x1E, 0x00, 0xA0, 0x06,
+ 0xDA, 0xD4, 0xA0, 0x23, 0x08, 0xE0, 0x02, 0x13,
+ 0xA0, 0x06, 0x18, 0xD7, 0x82, 0xC0, 0x02, 0x16,
+ 0x60, 0x04, 0xD2, 0xCE, 0x20, 0xE8, 0x1C, 0xEE,
+ 0xF0, 0x06, 0x20, 0x99, 0x0E, 0xE0, 0x16, 0x00,
+ 0x05, 0x16, 0xE0, 0x04, 0xEC, 0x06, 0x20, 0x48,
+ 0x14, 0xE0, 0xF0, 0x06, 0x83, 0x07, 0x01, 0x00,
+ 0x60, 0x04, 0xB4, 0xCE, 0x64, 0xC2, 0x14, 0x00,
+ 0x24, 0x02, 0x18, 0x00, 0xC4, 0xC1, 0xC2, 0x61,
+ 0x27, 0x02, 0xFC, 0xFF, 0x74, 0xC1, 0x85, 0xC1,
+ 0x45, 0x71, 0x85, 0x02, 0x27, 0x00, 0x46, 0x16,
+ 0x54, 0xC1, 0x45, 0x02, 0xCF, 0xFF, 0x42, 0x16,
+ 0xC8, 0x04, 0x64, 0xC1, 0x08, 0x00, 0x06, 0x15,
+ 0x05, 0x13, 0x24, 0xC2, 0x0E, 0x00, 0x48, 0x02,
+ 0x00, 0x1F, 0xC8, 0x06, 0x28, 0x02, 0x11, 0x00,
+ 0x04, 0xA2, 0x18, 0x98, 0x21, 0xEE, 0x32, 0x16,
+ 0x42, 0xC1, 0x25, 0x02, 0x04, 0x00, 0x47, 0x65,
+ 0x35, 0xC2, 0x74, 0xCD, 0x48, 0x06, 0xFD, 0x15,
+ 0xA0, 0xC0, 0x6C, 0x01, 0x02, 0xC1, 0x04, 0xC8,
+ 0x6C, 0x01, 0xA0, 0xC1, 0x00, 0xFC, 0x05, 0x13,
+ 0x20, 0xC8, 0x80, 0xEB, 0x02, 0xFC, 0x06, 0xC1,
+ 0xF6, 0x10, 0x20, 0xC8, 0x00, 0xEE, 0x02, 0xFC,
+ 0x02, 0xC8, 0x6C, 0x01, 0x81, 0x07, 0x08, 0xE5,
+ 0x04, 0xC0, 0x83, 0x07, 0x10, 0x02, 0x84, 0x07,
+ 0x0E, 0x00, 0x3B, 0x10, 0x84, 0x07, 0x0C, 0x00,
+ 0xE2, 0xC0, 0x08, 0x00, 0x05, 0x02, 0x00, 0xFC,
+ 0xA0, 0xC0, 0x6C, 0x01, 0x02, 0xC0, 0x95, 0xC1,
+ 0x30, 0x13, 0xD5, 0x04, 0x16, 0x2E, 0x02, 0xC8,
+ 0x6C, 0x01, 0x2B, 0x10, 0xA0, 0xC8, 0x22, 0xEE,
+ 0x0E, 0x00, 0xA0, 0xC8, 0x24, 0xEE, 0x10, 0x00,
+ 0xA0, 0xC8, 0x26, 0xEE, 0x12, 0x00, 0x83, 0x07,
+ 0x06, 0x80, 0x60, 0x04, 0xB4, 0xCE, 0x60, 0x04,
+ 0xD2, 0xCE, 0x84, 0x07, 0x10, 0x00, 0x85, 0x07,
+ 0x34, 0x00, 0x09, 0x10, 0x84, 0x07, 0x12, 0x00,
+ 0x85, 0x07, 0x32, 0x00, 0x04, 0x10, 0x84, 0x07,
+ 0x14, 0x00, 0x85, 0x07, 0x38, 0x00, 0xA0, 0x06,
+ 0xC2, 0xD5, 0x85, 0xC8, 0x04, 0x00, 0xA0, 0x06,
+ 0x10, 0xD6, 0xA0, 0xC8, 0x00, 0xEE, 0x02, 0x00,
+ 0xA0, 0xC0, 0x6C, 0x01, 0x02, 0xC0, 0x48, 0x06,
+ 0x48, 0xC1, 0xA0, 0x06, 0xA2, 0xD8, 0x07, 0x02,
+ 0xA2, 0x06, 0x60, 0xC5, 0x02, 0xFC, 0x25, 0x02,
+ 0xF4, 0xFF, 0x05, 0xC8, 0x02, 0xFC, 0x20, 0xC2,
+ 0x6C, 0x01, 0xA0, 0x06, 0xFC, 0xB4, 0x60, 0x04,
+ 0xB0, 0xCE, 0xA0, 0x06, 0xA2, 0xD8, 0x07, 0x02,
+ 0xB4, 0x06, 0xEF, 0x10, 0x22, 0x88, 0x12, 0x00,
+ 0x70, 0x09, 0x08, 0x16, 0x22, 0x88, 0x10, 0x00,
+ 0x6E, 0x09, 0x04, 0x16, 0x22, 0x88, 0x0E, 0x00,
+ 0x6C, 0x09, 0x0E, 0x13, 0x22, 0x88, 0x12, 0x00,
+ 0xE0, 0x06, 0x08, 0x16, 0x22, 0x88, 0x10, 0x00,
+ 0xDE, 0x06, 0x04, 0x16, 0x22, 0x88, 0x0E, 0x00,
+ 0xDC, 0x06, 0x01, 0x13, 0xCB, 0x05, 0xCB, 0x05,
+ 0x5B, 0x04, 0x0B, 0xC3, 0x00, 0x03, 0x02, 0x00,
+ 0x82, 0x07, 0xC0, 0x00, 0x20, 0xC8, 0x0C, 0x00,
+ 0xC0, 0x00, 0x20, 0xC8, 0x0E, 0x00, 0xC2, 0x00,
+ 0x20, 0xC8, 0x10, 0x00, 0xC4, 0x00, 0x20, 0xC8,
+ 0x12, 0x00, 0xC6, 0x00, 0x20, 0xC8, 0x14, 0x00,
+ 0xC8, 0x00, 0x20, 0xC8, 0x16, 0x00, 0xCA, 0x00,
+ 0x20, 0xC8, 0x04, 0x00, 0xCC, 0x00, 0x20, 0xC8,
+ 0x06, 0x00, 0xCE, 0x00, 0x02, 0xC8, 0x0C, 0x00,
+ 0xA0, 0x07, 0x0E, 0x00, 0x7E, 0xE6, 0x02, 0xC8,
+ 0x10, 0x00, 0xA0, 0x07, 0x12, 0x00, 0x88, 0xE6,
+ 0x02, 0xC8, 0x14, 0x00, 0xA0, 0x07, 0x16, 0x00,
+ 0xB8, 0xE6, 0x02, 0xC8, 0x04, 0x00, 0xA0, 0x07,
+ 0x06, 0x00, 0xCE, 0xE6, 0x60, 0x01, 0x1C, 0x01,
+ 0x04, 0x00, 0x09, 0x16, 0xE0, 0x01, 0x40, 0x01,
+ 0x00, 0x08, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40,
+ 0xE0, 0x01, 0x40, 0x01, 0x00, 0x04, 0xA0, 0x06,
+ 0x8E, 0xE9, 0x05, 0x02, 0x00, 0x80, 0x05, 0xD8,
+ 0x80, 0x04, 0xC7, 0x04, 0x00, 0x03, 0x0F, 0x00,
+ 0x88, 0x07, 0x00, 0x10, 0x09, 0x02, 0x00, 0x20,
+ 0x8A, 0x07, 0xE6, 0xE6, 0x03, 0x02, 0x3E, 0xE6,
+ 0x5A, 0x04, 0x00, 0x03, 0x00, 0x00, 0x20, 0xD2,
+ 0x87, 0x01, 0x06, 0x10, 0x00, 0x03, 0x00, 0x00,
+ 0x20, 0xC2, 0x8A, 0x01, 0x08, 0x02, 0x00, 0x1A,
+ 0x60, 0xC2, 0xAE, 0x00, 0x48, 0xDA, 0x80, 0x04,
+ 0x89, 0x05, 0x89, 0x02, 0x06, 0x00, 0x07, 0x15,
+ 0x88, 0x07, 0x00, 0x80, 0x48, 0xDA, 0x80, 0x04,
+ 0x09, 0xC8, 0xAE, 0x00, 0x80, 0x03, 0xE0, 0x02,
+ 0xA0, 0x00, 0x5C, 0x04, 0x00, 0x03, 0x00, 0x00,
+ 0x60, 0x01, 0x9C, 0x01, 0x20, 0x00, 0xE2, 0x13,
+ 0x20, 0xC2, 0x8C, 0x01, 0x08, 0x02, 0x00, 0x1C,
+ 0xE3, 0x10, 0x00, 0x03, 0x00, 0x00, 0x60, 0x01,
+ 0x40, 0x01, 0x00, 0x40, 0xEC, 0x16, 0xA0, 0x01,
+ 0x40, 0x01, 0x00, 0x40, 0x08, 0x02, 0x00, 0x02,
+ 0xD7, 0x10, 0xB3, 0xC0, 0x92, 0x06, 0xFD, 0x10,
+ 0xB3, 0xC0, 0x48, 0xC0, 0x72, 0xCC, 0x72, 0xCC,
+ 0x32, 0xC1, 0x44, 0xCC, 0x72, 0xDC, 0x04, 0x06,
+ 0xFD, 0x16, 0x5B, 0x04, 0x48, 0xC0, 0x02, 0x02,
+ 0xD0, 0xE9, 0x84, 0x07, 0x06, 0x00, 0xF6, 0x10,
+ 0x02, 0x02, 0x1E, 0xE6, 0x49, 0xC0, 0x84, 0x07,
+ 0x06, 0x00, 0xF0, 0x10, 0xB3, 0xC0, 0x32, 0xC1,
+ 0x01, 0x02, 0x01, 0x00, 0x44, 0xD0, 0xC1, 0x06,
+ 0x44, 0x02, 0xFF, 0x00, 0xE7, 0x10, 0x33, 0xC1,
+ 0x73, 0xC0, 0x44, 0xD1, 0x44, 0x02, 0xFF, 0x00,
+ 0x45, 0xDC, 0x04, 0x06, 0xFD, 0x16, 0x5A, 0x04,
+ 0xA0, 0x06, 0x0E, 0xE9, 0x33, 0xC8, 0x9E, 0x01,
+ 0x5A, 0x04, 0xA0, 0x06, 0x0C, 0xE7, 0x89, 0xC1,
+ 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8,
+ 0x8A, 0x01, 0x88, 0xC1, 0xA6, 0x09, 0x66, 0x02,
+ 0x40, 0x00, 0x06, 0xC8, 0x8C, 0x01, 0xC2, 0x04,
+ 0xC7, 0xC1, 0x03, 0x16, 0x02, 0x06, 0xFC, 0x16,
+ 0x4D, 0x10, 0x5A, 0x04, 0xA0, 0x06, 0x58, 0xE8,
+ 0x89, 0xC1, 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00,
+ 0x06, 0xC8, 0x8A, 0x01, 0x88, 0xC1, 0xA6, 0x09,
+ 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8, 0x8C, 0x01,
+ 0x33, 0xC8, 0x9E, 0x01, 0xE8, 0x10, 0x33, 0x8A,
+ 0x02, 0x00, 0x38, 0x16, 0x73, 0x8A, 0x02, 0x00,
+ 0x35, 0x16, 0x5A, 0x04, 0x20, 0x8A, 0xCA, 0xE9,
+ 0x02, 0x00, 0x30, 0x16, 0x60, 0x8A, 0xCE, 0xE9,
+ 0x02, 0x00, 0x2C, 0x16, 0x82, 0x07, 0x74, 0xEA,
+ 0x01, 0x10, 0xB3, 0xC0, 0x04, 0x02, 0x80, 0x04,
+ 0x52, 0xD1, 0x03, 0x13, 0x32, 0x9D, 0x22, 0x16,
+ 0xFB, 0x10, 0x85, 0x07, 0x00, 0x80, 0x05, 0xD8,
+ 0x80, 0x04, 0xC7, 0x04, 0x5A, 0x04, 0x20, 0xC8,
+ 0xC0, 0x00, 0x0C, 0x00, 0x20, 0xC8, 0xC2, 0x00,
+ 0x0E, 0x00, 0x20, 0xC8, 0xC4, 0x00, 0x10, 0x00,
+ 0x20, 0xC8, 0xC6, 0x00, 0x12, 0x00, 0x20, 0xC8,
+ 0xC8, 0x00, 0x14, 0x00, 0x20, 0xC8, 0xCA, 0x00,
+ 0x16, 0x00, 0x20, 0xC8, 0xCC, 0x00, 0x04, 0x00,
+ 0x20, 0xC8, 0xCE, 0x00, 0x06, 0x00, 0x00, 0x03,
+ 0x0F, 0x00, 0xCC, 0x05, 0x5C, 0x04, 0xE0, 0x04,
+ 0x82, 0x01, 0x02, 0x02, 0x18, 0xE6, 0x32, 0xC8,
+ 0x82, 0x01, 0x32, 0xC8, 0x80, 0x01, 0xA0, 0x06,
+ 0x24, 0xE8, 0x12, 0xC8, 0x82, 0x01, 0xCA, 0xC2,
+ 0x84, 0x07, 0xD0, 0x07, 0xE0, 0x04, 0x84, 0x01,
+ 0x04, 0x06, 0xFC, 0x16, 0x20, 0xC1, 0x84, 0x01,
+ 0xE9, 0x16, 0x04, 0x02, 0x32, 0x00, 0x85, 0x07,
+ 0x00, 0x80, 0x05, 0xD8, 0x80, 0x04, 0xC7, 0x04,
+ 0x60, 0xC1, 0x86, 0x01, 0x04, 0x06, 0xFC, 0x16,
+ 0x20, 0xC1, 0x84, 0x01, 0x5B, 0x04, 0xB3, 0xC0,
+ 0xB3, 0xC4, 0x5B, 0x04, 0x48, 0xC0, 0xB3, 0xC0,
+ 0x73, 0xA0, 0x42, 0xC4, 0x5B, 0x04, 0x33, 0x88,
+ 0x84, 0x01, 0xE6, 0x16, 0x5A, 0x04, 0x89, 0xC1,
+ 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8,
+ 0x8A, 0x01, 0x5B, 0x04, 0xC5, 0x04, 0xA0, 0x07,
+ 0x9C, 0x01, 0x40, 0x00, 0x60, 0x01, 0x9C, 0x01,
+ 0x40, 0x00, 0x03, 0x13, 0x05, 0x06, 0xF7, 0x16,
+ 0x5C, 0x04, 0x5B, 0x04, 0xA0, 0x06, 0xAC, 0xE8,
+ 0x60, 0xC0, 0x40, 0x01, 0x05, 0xC8, 0x40, 0x01,
+ 0x02, 0xC5, 0x01, 0xC8, 0x40, 0x01, 0x5A, 0x04,
+ 0xA0, 0x06, 0xAC, 0xE8, 0x08, 0xA1, 0xF4, 0x10,
+ 0xB3, 0xC0, 0x33, 0xC1, 0x60, 0xC1, 0x40, 0x01,
+ 0x85, 0x01, 0x00, 0x04, 0xC5, 0x01, 0x00, 0x10,
+ 0x5B, 0x04, 0x08, 0xC1, 0x09, 0xC2, 0x44, 0xC2,
+ 0x5B, 0x04, 0x05, 0x02, 0xC8, 0x00, 0x05, 0x06,
+ 0xFE, 0x16, 0x5B, 0x04, 0x33, 0xC1, 0x03, 0xC0,
+ 0xC4, 0xC0, 0x5B, 0x04, 0xC0, 0xC0, 0x5B, 0x04,
+ 0xE0, 0x94, 0x9E, 0x01, 0xC2, 0x16, 0xC3, 0x05,
+ 0x5B, 0x04, 0x73, 0xC0, 0xA0, 0x06, 0x26, 0xE9,
+ 0x2D, 0x02, 0x08, 0x00, 0x85, 0x07, 0x08, 0x00,
+ 0x71, 0x9F, 0xB7, 0x16, 0x05, 0x06, 0xFC, 0x16,
+ 0x5A, 0x04, 0x02, 0x02, 0x24, 0xE6, 0x60, 0x04,
+ 0x10, 0xE7, 0xE9, 0x8C, 0x04, 0x00, 0xAD, 0x16,
+ 0x5B, 0x04, 0x20, 0xC1, 0x80, 0x01, 0x85, 0x07,
+ 0xD0, 0x07, 0xE0, 0x01, 0x80, 0x01, 0x00, 0x04,
+ 0x45, 0x06, 0xFE, 0x16, 0x04, 0xC8, 0x80, 0x01,
+ 0x5B, 0x04, 0x33, 0xC1, 0x48, 0xC3, 0x04, 0xC1,
+ 0x04, 0x13, 0x2D, 0x02, 0x00, 0x04, 0x04, 0x06,
+ 0xFC, 0x16, 0x5B, 0x04, 0x8D, 0xC3, 0xA0, 0x06,
+ 0x26, 0xE9, 0x8D, 0xC1, 0xA6, 0x09, 0x66, 0x02,
+ 0x40, 0x00, 0x86, 0xC7, 0x5A, 0x04, 0x8D, 0xC1,
+ 0xA6, 0x09, 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8,
+ 0x8A, 0x01, 0x5B, 0x04, 0x8D, 0xC1, 0xA6, 0x09,
+ 0x66, 0x02, 0x40, 0x00, 0x06, 0xC8, 0x8C, 0x01,
+ 0x5B, 0x04, 0x4D, 0xC0, 0x04, 0x02, 0x28, 0x00,
+ 0x85, 0x07, 0x00, 0x55, 0x60, 0x04, 0x34, 0xE7,
+ 0x4D, 0xC0, 0xB3, 0xC0, 0x32, 0xC1, 0x60, 0x04,
+ 0xF8, 0xE6, 0x33, 0xC1, 0x60, 0x01, 0x1C, 0x01,
+ 0x04, 0x00, 0x01, 0x16, 0x5B, 0x04, 0xC4, 0xC0,
+ 0x5B, 0x04, 0x89, 0x07, 0x66, 0xE5, 0x39, 0xC2,
+ 0x07, 0x13, 0x39, 0xC6, 0x39, 0x86, 0x25, 0x16,
+ 0x39, 0xC6, 0x39, 0x86, 0x22, 0x16, 0xF7, 0x10,
+ 0x02, 0x02, 0xAC, 0xE9, 0xC4, 0x04, 0xC5, 0x04,
+ 0x39, 0xC2, 0x02, 0x13, 0x60, 0x04, 0xE8, 0xE9,
+ 0x02, 0x02, 0xBA, 0xE9, 0xC4, 0x04, 0x39, 0xC2,
+ 0x03, 0x13, 0x79, 0xC1, 0x60, 0x04, 0xE8, 0xE9,
+ 0x02, 0x02, 0xCA, 0xE9, 0xC5, 0x04, 0x39, 0xC2,
+ 0x03, 0x13, 0x39, 0xC1, 0x60, 0x04, 0xE8, 0xE9,
+ 0x79, 0xC0, 0xB9, 0xC0, 0x81, 0x60, 0xC2, 0x05,
+ 0x12, 0x09, 0xF1, 0x04, 0x02, 0x06, 0xFD, 0x16,
+ 0x5B, 0x04, 0x5C, 0x04, 0x01, 0x02, 0xAA, 0xAA,
+ 0x01, 0xC6, 0x44, 0xE0, 0x45, 0x40, 0x58, 0x80,
+ 0xF8, 0x16, 0x01, 0x02, 0x14, 0x00, 0x01, 0x06,
+ 0xFE, 0x16, 0x01, 0x02, 0x55, 0x55, 0x01, 0xC6,
+ 0x44, 0xE0, 0x45, 0x40, 0x58, 0x80, 0xED, 0x16,
+ 0x52, 0x04, 0xE0, 0x02, 0xA0, 0x00, 0x88, 0x07,
+ 0xC0, 0x00, 0x09, 0x02, 0x62, 0xEA, 0x84, 0x07,
+ 0x2A, 0xE6, 0x05, 0x02, 0x01, 0x00, 0x8B, 0xC2,
+ 0xCC, 0x04, 0xA0, 0x06, 0x6C, 0xEA, 0x60, 0x2C,
+ 0x01, 0x00, 0x99, 0x06, 0xA0, 0x2C, 0x02, 0x00,
+ 0x99, 0x06, 0x20, 0x2D, 0x04, 0x00, 0x99, 0x06,
+ 0x20, 0x2E, 0x08, 0x00, 0x99, 0x06, 0xA0, 0x2F,
+ 0x10, 0x00, 0x8C, 0x05, 0x09, 0x16, 0x80, 0xCC,
+ 0x81, 0xC4, 0x83, 0x07, 0xB0, 0xEA, 0x88, 0xC0,
+ 0x02, 0x04, 0x8C, 0x05, 0x01, 0x16, 0x33, 0x10,
+ 0xE0, 0x02, 0xA0, 0x00, 0x5A, 0x04, 0x8C, 0x05,
+ 0xFB, 0x16, 0x80, 0xCC, 0x81, 0xC4, 0x15, 0x0A,
+ 0xB4, 0xC0, 0x12, 0xC0, 0x88, 0xCC, 0x52, 0xC0,
+ 0xB4, 0xC4, 0x42, 0x06, 0x5B, 0x04, 0x2D, 0x07,
+ 0x18, 0x00, 0x41, 0x8B, 0x0A, 0x00, 0xEC, 0x16,
+ 0xC1, 0x82, 0xEA, 0x16, 0xC2, 0x02, 0x42, 0x02,
+ 0x00, 0x02, 0xE6, 0x16, 0x80, 0x03, 0x81, 0x07,
+ 0x01, 0x00, 0xF1, 0x10, 0x01, 0x02, 0x02, 0x00,
+ 0xEE, 0x10, 0x01, 0x02, 0x04, 0x00, 0xEB, 0x10,
+ 0x01, 0x02, 0x08, 0x00, 0xE8, 0x10, 0x01, 0x02,
+ 0x10, 0x00, 0xE5, 0x10, 0xA1, 0x02, 0x41, 0x8B,
+ 0x10, 0x00, 0x02, 0x13, 0x60, 0x04, 0x5C, 0xEA,
+ 0x2D, 0x07, 0x18, 0x00, 0x80, 0x03, 0x09, 0x02,
+ 0x00, 0x08, 0x03, 0x02, 0x04, 0x00, 0xC7, 0x04,
+ 0xA0, 0x06, 0xDC, 0xEB, 0x60, 0x01, 0x1C, 0x01,
+ 0x04, 0x00, 0x1C, 0x16, 0xA0, 0x01, 0x40, 0x01,
+ 0x00, 0x08, 0xE0, 0x01, 0x40, 0x01, 0x00, 0x10,
+ 0x04, 0x02, 0x01, 0x00, 0x44, 0xCE, 0xC4, 0x06,
+ 0x44, 0xC6, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x10,
+ 0x49, 0x06, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x40,
+ 0xE0, 0x01, 0x40, 0x01, 0x00, 0x04, 0xE0, 0x01,
+ 0x40, 0x01, 0x00, 0x08, 0xA0, 0x06, 0x7A, 0xEC,
+ 0xA0, 0x06, 0x7A, 0xEC, 0xC7, 0x05, 0x04, 0x02,
+ 0xE4, 0xE4, 0xE0, 0x04, 0xD0, 0x03, 0x74, 0xC1,
+ 0xB4, 0xC1, 0x86, 0x05, 0x1C, 0x13, 0xE0, 0x02,
+ 0xC0, 0x00, 0x00, 0x02, 0x00, 0x00, 0x40, 0xC0,
+ 0x80, 0xC0, 0xC0, 0xC0, 0x00, 0xC1, 0x40, 0xC1,
+ 0x80, 0xC1, 0xC0, 0xC1, 0x00, 0xC2, 0x40, 0xC2,
+ 0x80, 0xC2, 0xC0, 0xC2, 0x00, 0xC3, 0x40, 0xC3,
+ 0x80, 0xC3, 0xC0, 0xC3, 0xA0, 0x04, 0xAA, 0x00,
+ 0xD0, 0x03, 0xD0, 0x03, 0x3F, 0x10, 0x85, 0x05,
+ 0x85, 0x81, 0xE1, 0x13, 0xE4, 0x10, 0xC7, 0x05,
+ 0x05, 0x02, 0xFF, 0x7F, 0x45, 0xA1, 0xD0, 0x03,
+ 0xD0, 0x03, 0x34, 0x10, 0xC0, 0xCC, 0xC1, 0xC4,
+ 0x03, 0x02, 0x28, 0x00, 0xA0, 0x06, 0xDC, 0xEB,
+ 0xE0, 0x01, 0x42, 0x01, 0x00, 0x10, 0xC7, 0x05,
+ 0xD0, 0x03, 0xD0, 0x03, 0x27, 0x10, 0xC7, 0x05,
+ 0xA0, 0xC1, 0x4A, 0x01, 0xA0, 0x07, 0x4A, 0x01,
+ 0x00, 0x0E, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x02,
+ 0x20, 0x07, 0x44, 0x01, 0x60, 0xC1, 0x44, 0x01,
+ 0x85, 0x02, 0x00, 0xFF, 0x17, 0x16, 0xE0, 0x01,
+ 0x40, 0x01, 0x00, 0x22, 0x05, 0x02, 0xC0, 0x00,
+ 0x05, 0x06, 0xD0, 0x03, 0xFD, 0x16, 0x60, 0xC1,
+ 0x46, 0x01, 0x85, 0x02, 0x00, 0xFF, 0x0A, 0x13,
+ 0x05, 0x02, 0x93, 0x33, 0x05, 0x06, 0x00, 0x10,
+ 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10,
+ 0xD0, 0x03, 0xF8, 0x16, 0x51, 0x10, 0x06, 0xC8,
+ 0x4A, 0x01, 0xC0, 0xCC, 0xC1, 0xC4, 0x4B, 0x10,
+ 0x13, 0xC0, 0xC8, 0xCC, 0x53, 0xC0, 0x02, 0x02,
+ 0xEC, 0xEB, 0xC2, 0xC4, 0x43, 0x06, 0x5B, 0x04,
+ 0x60, 0xC0, 0xAE, 0x00, 0xC4, 0x02, 0x44, 0x02,
+ 0x0F, 0x00, 0x44, 0x88, 0xCA, 0xE4, 0x3C, 0x16,
+ 0x81, 0x02, 0x08, 0x00, 0x27, 0x13, 0x21, 0xC1,
+ 0xDC, 0xE4, 0x14, 0xC1, 0x21, 0x21, 0xBA, 0xE4,
+ 0x33, 0x16, 0x21, 0xC1, 0xC2, 0xE4, 0x81, 0x02,
+ 0x00, 0x00, 0x0B, 0x13, 0x0D, 0x02, 0xA0, 0x00,
+ 0x84, 0x83, 0x09, 0x13, 0xC4, 0x05, 0x84, 0x83,
+ 0x06, 0x13, 0xC4, 0x05, 0x84, 0x83, 0x03, 0x13,
+ 0x23, 0x10, 0x0E, 0x81, 0x21, 0x16, 0x21, 0xC1,
+ 0xDC, 0xE4, 0x21, 0x45, 0xBA, 0xE4, 0xE0, 0x01,
+ 0x42, 0x01, 0x00, 0x10, 0xA0, 0x01, 0x42, 0x01,
+ 0x00, 0x10, 0xA1, 0xC3, 0xD4, 0xE4, 0x0F, 0x02,
+ 0x2F, 0x00, 0x80, 0x03, 0xA0, 0x01, 0x40, 0x01,
+ 0x00, 0x02, 0xA0, 0x01, 0x40, 0x01, 0x00, 0x80,
+ 0x6D, 0xC0, 0x0A, 0x00, 0x09, 0x13, 0x81, 0x02,
+ 0x5C, 0x12, 0x06, 0x1B, 0x0E, 0x02, 0xD2, 0xEB,
+ 0x0F, 0x02, 0x0F, 0x00, 0x80, 0x03, 0xCA, 0x05,
+ 0xE0, 0x02, 0xA0, 0x00, 0x5A, 0x04, 0x59, 0xCE,
+ 0x20, 0x88, 0xE4, 0xE4, 0xE4, 0xE4, 0xF8, 0x10,
+ 0xC1, 0x04, 0x48, 0x62, 0x89, 0x05, 0xA0, 0xC0,
+ 0x6C, 0x01, 0x08, 0xC8, 0x6C, 0x01, 0x03, 0x02,
+ 0x00, 0xFC, 0x04, 0x02, 0x00, 0x02, 0x73, 0xA0,
+ 0x04, 0x06, 0xFD, 0x16, 0x88, 0x05, 0x09, 0x06,
+ 0xF4, 0x16, 0x02, 0xC8, 0x6C, 0x01, 0x81, 0x86,
+ 0x02, 0x16, 0xD0, 0x03, 0xCB, 0x05, 0x5B, 0x04,
+ 0x43, 0x28, 0x31, 0x29, 0x38, 0x39, 0x2D, 0x33,
+ 0x38, 0x38, 0x42, 0x20, 0x20, 0x59, 0x49, 0x54,
+ 0x4B, 0xC2, 0xA8, 0x02, 0x98, 0x00, 0x83, 0x07,
+ 0x02, 0x00, 0x28, 0x02, 0x08, 0x00, 0x23, 0xC6,
+ 0x36, 0xE5, 0x48, 0x06, 0xC4, 0xC0, 0x73, 0x0A,
+ 0x65, 0x17, 0xA0, 0x06, 0xAA, 0xED, 0xC8, 0xC1,
+ 0xC7, 0x05, 0x03, 0x02, 0xA5, 0x00, 0xB0, 0x03,
+ 0xF8, 0xCD, 0xF8, 0xCD, 0xA6, 0x02, 0x06, 0x62,
+ 0x88, 0x02, 0x0A, 0x00, 0x57, 0x16, 0x03, 0x29,
+ 0x55, 0x16, 0x05, 0x29, 0xC4, 0x80, 0x52, 0x16,
+ 0x15, 0x09, 0x50, 0x17, 0x15, 0x09, 0x4E, 0x18,
+ 0x85, 0x02, 0x29, 0x00, 0x4B, 0x16, 0xC6, 0x05,
+ 0x96, 0x00, 0x03, 0x07, 0xC4, 0x04, 0x45, 0x06,
+ 0x95, 0x00, 0x44, 0x05, 0x43, 0x16, 0x44, 0x81,
+ 0x41, 0x16, 0x00, 0x03, 0x05, 0x00, 0xC4, 0x02,
+ 0x00, 0x03, 0x0A, 0x00, 0x44, 0x02, 0x0F, 0x00,
+ 0x84, 0x02, 0x05, 0x00, 0x37, 0x16, 0xC4, 0x02,
+ 0x00, 0x03, 0x0F, 0x00, 0x44, 0x02, 0x0F, 0x00,
+ 0x84, 0x02, 0x0A, 0x00, 0x2F, 0x16, 0x04, 0x02,
+ 0xFE, 0xFF, 0x2C, 0x13, 0x2B, 0x15, 0x2A, 0x1A,
+ 0x84, 0x05, 0x28, 0x12, 0x27, 0x15, 0x26, 0x1A,
+ 0x25, 0x18, 0x84, 0x05, 0x23, 0x16, 0x22, 0x1B,
+ 0x21, 0x17, 0x84, 0x05, 0x1F, 0x13, 0x1E, 0x1A,
+ 0x1D, 0x11, 0x04, 0x06, 0x1B, 0x16, 0xA5, 0x02,
+ 0xC5, 0xC1, 0x25, 0x02, 0x06, 0x00, 0x03, 0x02,
+ 0xA5, 0xA5, 0x83, 0xC1, 0x95, 0x00, 0x03, 0x38,
+ 0x94, 0x00, 0x83, 0x02, 0x2E, 0x6B, 0x0E, 0x16,
+ 0x84, 0x02, 0x59, 0x1C, 0x0B, 0x16, 0x24, 0x02,
+ 0x69, 0x00, 0x95, 0x00, 0x03, 0x3C, 0x94, 0x00,
+ 0x83, 0x81, 0x04, 0x16, 0x84, 0x02, 0x69, 0x00,
+ 0x01, 0x16, 0xC9, 0x05, 0x59, 0x04, 0xC3, 0xD0,
+ 0xFD, 0x13, 0x01, 0x1C, 0xFB, 0x10, 0xE0, 0x90,
+ 0x3D, 0xE5, 0xF8, 0x16, 0xC3, 0x06, 0xC3, 0xD0,
+ 0xF5, 0x1C, 0xF4, 0x16, 0xE0, 0x90, 0x3A, 0xE5,
+ 0xF1, 0x16, 0x5B, 0x04, 0x0B, 0xC3, 0x09, 0x02,
+ 0x3E, 0xE5, 0xA0, 0x06, 0x92, 0xE9, 0xCC, 0x05,
+ 0x5C, 0x04, 0x88, 0x07, 0x00, 0xA0, 0x89, 0x07,
+ 0xFE, 0xFF, 0xA8, 0x09, 0xA9, 0x09, 0x8A, 0x07,
+ 0x02, 0xE0, 0xA0, 0x06, 0x84, 0xEC, 0x00, 0x00,
+ 0x88, 0x07, 0x00, 0x90, 0x89, 0x07, 0xFE, 0x9F,
+ 0xA8, 0x09, 0xA9, 0x09, 0x8A, 0x07, 0x78, 0xE0,
+ 0xA0, 0x06, 0x84, 0xEC, 0x00, 0x00, 0xA0, 0x06,
+ 0xC4, 0xEC, 0x00, 0x00, 0xE6, 0x10, 0xE5, 0x10,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90,
+ 0x00, 0x08, 0x11, 0xE3, 0x6C, 0xCC, 0x00, 0x80,
+ 0x00, 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08,
+ 0x00, 0x04, 0x00, 0x02, 0x00, 0x01, 0x80, 0x00,
+ 0x40, 0x00, 0x20, 0x00, 0x10, 0x00, 0x08, 0x00,
+ 0x04, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0xFF,
+ 0xFF, 0x00, 0xF0, 0xFF, 0x00, 0xF0, 0x0F, 0x00,
+ 0xFF, 0xFF, 0xFF, 0x7F, 0x03, 0x00, 0x00, 0x00,
+ 0xC3, 0x00, 0xE7, 0xE7, 0xF3, 0xE7, 0xF1, 0xF1,
+ 0x43, 0x28, 0x20, 0x29, 0x4F, 0x43, 0x59, 0x50,
+ 0x49, 0x52, 0x48, 0x47, 0x20, 0x54, 0x42, 0x49,
+ 0x20, 0x4D, 0x39, 0x31, 0x33, 0x38, 0x34, 0x2C,
+ 0x35, 0x2C, 0x36, 0x2C, 0x43, 0x28, 0x20, 0x29,
+ 0x4F, 0x43, 0x59, 0x50, 0x49, 0x52, 0x48, 0x47,
+ 0x20, 0x54, 0x49, 0x54, 0x31, 0x20, 0x38, 0x39,
+ 0x2D, 0x33, 0x39, 0x38, 0x39, 0x2C, 0x2D, 0x30,
+ 0x38, 0x39, 0x00, 0x00, 0x61, 0x9B, 0xC4, 0xEC,
+ 0x0E, 0xEA, 0xDE, 0xE5, 0xC8, 0xED, 0x00, 0x00,
+ 0xC4, 0x00, 0xB8, 0xAF, 0x4A, 0x06, 0x50, 0x06,
+ 0x4C, 0x06, 0xDC, 0xCC, 0x4E, 0x06, 0x0F, 0x00,
+ 0x32, 0x06, 0x01, 0x00, 0x50, 0x07, 0x58, 0x07,
+ 0x52, 0x07, 0x70, 0xB5, 0x54, 0x07, 0x0F, 0x00,
+ 0x38, 0x07, 0x01, 0x00, 0xBA, 0x00, 0xA0, 0x00,
+ 0xBC, 0x00, 0xD6, 0xED, 0xBE, 0x00, 0x0F, 0x00,
+ 0x5E, 0x07, 0x3A, 0x07, 0x62, 0x07, 0x40, 0x80,
+ 0x64, 0x07, 0x54, 0xBA, 0x66, 0x07, 0x36, 0xBA,
+ 0x68, 0x07, 0x40, 0xB8, 0x98, 0x07, 0x00, 0x80,
+ 0x78, 0x07, 0x00, 0x80, 0xE2, 0x08, 0x04, 0x00,
+ 0xE4, 0x08, 0x01, 0x00, 0xEC, 0x08, 0x08, 0x00,
+ 0xF6, 0x08, 0x0A, 0x00, 0xF8, 0x08, 0x06, 0x00,
+ 0x00, 0x09, 0x0C, 0x00, 0x02, 0x09, 0x04, 0x00,
+ 0xAE, 0x01, 0x00, 0x00, 0x1E, 0x09, 0x00, 0x00,
+ 0x66, 0x09, 0x00, 0x00, 0x0C, 0x06, 0x13, 0x00,
+ 0x0A, 0x06, 0x20, 0x00, 0x00, 0x00, 0xE0, 0x00,
+ 0x86, 0xA3, 0xE0, 0x00, 0xE6, 0xA2, 0xE0, 0x00,
+ 0x86, 0xA3, 0xE0, 0x00, 0x02, 0xA5, 0xE0, 0x00,
+ 0x5E, 0xA6, 0xE0, 0x00, 0x66, 0xA9, 0xE0, 0x00,
+ 0x12, 0xA4, 0xC0, 0x00, 0x22, 0xA4, 0xE0, 0x00,
+ 0x86, 0xA3, 0xE0, 0x00, 0x86, 0xA3, 0xC0, 0x00,
+ 0x74, 0xA4, 0xE0, 0x00, 0x86, 0xA3, 0xE0, 0x00,
+ 0x86, 0xA3, 0xE0, 0x00, 0x86, 0xA3, 0xE0, 0x00,
+ 0x86, 0xA3, 0xE0, 0x00, 0x86, 0xA3, 0xC0, 0x00,
+ 0xDE, 0xAF, 0xC0, 0x00, 0x48, 0xB0, 0xC0, 0x00,
+ 0x84, 0xB0, 0xC0, 0x00, 0xF4, 0xB0, 0xC0, 0x00,
+ 0x76, 0xB1, 0xE0, 0x00, 0xE4, 0xB2, 0xE0, 0x00,
+ 0x8A, 0xB2, 0xE0, 0x00, 0xF4, 0xB3, 0xE0, 0x00,
+ 0x7C, 0xB3, 0xE0, 0x00, 0xC6, 0xAA, 0xC0, 0x00,
+ 0x36, 0xAB, 0xC0, 0x00, 0x90, 0xAB, 0xC0, 0x00,
+ 0xC2, 0xAB, 0xC0, 0x00, 0xEA, 0xAA, 0xC0, 0x00,
+ 0x80, 0xA3, 0xC0, 0x00, 0x80, 0xA3, 0x00, 0x3F,
+ 0x00, 0x7F, 0x00, 0x5E, 0x30, 0x00, 0x28, 0x00,
+ 0x43, 0x00, 0xB6, 0xA6, 0xB6, 0xA6, 0x1C, 0xA5,
+ 0x14, 0xA5, 0x46, 0xA5, 0x46, 0xA5, 0x62, 0xA5,
+ 0xB6, 0xA6, 0x00, 0x40, 0x00, 0x00, 0x00, 0x20,
+ 0x00, 0x00, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08,
+ 0x00, 0x80, 0x00, 0x08, 0x00, 0x01, 0x00, 0x10,
+ 0x00, 0x00, 0x08, 0x00, 0x0C, 0x00, 0x10, 0x00,
+ 0x14, 0x00, 0x0E, 0x10, 0x0C, 0x0C, 0x0A, 0x0A,
+ 0x0A, 0x0A, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08,
+ 0x08, 0x08, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06,
+ 0x06, 0x06, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04, 0x04,
+ 0x04, 0x04, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02,
+ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x98, 0x07, 0x7E, 0xCA, 0x58, 0x07,
+ 0xF8, 0xB8, 0x58, 0x07, 0xFE, 0xB7, 0x58, 0x07,
+ 0x68, 0xB9, 0x58, 0x07, 0xD0, 0xB8, 0x98, 0x07,
+ 0x5A, 0xC7, 0x98, 0x07, 0x52, 0xC7, 0x78, 0x07,
+ 0xC2, 0xC1, 0x58, 0x07, 0x30, 0xB9, 0x98, 0x07,
+ 0x38, 0xCA, 0x78, 0x07, 0x96, 0xC2, 0x58, 0x07,
+ 0x6A, 0xC7, 0x58, 0x07, 0xE0, 0xB8, 0x58, 0x07,
+ 0x1E, 0xB9, 0x58, 0x07, 0xE2, 0xB9, 0x98, 0x07,
+ 0xAE, 0xCB, 0x98, 0x07, 0x8E, 0xC7, 0x78, 0x07,
+ 0x56, 0xC2, 0xB8, 0x07, 0x14, 0xCC, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xA2, 0xBA, 0x16, 0xC1,
+ 0xCA, 0xC1, 0xD6, 0xC6, 0x8A, 0xBD, 0xC2, 0xBD,
+ 0xE0, 0xBD, 0x6A, 0xBE, 0x8E, 0xBE, 0xAA, 0xBE,
+ 0x22, 0xBF, 0x22, 0xBF, 0x56, 0xBE, 0xC8, 0xBF,
+ 0x10, 0xBE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2C,
+ 0x00, 0x0C, 0x01, 0x0F, 0xFF, 0xFE, 0x00, 0x58,
+ 0x00, 0x0E, 0xFF, 0xFE, 0x0E, 0x00, 0x00, 0x70,
+ 0x40, 0x80, 0x00, 0x5E, 0xA0, 0xC0, 0xDF, 0xFF,
+ 0x00, 0x18, 0x00, 0xE0, 0x00, 0x78, 0x00, 0x50,
+ 0x00, 0x60, 0x00, 0x70, 0x00, 0x0C, 0x06, 0x00,
+ 0x00, 0x00, 0x84, 0xE3, 0xE6, 0x07, 0xF4, 0x07,
+ 0x08, 0x00, 0x00, 0x00, 0x8A, 0xE3, 0xEA, 0x07,
+ 0xF4, 0x07, 0x06, 0x00, 0x40, 0x00, 0x00, 0x0A,
+ 0xE6, 0x07, 0xEE, 0x07, 0x08, 0x00, 0x40, 0x00,
+ 0x06, 0x0A, 0xEA, 0x07, 0xEE, 0x07, 0x00, 0x00,
+ 0xE2, 0xC1, 0x8B, 0xD4, 0xFF, 0xFF, 0xD7, 0xD1,
+ 0xD9, 0xC5, 0xD4, 0xC3, 0x3B, 0x59, 0x34, 0x09,
+ 0xFC, 0x05, 0x6C, 0x09, 0xD8, 0x06, 0x06, 0x04,
+ 0xBA, 0xEA, 0x30, 0x09, 0x48, 0x04, 0x80, 0x08,
+ 0x06, 0x00, 0x0A, 0x06, 0x0E, 0x0C, 0xBA, 0xCE,
+ 0x2E, 0xE0, 0x56, 0xE0, 0x50, 0xE1, 0x66, 0xE2,
+ 0xEC, 0xE2, 0x4C, 0xE3, 0xFE, 0xE3, 0xBA, 0xCE,
+ 0x80, 0xE4, 0x10, 0xE4, 0x14, 0xE0, 0x1C, 0xE4,
+ 0x1C, 0xE4, 0x46, 0xE5, 0x50, 0xE5, 0x5A, 0xE5,
+ 0xBA, 0xCE, 0xA6, 0xDC, 0xBA, 0xCE, 0x44, 0xDA,
+ 0xE6, 0xDF, 0x70, 0xDA, 0xDE, 0xDE, 0xB0, 0xCE,
+ 0x16, 0xDB, 0x3A, 0xDD, 0xB8, 0xDD, 0x34, 0xDE,
+ 0x58, 0xDE, 0x16, 0xDB, 0xDA, 0xDC, 0x08, 0xCF,
+ 0xB0, 0xCE, 0xA8, 0xD9, 0x8A, 0xD9, 0x44, 0xD9,
+ 0xB0, 0xCE, 0xEA, 0xDE, 0xB0, 0xCE, 0x72, 0x06,
+ 0xF6, 0xD2, 0x08, 0x07, 0x72, 0x06, 0x54, 0xD2,
+ 0xF4, 0x01, 0x72, 0x06, 0x34, 0xD2, 0x08, 0x07,
+ 0x7C, 0x06, 0x5A, 0xDC, 0x04, 0x00, 0x7C, 0x06,
+ 0x78, 0xD2, 0x00, 0x00, 0x7C, 0x06, 0xCC, 0xDE,
+ 0xFA, 0x00, 0x86, 0x06, 0xAC, 0xD1, 0x05, 0x00,
+ 0x90, 0x06, 0x1C, 0xDF, 0x28, 0x00, 0x90, 0x06,
+ 0x50, 0xD3, 0x04, 0x01, 0x90, 0x06, 0x00, 0x00,
+ 0x02, 0x00, 0x90, 0x06, 0x80, 0xD2, 0xBC, 0x02,
+ 0x9A, 0x06, 0x06, 0xD3, 0xDC, 0x05, 0x9A, 0x06,
+ 0xAA, 0xD2, 0x64, 0x00, 0x9A, 0x06, 0x0A, 0xD3,
+ 0x14, 0x00, 0x9A, 0x06, 0xE2, 0xE0, 0x40, 0x06,
+ 0x9A, 0x06, 0x12, 0xD3, 0x64, 0x00, 0x7C, 0x06,
+ 0x16, 0xDC, 0x04, 0x00, 0x7C, 0x06, 0xE6, 0xDA,
+ 0x16, 0x00, 0x7C, 0x06, 0xFA, 0xDB, 0x05, 0x00,
+ 0x7C, 0x06, 0x00, 0xDD, 0x14, 0x00, 0x9A, 0x06,
+ 0x7C, 0xD3, 0x14, 0x00, 0x9A, 0x06, 0x38, 0xD4,
+ 0x02, 0x00, 0x7C, 0x06, 0x0C, 0xE0, 0x19, 0x00,
+ 0x00, 0x00, 0x0A, 0x07, 0x0E, 0x07, 0x04, 0x07,
+ 0xD8, 0x06, 0x00, 0x07, 0xF0, 0x06, 0xEE, 0x06,
+ 0xEC, 0x06, 0x0C, 0x07, 0xE6, 0x06, 0x18, 0x07,
+ 0x92, 0x09, 0x94, 0x09, 0x96, 0x09, 0x98, 0x09,
+ 0x00, 0x50, 0xCC, 0x00, 0x03, 0x00, 0x00, 0x84,
+ 0x00, 0xA8, 0x00, 0xA0, 0x00, 0x20, 0x00, 0x80,
+ 0x00, 0x40, 0x00, 0x08, 0x00, 0x40, 0x00, 0x80,
+ 0x00, 0x40, 0x00, 0x10, 0x82, 0xEC, 0x48, 0xEB,
+ 0x62, 0xEB, 0x7C, 0xEB, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, 0xEA, 0xEB,
+ 0x52, 0xEB, 0x68, 0xEB, 0x82, 0xEB, 0x40, 0x01,
+ 0x42, 0x01, 0x42, 0x01, 0x42, 0x01, 0x00, 0x00,
+ 0x7F, 0x00, 0xA0, 0x00, 0xFF, 0x00, 0x10, 0x02,
+ 0x1F, 0x02, 0x30, 0x02, 0x3F, 0x02, 0x50, 0x02,
+ 0x5F, 0x02, 0x70, 0x02, 0x7F, 0x02, 0x90, 0x02,
+ 0x9F, 0x02, 0xB0, 0x02, 0xBF, 0x02, 0xD0, 0x02,
+ 0xDF, 0x02, 0xE1, 0x02, 0xFF, 0x02, 0x01, 0x03,
+ 0x7F, 0x03, 0x81, 0x03, 0x8F, 0x03, 0x91, 0x03,
+ 0x9F, 0x03, 0xA1, 0x03, 0xAF, 0x03, 0xB1, 0x03,
+ 0xBF, 0x03, 0xC1, 0x03, 0xCF, 0x03, 0xE1, 0x03,
+ 0xFF, 0x03, 0xC0, 0x07, 0xFF, 0x07, 0x00, 0x0C,
+ 0xFF, 0x0F, 0x00, 0x30, 0xFF, 0x37, 0xFF, 0xFF,
+ 0xFF, 0xFF, 0xBC, 0xFE, 0x07, 0x00, 0x5E, 0x02,
+ 0x00, 0x01, 0xFF, 0xBA, 0x80, 0xBA, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x0C, 0x01, 0x0A, 0x01,
+ 0x0E, 0x01, 0x10, 0x01, 0x14, 0x01, 0x00, 0x00,
+ 0x12, 0x01, 0x00, 0xF8, 0x16, 0x01, 0x00, 0xFF,
+ 0x00, 0x00, 0x00, 0x00, 0x0A, 0x01, 0x1C, 0x01,
+ 0x82, 0x01, 0x66, 0x96, 0x66, 0x96, 0x55, 0x55,
+ 0x00, 0x00, 0x82, 0x01, 0x2A, 0x8A, 0x2A, 0x8A,
+ 0x18, 0xC9, 0x18, 0xC9, 0x86, 0x01, 0xAA, 0xA2,
+ 0x1E, 0xA0, 0x55, 0x55, 0x1E, 0x54, 0x8A, 0x01,
+ 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00,
+ 0x8C, 0x01, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8,
+ 0x00, 0x00, 0x8E, 0x01, 0x00, 0x50, 0x00, 0x00,
+ 0x00, 0xA8, 0x00, 0x00, 0x90, 0x01, 0x00, 0x50,
+ 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x92, 0x01,
+ 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00,
+ 0x94, 0x01, 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8,
+ 0x00, 0x00, 0x96, 0x01, 0x00, 0x50, 0x00, 0x00,
+ 0x00, 0xA8, 0x00, 0x00, 0x98, 0x01, 0x00, 0x50,
+ 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00, 0x9A, 0x01,
+ 0x00, 0x50, 0x00, 0x00, 0x00, 0xA8, 0x00, 0x00,
+ 0x9C, 0x01, 0x55, 0x55, 0xC0, 0x7F, 0xAA, 0xAA,
+ 0xC0, 0x7F, 0x00, 0x00, 0xA2, 0x01, 0xA4, 0x01,
+ 0xA8, 0x01, 0xAA, 0x01, 0xAE, 0x01, 0xB0, 0x01,
+ 0xB2, 0x01, 0x80, 0x01, 0x00, 0x00, 0x88, 0x01,
+ 0x00, 0xFF, 0x9E, 0x01, 0xFF, 0x00, 0xA0, 0x01,
+ 0x00, 0x80, 0xAC, 0x01, 0x00, 0x80, 0x00, 0x00,
+ 0xA6, 0x01, 0x00, 0x80, 0x00, 0x00, 0x80, 0x01,
+ 0xBC, 0x01, 0x00, 0x88, 0x00, 0x06, 0x00, 0xC8,
+ 0x00, 0x00, 0x00, 0x80, 0x30, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x02, 0x00, 0x44, 0x00, 0x92, 0xEA,
+ 0x48, 0x00, 0x98, 0xEA, 0x50, 0x00, 0x9E, 0xEA,
+ 0x60, 0x00, 0xA4, 0xEA, 0x78, 0x00, 0xAA, 0xEA,
+ 0x0A, 0xE8, 0x18, 0xE7, 0x3C, 0xEA, 0x2A, 0xE7,
+ 0x14, 0x55, 0xA0, 0x01, 0xEC, 0xE6, 0xD0, 0xE9,
+ 0x46, 0xE7, 0xA0, 0xE7, 0x00, 0xE7, 0x58, 0xE8,
+ 0x00, 0x00, 0x1E, 0x00, 0x46, 0xE7, 0x92, 0xE7,
+ 0x00, 0x41, 0x01, 0x41, 0xB6, 0xE7, 0x73, 0xEA,
+ 0x18, 0xE7, 0x48, 0xEA, 0xEC, 0xE6, 0x04, 0xEA,
+ 0x56, 0xE7, 0x62, 0xE7, 0xB6, 0xE7, 0x6E, 0xEA,
+ 0x62, 0xE8, 0x00, 0x00, 0x36, 0xE8, 0xEC, 0xE6,
+ 0xFA, 0xE9, 0x56, 0xE7, 0x62, 0xE7, 0x36, 0xE8,
+ 0x62, 0xE8, 0x00, 0x00, 0xEC, 0xE6, 0xF0, 0xE9,
+ 0x0C, 0xE7, 0x4A, 0xE7, 0x62, 0xE7, 0x36, 0xE8,
+ 0xEC, 0xE6, 0xFA, 0xE9, 0x56, 0xE7, 0x62, 0xE7,
+ 0x36, 0xE8, 0x62, 0xE8, 0x00, 0x20, 0x2A, 0xE7,
+ 0x14, 0x55, 0xA0, 0x01, 0x18, 0xE7, 0x50, 0xEA,
+ 0xEC, 0xE6, 0xD0, 0xE9, 0x58, 0xE8, 0x50, 0x55,
+ 0x0C, 0x00, 0x46, 0xE7, 0x92, 0xE7, 0x00, 0x01,
+ 0x00, 0x00, 0xB6, 0xE7, 0x75, 0xEA, 0x00, 0xE7,
+ 0x58, 0xE8, 0x55, 0x55, 0x0C, 0x00, 0x56, 0xE7,
+ 0xA0, 0xE7, 0x00, 0xE7, 0x58, 0xE8, 0xFF, 0xFF,
+ 0x08, 0x00, 0x58, 0xE8, 0x02, 0x10, 0x06, 0x00,
+ 0x46, 0xE7, 0x92, 0xE7, 0x00, 0x01, 0x01, 0x01,
+ 0xB6, 0xE7, 0x80, 0xEA, 0x00, 0xE7, 0x58, 0xE8,
+ 0x00, 0xC0, 0x08, 0x00, 0x58, 0xE8, 0xFF, 0xFF,
+ 0x0A, 0x00, 0x58, 0xE8, 0xFF, 0xFF, 0x0C, 0x00,
+ 0x58, 0xE8, 0x0D, 0x10, 0x06, 0x00, 0x46, 0xE7,
+ 0x92, 0xE7, 0x00, 0x01, 0x01, 0x01, 0xB6, 0xE7,
+ 0x74, 0xEA, 0x62, 0xE8, 0x08, 0x20, 0x00, 0xE7,
+ 0x52, 0xE8, 0x82, 0x01, 0x02, 0xC9, 0x46, 0xE7,
+ 0xB6, 0xE7, 0x80, 0xEA, 0x62, 0xE8, 0x34, 0x20,
+ 0x00, 0xE7, 0x58, 0xE8, 0x00, 0x10, 0x06, 0x00,
+ 0x46, 0xE7, 0xC6, 0xE8, 0xB6, 0xE7, 0x78, 0xEA,
+ 0x52, 0xE8, 0x9C, 0x01, 0x40, 0x00, 0x18, 0xE7,
+ 0x50, 0xEA, 0x2A, 0xE7, 0xFF, 0x00, 0x80, 0x07,
+ 0x26, 0xE9, 0x03, 0x00, 0x66, 0xE9, 0x74, 0xE9,
+ 0x12, 0xEA, 0x38, 0xE9, 0x00, 0x00, 0x74, 0xE9,
+ 0x1C, 0xEA, 0x38, 0xE9, 0x04, 0x00, 0x74, 0xE9,
+ 0x24, 0xEA, 0x38, 0xE9, 0x07, 0x00, 0x74, 0xE9,
+ 0x2C, 0xEA, 0x26, 0xE9, 0x01, 0x00, 0x74, 0xE9,
+ 0x34, 0xEA, 0x38, 0xE9, 0x02, 0x00, 0x74, 0xE9,
+ 0x34, 0xEA, 0x38, 0xE9, 0x06, 0x00, 0x74, 0xE9,
+ 0x34, 0xEA, 0x38, 0xE9, 0x05, 0x00, 0x74, 0xE9,
+ 0x34, 0xEA, 0x26, 0xE9, 0x01, 0x00, 0x4A, 0xE9,
+ 0x26, 0xE9, 0x03, 0x00, 0x58, 0xE9, 0x62, 0xE7,
+ 0xE6, 0xE8, 0xD8, 0xE9, 0x01, 0x00, 0xE6, 0xE8,
+ 0x25, 0xEA, 0x02, 0x00, 0xE6, 0xE8, 0x2F, 0xEA,
+ 0x06, 0x00, 0xE6, 0xE8, 0x3A, 0xEA, 0x05, 0x00,
+ 0xB6, 0xE7, 0x74, 0xEA, 0x36, 0xE8, 0xEC, 0xE6,
+ 0xD0, 0xE9, 0x56, 0xE7, 0xC6, 0xE8, 0x0C, 0xE7,
+ 0x92, 0xE7, 0x00, 0x01, 0x00, 0x80, 0xB6, 0xE7,
+ 0x78, 0xEA, 0x00, 0xE7, 0xFE, 0xE8, 0x52, 0xE8,
+ 0x80, 0x01, 0x41, 0x8E, 0x4A, 0xE7, 0x92, 0xE7,
+ 0x00, 0x01, 0x01, 0x1B, 0x06, 0xE9, 0xE4, 0xFF,
+ 0xB6, 0xE7, 0x7C, 0xEA, 0xBE, 0xE8, 0x18, 0xE7,
+ 0x56, 0xEA, 0x0C, 0xE7, 0x6A, 0xE8, 0x3C, 0xE7,
+ 0x00, 0xE0, 0xC6, 0xE8, 0xB6, 0xE7, 0x86, 0xEA,
+ 0x3C, 0xE7, 0x00, 0xE8, 0x62, 0xE7, 0xB6, 0xE7,
+ 0x85, 0xEA, 0x3C, 0xE7, 0x00, 0x08, 0xC6, 0xE8,
+ 0xB6, 0xE7, 0x86, 0xEA, 0x3C, 0xE7, 0x00, 0xF8,
+ 0x62, 0xE7, 0xB6, 0xE7, 0x85, 0xEA, 0x52, 0xE8,
+ 0x80, 0x01, 0x00, 0x02, 0x3C, 0xE7, 0x00, 0xE0,
+ 0x62, 0xE7, 0xB6, 0xE7, 0x85, 0xEA, 0x52, 0xE8,
+ 0x84, 0x01, 0x00, 0x00, 0x62, 0xE8, 0x34, 0x00,
+ 0x3C, 0xE7, 0x00, 0x00, 0xC6, 0xE8, 0x62, 0xE8,
+ 0x34, 0x60, 0x0E, 0xE9, 0x52, 0xE8, 0x84, 0x01,
+ 0x00, 0x00, 0xB6, 0xE7, 0x86, 0xEA, 0x52, 0xE8,
+ 0x82, 0x01, 0x00, 0xC8, 0x3C, 0xE7, 0x00, 0xE0,
+ 0xC6, 0xE8, 0x3C, 0xE7, 0x00, 0x10, 0xC6, 0xE8,
+ 0x62, 0xE8, 0x34, 0x60, 0x52, 0xE8, 0x80, 0x01,
+ 0x00, 0x06, 0x3C, 0xE7, 0x10, 0x00, 0x78, 0xE8,
+ 0x36, 0xE8, 0x52, 0xE8, 0x84, 0x01, 0x00, 0x00,
+ 0x62, 0xE8, 0x34, 0x00, 0xEC, 0xE6, 0xD0, 0xE9,
+ 0x18, 0xE7, 0x5C, 0xEA, 0xD0, 0xE8, 0x92, 0xE9,
+ 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0xF0,
+ 0x06, 0x00, 0x00, 0xC7, 0xA0, 0xE7, 0xDC, 0xE8,
+ 0x00, 0xE0, 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7,
+ 0x40, 0xD0, 0x06, 0x00, 0x00, 0xE0, 0xA0, 0xE7,
+ 0xDC, 0xE8, 0x00, 0xC0, 0x00, 0xE7, 0x0C, 0xE7,
+ 0x70, 0xE7, 0x40, 0x90, 0x06, 0x00, 0x00, 0xA0,
+ 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x80, 0x00, 0xE7,
+ 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x50, 0x06, 0x00,
+ 0x00, 0x60, 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x40,
+ 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x10,
+ 0x06, 0x00, 0x00, 0x20, 0xA0, 0xE7, 0xDC, 0xE8,
+ 0x00, 0x00, 0xD0, 0xE8, 0x92, 0xE9, 0x00, 0xE7,
+ 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0xD0, 0x06, 0x00,
+ 0x00, 0xA6, 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0xC0,
+ 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x90,
+ 0x06, 0x00, 0x00, 0xC0, 0xA0, 0xE7, 0xDC, 0xE8,
+ 0x00, 0x80, 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7,
+ 0x40, 0x50, 0x06, 0x00, 0x00, 0x40, 0xA0, 0xE7,
+ 0xDC, 0xE8, 0x00, 0x40, 0x00, 0xE7, 0x0C, 0xE7,
+ 0x70, 0xE7, 0x40, 0x70, 0x06, 0x00, 0x00, 0x60,
+ 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x60, 0x7E, 0xE9,
+ 0x90, 0xE9, 0x18, 0xE7, 0x62, 0xEA, 0xEC, 0xE6,
+ 0xD0, 0xE9, 0xA4, 0xE8, 0x55, 0x55, 0x16, 0x00,
+ 0x46, 0xE7, 0x92, 0xE7, 0x00, 0x00, 0x00, 0x00,
+ 0xB6, 0xE7, 0x8B, 0xEA, 0x0A, 0xE8, 0x18, 0xE7,
+ 0x62, 0xEA, 0x58, 0xE8, 0x55, 0x55, 0x16, 0x00,
+ 0x00, 0xE7, 0x46, 0xE7, 0xA0, 0xE7, 0x2A, 0xE7,
+ 0xFF, 0x00, 0x00, 0x08, 0x2A, 0xE7, 0xFF, 0x00,
+ 0x00, 0x0C, 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x10,
+ 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x14, 0x2A, 0xE7,
+ 0xFF, 0x00, 0x00, 0x18, 0x2A, 0xE7, 0xFF, 0x00,
+ 0x00, 0x1C, 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x20,
+ 0x2A, 0xE7, 0xFF, 0x00, 0x00, 0x24, 0x2A, 0xE7,
+ 0xFF, 0x00, 0x00, 0x28, 0x2A, 0xE7, 0xFF, 0x00,
+ 0x00, 0x2C, 0xD2, 0xE7, 0x00, 0xE7, 0x0C, 0xE7,
+ 0x70, 0xE7, 0x40, 0x30, 0x06, 0x00, 0x00, 0x01,
+ 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x20, 0x00, 0xE7,
+ 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0x70, 0x06, 0x00,
+ 0x00, 0x43, 0xA0, 0xE7, 0xDC, 0xE8, 0x00, 0x60,
+ 0x00, 0xE7, 0x0C, 0xE7, 0x70, 0xE7, 0x40, 0xB0,
+ 0x06, 0x00, 0x00, 0x85, 0xA0, 0xE7, 0xDC, 0xE8,
+ 0x00, 0xA0, 0xD8, 0xE8, 0x00, 0x01, 0x03, 0x01,
+ 0x01, 0x01, 0x00, 0x00, 0x00, 0x81, 0x1A, 0x00,
+ 0x40, 0x10, 0x55, 0x55, 0x55, 0x55, 0x55, 0x55,
+ 0x55, 0x55, 0x55, 0x55, 0x55, 0x55, 0x72, 0x82,
+ 0x4A, 0xA9, 0xA5, 0x5A, 0xDA, 0xE7, 0x03, 0x09,
+ 0x11, 0x9D, 0x00, 0x00, 0x00, 0x81, 0x04, 0x00,
+ 0xD8, 0x90, 0x00, 0x10, 0x00, 0x00, 0x00, 0x81,
+ 0x04, 0x00, 0xD8, 0x90, 0xD8, 0xB4, 0x00, 0x00,
+ 0x00, 0x81, 0x08, 0x00, 0xD8, 0x90, 0x46, 0x16,
+ 0x00, 0x40, 0xD8, 0xB4, 0x08, 0x00, 0x00, 0x00,
+ 0x00, 0x80, 0x13, 0x00, 0x40, 0x10, 0x16, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x10, 0x00, 0x15, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x0F, 0x00, 0x15, 0x00,
+ 0x00, 0x00, 0x00, 0x81, 0x0F, 0x00, 0x06, 0x00,
+ 0x00, 0x00, 0x00, 0x80, 0x12, 0x00, 0x0A, 0x80,
+ 0x40, 0x9E, 0x00, 0xC8, 0x00, 0x00, 0x5E, 0x80,
+ 0x0F, 0x00, 0x06, 0x80, 0x40, 0xFE, 0x00, 0xCC,
+ 0x00, 0x00, 0x04, 0x80, 0x40, 0x8E, 0x00, 0xC9,
+ 0x04, 0x80, 0x00, 0x06, 0x00, 0xCC, 0x04, 0x80,
+ 0x40, 0x0A, 0x00, 0xC8, 0x0A, 0x80, 0x40, 0x8A,
+ 0x00, 0xC8, 0x00, 0x00, 0x5E, 0x80, 0x0F, 0x00,
+ 0x0A, 0x08, 0x80, 0x1C, 0x0A, 0x00, 0x1C, 0x1A,
+ 0x00, 0x80, 0x1C, 0x0C, 0x00, 0x80, 0x1C, 0x1A,
+ 0x00, 0x80, 0x1A, 0x0E, 0x80, 0x1C, 0x04, 0x00,
+ 0x00, 0x80, 0x80, 0x02, 0x02, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x80,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,
+ 0x40, 0x00, 0x00, 0x00, 0x58, 0x07, 0x0C, 0xB8,
+ 0x16, 0xE0, 0xE2, 0x08, 0xEC, 0x08, 0xF6, 0x08,
+ 0x16, 0xE0, 0x00, 0x09, 0x0A, 0x09, 0x00, 0x00,
+ 0x00, 0x00, 0xE2, 0x08, 0x00, 0x00, 0xEC, 0x08,
+ 0xF6, 0x08, 0x00, 0x09, 0x00, 0x00, 0xB8, 0x07,
+ 0xCA, 0xCB, 0x80, 0x02, 0xB8, 0x07, 0xE8, 0xCB,
+ 0x84, 0xFF, 0xB8, 0x07, 0x0A, 0xCC, 0xB8, 0x07,
+ 0x84, 0xCC, 0x6E, 0xCD, 0x62, 0xCD, 0x88, 0xCD,
+ 0x90, 0xCE, 0x84, 0xCD, 0x92, 0xCE, 0x92, 0xCE,
+ 0x92, 0xCE, 0x8C, 0xCD, 0x96, 0xCD, 0x38, 0xCE,
+ 0x82, 0xCE, 0x92, 0xCE, 0x92, 0xCE, 0x92, 0xCE,
+ 0x92, 0xCE, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x08, 0x00, 0x08, 0x01, 0x05, 0x08,
+ 0x08, 0x08, 0x03, 0x08, 0x03, 0x03, 0x03, 0x03,
+ 0x00, 0x00, 0x04, 0x02, 0x04, 0x04, 0x00, 0x04,
+ 0x0A, 0x08, 0x00, 0x00, 0x10, 0x0C, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x18, 0x00, 0x1A, 0x00, 0x00,
+ 0x04, 0x41, 0x06, 0x0B, 0x08, 0xC2, 0x00, 0xE6,
+ 0x00, 0xE7, 0x04, 0x06, 0x04, 0x07, 0x04, 0x03,
+ 0x06, 0x04, 0x04, 0x05, 0x04, 0x88, 0x04, 0xCF,
+ 0x04, 0xCD, 0x03, 0x00, 0x05, 0x00, 0x1C, 0x00,
+ 0x00, 0x0C, 0x00, 0x80, 0xD2, 0xD8, 0xDA, 0xD8,
+ 0x1E, 0xD9, 0xDE, 0xD8, 0xEA, 0xD8, 0xF0, 0xD8,
+ 0x14, 0xD9, 0xE4, 0xD8, 0x32, 0xD9, 0x00, 0x06,
+ 0x00, 0x00, 0x03, 0x07, 0x0A, 0x0E, 0x0F, 0x14,
+ 0x26, 0x2A, 0x52, 0x42, 0x50, 0x48, 0x5D, 0x4D,
+ 0x62, 0x62, 0x6D, 0x57, 0x46, 0x39, 0x1A, 0x1D,
+ 0x7C, 0x76, 0x1F, 0x23, 0x15, 0x1D, 0x74, 0x6F,
+ 0x84, 0x7C, 0x8B, 0x82, 0x92, 0x89, 0x00, 0x00,
+ 0x32, 0x2F, 0x3F, 0x34, 0x32, 0x01, 0x01, 0x57,
+ 0x32, 0x11, 0x81, 0x51, 0x02, 0x56, 0x03, 0x55,
+ 0x54, 0x11, 0x56, 0x81, 0x55, 0x02, 0x54, 0x02,
+ 0x56, 0x81, 0x01, 0x76, 0x02, 0x34, 0x02, 0x55,
+ 0x81, 0x54, 0x02, 0x58, 0x02, 0x55, 0x81, 0x54,
+ 0x02, 0x58, 0x11, 0x12, 0x02, 0x52, 0x58, 0x83,
+ 0x52, 0x05, 0x83, 0x04, 0x02, 0x58, 0x08, 0x55,
+ 0x58, 0x83, 0x55, 0x02, 0x81, 0x02, 0x05, 0x58,
+ 0x03, 0x52, 0x5C, 0x15, 0x53, 0x5B, 0x52, 0x87,
+ 0x11, 0x03, 0x41, 0x51, 0x78, 0x51, 0x34, 0x11,
+ 0x81, 0x11, 0x20, 0x31, 0x54, 0x57, 0x01, 0x53,
+ 0x5A, 0x12, 0x81, 0x51, 0x20, 0x31, 0x5B, 0x57,
+ 0x01, 0x5A, 0x01, 0x11, 0x51, 0x11, 0x31, 0x81,
+ 0x57, 0x20, 0x15, 0x01, 0x13, 0x01, 0x11, 0x01,
+ 0x11, 0x11, 0x81, 0x51, 0x05, 0x58, 0x02, 0x52,
+ 0x5B, 0x54, 0x5D, 0x81, 0x52, 0x05, 0x54, 0x02,
+ 0x58, 0x81, 0x50, 0x02, 0x13, 0x03, 0x58, 0x81,
+ 0x50, 0x02, 0x11, 0x03, 0x81, 0x54, 0x72, 0x5D,
+ 0x50, 0x03, 0x13, 0x03, 0x13, 0x01, 0x40, 0x54,
+ 0x0E, 0x00, 0x20, 0x06, 0x56, 0x06, 0x0C, 0xDA,
+ 0x24, 0x00, 0x02, 0x10, 0x16, 0x00, 0x02, 0x00,
+ 0x01, 0x04, 0x08, 0x07, 0x0C, 0xDA, 0x20, 0x00,
+ 0x03, 0x10, 0x12, 0x00, 0x03, 0x00, 0x4E, 0xD9,
+ 0x14, 0x8E, 0x20, 0x00, 0x04, 0x10, 0x12, 0x00,
+ 0x04, 0x00, 0xD2, 0xCE, 0x20, 0x00, 0x05, 0xE0,
+ 0x12, 0x00, 0x05, 0x00, 0xD2, 0xCE, 0x20, 0x00,
+ 0x06, 0xE0, 0x12, 0x00, 0x06, 0x00, 0xE8, 0xDD,
+ 0x12, 0x00, 0x01, 0xE0, 0x6C, 0x09, 0xCC, 0x06,
+ 0x04, 0x00, 0x07, 0x00, 0x00, 0x00, 0x30, 0x06,
+ 0x42, 0xDC, 0xF0, 0x05, 0x00, 0xE0, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xE2, 0x05, 0x08, 0x00,
+ 0x26, 0xFF, 0xDC, 0x05, 0x00, 0x00, 0x30, 0x06,
+ 0xF8, 0xDB, 0x1E, 0x00, 0x01, 0xE0, 0x10, 0x00,
+ 0x11, 0x30, 0x0C, 0x04, 0x01, 0x00, 0x0E, 0x04,
+ 0x02, 0x00, 0x21, 0x04, 0x00, 0x00, 0x00, 0x00,
+ 0x30, 0x06, 0x32, 0xDD, 0x12, 0x00, 0x01, 0xE0,
+ 0x04, 0x00, 0x13, 0x30, 0x74, 0xDE, 0x3E, 0x00,
+ 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00, 0x02, 0x00,
+ 0x30, 0x00, 0x20, 0x50, 0x23, 0x0C, 0xFC, 0x05,
+ 0x52, 0x06, 0x56, 0x06, 0x00, 0x00, 0x00, 0x81,
+ 0x16, 0x00, 0x00, 0xE0, 0x00, 0xC0, 0x00, 0x00,
+ 0x10, 0x00, 0x08, 0x00, 0x2A, 0x40, 0x2A, 0x04,
+ 0x56, 0x06, 0x26, 0x00, 0x19, 0xED, 0x2B, 0x06,
+ 0x72, 0x09, 0x22, 0x00, 0x24, 0x00, 0x2F, 0xED,
+ 0x23, 0x0C, 0xFC, 0x05, 0x28, 0x08, 0x34, 0x09,
+ 0x29, 0x08, 0x58, 0x07, 0x78, 0x07, 0x98, 0x07,
+ 0x23, 0x00, 0x2A, 0x00, 0x3D, 0xED, 0x06, 0x04,
+ 0xF0, 0x06, 0x07, 0x04, 0xEE, 0x06, 0x24, 0x00,
+ 0xD2, 0xCE, 0x34, 0x00, 0x00, 0xE0, 0x00, 0xC0,
+ 0x00, 0x00, 0x10, 0x00, 0x26, 0x00, 0x25, 0x40,
+ 0xD2, 0xCE, 0x20, 0x00, 0x00, 0xE0, 0x00, 0xC0,
+ 0x00, 0x00, 0x10, 0x00, 0x12, 0x00, 0x26, 0x40,
+ 0xD2, 0xCE, 0x1A, 0x00, 0x00, 0xE0, 0x0C, 0x00,
+ 0x27, 0x60, 0x0A, 0x08, 0xE6, 0x06, 0xD2, 0xCE,
+ 0x24, 0x00, 0x00, 0xE0, 0x16, 0x00, 0x28, 0x60,
+ 0x30, 0x04, 0x06, 0x07, 0x52, 0xCF, 0x00, 0x81,
+ 0x30, 0x00, 0x00, 0xE0, 0x22, 0x00, 0x29, 0x60,
+ 0x2D, 0x08, 0x1C, 0x07, 0x2E, 0x08, 0x22, 0x07,
+ 0x00, 0x00, 0x08, 0x02, 0x06, 0x01, 0x14, 0x06,
+ 0x18, 0x08, 0x20, 0x0C, 0x26, 0x0E, 0x30, 0x0F,
+ 0x34, 0x11, 0x3E, 0x12, 0x42, 0x14, 0x46, 0x16,
+ 0x1C, 0x0A, 0x4A, 0x18, 0x13, 0x03, 0x11, 0x83,
+ 0x01, 0x11, 0x11, 0x81, 0x12, 0x81, 0x13, 0x01,
+ 0x52, 0x83, 0x81, 0x85, 0x85, 0x11, 0x12, 0x81,
+ 0x12, 0x81, 0x19, 0x81, 0x60, 0x85, 0x00, 0xC0,
+ 0x00, 0x00, 0x08, 0x00, 0x6C, 0x09, 0x00, 0x00,
+ 0x30, 0x06, 0x08, 0xE5, 0x54, 0x06, 0x50, 0x06,
+ 0x38, 0x02, 0x21, 0x04, 0x1E, 0x09, 0x0B, 0x06,
+ 0xD8, 0x06, 0x02, 0x08, 0xDC, 0x06, 0x00, 0xC0,
+ 0xFF, 0xFF, 0xFF, 0xFF, 0x41, 0x00, 0x41, 0x00,
+ 0x14, 0xAE, 0x00, 0x00, 0x00, 0x81, 0x09, 0x04,
+ 0x0C, 0x07, 0x41, 0x00, 0x41, 0x00, 0x14, 0x02,
+ 0x00, 0x00, 0x00, 0x81, 0x0B, 0x06, 0xD8, 0x06,
+ 0x2C, 0x06, 0x76, 0x09, 0x22, 0x14, 0x3A, 0x09,
+ 0x41, 0x00, 0x41, 0x00, 0x54, 0x02, 0x00, 0x00,
+ 0x00, 0x81, 0xD8, 0x06, 0x00, 0x84, 0x00, 0x48,
+ 0xFC, 0xFF, 0x09, 0x00, 0x00, 0xC0, 0x00, 0x00,
+ 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0x00, 0x00, 0xB8, 0xFF, 0x20, 0x00,
+ 0x43, 0x28, 0x31, 0x29, 0x38, 0x39, 0x2D, 0x33,
+ 0x39, 0x38, 0x39, 0x2C, 0x2D, 0x30, 0x38, 0x39,
+ 0x54, 0x20, 0x78, 0x65, 0x73, 0x61, 0x49, 0x20,
+ 0x73, 0x6E, 0x72, 0x74, 0x6D, 0x75, 0x6E, 0x65,
+ 0x73, 0x74, 0x28, 0x0A, 0x29, 0x43, 0x39, 0x31,
+ 0x33, 0x38, 0x34, 0x2C, 0x35, 0x2C, 0x36, 0x2C,
+ 0x49, 0x20, 0x4D, 0x42, 0x43, 0x20, 0x72, 0x6F,
+ 0x00, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+ 0x00, 0x00, 0xF8, 0xFF, 0x01, 0x00, 0x34, 0x90,
+ 0x00, 0x00, 0xFA, 0xFF, 0x01, 0x00, 0xB8, 0xFF,
+ 0x00, 0x00, 0xFC, 0xFF, 0x02, 0x00, 0x80, 0x00,
+ 0x3E, 0xA0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00
+};
+#endif /* CONFIG_TMS380TR */
diff --git a/drivers/net/wan/cosa.c b/drivers/net/wan/cosa.c
index 863cd4b59..a48c5d31c 100644
--- a/drivers/net/wan/cosa.c
+++ b/drivers/net/wan/cosa.c
@@ -1,4 +1,4 @@
-/* $Id: cosa.c,v 1.26 1999/07/09 15:02:37 kas Exp $ */
+/* $Id: cosa.c,v 1.28 1999/10/11 21:06:58 kas Exp $ */
/*
* Copyright (C) 1995-1997 Jan "Yenya" Kasprzak <kas@fi.muni.cz>
@@ -137,8 +137,7 @@ struct channel_data {
struct semaphore rsem, wsem;
char *rxdata;
int rxsize;
- wait_queue_head_t txwaitq;
- wait_queue_head_t rxwaitq;
+ wait_queue_head_t txwaitq, rxwaitq;
int tx_status, rx_status;
/* SPPP/HDLC device parts */
@@ -147,6 +146,11 @@ struct channel_data {
struct net_device_stats stats;
};
+/* cosa->firmware_status bits */
+#define COSA_FW_RESET (1<<0) /* Is the ROM monitor active? */
+#define COSA_FW_DOWNLOAD (1<<1) /* Is the microcode downloaded? */
+#define COSA_FW_START (1<<2) /* Is the microcode running? */
+
struct cosa_data {
int num; /* Card number */
char name[COSA_MAX_NAME]; /* Card name - e.g "cosa0" */
@@ -606,6 +610,11 @@ static int cosa_sppp_open(struct net_device *d)
struct channel_data *chan = d->priv;
int err, flags;
+ if (!(chan->cosa->firmware_status & COSA_FW_START)) {
+ printk(KERN_NOTICE "%s: start the firmware first (status %d)\n",
+ chan->cosa->name, chan->cosa->firmware_status);
+ return -EPERM;
+ }
spin_lock_irqsave(&chan->cosa->lock, flags);
if (chan->usage != 0) {
printk(KERN_WARNING "%s: sppp_open called with usage count %d\n",
@@ -781,6 +790,11 @@ static ssize_t cosa_read(struct file *file,
struct cosa_data *cosa = chan->cosa;
char *kbuf;
+ if (!(cosa->firmware_status & COSA_FW_START)) {
+ printk(KERN_NOTICE "%s: start the firmware first (status %d)\n",
+ cosa->name, cosa->firmware_status);
+ return -EPERM;
+ }
if (down_interruptible(&chan->rsem))
return -ERESTARTSYS;
@@ -845,12 +859,17 @@ static int chrdev_rx_done(struct channel_data *chan)
static ssize_t cosa_write(struct file *file,
const char *buf, size_t count, loff_t *ppos)
{
- struct channel_data *chan = (struct channel_data *)file->private_data;
DECLARE_WAITQUEUE(wait, current);
+ struct channel_data *chan = (struct channel_data *)file->private_data;
struct cosa_data *cosa = chan->cosa;
unsigned int flags;
char *kbuf;
+ if (!(cosa->firmware_status & COSA_FW_START)) {
+ printk(KERN_NOTICE "%s: start the firmware first (status %d)\n",
+ cosa->name, cosa->firmware_status);
+ return -EPERM;
+ }
if (down_interruptible(&chan->wsem))
return -ERESTARTSYS;
@@ -992,12 +1011,14 @@ static inline int cosa_reset(struct cosa_data *cosa)
if (cosa->usage > 1)
printk(KERN_INFO "cosa%d: WARNING: reset requested with cosa->usage > 1 (%d). Odd things may happen.\n",
cosa->num, cosa->usage);
+ cosa->firmware_status &= ~(COSA_FW_RESET|COSA_FW_START);
if (cosa_reset_and_read_id(cosa, idstring) < 0) {
printk(KERN_NOTICE "cosa%d: reset failed\n", cosa->num);
return -EIO;
}
printk(KERN_INFO "cosa%d: resetting device: %s\n", cosa->num,
idstring);
+ cosa->firmware_status |= COSA_FW_RESET;
return 0;
}
@@ -1009,15 +1030,14 @@ static inline int cosa_download(struct cosa_data *cosa, struct cosa_download *d)
char *code;
if (cosa->usage > 1)
- printk(KERN_INFO "cosa%d: WARNING: download of microcode requested with cosa->usage > 1 (%d). Odd things may happen.\n",
- cosa->num, cosa->usage);
-#if 0
- if (cosa->status != CARD_STATUS_RESETED && cosa->status != CARD_STATUS_DOWNLOADED) {
- printk(KERN_NOTICE "cosa%d: reset the card first (status %d).\n",
- cosa->num, cosa->status);
+ printk(KERN_INFO "%s: WARNING: download of microcode requested with cosa->usage > 1 (%d). Odd things may happen.\n",
+ cosa->name, cosa->usage);
+ if (!(cosa->firmware_status & COSA_FW_RESET)) {
+ printk(KERN_NOTICE "%s: reset the card first (status %d).\n",
+ cosa->name, cosa->firmware_status);
return -EPERM;
}
-#endif
+
get_user_ret(addr, &(d->addr), -EFAULT);
get_user_ret(len, &(d->len), -EFAULT);
get_user_ret(code, &(d->code), -EFAULT);
@@ -1027,6 +1047,9 @@ static inline int cosa_download(struct cosa_data *cosa, struct cosa_download *d)
if (d->len < 0 || d->len > COSA_MAX_FIRMWARE_SIZE)
return -EINVAL;
+ /* If something fails, force the user to reset the card */
+ cosa->firmware_status &= ~(COSA_FW_RESET|COSA_FW_DOWNLOAD);
+
if ((i=download(cosa, d->code, len, addr)) < 0) {
printk(KERN_NOTICE "cosa%d: microcode download failed: %d\n",
cosa->num, i);
@@ -1034,6 +1057,7 @@ static inline int cosa_download(struct cosa_data *cosa, struct cosa_download *d)
}
printk(KERN_INFO "cosa%d: downloading microcode - 0x%04x bytes at 0x%04x\n",
cosa->num, len, addr);
+ cosa->firmware_status |= COSA_FW_RESET|COSA_FW_DOWNLOAD;
return 0;
}
@@ -1048,18 +1072,19 @@ static inline int cosa_readmem(struct cosa_data *cosa, struct cosa_download *d)
printk(KERN_INFO "cosa%d: WARNING: readmem requested with "
"cosa->usage > 1 (%d). Odd things may happen.\n",
cosa->num, cosa->usage);
-#if 0
- if (cosa->status != CARD_STATUS_RESETED &&
- cosa->status != CARD_STATUS_DOWNLOADED) {
- printk(KERN_NOTICE "cosa%d: reset the card first (status %d).\n",
- cosa->num, cosa->status);
+ if (!(cosa->firmware_status & COSA_FW_RESET)) {
+ printk(KERN_NOTICE "%s: reset the card first (status %d).\n",
+ cosa->name, cosa->firmware_status);
return -EPERM;
}
-#endif
+
get_user_ret(addr, &(d->addr), -EFAULT);
get_user_ret(len, &(d->len), -EFAULT);
get_user_ret(code, &(d->code), -EFAULT);
+ /* If something fails, force the user to reset the card */
+ cosa->firmware_status &= ~COSA_FW_RESET;
+
if ((i=readmem(cosa, d->code, len, addr)) < 0) {
printk(KERN_NOTICE "cosa%d: reading memory failed: %d\n",
cosa->num, i);
@@ -1067,6 +1092,7 @@ static inline int cosa_readmem(struct cosa_data *cosa, struct cosa_download *d)
}
printk(KERN_INFO "cosa%d: reading card memory - 0x%04x bytes at 0x%04x\n",
cosa->num, len, addr);
+ cosa->firmware_status |= COSA_FW_RESET;
return 0;
}
@@ -1078,13 +1104,14 @@ static inline int cosa_start(struct cosa_data *cosa, int address)
if (cosa->usage > 1)
printk(KERN_INFO "cosa%d: WARNING: start microcode requested with cosa->usage > 1 (%d). Odd things may happen.\n",
cosa->num, cosa->usage);
-#if 0
- if (cosa->status != CARD_STATUS_DOWNLOADED) {
- printk(KERN_NOTICE "cosa%d: download the microcode first (status %d).\n",
- cosa->num, cosa->status);
+
+ if ((cosa->firmware_status & (COSA_FW_RESET|COSA_FW_DOWNLOAD))
+ != (COSA_FW_RESET|COSA_FW_DOWNLOAD)) {
+ printk(KERN_NOTICE "%s: download the microcode and/or reset the card first (status %d).\n",
+ cosa->name, cosa->firmware_status);
return -EPERM;
}
-#endif
+ cosa->firmware_status &= ~COSA_FW_RESET;
if ((i=startmicrocode(cosa, address)) < 0) {
printk(KERN_NOTICE "cosa%d: start microcode at 0x%04x failed: %d\n",
cosa->num, address, i);
@@ -1093,6 +1120,7 @@ static inline int cosa_start(struct cosa_data *cosa, int address)
printk(KERN_INFO "cosa%d: starting microcode at 0x%04x\n",
cosa->num, address);
cosa->startaddr = address;
+ cosa->firmware_status |= COSA_FW_START;
return 0;
}
@@ -1689,9 +1717,11 @@ static inline void tx_interrupt(struct cosa_data *cosa, int status)
/* in second pass, accept first ready-to-TX channel */
if (i > cosa->nchannels) {
/* Can be safely ignored */
+#ifdef DEBUG_IRQS
printk(KERN_DEBUG "%s: Forcing TX "
"to not-ready channel %d\n",
cosa->name, cosa->txchan);
+#endif
break;
}
}
diff --git a/drivers/net/wan/cycx_x25.c b/drivers/net/wan/cycx_x25.c
index 7e79943c0..40f76b2a5 100644
--- a/drivers/net/wan/cycx_x25.c
+++ b/drivers/net/wan/cycx_x25.c
@@ -11,6 +11,10 @@
* as published by the Free Software Foundation; either version
* 2 of the License, or (at your option) any later version.
* ============================================================================
+* 1999/10/09 acme chan_disc renamed to chan_disconnect,
+* began adding support for X.25 sockets:
+* conf->protocol in new_if
+* 1999/10/05 acme fixed return E... to return -E...
* 1999/08/10 acme serialized access to the card thru a spinlock
* in x25_exec
* 1999/08/09 acme removed per channel spinlocks
@@ -132,16 +136,19 @@ static int x25_configure (cycx_t *card, TX25Config *conf),
x25_connect_response (cycx_t *card, x25_channel_t *chan),
x25_disconnect_response (cycx_t *card, u8 link, u8 lcn);
-/* Miscellaneous functions */
-static int chan_connect (struct net_device *dev),
- chan_send (struct net_device *dev, struct sk_buff *skb);
+/* channel functions */
+int chan_connect (struct net_device *dev),
+ chan_send (struct net_device *dev, struct sk_buff *skb);
+
+static void chan_disconnect (struct net_device *dev);
+/* Miscellaneous functions */
static void set_chan_state (struct net_device *dev, u8 state),
- nibble_to_byte (u8 *s, u8 *d, u8 len, u8 nibble),
- reset_timer (struct net_device *dev),
- chan_disc (struct net_device *dev),
chan_timer (unsigned long d);
+static void nibble_to_byte (u8 *s, u8 *d, u8 len, u8 nibble),
+ reset_timer (struct net_device *dev);
+
static u8 bps_to_speed_code (u32 bps);
static u8 log2 (u32 n);
@@ -334,7 +341,7 @@ static int new_if (wan_device_t *wandev, struct net_device *dev, wanif_conf_t *c
strcpy(chan->name, conf->name);
chan->card = card;
chan->link = conf->port;
- chan->protocol = ETH_P_IP;
+ chan->protocol = conf->protocol ? ETH_P_X25 : ETH_P_IP;
chan->rx_skb = NULL;
/* only used in svc connected thru crossover cable */
chan->local_addr = NULL;
@@ -353,7 +360,7 @@ static int new_if (wan_device_t *wandev, struct net_device *dev, wanif_conf_t *c
if (!chan->local_addr) {
kfree(chan);
- return ENOMEM;
+ return -ENOMEM;
}
}
@@ -505,7 +512,7 @@ static int if_close (struct net_device *dev)
dev->start = 0;
if (chan->state == WAN_CONNECTED || chan->state == WAN_CONNECTING)
- chan_disc(dev);
+ chan_disconnect(dev);
cyclomx_close(card);
return 0;
@@ -763,7 +770,7 @@ static void rx_intr (cycx_t *card, TX25Cmd *cmd)
dev->last_rx = jiffies; /* timestamp */
chan->rx_skb = NULL; /* dequeue packet */
- skb->protocol = htons(ETH_P_IP);
+ skb->protocol = htons(chan->protocol);
skb->dev = dev;
skb->mac.raw = skb->data;
netif_rx(skb);
@@ -799,6 +806,7 @@ static void connect_intr (cycx_t *card, TX25Cmd *cmd)
dprintk(KERN_INFO "connect_intr:lcn=%d, local=%s, remote=%s\n",
lcn, loc, rem);
+
if ((dev = get_dev_by_dte_addr(wandev, rem)) == NULL) {
/* Invalid channel, discard packet */
printk(KERN_INFO "%s: connect not expected: remote %s!\n",
@@ -824,6 +832,7 @@ static void connect_confirm_intr (cycx_t *card, TX25Cmd *cmd)
cycx_peek(&card->hw, cmd->buf + 1, &key, sizeof(key));
dprintk(KERN_INFO "%s: connect_confirm_intr:lcn=%d, key=%d\n",
card->devname, lcn, key);
+
if ((dev = get_dev_by_lcn(wandev, -key)) == NULL) {
/* Invalid channel, discard packet */
clear_bit(--key, (void*)&card->u.x.connection_keys);
@@ -1139,10 +1148,8 @@ static int x25_place_call (cycx_t *card, x25_channel_t *chan)
if ((err = x25_exec(card, X25_CONNECT_REQUEST, chan->link,
&d, 7 + len + 1, NULL, 0)) != 0)
clear_bit(--key, (void*)&card->u.x.connection_keys);
- else {
+ else
chan->lcn = -key;
- chan->protocol = ETH_P_IP;
- }
return err;
}
@@ -1229,7 +1236,7 @@ static struct net_device *get_dev_by_dte_addr (wan_device_t *wandev, char *dte)
* Return: 0 connected
* >0 connection in progress
* <0 failure */
-static int chan_connect (struct net_device *dev)
+int chan_connect (struct net_device *dev)
{
x25_channel_t *chan = dev->priv;
cycx_t *card = chan->card;
@@ -1251,7 +1258,7 @@ static int chan_connect (struct net_device *dev)
/* Disconnect logical channel.
* o if SVC then clear X.25 call */
-static void chan_disc (struct net_device *dev)
+static void chan_disconnect (struct net_device *dev)
{
x25_channel_t *chan = dev->priv;
@@ -1270,7 +1277,7 @@ static void chan_timer (unsigned long d)
switch (chan->state) {
case WAN_CONNECTED:
- chan_disc(dev);
+ chan_disconnect(dev);
break;
default:
printk (KERN_ERR "%s: chan_timer for svc (%s) not "
@@ -1345,7 +1352,7 @@ static void set_chan_state (struct net_device *dev, u8 state)
* the packet into 'complete sequence' using M-bit.
* 2. When transmission is complete, an event notification should be issued
* to the router. */
-static int chan_send (struct net_device *dev, struct sk_buff *skb)
+int chan_send (struct net_device *dev, struct sk_buff *skb)
{
x25_channel_t *chan = dev->priv;
cycx_t *card = chan->card;
@@ -1473,14 +1480,15 @@ static void x25_dump_devs(wan_device_t *wandev)
struct net_device *dev = wandev->dev;
printk (KERN_INFO "x25 dev states\n");
- printk (KERN_INFO "name: addr: tbusy:\n");
- printk (KERN_INFO "----------------------------\n");
+ printk (KERN_INFO "name: addr: tbusy: protocol:\n");
+ printk (KERN_INFO "---------------------------------------\n");
for (; dev; dev = dev->slave) {
x25_channel_t *chan = dev->priv;
- printk (KERN_INFO "%-5.5s %-15.15s %ld\n",
- chan->name, chan->addr, dev->tbusy);
+ printk (KERN_INFO "%-5.5s %-15.15s %ld ETH_P_%s\n",
+ chan->name, chan->addr, dev->tbusy,
+ chan->protocol == ETH_P_IP ? "IP" : "X25");
}
}
diff --git a/drivers/net/wan/sbni.c b/drivers/net/wan/sbni.c
index 9d5fba082..4cf0c05a1 100644
--- a/drivers/net/wan/sbni.c
+++ b/drivers/net/wan/sbni.c
@@ -1280,10 +1280,12 @@ static int sbni_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
return -EPERM;
if(copy_from_user( tmpstr, ifr->ifr_data, 6))
return -EFAULT;
- slave=dev_get(tmpstr);
+ slave = dev_get_by_name(tmpstr);
if(!(slave && slave->flags & IFF_UP && dev->flags & IFF_UP))
{
printk("%s: Both devices should be UP to enslave!\n",dev->name);
+ if (slave)
+ dev_put(slave);
return -EINVAL;
}
@@ -1304,8 +1306,9 @@ static int sbni_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
else
{
printk("%s: one of devices is already slave!\n",dev->name);
- return -EBUSY;
+ error = -EBUSY;
}
+ dev_put(slave);
}
else
{
@@ -1359,7 +1362,7 @@ static int sbni_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
unsigned long calc_crc(char *mem, int len, unsigned initial)
{
-
+ unsigned crc, dummy_len;
__asm__ (
"xorl %%eax,%%eax\n\t"
"1:\n\t"
@@ -1367,13 +1370,12 @@ unsigned long calc_crc(char *mem, int len, unsigned initial)
"xorb %%dl,%%al\n\t"
"shrl $8,%%edx\n\t"
"xorl (%%edi,%%eax,4),%%edx\n\t"
- "loop 1b\n\t"
- "movl %%edx,%%eax"
- :
- : "S" (mem), "D" (&crc32tab[0]), "c" (len), "d" (initial)
- : "eax", "edx", "ecx"
+ "loop 1b"
+ : "=d" (crc), "=c" (dummy_len)
+ : "S" (mem), "D" (&crc32tab[0]), "1" (len), "0" (initial)
+ : "eax"
);
- /* return crc; */
+ return crc;
}
#else
diff --git a/drivers/parport/Config.in b/drivers/parport/Config.in
index 16a7099c7..812cc1a4c 100644
--- a/drivers/parport/Config.in
+++ b/drivers/parport/Config.in
@@ -7,41 +7,43 @@
tristate 'Parallel port support' CONFIG_PARPORT
if [ "$CONFIG_PARPORT" != "n" ]; then
- dep_tristate ' PC-style hardware' CONFIG_PARPORT_PC $CONFIG_PARPORT
- if [ "$CONFIG_PARPORT_PC" != "n" ]; then
- bool ' Use FIFO/DMA if available' CONFIG_PARPORT_PC_FIFO
- fi
- if [ "$CONFIG_PARPORT_PC" = "y" ]; then
- # Don't bother with this if parport_pc is a module; it only affects
- # the presence or not of some __init's, which are no-ops for modules.
- bool ' Support for PCMCIA management for PC-style ports' CONFIG_PARPORT_PC_PCMCIA
- fi
- if [ "$CONFIG_ARM" = "y" ]; then
- dep_tristate ' Archimedes hardware' CONFIG_PARPORT_ARC $CONFIG_PARPORT
- fi
- if [ "$CONFIG_AMIGA" = "y" ]; then
- dep_tristate ' Amiga builtin port' CONFIG_PARPORT_AMIGA $CONFIG_PARPORT
- if [ "$CONFIG_ZORRO" != "n" ]; then
- dep_tristate ' Multiface III parallel port' CONFIG_PARPORT_MFC3 $CONFIG_PARPORT
- fi
- else
- define_bool CONFIG_PARPORT_AMIGA n
- define_bool CONFIG_PARPORT_MFC3 n
- fi
- if [ "$CONFIG_ATARI" = "y" ]; then
- dep_tristate ' Atari hardware' CONFIG_PARPORT_ATARI $CONFIG_PARPORT
- else
- define_bool CONFIG_PARPORT_ATARI n
- fi
- if [ "$CONFIG_SBUS" = "y" ]; then
- dep_tristate ' Sparc hardware (EXPERIMENTAL)' CONFIG_PARPORT_SUNBPP $CONFIG_PARPORT
- else
- define_bool CONFIG_PARPORT_SUNBPP n
- fi
+ dep_tristate ' PC-style hardware' CONFIG_PARPORT_PC $CONFIG_PARPORT
+ if [ "$CONFIG_PARPORT_PC" != "n" ]; then
+ bool ' Use FIFO/DMA if available' CONFIG_PARPORT_PC_FIFO
+ fi
+ if [ "$CONFIG_PARPORT_PC" = "y" ]; then
+ # Don't bother with this if parport_pc is a module; it only affects
+ # the presence or not of some __init's, which are no-ops for modules.
+ if [ "$CONFIG_PCMCIA" != "n" ]; then
+ bool ' Support for PCMCIA management for PC-style ports' CONFIG_PARPORT_PC_PCMCIA
+ fi
+ fi
+ if [ "$CONFIG_ARM" = "y" ]; then
+ dep_tristate ' Archimedes hardware' CONFIG_PARPORT_ARC $CONFIG_PARPORT
+ fi
+ if [ "$CONFIG_AMIGA" = "y" ]; then
+ dep_tristate ' Amiga builtin port' CONFIG_PARPORT_AMIGA $CONFIG_PARPORT
+ if [ "$CONFIG_ZORRO" != "n" ]; then
+ dep_tristate ' Multiface III parallel port' CONFIG_PARPORT_MFC3 $CONFIG_PARPORT
+ fi
+ else
+ define_bool CONFIG_PARPORT_AMIGA n
+ define_bool CONFIG_PARPORT_MFC3 n
+ fi
+ if [ "$CONFIG_ATARI" = "y" ]; then
+ dep_tristate ' Atari hardware' CONFIG_PARPORT_ATARI $CONFIG_PARPORT
+ else
+ define_bool CONFIG_PARPORT_ATARI n
+ fi
+ if [ "$CONFIG_SBUS" = "y" ]; then
+ dep_tristate ' Sparc hardware (EXPERIMENTAL)' CONFIG_PARPORT_SUNBPP $CONFIG_PARPORT
+ else
+ define_bool CONFIG_PARPORT_SUNBPP n
+ fi
- # If exactly one hardware type is selected then parport will optimise away
- # support for loading any others. Defeat this if the user is keen.
- bool ' Support foreign hardware' CONFIG_PARPORT_OTHER
+ # If exactly one hardware type is selected then parport will optimise away
+ # support for loading any others. Defeat this if the user is keen.
+ bool ' Support foreign hardware' CONFIG_PARPORT_OTHER
- bool ' IEEE 1284 transfer modes' CONFIG_PARPORT_1284
+ bool ' IEEE 1284 transfer modes' CONFIG_PARPORT_1284
fi
diff --git a/drivers/parport/ieee1284.c b/drivers/parport/ieee1284.c
index 8acf46f58..ba7fc1610 100644
--- a/drivers/parport/ieee1284.c
+++ b/drivers/parport/ieee1284.c
@@ -278,6 +278,9 @@ int parport_negotiate (struct parport *port, int mode)
return -ENOSYS; /* FIXME (implement BECP) */
}
+ if (mode & IEEE1284_EXT_LINK)
+ m = 1<<7; /* request extensibility link */
+
port->ieee1284.phase = IEEE1284_PH_NEGOTIATION;
/* Start off with nStrobe and nAutoFd high, and nSelectIn low */
@@ -354,12 +357,59 @@ int parport_negotiate (struct parport *port, int mode)
return 1;
}
+ /* More to do if we've requested extensibility link. */
+ if (mode & IEEE1284_EXT_LINK) {
+ m = mode & 0x7f;
+ udelay (1);
+ parport_write_data (port, m);
+ udelay (1);
+
+ /* Event 51: Set nStrobe low */
+ parport_frob_control (port,
+ PARPORT_CONTROL_STROBE,
+ PARPORT_CONTROL_STROBE);
+
+ /* Event 53: Set nStrobe high */
+ udelay (5);
+ parport_frob_control (port,
+ PARPORT_CONTROL_STROBE,
+ 0);
+
+ /* Event 55: nAck goes high */
+ if (parport_wait_peripheral (port,
+ PARPORT_STATUS_ACK,
+ PARPORT_STATUS_ACK)) {
+ /* This shouldn't really happen with a compliant
+ * device. */
+ DPRINTK (KERN_DEBUG
+ "%s: Mode 0x%02x not supported? (0x%02x)\n",
+ port->name, mode,
+ port->ops->read_status (port));
+ parport_ieee1284_terminate (port);
+ return 1;
+ }
+
+ /* Event 54: Peripheral sets XFlag to reflect support */
+ xflag = parport_read_status (port) & PARPORT_STATUS_SELECT;
+
+ /* xflag should be high. */
+ if (!xflag) {
+ /* Extended mode not supported. */
+ DPRINTK (KERN_DEBUG "%s: Extended mode 0x%02x not "
+ "supported\n", port->name, mode);
+ parport_ieee1284_terminate (port);
+ return 1;
+ }
+
+ /* Any further setup is left to the caller. */
+ }
+
/* Mode is supported */
DPRINTK (KERN_DEBUG "%s: In mode 0x%02x\n", port->name, mode);
port->ieee1284.mode = mode;
/* But ECP is special */
- if (mode & IEEE1284_MODE_ECP) {
+ if (!(mode & IEEE1284_EXT_LINK) && (mode & IEEE1284_MODE_ECP)) {
port->ieee1284.phase = IEEE1284_PH_ECP_SETUP;
/* Event 30: Set nAutoFd low */
diff --git a/drivers/parport/parport_pc.c b/drivers/parport/parport_pc.c
index a451d85b0..f6516d5b1 100644
--- a/drivers/parport/parport_pc.c
+++ b/drivers/parport/parport_pc.c
@@ -1207,7 +1207,7 @@ static int __maybe_init parport_ECP_supported(struct parport *pb)
outb (ECR_SPP << 5, ECONTROL (pb)); /* Reset FIFO */
outb (0xf4, ECONTROL (pb)); /* Configuration mode */
- config = inb (FIFO (pb));
+ config = inb (CONFIGA (pb));
pword = (config >> 4) & 0x7;
switch (pword) {
case 0:
@@ -1230,10 +1230,10 @@ static int __maybe_init parport_ECP_supported(struct parport *pb)
priv->pword = pword;
printk (KERN_DEBUG "0x%lx: PWord is %d bits\n", pb->base, 8 * pword);
- config = inb (CONFIGB (pb));
printk (KERN_DEBUG "0x%lx: Interrupts are ISA-%s\n", pb->base,
config & 0x80 ? "Level" : "Pulses");
+ config = inb (CONFIGB (pb));
if (!(config & 0x40)) {
printk (KERN_WARNING "0x%lx: IRQ conflict!\n", pb->base);
pb->irq = PARPORT_IRQ_NONE;
@@ -1708,58 +1708,83 @@ static int __init parport_pc_init_pci (int irq, int dma)
struct {
unsigned int vendor;
unsigned int device;
+ unsigned int subvendor;
+ unsigned int subdevice;
unsigned int numports;
struct {
unsigned long lo;
unsigned long hi; /* -ve if not there */
} addr[4];
} cards[] = {
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_550, 1,
- { { 3, 4 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_650, 1,
- { { 3, 4 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_850, 1,
- { { 3, 4 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_10x, 1,
- { { 2, 3 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_10x, 2,
- { { 2, 3 }, { 4, 5 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_550, 1,
- { { 4, 5 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_650, 1,
- { { 4, 5 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_850, 1,
- { { 4, 5 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_20x, 1,
- { { 0, 1 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_20x, 2,
- { { 0, 1 }, { 2, 3 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_550, 2,
- { { 1, 2 }, { 3, 4 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_650, 2,
- { { 1, 2 }, { 3, 4 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_850, 2,
- { { 1, 2 }, { 3, 4 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_550, 1,
- { { 1, 2 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_650, 1,
- { { 1, 2 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_850, 1,
- { { 1, 2 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_550, 1,
- { { 2, 3 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_650, 1,
- { { 2, 3 }, } },
- { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850, 1,
- { { 2, 3 }, } },
- { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PARALLEL, 1,
- { { 0, -1 }, } },
- { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_A, 1,
- { { 0, -1 }, } },
- { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_B, 1,
- { { 0, -1 }, } },
- { PCI_VENDOR_ID_EXSYS, PCI_DEVICE_ID_EXSYS_4014, 2,
- { { 2, -1 }, { 3, -1 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_550,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 3, 4 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_650,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 3, 4 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_10x_850,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 3, 4 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_10x,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 2, 3 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_10x,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 2, { { 2, 3 }, { 4, 5 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_550,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 4, 5 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_650,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 4, 5 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_10x_850,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 4, 5 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1P_20x,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 0, 1 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P_20x,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 2, { { 0, 1 }, { 2, 3 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_550,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 2, { { 1, 2 }, { 3, 4 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_650,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 2, { { 1, 2 }, { 3, 4 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2P1S_20x_850,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 2, { { 1, 2 }, { 3, 4 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_550,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 1, 2 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_650,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 1, 2 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_1S1P_20x_850,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 1, 2 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_550,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 2, 3 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_650,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 2, 3 }, } },
+ { PCI_VENDOR_ID_SIIG, PCI_DEVICE_ID_SIIG_2S1P_20x_850,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 2, 3 }, } },
+ { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_PARALLEL,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 0, -1 }, } },
+ { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_A,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 0, -1 }, } },
+ { PCI_VENDOR_ID_LAVA, PCI_DEVICE_ID_LAVA_DUAL_PAR_B,
+ PCI_ANY_ID, PCI_ANY_ID,
+ 1, { { 0, -1 }, } },
+ { PCI_VENDOR_ID_PLX, PCI_DEVICE_ID_PLX_9050,
+ PCI_SUBVENDOR_ID_EXSYS, PCI_SUBDEVICE_ID_EXSYS_4014,
+ 2, { { 4, -1 }, { 5, -1 }, } },
{ 0, }
};
@@ -1776,6 +1801,15 @@ static int __init parport_pc_init_pci (int irq, int dma)
cards[i].device,
pcidev)) != NULL) {
int n;
+
+ if (cards[i].subvendor != PCI_ANY_ID &&
+ cards[i].subvendor != pcidev->subsystem_vendor)
+ continue;
+
+ if (cards[i].subdevice != PCI_ANY_ID &&
+ cards[i].subdevice != pcidev->subsystem_device)
+ continue;
+
for (n = 0; n < cards[i].numports; n++) {
unsigned long lo = cards[i].addr[n].lo;
unsigned long hi = cards[i].addr[n].hi;
diff --git a/drivers/pci/devlist.h b/drivers/pci/devlist.h
index 276ae40df..6077bc8a5 100644
--- a/drivers/pci/devlist.h
+++ b/drivers/pci/devlist.h
@@ -1,4 +1,5 @@
VENDOR( COMPAQ, "Compaq" )
+ DEVICE( COMPAQ, COMPAQ_TOKENRING, "Token Ring 4/16")
DEVICE( COMPAQ, COMPAQ_1280, "QVision 1280/p")
DEVICE( COMPAQ, COMPAQ_SMART2P, "Smart-2/P RAID Controller")
DEVICE( COMPAQ, COMPAQ_NETEL100,"Netelligent 10/100")
@@ -486,6 +487,10 @@ VENDOR( MACRONIX, "Macronix" )
DEVICE( MACRONIX, MACRONIX_MX987x5,"MX98715 / MX98725")
ENDVENDOR()
+VENDOR( TCONRAD, "Thomas-Conrad" )
+ DEVICE( TCONRAD, TCONRAD_TOKENRING, "Token Ring 4/16")
+ENDVENDOR()
+
VENDOR( CERN, "CERN" )
DEVICE( CERN, CERN_SPSB_PMC, "STAR/RD24 SCI-PCI (PMC)")
DEVICE( CERN, CERN_SPSB_PCI, "STAR/RD24 SCI-PCI (PMC)")
@@ -989,10 +994,6 @@ VENDOR( ATRONICS, "Atronics" )
DEVICE( ATRONICS, ATRONICS_2015, "IDE-2015PL")
ENDVENDOR()
-VENDOR( EXSYS, "Exsys" )
- DEVICE( EXSYS, EXSYS_4014, "EX-4014")
-ENDVENDOR()
-
VENDOR( TIGERJET, "TigerJet" )
DEVICE( TIGERJET, TIGERJET_300, "Tiger300 ISDN")
ENDVENDOR()
diff --git a/drivers/pci/pcisyms.c b/drivers/pci/pcisyms.c
index d1dcbef71..030e36f3d 100644
--- a/drivers/pci/pcisyms.c
+++ b/drivers/pci/pcisyms.c
@@ -43,3 +43,5 @@ EXPORT_SYMBOL(pcibios_find_device);
/* Quirk info */
EXPORT_SYMBOL(isa_dma_bridge_buggy);
+EXPORT_SYMBOL(pci_pci_problems);
+
diff --git a/drivers/pci/quirks.c b/drivers/pci/quirks.c
index d25a0ed29..3a2ae4599 100644
--- a/drivers/pci/quirks.c
+++ b/drivers/pci/quirks.c
@@ -56,6 +56,47 @@ static void __init quirk_isa_dma_hangs(struct pci_dev *dev)
}
}
+int pci_pci_problems = 0;
+
+/*
+ * Chipsets where PCI->PCI transfers vanish or hang
+ */
+
+static void __init quirk_nopcipci(struct pci_dev *dev)
+{
+ if((pci_pci_problems&PCIPCI_FAIL)==0)
+ {
+ printk(KERN_INFO "Disabling direct PCI/PCI transfers.\n");
+ pci_pci_problems|=PCIPCI_FAIL;
+ }
+}
+
+/*
+ * Triton requires workarounds to be used by the drivers
+ */
+
+static void __init quirk_triton(struct pci_dev *dev)
+{
+ if((pci_pci_problems&PCIPCI_TRITON)==0)
+ {
+ printk(KERN_INFO "Limiting direct PCI/PCI transfers.\n");
+ pci_pci_problems|=PCIPCI_TRITON;
+ }
+}
+
+/*
+ * Natoma has some interesting boundary conditions with Zoran stuff
+ * at least
+ */
+
+static void __init quirk_natoma(struct pci_dev *dev)
+{
+ if((pci_pci_problems&PCIPCI_NATOMA)==0)
+ {
+ printk(KERN_INFO "Limiting direct PCI/PCI transfers.\n");
+ pci_pci_problems|=PCIPCI_NATOMA;
+ }
+}
/*
* S3 868 and 968 chips report region size equal to 32M, but they decode 64M.
@@ -79,6 +120,7 @@ static void __init quirk_s3_64M(struct pci_dev *dev)
static struct pci_fixup pci_fixups[] __initdata = {
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_passive_release },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_passive_release },
/*
* Its not totally clear which chipsets are the problematic ones
* We know 82C586 and 82C596 variants are affected.
@@ -88,6 +130,18 @@ static struct pci_fixup pci_fixups[] __initdata = {
{ PCI_FIXUP_FINAL, PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C596, quirk_isa_dma_hangs },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_868, quirk_s3_64M },
{ PCI_FIXUP_HEADER, PCI_VENDOR_ID_S3, PCI_DEVICE_ID_S3_968, quirk_s3_64M },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437, quirk_triton },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82437VX, quirk_triton },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439, quirk_triton },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82439TX, quirk_triton },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82441, quirk_natoma },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_0, quirk_natoma },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443LX_1, quirk_natoma },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_0, quirk_natoma },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_1, quirk_natoma },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_INTEL, PCI_DEVICE_ID_INTEL_82443BX_2, quirk_natoma },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_5597, quirk_nopcipci },
+ { PCI_FIXUP_FINAL, PCI_VENDOR_ID_SI, PCI_DEVICE_ID_SI_496, quirk_nopcipci },
{ 0 }
};
diff --git a/drivers/scsi/ChangeLog.ips b/drivers/scsi/ChangeLog.ips
new file mode 100644
index 000000000..38848f751
--- /dev/null
+++ b/drivers/scsi/ChangeLog.ips
@@ -0,0 +1,25 @@
+Change Log
+~~~~~~~~~~
+
+ 1.00.00 - Initial Public Release
+ - Functionally equivalent to 0.99.05
+
+ 0.99.05 - Fix an oops on certain passthru commands
+
+ 0.99.04 - Fix race condition in the passthru mechanism
+ -- this required the interface to the utilities to change
+ - Fix error recovery code
+
+ 0.99.03 - Make interrupt routine handle all completed request on the
+ adapter not just the first one
+ - Make sure passthru commands get woken up if we run out of
+ SCBs
+ - Send all of the commands on the queue at once rather than
+ one at a time since the card will support it.
+
+ 0.99.02 - Added some additional debug statements to print out
+ errors if an error occurs while trying to read/write
+ to a logical drive (IPS_DEBUG).
+
+ Fixed read/write errors when the adapter is using an
+ 8K stripe size.
diff --git a/drivers/scsi/ChangeLog.sym53c8xx b/drivers/scsi/ChangeLog.sym53c8xx
index 260c6b5aa..9ea77ea71 100644
--- a/drivers/scsi/ChangeLog.sym53c8xx
+++ b/drivers/scsi/ChangeLog.sym53c8xx
@@ -1,3 +1,14 @@
+Sun Oct 3 19:00 1999 Gerard Roudier (groudier@club-internet.fr)
+ * version sym53c8xx-1.5f
+ - Change the way the driver checks the PCI clock frequency, so
+ that overclocked PCI BUS up to 48 MHz will not be refused.
+ The more the BUS is overclocked, the less the driver will
+ guarantee that its measure of the SCSI clock is correct.
+ - Backport some minor improvements of SCRIPTS from the sym_hipd
+ driver.
+ - Backport the code rewrite of the START QUEUE dequeuing (on
+ bad scsi status received) from the sym_hipd driver.
+
Sat Sep 11 11:00 1999 Gerard Roudier (groudier@club-internet.fr)
* version sym53c8xx-1.5e
- New linux-2.3.13 __setup scheme support added.
diff --git a/drivers/scsi/Config.in b/drivers/scsi/Config.in
index 40518b03b..621045989 100644
--- a/drivers/scsi/Config.in
+++ b/drivers/scsi/Config.in
@@ -1,19 +1,19 @@
comment 'SCSI support type (disk, tape, CD-ROM)'
-dep_tristate 'SCSI disk support' CONFIG_BLK_DEV_SD $CONFIG_SCSI
-dep_tristate 'SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
-dep_tristate 'SCSI CD-ROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
+dep_tristate ' SCSI disk support' CONFIG_BLK_DEV_SD $CONFIG_SCSI
+dep_tristate ' SCSI tape support' CONFIG_CHR_DEV_ST $CONFIG_SCSI
+dep_tristate ' SCSI CD-ROM support' CONFIG_BLK_DEV_SR $CONFIG_SCSI
if [ "$CONFIG_BLK_DEV_SR" != "n" ]; then
- bool ' Enable vendor-specific extensions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
+ bool ' Enable vendor-specific extensions (for SCSI CDROM)' CONFIG_BLK_DEV_SR_VENDOR
fi
-dep_tristate 'SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
+dep_tristate ' SCSI generic support' CONFIG_CHR_DEV_SG $CONFIG_SCSI
comment 'Some SCSI devices (e.g. CD jukebox) support multiple LUNs'
-bool 'Probe all LUNs on each SCSI device' CONFIG_SCSI_MULTI_LUN
+bool ' Probe all LUNs on each SCSI device' CONFIG_SCSI_MULTI_LUN
-bool 'Verbose SCSI error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS
-bool 'SCSI logging facility' CONFIG_SCSI_LOGGING
+bool ' Verbose SCSI error reporting (kernel size +=12K)' CONFIG_SCSI_CONSTANTS
+bool ' SCSI logging facility' CONFIG_SCSI_LOGGING
mainmenu_option next_comment
comment 'SCSI low-level drivers'
@@ -25,10 +25,10 @@ dep_tristate 'Adaptec AHA1542 support' CONFIG_SCSI_AHA1542 $CONFIG_SCSI
dep_tristate 'Adaptec AHA1740 support' CONFIG_SCSI_AHA1740 $CONFIG_SCSI
dep_tristate 'Adaptec AIC7xxx support' CONFIG_SCSI_AIC7XXX $CONFIG_SCSI
if [ "$CONFIG_SCSI_AIC7XXX" != "n" ]; then
- bool ' Enable Tagged Command Queueing (TCQ) by default' CONFIG_AIC7XXX_TCQ_ON_BY_DEFAULT
- int ' Maximum number of TCQ commands per device' CONFIG_AIC7XXX_CMDS_PER_DEVICE 8
- bool ' Collect statistics to report in /proc' CONFIG_AIC7XXX_PROC_STATS N
- int ' Delay in seconds after SCSI bus reset' CONFIG_AIC7XXX_RESET_DELAY 5
+ bool ' Enable Tagged Command Queueing (TCQ) by default' CONFIG_AIC7XXX_TCQ_ON_BY_DEFAULT
+ int 'Maximum number of TCQ commands per device' CONFIG_AIC7XXX_CMDS_PER_DEVICE 8
+ bool ' Collect statistics to report in /proc' CONFIG_AIC7XXX_PROC_STATS
+ int 'Delay in seconds after SCSI bus reset' CONFIG_AIC7XXX_RESET_DELAY 5
fi
dep_tristate 'IBM ServeRAID support' CONFIG_SCSI_IPS $CONFIG_SCSI
dep_tristate 'AdvanSys SCSI support' CONFIG_SCSI_ADVANSYS $CONFIG_SCSI
@@ -38,80 +38,81 @@ dep_tristate 'AMI MegaRAID support' CONFIG_SCSI_MEGARAID $CONFIG_SCSI
dep_tristate 'BusLogic SCSI support' CONFIG_SCSI_BUSLOGIC $CONFIG_SCSI
if [ "$CONFIG_SCSI_BUSLOGIC" != "n" ]; then
- bool ' Omit FlashPoint support' CONFIG_SCSI_OMIT_FLASHPOINT
+ bool ' Omit FlashPoint support' CONFIG_SCSI_OMIT_FLASHPOINT
fi
dep_tristate 'DTC3180/3280 SCSI support' CONFIG_SCSI_DTC3280 $CONFIG_SCSI
dep_tristate 'EATA ISA/EISA/PCI (DPT and generic EATA/DMA-compliant boards) support' CONFIG_SCSI_EATA $CONFIG_SCSI
- if [ "$CONFIG_SCSI_EATA" != "n" ]; then
- bool ' enable tagged command queueing' CONFIG_SCSI_EATA_TAGGED_QUEUE
- bool ' enable elevator sorting' CONFIG_SCSI_EATA_LINKED_COMMANDS
- int ' maximum number of queued commands' CONFIG_SCSI_EATA_MAX_TAGS 16
- fi
+ if [ "$CONFIG_SCSI_EATA" != "n" ]; then
+ bool ' enable tagged command queueing' CONFIG_SCSI_EATA_TAGGED_QUEUE
+ bool ' enable elevator sorting' CONFIG_SCSI_EATA_LINKED_COMMANDS
+ int 'maximum number of queued commands' CONFIG_SCSI_EATA_MAX_TAGS 16
+ fi
dep_tristate 'EATA-DMA [Obsolete] (DPT, NEC, AT&T, SNI, AST, Olivetti, Alphatronix) support' CONFIG_SCSI_EATA_DMA $CONFIG_SCSI
dep_tristate 'EATA-PIO (old DPT PM2001, PM2012A) support' CONFIG_SCSI_EATA_PIO $CONFIG_SCSI
dep_tristate 'Future Domain 16xx SCSI/AHA-2920A support' CONFIG_SCSI_FUTURE_DOMAIN $CONFIG_SCSI
if [ "$CONFIG_MCA" = "y" ]; then
- dep_tristate 'Future Domain MCS-600/700 SCSI support' CONFIG_SCSI_FD_MCS $CONFIG_SCSI
+ dep_tristate 'Future Domain MCS-600/700 SCSI support' CONFIG_SCSI_FD_MCS $CONFIG_SCSI
fi
dep_tristate 'GDT SCSI Disk Array Controller support' CONFIG_SCSI_GDTH $CONFIG_SCSI
dep_tristate 'Generic NCR5380/53c400 SCSI support' CONFIG_SCSI_GENERIC_NCR5380 $CONFIG_SCSI
if [ "$CONFIG_SCSI_GENERIC_NCR5380" != "n" ]; then
- bool ' Enable NCR53c400 extensions' CONFIG_SCSI_GENERIC_NCR53C400
- choice 'NCR5380/53c400 mapping method (use Port for T130B)' \
+ bool ' Enable NCR53c400 extensions' CONFIG_SCSI_GENERIC_NCR53C400
+ choice 'NCR5380/53c400 mapping method (use Port for T130B)' \
"Port CONFIG_SCSI_G_NCR5380_PORT \
- Memory CONFIG_SCSI_G_NCR5380_MEM" Port
+ Memory CONFIG_SCSI_G_NCR5380_MEM" Port
fi
if [ "$CONFIG_PCI" = "y" ]; then
- dep_tristate 'Initio 9100U(W) support' CONFIG_SCSI_INITIO $CONFIG_SCSI
- dep_tristate 'Initio INI-A100U2W support' CONFIG_SCSI_INIA100 $CONFIG_SCSI
+ dep_tristate 'Initio 9100U(W) support' CONFIG_SCSI_INITIO $CONFIG_SCSI
+ dep_tristate 'Initio INI-A100U2W support' CONFIG_SCSI_INIA100 $CONFIG_SCSI
fi
if [ "$CONFIG_PARPORT" != "n" ]; then
- dep_tristate 'IOMEGA parallel port (ppa - older drives)' CONFIG_SCSI_PPA $CONFIG_SCSI $CONFIG_PARPORT
- dep_tristate 'IOMEGA parallel port (imm - newer drives)' CONFIG_SCSI_IMM $CONFIG_SCSI $CONFIG_PARPORT
- if [ "$CONFIG_SCSI_PPA" != "n" -o "$CONFIG_SCSI_IMM" != "n" ]; then
- bool ' ppa/imm option - Use slow (but safe) EPP-16' CONFIG_SCSI_IZIP_EPP16
- bool ' ppa/imm option - Assume slow parport control register' CONFIG_SCSI_IZIP_SLOW_CTR
- fi
+ dep_tristate 'IOMEGA parallel port (ppa - older drives)' CONFIG_SCSI_PPA $CONFIG_SCSI $CONFIG_PARPORT
+ dep_tristate 'IOMEGA parallel port (imm - newer drives)' CONFIG_SCSI_IMM $CONFIG_SCSI $CONFIG_PARPORT
+ if [ "$CONFIG_SCSI_PPA" != "n" -o "$CONFIG_SCSI_IMM" != "n" ]; then
+ bool ' ppa/imm option - Use slow (but safe) EPP-16' CONFIG_SCSI_IZIP_EPP16
+ bool ' ppa/imm option - Assume slow parport control register' CONFIG_SCSI_IZIP_SLOW_CTR
+ fi
fi
dep_tristate 'NCR53c406a SCSI support' CONFIG_SCSI_NCR53C406A $CONFIG_SCSI
dep_tristate 'symbios 53c416 SCSI support' CONFIG_SCSI_SYM53C416 $CONFIG_SCSI
+dep_tristate 'Simple 53c710 SCSI support (Compaq, NCR machines)' CONFIG_SCSI_SIM710 $CONFIG_SCSI
if [ "$CONFIG_PCI" = "y" ]; then
- dep_tristate 'NCR53c7,8xx SCSI support' CONFIG_SCSI_NCR53C7xx $CONFIG_SCSI
- if [ "$CONFIG_SCSI_NCR53C7xx" != "n" ]; then
- bool ' always negotiate synchronous transfers' CONFIG_SCSI_NCR53C7xx_sync
- bool ' allow FAST-SCSI [10MHz]' CONFIG_SCSI_NCR53C7xx_FAST
- bool ' allow DISCONNECT' CONFIG_SCSI_NCR53C7xx_DISCONNECT
- fi
+ dep_tristate 'NCR53c7,8xx SCSI support' CONFIG_SCSI_NCR53C7xx $CONFIG_SCSI
+ if [ "$CONFIG_SCSI_NCR53C7xx" != "n" ]; then
+ bool ' always negotiate synchronous transfers' CONFIG_SCSI_NCR53C7xx_sync
+ bool ' allow FAST-SCSI [10MHz]' CONFIG_SCSI_NCR53C7xx_FAST
+ bool ' allow DISCONNECT' CONFIG_SCSI_NCR53C7xx_DISCONNECT
+ fi
fi
if [ "$CONFIG_PCI" = "y" -a "$CONFIG_SCSI_NCR53C7xx" != "y" ]; then
- dep_tristate 'NCR53C8XX SCSI support' CONFIG_SCSI_NCR53C8XX $CONFIG_SCSI
- dep_tristate 'SYM53C8XX SCSI support' CONFIG_SCSI_SYM53C8XX $CONFIG_SCSI
- if [ "$CONFIG_SCSI_NCR53C8XX" != "n" -o "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
- int ' default tagged command queue depth' CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS 8
- int ' maximum number of queued commands' CONFIG_SCSI_NCR53C8XX_MAX_TAGS 32
- int ' synchronous transfers frequency in MHz' CONFIG_SCSI_NCR53C8XX_SYNC 20
- bool ' enable profiling' CONFIG_SCSI_NCR53C8XX_PROFILE
- bool ' use normal IO' CONFIG_SCSI_NCR53C8XX_IOMAPPED
- if [ "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
- bool ' include support for the NCR PQS/PDS SCSI card' CONFIG_SCSI_NCR53C8XX_PQS_PDS
- fi
- if [ "$CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS" = "0" ]; then
- bool ' not allow targets to disconnect' CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
- fi
- if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- bool ' assume boards are SYMBIOS compatible' CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT
- fi
- fi
+ dep_tristate 'NCR53C8XX SCSI support' CONFIG_SCSI_NCR53C8XX $CONFIG_SCSI
+ dep_tristate 'SYM53C8XX SCSI support' CONFIG_SCSI_SYM53C8XX $CONFIG_SCSI
+ if [ "$CONFIG_SCSI_NCR53C8XX" != "n" -o "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
+ int 'default tagged command queue depth' CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS 8
+ int 'maximum number of queued commands' CONFIG_SCSI_NCR53C8XX_MAX_TAGS 32
+ int 'synchronous transfers frequency in MHz' CONFIG_SCSI_NCR53C8XX_SYNC 20
+ bool ' enable profiling' CONFIG_SCSI_NCR53C8XX_PROFILE
+ bool ' use normal IO' CONFIG_SCSI_NCR53C8XX_IOMAPPED
+ if [ "$CONFIG_SCSI_SYM53C8XX" != "n" ]; then
+ bool ' include support for the NCR PQS/PDS SCSI card' CONFIG_SCSI_NCR53C8XX_PQS_PDS
+ fi
+ if [ "$CONFIG_SCSI_NCR53C8XX_DEFAULT_TAGS" = "0" ]; then
+ bool ' not allow targets to disconnect' CONFIG_SCSI_NCR53C8XX_NO_DISCONNECT
+ fi
+ if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
+ bool ' assume boards are SYMBIOS compatible (EXPERIMENTAL)' CONFIG_SCSI_NCR53C8XX_SYMBIOS_COMPAT
+ fi
+ fi
fi
if [ "$CONFIG_MCA" = "y" ]; then
- dep_tristate 'IBMMCA SCSI support' CONFIG_SCSI_IBMMCA $CONFIG_SCSI
- if [ "$CONFIG_SCSI_IBMMCA" != "n" ]; then
- bool ' Standard SCSI-order' CONFIG_IBMMCA_SCSI_ORDER_STANDARD
- bool ' Reset SCSI-devices at boottime' CONFIG_IBMMCA_SCSI_DEV_RESET
- fi
+ dep_tristate 'IBMMCA SCSI support' CONFIG_SCSI_IBMMCA $CONFIG_SCSI
+ if [ "$CONFIG_SCSI_IBMMCA" != "n" ]; then
+ bool ' Standard SCSI-order' CONFIG_IBMMCA_SCSI_ORDER_STANDARD
+ bool ' Reset SCSI-devices at boottime' CONFIG_IBMMCA_SCSI_DEV_RESET
+ fi
fi
if [ "$CONFIG_MCA" = "y" ]; then
- dep_tristate 'NCR MCA 53C9x SCSI support' CONFIG_SCSI_MCA_53C9X $CONFIG_SCSI
+ dep_tristate 'NCR MCA 53C9x SCSI support' CONFIG_SCSI_MCA_53C9X $CONFIG_SCSI
fi
dep_tristate 'PAS16 SCSI support' CONFIG_SCSI_PAS16 $CONFIG_SCSI
dep_tristate 'PCI2000 support' CONFIG_SCSI_PCI2000 $CONFIG_SCSI
@@ -119,22 +120,22 @@ dep_tristate 'PCI2220i support' CONFIG_SCSI_PCI2220I $CONFIG_SCSI
dep_tristate 'PSI240i support' CONFIG_SCSI_PSI240I $CONFIG_SCSI
dep_tristate 'Qlogic FAS SCSI support' CONFIG_SCSI_QLOGIC_FAS $CONFIG_SCSI
if [ "$CONFIG_PCI" = "y" ]; then
- dep_tristate 'Qlogic ISP SCSI support' CONFIG_SCSI_QLOGIC_ISP $CONFIG_SCSI
- dep_tristate 'Qlogic ISP FC SCSI support' CONFIG_SCSI_QLOGIC_FC $CONFIG_SCSI
+ dep_tristate 'Qlogic ISP SCSI support' CONFIG_SCSI_QLOGIC_ISP $CONFIG_SCSI
+ dep_tristate 'Qlogic ISP FC SCSI support' CONFIG_SCSI_QLOGIC_FC $CONFIG_SCSI
fi
dep_tristate 'Seagate ST-02 and Future Domain TMC-8xx SCSI support' CONFIG_SCSI_SEAGATE $CONFIG_SCSI
if [ "$CONFIG_PCI" = "y" ]; then
- dep_tristate 'Tekram DC390(T) and Am53/79C974 SCSI support' CONFIG_SCSI_DC390T $CONFIG_SCSI
- if [ "$CONFIG_SCSI_DC390T" != "n" ]; then
- bool ' _omit_ support for non-DC390 adapters' CONFIG_SCSI_DC390T_NOGENSUPP
- fi
+ dep_tristate 'Tekram DC390(T) and Am53/79C974 SCSI support' CONFIG_SCSI_DC390T $CONFIG_SCSI
+ if [ "$CONFIG_SCSI_DC390T" != "n" ]; then
+ bool ' _omit_ support for non-DC390 adapters' CONFIG_SCSI_DC390T_NOGENSUPP
+ fi
fi
dep_tristate 'Trantor T128/T128F/T228 SCSI support' CONFIG_SCSI_T128 $CONFIG_SCSI
dep_tristate 'UltraStor 14F/34F support' CONFIG_SCSI_U14_34F $CONFIG_SCSI
- if [ "$CONFIG_SCSI_U14_34F" != "n" ]; then
- bool ' enable elevator sorting' CONFIG_SCSI_U14_34F_LINKED_COMMANDS
- int ' maximum number of queued commands' CONFIG_SCSI_U14_34F_MAX_TAGS 8
- fi
+ if [ "$CONFIG_SCSI_U14_34F" != "n" ]; then
+ bool ' enable elevator sorting' CONFIG_SCSI_U14_34F_LINKED_COMMANDS
+ int 'maximum number of queued commands' CONFIG_SCSI_U14_34F_MAX_TAGS 8
+ fi
dep_tristate 'UltraStor SCSI support' CONFIG_SCSI_ULTRASTOR $CONFIG_SCSI
#
# Note - this is a very special 'host' adapter that simulates the presence of some disks.
@@ -145,19 +146,19 @@ dep_tristate 'UltraStor SCSI support' CONFIG_SCSI_ULTRASTOR $CONFIG_SCSI
# simulate various conditions that I am testing.
#
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- dep_tristate 'SCSI debugging host adapter' CONFIG_SCSI_DEBUG $CONFIG_SCSI
+ dep_tristate 'SCSI debugging host simulator (EXPERIMENTAL)' CONFIG_SCSI_DEBUG $CONFIG_SCSI
fi
if [ "$CONFIG_PPC" = "y" ]; then
- dep_tristate 'MESH (Power Mac internal SCSI) support' CONFIG_SCSI_MESH $CONFIG_SCSI
- if [ "$CONFIG_SCSI_MESH" != "n" ]; then
- int ' maximum synchronous transfer rate (MB/s) (0 = async)' CONFIG_SCSI_MESH_SYNC_RATE 5
- fi
- dep_tristate '53C94 (Power Mac external SCSI) support' CONFIG_SCSI_MAC53C94 $CONFIG_SCSI
+ dep_tristate 'MESH (Power Mac internal SCSI) support' CONFIG_SCSI_MESH $CONFIG_SCSI
+ if [ "$CONFIG_SCSI_MESH" != "n" ]; then
+ int 'maximum synchronous transfer rate (MB/s) (0 = async)' CONFIG_SCSI_MESH_SYNC_RATE 5
+ fi
+ dep_tristate '53C94 (Power Mac external SCSI) support' CONFIG_SCSI_MAC53C94 $CONFIG_SCSI
fi
if [ "$CONFIG_ARCH_ACORN" = "y" ]; then
- source drivers/acorn/scsi/Config.in
+ source drivers/acorn/scsi/Config.in
fi
if [ "$CONFIG_MIPS_JAZZ" = "y" ]; then
- bool 'MIPS JAZZ FAS216 SCSI support' CONFIG_JAZZ_ESP
+ bool 'MIPS JAZZ FAS216 SCSI support' CONFIG_JAZZ_ESP
fi
endmenu
diff --git a/drivers/scsi/aha152x.c b/drivers/scsi/aha152x.c
index 6fc7e3f24..5c011500a 100644
--- a/drivers/scsi/aha152x.c
+++ b/drivers/scsi/aha152x.c
@@ -344,6 +344,8 @@
#include <linux/ioport.h>
#include <linux/proc_fs.h>
#include <linux/interrupt.h>
+#include <linux/init.h>
+#include <linux/kernel.h>
#include "aha152x.h"
#include <linux/stat.h>
@@ -714,6 +716,7 @@ static int getphase(struct Scsi_Host *shpnt)
}
}
+#if 0
/* called from init/main.c */
void aha152x_setup(char *str, int *ints)
{
@@ -742,6 +745,29 @@ void aha152x_setup(char *str, int *ints)
} else
setup_count++;
}
+#endif
+
+static int __init do_aha152x_setup (char * str)
+{
+ if (setup_count > 2) {
+ printk(KERN_ERR"aha152x: you can only configure up to two
+controllers\n");
+ return 0;
+ }
+
+ setup[setup_count].conf = str;
+ get_option(&str,&setup[setup_count].io_port);
+ get_option(&str,&setup[setup_count].irq);
+ get_option(&str,&setup[setup_count].scsiid);
+ get_option(&str,&setup[setup_count].reconnect);
+
+ setup_count++;
+ return 1;
+}
+
+#ifndef MODULE
+__setup("aha152x=",do_aha152x_setup);
+#endif
/*
* Test, if port_base is valid.
diff --git a/drivers/scsi/mac53c94.c b/drivers/scsi/mac53c94.c
index 5f883856b..5afba45d5 100644
--- a/drivers/scsi/mac53c94.c
+++ b/drivers/scsi/mac53c94.c
@@ -85,7 +85,9 @@ mac53c94_detect(Scsi_Host_Template *tp)
if (host == 0)
panic("couldn't register 53c94 host");
host->unique_id = nfscs;
+#ifndef MODULE
note_scsi_host(node, host);
+#endif
state = (struct fsc_state *) host->hostdata;
if (state == 0)
diff --git a/drivers/scsi/mac53c94.h b/drivers/scsi/mac53c94.h
index 914e89cf9..3aed6ae0c 100644
--- a/drivers/scsi/mac53c94.h
+++ b/drivers/scsi/mac53c94.h
@@ -28,6 +28,7 @@ int mac53c94_reset(Scsi_Cmnd *, unsigned int);
sg_tablesize: SG_ALL, \
cmd_per_lun: 1, \
use_clustering: DISABLE_CLUSTERING, \
+ use_new_eh_code: 1, \
}
/*
diff --git a/drivers/scsi/scsi_error.c b/drivers/scsi/scsi_error.c
index 30b1d77bf..4663d694b 100644
--- a/drivers/scsi/scsi_error.c
+++ b/drivers/scsi/scsi_error.c
@@ -1762,33 +1762,21 @@ void scsi_error_handler(void *data)
int rtn;
DECLARE_MUTEX_LOCKED(sem);
unsigned long flags;
- struct fs_struct *fs;
+
+ siginitsetinv(&current->blocked, SHUTDOWN_SIGS);
lock_kernel();
/*
- * If we were started as result of loading a module, close all of the
- * user space pages. We don't need them, and if we didn't close them
- * they would be locked into memory.
+ * Flush resources
*/
- exit_mm(current);
-
- current->session = 1;
- current->pgrp = 1;
-
- /* Become as one with the init task */
-
- exit_fs(current); /* current->fs->count--; */
- fs = init_task.fs;
- current->fs = fs;
- atomic_inc(&fs->count);
-
- siginitsetinv(&current->blocked, SHUTDOWN_SIGS);
-
-
+
+ daemonize();
+
/*
* Set the name of this process.
*/
+
sprintf(current->comm, "scsi_eh_%d", host->host_no);
host->eh_wait = &sem;
diff --git a/drivers/scsi/sr.c b/drivers/scsi/sr.c
index 6ba9a2dd5..22aa1cd8e 100644
--- a/drivers/scsi/sr.c
+++ b/drivers/scsi/sr.c
@@ -861,7 +861,6 @@ void get_sectorsize(int i)
unsigned char *buffer;
int the_result, retries;
Scsi_Cmnd *SCpnt;
- unsigned long flags;
buffer = (unsigned char *) scsi_malloc(512);
SCpnt = scsi_allocate_device(NULL, scsi_CDs[i].device, 1);
@@ -1031,7 +1030,6 @@ static int sr_packet(struct cdrom_device_info *cdi, struct cdrom_generic_command
{
Scsi_Cmnd *SCpnt;
Scsi_Device *device = scsi_CDs[MINOR(cdi->dev)].device;
- unsigned long flags;
int stat;
/* get the device */
diff --git a/drivers/scsi/sym53c8xx.c b/drivers/scsi/sym53c8xx.c
index 4479532b6..83776573c 100644
--- a/drivers/scsi/sym53c8xx.c
+++ b/drivers/scsi/sym53c8xx.c
@@ -55,7 +55,7 @@
*/
/*
-** Sep 10 1999, sym53c8xx 1.5e
+** October 3 1999, sym53c8xx 1.5f
**
** Supported SCSI features:
** Synchronous data transfers
@@ -83,7 +83,7 @@
/*
** Name and version of the driver
*/
-#define SCSI_NCR_DRIVER_NAME "sym53c8xx - version 1.5e"
+#define SCSI_NCR_DRIVER_NAME "sym53c8xx - version 1.5f"
/* #define DEBUG_896R1 */
#define SCSI_NCR_OPTIMIZE_896
@@ -1847,6 +1847,16 @@ struct ncb {
u_long clock_khz; /* SCSI clock frequency in KHz */
/*----------------------------------------------------------------
+ ** Range for the PCI clock frequency measurement result
+ ** that ensures the algorithm used by the driver can be
+ ** trusted for the SCSI clock frequency measurement.
+ ** (Assuming a PCI clock frequency of 33 MHz).
+ **----------------------------------------------------------------
+ */
+ u_int pciclock_min;
+ u_int pciclock_max;
+
+ /*----------------------------------------------------------------
** Start queue management.
** It is filled up by the host processor and accessed by the
** SCRIPTS processor in order to start SCSI commands.
@@ -1993,7 +2003,7 @@ struct ncb {
** of 825A, 875, 876, 895, 895A and 896 chips.
*/
struct script {
- ncrcmd start [ 18];
+ ncrcmd start [ 14];
ncrcmd getjob_begin [ 4];
ncrcmd getjob_end [ 4];
ncrcmd select [ 8];
@@ -2114,7 +2124,7 @@ struct scripth {
ncrcmd bad_identify [ 12];
ncrcmd bad_i_t_l [ 4];
ncrcmd bad_i_t_l_q [ 4];
- ncrcmd bad_status [ 10];
+ ncrcmd bad_status [ 6];
ncrcmd tweak_pmj [ 12];
ncrcmd pm_handle [ 20];
ncrcmd pm_handle1 [ 4];
@@ -2319,15 +2329,14 @@ static struct script script0 __initdata = {
*/
SCR_FROM_REG (istat),
0,
- SCR_JUMPR ^ IFFALSE (MASK (SEM, SEM)),
- 16,
/*
** Report to the C code the next position in
** the start queue the SCRIPTS will schedule.
+ ** The C code must not change SCRATCHA.
*/
SCR_LOAD_ABS (scratcha, 4),
PADDRH (startpos),
- SCR_INT,
+ SCR_INT ^ IFTRUE (MASK (SEM, SEM)),
SIR_SCRIPT_STOPPED,
/*
@@ -2344,8 +2353,6 @@ static struct script script0 __initdata = {
** may happen that the job address is not yet in the DSA
** and the the next queue position points to the next JOB.
*/
- SCR_LOAD_ABS (scratcha, 4),
- PADDRH (startpos),
SCR_LOAD_ABS (dsa, 4),
PADDRH (startpos),
SCR_LOAD_REL (temp, 4),
@@ -3755,17 +3762,14 @@ static struct scripth scripth0 __initdata = {
PADDRH (abort_resel),
}/*-------------------------< BAD_STATUS >-----------------*/,{
/*
- ** If command resulted in either QUEUE FULL,
- ** CHECK CONDITION or COMMAND TERMINATED,
- ** call the C code.
+ ** Anything different from INTERMEDIATE
+ ** CONDITION MET should be a bad SCSI status,
+ ** given that GOOD status has already been tested.
+ ** Call the C code.
*/
SCR_LOAD_ABS (scratcha, 4),
PADDRH (startpos),
- SCR_INT ^ IFTRUE (DATA (S_QUEUE_FULL)),
- SIR_BAD_STATUS,
- SCR_INT ^ IFTRUE (DATA (S_CHECK_COND)),
- SIR_BAD_STATUS,
- SCR_INT ^ IFTRUE (DATA (S_TERMINATED)),
+ SCR_INT ^ IFFALSE (DATA (S_COND_MET)),
SIR_BAD_STATUS,
SCR_RETURN,
0,
@@ -5181,15 +5185,48 @@ printk(KERN_INFO NAME53C "%s-%d: rev=0x%02x, base=0x%lx, io_port=0x%lx, irq=%d\n
(void) ncr_prepare_setting(np, nvram);
/*
- ** Check the PCI clock frequency.
- ** Must be done after prepare_setting since it
- ** destroys STEST1 that is used to probe for
- ** the clock doubler.
- */
- i = (int) ncr_getpciclock(np);
- if (i > 37000) {
- printk(KERN_ERR "%s: PCI clock seems too high (%u KHz).\n",
- ncr_name(np), i);
+ ** Check the PCI clock frequency if needed.
+ **
+ ** Must be done after ncr_prepare_setting since it destroys
+ ** STEST1 that is used to probe for the clock multiplier.
+ **
+ ** The range is currently [22688 - 45375 Khz], given
+ ** the values used by ncr_getclock().
+ ** This calibration of the frequecy measurement
+ ** algorithm against the PCI clock frequency is only
+ ** performed if the driver has had to measure the SCSI
+ ** clock due to other heuristics not having been enough
+ ** to deduce the SCSI clock frequency.
+ **
+ ** When the chip has been initialized correctly by the
+ ** SCSI BIOS, the driver deduces the presence of the
+ ** clock multiplier and the value of the SCSI clock from
+ ** initial values of IO registers, and therefore no
+ ** clock measurement is performed.
+ ** Normally the driver should never have to measure any
+ ** clock, unless the controller may use a 80 MHz clock
+ ** or has a clock multiplier and any of the following
+ ** condition is met:
+ **
+ ** - No SCSI BIOS is present.
+ ** - SCSI BIOS did'nt enable the multiplier for some reason.
+ ** - User has disabled the controller from the SCSI BIOS.
+ ** - User booted the O/S from another O/S that did'nt enable
+ ** the multiplier for some reason.
+ **
+ ** As a result, the driver may only have to measure some
+ ** frequency in very unusual situations.
+ **
+ ** For this reality test against the PCI clock to really
+ ** protect against flaws in the udelay() calibration or
+ ** driver problem that affect the clock measurement
+ ** algorithm, the actual PCI clock frequency must be 33 MHz.
+ */
+ i = np->pciclock_max ? ncr_getpciclock(np) : 0;
+ if (i && (i < np->pciclock_min || i > np->pciclock_max)) {
+ printk(KERN_ERR "%s: PCI clock (%u KHz) is out of range "
+ "[%u KHz - %u KHz].\n",
+ ncr_name(np), i, np->pciclock_min, np->pciclock_max);
goto attach_error;
}
@@ -8509,82 +8546,64 @@ static void ncr_sir_to_redo(ncb_p np, int num, ccb_p cp)
u_int32 startp;
u_char s_status = INB (SS_PRT);
int msglen;
+ int i, j;
+
/*
+ ** If the LCB is not yet available, then only
+ ** 1 IO is accepted, so we should have it.
+ */
+ if (!lp)
+ goto next;
+ /*
** Remove all CCBs queued to the chip for that LUN and put
** them back in the LUN CCB wait queue.
*/
- if (lp) {
- int i = np->squeueput;
- int j = (INL (nc_scratcha) - vtobus(np->squeue)) / 4;
- int k = np->squeueput;
-
- busyccbs = lp->queuedccbs;
- while (1) {
- if (i == j)
- break;
- if (i == 0)
- i = MAX_START*2;
- i = i - 2;
- cp2 = ncr_ccb_from_dsa(np, scr_to_cpu(np->squeue[i]));
- if (!cp2)
- continue;
- if (cp2->target != cp->target || cp2->lun != cp->lun)
- continue;
+ busyccbs = lp->queuedccbs;
+ i = (INL (nc_scratcha) - vtobus(np->squeue)) / 4;
+ j = i;
+ while (i != np->squeueput) {
+ cp2 = ncr_ccb_from_dsa(np, scr_to_cpu(np->squeue[i]));
+ assert(cp2);
#ifdef SCSI_NCR_IARB_SUPPORT
- cp2->host_flags &= ~HF_HINT_IARB;
- if (cp2 == np->last_cp)
- np->last_cp = 0;
+ /* IARB hints may not be relevant any more. Forget them. */
+ cp2->host_flags &= ~HF_HINT_IARB;
#endif
+ if (cp2 && cp2->target == cp->target && cp2->lun == cp->lun) {
xpt_remque(&cp2->link_ccbq);
xpt_insque_head(&cp2->link_ccbq, &lp->wait_ccbq);
--lp->queuedccbs;
cp2->queued = 0;
- np->squeue[i] = DSA_INVALID;
- k = i;
}
+ else {
+ if (i != j)
+ np->squeue[j] = np->squeue[i];
+ if ((j += 2) >= MAX_START*2) j = 0;
+ }
+ if ((i += 2) >= MAX_START*2) i = 0;
+ }
+ if (i != j) /* Copy back the idle task if needed */
+ np->squeue[j] = np->squeue[i];
+ np->squeueput = j; /* Update our current start queue pointer */
- /*
- ** Requeue the interrupted CCB in front of
- ** the LUN CCB wait queue.
- */
-#ifdef SCSI_NCR_IARB_SUPPORT
- cp->host_flags &= ~HF_HINT_IARB;
- if (cp == np->last_cp)
- np->last_cp = 0;
-#endif
- xpt_remque(&cp->link_ccbq);
- xpt_insque_head(&cp->link_ccbq, &lp->wait_ccbq);
- --lp->queuedccbs;
- cp->queued = 0;
+ /*
+ ** Requeue the interrupted CCB in front of the
+ ** LUN CCB wait queue to preserve ordering.
+ */
+ xpt_remque(&cp->link_ccbq);
+ xpt_insque_head(&cp->link_ccbq, &lp->wait_ccbq);
+ --lp->queuedccbs;
+ cp->queued = 0;
+
+next:
#ifdef SCSI_NCR_IARB_SUPPORT
- if (np->last_cp)
- np->last_cp->host_flags &= ~HF_HINT_IARB;
+ /* IARB hint may not be relevant any more. Forget it. */
+ cp->host_flags &= ~HF_HINT_IARB;
+ if (np->last_cp)
+ np->last_cp = 0;
#endif
- /*
- ** Repair the startqueue if necessary.
- */
- if (k != np->squeueput) {
- j = k;
- while (1) {
- j += 2;
- if (j >= MAX_START*2)
- j = 0;
- if (np->squeue[j] == DSA_INVALID)
- continue;
- np->squeue[k] = np->squeue[j];
- if (j == np->squeueput)
- break;
- k += 2;
- if (k >= MAX_START*2)
- k = 0;
- }
- np->squeueput = k;
- }
- }
-
/*
** Now we can restart the SCRIPTS processor safely.
*/
@@ -8592,7 +8611,10 @@ static void ncr_sir_to_redo(ncb_p np, int num, ccb_p cp)
OUTL (nc_dsp, NCB_SCRIPT_PHYS (np, start));
switch(s_status) {
- default: /* Just for safety, should never happen */
+ default:
+ case S_BUSY:
+ ncr_complete(np, cp);
+ break;
case S_QUEUE_FULL:
if (!lp || !lp->queuedccbs) {
ncr_complete(np, cp);
@@ -8951,6 +8973,7 @@ static void ncr_sir_task_recovery(ncb_p np, int num)
assert(k != -1);
if (k != 1) {
np->squeue[k] = np->squeue[i]; /* Idle task */
+ np->squeueput = k; /* Start queue pointer */
cp->host_status = HS_ABORTED;
cp->scsi_status = S_ILLEGAL;
ncr_complete(np, cp);
@@ -10944,11 +10967,18 @@ static void __init ncr_getclock (ncb_p np, int mult)
if (bootverbose)
printk ("%s: NCR clock is %uKHz\n", ncr_name(np), f1);
- if (f1 < 45000) f1 = 40000;
- else if (f1 < 55000) f1 = 50000;
+ if (f1 < 55000) f1 = 40000;
else f1 = 80000;
- if (f1 < 80000 && mult > 1) {
+ /*
+ ** Suggest to also check the PCI clock frequency
+ ** to make sure our frequency calculation algorithm
+ ** is not too biased.
+ */
+ np->pciclock_min = (33000*55+80-1)/80;
+ np->pciclock_max = (33000*55)/40;
+
+ if (f1 == 40000 && mult > 1) {
if (bootverbose >= 2)
printk ("%s: clock multiplier assumed\n", ncr_name(np));
np->multiplier = mult;
@@ -10973,13 +11003,12 @@ static void __init ncr_getclock (ncb_p np, int mult)
*/
static u_int __init ncr_getpciclock (ncb_p np)
{
- static u_int f = 0;
+ static u_int f;
+
+ OUTB (nc_stest1, SCLK); /* Use the PCI clock as SCSI clock */
+ f = ncr_getfreq (np);
+ OUTB (nc_stest1, 0);
- if (!f) {
- OUTB (nc_stest1, SCLK); /* Use the PCI clock as SCSI clock */
- f = ncr_getfreq (np);
- OUTB (nc_stest1, 0);
- }
return f;
}
diff --git a/drivers/sgi/Config.in b/drivers/sgi/Config.in
index 40f024178..5c174edb1 100644
--- a/drivers/sgi/Config.in
+++ b/drivers/sgi/Config.in
@@ -6,13 +6,13 @@ comment 'SGI devices'
bool 'SGI Zilog85C30 serial support' CONFIG_SGI_SERIAL
if [ "$CONFIG_SGI_SERIAL" != "n" ]; then
- define_bool CONFIG_SERIAL y
+ define_bool CONFIG_SERIAL y
fi
bool 'SGI DS1286 RTC support' CONFIG_SGI_DS1286
if [ "$CONFIG_EXPERIMENTAL" = "y" ]; then
- tristate 'SGI Newport Graphics support' CONFIG_SGI_NEWPORT_GFX
+ tristate 'SGI Newport Graphics support' CONFIG_SGI_NEWPORT_GFX
fi
endmenu
diff --git a/drivers/sound/ac97.h b/drivers/sound/ac97.h
index 3269337d5..490d69f88 100644
--- a/drivers/sound/ac97.h
+++ b/drivers/sound/ac97.h
@@ -33,6 +33,19 @@
/* registers 0x0028 - 0x0058 are reserved */
+/* AC'97 2.0 */
+#define AC97_EXTENDED_ID 0x0028 /* Extended Audio ID */
+#define AC97_EXTENDED_STATUS 0x002A /* Extended Audio Status */
+#define AC97_PCM_FRONT_DAC_RATE 0x002C /* PCM Front DAC Rate */
+#define AC97_PCM_SURR_DAC_RATE 0x002E /* PCM Surround DAC Rate */
+#define AC97_PCM_LFE_DAC_RATE 0x0030 /* PCM LFE DAC Rate */
+#define AC97_PCM_LR_DAC_RATE 0x0032 /* PCM LR DAC Rate */
+#define AC97_PCM_MIC_ADC_RATE 0x0034 /* PCM MIC ADC Rate */
+#define AC97_CENTER_LFE_MASTER 0x0036 /* Center + LFE Master Volume */
+#define AC97_SURROUND_MASTER 0x0038 /* Surround (Rear) Master Volume */
+#define AC97_RESERVED_3A 0x003A /* Reserved */
+/* range 0x3c-0x58 - MODEM */
+
/* registers 0x005a - 0x007a are vendor reserved */
#define AC97_VENDOR_ID1 0x007c
diff --git a/drivers/sound/dmasound.c b/drivers/sound/dmasound.c
index 341fb6f97..c6ec28253 100644
--- a/drivers/sound/dmasound.c
+++ b/drivers/sound/dmasound.c
@@ -89,6 +89,7 @@ History:
#include <linux/malloc.h>
#include <linux/sound.h>
#include <linux/init.h>
+#include <linux/delay.h>
#if defined(__mc68000__) || defined(CONFIG_APUS)
#include <asm/setup.h>
@@ -239,7 +240,7 @@ static short beep_wform[256] = {
-269, -245, -218, -187, -153, -117, -79, -40,
};
-#define BEEP_SPEED 2 /* 22050 Hz sample rate */
+#define BEEP_SRATE 22050 /* 22050 Hz sample rate */
#define BEEP_BUFLEN 512
#define BEEP_VOLUME 15 /* 0 - 100 */
@@ -295,7 +296,7 @@ static int numReadBufs = 4, readbufSize = 32;
MODULE_PARM(catchRadius, "i");
MODULE_PARM(numBufs, "i");
MODULE_PARM(bufSize, "i");
-MODULE_PARM(numreadBufs, "i");
+MODULE_PARM(numReadBufs, "i");
MODULE_PARM(readbufSize, "i");
#define arraysize(x) (sizeof(x)/sizeof(*(x)))
@@ -3209,6 +3210,7 @@ static void PMacSilence(void)
static int awacs_freqs[8] = {
44100, 29400, 22050, 17640, 14700, 11025, 8820, 7350
};
+static int awacs_freqs_ok[8] = { 1, 1, 1, 1, 1, 1, 1, 1 };
static void PMacInit(void)
{
@@ -3232,10 +3234,13 @@ static void PMacInit(void)
* Otherwise choose the next higher rate.
* N.B.: burgundy awacs (iMac and later) only works at 44100 Hz.
*/
- i = (awacs_revision >= AWACS_BURGUNDY)? 1: 8;
+ i = 8;
do {
tolerance = catchRadius * awacs_freqs[--i] / 100;
- } while (sound.soft.speed > awacs_freqs[i] + tolerance && i > 0);
+ if (awacs_freqs_ok[i]
+ && sound.soft.speed <= awacs_freqs[i] + tolerance)
+ break;
+ } while (i > 0);
if (sound.soft.speed >= awacs_freqs[i] - tolerance)
sound.trans = &transAwacsNormal;
else
@@ -3529,8 +3534,8 @@ static struct timer_list beep_timer = {
static void awacs_mksound(unsigned int hz, unsigned int ticks)
{
unsigned long flags;
- int beep_speed = (awacs_revision < AWACS_BURGUNDY)? BEEP_SPEED: 0;
- int srate = awacs_freqs[beep_speed];
+ int beep_speed = 0;
+ int srate;
int period, ncycles, nsamples;
int i, j, f;
short *p;
@@ -3538,6 +3543,11 @@ static void awacs_mksound(unsigned int hz, unsigned int ticks)
static int beep_nsamples_cache;
static int beep_volume_cache;
+ for (i = 0; i < 8 && awacs_freqs[i] >= BEEP_SRATE; ++i)
+ if (awacs_freqs_ok[i])
+ beep_speed = i;
+ srate = awacs_freqs[beep_speed];
+
if (hz <= srate / BEEP_BUFLEN || hz > srate / 2) {
#if 1
/* this is a hack for broken X server code */
@@ -3625,6 +3635,12 @@ static int awacs_sleep_notify(struct pmu_sleep_notifier *self, int when)
out_le32(&awacs->byteswap, sound.hard.format != AFMT_S16_BE);
enable_irq(awacs_irq);
enable_irq(awacs_tx_irq);
+ if (awacs_revision == 3) {
+ mdelay(100);
+ awacs_write(0x6000);
+ mdelay(2);
+ awacs_write(awacs_reg[1] | MASK_ADDR1);
+ }
}
return PBOOK_SLEEP_OK;
}
@@ -3667,7 +3683,7 @@ static unsigned
awacs_burgundy_rcw(unsigned addr)
{
unsigned val = 0;
- int flags;
+ unsigned long flags;
/* should have timeouts here */
save_flags(flags); cli();
@@ -3709,7 +3725,7 @@ static unsigned
awacs_burgundy_rcb(unsigned addr)
{
unsigned val = 0;
- int flags;
+ unsigned long flags;
/* should have timeouts here */
save_flags(flags); cli();
@@ -5497,12 +5513,41 @@ void __init dmasound_init(void)
np = find_devices("davbus");
sound = find_devices("sound");
if (sound != 0 && sound->parent == np) {
- int *sfprop;
- sfprop = (int *) get_property(sound, "sub-frame", 0);
- if (sfprop != 0 && *sfprop >= 0 && *sfprop < 16)
- awacs_subframe = *sfprop;
+ unsigned int *prop, l, i;
+ prop = (unsigned int *)
+ get_property(sound, "sub-frame", 0);
+ if (prop != 0 && *prop >= 0 && *prop < 16)
+ awacs_subframe = *prop;
if (device_is_compatible(sound, "burgundy"))
awacs_revision = AWACS_BURGUNDY;
+
+ /* look for a property saying what sample rates
+ are available */
+ for (i = 0; i < 8; ++i)
+ awacs_freqs_ok[i] = 0;
+ prop = (unsigned int *) get_property
+ (sound, "sample-rates", &l);
+ if (prop == 0)
+ prop = (unsigned int *) get_property
+ (sound, "output-frame-rates", &l);
+ if (prop != 0) {
+ for (l /= sizeof(int); l > 0; --l) {
+ /* sometimes the rate is in the
+ high-order 16 bits (?) */
+ unsigned int r = *prop++;
+ if (r >= 0x10000)
+ r >>= 16;
+ for (i = 0; i < 8; ++i) {
+ if (r == awacs_freqs[i]) {
+ awacs_freqs_ok[i] = 1;
+ break;
+ }
+ }
+ }
+ } else {
+ /* assume just 44.1k is OK */
+ awacs_freqs_ok[0] = 1;
+ }
}
}
if (np != NULL && np->n_addrs >= 3 && np->n_intrs >= 3) {
diff --git a/drivers/sound/maestro.c b/drivers/sound/maestro.c
index e0ed9e33a..f64554dee 100644
--- a/drivers/sound/maestro.c
+++ b/drivers/sound/maestro.c
@@ -40,14 +40,14 @@
* channels. They can take data from a number of sources and perform
* basic encodings of the data. The wavecache is a storehouse for
* PCM data. Typically it deals with PCI and interracts with the
- * APUs. The ASP is a wacky DSP like device that ESS is loathe
+ * APUs. The ASP is a wacky DSP like device that ESS is loth
* to release docs on. Thankfully it isn't required on the Maestro
* until you start doing insane things like FM emulation and surround
* encoding. The codecs are almost always AC-97 compliant codecs,
* but it appears that early Maestros may have had PT101 (an ESS
* part?) wired to them. The only real difference in the Maestro
* families is external goop like docking capability, memory for
- * the ASP, and trivial initialization differences.
+ * the ASP, and initialization differences.
*
* Driver Operation
*
@@ -70,7 +70,7 @@
* the client and complicates the buffer maths tremendously. Ick.
*
* This also pollutes the recording paths as well. We have to use
- * 2 l/r incoming APUs that are fixed at 16bit/48khz. We then pipe
+ * 2 L/R incoming APUs that are fixed at 16bit/48khz. We then pipe
* these through 2 rate converion apus that mix them down to the
* requested frequency and write them to memory through the wavecache.
* We also apparently need a 512byte region thats used as temp space
@@ -79,21 +79,39 @@
* The wavecache makes our life even more fun. First off, it can
* only address the first 28 bits of PCI address space, making it
* useless on quite a few architectures. Secondly, its insane.
- * It can only fetch from 4 regions of PCI space, each 2 meg in length
- * and 4k aligned. It then uses high bits of the address in the APU
- * to decide which buffer to use, but as far as I can tell can only
- * choose between 2 of the 4 available when you really want to hit
- * PCI space. So all the memory we're touching has to fit in 2 regions
- * of 4 meg under 256meg. So much for dynamic allocation of multiple
- * /dev/dsps. So we force only 1 /dev/dsp, allocate both its read
- * and write buffers contiguously at open(), and allocate the weird
- * mixbuf input APU buffers on another page. The first 2meg region
- * goes to the input/output buffers, and the second region goes to
- * the weird mixbuf. Long term fixes? Get an allocator that lets
- * us try and allocate from zones. Alleviate pain by putting the mixbuf
- * in onboard ram rather than in system memory. Buy a real sound card.
+ * It claims to only fetch from 4 regions of PCI space, each 4 meg in length.
+ * But that doesn't really work. You can only use 1 region. So all our
+ * allocations have to be in 4meg of each other. Booo. Hiss.
+ * So we have a module parameter, dsps_order, that is the order of
+ * the number of dsps to provide. All their buffer space is allocated
+ * on open time. The sonicvibes oss routines we inherited really want
+ * power of 2 buffers, so we have all those next to each other, then
+ * 512 byte regions for the recording wavecaches. This ends up
+ * wasting quite a bit of memory. The only fixes I can see would be
+ * getting a kernel allocator that could work in zones, or figuring out
+ * just how to coerce the WP into doing what we want.
+ *
+ * The indirection of the various registers means we have to spinlock
+ * nearly all register accesses. We have the main register indirection
+ * like the wave cache, maestro registers, etc. Then we have beasts
+ * like the APU interface that is indirect registers gotten at through
+ * the main maestro indirection. Ouch. We spinlock around the actual
+ * ports on a per card basis. This means spinlock activity at each IO
+ * operation, but the only IO operation clusters are in non critical
+ * paths and it makes the code far easier to follow. Interrupts are
+ * blocked while holding the locks because the int handler has to
+ * get at some of them :(. The mixer interface doesn't, however.
+ * We also have an OSS state lock that is thrown around in a few
+ * places.
*
* History
+ * v0.07 - Oct 4 1999 - Zach Brown <zab@redhat.com>
+ * tweak adc/dac, formating, and stuff to allow full duplex
+ * allocate dsps memory at open() so we can fit in the wavecache window
+ * fix wavecache braindamage. again. no more scribbling?
+ * fix ess 1921 codec bug on some laptops.
+ * fix dumb pci scanning bug
+ * started 2.3 cleanup, redid spinlocks, little cleanups
* v0.06 - Sep 20 1999 - Zach Brown <zab@redhat.com>
* fix wavecache thinkos. limit to 1 /dev/dsp.
* eric is wearing his thinking toque this week.
@@ -125,20 +143,10 @@
* look really hard at the apu/bob/dma buffer code paths.
* fix bob frequency
* do smart things with ac97 2.0 bits.
- * fix wavecache so multiple /dev/dsps work
* test different sized writes
* fixup latencies ?
* get apm save/restore working?
- * allocate dma bounce page
- * start_adc is called way too often
* sort out 0x34->0x36 crap in init
- * wavecache needs to be looked at, multiple
- * dsps and recording seem confused
- *
- * the entire issue of smp safety needs to be looked at. cli() needs
- * to be replaced with spinlock_irqsave, being very careful of call
- * paths avoiding deadlock. if lock hold times are quick just
- * use one big ass per device spinlock..
*
* apm is kind of a mess. I doubt we can rely on the machine keeping
* power to the maestro/codecs when we suspend. This means we have
@@ -187,13 +195,14 @@
#ifdef M_DEBUG
static int debug=0;
+static int dsps_order=0;
#define M_printk(args...) {if (debug) printk(args);}
#else
#define M_printk(x)
#endif
/* --------------------------------------------------------------------- */
-#define DRIVER_VERSION "0.06"
+#define DRIVER_VERSION "0.07"
#ifndef PCI_VENDOR_ESS
#define PCI_VENDOR_ESS 0x125D
@@ -208,7 +217,6 @@ static int debug=0;
#define ESS_CHAN_HARD 0x100
-#undef CONFIG_APM /* see notes above */
/* changed so that I could actually find all the
references and fix them up. its a little more readable now. */
@@ -218,16 +226,15 @@ static int debug=0;
#define ESS_DAC_SHIFT 0
#define ESS_ADC_SHIFT 4
-#define ESS_ENABLE_PE 1
-#define ESS_ENABLE_RE 2
-
#define ESS_STATE_MAGIC 0x125D1968
#define ESS_CARD_MAGIC 0x19283746
#define DAC_RUNNING 1
#define ADC_RUNNING 2
-#define NR_DSPS 1 /* our wavecache setup demands this. */
+#define MAX_DSP_ORDER 3
+#define MAX_DSPS (1<<3)
+#define NR_DSPS (1<<dsps_order)
#define SND_DEV_DSP16 5
@@ -260,10 +267,14 @@ struct ess_state {
unsigned int rateadc, ratedac;
unsigned char fmt, enable;
+ int index;
+
+ /* this locks around the oss state in the driver */
spinlock_t lock;
+ /* only let 1 be opening at a time */
struct semaphore open_sem;
- mode_t open_mode;
wait_queue_head_t open_wait;
+ mode_t open_mode;
/* soundcore stuff */
int dev_audio;
@@ -286,7 +297,7 @@ struct ess_state {
unsigned fragsamples;
/* OSS stuff */
unsigned mapped:1;
- unsigned ready:1;
+ unsigned ready:1; /* our oss buffers are ready to go */
unsigned endcleared:1;
unsigned ossfragshift;
int ossmaxfrags;
@@ -294,7 +305,6 @@ struct ess_state {
u16 base; /* Offset for ptr */
} dma_dac, dma_adc;
-
/* pointer to each dsp?s piece of the apu->src buffer page */
void *mixbuf;
};
@@ -323,7 +333,7 @@ struct ess_card {
unsigned int mixer_state[SOUND_MIXER_NRDEVICES];
} mix;
- struct ess_state channels[NR_DSPS];
+ struct ess_state channels[MAX_DSPS];
u16 maestro_map[32]; /* Register map */
#ifdef CONFIG_APM
/* we have to store this junk so that we can come back from a
@@ -331,16 +341,19 @@ struct ess_card {
u16 apu_map[64][16]; /* contents of apu regs */
#endif
- /* 1 page of DMA-able memory for mixer apu buffers,
- shared amongst dsp?s. */
- void *mixpage;
+ /* this locks around the physical registers on the card */
+ spinlock_t lock;
+
+ /* memory for this card.. wavecache limited :(*/
+ void *dmapages;
+ int dmaorder;
/* hardware resources */
u32 iobase;
u32 irq;
int bob_freq;
- char bob_running;
+ char dsps_open;
};
extern __inline__ unsigned ld2(unsigned int x)
@@ -454,7 +467,6 @@ static u16 maestro_ac97_get(int io, u8 cmd)
be sure to fill it in if you add oss mixers
to anyone's supported mixer defines */
-/* possible __init */
static struct mixer_defaults {
int mixer;
unsigned int value;
@@ -721,42 +733,21 @@ static u16 maestro_ac97_init(struct ess_card *card, int iobase)
card->mix.supported_mixers &= ~(SOUND_MASK_MIC);
card->mix.record_sources = 0;
card->mix.recmask_io = NULL;
- /* no idea what these do */
+#if 0 /* don't ask. I have yet to see what these actually do. */
maestro_ac97_set(iobase,0x76,0xABBA); /* o/~ Take a chance on me o/~ */
udelay(20);
maestro_ac97_set(iobase,0x78,0x3002);
udelay(20);
maestro_ac97_set(iobase,0x78,0x3802);
udelay(20);
+#endif
break;
default: break;
}
-#if 0 /* used to be set, lets try using the codec defaults */
- /* always set headphones to max unmuted, OSS won't
- let us change it :( */
- maestro_ac97_set(iobase, 0x04, 0x0000);
- maestro_ac97_set(iobase, 0x06, 0x0000);
- maestro_ac97_set(iobase, 0x0C, 0x1F1F);
- /* null record select */
- maestro_ac97_set(iobase, 0x1A, 0x0000);
-#endif
maestro_ac97_set(iobase, 0x1E, 0x0404);
/* null misc stuff */
maestro_ac97_set(iobase, 0x20, 0x0000);
- /* the regs are read only, duh :) */
-/* maestro_ac97_set(iobase, 0x26, 0x000F);*/
-
-#if 0 /* this is a really good way to hang
- codecs. we need a better way. */
- if(maestro_ac97_get(iobase,0x36) ==0x8080) {
- int reg;
- printk("maestro: your ac97 might be 2.0, see if this makes sense:\n");
- for(reg = 0x28; reg <= 0x58 ; reg += 2) {
- printk(" 0x%2x: %4x\n",reg,maestro_ac97_get(iobase,reg));
- }
- }
-#endif
return 0;
}
@@ -837,30 +828,46 @@ static void maestro_ac97_reset(int ioaddr)
* The Maestro engineers were a little indirection happy. These indirected
* registers themselves include indirect registers at another layer
*/
+
+static void __maestro_write(struct ess_card *card, u16 reg, u16 data)
+{
+ long ioaddr = card->iobase;
+
+ outw(reg, ioaddr+0x02);
+ outw(data, ioaddr+0x00);
+ card->maestro_map[reg]=data;
+
+}
static void maestro_write(struct ess_state *ess, u16 reg, u16 data)
{
- long ioaddr = ess->card->iobase;
unsigned long flags;
- save_flags(flags);
- cli();
+
+ spin_lock_irqsave(&ess->card->lock,flags);
+
+ __maestro_write(ess->card,reg,data);
+
+ spin_unlock_irqrestore(&card->lock,flags);
+}
+
+static u16 __maestro_read(struct ess_card *card, u16 reg)
+{
+ long ioaddr = card->iobase;
+
outw(reg, ioaddr+0x02);
- outw(data, ioaddr+0x00);
- ess->card->maestro_map[reg]=data;
- restore_flags(flags);
+ return card->maestro_map[reg]=inw(ioaddr+0x00);
}
static u16 maestro_read(struct ess_state *ess, u16 reg)
{
- long ioaddr = ess->card->iobase;
if(READABLE_MAP & (1<<reg))
{
unsigned long flags;
- save_flags(flags);
- cli();
- outw(reg, ioaddr+0x02);
- ess->card->maestro_map[reg]=inw(ioaddr+0x00);
- restore_flags(flags);
+ spin_lock_irqsave(&ess->card->lock,flags);
+
+ __maestro_read(ess->card,reg);
+
+ spin_unlock_irqrestore(&ess->card->lock,flags);
}
return ess->card->maestro_map[reg];
}
@@ -883,24 +890,24 @@ static u16 maestro_read(struct ess_state *ess, u16 reg)
#define IDR6_TIMER_CTRL 0x06
#define IDR7_WAVE_ROMRAM 0x07
-static void apu_index_set(struct ess_state *ess, u16 index)
+static void apu_index_set(struct ess_card *card, u16 index)
{
int i;
- maestro_write(ess, IDR1_CRAM_POINTER, index);
+ __maestro_write(card, IDR1_CRAM_POINTER, index);
for(i=0;i<1000;i++)
- if(maestro_read(ess, IDR1_CRAM_POINTER)==index)
+ if(__maestro_read(card, IDR1_CRAM_POINTER)==index)
return;
printk(KERN_WARNING "maestro: APU register select failed.\n");
}
-static void apu_data_set(struct ess_state *ess, u16 data)
+static void apu_data_set(struct ess_card *card, u16 data)
{
int i;
for(i=0;i<1000;i++)
{
- if(maestro_read(ess, IDR0_DATA_PORT)==data)
+ if(__maestro_read(card, IDR0_DATA_PORT)==data)
return;
- maestro_write(ess, IDR0_DATA_PORT, data);
+ __maestro_write(card, IDR0_DATA_PORT, data);
}
}
@@ -929,11 +936,13 @@ static void apu_set_register(struct ess_state *ess, u16 channel, u8 reg, u16 dat
#endif
reg|=(channel<<4);
- save_flags(flags);
- cli();
- apu_index_set(ess, reg);
- apu_data_set(ess, data);
- restore_flags(flags);
+ /* hooray for double indirection!! */
+ spin_lock_irqsave(&ess->card->lock,flags);
+
+ apu_index_set(ess->card, reg);
+ apu_data_set(ess->card, data);
+
+ spin_unlock_irqrestore(&ess->card->lock,flags);
}
static u16 apu_get_register(struct ess_state *ess, u16 channel, u8 reg)
@@ -948,11 +957,12 @@ static u16 apu_get_register(struct ess_state *ess, u16 channel, u8 reg)
reg|=(channel<<4);
- save_flags(flags);
- cli();
- apu_index_set(ess, reg);
- v=maestro_read(ess, IDR0_DATA_PORT);
- restore_flags(flags);
+ spin_lock_irqsave(&ess->card->lock,flags);
+
+ apu_index_set(ess->card, reg);
+ v=__maestro_read(ess->card, IDR0_DATA_PORT);
+
+ spin_unlock_irqrestore(&ess->card->lock,flags);
return v;
}
@@ -967,11 +977,12 @@ static void wave_set_register(struct ess_state *ess, u16 reg, u16 value)
long ioaddr = ess->card->iobase;
unsigned long flags;
- save_flags(flags);
- cli();
+ spin_lock_irqsave(&ess->card->lock,flags);
+
outw(reg, ioaddr+0x10);
outw(value, ioaddr+0x12);
- restore_flags(flags);
+
+ spin_unlock_irqrestore(&ess->card->lock,flags);
}
static u16 wave_get_register(struct ess_state *ess, u16 reg)
@@ -980,11 +991,10 @@ static u16 wave_get_register(struct ess_state *ess, u16 reg)
unsigned long flags;
u16 value;
- save_flags(flags);
- cli();
+ spin_lock_irqsave(&ess->card->lock,flags);
outw(reg, ioaddr+0x10);
value=inw(ioaddr+0x12);
- restore_flags(flags);
+ spin_unlock_irqrestore(&ess->card->lock,flags);
return value;
}
@@ -1085,6 +1095,70 @@ static void set_adc_rate(struct ess_state *s, unsigned rate)
apu_set_register(s, 5, 3, freq>>8);
}
+/* Stop our host of recording apus */
+extern inline void stop_adc(struct ess_state *s)
+{
+ /* XXX lets hope we don't have to lock around this */
+ if (! (s->enable & ADC_RUNNING)) return;
+
+ s->enable &= ~ADC_RUNNING;
+ apu_set_register(s, 2, 0, apu_get_register(s, 2, 0)&0xFF0F);
+ apu_set_register(s, 3, 0, apu_get_register(s, 3, 0)&0xFF0F);
+ apu_set_register(s, 4, 0, apu_get_register(s, 2, 0)&0xFF0F);
+ apu_set_register(s, 5, 0, apu_get_register(s, 3, 0)&0xFF0F);
+}
+
+/* stop output apus */
+extern inline void stop_dac(struct ess_state *s)
+{
+ /* XXX have to lock around this? */
+ if (! (s->enable & DAC_RUNNING)) return;
+
+ s->enable &= ~DAC_RUNNING;
+ apu_set_register(s, 0, 0, apu_get_register(s, 0, 0)&0xFF0F);
+ apu_set_register(s, 1, 0, apu_get_register(s, 1, 0)&0xFF0F);
+}
+
+static void start_dac(struct ess_state *s)
+{
+ /* XXX locks? */
+ if ( (s->dma_dac.mapped || s->dma_dac.count > 0) &&
+ s->dma_dac.ready &&
+ (! (s->enable & DAC_RUNNING)) ) {
+
+ s->enable |= DAC_RUNNING;
+
+ apu_set_register(s, 0, 0,
+ (apu_get_register(s, 0, 0)&0xFF0F)|s->apu_mode[0]);
+
+ if((s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_STEREO)
+ apu_set_register(s, 1, 0,
+ (apu_get_register(s, 1, 0)&0xFF0F)|s->apu_mode[1]);
+ }
+}
+
+static void start_adc(struct ess_state *s)
+{
+ /* XXX locks? */
+ if ((s->dma_adc.mapped || s->dma_adc.count < (signed)(s->dma_adc.dmasize - 2*s->dma_adc.fragsize))
+ && s->dma_adc.ready && (! (s->enable & ADC_RUNNING)) ) {
+
+ s->enable |= ADC_RUNNING;
+ apu_set_register(s, 2, 0,
+ (apu_get_register(s, 2, 0)&0xFF0F)|s->apu_mode[2]);
+ apu_set_register(s, 4, 0,
+ (apu_get_register(s, 4, 0)&0xFF0F)|s->apu_mode[4]);
+
+ if( s->fmt & (ESS_FMT_STEREO << ESS_ADC_SHIFT)) {
+ apu_set_register(s, 3, 0,
+ (apu_get_register(s, 3, 0)&0xFF0F)|s->apu_mode[3]);
+ apu_set_register(s, 5, 0,
+ (apu_get_register(s, 5, 0)&0xFF0F)|s->apu_mode[5]);
+ }
+
+ }
+}
+
/*
* Native play back driver
@@ -1115,29 +1189,6 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
{
int i;
- /*
- * To understand this it helps to know how the
- * wave cache works. There are 4 DSP wavecache
- * blocks which are 0x1FC->0x1FF. They are selected
- * by setting bits 22,21,20 of the address to
- * 1 X Y where X Y select the block.
- *
- * In addition stereo pairing is supported. This is
- * set in the wave cache control for the channel as is
- * 8bit unsigned.
- *
- * Note that this causes a problem. With our limit of
- * about 12 full duplex pairs (48 channels active) we
- * will need to do a lot of juggling to get all the
- * memory we want sufficiently close together.
- *
- * Even with 64K blocks that means
- * 24 channel pairs
- * 6 pairs/block
- *
- * 10K per channel pair = 5000 samples.
- */
-
if(!channel)
pa = virt_to_bus(buffer);
else
@@ -1145,9 +1196,6 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
*2 accomodates for rampant shifting earlier */
pa = virt_to_bus(buffer + size*2);
- /* play bufs are in the same first region as record bufs */
- wave_set_register(ess, 0x01FC , (pa&0xFFE00000)>>12);
-
/* set the wavecache control reg */
tmpval = (pa - 0x10) & 0xFFF8;
#if 0
@@ -1200,6 +1248,10 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
else
apu_set_register(ess, channel, 10, 0x8F08);
+ if(mode&ESS_FMT_16BIT)
+ ess->apu_mode[channel]=0x10;
+ else
+ ess->apu_mode[channel]=0x30;
}
/* clear WP interupts */
@@ -1207,24 +1259,9 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
/* enable WP ints */
outw(inw(ess->card->iobase+0x18)|4, ess->card->iobase+0x18);
+ /* go team! */
set_dac_rate(ess,rate);
-
- for(channel=0; channel<=high_apu; channel++)
- {
- /* Turn on the DMA */
- if(mode&ESS_FMT_16BIT)
- {
- apu_set_register(ess, channel, 0,
- (apu_get_register(ess, channel, 0)&0xFF0F)|0x10);
- ess->apu_mode[channel]=0x10;
- }
- else
- {
- apu_set_register(ess, channel, 0,
- (apu_get_register(ess, channel, 0)&0xFF0F)|0x30);
- ess->apu_mode[channel]=0x30;
- }
- }
+ start_dac(ess);
}
/*
@@ -1232,11 +1269,11 @@ static void ess_play_setup(struct ess_state *ess, int mode, u32 rate, void *buff
*/
/* again, passed mode is alrady shifted/masked */
-static void ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffer, int size)
+static void
+ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffer, int size)
{
int apu_step = 2;
int channel;
- u8 apu_type;
M_printk("maestro: ess_rec_setup: mode=%d rate=%d buf=0x%p len=%d.\n",
mode, rate, buffer, size);
@@ -1279,6 +1316,7 @@ static void ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffe
/* we source from a 'magic' apu */
bsize = PAGE_SIZE >> 5; /* half of this channels alloc, in words */
route = 0x14 + (channel - 4); /* parallel in crap, see maestro reg 0xC [8-11] */
+ ess->apu_mode[channel] = 0x90; /* Input Mixer */
} else {
/* we're a rate converter taking
@@ -1292,6 +1330,8 @@ static void ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffe
pa = virt_to_bus(buffer + size*2);
}
+ ess->apu_mode[channel] = 0xB0; /* Sample Rate Converter */
+
bsize = size;
/* get input from inputing apu */
route = channel + 2;
@@ -1299,9 +1339,6 @@ static void ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffe
M_printk("maestro: ess_rec_setup: getting pa 0x%x from %d\n",pa,channel);
- /* put our base address in the right region */
- wave_set_register(ess, 0x01FC + (channel >> 2), (pa&0xFFE00000)>>12);
-
/* set the wavecache control reg */
tmpval = (pa - 0x10) & 0xFFF8;
wave_set_register(ess, ess->apu[channel]<<3, tmpval);
@@ -1315,9 +1352,6 @@ static void ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffe
pa|=0x00400000; /* bit 22 -> System RAM */
- if ( channel & 4)
- pa|=0x00200000; /* bit 21 -> second region for mixbuf */
-
M_printk("maestro: ess_rec_setup: APU[%d] pa = 0x%x size = 0x%x route = 0x%x\n",
ess->apu[channel], pa, bsize, route);
@@ -1356,20 +1390,9 @@ static void ess_rec_setup(struct ess_state *ess, int mode, u32 rate, void *buffe
/* enable WP ints */
outw(inw(ess->card->iobase+0x18)|4, ess->card->iobase+0x18);
+ /* let 'er rip */
set_adc_rate(ess,rate);
-
- for(channel=2; channel<6; channel+=apu_step)
- {
- if(channel & 0x04) {
- apu_type = 0x90; /* Input Mixer */
- } else {
- apu_type = 0xB0; /* Sample Rate Converter */
- }
-
- apu_set_register(ess, channel, 0,
- (apu_get_register(ess, channel, 0)&0xFF0F) | apu_type);
- ess->apu_mode[channel] = apu_type;
- }
+ start_adc(ess);
}
/* --------------------------------------------------------------------- */
@@ -1388,12 +1411,17 @@ extern __inline__ unsigned get_dmaa(struct ess_state *s)
{
long ioport = s->card->iobase;
int offset;
+ unsigned long flags;
+
+ spin_lock_irqsave(&s->card->lock,flags);
outw(1, ioport+2);
outw(s->apu[0]<<4|5, ioport);
outw(0, ioport+2);
offset=inw(ioport);
+ spin_unlock_irqrestore(&s->card->lock,flags);
+
/* M_printk("dmaa: offset: %d, base: %d\n",offset,s->dma_dac.base); */
offset-=s->dma_dac.base;
@@ -1406,12 +1434,17 @@ extern __inline__ unsigned get_dmac(struct ess_state *s)
{
long ioport = s->card->iobase;
int offset;
+ unsigned long flags;
+
+ spin_lock_irqsave(&s->card->lock,flags);
outw(1, ioport+2);
outw(s->apu[2]<<4|5, ioport);
outw(0, ioport+2);
offset=inw(ioport);
+ spin_unlock_irqrestore(&s->card->lock,flags);
+
/* M_printk("dmac: offset: %d, base: %d\n",offset,s->dma_adc.base); */
/* The offset is an address not a position relative to base */
@@ -1527,113 +1560,23 @@ static void calc_bob_rate(struct ess_state *s) {
}
-/* Stop our host of recording apus */
-extern inline void stop_adc(struct ess_state *s)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&s->lock, flags);
- s->enable &= ~ADC_RUNNING;
- apu_set_register(s, 2, 0, apu_get_register(s, 2, 0)&0xFF0F);
- apu_set_register(s, 3, 0, apu_get_register(s, 3, 0)&0xFF0F);
- apu_set_register(s, 4, 0, apu_get_register(s, 2, 0)&0xFF0F);
- apu_set_register(s, 5, 0, apu_get_register(s, 3, 0)&0xFF0F);
- spin_unlock_irqrestore(&s->lock, flags);
-}
-
-/* stop output apus */
-extern inline void stop_dac(struct ess_state *s)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&s->lock, flags);
- s->enable &= ~DAC_RUNNING;
- apu_set_register(s, 0, 0, apu_get_register(s, 0, 0)&0xFF0F);
- apu_set_register(s, 1, 0, apu_get_register(s, 1, 0)&0xFF0F);
- spin_unlock_irqrestore(&s->lock, flags);
-}
-
-static void start_dac(struct ess_state *s)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&s->lock, flags);
- if ((s->dma_dac.mapped || s->dma_dac.count > 0) && s->dma_dac.ready) {
- s->enable |= DAC_RUNNING;
-
- apu_set_register(s, 0, 0,
- (apu_get_register(s, 0, 0)&0xFF0F)|s->apu_mode[0]);
-
- if((s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_STEREO)
- apu_set_register(s, 1, 0,
- (apu_get_register(s, 1, 0)&0xFF0F)|s->apu_mode[1]);
- }
- spin_unlock_irqrestore(&s->lock, flags);
-}
-
-static void start_adc(struct ess_state *s)
-{
- unsigned long flags;
-
- spin_lock_irqsave(&s->lock, flags);
- if ((s->dma_adc.mapped || s->dma_adc.count < (signed)(s->dma_adc.dmasize - 2*s->dma_adc.fragsize))
- && s->dma_adc.ready) {
- s->enable |= ADC_RUNNING;
- apu_set_register(s, 2, 0,
- (apu_get_register(s, 2, 0)&0xFF0F)|s->apu_mode[2]);
- apu_set_register(s, 4, 0,
- (apu_get_register(s, 4, 0)&0xFF0F)|s->apu_mode[4]);
- if( s->fmt & (ESS_FMT_STEREO << ESS_ADC_SHIFT)) {
- apu_set_register(s, 3, 0,
- (apu_get_register(s, 3, 0)&0xFF0F)|s->apu_mode[3]);
- apu_set_register(s, 5, 0,
- (apu_get_register(s, 5, 0)&0xFF0F)|s->apu_mode[5]);
- }
-
- }
- spin_unlock_irqrestore(&s->lock, flags);
-}
-
-/* --------------------------------------------------------------------- */
-
-/* we allocate both buffers at once */
-#define DMABUF_DEFAULTORDER (15-PAGE_SHIFT)
-#define DMABUF_MINORDER 2
-
-static void dealloc_dmabuf(struct dmabuf *db)
-{
- unsigned long map, mapend;
-
- if (db->rawbuf) {
- M_printk("maestro: freeing %p\n",db->rawbuf);
- /* undo marking the pages as reserved */
- mapend = MAP_NR(db->rawbuf + (PAGE_SIZE << db->buforder) - 1);
- for (map = MAP_NR(db->rawbuf); map <= mapend; map++)
- clear_bit(PG_reserved, &mem_map[map].flags);
- free_pages((unsigned long)db->rawbuf, db->buforder);
- }
- db->rawbuf = NULL;
- db->mapped = db->ready = 0;
-}
-
-static int prog_dmabuf(struct ess_state *s, unsigned rec)
+static int
+prog_dmabuf(struct ess_state *s, unsigned rec)
{
struct dmabuf *db = rec ? &s->dma_adc : &s->dma_dac;
unsigned rate = rec ? s->rateadc : s->ratedac;
- int order;
unsigned bytepersec;
unsigned bufs;
- unsigned long map, mapend;
unsigned char fmt;
unsigned long flags;
spin_lock_irqsave(&s->lock, flags);
fmt = s->fmt;
if (rec) {
- s->enable &= ~ESS_ENABLE_RE;
+ stop_adc(s);
fmt >>= ESS_ADC_SHIFT;
} else {
- s->enable &= ~ESS_ENABLE_PE;
+ stop_dac(s);
fmt >>= ESS_DAC_SHIFT;
}
spin_unlock_irqrestore(&s->lock, flags);
@@ -1641,47 +1584,6 @@ static int prog_dmabuf(struct ess_state *s, unsigned rec)
db->hwptr = db->swptr = db->total_bytes = db->count = db->error = db->endcleared = 0;
- if (!db->rawbuf) {
- void *rawbuf;
- /* haha, this thing is hacked to hell and back.
- this is so ugly. */
- s->dma_dac.ready = s->dma_dac.mapped = 0;
- s->dma_adc.ready = s->dma_adc.mapped = 0;
-
- /* alloc as big a chunk as we can */
- for (order = DMABUF_DEFAULTORDER; order >= DMABUF_MINORDER; order--)
- if((rawbuf = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, order)))
-
- break;
-
- if (!rawbuf)
- return -ENOMEM;
-
-
- /* we allocated both buffers */
- s->dma_adc.rawbuf = rawbuf;
- s->dma_dac.rawbuf = rawbuf + ( PAGE_SIZE << (order - 1) );
-
- M_printk("maestro: allocated %ld bytes at %p\n",PAGE_SIZE<<order, db->rawbuf);
-
- s->dma_adc.buforder = s->dma_dac.buforder = order - 1;
-
- /* XXX these checks are silly now */
-#if 0
- if ((virt_to_bus(db->rawbuf) ^ (virt_to_bus(db->rawbuf) + (PAGE_SIZE << order) - 1)) & ~0xffff)
- printk(KERN_DEBUG "maestro: DMA buffer crosses 64k boundary: busaddr 0x%lx size %ld\n",
- virt_to_bus(db->rawbuf), PAGE_SIZE << order);
-
-#endif
- if ((virt_to_bus(db->rawbuf) + (PAGE_SIZE << order) - 1) & ~0xffffff)
- printk(KERN_DEBUG "maestro: DMA buffer beyond 16MB: busaddr 0x%lx size %ld\n",
- virt_to_bus(db->rawbuf), PAGE_SIZE << order);
-
- /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
- mapend = MAP_NR(db->rawbuf + (PAGE_SIZE << order) - 1);
- for (map = MAP_NR(db->rawbuf); map <= mapend; map++)
- set_bit(PG_reserved, &mem_map[map].flags);
- }
bytepersec = rate << sample_shift[fmt];
bufs = PAGE_SIZE << db->buforder;
if (db->ossfragshift) {
@@ -1691,12 +1593,12 @@ static int prog_dmabuf(struct ess_state *s, unsigned rec)
db->fragshift = db->ossfragshift;
} else {
/* lets hand out reasonable big ass buffers by default */
- db->fragshift = (db->buforder + PAGE_SHIFT -2);
+ db->fragshift = (db->buforder - 2);
#if 0
db->fragshift = ld2(bytepersec/100/(db->subdivision ? db->subdivision : 1));
+#endif
if (db->fragshift < 3)
db->fragshift = 3;
-#endif
}
db->numfrag = bufs >> db->fragshift;
while (db->numfrag < 4 && db->fragshift > 3) {
@@ -1709,6 +1611,8 @@ static int prog_dmabuf(struct ess_state *s, unsigned rec)
db->fragsamples = db->fragsize >> sample_shift[fmt];
db->dmasize = db->numfrag << db->fragshift;
+ M_printk("maestro: setup oss: numfrag: %d fragsize: %d dmasize: %d\n",db->numfrag,db->fragsize,db->dmasize);
+
memset(db->rawbuf, (fmt & ESS_FMT_16BIT) ? 0 : 0x80, db->dmasize);
spin_lock_irqsave(&s->lock, flags);
@@ -1727,7 +1631,8 @@ static int prog_dmabuf(struct ess_state *s, unsigned rec)
/* XXX haha, way broken with our split stereo setup. giggle. */
/* only called by ess_write (dac ness ) */
-extern __inline__ void clear_advance(struct ess_state *s)
+static __inline__ void
+clear_advance(struct ess_state *s)
{
unsigned char c = ((s->fmt >> ESS_DAC_SHIFT) & ESS_FMT_16BIT) ? 0 : 0x80;
unsigned char *buf = s->dma_dac.rawbuf;
@@ -1746,7 +1651,8 @@ extern __inline__ void clear_advance(struct ess_state *s)
}
/* call with spinlock held! */
-static void ess_update_ptr(struct ess_state *s)
+static void
+ess_update_ptr(struct ess_state *s)
{
unsigned hwptr;
int diff;
@@ -1771,7 +1677,6 @@ static void ess_update_ptr(struct ess_state *s)
wake_up(&s->dma_adc.wait);
if (!s->dma_adc.mapped) {
if (s->dma_adc.count > (signed)(s->dma_adc.dmasize - ((3 * s->dma_adc.fragsize) >> 1))) {
- s->enable &= ~ESS_ENABLE_RE;
/* FILL ME
wrindir(s, SV_CIENABLE, s->enable); */
stop_adc(s);
@@ -1796,7 +1701,6 @@ static void ess_update_ptr(struct ess_state *s)
s->dma_dac.count -= diff;
/* M_printk("maestro: ess_update_ptr: diff: %d, count: %d\n", diff, s->dma_dac.count); */
if (s->dma_dac.count <= 0) {
- s->enable &= ~ESS_ENABLE_PE;
/* FILL ME
wrindir(s, SV_CIENABLE, s->enable); */
/* XXX how on earth can calling this with the lock held work.. */
@@ -1889,9 +1793,7 @@ static void set_mixer(struct ess_card *card,unsigned int mixer, unsigned int val
static int mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long arg)
{
- unsigned long flags;
int i, val=0;
- struct ess_state *s = &card->channels[0];
VALIDATE_CARD(card);
if (cmd == SOUND_MIXER_INFO) {
@@ -1924,9 +1826,9 @@ static int mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long ar
if(!card->mix.recmask_io) {
val = 0;
} else {
- spin_lock_irqsave(&s->lock, flags);
+ spin_lock(&card->lock);
val = card->mix.recmask_io(card,1,0);
- spin_unlock_irqrestore(&s->lock, flags);
+ spin_unlock(&card->lock);
}
break;
@@ -1953,9 +1855,9 @@ static int mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long ar
return -EINVAL;
/* do we ever want to touch the hardware? */
-/* spin_lock_irqsave(&s->lock, flags);
+/* spin_lock(&card->lock);
val = card->mix.read_mixer(card,i);
- spin_unlock_irqrestore(&s->lock, flags);*/
+ spin_unlock(&card->lock);*/
val = card->mix.mixer_state[i];
/* M_printk("returned 0x%x for mixer %d\n",val,i);*/
@@ -1978,9 +1880,9 @@ static int mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long ar
if (!card->mix.recmask_io) return -EINVAL;
if(! (val &= card->mix.record_sources)) return -EINVAL;
- spin_lock_irqsave(&s->lock, flags);
+ spin_lock(&card->lock);
card->mix.recmask_io(card,0,val);
- spin_unlock_irqrestore(&s->lock, flags);
+ spin_unlock(&card->lock);
return 0;
default:
@@ -1989,9 +1891,9 @@ static int mixer_ioctl(struct ess_card *card, unsigned int cmd, unsigned long ar
if ( ! supported_mixer(card,i))
return -EINVAL;
- spin_lock_irqsave(&s->lock, flags);
+ spin_lock(&card->lock);
set_mixer(card,i,val);
- spin_unlock_irqrestore(&s->lock, flags);
+ spin_unlock(&card->lock);
return 0;
}
@@ -2062,16 +1964,17 @@ static /*const*/ struct file_operations ess_mixer_fops = {
static int drain_dac(struct ess_state *s, int nonblock)
{
- DECLARE_WAITQUEUE(wait, current);
+ DECLARE_WAITQUEUE(wait,current);
unsigned long flags;
int count;
signed long tmo;
if (s->dma_dac.mapped || !s->dma_dac.ready)
return 0;
- current->state = TASK_INTERRUPTIBLE;
+ current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&s->dma_dac.wait, &wait);
for (;;) {
+ /* XXX uhm.. questionable locking*/
spin_lock_irqsave(&s->lock, flags);
count = s->dma_dac.count;
spin_unlock_irqrestore(&s->lock, flags);
@@ -2081,7 +1984,7 @@ static int drain_dac(struct ess_state *s, int nonblock)
break;
if (nonblock) {
remove_wait_queue(&s->dma_dac.wait, &wait);
- current->state = TASK_RUNNING;
+ current->state = TASK_RUNNING;
return -EBUSY;
}
tmo = (count * HZ) / s->ratedac;
@@ -2092,7 +1995,7 @@ static int drain_dac(struct ess_state *s, int nonblock)
M_printk(KERN_DEBUG "maestro: dma timed out?? %ld\n",jiffies);
}
remove_wait_queue(&s->dma_dac.wait, &wait);
- current->state = TASK_RUNNING;
+ current->state = TASK_RUNNING;
if (signal_pending(current))
return -ERESTARTSYS;
return 0;
@@ -2100,7 +2003,8 @@ static int drain_dac(struct ess_state *s, int nonblock)
/* --------------------------------------------------------------------- */
/* Zach sez: "god this is gross.." */
-int comb_stereo(unsigned char *real_buffer,unsigned char *tmp_buffer, int offset,
+static int
+comb_stereo(unsigned char *real_buffer,unsigned char *tmp_buffer, int offset,
int count, int bufsize)
{
/* No such thing as stereo recording, so we
@@ -2232,7 +2136,8 @@ rec_return_free:
/* god this is gross..*/
/* again, the mode passed is shifted/masked */
-int split_stereo(unsigned char *real_buffer,unsigned char *tmp_buffer, int offset,
+static int
+split_stereo(unsigned char *real_buffer,unsigned char *tmp_buffer, int offset,
int count, int bufsize, int mode)
{
/* oh, bother. stereo decoding APU's don't work in 16bit so we
@@ -2474,7 +2379,7 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
return 0;
case SNDCTL_DSP_GETCAPS:
- return put_user(0/*DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER | DSP_CAP_MMAP*/, (int *)arg);
+ return put_user(DSP_CAP_DUPLEX | DSP_CAP_REALTIME | DSP_CAP_TRIGGER /*| DSP_CAP_MMAP*/, (int *)arg);
case SNDCTL_DSP_RESET:
if (file->f_mode & FMODE_WRITE) {
@@ -2596,9 +2501,9 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
case SNDCTL_DSP_GETTRIGGER:
val = 0;
- if (file->f_mode & FMODE_READ && s->enable & ESS_ENABLE_RE)
+ if ((file->f_mode & FMODE_READ) && (s->enable & ADC_RUNNING))
val |= PCM_ENABLE_INPUT;
- if (file->f_mode & FMODE_WRITE && s->enable & ESS_ENABLE_PE)
+ if ((file->f_mode & FMODE_WRITE) && (s->enable & DAC_RUNNING))
val |= PCM_ENABLE_OUTPUT;
return put_user(val, (int *)arg);
@@ -2625,7 +2530,7 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
case SNDCTL_DSP_GETOSPACE:
if (!(file->f_mode & FMODE_WRITE))
return -EINVAL;
- if (!(s->enable & ESS_ENABLE_PE) && (val = prog_dmabuf(s, 0)) != 0)
+ if (!(s->enable & DAC_RUNNING) && (val = prog_dmabuf(s, 0)) != 0)
return val;
spin_lock_irqsave(&s->lock, flags);
ess_update_ptr(s);
@@ -2639,7 +2544,7 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
case SNDCTL_DSP_GETISPACE:
if (!(file->f_mode & FMODE_READ))
return -EINVAL;
- if (!(s->enable & ESS_ENABLE_RE) && (val = prog_dmabuf(s, 1)) != 0)
+ if (!(s->enable & ADC_RUNNING) && (val = prog_dmabuf(s, 1)) != 0)
return val;
spin_lock_irqsave(&s->lock, flags);
ess_update_ptr(s);
@@ -2756,7 +2661,87 @@ static int ess_ioctl(struct inode *inode, struct file *file, unsigned int cmd, u
return -EINVAL;
}
-static int ess_open(struct inode *inode, struct file *file)
+static int
+allocate_buffers(struct ess_state *s)
+{
+ void *rawbuf=NULL;
+ int order,i;
+ unsigned long mapend,map;
+
+ /* alloc as big a chunk as we can */
+ for (order = (dsps_order + (15-PAGE_SHIFT) + 1); order >= (dsps_order + 2 + 1); order--)
+ if((rawbuf = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, order)))
+ break;
+
+ if (!rawbuf)
+ return 1;
+
+ M_printk("maestro: allocated %ld (%d) bytes at %p\n",PAGE_SIZE<<order,order, rawbuf);
+
+ if ((virt_to_bus(rawbuf) + (PAGE_SIZE << order) - 1) & ~((1<<28)-1)) /* silly limited pci poop */
+ printk(KERN_DEBUG "maestro: DMA buffer beyond 256MB: busaddr 0x%lx size %ld\n",
+ virt_to_bus(rawbuf), PAGE_SIZE << order);
+
+ if ((PAGE_SIZE<<order) > (1<<22))
+ printk(KERN_DEBUG "maestro: %ld byte DMA buffer longer than APU can express!\n",PAGE_SIZE<<order);
+
+ s->card->dmapages = rawbuf;
+ s->card->dmaorder = order;
+
+ /* play bufs are in the same first region as record bufs */
+ wave_set_register(s, 0x01FC , ((virt_to_bus(rawbuf))&0xFFE00000)>>12);
+
+ M_printk("maestro: writing %lx (%lx) to the wp\n",virt_to_bus(rawbuf),
+ ((virt_to_bus(rawbuf))&0xFFE00000)>>12);
+
+ for(i=0;i<NR_DSPS;i++) {
+ struct ess_state *ess = &s->card->channels[i];
+
+ if(ess->dev_audio == -1)
+ continue;
+
+ ess->dma_dac.ready = s->dma_dac.mapped = 0;
+ ess->dma_adc.ready = s->dma_adc.mapped = 0;
+ ess->dma_adc.buforder = ess->dma_dac.buforder = order - 1 - dsps_order - 1;
+ ess->dma_dac.rawbuf = rawbuf + (i * ( PAGE_SIZE << (ess->dma_dac.buforder + 1 )));
+ ess->dma_adc.rawbuf = ess->dma_dac.rawbuf + ( PAGE_SIZE << ess->dma_dac.buforder);
+ ess->mixbuf = rawbuf + (PAGE_SIZE<<order) - (512 * (i+1));
+
+ M_printk("maestro: setup apu %d: %p %p %p\n",i,ess->dma_dac.rawbuf,
+ ess->dma_adc.rawbuf, ess->mixbuf);
+
+ }
+
+ /* now mark the pages as reserved; otherwise remap_page_range doesn't do what we want */
+ mapend = MAP_NR(rawbuf + (PAGE_SIZE << order) - 1);
+ for (map = MAP_NR(rawbuf); map <= mapend; map++) {
+ set_bit(PG_reserved, &mem_map[map].flags);
+ }
+
+ return 0;
+}
+static void
+free_buffers(struct ess_state *s)
+{
+ unsigned long map, mapend;
+
+ s->dma_dac.rawbuf = s->dma_adc.rawbuf = NULL;
+ s->dma_dac.mapped = s->dma_adc.mapped = 0;
+ s->dma_dac.ready = s->dma_adc.ready = 0;
+
+ M_printk("maestro: freeing %p\n",s->card->dmapages);
+ /* undo marking the pages as reserved */
+
+ mapend = MAP_NR(s->card->dmapages + (PAGE_SIZE << s->card->dmaorder) - 1);
+ for (map = MAP_NR(s->card->dmapages); map <= mapend; map++)
+ clear_bit(PG_reserved, &mem_map[map].flags);
+
+ free_pages((unsigned long)s->card->dmapages,s->card->dmaorder);
+ s->card->dmapages = NULL;
+}
+
+static int
+ess_open(struct inode *inode, struct file *file)
{
int minor = MINOR(inode->i_rdev);
struct ess_card *c = devs;
@@ -2801,13 +2786,21 @@ static int ess_open(struct inode *inode, struct file *file)
return -ERESTARTSYS;
down(&s->open_sem);
}
+
+ /* under semaphore.. */
+ if ((s->card->dmapages==NULL) && allocate_buffers(s)) {
+ up(&s->open_sem);
+ return -ENOMEM;
+ }
+
if (file->f_mode & FMODE_READ) {
/*
fmtm &= ~((ESS_FMT_STEREO | ESS_FMT_16BIT) << ESS_ADC_SHIFT);
if ((minor & 0xf) == SND_DEV_DSP16)
fmts |= ESS_FMT_16BIT << ESS_ADC_SHIFT; */
- fmtm = (ESS_FMT_STEREO|ESS_FMT_16BIT) << ESS_ADC_SHIFT;
+ fmtm &= ~((ESS_FMT_STEREO|ESS_FMT_16BIT) << ESS_ADC_SHIFT);
+ fmts = (ESS_FMT_STEREO|ESS_FMT_16BIT) << ESS_ADC_SHIFT;
s->dma_adc.ossfragshift = s->dma_adc.ossmaxfrags = s->dma_adc.subdivision = 0;
set_adc_rate(s, 8000);
@@ -2816,6 +2809,7 @@ static int ess_open(struct inode *inode, struct file *file)
fmtm &= ~((ESS_FMT_STEREO | ESS_FMT_16BIT) << ESS_DAC_SHIFT);
if ((minor & 0xf) == SND_DEV_DSP16)
fmts |= ESS_FMT_16BIT << ESS_DAC_SHIFT;
+
s->dma_dac.ossfragshift = s->dma_dac.ossmaxfrags = s->dma_dac.subdivision = 0;
set_dac_rate(s, 8000);
}
@@ -2823,17 +2817,19 @@ static int ess_open(struct inode *inode, struct file *file)
s->open_mode |= file->f_mode & (FMODE_READ | FMODE_WRITE);
/* we're covered by the open_sem */
- if( ! s->card->bob_running )
+ if( ! s->card->dsps_open ) {
start_bob(s);
- s->card->bob_running++;
- M_printk("maestro: open, %d bobs now\n",s->card->bob_running);
+ }
+ s->card->dsps_open++;
+ M_printk("maestro: open, %d bobs now\n",s->card->dsps_open);
up(&s->open_sem);
MOD_INC_USE_COUNT;
return 0;
}
-static int ess_release(struct inode *inode, struct file *file)
+static int
+ess_release(struct inode *inode, struct file *file)
{
struct ess_state *s = (struct ess_state *)file->private_data;
@@ -2847,16 +2843,13 @@ static int ess_release(struct inode *inode, struct file *file)
if (file->f_mode & FMODE_READ) {
stop_adc(s);
}
-
- /* free our shared dma buffers */
- dealloc_dmabuf(&s->dma_adc);
- dealloc_dmabuf(&s->dma_dac);
s->open_mode &= (~file->f_mode) & (FMODE_READ|FMODE_WRITE);
/* we're covered by the open_sem */
- M_printk("maestro: %d -1 bob clients\n",s->card->bob_running);
- if( --s->card->bob_running <= 0) {
+ M_printk("maestro: %d dsps now alive\n",s->card->dsps_open-1);
+ if( --s->card->dsps_open <= 0) {
stop_bob(s);
+ free_buffers(s);
}
up(&s->open_sem);
wake_up(&s->open_wait);
@@ -2864,7 +2857,7 @@ static int ess_release(struct inode *inode, struct file *file)
return 0;
}
-static /*const*/ struct file_operations ess_audio_fops = {
+static struct file_operations ess_audio_fops = {
&ess_llseek,
&ess_read,
&ess_write,
@@ -2919,17 +2912,10 @@ int maestro_apm_callback(apm_event_t ae) {
}
#endif
-void free_mixpage(struct ess_card *card) {
- if (card->mixpage) {
- /* undo marking the page as reserved */
- clear_bit(PG_reserved, &mem_map[MAP_NR(card->mixpage)].flags);
- /* free mixpage */
- free_pages((unsigned long)card->mixpage, 1);
- }
-}
/* --------------------------------------------------------------------- */
-static int maestro_install(struct pci_dev *pcidev, int card_type)
+static int
+maestro_install(struct pci_dev *pcidev, int card_type)
{
u16 w;
u32 n;
@@ -2970,26 +2956,16 @@ static int maestro_install(struct pci_dev *pcidev, int card_type)
memset(card, 0, sizeof(*card));
- /* allocate a page for the input mixer APUs
- 512 * NR_DSPS must fit in here !!*/
- if(!(card->mixpage = (void *)__get_free_pages(GFP_KERNEL|GFP_DMA, 1)))
- {
- printk(KERN_WARNING "maestro: can't allocate mixer page.\n");
- kfree(card);
- return 0;
- }
-
#ifdef CONFIG_APM
printk("reg_callback: %d\n",apm_register_callback(maestro_apm_callback));
#endif
- /* mark the page reserved */
- set_bit(PG_reserved, &mem_map[MAP_NR(card->mixpage)].flags);
card->iobase = iobase;
card->card_type = card_type;
card->irq = pcidev->irq;
card->next = devs;
card->magic = ESS_CARD_MAGIC;
+ spin_lock_init(&card->lock);
devs = card;
/* init our groups of 6 apus */
@@ -2997,10 +2973,13 @@ static int maestro_install(struct pci_dev *pcidev, int card_type)
{
struct ess_state *s=&card->channels[i];
+ s->index = i;
+
s->card = card;
init_waitqueue_head(&s->dma_adc.wait);
init_waitqueue_head(&s->dma_dac.wait);
init_waitqueue_head(&s->open_wait);
+ spin_lock_init(&ess->lock);
init_MUTEX(&s->open_sem);
s->magic = ESS_STATE_MAGIC;
@@ -3016,8 +2995,6 @@ static int maestro_install(struct pci_dev *pcidev, int card_type)
/* register devices */
if ((s->dev_audio = register_sound_dsp(&ess_audio_fops, -1)) < 0)
break;
- /* divide the page into smaller chunks */
- s->mixbuf = card->mixpage + (i * 512);
}
num = i;
@@ -3174,7 +3151,6 @@ static int maestro_install(struct pci_dev *pcidev, int card_type)
n&=~0x000F; /* ASSP off */
outl(n, iobase+0x34);
-
n=inl(iobase+0x34);
n|=(1<<29); /* Enable ring bus */
outl(n, iobase+0x34);
@@ -3220,7 +3196,6 @@ static int maestro_install(struct pci_dev *pcidev, int card_type)
w|=(1<<0); /* SB IRQ on */
outw(w, iobase+0x18);
-
#if 0 /* asp crap */
outb(0, iobase+0xA4);
outb(3, iobase+0xA2);
@@ -3324,7 +3299,6 @@ static int maestro_install(struct pci_dev *pcidev, int card_type)
if(s->dev_audio != -1)
unregister_sound_dsp(s->dev_audio);
}
- free_mixpage(card);
release_region(card->iobase, 256);
kfree(card);
return 0;
@@ -3334,6 +3308,7 @@ static int maestro_install(struct pci_dev *pcidev, int card_type)
return 1;
}
+/* XXX __init ? */
#ifdef MODULE
int init_module(void)
#else
@@ -3349,13 +3324,21 @@ int __init init_maestro(void)
pcidev = NULL;
+ if (dsps_order < 0) {
+ dsps_order = 1;
+ printk(KERN_WARNING "maestro: clipping dsps_order to %d\n",dsps_order);
+ }
+ else if (dsps_order > MAX_DSP_ORDER) {
+ dsps_order = MAX_DSP_ORDER;
+ printk(KERN_WARNING "maestro: clipping dsps_order to %d\n",dsps_order);
+ }
+
/*
* Find the ESS Maestro 2.
*/
- while( (pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1968, pcidev))!=NULL
- &&
- ( maestro_install(pcidev, TYPE_MAESTRO2) )) {
+ while( (pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1968, pcidev))!=NULL ) {
+ if (maestro_install(pcidev, TYPE_MAESTRO2))
foundone=1;
}
@@ -3363,9 +3346,8 @@ int __init init_maestro(void)
* Find the ESS Maestro 2E
*/
- while((pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1978, pcidev))!=NULL
- &&
- ( maestro_install(pcidev, TYPE_MAESTRO2E) )) {
+ while( (pcidev = pci_find_device(PCI_VENDOR_ESS, PCI_DEVICE_ID_ESS_ESS1978, pcidev))!=NULL) {
+ if (maestro_install(pcidev, TYPE_MAESTRO2E))
foundone=1;
}
@@ -3373,24 +3355,25 @@ int __init init_maestro(void)
* ESS Maestro 1
*/
- while((pcidev = pci_find_device(PCI_VENDOR_ESS_OLD, PCI_DEVICE_ID_ESS_ESS0100, pcidev))!=NULL
- &&
- ( maestro_install(pcidev, TYPE_MAESTRO) )) {
+ while((pcidev = pci_find_device(PCI_VENDOR_ESS_OLD, PCI_DEVICE_ID_ESS_ESS0100, pcidev))!=NULL) {
+ if (maestro_install(pcidev, TYPE_MAESTRO))
foundone=1;
}
- if( ! foundone )
+ if( ! foundone ) {
+ printk("maestro: no devices found.\n");
return -ENODEV;
+ }
return 0;
}
/* --------------------------------------------------------------------- */
#ifdef MODULE
-
MODULE_AUTHOR("Zach Brown <zab@redhat.com>, Alan Cox <alan@redhat.com>");
MODULE_DESCRIPTION("ESS Maestro Driver");
#ifdef M_DEBUG
MODULE_PARM(debug,"i");
+MODULE_PARM(dsps_order,"i");
#endif
void cleanup_module(void)
@@ -3414,7 +3397,6 @@ void cleanup_module(void)
if(ess->dev_audio != -1)
unregister_sound_dsp(ess->dev_audio);
}
- free_mixpage(s);
release_region(s->iobase, 256);
kfree(s);
}
@@ -3422,4 +3404,3 @@ void cleanup_module(void)
}
#endif /* MODULE */
-
diff --git a/drivers/usb/Makefile b/drivers/usb/Makefile
index 8d6006493..dbd8aa169 100644
--- a/drivers/usb/Makefile
+++ b/drivers/usb/Makefile
@@ -98,21 +98,27 @@ ifeq ($(CONFIG_USB_PRINTER),m)
endif
ifeq ($(CONFIG_USB_SERIAL),y)
- L_OBJS += serial.o
+ L_OBJS += usb-serial.o
endif
ifeq ($(CONFIG_USB_SERIAL),m)
- M_OBJS += serial.o
- MIX_OBJS += serial.o
+ M_OBJS += usb-serial.o
+ MIX_OBJS += usb-serial.o
+endif
+
+ifneq ($(CONFIG_ADB_KEYBOARD),y)
+KEYMAP=keymap
+else
+KEYMAP=keymap-mac
endif
ifeq ($(CONFIG_USB_KBD),y)
- L_OBJS += keyboard.o keymap.o
+ L_OBJS += keyboard.o $(KEYMAP).o
endif
ifeq ($(CONFIG_USB_KBD),m)
M_OBJS += usb-keyboard.o
- MIX_OBJS += keyboard.o keymap.o
+ MIX_OBJS += keyboard.o $(KEYMAP).o
endif
ifeq ($(CONFIG_USB_AUDIO),y)
@@ -177,13 +183,8 @@ keymap-mac.o: keymap-mac.c
keymap-mac.c: maps/mac.map maps/usb.map
./mkmap.adb > $@
-ifneq ($(CONFIG_MAC_KEYBOARD),y)
-usb-keyboard.o: keymap.o keyboard.o
- $(LD) $(LD_RFLAG) -r -o $@ keymap.o keyboard.o
-else
-usb-keyboard.o: keymap-mac.o keyboard.o
- $(LD) $(LD_RFLAG) -r -o $@ keymap-mac.o keyboard.o
-endif
+usb-keyboard.o: $(KEYMAP).o keyboard.o
+ $(LD) $(LD_RFLAG) -r -o $@ $(KEYMAP).o keyboard.o
ifeq ($(CONFIG_USB_SCSI_DEBUG),y)
usb-scsi.o: usb_scsi.o usb_scsi_debug.o
diff --git a/drivers/usb/acm.c b/drivers/usb/acm.c
index 61830f720..3ecea982e 100644
--- a/drivers/usb/acm.c
+++ b/drivers/usb/acm.c
@@ -5,7 +5,7 @@
*
* version 0.8: Fixed endianity bug, some cleanups. I really hate to have
* half of driver in form if (...) { info("x"); return y; }
- * Pavel Machek <pavel@suse.de>
+ * Pavel Machek <pavel@suse.cz>
*
* version 0.7: Added usb flow control. Fixed bug in uhci.c (what idiot
* wrote this code? ...Oops that was me). Fixed module cleanup. Did some
@@ -65,7 +65,7 @@
#include "usb.h"
#define NR_PORTS 3
-#define ACM_MAJOR 166
+#define ACM_MAJOR 166 /* Wow, major is now officially allocated */
//#define info(message...); printk(message);
#define info(message...);
@@ -425,7 +425,7 @@ static int acm_probe(struct usb_device *dev)
interface->bNumEndpoints != 2)
continue;
- endpoint = &interface->endpoint[0];
+ /* if ((endpoint->bEndpointAddress & 0x80) == 0x80) */
if ((endpoint->bEndpointAddress & 0x80) != 0x80)
swapped = 1;
diff --git a/drivers/usb/ezusb.c b/drivers/usb/ezusb.c
index 59e7b4a67..8aabddd17 100644
--- a/drivers/usb/ezusb.c
+++ b/drivers/usb/ezusb.c
@@ -37,7 +37,6 @@
#include <linux/config.h>
#include <linux/module.h>
#include <linux/socket.h>
-#include <linux/miscdevice.h>
#include <linux/list.h>
#include <linux/vmalloc.h>
#include <linux/slab.h>
@@ -967,10 +966,6 @@ static struct file_operations ezusb_fops = {
NULL /* lock */
};
-static struct miscdevice ezusb_misc = {
- 192, "ezusb", &ezusb_fops
-};
-
/* --------------------------------------------------------------------- */
static int ezusb_probe(struct usb_device *usbdev)
@@ -1044,7 +1039,9 @@ static struct usb_driver ezusb_driver = {
"ezusb",
ezusb_probe,
ezusb_disconnect,
- { NULL, NULL }
+ { NULL, NULL },
+ &ezusb_fops,
+ 32
};
/* --------------------------------------------------------------------- */
@@ -1062,11 +1059,6 @@ int ezusb_init(void)
init_waitqueue_head(&ezusb[u].wait);
spin_lock_init(&ezusb[u].lock);
}
- /* register misc device */
- if (misc_register(&ezusb_misc)) {
- printk(KERN_WARNING "ezusb: cannot register minor %d\n", ezusb_misc.minor);
- return -1;
- }
usb_register(&ezusb_driver);
printk(KERN_INFO "ezusb: Anchorchip firmware download driver registered\n");
return 0;
@@ -1075,7 +1067,6 @@ int ezusb_init(void)
void ezusb_cleanup(void)
{
usb_deregister(&ezusb_driver);
- misc_deregister(&ezusb_misc);
}
/* --------------------------------------------------------------------- */
diff --git a/drivers/usb/hp_scanner.c b/drivers/usb/hp_scanner.c
index bdf3c4181..e69d8f63e 100644
--- a/drivers/usb/hp_scanner.c
+++ b/drivers/usb/hp_scanner.c
@@ -59,8 +59,6 @@
* stuff may be some kind of maps and stuff but that's kinda rare. */
#define OBUF_SIZE 128
-#define USB_SCANNER_MAJOR 16
-
struct hpscan_usb_data {
struct usb_device *hpscan_dev; /* init: probe_scanner */
__u8 isopen; /* nz if open */
@@ -279,14 +277,6 @@ disconnect_scanner(struct usb_device *dev)
}
static struct
-usb_driver scanner_driver = {
- "usbscanner",
- probe_scanner,
- disconnect_scanner,
- { NULL, NULL }
-};
-
-static struct
file_operations usb_scanner_fops = {
NULL, /* seek */
read_scanner,
@@ -302,15 +292,19 @@ file_operations usb_scanner_fops = {
NULL, /* fasync */
};
+static struct
+usb_driver scanner_driver = {
+ "usbscanner",
+ probe_scanner,
+ disconnect_scanner,
+ { NULL, NULL },
+ &usb_scanner_fops,
+ 48
+};
+
int
usb_hp_scanner_init(void)
{
- int result;
-
- if ((result = register_chrdev(USB_SCANNER_MAJOR, "usbscanner", &usb_scanner_fops)) < 0) {
- printk(KERN_WARNING "hp_scanner: Cannot register device\n");
- return result;
- }
usb_register(&scanner_driver);
printk(KERN_DEBUG "USB Scanner support registered.\n");
return 0;
@@ -324,7 +318,6 @@ usb_hp_scanner_cleanup(void)
hps->present = 0;
usb_deregister(&scanner_driver);
- unregister_chrdev(USB_SCANNER_MAJOR, "usbscanner");
}
#ifdef MODULE
diff --git a/drivers/usb/mouse.c b/drivers/usb/mouse.c
index da5ee515e..7d1c80aeb 100644
--- a/drivers/usb/mouse.c
+++ b/drivers/usb/mouse.c
@@ -34,7 +34,6 @@
#include <linux/sched.h>
#include <linux/signal.h>
#include <linux/errno.h>
-#include <linux/miscdevice.h>
#include <linux/random.h>
#include <linux/poll.h>
#include <linux/init.h>
@@ -44,8 +43,6 @@
#include "usb.h"
-#define USB_MOUSE_MINOR 32
-
struct mouse_state {
unsigned char buttons; /* current button state */
long dx; /* dx, dy, dz are change since last read */
@@ -109,7 +106,7 @@ static int mouse_irq(int state, void *__buffer, int len, void *dev_id)
/* if the USB mouse sends an interrupt, then something noteworthy
must have happened */
- mouse->buttons = data[0] & 0x07;
+ mouse->buttons = data[0] & 0x0f;
mouse->dx += data[1]; /* data[] is signed, so this works */
mouse->dy -= data[2]; /* y-axis is reversed */
mouse->dz -= data[3];
@@ -319,10 +316,6 @@ struct file_operations usb_mouse_fops = {
fasync_mouse,
};
-static struct miscdevice usb_mouse = {
- USB_MOUSE_MINOR, "USB mouse", &usb_mouse_fops
-};
-
static int mouse_probe(struct usb_device *dev)
{
struct usb_interface_descriptor *interface;
@@ -416,7 +409,9 @@ static struct usb_driver mouse_driver = {
"mouse",
mouse_probe,
mouse_disconnect,
- { NULL, NULL }
+ { NULL, NULL },
+ &usb_mouse_fops,
+ 16
};
int usb_mouse_init(void)
@@ -428,8 +423,6 @@ int usb_mouse_init(void)
init_waitqueue_head(&mouse->wait);
mouse->fasync = NULL;
- misc_register(&usb_mouse);
-
usb_register(&mouse_driver);
printk(KERN_INFO "USB HID boot protocol mouse driver registered.\n");
return 0;
@@ -449,7 +442,6 @@ void usb_mouse_cleanup(void)
/* this, too, probably needs work */
usb_deregister(&mouse_driver);
- misc_deregister(&usb_mouse);
}
#ifdef MODULE
diff --git a/drivers/usb/ohci-hcd.c b/drivers/usb/ohci-hcd.c
index eeace6d61..3dc6d74ca 100644
--- a/drivers/usb/ohci-hcd.c
+++ b/drivers/usb/ohci-hcd.c
@@ -179,7 +179,7 @@ static int sohci_iso_handler(void * ohci_in, struct usb_ohci_ed *ed, void * data
return 0;
}
-static int sohci_request_irq(struct usb_device *usb_dev, unsigned int pipe, usb_device_irq handler, int period, void *dev_id, void **handle)
+static int sohci_request_irq(struct usb_device *usb_dev, unsigned int pipe, usb_device_irq handler, int period, void *dev_id, void **handle, long bustime)
{
struct ohci * ohci = usb_dev->bus->hcpriv;
struct ohci_device * dev = usb_to_ohci(usb_dev);
diff --git a/drivers/usb/ohci.c b/drivers/usb/ohci.c
index 763b8199e..fd03125ce 100644
--- a/drivers/usb/ohci.c
+++ b/drivers/usb/ohci.c
@@ -24,7 +24,7 @@
*
* No filesystems were harmed in the development of this code.
*
- * $Id: ohci.c,v 1.77 1999/09/16 04:30:19 greg Exp $
+ * $Id: ohci.c,v 1.80 1999/09/30 06:32:17 greg Exp $
*/
#include <linux/config.h>
@@ -941,7 +941,7 @@ static __u16 ohci_td_bytes_done(struct ohci_td *td)
* interrupt. (It's really a pointer to the TD).
*/
static int ohci_request_irq(struct usb_device *usb, unsigned int pipe,
- usb_device_irq handler, int period, void *dev_id, void **handle)
+ usb_device_irq handler, int period, void *dev_id, void **handle, long bustime)
{
struct ohci_device *dev = usb_to_ohci(usb);
struct ohci_td *td;
@@ -2511,7 +2511,6 @@ static void release_ohci(struct ohci *ohci)
writel(OHCI_USB_SUSPEND, &ohci->regs->control);
free_page((unsigned long) root_hub->hcca);
kfree(ohci->bus->root_hub);
- root_hub->hcca = NULL;
ohci->bus->root_hub = NULL;
}
@@ -2601,7 +2600,6 @@ static int ohci_control_thread(void * __ohci)
spin_unlock_irq(&current->sigmask_lock);
if(signr == SIGUSR1) {
- /* TODO: have it do a full ed/td queue dump? */
printk(KERN_DEBUG "OHCI status dump:\n");
show_ohci_status(ohci);
} else if (signr == SIGUSR2) {
diff --git a/drivers/usb/printer.c b/drivers/usb/printer.c
index 17dac365a..dffd76559 100644
--- a/drivers/usb/printer.c
+++ b/drivers/usb/printer.c
@@ -1,8 +1,10 @@
/* Driver for USB Printers
*
- * (C) Michael Gee (michael@linuxspecific.com) 1999
- *
+ * Copyright 1999 Michael Gee (michael@linuxspecific.com)
+ * Copyright 1999 Pavel Machek (pavel@suse.cz)
+ *
+ * Distribute under GPL version 2 or later.
*/
#include <linux/module.h>
@@ -23,12 +25,6 @@
#define NAK_TIMEOUT (HZ) /* stall wait for printer */
#define MAX_RETRY_COUNT ((60*60*HZ)/NAK_TIMEOUT) /* should not take 1 minute a page! */
-#ifndef USB_PRINTER_MAJOR
-#define USB_PRINTER_MAJOR 63
-#endif
-
-static int mymajor = USB_PRINTER_MAJOR;
-
#define MAX_PRINTERS 8
struct pp_usb_data {
@@ -375,13 +371,6 @@ static void printer_disconnect(struct usb_device *dev)
dev->private = NULL; /* just in case */
}
-static struct usb_driver printer_driver = {
- "printer",
- printer_probe,
- printer_disconnect,
- { NULL, NULL }
-};
-
static struct file_operations usb_printer_fops = {
NULL, /* seek */
read_printer,
@@ -397,17 +386,17 @@ static struct file_operations usb_printer_fops = {
NULL
};
+static struct usb_driver printer_driver = {
+ "printer",
+ printer_probe,
+ printer_disconnect,
+ { NULL, NULL },
+ &usb_printer_fops,
+ 0
+};
+
int usb_printer_init(void)
{
- int result;
-
- if ((result = register_chrdev(USB_PRINTER_MAJOR, "usblp", &usb_printer_fops)) < 0) {
- printk(KERN_WARNING "usbprinter: Cannot register device\n");
- return result;
- }
- if (mymajor == 0) {
- mymajor = result;
- }
usb_register(&printer_driver);
printk(KERN_INFO "USB Printer support registered.\n");
return 0;
@@ -423,6 +412,5 @@ int init_module(void)
void cleanup_module(void)
{
usb_deregister(&printer_driver);
- unregister_chrdev(mymajor, "usblp");
}
#endif
diff --git a/drivers/usb/serial.c b/drivers/usb/serial.c
index b85f2b5c6..e69de29bb 100644
--- a/drivers/usb/serial.c
+++ b/drivers/usb/serial.c
@@ -1,691 +0,0 @@
-/*
- * USB Serial Converter driver
- *
- * Greg Kroah-Hartman (greg@kroah.com)
- *
- * This was based on the ACM driver by Armin Fuerst (which was based
- * on a driver by Brad Keryan)
- *
- * Currently only works for the Belkin and Peracom Serial converters.
- * Should also work on the Etek serial converter, if anyone knows the
- * vendor and device ids for that device.
- *
- *
- * version 0.1.1 (10/05/99) gkh
- * Changed the major number to not conflict with anything else.
- *
- * version 0.1 (09/28/99) gkh
- * Can recognize the two different devices and start up a read from
- * device when asked to. Writes also work. No control signals yet, this
- * all is vendor specific data (i.e. no spec), also no control for
- * different baud rates or other bit settings.
- * Currently we are using the same devid as the acm driver. This needs
- * to change.
- *
- * (C) Copyright 1999 Greg Kroah-Hartman (greg@kroah.com)
- *
- */
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/signal.h>
-#include <linux/errno.h>
-#include <linux/poll.h>
-#include <linux/init.h>
-#include <linux/malloc.h>
-#include <linux/fcntl.h>
-#include <linux/tty_driver.h>
-#include <linux/tty_flip.h>
-#include <linux/tty.h>
-#include <linux/module.h>
-#include <linux/spinlock.h>
-
-
-#include "usb.h"
-/*#define SERIAL_DEBUG 1*/
-
-#ifdef SERIAL_DEBUG
- #define debug_info(message); printk(message);
-#else
- #define debug_info(message);
-#endif
-
-
-/* USB Serial devices vendor ids and device ids that this driver supports */
-#define BELKIN_VENDOR_ID 0x056c
-#define BELKIN_SERIAL_CONVERTER 0x8007
-#define PERACOM_VENDOR_ID 0x0565
-#define PERACOM_SERIAL_CONVERTER 0x0001
-
-
-#define SERIAL_MAJOR 240
-
-#define NUM_PORTS 4 /* Have to pick a number for now. Need to look */
- /* into dynamically creating them at insertion time. */
-
-
-static int usb_serial_probe(struct usb_device *dev);
-static void usb_serial_disconnect(struct usb_device *dev);
-
-typedef enum {
- unknown = 0,
- Belkin = 1,
- Peracom = 2
- } SERIAL_TYPE;
-
-struct usb_serial_state {
- struct usb_device * dev;
- SERIAL_TYPE type; /* what manufacturer's type of converter */
- void * irq_handle;
- unsigned int irqpipe;
- struct tty_struct *tty; /* the coresponding tty for this device */
- char present;
- char active;
-
- char interrupt_in_inuse;
- __u8 interrupt_in_endpoint;
- __u8 interrupt_in_interval;
- __u16 interrupt_in_size;
- unsigned int interrupt_in_pipe;
- unsigned char * interrupt_in_buffer;
- void * interrupt_in_transfer;
-
- char bulk_in_inuse;
- __u8 bulk_in_endpoint;
- __u8 bulk_in_interval;
- __u16 bulk_in_size;
- unsigned int bulk_in_pipe;
- unsigned char * bulk_in_buffer;
- void * bulk_in_transfer;
-
- char bulk_out_inuse;
- __u8 bulk_out_endpoint;
- __u8 bulk_out_interval;
- __u16 bulk_out_size;
- unsigned int bulk_out_pipe;
- unsigned char * bulk_out_buffer;
- void * bulk_out_transfer;
-};
-
-static struct usb_driver usb_serial_driver = {
- "serial",
- usb_serial_probe,
- usb_serial_disconnect,
- { NULL, NULL }
-};
-
-static int serial_refcount;
-static struct tty_driver serial_tty_driver;
-static struct tty_struct * serial_tty[NUM_PORTS];
-static struct termios * serial_termios[NUM_PORTS];
-static struct termios * serial_termios_locked[NUM_PORTS];
-static struct usb_serial_state serial_state_table[NUM_PORTS];
-
-
-
-static int serial_read_irq (int state, void *buffer, int count, void *dev_id)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *)dev_id;
- struct tty_struct *tty = serial->tty;
- unsigned char* data = buffer;
- int i;
-
- debug_info("USB: serial_read_irq\n");
-
-#ifdef SERIAL_DEBUG
- if (count) {
- printk("%d %s\n", count, data);
- }
-#endif
-
- if (count) {
- for (i=0;i<count;i++) {
- tty_insert_flip_char(tty,data[i],0);
- }
- tty_flip_buffer_push(tty);
- }
-
- /* Continue transfer */
- /* return (1); */
-
- /* No more transfer, let the irq schedule us again */
- serial->bulk_in_inuse = 0;
- return (0);
-}
-
-
-static int serial_write_irq (int state, void *buffer, int count, void *dev_id)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *) dev_id;
- struct tty_struct *tty = serial->tty;
-
- debug_info("USB Serial: serial_write_irq\n");
-
- if (!serial->bulk_out_inuse) {
- debug_info("USB Serial: write irq for a finished pipe?\n");
- return (0);
- }
-
- usb_terminate_bulk (serial->dev, serial->bulk_out_transfer);
- serial->bulk_out_inuse = 0;
-
- if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && tty->ldisc.write_wakeup)
- (tty->ldisc.write_wakeup)(tty);
-
- wake_up_interruptible(&tty->write_wait);
-
- return 0;
-}
-
-
-static int usb_serial_irq (int state, void *buffer, int len, void *dev_id)
-{
-// struct usb_serial_state *serial = (struct usb_serial_state *) dev_id;
-
- debug_info("USB Serial: usb_serial_irq\n");
-
- /* ask for a bulk read */
-// serial->bulk_in_inuse = 1;
-// serial->bulk_in_transfer = usb_request_bulk (serial->dev, serial->bulk_in_pipe, serial_read_irq, serial->bulk_in_buffer, serial->bulk_in_size, serial);
-
- return (1);
-}
-
-
-
-
-
-/* tty interface functions */
-static int serial_open (struct tty_struct *tty, struct file * filp)
-{
- struct usb_serial_state *serial;
-
- debug_info("USB: serial_open\n");
-
- serial = &serial_state_table [MINOR(tty->device)-tty->driver.minor_start];
- tty->driver_data = serial;
- serial->tty = tty;
-
- if (!serial->present) {
- debug_info("USB Serial: no device registered\n");
- return -EINVAL;
- }
-
- if (serial->active) {
- debug_info ("USB Serial: device already open\n");
- return -EINVAL;
- }
- serial->active = 1;
-
- /*Start reading from the device*/
- serial->bulk_in_inuse = 1;
- serial->bulk_in_transfer = usb_request_bulk (serial->dev, serial->bulk_in_pipe, serial_read_irq, serial->bulk_in_buffer, serial->bulk_in_size, serial);
-
- /* Need to do device specific setup here (control lines, baud rate, etc.) */
- /* FIXME!!! */
-
- return (0);
-}
-
-
-static void serial_close(struct tty_struct *tty, struct file * filp)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
- debug_info("USB: serial_close\n");
-
- if (!serial->present) {
- debug_info("USB Serial: no device registered\n");
- return;
- }
-
- if (!serial->active) {
- debug_info ("USB Serial: device already open\n");
- return;
- }
-
- /* Need to change the control lines here */
- /* FIXME */
-
- if (serial->bulk_out_inuse){
- usb_terminate_bulk (serial->dev, serial->bulk_out_transfer);
- serial->bulk_out_inuse = 0;
- }
- if (serial->bulk_in_inuse){
- usb_terminate_bulk (serial->dev, serial->bulk_in_transfer);
- serial->bulk_in_inuse = 0;
- }
-
- /* release the irq? */
-
- serial->active = 0;
-}
-
-
-static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
- int written;
-
- debug_info("USB Serial: serial_write\n");
-
- if (!serial->present) {
- debug_info("USB Serial: device not registered\n");
- return (-EINVAL);
- }
-
- if (!serial->active) {
- debug_info ("USB Serial: device not opened\n");
- return (-EINVAL);
- }
-
- if (serial->bulk_out_inuse) {
- debug_info ("USB Serial: already writing\n");
- return (0);
- }
-
- written = (count > serial->bulk_out_size) ? serial->bulk_out_size : count;
-
- if (from_user) {
- copy_from_user(serial->bulk_out_buffer, buf, written);
- }
- else {
- memcpy (serial->bulk_out_buffer, buf, written);
- }
-
- /* send the data out the bulk port */
- serial->bulk_out_inuse = 1;
- serial->bulk_out_transfer = usb_request_bulk (serial->dev, serial->bulk_out_pipe, serial_write_irq, serial->bulk_out_buffer, written, serial);
-
- return (written);
-}
-
-
-static void serial_put_char (struct tty_struct *tty, unsigned char ch)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data;
-
- debug_info("USB Serial: serial_put_char\n");
-
- if (!serial->present) {
- debug_info("USB Serial: no device registered\n");
- return;
- }
-
- if (!serial->active) {
- debug_info ("USB Serial: device not open\n");
- return;
- }
-
- if (serial->bulk_out_inuse) {
- debug_info ("USB Serial: already writing\n");
- return;
- }
-
- /* send the single character out the bulk port */
- serial->bulk_out_buffer[0] = ch;
- serial->bulk_out_inuse = 1;
- serial->bulk_out_transfer = usb_request_bulk (serial->dev, serial->bulk_out_pipe, serial_write_irq, serial->bulk_out_buffer, 1, serial);
-
- return;
-}
-
-
-static int serial_write_room (struct tty_struct *tty)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data;
-
- debug_info("USB Serial: serial_write_room\n");
-
- if (!serial->present) {
- debug_info("USB Serial: no device registered\n");
- return (-EINVAL);
- }
-
- if (!serial->active) {
- debug_info ("USB Serial: device not open\n");
- return (-EINVAL);
- }
-
- if (serial->bulk_out_inuse) {
- return (0);
- }
-
- return serial->bulk_out_size;
-}
-
-
-static int serial_chars_in_buffer (struct tty_struct *tty)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data;
-
- debug_info("USB Serial: serial_chars_in_buffer\n");
-
- if (!serial->present) {
- debug_info("USB Serial: no device registered\n");
- return (-EINVAL);
- }
-
- if (!serial->active) {
- debug_info ("USB Serial: device not open\n");
- return (-EINVAL);
- }
-
- if (serial->bulk_out_inuse) {
- return (serial->bulk_out_size);
- }
-
- return (0);
-}
-
-
-static void serial_throttle (struct tty_struct * tty)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
-
- debug_info("USB Serial: serial_throttle\n");
-
- if (!serial->present) {
- debug_info("USB Serial: no device registered\n");
- return;
- }
-
- if (!serial->active) {
- debug_info ("USB Serial: device not open\n");
- return;
- }
-
-
- /* Change the control signals */
- /* FIXME!!! */
-
- return;
-}
-
-
-static void serial_unthrottle (struct tty_struct * tty)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
-
- debug_info("USB Serial: serial_unthrottle\n");
-
- if (!serial->present) {
- debug_info("USB Serial: no device registered\n");
- return;
- }
-
- if (!serial->active) {
- debug_info ("USB Serial: device not open\n");
- return;
- }
-
-
- /* Change the control signals */
- /* FIXME!!! */
-
- return;
-}
-
-
-static int Get_Free_Serial (void)
-{
- int i;
-
- for (i=0; i < NUM_PORTS; ++i) {
- if (!serial_state_table[i].present)
- return (i);
- }
- return (-1);
-}
-
-
-static int usb_serial_probe(struct usb_device *dev)
-{
- struct usb_serial_state *serial;
- struct usb_interface_descriptor *interface;
- struct usb_endpoint_descriptor *endpoint;
- SERIAL_TYPE type;
- int serial_num;
-// int ret;
- int i;
-
- /* look at the device descriptor to see if it is a type that we recognize */
- type = unknown;
- if ((dev->descriptor.idVendor == BELKIN_VENDOR_ID) &&
- (dev->descriptor.idProduct == BELKIN_SERIAL_CONVERTER)) {
- /* This is the Belkin serial convertor */
- type = Belkin;
- }
-
- if ((dev->descriptor.idVendor == PERACOM_VENDOR_ID) &&
- (dev->descriptor.idProduct == PERACOM_SERIAL_CONVERTER)) {
- /* This is the Peracom serial convertor */
- type = Peracom;
- }
-
- if (type == unknown)
- return (-1);
-
- printk (KERN_INFO "USB serial converter detected.\n");
-
- if (usb_set_configuration(dev, dev->config[0].bConfigurationValue)) {
- printk (KERN_INFO " Failed usb_set_configuration: serial\n");
- return (-1);
- }
-
- if (0>(serial_num = Get_Free_Serial())) {
- debug_info("USB Serial: Too many devices connected\n");
- return (-1);
- }
-
- serial = &serial_state_table[serial_num];
-
- memset(serial, 0, sizeof(serial));
- serial->dev = dev;
- serial->type = type;
- dev->private = serial;
-
- /* we should have 1 bulk in, 1 bulk out, and 1 interrupt in endpoints */
- interface = &dev->config[0].interface[0].altsetting[0];
- for (i = 0; i < interface->bNumEndpoints; ++i) {
- endpoint = &interface->endpoint[i];
-
- if ((endpoint->bEndpointAddress & 0x80) &&
- ((endpoint->bmAttributes & 3) == 0x02)) {
- /* we found the bulk in endpoint */
- serial->bulk_in_inuse = 0;
- serial->bulk_in_endpoint = endpoint->bEndpointAddress;
- serial->bulk_in_size = endpoint->wMaxPacketSize;
- serial->bulk_in_interval = endpoint->bInterval;
- serial->bulk_in_pipe = usb_rcvbulkpipe (dev, serial->bulk_in_endpoint);
- serial->bulk_in_buffer = kmalloc (serial->bulk_in_size, GFP_KERNEL);
- if (!serial->bulk_in_buffer) {
- printk("USB Serial: Couldn't allocate bulk_in_buffer\n");
- goto probe_error;
- }
- }
-
- if (((endpoint->bEndpointAddress & 0x80) == 0x00) &&
- ((endpoint->bmAttributes & 3) == 0x02)) {
- /* we found the bulk out endpoint */
- serial->bulk_out_inuse = 0;
- serial->bulk_out_endpoint = endpoint->bEndpointAddress;
- serial->bulk_out_size = endpoint->wMaxPacketSize;
- serial->bulk_out_interval = endpoint->bInterval;
- serial->bulk_out_pipe = usb_rcvbulkpipe (dev, serial->bulk_out_endpoint);
- serial->bulk_out_buffer = kmalloc (serial->bulk_out_size, GFP_KERNEL);
- if (!serial->bulk_out_buffer) {
- printk("USB Serial: Couldn't allocate bulk_out_buffer\n");
- goto probe_error;
- }
- }
-
- if ((endpoint->bEndpointAddress & 0x80) &&
- ((endpoint->bmAttributes & 3) == 0x03)) {
- /* we found the interrupt in endpoint */
- serial->interrupt_in_inuse = 0;
- serial->interrupt_in_endpoint = endpoint->bEndpointAddress;
- serial->interrupt_in_size = endpoint->wMaxPacketSize;
- serial->interrupt_in_interval = endpoint->bInterval;
- /* serial->interrupt_in_pipe = usb_rcvbulkpipe (dev, serial->bulk_in_endpoint); */
- serial->interrupt_in_buffer = kmalloc (serial->bulk_in_size, GFP_KERNEL);
- if (!serial->bulk_in_buffer) {
- printk("USB Serial: Couldn't allocate interrupt_in_buffer\n");
- goto probe_error;
- }
- }
-
- }
-
-
- /* verify that we found all of the endpoints that we need */
- if ((!serial->bulk_in_buffer) ||
- (!serial->bulk_out_buffer) ||
- (!serial->interrupt_in_buffer)) {
- printk("USB Serial: did not find all of the required endpoints\n");
- goto probe_error;
- }
-
-
- /* set up an interrupt for out bulk in pipe */
- /* ask for a bulk read */
-// serial->bulk_in_inuse = 1;
-// serial->bulk_in_transfer = usb_request_bulk (serial->dev, serial->bulk_in_pipe, serial_read_irq, serial->bulk_in_buffer, serial->bulk_in_size, serial);
-
- /* set up our interrupt to be the time for the bulk in read */
-// ret = usb_request_irq (dev, serial->bulk_in_pipe, usb_serial_irq, serial->bulk_in_interval, serial, &serial->irq_handle);
-// if (ret) {
-// printk(KERN_INFO "USB Serial failed usb_request_irq (0x%x)\n", ret);
-// goto probe_error;
-// }
-
- serial->present = 1;
- MOD_INC_USE_COUNT;
-
- return (0);
-
-probe_error:
- if (serial) {
- if (serial->bulk_in_buffer)
- kfree (serial->bulk_in_buffer);
- if (serial->bulk_out_buffer)
- kfree (serial->bulk_out_buffer);
- if (serial->interrupt_in_buffer)
- kfree (serial->interrupt_in_buffer);
- }
- return (-1);
-}
-
-
-static void usb_serial_disconnect(struct usb_device *dev)
-{
- struct usb_serial_state *serial = (struct usb_serial_state *)dev->private;
-
- if (serial) {
- if (!serial->present) {
- /* something strange is going on */
- debug_info("USB Serial: disconnect but not present?\n")
- return;
- }
-
- /* need to stop any transfers...*/
- if (serial->bulk_in_inuse) {
- usb_terminate_bulk (serial->dev, serial->bulk_in_transfer);
- serial->bulk_in_inuse = 0;
- }
- if (serial->bulk_out_inuse) {
- usb_terminate_bulk (serial->dev, serial->bulk_out_transfer);
- serial->bulk_out_inuse = 0;
- }
- // usb_release_irq (serial->dev, serial->irq_handle, serial->bulk_in_pipe);
- if (serial->bulk_in_buffer)
- kfree (serial->bulk_in_buffer);
- if (serial->bulk_out_buffer)
- kfree (serial->bulk_out_buffer);
- if (serial->interrupt_in_buffer)
- kfree (serial->interrupt_in_buffer);
-
- serial->present = 0;
- serial->active = 0;
- }
- dev->private = NULL;
-
- MOD_DEC_USE_COUNT;
-
- printk (KERN_INFO "USB Serial device disconnected.\n");
-}
-
-
-
-int usb_serial_init(void)
-{
- int i;
-
- /* Initalize our global data */
- for (i = 0; i < NUM_PORTS; ++i) {
- memset(&serial_state_table[i], 0x00, sizeof(struct usb_serial_state));
- }
-
- /* register the tty driver */
- memset (&serial_tty_driver, 0, sizeof(struct tty_driver));
- serial_tty_driver.magic = TTY_DRIVER_MAGIC;
- serial_tty_driver.driver_name = "usb";
- serial_tty_driver.name = "ttyUSB";
- serial_tty_driver.major = SERIAL_MAJOR;
- serial_tty_driver.minor_start = 0;
- serial_tty_driver.num = NUM_PORTS;
- serial_tty_driver.type = TTY_DRIVER_TYPE_SERIAL;
- serial_tty_driver.subtype = SERIAL_TYPE_NORMAL;
- serial_tty_driver.init_termios = tty_std_termios;
- serial_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
- serial_tty_driver.flags = TTY_DRIVER_REAL_RAW;
- serial_tty_driver.refcount = &serial_refcount;
- serial_tty_driver.table = serial_tty;
- serial_tty_driver.termios = serial_termios;
- serial_tty_driver.termios_locked = serial_termios_locked;
-
- serial_tty_driver.open = serial_open;
- serial_tty_driver.close = serial_close;
- serial_tty_driver.write = serial_write;
- serial_tty_driver.put_char = serial_put_char;
- serial_tty_driver.flush_chars = NULL; //serial_flush_chars;
- serial_tty_driver.write_room = serial_write_room;
- serial_tty_driver.ioctl = NULL; //serial_ioctl;
- serial_tty_driver.set_termios = NULL; //serial_set_termios;
- serial_tty_driver.set_ldisc = NULL;
- serial_tty_driver.throttle = serial_throttle;
- serial_tty_driver.unthrottle = serial_unthrottle;
- serial_tty_driver.stop = NULL; //serial_stop;
- serial_tty_driver.start = NULL; //serial_start;
- serial_tty_driver.hangup = NULL; //serial_hangup;
- serial_tty_driver.break_ctl = NULL; //serial_break;
- serial_tty_driver.wait_until_sent = NULL; //serial_wait_until_sent;
- serial_tty_driver.send_xchar = NULL; //serial_send_xchar;
- serial_tty_driver.read_proc = NULL; //serial_read_proc;
- serial_tty_driver.chars_in_buffer = serial_chars_in_buffer;
- serial_tty_driver.flush_buffer = NULL; //serial_flush_buffer;
- if (tty_register_driver (&serial_tty_driver)) {
- printk( "USB Serial: failed to register tty driver\n" );
- return -EPERM;
- }
-
- /* register the USB driver */
- usb_register(&usb_serial_driver);
- printk(KERN_INFO "USB Serial support registered.\n");
- return 0;
-}
-
-
-#ifdef MODULE
-int init_module(void)
-{
- return usb_serial_init();
-}
-
-void cleanup_module(void)
-{
- tty_unregister_driver(&serial_tty_driver);
- usb_deregister(&usb_serial_driver);
-}
-
-#endif
-
diff --git a/drivers/usb/uhci.c b/drivers/usb/uhci.c
index e359d7721..ae2b4ec73 100644
--- a/drivers/usb/uhci.c
+++ b/drivers/usb/uhci.c
@@ -119,6 +119,7 @@ static int uhci_map_status(int status, int dir_out)
return USB_ST_INTERNALERROR;
}
+
/*
* Return the result of a TD..
*/
@@ -189,12 +190,12 @@ static int uhci_td_result(struct uhci_device *dev, struct uhci_td *td, unsigned
if (!status)
return USB_ST_NOERROR;
- /* APC BackUPS Pro kludge */
+ /* XXX FIXME APC BackUPS Pro kludge */
/* It tries to send all of the descriptor instead of */
/* the amount we requested */
if (tmp->status & TD_CTRL_IOC &&
tmp->status & TD_CTRL_ACTIVE &&
- tmp->status & TD_CTRL_NAK)
+ tmp->status & TD_CTRL_NAK /* && its a control TD */)
return USB_ST_NOERROR;
#if 0
@@ -627,9 +628,11 @@ static void uhci_remove_transfer(struct uhci_td *td, char removeirq)
*
* Returns 0 (success) or negative (failure).
* Also returns/sets a "handle pointer" that release_irq can use to stop this
- * interrupt. (It's really a pointer to the TD).
+ * interrupt. (It's really a pointer to the TD.)
*/
-static int uhci_request_irq(struct usb_device *usb_dev, unsigned int pipe, usb_device_irq handler, int period, void *dev_id, void **handle)
+static int uhci_request_irq(struct usb_device *usb_dev, unsigned int pipe,
+ usb_device_irq handler, int period,
+ void *dev_id, void **handle, long bustime)
{
struct uhci_device *dev = usb_to_uhci(usb_dev);
struct uhci_td *td = uhci_td_alloc(dev);
@@ -658,13 +661,15 @@ static int uhci_request_irq(struct usb_device *usb_dev, unsigned int pipe, usb_d
td->buffer = virt_to_bus(dev->data);
td->qh = qh;
td->dev = dev;
+ td->pipetype = PIPE_INTERRUPT;
+ td->bandwidth_alloc = bustime;
- /* if period 0, insert into fast q */
+ /* if period 0, set _REMOVE flag */
if (period == 0) {
td->flags |= UHCI_TD_REMOVE;
- qh->skel = &dev->uhci->skel_int2_qh;
- } else
- qh->skel = &dev->uhci->skel_int8_qh;
+ }
+
+ qh->skel = &dev->uhci->skelqh[__interval_to_skel(period)];
uhci_add_irq_list(dev->uhci, td, handler, dev_id);
@@ -964,6 +969,7 @@ static int uhci_run_isoc (struct usb_isoc_desc *isocdesc,
td->info = destination | ((frlen - 1) << 21);
td->buffer = virt_to_bus (bufptr);
td->dev = dev;
+ td->pipetype = PIPE_ISOCHRONOUS;
td->isoc_td_number = ix; /* 0-based; does not wrap/overflow back to 0 */
if (isocdesc->callback_frames &&
@@ -971,7 +977,7 @@ static int uhci_run_isoc (struct usb_isoc_desc *isocdesc,
td->status |= TD_CTRL_IOC;
td->completed = isocdesc->callback_fn;
cb_frames = 0;
- uhci_add_irq_list (dev->uhci, td, isocdesc->callback_fn, isocdesc->context);
+ uhci_add_irq_list (dev->uhci, td, isocdesc->callback_fn, isocdesc);
}
bufptr += fd->frame_length; /* or isocdesc->frame_size; */
@@ -991,7 +997,7 @@ static int uhci_run_isoc (struct usb_isoc_desc *isocdesc,
if (!(td->status & TD_CTRL_IOC)) {
td->status |= TD_CTRL_IOC;
td->completed = isocdesc->callback_fn;
- uhci_add_irq_list(dev->uhci, td, isocdesc->callback_fn, isocdesc->context); /* TBD: D.K. ??? */
+ uhci_add_irq_list(dev->uhci, td, isocdesc->callback_fn, isocdesc); /* TBD: D.K. ??? */
}
return 0;
} /* end uhci_run_isoc */
@@ -1158,6 +1164,7 @@ static int uhci_control_msg(struct usb_device *usb_dev, unsigned int pipe, devre
td->status = status; /* Try forever */
td->info = destination | (7 << 21); /* 8 bytes of data */
td->buffer = virt_to_bus(cmd);
+ td->pipetype = PIPE_CONTROL;
/*
* If direction is "send", change the frame from SETUP (0x2D)
@@ -1191,6 +1198,7 @@ static int uhci_control_msg(struct usb_device *usb_dev, unsigned int pipe, devre
td->info = destination | ((pktsze - 1) << 21); /* pktsze bytes of data */
td->buffer = virt_to_bus(data);
td->backptr = &prevtd->link;
+ td->pipetype = PIPE_CONTROL;
data += pktsze;
len -= pktsze;
@@ -1219,6 +1227,7 @@ static int uhci_control_msg(struct usb_device *usb_dev, unsigned int pipe, devre
td->buffer = 0;
td->backptr = &prevtd->link;
td->link = UHCI_PTR_TERM; /* Terminate */
+ td->pipetype = PIPE_CONTROL;
/* Start it up.. */
ret = uhci_run_control(dev, first, td, timeout);
@@ -1349,6 +1358,7 @@ static int uhci_bulk_msg(struct usb_device *usb_dev, unsigned int pipe, void *da
usb_pipeout(pipe)) << TD_TOKEN_TOGGLE); /* pktsze bytes of data */
td->buffer = virt_to_bus(data);
td->backptr = &prevtd->link;
+ td->pipetype = PIPE_BULK;
data += maxsze;
len -= maxsze;
@@ -1429,6 +1439,7 @@ static void * uhci_request_bulk(struct usb_device *usb_dev, unsigned int pipe, u
td->backptr = &prevtd->link;
td->qh = bulk_qh;
td->dev = dev;
+ td->pipetype = PIPE_BULK;
data += pktsze;
len -= pktsze;
@@ -1467,11 +1478,11 @@ static int uhci_terminate_bulk(struct usb_device *dev, void *first)
{
/* none found? there is nothing to remove! */
if (!first)
- return 0;
+ return USB_ST_REMOVED;
uhci_remove_transfer(first, 1);
- return 1;
+ return USB_ST_NOERROR;
}
struct usb_operations uhci_device_operations = {
@@ -1698,7 +1709,7 @@ static void uhci_interrupt_notify(struct uhci *uhci)
uhci_packetout(td->info)) << 19; /* toggle between data0 and data1 */
td->status = (td->status & 0x2F000000) | TD_CTRL_ACTIVE | TD_CTRL_IOC;
/* The HC only removes it when it completed */
- /* successfully, so force remove and readd it */
+ /* successfully, so force remove and re-add it */
uhci_remove_td(td);
uhci_insert_td_in_qh(td->qh, td);
} else if (td->flags & UHCI_TD_REMOVE) {
@@ -1710,6 +1721,8 @@ static void uhci_interrupt_notify(struct uhci *uhci)
uhci_remove_qh(td->qh->skel, td->qh);
uhci_qh_free(td->qh);
uhci_td_free(td);
+ if (td->pipetype == PIPE_INTERRUPT)
+ usb_release_bandwidth(usb_dev, td->bandwidth_alloc);
}
/* If completed does not wants to reactivate, then */
@@ -1790,6 +1803,7 @@ static void uhci_init_ticktd(struct uhci *uhci)
td->info = (15 << 21) | (0x7f << 8) | USB_PID_IN; /* (ignored) input packet, 16 bytes, device 127 */
td->buffer = 0;
td->qh = NULL;
+ td->pipetype = -1;
uhci->fl->frame[0] = virt_to_bus(td);
@@ -1931,16 +1945,21 @@ static struct uhci *alloc_uhci(unsigned int io_addr, unsigned int io_size)
usb->maxchild = port;
usb_init_root_hub(usb);
- /* 8 Interrupt queues */
- for (i = 0; i < 8; i++) {
+ /*
+ * 9 Interrupt queues; link int2 thru int256 to int1 first,
+ * then link int1 to control and control to bulk
+ */
+ for (i = 1; i < 9; i++) {
struct uhci_qh *qh = &uhci->skelqh[i];
- qh->link = virt_to_bus(&uhci->skel_control_qh) | UHCI_PTR_QH;
+ qh->link = virt_to_bus(&uhci->skel_int1_qh) | UHCI_PTR_QH;
qh->element = UHCI_PTR_TERM;
}
- uhci->skel_control_qh.link = virt_to_bus(&uhci->skel_bulk_qh) |
- UHCI_PTR_QH;
+ uhci->skel_int1_qh.link = virt_to_bus(&uhci->skel_control_qh) | UHCI_PTR_QH;
+ uhci->skel_int1_qh.element = UHCI_PTR_TERM;
+
+ uhci->skel_control_qh.link = virt_to_bus(&uhci->skel_bulk_qh) | UHCI_PTR_QH;
uhci->skel_control_qh.element = UHCI_PTR_TERM;
uhci->skel_bulk_qh.link = UHCI_PTR_TERM;
diff --git a/drivers/usb/uhci.h b/drivers/usb/uhci.h
index 1885c661c..7d3ead8f6 100644
--- a/drivers/usb/uhci.h
+++ b/drivers/usb/uhci.h
@@ -166,6 +166,9 @@ struct uhci_td {
struct uhci_qh *qh; /* QH this TD is a part of (ignored for Isochronous) */
int flags; /* Remove, etc */
int isoc_td_number; /* 0-relative number within a usb_isoc_desc. */
+ int pipetype; /* Control, Bulk, Interrupt, or Isoc */
+ int bandwidth_alloc; /* in microsecs; used only for Interrupt
+ * transfers, to return its bandwidth */
} __attribute__((aligned(16)));
@@ -225,13 +228,14 @@ struct uhci_device {
* be scared, it kinda makes sense. Look at this wonderful picture care of
* Linus:
*
- * generic-iso-QH -> dev1-iso-QH -> generic-irq-QH -> dev1-irq-QH -> ...
- * | | | |
- * End dev1-iso-TD1 End dev1-irq-TD1
- * |
- * dev1-iso-TD2
- * |
- * ....
+ * generic- -> dev1- -> generic- -> dev1- -> control- -> bulk- -> ...
+ * iso-QH iso-QH irq-QH irq-QH QH QH
+ * | | | | | |
+ * End dev1-iso-TD1 End dev1-irq-TD1 ... ...
+ * |
+ * dev1-iso-TD2
+ * |
+ * ....
*
* This may vary a bit (the UHCI docs don't explicitly say you can put iso
* transfers in QH's and all of their pictures don't have that either) but
@@ -242,20 +246,62 @@ struct uhci_device {
* To keep with Linus' nomenclature, this is called the QH skeleton. These
* labels (below) are only signficant to the root hub's QH's
*/
-#define UHCI_NUM_SKELQH 10
+#define UHCI_NUM_SKELQH 11
-#define skel_int2_qh skelqh[0]
-#define skel_int4_qh skelqh[1]
-#define skel_int8_qh skelqh[2]
-#define skel_int16_qh skelqh[3]
-#define skel_int32_qh skelqh[4]
-#define skel_int64_qh skelqh[5]
-#define skel_int128_qh skelqh[6]
-#define skel_int256_qh skelqh[7]
+#define skel_int1_qh skelqh[0]
+#define skel_int2_qh skelqh[1]
+#define skel_int4_qh skelqh[2]
+#define skel_int8_qh skelqh[3]
+#define skel_int16_qh skelqh[4]
+#define skel_int32_qh skelqh[5]
+#define skel_int64_qh skelqh[6]
+#define skel_int128_qh skelqh[7]
+#define skel_int256_qh skelqh[8]
-#define skel_control_qh skelqh[8]
+#define skel_control_qh skelqh[9]
-#define skel_bulk_qh skelqh[9]
+#define skel_bulk_qh skelqh[10]
+
+/*
+ * Search tree for determining where <interval> fits in the
+ * skelqh[] skeleton.
+ *
+ * An interrupt request should be placed into the slowest skelqh[]
+ * which meets the interval/period/frequency requirement.
+ * An interrupt request is allowed to be faster than <interval> but not slower.
+ *
+ * For a given <interval>, this function returns the appropriate/matching
+ * skelqh[] index value.
+ *
+ * NOTE: For UHCI, we don't really need int256_qh since the maximum interval
+ * is 255 ms. However, we do need an int1_qh since 1 is a valid interval
+ * and we should meet that frequency when requested to do so.
+ * This will require some change(s) to the UHCI skeleton.
+ */
+static inline int __interval_to_skel(interval)
+{
+ if (interval < 16) {
+ if (interval < 4) {
+ if (interval < 2) {
+ return 0; /* int1 for 0-1 ms */
+ }
+ return 1; /* int2 for 2-3 ms */
+ }
+ if (interval < 8) {
+ return 2; /* int4 for 4-7 ms */
+ }
+ return 3; /* int 8 for 8-15 ms */
+ }
+ if (interval < 64) {
+ if (interval < 32) {
+ return 4; /* int16 for 16-31 ms */
+ }
+ return 5; /* int32 for 32-63 ms */
+ }
+ if (interval < 128)
+ return 6; /* int64 for 64-127 ms */
+ return 7; /* int128 for 128-255 ms (Max.) */
+}
/*
* This describes the full uhci information.
diff --git a/drivers/usb/usb-core.c b/drivers/usb/usb-core.c
index 2dee323a3..ebddb35a3 100644
--- a/drivers/usb/usb-core.c
+++ b/drivers/usb/usb-core.c
@@ -30,6 +30,7 @@
int usb_init(void)
{
+ usb_major_init();
#ifdef CONFIG_USB_PROC
proc_usb_init ();
#endif
diff --git a/drivers/usb/usb-serial.c b/drivers/usb/usb-serial.c
new file mode 100644
index 000000000..b85f2b5c6
--- /dev/null
+++ b/drivers/usb/usb-serial.c
@@ -0,0 +1,691 @@
+/*
+ * USB Serial Converter driver
+ *
+ * Greg Kroah-Hartman (greg@kroah.com)
+ *
+ * This was based on the ACM driver by Armin Fuerst (which was based
+ * on a driver by Brad Keryan)
+ *
+ * Currently only works for the Belkin and Peracom Serial converters.
+ * Should also work on the Etek serial converter, if anyone knows the
+ * vendor and device ids for that device.
+ *
+ *
+ * version 0.1.1 (10/05/99) gkh
+ * Changed the major number to not conflict with anything else.
+ *
+ * version 0.1 (09/28/99) gkh
+ * Can recognize the two different devices and start up a read from
+ * device when asked to. Writes also work. No control signals yet, this
+ * all is vendor specific data (i.e. no spec), also no control for
+ * different baud rates or other bit settings.
+ * Currently we are using the same devid as the acm driver. This needs
+ * to change.
+ *
+ * (C) Copyright 1999 Greg Kroah-Hartman (greg@kroah.com)
+ *
+ */
+
+#include <linux/kernel.h>
+#include <linux/sched.h>
+#include <linux/signal.h>
+#include <linux/errno.h>
+#include <linux/poll.h>
+#include <linux/init.h>
+#include <linux/malloc.h>
+#include <linux/fcntl.h>
+#include <linux/tty_driver.h>
+#include <linux/tty_flip.h>
+#include <linux/tty.h>
+#include <linux/module.h>
+#include <linux/spinlock.h>
+
+
+#include "usb.h"
+/*#define SERIAL_DEBUG 1*/
+
+#ifdef SERIAL_DEBUG
+ #define debug_info(message); printk(message);
+#else
+ #define debug_info(message);
+#endif
+
+
+/* USB Serial devices vendor ids and device ids that this driver supports */
+#define BELKIN_VENDOR_ID 0x056c
+#define BELKIN_SERIAL_CONVERTER 0x8007
+#define PERACOM_VENDOR_ID 0x0565
+#define PERACOM_SERIAL_CONVERTER 0x0001
+
+
+#define SERIAL_MAJOR 240
+
+#define NUM_PORTS 4 /* Have to pick a number for now. Need to look */
+ /* into dynamically creating them at insertion time. */
+
+
+static int usb_serial_probe(struct usb_device *dev);
+static void usb_serial_disconnect(struct usb_device *dev);
+
+typedef enum {
+ unknown = 0,
+ Belkin = 1,
+ Peracom = 2
+ } SERIAL_TYPE;
+
+struct usb_serial_state {
+ struct usb_device * dev;
+ SERIAL_TYPE type; /* what manufacturer's type of converter */
+ void * irq_handle;
+ unsigned int irqpipe;
+ struct tty_struct *tty; /* the coresponding tty for this device */
+ char present;
+ char active;
+
+ char interrupt_in_inuse;
+ __u8 interrupt_in_endpoint;
+ __u8 interrupt_in_interval;
+ __u16 interrupt_in_size;
+ unsigned int interrupt_in_pipe;
+ unsigned char * interrupt_in_buffer;
+ void * interrupt_in_transfer;
+
+ char bulk_in_inuse;
+ __u8 bulk_in_endpoint;
+ __u8 bulk_in_interval;
+ __u16 bulk_in_size;
+ unsigned int bulk_in_pipe;
+ unsigned char * bulk_in_buffer;
+ void * bulk_in_transfer;
+
+ char bulk_out_inuse;
+ __u8 bulk_out_endpoint;
+ __u8 bulk_out_interval;
+ __u16 bulk_out_size;
+ unsigned int bulk_out_pipe;
+ unsigned char * bulk_out_buffer;
+ void * bulk_out_transfer;
+};
+
+static struct usb_driver usb_serial_driver = {
+ "serial",
+ usb_serial_probe,
+ usb_serial_disconnect,
+ { NULL, NULL }
+};
+
+static int serial_refcount;
+static struct tty_driver serial_tty_driver;
+static struct tty_struct * serial_tty[NUM_PORTS];
+static struct termios * serial_termios[NUM_PORTS];
+static struct termios * serial_termios_locked[NUM_PORTS];
+static struct usb_serial_state serial_state_table[NUM_PORTS];
+
+
+
+static int serial_read_irq (int state, void *buffer, int count, void *dev_id)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *)dev_id;
+ struct tty_struct *tty = serial->tty;
+ unsigned char* data = buffer;
+ int i;
+
+ debug_info("USB: serial_read_irq\n");
+
+#ifdef SERIAL_DEBUG
+ if (count) {
+ printk("%d %s\n", count, data);
+ }
+#endif
+
+ if (count) {
+ for (i=0;i<count;i++) {
+ tty_insert_flip_char(tty,data[i],0);
+ }
+ tty_flip_buffer_push(tty);
+ }
+
+ /* Continue transfer */
+ /* return (1); */
+
+ /* No more transfer, let the irq schedule us again */
+ serial->bulk_in_inuse = 0;
+ return (0);
+}
+
+
+static int serial_write_irq (int state, void *buffer, int count, void *dev_id)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *) dev_id;
+ struct tty_struct *tty = serial->tty;
+
+ debug_info("USB Serial: serial_write_irq\n");
+
+ if (!serial->bulk_out_inuse) {
+ debug_info("USB Serial: write irq for a finished pipe?\n");
+ return (0);
+ }
+
+ usb_terminate_bulk (serial->dev, serial->bulk_out_transfer);
+ serial->bulk_out_inuse = 0;
+
+ if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) && tty->ldisc.write_wakeup)
+ (tty->ldisc.write_wakeup)(tty);
+
+ wake_up_interruptible(&tty->write_wait);
+
+ return 0;
+}
+
+
+static int usb_serial_irq (int state, void *buffer, int len, void *dev_id)
+{
+// struct usb_serial_state *serial = (struct usb_serial_state *) dev_id;
+
+ debug_info("USB Serial: usb_serial_irq\n");
+
+ /* ask for a bulk read */
+// serial->bulk_in_inuse = 1;
+// serial->bulk_in_transfer = usb_request_bulk (serial->dev, serial->bulk_in_pipe, serial_read_irq, serial->bulk_in_buffer, serial->bulk_in_size, serial);
+
+ return (1);
+}
+
+
+
+
+
+/* tty interface functions */
+static int serial_open (struct tty_struct *tty, struct file * filp)
+{
+ struct usb_serial_state *serial;
+
+ debug_info("USB: serial_open\n");
+
+ serial = &serial_state_table [MINOR(tty->device)-tty->driver.minor_start];
+ tty->driver_data = serial;
+ serial->tty = tty;
+
+ if (!serial->present) {
+ debug_info("USB Serial: no device registered\n");
+ return -EINVAL;
+ }
+
+ if (serial->active) {
+ debug_info ("USB Serial: device already open\n");
+ return -EINVAL;
+ }
+ serial->active = 1;
+
+ /*Start reading from the device*/
+ serial->bulk_in_inuse = 1;
+ serial->bulk_in_transfer = usb_request_bulk (serial->dev, serial->bulk_in_pipe, serial_read_irq, serial->bulk_in_buffer, serial->bulk_in_size, serial);
+
+ /* Need to do device specific setup here (control lines, baud rate, etc.) */
+ /* FIXME!!! */
+
+ return (0);
+}
+
+
+static void serial_close(struct tty_struct *tty, struct file * filp)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
+ debug_info("USB: serial_close\n");
+
+ if (!serial->present) {
+ debug_info("USB Serial: no device registered\n");
+ return;
+ }
+
+ if (!serial->active) {
+ debug_info ("USB Serial: device already open\n");
+ return;
+ }
+
+ /* Need to change the control lines here */
+ /* FIXME */
+
+ if (serial->bulk_out_inuse){
+ usb_terminate_bulk (serial->dev, serial->bulk_out_transfer);
+ serial->bulk_out_inuse = 0;
+ }
+ if (serial->bulk_in_inuse){
+ usb_terminate_bulk (serial->dev, serial->bulk_in_transfer);
+ serial->bulk_in_inuse = 0;
+ }
+
+ /* release the irq? */
+
+ serial->active = 0;
+}
+
+
+static int serial_write (struct tty_struct * tty, int from_user, const unsigned char *buf, int count)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
+ int written;
+
+ debug_info("USB Serial: serial_write\n");
+
+ if (!serial->present) {
+ debug_info("USB Serial: device not registered\n");
+ return (-EINVAL);
+ }
+
+ if (!serial->active) {
+ debug_info ("USB Serial: device not opened\n");
+ return (-EINVAL);
+ }
+
+ if (serial->bulk_out_inuse) {
+ debug_info ("USB Serial: already writing\n");
+ return (0);
+ }
+
+ written = (count > serial->bulk_out_size) ? serial->bulk_out_size : count;
+
+ if (from_user) {
+ copy_from_user(serial->bulk_out_buffer, buf, written);
+ }
+ else {
+ memcpy (serial->bulk_out_buffer, buf, written);
+ }
+
+ /* send the data out the bulk port */
+ serial->bulk_out_inuse = 1;
+ serial->bulk_out_transfer = usb_request_bulk (serial->dev, serial->bulk_out_pipe, serial_write_irq, serial->bulk_out_buffer, written, serial);
+
+ return (written);
+}
+
+
+static void serial_put_char (struct tty_struct *tty, unsigned char ch)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data;
+
+ debug_info("USB Serial: serial_put_char\n");
+
+ if (!serial->present) {
+ debug_info("USB Serial: no device registered\n");
+ return;
+ }
+
+ if (!serial->active) {
+ debug_info ("USB Serial: device not open\n");
+ return;
+ }
+
+ if (serial->bulk_out_inuse) {
+ debug_info ("USB Serial: already writing\n");
+ return;
+ }
+
+ /* send the single character out the bulk port */
+ serial->bulk_out_buffer[0] = ch;
+ serial->bulk_out_inuse = 1;
+ serial->bulk_out_transfer = usb_request_bulk (serial->dev, serial->bulk_out_pipe, serial_write_irq, serial->bulk_out_buffer, 1, serial);
+
+ return;
+}
+
+
+static int serial_write_room (struct tty_struct *tty)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data;
+
+ debug_info("USB Serial: serial_write_room\n");
+
+ if (!serial->present) {
+ debug_info("USB Serial: no device registered\n");
+ return (-EINVAL);
+ }
+
+ if (!serial->active) {
+ debug_info ("USB Serial: device not open\n");
+ return (-EINVAL);
+ }
+
+ if (serial->bulk_out_inuse) {
+ return (0);
+ }
+
+ return serial->bulk_out_size;
+}
+
+
+static int serial_chars_in_buffer (struct tty_struct *tty)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *)tty->driver_data;
+
+ debug_info("USB Serial: serial_chars_in_buffer\n");
+
+ if (!serial->present) {
+ debug_info("USB Serial: no device registered\n");
+ return (-EINVAL);
+ }
+
+ if (!serial->active) {
+ debug_info ("USB Serial: device not open\n");
+ return (-EINVAL);
+ }
+
+ if (serial->bulk_out_inuse) {
+ return (serial->bulk_out_size);
+ }
+
+ return (0);
+}
+
+
+static void serial_throttle (struct tty_struct * tty)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
+
+ debug_info("USB Serial: serial_throttle\n");
+
+ if (!serial->present) {
+ debug_info("USB Serial: no device registered\n");
+ return;
+ }
+
+ if (!serial->active) {
+ debug_info ("USB Serial: device not open\n");
+ return;
+ }
+
+
+ /* Change the control signals */
+ /* FIXME!!! */
+
+ return;
+}
+
+
+static void serial_unthrottle (struct tty_struct * tty)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *) tty->driver_data;
+
+ debug_info("USB Serial: serial_unthrottle\n");
+
+ if (!serial->present) {
+ debug_info("USB Serial: no device registered\n");
+ return;
+ }
+
+ if (!serial->active) {
+ debug_info ("USB Serial: device not open\n");
+ return;
+ }
+
+
+ /* Change the control signals */
+ /* FIXME!!! */
+
+ return;
+}
+
+
+static int Get_Free_Serial (void)
+{
+ int i;
+
+ for (i=0; i < NUM_PORTS; ++i) {
+ if (!serial_state_table[i].present)
+ return (i);
+ }
+ return (-1);
+}
+
+
+static int usb_serial_probe(struct usb_device *dev)
+{
+ struct usb_serial_state *serial;
+ struct usb_interface_descriptor *interface;
+ struct usb_endpoint_descriptor *endpoint;
+ SERIAL_TYPE type;
+ int serial_num;
+// int ret;
+ int i;
+
+ /* look at the device descriptor to see if it is a type that we recognize */
+ type = unknown;
+ if ((dev->descriptor.idVendor == BELKIN_VENDOR_ID) &&
+ (dev->descriptor.idProduct == BELKIN_SERIAL_CONVERTER)) {
+ /* This is the Belkin serial convertor */
+ type = Belkin;
+ }
+
+ if ((dev->descriptor.idVendor == PERACOM_VENDOR_ID) &&
+ (dev->descriptor.idProduct == PERACOM_SERIAL_CONVERTER)) {
+ /* This is the Peracom serial convertor */
+ type = Peracom;
+ }
+
+ if (type == unknown)
+ return (-1);
+
+ printk (KERN_INFO "USB serial converter detected.\n");
+
+ if (usb_set_configuration(dev, dev->config[0].bConfigurationValue)) {
+ printk (KERN_INFO " Failed usb_set_configuration: serial\n");
+ return (-1);
+ }
+
+ if (0>(serial_num = Get_Free_Serial())) {
+ debug_info("USB Serial: Too many devices connected\n");
+ return (-1);
+ }
+
+ serial = &serial_state_table[serial_num];
+
+ memset(serial, 0, sizeof(serial));
+ serial->dev = dev;
+ serial->type = type;
+ dev->private = serial;
+
+ /* we should have 1 bulk in, 1 bulk out, and 1 interrupt in endpoints */
+ interface = &dev->config[0].interface[0].altsetting[0];
+ for (i = 0; i < interface->bNumEndpoints; ++i) {
+ endpoint = &interface->endpoint[i];
+
+ if ((endpoint->bEndpointAddress & 0x80) &&
+ ((endpoint->bmAttributes & 3) == 0x02)) {
+ /* we found the bulk in endpoint */
+ serial->bulk_in_inuse = 0;
+ serial->bulk_in_endpoint = endpoint->bEndpointAddress;
+ serial->bulk_in_size = endpoint->wMaxPacketSize;
+ serial->bulk_in_interval = endpoint->bInterval;
+ serial->bulk_in_pipe = usb_rcvbulkpipe (dev, serial->bulk_in_endpoint);
+ serial->bulk_in_buffer = kmalloc (serial->bulk_in_size, GFP_KERNEL);
+ if (!serial->bulk_in_buffer) {
+ printk("USB Serial: Couldn't allocate bulk_in_buffer\n");
+ goto probe_error;
+ }
+ }
+
+ if (((endpoint->bEndpointAddress & 0x80) == 0x00) &&
+ ((endpoint->bmAttributes & 3) == 0x02)) {
+ /* we found the bulk out endpoint */
+ serial->bulk_out_inuse = 0;
+ serial->bulk_out_endpoint = endpoint->bEndpointAddress;
+ serial->bulk_out_size = endpoint->wMaxPacketSize;
+ serial->bulk_out_interval = endpoint->bInterval;
+ serial->bulk_out_pipe = usb_rcvbulkpipe (dev, serial->bulk_out_endpoint);
+ serial->bulk_out_buffer = kmalloc (serial->bulk_out_size, GFP_KERNEL);
+ if (!serial->bulk_out_buffer) {
+ printk("USB Serial: Couldn't allocate bulk_out_buffer\n");
+ goto probe_error;
+ }
+ }
+
+ if ((endpoint->bEndpointAddress & 0x80) &&
+ ((endpoint->bmAttributes & 3) == 0x03)) {
+ /* we found the interrupt in endpoint */
+ serial->interrupt_in_inuse = 0;
+ serial->interrupt_in_endpoint = endpoint->bEndpointAddress;
+ serial->interrupt_in_size = endpoint->wMaxPacketSize;
+ serial->interrupt_in_interval = endpoint->bInterval;
+ /* serial->interrupt_in_pipe = usb_rcvbulkpipe (dev, serial->bulk_in_endpoint); */
+ serial->interrupt_in_buffer = kmalloc (serial->bulk_in_size, GFP_KERNEL);
+ if (!serial->bulk_in_buffer) {
+ printk("USB Serial: Couldn't allocate interrupt_in_buffer\n");
+ goto probe_error;
+ }
+ }
+
+ }
+
+
+ /* verify that we found all of the endpoints that we need */
+ if ((!serial->bulk_in_buffer) ||
+ (!serial->bulk_out_buffer) ||
+ (!serial->interrupt_in_buffer)) {
+ printk("USB Serial: did not find all of the required endpoints\n");
+ goto probe_error;
+ }
+
+
+ /* set up an interrupt for out bulk in pipe */
+ /* ask for a bulk read */
+// serial->bulk_in_inuse = 1;
+// serial->bulk_in_transfer = usb_request_bulk (serial->dev, serial->bulk_in_pipe, serial_read_irq, serial->bulk_in_buffer, serial->bulk_in_size, serial);
+
+ /* set up our interrupt to be the time for the bulk in read */
+// ret = usb_request_irq (dev, serial->bulk_in_pipe, usb_serial_irq, serial->bulk_in_interval, serial, &serial->irq_handle);
+// if (ret) {
+// printk(KERN_INFO "USB Serial failed usb_request_irq (0x%x)\n", ret);
+// goto probe_error;
+// }
+
+ serial->present = 1;
+ MOD_INC_USE_COUNT;
+
+ return (0);
+
+probe_error:
+ if (serial) {
+ if (serial->bulk_in_buffer)
+ kfree (serial->bulk_in_buffer);
+ if (serial->bulk_out_buffer)
+ kfree (serial->bulk_out_buffer);
+ if (serial->interrupt_in_buffer)
+ kfree (serial->interrupt_in_buffer);
+ }
+ return (-1);
+}
+
+
+static void usb_serial_disconnect(struct usb_device *dev)
+{
+ struct usb_serial_state *serial = (struct usb_serial_state *)dev->private;
+
+ if (serial) {
+ if (!serial->present) {
+ /* something strange is going on */
+ debug_info("USB Serial: disconnect but not present?\n")
+ return;
+ }
+
+ /* need to stop any transfers...*/
+ if (serial->bulk_in_inuse) {
+ usb_terminate_bulk (serial->dev, serial->bulk_in_transfer);
+ serial->bulk_in_inuse = 0;
+ }
+ if (serial->bulk_out_inuse) {
+ usb_terminate_bulk (serial->dev, serial->bulk_out_transfer);
+ serial->bulk_out_inuse = 0;
+ }
+ // usb_release_irq (serial->dev, serial->irq_handle, serial->bulk_in_pipe);
+ if (serial->bulk_in_buffer)
+ kfree (serial->bulk_in_buffer);
+ if (serial->bulk_out_buffer)
+ kfree (serial->bulk_out_buffer);
+ if (serial->interrupt_in_buffer)
+ kfree (serial->interrupt_in_buffer);
+
+ serial->present = 0;
+ serial->active = 0;
+ }
+ dev->private = NULL;
+
+ MOD_DEC_USE_COUNT;
+
+ printk (KERN_INFO "USB Serial device disconnected.\n");
+}
+
+
+
+int usb_serial_init(void)
+{
+ int i;
+
+ /* Initalize our global data */
+ for (i = 0; i < NUM_PORTS; ++i) {
+ memset(&serial_state_table[i], 0x00, sizeof(struct usb_serial_state));
+ }
+
+ /* register the tty driver */
+ memset (&serial_tty_driver, 0, sizeof(struct tty_driver));
+ serial_tty_driver.magic = TTY_DRIVER_MAGIC;
+ serial_tty_driver.driver_name = "usb";
+ serial_tty_driver.name = "ttyUSB";
+ serial_tty_driver.major = SERIAL_MAJOR;
+ serial_tty_driver.minor_start = 0;
+ serial_tty_driver.num = NUM_PORTS;
+ serial_tty_driver.type = TTY_DRIVER_TYPE_SERIAL;
+ serial_tty_driver.subtype = SERIAL_TYPE_NORMAL;
+ serial_tty_driver.init_termios = tty_std_termios;
+ serial_tty_driver.init_termios.c_cflag = B9600 | CS8 | CREAD | HUPCL | CLOCAL;
+ serial_tty_driver.flags = TTY_DRIVER_REAL_RAW;
+ serial_tty_driver.refcount = &serial_refcount;
+ serial_tty_driver.table = serial_tty;
+ serial_tty_driver.termios = serial_termios;
+ serial_tty_driver.termios_locked = serial_termios_locked;
+
+ serial_tty_driver.open = serial_open;
+ serial_tty_driver.close = serial_close;
+ serial_tty_driver.write = serial_write;
+ serial_tty_driver.put_char = serial_put_char;
+ serial_tty_driver.flush_chars = NULL; //serial_flush_chars;
+ serial_tty_driver.write_room = serial_write_room;
+ serial_tty_driver.ioctl = NULL; //serial_ioctl;
+ serial_tty_driver.set_termios = NULL; //serial_set_termios;
+ serial_tty_driver.set_ldisc = NULL;
+ serial_tty_driver.throttle = serial_throttle;
+ serial_tty_driver.unthrottle = serial_unthrottle;
+ serial_tty_driver.stop = NULL; //serial_stop;
+ serial_tty_driver.start = NULL; //serial_start;
+ serial_tty_driver.hangup = NULL; //serial_hangup;
+ serial_tty_driver.break_ctl = NULL; //serial_break;
+ serial_tty_driver.wait_until_sent = NULL; //serial_wait_until_sent;
+ serial_tty_driver.send_xchar = NULL; //serial_send_xchar;
+ serial_tty_driver.read_proc = NULL; //serial_read_proc;
+ serial_tty_driver.chars_in_buffer = serial_chars_in_buffer;
+ serial_tty_driver.flush_buffer = NULL; //serial_flush_buffer;
+ if (tty_register_driver (&serial_tty_driver)) {
+ printk( "USB Serial: failed to register tty driver\n" );
+ return -EPERM;
+ }
+
+ /* register the USB driver */
+ usb_register(&usb_serial_driver);
+ printk(KERN_INFO "USB Serial support registered.\n");
+ return 0;
+}
+
+
+#ifdef MODULE
+int init_module(void)
+{
+ return usb_serial_init();
+}
+
+void cleanup_module(void)
+{
+ tty_unregister_driver(&serial_tty_driver);
+ usb_deregister(&usb_serial_driver);
+}
+
+#endif
+
diff --git a/drivers/usb/usb.c b/drivers/usb/usb.c
index f6d901aa3..88e0e9662 100644
--- a/drivers/usb/usb.c
+++ b/drivers/usb/usb.c
@@ -31,18 +31,24 @@ static int usb_find_driver(struct usb_device *);
static void usb_check_support(struct usb_device *);
static void usb_driver_purge(struct usb_driver *, struct usb_device *);
-
/*
* We have a per-interface "registered driver" list.
*/
static LIST_HEAD(usb_driver_list);
static LIST_HEAD(usb_bus_list);
+static struct usb_driver *usb_minors[16];
+
int usb_register(struct usb_driver *new_driver)
{
struct list_head *tmp;
printk("usbcore: Registering new driver %s\n", new_driver->name);
+ if (new_driver->fops != NULL) {
+ if (usb_minors[new_driver->minor/16])
+ BUG();
+ usb_minors[new_driver->minor/16] = new_driver;
+ }
/* Add it to the list of known drivers */
list_add(&new_driver->driver_list, &usb_driver_list);
@@ -69,6 +75,8 @@ void usb_deregister(struct usb_driver *driver)
struct list_head *tmp;
printk("usbcore: Deregistering driver %s\n", driver->name);
+ if (driver->fops != NULL)
+ usb_minors[driver->minor/16] = NULL;
/*
* first we remove the driver, to be sure it doesn't get used by
@@ -1131,9 +1139,9 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u
dr.requesttype = requesttype;
dr.request = request;
- dr.value = cpu_to_le16p(&value);
- dr.index = cpu_to_le16p(&index);
- dr.length = cpu_to_le16p(&size);
+ dr.value = value;
+ dr.index = index;
+ dr.length = size;
return dev->bus->op->control_msg(dev, pipe, &dr, data, size, timeout);
}
@@ -1152,7 +1160,7 @@ int usb_request_irq(struct usb_device *dev, unsigned int pipe, usb_device_irq ha
if (check_bandwidth_alloc (dev->bus->bandwidth_allocated, bustime))
return (USB_ST_BANDWIDTH_ERROR);
- ret = dev->bus->op->request_irq(dev, pipe, handler, period, dev_id, handle);
+ ret = dev->bus->op->request_irq(dev, pipe, handler, period, dev_id, handle, bustime);
/* Claim the USB bandwidth if no error. */
if (!ret) {
@@ -1177,6 +1185,21 @@ int usb_terminate_bulk(struct usb_device *dev, void *first)
return dev->bus->op->terminate_bulk(dev, first);
}
+/*
+ * usb_release_bandwidth():
+ *
+ * called to release an interrupt pipe's bandwidth (in microseconds)
+ */
+void usb_release_bandwidth(struct usb_device *dev, int bw_alloc)
+{
+ dev->bus->bandwidth_allocated -= bw_alloc;
+ dev->bus->bandwidth_int_reqs--;
+ PRINTD ("bw_alloc reduced to %d for %d requesters",
+ dev->bus->bandwidth_allocated,
+ dev->bus->bandwidth_int_reqs +
+ dev->bus->bandwidth_isoc_reqs);
+}
+
int usb_release_irq(struct usb_device *dev, void *handle, unsigned int pipe)
{
long bustime;
@@ -1188,13 +1211,8 @@ int usb_release_irq(struct usb_device *dev, void *handle, unsigned int pipe)
if (!err) {
bustime = calc_bus_time (usb_pipeslow(pipe), usb_pipein(pipe), 0,
usb_maxpacket(dev, pipe, usb_pipeout(pipe)));
- bustime = NS_TO_US(bustime);
- dev->bus->bandwidth_allocated -= bustime;
- dev->bus->bandwidth_int_reqs--;
- PRINTD ("bw_alloc reduced to %d for %d requesters",
- dev->bus->bandwidth_allocated,
- dev->bus->bandwidth_int_reqs +
- dev->bus->bandwidth_isoc_reqs);
+ bustime = NS_TO_US(bustime); /* work in microseconds */
+ usb_release_bandwidth(dev, bustime);
}
return err;
@@ -1276,6 +1294,41 @@ int usb_kill_isoc (struct usb_isoc_desc *isocdesc)
return isocdesc->usb_dev->bus->op->kill_isoc (isocdesc);
}
+static int usb_open(struct inode * inode, struct file * file)
+{
+ int minor = MINOR(inode->i_rdev);
+ struct usb_driver *c = usb_minors[minor/16];
+ file->f_op = NULL;
+
+ if ((file->f_op = c->fops) && file->f_op->open)
+ return file->f_op->open(inode,file);
+ else
+ return -ENODEV;
+}
+
+static struct file_operations usb_fops = {
+ NULL, /* seek */
+ NULL, /* read */
+ NULL, /* write */
+ NULL, /* readdir */
+ NULL, /* poll */
+ NULL, /* ioctl */
+ NULL, /* mmap */
+ usb_open,
+ NULL, /* flush */
+ NULL /* release */
+};
+
+void usb_major_init(void)
+{
+ if (register_chrdev(180,"usb",&usb_fops)) {
+ printk("unable to get major %d for usb devices\n",
+ MISC_MAJOR);
+ return -EIO;
+ }
+}
+
+
#ifdef CONFIG_PROC_FS
struct list_head *usb_driver_get_list(void)
{
@@ -1308,6 +1361,7 @@ EXPORT_SYMBOL(usb_init_root_hub);
EXPORT_SYMBOL(usb_new_device);
EXPORT_SYMBOL(usb_connect);
EXPORT_SYMBOL(usb_disconnect);
+EXPORT_SYMBOL(usb_release_bandwidth);
EXPORT_SYMBOL(usb_set_address);
EXPORT_SYMBOL(usb_get_descriptor);
diff --git a/drivers/usb/usb.h b/drivers/usb/usb.h
index 4057536bb..71510623d 100644
--- a/drivers/usb/usb.h
+++ b/drivers/usb/usb.h
@@ -351,6 +351,9 @@ struct usb_driver {
void (*disconnect)(struct usb_device *);
struct list_head driver_list;
+
+ struct file_operations *fops;
+ int minor;
};
/*
@@ -455,7 +458,7 @@ struct usb_operations {
int (*deallocate)(struct usb_device *);
int (*control_msg)(struct usb_device *, unsigned int, devrequest *, void *, int, int);
int (*bulk_msg)(struct usb_device *, unsigned int, void *, int, unsigned long *, int);
- int (*request_irq)(struct usb_device *, unsigned int, usb_device_irq, int, void *, void **);
+ int (*request_irq)(struct usb_device *, unsigned int, usb_device_irq, int, void *, void **, long);
int (*release_irq)(struct usb_device *, void *);
void *(*request_bulk)(struct usb_device *, unsigned int, usb_device_irq,
void *, int, void *);
@@ -548,6 +551,7 @@ extern struct usb_device *usb_alloc_dev(struct usb_device *parent, struct usb_bu
extern void usb_free_dev(struct usb_device *);
extern void usb_inc_dev_use(struct usb_device *);
#define usb_dec_dev_use usb_free_dev
+extern void usb_release_bandwidth(struct usb_device *, int);
extern int usb_control_msg(struct usb_device *dev, unsigned int pipe, __u8 request, __u8 requesttype, __u16 value, __u16 index, void *data, __u16 size, int timeout);
@@ -611,6 +615,11 @@ int usb_kill_isoc (struct usb_isoc_desc *isocdesc);
* appropriately.
*/
+#define PIPE_ISOCHRONOUS 0
+#define PIPE_INTERRUPT 1
+#define PIPE_CONTROL 2
+#define PIPE_BULK 3
+
#define usb_maxpacket(dev, pipe, out) (out \
? (dev)->epmaxpacketout[usb_pipeendpoint(pipe)] \
: (dev)->epmaxpacketin [usb_pipeendpoint(pipe)] )
@@ -624,10 +633,10 @@ int usb_kill_isoc (struct usb_isoc_desc *isocdesc);
#define usb_pipedata(pipe) (((pipe) >> 19) & 1)
#define usb_pipeslow(pipe) (((pipe) >> 26) & 1)
#define usb_pipetype(pipe) (((pipe) >> 30) & 3)
-#define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == 0)
-#define usb_pipeint(pipe) (usb_pipetype((pipe)) == 1)
-#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == 2)
-#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == 3)
+#define usb_pipeisoc(pipe) (usb_pipetype((pipe)) == PIPE_ISOCHRONOUS)
+#define usb_pipeint(pipe) (usb_pipetype((pipe)) == PIPE_INTERRUPT)
+#define usb_pipecontrol(pipe) (usb_pipetype((pipe)) == PIPE_CONTROL)
+#define usb_pipebulk(pipe) (usb_pipetype((pipe)) == PIPE_BULK)
#define PIPE_DEVEP_MASK 0x0007ff00
@@ -653,14 +662,14 @@ static inline unsigned int __default_pipe(struct usb_device *dev)
}
/* Create various pipes... */
-#define usb_sndctrlpipe(dev,endpoint) ((2 << 30) | __create_pipe(dev,endpoint))
-#define usb_rcvctrlpipe(dev,endpoint) ((2 << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
-#define usb_sndisocpipe(dev,endpoint) ((0 << 30) | __create_pipe(dev,endpoint))
-#define usb_rcvisocpipe(dev,endpoint) ((0 << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
-#define usb_sndbulkpipe(dev,endpoint) ((3 << 30) | __create_pipe(dev,endpoint))
-#define usb_rcvbulkpipe(dev,endpoint) ((3 << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
-#define usb_snddefctrl(dev) ((2 << 30) | __default_pipe(dev))
-#define usb_rcvdefctrl(dev) ((2 << 30) | __default_pipe(dev) | USB_DIR_IN)
+#define usb_sndctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint))
+#define usb_rcvctrlpipe(dev,endpoint) ((PIPE_CONTROL << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
+#define usb_sndisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint))
+#define usb_rcvisocpipe(dev,endpoint) ((PIPE_ISOCHRONOUS << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
+#define usb_sndbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint))
+#define usb_rcvbulkpipe(dev,endpoint) ((PIPE_BULK << 30) | __create_pipe(dev,endpoint) | USB_DIR_IN)
+#define usb_snddefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev))
+#define usb_rcvdefctrl(dev) ((PIPE_CONTROL << 30) | __default_pipe(dev) | USB_DIR_IN)
/*
* Send and receive control messages..
@@ -739,4 +748,3 @@ extern inline void proc_usb_remove_device(struct usb_device *dev) {}
#endif /* __KERNEL__ */
#endif
-
diff --git a/drivers/usb/usb_scsi.c b/drivers/usb/usb_scsi.c
index de8a1b356..6f34e1afa 100644
--- a/drivers/usb/usb_scsi.c
+++ b/drivers/usb/usb_scsi.c
@@ -3,7 +3,7 @@
*
* (C) Michael Gee (michael@linuxspecific.com) 1999
*
- * This driver is scitzoid - it makes a USB device appear as both a SCSI device
+ * This driver is schizoid - it makes a USB device appear as both a SCSI device
* and a character device. The latter is only available if the device has an
* interrupt endpoint, and is used specifically to receive interrupt events.
*
@@ -21,7 +21,7 @@
* Also, for certain devices, the interrupt endpoint is used to convey
* status of a command.
*
- * Basically, this stuff is WIERD!!
+ * Basically, this stuff is WEIRD!!
*
*/
@@ -64,7 +64,7 @@ static int my_host_number;
int usbscsi_debug = 1;
struct us_data {
- struct us_data *next; /* next device */
+ struct us_data *next; /* next device */
struct usb_device *pusb_dev;
struct usb_scsi_filter *filter; /* filter driver */
void *fdata; /* filter data */
@@ -140,7 +140,7 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)
this_xfer = length > max_size ? max_size : length;
length -= this_xfer;
do {
- /*US_DEBUGP("Bulk xfer %x(%d)\n", (unsigned int)buf, this_xfer);*/
+ /* US_DEBUGP("Bulk xfer %x(%d)\n", (unsigned int)buf, this_xfer); */
result = us->pusb_dev->bus->op->bulk_msg(us->pusb_dev, pipe, buf,
this_xfer, &partial, HZ*5);
@@ -149,9 +149,9 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)
result, partial, this_xfer);
if (result == USB_ST_STALL) {
- US_DEBUGP("clearing endpoing halt for pipe %x\n", pipe);
+ US_DEBUGP("clearing endpoint halt for pipe %x\n", pipe);
usb_clear_halt(us->pusb_dev,
- usb_pipeendpoint(pipe) | (pipe & 0x80));
+ usb_pipeendpoint(pipe) | (pipe & USB_DIR_IN));
}
/* we want to retry if the device reported NAK */
@@ -179,8 +179,8 @@ static int us_one_transfer(struct us_data *us, int pipe, char *buf, int length)
return result;
buf += this_xfer;
}
- return 0;
+ return 0;
}
static int us_transfer(Scsi_Cmnd *srb, int dir_in)
@@ -238,7 +238,6 @@ static unsigned int us_transfer_length(Scsi_Cmnd *srb)
}
else
return srb->request_bufflen;
-
}
static int pop_CBI_irq(int state, void *buffer, int len, void *dev_id)
@@ -254,36 +253,31 @@ static int pop_CBI_irq(int state, void *buffer, int len, void *dev_id)
wake_up(&us->ip_waitq);
}
- /* we dont want another interrupt */
-
+ /* we don't want another interrupt */
return 0;
}
static int pop_CB_reset(struct us_data *us)
{
unsigned char cmd[12];
- devrequest dr;
+ int result;
US_DEBUGP("pop_CB_reset\n");
- dr.requesttype = USB_TYPE_CLASS | USB_RT_INTERFACE;
- dr.request = US_CBI_ADSC;
- dr.value = 0;
- dr.index = us->pusb_dev->ifnum;
- dr.length = 12;
+
memset(cmd, -1, sizeof(cmd));
cmd[0] = SEND_DIAGNOSTIC;
cmd[1] = 4;
- us->pusb_dev->bus->op->control_msg(us->pusb_dev,
- usb_sndctrlpipe(us->pusb_dev,0),
- &dr, cmd, 12, HZ);
+ result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
+ US_CBI_ADSC, USB_TYPE_CLASS | USB_RT_INTERFACE,
+ 0, us->pusb_dev->ifnum, cmd, sizeof(cmd), HZ*5);
/* long wait for reset */
- schedule_timeout(HZ*5);
+ schedule_timeout(HZ*6);
US_DEBUGP("pop_CB_reset: clearing endpoint halt\n");
- usb_clear_halt(us->pusb_dev, us->ep_in | 0x80);
- usb_clear_halt(us->pusb_dev, us->ep_out);
+ usb_clear_halt(us->pusb_dev, us->ep_in | USB_DIR_IN);
+ usb_clear_halt(us->pusb_dev, us->ep_out | USB_DIR_OUT);
US_DEBUGP("pop_CB_reset done\n");
return 0;
@@ -292,21 +286,14 @@ static int pop_CB_reset(struct us_data *us)
static int pop_CB_command(Scsi_Cmnd *srb)
{
struct us_data *us = (struct us_data *)srb->host_scribble;
- devrequest dr;
unsigned char cmd[16];
int result;
int retry = 5;
int done_start = 0;
while (retry--) {
- dr.requesttype = USB_TYPE_CLASS | USB_RT_INTERFACE;
- dr.request = US_CBI_ADSC;
- dr.value = 0;
- dr.index = us->pusb_dev->ifnum;
- dr.length = srb->cmd_len;
-
+
if (us->flags & US_FL_FIXED_COMMAND) {
- dr.length = us->fixedlength;
memset(cmd, 0, us->fixedlength);
/* fix some commands */
@@ -335,9 +322,10 @@ static int pop_CB_command(Scsi_Cmnd *srb)
memcpy(cmd, srb->cmnd, srb->cmd_len);
break;
}
- result = us->pusb_dev->bus->op->control_msg(us->pusb_dev,
- usb_sndctrlpipe(us->pusb_dev,0),
- &dr, cmd, us->fixedlength, HZ);
+ result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
+ US_CBI_ADSC, USB_TYPE_CLASS | USB_RT_INTERFACE,
+ 0, us->pusb_dev->ifnum,
+ cmd, us->fixedlength, HZ*5);
if (!done_start && (us->subclass == US_SC_UFI /*|| us->subclass == US_SC_8070*/)
&& cmd[0] == TEST_UNIT_READY && result) {
/* as per spec try a start command, wait and retry */
@@ -346,20 +334,24 @@ static int pop_CB_command(Scsi_Cmnd *srb)
memset(cmd, 0, sizeof(cmd));
cmd[0] = START_STOP;
cmd[4] = 1; /* start */
- result = us->pusb_dev->bus->op->control_msg(us->pusb_dev,
- usb_sndctrlpipe(us->pusb_dev,0),
- &dr, cmd, us->fixedlength, HZ);
+ result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
+ US_CBI_ADSC, USB_TYPE_CLASS | USB_RT_INTERFACE,
+ 0, us->pusb_dev->ifnum,
+ cmd, us->fixedlength, HZ*5);
wait_ms(100);
retry++;
continue;
}
- } else
- result = us->pusb_dev->bus->op->control_msg(us->pusb_dev,
- usb_sndctrlpipe(us->pusb_dev,0),
- &dr, srb->cmnd, srb->cmd_len, HZ);
+ } else {
+ result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
+ US_CBI_ADSC, USB_TYPE_CLASS | USB_RT_INTERFACE,
+ 0, us->pusb_dev->ifnum,
+ srb->cmnd, srb->cmd_len, HZ*5);
+ }
if (/*result != USB_ST_STALL &&*/ result != USB_ST_TIMEOUT)
return result;
}
+
return result;
}
@@ -372,7 +364,6 @@ static int pop_CB_status(Scsi_Cmnd *srb)
struct us_data *us = (struct us_data *)srb->host_scribble;
int result;
__u8 status[2];
- devrequest dr;
int retry = 5;
US_DEBUGP("pop_CB_status, proto=%x\n", us->protocol);
@@ -381,14 +372,10 @@ static int pop_CB_status(Scsi_Cmnd *srb)
/* get from control */
while (retry--) {
- dr.requesttype = USB_DIR_IN | USB_TYPE_STANDARD | USB_RT_DEVICE;
- dr.request = USB_REQ_GET_STATUS;
- dr.index = 0;
- dr.value = 0;
- dr.length = 2;
- result = us->pusb_dev->bus->op->control_msg(us->pusb_dev,
- usb_rcvctrlpipe(us->pusb_dev,0),
- &dr, status, sizeof(status), HZ);
+ result = usb_control_msg(us->pusb_dev, usb_rcvctrlpipe(us->pusb_dev,0),
+ USB_REQ_GET_STATUS, USB_DIR_IN | USB_TYPE_STANDARD | USB_RT_DEVICE,
+ 0, 0,
+ status, sizeof(status), HZ*5);
if (result != USB_ST_TIMEOUT)
break;
}
@@ -410,11 +397,11 @@ static int pop_CB_status(Scsi_Cmnd *srb)
/* add interrupt transfer, marked for removal */
us->ip_wanted = 1;
us->irqpipe = usb_rcvctrlpipe(us->pusb_dev, us->ep_int);
- result = us->pusb_dev->bus->op->request_irq(us->pusb_dev, us->irqpipe,
- pop_CBI_irq, 0,
- (void *)us, &us->irq_handle);
+ result = usb_request_irq(us->pusb_dev, us->irqpipe, pop_CBI_irq,
+ 0, (void *)us, &us->irq_handle);
if (result) {
- US_DEBUGP("usb_scsi: usb_request_irq failed (0x%x), No interrupt for CBI\n", result);
+ US_DEBUGP("usb_request_irq failed (0x%x), No interrupt for CBI\n",
+ result);
return DID_ABORT << 16;
}
@@ -468,7 +455,7 @@ static int pop_CBI(Scsi_Cmnd *srb)
if (us_transfer_length(srb)) {
result = us_transfer(srb, US_DIRECTION(srb->cmnd[0]));
if (result && result != USB_ST_DATAUNDERRUN && result != USB_ST_STALL) {
- US_DEBUGP("CBI transfer %x\n", result);
+ US_DEBUGP("CBI transfer %x\n", result);
return DID_ERROR << 16;
}
#if 0
@@ -483,33 +470,29 @@ static int pop_CBI(Scsi_Cmnd *srb)
}
/* get status */
-
return pop_CB_status(srb);
}
static int pop_Bulk_reset(struct us_data *us)
{
- devrequest dr;
int result;
- dr.requesttype = USB_TYPE_CLASS | USB_RT_INTERFACE;
- dr.request = US_BULK_RESET;
- dr.value = US_BULK_RESET_HARD;
- dr.index = 0;
- dr.length = 0;
-
- result = us->pusb_dev->bus->op->control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0), &dr, NULL, 0, HZ);
+ result = usb_control_msg(us->pusb_dev, usb_sndctrlpipe(us->pusb_dev,0),
+ US_BULK_RESET, USB_TYPE_CLASS | USB_RT_INTERFACE,
+ US_BULK_RESET_HARD, 0,
+ NULL, 0, HZ*5);
if (result)
US_DEBUGP("Bulk hard reset failed %d\n", result);
- usb_clear_halt(us->pusb_dev, us->ep_in | 0x80);
- usb_clear_halt(us->pusb_dev, us->ep_out);
+ usb_clear_halt(us->pusb_dev, us->ep_in | USB_DIR_IN);
+ usb_clear_halt(us->pusb_dev, us->ep_out | USB_DIR_OUT);
/* long wait for reset */
- schedule_timeout(HZ*5);
+ schedule_timeout(HZ*6);
return result;
}
+
/*
* The bulk only protocol handler.
* Uses the in and out endpoints to transfer commands and data (nasty)
@@ -540,8 +523,9 @@ static int pop_Bulk(Scsi_Cmnd *srb)
/* send it to out endpoint */
- US_DEBUGP("Bulk command S %x T %x L %d F %d CL %d\n", bcb.Signature,
- bcb.Tag, bcb.DataTransferLength, bcb.Flags, bcb.Length);
+ US_DEBUGP("Bulk command S %x T %x L %d F %d CL %d\n",
+ bcb.Signature, bcb.Tag, bcb.DataTransferLength,
+ bcb.Flags, bcb.Length);
result = us->pusb_dev->bus->op->bulk_msg(us->pusb_dev,
usb_sndbulkpipe(us->pusb_dev, us->ep_out), &bcb,
US_BULK_CB_WRAP_LEN, &partial, HZ*5);
@@ -563,7 +547,6 @@ static int pop_Bulk(Scsi_Cmnd *srb)
/* get status */
-
stall = 0;
do {
result = us->pusb_dev->bus->op->bulk_msg(us->pusb_dev,
@@ -581,8 +564,8 @@ static int pop_Bulk(Scsi_Cmnd *srb)
/* check bulk status */
- US_DEBUGP("Bulk status S %x T %x R %d V %x\n", bcs.Signature, bcs.Tag,
- bcs.Residue, bcs.Status);
+ US_DEBUGP("Bulk status S %x T %x R %d V %x\n",
+ bcs.Signature, bcs.Tag, bcs.Residue, bcs.Status);
if (bcs.Signature != US_BULK_CS_SIGN || bcs.Tag != bcb.Tag ||
bcs.Status > US_BULK_STAT_PHASE) {
US_DEBUGP("Bulk logical error\n");
@@ -602,8 +585,8 @@ static int pop_Bulk(Scsi_Cmnd *srb)
case US_BULK_STAT_PHASE:
return DID_ERROR << 16;
}
- return (DID_OK << 16) | 2; /* check sense required */
+ return (DID_OK << 16) | 2; /* check sense required */
}
/* Host functions */
@@ -660,7 +643,7 @@ static int us_release(struct Scsi_Host *psh)
/* FIXME - leaves hanging host template copy */
/* (because scsi layer uses it after removal !!!) */
- while(prev->next != us)
+ while (prev->next != us)
prev = prev->next;
prev->next = us->next;
return 0;
@@ -713,7 +696,6 @@ static int us_host_reset( Scsi_Cmnd *srb )
return 0;
}
-
#undef SPRINTF
#define SPRINTF(args...) { if (pos < (buffer + length)) pos += sprintf (pos, ## args); }
@@ -863,10 +845,11 @@ static int usbscsi_control_thread(void * __us)
us->action = 0;
switch (action) {
- case US_ACT_COMMAND :
+ case US_ACT_COMMAND:
if (us->srb->target || us->srb->lun) {
/* bad device */
- US_DEBUGP( "Bad device number (%d/%d) or dev %x\n", us->srb->target, us->srb->lun, (unsigned int)us->pusb_dev);
+ US_DEBUGP( "Bad device number (%d/%d) or dev %x\n",
+ us->srb->target, us->srb->lun, (unsigned int)us->pusb_dev);
us->srb->result = DID_BAD_TARGET << 16;
} else if (!us->pusb_dev) {
@@ -934,7 +917,7 @@ static int usbscsi_control_thread(void * __us)
default:
break;
- }
+ } /* end switch on cmnd[0] */
us->srb->result = us->pop(us->srb);
if (savelen != us->srb->request_bufflen &&
@@ -971,9 +954,10 @@ static int usbscsi_control_thread(void * __us)
us->srb->cmnd[7] = length >> 8;
us->srb->cmnd[8] = length;
break;
- }
+ } /* end switch on cmnd[0] */
- US_DEBUGP("Old/New length = %d/%d\n", savelen, length);
+ US_DEBUGP("Old/New length = %d/%d\n",
+ savelen, length);
if (us->srb->request_bufflen != length) {
US_DEBUGP("redoing cmd with len=%d\n", length);
@@ -1004,7 +988,7 @@ static int usbscsi_control_thread(void * __us)
us->srb->cmnd[7] = saveallocation >> 8;
us->srb->cmnd[8] = saveallocation;
break;
- }
+ } /* end switch on cmnd[0] */
}
/* force attention on first command */
if (!us->attention_done) {
@@ -1032,31 +1016,31 @@ static int usbscsi_control_thread(void * __us)
us->srb = NULL;
break;
- case US_ACT_ABORT :
+ case US_ACT_ABORT:
break;
- case US_ACT_DEVICE_RESET :
+ case US_ACT_DEVICE_RESET:
break;
- case US_ACT_BUS_RESET :
+ case US_ACT_BUS_RESET:
break;
- case US_ACT_HOST_RESET :
+ case US_ACT_HOST_RESET:
break;
- }
+ } /* end switch on action */
- if(signal_pending(current)) {
+ if (signal_pending(current)) {
/* sending SIGUSR1 makes us print out some info */
spin_lock_irq(&current->sigmask_lock);
signr = dequeue_signal(&current->blocked, &info);
spin_unlock_irq(&current->sigmask_lock);
if (signr == SIGUSR2) {
- printk("USBSCSI debug toggle\n");
usbscsi_debug = !usbscsi_debug;
+ printk(USB_SCSI "debug toggle = %d\n", usbscsi_debug);
} else {
- break;
+ break; /* exit the loop on any other signal */
}
}
}
@@ -1114,7 +1098,8 @@ static int scsi_probe(struct usb_device *dev)
protocol = US_PR_CB;
subclass = US_SC_8070; /* an assumption */
} else if (dev->descriptor.bDeviceClass != 0 ||
- dev->config[0].interface[0].altsetting[0].bInterfaceClass != 8 ||
+ dev->config[0].interface[0].altsetting[0].bInterfaceClass !=
+ USB_CLASS_MASS_STORAGE ||
dev->config[0].interface[0].altsetting[0].bInterfaceSubClass < US_SC_MIN ||
dev->config[0].interface[0].altsetting[0].bInterfaceSubClass > US_SC_MAX) {
return -1;
@@ -1132,7 +1117,8 @@ static int scsi_probe(struct usb_device *dev)
}
for (ss = us_list; ss; ss = ss->next) {
if (!ss->pusb_dev && GUID_EQUAL(guid, ss->guid)) {
- US_DEBUGP("Found existing GUID " GUID_FORMAT "\n", GUID_ARGS(guid));
+ US_DEBUGP("Found existing GUID " GUID_FORMAT "\n",
+ GUID_ARGS(guid));
flags = ss->flags;
break;
}
@@ -1192,16 +1178,22 @@ static int scsi_probe(struct usb_device *dev)
*/
for (i = 0; i < interface->bNumEndpoints; i++) {
- if (interface->endpoint[i].bmAttributes == 0x02) {
+ if ((interface->endpoint[i].bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
+ == USB_ENDPOINT_XFER_BULK) {
if (interface->endpoint[i].bEndpointAddress & USB_DIR_IN)
- ss->ep_in = interface->endpoint[i].bEndpointAddress & 0x0f;
+ ss->ep_in = interface->endpoint[i].bEndpointAddress &
+ USB_ENDPOINT_NUMBER_MASK;
else
- ss->ep_out = interface->endpoint[i].bEndpointAddress & 0x0f;
- } else if (interface->endpoint[i].bmAttributes == 0x03) {
- ss->ep_int = interface->endpoint[i].bEndpointAddress & 0x0f;
+ ss->ep_out = interface->endpoint[i].bEndpointAddress &
+ USB_ENDPOINT_NUMBER_MASK;
+ } else if ((interface->endpoint[i].bmAttributes & USB_ENDPOINT_XFERTYPE_MASK)
+ == USB_ENDPOINT_XFER_INT) {
+ ss->ep_int = interface->endpoint[i].bEndpointAddress &
+ USB_ENDPOINT_NUMBER_MASK;
}
}
- US_DEBUGP("Endpoints In %d Out %d Int %d\n", ss->ep_in, ss->ep_out, ss->ep_int);
+ US_DEBUGP("Endpoints In %d Out %d Int %d\n",
+ ss->ep_in, ss->ep_out, ss->ep_int);
/* exit if strange looking */
@@ -1221,9 +1213,11 @@ static int scsi_probe(struct usb_device *dev)
}
if (dev->config[0].iConfiguration && usb_string(dev, dev->config[0].iConfiguration))
- US_DEBUGP("Configuration %s\n", usb_string(dev, dev->config[0].iConfiguration));
+ US_DEBUGP("Configuration %s\n",
+ usb_string(dev, dev->config[0].iConfiguration));
if (interface->iInterface && usb_string(dev, interface->iInterface))
- US_DEBUGP("Interface %s\n", usb_string(dev, interface->iInterface));
+ US_DEBUGP("Interface %s\n",
+ usb_string(dev, interface->iInterface));
ss->pusb_dev = dev;
@@ -1284,31 +1278,26 @@ static int scsi_probe(struct usb_device *dev)
if (dev->descriptor.idVendor == 0x04e6 &&
dev->descriptor.idProduct == 0x0001) {
- devrequest dr;
__u8 qstat[2];
int result;
/* shuttle E-USB */
- dr.requesttype = 0xC0;
- dr.request = 1;
- dr.index = 0;
- dr.value = 0;
- dr.length = 0;
- ss->pusb_dev->bus->op->control_msg(ss->pusb_dev, usb_rcvctrlpipe(dev,0), &dr, qstat, 2, HZ);
+ result = usb_control_msg(ss->pusb_dev, usb_rcvctrlpipe(dev,0),
+ 1, 0xC0,
+ 0, 0,
+ qstat, 2, HZ*5);
US_DEBUGP("C0 status %x %x\n", qstat[0], qstat[1]);
init_waitqueue_head(&ss->ip_waitq);
ss->irqpipe = usb_rcvctrlpipe(ss->pusb_dev, ss->ep_int);
- result = ss->pusb_dev->bus->op->request_irq(ss->pusb_dev, ss->irqpipe,
- pop_CBI_irq, 0,
- (void *)ss, &ss->irq_handle);
+ result = usb_request_irq(ss->pusb_dev, ss->irqpipe, pop_CBI_irq,
+ 0, (void *)ss, &ss->irq_handle);
if (result)
return -1;
- interruptible_sleep_on_timeout(&ss->ip_waitq, HZ*5);
+ interruptible_sleep_on_timeout(&ss->ip_waitq, HZ*6);
} else if (ss->protocol == US_PR_CBI)
init_waitqueue_head(&ss->ip_waitq);
-
/* start up our thread */
{
@@ -1343,10 +1332,8 @@ static int scsi_probe(struct usb_device *dev)
while (prev->next)
prev = prev->next;
prev->next = ss;
-
}
-
printk(KERN_INFO "USB SCSI device found at address %d\n", dev->devnum);
dev->private = ss;
@@ -1368,20 +1355,20 @@ static void scsi_disconnect(struct usb_device *dev)
int usb_scsi_init(void)
{
-
MOD_INC_USE_COUNT;
+
#ifdef CONFIG_USB_HP4100
hp4100_init();
#endif
#ifdef CONFIG_USB_ZIP
usb_zip_init();
#endif
+
usb_register(&scsi_driver);
printk(KERN_INFO "USB SCSI support registered.\n");
return 0;
}
-
int usb_scsi_register(struct usb_scsi_filter *filter)
{
struct usb_scsi_filter *prev = (struct usb_scsi_filter *)&filters;
@@ -1405,7 +1392,6 @@ void usb_scsi_deregister(struct usb_scsi_filter *filter)
#ifdef MODULE
int init_module(void)
{
-
return usb_scsi_init();
}