# This is a BitKeeper generated patch for the following project: # Project Name: Linux kernel tree # This patch format is intended for GNU patch command version 2.5 or higher. # This patch includes the following deltas: # ChangeSet v2.5.67 -> 1.1177 # drivers/i2c/chips/w83781d.c 1.2 -> 1.4 # fs/xfs/linux/xfs_lrw.c 1.18 -> 1.19 # drivers/i2c/i2c-frodo.c 1.6 -> 1.7 # net/ipv4/netfilter/ip_conntrack_core.c 1.22 -> 1.24 # drivers/char/drm/drm_agpsupport.h 1.16 -> 1.17 # drivers/char/drm/drm_context.h 1.10 -> 1.11 # arch/ia64/lib/io.c 1.2 -> 1.3 # drivers/net/3c59x.c 1.32 -> 1.33 # net/bridge/netfilter/ebtable_broute.c 1.4 -> 1.5 # arch/ia64/kernel/fsys.S 1.9 -> 1.10 # arch/sparc64/kernel/signal32.c 1.28 -> 1.29 # fs/xfs/xfs_mount.h 1.11 -> 1.12 # include/asm-alpha/pci.h 1.12 -> 1.13 # include/linux/kernel.h 1.34 -> 1.35 # drivers/media/dvb/av7110/av7110.c 1.5 -> (deleted) # sound/oss/opl3sa2.c 1.19 -> 1.20 # sound/core/seq/oss/seq_oss_midi.c 1.7 -> 1.8 # sound/oss/cs46xx.c 1.24 -> 1.25 # arch/ia64/sn/tools/make_textsym 1.3 -> 1.4 arch/ia64/sn/fakeprom/make_textsym (moved) # sound/oss/dmasound/dmasound_paula.c 1.6 -> 1.7 # sound/pci/cs46xx/dsp_spos.h 1.7 -> 1.8 # drivers/usb/input/kbtab.c 1.1 -> 1.2 # drivers/usb/misc/uss720.c 1.12 -> 1.13 # sound/oss/dmasound/dmasound_q40.c 1.8 -> 1.9 # sound/oss/sb_midi.c 1.3 -> 1.4 # drivers/base/hotplug.c 1.10 -> 1.11 # include/sound/initval.h 1.7 -> 1.8 # sound/i2c/cs8427.c 1.5 -> 1.6 # drivers/media/dvb/frontends/Makefile 1.3 -> 1.4 # include/asm-v850/teg.h 1.1 -> 1.2 # sound/pci/emu10k1/emupcm.c 1.13 -> 1.14 # arch/ia64/kernel/palinfo.c 1.12 -> 1.13 # fs/nfs/nfs4state.c 1.1 -> 1.3 # sound/pci/korg1212/korg1212.c 1.18 -> 1.19 # sound/pci/ac97/ac97_patch.h 1.5 -> 1.6 # drivers/i2c/Makefile 1.9 -> 1.10 # drivers/usb/serial/ipaq.h 1.7 -> 1.8 # net/ipv4/proc.c 1.10 -> 1.11 # drivers/net/wan/cosa.c 1.18 -> 1.19 # arch/ia64/ia32/ia32_signal.c 1.15 -> 1.17 # fs/xfs/support/atomic.h 1.2 -> (deleted) # fs/select.c 1.17 -> 1.18 # include/asm-ia64/machvec_init.h 1.3 -> 1.4 # drivers/usb/class/usb-midi.c 1.13 -> 1.14 # drivers/char/Kconfig 1.11 -> 1.12 # drivers/pnp/pnpbios/core.c 1.28 -> 1.29 # include/linux/kobject.h 1.18 -> 1.19 # arch/ia64/Makefile 1.39 -> 1.42 # include/linux/mm.h 1.114 -> 1.115 # arch/i386/kernel/cpu/common.c 1.20 -> 1.21 # drivers/char/agp/sis-agp.c 1.14 -> 1.15 # arch/i386/kernel/apm.c 1.48 -> 1.49 # include/sound/memalloc.h 1.1 -> 1.3 # fs/open.c 1.36 -> 1.37 # net/bridge/br_notify.c 1.1 -> 1.2 # include/asm-ia64/io.h 1.7 -> 1.9 # drivers/ide/pci/serverworks.c 1.16 -> 1.17 # drivers/base/core.c 1.63 -> 1.64 # fs/xfs/linux/xfs_lrw.h 1.10 -> 1.11 # drivers/usb/serial/io_edgeport.c 1.40 -> 1.41 # sound/oss/vidc.c 1.7 -> 1.8 # mm/page_alloc.c 1.150 -> 1.151 # arch/alpha/kernel/pci.c 1.29 -> 1.30 # drivers/i2c/busses/Makefile 1.6 -> 1.7 # mm/readahead.c 1.29 -> 1.30 # include/linux/irda.h 1.5 -> 1.6 # net/ipv6/ipv6_sockglue.c 1.16 -> 1.17 # sound/pci/cs46xx/cs46xx_lib.c 1.29 -> 1.30 # include/asm-ia64/spinlock.h 1.7 -> 1.9 # arch/sparc/kernel/sparc_ksyms.c 1.15 -> 1.16 # drivers/char/drm/i830_dma.c 1.13 -> 1.14 # drivers/usb/host/ohci-hcd.c 1.40 -> 1.41 # arch/v850/kernel/rte_cb.c 1.3 -> 1.4 # drivers/media/dvb/dvb-core/dvb_net.h 1.2 -> 1.3 # include/linux/compatmac.h 1.3 -> (deleted) # include/asm-ia64/sn/io.h 1.3 -> 1.4 # drivers/char/drm/drm_proc.h 1.9 -> 1.10 # sound/oss/emu10k1/audio.c 1.14 -> 1.15 # include/asm-i386/mach-visws/irq_vectors.h 1.4 -> 1.5 # drivers/char/agp/i7x05-agp.c 1.8 -> (deleted) # include/linux/sched.h 1.138 -> 1.139 # sound/isa/als100.c 1.12 -> 1.13 # include/asm-ia64/machvec_hpzx1.h 1.5 -> 1.6 # arch/i386/kernel/vm86.c 1.23 -> 1.24 # kernel/sysctl.c 1.39 -> 1.41 # kernel/sys.c 1.42 -> 1.43 # sound/oss/wf_midi.c 1.6 -> 1.7 # include/linux/dvb/net.h 1.1 -> 1.2 # sound/core/seq/seq_memory.c 1.6 -> 1.7 # drivers/i2c/chips/via686a.c 1.3 -> 1.5 # fs/xfs/xfs_rw.h 1.4 -> 1.5 # include/sound/opl3.h 1.5 -> 1.6 # net/ipv4/xfrm4_input.c 1.4 -> 1.5 # include/net/tcp.h 1.33 -> 1.34 # net/rxrpc/krxtimod.c 1.4 -> 1.5 # drivers/media/dvb/frontends/alps_bsrv2.c 1.3 -> 1.4 # drivers/ieee1394/ohci1394.h 1.14 -> 1.15 # sound/isa/cs423x/cs4236.c 1.13 -> 1.14 # fs/dcache.c 1.47 -> 1.49 # drivers/ieee1394/sbp2.c 1.24 -> 1.25 # net/bridge/br_ioctl.c 1.2 -> 1.4 # sound/oss/esssolo1.c 1.21 -> 1.22 # include/linux/dvb/video.h 1.1 -> 1.2 # net/ipv4/af_inet.c 1.42 -> 1.43 # mm/vmscan.c 1.151 -> 1.152 # sound/oss/ac97_codec.c 1.13 -> 1.14 # drivers/media/dvb/frontends/grundig_29504-401.c 1.2 -> 1.3 # fs/proc/proc_misc.c 1.71 -> 1.72 # sound/isa/cmi8330.c 1.13 -> 1.14 # drivers/media/dvb/av7110/saa7146.c 1.3 -> (deleted) # drivers/char/agp/frontend.c 1.28 -> 1.31 # drivers/scsi/NCR_D700.c 1.6 -> 1.7 # sound/drivers/opl3/opl3_synth.c 1.2 -> 1.3 # arch/sparc/Makefile 1.22 -> 1.23 # arch/ia64/sn/kernel/Makefile 1.10 -> 1.11 # fs/proc/task_mmu.c 1.1 -> 1.2 # arch/sparc/kernel/process.c 1.22 -> 1.23 # sound/pci/cs46xx/cs46xx_lib.h 1.8 -> 1.9 # drivers/char/agp/generic-3.0.c 1.7 -> 1.9 # arch/ia64/hp/common/sba_iommu.c 1.10 -> 1.11 # include/asm-i386/uaccess.h 1.22 -> 1.23 # drivers/block/floppy.c 1.71 -> 1.72 # arch/i386/Kconfig 1.49 -> 1.50 # sound/oss/dmasound/dmasound_core.c 1.8 -> 1.9 # drivers/media/dvb/frontends/Kconfig 1.3 -> 1.4 # include/asm-i386/mach-visws/smpboot_hooks.h 1.2 -> 1.3 # include/sound/snd_wavefront.h 1.2 -> 1.3 # sound/oss/ics2101.c 1.3 -> 1.4 # sound/core/control.c 1.19 -> 1.20 # net/bridge/br.c 1.9 -> 1.10 # include/asm-sparc/pgtsun4c.h 1.1 -> 1.2 # net/ipv4/udp.c 1.34 -> 1.35 # sound/isa/opti9xx/opti92x-ad1848.c 1.12 -> 1.13 # drivers/media/dvb/dvb-core/dvb_demux.c 1.3 -> 1.4 # arch/v850/kernel/process.c 1.4 -> 1.5 # include/asm-i386/signal.h 1.7 -> 1.8 # drivers/ieee1394/ieee1394_core.h 1.12 -> 1.13 # include/asm-v850/rte_ma1_cb.h 1.1 -> 1.2 # net/sched/sch_dsmark.c 1.7 -> 1.8 # init/main.c 1.96 -> 1.97 # arch/i386/kernel/traps.c 1.48 -> 1.49 # sound/oss/sb_mixer.c 1.4 -> 1.5 # include/linux/i2c.h 1.21 -> 1.23 # sound/core/wrappers.c 1.6 -> 1.7 # arch/alpha/kernel/setup.c 1.30 -> 1.31 # fs/stat.c 1.17 -> 1.18 # drivers/ieee1394/sbp2.h 1.14 -> 1.15 # sound/oss/midi_synth.h 1.2 -> 1.3 # drivers/ieee1394/hosts.h 1.12 -> 1.13 # include/asm-ia64/atomic.h 1.4 -> 1.5 # drivers/media/dvb/dvb-core/dvb_net.c 1.2 -> 1.3 # include/asm-x86_64/fixmap.h 1.2 -> 1.3 # fs/xfs/xfs_vfsops.c 1.27 -> 1.28 # fs/nfs/Makefile 1.7 -> 1.8 # sound/oss/ite8172.c 1.10 -> 1.11 # sound/oss/v_midi.c 1.4 -> 1.5 # drivers/media/dvb/dvb-core/dvbdev.c 1.5 -> 1.6 # mm/swapfile.c 1.69 -> 1.72 # sound/drivers/opl3/opl3_lib.c 1.7 -> 1.8 # fs/xfs/xfs.h 1.4 -> 1.5 # drivers/media/dvb/frontends/alps_tdmb7.c 1.2 -> 1.3 # drivers/i2c/Kconfig 1.7 -> 1.8 # arch/ia64/kernel/time.c 1.16 -> 1.19 # drivers/media/dvb/dvb-core/dvb_i2c.h 1.2 -> 1.3 # include/asm-ia64/mca.h 1.5 -> 1.6 # drivers/ieee1394/csr.c 1.7 -> 1.8 # drivers/media/dvb/dvb-core/dvb_filter.h 1.2 -> 1.3 # include/linux/dvb/audio.h 1.1 -> 1.2 # drivers/char/drm/drm_bufs.h 1.10 -> 1.12 # drivers/block/Kconfig 1.3 -> 1.4 # net/ipv6/xfrm6_policy.c 1.1 -> 1.2 # include/net/ip6_route.h 1.5 -> 1.6 # drivers/i2c/i2c-adap-ite.c 1.10 -> 1.11 # kernel/time.c 1.10 -> 1.11 # include/asm-i386/mach-voyager/irq_vectors.h 1.2 -> 1.3 # drivers/media/dvb/dvb-core/dvb_frontend.c 1.3 -> 1.4 # drivers/char/drm/drm_ioctl.h 1.9 -> 1.10 # drivers/ieee1394/ieee1394_core.c 1.25 -> 1.26 # sound/isa/ad1816a/ad1816a.c 1.7 -> 1.8 # drivers/net/pcmcia/3c574_cs.c 1.13 -> 1.14 # sound/oss/pas2_pcm.c 1.4 -> 1.5 # sound/oss/btaudio.c 1.11 -> 1.12 # drivers/usb/core/message.c 1.24 -> 1.25 # net/ipv4/netfilter/ip_tables.c 1.13 -> 1.14 # drivers/base/bus.c 1.42 -> 1.43 # fs/mpage.c 1.40 -> 1.41 # fs/xfs/xfs_fs.h 1.5 -> 1.7 # kernel/softirq.c 1.36 -> 1.37 # net/ipv4/Makefile 1.16 -> 1.18 # arch/ia64/kernel/smpboot.c 1.27 -> 1.28 # arch/ia64/sn/io/Makefile 1.10 -> 1.11 # drivers/media/Kconfig 1.3 -> 1.4 # include/asm-i386/mach-default/irq_vectors.h 1.5 -> 1.6 # sound/oss/gus_wave.c 1.7 -> 1.8 # drivers/media/dvb/frontends/alps_tdlb7.c 1.2 -> 1.3 # arch/v850/kernel/rte_mb_a_pci.c 1.5 -> 1.6 # include/linux/i2c-dev.h 1.7 -> 1.8 # include/asm-sparc64/signal.h 1.7 -> 1.8 # include/linux/fs.h 1.226 -> 1.231 # drivers/usb/storage/usb.c 1.58 -> 1.60 # arch/ia64/kernel/entry.S 1.36 -> 1.39 # arch/ia64/sn/kernel/setup.c 1.10 -> 1.11 # kernel/futex.c 1.24 -> 1.25 # include/sound/emu10k1.h 1.12 -> 1.13 # include/asm-v850/processor.h 1.4 -> 1.5 # include/asm-i386/sigcontext.h 1.2 -> 1.3 # drivers/net/lp486e.c 1.9 -> 1.10 # sound/oss/via82cxxx_audio.c 1.24 -> 1.25 # sound/oss/dmasound/dmasound_atari.c 1.7 -> 1.8 # include/asm-generic/siginfo.h 1.5 -> 1.8 # drivers/ieee1394/ieee1394.h 1.4 -> 1.5 # drivers/net/appletalk/ltpc.c 1.8 -> 1.9 # net/ipv4/ip_sockglue.c 1.12 -> 1.13 # Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl 1.7 -> 1.8 # drivers/block/paride/pseudo.h 1.7 -> 1.8 # include/asm-ia64/pgtable.h 1.17 -> 1.18 # arch/v850/kernel/nb85e_intc.c 1.2 -> 1.3 # drivers/char/upd4990a.c 1.1 -> 1.2 # drivers/media/dvb/Kconfig 1.1 -> 1.2 # include/asm-i386/mach-default/smpboot_hooks.h 1.2 -> 1.3 # drivers/media/dvb/dvb-core/dvbdev.h 1.2 -> 1.3 # net/bridge/br_forward.c 1.6 -> 1.7 # arch/v850/kernel/rte_cb_multi.c 1.4 -> 1.5 # drivers/char/agp/Makefile 1.17 -> 1.19 # include/sound/cs46xx.h 1.11 -> 1.12 # include/asm-v850/nb85e_timer_d.h 1.1 -> 1.2 # drivers/ieee1394/ieee1394_transactions.c 1.10 -> 1.11 # include/linux/namei.h 1.4 -> 1.5 # include/asm-ia64/module.h 1.9 -> 1.11 # arch/i386/kernel/io_apic.c 1.60 -> 1.61 # drivers/ieee1394/highlevel.h 1.5 -> 1.6 # arch/parisc/kernel/sys_parisc32.c 1.11 -> 1.12 # sound/pci/rme9652/hdsp.c 1.15 -> 1.16 # sound/core/pcm_native.c 1.29 -> 1.30 # sound/pci/ice1712/ice1712.c 1.9 -> 1.10 # drivers/net/sunhme.c 1.30 -> 1.31 # include/asm-sparc/pgtsrmmu.h 1.4 -> 1.5 # mm/filemap.c 1.188 -> 1.189 # drivers/char/drm/i810_dma.c 1.21 -> 1.22 # arch/i386/kernel/edd.c 1.15 -> 1.16 # drivers/media/dvb/dvb-core/demux.h 1.1 -> 1.2 # sound/oss/waveartist.c 1.5 -> 1.6 # fs/namei.c 1.69 -> 1.70 # net/bridge/netfilter/ebtables.c 1.6 -> 1.7 # sound/oss/dmasound/dmasound_awacs.c 1.10 -> 1.11 # fs/xfs/xfs_mount.c 1.23 -> 1.24 # drivers/char/agp/generic.c 1.19 -> 1.25 # net/socket.c 1.48 -> 1.49 # drivers/ieee1394/pcilynx.c 1.26 -> 1.28 # include/asm-ia64/processor.h 1.32 -> 1.34 # sound/oss/sb_ess.c 1.5 -> 1.6 # arch/sparc/kernel/sys_sparc.c 1.9 -> 1.11 # sound/pci/rme96.c 1.15 -> 1.16 # sound/oss/pas2_mixer.c 1.3 -> 1.4 # include/linux/nfs_fs.h 1.43 -> 1.45 # drivers/input/keyboard/98kbd.c 1.1 -> 1.2 # drivers/net/macmace.c 1.8 -> 1.9 # net/ipv4/netfilter/iptable_filter.c 1.6 -> 1.7 # drivers/media/video/Makefile 1.17 -> 1.18 # sound/pci/rme9652/multiface_firmware.dat 1.2 -> (deleted) # net/xfrm/xfrm_algo.c 1.8 -> 1.9 # sound/isa/cs423x/pc98.c 1.1 -> 1.2 # sound/pci/ac97/ac97_codec.c 1.33 -> 1.35 # arch/ia64/sn/io/sn2/l1_command.c 1.1 -> 1.2 # drivers/base/base.h 1.23 -> 1.24 # drivers/media/dvb/dvb-core/dvb_demux.h 1.2 -> 1.3 # drivers/mtd/mtdblock.c 1.40 -> 1.41 # fs/exec.c 1.74 -> 1.76 # fs/xfs/linux/xfs_globals.h 1.4 -> 1.5 # include/sound/driver.h 1.5 -> 1.6 # include/asm-ia64/machvec_sn2.h 1.4 -> 1.7 # include/sound/ymfpci.h 1.4 -> 1.5 # drivers/usb/storage/transport.c 1.66 -> 1.68 # net/ipv4/netfilter/ip_fw_compat.c 1.13 -> 1.14 # arch/ia64/sn/fakeprom/fpmem.c 1.6 -> 1.7 # mm/msync.c 1.11 -> 1.12 # fs/eventpoll.c 1.17 -> 1.18 # net/ipv6/netfilter/ip6table_mangle.c 1.6 -> 1.7 # drivers/media/dvb/av7110/av7110_firm.h 1.1 -> (deleted) # mm/fadvise.c 1.3 -> 1.4 # kernel/signal.c 1.79 -> 1.80 # drivers/usb/storage/transport.h 1.20 -> 1.21 # sound/isa/dt019x.c 1.12 -> 1.13 # include/linux/net.h 1.11 -> 1.12 # sound/oss/awe_wave.c 1.11 -> 1.12 # net/netsyms.c 1.61 -> 1.63 # drivers/char/sx.c 1.21 -> 1.22 # net/sched/sch_prio.c 1.6 -> 1.7 # fs/xfs/support/ktrace.c 1.1 -> 1.2 # include/linux/pci_ids.h 1.87.1.1 -> 1.89 # drivers/media/video/saa7111.c 1.9 -> 1.10 # sound/core/pcm_lib.c 1.18 -> 1.19 # drivers/usb/serial/usb-serial.c 1.74 -> 1.75 # include/asm-sparc64/uaccess.h 1.6 -> 1.7 # sound/pci/ymfpci/ymfpci.c 1.10 -> 1.11 # include/asm-ia64/system.h 1.32 -> 1.34 # sound/usb/usbquirks.h 1.12 -> 1.13 # sound/isa/es18xx.c 1.14 -> 1.16 # kernel/itimer.c 1.3 -> 1.4 # drivers/char/agp/agp.h 1.44 -> 1.49 # arch/sparc64/kernel/process.c 1.40 -> 1.41 # mm/swap_state.c 1.58 -> 1.59 # drivers/media/radio/radio-cadet.c 1.12 -> 1.13 # sound/oss/nm256_audio.c 1.9 -> 1.10 # include/asm-v850/rte_cb.h 1.1 -> 1.2 # net/ipv4/netfilter/ip_conntrack_standalone.c 1.16 -> 1.17 # fs/super.c 1.99 -> 1.100 # sound/pci/rme9652/rme9652.c 1.16 -> 1.17 # arch/ia64/pci/pci.c 1.25 -> 1.26 # sound/oss/sonicvibes.c 1.16 -> 1.17 # include/linux/hdreg.h 1.24 -> 1.25 # arch/i386/kernel/signal.c 1.28 -> 1.29 # arch/v850/Kconfig 1.8 -> 1.9 # arch/ia64/kernel/ia64_ksyms.c 1.19 -> 1.21 # drivers/usb/core/hub.c 1.61 -> 1.62 # sound/oss/emu10k1/passthrough.c 1.6 -> 1.7 # net/core/netfilter.c 1.12 -> 1.13 # drivers/net/acenic.c 1.27 -> 1.28 # drivers/net/8139cp.c 1.34 -> 1.35 # drivers/block/genhd.c 1.78 -> 1.79 # drivers/net/e100/e100_main.c 1.59 -> 1.60 # arch/ia64/kernel/mca.c 1.18 -> 1.22 # fs/readdir.c 1.19 -> 1.20 # arch/ia64/kernel/process.c 1.26 -> 1.30 # drivers/i2c/scx200_i2c.c 1.2 -> 1.3 # include/linux/dvb/frontend.h 1.1 -> 1.2 # arch/i386/kernel/smpboot.c 1.55 -> 1.57 # include/linux/nfs4.h 1.4 -> 1.7 # sound/oss/sys_timer.c 1.4 -> 1.5 # include/sound/cs46xx_dsp_scb_types.h 1.2 -> 1.3 # arch/x86_64/kernel/suspend.c 1.4 -> 1.5 # fs/nfs/dir.c 1.52 -> 1.54 # arch/ia64/kernel/acpi.c 1.34 -> 1.36 # drivers/char/agp/intel-agp.c 1.24 -> 1.26 # include/asm-ia64/smp.h 1.8 -> 1.9 # sound/isa/sb/es968.c 1.11 -> 1.12 # include/asm-v850/nb85e_cache.h 1.1 -> 1.2 # sound/core/seq/instr/ainstr_iw.c 1.3 -> 1.4 # sound/oss/soundcard.c 1.14 -> 1.15 # include/linux/if_bridge.h 1.2 -> 1.3 # drivers/usb/storage/scsiglue.c 1.40 -> 1.42 # sound/core/ioctl32/rawmidi32.c 1.9 -> 1.11 # sound/i2c/l3/uda1341.c 1.7 -> 1.8 # drivers/net/appletalk/cops.c 1.14 -> 1.15 # fs/xfs/xfs_bmap_btree.h 1.5 -> 1.6 # net/xfrm/xfrm_policy.c 1.23 -> 1.24 # net/core/dev.c 1.60 -> 1.62 # include/sound/control.h 1.2 -> 1.3 # include/linux/igmp.h 1.4 -> 1.5 # drivers/usb/core/usb.c 1.117 -> 1.119 # drivers/media/dvb/frontends/ves1820.c 1.3 -> 1.4 # kernel/posix-timers.c 1.10 -> 1.11 # arch/alpha/kernel/time.c 1.15 -> 1.16 # arch/alpha/kernel/semaphore.c 1.4 -> 1.5 # sound/ppc/awacs.c 1.9 -> 1.10 # sound/pci/emu10k1/emufx.c 1.17 -> 1.18 # Documentation/sysctl/kernel.txt 1.6 -> 1.7 # sound/pci/rme9652/digiface_firmware.dat 1.2 -> (deleted) # fs/xfs/linux/xfs_file.c 1.11 -> 1.12 # include/sound/ac97_codec.h 1.17 -> 1.18 # sound/oss/cmpci.c 1.17 -> 1.18 # kernel/uid16.c 1.4 -> 1.5 # sound/isa/gus/interwave.c 1.11 -> 1.12 # drivers/usb/net/usbnet.c 1.47 -> 1.48 # include/asm-ia64/intrinsics.h 1.4 -> 1.5 # include/asm-ia64/machvec.h 1.10 -> 1.13 # drivers/base/firmware.c 1.5 -> 1.6 # sound/oss/opl3.c 1.3 -> 1.4 # drivers/pnp/isapnp/core.c 1.33 -> 1.34 # include/asm-ia64/fcntl.h 1.1 -> 1.2 # drivers/i2c/chips/Kconfig 1.8 -> 1.9 # include/linux/sysctl.h 1.40 -> 1.42 # sound/core/ioctl32/timer32.c 1.9 -> 1.11 # drivers/net/tg3.c 1.64 -> 1.65 # arch/ia64/ia32/ia32_entry.S 1.20 -> 1.21 # arch/sparc64/kernel/sys_sparc.c 1.17 -> 1.19 # drivers/ieee1394/nodemgr.h 1.9 -> 1.10 # arch/i386/boot/setup.S 1.20 -> 1.21 # net/ipv6/af_inet6.c 1.26 -> 1.28 # sound/pci/ice1712/ak4524.c 1.8 -> 1.9 # sound/oss/wavfront.c 1.13 -> 1.14 # include/asm-sparc/pgtable.h 1.13 -> 1.14 # fs/ext3/xattr.c 1.13 -> 1.14 # net/sched/sch_csz.c 1.6 -> 1.7 # drivers/ide/pci/hpt366.c 1.16 -> 1.17 # fs/xfs/xfs_ialloc.c 1.4 -> 1.5 # arch/sparc64/kernel/signal.c 1.27 -> 1.28 # fs/buffer.c 1.192 -> 1.193 # arch/ia64/kernel/signal.c 1.21 -> 1.22 # drivers/char/agp/Kconfig 1.11 -> 1.15 # arch/sparc/mm/srmmu.c 1.28 -> 1.29 # net/ipv4/esp.c 1.24 -> 1.26 # drivers/ide/ide-probe.c 1.36 -> 1.37 # drivers/usb/input/hid-core.c 1.52 -> 1.53 # include/sound/trident.h 1.6 -> 1.7 # arch/ia64/boot/Makefile 1.11 -> 1.12 # drivers/media/dvb/Makefile 1.2 -> 1.3 # sound/oss/cs4232.c 1.10 -> 1.11 # arch/alpha/kernel/core_cia.c 1.13 -> 1.14 # fs/afs/kafstimod.c 1.4 -> 1.5 # drivers/char/tty_io.c 1.72 -> 1.73 # include/sound/cs46xx_dsp_spos.h 1.9 -> 1.10 # include/asm-sparc/signal.h 1.4 -> 1.5 # drivers/char/agp/i460-agp.c 1.14 -> 1.16 # sound/pci/maestro3.c 1.17 -> 1.18 # net/ipv6/ndisc.c 1.26 -> 1.27 # drivers/usb/net/rtl8150.c 1.21 -> 1.22 # sound/pci/intel8x0.c 1.30 -> 1.31 # drivers/acpi/bus.c 1.30 -> 1.31 # net/irda/irlap_event.c 1.18 -> 1.19 # arch/ia64/ia32/sys_ia32.c 1.46 -> 1.49 # sound/core/ioctl32/pcm32.c 1.11 -> 1.13 # net/core/datagram.c 1.8 -> 1.9 # drivers/ieee1394/nodemgr.c 1.21 -> 1.22 # sound/oss/ad1848.c 1.18 -> 1.19 # sound/oss/msnd_pinnacle.c 1.9 -> 1.10 # sound/oss/ymfpci.c 1.30 -> 1.31 # fs/xfs/linux/xfs_globals.c 1.10 -> 1.11 # fs/ext2/xattr.c 1.11 -> 1.12 # sound/drivers/opl3/opl3_seq.c 1.10 -> 1.11 # sound/oss/uart6850.c 1.6 -> 1.7 # include/linux/time.h 1.10 -> 1.11 # net/sched/sch_htb.c 1.7 -> 1.8 # fs/read_write.c 1.28 -> 1.29 # net/ipv6/esp6.c 1.10 -> 1.12 # drivers/char/drm/drm_dma.h 1.11 -> 1.12 # arch/sparc64/kernel/sys_sparc32.c 1.68 -> 1.70 # drivers/net/typhoon.c 1.1 -> 1.2 # sound/pci/trident/trident_main.c 1.15 -> 1.16 # include/linux/compiler.h 1.13 -> 1.15 # sound/isa/sb/sb8.c 1.8 -> 1.9 # sound/core/oss/mixer_oss.c 1.15 -> 1.16 # arch/ia64/sn/kernel/sn2/iomv.c 1.2 -> 1.3 # sound/ppc/pmac.h 1.3 -> 1.4 # drivers/char/agp/ali-agp.c 1.14 -> 1.15 # include/sound/asound.h 1.14 -> 1.15 # fs/nfs/file.c 1.26 -> 1.27 # Makefile 1.401 -> 1.402 # sound/pci/cmipci.c 1.19 -> 1.20 # include/linux/inetdevice.h 1.5 -> 1.6 # include/asm-ia64/machvec_sn1.h 1.6 -> 1.8 # arch/ia64/kernel/head.S 1.8 -> 1.9 # drivers/media/dvb/av7110/saa7146_defs.h 1.1 -> (deleted) # drivers/char/agp/amd-k8-agp.c 1.24 -> 1.30 # drivers/block/paride/pf.c 1.38 -> 1.39 # net/sunrpc/xprt.c 1.52 -> 1.53 # sound/core/sound.c 1.23 -> 1.24 # mm/page-writeback.c 1.59 -> 1.60 # net/ipv6/ah6.c 1.10 -> 1.12 # drivers/acpi/processor.c 1.37 -> 1.38 # sound/core/sgbuf.c 1.1 -> 1.3 # net/ipv4/tcp_output.c 1.25 -> 1.26 # drivers/usb/serial/keyspan.h 1.16 -> 1.17 # include/net/ip.h 1.15 -> 1.16 # drivers/net/arcnet/arcnet.c 1.8 -> 1.9 # include/linux/scc.h 1.2 -> 1.3 # sound/pci/es1938.c 1.15 -> 1.16 # sound/oss/pas2_midi.c 1.4 -> 1.5 # include/linux/dvb/osd.h 1.2 -> 1.3 # sound/core/Makefile 1.25 -> 1.26 # drivers/char/agp/backend.c 1.71 -> 1.72 # include/linux/page-flags.h 1.37 -> 1.38 # arch/ppc64/kernel/sys_ppc32.c 1.53 -> 1.54 # include/asm-sparc/system.h 1.16 -> 1.17 # arch/sparc/kernel/signal.c 1.20 -> 1.21 # CREDITS 1.80 -> 1.81 # sound/oss/emu10k1/mixer.c 1.6 -> 1.7 # drivers/net/wireless/strip.c 1.9 -> 1.10 # fs/seq_file.c 1.8 -> 1.9 # drivers/media/dvb/av7110/saa7146_core.h 1.2 -> (deleted) # drivers/media/dvb/dvb-core/compat.h 1.1 -> (deleted) # kernel/module.c 1.76 -> 1.77 # net/xfrm/xfrm_state.c 1.21 -> 1.23 # net/core/skbuff.c 1.23 -> 1.24 # fs/xfs/xfs_inode.h 1.12 -> 1.13 # drivers/ieee1394/dv1394.c 1.23 -> 1.24 # include/asm-x86_64/byteorder.h 1.1 -> 1.2 # arch/ia64/lib/swiotlb.c 1.13 -> 1.14 # drivers/char/drm/drmP.h 1.18 -> 1.19 # drivers/ide/pci/pdc202xx_new.c 1.14 -> 1.15 # drivers/ieee1394/ieee1394_types.h 1.14 -> 1.15 # include/asm-sparc/pci.h 1.8 -> 1.9 # net/ipv4/ip_gre.c 1.20 -> 1.22 # sound/oss/nec_vrc5477.c 1.9 -> 1.10 # drivers/net/hamradio/yam.c 1.13 -> 1.14 # include/net/ip6_fib.h 1.2 -> 1.3 # fs/nfs/nfs4proc.c 1.13 -> 1.20 # net/ipv6/route.c 1.22 -> 1.23 # sound/oss/es1371.c 1.21 -> 1.22 # drivers/media/dvb/av7110/saa7146_core.c 1.6 -> (deleted) # sound/isa/wavefront/wavefront.c 1.10 -> 1.11 # sound/oss/mad16.c 1.10 -> 1.11 # net/ipv4/xfrm4_policy.c 1.1 -> 1.2 # drivers/media/dvb/dvb-core/dvb_i2c.c 1.3 -> 1.4 # include/asm-i386/i387.h 1.10 -> 1.11 # arch/sparc/mm/sun4c.c 1.26 -> 1.27 # include/asm-v850/system.h 1.3 -> 1.4 # drivers/media/dvb/dvb-core/dmxdev.c 1.2 -> 1.3 # include/asm-i386/math_emu.h 1.2 -> 1.3 # sound/oss/i810_audio.c 1.33 -> 1.34 # sound/oss/trident.c 1.36 -> 1.37 # arch/ia64/sn/fakeprom/fprom.lds 1.3 -> 1.4 # fs/xfs/linux/xfs_ioctl.c 1.12 -> 1.13 # net/ipv4/Kconfig 1.5 -> 1.6 # include/asm-x86_64/rwsem.h 1.6 -> 1.7 # drivers/media/dvb/av7110/saa7146_v4l.h 1.1 -> (deleted) # drivers/i2c/i2c-dev.c 1.26 -> 1.27 # drivers/usb/storage/unusual_devs.h 1.26 -> 1.27 # mm/slab.c 1.73 -> 1.74 # net/ipv4/netfilter/arp_tables.c 1.5 -> 1.6 # fs/nfs/inode.c 1.73 -> 1.76 # arch/i386/kernel/suspend.c 1.13 -> 1.14 # include/asm-alpha/uaccess.h 1.4 -> 1.5 # net/core/wireless.c 1.6 -> 1.7 # net/sched/sch_ingress.c 1.7 -> 1.8 # net/ipv4/netfilter/ip_nat_standalone.c 1.20 -> 1.21 # include/asm-v850/nb85e_intc.h 1.1 -> 1.2 # fs/filesystems.c 1.12 -> 1.13 # sound/pci/fm801.c 1.13 -> 1.14 # arch/v850/kernel/simcons.c 1.2 -> 1.3 # kernel/sched.c 1.176 -> 1.177 # include/linux/agp_backend.h 1.26 -> 1.27 # sound/isa/sb/sb16.c 1.14 -> 1.15 # net/8021q/vlan.c 1.11 -> 1.13 # drivers/char/agp/hp-agp.c 1.14 -> 1.16 # include/asm-v850/rte_nb85e_cb.h 1.1 -> 1.2 # drivers/usb/host/ehci-q.c 1.44 -> 1.45 # net/ipv6/ip6_fib.c 1.9 -> 1.10 # include/linux/jbd.h 1.20 -> 1.21 # drivers/block/Makefile 1.14 -> 1.15 # arch/ia64/scripts/check-gas 1.1 -> 1.2 # arch/v850/kernel/rte_ma1_cb.c 1.2 -> 1.3 # drivers/ieee1394/iso.c 1.2 -> 1.3 # sound/oss/sb_audio.c 1.6 -> 1.7 # sound/pci/ens1370.c 1.26 -> 1.27 # sound/core/rtctimer.c 1.13 -> 1.14 # drivers/media/dvb/frontends/grundig_29504-491.c 1.2 -> 1.3 # include/sound/cs46xx_dsp_task_types.h 1.1 -> 1.2 # drivers/hotplug/pci_hotplug_core.c 1.36 -> 1.37 # drivers/usb/serial/ipaq.c 1.27 -> 1.28 # include/asm-x86_64/system.h 1.13 -> 1.14 # include/linux/nfs_xdr.h 1.26 -> 1.33 # include/net/xfrm.h 1.27 -> 1.29 # fs/nfsd/nfs4xdr.c 1.13 -> 1.14 # kernel/timer.c 1.49 -> 1.51 # sound/pci/via82xx.c 1.28 -> 1.29 # sound/core/memory_wrapper.c 1.1 -> (deleted) # sound/core/seq/seq_midi.c 1.10 -> 1.11 # sound/pci/cs46xx/dsp_spos.c 1.13 -> 1.14 # drivers/char/agp/via-agp.c 1.28 -> 1.33 # drivers/block/paride/pg.c 1.14 -> 1.15 # drivers/media/dvb/av7110/Makefile 1.3 -> (deleted) # include/linux/mtd/compatmac.h 1.4 -> 1.5 # include/asm-x86_64/mmzone.h 1.1 -> 1.2 # include/asm-i386/mach-default/mach_mpparse.h 1.2 -> 1.3 # scripts/per-cpu-check.awk 1.4 -> (deleted) # drivers/ieee1394/ohci1394.c 1.24 -> 1.25 # drivers/ieee1394/highlevel.c 1.9 -> 1.10 # drivers/media/dvb/av7110/av7110.h 1.3 -> (deleted) # drivers/net/hamradio/scc.c 1.20 -> 1.21 # arch/alpha/lib/strrchr.S 1.2 -> 1.3 # drivers/i2c/busses/Kconfig 1.9 -> 1.10 # include/linux/netlink.h 1.9 -> 1.10 # sound/oss/uart401.c 1.6 -> 1.7 # sound/pci/emu10k1/emumixer.c 1.7 -> 1.8 # sound/isa/Kconfig 1.2 -> 1.3 # sound/core/oss/pcm_oss.c 1.21 -> 1.22 # sound/pci/ymfpci/ymfpci_main.c 1.15 -> 1.16 # net/ipv4/netfilter/iptable_mangle.c 1.11 -> 1.12 # net/ipv4/ah.c 1.19 -> 1.21 # sound/oss/maestro.c 1.24 -> 1.25 # include/asm-ia64/acpi.h 1.6 -> 1.7 # net/ipv6/netfilter/ip6_tables.c 1.16 -> 1.17 # arch/ia64/sn/fakeprom/Makefile 1.11 -> 1.12 # include/linux/dvb/dmx.h 1.1 -> 1.2 # include/asm-sparc/uaccess.h 1.6 -> 1.10 # arch/sparc64/kernel/ioctl32.c 1.54 -> 1.55 # fs/xfs/linux/xfs_aops.c 1.28 -> 1.30 # sound/oss/ad1816.c 1.9 -> 1.10 # include/asm-ia64/bitops.h 1.10 -> 1.11 # sound/drivers/dummy.c 1.14 -> 1.15 # include/asm-alpha/mmzone.h 1.7 -> 1.8 # net/irda/irlmp.c 1.22 -> 1.23 # net/8021q/vlan_dev.c 1.8 -> 1.9 # arch/ia64/sn/io/sn2/pcibr/Makefile 1.1 -> 1.2 # lib/kobject.c 1.17 -> 1.18 # fs/partitions/check.c 1.102 -> 1.103 # drivers/char/drm/drm_os_linux.h 1.8 -> 1.9 # drivers/media/Makefile 1.6 -> 1.7 # fs/xfs/linux/xfs_super.c 1.33 -> 1.34 # include/asm-ia64/pci.h 1.13 -> 1.14 # arch/v850/kernel/entry.S 1.6 -> 1.7 # drivers/char/drm/gamma_dma.c 1.9 -> 1.10 # sound/pci/ac97/ac97_patch.c 1.9 -> 1.10 # sound/pci/cs46xx/dsp_spos_scb_lib.c 1.15 -> 1.16 # sound/core/seq/seq_midi_emul.c 1.7 -> 1.8 # Documentation/Changes 1.32 -> 1.33 # mm/rmap.c 1.23 -> 1.27 # sound/oss/mpu401.c 1.10 -> 1.11 # net/ipv6/sit.c 1.21 -> 1.23 # drivers/media/video/Kconfig 1.5 -> 1.6 # include/asm-ia64/unaligned.h 1.2 -> 1.3 # drivers/usb/host/ehci-mem.c 1.13 -> 1.14 # net/ipv6/addrconf.c 1.34 -> 1.35 # drivers/usb/host/ohci-q.c 1.39 -> 1.40 # arch/ia64/kernel/perfmon.c 1.38 -> 1.39 # sound/pci/ali5451/ali5451.c 1.22 -> 1.23 # drivers/usb/input/usbmouse.c 1.23 -> 1.24 # drivers/char/applicom.c 1.7 -> 1.8 # include/asm-ia64/compat.h 1.8 -> 1.11 # sound/isa/azt2320.c 1.9 -> 1.10 # arch/ia64/Kconfig 1.18 -> 1.19 # drivers/media/dvb/av7110/av7110_ir.c 1.2 -> (deleted) # include/asm-ia64/sal.h 1.14 -> 1.15 # sound/pci/cs4281.c 1.22 -> 1.23 # mm/truncate.c 1.8 -> 1.9 # kernel/panic.c 1.9 -> 1.10 # drivers/media/dvb/dvb-core/dvb_frontend.h 1.2 -> 1.3 # arch/v850/kernel/rte_nb85e_cb.c 1.1 -> 1.2 # fs/xfs/xfs_dmapi.h 1.7 -> 1.8 # sound/core/info.c 1.23 -> 1.24 # drivers/usb/input/usbkbd.c 1.26 -> 1.27 # arch/ia64/kernel/traps.c 1.27 -> 1.28 # drivers/serial/68360serial.c 1.7 -> 1.8 # drivers/net/sungem.c 1.32 -> 1.33 # drivers/usb/misc/Kconfig 1.5 -> 1.6 # include/linux/dvb/ca.h 1.2 -> 1.3 # net/bridge/br_netfilter.c 1.4 -> 1.5 # include/asm-ia64/fpu.h 1.2 -> 1.3 # arch/ia64/mm/fault.c 1.12 -> 1.13 # arch/alpha/kernel/pci_iommu.c 1.15 -> 1.16 # sound/pci/ac97/ac97_id.h 1.6 -> 1.7 # fs/xfs/xfs_inode.c 1.17 -> 1.18 # fs/xfs/xfs_iget.c 1.11 -> 1.12 # sound/oss/emu10k1/main.c 1.13 -> 1.14 # sound/pci/emu10k1/emu10k1_main.c 1.12 -> 1.13 # include/asm-v850/unistd.h 1.5 -> 1.6 # drivers/usb/class/audio.c 1.33 -> 1.34 # sound/core/memalloc.c 1.2 -> 1.4 # sound/isa/opl3sa2.c 1.15 -> 1.16 # drivers/usb/net/pegasus.h 1.23 -> 1.24 # drivers/media/dvb/dvb-core/dvb_ksyms.c 1.2 -> 1.3 # include/linux/poll.h 1.9 -> 1.10 # net/ipv4/ip_output.c 1.30 -> 1.31 # include/linux/pnp.h 1.19 -> 1.20 # drivers/usb/net/pegasus.c 1.42 -> 1.45 # net/ipv4/igmp.c 1.16 -> 1.20 # sound/pci/cs46xx/cs46xx.c 1.13 -> 1.14 # drivers/ieee1394/ieee1394_hotplug.h 1.2 -> 1.3 # arch/ia64/sn/kernel/sn2/Makefile 1.9 -> 1.10 # arch/alpha/math-emu/math.c 1.4 -> 1.5 # fs/inode.c 1.90 -> 1.91 # include/asm-ia64/ia32.h 1.17.1.1 -> 1.20 # net/bridge/br_if.c 1.6 -> 1.7 # net/ipv4/route.c 1.44 -> 1.45 # sound/oss/gus_midi.c 1.5 -> 1.6 # drivers/base/class.c 1.24 -> 1.25 # sound/pci/rme32.c 1.15 -> 1.16 # drivers/media/dvb/dvb-core/Makefile 1.3 -> 1.4 # sound/oss/cs4281/cs4281m.c 1.17 -> 1.18 # arch/ia64/kernel/Makefile 1.15 -> 1.16 # sound/oss/es1370.c 1.19 -> 1.20 # arch/v850/kernel/gbus_int.c 1.4 -> 1.5 # fs/nfs/nfs4xdr.c 1.14 -> 1.21 # kernel/printk.c 1.23 -> 1.24 # drivers/usb/misc/speedtch.c 1.74 -> 1.76 # sound/oss/emu10k1/midi.c 1.10 -> 1.11 # drivers/char/drm/drm_vm.h 1.22 -> 1.23 # Documentation/DocBook/usb.tmpl 1.1 -> 1.2 # sound/ppc/powermac.c 1.8 -> 1.9 # arch/ia64/sn/fakeprom/README 1.4 -> 1.5 # drivers/media/dvb/av7110/saa7146_v4l.c 1.2 -> (deleted) # include/linux/fdreg.h 1.1 -> 1.2 # net/ipv6/xfrm6_input.c 1.6 -> 1.7 # arch/v850/kernel/Makefile 1.6 -> 1.7 # arch/ia64/sn/io/sn2/Makefile 1.1 -> 1.2 # drivers/media/dvb/dvb-core/dmxdev.h 1.2 -> 1.3 # include/asm-v850/ptrace.h 1.1 -> 1.2 # kernel/ptrace.c 1.28 -> 1.29 # arch/i386/kernel/i387.c 1.14 -> 1.16 # drivers/media/dvb/av7110/Kconfig 1.1 -> (deleted) # fs/fs-writeback.c 1.33 -> 1.34 # sound/ppc/pmac.c 1.11 -> 1.12 # include/linux/in.h 1.5 -> 1.6 # drivers/char/agp/amd-k7-agp.c 1.18 -> 1.19 # sound/oss/pss.c 1.8 -> 1.9 # drivers/net/slip.c 1.10 -> 1.11 # drivers/media/dvb/dvb-core/dvb_filter.c 1.2 -> 1.3 # include/asm-v850/posix_types.h 1.1 -> 1.2 # net/ipv4/ipip.c 1.23 -> 1.26 # drivers/media/dvb/frontends/alps_bsru6.c 1.3 -> (deleted) # include/linux/nfs_fs_sb.h 1.8 -> 1.9 # arch/ia64/kernel/unwind.c 1.16 -> 1.19 # sound/isa/sgalaxy.c 1.11 -> 1.12 # (new) -> 1.1 arch/ia64/module.lds # (new) -> 1.1 Documentation/io_ordering.txt # (new) -> 1.1 drivers/media/dvb/frontends/nxt6000.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_firm.h # (new) -> 1.1 drivers/media/common/saa7146_vbi.c # (new) -> 1.1 drivers/media/dvb/ttpci/av7110.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ipack.h # (new) -> 1.1 include/media/saa7146.h # (new) -> 1.1 include/asm-i386/mach-pc9800/irq_vectors.h # (new) -> 1.1 include/asm-ia64/acpi-ext.h # (new) -> 1.1 drivers/media/video/mxb.c # (new) -> 1.1 drivers/media/dvb/dvb-core/Makefile.lib # (new) -> 1.1 include/media/saa7146_vv.h # (new) -> 1.1 drivers/media/video/tea6415c.h # (new) -> 1.1 net/ipv4/xfrm4_tunnel.c # (new) -> 1.1 drivers/media/dvb/ttpci/budget-ci.c # (new) -> 1.1 drivers/media/dvb/ttpci/Kconfig # (new) -> 1.1 drivers/media/dvb/ttpci/Makefile # (new) -> 1.1 drivers/media/dvb/ttpci/budget-patch.c # (new) -> 1.1 include/asm-i386/mach-default/apm.h # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ir.c # (new) -> 1.1 fs/nfs/idmap.c # (new) -> 1.1 drivers/media/dvb/frontends/dvb_dummy_fe.c # (new) -> 1.1 drivers/media/dvb/ttpci/budget-core.c # (new) -> 1.1 include/asm-i386/mach-default/mach_time.h # (new) -> 1.1 include/linux/nfs_idmap.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_wakecpu.h # (new) -> 1.1 drivers/block/floppy98.c # (new) -> 1.1 include/asm-i386/mach-pc9800/apm.h # (new) -> 1.1 drivers/media/video/dpc7146.c # (new) -> 1.1 drivers/media/dvb/ttpci/av7110_ipack.c # (new) -> 1.4 arch/ia64/kernel/module.c # (new) -> 1.1 include/asm-ia64/sn/sn2/io.h # (new) -> 1.1 drivers/media/video/tea6420.c # (new) -> 1.1 drivers/media/common/saa7146_fops.c # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_time.h # (new) -> 1.1 include/asm-i386/mach-default/mach_traps.h # (new) -> 1.1 include/asm-i386/pc9800.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget.c # (new) -> 1.1 include/asm-i386/mach-default/mach_resources.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget.h # (new) -> 1.1 drivers/media/common/saa7146_hlp.c # (new) -> 1.1 arch/v850/rte_nb85e_cb.ld # (new) -> 1.1 drivers/media/common/saa7146_video.c # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_timer.h # (new) -> 1.1 drivers/media/dvb/dvb-core/dvb_ringbuffer.c # (new) -> 1.1 drivers/media/dvb/ttpci/av7110.c # (new) -> 1.1 arch/v850/kernel/teg.c # (new) -> 1.1 drivers/i2c/i2c-keywest.c # (new) -> 1.1 drivers/media/video/tda9840.c # (new) -> 1.1 arch/v850/kernel/nb85e_cache.c # (new) -> 1.1 include/asm-i386/mach-pc9800/do_timer.h # (new) -> 1.1 drivers/media/video/tea6420.h # (new) -> 1.1 drivers/media/dvb/frontends/nxt6000.c # (new) -> 1.1 drivers/media/common/saa7146_core.c # (new) -> 1.1 drivers/i2c/busses/i2c-viapro.c # (new) -> 1.1 arch/v850/rte_nb85e_cb-multi.ld # (new) -> 1.1 drivers/media/video/tea6415c.c # (new) -> 1.1 include/asm-i386/mach-pc9800/io_ports.h # (new) -> 1.1 include/asm-i386/mach-pc9800/smpboot_hooks.h # (new) -> 1.1 drivers/media/dvb/ttpci/budget-av.c # (new) -> 1.1 drivers/media/common/Makefile # (new) -> 1.1 arch/ia64/sn/Makefile # (new) -> 1.1 drivers/media/video/mxb.h # (new) -> 1.1 drivers/media/dvb/frontends/at76c651.c # (new) -> 1.1 net/ipv4/ipcomp.c # (new) -> 1.1 include/sound/hdsp.h # (new) -> 1.1 drivers/i2c/i2c-keywest.h # (new) -> 1.1 arch/ia64/sn/kernel/sn2/io.c # (new) -> 1.1 include/asm-i386/mach-default/bios_ebda.h # (new) -> 1.1 drivers/media/video/tda9840.h # (new) -> 1.1 drivers/media/common/saa7146_i2c.c # (new) -> 1.1 include/asm-i386/mach-default/io_ports.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_resources.h # (new) -> 1.1 include/asm-i386/mach-pc9800/mach_traps.h # (new) -> 1.1 drivers/media/common/Kconfig # (new) -> 1.1 drivers/media/dvb/dvb-core/dvb_ringbuffer.h # (new) -> 1.1 drivers/media/dvb/frontends/stv0299.c # (new) -> 1.1 include/asm-i386/mach-pc9800/bios_ebda.h # (new) -> 1.1 arch/ia64/kernel/acpi-ext.c # (new) -> 1.1 include/asm-i386/mach-default/mach_timer.h # # The following is the BitKeeper ChangeSet Log # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.1033.3.10 # Linux 2.5.67 # -------------------------------------------- # 03/04/07 hch@sgi.com 1.1033.5.1 # [XFS] remove busy inode check in the umount path - Linux checked it for us before calling into the filesystem. We're beyond the point of no return for umount anyway # # SGI Modid: 2.5.x-xfs:slinx:142731a # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.16 # [PATCH] usb-storage: fix CB/CBI # # When we fixed the error handling, we accidentally made a mistake. A STALL # on a control endpoint isn't necessarily a fatal thing -- it can be used to # indicate a command failure. # # This fixes bugzilla bug #510. # # - A control endpoint stall when sending the command to a CB/CBI device is # legal. Our error handling was just a little too agressive. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.17 # [PATCH] usb-storage: variable renames # # This patch changes the struct us_data 'ss' to 'us' to be consistent with # the rest of the code. The old name was a legacy artifact. # # There are no functional changes here. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.18 # [PATCH] usb-storage: remove BUG/BUG_ON # # This patch changes BUG and BUG_ON to print error messages. It is done to # be (a) a little more robust, and (b) complies with Linus' idea of no BUGs # unless absolutely necessary. # -------------------------------------------- # 03/04/07 mdharm-usb@one-eyed-alien.net 1.1018.1.19 # [PATCH] usb-storage: add info to /proc interface # # This patch adds some information about the quirks of the device to the # /proc interface. # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.1033.5.2 # [XFS] Fix definition of setresblks - nothing uses it yet, but DMF will (so fix now). # # SGI Modid: 2.5.x-xfs:slinx:142797a # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.1033.5.3 # [XFS] Fix a pagebuf leak with the pagebufs used to coordinate IO completion # for unwritten extent writes. # # SGI Modid: 2.5.x-xfs:slinx:143052a # -------------------------------------------- # 03/04/07 nathans@sgi.com 1.1033.5.4 # [XFS] Fix up some minor namespace pollution problems. # # SGI Modid: 2.5.x-xfs:slinx:143053a # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.6.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/07 hch@sgi.com 1.1033.5.5 # [XFS] remove atomicIncWithWrap # # SGI Modid: 2.5.x-xfs:slinx:143647a # -------------------------------------------- # 03/04/07 alborchers@steinerpoint.com 1.1033.6.2 # [PATCH] USB: patch for oops in io_edgeport.c # # I tracked down a problem that caused an oops in io_edgeport.c. # # The oops is reliably reproduced by using an EdgePort USB serial # port in dosemu and then exiting dosemu. When dosemu closed # the port the oops would occur. (Tested in RH 7.3 2.4.18-10.) # # The problem was that a USB cmd callback would come in after the # close with the tty struct freed, and the edge_bulk_out_cmd_callback # function would do a wakeup on the tty->write_wait queue. The # tty struct was gone (I checked that tty->magic was bad) and the # wakeup would oops. # # As you did in other places in io_edgeport.c, I added a check that # edge_port->open was true before using the edge_port->port->tty # struct. # # I added a similar check in edge_bulk_out_data_callback, though # I never actually saw the problem here. # # I notice that in 2.4.20 a check has been added to be sure that # edge_port->port->tty is not null--however, this is not enough # because the tty pointer is not set to null when the port is # closed. An alternate solution in 2.4.20 would be to set the # usb_serial_port->tty pointer to null in usbserial.c serial_close(). # This seems like a good thing to do in general, since the tty # struct should not be used after a close which frees it. If # you would like I investigate this a bit more--it could affect # other usb serial drivers and reveal some hidden bugs. # -------------------------------------------- # 03/04/07 hch@sgi.com 1.1033.5.6 # [XFS] merge over some lost changes from the XFS tree # -------------------------------------------- # 03/04/07 hch@hera.kernel.org 1.1033.3.11 # Merge # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.6.3 # USB: set port->tty to NULL after we have closed the port # # This lets any of the many checks for this contition actually have a # chance of working :) # -------------------------------------------- # 03/04/07 davidm@wailua.hpl.hp.com 1.889.308.54 # ia64: Fix inconsistency in sys32_execve(). Reported by # Chandra Kapate). # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.7.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.8.1 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.12 # Fix a series of NFS read/readdir/readlink errors. # # Tightens consistency checks on the process of reading the reply skb in # the SunRPC client. Reject a reply if we didn't succeed in reading the # entire skb. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.13 # Remove bogus check on the size of NFSv4 'readdir' cookies. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.14 # Prepare for the introduction of NFSv4 state code. # # Split out the open() method for regular files from that of # directories. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.15 # Implement stateful open() for NFSv4 as per RFC3010-bis. # The resulting state is saved in the NFS-specific part of the # struct inode. # # Initially we just start with 3 possible states: # - open for read # - open for write # - open for read/write # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.16 # Setup code to tear down the NFSv4 state once we're done with a file. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.17 # Make NFSv4 'setattr()' method use the cached stateid if the file is # already open. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.18 # Make NFSv4 'read' code use the cached stateid if it exists. # -------------------------------------------- # 03/04/08 trond.myklebust@fys.uio.no 1.1033.3.19 # Make the NFSv4 write code use the stateid if it exists. # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1039 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1033.1.3 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/08 marius@citi.umich.edu 1.1033.3.20 # Add support for mapping NFSv4 remote user/group names into local # unix-style uid/gids. # # Note that this makes use of the RPC client upcall mechanism # (rpc_pipefs) to notify a userland daemon that does the actual mapping. # The results are then cached in the kernel. # The userland daemon can be downloaded from the CITI NFSv4 page at # # http://www.citi.umich.edu/projects/nfsv4/ # -------------------------------------------- # 03/04/08 marius@citi.umich.edu 1.1033.3.21 # Add hooks into the NFSv4 XDR code to make use of the new uid/gid # mapper upcall mechanism. # -------------------------------------------- # 03/04/07 greg@kroah.com 1.1033.8.2 # i2c: fix up compile error in scx200_i2c driver. # -------------------------------------------- # 03/04/07 alan@lxorguk.ukuu.org.uk 1.1040 # [SPARC64]: syscalls returning long # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1041 # [SPARC]: Fix sys_ipc to return ENOSYS instead of EINVAL as appropriate. # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.1042 # Merge http://nfsclient.bkbits.net/linux-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/07 jmorris@intercode.com.au 1.1033.1.4 # [IPSEC]: AH/ESP forget to free private structs. # -------------------------------------------- # 03/04/07 niv@us.ibm.com 1.1033.1.5 # [TCP]: Missing SNMP stats. # -------------------------------------------- # 03/04/07 davem@nuts.ninka.net 1.1033.1.6 # Merge bk://kernel.bkbits.net/acme/net-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/07 jmorris@intercode.com.au 1.1033.1.7 # [IPSEC]: Really move type destructor out of spinlock. # -------------------------------------------- # 03/04/07 torvalds@home.transmeta.com 1.1043 # Avoid using pointers to anonymous structure initializers. It's a # gcc'ism, and even gcc can apparently get confused by it. # -------------------------------------------- # 03/04/08 axboe@suse.de 1.1044 # [PATCH] no blk_queue_empty # # The single missing bit, please add that as well. Was missed because this # driver actually used elv_queue_empty, not blk_queue_empty. # -------------------------------------------- # 03/04/08 axboe@suse.de 1.1045 # [PATCH] move q->queuedata assign after queue init # # I want to make blk_init_queue() zero the queue, so we don't get anymore # nasty bugs with uninitialized variables. IDE is setting queuedata before # init though. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1046 # Make it more explicit that jiffies are "unsigned long", but # that we for the initial value ctually want to check only # wrap-around in an "unsigned int". # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1047 # [PATCH] alpha typos part 1 # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1048 # [PATCH] alpha typos part 2 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1049 # [PATCH] fix the mode for bios call in x86-32 as well as -64 # # (Andi Kleen) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1050 # [PATCH] Config.in typos # # (Steve Cole and co) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1051 # [PATCH] read extended cpu revision data # # (Dave Jones) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1052 # [PATCH] fix i387 fxsr conversion # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1053 # [PATCH] parisc - syscalls return long purity ... # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1054 # [PATCH] ppc64 syscalls return long purity # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1055 # [PATCH] v850 updates # # (Miles Bader) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1056 # [PATCH] compatmac not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1057 # [PATCH] compatmac not needed uaccess.h is # # Fixes unknown symbol copy_.. in some builds # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1058 # [PATCH] PC9800 floppy driver # # (Osamu Tomita) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1059 # [PATCH] config for PC98xx floppy # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1060 # [PATCH] MOD_* can go for floppy # # (Bob Miller) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1061 # [PATCH] makefile for pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1062 # [PATCH] unversion.h and compatmac applicom.c # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1063 # [PATCH] update char Kconfig for PC9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1064 # [PATCH] exterminate compatmac in sx # # (compatmac cleanup is all Adrian Bunk) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1065 # [PATCH] error handling for upd4990a # # (Stephan Maciej) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1066 # [PATCH] clean up pci interrupt line whacking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1067 # [PATCH] fix our handling of BIOS forced PIO serverworks OSB4 # # (Robert Hentosh & me) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1068 # [PATCH] fix up capslock on pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1069 # [PATCH] add drivers/media/common for mixed dvb/analog device stuff # # (Martin Hunold) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1070 # [PATCH] update the dvb core # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1071 # [PATCH] update the dvb front end chips # # (Again all DVB is Martin Hunold) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1072 # [PATCH] kill off a load of stuff now in common dvb # # (These changes are big because they are the result of Martin Hunold # resolving a *huge* long term fork in the DVB code base). We now have # one DVB codebase so the changes while big are very good news # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1073 # [PATCH] fix radio-cadet build # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1074 # [PATCH] bring core media/video up to date with dvb changes # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1075 # [PATCH] remaining dvb bits # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1076 # [PATCH] fix error in cops port to 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1077 # [PATCH] port ltpc to 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1078 # [PATCH] fix arcnet locking for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1079 # [PATCH] first cut at scc.c for 2.5 locking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1080 # [PATCH] fix up yam for 2.5 locking # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1081 # [PATCH] Update lp486e for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1082 # [PATCH] fix macmace get_free_pages parameters # # (Matthew Wilcox) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1083 # [PATCH] first cut at 3c574_cs for SMP safety etc # # The old code was totally hosed for SMP, the windowing makes this # stuff tricky so it may need more work # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1084 # [PATCH] update slip to new tty module locks # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1085 # [PATCH] fix cosa verify_area # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1086 # [PATCH] first pass at fixing strip for 2.5 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1087 # [PATCH] junk header removal # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1088 # [PATCH] compatmac is not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1089 # [PATCH] compatmac is not needed # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1090 # [PATCH] asm-alpha typo fixe # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1091 # [PATCH] add but do not yet use mach specific definitions for ports etc on PC # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1092 # [PATCH] add the same mach specific headers for pc9800 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1093 # [PATCH] and visws # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1094 # [PATCH] and voyager # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1095 # [PATCH] header for pc9800 type detection # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1096 # [PATCH] x86-64 typo fixes # # (Steven Cole) # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1097 # [PATCH] goodbye compatmac.h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1098 # [PATCH] update dvb headers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1099 # [PATCH] possible way to clean up fdreg.h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1100 # [PATCH] hdreg.h typo fix # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1101 # [PATCH] continued compatmac exterminations # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1102 # [PATCH] lock for scc drivers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1103 # [PATCH] shared multimedia includes for saa71xx # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1104 # [PATCH] remove version crap # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1105 # [PATCH] wireless uses __init # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1106 # [PATCH] irda typo fixes # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1107 # [PATCH] remove version.h's # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1108 # [PATCH] small pc98xx fix for sound # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1109 # [PATCH] more audiov ersion scrubbing # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1110 # [PATCH] cs4232 should be devexit # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1111 # [PATCH] C99 for sound # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1112 # [PATCH] lots more version and C99 for audio # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1113 # [PATCH] fix modular gus shared lock # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1114 # [PATCH] another C99 and version casd # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1115 # [PATCH] ics2101 needs to match the gus_lock name too # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1116 # [PATCH] fix ; in mad16 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1117 # [PATCH] ite C99 and version/h # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1118 # [PATCH] yet more sound version/c99 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1119 # [PATCH] sync opl3sa2 with 2.4 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1120 # [PATCH] last batch of audio C99 # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1121 # [PATCH] suspend doesnt need compatmac either # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1122 # [PATCH] use mach io_ports definitions in io_apic # # Allows for the non standard cascade # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1123 # [PATCH] make vm86 machine independant using new headers # -------------------------------------------- # 03/04/08 alan@lxorguk.ukuu.org.uk 1.1124 # [PATCH] make APM machine independant using mach headers # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1125 # Fix up merge with Alan. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1126 # More left-over fixups from the merge with Alan. # -------------------------------------------- # 03/04/08 davidm@tiger.hpl.hp.com 1.889.308.55 # ia64: Sync sys32_ipc() with x86 counter-part. # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1127 # [PATCH] paride fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1128 # [PATCH] krxtimod.c fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1129 # [PATCH] kafstimod.c fix: make timeouts unsigned long # -------------------------------------------- # 03/04/08 Andries.Brouwer@cwi.nl 1.1130 # [PATCH] tty_io.c: make redirect static # -------------------------------------------- # 03/04/08 davidm@tiger.hpl.hp.com 1.1033.9.1 # Merge # -------------------------------------------- # 03/04/08 miles@lsi.nec.co.jp 1.1131 # [PATCH] On the v850/nb85e, acknowledge interrupts immediately after handling them # # Previously, it was done automatically by the `reti' isntruction upon # returning from the kernel, but that doesn't do the correct thing in # various cases, for instance if there's a context switch, or a softirq. # -------------------------------------------- # 03/04/08 akpm@digeo.com 1.1132 # [PATCH] Fix futexes in hugetlb pages # # There is a stunning bug. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1133 # Fix mtdblock.c compile. From Adrian Bunk. # -------------------------------------------- # 03/04/08 sfr@canb.auug.org.au 1.1033.9.2 # [PATCH] ia64: compat_sys_fcntl{,64} # # Here is the ia64 part of the patch. Pleas apply after Linus has applied # the generic part. # -------------------------------------------- # 03/04/08 sfr@canb.auug.org.au 1.1033.9.3 # [PATCH] ia64: compat_uptr_t and compat_ptr # # Here is the ia64 part of the patch. It depends on my previous COMPAT # patches. This is safe to apply even before Linus applies the generic # part. # -------------------------------------------- # 03/04/08 jmorris@intercode.com.au 1.1033.1.8 # [IPSEC]: Support for optional policies on input got lost. # -------------------------------------------- # 03/04/08 shemminger@osdl.org 1.1033.1.9 # [VLAN]: Update to new module semantics, use synchronize_net. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1134 # Add __user/__kernel address space modifiers. When not # checking, these end up being no-ops, but they get enabled # by the type checker as special address_space attributes. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1135 # Add the proper sprinkling of __user attributes to the # user space access functions. This allows the type checker # to check proper usage. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1136 # Add __user attributes to user pointers in kernel/signal.c. This # was the first file tested with my type checker with the anal # pointer attribute checking turned on. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1137 # Make __SI_MASK explicitly unsigned, instead of depending on # magic C promotion to silently do so for us. # -------------------------------------------- # 03/04/08 rusty@rustcorp.com.au 1.1033.1.10 # [IPSEC]: Avoid using SET_MODULE_OWNER. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1138 # Annotate scheduler system calls as taking user pointers. # -------------------------------------------- # 03/04/08 torvalds@penguin.transmeta.com 1.1139 # Annotate i386/signal.c with address space type annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1140 # Add user pointer attributes to kernel/module.c # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1141 # Annotate fs/exec.c with user pointer annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1142 # Annotate fs/namei.c with user pointer annotations. # -------------------------------------------- # 03/04/08 torvalds@home.transmeta.com 1.1143 # Annotate x87 user space access functions with proper type attributes. # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1133.1.1 # Merge kroah.com:/home/linux/linux/BK/bleed-2.5 # into kroah.com:/home/linux/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/08 kraxel@bytesex.org 1.1133.1.2 # [PATCH] i2c: add i2c_clientname() # # This patch just adds a #define and a inline function to hide the # "i2c_client->name" => "i2c_client->dev.name" move introduced by # the recent i2c updates. That makes it easier to build i2c drivers # on both 2.4 and 2.5 kernels. # -------------------------------------------- # 03/04/08 azarah@gentoo.org 1.1133.1.3 # [PATCH] i2c: Fix w83781d sensor to use Milli-Volt for in_* in sysfs # # I did the w83781d sysfs update as per the old spec, which was not # milli-volt. This patch should fix it. # -------------------------------------------- # 03/04/08 azarah@gentoo.org 1.1133.1.4 # [PATCH] i2c: remove compiler warning in w83781d sensor driver # # On Wed, 2003-04-09 at 00:04, Greg KH wrote: # # > Oh, I'm getting the following warning when building the driver, want to # > look into this? # > # > drivers/i2c/chips/w83781d.c: In function `store_fan_div_reg': # > drivers/i2c/chips/w83781d.c:715: warning: `old3' might be used uninitialized in this function # > # # It is because old3 is only referenced if: # # ((data->type != w83781d) && data->type != as99127f) # # as those two chips don't have extended divisor bits ... # # It is however set in the first occurrence: # # /* w83781d and as99127f don't have extended divisor bits */ # if ((data->type != w83781d) && data->type != as99127f) { # old3 = w83781d_read_value(client, W83781D_REG_VBAT); # } # # and thus is rather gcc being brain dead for not being able to figure # old3 is only used within a if block like that. # # I was not sure about style policy in a case like this, so I left it as # is, it should however be possible to 'fix' it with: # -------------------------------------------- # 03/04/09 mort@wildopensource.com 1.1033.9.4 # [PATCH] ia64: Fix up "extern inline" # # Here is a trivial patch to processor.h to change "extern" to "static". # -------------------------------------------- # 03/04/09 schlicht@uni-mannheim.de 1.1133.1.5 # [PATCH] i2c: fix compilation error for various i2c-devices # # Changed the i2c_adapter name definition to match the current interface. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1144 # User pointers are not just in another address space, they also # must never be dereferenced directly. Make that clear in the # attribute. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1145 # Add user pointer attributes to kernel/sys.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1146 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1147 # [PATCH] fix wait_on_buffer() debug code # # The wait_on_buffer() debug code is generating false warnings when called from # __block_prepare_write(). It is legal to wait on a zero-ref buffer when its # page is locked. The page lock keeps try_to_free_buffers() away. # # This debug code hasn't found any bugs yet. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1148 # [PATCH] Enforce gcc-2.95 as the minimum compiler requirement # # Now that sparc64 is using gcc-3.x we can disallow gcc-2.91, etc. # # Documentation/Changes already says 2.95.3, which is working fine for me. # # With this change, we no longer require that per-cpu data definitions be # initialised. That was a workaround for a bug in older gccs. So remove the # build infrastructure which was checking for that. # # Also, mention that nfs-utils-1.0.3 is required. It isn't required yet, but # will be once we enable larger dev_t: there is an interface for exportfs which # passes dev_t's into the kernel which breaks with larger dev_t. That # interface is old, deprecated and is not used in nfs-utils-1.0.3. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1149 # [PATCH] null-terminate the kmalloc tables # # From: David Mosberger # # The cache_sizes array needs to be NULL terminated, otherwise an oversized # kmalloc request runs off the end of the table. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1150 # [PATCH] remove nr_reverse_maps VM accounting # # Maintaining the `nr_reverse_maps' provides makes a small but # measurable decrease in page_add_rmap() overhead. # # I don't think it's a very useful metric, and it can be sort-of inferred from # slabinfo. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1151 # [PATCH] speed up rmap searching # # several functions in rmap.c are searching the ptes[] array fo find the first # non-null entry. # # Despite the fact tha the whole lot is in L1 cache, it is expensive, # especially on 128-byte cacheline machines. # # We can encode the index of the first non-null pte entry inside the # pte_chain's `next' field and remove those searches altogether. # # This reduces the rmap CPU tax by about 25% on a P4. For a total runtime # reduction of around 5% in the bash-script intensive test which I use. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1152 # [PATCH] misc rmap speedups # # Even a BUG_ON() makes a measurable difference. So remove some gratuitous # ones which will just trigger a null pointer deref anyway. # # Also remove some debug code which isn't really being maintained any more. # # Also replace (effectively): # # test_bit(N, foo); # set_bit(N, foo); # # with # # set_bit(N, foo); # test_bit(N, foo); # # In the first case we'll go onto the bus twice: once for the cache miss and # once to get exclusive write access. In the second case we only go on the bus # once. I think. Certainly this trick chaved 40% off the cost of # shrink_list() when I did it there... # # This patch is worth 1% or so on the bash script testing. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1153 # [PATCH] Replace the radix-tree rwlock with a spinlock # # Spinlocks don't have a buslocked unlock and are faster. # # On a P4, time to write a 4M file with 4M one-byte-write()s: # # Before: # 0.72s user 5.47s system 99% cpu 6.227 total # 0.76s user 5.40s system 100% cpu 6.154 total # 0.77s user 5.38s system 100% cpu 6.146 total # # After: # 1.09s user 4.92s system 99% cpu 6.014 total # 0.74s user 5.28s system 99% cpu 6.023 total # 1.03s user 4.97s system 100% cpu 5.991 total # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1154 # [PATCH] rmap comments # # From: Hugh Dickins # # Update a few locking comments in rmap.c. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1155 # [PATCH] fix unuse_pmd fixme # # From: Hugh Dickins # # try_to_unuse drop mmlist_lock across unuse_process (with pretty dance # of atomic_incs and mmputs of various mmlist markers, and a polite new # cond_resched there), so unuse_process can pte_chain_alloc(GFP_KERNEL) # and pass that down and down and down and down to unuse_pte: which # cannot succeed more than once on a given mm (make that explicit by # returning back up once succeeded). Preliminary checks moved up from # unuse_pte to unuse_pmd, and done more efficiently (avoid that extra # pte_file test added recently), swapoff spends far too long in here. # Updated locking comments and references to try_to_swap_out. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1156 # [PATCH] JBD pasting warning fix # # From: "Hua Zhong" # # Fix a token-pasting warning from recent gcc's # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1157 # [PATCH] task_vsize() speedup # # From: William Lee Irwin III # # task_vsize() mysteriously appeared on my profiles. This should remove it # from them by using the already in-use elsewhere for rlimit checks # mm->total_vm for the benefit of O(1) cachelines touched. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1158 # [PATCH] Allow panics and reboots at oops time. # # From: Russell Miller # # A BUG or an oops will often leave a machine in a useless state. There is no # way to remotely recover the machine from that state. # # The patch adds a /proc/sys/kernel/panic_on_oops sysctl which, when set, will # cause the x86 kernel to call panic() at the end of the oops handler. If the # user has also set /proc/sys/kernel/panic then a reboot will occur. # # The implementation will try to sleep for a while before panicing so the oops # info has a chance of hitting the logs. # # The implementation is designed so that other architectures can easily do this # in their oops handlers. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1159 # [PATCH] epoll cross-thread deletion fix # # From: Davide Libenzi # # # This fixes a bug that might happen having a thread doing epoll_wait() with # another thread doing epoll_ctl(EPOLL_CTL_DEL) and close(). The fast check # inside eventpoll_release() is good to not effect performace of code not # using epoll, but it requires get_file() to be called ( that can be avoided # by dropping the fast check ). I opted to keep the fast check and to have # epoll to call get_file() before the event send loop. I tested it on UP and # 2SMP with a bug-exploiting program provided by @pivia.com ( thx to them ) # and it looks fine. I also update the 2.4.20 epoll patch with this fix : # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1160 # [PATCH] Missing brelse() in ext2/ext3 extended attribute code # # From: Andreas Gruenbacher # # Missing brelse() in ext2/ext3 extended attribute code # # The ext2 and ext3 EA implementations fail to release a buffer_head if # the inode that is being accessed is sharing EAs with another inode, and # an attribute is set to the same value that it has already, like so: # # $ touch f g # $ setfattr -n user.test -v test f g # # (Now, both f and g refer to the same EA block.) # $ setfattr -n user.test -v test f # # With the bug, an "invalidate: busy buffer" or "invalidate: dirty # buffer" message will be logged when the file system is unmounted. This # patch fixes the problem. # # At the implementation level: # # The code was assuming that ext3_xattr_cache_find cannot return the same # block the inode already is associated with, so testing for (old_bh != # new_bh) would determine whether the old block is resued or an additional # bh is held. This is wrong if the EA block is used by multiple inodes (in # which case it stays in the cache), and the block isn't actually # modified. Instead of testing for (old_bh != new_bh), the code now does # a get_bh() in the branch that keeps the old block, which assures that # new_bh now is either NULL or a handle that must be released at the end # of ext3_xattr_set_handle2(). # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1161 # [PATCH] Make msync(MS_ASYNC) no longer start the I/O # # MS_ASYNC will currently wait on previously-submitted I/O, then start new I/O # and not wait on it. This can cause undesirable blocking if msync is called # rapidly against the same memory. # # So instead, change msync(MS_ASYNC) to not start any IO at all. Just flush # the pte dirty bits into the pageframe and leave it at that. # # The IO _will_ happen within a kupdate period. And the application can use # fsync() or fadvise(FADV_DONTNEED) if it actually wants to schedule the IO # immediately. # # (This has triggered an ext3 bug - the page's buffers get dirtied so fast # that kjournald keeps writing the buffers over and over for 10-20 seconds # before deciding to give up for some reason) # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1162 # [PATCH] struct address_space comments # # From: "Martin J. Bligh" # # Fix the commentary around the address_space fields. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1163 # [PATCH] task_lock commentary fixes # # From: Manfred Spraul # # Update and clarify the incorrect commentary around task_lock() # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1164 # [PATCH] 3c59x EISA tidyup # # From: Marc Zyngier # # The included patch helps 3c59x to display the correct identification # string (3c592 and 3c597 were displayed as 3c590). It also gets rid of # the EISA_bus reference, which is not needed anymore since the driver # has been ported to the EISA probing API. # -------------------------------------------- # 03/04/09 akpm@digeo.com 1.1165 # [PATCH] fix file leak in fadvise() # # It can miss an fput() if passed the fd of a file which has no ->mapping. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1166 # Tag more user-supplied path strings as being user pointers for # type evaluation. This tags the system call interfaces in # fs/open.c, fs/dcache.c and mm/swapfile.c - and tags the path # walking helper functions. # -------------------------------------------- # 03/04/09 davidm@tiger.hpl.hp.com 1.1033.9.5 # ia64: Initial sync with 2.5.67. # -------------------------------------------- # 03/04/09 torvalds@penguin.transmeta.com 1.1167 # Merge http://lia64.bkbits.net/to-linus-2.5 # into penguin.transmeta.com:/home/penguin/torvalds/repositories/kernel/linux # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1133.1.6 # i2c: clean up i2c-dev.c's formatting, DEBUG, and ioctl mess # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.1 # [SPARC]: Cleanup uaccess headers and add __user attributes. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.2 # [SPARC]: Make SA_ signal mask values explicitly unsigned. # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1168 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.3 # [SPARC64]: Fix copy_in_user args in process.c # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.4 # [SPARC64]: Use __user in ioctl32.c # -------------------------------------------- # 03/04/09 greg@kroah.com 1.1033.7.2 # [PATCH] USB: fix uss720 driver to work properly with recent parport changes. # -------------------------------------------- # 03/04/09 davej@codemonkey.org.uk 1.1033.2.3 # [AGPGART] Fold Intel i7x05 GART into intel-agp driver. # Also includes various other fixes from Matt Tolentino # -------------------------------------------- # 03/04/09 davej@codemonkey.org.uk 1.1033.2.4 # [AGPGART] ia64 related AGP fixes from David Mosberger. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1033.2.5 # [AGPGART] Missing C99 struct initialiser for x86-64 GART # -------------------------------------------- # 03/04/10 davej@tetrachloride.(none) 1.1167.1.1 # Merge tetrachloride.(none):/mnt/raid/src/kernel/2.5/bk-linus # into tetrachloride.(none):/mnt/raid/src/kernel/2.5/agpgart # -------------------------------------------- # 03/04/09 baldrick@wanadoo.fr 1.1033.7.3 # [PATCH] USB speedtouch Kconfig fix; CREDITS entry out of order # # Follow the style of other entries in Kconfig. # # CREDITS | 8 ++++---- # drivers/usb/misc/Kconfig | 2 +- # 2 files changed, 5 insertions(+), 5 deletions(-) # -------------------------------------------- # 03/04/09 legoll@free.fr 1.1033.7.4 # [PATCH] USB: New USB serial device ID: Asus A600 PDA cradle # # Just managed to get usb-serial connection up and running # with my Asus PDA, great work ! # # If you want to integrate the patches into the kernel tree, # please do so. # -------------------------------------------- # 03/04/09 oliver@neukum.org 1.1033.7.5 # [PATCH] USB: remove unnecessary setting of configuration from audio # # audio should not mess with configurations. # -------------------------------------------- # 03/04/09 jcdutton@users.sourceforge.net 1.1033.7.6 # [PATCH] USB: Add support for Pentax Still Camera to linux kernel. # -------------------------------------------- # 03/04/09 baldrick@wanadoo.fr 1.1033.7.7 # [PATCH] USB speedtouch: don't open a connection if no firmware # # How about this one instead. MOD_INC_USE_COUNT is placed before I call # any functions that can sleep. Let's just hope that the call to me doesn't # come after some sleeping in the higher layers... # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.2 # [AGPGART] Kconfig cleanups. (Remove no longer needed E7x05 entries) # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.3 # [AGPGART] Remove CONFIG_AGP3. # This optioned saved just a handful of bytes, and uglied up the code # quite a lot. Saving less than a page of memory is not as important as # maintainable code. # -------------------------------------------- # 03/04/09 paulus@samba.org 1.1169 # [PATCH] i2c: Add driver for powermac keywest i2c interface # # Here is a patch that adds an i2c bus driver for the i2c interface # found in the "KeyWest" and later combo-I/O chips used in powermacs. # The patch is against Linus' current BK tree. # -------------------------------------------- # 03/04/09 shemminger@osdl.org 1.1166.2.1 # [VLAN]: More device registry error handling fixes. # -------------------------------------------- # 03/04/09 yoshfuji@linux-ipv6.org 1.1166.2.2 # [IPV{4,6}]: Convert from MOD_{INC,DEC}_USE_COUNT. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.4 # [AGPGART] x86-64 Kconfig fixes. # Offering the K7 GARTs on 64bit kernels causes sillyness, like reports of # "unrecognised device, try unsupported". We don't want people to even try # that, so don't offer it in the first place. # # There's really no good reason for offering any of the IA32 era GARTs on a # x86-64 64bit kernel. If Intel (or whoever) ever do an x86-64 clone, a new # gart driver will be started anyways, as has been done for amd-k8-agp. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.5 # [AGPGART] Print banner on detecting AMD64 GART. # All the other GART drivers display what they've found, so make this # one follow suit. # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.1.6 # [AGPGART] update stale comment in x86-64 GART driver. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.1 # Annotate sysct with user pointer annotations # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.2 # Annotate kernel/time.c with user pointer annotations # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.3 # Annotate uid16 with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.4 # Annotate kernel/ptrace.c with user pointer information # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.5 # [SPARC]: __user tagging in sys_sparc.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.5 # Annotate kernel/printk.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.6 # Fix bad prototypes in kernel/softirq.c # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.2.7 # Fix kernel/posix-timers.c: # - bad preprocessor test always tested true, even when it shouldn't. # - annotate user pointers with proper annotations. # # Both found by my automatic type checker tool. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.7 # Merge bk://linux-dj.bkbits.net/agpgart # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.8 # Merge from DRI CVS: Use the list_entry() macro instead of depending # on the list-head being at the top of the DRI data structures and # using hard casts. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1166.1.6 # [SPARC]: __user attributes in signal handling. # -------------------------------------------- # 03/04/09 rusty@rustcorp.com.au 1.1166.2.3 # [NETFILTER]: Push skb linearization deeper inside of implementation. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.9 # Annotate fs/stat.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.10 # Annotate kernel/futex.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.11 # Annotate kernel/itimer.c with user pointer annotations. # -------------------------------------------- # 03/04/09 torvalds@home.transmeta.com 1.1167.1.12 # Annotate read/write paths with user pointer annotations # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.1 # Merge nuts.ninka.net:/home/davem/src/BK/sparcwork-2.5 # into nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.4.1 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.2 # [sparc]: Fix typo in uaccess.h # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.3 # [sparc]: Add missing const qualifiers to uaccess.h # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.4 # [sparc]: Make sure -m32 gets added to AFLAGS when needed. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.3.5 # [SIGINFO]: asm-generic/siginfo.h needs linux/compiler.h # -------------------------------------------- # 03/04/09 davem@kernel.bkbits.net 1.1167.1.13 # Merge davem@nuts.ninka.net:/home/davem/src/BK/sparc-2.5 # into kernel.bkbits.net:/home/davem/sparc-2.5 # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.4.2 # [IPV4]: Do proper netdev module refcounting in tunnel drivers. # -------------------------------------------- # 03/04/09 davem@nuts.ninka.net 1.1167.4.3 # [IPV6]: Apply ipv4 tunnel module fixes to SIT driver. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.4.4 # [IPV6]: Typo, try_get_module --> try_module_get. # -------------------------------------------- # 03/04/10 davem@kernel.bkbits.net 1.1167.5.1 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/10 shemminger@osdl.org 1.1167.4.5 # [BRIDGE]: Fix several locking bugs, plus cleanups. # -------------------------------------------- # 03/04/10 perex@suse.cz 1.1166.3.1 # ALSA update # - documentation # - control API - added multi-elements to reduce memory usage # - improved preallocation of DMA buffers # - CS46xx driver - added support for secondary codec # - HDSP driver - big update # - firmware is loaded with hdsptool now # - pmac driver updates (fixed oops and beep stuff) # - VIA82xx driver updated # - ymfpci driver updated # - drivers updated to new PnP layer # - wavefront, ad1816a, cs423x, es18xx, interwave, opl3sa2, cmi8330 # # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.6.1 # [AGPGART] Fix up AMD64 references. # Spotted by Andi Kleen. AMD64 is the architecture, not the CPU. # -------------------------------------------- # 03/04/10 perex@suse.cz 1.1166.3.2 # ALSA and PnP update # - compilation fixes # - enhanced linux/pnp.h: # pnp_device_is_isapnp(dev) # pnp_device_is_pnpbios(dev) # isapnp_card_number(dev) # isapnp_csn_number(dev) # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.1 # Clean up types and remove unnecessary casts from fs/readdir.c. # # Add user pointer annotations. # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.2 # Add user pointer annotations to fs/seq_file.c # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.3 # Add user pointer annotations to fs/super.c # -------------------------------------------- # 03/04/10 davej@codemonkey.org.uk 1.1167.6.2 # [AGPGART] Remove unnecessary AGP printk's in DRM. # If we build >1 DRM driver into the kernel, we get this lovely output.. # # [drm] Initialized tdfx 1.0.0 20010216 on minor 0 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized r128 2.3.0 20021029 on minor 1 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized radeon 1.8.0 20020828 on minor 2 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized mga 3.1.0 20021029 on minor 3 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized i810 1.2.1 20020211 on minor 4 # [drm] AGP 0.100 aperture @ 0xe0000000 64MB # [drm] Initialized i830 1.3.2 20021108 on minor 5 # # agpgart already outputs the info about the aperture address & size # before drm initialises, so its just repetition for no purpose. # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.7.4 # Merge http://linux-sound.bkbits.net/linux-sound # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.5.2 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.1.14 # Merge bk://kernel.bkbits.net/davem/sparc-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@home.transmeta.com 1.1167.1.15 # Merge bk://linux-dj.bkbits.net/agpgart # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/10 torvalds@penguin.transmeta.com 1.1167.1.16 # Add user pointer annotations to fs/select.c # -------------------------------------------- # 03/04/10 torvalds@penguin.transmeta.com 1.1167.1.17 # Add a user pointer annotation to sysinfo() # -------------------------------------------- # 03/04/10 gandalf@netfilter.org 1.1167.4.6 # [NETFILTER]: Fix modify-after-free bug in ip_conntrack. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.8.1 # Merge nuts.ninka.net:/home/davem/src/BK/network-2.5 # into nuts.ninka.net:/home/davem/src/BK/net-2.5 # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.9.1 # [ALSA]: Recent merge undid all of my build fixes, put them back in. # -------------------------------------------- # 03/04/10 davem@nuts.ninka.net 1.1167.8.2 # [SCHED]: Some schedulers forget to flush filter list at destroy. # -------------------------------------------- # 03/04/10 jef@linuxbe.org 1.1167.8.3 # [IPSEC]: Check xfrm state expiration on input after replay check. # -------------------------------------------- # 03/04/10 jmorris@intercode.com.au 1.1167.8.4 # [IPSEC]: Add initial IPCOMP support. # -------------------------------------------- # 03/04/10 ehabkost@conectiva.com.br 1.1167.9.2 # [SPARC]: Export phys_base on sparc32. # -------------------------------------------- # 03/04/10 dlstevens@us.ibm.com 1.1167.8.5 # [IPV4]: IGMPv3 support, with help from Vinay Kulkarni # -------------------------------------------- # 03/04/10 mrr@nexthop.com 1.1167.8.6 # [IPV6]: Allow protocol to percolate up into rt6 routing operations. # -------------------------------------------- # 03/04/11 davem@nuts.ninka.net 1.1167.8.7 # [IPV4]: Fix IGMP build with CONFIG_IP_MULTICAST disabled. # -------------------------------------------- # 03/04/11 davem@nuts.ninka.net 1.1167.8.8 # [PKTSCHED]: Fix double-define of __inline__ et al. # -------------------------------------------- # 03/04/10 davem@kernel.bkbits.net 1.1167.1.18 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1167.10.1 # Merge bk://kernel.bkbits.net/davem/sparc-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1167.1.19 # Merge bk://kernel.bkbits.net/davem/net-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1167.1.20 # Make sure to kunmap() the right address in fs/nfs/dir.c. # # Found by Rik van Riel: # # "There's a serious bug in the handling of the pointer returned # by kmap_atomic() in nfs/dir.c. The pointer (part of desc) is # passed into find_dirent_name and from there into dir_decode, # which modifies the pointer. # # That means you end up passing a wrong address to kunmap_atomic()." # -------------------------------------------- # 03/04/11 oliver@neukum.org 1.1033.7.8 # [PATCH] USB: remove configuration change from rtl8150 # # there's no reason this driver should mess with configurations. # -------------------------------------------- # 03/04/11 oliver@neukum.org 1.1033.7.9 # [PATCH] USB: remove configuration change from pegasus.c # # the driver should not mess with configurations here. # -------------------------------------------- # 03/04/11 kronos@kronoz.cjb.net 1.1170 # [PATCH] i2c: Add i2c-viapro.c driver # -------------------------------------------- # 03/04/11 greg@kroah.com 1.1171 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/i2c-2.5 # -------------------------------------------- # 03/04/11 greg@kroah.com 1.1167.1.21 # Merge kroah.com:/home/greg/linux/BK/bleed-2.5 # into kroah.com:/home/greg/linux/BK/gregkh-2.5 # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1172 # Merge bk://kernel.bkbits.net/gregkh/linux/linus-2.5 # into home.transmeta.com:/home/torvalds/v2.5/linux # -------------------------------------------- # 03/04/11 bcollins@debian.org 1.1173 # [PATCH] IEEE-1394/Firewire updates # # - Convert nodemgr to new driver model. # - Convert to new module_param() calls. # - Merged fixes for devfs mkdir and some sleep-in-atomic fixes from # mainline 2.5-bk # - Fix possible memory corruption on highlevel local read/write. # - Fix bitmap usage for some bitops. # - Fix bug in closing ISO stream. # - Fixes for nodemgr probing in the event of a reset storm. # - Workaround for nForce2 firewire chipset. This is preliminary. # - Conversion of SBP-2 to use new driver model in nodemgr, including # providing a driver for firewire unit directories and registering # proper callbacks. # -------------------------------------------- # 03/04/11 george@mvista.com 1.1174 # [PATCH] too much timer simplification... # # Noted by David Mosberger: # # "If someone happens to arm a periodic timer at exactly 256 jiffies (as # ohci happens to do on platforms with HZ=1024), then you end up getting # an endless loop of timer activations, causing a machine hang. # # The problem is that __run_timers updates base->timer_jiffies _before_ # running the callback routines. If a callback re-arms the timer at # exactly 256 jiffies, add_timers() will reinsert the timer into the list # that we're currently processing, which of course will cause the timer to # expire immediately again, etc., etc., ad naseum... " # # The answer here is to move the whole expired list to a local header and # to not look back. # -------------------------------------------- # 03/04/11 torvalds@home.transmeta.com 1.1175 # Annotate sys_uselib() with user pointer annotation # -------------------------------------------- # 03/04/11 akpm@digeo.com 1.1167.11.1 # [IPV4]: Fix bootup lockup when !CONFIG_IP_MULTICAST. # -------------------------------------------- # 03/04/11 shemminger@osdl.org 1.1167.11.2 # [BRIDGE]: Kill excessive stack usage in br_ioctl. # -------------------------------------------- # 03/04/11 shemminger@osdl.org 1.1167.11.3 # [EBTABLES]: Get rid of brlock in ebtable_broute. # -------------------------------------------- # 03/04/12 davem@nuts.ninka.net 1.1167.11.4 # [IPSEC]: Add ipv4 tunnel transformer. # -------------------------------------------- # 03/04/12 davem@nuts.ninka.net 1.1167.11.5 # [IGMP]: Dont dork with igmp timers on device down if not CONFIG_IP_MULTICAST. # -------------------------------------------- # 03/04/12 davem@kernel.bkbits.net 1.1176 # Merge davem@nuts.ninka.net:/home/davem/src/BK/net-2.5 # into kernel.bkbits.net:/home/davem/net-2.5 # -------------------------------------------- # 03/04/12 bcollins@debian.org 1.1177 # [PATCH] Fix module param decleration in pcilynx # -------------------------------------------- # diff -Nru a/CREDITS b/CREDITS --- a/CREDITS Sat Apr 12 14:44:09 2003 +++ b/CREDITS Sat Apr 12 14:44:09 2003 @@ -2750,6 +2750,10 @@ E: wsalamon@nai.com D: portions of the Linux Security Module (LSM) framework and security modules +N: Robert Sanders +E: gt8134b@prism.gatech.edu +D: Dosemu + N: Duncan Sands E: duncan.sands@wanadoo.fr W: http://topo.math.u-psud.fr/~sands @@ -2757,10 +2761,6 @@ S: 69 rue Dunois S: 75013 Paris S: France - -N: Robert Sanders -E: gt8134b@prism.gatech.edu -D: Dosemu N: Hannu Savolainen E: hannu@opensound.com diff -Nru a/Documentation/Changes b/Documentation/Changes --- a/Documentation/Changes Sat Apr 12 14:44:10 2003 +++ b/Documentation/Changes Sat Apr 12 14:44:10 2003 @@ -62,6 +62,7 @@ o isdn4k-utils 3.1pre1 # isdnctrl 2>&1|grep version o procps 2.0.9 # ps --version o oprofile 0.5 # oprofiled --version +o nfs-utils 1.0.3 # showmount --version Kernel compilation ================== diff -Nru a/Documentation/DocBook/usb.tmpl b/Documentation/DocBook/usb.tmpl --- a/Documentation/DocBook/usb.tmpl Sat Apr 12 14:44:10 2003 +++ b/Documentation/DocBook/usb.tmpl Sat Apr 12 14:44:10 2003 @@ -100,7 +100,8 @@ USB Host-Side API Model - Host-side drivers for USB devices talk to the "usbcore" APIs. + Within the kernel, + host-side drivers for USB devices talk to the "usbcore" APIs. There are two types of public "usbcore" APIs, targetted at two different layers of USB driver. Those are general purpose drivers, exposed through @@ -287,6 +288,684 @@ !Edrivers/usb/core/hcd.c !Edrivers/usb/core/hcd-pci.c !Edrivers/usb/core/buffer.c + + + + The USB Filesystem (usbfs) + + This chapter presents the Linux usbfs. + You may prefer to avoid avoid writing new kernel code for your + USB driver; that's the problem that usbfs set out to solve. + User mode device drivers are usually packaged as applications + or libraries, and may use usbfs through some programming library + that wraps it. Such libraries include + libusb + for C/C++, and + jUSB for Java. + + + Unfinished + This particular documentation is incomplete, + especially with respect to the asynchronous mode. + As of kernel 2.5.66 the code and this (new) documentation + need to be cross-reviewed. + + + + Configure usbfs into Linux kernels by enabling the + USB filesystem option (CONFIG_USB_DEVICEFS), + and you get basic support for user mode USB device drivers. + Until relatively recently it was often (confusingly) called + usbdevfs although it wasn't solving what + devfs was. + Every USB device will appear in usbfs, regardless of whether or + not it has a kernel driver; but only devices with kernel drivers + show up in devfs. + + + + What files are in "usbfs"? + + Conventionally mounted at + /proc/bus/usb, usbfs + features include: + + /proc/bus/usb/devices + ... a text file + showing each of the USB devices on known to the kernel, + and their configuration descriptors. + You can also poll() this to learn about new devices. + + /proc/bus/usb/BBB/DDD + ... magic files + exposing the each device's configuration descriptors, and + supporting a series of ioctls for making device requests, + including I/O to devices. (Purely for access by programs.) + + + + + Each bus is given a number (BBB) based on when it was + enumerated; within each bus, each device is given a similar + number (DDD). + Those BBB/DDD paths are not "stable" identifiers; + expect them to change even if you always leave the devices + plugged in to the same hub port. + Don't even think of saving these in application + configuration files. + Stable identifiers are available, for user mode applications + that want to use them. HID and networking devices expose + these IDs. + + + + + + Mounting and Access Control + + There are a number of mount options for usbfs, which will + be of most interest to you if you need to override the default + access control policy. + That policy is that only root may read or write device files + (/proc/bus/BBB/DDD) although anyone may read + the devices + or drivers files. + I/O requests to the device also need the CAP_SYS_RAWIO capability, + + + The significance of that is that by default, all user mode + device drivers need super-user privileges. + You can change modes or ownership in a driver setup + when the device hotplugs, or maye just start the + driver right then, as a privileged server (or some activity + within one). + That's the most secure approach for multi-user systems, + but for single user systems ("trusted" by that user) + it's more convenient just to grant everyone all access + (using the devmode=0666 option) + so the driver can start whenever it's needed. + + + The mount options for usbfs, usable in /etc/fstab or + in command line invocations of mount, are: + + + + busgid=NNNNN + Controls the GID used for the + /proc/bus/usb/BBB + directories. (Default: 0) + busmode=MMM + Controls the file mode used for the + /proc/bus/usb/BBB + directories. (Default: 0555) + + busuid=NNNNN + Controls the UID used for the + /proc/bus/usb/BBB + directories. (Default: 0) + + devgid=NNNNN + Controls the GID used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0) + devmode=MMM + Controls the file mode used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0644) + devuid=NNNNN + Controls the UID used for the + /proc/bus/usb/BBB/DDD + files. (Default: 0) + + listgid=NNNNN + Controls the GID used for the + /proc/bus/usb/devices and drivers files. + (Default: 0) + listmode=MMM + Controls the file mode used for the + /proc/bus/usb/devices and drivers files. + (Default: 0444) + listuid=NNNNN + Controls the UID used for the + /proc/bus/usb/devices and drivers files. + (Default: 0) + + + + + Note that many Linux distributions hard-wire the mount options + for usbfs in their init scripts, such as + /etc/rc.d/rc.sysinit, + rather than making it easy to set this per-system + policy in /etc/fstab. + + + + + + /proc/bus/usb/devices + + This file is handy for status viewing tools in user + mode, which can scan the text format and ignore most of it. + More detailed device status (including class and vendor + status) is available from device-specific files. + For information about the current format of this file, + see the + Documentation/usb/proc_usb_info.txt + file in your Linux kernel sources. + + + Otherwise the main use for this file from programs + is to poll() it to get notifications of usb devices + as they're plugged or unplugged. + To see what changed, you'd need to read the file and + compare "before" and "after" contents, scan the filesystem, + or see its hotplug event. + + + + + + /proc/bus/usb/BBB/DDD + + Use these files in one of these basic ways: + + + They can be read, + producing first the device descriptor + (18 bytes) and then the descriptors for the current configuration. + See the USB 2.0 spec for details about those binary data formats. + You'll need to convert most multibyte values from little endian + format to your native host byte order, although a few of the + fields in the device descriptor (both of the BCD-encoded fields, + and the vendor and product IDs) will be byteswapped for you. + Note that configuration descriptors include descriptors for + interfaces, altsettings, endpoints, and maybe additional + class descriptors. + + + Perform USB operations using + ioctl() requests to make endpoint I/O + requests (synchronously or asynchronously) or manage + the device. + These requests need the CAP_SYS_RAWIO capability, + as well as filesystem access permissions. + Only one ioctl request can be made on one of these + device files at a time. + This means that if you are synchronously reading an endpoint + from one thread, you won't be able to write to a different + endpoint from another thread until the read completes. + This works for half duplex protocols, + but otherwise you'd use asynchronous i/o requests. + + + + + + + Life Cycle of User Mode Drivers + + Such a driver first needs to find a device file + for a device it knows how to handle. + Maybe it was told about it because a + /sbin/hotplug event handling agent + chose that driver to handle the new device. + Or maybe it's an application that scans all the + /proc/bus/usb device files, and ignores most devices. + In either case, it should read() all + the descriptors from the device file, + and check them against what it knows how to handle. + It might just reject everything except a particular + vendor and product ID, or need a more complex policy. + + + Never assume there will only be one such device + on the system at a time! + If your code can't handle more than one device at + a time, at least detect when there's more than one, and + have your users choose which device to use. + + + Once your user mode driver knows what device to use, + it interacts with it in either of two styles. + The simple style is to make only control requests; some + devices don't need more complex interactions than those. + (An example might be software using vendor-specific control + requests for some initialization or configuration tasks, + with a kernel driver for the rest.) + + + More likely, you need a more complex style driver: + one using non-control endpoints, reading or writing data + and claiming exclusive use of an interface. + Bulk transfers are easiest to use, + but only their sibling interrupt transfers + work with low speed devices. + Both interrupt and isochronous transfers + offer service guarantees because their bandwidth is reserved. + Such "periodic" transfers are awkward to use through usbfs, + unless you're using the asynchronous calls. However, interrupt + transfers can also be used in a synchronous "one shot" style. + + + Your user-mode driver should never need to worry + about cleaning up request state when the device is + disconnected, although it should close its open file + descriptors as soon as it starts seeing the ENODEV + errors. + + + + + The ioctl() Requests + + To use these ioctls, you need to include the following + headers in your userspace program: +#include <linux/usb.h> +#include <linux/usbdevice_fs.h> +#include <asm/byteorder.h> + The standard USB device model requests, from "Chapter 9" of + the USB 2.0 specification, are automatically included from + the <linux/usb_ch9.h> header. + + + Unless noted otherwise, the ioctl requests + described here will + update the modification time on the usbfs file to which + they are applied (unless they fail). + A return of zero indicates success; otherwise, a + standard USB error code is returned. (These are + documented in + Documentation/usb/error-codes.txt + in your kernel sources.) + + + Each of these files multiplexes access to several + I/O streams, one per endpoint. + Each device has one control endpoint (endpoint zero) + which supports a limited RPC style RPC access. + Devices are configured + by khubd (in the kernel) setting a device-wide + configuration that affects things + like power consumption and basic functionality. + The endpoints are part of USB interfaces, + which may have altsettings + affecting things like which endpoints are available. + Many devices only have a single configuration and interface, + so drivers for them will ignore configurations and altsettings. + + + + + Management/Status Requests + + A number of usbfs requests don't deal very directly + with device I/O. + They mostly relate to device management and status. + These are all synchronous requests. + + + + + USBDEVFS_CLAIMINTERFACE + This is used to force usbfs to + claim a specific interface, + which has not previously been claimed by usbfs or any other + kernel driver. + The ioctl parameter is an integer holding the number of + the interface (bInterfaceNumber from descriptor). + + Note that if your driver doesn't claim an interface + before trying to use one of its endpoints, and no + other driver has bound to it, then the interface is + automatically claimed by usbfs. + + This claim will be released by a RELEASEINTERFACE ioctl, + or by closing the file descriptor. + File modification time is not updated by this request. + + + USBDEVFS_CONNECTINFO + Says whether the device is lowspeed. + The ioctl parameter points to a structure like this: +struct usbdevfs_connectinfo { + unsigned int devnum; + unsigned char slow; +}; + File modification time is not updated by this request. + + You can't tell whether a "not slow" + device is connected at high speed (480 MBit/sec) + or just full speed (12 MBit/sec). + You should know the devnum value already, + it's the DDD value of the device file name. + + + USBDEVFS_GETDRIVER + Returns the name of the kernel driver + bound to a given interface (a string). Parameter + is a pointer to this structure, which is modified: +struct usbdevfs_getdriver { + unsigned int interface; + char driver[USBDEVFS_MAXDRIVERNAME + 1]; +}; + File modification time is not updated by this request. + + + USBDEVFS_IOCTL + Passes a request from userspace through + to a kernel driver that has an ioctl entry in the + struct usb_driver it registered. +struct usbdevfs_ioctl { + int ifno; + int ioctl_code; + void *data; +}; + +/* user mode call looks like this. + * 'request' becomes the driver->ioctl() 'code' parameter. + * the size of 'param' is encoded in 'request', and that data + * is copied to or from the driver->ioctl() 'buf' parameter. + */ +static int +usbdev_ioctl (int fd, int ifno, unsigned request, void *param) +{ + struct usbdevfs_ioctl wrapper; + + wrapper.ifno = ifno; + wrapper.ioctl_code = request; + wrapper.data = param; + + return ioctl (fd, USBDEVFS_IOCTL, &wrapper); +} + File modification time is not updated by this request. + + This request lets kernel drivers talk to user mode code + through filesystem operations even when they don't create + a charactor or block special device. + It's also been used to do things like ask devices what + device special file should be used. + Two pre-defined ioctls are used + to disconnect and reconnect kernel drivers, so + that user mode code can completely manage binding + and configuration of devices. + + + USBDEVFS_RELEASEINTERFACE + This is used to release the claim usbfs + made on interface, either implicitly or because of a + USBDEVFS_CLAIMINTERFACE call, before the file + descriptor is closed. + The ioctl parameter is an integer holding the number of + the interface (bInterfaceNumber from descriptor); + File modification time is not updated by this request. + + No security check is made to ensure + that the task which made the claim is the one + which is releasing it. + This means that user mode driver may interfere + other ones. + + + USBDEVFS_RESETEP + Resets the data toggle value for an endpoint + (bulk or interrupt) to DATA0. + The ioctl parameter is an integer endpoint number + (1 to 15, as identified in the endpoint descriptor), + with USB_DIR_IN added if the device's endpoint sends + data to the host. + + Avoid using this request. + It should probably be removed. + Using it typically means the device and driver will lose + toggle synchronization. If you really lost synchronization, + you likely need to completely handshake with the device, + using a request like CLEAR_HALT + or SET_INTERFACE. + + + + + + + + Synchronous I/O Support + + Synchronous requests involve the kernel blocking + until until the user mode request completes, either by + finishing successfully or by reporting an error. + In most cases this is the simplest way to use usbfs, + although as noted above it does prevent performing I/O + to more than one endpoint at a time. + + + + + USBDEVFS_BULK + Issues a bulk read or write request to the + device. + The ioctl parameter is a pointer to this structure: +struct usbdevfs_bulktransfer { + unsigned int ep; + unsigned int len; + unsigned int timeout; /* in milliseconds */ + void *data; +}; + The "ep" value identifies a + bulk endpoint number (1 to 15, as identified in an endpoint + descriptor), + masked with USB_DIR_IN when referring to an endpoint which + sends data to the host from the device. + The length of the data buffer is identified by "len"; + Recent kernels support requests up to about 128KBytes. + FIXME say how read length is returned, + and how short reads are handled.. + + + USBDEVFS_CLEAR_HALT + Clears endpoint halt (stall) and + resets the endpoint toggle. This is only + meaningful for bulk or interrupt endpoints. + The ioctl parameter is an integer endpoint number + (1 to 15, as identified in an endpoint descriptor), + masked with USB_DIR_IN when referring to an endpoint which + sends data to the host from the device. + + Use this on bulk or interrupt endpoints which have + stalled, returning -EPIPE status + to a data transfer request. + Do not issue the control request directly, since + that could invalidate the host's record of the + data toggle. + + + USBDEVFS_CONTROL + Issues a control request to the device. + The ioctl parameter points to a structure like this: +struct usbdevfs_ctrltransfer { + __u8 bRequestType; + __u8 bRequest; + __u16 wValue; + __u16 wIndex; + __u16 wLength; + __u32 timeout; /* in milliseconds */ + void *data; +}; + + The first eight bytes of this structure are the contents + of the SETUP packet to be sent to the device; see the + USB 2.0 specification for details. + The bRequestType value is composed by combining a + USB_TYPE_* value, a USB_DIR_* value, and a + USB_RECIP_* value (from + <linux/usb.h>). + If wLength is nonzero, it describes the length of the data + buffer, which is either written to the device + (USB_DIR_OUT) or read from the device (USB_DIR_IN). + + At this writing, you can't transfer more than 4 KBytes + of data to or from a device; usbfs has a limit, and + some host controller drivers have a limit. + (That's not usually a problem.) + Also there's no way to say it's + not OK to get a short read back from the device. + + + USBDEVFS_RESET + Does a USB level device reset. + The ioctl parameter is ignored. + After the reset, this rebinds all device interfaces. + File modification time is not updated by this request. + + Avoid using this call + until some usbcore bugs get fixed, + since it does not fully synchronize device, interface, + and driver (not just usbfs) state. + + + USBDEVFS_SETINTERFACE + Sets the alternate setting for an + interface. The ioctl parameter is a pointer to a + structure like this: +struct usbdevfs_setinterface { + unsigned int interface; + unsigned int altsetting; +}; + File modification time is not updated by this request. + + Those struct members are from some interface descriptor + applying to the the current configuration. + The interface number is the bInterfaceNumber value, and + the altsetting number is the bAlternateSetting value. + (This resets each endpoint in the interface.) + + + USBDEVFS_SETCONFIGURATION + Issues the + usb_set_configuration call + for the device. + The parameter is an integer holding the number of + a configuration (bConfigurationValue from descriptor). + File modification time is not updated by this request. + + Avoid using this call + until some usbcore bugs get fixed, + since it does not fully synchronize device, interface, + and driver (not just usbfs) state. + + + + + + + Asynchronous I/O Support + + As mentioned above, there are situations where it may be + important to initiate concurrent operations from user mode code. + This is particularly important for periodic transfers + (interrupt and isochronous), but it can be used for other + kinds of USB requests too. + In such cases, the asynchronous requests described here + are essential. Rather than submitting one request and having + the kernel block until it completes, the blocking is separate. + + + These requests are packaged into a structure that + resembles the URB used by kernel device drivers. + (No POSIX Async I/O support here, sorry.) + It identifies the endpoint type (USBDEVFS_URB_TYPE_*), + endpoint (number, masked with USB_DIR_IN as appropriate), + buffer and length, and a user "context" value serving to + uniquely identify each request. + (It's usually a pointer to per-request data.) + Flags can modify requests (not as many as supported for + kernel drivers). + + + Each request can specify a realtime signal number + (between SIGRTMIN and SIGRTMAX, inclusive) to request a + signal be sent when the request completes. + + + When usbfs returns these urbs, the status value + is updated, and the buffer may have been modified. + Except for isochronous transfers, the actual_length is + updated to say how many bytes were transferred; if the + USBDEVFS_URB_DISABLE_SPD flag is set + ("short packets are not OK"), if fewer bytes were read + than were requested then you get an error report. + + +struct usbdevfs_iso_packet_desc { + unsigned int length; + unsigned int actual_length; + unsigned int status; +}; + +struct usbdevfs_urb { + unsigned char type; + unsigned char endpoint; + int status; + unsigned int flags; + void *buffer; + int buffer_length; + int actual_length; + int start_frame; + int number_of_packets; + int error_count; + unsigned int signr; + void *usercontext; + struct usbdevfs_iso_packet_desc iso_frame_desc[]; +}; + + For these asynchronous requests, the file modification + time reflects when the request was initiated. + This contrasts with their use with the synchronous requests, + where it reflects when requests complete. + + + + + USBDEVFS_DISCARDURB + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_DISCSIGNAL + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_REAPURB + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_REAPURBNDELAY + + TBS + File modification time is not updated by this request. + + + + USBDEVFS_SUBMITURB + + TBS + + + + + + + + diff -Nru a/Documentation/io_ordering.txt b/Documentation/io_ordering.txt --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/Documentation/io_ordering.txt Sat Apr 12 14:44:10 2003 @@ -0,0 +1,47 @@ +On some platforms, so-called memory-mapped I/O is weakly ordered. On such +platforms, driver writers are responsible for ensuring that I/O writes to +memory-mapped addresses on their device arrive in the order intended. This is +typically done by reading a 'safe' device or bridge register, causing the I/O +chipset to flush pending writes to the device before any reads are posted. A +driver would usually use this technique immediately prior to the exit of a +critical section of code protected by spinlocks. This would ensure that +subsequent writes to I/O space arrived only after all prior writes (much like a +memory barrier op, mb(), only with respect to I/O). + +A more concrete example from a hypothetical device driver: + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + ... + +In the case above, the device may receive newval2 before it receives newval, +which could cause problems. Fixing it is easy enough though: + + ... +CPU A: spin_lock_irqsave(&dev_lock, flags) +CPU A: val = readl(my_status); +CPU A: ... +CPU A: writel(newval, ring_ptr); +CPU A: (void)readl(safe_register); /* maybe a config register? */ +CPU A: spin_unlock_irqrestore(&dev_lock, flags) + ... +CPU B: spin_lock_irqsave(&dev_lock, flags) +CPU B: val = readl(my_status); +CPU B: ... +CPU B: writel(newval2, ring_ptr); +CPU B: (void)readl(safe_register); /* maybe a config register? */ +CPU B: spin_unlock_irqrestore(&dev_lock, flags) + +Here, the reads from safe_register will cause the I/O chipset to flush any +pending writes before actually posting the read to the chipset, preventing +possible data corruption. diff -Nru a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl --- a/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl Sat Apr 12 14:44:07 2003 +++ b/Documentation/sound/alsa/DocBook/writing-an-alsa-driver.tmpl Sat Apr 12 14:44:07 2003 @@ -18,8 +18,8 @@ - Dec. 27, 2002 - 0.2 (reborn at Christmas) + Mar. 26, 2003 + 0.3 @@ -30,7 +30,7 @@ - Copyright (c) 2002 Takashi Iwai tiwai@suse.de + Copyright (c) 2002, 2003 Takashi Iwai tiwai@suse.de @@ -1425,11 +1425,11 @@
Resource Allocation - The allocation of ports and irqs are done via standard kernel + The allocation of I/O ports and irqs are done via standard kernel functions. Unlike ALSA ver.0.5.x., there are no helpers for that. And these resources must be released in the destructor - function (see below). Also, on ALSA 0.9.x, you don't need - allocate (pseudo-)DMA for PCI like 0.5.x. + function (see below). Also, on ALSA 0.9.x, you don't need to + allocate (pseudo-)DMA for PCI like ALSA 0.5.x. @@ -1461,7 +1461,7 @@ since irq 0 is valid. The port address and its resource pointer can be initialized as null by snd_magic_kcalloc() automatically, so you - don't have to take care of it. + don't have to take care of resetting them. @@ -2227,79 +2227,157 @@
-
- Operators - - OK, now let me explain the detail of each pcm callback - (ops). In general, every callback must - return 0 if successful, or a negative number with the error - number such as -EINVAL at any - error. - - - - The callback function takes at least the argument with - snd_pcm_substream_t pointer. For retrieving the - chip record from the given substream instance, you can use the - following macro. - - - - - - - - - - It's expanded with a magic-cast, so the cast-error is - automatically checked. You should define chip_t at - the beginning of the code, since this will be referred in many - places of pcm and control interfaces. - +
+ Runtime Pointer - The Chest of PCM Information + + When the PCM substream is opened, a PCM runtime instance is + allocated and assigned to the substream. This pointer is + accessible via substream->runtime. + This runtime pointer holds the various information; it holds + the copy of hw_params and sw_params configurations, the buffer + pointers, mmap records, spinlocks, etc. Almost everyhing you + need for controlling the PCM can be found there. + -
- open callback - + + The definition of runtime instance is found in + <sound/pcm.h>. Here is the + copy from the file. + - This is called when a pcm substream is opened. - + + For the operators (callbacks) of each sound driver, most of + these records are supposed to be read-only. Only the PCM + middle-layer changes / updates these info. The excpetions are + the hardware description (hw), interrupt callbacks + (transfer_ack_xxx), DMA buffer information, and the private + data. Besides, if you use the standard buffer allocation + method via snd_pcm_lib_malloc_pages(), + you don't need to set the DMA buffer information by yourself. + - - At least, here you have to initialize the runtime hardware - record. Typically, this is done by like this: + + In the sections below, important records are explained. + +
+ Hardware Description + + The hardware descriptor (snd_pcm_hardware_t) + contains the definitions of the fundamental hardware + configuration. Above all, you'll need to define this in + + the open callback. + Note that the runtime instance holds the copy of the + descriptor, not the pointer to the existing descriptor. That + is, in the open callback, you can modify the copied descriptor + (runtime->hw) as you need. For example, if the maximum + number of channels is 1 only on some chip models, you can + still use the same hardware descriptor and change the + channels_max later: runtime; - - runtime->hw = snd_mychip_playback_hw; - return 0; - } + ... + runtime->hw = snd_mychip_playback_hw; // common definition + if (chip->model == VERY_OLD_ONE) + runtime->hw.channels_max = 1; ]]> + - where snd_mychip_playback_hw is the - pre-defined hardware record. - + + Typically, you'll have a hardware descriptor like below: - The similar struct exists on ALSA 0.5.x driver, so you can - guess the values if you already wrote a driver. - - - + + The info field contains the type and capabilities of this pcm. The bit flags are defined in <sound/asound.h> as @@ -2366,6 +2441,17 @@ must handle the corresponding commands. + + When the PCM substreams can be synchronized (typically, + synchorinized start/stop of a playback and a capture streams), + you can give SNDRV_PCM_INFO_SYNC_START, + too. In this case, you'll need to check the linked-list of + PCM substreams in the trigger callback. This will be + described in the later section. + + + + formats field contains the bit-flags of supported formats (SNDRV_PCM_FMTBIT_XXX). @@ -2373,38 +2459,181 @@ bits. In the example above, the signed 16bit little-endian format is specified. + + rates field contains the bit-flags of supported rates (SNDRV_PCM_RATE_XXX). When the chip supports continuous rates, pass CONTINUOUS bit additionally. - The pre-defined rate bits are only for typical rates. If your - chip supports unconventional rates, you need to add - KNOT bit and set up the + The pre-defined rate bits are provided only for typical + rates. If your chip supports unconventional rates, you need to add + KNOT bit and set up the hardware constraint manually (explained later). + - - There have been many changes of terminology between - ALSA 0.5.x and 0.9.x. - On the ALSA 0.9.x world, period means what is - known as fragment in the OSS. It's the least - size of (a part of) the buffer to generate an interrupt. + + + rate_min and + rate_max define the minimal and + maximal sample rate. This should correspond somehow to + rates bits. + + + + + + channel_min and + channel_max + define, as you might already expected, the minimal and maximal + number of channels. + + + + + + buffer_bytes_max defines the + maximal buffer size in bytes. There is no + buffer_bytes_min field, since + it can be calculated from the minimal period size and the + minimal number of periods. + Meanwhile, period_bytes_min and + define the minimal and maximal size of the period in bytes. + periods_max and + periods_min define the maximal and + minimal number of periods in the buffer. - - Now, taking the new terminology into account, the other fields - are self-explanatory (I hope). Please note that here, both - min/max buffer and period sizes are specified in bytes. + + The period is a term, that corresponds to + fragment in the OSS world. The period defines the size at + which the PCM interrupt is generated. This size strongly + depends on the hardware. + Generally, the smaller period size will give you more + interrupts, that is, more controls. + In the case of capture, this size defines the input latency. + On the other hand, the whole buffer size defines the + output latency for the playback direction. + + + + + + There is also a field fifo_size. + This specifies the size of the hardware FIFO, but it's not + used currently in the driver nor in the alsa-lib. So, you + can ignore this field. + + + + +
+ +
+ PCM Configurations + + Ok, let's go back again to the PCM runtime records. + The most frequently referred records in the runtime instance are + the PCM configurations. + The PCM configurations are stored on runtime instance + after the application sends hw_params data via + alsa-lib. There are many fields copied from hw_params and + sw_params structs. For example, + format holds the format type + chosen by the application. This field contains the enum value + SNDRV_PCM_FORMAT_XXX. + + + + One thing to be noted is that the configured buffer and period + sizes are stored in frames in the runtime + In the ALSA world, 1 frame = channels * samples-size. + For conversion between frames and bytes, you can use the + helper functions, frames_to_bytes() and + bytes_to_frames(). + + +period_size); +]]> + + - - Some drivers allocate the private instance for each pcm - substream. It can be stored in - substream->runtime->private_data. - Since it's a void pointer, you - should use magic-kmalloc and magic-cast for such an object. + + Also, many software parameters (sw_params) are + stored in frames, too. Please check the type of the field. + snd_pcm_uframes_t is for the frames as unsigned + integer while snd_pcm_sframes_t is for the frames + as signed integer. + +
+ +
+ DMA Buffer Information + + The DMA buffer is defined by the following four fields, + dma_area, + dma_addr, + dma_bytes and + dma_private. + The dma_area holds the buffer + pointer (the logical address). You can call + memcpy from/to + this pointer. Meanwhile, dma_addr + holds the physical address of the buffer. This field is + specified only when the buffer is a linear buffer. + dma_bytes holds the size of buffer + in bytes. dma_private is used for + the ALSA DMA allocator. + + + + If you use a standard ALSA function, + snd_pcm_lib_malloc_pages(), for + allocating the buffer, these fields are set by the ALSA middle + layer, and you should not change them by + yourself. You can read them but not write them. + On the other hand, if you want to allocate the buffer by + yourself, you'll need to manage it in hw_params callback. + At least, dma_bytes is mandatory. + dma_area is necessary when the + buffer is mmapped. If your driver doesn't support mmap, this + field is not necessary. dma_addr + is also not mandatory. You can use + dma_private as you like, too. + +
+ +
+ Running Status + + The running status can be referred via runtime->status. + This is the pointer to snd_pcm_mmap_status_t + record. For example, you can get the current DMA hardware + pointer via runtime->status->hw_ptr. + + + + The DMA application pointer can be referred via + runtime->control, which points + snd_pcm_mmap_control_t record. + However, accessing directly to this value is not recommended. + +
+ +
+ Private Data + + You can allocate a record for the substream and store it in + runtime->private_data. Usually, this + done in + + the open callback. + Since it's a void pointer, you should use magic-kmalloc and + magic-cast for such an object. @@ -2423,8 +2652,110 @@ - The allocated object must be released in the close callback below. + The allocated object must be released in + + the close callback. +
+ +
+ Interrupt Callbacks + + The field transfer_ack_begin and + transfer_ack_end are called at + the beginning and the end of + snd_pcm_period_elapsed(), respectively. + +
+ +
+ +
+ Operators + + OK, now let me explain the detail of each pcm callback + (ops). In general, every callback must + return 0 if successful, or a negative number with the error + number such as -EINVAL at any + error. + + + + The callback function takes at least the argument with + snd_pcm_substream_t pointer. For retrieving the + chip record from the given substream instance, you can use the + following macro. + + + + + + + + + + It's expanded with a magic-cast, so the cast-error is + automatically checked. You should define chip_t at + the beginning of the code, since this will be referred in many + places of pcm and control interfaces. + + +
+ open callback + + + + + + + + This is called when a pcm substream is opened. + + + + At least, here you have to initialize the runtime->hw + record. Typically, this is done by like this: + + + +runtime; + + runtime->hw = snd_mychip_playback_hw; + return 0; + } +]]> + + + + where snd_mychip_playback_hw is the + pre-defined hardware description. + + + + You can allocate a private data in this callback, as described + in + Private Data section. + + + + If the hardware configuration needs more constraints, set the + hardware constraints here, too. + See + Constraints for more details. +
@@ -2622,23 +2953,6 @@ - Note that the period and the buffer sizes are stored in - frames. In the ALSA world, 1 frame = channels - * samples-size. For conversion between frames and bytes, you - can use the helper functions, - frames_to_bytes() and - bytes_to_frames(). - - - -period_size); -]]> - - - - - Be careful that this callback will be called many times at each set up, too. @@ -5115,6 +5429,217 @@ + + + + + + How To Put Your Driver Into ALSA Tree +
+ General + + So far, you've learned how to write the driver codes. + And you might have a question now: how to put my own + driver into the ALSA driver tree? + Here (finally :) the standard procedure is described briefly. + + + + Suppose that you'll create a new PCI driver for the card + xyz. The card module name would be + snd-xyz. The new driver is usually put into alsa-driver + tree. Then the driver is evaluated, audited and tested + by developers and users. After a certain time, the driver + will go to alsa-kernel tree and eventually integrated into + Linux 2.5 tree. + + + + In the following sections, the driver code is supposed + to be put into alsa-driver tree. The two cases are assumed: + a driver consisting of a single source file and one consisting + of several source files. + +
+ +
+ Driver with A Single Source File + + + + + Modify alsa-driver/pci/Makefile + + + + Suppose you have a file xyz.c. Add the following + two lines + + + + + + + + + + + Modify alsa-driver/acore/Makefile + + + + Here define the dependent modules. + + + + + + + If the driver supports PCM, snd-pcm.o, + snd-timer.o and snd-page-alloc.o + will be needed. + + + For rawmidi, snd-rawmidi.o is needed in addition. + The MIDI stuff is also related to the sequencer. + You'll need to modify alsa-driver/acore/seq/Makefile. + + + + For OPL3, snd-hwdep.o is needed, too. + It's involved with the sequencer, and as well as rawmidi, + you'll need to modify alsa-driver/acore/seq/Makefile + and acore/seq/instr/Makefile in addition. + Also, a new entry is necessary in + alsa-driver/drivers/opl3/Makefile. + + + + + + + Modify alsa-driver/utils/Modules.dep + + + + Add the module definition for configure, here. + The beginning of the line must be a vertical bar, following + the card module name (snd-xyz) and the list of its all + dependent modules. + + + + + + + + + + + + Run cvscompile script to re-generate the configure script and + build the whole stuff again. + + + + +
+ +
+ Drivers with Several Source Files + + Suppose that the driver snd-xyz have several source files. + They are located in the new subdirectory, + pci/xyz. + + + + + Add a new directory (xyz) to extra-subdir-y list in alsa-driver/pci/Makefile + + + + + + + + + + + + Under the directory xyz, create a Makefile + + + Sample Makefile for a driver xyz + + + + + + + + + + Modify alsa-driver/acore/Makefile + + + + This procedure is as same as in the last section. + + + + + + Modify alsa-driver/utils/Modules.dep + + + + + + + + + + + + + + Run cvscompile script to re-generate the configure script and + build the whole stuff again. + + + + +
+ +
diff -Nru a/Documentation/sysctl/kernel.txt b/Documentation/sysctl/kernel.txt --- a/Documentation/sysctl/kernel.txt Sat Apr 12 14:44:08 2003 +++ b/Documentation/sysctl/kernel.txt Sat Apr 12 14:44:08 2003 @@ -204,6 +204,18 @@ ============================================================== +panic_on_oops: + +Controls the kernel's behaviour when an oops or BUG is encountered. + +0: try to continue operation + +1: delay a few seconds (to give klogd time to record the oops output) and + then panic. If the `panic' sysctl is also non-zero then the machine will + be rebooted. + +============================================================== + pid_max: PID allocation wrap value. When the kenrel's next PID value diff -Nru a/Makefile b/Makefile --- a/Makefile Sat Apr 12 14:44:08 2003 +++ b/Makefile Sat Apr 12 14:44:08 2003 @@ -342,17 +342,9 @@ echo 'cmd_$@ := $(cmd_vmlinux__)' > $(@D)/.$(@F).cmd endef -ifdef CONFIG_SMP -# Final awk script makes sure per-cpu vars are in per-cpu section, as -# old gcc (eg egcs 2.92.11) ignores section attribute if uninitialized. - -check_per_cpu = $(AWK) -f $(srctree)/scripts/per-cpu-check.awk < System.map -endif - define rule_vmlinux $(rule_vmlinux__) $(NM) $@ | grep -v '\(compiled\)\|\(\.o$$\)\|\( [aUw] \)\|\(\.\.ng$$\)\|\(LASH[RL]DI\)' | sort > System.map - $(check_per_cpu) endef LDFLAGS_vmlinux += -T arch/$(ARCH)/vmlinux.lds.s diff -Nru a/arch/alpha/kernel/core_cia.c b/arch/alpha/kernel/core_cia.c --- a/arch/alpha/kernel/core_cia.c Sat Apr 12 14:44:08 2003 +++ b/arch/alpha/kernel/core_cia.c Sat Apr 12 14:44:08 2003 @@ -610,7 +610,7 @@ *(vip)CIA_IOC_CIA_CNFG = temp; } - /* Syncronize with all previous changes. */ + /* Synchronize with all previous changes. */ mb(); *(vip)CIA_IOC_CIA_REV; diff -Nru a/arch/alpha/kernel/pci.c b/arch/alpha/kernel/pci.c --- a/arch/alpha/kernel/pci.c Sat Apr 12 14:44:06 2003 +++ b/arch/alpha/kernel/pci.c Sat Apr 12 14:44:06 2003 @@ -230,7 +230,7 @@ void __init pcibios_fixup_bus(struct pci_bus *bus) { - /* Propogate hose info into the subordinate devices. */ + /* Propagate hose info into the subordinate devices. */ struct pci_controller *hose = bus->sysdata; struct list_head *ln; diff -Nru a/arch/alpha/kernel/pci_iommu.c b/arch/alpha/kernel/pci_iommu.c --- a/arch/alpha/kernel/pci_iommu.c Sat Apr 12 14:44:10 2003 +++ b/arch/alpha/kernel/pci_iommu.c Sat Apr 12 14:44:10 2003 @@ -431,7 +431,7 @@ /* Free and unmap a consistent DMA buffer. CPU_ADDR and DMA_ADDR must be values that were returned from pci_alloc_consistent. SIZE must be the same as what as passed into pci_alloc_consistent. - References to the memory and mappings assosciated with CPU_ADDR or + References to the memory and mappings associated with CPU_ADDR or DMA_ADDR past this call are illegal. */ void diff -Nru a/arch/alpha/kernel/semaphore.c b/arch/alpha/kernel/semaphore.c --- a/arch/alpha/kernel/semaphore.c Sat Apr 12 14:44:08 2003 +++ b/arch/alpha/kernel/semaphore.c Sat Apr 12 14:44:08 2003 @@ -122,7 +122,7 @@ long tmp, tmp2, tmp3; /* We must undo the sem->count down_interruptible decrement - simultaneously and atomicly with the sem->waking + simultaneously and atomically with the sem->waking adjustment, otherwise we can race with __up. This is accomplished by doing a 64-bit ll/sc on two 32-bit words. diff -Nru a/arch/alpha/kernel/setup.c b/arch/alpha/kernel/setup.c --- a/arch/alpha/kernel/setup.c Sat Apr 12 14:44:06 2003 +++ b/arch/alpha/kernel/setup.c Sat Apr 12 14:44:06 2003 @@ -486,7 +486,7 @@ notifier_chain_register(&panic_notifier_list, &alpha_panic_block); #ifdef CONFIG_ALPHA_GENERIC - /* Assume that we've booted from SRM if we havn't booted from MILO. + /* Assume that we've booted from SRM if we haven't booted from MILO. Detect the later by looking for "MILO" in the system serial nr. */ alpha_using_srm = strncmp((const char *)hwrpb->ssn, "MILO", 4) != 0; #endif @@ -569,7 +569,7 @@ #endif /* - * Indentify and reconfigure for the current system. + * Identify and reconfigure for the current system. */ cpu = (struct percpu_struct*)((char*)hwrpb + hwrpb->processor_offset); diff -Nru a/arch/alpha/kernel/time.c b/arch/alpha/kernel/time.c --- a/arch/alpha/kernel/time.c Sat Apr 12 14:44:08 2003 +++ b/arch/alpha/kernel/time.c Sat Apr 12 14:44:08 2003 @@ -331,7 +331,7 @@ /* From John Bowman : allow the values to settle, as the Update-In-Progress bit going low isn't good - enough on some hardware. 2ms is our guess; we havn't found + enough on some hardware. 2ms is our guess; we haven't found bogomips yet, but this is close on a 500Mhz box. */ __delay(1000000); diff -Nru a/arch/alpha/lib/strrchr.S b/arch/alpha/lib/strrchr.S --- a/arch/alpha/lib/strrchr.S Sat Apr 12 14:44:09 2003 +++ b/arch/alpha/lib/strrchr.S Sat Apr 12 14:44:09 2003 @@ -2,7 +2,7 @@ * arch/alpha/lib/strrchr.S * Contributed by Richard Henderson (rth@tamu.edu) * - * Return the address of the last occurrance of a given character + * Return the address of the last occurrence of a given character * within a null-terminated string, or null if it is not found. */ diff -Nru a/arch/alpha/math-emu/math.c b/arch/alpha/math-emu/math.c --- a/arch/alpha/math-emu/math.c Sat Apr 12 14:44:10 2003 +++ b/arch/alpha/math-emu/math.c Sat Apr 12 14:44:10 2003 @@ -294,7 +294,7 @@ * the appropriate signal to the translated program. * * In addition, properly track the exception state in software - * as described in the Alpha Architectre Handbook section 4.7.7.3. + * as described in the Alpha Architecture Handbook section 4.7.7.3. */ done: if (_fex) { diff -Nru a/arch/i386/Kconfig b/arch/i386/Kconfig --- a/arch/i386/Kconfig Sat Apr 12 14:44:06 2003 +++ b/arch/i386/Kconfig Sat Apr 12 14:44:06 2003 @@ -142,7 +142,7 @@ config M486 bool "486" help - Select this for a x486 processor, ether Intel or one of the + Select this for a 486 series processor, either Intel or one of the compatible processors from AMD, Cyrix, IBM, or Intel. Includes DX, DX2, and DX4 variants; also SL/SLC/SLC2/SLC3/SX/SX2 and UMC U5D or U5S. @@ -150,8 +150,8 @@ config M586 bool "586/K5/5x86/6x86/6x86MX" help - Select this for an x586 or x686 processor such as the AMD K5, the - Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not + Select this for an 586 or 686 series processor such as the AMD K5, + the Intel 5x86 or 6x86, or the Intel 6x86MX. This choice does not assume the RDTSC (Read Time Stamp Counter) instruction. config M586TSC @@ -226,28 +226,28 @@ config MCRUSOE bool "Crusoe" help - Select this for Transmeta Crusoe processor. Treats the processor + Select this for a Transmeta Crusoe processor. Treats the processor like a 586 with TSC, and sets some GCC optimization flags (like a Pentium Pro with no alignment requirements). config MWINCHIPC6 bool "Winchip-C6" help - Select this for a IDT Winchip C6 chip. Linux and GCC + Select this for an IDT Winchip C6 chip. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment requirements. config MWINCHIP2 bool "Winchip-2" help - Select this for a IDT Winchip-2. Linux and GCC + Select this for an IDT Winchip-2. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment requirements. config MWINCHIP3D bool "Winchip-2A/Winchip-3" help - Select this for a IDT Winchip-2A or 3. Linux and GCC + Select this for an IDT Winchip-2A or 3. Linux and GCC treat this chip as a 586TSC with some extended instructions and alignment reqirements. Development kernels also enable out of order memory stores for this CPU, which can increase @@ -260,15 +260,15 @@ treat this chip as a generic 586. Whilst the CPU is 686 class, it lacks the cmov extension which gcc assumes is present when generating 686 code. - Note, that Nehemiah (Model 9) and above will not boot with this - kernel due to them lacking the 3dnow instructions used in earlier + Note that Nehemiah (Model 9) and above will not boot with this + kernel due to them lacking the 3DNow! instructions used in earlier incarnations of the CPU. config MVIAC3_2 bool "VIA C3-2 (Nehemiah)" help - Select this for a VIA C3 "Nehemiah". Selecting this enables usage of SSE - and tells gcc to treat the CPU as a 686. + Select this for a VIA C3 "Nehemiah". Selecting this enables usage + of SSE and tells gcc to treat the CPU as a 686. Note, this kernel will not boot on older (pre model 9) C3s. endchoice @@ -435,7 +435,8 @@ enable and use it. If you say Y here even though your machine doesn't have a local APIC, then the kernel will still run with no slowdown at all. The local APIC supports CPU-generated self-interrupts (timer, - performance counters), and the NMI watchdog which detects hard lockups. + performance counters), and the NMI watchdog which detects hard + lockups. If you have a system with several CPUs, you do not need to say Y here: the local APIC will be used automatically. @@ -522,7 +523,7 @@ ---help--- This adds a driver to safely access the System Management Mode of the CPU on Toshiba portables with a genuine Toshiba BIOS. It does - not work on models with a Pheonix BIOS. The System Management Mode + not work on models with a Phoenix BIOS. The System Management Mode is used to set the BIOS and power saving options on Toshiba portables. For information on utilities to make use of this driver see the diff -Nru a/arch/i386/boot/setup.S b/arch/i386/boot/setup.S --- a/arch/i386/boot/setup.S Sat Apr 12 14:44:08 2003 +++ b/arch/i386/boot/setup.S Sat Apr 12 14:44:08 2003 @@ -213,7 +213,7 @@ # Part of above routine, this one just prints ascii al prtchr: pushw %ax pushw %cx - xorb %bh, %bh + movw $7,%bx movw $0x01, %cx movb $0x0e, %ah int $0x10 diff -Nru a/arch/i386/kernel/apm.c b/arch/i386/kernel/apm.c --- a/arch/i386/kernel/apm.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/apm.c Sat Apr 12 14:44:06 2003 @@ -227,6 +227,8 @@ #include #include +#include "io_ports.h" + extern spinlock_t i8253_lock; extern unsigned long get_cmos_time(void); extern void machine_real_restart(unsigned char *, int); @@ -295,6 +297,8 @@ */ #define APM_ZERO_SEGS +#include "apm.h" + /* * Define to make all _set_limit calls use 64k limits. The APM 1.1 BIOS is * supposed to provide limit information that it recognizes. Many machines @@ -556,24 +560,11 @@ unsigned int saved_fs; unsigned int saved_gs; # define APM_DO_SAVE_SEGS \ savesegment(fs, saved_fs); savesegment(gs, saved_gs) -# define APM_DO_ZERO_SEGS \ - "pushl %%ds\n\t" \ - "pushl %%es\n\t" \ - "xorl %%edx, %%edx\n\t" \ - "mov %%dx, %%ds\n\t" \ - "mov %%dx, %%es\n\t" \ - "mov %%dx, %%fs\n\t" \ - "mov %%dx, %%gs\n\t" -# define APM_DO_POP_SEGS \ - "popl %%es\n\t" \ - "popl %%ds\n\t" # define APM_DO_RESTORE_SEGS \ loadsegment(fs, saved_fs); loadsegment(gs, saved_gs) #else # define APM_DECL_SEGS # define APM_DO_SAVE_SEGS -# define APM_DO_ZERO_SEGS -# define APM_DO_POP_SEGS # define APM_DO_RESTORE_SEGS #endif @@ -615,22 +606,7 @@ local_save_flags(flags); APM_DO_CLI; APM_DO_SAVE_SEGS; - /* - * N.B. We do NOT need a cld after the BIOS call - * because we always save and restore the flags. - */ - __asm__ __volatile__(APM_DO_ZERO_SEGS - "pushl %%edi\n\t" - "pushl %%ebp\n\t" - "lcall *%%cs:apm_bios_entry\n\t" - "setc %%al\n\t" - "popl %%ebp\n\t" - "popl %%edi\n\t" - APM_DO_POP_SEGS - : "=a" (*eax), "=b" (*ebx), "=c" (*ecx), "=d" (*edx), - "=S" (*esi) - : "a" (func), "b" (ebx_in), "c" (ecx_in) - : "memory", "cc"); + apm_bios_call_asm(func, ebx_in, ecx_in, eax, ebx, ecx, edx, esi); APM_DO_RESTORE_SEGS; local_irq_restore(flags); cpu_gdt_table[cpu][0x40 / 8] = save_desc_40; @@ -673,26 +649,7 @@ local_save_flags(flags); APM_DO_CLI; APM_DO_SAVE_SEGS; - { - int cx, dx, si; - - /* - * N.B. We do NOT need a cld after the BIOS call - * because we always save and restore the flags. - */ - __asm__ __volatile__(APM_DO_ZERO_SEGS - "pushl %%edi\n\t" - "pushl %%ebp\n\t" - "lcall *%%cs:apm_bios_entry\n\t" - "setc %%bl\n\t" - "popl %%ebp\n\t" - "popl %%edi\n\t" - APM_DO_POP_SEGS - : "=a" (*eax), "=b" (error), "=c" (cx), "=d" (dx), - "=S" (si) - : "a" (func), "b" (ebx_in), "c" (ecx_in) - : "memory", "cc"); - } + error = apm_bios_call_simple_asm(func, ebx_in, ecx_in, eax); APM_DO_RESTORE_SEGS; local_irq_restore(flags); cpu_gdt_table[smp_processor_id()][0x40 / 8] = save_desc_40; @@ -1212,11 +1169,11 @@ { #ifdef INIT_TIMER_AFTER_SUSPEND /* set the clock to 100 Hz */ - outb_p(0x34,0x43); /* binary, mode 2, LSB/MSB, ch 0 */ + outb_p(0x34, PIT_MODE); /* binary, mode 2, LSB/MSB, ch 0 */ udelay(10); - outb_p(LATCH & 0xff , 0x40); /* LSB */ + outb_p(LATCH & 0xff, PIT_CH0); /* LSB */ udelay(10); - outb(LATCH >> 8 , 0x40); /* MSB */ + outb(LATCH >> 8, PIT_CH0); /* MSB */ udelay(10); #endif } diff -Nru a/arch/i386/kernel/cpu/common.c b/arch/i386/kernel/cpu/common.c --- a/arch/i386/kernel/cpu/common.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/cpu/common.c Sat Apr 12 14:44:06 2003 @@ -217,6 +217,10 @@ c->x86_capability[4] = excap; c->x86 = (tfms >> 8) & 15; c->x86_model = (tfms >> 4) & 15; + if (c->x86 == 0xf) { + c->x86 += (tfms >> 20) & 0xff; + c->x86_model += ((tfms >> 16) & 0xF) << 4; + } c->x86_mask = tfms & 15; } else { /* Have CPUID level 0 only - unheard of */ diff -Nru a/arch/i386/kernel/edd.c b/arch/i386/kernel/edd.c --- a/arch/i386/kernel/edd.c Sat Apr 12 14:44:07 2003 +++ b/arch/i386/kernel/edd.c Sat Apr 12 14:44:07 2003 @@ -598,7 +598,7 @@ .default_attrs = def_attrs, }; -static decl_subsys(edd,&ktype_edd); +static decl_subsys(edd,&ktype_edd,NULL); /** diff -Nru a/arch/i386/kernel/i387.c b/arch/i386/kernel/i387.c --- a/arch/i386/kernel/i387.c Sat Apr 12 14:44:10 2003 +++ b/arch/i386/kernel/i387.c Sat Apr 12 14:44:10 2003 @@ -40,10 +40,10 @@ tsk->thread.i387.fxsave.mxcsr = 0x1f80; } else { memset(&tsk->thread.i387.fsave, 0, sizeof(struct i387_fsave_struct)); - tsk->thread.i387.fsave.cwd = 0xffff037f; - tsk->thread.i387.fsave.swd = 0xffff0000; - tsk->thread.i387.fsave.twd = 0xffffffff; - tsk->thread.i387.fsave.fos = 0xffff0000; + tsk->thread.i387.fsave.cwd = 0xffff037fu; + tsk->thread.i387.fsave.swd = 0xffff0000u; + tsk->thread.i387.fsave.twd = 0xffffffffu; + tsk->thread.i387.fsave.fos = 0xffff0000u; } tsk->used_math = 1; } @@ -98,7 +98,7 @@ struct _fpxreg *st = NULL; unsigned long twd = (unsigned long) fxsave->twd; unsigned long tag; - unsigned long ret = 0xffff0000; + unsigned long ret = 0xffff0000u; int i; #define FPREG_ADDR(f, n) ((char *)&(f)->st_space + (n) * 16); @@ -183,7 +183,7 @@ if ( cpu_has_fxsr ) { tsk->thread.i387.fxsave.cwd = cwd; } else { - tsk->thread.i387.fsave.cwd = ((long)cwd | 0xffff0000); + tsk->thread.i387.fsave.cwd = ((long)cwd | 0xffff0000u); } } @@ -192,7 +192,7 @@ if ( cpu_has_fxsr ) { tsk->thread.i387.fxsave.swd = swd; } else { - tsk->thread.i387.fsave.swd = ((long)swd | 0xffff0000); + tsk->thread.i387.fsave.swd = ((long)swd | 0xffff0000u); } } @@ -201,7 +201,7 @@ if ( cpu_has_fxsr ) { tsk->thread.i387.fxsave.twd = twd_i387_to_fxsr(twd); } else { - tsk->thread.i387.fsave.twd = ((long)twd | 0xffff0000); + tsk->thread.i387.fsave.twd = ((long)twd | 0xffff0000u); } } @@ -216,16 +216,16 @@ * FXSR floating point environment conversions. */ -static int convert_fxsr_to_user( struct _fpstate *buf, +static int convert_fxsr_to_user( struct _fpstate __user *buf, struct i387_fxsave_struct *fxsave ) { unsigned long env[7]; - struct _fpreg *to; + struct _fpreg __user *to; struct _fpxreg *from; int i; - env[0] = (unsigned long)fxsave->cwd | 0xffff0000; - env[1] = (unsigned long)fxsave->swd | 0xffff0000; + env[0] = (unsigned long)fxsave->cwd | 0xffff0000ul; + env[1] = (unsigned long)fxsave->swd | 0xffff0000ul; env[2] = twd_fxsr_to_i387(fxsave); env[3] = fxsave->fip; env[4] = fxsave->fcs | ((unsigned long)fxsave->fop << 16); @@ -250,11 +250,11 @@ } static int convert_fxsr_from_user( struct i387_fxsave_struct *fxsave, - struct _fpstate *buf ) + struct _fpstate __user *buf ) { unsigned long env[7]; struct _fpxreg *to; - struct _fpreg *from; + struct _fpreg __user *from; int i; if ( __copy_from_user( env, buf, 7 * sizeof(long) ) ) @@ -264,7 +264,7 @@ fxsave->swd = (unsigned short)(env[1] & 0xffff); fxsave->twd = twd_i387_to_fxsr((unsigned short)(env[2] & 0xffff)); fxsave->fip = env[3]; - fxsave->fop = (unsigned short)((env[4] & 0xffff0000) >> 16); + fxsave->fop = (unsigned short)((env[4] & 0xffff0000ul) >> 16); fxsave->fcs = (env[4] & 0xffff); fxsave->foo = env[5]; fxsave->fos = env[6]; @@ -275,9 +275,9 @@ unsigned long *t = (unsigned long *)to; unsigned long *f = (unsigned long *)from; - if (__get_user(*f, t) || - __get_user(*(f + 1), t + 1) || - __get_user(from->exponent, &to->exponent)) + if (__get_user(*t, f) || + __get_user(*(t + 1), f + 1) || + __get_user(to->exponent, &from->exponent)) return 1; } return 0; @@ -287,7 +287,7 @@ * Signal frame handlers. */ -static inline int save_i387_fsave( struct _fpstate *buf ) +static inline int save_i387_fsave( struct _fpstate __user *buf ) { struct task_struct *tsk = current; @@ -299,7 +299,7 @@ return 1; } -static int save_i387_fxsave( struct _fpstate *buf ) +static int save_i387_fxsave( struct _fpstate __user *buf ) { struct task_struct *tsk = current; int err = 0; @@ -320,7 +320,7 @@ return 1; } -int save_i387( struct _fpstate *buf ) +int save_i387( struct _fpstate __user *buf ) { if ( !current->used_math ) return 0; @@ -341,7 +341,7 @@ } } -static inline int restore_i387_fsave( struct _fpstate *buf ) +static inline int restore_i387_fsave( struct _fpstate __user *buf ) { struct task_struct *tsk = current; clear_fpu( tsk ); @@ -349,7 +349,7 @@ sizeof(struct i387_fsave_struct) ); } -static int restore_i387_fxsave( struct _fpstate *buf ) +static int restore_i387_fxsave( struct _fpstate __user *buf ) { int err; struct task_struct *tsk = current; @@ -361,7 +361,7 @@ return err ? 1 : convert_fxsr_from_user( &tsk->thread.i387.fxsave, buf ); } -int restore_i387( struct _fpstate *buf ) +int restore_i387( struct _fpstate __user *buf ) { int err; @@ -382,21 +382,21 @@ * ptrace request handlers. */ -static inline int get_fpregs_fsave( struct user_i387_struct *buf, +static inline int get_fpregs_fsave( struct user_i387_struct __user *buf, struct task_struct *tsk ) { return __copy_to_user( buf, &tsk->thread.i387.fsave, sizeof(struct user_i387_struct) ); } -static inline int get_fpregs_fxsave( struct user_i387_struct *buf, +static inline int get_fpregs_fxsave( struct user_i387_struct __user *buf, struct task_struct *tsk ) { - return convert_fxsr_to_user( (struct _fpstate *)buf, + return convert_fxsr_to_user( (struct _fpstate __user *)buf, &tsk->thread.i387.fxsave ); } -int get_fpregs( struct user_i387_struct *buf, struct task_struct *tsk ) +int get_fpregs( struct user_i387_struct __user *buf, struct task_struct *tsk ) { if ( HAVE_HWFP ) { if ( cpu_has_fxsr ) { @@ -406,25 +406,25 @@ } } else { return save_i387_soft( &tsk->thread.i387.soft, - (struct _fpstate *)buf ); + (struct _fpstate __user *)buf ); } } static inline int set_fpregs_fsave( struct task_struct *tsk, - struct user_i387_struct *buf ) + struct user_i387_struct __user *buf ) { return __copy_from_user( &tsk->thread.i387.fsave, buf, sizeof(struct user_i387_struct) ); } static inline int set_fpregs_fxsave( struct task_struct *tsk, - struct user_i387_struct *buf ) + struct user_i387_struct __user *buf ) { return convert_fxsr_from_user( &tsk->thread.i387.fxsave, - (struct _fpstate *)buf ); + (struct _fpstate __user *)buf ); } -int set_fpregs( struct task_struct *tsk, struct user_i387_struct *buf ) +int set_fpregs( struct task_struct *tsk, struct user_i387_struct __user *buf ) { if ( HAVE_HWFP ) { if ( cpu_has_fxsr ) { @@ -434,14 +434,14 @@ } } else { return restore_i387_soft( &tsk->thread.i387.soft, - (struct _fpstate *)buf ); + (struct _fpstate __user *)buf ); } } -int get_fpxregs( struct user_fxsr_struct *buf, struct task_struct *tsk ) +int get_fpxregs( struct user_fxsr_struct __user *buf, struct task_struct *tsk ) { if ( cpu_has_fxsr ) { - if (__copy_to_user( (void *)buf, &tsk->thread.i387.fxsave, + if (__copy_to_user( buf, &tsk->thread.i387.fxsave, sizeof(struct user_fxsr_struct) )) return -EFAULT; return 0; @@ -450,10 +450,10 @@ } } -int set_fpxregs( struct task_struct *tsk, struct user_fxsr_struct *buf ) +int set_fpxregs( struct task_struct *tsk, struct user_fxsr_struct __user *buf ) { if ( cpu_has_fxsr ) { - __copy_from_user( &tsk->thread.i387.fxsave, (void *)buf, + __copy_from_user( &tsk->thread.i387.fxsave, buf, sizeof(struct user_fxsr_struct) ); /* mxcsr bit 6 and 31-16 must be zero for security reasons */ tsk->thread.i387.fxsave.mxcsr &= 0xffbf; diff -Nru a/arch/i386/kernel/io_apic.c b/arch/i386/kernel/io_apic.c --- a/arch/i386/kernel/io_apic.c Sat Apr 12 14:44:07 2003 +++ b/arch/i386/kernel/io_apic.c Sat Apr 12 14:44:07 2003 @@ -38,6 +38,8 @@ #include +#include "io_ports.h" + #undef APIC_LOCKUP_DEBUG #define APIC_LOCKUP_DEBUG @@ -2135,7 +2137,7 @@ * Additionally, something is definitely wrong with irq9 * on PIIX4 boards. */ -#define PIC_IRQS (1<<2) +#define PIC_IRQS (1 << PIC_CASCADE_IR) void __init setup_IO_APIC(void) { diff -Nru a/arch/i386/kernel/signal.c b/arch/i386/kernel/signal.c --- a/arch/i386/kernel/signal.c Sat Apr 12 14:44:07 2003 +++ b/arch/i386/kernel/signal.c Sat Apr 12 14:44:07 2003 @@ -53,7 +53,7 @@ } asmlinkage int -sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize) +sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize) { struct pt_regs * regs = (struct pt_regs *) &unewset; sigset_t saveset, newset; @@ -82,8 +82,8 @@ } asmlinkage int -sys_sigaction(int sig, const struct old_sigaction *act, - struct old_sigaction *oact) +sys_sigaction(int sig, const struct old_sigaction __user *act, + struct old_sigaction __user *oact) { struct k_sigaction new_ka, old_ka; int ret; @@ -148,7 +148,7 @@ }; static int -restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc, int *peax) +restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *peax) { unsigned int err = 0; @@ -192,7 +192,7 @@ } { - struct _fpstate * buf; + struct _fpstate __user * buf; err |= __get_user(buf, &sc->fpstate); if (buf) { if (verify_area(VERIFY_READ, buf, sizeof(*buf))) @@ -211,7 +211,7 @@ asmlinkage int sys_sigreturn(unsigned long __unused) { struct pt_regs *regs = (struct pt_regs *) &__unused; - struct sigframe *frame = (struct sigframe *)(regs->esp - 8); + struct sigframe __user *frame = (struct sigframe __user *)(regs->esp - 8); sigset_t set; int eax; @@ -241,7 +241,7 @@ asmlinkage int sys_rt_sigreturn(unsigned long __unused) { struct pt_regs *regs = (struct pt_regs *) &__unused; - struct rt_sigframe *frame = (struct rt_sigframe *)(regs->esp - 4); + struct rt_sigframe __user *frame = (struct rt_sigframe __user *)(regs->esp - 4); sigset_t set; stack_t st; int eax; @@ -278,7 +278,7 @@ */ static int -setup_sigcontext(struct sigcontext *sc, struct _fpstate *fpstate, +setup_sigcontext(struct sigcontext __user *sc, struct _fpstate __user *fpstate, struct pt_regs *regs, unsigned long mask) { int tmp, err = 0; @@ -323,7 +323,7 @@ /* * Determine which stack to use.. */ -static inline void * +static inline void __user * get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) { unsigned long esp; @@ -344,14 +344,14 @@ esp = (unsigned long) ka->sa.sa_restorer; } - return (void *)((esp - frame_size) & -8ul); + return (void __user *)((esp - frame_size) & -8ul); } static void setup_frame(int sig, struct k_sigaction *ka, sigset_t *set, struct pt_regs * regs) { void *restorer; - struct sigframe *frame; + struct sigframe __user *frame; int err = 0; frame = get_sigframe(ka, regs, sizeof(*frame)); @@ -373,7 +373,7 @@ goto give_sigsegv; if (_NSIG_WORDS > 1) { - err |= __copy_to_user(frame->extramask, &set->sig[1], + err |= __copy_to_user(&frame->extramask, &set->sig[1], sizeof(frame->extramask)); } if (err) @@ -428,7 +428,7 @@ sigset_t *set, struct pt_regs * regs) { void *restorer; - struct rt_sigframe *frame; + struct rt_sigframe __user *frame; int err = 0; frame = get_sigframe(ka, regs, sizeof(*frame)); diff -Nru a/arch/i386/kernel/smpboot.c b/arch/i386/kernel/smpboot.c --- a/arch/i386/kernel/smpboot.c Sat Apr 12 14:44:08 2003 +++ b/arch/i386/kernel/smpboot.c Sat Apr 12 14:44:08 2003 @@ -49,10 +49,10 @@ #include #include #include -#include "smpboot_hooks.h" #include #include +#include /* Set if we find a B stepping CPU */ static int __initdata smp_b_stepping; @@ -823,13 +823,7 @@ store_NMI_vector(&nmi_high, &nmi_low); - CMOS_WRITE(0xa, 0xf); - local_flush_tlb(); - Dprintk("1.\n"); - *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; - Dprintk("2.\n"); - *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; - Dprintk("3.\n"); + smpboot_setup_warm_reset_vector(start_eip); /* * Starting actual IPI sequence... @@ -1045,7 +1039,7 @@ /* * Cleanup possible dangling ends... */ - smpboot_setup_warm_reset_vector(); + smpboot_restore_warm_reset_vector(); /* * Allow the user to impress friends. diff -Nru a/arch/i386/kernel/suspend.c b/arch/i386/kernel/suspend.c --- a/arch/i386/kernel/suspend.c Sat Apr 12 14:44:09 2003 +++ b/arch/i386/kernel/suspend.c Sat Apr 12 14:44:09 2003 @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include diff -Nru a/arch/i386/kernel/traps.c b/arch/i386/kernel/traps.c --- a/arch/i386/kernel/traps.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/traps.c Sat Apr 12 14:44:06 2003 @@ -257,6 +257,15 @@ show_registers(regs); bust_spinlocks(0); spin_unlock_irq(&die_lock); + if (in_interrupt()) + panic("Fatal exception in interrupt"); + + if (panic_on_oops) { + printk(KERN_EMERG "Fatal exception: panic in 5 seconds\n"); + set_current_state(TASK_UNINTERRUPTIBLE); + schedule_timeout(5 * HZ); + panic("Fatal exception"); + } do_exit(SIGSEGV); } diff -Nru a/arch/i386/kernel/vm86.c b/arch/i386/kernel/vm86.c --- a/arch/i386/kernel/vm86.c Sat Apr 12 14:44:06 2003 +++ b/arch/i386/kernel/vm86.c Sat Apr 12 14:44:06 2003 @@ -30,6 +30,7 @@ * */ +#include #include #include #include @@ -725,7 +726,7 @@ void release_x86_irqs(struct task_struct *task) { int i; - for (i=3; i<16; i++) + for (i = FIRST_VM86_IRQ ; i <= LAST_VM86_IRQ; i++) if (vm86_irqs[i].tsk == task) free_vm86_irq(i); } @@ -735,7 +736,7 @@ int bit; unsigned long flags; - if ( (irqnumber<3) || (irqnumber>15) ) return 0; + if (invalid_vm86_irq(irqnumber)) return 0; if (vm86_irqs[irqnumber].tsk != current) return 0; spin_lock_irqsave(&irqbits_lock, flags); bit = irqbits & (1 << irqnumber); @@ -760,7 +761,7 @@ int irq = irqnumber & 255; if (!capable(CAP_SYS_ADMIN)) return -EPERM; if (!((1 << sig) & ALLOWED_SIGS)) return -EPERM; - if ( (irq<3) || (irq>15) ) return -EPERM; + if (invalid_vm86_irq(irq)) return -EPERM; if (vm86_irqs[irq].tsk) return -EPERM; ret = request_irq(irq, &irq_handler, 0, VM86_IRQNAME, 0); if (ret) return ret; @@ -769,7 +770,7 @@ return irq; } case VM86_FREE_IRQ: { - if ( (irqnumber<3) || (irqnumber>15) ) return -EPERM; + if (invalid_vm86_irq(irqnumber)) return -EPERM; if (!vm86_irqs[irqnumber].tsk) return 0; if (vm86_irqs[irqnumber].tsk != current) return -EPERM; free_vm86_irq(irqnumber); diff -Nru a/arch/ia64/Kconfig b/arch/ia64/Kconfig --- a/arch/ia64/Kconfig Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/Kconfig Sat Apr 12 14:44:10 2003 @@ -401,6 +401,15 @@ endchoice +config IA64_PAL_IDLE + bool "Use PAL_HALT_LIGHT in idle loop" + ---help--- + Say Y here to enable use of PAL_HALT_LIGHT in the cpu_idle loop. + This allows the CPU to enter a low power state when idle. You + can enable CONFIG_IA64_PALINFO and check /proc/pal/cpu0/power_info + to see the power consumption and latency for this state. If you're + unsure your firmware supports it, answer N. + config SMP bool "SMP support" ---help--- diff -Nru a/arch/ia64/Makefile b/arch/ia64/Makefile --- a/arch/ia64/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/Makefile Sat Apr 12 14:44:06 2003 @@ -14,6 +14,7 @@ OBJCOPYFLAGS := --strip-all LDFLAGS_vmlinux := -static +LDFLAGS_MODULE += -T arch/ia64/module.lds AFLAGS_KERNEL := -mconstant-gp EXTRA := @@ -23,7 +24,7 @@ GCC_VERSION=$(shell $(CC) -v 2>&1 | fgrep 'gcc version' | cut -f3 -d' ' | cut -f1 -d'.') -GAS_STATUS=$(shell arch/ia64/scripts/check-gas $(CC)) +GAS_STATUS=$(shell arch/ia64/scripts/check-gas $(CC) $(OBJDUMP)) ifeq ($(GAS_STATUS),buggy) $(error Sorry, you need a newer version of the assember, one that is built from \ @@ -50,11 +51,8 @@ core-$(CONFIG_IA64_GENERIC) += arch/ia64/dig/ arch/ia64/hp/common/ arch/ia64/hp/zx1/ \ arch/ia64/hp/sim/ core-$(CONFIG_IA64_HP_ZX1) += arch/ia64/dig/ -core-$(CONFIG_IA64_SGI_SN) += arch/ia64/sn/kernel/ \ - arch/ia64/sn/io/ \ - arch/ia64/sn/io/sn2/ \ - arch/ia64/sn/io/sn2/pcibr/ \ - arch/ia64/sn/kernel/sn2/ +core-$(CONFIG_IA64_SGI_SN) += arch/ia64/sn/ + drivers-$(CONFIG_PCI) += arch/ia64/pci/ drivers-$(CONFIG_IA64_HP_SIM) += arch/ia64/hp/sim/ drivers-$(CONFIG_IA64_HP_ZX1) += arch/ia64/hp/common/ arch/ia64/hp/zx1/ diff -Nru a/arch/ia64/boot/Makefile b/arch/ia64/boot/Makefile --- a/arch/ia64/boot/Makefile Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/boot/Makefile Sat Apr 12 14:44:08 2003 @@ -9,7 +9,6 @@ # targets-$(CONFIG_IA64_HP_SIM) += bootloader -targets-$(CONFIG_IA64_GENERIC) += bootloader targets := vmlinux.bin vmlinux.gz $(targets-y) quiet_cmd_cptotop = LN $@ diff -Nru a/arch/ia64/hp/common/sba_iommu.c b/arch/ia64/hp/common/sba_iommu.c --- a/arch/ia64/hp/common/sba_iommu.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/hp/common/sba_iommu.c Sat Apr 12 14:44:06 2003 @@ -1497,7 +1497,7 @@ ioc = &sba_dev->ioc[0]; /* FIXME: Multi-IOC support! */ total_pages = (int) (ioc->res_size << 3); /* 8 bits per byte */ - sprintf(buf, "%s rev %d.%d\n", "Hewlett Packard zx1 SBA", + sprintf(buf, "%s rev %d.%d\n", "Hewlett-Packard zx1 SBA", ((sba_dev->hw_rev >> 4) & 0xF), (sba_dev->hw_rev & 0xF)); sprintf(buf, "%sIO PDIR size : %d bytes (%d entries)\n", buf, (int) ((ioc->res_size << 3) * sizeof(u64)), /* 8 bits/byte */ total_pages); diff -Nru a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S --- a/arch/ia64/ia32/ia32_entry.S Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/ia32/ia32_entry.S Sat Apr 12 14:44:08 2003 @@ -253,7 +253,7 @@ data8 sys_umount /* recycled never used phys( */ data8 sys32_ni_syscall /* old lock syscall holder */ data8 sys32_ioctl - data8 sys32_fcntl /* 55 */ + data8 compat_sys_fcntl /* 55 */ data8 sys32_ni_syscall /* old mpx syscall holder */ data8 sys_setpgid data8 sys32_ni_syscall /* old ulimit syscall holder */ @@ -419,7 +419,7 @@ data8 sys_mincore data8 sys_madvise data8 sys_getdents64 /* 220 */ - data8 sys32_fcntl64 + data8 compat_sys_fcntl64 data8 sys_ni_syscall /* reserved for TUX */ data8 sys_ni_syscall /* reserved for Security */ data8 sys_gettid diff -Nru a/arch/ia64/ia32/ia32_signal.c b/arch/ia64/ia32/ia32_signal.c --- a/arch/ia64/ia32/ia32_signal.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/ia32/ia32_signal.c Sat Apr 12 14:44:06 2003 @@ -114,6 +114,7 @@ int copy_siginfo_to_user32 (siginfo_t32 *to, siginfo_t *from) { + unsigned int addr; int err; if (!access_ok(VERIFY_WRITE, to, sizeof(siginfo_t32))) @@ -147,6 +148,12 @@ case __SI_POLL >> 16: err |= __put_user(from->si_band, &to->si_band); err |= __put_user(from->si_fd, &to->si_fd); + break; + case __SI_TIMER >> 16: + err |= __put_user(from->si_tid, &to->si_tid); + err |= __put_user(from->si_overrun, &to->si_overrun); + addr = (unsigned long) from->si_ptr; + err |= __put_user(addr, &to->si_ptr); break; /* case __SI_RT: This is not generated by the kernel as of now. */ } diff -Nru a/arch/ia64/ia32/sys_ia32.c b/arch/ia64/ia32/sys_ia32.c --- a/arch/ia64/ia32/sys_ia32.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/ia32/sys_ia32.c Sat Apr 12 14:44:08 2003 @@ -119,10 +119,8 @@ asmlinkage long sys32_execve (char *filename, unsigned int argv, unsigned int envp, - int dummy3, int dummy4, int dummy5, int dummy6, int dummy7, - int stack) + struct pt_regs *regs) { - struct pt_regs *regs = (struct pt_regs *)&stack; unsigned long old_map_base, old_task_size, tssd; char **av, **ae; int na, ne, len; @@ -1701,7 +1699,7 @@ return shmctl32(first, second, (void *)AA(ptr)); default: - return -EINVAL; + return -ENOSYS; } return -EINVAL; } @@ -2156,26 +2154,23 @@ ret = -ESRCH; read_lock(&tasklist_lock); child = find_task_by_pid(pid); + if (child) + get_task_struct(child); read_unlock(&tasklist_lock); if (!child) goto out; ret = -EPERM; if (pid == 1) /* no messing around with init! */ - goto out; + goto out_tsk; if (request == PTRACE_ATTACH) { ret = sys_ptrace(request, pid, addr, data, arg4, arg5, arg6, arg7, stack); - goto out; - } - ret = -ESRCH; - if (!(child->ptrace & PT_PTRACED)) - goto out; - if (child->state != TASK_STOPPED) { - if (request != PTRACE_KILL) - goto out; + goto out_tsk; } - if (child->parent != current) - goto out; + + ret = ptrace_check_attach(child, request == PTRACE_KILL); + if (ret < 0) + goto out_tsk; switch (request) { case PTRACE_PEEKTEXT: @@ -2185,12 +2180,12 @@ ret = put_user(value, (unsigned int *) A(data)); else ret = -EIO; - goto out; + goto out_tsk; case PTRACE_POKETEXT: case PTRACE_POKEDATA: /* write the word at location addr */ ret = ia32_poke(regs, child, addr, data); - goto out; + goto out_tsk; case PTRACE_PEEKUSR: /* read word at addr in USER area */ ret = -EIO; @@ -2265,43 +2260,13 @@ break; } + out_tsk: + put_task_struct(child); out: unlock_kernel(); return ret; } -extern asmlinkage long sys_fcntl (unsigned int fd, unsigned int cmd, unsigned long arg); - -asmlinkage long -sys32_fcntl (unsigned int fd, unsigned int cmd, unsigned int arg) -{ - mm_segment_t old_fs; - struct flock f; - long ret; - - switch (cmd) { - case F_GETLK: - case F_SETLK: - case F_SETLKW: - if (get_compat_flock(&f, (struct compat_flock *) A(arg))) - return -EFAULT; - old_fs = get_fs(); - set_fs(KERNEL_DS); - ret = sys_fcntl(fd, cmd, (unsigned long) &f); - set_fs(old_fs); - if (cmd == F_GETLK && put_compat_flock(&f, (struct compat_flock *) A(arg))) - return -EFAULT; - return ret; - - default: - /* - * `sys_fcntl' lies about arg, for the F_SETOWN - * sub-function arg can have a negative value. - */ - return sys_fcntl(fd, cmd, arg); - } -} - asmlinkage long sys_ni_syscall(void); asmlinkage long @@ -2593,66 +2558,6 @@ set_fs(KERNEL_DS); ret = sys_setgroups(gidsetsize, gl); set_fs(old_fs); - return ret; -} - -/* - * Unfortunately, the x86 compiler aligns variables of type "long long" to a 4 byte boundary - * only, which means that the x86 version of "struct flock64" doesn't match the ia64 version - * of struct flock. - */ - -static inline long -ia32_put_flock (struct flock *l, unsigned long addr) -{ - return (put_user(l->l_type, (short *) addr) - | put_user(l->l_whence, (short *) (addr + 2)) - | put_user(l->l_start, (long *) (addr + 4)) - | put_user(l->l_len, (long *) (addr + 12)) - | put_user(l->l_pid, (int *) (addr + 20))); -} - -static inline long -ia32_get_flock (struct flock *l, unsigned long addr) -{ - unsigned int start_lo, start_hi, len_lo, len_hi; - int err = (get_user(l->l_type, (short *) addr) - | get_user(l->l_whence, (short *) (addr + 2)) - | get_user(start_lo, (int *) (addr + 4)) - | get_user(start_hi, (int *) (addr + 8)) - | get_user(len_lo, (int *) (addr + 12)) - | get_user(len_hi, (int *) (addr + 16)) - | get_user(l->l_pid, (int *) (addr + 20))); - l->l_start = ((unsigned long) start_hi << 32) | start_lo; - l->l_len = ((unsigned long) len_hi << 32) | len_lo; - return err; -} - -asmlinkage long -sys32_fcntl64 (unsigned int fd, unsigned int cmd, unsigned int arg) -{ - mm_segment_t old_fs; - struct flock f; - long ret; - - switch (cmd) { - case F_GETLK64: - case F_SETLK64: - case F_SETLKW64: - if (ia32_get_flock(&f, arg)) - return -EFAULT; - old_fs = get_fs(); - set_fs(KERNEL_DS); - ret = sys_fcntl(fd, cmd, (unsigned long) &f); - set_fs(old_fs); - if (cmd == F_GETLK && ia32_put_flock(&f, arg)) - return -EFAULT; - break; - - default: - ret = sys32_fcntl(fd, cmd, arg); - break; - } return ret; } diff -Nru a/arch/ia64/kernel/Makefile b/arch/ia64/kernel/Makefile --- a/arch/ia64/kernel/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/Makefile Sat Apr 12 14:44:10 2003 @@ -4,16 +4,15 @@ extra-y := head.o init_task.o -obj-y := acpi.o entry.o gate.o efi.o efi_stub.o ia64_ksyms.o \ - irq.o irq_ia64.o irq_lsapic.o ivt.o \ - machvec.o pal.o process.o perfmon.o ptrace.o sal.o \ - semaphore.o setup.o \ - signal.o sys_ia64.o traps.o time.o unaligned.o unwind.o +obj-y := acpi.o entry.o efi.o efi_stub.o gate.o ia64_ksyms.o irq.o irq_ia64.o irq_lsapic.o \ + ivt.o machvec.o pal.o perfmon.o process.o ptrace.o sal.o semaphore.o setup.o signal.o \ + sys_ia64.o time.o traps.o unaligned.o unwind.o -obj-$(CONFIG_FSYS) += fsys.o -obj-$(CONFIG_IOSAPIC) += iosapic.o -obj-$(CONFIG_IA64_PALINFO) += palinfo.o -obj-$(CONFIG_EFI_VARS) += efivars.o -obj-$(CONFIG_SMP) += smp.o smpboot.o -obj-$(CONFIG_IA64_MCA) += mca.o mca_asm.o -obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o +obj-$(CONFIG_EFI_VARS) += efivars.o +obj-$(CONFIG_FSYS) += fsys.o +obj-$(CONFIG_IA64_BRL_EMU) += brl_emu.o +obj-$(CONFIG_IA64_MCA) += mca.o mca_asm.o +obj-$(CONFIG_IA64_PALINFO) += palinfo.o +obj-$(CONFIG_IOSAPIC) += iosapic.o +obj-$(CONFIG_MODULES) += module.o +obj-$(CONFIG_SMP) += smp.o smpboot.o diff -Nru a/arch/ia64/kernel/acpi-ext.c b/arch/ia64/kernel/acpi-ext.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/kernel/acpi-ext.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,71 @@ +/* + * arch/ia64/kernel/acpi-ext.c + * + * Copyright (C) 2003 Hewlett-Packard + * Copyright (C) Alex Williamson + * + * Vendor specific extensions to ACPI. These are used by both + * HP and NEC. + */ + +#include +#include +#include +#include + +#include + +/* + * Note: Strictly speaking, this is only needed for HP and NEC machines. + * However, NEC machines identify themselves as DIG-compliant, so there is + * no easy way to #ifdef this out. + */ +acpi_status +hp_acpi_csr_space (acpi_handle obj, u64 *csr_base, u64 *csr_length) +{ + int i, offset = 0; + acpi_status status; + struct acpi_buffer buf; + struct acpi_resource_vendor *res; + struct acpi_hp_vendor_long *hp_res; + efi_guid_t vendor_guid; + + *csr_base = 0; + *csr_length = 0; + + status = acpi_get_crs(obj, &buf); + if (ACPI_FAILURE(status)) { + printk(KERN_ERR PREFIX "Unable to get _CRS data on object\n"); + return status; + } + + res = (struct acpi_resource_vendor *)acpi_get_crs_type(&buf, &offset, ACPI_RSTYPE_VENDOR); + if (!res) { + printk(KERN_ERR PREFIX "Failed to find config space for device\n"); + acpi_dispose_crs(&buf); + return AE_NOT_FOUND; + } + + hp_res = (struct acpi_hp_vendor_long *)(res->reserved); + + if (res->length != HP_CCSR_LENGTH || hp_res->guid_id != HP_CCSR_TYPE) { + printk(KERN_ERR PREFIX "Unknown Vendor data\n"); + acpi_dispose_crs(&buf); + return AE_TYPE; /* Revisit error? */ + } + + memcpy(&vendor_guid, hp_res->guid, sizeof(efi_guid_t)); + if (efi_guidcmp(vendor_guid, HP_CCSR_GUID) != 0) { + printk(KERN_ERR PREFIX "Vendor GUID does not match\n"); + acpi_dispose_crs(&buf); + return AE_TYPE; /* Revisit error? */ + } + + for (i = 0 ; i < 8 ; i++) { + *csr_base |= ((u64)(hp_res->csr_base[i]) << (i * 8)); + *csr_length |= ((u64)(hp_res->csr_length[i]) << (i * 8)); + } + + acpi_dispose_crs(&buf); + return AE_OK; +} diff -Nru a/arch/ia64/kernel/acpi.c b/arch/ia64/kernel/acpi.c --- a/arch/ia64/kernel/acpi.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/acpi.c Sat Apr 12 14:44:08 2003 @@ -9,7 +9,7 @@ * Copyright (C) 2000,2001 J.I. Lee * Copyright (C) 2001 Paul Diefenbaugh * Copyright (C) 2001 Jenna Hall - * Copyright (C) 2001 Takayoshi Kochi + * Copyright (C) 2001 Takayoshi Kochi * Copyright (C) 2002 Erich Focht * * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -109,8 +109,6 @@ return "sn2"; # elif defined (CONFIG_IA64_DIG) return "dig"; -# elif defined (CONFIG_IA64_HP_ZX1) - return "hpzx1"; # else # error Unknown platform. Fix acpi.c. # endif @@ -176,6 +174,73 @@ kfree(buf->pointer); } +void +acpi_get_crs_addr (struct acpi_buffer *buf, int type, u64 *base, u64 *size, u64 *tra) +{ + int offset = 0; + struct acpi_resource_address16 *addr16; + struct acpi_resource_address32 *addr32; + struct acpi_resource_address64 *addr64; + + for (;;) { + struct acpi_resource *res = acpi_get_crs_next(buf, &offset); + if (!res) + return; + switch (res->id) { + case ACPI_RSTYPE_ADDRESS16: + addr16 = (struct acpi_resource_address16 *) &res->data; + + if (type == addr16->resource_type) { + *base = addr16->min_address_range; + *size = addr16->address_length; + *tra = addr16->address_translation_offset; + return; + } + break; + case ACPI_RSTYPE_ADDRESS32: + addr32 = (struct acpi_resource_address32 *) &res->data; + if (type == addr32->resource_type) { + *base = addr32->min_address_range; + *size = addr32->address_length; + *tra = addr32->address_translation_offset; + return; + } + break; + case ACPI_RSTYPE_ADDRESS64: + addr64 = (struct acpi_resource_address64 *) &res->data; + if (type == addr64->resource_type) { + *base = addr64->min_address_range; + *size = addr64->address_length; + *tra = addr64->address_translation_offset; + return; + } + break; + } + } +} + +int +acpi_get_addr_space(void *obj, u8 type, u64 *base, u64 *length, u64 *tra) +{ + acpi_status status; + struct acpi_buffer buf; + + *base = 0; + *length = 0; + *tra = 0; + + status = acpi_get_crs((acpi_handle)obj, &buf); + if (ACPI_FAILURE(status)) { + printk(KERN_ERR PREFIX "Unable to get _CRS data on object\n"); + return status; + } + + acpi_get_crs_addr(&buf, type, base, length, tra); + + acpi_dispose_crs(&buf); + + return AE_OK; +} #endif /* CONFIG_ACPI */ #ifdef CONFIG_ACPI_BOOT @@ -808,6 +873,7 @@ list_for_each(node, &acpi_prt.entries) { entry = (struct acpi_prt_entry *)node; + vector[i].segment = entry->id.segment; vector[i].bus = entry->id.bus; vector[i].pci_id = ((u32) entry->id.device << 16) | 0xffff; vector[i].pin = entry->pin; diff -Nru a/arch/ia64/kernel/entry.S b/arch/ia64/kernel/entry.S --- a/arch/ia64/kernel/entry.S Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/kernel/entry.S Sat Apr 12 14:44:07 2003 @@ -91,7 +91,7 @@ END(ia64_execve) /* - * sys_clone2(u64 flags, u64 ustack_base, u64 ustack_size, u64 child_tidptr, u64 parent_tidptr, + * sys_clone2(u64 flags, u64 ustack_base, u64 ustack_size, u64 parent_tidptr, u64 child_tidptr, * u64 tls) */ GLOBAL_ENTRY(sys_clone2) @@ -105,10 +105,10 @@ mov out1=in1 mov out3=in2 tbit.nz p6,p0=in0,CLONE_SETTLS_BIT - mov out4=in3 // child_tidptr: valid only w/CLONE_CHILD_SETTID or CLONE_CHILD_CLEARTID + mov out4=in3 // parent_tidptr: valid only w/CLONE_PARENT_SETTID ;; (p6) st8 [r2]=in5 // store TLS in r16 for copy_thread() - mov out5=in4 // parent_tidptr: valid only w/CLONE_PARENT_SETTID + mov out5=in4 // child_tidptr: valid only w/CLONE_CHILD_SETTID or CLONE_CHILD_CLEARTID adds out2=IA64_SWITCH_STACK_SIZE+16,sp // out2 = ®s dep out0=0,in0,CLONE_IDLETASK_BIT,1 // out0 = clone_flags & ~CLONE_IDLETASK br.call.sptk.many rp=do_fork @@ -126,12 +126,12 @@ END(sys_clone2) /* - * sys_clone(u64 flags, u64 ustack_base, u64 user_tid, u64 tls) + * sys_clone(u64 flags, u64 ustack_base, u64 parent_tidptr, u64 child_tidptr, u64 tls) * Deprecated. Use sys_clone2() instead. */ GLOBAL_ENTRY(sys_clone) .prologue ASM_UNW_PRLG_RP|ASM_UNW_PRLG_PFS, ASM_UNW_PRLG_GRSAVE(2) - alloc r16=ar.pfs,4,2,5,0 + alloc r16=ar.pfs,5,2,6,0 DO_SAVE_SWITCH_STACK adds r2=PT(R16)+IA64_SWITCH_STACK_SIZE+16,sp mov loc0=rp @@ -140,9 +140,10 @@ mov out1=in1 mov out3=16 // stacksize (compensates for 16-byte scratch area) tbit.nz p6,p0=in0,CLONE_SETTLS_BIT - mov out4=in2 // out4 = user_tid (optional) + mov out4=in2 // parent_tidptr: valid only w/CLONE_PARENT_SETTID ;; -(p6) st8 [r2]=in3 // store TLS in r13 (tp) +(p6) st8 [r2]=in4 // store TLS in r13 (tp) + mov out5=in3 // child_tidptr: valid only w/CLONE_CHILD_SETTID or CLONE_CHILD_CLEARTID adds out2=IA64_SWITCH_STACK_SIZE+16,sp // out2 = ®s dep out0=0,in0,CLONE_IDLETASK_BIT,1 // out0 = clone_flags & ~CLONE_IDLETASK br.call.sptk.many rp=do_fork diff -Nru a/arch/ia64/kernel/fsys.S b/arch/ia64/kernel/fsys.S --- a/arch/ia64/kernel/fsys.S Sat Apr 12 14:44:05 2003 +++ b/arch/ia64/kernel/fsys.S Sat Apr 12 14:44:05 2003 @@ -533,15 +533,15 @@ data8 fsys_fallback_syscall // epoll_wait // 1245 data8 fsys_fallback_syscall // restart_syscall data8 fsys_fallback_syscall // semtimedop - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall // 1250 - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall - data8 fsys_fallback_syscall // 1255 - data8 fsys_fallback_syscall + data8 fsys_fallback_syscall // timer_create + data8 fsys_fallback_syscall // timer_settime + data8 fsys_fallback_syscall // timer_gettime // 1250 + data8 fsys_fallback_syscall // timer_getoverrun + data8 fsys_fallback_syscall // timer_delete + data8 fsys_fallback_syscall // clock_settime + data8 fsys_fallback_syscall // clock_gettime + data8 fsys_fallback_syscall // clock_getres // 1255 + data8 fsys_fallback_syscall // clock_nanosleep data8 fsys_fallback_syscall data8 fsys_fallback_syscall data8 fsys_fallback_syscall diff -Nru a/arch/ia64/kernel/head.S b/arch/ia64/kernel/head.S --- a/arch/ia64/kernel/head.S Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/head.S Sat Apr 12 14:44:08 2003 @@ -733,73 +733,3 @@ SET_REG(b5); #endif /* CONFIG_IA64_BRL_EMU */ - -#ifdef CONFIG_SMP - - /* - * This routine handles spinlock contention. It uses a simple exponential backoff - * algorithm to reduce unnecessary bus traffic. The initial delay is selected from - * the low-order bits of the cycle counter (a cheap "randomizer"). I'm sure this - * could use additional tuning, especially on systems with a large number of CPUs. - * Also, I think the maximum delay should be made a function of the number of CPUs in - * the system. --davidm 00/08/05 - * - * WARNING: This is not a normal procedure. It gets called from C code without - * the compiler knowing about it. Thus, we must not use any scratch registers - * beyond those that were declared "clobbered" at the call-site (see spin_lock() - * macro). We may not even use the stacked registers, because that could overwrite - * output registers. Similarly, we can't use the scratch stack area as it may be - * in use, too. - * - * Inputs: - * ar.ccv = 0 (and available for use) - * r28 = available for use - * r29 = available for use - * r30 = non-zero (and available for use) - * r31 = address of lock we're trying to acquire - * p15 = available for use - */ - -# define delay r28 -# define timeout r29 -# define tmp r30 - -GLOBAL_ENTRY(ia64_spinlock_contention) - mov tmp=ar.itc - ;; - and delay=0x3f,tmp - ;; - -.retry: add timeout=tmp,delay - shl delay=delay,1 - ;; - dep delay=delay,r0,0,13 // limit delay to 8192 cycles - ;; - // delay a little... -.wait: sub tmp=tmp,timeout - or delay=0xf,delay // make sure delay is non-zero (otherwise we get stuck with 0) - ;; - cmp.lt p15,p0=tmp,r0 - mov tmp=ar.itc -(p15) br.cond.sptk .wait - ;; - ld4 tmp=[r31] - ;; - cmp.ne p15,p0=tmp,r0 - mov tmp=ar.itc -(p15) br.cond.sptk .retry // lock is still busy - ;; - // try acquiring lock (we know ar.ccv is still zero!): - mov tmp=1 - ;; - cmpxchg4.acq tmp=[r31],tmp,ar.ccv - ;; - cmp.eq p15,p0=tmp,r0 - - mov tmp=ar.itc -(p15) br.ret.sptk.many b7 // got lock -> return - br .retry // still no luck, retry - -END(ia64_spinlock_contention) - -#endif diff -Nru a/arch/ia64/kernel/ia64_ksyms.c b/arch/ia64/kernel/ia64_ksyms.c --- a/arch/ia64/kernel/ia64_ksyms.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/kernel/ia64_ksyms.c Sat Apr 12 14:44:07 2003 @@ -57,9 +57,7 @@ EXPORT_SYMBOL(clear_page); #include -# ifndef CONFIG_NUMA EXPORT_SYMBOL(cpu_info__per_cpu); -# endif EXPORT_SYMBOL(kernel_thread); #include @@ -147,3 +145,19 @@ EXPORT_SYMBOL(pfm_install_alternate_syswide_subsystem); EXPORT_SYMBOL(pfm_remove_alternate_syswide_subsystem); #endif + +#ifdef CONFIG_NUMA +#include +EXPORT_SYMBOL(cpu_to_node_map); +#endif + +#include +EXPORT_SYMBOL(unw_init_from_blocked_task); +EXPORT_SYMBOL(unw_init_running); +EXPORT_SYMBOL(unw_unwind); +EXPORT_SYMBOL(unw_unwind_to_user); +EXPORT_SYMBOL(unw_access_gr); +EXPORT_SYMBOL(unw_access_br); +EXPORT_SYMBOL(unw_access_fr); +EXPORT_SYMBOL(unw_access_ar); +EXPORT_SYMBOL(unw_access_pr); diff -Nru a/arch/ia64/kernel/mca.c b/arch/ia64/kernel/mca.c --- a/arch/ia64/kernel/mca.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/mca.c Sat Apr 12 14:44:08 2003 @@ -42,6 +42,10 @@ #include #include #include +#include +#include +#include +#include #include #include @@ -67,7 +71,7 @@ u64 ia64_mca_stack[1024] __attribute__((aligned(16))); u64 ia64_mca_stackframe[32]; u64 ia64_mca_bspstore[1024]; -u64 ia64_init_stack[KERNEL_STACK_SIZE] __attribute__((aligned(16))); +u64 ia64_init_stack[KERNEL_STACK_SIZE/8] __attribute__((aligned(16))); u64 ia64_mca_sal_data_area[1356]; u64 ia64_tlb_functional; u64 ia64_os_mca_recovery_successful; @@ -105,6 +109,19 @@ .name = "cpe_hndlr" }; +#define MAX_CPE_POLL_INTERVAL (15*60*HZ) /* 15 minutes */ +#define MIN_CPE_POLL_INTERVAL (2*60*HZ) /* 2 minutes */ +#define CMC_POLL_INTERVAL (1*60*HZ) /* 1 minute */ +#define CMC_HISTORY_LENGTH 5 + +static struct timer_list cpe_poll_timer; +static struct timer_list cmc_poll_timer; +/* + * Start with this in the wrong state so we won't play w/ timers + * before the system is ready. + */ +static int cmc_polling_enabled = 1; + /* * ia64_mca_log_sal_error_record * @@ -152,7 +169,8 @@ void ia64_mca_cpe_int_handler (int cpe_irq, void *arg, struct pt_regs *ptregs) { - IA64_MCA_DEBUG("ia64_mca_cpe_int_handler: received interrupt. vector = %#x\n", cpe_irq); + IA64_MCA_DEBUG("ia64_mca_cpe_int_handler: received interrupt. CPU:%d vector = %#x\n", + smp_processor_id(), cpe_irq); /* Get the CMC error record and log it */ ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CPE, 0); @@ -295,6 +313,60 @@ smp_processor_id(), ia64_get_cmcv()); } +/* + * ia64_mca_cmc_vector_disable + * + * Mask the corrected machine check vector register in the processor. + * This function is invoked on a per-processor basis. + * + * Inputs + * dummy(unused) + * + * Outputs + * None + */ +void +ia64_mca_cmc_vector_disable (void *dummy) +{ + cmcv_reg_t cmcv; + + cmcv = (cmcv_reg_t)ia64_get_cmcv(); + + cmcv.cmcv_mask = 1; /* Mask/disable interrupt */ + ia64_set_cmcv(cmcv.cmcv_regval); + + IA64_MCA_DEBUG("ia64_mca_cmc_vector_disable: CPU %d corrected " + "machine check vector %#x disabled.\n", + smp_processor_id(), cmcv.cmcv_vector); +} + +/* + * ia64_mca_cmc_vector_enable + * + * Unmask the corrected machine check vector register in the processor. + * This function is invoked on a per-processor basis. + * + * Inputs + * dummy(unused) + * + * Outputs + * None + */ +void +ia64_mca_cmc_vector_enable (void *dummy) +{ + cmcv_reg_t cmcv; + + cmcv = (cmcv_reg_t)ia64_get_cmcv(); + + cmcv.cmcv_mask = 0; /* Unmask/enable interrupt */ + ia64_set_cmcv(cmcv.cmcv_regval); + + IA64_MCA_DEBUG("ia64_mca_cmc_vector_enable: CPU %d corrected " + "machine check vector %#x enabled.\n", + smp_processor_id(), cmcv.cmcv_vector); +} + #if defined(MCA_TEST) @@ -396,7 +468,7 @@ SAL_MC_PARAM_MECHANISM_INT, IA64_MCA_RENDEZ_VECTOR, IA64_MCA_RENDEZ_TIMEOUT, - 0))) + SAL_MC_PARAM_RZ_ALWAYS))) { printk(KERN_ERR "ia64_mca_init: Failed to register rendezvous interrupt " "with SAL. rc = %ld\n", rc); @@ -494,9 +566,7 @@ setup_irq(irq, &mca_cpe_irqaction); } ia64_mca_register_cpev(cpev); - } else - printk(KERN_ERR - "ia64_mca_init: Failed to get routed CPEI vector from ACPI.\n"); + } } /* Initialize the areas set aside by the OS to buffer the @@ -610,14 +680,11 @@ ia64_mca_rendez_int_handler(int rendez_irq, void *arg, struct pt_regs *ptregs) { unsigned long flags; - int cpu = 0; + int cpu = smp_processor_id(); /* Mask all interrupts */ local_irq_save(flags); -#ifdef CONFIG_SMP - cpu = cpu_logical_id(hard_smp_processor_id()); -#endif ia64_mc_info.imi_rendez_checkin[cpu] = IA64_MCA_RENDEZ_CHECKIN_DONE; /* Register with the SAL monarch that the slave has * reached SAL @@ -751,11 +818,68 @@ void ia64_mca_cmc_int_handler(int cmc_irq, void *arg, struct pt_regs *ptregs) { + static unsigned long cmc_history[CMC_HISTORY_LENGTH]; + static int index; + static spinlock_t cmc_history_lock = SPIN_LOCK_UNLOCKED; + IA64_MCA_DEBUG("ia64_mca_cmc_int_handler: received interrupt vector = %#x on CPU %d\n", cmc_irq, smp_processor_id()); /* Get the CMC error record and log it */ ia64_mca_log_sal_error_record(SAL_INFO_TYPE_CMC, 0); + + spin_lock(&cmc_history_lock); + if (!cmc_polling_enabled) { + int i, count = 1; /* we know 1 happened now */ + unsigned long now = jiffies; + + for (i = 0; i < CMC_HISTORY_LENGTH; i++) { + if (now - cmc_history[i] <= HZ) + count++; + } + + IA64_MCA_DEBUG(KERN_INFO "CMC threshold %d/%d\n", count, CMC_HISTORY_LENGTH); + if (count >= CMC_HISTORY_LENGTH) { + /* + * CMC threshold exceeded, clear the history + * so we have a fresh start when we return + */ + for (index = 0 ; index < CMC_HISTORY_LENGTH; index++) + cmc_history[index] = 0; + index = 0; + + /* Switch to polling mode */ + cmc_polling_enabled = 1; + + /* + * Unlock & enable interrupts before + * smp_call_function or risk deadlock + */ + spin_unlock(&cmc_history_lock); + ia64_mca_cmc_vector_disable(NULL); + + local_irq_enable(); + smp_call_function(ia64_mca_cmc_vector_disable, NULL, 1, 1); + + /* + * Corrected errors will still be corrected, but + * make sure there's a log somewhere that indicates + * something is generating more than we can handle. + */ + printk(KERN_WARNING "ia64_mca_cmc_int_handler: WARNING: Switching to polling CMC handler, error records may be lost\n"); + + + mod_timer(&cmc_poll_timer, jiffies + CMC_POLL_INTERVAL); + + /* lock already released, get out now */ + return; + } else { + cmc_history[index++] = now; + if (index == CMC_HISTORY_LENGTH) + index = 0; + } + } + spin_unlock(&cmc_history_lock); } /* @@ -768,6 +892,7 @@ { spinlock_t isl_lock; int isl_index; + unsigned long isl_count; ia64_err_rec_t *isl_log[IA64_MAX_LOGS]; /* need space to store header + error log */ } ia64_state_log_t; @@ -784,11 +909,145 @@ #define IA64_LOG_NEXT_INDEX(it) ia64_state_log[it].isl_index #define IA64_LOG_CURR_INDEX(it) 1 - ia64_state_log[it].isl_index #define IA64_LOG_INDEX_INC(it) \ - ia64_state_log[it].isl_index = 1 - ia64_state_log[it].isl_index + {ia64_state_log[it].isl_index = 1 - ia64_state_log[it].isl_index; \ + ia64_state_log[it].isl_count++;} #define IA64_LOG_INDEX_DEC(it) \ ia64_state_log[it].isl_index = 1 - ia64_state_log[it].isl_index #define IA64_LOG_NEXT_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_NEXT_INDEX(it)])) #define IA64_LOG_CURR_BUFFER(it) (void *)((ia64_state_log[it].isl_log[IA64_LOG_CURR_INDEX(it)])) +#define IA64_LOG_COUNT(it) ia64_state_log[it].isl_count + +/* + * ia64_mca_cmc_int_caller + * + * Call CMC interrupt handler, only purpose is to have a + * smp_call_function callable entry. + * + * Inputs : dummy(unused) + * Outputs : None + * */ +static void +ia64_mca_cmc_int_caller(void *dummy) +{ + ia64_mca_cmc_int_handler(0, NULL, NULL); +} + +/* + * ia64_mca_cmc_poll + * + * Poll for Corrected Machine Checks (CMCs) + * + * Inputs : dummy(unused) + * Outputs : None + * + */ +static void +ia64_mca_cmc_poll (unsigned long dummy) +{ + int start_count; + + start_count = IA64_LOG_COUNT(SAL_INFO_TYPE_CMC); + + /* Call the interrupt handler */ + smp_call_function(ia64_mca_cmc_int_caller, NULL, 1, 1); + local_irq_disable(); + ia64_mca_cmc_int_caller(NULL); + local_irq_enable(); + + /* + * If no log recored, switch out of polling mode. + */ + if (start_count == IA64_LOG_COUNT(SAL_INFO_TYPE_CMC)) { + printk(KERN_WARNING "ia64_mca_cmc_poll: Returning to interrupt driven CMC handler\n"); + cmc_polling_enabled = 0; + smp_call_function(ia64_mca_cmc_vector_enable, NULL, 1, 1); + ia64_mca_cmc_vector_enable(NULL); + } else { + mod_timer(&cmc_poll_timer, jiffies + CMC_POLL_INTERVAL); + } +} + +/* + * ia64_mca_cpe_int_caller + * + * Call CPE interrupt handler, only purpose is to have a + * smp_call_function callable entry. + * + * Inputs : dummy(unused) + * Outputs : None + * */ +static void +ia64_mca_cpe_int_caller(void *dummy) +{ + ia64_mca_cpe_int_handler(0, NULL, NULL); +} + +/* + * ia64_mca_cpe_poll + * + * Poll for Corrected Platform Errors (CPEs), dynamically adjust + * polling interval based on occurance of an event. + * + * Inputs : dummy(unused) + * Outputs : None + * + */ +static void +ia64_mca_cpe_poll (unsigned long dummy) +{ + int start_count; + static int poll_time = MAX_CPE_POLL_INTERVAL; + + start_count = IA64_LOG_COUNT(SAL_INFO_TYPE_CPE); + + /* Call the interrupt handler */ + smp_call_function(ia64_mca_cpe_int_caller, NULL, 1, 1); + local_irq_disable(); + ia64_mca_cpe_int_caller(NULL); + local_irq_enable(); + + /* + * If a log was recorded, increase our polling frequency, + * otherwise, backoff. + */ + if (start_count != IA64_LOG_COUNT(SAL_INFO_TYPE_CPE)) { + poll_time = max(MIN_CPE_POLL_INTERVAL, poll_time/2); + } else { + poll_time = min(MAX_CPE_POLL_INTERVAL, poll_time * 2); + } + mod_timer(&cpe_poll_timer, jiffies + poll_time); +} + +/* + * ia64_mca_late_init + * + * Opportunity to setup things that require initialization later + * than ia64_mca_init. Setup a timer to poll for CPEs if the + * platform doesn't support an interrupt driven mechanism. + * + * Inputs : None + * Outputs : Status + */ +static int __init +ia64_mca_late_init(void) +{ + init_timer(&cmc_poll_timer); + cmc_poll_timer.function = ia64_mca_cmc_poll; + + /* Reset to the correct state */ + cmc_polling_enabled = 0; + + init_timer(&cpe_poll_timer); + cpe_poll_timer.function = ia64_mca_cpe_poll; + + /* If platform doesn't support CPEI, get the timer going. */ + if (acpi_request_vector(ACPI_INTERRUPT_CPEI) < 0) + ia64_mca_cpe_poll(0UL); + + return 0; +} + +device_initcall(ia64_mca_late_init); /* * C portion of the OS INIT handler @@ -949,7 +1208,6 @@ return total_len; } else { IA64_LOG_UNLOCK(sal_info_type); - prfunc("ia64_log_get: No SAL error record available for type %d\n", sal_info_type); return 0; } } diff -Nru a/arch/ia64/kernel/module.c b/arch/ia64/kernel/module.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/kernel/module.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,889 @@ +/* + * IA-64-specific support for kernel module loader. + * + * Copyright (C) 2003 Hewlett-Packard Co + * David Mosberger-Tang + * + * Loosely based on patch by Rusty Russell. + */ + +/* relocs tested so far: + + DIR64LSB + FPTR64LSB + GPREL22 + LDXMOV + LDXMOV + LTOFF22 + LTOFF22X + LTOFF22X + LTOFF_FPTR22 + PCREL21B + PCREL64LSB + SECREL32LSB + SEGREL64LSB + */ + +#include + +#include +#include +#include +#include +#include +#include + +#include + +#define ARCH_MODULE_DEBUG 0 + +#if ARCH_MODULE_DEBUG +# define DEBUGP printk +# define inline +#else +# define DEBUGP(fmt , a...) +#endif + +#ifdef CONFIG_ITANIUM +# define USE_BRL 0 +#else +# define USE_BRL 1 +#endif + +#define MAX_LTOFF ((uint64_t) (1 << 22)) /* max. allowable linkage-table offset */ + +/* Define some relocation helper macros/types: */ + +#define FORMAT_SHIFT 0 +#define FORMAT_BITS 3 +#define FORMAT_MASK ((1 << FORMAT_BITS) - 1) +#define VALUE_SHIFT 3 +#define VALUE_BITS 5 +#define VALUE_MASK ((1 << VALUE_BITS) - 1) + +enum reloc_target_format { + /* direct encoded formats: */ + RF_NONE = 0, + RF_INSN14 = 1, + RF_INSN22 = 2, + RF_INSN64 = 3, + RF_32MSB = 4, + RF_32LSB = 5, + RF_64MSB = 6, + RF_64LSB = 7, + + /* formats that cannot be directly decoded: */ + RF_INSN60, + RF_INSN21B, /* imm21 form 1 */ + RF_INSN21M, /* imm21 form 2 */ + RF_INSN21F /* imm21 form 3 */ +}; + +enum reloc_value_formula { + RV_DIRECT = 4, /* S + A */ + RV_GPREL = 5, /* @gprel(S + A) */ + RV_LTREL = 6, /* @ltoff(S + A) */ + RV_PLTREL = 7, /* @pltoff(S + A) */ + RV_FPTR = 8, /* @fptr(S + A) */ + RV_PCREL = 9, /* S + A - P */ + RV_LTREL_FPTR = 10, /* @ltoff(@fptr(S + A)) */ + RV_SEGREL = 11, /* @segrel(S + A) */ + RV_SECREL = 12, /* @secrel(S + A) */ + RV_BDREL = 13, /* BD + A */ + RV_LTV = 14, /* S + A (like RV_DIRECT, except frozen at static link-time) */ + RV_PCREL2 = 15, /* S + A - P */ + RV_SPECIAL = 16, /* various (see below) */ + RV_RSVD17 = 17, + RV_TPREL = 18, /* @tprel(S + A) */ + RV_LTREL_TPREL = 19, /* @ltoff(@tprel(S + A)) */ + RV_DTPMOD = 20, /* @dtpmod(S + A) */ + RV_LTREL_DTPMOD = 21, /* @ltoff(@dtpmod(S + A)) */ + RV_DTPREL = 22, /* @dtprel(S + A) */ + RV_LTREL_DTPREL = 23, /* @ltoff(@dtprel(S + A)) */ + RV_RSVD24 = 24, + RV_RSVD25 = 25, + RV_RSVD26 = 26, + RV_RSVD27 = 27 + /* 28-31 reserved for implementation-specific purposes. */ +}; + +#define N(reloc) [R_IA64_##reloc] = #reloc + +static const char *reloc_name[256] = { + N(NONE), N(IMM14), N(IMM22), N(IMM64), + N(DIR32MSB), N(DIR32LSB), N(DIR64MSB), N(DIR64LSB), + N(GPREL22), N(GPREL64I), N(GPREL32MSB), N(GPREL32LSB), + N(GPREL64MSB), N(GPREL64LSB), N(LTOFF22), N(LTOFF64I), + N(PLTOFF22), N(PLTOFF64I), N(PLTOFF64MSB), N(PLTOFF64LSB), + N(FPTR64I), N(FPTR32MSB), N(FPTR32LSB), N(FPTR64MSB), + N(FPTR64LSB), N(PCREL60B), N(PCREL21B), N(PCREL21M), + N(PCREL21F), N(PCREL32MSB), N(PCREL32LSB), N(PCREL64MSB), + N(PCREL64LSB), N(LTOFF_FPTR22), N(LTOFF_FPTR64I), N(LTOFF_FPTR32MSB), + N(LTOFF_FPTR32LSB), N(LTOFF_FPTR64MSB), N(LTOFF_FPTR64LSB), N(SEGREL32MSB), + N(SEGREL32LSB), N(SEGREL64MSB), N(SEGREL64LSB), N(SECREL32MSB), + N(SECREL32LSB), N(SECREL64MSB), N(SECREL64LSB), N(REL32MSB), + N(REL32LSB), N(REL64MSB), N(REL64LSB), N(LTV32MSB), + N(LTV32LSB), N(LTV64MSB), N(LTV64LSB), N(PCREL21BI), + N(PCREL22), N(PCREL64I), N(IPLTMSB), N(IPLTLSB), + N(COPY), N(LTOFF22X), N(LDXMOV), N(TPREL14), + N(TPREL22), N(TPREL64I), N(TPREL64MSB), N(TPREL64LSB), + N(LTOFF_TPREL22), N(DTPMOD64MSB), N(DTPMOD64LSB), N(LTOFF_DTPMOD22), + N(DTPREL14), N(DTPREL22), N(DTPREL64I), N(DTPREL32MSB), + N(DTPREL32LSB), N(DTPREL64MSB), N(DTPREL64LSB), N(LTOFF_DTPREL22) +}; + +#undef N + +struct got_entry { + uint64_t val; +}; + +struct fdesc { + uint64_t ip; + uint64_t gp; +}; + +/* Opaque struct for insns, to protect against derefs. */ +struct insn; + +static inline uint64_t +bundle (const struct insn *insn) +{ + return (uint64_t) insn & ~0xfUL; +} + +static inline int +slot (const struct insn *insn) +{ + return (uint64_t) insn & 0x3; +} + +/* Patch instruction with "val" where "mask" has 1 bits. */ +static void +apply (struct insn *insn, uint64_t mask, uint64_t val) +{ + uint64_t m0, m1, v0, v1, b0, b1, *b = (uint64_t *) bundle(insn); +# define insn_mask ((1UL << 41) - 1) + unsigned long shift; + + b0 = b[0]; b1 = b[1]; + shift = 5 + 41 * slot(insn); /* 5 bits of template, then 3 x 41-bit instructions */ + if (shift >= 64) { + m1 = mask << (shift - 64); + v1 = val << (shift - 64); + } else { + m0 = mask << shift; m1 = mask >> (64 - shift); + v0 = val << shift; v1 = val >> (64 - shift); + b[0] = (b0 & ~m0) | (v0 & m0); + } + b[1] = (b1 & ~m1) | (v1 & m1); +} + +static int +apply_imm64 (struct module *mod, struct insn *insn, uint64_t val) +{ + if (slot(insn) != 2) { + printk(KERN_ERR "%s: illegal slot number %d for IMM64\n", + mod->name, slot(insn)); + return 0; + } + apply(insn, 0x01fffefe000, ( ((val & 0x8000000000000000) >> 27) /* bit 63 -> 36 */ + | ((val & 0x0000000000200000) << 0) /* bit 21 -> 21 */ + | ((val & 0x00000000001f0000) << 6) /* bit 16 -> 22 */ + | ((val & 0x000000000000ff80) << 20) /* bit 7 -> 27 */ + | ((val & 0x000000000000007f) << 13) /* bit 0 -> 13 */)); + apply((void *) insn - 1, 0x1ffffffffff, val >> 22); + return 1; +} + +static int +apply_imm60 (struct module *mod, struct insn *insn, uint64_t val) +{ + if (slot(insn) != 2) { + printk(KERN_ERR "%s: illegal slot number %d for IMM60\n", + mod->name, slot(insn)); + return 0; + } + if (val + ((uint64_t) 1 << 59) >= (1UL << 60)) { + printk(KERN_ERR "%s: value %ld out of IMM60 range\n", mod->name, (int64_t) val); + return 0; + } + apply(insn, 0x011ffffe000, ( ((val & 0x1000000000000000) >> 24) /* bit 60 -> 36 */ + | ((val & 0x00000000000fffff) << 13) /* bit 0 -> 13 */)); + apply((void *) insn - 1, 0x1fffffffffc, val >> 18); + return 1; +} + +static int +apply_imm22 (struct module *mod, struct insn *insn, uint64_t val) +{ + if (val + (1 << 21) >= (1 << 22)) { + printk(KERN_ERR "%s: value %li out of IMM22 range\n", mod->name, (int64_t)val); + return 0; + } + apply(insn, 0x01fffcfe000, ( ((val & 0x200000) << 15) /* bit 21 -> 36 */ + | ((val & 0x1f0000) << 6) /* bit 16 -> 22 */ + | ((val & 0x00ff80) << 20) /* bit 7 -> 27 */ + | ((val & 0x00007f) << 13) /* bit 0 -> 13 */)); + return 1; +} + +static int +apply_imm21b (struct module *mod, struct insn *insn, uint64_t val) +{ + if (val + (1 << 20) >= (1 << 21)) { + printk(KERN_ERR "%s: value %li out of IMM21b range\n", mod->name, (int64_t)val); + return 0; + } + apply(insn, 0x11ffffe000, ( ((val & 0x100000) << 16) /* bit 20 -> 36 */ + | ((val & 0x0fffff) << 13) /* bit 0 -> 13 */)); + return 1; +} + +#if USE_BRL + +struct plt_entry { + /* Three instruction bundles in PLT. */ + unsigned char bundle[2][16]; +}; + +static const struct plt_entry ia64_plt_template = { + { + { + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* movl gp=TARGET_GP */ + 0x00, 0x00, 0x00, 0x60 + }, + { + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* brl.many gp=TARGET_GP */ + 0x08, 0x00, 0x00, 0xc0 + } + } +}; + +static int +patch_plt (struct module *mod, struct plt_entry *plt, long target_ip, unsigned long target_gp) +{ + if (apply_imm64(mod, (struct insn *) (plt->bundle[0] + 2), target_gp) + && apply_imm60(mod, (struct insn *) (plt->bundle[1] + 2), + (target_ip - (int64_t) plt->bundle[1]) / 16)) + return 1; + return 0; +} + +unsigned long +plt_target (struct plt_entry *plt) +{ + uint64_t b0, b1, *b = (uint64_t *) plt->bundle[1]; + long off; + + b0 = b[0]; b1 = b[1]; + off = ( ((b1 & 0x00fffff000000000) >> 36) /* imm20b -> bit 0 */ + | ((b0 >> 48) << 20) | ((b1 & 0x7fffff) << 36) /* imm39 -> bit 20 */ + | ((b1 & 0x0800000000000000) << 1)); /* i -> bit 60 */ + return (long) plt->bundle[1] + 16*off; +} + +#else /* !USE_BRL */ + +struct plt_entry { + /* Three instruction bundles in PLT. */ + unsigned char bundle[3][16]; +}; + +static const struct plt_entry ia64_plt_template = { + { + { + 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* movl r16=TARGET_IP */ + 0x02, 0x00, 0x00, 0x60 + }, + { + 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MLX] nop.m 0 */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* movl gp=TARGET_GP */ + 0x00, 0x00, 0x00, 0x60 + }, + { + 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, /* [MIB] nop.m 0 */ + 0x60, 0x80, 0x04, 0x80, 0x03, 0x00, /* mov b6=r16 */ + 0x60, 0x00, 0x80, 0x00 /* br.few b6 */ + } + } +}; + +static int +patch_plt (struct module *mod, struct plt_entry *plt, long target_ip, unsigned long target_gp) +{ + if (apply_imm64(mod, (struct insn *) (plt->bundle[0] + 2), target_ip) + && apply_imm64(mod, (struct insn *) (plt->bundle[1] + 2), target_gp)) + return 1; + return 0; +} + +unsigned long +plt_target (struct plt_entry *plt) +{ + uint64_t b0, b1, *b = (uint64_t *) plt->bundle[0]; + + b0 = b[0]; b1 = b[1]; + return ( ((b1 & 0x000007f000000000) >> 36) /* imm7b -> bit 0 */ + | ((b1 & 0x07fc000000000000) >> 43) /* imm9d -> bit 7 */ + | ((b1 & 0x0003e00000000000) >> 29) /* imm5c -> bit 16 */ + | ((b1 & 0x0000100000000000) >> 23) /* ic -> bit 21 */ + | ((b0 >> 46) << 22) | ((b1 & 0x7fffff) << 40) /* imm41 -> bit 22 */ + | ((b1 & 0x0800000000000000) << 4)); /* i -> bit 63 */ +} + +#endif /* !USE_BRL */ + +void * +module_alloc (unsigned long size) +{ + if (!size) + return NULL; + return vmalloc(size); +} + +void +module_free (struct module *mod, void *module_region) +{ + vfree(module_region); +} + +/* Have we already seen one of these relocations? */ +/* FIXME: we could look in other sections, too --RR */ +static int +duplicate_reloc (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i; + + for (i = 0; i < num; i++) { + if (rela[i].r_info == rela[num].r_info && rela[i].r_addend == rela[num].r_addend) + return 1; + } + return 0; +} + +/* Count how many GOT entries we may need */ +static unsigned int +count_gots (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i, ret = 0; + + /* Sure, this is order(n^2), but it's usually short, and not + time critical */ + for (i = 0; i < num; i++) { + switch (ELF64_R_TYPE(rela[i].r_info)) { + case R_IA64_LTOFF22: + case R_IA64_LTOFF22X: + case R_IA64_LTOFF64I: + case R_IA64_LTOFF_FPTR22: + case R_IA64_LTOFF_FPTR64I: + case R_IA64_LTOFF_FPTR32MSB: + case R_IA64_LTOFF_FPTR32LSB: + case R_IA64_LTOFF_FPTR64MSB: + case R_IA64_LTOFF_FPTR64LSB: + if (!duplicate_reloc(rela, i)) + ret++; + break; + } + } + return ret; +} + +/* Count how many PLT entries we may need */ +static unsigned int +count_plts (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i, ret = 0; + + /* Sure, this is order(n^2), but it's usually short, and not + time critical */ + for (i = 0; i < num; i++) { + switch (ELF64_R_TYPE(rela[i].r_info)) { + case R_IA64_PCREL21B: + case R_IA64_PLTOFF22: + case R_IA64_PLTOFF64I: + case R_IA64_PLTOFF64MSB: + case R_IA64_PLTOFF64LSB: + case R_IA64_IPLTMSB: + case R_IA64_IPLTLSB: + if (!duplicate_reloc(rela, i)) + ret++; + break; + } + } + return ret; +} + +/* We need to create an function-descriptors for any internal function + which is referenced. */ +static unsigned int +count_fdescs (const Elf64_Rela *rela, unsigned int num) +{ + unsigned int i, ret = 0; + + /* Sure, this is order(n^2), but it's usually short, and not time critical. */ + for (i = 0; i < num; i++) { + switch (ELF64_R_TYPE(rela[i].r_info)) { + case R_IA64_FPTR64I: + case R_IA64_FPTR32LSB: + case R_IA64_FPTR32MSB: + case R_IA64_FPTR64LSB: + case R_IA64_FPTR64MSB: + case R_IA64_LTOFF_FPTR22: + case R_IA64_LTOFF_FPTR32LSB: + case R_IA64_LTOFF_FPTR32MSB: + case R_IA64_LTOFF_FPTR64I: + case R_IA64_LTOFF_FPTR64LSB: + case R_IA64_LTOFF_FPTR64MSB: + case R_IA64_IPLTMSB: + case R_IA64_IPLTLSB: + /* + * Jumps to static functions sometimes go straight to their + * offset. Of course, that may not be possible if the jump is + * from init -> core or vice. versa, so we need to generate an + * FDESC (and PLT etc) for that. + */ + case R_IA64_PCREL21B: + if (!duplicate_reloc(rela, i)) + ret++; + break; + } + } + return ret; +} + +int +module_frob_arch_sections (Elf_Ehdr *ehdr, Elf_Shdr *sechdrs, char *secstrings, + struct module *mod) +{ + unsigned long core_plts = 0, init_plts = 0, gots = 0, fdescs = 0; + Elf64_Shdr *s, *sechdrs_end = sechdrs + ehdr->e_shnum; + + /* + * To store the PLTs and function-descriptors, we expand the .text section for + * core module-code and the .init.text section for initialization code. + */ + for (s = sechdrs; s < sechdrs_end; ++s) + if (strcmp(".core.plt", secstrings + s->sh_name) == 0) + mod->arch.core_plt = s; + else if (strcmp(".init.plt", secstrings + s->sh_name) == 0) + mod->arch.init_plt = s; + else if (strcmp(".got", secstrings + s->sh_name) == 0) + mod->arch.got = s; + else if (strcmp(".opd", secstrings + s->sh_name) == 0) + mod->arch.opd = s; + else if (strcmp(".IA_64.unwind", secstrings + s->sh_name) == 0) + mod->arch.unwind = s; + + if (!mod->arch.core_plt || !mod->arch.init_plt || !mod->arch.got || !mod->arch.opd) { + printk(KERN_ERR "%s: sections missing\n", mod->name); + return -ENOEXEC; + } + + /* GOT and PLTs can occur in any relocated section... */ + for (s = sechdrs + 1; s < sechdrs_end; ++s) { + const Elf64_Rela *rels = (void *)ehdr + s->sh_offset; + unsigned long numrels = s->sh_size/sizeof(Elf64_Rela); + + if (s->sh_type != SHT_RELA) + continue; + + gots += count_gots(rels, numrels); + fdescs += count_fdescs(rels, numrels); + if (strstr(secstrings + s->sh_name, ".init")) + init_plts += count_plts(rels, numrels); + else + core_plts += count_plts(rels, numrels); + } + + mod->arch.core_plt->sh_type = SHT_NOBITS; + mod->arch.core_plt->sh_flags = SHF_EXECINSTR | SHF_ALLOC; + mod->arch.core_plt->sh_addralign = 16; + mod->arch.core_plt->sh_size = core_plts * sizeof(struct plt_entry); + mod->arch.init_plt->sh_type = SHT_NOBITS; + mod->arch.init_plt->sh_flags = SHF_EXECINSTR | SHF_ALLOC; + mod->arch.init_plt->sh_addralign = 16; + mod->arch.init_plt->sh_size = init_plts * sizeof(struct plt_entry); + mod->arch.got->sh_type = SHT_NOBITS; + mod->arch.got->sh_flags = ARCH_SHF_SMALL | SHF_ALLOC; + mod->arch.got->sh_addralign = 8; + mod->arch.got->sh_size = gots * sizeof(struct got_entry); + mod->arch.opd->sh_type = SHT_NOBITS; + mod->arch.opd->sh_flags = SHF_ALLOC; + mod->arch.opd->sh_addralign = 8; + mod->arch.opd->sh_size = fdescs * sizeof(struct fdesc); + DEBUGP("%s: core.plt=%lx, init.plt=%lx, got=%lx, fdesc=%lx\n", + __FUNCTION__, mod->arch.core_plt->sh_size, mod->arch.init_plt->sh_size, + mod->arch.got->sh_size, mod->arch.opd->sh_size); + return 0; +} + +static inline int +in_init (const struct module *mod, uint64_t addr) +{ + return addr - (uint64_t) mod->module_init < mod->init_size; +} + +static inline int +in_core (const struct module *mod, uint64_t addr) +{ + return addr - (uint64_t) mod->module_core < mod->core_size; +} + +static inline int +is_internal (const struct module *mod, uint64_t value) +{ + return in_init(mod, value) || in_core(mod, value); +} + +/* + * Get gp-relative offset for the linkage-table entry of VALUE. + */ +static uint64_t +get_ltoff (struct module *mod, uint64_t value, int *okp) +{ + struct got_entry *got, *e; + + if (!*okp) + return 0; + + got = (void *) mod->arch.got->sh_addr; + for (e = got; e < got + mod->arch.next_got_entry; ++e) + if (e->val == value) + goto found; + + /* Not enough GOT entries? */ + if (e >= (struct got_entry *) (mod->arch.got->sh_addr + mod->arch.got->sh_size)) + BUG(); + + e->val = value; + ++mod->arch.next_got_entry; + found: + return (uint64_t) e - mod->arch.gp; +} + +static inline int +gp_addressable (struct module *mod, uint64_t value) +{ + return value - mod->arch.gp + MAX_LTOFF/2 < MAX_LTOFF; +} + +/* Get PC-relative PLT entry for this value. Returns 0 on failure. */ +static uint64_t +get_plt (struct module *mod, const struct insn *insn, uint64_t value, int *okp) +{ + struct plt_entry *plt, *plt_end; + uint64_t target_ip, target_gp; + + if (!*okp) + return 0; + + if (in_init(mod, (uint64_t) insn)) { + plt = (void *) mod->arch.init_plt->sh_addr; + plt_end = (void *) plt + mod->arch.init_plt->sh_size; + } else { + plt = (void *) mod->arch.core_plt->sh_addr; + plt_end = (void *) plt + mod->arch.core_plt->sh_size; + } + + /* "value" is a pointer to a function-descriptor; fetch the target ip/gp from it: */ + target_ip = ((uint64_t *) value)[0]; + target_gp = ((uint64_t *) value)[1]; + + /* Look for existing PLT entry. */ + while (plt->bundle[0][0]) { + if (plt_target(plt) == target_ip) + goto found; + if (++plt >= plt_end) + BUG(); + } + *plt = ia64_plt_template; + if (!patch_plt(mod, plt, target_ip, target_gp)) { + *okp = 0; + return 0; + } +#if ARCH_MODULE_DEBUG + if (plt_target(plt) != target_ip) { + printk("%s: mistargeted PLT: wanted %lx, got %lx\n", + __FUNCTION__, target_ip, plt_target(plt)); + *okp = 0; + return 0; + } +#endif + found: + return (uint64_t) plt; +} + +/* Get function descriptor for VALUE. */ +static uint64_t +get_fdesc (struct module *mod, uint64_t value, int *okp) +{ + struct fdesc *fdesc = (void *) mod->arch.opd->sh_addr; + + if (!*okp) + return 0; + + if (!value) { + printk(KERN_ERR "%s: fdesc for zero requested!\n", mod->name); + return 0; + } + + if (!is_internal(mod, value)) + /* + * If it's not a module-local entry-point, "value" already points to a + * function-descriptor. + */ + return value; + + /* Look for existing function descriptor. */ + while (fdesc->ip) { + if (fdesc->ip == value) + return (uint64_t)fdesc; + if ((uint64_t) ++fdesc >= mod->arch.opd->sh_addr + mod->arch.opd->sh_size) + BUG(); + } + + /* Create new one */ + fdesc->ip = value; + fdesc->gp = mod->arch.gp; + return (uint64_t) fdesc; +} + +static inline int +do_reloc (struct module *mod, uint8_t r_type, Elf64_Sym *sym, uint64_t addend, + Elf64_Shdr *sec, void *location) +{ + enum reloc_target_format format = (r_type >> FORMAT_SHIFT) & FORMAT_MASK; + enum reloc_value_formula formula = (r_type >> VALUE_SHIFT) & VALUE_MASK; + uint64_t val; + int ok = 1; + + val = sym->st_value + addend; + + switch (formula) { + case RV_SEGREL: /* segment base is arbitrarily chosen to be 0 for kernel modules */ + case RV_DIRECT: + break; + + case RV_GPREL: val -= mod->arch.gp; break; + case RV_LTREL: val = get_ltoff(mod, val, &ok); break; + case RV_PLTREL: val = get_plt(mod, location, val, &ok); break; + case RV_FPTR: val = get_fdesc(mod, val, &ok); break; + case RV_SECREL: val -= sec->sh_addr; break; + case RV_LTREL_FPTR: val = get_ltoff(mod, get_fdesc(mod, val, &ok), &ok); break; + + case RV_PCREL: + switch (r_type) { + case R_IA64_PCREL21B: + /* special because it can cross into other module/kernel-core. */ + if (!is_internal(mod, val)) + val = get_plt(mod, location, val, &ok); + /* FALL THROUGH */ + default: + val -= bundle(location); + break; + + case R_IA64_PCREL32MSB: + case R_IA64_PCREL32LSB: + case R_IA64_PCREL64MSB: + case R_IA64_PCREL64LSB: + val -= (uint64_t) location; + break; + + } + switch (r_type) { + case R_IA64_PCREL60B: format = RF_INSN60; break; + case R_IA64_PCREL21B: format = RF_INSN21B; break; + case R_IA64_PCREL21M: format = RF_INSN21M; break; + case R_IA64_PCREL21F: format = RF_INSN21F; break; + default: break; + } + break; + + case RV_BDREL: + val -= (uint64_t) (in_init(mod, val) ? mod->module_init : mod->module_core); + break; + + case RV_LTV: + /* can link-time value relocs happen here? */ + BUG(); + break; + + case RV_PCREL2: + if (r_type == R_IA64_PCREL21BI) { + if (!is_internal(mod, val)) { + printk(KERN_ERR "%s: %s reloc against non-local symbol (%lx)\n", + __FUNCTION__, reloc_name[r_type], val); + return -ENOEXEC; + } + format = RF_INSN21B; + } + val -= bundle(location); + break; + + case RV_SPECIAL: + switch (r_type) { + case R_IA64_IPLTMSB: + case R_IA64_IPLTLSB: + val = get_fdesc(mod, get_plt(mod, location, val, &ok), &ok); + format = RF_64LSB; + if (r_type == R_IA64_IPLTMSB) + format = RF_64MSB; + break; + + case R_IA64_SUB: + val = addend - sym->st_value; + format = RF_INSN64; + break; + + case R_IA64_LTOFF22X: + if (gp_addressable(mod, val)) + val -= mod->arch.gp; + else + val = get_ltoff(mod, val, &ok); + format = RF_INSN22; + break; + + case R_IA64_LDXMOV: + if (gp_addressable(mod, val)) { + /* turn "ld8" into "mov": */ + DEBUGP("%s: patching ld8 at %p to mov\n", __FUNCTION__, location); + apply(location, 0x1fff80fe000, 0x10000000000); + } + return 0; + + default: + if (reloc_name[r_type]) + printk(KERN_ERR "%s: special reloc %s not supported", + mod->name, reloc_name[r_type]); + else + printk(KERN_ERR "%s: unknown special reloc %x\n", + mod->name, r_type); + return -ENOEXEC; + } + break; + + case RV_TPREL: + case RV_LTREL_TPREL: + case RV_DTPMOD: + case RV_LTREL_DTPMOD: + case RV_DTPREL: + case RV_LTREL_DTPREL: + printk(KERN_ERR "%s: %s reloc not supported\n", + mod->name, reloc_name[r_type] ? reloc_name[r_type] : "?"); + return -ENOEXEC; + + default: + printk(KERN_ERR "%s: unknown reloc %x\n", mod->name, r_type); + return -ENOEXEC; + } + + if (!ok) + return -ENOEXEC; + + DEBUGP("%s: [%p]<-%016lx = %s(%lx)\n", __FUNCTION__, location, val, + reloc_name[r_type] ? reloc_name[r_type] : "?", sym->st_value + addend); + + switch (format) { + case RF_INSN21B: ok = apply_imm21b(mod, location, (int64_t) val / 16); break; + case RF_INSN22: ok = apply_imm22(mod, location, val); break; + case RF_INSN64: ok = apply_imm64(mod, location, val); break; + case RF_INSN60: ok = apply_imm60(mod, location, (int64_t) val / 16); break; + case RF_32LSB: put_unaligned(val, (uint32_t *) location); break; + case RF_64LSB: put_unaligned(val, (uint64_t *) location); break; + case RF_32MSB: /* ia64 Linux is little-endian... */ + case RF_64MSB: /* ia64 Linux is little-endian... */ + case RF_INSN14: /* must be within-module, i.e., resolved by "ld -r" */ + case RF_INSN21M: /* must be within-module, i.e., resolved by "ld -r" */ + case RF_INSN21F: /* must be within-module, i.e., resolved by "ld -r" */ + printk(KERN_ERR "%s: format %u needed by %s reloc is not supported\n", + mod->name, format, reloc_name[r_type] ? reloc_name[r_type] : "?"); + return -ENOEXEC; + + default: + printk(KERN_ERR "%s: relocation %s resulted in unknown format %u\n", + mod->name, reloc_name[r_type] ? reloc_name[r_type] : "?", format); + return -ENOEXEC; + } + return ok ? 0 : -ENOEXEC; +} + +int +apply_relocate_add (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symindex, + unsigned int relsec, struct module *mod) +{ + unsigned int i, n = sechdrs[relsec].sh_size / sizeof(Elf64_Rela); + Elf64_Rela *rela = (void *) sechdrs[relsec].sh_addr; + Elf64_Shdr *target_sec; + int ret; + + DEBUGP("%s: applying section %u (%u relocs) to %u\n", __FUNCTION__, + relsec, n, sechdrs[relsec].sh_info); + + target_sec = sechdrs + sechdrs[relsec].sh_info; + + if (target_sec->sh_entsize == ~0UL) + /* + * If target section wasn't allocated, we don't need to relocate it. + * Happens, e.g., for debug sections. + */ + return 0; + + if (!mod->arch.gp) { + /* + * XXX Should have an arch-hook for running this after final section + * addresses have been selected... + */ + /* See if gp can cover the entire core module: */ + uint64_t gp = (uint64_t) mod->module_core + MAX_LTOFF / 2; + if (mod->core_size >= MAX_LTOFF) + /* + * This takes advantage of fact that SHF_ARCH_SMALL gets allocated + * at the end of the module. + */ + gp = (uint64_t) mod->module_core + mod->core_size - MAX_LTOFF / 2; + mod->arch.gp = gp; + DEBUGP("%s: placing gp at 0x%lx\n", __FUNCTION__, gp); + } + + for (i = 0; i < n; i++) { + ret = do_reloc(mod, ELF64_R_TYPE(rela[i].r_info), + ((Elf64_Sym *) sechdrs[symindex].sh_addr + + ELF64_R_SYM(rela[i].r_info)), + rela[i].r_addend, target_sec, + (void *) target_sec->sh_addr + rela[i].r_offset); + if (ret < 0) + return ret; + } + return 0; +} + +int +apply_relocate (Elf64_Shdr *sechdrs, const char *strtab, unsigned int symindex, + unsigned int relsec, struct module *mod) +{ + printk(KERN_ERR "module %s: REL relocs in section %u unsupported\n", mod->name, relsec); + return -ENOEXEC; +} + +int +module_finalize (const Elf_Ehdr *hdr, const Elf_Shdr *sechdrs, struct module *mod) +{ + DEBUGP("%s: init: entry=%p\n", __FUNCTION__, mod->init); + if (mod->arch.unwind) + mod->arch.unw_table = unw_add_unwind_table(mod->name, 0, mod->arch.gp, + (void *) mod->arch.unwind->sh_addr, + ((void *) mod->arch.unwind->sh_addr + + mod->arch.unwind->sh_size)); + return 0; +} + +void +module_arch_cleanup (struct module *mod) +{ + if (mod->arch.unwind) + unw_remove_unwind_table(mod->arch.unw_table); +} diff -Nru a/arch/ia64/kernel/palinfo.c b/arch/ia64/kernel/palinfo.c --- a/arch/ia64/kernel/palinfo.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/kernel/palinfo.c Sat Apr 12 14:44:06 2003 @@ -27,9 +27,7 @@ #include #include #include -#ifdef CONFIG_SMP #include -#endif MODULE_AUTHOR("Stephane Eranian "); MODULE_DESCRIPTION("/proc interface to IA-64 PAL"); @@ -37,12 +35,6 @@ #define PALINFO_VERSION "0.5" -#ifdef CONFIG_SMP -#define cpu_is_online(i) (cpu_online_map & (1UL << i)) -#else -#define cpu_is_online(i) 1 -#endif - typedef int (*palinfo_func_t)(char*); typedef struct { @@ -933,7 +925,7 @@ */ for (i=0; i < NR_CPUS; i++) { - if (!cpu_is_online(i)) continue; + if (!cpu_online(i)) continue; sprintf(cpustr,CPUSTR, i); diff -Nru a/arch/ia64/kernel/perfmon.c b/arch/ia64/kernel/perfmon.c --- a/arch/ia64/kernel/perfmon.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/perfmon.c Sat Apr 12 14:44:10 2003 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -134,12 +135,6 @@ #define PFM_CPUINFO_CLEAR(v) __get_cpu_var(pfm_syst_info) &= ~(v) #define PFM_CPUINFO_SET(v) __get_cpu_var(pfm_syst_info) |= (v) -#ifdef CONFIG_SMP -#define cpu_is_online(i) (cpu_online_map & (1UL << i)) -#else -#define cpu_is_online(i) (i==0) -#endif - /* * debugging */ @@ -1082,7 +1077,7 @@ * and it must be a valid CPU */ cpu = ffz(~pfx->ctx_cpu_mask); - if (cpu_is_online(cpu) == 0) { + if (cpu_online(cpu) == 0) { DBprintk(("CPU%d is not online\n", cpu)); return -EINVAL; } @@ -3153,7 +3148,7 @@ p += sprintf(p, "ovfl_mask : 0x%lx\n", pmu_conf.ovfl_val); for(i=0; i < NR_CPUS; i++) { - if (cpu_is_online(i) == 0) continue; + if (cpu_online(i) == 0) continue; p += sprintf(p, "CPU%-2d overflow intrs : %lu\n", i, pfm_stats[i].pfm_ovfl_intr_count); p += sprintf(p, "CPU%-2d spurious intrs : %lu\n", i, pfm_stats[i].pfm_spurious_ovfl_intr_count); p += sprintf(p, "CPU%-2d recorded samples : %lu\n", i, pfm_stats[i].pfm_recorded_samples_count); diff -Nru a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c --- a/arch/ia64/kernel/process.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/process.c Sat Apr 12 14:44:08 2003 @@ -66,10 +66,7 @@ void show_trace_task (struct task_struct *task) { - struct unw_frame_info info; - - unw_init_from_blocked_task(&info, task); - do_show_stack(&info, 0); + show_stack(task); } void @@ -169,7 +166,10 @@ void default_idle (void) { - /* may want to do PAL_LIGHT_HALT here... */ +#ifdef CONFIG_IA64_PAL_IDLE + if (!need_resched()) + safe_halt(); +#endif } void __attribute__((noreturn)) @@ -177,6 +177,10 @@ { /* endless idle loop with no priority at all */ while (1) { + void (*idle)(void) = pm_idle; + if (!idle) + idle = default_idle; + #ifdef CONFIG_SMP if (!need_resched()) min_xtp(); @@ -186,10 +190,7 @@ #ifdef CONFIG_IA64_SGI_SN snidle(); #endif - if (pm_idle) - (*pm_idle)(); - else - default_idle(); + (*idle)(); } #ifdef CONFIG_IA64_SGI_SN @@ -581,6 +582,15 @@ tid = clone(flags | CLONE_VM | CLONE_UNTRACED, 0); if (parent != current) { +#ifdef CONFIG_IA32_SUPPORT + if (IS_IA32_PROCESS(ia64_task_regs(current))) { + /* A kernel thread is always a 64-bit process. */ + current->thread.map_base = DEFAULT_MAP_BASE; + current->thread.task_size = DEFAULT_TASK_SIZE; + ia64_set_kr(IA64_KR_IO_BASE, current->thread.old_iob); + ia64_set_kr(IA64_KR_TSSD, current->thread.old_k1); + } +#endif result = (*fn)(arg); _exit(result); } @@ -751,7 +761,7 @@ } void -__put_task_struct (struct task_struct *tsk) +free_task_struct (struct task_struct *tsk) { free_pages((unsigned long) tsk, KERNEL_STACK_SIZE_ORDER); } diff -Nru a/arch/ia64/kernel/signal.c b/arch/ia64/kernel/signal.c --- a/arch/ia64/kernel/signal.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/kernel/signal.c Sat Apr 12 14:44:08 2003 @@ -191,6 +191,10 @@ err |= __put_user(from->si_pfm_ovfl[2], &to->si_pfm_ovfl[2]); err |= __put_user(from->si_pfm_ovfl[3], &to->si_pfm_ovfl[3]); } + case __SI_TIMER >> 16: + err |= __put_user(from->si_tid, &to->si_tid); + err |= __put_user(from->si_overrun, &to->si_overrun); + err |= __put_user(from->si_value, &to->si_value); break; default: err |= __put_user(from->si_uid, &to->si_uid); diff -Nru a/arch/ia64/kernel/smpboot.c b/arch/ia64/kernel/smpboot.c --- a/arch/ia64/kernel/smpboot.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/kernel/smpboot.c Sat Apr 12 14:44:06 2003 @@ -279,12 +279,15 @@ smp_setup_percpu_timer(); - /* - * Synchronize the ITC with the BP - */ - Dprintk("Going to syncup ITC with BP.\n"); + if (!(sal_platform_features & IA64_SAL_PLATFORM_FEATURE_ITC_DRIFT)) { + /* + * Synchronize the ITC with the BP + */ + Dprintk("Going to syncup ITC with BP.\n"); + + ia64_sync_itc(0); + } - ia64_sync_itc(0); /* * Get our bogomips. */ diff -Nru a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c --- a/arch/ia64/kernel/time.c Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/kernel/time.c Sat Apr 12 14:44:06 2003 @@ -60,7 +60,7 @@ } /* - * Return the number of micro-seconds that elapsed since the last update to jiffy. The + * Return the number of nano-seconds that elapsed since the last update to jiffy. The * xtime_lock must be at least read-locked when calling this routine. */ static inline unsigned long @@ -86,6 +86,9 @@ void do_settimeofday (struct timeval *tv) { + time_t sec = tv->tv_sec; + long nsec = tv->tv_usec * 1000; + write_seqlock_irq(&xtime_lock); { /* @@ -94,22 +97,22 @@ * Discover what correction gettimeofday would have done, and then undo * it! */ - tv->tv_usec -= gettimeoffset(); - tv->tv_usec -= (jiffies - wall_jiffies) * (1000000 / HZ); + nsec -= gettimeoffset(); - while (tv->tv_usec < 0) { - tv->tv_usec += 1000000; - tv->tv_sec--; + while (nsec < 0) { + nsec += 1000000000; + sec--; } - xtime.tv_sec = tv->tv_sec; - xtime.tv_nsec = 1000 * tv->tv_usec; + xtime.tv_sec = sec; + xtime.tv_nsec = nsec; time_adjust = 0; /* stop active adjtime() */ time_status |= STA_UNSYNC; time_maxerror = NTP_PHASE_LIMIT; time_esterror = NTP_PHASE_LIMIT; } write_sequnlock_irq(&xtime_lock); + clock_was_set(); } void diff -Nru a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c --- a/arch/ia64/kernel/traps.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/traps.c Sat Apr 12 14:44:10 2003 @@ -338,8 +338,8 @@ fpu_swa_count = 0; if ((++fpu_swa_count < 5) && !(current->thread.flags & IA64_THREAD_FPEMU_NOPRINT)) { last_time = jiffies; - printk(KERN_WARNING "%s(%d): floating-point assist fault at ip %016lx\n", - current->comm, current->pid, regs->cr_iip + ia64_psr(regs)->ri); + printk(KERN_WARNING "%s(%d): floating-point assist fault at ip %016lx, isr %016lx\n", + current->comm, current->pid, regs->cr_iip + ia64_psr(regs)->ri, isr); } exception = fp_emulate(fp_fault, bundle, ®s->cr_ipsr, ®s->ar_fpsr, &isr, ®s->pr, diff -Nru a/arch/ia64/kernel/unwind.c b/arch/ia64/kernel/unwind.c --- a/arch/ia64/kernel/unwind.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/kernel/unwind.c Sat Apr 12 14:44:10 2003 @@ -253,6 +253,11 @@ struct pt_regs *pt; if ((unsigned) regnum - 1 >= 127) { + if (regnum == 0 && !write) { + *val = 0; /* read r0 always returns 0 */ + *nat = 0; + return 0; + } UNW_DPRINT(0, "unwind.%s: trying to access non-existent r%u\n", __FUNCTION__, regnum); return -1; @@ -318,13 +323,8 @@ } } else { /* access a scratch register */ - if (!info->pt) { - UNW_DPRINT(0, "unwind.%s: no pt-regs; cannot access r%d\n", - __FUNCTION__, regnum); - return -1; - } pt = get_scratch_regs(info); - addr = (unsigned long *) (pt + pt_regs_off(regnum)); + addr = (unsigned long *) ((unsigned long)pt + pt_regs_off(regnum)); if (info->pri_unat_loc) nat_addr = info->pri_unat_loc; else diff -Nru a/arch/ia64/lib/io.c b/arch/ia64/lib/io.c --- a/arch/ia64/lib/io.c Sat Apr 12 14:44:05 2003 +++ b/arch/ia64/lib/io.c Sat Apr 12 14:44:05 2003 @@ -87,12 +87,31 @@ __ia64_outl(val, port); } -void -ia64_mmiob (void) +unsigned char +ia64_readb (void *addr) { - __ia64_mmiob(); + return __ia64_readb (addr); } +unsigned short +ia64_readw (void *addr) +{ + return __ia64_readw (addr); +} + +unsigned int +ia64_readl (void *addr) +{ + return __ia64_readl (addr); +} + +unsigned long +ia64_readq (void *addr) +{ + return __ia64_readq (addr) +} + + /* define aliases: */ asm (".global __ia64_inb, __ia64_inw, __ia64_inl"); @@ -105,7 +124,11 @@ asm ("__ia64_outw = ia64_outw"); asm ("__ia64_outl = ia64_outl"); -asm (".global __ia64_mmiob"); -asm ("__ia64_mmiob = ia64_mmiob"); +asm (".global __ia64_readb, __ia64_readw, __ia64_readl, __ia64_readq"); +asm ("__ia64_readb = ia64_readb"); +asm ("__ia64_readw = ia64_readw"); +asm ("__ia64_readl = ia64_readl"); +asm ("__ia64_readq = ia64_readq"); + #endif /* CONFIG_IA64_GENERIC */ diff -Nru a/arch/ia64/lib/swiotlb.c b/arch/ia64/lib/swiotlb.c --- a/arch/ia64/lib/swiotlb.c Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/lib/swiotlb.c Sat Apr 12 14:44:09 2003 @@ -473,12 +473,6 @@ sync_single(hwdev, (void *) sg->dma_address, sg->dma_length, direction); } -unsigned long -swiotlb_dma_address (struct scatterlist *sg) -{ - return sg->dma_address; -} - /* * Return whether the given PCI device DMA address mask can be supported properly. For * example, if your device can only drive the low 24-bits during PCI bus mastering, then @@ -497,7 +491,6 @@ EXPORT_SYMBOL(swiotlb_unmap_sg); EXPORT_SYMBOL(swiotlb_sync_single); EXPORT_SYMBOL(swiotlb_sync_sg); -EXPORT_SYMBOL(swiotlb_dma_address); EXPORT_SYMBOL(swiotlb_alloc_consistent); EXPORT_SYMBOL(swiotlb_free_consistent); EXPORT_SYMBOL(swiotlb_pci_dma_supported); diff -Nru a/arch/ia64/mm/fault.c b/arch/ia64/mm/fault.c --- a/arch/ia64/mm/fault.c Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/mm/fault.c Sat Apr 12 14:44:10 2003 @@ -194,6 +194,7 @@ up_read(&mm->mmap_sem); if (current->pid == 1) { yield(); + down_read(&mm->mmap_sem); goto survive; } printk(KERN_CRIT "VM: killing process %s\n", current->comm); diff -Nru a/arch/ia64/module.lds b/arch/ia64/module.lds --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/module.lds Sat Apr 12 14:44:10 2003 @@ -0,0 +1,13 @@ +SECTIONS { + /* Group unwind sections into a single section: */ + .IA_64.unwind_info : { *(.IA_64.unwind_info*) } + .IA_64.unwind : { *(.IA_64.unwind*) } + /* + * Create place-holder sections to hold the PLTs, GOT, and + * official procedure-descriptors (.opd). + */ + .core.plt : { BYTE(0) } + .init.plt : { BYTE(0) } + .got : { BYTE(0) } + .opd : { BYTE(0) } +} diff -Nru a/arch/ia64/pci/pci.c b/arch/ia64/pci/pci.c --- a/arch/ia64/pci/pci.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/pci/pci.c Sat Apr 12 14:44:07 2003 @@ -49,11 +49,13 @@ /* * Low-level SAL-based PCI configuration access functions. Note that SAL * calls are already serialized (via sal_lock), so we don't need another - * synchronization mechanism here. Not using segment number (yet). + * synchronization mechanism here. */ -#define PCI_SAL_ADDRESS(bus, dev, fn, reg) \ - ((u64)(bus << 16) | (u64)(dev << 11) | (u64)(fn << 8) | (u64)(reg)) +#define PCI_SAL_ADDRESS(seg, bus, dev, fn, reg) \ + ((u64)(seg << 24) | (u64)(bus << 16) | \ + (u64)(dev << 11) | (u64)(fn << 8) | (u64)(reg)) + static int __pci_sal_read (int seg, int bus, int dev, int fn, int reg, int len, u32 *value) @@ -61,10 +63,10 @@ int result = 0; u64 data = 0; - if (!value || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) + if (!value || (seg > 255) || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) return -EINVAL; - result = ia64_sal_pci_config_read(PCI_SAL_ADDRESS(bus, dev, fn, reg), len, &data); + result = ia64_sal_pci_config_read(PCI_SAL_ADDRESS(seg, bus, dev, fn, reg), len, &data); *value = (u32) data; @@ -74,24 +76,24 @@ static int __pci_sal_write (int seg, int bus, int dev, int fn, int reg, int len, u32 value) { - if ((bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) + if ((seg > 255) || (bus > 255) || (dev > 31) || (fn > 7) || (reg > 255)) return -EINVAL; - return ia64_sal_pci_config_write(PCI_SAL_ADDRESS(bus, dev, fn, reg), len, value); + return ia64_sal_pci_config_write(PCI_SAL_ADDRESS(seg, bus, dev, fn, reg), len, value); } static int pci_sal_read (struct pci_bus *bus, unsigned int devfn, int where, int size, u32 *value) { - return __pci_sal_read(0, bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), + return __pci_sal_read(PCI_SEGMENT(bus), bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), where, size, value); } static int pci_sal_write (struct pci_bus *bus, unsigned int devfn, int where, int size, u32 value) { - return __pci_sal_write(0, bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), + return __pci_sal_write(PCI_SEGMENT(bus), bus->number, PCI_SLOT(devfn), PCI_FUNC(devfn), where, size, value); } @@ -114,24 +116,91 @@ subsys_initcall(pci_acpi_init); +static void __init +pcibios_fixup_resource(struct resource *res, u64 offset) +{ + res->start += offset; + res->end += offset; +} + +void __init +pcibios_fixup_device_resources(struct pci_dev *dev, struct pci_bus *bus) +{ + int i; + + for (i = 0; i < PCI_NUM_RESOURCES; i++) { + if (!dev->resource[i].start) + continue; + if (dev->resource[i].flags & IORESOURCE_MEM) + pcibios_fixup_resource(&dev->resource[i], + PCI_CONTROLLER(dev)->mem_offset); + } +} + /* Called by ACPI when it finds a new root bus. */ + +static struct pci_controller * +alloc_pci_controller(int seg) +{ + struct pci_controller *controller; + + controller = kmalloc(sizeof(*controller), GFP_KERNEL); + if (!controller) + return NULL; + + memset(controller, 0, sizeof(*controller)); + controller->segment = seg; + return controller; +} + struct pci_bus * -pcibios_scan_root (int bus) +scan_root_bus(int bus, struct pci_ops *ops, void *sysdata) { - struct list_head *list; - struct pci_bus *pci_bus; + struct pci_bus *b; - list_for_each(list, &pci_root_buses) { - pci_bus = pci_bus_b(list); - if (pci_bus->number == bus) { - /* Already scanned */ - printk("PCI: Bus (%02x) already probed\n", bus); - return pci_bus; - } - } + /* + * We know this is a new root bus we haven't seen before, so + * scan it, even if we've seen the same bus number in a different + * segment. + */ + b = kmalloc(sizeof(*b), GFP_KERNEL); + if (!b) + return NULL; + + memset(b, 0, sizeof(*b)); + INIT_LIST_HEAD(&b->children); + INIT_LIST_HEAD(&b->devices); + + list_add_tail(&b->node, &pci_root_buses); + + b->number = b->secondary = bus; + b->resource[0] = &ioport_resource; + b->resource[1] = &iomem_resource; + + b->sysdata = sysdata; + b->ops = ops; + b->subordinate = pci_do_scan_bus(b); + + return b; +} + +struct pci_bus * +pcibios_scan_root(void *handle, int seg, int bus) +{ + struct pci_controller *controller; + u64 base, size, offset; + + printk("PCI: Probing PCI hardware on bus (%02x:%02x)\n", seg, bus); + controller = alloc_pci_controller(seg); + if (!controller) + return NULL; + + controller->acpi_handle = handle; - printk("PCI: Probing PCI hardware on bus (%02x)\n", bus); - return pci_scan_bus(bus, pci_root_ops, NULL); + acpi_get_addr_space(handle, ACPI_MEMORY_RANGE, &base, &size, &offset); + controller->mem_offset = offset; + + return scan_root_bus(bus, pci_root_ops, controller); } /* @@ -140,6 +209,11 @@ void __devinit pcibios_fixup_bus (struct pci_bus *b) { + struct list_head *ln; + + for (ln = b->devices.next; ln != &b->devices; ln = ln->next) + pcibios_fixup_device_resources(pci_dev_b(ln), b); + return; } diff -Nru a/arch/ia64/scripts/check-gas b/arch/ia64/scripts/check-gas --- a/arch/ia64/scripts/check-gas Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/scripts/check-gas Sat Apr 12 14:44:09 2003 @@ -1,8 +1,9 @@ #!/bin/sh dir=$(dirname $0) CC=$1 +OBJDUMP=$2 $CC -c $dir/check-gas-asm.S -res=$(objdump -r --section .data check-gas-asm.o | fgrep 00004 | tr -s ' ' |cut -f3 -d' ') +res=$($OBJDUMP -r --section .data check-gas-asm.o | fgrep 00004 | tr -s ' ' |cut -f3 -d' ') if [ $res != ".text" ]; then echo buggy else diff -Nru a/arch/ia64/sn/Makefile b/arch/ia64/sn/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/sn/Makefile Sat Apr 12 14:44:10 2003 @@ -0,0 +1,14 @@ +# arch/ia64/sn/Makefile +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (C) 2003 Silicon Graphics, Inc. All Rights Reserved. +# +# Makefile for the sn ia64 subplatform +# + +EXTRA_CFLAGS := -DLITTLE_ENDIAN + +obj-y += kernel/ # io/ diff -Nru a/arch/ia64/sn/fakeprom/Makefile b/arch/ia64/sn/fakeprom/Makefile --- a/arch/ia64/sn/fakeprom/Makefile Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/sn/fakeprom/Makefile Sat Apr 12 14:44:09 2003 @@ -1,20 +1,29 @@ +# arch/ia64/sn/fakeprom/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive # for more details. # -# Copyright (c) 2000-2001 Silicon Graphics, Inc. All rights reserved. +# Copyright (c) 2000-2003 Silicon Graphics, Inc. All rights reserved. # +# Medusa fake PROM support +# + +EXTRA_TARGETS := fpromasm.o main.o fw-emu.o fpmem.o klgraph_init.o \ + fprom vmlinux.sym + +OBJS := $(obj)/fpromasm.o $(obj)/main.o $(obj)/fw-emu.o $(obj)/fpmem.o \ + $(obj)/klgraph_init.o + +LDFLAGS_fprom = -static -T -obj-y=fpromasm.o main.o fw-emu.o fpmem.o klgraph_init.o +.PHONY: fprom -fprom: $(OBJ) - $(LD) -static -Tfprom.lds -o fprom $(OBJ) $(LIB) +fprom: $(obj)/fprom -.S.o: - $(CC) -D__ASSEMBLY__ $(AFLAGS) $(AFLAGS_KERNEL) -c -o $*.o $< -.c.o: - $(CC) $(CFLAGS) $(CFLAGS_KERNEL) -c -o $*.o $< +$(obj)/fprom: $(src)/fprom.lds $(OBJS) arch/ia64/lib/lib.a FORCE + $(call if_changed,ld) -clean: - rm -f *.o fprom +$(obj)/vmlinux.sym: $(src)/make_textsym System.map + $(src)/make_textsym vmlinux > vmlinux.sym + $(call cmd,cptotop) diff -Nru a/arch/ia64/sn/fakeprom/README b/arch/ia64/sn/fakeprom/README --- a/arch/ia64/sn/fakeprom/README Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/sn/fakeprom/README Sat Apr 12 14:44:10 2003 @@ -1,3 +1,35 @@ +/* + * Copyright (c) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/NoticeExplan + */ + This directory contains the files required to build the fake PROM image that is currently being used to boot IA64 kernels running under the SGI Medusa kernel. diff -Nru a/arch/ia64/sn/fakeprom/fpmem.c b/arch/ia64/sn/fakeprom/fpmem.c --- a/arch/ia64/sn/fakeprom/fpmem.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/sn/fakeprom/fpmem.c Sat Apr 12 14:44:07 2003 @@ -4,7 +4,7 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2000-2002 Silicon Graphics, Inc. All rights reserved. + * Copyright (C) 2000-2003 Silicon Graphics, Inc. All rights reserved. */ @@ -168,13 +168,13 @@ #endif void -build_mem_desc(efi_memory_desc_t *md, int type, long paddr, long numbytes) +build_mem_desc(efi_memory_desc_t *md, int type, long paddr, long numbytes, long attr) { md->type = type; md->phys_addr = paddr; md->virt_addr = 0; md->num_pages = numbytes >> 12; - md->attribute = EFI_MEMORY_WB; + md->attribute = attr; } int @@ -236,28 +236,40 @@ */ if (bank == 0) { if (cnode == 0) { + hole = 2*1024*1024; + build_mem_desc(md, EFI_PAL_CODE, paddr, hole, EFI_MEMORY_WB|EFI_MEMORY_WB); + numbytes -= hole; + paddr += hole; + count++ ; + md += mdsize; hole = 1*1024*1024; - build_mem_desc(md, EFI_PAL_CODE, paddr, hole); + build_mem_desc(md, EFI_CONVENTIONAL_MEMORY, paddr, hole, EFI_MEMORY_UC); numbytes -= hole; paddr += hole; count++ ; md += mdsize; - hole = 3*1024*1024; - build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole); + hole = 1*1024*1024; + build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole, EFI_MEMORY_WB|EFI_MEMORY_WB); numbytes -= hole; paddr += hole; count++ ; md += mdsize; } else { - hole = PROMRESERVED_SIZE; - build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole); + hole = 2*1024*1024; + build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole, EFI_MEMORY_WB|EFI_MEMORY_WB); + numbytes -= hole; + paddr += hole; + count++ ; + md += mdsize; + hole = 2*1024*1024; + build_mem_desc(md, EFI_RUNTIME_SERVICES_DATA, paddr, hole, EFI_MEMORY_UC); numbytes -= hole; paddr += hole; count++ ; md += mdsize; } } - build_mem_desc(md, EFI_CONVENTIONAL_MEMORY, paddr, numbytes); + build_mem_desc(md, EFI_CONVENTIONAL_MEMORY, paddr, numbytes, EFI_MEMORY_WB|EFI_MEMORY_WB); md += mdsize ; count++ ; diff -Nru a/arch/ia64/sn/fakeprom/fprom.lds b/arch/ia64/sn/fakeprom/fprom.lds --- a/arch/ia64/sn/fakeprom/fprom.lds Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/sn/fakeprom/fprom.lds Sat Apr 12 14:44:09 2003 @@ -1,3 +1,34 @@ +/* + * Copyright (c) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License + * as published by the Free Software Foundation. + * + * This program is distributed in the hope that it would be useful, but + * WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. + * + * Further, this software is distributed without any warranty that it is + * free of the rightful claim of any third person regarding infringement + * or the like. Any license provided herein, whether implied or + * otherwise, applies only to this software file. Patent licenses, if + * any, provided herein do not apply to combinations of this program with + * other software, or any other product whatsoever. + * + * You should have received a copy of the GNU General Public + * License along with this program; if not, write the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. + * + * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, + * Mountain View, CA 94043, or: + * + * http://www.sgi.com + * + * For further information regarding this notice, see: + * + * http://oss.sgi.com/projects/GenInfo/NoticeExplan + */ OUTPUT_FORMAT("elf64-ia64-little") OUTPUT_ARCH(ia64) diff -Nru a/arch/ia64/sn/fakeprom/make_textsym b/arch/ia64/sn/fakeprom/make_textsym --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/sn/fakeprom/make_textsym Sat Apr 12 14:44:06 2003 @@ -0,0 +1,171 @@ +#!/bin/sh +# +# Build a textsym file for use in the Arium ITP probe. +# +# +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# +# Copyright (c) 2001-2002 Silicon Graphics, Inc. All rights reserved. +# + +help() { +cat < []] + If no input file is specified, it defaults to vmlinux. + If no output file name is specified, it defaults to "textsym". +END +exit 1 +} + +err () { + echo "ERROR - $*" >&2 + exit 1 +} + + +OPTS="H" +while getopts "$OPTS" c ; do + case $c in + H) help;; + \?) help;; + esac + +done +shift `expr $OPTIND - 1` + +LINUX=${1:-vmlinux} +TEXTSYM=${2:-${LINUX}.sym} +TMPSYM=${2:-${LINUX}.sym.tmp} +trap "/bin/rm -f $TMPSYM" 0 + +[ -f $VMLINUX ] || help + +$OBJDUMP -t $LINUX | egrep -v '__ks' | sort > $TMPSYM +SN1=`egrep "dig_setup|Synergy_da_indr" $TMPSYM|wc -l` + +# Dataprefix and textprefix correspond to the VGLOBAL_BASE and VPERNODE_BASE. +# Eventually, these values should be: +# dataprefix ffffffff +# textprefix fffffffe +# but right now they're still changing, so make them dynamic. +dataprefix=`awk ' / \.data / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` +textprefix=`awk ' / \.text / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` + +# pipe everything thru sort +echo "TEXTSYM V1.0" +(cat < 0) { + n = n*16 + substr(s,1,1) + s = substr(s,2) + } + printf "GLOBAL | %s | DATA | %s | %d\n", $1, $NF, n + } + } + if($NF == "_end") + exit + +} +' $TMPSYM ) | egrep -v " __device| __vendor" | awk -v sn1="$SN1" ' +/GLOBAL/ { + print $0 + if (sn1 != 0) { + /* 32 bits of sn1 physical addrs, */ + print substr($0,1,9) "04" substr($0,20,16) "Phy_" substr($0,36) + } else { + /* 38 bits of sn2 physical addrs, need addr space bits */ + print substr($0,1,9) "3004" substr($0,20,16) "Phy_" substr($0,36) + } + +} ' | sort -k3 + +N=`wc -l $TEXTSYM|awk '{print $1}'` +echo "Generated TEXTSYM file" >&2 +echo " $LINUX --> $TEXTSYM" >&2 +echo " Found $N symbols" >&2 diff -Nru a/arch/ia64/sn/io/Makefile b/arch/ia64/sn/io/Makefile --- a/arch/ia64/sn/io/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/sn/io/Makefile Sat Apr 12 14:44:06 2003 @@ -1,3 +1,4 @@ +# arch/ia64/sn/io/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -5,7 +6,8 @@ # # Copyright (C) 2000-2002 Silicon Graphics, Inc. All Rights Reserved. # -# Makefile for the sn kernel routines. +# Makefile for the sn io routines. +# EXTRA_CFLAGS := -DLITTLE_ENDIAN @@ -19,4 +21,6 @@ alenlist.o pci.o pci_dma.o ate_utils.o \ ifconfig_net.o io.o ioconfig_bus.o -obj-$(CONFIG_PCIBA) += pciba.o +obj-$(CONFIG_IA64_SGI_SN2) += sn2/ + +obj-$(CONFIG_PCIBA) += pciba.o diff -Nru a/arch/ia64/sn/io/sn2/Makefile b/arch/ia64/sn/io/sn2/Makefile --- a/arch/ia64/sn/io/sn2/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/sn/io/sn2/Makefile Sat Apr 12 14:44:10 2003 @@ -1,3 +1,4 @@ +# arch/ia64/sn/io/sn2/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -6,14 +7,14 @@ # Copyright (C) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. # # Makefile for the sn2 specific io routines. +# -EXTRA_CFLAGS := -DLITTLE_ENDIAN +EXTRA_CFLAGS := -DLITTLE_ENDIAN -obj-y += bte_error.o geo_op.o klconflib.o klgraph.o l1.o \ +obj-y += pcibr/ bte_error.o geo_op.o klconflib.o klgraph.o l1.o \ l1_command.o ml_iograph.o ml_SN_init.o ml_SN_intr.o module.o \ pci_bus_cvlink.o pciio.o pic.o sgi_io_init.o shub.o shuberror.o \ shub_intr.o shubio.o xbow.o xtalk.o obj-$(CONFIG_KDB) += kdba_io.o - obj-$(CONFIG_SHUB_1_0_SPECIFIC) += efi-rtc.o diff -Nru a/arch/ia64/sn/io/sn2/l1_command.c b/arch/ia64/sn/io/sn2/l1_command.c --- a/arch/ia64/sn/io/sn2/l1_command.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/sn/io/sn2/l1_command.c Sat Apr 12 14:44:07 2003 @@ -154,7 +154,7 @@ return ret; } - +#ifdef CONFIG_PCI /* * iobrick_module_get_nasid() returns a module_id which has the brick * type encoded in bits 15-12, but this is not the true brick type... @@ -185,7 +185,7 @@ return -1; /* unknown brick */ } - +#endif int iobrick_module_get_nasid(nasid_t nasid) { int io_moduleid; diff -Nru a/arch/ia64/sn/io/sn2/pcibr/Makefile b/arch/ia64/sn/io/sn2/pcibr/Makefile --- a/arch/ia64/sn/io/sn2/pcibr/Makefile Sat Apr 12 14:44:09 2003 +++ b/arch/ia64/sn/io/sn2/pcibr/Makefile Sat Apr 12 14:44:09 2003 @@ -1,3 +1,4 @@ +# arch/ia64/sn/io/sn2/pcibr/Makefile # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -6,6 +7,7 @@ # Copyright (C) 2002-2003 Silicon Graphics, Inc. All Rights Reserved. # # Makefile for the sn2 specific pci bridge routines. +# EXTRA_CFLAGS := -DLITTLE_ENDIAN diff -Nru a/arch/ia64/sn/kernel/Makefile b/arch/ia64/sn/kernel/Makefile --- a/arch/ia64/sn/kernel/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/ia64/sn/kernel/Makefile Sat Apr 12 14:44:06 2003 @@ -1,46 +1,18 @@ # arch/ia64/sn/kernel/Makefile # -# Copyright (C) 1999,2001-2002 Silicon Graphics, Inc. All Rights Reserved. +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. # -# This program is free software; you can redistribute it and/or modify it -# under the terms of version 2 of the GNU General Public License -# as published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Further, this software is distributed without any warranty that it is -# free of the rightful claim of any third person regarding infringement -# or the like. Any license provided herein, whether implied or -# otherwise, applies only to this software file. Patent licenses, if -# any, provided herein do not apply to combinations of this program with -# other software, or any other product whatsoever. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. -# -# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, -# Mountain View, CA 94043, or: -# -# http://www.sgi.com -# -# For further information regarding this notice, see: -# -# http://oss.sgi.com/projects/GenInfo/NoticeExplan +# Copyright (C) 1999,2001-2003 Silicon Graphics, Inc. All Rights Reserved. # -EXTRA_CFLAGS := -DLITTLE_ENDIAN +EXTRA_CFLAGS := -DLITTLE_ENDIAN -.S.s: - $(CPP) $(AFLAGS) $(AFLAGS_KERNEL) -o $*.s $< -.S.o: - $(CC) $(AFLAGS) $(AFLAGS_KERNEL) -c -o $*.o $< +obj-y := probe.o setup.o sn_asm.o sv.o bte.o iomv.o \ + irq.o mca.o -obj-y = probe.o setup.o sn_asm.o sv.o bte.o iomv.o -obj-$(CONFIG_IA64_SGI_SN1) += irq.o mca.o -obj-$(CONFIG_IA64_SGI_SN2) += irq.o mca.o +obj-$(CONFIG_IA64_SGI_SN2) += sn2/ obj-$(CONFIG_IA64_SGI_AUTOTEST) += llsc4.o misctest.o obj-$(CONFIG_IA64_GENERIC) += machvec.o obj-$(CONFIG_MODULES) += sn_ksyms.o diff -Nru a/arch/ia64/sn/kernel/setup.c b/arch/ia64/sn/kernel/setup.c --- a/arch/ia64/sn/kernel/setup.c Sat Apr 12 14:44:07 2003 +++ b/arch/ia64/sn/kernel/setup.c Sat Apr 12 14:44:07 2003 @@ -237,7 +237,7 @@ "%x.%02x\n", SN_SAL_MIN_MAJOR, SN_SAL_MIN_MINOR); panic("PROM version too old\n"); } - +#ifdef CONFIG_PCI #ifdef CONFIG_IA64_SGI_SN2 { extern void io_sh_swapper(int, int); @@ -253,7 +253,7 @@ (void)get_master_baseio_nasid(); } #endif - +#endif /* CONFIG_PCI */ status = ia64_sal_freq_base(SAL_FREQ_BASE_REALTIME_CLOCK, &ticks_per_sec, &drift); if (status != 0 || ticks_per_sec < 100000) { printk(KERN_WARNING "unable to determine platform RTC clock frequency, guessing.\n"); @@ -349,7 +349,7 @@ for (cnode=0; cnode < numnodes; cnode++) memcpy(nodepdaindr[cnode]->pernode_pdaindr, nodepdaindr, sizeof(nodepdaindr)); - +#ifdef CONFIG_PCI /* * Set up IO related platform-dependent nodepda fields. * The following routine actually sets up the hubinfo struct @@ -359,6 +359,7 @@ init_platform_nodepda(nodepdaindr[cnode], cnode); bte_init_node (nodepdaindr[cnode], cnode); } +#endif } /** diff -Nru a/arch/ia64/sn/kernel/sn2/Makefile b/arch/ia64/sn/kernel/sn2/Makefile --- a/arch/ia64/sn/kernel/sn2/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/ia64/sn/kernel/sn2/Makefile Sat Apr 12 14:44:10 2003 @@ -1,38 +1,14 @@ -# # arch/ia64/sn/kernel/sn2/Makefile # +# This file is subject to the terms and conditions of the GNU General Public +# License. See the file "COPYING" in the main directory of this archive +# for more details. +# # Copyright (C) 1999,2001-2002 Silicon Graphics, Inc. All rights reserved. # -# This program is free software; you can redistribute it and/or modify it -# under the terms of version 2 of the GNU General Public License -# as published by the Free Software Foundation. -# -# This program is distributed in the hope that it would be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# -# Further, this software is distributed without any warranty that it is -# free of the rightful claim of any third person regarding infringement -# or the like. Any license provided herein, whether implied or -# otherwise, applies only to this software file. Patent licenses, if -# any, provided herein do not apply to combinations of this program with -# other software, or any other product whatsoever. -# -# You should have received a copy of the GNU General Public -# License along with this program; if not, write the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston MA 02111-1307, USA. -# -# Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, -# Mountain View, CA 94043, or: -# -# http://www.sgi.com -# -# For further information regarding this notice, see: -# -# http://oss.sgi.com/projects/GenInfo/NoticeExplan +# sn2 specific kernel files # -EXTRA_CFLAGS := -DLITTLE_ENDIAN +EXTRA_CFLAGS := -DLITTLE_ENDIAN -obj-y += cache.o iomv.o ptc_deadlock.o sn2_smp.o \ - sn_proc_fs.o +obj-y += cache.o iomv.o ptc_deadlock.o sn2_smp.o sn_proc_fs.o diff -Nru a/arch/ia64/sn/kernel/sn2/io.c b/arch/ia64/sn/kernel/sn2/io.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/ia64/sn/kernel/sn2/io.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,98 @@ +/* + * This file is subject to the terms and conditions of the GNU General Public + * License. See the file "COPYING" in the main directory of this archive + * for more details. + * + * Copyright (C) 2003 Silicon Graphics, Inc. All rights reserved. + * + * The generic kernel requires function pointers to these routines, so + * we wrap the inlines from asm/ia64/sn/sn2/io.h here. + */ + +#include +#include + +#include + +#ifdef CONFIG_IA64_GENERIC + +unsigned int +sn_inb (unsigned long port) +{ + return __sn_inb(port); +} + +unsigned int +sn_inw (unsigned long port) +{ + return __sn_inw(port); +} + +unsigned int +sn_inl (unsigned long port) +{ + return __sn_inl(port); +} + +void +sn_outb (unsigned char val, unsigned long port) +{ + __sn_outb(val, port); +} + +void +sn_outw (unsigned short val, unsigned long port) +{ + __sn_outw(val, port); +} + +void +sn_outl (unsigned int val, unsigned long port) +{ + __sn_outl(val, port); +} + +unsigned char +sn_readb (void *addr) +{ + return __sn_readb (addr); +} + +unsigned short +sn_readw (void *addr) +{ + return __sn_readw (addr); +} + +unsigned int +sn_readl (void *addr) +{ + return __sn_readl (addr); +} + +unsigned long +sn_readq (void *addr) +{ + return __sn_readq (addr) +} + + +/* define aliases: */ + +asm (".global __sn_inb, __sn_inw, __sn_inl"); +asm ("__sn_inb = sn_inb"); +asm ("__sn_inw = sn_inw"); +asm ("__sn_inl = sn_inl"); + +asm (".global __sn_outb, __sn_outw, __sn_outl"); +asm ("__sn_outb = sn_outb"); +asm ("__sn_outw = sn_outw"); +asm ("__sn_outl = sn_outl"); + +asm (".global __sn_readb, __sn_readw, __sn_readl, __sn_readq"); +asm ("__sn_readb = sn_readb"); +asm ("__sn_readw = sn_readw"); +asm ("__sn_readl = sn_readl"); +asm ("__sn_readq = sn_readq"); + +#endif /* CONFIG_IA64_GENERIC */ diff -Nru a/arch/ia64/sn/kernel/sn2/iomv.c b/arch/ia64/sn/kernel/sn2/iomv.c --- a/arch/ia64/sn/kernel/sn2/iomv.c Sat Apr 12 14:44:08 2003 +++ b/arch/ia64/sn/kernel/sn2/iomv.c Sat Apr 12 14:44:08 2003 @@ -3,10 +3,11 @@ * License. See the file "COPYING" in the main directory of this archive * for more details. * - * Copyright (C) 2000-2002 Silicon Graphics, Inc. All rights reserved. + * Copyright (C) 2000-2003 Silicon Graphics, Inc. All rights reserved. */ #include +#include #include #include #include @@ -46,8 +47,10 @@ } } +EXPORT_SYMBOL(sn_io_addr); + /** - * sn2_mmiob - I/O space memory barrier + * sn_mmiob - I/O space memory barrier * * Acts as a memory mapped I/O barrier for platforms that queue writes to * I/O space. This ensures that subsequent writes to I/O space arrive after @@ -60,9 +63,9 @@ * */ void -sn2_mmiob (void) +sn_mmiob (void) { - while ((((volatile unsigned long) (*pda->pio_write_status_addr)) & SH_PIO_WRITE_STATUS_0_PENDING_WRITE_COUNT_MASK) != + while ((((volatile unsigned long) (*pda.pio_write_status_addr)) & SH_PIO_WRITE_STATUS_0_PENDING_WRITE_COUNT_MASK) != SH_PIO_WRITE_STATUS_0_PENDING_WRITE_COUNT_MASK) udelay(1); } diff -Nru a/arch/ia64/sn/tools/make_textsym b/arch/ia64/sn/tools/make_textsym --- a/arch/ia64/sn/tools/make_textsym Sat Apr 12 14:44:06 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,171 +0,0 @@ -#!/bin/sh -# -# Build a textsym file for use in the Arium ITP probe. -# -# -# This file is subject to the terms and conditions of the GNU General Public -# License. See the file "COPYING" in the main directory of this archive -# for more details. -# -# Copyright (c) 2001-2002 Silicon Graphics, Inc. All rights reserved. -# - -help() { -cat < []] - If no input file is specified, it defaults to vmlinux. - If no output file name is specified, it defaults to "textsym". -END -exit 1 -} - -err () { - echo "ERROR - $*" >&2 - exit 1 -} - - -OPTS="H" -while getopts "$OPTS" c ; do - case $c in - H) help;; - \?) help;; - esac - -done -shift `expr $OPTIND - 1` - -LINUX=${1:-vmlinux} -TEXTSYM=${2:-${LINUX}.sym} -TMPSYM=${2:-${LINUX}.sym.tmp} -trap "/bin/rm -f $TMPSYM" 0 - -[ -f $VMLINUX ] || help - -$OBJDUMP -t $LINUX | egrep -v '__ks' | sort > $TMPSYM -SN1=`egrep "dig_setup|Synergy_da_indr" $TMPSYM|wc -l` - -# Dataprefix and textprefix correspond to the VGLOBAL_BASE and VPERNODE_BASE. -# Eventually, these values should be: -# dataprefix ffffffff -# textprefix fffffffe -# but right now they're still changing, so make them dynamic. -dataprefix=`awk ' / \.data / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` -textprefix=`awk ' / \.text / { print substr($1, 0, 8) ; exit ; }' $TMPSYM` - -# pipe everything thru sort -echo "TEXTSYM V1.0" -(cat < 0) { - n = n*16 + substr(s,1,1) - s = substr(s,2) - } - printf "GLOBAL | %s | DATA | %s | %d\n", $1, $NF, n - } - } - if($NF == "_end") - exit - -} -' $TMPSYM ) | egrep -v " __device| __vendor" | awk -v sn1="$SN1" ' -/GLOBAL/ { - print $0 - if (sn1 != 0) { - /* 32 bits of sn1 physical addrs, */ - print substr($0,1,9) "04" substr($0,20,16) "Phy_" substr($0,36) - } else { - /* 38 bits of sn2 physical addrs, need addr space bits */ - print substr($0,1,9) "3004" substr($0,20,16) "Phy_" substr($0,36) - } - -} ' | sort -k3 - -N=`wc -l $TEXTSYM|awk '{print $1}'` -echo "Generated TEXTSYM file" >&2 -echo " $LINUX --> $TEXTSYM" >&2 -echo " Found $N symbols" >&2 diff -Nru a/arch/parisc/kernel/sys_parisc32.c b/arch/parisc/kernel/sys_parisc32.c --- a/arch/parisc/kernel/sys_parisc32.c Sat Apr 12 14:44:07 2003 +++ b/arch/parisc/kernel/sys_parisc32.c Sat Apr 12 14:44:07 2003 @@ -1592,7 +1592,7 @@ return sys_semctl (semid, semnum, cmd, arg); } -extern int sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); +extern long sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) diff -Nru a/arch/ppc64/kernel/sys_ppc32.c b/arch/ppc64/kernel/sys_ppc32.c --- a/arch/ppc64/kernel/sys_ppc32.c Sat Apr 12 14:44:09 2003 +++ b/arch/ppc64/kernel/sys_ppc32.c Sat Apr 12 14:44:09 2003 @@ -2781,10 +2781,10 @@ return secs; } -extern asmlinkage int sys_sched_setaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2805,10 +2805,10 @@ return ret; } -extern asmlinkage int sys_sched_getaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2914,7 +2914,7 @@ return sys_ftruncate(fd, (high << 32) | low); } -extern int sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); +extern long sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); long ppc32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) diff -Nru a/arch/sparc/Makefile b/arch/sparc/Makefile --- a/arch/sparc/Makefile Sat Apr 12 14:44:06 2003 +++ b/arch/sparc/Makefile Sat Apr 12 14:44:06 2003 @@ -30,6 +30,7 @@ CFLAGS := $(CFLAGS) -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7 else CFLAGS := $(CFLAGS) -m32 -pipe -mno-fpu -fcall-used-g5 -fcall-used-g7 +AFLAGS := $(AFLAGS) -m32 endif #LDFLAGS_vmlinux = -N -Ttext 0xf0004000 diff -Nru a/arch/sparc/kernel/process.c b/arch/sparc/kernel/process.c --- a/arch/sparc/kernel/process.c Sat Apr 12 14:44:06 2003 +++ b/arch/sparc/kernel/process.c Sat Apr 12 14:44:06 2003 @@ -523,9 +523,16 @@ new_stack = (((struct reg_window *) childregs) - 1); copy_regwin(new_stack, (((struct reg_window *) regs) - 1)); + /* + * A new process must start with interrupts closed in 2.5, + * because this is how Mingo's scheduler works (see schedule_tail + * and finish_arch_switch). If we do not do it, a timer interrupt hits + * before we unlock, attempts to re-take the rq->lock, and then we die. + * Thus, kpsr|=PSR_PIL. + */ ti->ksp = (unsigned long) new_stack; ti->kpc = (((unsigned long) ret_from_fork) - 0x8); - ti->kpsr = current->thread.fork_kpsr; + ti->kpsr = current->thread.fork_kpsr | PSR_PIL; ti->kwim = current->thread.fork_kwim; /* This is used for sun4c only */ diff -Nru a/arch/sparc/kernel/signal.c b/arch/sparc/kernel/signal.c --- a/arch/sparc/kernel/signal.c Sat Apr 12 14:44:09 2003 +++ b/arch/sparc/kernel/signal.c Sat Apr 12 14:44:09 2003 @@ -56,7 +56,7 @@ struct reg_window sig_window; int sig_num; int sig_code; - struct sigcontext *sig_scptr; + struct sigcontext __user *sig_scptr; int sig_address; struct sigcontext sig_context; unsigned int extramask[_NSIG_WORDS - 1]; @@ -71,8 +71,8 @@ struct new_signal_frame { struct sparc_stackf ss; __siginfo_t info; - __siginfo_fpu_t *fpu_save; - unsigned long insns [2] __attribute__ ((aligned (8))); + __siginfo_fpu_t __user *fpu_save; + unsigned long insns[2] __attribute__ ((aligned (8))); unsigned int extramask[_NSIG_WORDS - 1]; unsigned int extra_size; /* Should be 0 */ __siginfo_fpu_t fpu_state; @@ -83,8 +83,8 @@ siginfo_t info; struct pt_regs regs; sigset_t mask; - __siginfo_fpu_t *fpu_save; - unsigned int insns [2]; + __siginfo_fpu_t __user *fpu_save; + unsigned int insns[2]; stack_t stack; unsigned int extra_size; /* Should be 0 */ __siginfo_fpu_t fpu_state; @@ -142,7 +142,7 @@ _sigpause_common(regs->u_regs[UREG_I0], regs); } -asmlinkage void do_rt_sigsuspend(sigset_t *uset, size_t sigsetsize, +asmlinkage void do_rt_sigsuspend(sigset_t __user *uset, size_t sigsetsize, struct pt_regs *regs) { sigset_t oldset, set; @@ -190,7 +190,7 @@ } static inline int -restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { int err; #ifdef CONFIG_SMP @@ -205,7 +205,7 @@ current->used_math = 1; clear_tsk_thread_flag(current, TIF_USEDFPU); - if (verify_area (VERIFY_READ, fpu, sizeof(*fpu))) + if (verify_area(VERIFY_READ, fpu, sizeof(*fpu))) return -EFAULT; err = __copy_from_user(¤t->thread.float_regs[0], &fpu->si_float_regs[0], @@ -222,16 +222,16 @@ static inline void do_new_sigreturn (struct pt_regs *regs) { - struct new_signal_frame *sf; + struct new_signal_frame __user *sf; unsigned long up_psr, pc, npc; sigset_t set; - __siginfo_fpu_t *fpu_save; + __siginfo_fpu_t __user *fpu_save; int err; - sf = (struct new_signal_frame *) regs->u_regs [UREG_FP]; + sf = (struct new_signal_frame __user *) regs->u_regs[UREG_FP]; /* 1. Make sure we are not getting garbage from the user */ - if (verify_area (VERIFY_READ, sf, sizeof (*sf))) + if (verify_area(VERIFY_READ, sf, sizeof(*sf))) goto segv_and_exit; if (((uint) sf) & 3) @@ -245,7 +245,7 @@ /* 2. Restore the state */ up_psr = regs->psr; - err |= __copy_from_user(regs, &sf->info.si_regs, sizeof (struct pt_regs)); + err |= __copy_from_user(regs, &sf->info.si_regs, sizeof(struct pt_regs)); /* User can only change condition codes and FPU enabling in %psr. */ regs->psr = (up_psr & ~(PSR_ICC | PSR_EF)) @@ -279,7 +279,7 @@ asmlinkage void do_sigreturn(struct pt_regs *regs) { - struct sigcontext *scptr; + struct sigcontext __user *scptr; unsigned long pc, npc, psr; sigset_t set; int err; @@ -287,19 +287,19 @@ synchronize_user_stack(); if (current->thread.new_signal) - return do_new_sigreturn (regs); + return do_new_sigreturn(regs); - scptr = (struct sigcontext *) regs->u_regs[UREG_I0]; + scptr = (struct sigcontext __user *) regs->u_regs[UREG_I0]; /* Check sanity of the user arg. */ - if(verify_area(VERIFY_READ, scptr, sizeof(struct sigcontext)) || - (((unsigned long) scptr) & 3)) + if (verify_area(VERIFY_READ, scptr, sizeof(struct sigcontext)) || + (((unsigned long) scptr) & 3)) goto segv_and_exit; err = __get_user(pc, &scptr->sigc_pc); err |= __get_user(npc, &scptr->sigc_npc); - if((pc | npc) & 3) + if ((pc | npc) & 3) goto segv_and_exit; /* This is pretty much atomic, no amount locking would prevent @@ -341,17 +341,17 @@ asmlinkage void do_rt_sigreturn(struct pt_regs *regs) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; unsigned int psr, pc, npc; - __siginfo_fpu_t *fpu_save; + __siginfo_fpu_t __user *fpu_save; sigset_t set; stack_t st; int err; synchronize_user_stack(); - sf = (struct rt_signal_frame *) regs->u_regs[UREG_FP]; - if(verify_area(VERIFY_READ, sf, sizeof(*sf)) || - (((unsigned long) sf) & 0x03)) + sf = (struct rt_signal_frame __user *) regs->u_regs[UREG_FP]; + if (verify_area(VERIFY_READ, sf, sizeof(*sf)) || + (((unsigned long) sf) & 0x03)) goto segv; err = __get_user(pc, &sf->regs.pc); @@ -361,13 +361,14 @@ err |= __get_user(regs->y, &sf->regs.y); err |= __get_user(psr, &sf->regs.psr); - err |= __copy_from_user(®s->u_regs[UREG_G1], &sf->regs.u_regs[UREG_G1], 15*sizeof(u32)); + err |= __copy_from_user(®s->u_regs[UREG_G1], + &sf->regs.u_regs[UREG_G1], 15 * sizeof(u32)); regs->psr = (regs->psr & ~PSR_ICC) | (psr & PSR_ICC); err |= __get_user(fpu_save, &sf->fpu_save); - if(fpu_save) + if (fpu_save) err |= restore_fpu_state(regs, fpu_save); err |= __copy_from_user(&set, &sf->mask, sizeof(sigset_t)); @@ -380,7 +381,8 @@ regs->npc = npc; /* It is more difficult to avoid calling this function than to - call it and ignore errors. */ + * call it and ignore errors. + */ do_sigaltstack(&st, NULL, (unsigned long)sf); sigdelsetmask(&set, ~_BLOCKABLE); @@ -394,7 +396,7 @@ } /* Checks if the fp is valid */ -static inline int invalid_frame_pointer (void *fp, int fplen) +static inline int invalid_frame_pointer(void __user *fp, int fplen) { if ((((unsigned long) fp) & 7) || !__access_ok((unsigned long)fp, fplen) || @@ -405,7 +407,7 @@ return 0; } -static inline void *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) +static inline void __user *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) { unsigned long sp; @@ -416,14 +418,14 @@ if (!on_sig_stack(sp) && !((current->sas_ss_sp + current->sas_ss_size) & 7)) sp = current->sas_ss_sp + current->sas_ss_size; } - return (void *)(sp - framesize); + return (void __user *)(sp - framesize); } static inline void setup_frame(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *oldset, siginfo_t *info) { - struct signal_sframe *sframep; - struct sigcontext *sc; + struct signal_sframe __user *sframep; + struct sigcontext __user *sc; int window = 0, err; unsigned long pc = regs->pc; unsigned long npc = regs->npc; @@ -431,8 +433,9 @@ int sig_code; synchronize_user_stack(); - sframep = (struct signal_sframe *)get_sigframe(sa, regs, SF_ALIGNEDSZ); - if (invalid_frame_pointer (sframep, sizeof(*sframep))){ + sframep = (struct signal_sframe __user *) + get_sigframe(sa, regs, SF_ALIGNEDSZ); + if (invalid_frame_pointer(sframep, sizeof(*sframep))){ /* Don't change signal code and address, so that * post mortem debuggers can have a look. */ @@ -454,16 +457,16 @@ err |= __put_user(regs->u_regs[UREG_G1], &sc->sigc_g1); err |= __put_user(regs->u_regs[UREG_I0], &sc->sigc_o0); err |= __put_user(current->thread.w_saved, &sc->sigc_oswins); - if(current->thread.w_saved) - for(window = 0; window < current->thread.w_saved; window++) { - sc->sigc_spbuf[window] = - (char *)current->thread.rwbuf_stkptrs[window]; + if (current->thread.w_saved) + for (window = 0; window < current->thread.w_saved; window++) { + put_user((char *)current->thread.rwbuf_stkptrs[window], + &sc->sigc_spbuf[window]); err |= __copy_to_user(&sc->sigc_wbuf[window], ¤t->thread.reg_window[window], sizeof(struct reg_window)); } else - err |= __copy_to_user(sframep, (char *)regs->u_regs[UREG_FP], + err |= __copy_to_user(sframep, (char *) regs->u_regs[UREG_FP], sizeof(struct reg_window)); current->thread.w_saved = 0; /* So process is allowed to execute. */ @@ -484,7 +487,7 @@ switch (info->si_code) { case ILL_ILLOPC: sig_code = SUBSIG_ILLINST; break; case ILL_PRVOPC: sig_code = SUBSIG_PRIVINST; break; - case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP (info->si_trapno); break; + case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP(info->si_trapno); break; default: sig_code = SUBSIG_STACK; break; } break; @@ -541,7 +544,7 @@ static inline int -save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { int err = 0; #ifdef CONFIG_SMP @@ -561,12 +564,14 @@ regs->psr &= ~(PSR_EF); } #endif - err |= __copy_to_user(&fpu->si_float_regs[0], ¤t->thread.float_regs[0], + err |= __copy_to_user(&fpu->si_float_regs[0], + ¤t->thread.float_regs[0], (sizeof(unsigned long) * 32)); err |= __put_user(current->thread.fsr, &fpu->si_fsr); err |= __put_user(current->thread.fpqdepth, &fpu->si_fpqdepth); if (current->thread.fpqdepth != 0) - err |= __copy_to_user(&fpu->si_fpqueue[0], ¤t->thread.fpqueue[0], + err |= __copy_to_user(&fpu->si_fpqueue[0], + ¤t->thread.fpqueue[0], ((sizeof(unsigned long) + (sizeof(unsigned long *)))*16)); current->used_math = 0; @@ -577,7 +582,7 @@ new_setup_frame(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset) { - struct new_signal_frame *sf; + struct new_signal_frame __user *sf; int sigframe_size, err; /* 1. Make sure everything is clean */ @@ -587,16 +592,17 @@ if (!current->used_math) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct new_signal_frame *)get_sigframe(&ka->sa, regs, sigframe_size); + sf = (struct new_signal_frame __user *) + get_sigframe(&ka->sa, regs, sigframe_size); - if (invalid_frame_pointer (sf, sigframe_size)) + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill_and_return; if (current->thread.w_saved != 0) goto sigill_and_return; /* 2. Save the current process state */ - err = __copy_to_user(&sf->info.si_regs, regs, sizeof (struct pt_regs)); + err = __copy_to_user(&sf->info.si_regs, regs, sizeof(struct pt_regs)); err |= __put_user(0, &sf->extra_size); @@ -610,8 +616,8 @@ err |= __put_user(oldset->sig[0], &sf->info.si_mask); err |= __copy_to_user(sf->extramask, &oldset->sig[1], (_NSIG_WORDS - 1) * sizeof(unsigned int)); - err |= __copy_to_user(sf, (char *) regs->u_regs [UREG_FP], - sizeof (struct reg_window)); + err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], + sizeof(struct reg_window)); if (err) goto sigsegv; @@ -653,32 +659,33 @@ new_setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset, siginfo_t *info) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; int sigframe_size; unsigned int psr; int err; synchronize_user_stack(); sigframe_size = RT_ALIGNEDSZ; - if(!current->used_math) + if (!current->used_math) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct rt_signal_frame *)get_sigframe(&ka->sa, regs, sigframe_size); - if(invalid_frame_pointer(sf, sigframe_size)) + sf = (struct rt_signal_frame __user *) + get_sigframe(&ka->sa, regs, sigframe_size); + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill; - if(current->thread.w_saved != 0) + if (current->thread.w_saved != 0) goto sigill; err = __put_user(regs->pc, &sf->regs.pc); err |= __put_user(regs->npc, &sf->regs.npc); err |= __put_user(regs->y, &sf->regs.y); psr = regs->psr; - if(current->used_math) + if (current->used_math) psr |= PSR_EF; err |= __put_user(psr, &sf->regs.psr); err |= __copy_to_user(&sf->regs.u_regs, regs->u_regs, sizeof(regs->u_regs)); err |= __put_user(0, &sf->extra_size); - if(psr & PSR_EF) { + if (psr & PSR_EF) { err |= save_fpu_state(regs, &sf->fpu_state); err |= __put_user(&sf->fpu_state, &sf->fpu_save); } else { @@ -691,8 +698,8 @@ err |= __put_user(sas_ss_flags(regs->u_regs[UREG_FP]), &sf->stack.ss_flags); err |= __put_user(current->sas_ss_size, &sf->stack.ss_size); - err |= __copy_to_user(sf, (char *) regs->u_regs [UREG_FP], - sizeof (struct reg_window)); + err |= __copy_to_user(sf, (char *) regs->u_regs[UREG_FP], + sizeof(struct reg_window)); err |= copy_siginfo_to_user(&sf->info, info); @@ -706,7 +713,7 @@ regs->pc = (unsigned long) ka->sa.sa_handler; regs->npc = (regs->pc + 4); - if(ka->ka_restorer) + if (ka->ka_restorer) regs->u_regs[UREG_I7] = (unsigned long)ka->ka_restorer; else { regs->u_regs[UREG_I7] = (unsigned long)(&(sf->insns[0]) - 2); @@ -735,23 +742,24 @@ setup_svr4_frame(struct sigaction *sa, unsigned long pc, unsigned long npc, struct pt_regs *regs, int signr, sigset_t *oldset) { - svr4_signal_frame_t *sfp; - svr4_gregset_t *gr; - svr4_siginfo_t *si; - svr4_mcontext_t *mc; - svr4_gwindows_t *gw; - svr4_ucontext_t *uc; + svr4_signal_frame_t __user *sfp; + svr4_gregset_t __user *gr; + svr4_siginfo_t __user *si; + svr4_mcontext_t __user *mc; + svr4_gwindows_t __user *gw; + svr4_ucontext_t __user *uc; svr4_sigset_t setv; int window = 0, err; synchronize_user_stack(); - sfp = (svr4_signal_frame_t *) get_sigframe(sa, regs, SVR4_SF_ALIGNED + REGWIN_SZ); + sfp = (svr4_signal_frame_t __user *) + get_sigframe(sa, regs, SVR4_SF_ALIGNED + REGWIN_SZ); - if (invalid_frame_pointer (sfp, sizeof (*sfp))) + if (invalid_frame_pointer(sfp, sizeof(*sfp))) goto sigill_and_return; /* Start with a clean frame pointer and fill it */ - err = __clear_user(sfp, sizeof (*sfp)); + err = __clear_user(sfp, sizeof(*sfp)); /* Setup convenience variables */ si = &sfp->si; @@ -771,17 +779,20 @@ setv.sigbits[3] = oldset->sig[3]; err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t)); } else - err |= __copy_to_user(&uc->sigmask, &setv, 2 * sizeof(unsigned int)); + err |= __copy_to_user(&uc->sigmask, &setv, + 2 * sizeof(unsigned int)); /* Store registers */ - err |= __put_user(regs->pc, &((*gr) [SVR4_PC])); - err |= __put_user(regs->npc, &((*gr) [SVR4_NPC])); - err |= __put_user(regs->psr, &((*gr) [SVR4_PSR])); - err |= __put_user(regs->y, &((*gr) [SVR4_Y])); + err |= __put_user(regs->pc, &((*gr)[SVR4_PC])); + err |= __put_user(regs->npc, &((*gr)[SVR4_NPC])); + err |= __put_user(regs->psr, &((*gr)[SVR4_PSR])); + err |= __put_user(regs->y, &((*gr)[SVR4_Y])); - /* Copy g [1..7] and o [0..7] registers */ - err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs [UREG_G1], sizeof (long) * 7); - err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs [UREG_I0], sizeof (long) * 8); + /* Copy g[1..7] and o[0..7] registers */ + err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs[UREG_G1], + sizeof(long) * 7); + err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs[UREG_I0], + sizeof(long) * 8); /* Setup sigaltstack */ err |= __put_user(current->sas_ss_sp, &uc->stack.sp); @@ -793,7 +804,7 @@ /* 1. Link sfp->uc->gwins to our windows */ err |= __put_user(gw, &mc->gwin); - /* 2. Number of windows to restore at setcontext (): */ + /* 2. Number of windows to restore at setcontext(): */ err |= __put_user(current->thread.w_saved, &gw->count); /* 3. Save each valid window @@ -807,12 +818,12 @@ * These windows are just used in case synchronize_user_stack failed * to flush the user windows. */ - for(window = 0; window < current->thread.w_saved; window++) { - err |= __put_user((int *) &(gw->win [window]), &gw->winptr [window]); - err |= __copy_to_user(&gw->win [window], - ¤t->thread.reg_window [window], - sizeof (svr4_rwindow_t)); - err |= __put_user(0, gw->winptr [window]); + for (window = 0; window < current->thread.w_saved; window++) { + err |= __put_user((int *) &(gw->win[window]), &gw->winptr[window]); + err |= __copy_to_user(&gw->win[window], + ¤t->thread.reg_window[window], + sizeof(svr4_rwindow_t)); + err |= __put_user(0, gw->winptr[window]); } /* 4. We just pay attention to the gw->count field on setcontext */ @@ -832,13 +843,14 @@ regs->npc = (regs->pc + 4); /* Arguments passed to signal handler */ - if (regs->u_regs [14]){ - struct reg_window *rw = (struct reg_window *) regs->u_regs [14]; - - err |= __put_user(signr, &rw->ins [0]); - err |= __put_user(si, &rw->ins [1]); - err |= __put_user(uc, &rw->ins [2]); - err |= __put_user(sfp, &rw->ins [6]); /* frame pointer */ + if (regs->u_regs[14]){ + struct reg_window *rw = (struct reg_window __user *) + regs->u_regs[14]; + + err |= __put_user(signr, &rw->ins[0]); + err |= __put_user(si, &rw->ins[1]); + err |= __put_user(uc, &rw->ins[2]); + err |= __put_user(sfp, &rw->ins[6]); /* frame pointer */ if (err) goto sigsegv; @@ -854,10 +866,10 @@ do_exit(SIGSEGV); } -asmlinkage int svr4_getcontext (svr4_ucontext_t *uc, struct pt_regs *regs) +asmlinkage int svr4_getcontext(svr4_ucontext_t __user *uc, struct pt_regs *regs) { - svr4_gregset_t *gr; - svr4_mcontext_t *mc; + svr4_gregset_t __user *gr; + svr4_mcontext_t __user *mc; svr4_sigset_t setv; int err = 0; @@ -866,7 +878,7 @@ if (current->thread.w_saved) goto sigsegv_and_return; - err = clear_user(uc, sizeof (*uc)); + err = clear_user(uc, sizeof(*uc)); if (err) return -EFAULT; @@ -881,17 +893,20 @@ setv.sigbits[3] = current->blocked.sig[3]; err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t)); } else - err |= __copy_to_user(&uc->sigmask, &setv, 2 * sizeof(unsigned int)); + err |= __copy_to_user(&uc->sigmask, &setv, + 2 * sizeof(unsigned int)); /* Store registers */ - err |= __put_user(regs->pc, &uc->mcontext.greg [SVR4_PC]); - err |= __put_user(regs->npc, &uc->mcontext.greg [SVR4_NPC]); - err |= __put_user(regs->psr, &uc->mcontext.greg [SVR4_PSR]); - err |= __put_user(regs->y, &uc->mcontext.greg [SVR4_Y]); + err |= __put_user(regs->pc, &uc->mcontext.greg[SVR4_PC]); + err |= __put_user(regs->npc, &uc->mcontext.greg[SVR4_NPC]); + err |= __put_user(regs->psr, &uc->mcontext.greg[SVR4_PSR]); + err |= __put_user(regs->y, &uc->mcontext.greg[SVR4_Y]); - /* Copy g [1..7] and o [0..7] registers */ - err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs [UREG_G1], sizeof (uint) * 7); - err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs [UREG_I0], sizeof (uint) * 8); + /* Copy g[1..7] and o[0..7] registers */ + err |= __copy_to_user(&(*gr)[SVR4_G1], ®s->u_regs[UREG_G1], + sizeof(uint) * 7); + err |= __copy_to_user(&(*gr)[SVR4_O0], ®s->u_regs[UREG_I0], + sizeof(uint) * 8); /* Setup sigaltstack */ err |= __put_user(current->sas_ss_sp, &uc->stack.sp); @@ -908,10 +923,10 @@ } /* Set the context for a svr4 application, this is Solaris way to sigreturn */ -asmlinkage int svr4_setcontext (svr4_ucontext_t *c, struct pt_regs *regs) +asmlinkage int svr4_setcontext(svr4_ucontext_t __user *c, struct pt_regs *regs) { struct thread_struct *tp = ¤t->thread; - svr4_gregset_t *gr; + svr4_gregset_t __user *gr; unsigned long pc, npc, psr; sigset_t set; svr4_sigset_t setv; @@ -929,7 +944,7 @@ if (((uint) c) & 3) goto sigsegv_and_return; - if(!__access_ok((unsigned long)c, sizeof(*c))) + if (!__access_ok((unsigned long)c, sizeof(*c))) goto sigsegv_and_return; /* Check for valid PC and nPC */ @@ -937,7 +952,7 @@ err = __get_user(pc, &((*gr)[SVR4_PC])); err |= __get_user(npc, &((*gr)[SVR4_NPC])); - if((pc | npc) & 3) + if ((pc | npc) & 3) goto sigsegv_and_return; /* Retrieve information from passed ucontext */ @@ -973,16 +988,16 @@ spin_unlock_irq(¤t->sighand->siglock); regs->pc = pc; regs->npc = npc | 1; - err |= __get_user(regs->y, &((*gr) [SVR4_Y])); - err |= __get_user(psr, &((*gr) [SVR4_PSR])); + err |= __get_user(regs->y, &((*gr)[SVR4_Y])); + err |= __get_user(psr, &((*gr)[SVR4_PSR])); regs->psr &= ~(PSR_ICC); regs->psr |= (psr & PSR_ICC); /* Restore g[1..7] and o[0..7] registers */ - err |= __copy_from_user(®s->u_regs [UREG_G1], &(*gr)[SVR4_G1], - sizeof (long) * 7); - err |= __copy_from_user(®s->u_regs [UREG_I0], &(*gr)[SVR4_O0], - sizeof (long) * 8); + err |= __copy_from_user(®s->u_regs[UREG_G1], &(*gr)[SVR4_G1], + sizeof(long) * 7); + err |= __copy_from_user(®s->u_regs[UREG_I0], &(*gr)[SVR4_O0], + sizeof(long) * 8); return (err ? -EFAULT : 0); sigsegv_and_return: @@ -1000,13 +1015,13 @@ if (ka->sa.sa_flags & SA_SIGINFO) new_setup_rt_frame(ka, regs, signr, oldset, info); else if (current->thread.new_signal) - new_setup_frame (ka, regs, signr, oldset); + new_setup_frame(ka, regs, signr, oldset); else setup_frame(&ka->sa, regs, signr, oldset, info); } - if(ka->sa.sa_flags & SA_ONESHOT) + if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; - if(!(ka->sa.sa_flags & SA_NOMASK)) { + if (!(ka->sa.sa_flags & SA_NOMASK)) { spin_lock_irq(¤t->sighand->siglock); sigorsets(¤t->blocked,¤t->blocked,&ka->sa.sa_mask); sigaddset(¤t->blocked, signr); @@ -1028,7 +1043,7 @@ regs->psr |= PSR_C; break; case ERESTARTSYS: - if(!(sa->sa_flags & SA_RESTART)) + if (!(sa->sa_flags & SA_RESTART)) goto no_system_call_restart; /* fallthrough */ case ERESTARTNOINTR: @@ -1095,13 +1110,15 @@ } asmlinkage int -do_sys_sigstack(struct sigstack *ssptr, struct sigstack *ossptr, unsigned long sp) +do_sys_sigstack(struct sigstack __user *ssptr, struct sigstack __user *ossptr, + unsigned long sp) { int ret = -EFAULT; /* First see if old state is wanted. */ if (ossptr) { - if (put_user(current->sas_ss_sp + current->sas_ss_size, &ossptr->the_stack) || + if (put_user(current->sas_ss_sp + current->sas_ss_size, + &ossptr->the_stack) || __put_user(on_sig_stack(sp), &ossptr->cur_status)) goto out; } diff -Nru a/arch/sparc/kernel/sparc_ksyms.c b/arch/sparc/kernel/sparc_ksyms.c --- a/arch/sparc/kernel/sparc_ksyms.c Sat Apr 12 14:44:06 2003 +++ b/arch/sparc/kernel/sparc_ksyms.c Sat Apr 12 14:44:06 2003 @@ -127,6 +127,7 @@ EXPORT_SYMBOL(__down_interruptible); EXPORT_SYMBOL(sparc_valid_addr_bitmap); +EXPORT_SYMBOL(phys_base); /* Atomic operations. */ EXPORT_SYMBOL_PRIVATE(_atomic_add); diff -Nru a/arch/sparc/kernel/sys_sparc.c b/arch/sparc/kernel/sys_sparc.c --- a/arch/sparc/kernel/sys_sparc.c Sat Apr 12 14:44:07 2003 +++ b/arch/sparc/kernel/sys_sparc.c Sat Apr 12 14:44:07 2003 @@ -113,7 +113,7 @@ * This is really horribly ugly. */ -asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr, long fifth) +asmlinkage int sys_ipc (uint call, int first, int second, int third, void __user *ptr, long fifth) { int version, err; @@ -123,7 +123,7 @@ if (call <= SEMCTL) switch (call) { case SEMOP: - err = sys_semop (first, (struct sembuf *)ptr, second); + err = sys_semop (first, (struct sembuf __user *)ptr, second); goto out; case SEMGET: err = sys_semget (first, second, third); @@ -134,19 +134,19 @@ if (!ptr) goto out; err = -EFAULT; - if(get_user(fourth.__pad, (void **)ptr)) + if(get_user(fourth.__pad, (void __user **)ptr)) goto out; err = sys_semctl (first, second, third, fourth); goto out; } default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= MSGCTL) switch (call) { case MSGSND: - err = sys_msgsnd (first, (struct msgbuf *) ptr, + err = sys_msgsnd (first, (struct msgbuf __user *) ptr, second, third); goto out; case MSGRCV: @@ -157,7 +157,7 @@ if (!ptr) goto out; err = -EFAULT; - if(copy_from_user(&tmp,(struct ipc_kludge *) ptr, sizeof (tmp))) + if (copy_from_user(&tmp, (struct ipc_kludge __user *) ptr, sizeof (tmp))) goto out; err = sys_msgrcv (first, tmp.msgp, second, tmp.msgtyp, third); goto out; @@ -170,10 +170,10 @@ err = sys_msgget ((key_t) first, second); goto out; case MSGCTL: - err = sys_msgctl (first, second, (struct msqid_ds *) ptr); + err = sys_msgctl (first, second, (struct msqid_ds __user *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= SHMCTL) @@ -182,34 +182,34 @@ switch (version) { case 0: default: { ulong raddr; - err = sys_shmat (first, (char *) ptr, second, &raddr); + err = sys_shmat (first, (char __user *) ptr, second, &raddr); if (err) goto out; err = -EFAULT; - if(put_user (raddr, (ulong *) third)) + if (put_user (raddr, (ulong __user *) third)) goto out; err = 0; goto out; } case 1: /* iBCS2 emulator entry point */ - err = sys_shmat (first, (char *) ptr, second, (ulong *) third); + err = sys_shmat (first, (char __user *) ptr, second, (ulong __user *) third); goto out; } case SHMDT: - err = sys_shmdt ((char *)ptr); + err = sys_shmdt ((char __user *)ptr); goto out; case SHMGET: err = sys_shmget (first, second, third); goto out; case SHMCTL: - err = sys_shmctl (first, second, (struct shmid_ds *) ptr); + err = sys_shmctl (first, second, (struct shmid_ds __user *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } else - err = -EINVAL; + err = -ENOSYS; out: return err; } @@ -344,9 +344,11 @@ c_sys_nis_syscall (struct pt_regs *regs) { static int count = 0; - - if (count++ > 5) return -ENOSYS; - printk ("%s[%d]: Unimplemented SPARC system call %d\n", current->comm, current->pid, (int)regs->u_regs[1]); + + if (count++ > 5) + return -ENOSYS; + printk ("%s[%d]: Unimplemented SPARC system call %d\n", + current->comm, current->pid, (int)regs->u_regs[1]); #ifdef DEBUG_UNIMP_SYSCALL show_regs (regs); #endif @@ -378,8 +380,8 @@ } asmlinkage int -sparc_sigaction (int sig, const struct old_sigaction *act, - struct old_sigaction *oact) +sparc_sigaction (int sig, const struct old_sigaction __user *act, + struct old_sigaction __user *oact) { struct k_sigaction new_ka, old_ka; int ret; @@ -422,8 +424,11 @@ } asmlinkage int -sys_rt_sigaction(int sig, const struct sigaction *act, struct sigaction *oact, - void *restorer, size_t sigsetsize) +sys_rt_sigaction(int sig, + const struct sigaction __user *act, + struct sigaction __user *oact, + void __user *restorer, + size_t sigsetsize) { struct k_sigaction new_ka, old_ka; int ret; @@ -453,7 +458,7 @@ return ret; } -asmlinkage int sys_getdomainname(char *name, int len) +asmlinkage int sys_getdomainname(char __user *name, int len) { int nlen; int err = -EFAULT; @@ -464,9 +469,9 @@ if (nlen < len) len = nlen; - if(len > __NEW_UTS_LEN) + if (len > __NEW_UTS_LEN) goto done; - if(copy_to_user(name, system_utsname.domainname, len)) + if (copy_to_user(name, system_utsname.domainname, len)) goto done; err = 0; done: diff -Nru a/arch/sparc/mm/srmmu.c b/arch/sparc/mm/srmmu.c --- a/arch/sparc/mm/srmmu.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc/mm/srmmu.c Sat Apr 12 14:44:08 2003 @@ -2162,6 +2162,16 @@ #endif +static pte_t srmmu_pgoff_to_pte(unsigned long pgoff) +{ + return __pte((pgoff << SRMMU_PTE_FILE_SHIFT) | SRMMU_FILE); +} + +static unsigned long srmmu_pte_to_pgoff(pte_t pte) +{ + return pte_val(pte) >> SRMMU_PTE_FILE_SHIFT; +} + /* Load up routines and constants for sun4m and sun4d mmu */ void __init ld_mmu_srmmu(void) { @@ -2188,7 +2198,9 @@ BTFIXUPSET_INT(page_kernel, pgprot_val(SRMMU_PAGE_KERNEL)); page_kernel = pgprot_val(SRMMU_PAGE_KERNEL); pg_iobits = SRMMU_VALID | SRMMU_WRITE | SRMMU_REF; - + + BTFIXUPSET_SIMM13(pte_file_max_bits, SRMMU_PTE_FILE_MAX_BITS); + /* Functions */ #ifndef CONFIG_SMP BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4md, BTFIXUPCALL_SWAPG1G2); @@ -2239,6 +2251,7 @@ BTFIXUPSET_HALF(pte_writei, SRMMU_WRITE); BTFIXUPSET_HALF(pte_dirtyi, SRMMU_DIRTY); BTFIXUPSET_HALF(pte_youngi, SRMMU_REF); + BTFIXUPSET_HALF(pte_filei, SRMMU_FILE); BTFIXUPSET_HALF(pte_wrprotecti, SRMMU_WRITE); BTFIXUPSET_HALF(pte_mkcleani, SRMMU_DIRTY); BTFIXUPSET_HALF(pte_mkoldi, SRMMU_REF); @@ -2252,6 +2265,9 @@ BTFIXUPSET_CALL(alloc_thread_info, srmmu_alloc_thread_info, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(free_thread_info, srmmu_free_thread_info, BTFIXUPCALL_NORM); + + BTFIXUPSET_CALL(pte_to_pgoff, srmmu_pte_to_pgoff, BTFIXUPCALL_NORM); + BTFIXUPSET_CALL(pgoff_to_pte, srmmu_pgoff_to_pte, BTFIXUPCALL_NORM); get_srmmu_type(); patch_window_trap_handlers(); diff -Nru a/arch/sparc/mm/sun4c.c b/arch/sparc/mm/sun4c.c --- a/arch/sparc/mm/sun4c.c Sat Apr 12 14:44:09 2003 +++ b/arch/sparc/mm/sun4c.c Sat Apr 12 14:44:09 2003 @@ -1798,9 +1798,20 @@ static unsigned long sun4c_pte_pfn(pte_t pte) { - return (unsigned long)(pte_val(pte) & SUN4C_PFN_MASK); + return pte_val(pte) & SUN4C_PFN_MASK; } +static pte_t sun4c_pgoff_to_pte(unsigned long pgoff) +{ + return __pte(pgoff | _SUN4C_PAGE_FILE); +} + +static unsigned long sun4c_pte_to_pgoff(pte_t pte) +{ + return pte_val(pte) & ((1UL << SUN4C_PTE_FILE_MAX_BITS) - 1); +} + + static __inline__ unsigned long sun4c_pmd_page_v(pmd_t pmd) { return (pmd_val(pmd) & PAGE_MASK); @@ -2115,7 +2126,9 @@ page_kernel = pgprot_val(SUN4C_PAGE_KERNEL); pg_iobits = _SUN4C_PAGE_PRESENT | _SUN4C_READABLE | _SUN4C_WRITEABLE | _SUN4C_PAGE_IO | _SUN4C_PAGE_NOCACHE; - + + BTFIXUPSET_SIMM13(pte_file_max_bits, SUN4C_PTE_FILE_MAX_BITS); + /* Functions */ BTFIXUPSET_CALL(___xchg32, ___xchg32_sun4c, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(do_check_pgt_cache, sun4c_check_pgt_cache, BTFIXUPCALL_NORM); @@ -2190,6 +2203,7 @@ BTFIXUPSET_HALF(pte_writei, _SUN4C_PAGE_WRITE); BTFIXUPSET_HALF(pte_dirtyi, _SUN4C_PAGE_MODIFIED); BTFIXUPSET_HALF(pte_youngi, _SUN4C_PAGE_ACCESSED); + BTFIXUPSET_HALF(pte_filei, _SUN4C_PAGE_FILE); BTFIXUPSET_HALF(pte_wrprotecti, _SUN4C_PAGE_WRITE|_SUN4C_PAGE_SILENT_WRITE); BTFIXUPSET_HALF(pte_mkcleani, _SUN4C_PAGE_MODIFIED|_SUN4C_PAGE_SILENT_WRITE); BTFIXUPSET_HALF(pte_mkoldi, _SUN4C_PAGE_ACCESSED|_SUN4C_PAGE_SILENT_READ); @@ -2197,6 +2211,9 @@ BTFIXUPSET_CALL(pte_mkdirty, sun4c_pte_mkdirty, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(pte_mkyoung, sun4c_pte_mkyoung, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(update_mmu_cache, sun4c_update_mmu_cache, BTFIXUPCALL_NORM); + + BTFIXUPSET_CALL(pte_to_pgoff, sun4c_pte_to_pgoff, BTFIXUPCALL_NORM); + BTFIXUPSET_CALL(pgoff_to_pte, sun4c_pgoff_to_pte, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(mmu_lockarea, sun4c_lockarea, BTFIXUPCALL_NORM); BTFIXUPSET_CALL(mmu_unlockarea, sun4c_unlockarea, BTFIXUPCALL_NORM); diff -Nru a/arch/sparc64/kernel/ioctl32.c b/arch/sparc64/kernel/ioctl32.c --- a/arch/sparc64/kernel/ioctl32.c Sat Apr 12 14:44:09 2003 +++ b/arch/sparc64/kernel/ioctl32.c Sat Apr 12 14:44:09 2003 @@ -107,15 +107,9 @@ #include /* Use this to get at 32-bit user passed pointers. - See sys_sparc32.c for description about these. */ -#define A(__x) ((unsigned long)(__x)) -#define AA(__x) \ -({ unsigned long __ret; \ - __asm__ ("srl %0, 0, %0" \ - : "=r" (__ret) \ - : "0" (__x)); \ - __ret; \ -}) + * See sys_sparc32.c for description about it. + */ +#define A(__x) ((void __user *)(unsigned long)(__x)) /* Aiee. Someone does not find a difference between int and long */ #define EXT2_IOC32_GETFLAGS _IOR('f', 1, int) @@ -261,7 +255,7 @@ static int get_video_window32(struct video_window *kp, struct video_window32 *up) { - struct video_clip32 *ucp; + struct video_clip32 __user *ucp; struct video_clip *kcp; int nclips, err, i; u32 tmp; @@ -275,7 +269,7 @@ __get_user(kp->flags, &up->flags); __get_user(kp->clipcount, &up->clipcount); __get_user(tmp, &up->clips); - ucp = (struct video_clip32 *)A(tmp); + ucp = A(tmp); kp->clips = NULL; nclips = kp->clipcount; @@ -487,7 +481,7 @@ { struct ifconf32 ifc32; struct ifconf ifc; - struct ifreq32 *ifr32; + struct ifreq32 __user *ifr32; struct ifreq *ifr; mm_segment_t old_fs; unsigned int i, j; @@ -508,7 +502,7 @@ return -ENOMEM; } ifr = ifc.ifc_req; - ifr32 = (struct ifreq32 *)A(ifc32.ifcbuf); + ifr32 = A(ifc32.ifcbuf); for (i = 0; i < ifc32.ifc_len; i += sizeof (struct ifreq32)) { if (copy_from_user(ifr++, ifr32++, sizeof (struct ifreq32))) { kfree (ifc.ifc_buf); @@ -520,7 +514,7 @@ set_fs (old_fs); if (!err) { ifr = ifc.ifc_req; - ifr32 = (struct ifreq32 *)A(ifc32.ifcbuf); + ifr32 = A(ifc32.ifcbuf); for (i = 0, j = 0; i < ifc32.ifc_len && j < ifc.ifc_len; i += sizeof (struct ifreq32), j += sizeof (struct ifreq)) { if (copy_to_user(ifr32++, ifr++, sizeof (struct ifreq32))) { @@ -566,7 +560,7 @@ __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data)); - if (get_user(ethcmd, (u32 *)A(data))) { + if (get_user(ethcmd, (u32 __user *) A(data))) { err = -EFAULT; goto out; } @@ -577,7 +571,7 @@ case ETHTOOL_GLINK: case ETHTOOL_NWAY_RST: len = sizeof(struct ethtool_value); break; case ETHTOOL_GREGS: { - struct ethtool_regs *regaddr = (struct ethtool_regs *)A(data); + struct ethtool_regs __user *regaddr = A(data); /* darned variable size arguments */ if (get_user(len, (u32 *)®addr->len)) { err = -EFAULT; @@ -593,7 +587,7 @@ goto out; } - if (copy_from_user(ifr.ifr_data, (char *)A(data), len)) { + if (copy_from_user(ifr.ifr_data, A(data), len)) { err = -EFAULT; goto out; } @@ -606,7 +600,7 @@ u32 data; __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data)); - len = copy_to_user((char *)A(data), ifr.ifr_data, len); + len = copy_to_user(A(data), ifr.ifr_data, len); if (len) err = -EFAULT; } @@ -648,7 +642,7 @@ }; __get_user(data, &(((struct ifreq32 *)arg)->ifr_ifru.ifru_data)); - if (copy_from_user(ifr.ifr_data, (char *)A(data), len)) { + if (copy_from_user(ifr.ifr_data, A(data), len)) { err = -EFAULT; goto out; } @@ -658,7 +652,7 @@ err = sys_ioctl (fd, cmd, (unsigned long)&ifr); set_fs (old_fs); if (!err) { - len = copy_to_user((char *)A(data), ifr.ifr_data, len); + len = copy_to_user(A(data), ifr.ifr_data, len); if (len) err = -EFAULT; } @@ -684,7 +678,7 @@ struct ifreq *u_ifreq64; struct ifreq32 *u_ifreq32 = (struct ifreq32 *) arg; char tmp_buf[IFNAMSIZ]; - void *data64; + void __user *data64; u32 data32; if (copy_from_user(&tmp_buf[0], &(u_ifreq32->ifr_ifrn.ifrn_name[0]), @@ -692,7 +686,7 @@ return -EFAULT; if (__get_user(data32, &u_ifreq32->ifr_ifru.ifru_data)) return -EFAULT; - data64 = (void *) A(data32); + data64 = A(data32); u_ifreq64 = alloc_user_space(sizeof(*u_ifreq64)); @@ -829,7 +823,7 @@ ret |= __get_user (r4.rt_irtt, &(((struct rtentry32 *)arg)->rt_irtt)); ret |= __get_user (rtdev, &(((struct rtentry32 *)arg)->rt_dev)); if (rtdev) { - ret |= copy_from_user (devname, (char *)A(rtdev), 15); + ret |= copy_from_user (devname, A(rtdev), 15); r4.rt_dev = devname; devname[15] = 0; } else r4.rt_dev = 0; @@ -932,9 +926,9 @@ if (f.index + f.count > 256) f.count = 256 - f.index; if (cmd == FBIOPUTCMAP32) { - ret = copy_from_user (red, (char *)A(r), f.count); - ret |= copy_from_user (green, (char *)A(g), f.count); - ret |= copy_from_user (blue, (char *)A(b), f.count); + ret = copy_from_user (red, A(r), f.count); + ret |= copy_from_user (green, A(g), f.count); + ret |= copy_from_user (blue, A(b), f.count); if (ret) return -EFAULT; } @@ -943,9 +937,9 @@ ret = sys_ioctl (fd, (cmd == FBIOPUTCMAP32) ? FBIOPUTCMAP_SPARC : FBIOGETCMAP_SPARC, (long)&f); set_fs (old_fs); if (!ret && cmd == FBIOGETCMAP32) { - ret = copy_to_user ((char *)A(r), red, f.count); - ret |= copy_to_user ((char *)A(g), green, f.count); - ret |= copy_to_user ((char *)A(b), blue, f.count); + ret = copy_to_user (A(r), red, f.count); + ret |= copy_to_user (A(g), green, f.count); + ret |= copy_to_user (A(b), blue, f.count); } return ret ? -EFAULT : 0; } @@ -989,16 +983,16 @@ if (f.set & FB_CUR_SETCMAP) { if ((uint) f.size.y > 32) return -EINVAL; - ret = copy_from_user (mask, (char *)A(m), f.size.y * 4); - ret |= copy_from_user (image, (char *)A(i), f.size.y * 4); + ret = copy_from_user (mask, A(m), f.size.y * 4); + ret |= copy_from_user (image, A(i), f.size.y * 4); if (ret) return -EFAULT; f.image = image; f.mask = mask; } if (f.set & FB_CUR_SETCMAP) { - ret = copy_from_user (red, (char *)A(r), 2); - ret |= copy_from_user (green, (char *)A(g), 2); - ret |= copy_from_user (blue, (char *)A(b), 2); + ret = copy_from_user (red, A(r), 2); + ret |= copy_from_user (green, A(g), 2); + ret |= copy_from_user (blue, A(b), 2); if (ret) return -EFAULT; f.cmap.red = red; f.cmap.green = green; f.cmap.blue = blue; @@ -1081,10 +1075,10 @@ if (cmd == FBIOGETCMAP) break; - err = __copy_from_user(cmap.red, (char *)A(red), cmap.len * sizeof(__u16)); - err |= __copy_from_user(cmap.green, (char *)A(green), cmap.len * sizeof(__u16)); - err |= __copy_from_user(cmap.blue, (char *)A(blue), cmap.len * sizeof(__u16)); - if (cmap.transp) err |= __copy_from_user(cmap.transp, (char *)A(transp), cmap.len * sizeof(__u16)); + err = __copy_from_user(cmap.red, A(red), cmap.len * sizeof(__u16)); + err |= __copy_from_user(cmap.green, A(green), cmap.len * sizeof(__u16)); + err |= __copy_from_user(cmap.blue, A(blue), cmap.len * sizeof(__u16)); + if (cmap.transp) err |= __copy_from_user(cmap.transp, A(transp), cmap.len * sizeof(__u16)); if (err) { err = -EFAULT; goto out; @@ -1123,11 +1117,11 @@ err |= __copy_to_user((char *)((struct fb_fix_screeninfo32 *)arg)->reserved, (char *)fix.reserved, sizeof(fix.reserved)); break; case FBIOGETCMAP: - err = __copy_to_user((char *)A(red), cmap.red, cmap.len * sizeof(__u16)); - err |= __copy_to_user((char *)A(green), cmap.blue, cmap.len * sizeof(__u16)); - err |= __copy_to_user((char *)A(blue), cmap.blue, cmap.len * sizeof(__u16)); + err = __copy_to_user(A(red), cmap.red, cmap.len * sizeof(__u16)); + err |= __copy_to_user(A(green), cmap.blue, cmap.len * sizeof(__u16)); + err |= __copy_to_user(A(blue), cmap.blue, cmap.len * sizeof(__u16)); if (cmap.transp) - err |= __copy_to_user((char *)A(transp), cmap.transp, cmap.len * sizeof(__u16)); + err |= __copy_to_user(A(transp), cmap.transp, cmap.len * sizeof(__u16)); break; case FBIOPUTCMAP: break; @@ -1504,7 +1498,7 @@ static int alloc_sg_iovec(sg_io_hdr_t *sgp, u32 uptr32) { - sg_iovec32_t *uiov = (sg_iovec32_t *) A(uptr32); + sg_iovec32_t __user *uiov = A(uptr32); sg_iovec_t *kiov; int i; @@ -1526,7 +1520,7 @@ if (!kiov->iov_base) return -ENOMEM; if (copy_from_user(kiov->iov_base, - (void *) A(iov_base32), + A(iov_base32), kiov->iov_len)) return -EFAULT; @@ -1539,7 +1533,7 @@ static int copy_back_sg_iovec(sg_io_hdr_t *sgp, u32 uptr32) { - sg_iovec32_t *uiov = (sg_iovec32_t *) A(uptr32); + sg_iovec32_t __user *uiov = A(uptr32); sg_iovec_t *kiov = (sg_iovec_t *) sgp->dxferp; int i; @@ -1549,7 +1543,7 @@ if (__get_user(iov_base32, &uiov->iov_base)) return -EFAULT; - if (copy_to_user((void *) A(iov_base32), + if (copy_to_user(A(iov_base32), kiov->iov_base, kiov->iov_len)) return -EFAULT; @@ -1607,7 +1601,7 @@ goto out; } if (copy_from_user(sg_io64.cmdp, - (void *) A(cmdp32), + A(cmdp32), sg_io64.cmd_len)) { err = -EFAULT; goto out; @@ -1620,7 +1614,7 @@ goto out; } if (copy_from_user(sg_io64.sbp, - (void *) A(sbp32), + A(sbp32), sg_io64.mx_sb_len)) { err = -EFAULT; goto out; @@ -1641,7 +1635,7 @@ goto out; } if (copy_from_user(sg_io64.dxferp, - (void *) A(dxferp32), + A(dxferp32), sg_io64.dxfer_len)) { err = -EFAULT; goto out; @@ -1672,12 +1666,12 @@ err |= __put_user(sg_io64.resid, &sg_io32->resid); err |= __put_user(sg_io64.duration, &sg_io32->duration); err |= __put_user(sg_io64.info, &sg_io32->info); - err |= copy_to_user((void *)A(sbp32), sg_io64.sbp, sg_io64.mx_sb_len); + err |= copy_to_user(A(sbp32), sg_io64.sbp, sg_io64.mx_sb_len); if (sg_io64.dxferp) { if (sg_io64.iovec_count) err |= copy_back_sg_iovec(&sg_io64, dxferp32); else - err |= copy_to_user((void *)A(dxferp32), + err |= copy_to_user(A(dxferp32), sg_io64.dxferp, sg_io64.dxfer_len); } @@ -1711,7 +1705,7 @@ { struct sock_fprog32 *u_fprog32 = (struct sock_fprog32 *) arg; struct sock_fprog *u_fprog64 = alloc_user_space(sizeof(struct sock_fprog)); - void *fptr64; + void __user *fptr64; u32 fptr32; u16 flen; @@ -1719,7 +1713,7 @@ get_user(fptr32, &u_fprog32->filter)) return -EFAULT; - fptr64 = (void *) A(fptr32); + fptr64 = A(fptr32); if (put_user(flen, &u_fprog64->len) || put_user(fptr64, &u_fprog64->filter)) @@ -1768,7 +1762,7 @@ data.ptr = kmalloc (data32.length, GFP_KERNEL); if (!data.ptr) return -ENOMEM; - if (copy_from_user(data.ptr, (__u8 *)A(data32.ptr), data32.length)) { + if (copy_from_user(data.ptr, A(data32.ptr), data32.length)) { kfree(data.ptr); return -EFAULT; } @@ -2025,13 +2019,13 @@ case CDROMREADMODE1: case CDROMREADRAW: case CDROMREADCOOKED: - err = copy_to_user((char *)A(addr), data, cdread.cdread_buflen); + err = copy_to_user(A(addr), data, cdread.cdread_buflen); break; case CDROMREADAUDIO: - err = copy_to_user((char *)A(addr), data, cdreadaudio.nframes * 2352); + err = copy_to_user(A(addr), data, cdreadaudio.nframes * 2352); break; case CDROM_SEND_PACKET: - err = copy_to_user((char *)A(addr), data, cgc.buflen); + err = copy_to_user(A(addr), data, cgc.buflen); break; default: break; @@ -2148,7 +2142,7 @@ if (copy_from_user(&cfdarg, user_cfd, sizeof(struct consolefontdesc32))) return -EFAULT; - cfdarg.chardata = (unsigned char *)A(((struct consolefontdesc32 *)&cfdarg)->chardata); + cfdarg.chardata = A(((struct consolefontdesc32 *)&cfdarg)->chardata); switch (cmd) { case PIO_FONTX: @@ -2203,7 +2197,7 @@ return -EFAULT; if (!perm && op.op != KD_FONT_OP_GET) return -EPERM; - op.data = (unsigned char *)A(((struct console_font_op32 *)&op)->data); + op.data = A(((struct console_font_op32 *)&op)->data); op.flags |= KD_FONT_FLAG_OLD; vt = (struct vt_struct *)((struct tty_struct *)file->private_data)->driver_data; i = con_font_op(vt->vc_num, &op); @@ -2230,9 +2224,9 @@ switch (cmd) { case PIO_UNIMAP: if (!perm) return -EPERM; - return con_set_unimap(fg_console, tmp.entry_ct, (struct unipair *)A(tmp.entries)); + return con_set_unimap(fg_console, tmp.entry_ct, A(tmp.entries)); case GIO_UNIMAP: - return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), (struct unipair *)A(tmp.entries)); + return con_get_unimap(fg_console, tmp.entry_ct, &(user_ud->entry_ct), A(tmp.entries)); } return 0; } @@ -2907,9 +2901,9 @@ int err, i; u32 ptr1, ptr2; size_t size; - lv_block_exception32_t *lbe32; + lv_block_exception32_t __user *lbe32; lv_block_exception_t *lbe; - lv32_t *ul = (lv32_t *)A(p); + lv32_t __user *ul = A(p); lv_t *l = (lv_t *) kmalloc(sizeof(lv_t), GFP_KERNEL); if (!l) { @@ -2933,13 +2927,13 @@ size = l->lv_allocated_le * sizeof(pe_t); l->lv_current_pe = vmalloc(size); if (l->lv_current_pe) - err = copy_from_user(l->lv_current_pe, (void *)A(ptr1), size); + err = copy_from_user(l->lv_current_pe, A(ptr1), size); } if (!err && ptr2) { size = l->lv_remap_end * sizeof(lv_block_exception_t); l->lv_block_exception = lbe = vmalloc(size); if (l->lv_block_exception) { - lbe32 = (lv_block_exception32_t *)A(ptr2); + lbe32 = A(ptr2); memset(lbe, 0, size); for (i = 0; i < l->lv_remap_end; i++, lbe++, lbe32++) { err |= get_user(lbe->rsector_org, &lbe32->rsector_org); @@ -2963,7 +2957,7 @@ static int copy_lv_t(u32 ptr, lv_t *l) { int err; - lv32_t *ul = (lv32_t *)A(ptr); + lv32_t __user *ul = A(ptr); u32 ptr1; size_t size; @@ -2977,7 +2971,7 @@ ((long)&ul->dummy[0]) - ((long)&ul->lv_remap_ptr)); size = l->lv_allocated_le * sizeof(pe_t); if (ptr1) - err |= __copy_to_user((void *)A(ptr1), l->lv_current_pe, size); + err |= __copy_to_user(A(ptr1), l->lv_current_pe, size); return err ? -EFAULT : 0; } @@ -3036,14 +3030,14 @@ err = -ENOMEM; break; } - err = copy_from_user(v->pv[i], (void *)A(ptr), + err = copy_from_user(v->pv[i], A(ptr), sizeof(pv32_t) - 8 - UUID_LEN+1); if (err) { err = -EFAULT; break; } - err = copy_from_user(v->pv[i]->pv_uuid, - ((pv32_t *)A(ptr))->pv_uuid, + err = copy_from_user(&v->pv[i]->pv_uuid[0], + &((pv32_t __user *)A(ptr))->pv_uuid[0], UUID_LEN+1); if (err) { err = -EFAULT; @@ -3125,7 +3119,7 @@ return err; u.pv_status.pv = &p; if (cmd == PV_CHANGE) { - err = copy_from_user(&p, (void *)A(ptr), + err = copy_from_user(&p, A(ptr), sizeof(pv32_t) - 8 - UUID_LEN+1); if (err) return -EFAULT; @@ -3195,10 +3189,10 @@ case PV_STATUS: if (!err) { - err = copy_to_user((void *)A(ptr), &p, sizeof(pv32_t) - 8 - UUID_LEN+1); + err = copy_to_user(A(ptr), &p, sizeof(pv32_t) - 8 - UUID_LEN+1); if (err) return -EFAULT; - err = copy_to_user(((pv_t *)A(ptr))->pv_uuid, p.pv_uuid, UUID_LEN + 1); + err = copy_to_user(&((pv_t __user *)A(ptr))->pv_uuid[0], &p.pv_uuid[0], UUID_LEN + 1); if (err) return -EFAULT; } @@ -3229,7 +3223,7 @@ static int drm32_version(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_version_t *uversion = (drm32_version_t *)arg; - char *name_ptr, *date_ptr, *desc_ptr; + char __user *name_ptr, *date_ptr, *desc_ptr; u32 tmp1, tmp2, tmp3; drm_version_t kversion; mm_segment_t old_fs; @@ -3244,9 +3238,9 @@ get_user(tmp3, &uversion->desc)) return -EFAULT; - name_ptr = (char *) A(tmp1); - date_ptr = (char *) A(tmp2); - desc_ptr = (char *) A(tmp3); + name_ptr = A(tmp1); + date_ptr = A(tmp2); + desc_ptr = A(tmp3); ret = -ENOMEM; if (kversion.name_len && name_ptr) { @@ -3309,7 +3303,7 @@ drm32_unique_t *uarg = (drm32_unique_t *)arg; drm_unique_t karg; mm_segment_t old_fs; - char *uptr; + char __user *uptr; u32 tmp; int ret; @@ -3320,7 +3314,7 @@ if (get_user(tmp, &uarg->unique)) return -EFAULT; - uptr = (char *) A(tmp); + uptr = A(tmp); if (uptr) { karg.unique = kmalloc(karg.unique_len, GFP_KERNEL); @@ -3385,7 +3379,7 @@ if (ret) return -EFAULT; - karg.handle = (void *) A(tmp); + karg.handle = A(tmp); old_fs = get_fs(); set_fs(KERNEL_DS); @@ -3416,7 +3410,7 @@ static int drm32_info_bufs(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_buf_info_t *uarg = (drm32_buf_info_t *)arg; - drm_buf_desc_t *ulist; + drm_buf_desc_t __user *ulist; drm_buf_info_t karg; mm_segment_t old_fs; int orig_count, ret; @@ -3426,7 +3420,7 @@ get_user(tmp, &uarg->list)) return -EFAULT; - ulist = (drm_buf_desc_t *) A(tmp); + ulist = A(tmp); orig_count = karg.count; @@ -3464,7 +3458,7 @@ drm32_buf_free_t *uarg = (drm32_buf_free_t *)arg; drm_buf_free_t karg; mm_segment_t old_fs; - int *ulist; + int __user *ulist; int ret; u32 tmp; @@ -3472,7 +3466,7 @@ get_user(tmp, &uarg->list)) return -EFAULT; - ulist = (int *) A(tmp); + ulist = A(tmp); karg.list = kmalloc(karg.count * sizeof(int), GFP_KERNEL); if (!karg.list) @@ -3510,7 +3504,7 @@ static int drm32_map_bufs(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_buf_map_t *uarg = (drm32_buf_map_t *)arg; - drm32_buf_pub_t *ulist; + drm32_buf_pub_t __user *ulist; drm_buf_map_t karg; mm_segment_t old_fs; int orig_count, ret, i; @@ -3521,8 +3515,8 @@ get_user(tmp2, &uarg->list)) return -EFAULT; - karg.virtual = (void *) A(tmp1); - ulist = (drm32_buf_pub_t *) A(tmp2); + karg.virtual = A(tmp1); + ulist = A(tmp2); orig_count = karg.count; @@ -3538,7 +3532,7 @@ get_user(tmp1, &ulist[i].address)) goto out; - karg.list[i].address = (void *) A(tmp1); + karg.list[i].address = A(tmp1); } old_fs = get_fs(); @@ -3589,7 +3583,7 @@ static int drm32_dma(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_dma_t *uarg = (drm32_dma_t *) arg; - int *u_si, *u_ss, *u_ri, *u_rs; + int __user *u_si, *u_ss, *u_ri, *u_rs; drm_dma_t karg; mm_segment_t old_fs; int ret; @@ -3610,10 +3604,10 @@ get_user(karg.granted_count, &uarg->granted_count)) return -EFAULT; - u_si = (int *) A(tmp1); - u_ss = (int *) A(tmp2); - u_ri = (int *) A(tmp3); - u_rs = (int *) A(tmp4); + u_si = A(tmp1); + u_ss = A(tmp2); + u_ri = A(tmp3); + u_rs = A(tmp4); if (karg.send_count) { karg.send_indices = kmalloc(karg.send_count * sizeof(int), GFP_KERNEL); @@ -3699,7 +3693,7 @@ static int drm32_res_ctx(unsigned int fd, unsigned int cmd, unsigned long arg) { drm32_ctx_res_t *uarg = (drm32_ctx_res_t *) arg; - drm_ctx_t *ulist; + drm_ctx_t __user *ulist; drm_ctx_res_t karg; mm_segment_t old_fs; int orig_count, ret; @@ -3710,7 +3704,7 @@ get_user(tmp, &uarg->contexts)) return -EFAULT; - ulist = (drm_ctx_t *) A(tmp); + ulist = A(tmp); orig_count = karg.count; if (karg.count && ulist) { @@ -3817,7 +3811,8 @@ struct usbdevfs_ctrltransfer32 *uctrl; mm_segment_t old_fs; __u32 udata; - void *uptr, *kptr; + void __user *uptr; + void *kptr; int err; uctrl = (struct usbdevfs_ctrltransfer32 *) arg; @@ -3829,7 +3824,7 @@ if (get_user(udata, &uctrl->data)) return -EFAULT; - uptr = (void *) A(udata); + uptr = A(udata); /* In usbdevice_fs, it limits the control buffer to a page, * for simplicity so do we. @@ -3878,7 +3873,8 @@ struct usbdevfs_bulktransfer32 *ubulk; mm_segment_t old_fs; __u32 udata; - void *uptr, *kptr; + void __user *uptr; + void *kptr; int err; ubulk = (struct usbdevfs_bulktransfer32 *) arg; @@ -3889,7 +3885,7 @@ get_user(udata, &ubulk->data)) return -EFAULT; - uptr = (void *) A(udata); + uptr = A(udata); /* In usbdevice_fs, it limits the control buffer to a page, * for simplicity so do we. @@ -4072,7 +4068,8 @@ struct usbdevfs_urb32 *uurb; mm_segment_t old_fs; __u32 udata; - void *uptr, *kptr; + void __user *uptr; + void *kptr; unsigned int buflen; int err; @@ -4096,7 +4093,7 @@ err = -EFAULT; if (__get_user(udata, &uurb->buffer)) goto out; - uptr = (void *) A(udata); + uptr = A(udata); err = -ENOMEM; buflen = kurb->buffer_length; @@ -4153,7 +4150,7 @@ set_fs(old_fs); if (err >= 0 && - put_user(((u32)(long)kptr), (u32 *) A(arg))) + put_user(((u32)(long)kptr), (u32 __user *) A(arg))) err = -EFAULT; return err; @@ -4205,7 +4202,7 @@ struct mtd_oob_buf32 *uarg = (struct mtd_oob_buf32 *)arg; struct mtd_oob_buf karg; u32 tmp; - char *ptr; + char __user *ptr; int ret; if (get_user(karg.start, &uarg->start) || @@ -4213,7 +4210,7 @@ get_user(tmp, &uarg->ptr)) return -EFAULT; - ptr = (char *)A(tmp); + ptr = A(tmp); if (0 >= karg.length) return -EINVAL; diff -Nru a/arch/sparc64/kernel/process.c b/arch/sparc64/kernel/process.c --- a/arch/sparc64/kernel/process.c Sat Apr 12 14:44:07 2003 +++ b/arch/sparc64/kernel/process.c Sat Apr 12 14:44:07 2003 @@ -473,7 +473,7 @@ distance = fp - psp; rval = (csp - distance); - if (copy_in_user(rval, psp, distance)) + if (copy_in_user((void __user *) rval, (void __user *) psp, distance)) rval = 0; else if (test_thread_flag(TIF_32BIT)) { if (put_user(((u32)csp), &(((struct reg_window32 *)rval)->ins[6]))) diff -Nru a/arch/sparc64/kernel/signal.c b/arch/sparc64/kernel/signal.c --- a/arch/sparc64/kernel/signal.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc64/kernel/signal.c Sat Apr 12 14:44:08 2003 @@ -42,8 +42,8 @@ /* {set, get}context() needed for 64-bit SparcLinux userland. */ asmlinkage void sparc64_set_context(struct pt_regs *regs) { - struct ucontext *ucp = (struct ucontext *) regs->u_regs[UREG_I0]; - mc_gregset_t *grp; + struct ucontext *ucp = (struct ucontext __user *) regs->u_regs[UREG_I0]; + mc_gregset_t __user *grp; unsigned long pc, npc, tstate; unsigned long fp, i7; unsigned char fenab; @@ -104,9 +104,9 @@ err |= __get_user(fp, &(ucp->uc_mcontext.mc_fp)); err |= __get_user(i7, &(ucp->uc_mcontext.mc_i7)); err |= __put_user(fp, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); err |= __put_user(i7, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); err |= __get_user(fenab, &(ucp->uc_mcontext.mc_fpregs.mcfpu_enab)); if (fenab) { @@ -121,7 +121,7 @@ (sizeof(unsigned int) * 32)); if (fprs & FPRS_DU) err |= copy_from_user(fpregs+16, - ((unsigned long *)&(ucp->uc_mcontext.mc_fpregs.mcfpu_fregs))+16, + ((unsigned long __user *)&(ucp->uc_mcontext.mc_fpregs.mcfpu_fregs))+16, (sizeof(unsigned int) * 32)); err |= __get_user(current_thread_info()->xfsr[0], &(ucp->uc_mcontext.mc_fpregs.mcfpu_fsr)); @@ -139,9 +139,9 @@ asmlinkage void sparc64_get_context(struct pt_regs *regs) { - struct ucontext *ucp = (struct ucontext *) regs->u_regs[UREG_I0]; - mc_gregset_t *grp; - mcontext_t *mcp; + struct ucontext *ucp = (struct ucontext __user *) regs->u_regs[UREG_I0]; + mc_gregset_t __user *grp; + mcontext_t __user *mcp; unsigned long fp, i7; unsigned char fenab; int err; @@ -170,7 +170,7 @@ err = 0; if (_NSIG_WORDS == 1) err |= __put_user(current->blocked.sig[0], - (unsigned long *)&ucp->uc_sigmask); + (unsigned long __user *)&ucp->uc_sigmask); else err |= __copy_to_user(&ucp->uc_sigmask, ¤t->blocked, sizeof(sigset_t)); @@ -196,9 +196,9 @@ err |= __put_user(regs->u_regs[UREG_I7], &((*grp)[MC_O7])); err |= __get_user(fp, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[6]))); err |= __get_user(i7, - (&(((struct reg_window *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); + (&(((struct reg_window __user *)(STACK_BIAS+regs->u_regs[UREG_I6]))->ins[7]))); err |= __put_user(fp, &(mcp->mc_fp)); err |= __put_user(i7, &(mcp->mc_i7)); @@ -213,7 +213,7 @@ (sizeof(unsigned int) * 32)); if (fprs & FPRS_DU) err |= copy_to_user( - ((unsigned long *)&(mcp->mc_fpregs.mcfpu_fregs))+16, fpregs+16, + ((unsigned long __user *)&(mcp->mc_fpregs.mcfpu_fregs))+16, fpregs+16, (sizeof(unsigned int) * 32)); err |= __put_user(current_thread_info()->xfsr[0], &(mcp->mc_fpregs.mcfpu_fsr)); err |= __put_user(current_thread_info()->gsr[0], &(mcp->mc_fpregs.mcfpu_gsr)); @@ -231,7 +231,7 @@ struct sparc_stackf ss; siginfo_t info; struct pt_regs regs; - __siginfo_fpu_t * fpu_save; + __siginfo_fpu_t __user *fpu_save; stack_t stack; sigset_t mask; __siginfo_fpu_t fpu_state; @@ -300,7 +300,7 @@ _sigpause_common(regs->u_regs[UREG_I0], regs); } -asmlinkage void do_rt_sigsuspend(sigset_t *uset, size_t sigsetsize, struct pt_regs *regs) +asmlinkage void do_rt_sigsuspend(sigset_t __user *uset, size_t sigsetsize, struct pt_regs *regs) { sigset_t oldset, set; @@ -351,7 +351,7 @@ } static inline int -restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +restore_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = current_thread_info()->fpregs; unsigned long fprs; @@ -374,16 +374,16 @@ void do_rt_sigreturn(struct pt_regs *regs) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; unsigned long tpc, tnpc, tstate; - __siginfo_fpu_t *fpu_save; + __siginfo_fpu_t __user *fpu_save; mm_segment_t old_fs; sigset_t set; stack_t st; int err; synchronize_user_stack (); - sf = (struct rt_signal_frame *) + sf = (struct rt_signal_frame __user *) (regs->u_regs [UREG_FP] + STACK_BIAS); /* 1. Make sure we are not getting garbage from the user */ @@ -438,7 +438,7 @@ } /* Checks if the fp is valid */ -static int invalid_frame_pointer(void *fp, int fplen) +static int invalid_frame_pointer(void __user *fp, int fplen) { if (((unsigned long) fp) & 7) return 1; @@ -446,7 +446,7 @@ } static inline int -save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t *fpu) +save_fpu_state(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = (unsigned long *)(regs+1); unsigned long fprs; @@ -466,7 +466,7 @@ return err; } -static inline void *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, unsigned long framesize) +static inline void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, unsigned long framesize) { unsigned long sp; @@ -478,14 +478,14 @@ !((current->sas_ss_sp + current->sas_ss_size) & 7)) sp = current->sas_ss_sp + current->sas_ss_size; } - return (void *)(sp - framesize); + return (void __user *)(sp - framesize); } static inline void setup_rt_frame(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset, siginfo_t *info) { - struct rt_signal_frame *sf; + struct rt_signal_frame __user *sf; int sigframe_size, err; /* 1. Make sure everything is clean */ @@ -496,7 +496,8 @@ if (!(current_thread_info()->fpsaved[0] & FPRS_FEF)) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct rt_signal_frame *)get_sigframe(ka, regs, sigframe_size); + sf = (struct rt_signal_frame __user *) + get_sigframe(ka, regs, sigframe_size); if (invalid_frame_pointer (sf, sigframe_size)) goto sigill; @@ -521,8 +522,8 @@ err |= copy_to_user(&sf->mask, oldset, sizeof(sigset_t)); - err |= copy_in_user((u64 *)sf, - (u64 *)(regs->u_regs[UREG_FP]+STACK_BIAS), + err |= copy_in_user((u64 __user *)sf, + (u64 __user *)(regs->u_regs[UREG_FP]+STACK_BIAS), sizeof(struct reg_window)); if (info) @@ -560,7 +561,8 @@ siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) { - setup_rt_frame(ka, regs, signr, oldset, (ka->sa.sa_flags & SA_SIGINFO) ? info : NULL); + setup_rt_frame(ka, regs, signr, oldset, + (ka->sa.sa_flags & SA_SIGINFO) ? info : NULL); if (ka->sa.sa_flags & SA_ONESHOT) ka->sa.sa_handler = SIG_DFL; if (!(ka->sa.sa_flags & SA_NOMASK)) { diff -Nru a/arch/sparc64/kernel/signal32.c b/arch/sparc64/kernel/signal32.c --- a/arch/sparc64/kernel/signal32.c Sat Apr 12 14:44:05 2003 +++ b/arch/sparc64/kernel/signal32.c Sat Apr 12 14:44:05 2003 @@ -56,7 +56,7 @@ /* struct sigcontext32 * */ u32 sig_scptr; int sig_address; struct sigcontext32 sig_context; - unsigned extramask[_COMPAT_NSIG_WORDS - 1]; + unsigned int extramask[_COMPAT_NSIG_WORDS - 1]; }; /* @@ -68,9 +68,9 @@ struct sparc_stackf32 ss; __siginfo32_t info; /* __siginfo_fpu32_t * */ u32 fpu_save; - unsigned int insns [2]; - unsigned extramask[_COMPAT_NSIG_WORDS - 1]; - unsigned extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ + unsigned int insns[2]; + unsigned int extramask[_COMPAT_NSIG_WORDS - 1]; + unsigned int extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ /* Only valid if (info.si_regs.psr & (PSR_VERS|PSR_IMPL)) == PSR_V8PLUS */ siginfo_extra_v8plus_t v8plus; __siginfo_fpu_t fpu_state; @@ -82,9 +82,9 @@ struct pt_regs32 regs; compat_sigset_t mask; /* __siginfo_fpu32_t * */ u32 fpu_save; - unsigned int insns [2]; + unsigned int insns[2]; stack_t32 stack; - unsigned extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ + unsigned int extra_size; /* Should be sizeof(siginfo_extra_v8plus_t) */ /* Only valid if (regs.psr & (PSR_VERS|PSR_IMPL)) == PSR_V8PLUS */ siginfo_extra_v8plus_t v8plus; __siginfo_fpu_t fpu_state; @@ -95,11 +95,11 @@ #define NF_ALIGNEDSZ (((sizeof(struct new_signal_frame32) + 7) & (~7))) #define RT_ALIGNEDSZ (((sizeof(struct rt_signal_frame32) + 7) & (~7))) -int copy_siginfo_to_user32(siginfo_t32 *to, siginfo_t *from) +int copy_siginfo_to_user32(siginfo_t32 __user *to, siginfo_t *from) { int err; - if (!access_ok (VERIFY_WRITE, to, sizeof(siginfo_t32))) + if (!access_ok(VERIFY_WRITE, to, sizeof(siginfo_t32))) return -EFAULT; /* If you change siginfo_t structure, please be sure @@ -187,7 +187,7 @@ regs->u_regs[UREG_I0] = EINVAL; return; } - if (copy_from_user(&set32, (void *)(long)uset, sizeof(set32))) { + if (copy_from_user(&set32, (void __user *)(long)uset, sizeof(set32))) { regs->tstate |= TSTATE_ICARRY; regs->u_regs[UREG_I0] = EFAULT; return; @@ -231,7 +231,7 @@ } } -static int restore_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t *fpu) +static int restore_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = current_thread_info()->fpregs; unsigned long fprs; @@ -252,7 +252,7 @@ void do_new_sigreturn32(struct pt_regs *regs) { - struct new_signal_frame32 *sf; + struct new_signal_frame32 __user *sf; unsigned int psr; unsigned pc, npc, fpu_save; sigset_t set; @@ -260,10 +260,10 @@ int err, i; regs->u_regs[UREG_FP] &= 0x00000000ffffffffUL; - sf = (struct new_signal_frame32 *) regs->u_regs [UREG_FP]; + sf = (struct new_signal_frame32 __user *) regs->u_regs[UREG_FP]; /* 1. Make sure we are not getting garbage from the user */ - if (verify_area (VERIFY_READ, sf, sizeof (*sf)) || + if (verify_area(VERIFY_READ, sf, sizeof(*sf)) || (((unsigned long) sf) & 3)) goto segv; @@ -302,7 +302,8 @@ if (fpu_save) err |= restore_fpu_state32(regs, &sf->fpu_state); err |= __get_user(seta[0], &sf->info.si_mask); - err |= copy_from_user(seta+1, &sf->extramask, (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + err |= copy_from_user(seta+1, &sf->extramask, + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); if (err) goto segv; switch (_NSIG_WORDS) { @@ -324,17 +325,17 @@ asmlinkage void do_sigreturn32(struct pt_regs *regs) { - struct sigcontext32 *scptr; - unsigned pc, npc, psr; + struct sigcontext32 __user *scptr; + unsigned int pc, npc, psr; sigset_t set; - unsigned seta[_COMPAT_NSIG_WORDS]; + unsigned int seta[_COMPAT_NSIG_WORDS]; int err; synchronize_user_stack(); if (test_thread_flag(TIF_NEWSIGNALS)) return do_new_sigreturn32(regs); - scptr = (struct sigcontext32 *) + scptr = (struct sigcontext32 __user *) (regs->u_regs[UREG_I0] & 0x00000000ffffffffUL); /* Check sanity of the user arg. */ if (verify_area(VERIFY_READ, scptr, sizeof(struct sigcontext32)) || @@ -349,7 +350,8 @@ err |= __get_user(seta[0], &scptr->sigc_mask); /* Note that scptr + 1 points to extramask */ - err |= copy_from_user(seta+1, scptr + 1, (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + err |= copy_from_user(seta+1, scptr + 1, + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); if (err) goto segv; switch (_NSIG_WORDS) { @@ -388,9 +390,8 @@ asmlinkage void do_rt_sigreturn32(struct pt_regs *regs) { - struct rt_signal_frame32 *sf; - unsigned int psr; - unsigned pc, npc, fpu_save; + struct rt_signal_frame32 __user *sf; + unsigned int psr, pc, npc, fpu_save; mm_segment_t old_fs; sigset_t set; compat_sigset_t seta; @@ -399,10 +400,10 @@ synchronize_user_stack(); regs->u_regs[UREG_FP] &= 0x00000000ffffffffUL; - sf = (struct rt_signal_frame32 *) regs->u_regs [UREG_FP]; + sf = (struct rt_signal_frame32 __user *) regs->u_regs[UREG_FP]; /* 1. Make sure we are not getting garbage from the user */ - if (verify_area (VERIFY_READ, sf, sizeof (*sf)) || + if (verify_area(VERIFY_READ, sf, sizeof(*sf)) || (((unsigned long) sf) & 3)) goto segv; @@ -471,14 +472,14 @@ } /* Checks if the fp is valid */ -static int invalid_frame_pointer(void *fp, int fplen) +static int invalid_frame_pointer(void __user *fp, int fplen) { if ((((unsigned long) fp) & 7) || ((unsigned long)fp) > 0x100000000ULL - fplen) return 1; return 0; } -static void *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) +static void __user *get_sigframe(struct sigaction *sa, struct pt_regs *regs, unsigned long framesize) { unsigned long sp; @@ -490,25 +491,21 @@ if (!on_sig_stack(sp) && !((current->sas_ss_sp + current->sas_ss_size) & 7)) sp = current->sas_ss_sp + current->sas_ss_size; } - return (void *)(sp - framesize); + return (void __user *)(sp - framesize); } static void setup_frame32(struct sigaction *sa, struct pt_regs *regs, int signr, sigset_t *oldset, siginfo_t *info) { - struct signal_sframe32 *sframep; - struct sigcontext32 *sc; - unsigned seta[_COMPAT_NSIG_WORDS]; + struct signal_sframe32 __user *sframep; + struct sigcontext32 __user *sc; + unsigned int seta[_COMPAT_NSIG_WORDS]; int err = 0; void *sig_address; int sig_code; unsigned long pc = regs->tpc; unsigned long npc = regs->tnpc; - -#if 0 - int window = 0; -#endif - unsigned psr; + unsigned int psr; if (test_thread_flag(TIF_32BIT)) { pc &= 0xffffffff; @@ -518,8 +515,9 @@ synchronize_user_stack(); save_and_clear_fpu(); - sframep = (struct signal_sframe32 *)get_sigframe(sa, regs, SF_ALIGNEDSZ); - if (invalid_frame_pointer (sframep, sizeof(*sframep))){ + sframep = (struct signal_sframe32 __user *) + get_sigframe(sa, regs, SF_ALIGNEDSZ); + if (invalid_frame_pointer(sframep, sizeof(*sframep))){ /* Don't change signal code and address, so that * post mortem debuggers can have a look. */ @@ -544,32 +542,21 @@ } err |= __put_user(seta[0], &sc->sigc_mask); err |= __copy_to_user(sframep->extramask, seta + 1, - (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); err |= __put_user(regs->u_regs[UREG_FP], &sc->sigc_sp); err |= __put_user(pc, &sc->sigc_pc); err |= __put_user(npc, &sc->sigc_npc); - psr = tstate_to_psr (regs->tstate); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; err |= __put_user(psr, &sc->sigc_psr); err |= __put_user(regs->u_regs[UREG_G1], &sc->sigc_g1); err |= __put_user(regs->u_regs[UREG_I0], &sc->sigc_o0); err |= __put_user(get_thread_wsaved(), &sc->sigc_oswins); -#if 0 -/* w_saved is not currently used... */ - if (get_thread_wsaved()) - for (window = 0; window < get_thread_wsaved(); window++) { - sc->sigc_spbuf[window] = - (char *) current_thread_info()->rwbuf_stkptrs[window]; - err |= copy_to_user(&sc->sigc_wbuf[window], - ¤t_thread_info()->reg_window[window], - sizeof(struct reg_window)); - } - else -#endif - err |= copy_in_user((u32 *)sframep, - (u32 *)(regs->u_regs[UREG_FP]), - sizeof(struct reg_window32)); + + err |= copy_in_user((u32 __user *)sframep, + (u32 __user *)(regs->u_regs[UREG_FP]), + sizeof(struct reg_window32)); set_thread_wsaved(0); /* So process is allowed to execute. */ err |= __put_user(signr, &sframep->sig_num); @@ -588,7 +575,7 @@ switch (info->si_code) { case ILL_ILLOPC: sig_code = SUBSIG_ILLINST; break; case ILL_PRVOPC: sig_code = SUBSIG_PRIVINST; break; - case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP (info->si_trapno); break; + case ILL_ILLTRP: sig_code = SUBSIG_BADTRAP(info->si_trapno); break; default: sig_code = SUBSIG_STACK; break; } break; @@ -646,7 +633,7 @@ } -static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t *fpu) +static int save_fpu_state32(struct pt_regs *regs, __siginfo_fpu_t __user *fpu) { unsigned long *fpregs = current_thread_info()->fpregs; unsigned long fprs; @@ -669,11 +656,11 @@ static void new_setup_frame32(struct k_sigaction *ka, struct pt_regs *regs, int signo, sigset_t *oldset) { - struct new_signal_frame32 *sf; + struct new_signal_frame32 __user *sf; int sigframe_size; u32 psr; int i, err; - unsigned seta[_COMPAT_NSIG_WORDS]; + unsigned int seta[_COMPAT_NSIG_WORDS]; /* 1. Make sure everything is clean */ synchronize_user_stack(); @@ -683,9 +670,10 @@ if (!(current_thread_info()->fpsaved[0] & FPRS_FEF)) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct new_signal_frame32 *)get_sigframe(&ka->sa, regs, sigframe_size); + sf = (struct new_signal_frame32 __user *) + get_sigframe(&ka->sa, regs, sigframe_size); - if (invalid_frame_pointer (sf, sigframe_size)) + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill; if (get_thread_wsaved() != 0) @@ -699,7 +687,7 @@ err = put_user(regs->tpc, &sf->info.si_regs.pc); err |= __put_user(regs->tnpc, &sf->info.si_regs.npc); err |= __put_user(regs->y, &sf->info.si_regs.y); - psr = tstate_to_psr (regs->tstate); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; err |= __put_user(psr, &sf->info.si_regs.psr); @@ -729,10 +717,10 @@ } err |= __put_user(seta[0], &sf->info.si_mask); err |= __copy_to_user(sf->extramask, seta + 1, - (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned)); + (_COMPAT_NSIG_WORDS - 1) * sizeof(unsigned int)); - err |= copy_in_user((u32 *)sf, - (u32 *)(regs->u_regs[UREG_FP]), + err |= copy_in_user((u32 __user *)sf, + (u32 __user *)(regs->u_regs[UREG_FP]), sizeof(struct reg_window32)); if (err) @@ -771,7 +759,8 @@ preempt_disable(); ptep = pte_offset_map(pmdp, address); if (pte_present(*ptep)) { - unsigned long page = (unsigned long) page_address(pte_page(*ptep)); + unsigned long page = (unsigned long) + page_address(pte_page(*ptep)); __asm__ __volatile__( " membar #StoreStore\n" @@ -795,30 +784,29 @@ setup_svr4_frame32(struct sigaction *sa, unsigned long pc, unsigned long npc, struct pt_regs *regs, int signr, sigset_t *oldset) { - svr4_signal_frame_t *sfp; - svr4_gregset_t *gr; - svr4_siginfo_t *si; - svr4_mcontext_t *mc; - svr4_gwindows_t *gw; - svr4_ucontext_t *uc; + svr4_signal_frame_t __user *sfp; + svr4_gregset_t __user *gr; + svr4_siginfo_t __user *si; + svr4_mcontext_t __user *mc; + svr4_gwindows_t __user *gw; + svr4_ucontext_t __user *uc; svr4_sigset_t setv; -#if 0 - int window = 0; -#endif - unsigned psr; + unsigned int psr; int i, err; synchronize_user_stack(); save_and_clear_fpu(); regs->u_regs[UREG_FP] &= 0x00000000ffffffffUL; - sfp = (svr4_signal_frame_t *) get_sigframe(sa, regs, sizeof(struct reg_window32) + SVR4_SF_ALIGNED); + sfp = (svr4_signal_frame_t __user *) + get_sigframe(sa, regs, + sizeof(struct reg_window32) + SVR4_SF_ALIGNED); - if (invalid_frame_pointer (sfp, sizeof (*sfp))) + if (invalid_frame_pointer(sfp, sizeof(*sfp))) do_exit(SIGILL); /* Start with a clean frame pointer and fill it */ - err = clear_user(sfp, sizeof (*sfp)); + err = clear_user(sfp, sizeof(*sfp)); /* Setup convenience variables */ si = &sfp->si; @@ -838,22 +826,23 @@ setv.sigbits[3] = (oldset->sig[1] >> 32); err |= __copy_to_user(&uc->sigmask, &setv, sizeof(svr4_sigset_t)); } else - err |= __copy_to_user(&uc->sigmask, &setv, 2 * sizeof(unsigned)); + err |= __copy_to_user(&uc->sigmask, &setv, + 2 * sizeof(unsigned int)); /* Store registers */ if (test_thread_flag(TIF_32BIT)) { regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - err |= __put_user(regs->tpc, &((*gr) [SVR4_PC])); - err |= __put_user(regs->tnpc, &((*gr) [SVR4_NPC])); - psr = tstate_to_psr (regs->tstate); + err |= __put_user(regs->tpc, &((*gr)[SVR4_PC])); + err |= __put_user(regs->tnpc, &((*gr)[SVR4_NPC])); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; - err |= __put_user(psr, &((*gr) [SVR4_PSR])); - err |= __put_user(regs->y, &((*gr) [SVR4_Y])); + err |= __put_user(psr, &((*gr)[SVR4_PSR])); + err |= __put_user(regs->y, &((*gr)[SVR4_Y])); - /* Copy g [1..7] and o [0..7] registers */ + /* Copy g[1..7] and o[0..7] registers */ for (i = 0; i < 7; i++) err |= __put_user(regs->u_regs[UREG_G1+i], (&(*gr)[SVR4_G1])+i); for (i = 0; i < 8; i++) @@ -872,29 +861,7 @@ /* 2. Number of windows to restore at setcontext (): */ err |= __put_user(get_thread_wsaved(), &gw->count); - /* 3. Save each valid window - * Currently, it makes a copy of the windows from the kernel copy. - * David's code for SunOS, makes the copy but keeps the pointer to - * the kernel. My version makes the pointer point to a userland - * copy of those. Mhm, I wonder if I shouldn't just ignore those - * on setcontext and use those that are on the kernel, the signal - * handler should not be modyfing those, mhm. - * - * These windows are just used in case synchronize_user_stack failed - * to flush the user windows. - */ -#if 0 - for (window = 0; window < get_thread_wsaved(); window++) { - err |= __put_user((int *) &(gw->win[window]), - (int **) gw->winptr + window); - err |= copy_to_user(&gw->win[window], - ¤t_thread_info()->reg_window[window], - sizeof (svr4_rwindow_t)); - err |= __put_user(0, (int *) gw->winptr + window); - } -#endif - - /* 4. We just pay attention to the gw->count field on setcontext */ + /* 3. We just pay attention to the gw->count field on setcontext */ set_thread_wsaved(0); /* So process is allowed to execute. */ /* Setup the signal information. Solaris expects a bunch of @@ -915,14 +882,14 @@ } /* Arguments passed to signal handler */ - if (regs->u_regs [14]){ - struct reg_window32 *rw = (struct reg_window32 *) - (regs->u_regs [14] & 0x00000000ffffffffUL); - - err |= __put_user(signr, &rw->ins [0]); - err |= __put_user((u64)si, &rw->ins [1]); - err |= __put_user((u64)uc, &rw->ins [2]); - err |= __put_user((u64)sfp, &rw->ins [6]); /* frame pointer */ + if (regs->u_regs[14]){ + struct reg_window32 __user *rw = (struct reg_window32 __user *) + (regs->u_regs[14] & 0x00000000ffffffffUL); + + err |= __put_user(signr, &rw->ins[0]); + err |= __put_user((u64)si, &rw->ins[1]); + err |= __put_user((u64)uc, &rw->ins[2]); + err |= __put_user((u64)sfp, &rw->ins[6]); /* frame pointer */ if (err) goto sigsegv; @@ -937,20 +904,21 @@ } asmlinkage int -svr4_getcontext(svr4_ucontext_t *uc, struct pt_regs *regs) +svr4_getcontext(svr4_ucontext_t __user *uc, struct pt_regs *regs) { - svr4_gregset_t *gr; - svr4_mcontext_t *mc; + svr4_gregset_t __user *gr; + svr4_mcontext_t __user *mc; svr4_sigset_t setv; int i, err; + u32 psr; synchronize_user_stack(); save_and_clear_fpu(); if (get_thread_wsaved()) - do_exit (SIGSEGV); + do_exit(SIGSEGV); - err = clear_user(uc, sizeof (*uc)); + err = clear_user(uc, sizeof(*uc)); /* Setup convenience variables */ mc = &uc->mcontext; @@ -970,19 +938,17 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - err |= __put_user(regs->tpc, &uc->mcontext.greg [SVR4_PC]); - err |= __put_user(regs->tnpc, &uc->mcontext.greg [SVR4_NPC]); -#if 1 - err |= __put_user(0, &uc->mcontext.greg [SVR4_PSR]); -#else - i = tstate_to_psr(regs->tstate) & ~PSR_EF; + err |= __put_user(regs->tpc, &uc->mcontext.greg[SVR4_PC]); + err |= __put_user(regs->tnpc, &uc->mcontext.greg[SVR4_NPC]); + + psr = tstate_to_psr(regs->tstate) & ~PSR_EF; if (current_thread_info()->fpsaved[0] & FPRS_FEF) - i |= PSR_EF; - err |= __put_user(i, &uc->mcontext.greg [SVR4_PSR]); -#endif - err |= __put_user(regs->y, &uc->mcontext.greg [SVR4_Y]); + psr |= PSR_EF; + err |= __put_user(psr, &uc->mcontext.greg[SVR4_PSR]); + + err |= __put_user(regs->y, &uc->mcontext.greg[SVR4_Y]); - /* Copy g [1..7] and o [0..7] registers */ + /* Copy g[1..7] and o[0..7] registers */ for (i = 0; i < 7; i++) err |= __put_user(regs->u_regs[UREG_G1+i], (&(*gr)[SVR4_G1])+i); for (i = 0; i < 8; i++) @@ -1001,9 +967,9 @@ /* Set the context for a svr4 application, this is Solaris way to sigreturn */ -asmlinkage int svr4_setcontext(svr4_ucontext_t *c, struct pt_regs *regs) +asmlinkage int svr4_setcontext(svr4_ucontext_t __user *c, struct pt_regs *regs) { - svr4_gregset_t *gr; + svr4_gregset_t __user *gr; mm_segment_t old_fs; u32 pc, npc, psr; sigset_t set; @@ -1020,7 +986,7 @@ goto sigsegv; if (((unsigned long) c) & 3){ - printk ("Unaligned structure passed\n"); + printk("Unaligned structure passed\n"); goto sigsegv; } @@ -1040,7 +1006,7 @@ /* note that nPC is ored a 1, this is used to inform entry.S */ /* that we don't want it to mess with our PC and nPC */ - err |= copy_from_user (&setv, &c->sigmask, sizeof(svr4_sigset_t)); + err |= copy_from_user(&setv, &c->sigmask, sizeof(svr4_sigset_t)); set.sig[0] = setv.sigbits[0] | (((long)setv.sigbits[1]) << 32); if (_NSIG_WORDS >= 2) set.sig[1] = setv.sigbits[2] | (((long)setv.sigbits[3]) << 32); @@ -1069,14 +1035,11 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - err |= __get_user(regs->y, &((*gr) [SVR4_Y])); - err |= __get_user(psr, &((*gr) [SVR4_PSR])); + err |= __get_user(regs->y, &((*gr)[SVR4_Y])); + err |= __get_user(psr, &((*gr)[SVR4_PSR])); regs->tstate &= ~(TSTATE_ICC|TSTATE_XCC); regs->tstate |= psr_to_tstate_icc(psr); -#if 0 - if (psr & PSR_EF) - regs->tstate |= TSTATE_PEF; -#endif + /* Restore g[1..7] and o[0..7] registers */ for (i = 0; i < 7; i++) err |= __get_user(regs->u_regs[UREG_G1+i], (&(*gr)[SVR4_G1])+i); @@ -1094,7 +1057,7 @@ unsigned long signr, sigset_t *oldset, siginfo_t *info) { - struct rt_signal_frame32 *sf; + struct rt_signal_frame32 __user *sf; int sigframe_size; u32 psr; int i, err; @@ -1108,9 +1071,10 @@ if (!(current_thread_info()->fpsaved[0] & FPRS_FEF)) sigframe_size -= sizeof(__siginfo_fpu_t); - sf = (struct rt_signal_frame32 *)get_sigframe(&ka->sa, regs, sigframe_size); + sf = (struct rt_signal_frame32 __user *) + get_sigframe(&ka->sa, regs, sigframe_size); - if (invalid_frame_pointer (sf, sigframe_size)) + if (invalid_frame_pointer(sf, sigframe_size)) goto sigill; if (get_thread_wsaved() != 0) @@ -1124,7 +1088,7 @@ err = put_user(regs->tpc, &sf->regs.pc); err |= __put_user(regs->tnpc, &sf->regs.npc); err |= __put_user(regs->y, &sf->regs.y); - psr = tstate_to_psr (regs->tstate); + psr = tstate_to_psr(regs->tstate); if (current_thread_info()->fpsaved[0] & FPRS_FEF) psr |= PSR_EF; err |= __put_user(psr, &sf->regs.psr); @@ -1133,7 +1097,8 @@ err |= __put_user(sizeof(siginfo_extra_v8plus_t), &sf->extra_size); err |= __put_user(SIGINFO_EXTRA_V8PLUS_MAGIC, &sf->v8plus.g_upper[0]); for (i = 1; i < 16; i++) - err |= __put_user(((u32 *)regs->u_regs)[2*i], &sf->v8plus.g_upper[i]); + err |= __put_user(((u32 *)regs->u_regs)[2*i], + &sf->v8plus.g_upper[i]); if (psr & PSR_EF) { err |= save_fpu_state32(regs, &sf->fpu_state); @@ -1162,8 +1127,8 @@ } err |= __copy_to_user(&sf->mask, &seta, sizeof(compat_sigset_t)); - err |= copy_in_user((u32 *)sf, - (u32 *)(regs->u_regs[UREG_FP]), + err |= copy_in_user((u32 __user *)sf, + (u32 __user *)(regs->u_regs[UREG_FP]), sizeof(struct reg_window32)); if (err) goto sigsegv; @@ -1204,7 +1169,8 @@ preempt_disable(); ptep = pte_offset_map(pmdp, address); if (pte_present(*ptep)) { - unsigned long page = (unsigned long) page_address(pte_page(*ptep)); + unsigned long page = (unsigned long) + page_address(pte_page(*ptep)); __asm__ __volatile__( " membar #StoreStore\n" @@ -1229,7 +1195,8 @@ int svr4_signal) { if (svr4_signal) - setup_svr4_frame32(&ka->sa, regs->tpc, regs->tnpc, regs, signr, oldset); + setup_svr4_frame32(&ka->sa, regs->tpc, regs->tnpc, + regs, signr, oldset); else { if (ka->sa.sa_flags & SA_SIGINFO) setup_rt_frame32(ka, regs, signr, oldset, info); @@ -1322,13 +1289,16 @@ asmlinkage int do_sys32_sigstack(u32 u_ssptr, u32 u_ossptr, unsigned long sp) { - struct sigstack32 *ssptr = (struct sigstack32 *)((unsigned long)(u_ssptr)); - struct sigstack32 *ossptr = (struct sigstack32 *)((unsigned long)(u_ossptr)); + struct sigstack32 __user *ssptr = + (struct sigstack32 __user *)((unsigned long)(u_ssptr)); + struct sigstack32 __user *ossptr = + (struct sigstack32 __user *)((unsigned long)(u_ossptr)); int ret = -EFAULT; /* First see if old state is wanted. */ if (ossptr) { - if (put_user(current->sas_ss_sp + current->sas_ss_size, &ossptr->the_stack) || + if (put_user(current->sas_ss_sp + current->sas_ss_size, + &ossptr->the_stack) || __put_user(on_sig_stack(sp), &ossptr->cur_status)) goto out; } @@ -1339,15 +1309,18 @@ if (get_user((long)ss_sp, &ssptr->the_stack)) goto out; + /* If the current stack was set with sigaltstack, don't - swap stacks while we are on it. */ + * swap stacks while we are on it. + */ ret = -EPERM; if (current->sas_ss_sp && on_sig_stack(sp)) goto out; /* Since we don't know the extent of the stack, and we don't - track onstack-ness, but rather calculate it, we must - presume a size. Ho hum this interface is lossy. */ + * track onstack-ness, but rather calculate it, we must + * presume a size. Ho hum this interface is lossy. + */ current->sas_ss_sp = (unsigned long)ss_sp - SIGSTKSZ; current->sas_ss_size = SIGSTKSZ; } @@ -1363,17 +1336,17 @@ int ret; mm_segment_t old_fs; - if (ussa && (get_user((long)uss.ss_sp, &((stack_t32 *)(long)ussa)->ss_sp) || - __get_user(uss.ss_flags, &((stack_t32 *)(long)ussa)->ss_flags) || - __get_user(uss.ss_size, &((stack_t32 *)(long)ussa)->ss_size))) + if (ussa && (get_user((long)uss.ss_sp, &((stack_t32 __user *)(long)ussa)->ss_sp) || + __get_user(uss.ss_flags, &((stack_t32 __user *)(long)ussa)->ss_flags) || + __get_user(uss.ss_size, &((stack_t32 __user *)(long)ussa)->ss_size))) return -EFAULT; old_fs = get_fs(); set_fs(KERNEL_DS); ret = do_sigaltstack(ussa ? &uss : NULL, uossa ? &uoss : NULL, sp); set_fs(old_fs); - if (!ret && uossa && (put_user((long)uoss.ss_sp, &((stack_t32 *)(long)uossa)->ss_sp) || - __put_user(uoss.ss_flags, &((stack_t32 *)(long)uossa)->ss_flags) || - __put_user(uoss.ss_size, &((stack_t32 *)(long)uossa)->ss_size))) + if (!ret && uossa && (put_user((long)uoss.ss_sp, &((stack_t32 __user *)(long)uossa)->ss_sp) || + __put_user(uoss.ss_flags, &((stack_t32 __user *)(long)uossa)->ss_flags) || + __put_user(uoss.ss_size, &((stack_t32 __user *)(long)uossa)->ss_size))) return -EFAULT; return ret; } diff -Nru a/arch/sparc64/kernel/sys_sparc.c b/arch/sparc64/kernel/sys_sparc.c --- a/arch/sparc64/kernel/sys_sparc.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc64/kernel/sys_sparc.c Sat Apr 12 14:44:08 2003 @@ -199,7 +199,7 @@ goto out; } default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= MSGCTL) @@ -218,7 +218,7 @@ err = sys_msgctl (first, second | IPC_64, (struct msqid_ds *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= SHMCTL) @@ -236,18 +236,18 @@ err = sys_shmctl (first, second | IPC_64, (struct shmid_ds *) ptr); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } else - err = -EINVAL; + err = -ENOSYS; out: return err; } -extern asmlinkage int sys_newuname(struct new_utsname * name); +extern asmlinkage int sys_newuname(struct new_utsname __user *name); -asmlinkage int sparc64_newuname(struct new_utsname * name) +asmlinkage int sparc64_newuname(struct new_utsname __user *name) { int ret = sys_newuname(name); @@ -421,7 +421,7 @@ extern void check_pending(int signum); -asmlinkage int sys_getdomainname(char *name, int len) +asmlinkage int sys_getdomainname(char __user *name, int len) { int nlen; int err = -EFAULT; @@ -432,9 +432,9 @@ if (nlen < len) len = nlen; - if(len > __NEW_UTS_LEN) + if (len > __NEW_UTS_LEN) goto done; - if(copy_to_user(name, system_utsname.domainname, len)) + if (copy_to_user(name, system_utsname.domainname, len)) goto done; err = 0; done: @@ -458,7 +458,7 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - if(++count <= 5) { + if (++count <= 5) { printk ("For Solaris binary emulation you need solaris module loaded\n"); show_regs (regs); } @@ -478,7 +478,7 @@ regs->tpc &= 0xffffffff; regs->tnpc &= 0xffffffff; } - if(++count <= 20) + if (++count <= 20) printk ("SunOS binary emulation not compiled in\n"); force_sig(SIGSEGV, current); @@ -486,9 +486,11 @@ } #endif -asmlinkage int sys_utrap_install(utrap_entry_t type, utrap_handler_t new_p, +asmlinkage int sys_utrap_install(utrap_entry_t type, + utrap_handler_t new_p, utrap_handler_t new_d, - utrap_handler_t *old_p, utrap_handler_t *old_d) + utrap_handler_t __user *old_p, + utrap_handler_t __user *old_d) { if (type < UT_INSTRUCTION_EXCEPTION || type > UT_TRAP_INSTRUCTION_31) return -EINVAL; @@ -511,9 +513,11 @@ if (!current_thread_info()->utraps) { current_thread_info()->utraps = kmalloc((UT_TRAP_INSTRUCTION_31+1)*sizeof(long), GFP_KERNEL); - if (!current_thread_info()->utraps) return -ENOMEM; + if (!current_thread_info()->utraps) + return -ENOMEM; current_thread_info()->utraps[0] = 1; - memset(current_thread_info()->utraps+1, 0, UT_TRAP_INSTRUCTION_31*sizeof(long)); + memset(current_thread_info()->utraps+1, 0, + UT_TRAP_INSTRUCTION_31*sizeof(long)); } else { if ((utrap_handler_t)current_thread_info()->utraps[type] != new_p && current_thread_info()->utraps[0] > 1) { diff -Nru a/arch/sparc64/kernel/sys_sparc32.c b/arch/sparc64/kernel/sys_sparc32.c --- a/arch/sparc64/kernel/sys_sparc32.c Sat Apr 12 14:44:08 2003 +++ b/arch/sparc64/kernel/sys_sparc32.c Sat Apr 12 14:44:08 2003 @@ -756,7 +756,7 @@ err = do_sys32_semctl (first, second, third, (void *)AA(ptr)); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; }; if (call <= MSGCTL) @@ -775,7 +775,7 @@ err = do_sys32_msgctl (first, second, (void *)AA(ptr)); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } if (call <= SHMCTL) @@ -794,11 +794,11 @@ err = do_sys32_shmctl (first, second, (void *)AA(ptr)); goto out; default: - err = -EINVAL; + err = -ENOSYS; goto out; } - err = -EINVAL; + err = -ENOSYS; out: return err; @@ -2831,10 +2831,10 @@ return error; } -extern asmlinkage int sys_sched_setaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_setaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_setaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2855,10 +2855,10 @@ return ret; } -extern asmlinkage int sys_sched_getaffinity(pid_t pid, unsigned int len, +extern asmlinkage long sys_sched_getaffinity(pid_t pid, unsigned int len, unsigned long *user_mask_ptr); -asmlinkage int sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, +asmlinkage long sys32_sched_getaffinity(compat_pid_t pid, unsigned int len, u32 *user_mask_ptr) { unsigned long kernel_mask; @@ -2881,9 +2881,9 @@ return ret; } -extern int sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); +extern long sys_lookup_dcookie(u64 cookie64, char *buf, size_t len); -int sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) +long sys32_lookup_dcookie(u32 cookie_high, u32 cookie_low, char *buf, size_t len) { return sys_lookup_dcookie((u64)cookie_high << 32 | cookie_low, buf, len); diff -Nru a/arch/v850/Kconfig b/arch/v850/Kconfig --- a/arch/v850/Kconfig Sat Apr 12 14:44:07 2003 +++ b/arch/v850/Kconfig Sat Apr 12 14:44:07 2003 @@ -124,9 +124,11 @@ depends RTE_CB_MA1 || RTE_CB_NB85E default y - # Currently, we only support RTE-CB boards using the Multi debugger config RTE_CB_MULTI bool + # RTE_CB_NB85E can either have multi ROM support or not, but + # other platforms (currently only RTE_CB_MA1) require it. + prompt "Multi monitor ROM support" if RTE_CB_NB85E depends RTE_CB default y diff -Nru a/arch/v850/kernel/Makefile b/arch/v850/kernel/Makefile --- a/arch/v850/kernel/Makefile Sat Apr 12 14:44:10 2003 +++ b/arch/v850/kernel/Makefile Sat Apr 12 14:44:10 2003 @@ -1,8 +1,8 @@ # # arch/v850/kernel/Makefile # -# Copyright (C) 2001,02 NEC Corporation -# Copyright (C) 2001,02 Miles Bader +# Copyright (C) 2001,02,03 NEC Electronics Corporation +# Copyright (C) 2001,02,03 Miles Bader # # This file is subject to the terms and conditions of the GNU General Public # License. See the file "COPYING" in the main directory of this archive @@ -15,10 +15,14 @@ signal.o irq.o mach.o ptrace.o bug.o obj-$(CONFIG_MODULES) += module.o v850_ksyms.o # chip-specific code -obj-$(CONFIG_V850E_MA1) += ma.o nb85e_utils.o nb85e_timer_d.o obj-$(CONFIG_V850E_NB85E) += nb85e_intc.o -obj-$(CONFIG_V850E2_ANNA) += anna.o nb85e_intc.o nb85e_utils.o nb85e_timer_d.o -obj-$(CONFIG_V850E_AS85EP1) += as85ep1.o nb85e_intc.o nb85e_utils.o nb85e_timer_d.o +obj-$(CONFIG_V850E_MA1) += ma.o nb85e_utils.o nb85e_timer_d.o +obj-$(CONFIG_V850E_TEG) += teg.o nb85e_utils.o nb85e_cache.o \ + nb85e_timer_d.o +obj-$(CONFIG_V850E2_ANNA) += anna.o nb85e_intc.o nb85e_utils.o \ + nb85e_timer_d.o +obj-$(CONFIG_V850E_AS85EP1) += as85ep1.o nb85e_intc.o nb85e_utils.o \ + nb85e_timer_d.o # platform-specific code obj-$(CONFIG_V850E_SIM) += sim.o simcons.o obj-$(CONFIG_V850E2_SIM85E2C) += sim85e2c.o nb85e_intc.o memcons.o diff -Nru a/arch/v850/kernel/entry.S b/arch/v850/kernel/entry.S --- a/arch/v850/kernel/entry.S Sat Apr 12 14:44:09 2003 +++ b/arch/v850/kernel/entry.S Sat Apr 12 14:44:10 2003 @@ -231,7 +231,7 @@ st.b r19, KM; \ GET_CURRENT_TASK(CURRENT_TASK); /* Fetch the current task pointer. */ \ /* Save away the syscall number. */ \ - sst.w syscall_num, PTO+PT_SYSCALL[ep] + sst.w syscall_num, PTO+PT_CUR_SYSCALL[ep] /* Save register state not normally saved by PUSH_STATE for TYPE. */ @@ -438,11 +438,11 @@ LP register should point to the location where the called function should return. [note that MAKE_SYS_CALL uses label 1] */ #define MAKE_SYS_CALL \ - /* See if the system call number is valid. */ \ - addi -NR_syscalls, r12, r0; \ - bnh 1f; \ /* Figure out which function to use for this system call. */ \ shl 2, r12; \ + /* See if the system call number is valid. */ \ + addi lo(CSYM(sys_call_table) - sys_call_table_end), r12, r0; \ + bnh 1f; \ mov hilo(CSYM(sys_call_table)), r19; \ add r19, r12; \ ld.w 0[r12], r12; \ @@ -511,10 +511,8 @@ (copy_thread makes ret_from_fork the return address in each new thread's saved context). */ C_ENTRY(ret_from_fork): -#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT) mov r10, r6 // switch_thread returns the prev task. jarl CSYM(schedule_tail), lp // ...which is schedule_tail's arg -#endif mov r0, r10 // Child's fork call should return 0. br ret_from_trap // Do normal trap return. C_END(ret_from_fork) @@ -982,8 +980,5 @@ .long CSYM(sys_pivot_root) // 200 .long CSYM(sys_gettid) .long CSYM(sys_tkill) - .long CSYM(sys_ni_syscall) // sys_mincore - .long CSYM(sys_ni_syscall) // sys_madvise - - .space (NR_syscalls-205)*4 +sys_call_table_end: C_END(sys_call_table) diff -Nru a/arch/v850/kernel/gbus_int.c b/arch/v850/kernel/gbus_int.c --- a/arch/v850/kernel/gbus_int.c Sat Apr 12 14:44:10 2003 +++ b/arch/v850/kernel/gbus_int.c Sat Apr 12 14:44:10 2003 @@ -26,7 +26,9 @@ /* For each GINT interrupt, how many GBUS interrupts are using it. */ static unsigned gint_num_active_irqs[NUM_GINTS] = { 0 }; -/* A table of GINTn interrupts we actually use. */ +/* A table of GINTn interrupts we actually use. + Note that we don't use GINT0 because all the boards we support treat it + specially. */ struct used_gint { unsigned gint; unsigned priority; diff -Nru a/arch/v850/kernel/nb85e_cache.c b/arch/v850/kernel/nb85e_cache.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/kernel/nb85e_cache.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,178 @@ +/* + * arch/v850/kernel/nb85e_cache.c -- Cache control for NB85E_CACHE212 and + * NB85E_CACHE213 cache memories + * + * Copyright (C) 2003 NEC Electronics Corporation + * Copyright (C) 2003 Miles Bader + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file COPYING in the main directory of this + * archive for more details. + * + * Written by Miles Bader + */ + +#include +#include + +#define WAIT_UNTIL_CLEAR(value) while (value) {} + +/* Set caching params via the BHC and DCC registers. */ +void nb85e_cache_enable (u16 bhc, u16 dcc) +{ + unsigned long *r0_ram = (unsigned long *)R0_RAM_ADDR; + register u16 bhc_val asm ("r6") = bhc; + + /* Configure data-cache. */ + NB85E_CACHE_DCC = dcc; + + /* Configure caching for various memory regions by writing the BHC + register. The documentation says that an instruction _cannot_ + enable/disable caching for the memory region in which the + instruction itself exists; to work around this, we store + appropriate instructions into the on-chip RAM area (which is never + cached), and briefly jump there to do the work. */ + r0_ram[0] = 0xf0720760; /* st.h r0, 0xfffff072[r0] */ + r0_ram[1] = 0xf06a3760; /* st.h r6, 0xfffff06a[r0] */ + r0_ram[2] = 0x5640006b; /* jmp [r11] */ + asm ("mov hilo(1f), r11; jmp [%1]; 1:;" + :: "r" (bhc_val), "r" (R0_RAM_ADDR) : "r11"); +} + +static void clear_icache (void) +{ + /* 1. Read the instruction cache control register (ICC) and confirm + that bits 0 and 1 (TCLR0, TCLR1) are all cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3); + + /* 2. Read the ICC register and confirm that bit 12 (LOCK0) is + cleared. Bit 13 of the ICC register is always cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x1000); + + /* 3. Set the TCLR0 and TCLR1 bits of the ICC register as follows, + when clearing way 0 and way 1 at the same time: + (a) Set the TCLR0 and TCLR1 bits. + (b) Read the TCLR0 and TCLR1 bits to confirm that these bits + are cleared. + (c) Perform (a) and (b) above again. */ + NB85E_CACHE_ICC |= 0x3; + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3); + /* Do it again. */ + NB85E_CACHE_ICC |= 0x3; + WAIT_UNTIL_CLEAR (NB85E_CACHE_ICC & 0x3); +} + +/* Flush or clear (or both) the data cache, depending on the value of FLAGS; + the procedure is the same for both, just the control bits used differ (and + both may be performed simultaneously). */ +static void dcache_op (unsigned short flags) +{ + /* 1. Read the data cache control register (DCC) and confirm that bits + 0, 1, 4, and 5 (DC00, DC01, DC04, DC05) are all cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & 0x33); + + /* 2. Clear DCC register bit 12 (DC12), bit 13 (DC13), or both + depending on the way for which tags are to be cleared. */ + NB85E_CACHE_DCC &= ~0xC000; + + /* 3. Set DCC register bit 0 (DC00), bit 1 (DC01) or both depending on + the way for which tags are to be cleared. + ... + Set DCC register bit 4 (DC04), bit 5 (DC05), or both depending + on the way to be data flushed. */ + NB85E_CACHE_DCC |= flags; + + /* 4. Read DCC register bit DC00, DC01 [DC04, DC05], or both depending + on the way for which tags were cleared [flushed] and confirm + that that bit is cleared. */ + WAIT_UNTIL_CLEAR (NB85E_CACHE_DCC & flags); +} + +/* Flushes the contents of the dcache to memory. */ +static inline void flush_dcache (void) +{ + /* We only need to do something if in write-back mode. */ + if (NB85E_CACHE_DCC & 0x0400) + dcache_op (0x30); +} + +/* Flushes the contents of the dcache to memory, and then clears it. */ +static inline void clear_dcache (void) +{ + /* We only need to do something if the dcache is enabled. */ + if (NB85E_CACHE_DCC & 0x0C00) + dcache_op (0x33); +} + +/* Clears the dcache without flushing to memory first. */ +static inline void clear_dcache_no_flush (void) +{ + /* We only need to do something if the dcache is enabled. */ + if (NB85E_CACHE_DCC & 0x0C00) + dcache_op (0x3); +} + +static inline void cache_exec_after_store (void) +{ + flush_dcache (); + clear_icache (); +} + + +/* Exported functions. */ + +void inline nb85e_cache_flush_all (void) +{ + clear_icache (); + clear_dcache (); +} + +void nb85e_cache_flush_mm (struct mm_struct *mm) +{ + /* nothing */ +} + +void nb85e_cache_flush_range (struct mm_struct *mm, + unsigned long start, unsigned long end) +{ + /* nothing */ +} + +void nb85e_cache_flush_page (struct vm_area_struct *vma, + unsigned long page_addr) +{ + /* nothing */ +} + +void nb85e_cache_flush_dcache_page (struct page *page) +{ + /* nothing */ +} + +void nb85e_cache_flush_icache (void) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_icache_range (unsigned long start, unsigned long end) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_icache_page (struct vm_area_struct *vma, + struct page *page) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_icache_user_range (struct vm_area_struct *vma, + struct page *page, + unsigned long adr, int len) +{ + cache_exec_after_store (); +} + +void nb85e_cache_flush_sigtramp (unsigned long addr) +{ + cache_exec_after_store (); +} diff -Nru a/arch/v850/kernel/nb85e_intc.c b/arch/v850/kernel/nb85e_intc.c --- a/arch/v850/kernel/nb85e_intc.c Sat Apr 12 14:44:07 2003 +++ b/arch/v850/kernel/nb85e_intc.c Sat Apr 12 14:44:07 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/nb85e_intc.c -- NB85E cpu core interrupt controller (INTC) * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -26,6 +26,42 @@ return 0; } +static void nb85e_intc_end_irq (unsigned irq) +{ + unsigned long psw, temp; + + /* Clear the highest-level bit in the In-service priority register + (ISPR), to allow this interrupt (or another of the same or + lesser priority) to happen again. + + The `reti' instruction normally does this automatically when the + PSW bits EP and NP are zero, but we can't always rely on reti + being used consistently to return after an interrupt (another + process can be scheduled, for instance, which can delay the + associated reti for a long time, or this process may be being + single-stepped, which uses the `dbret' instruction to return + from the kernel). + + We also set the PSW EP bit, which prevents reti from also + trying to modify the ISPR itself. */ + + /* Get PSW and disable interrupts. */ + asm volatile ("stsr psw, %0; di" : "=r" (psw)); + /* We don't want to do anything for NMIs (they don't use the ISPR). */ + if (! (psw & 0xC0)) { + /* Transition to `trap' state, so that an eventual real + reti instruction won't modify the ISPR. */ + psw |= 0x40; + /* Fake an interrupt return, which automatically clears the + appropriate bit in the ISPR. */ + asm volatile ("mov hilo(1f), %0;" + "ldsr %0, eipc; ldsr %1, eipsw;" + "reti;" + "1:" + : "=&r" (temp) : "r" (psw)); + } +} + /* Initialize HW_IRQ_TYPES for INTC-controlled irqs described in array INITS (which is terminated by an entry with the name field == 0). */ void __init nb85e_intc_init_irq_types (struct nb85e_intc_irq_init *inits, @@ -43,7 +79,7 @@ hwit->enable = nb85e_intc_enable_irq; hwit->disable = nb85e_intc_disable_irq; hwit->ack = irq_nop; - hwit->end = irq_nop; + hwit->end = nb85e_intc_end_irq; /* Initialize kernel IRQ infrastructure for this interrupt. */ init_irq_handlers(init->base, init->num, init->interval, hwit); diff -Nru a/arch/v850/kernel/process.c b/arch/v850/kernel/process.c --- a/arch/v850/kernel/process.c Sat Apr 12 14:44:06 2003 +++ b/arch/v850/kernel/process.c Sat Apr 12 14:44:06 2003 @@ -226,7 +226,7 @@ if (!p || p == current || p->state == TASK_RUNNING) return 0; - pc = thread_saved_pc (&p->thread); + pc = thread_saved_pc (p); /* This quite disgusting function walks up the stack, following saved return address, until it something that's out of bounds diff -Nru a/arch/v850/kernel/rte_cb.c b/arch/v850/kernel/rte_cb.c --- a/arch/v850/kernel/rte_cb.c Sat Apr 12 14:44:06 2003 +++ b/arch/v850/kernel/rte_cb.c Sat Apr 12 14:44:06 2003 @@ -1,8 +1,8 @@ /* * include/asm-v850/rte_cb.c -- Midas lab RTE-CB series of evaluation boards * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -32,28 +32,11 @@ #endif -#ifdef CONFIG_ROM_KERNEL -/* Initialization for kernel in ROM. */ -static inline rom_kernel_init (void) -{ - /* If the kernel is in ROM, we have to copy any initialized data - from ROM into RAM. */ - extern unsigned long _data_load_start, _sdata, _edata; - register unsigned long *src = &_data_load_start; - register unsigned long *dst = &_sdata, *end = &_edata; - - while (dst != end) - *dst++ = *src++; -} -#endif /* CONFIG_ROM_KERNEL */ - -void __init mach_early_init (void) +void __init rte_cb_early_init (void) { nb85e_intc_disable_irqs (); -#if defined (CONFIG_ROM_KERNEL) - rom_kernel_init (); -#elif defined (CONFIG_RTE_CB_MULTI) +#ifdef CONFIG_RTE_CB_MULTI multi_init (); #endif } diff -Nru a/arch/v850/kernel/rte_cb_multi.c b/arch/v850/kernel/rte_cb_multi.c --- a/arch/v850/kernel/rte_cb_multi.c Sat Apr 12 14:44:07 2003 +++ b/arch/v850/kernel/rte_cb_multi.c Sat Apr 12 14:44:07 2003 @@ -16,22 +16,55 @@ #include +#define IRQ_ADDR(irq) (0x80 + (irq) * 0x10) + /* A table of which interrupt vectors to install, since blindly installing all of them makes the debugger stop working. This is a list of offsets in the interrupt vector area; each entry means to copy that particular 16-byte vector. An entry less than zero ends the table. */ static long multi_intv_install_table[] = { - 0x40, 0x50, /* trap vectors */ + /* Trap vectors */ + 0x40, 0x50, + #ifdef CONFIG_RTE_CB_MULTI_DBTRAP - 0x60, /* illegal insn / dbtrap */ + /* Illegal insn / dbtrap. These are used by multi, so only handle + them if configured to do so. */ + 0x60, #endif - /* Note -- illegal insn trap is used by the debugger. */ - 0xD0, 0xE0, 0xF0, /* GINT1 - GINT3 */ - 0x240, 0x250, 0x260, 0x270, /* timer D interrupts */ - 0x2D0, 0x2E0, 0x2F0, /* UART channel 0 */ - 0x310, 0x320, 0x330, /* UART channel 1 */ - 0x350, 0x360, 0x370, /* UART channel 2 */ + + /* GINT1 - GINT3 (note, not GINT0!) */ + IRQ_ADDR (IRQ_GINT(1)), + IRQ_ADDR (IRQ_GINT(2)), + IRQ_ADDR (IRQ_GINT(3)), + + /* Timer D interrupts (up to 4 timers) */ + IRQ_ADDR (IRQ_INTCMD(0)), +#if IRQ_INTCMD_NUM > 1 + IRQ_ADDR (IRQ_INTCMD(1)), +#if IRQ_INTCMD_NUM > 2 + IRQ_ADDR (IRQ_INTCMD(2)), +#if IRQ_INTCMD_NUM > 3 + IRQ_ADDR (IRQ_INTCMD(3)), +#endif +#endif +#endif + + /* UART interrupts (up to 3 channels) */ + IRQ_ADDR (IRQ_INTSER (0)), /* err */ + IRQ_ADDR (IRQ_INTSR (0)), /* rx */ + IRQ_ADDR (IRQ_INTST (0)), /* tx */ +#if IRQ_INTSR_NUM > 1 + IRQ_ADDR (IRQ_INTSER (1)), /* err */ + IRQ_ADDR (IRQ_INTSR (1)), /* rx */ + IRQ_ADDR (IRQ_INTST (1)), /* tx */ +#if IRQ_INTSR_NUM > 2 + IRQ_ADDR (IRQ_INTSER (2)), /* err */ + IRQ_ADDR (IRQ_INTSR (2)), /* rx */ + IRQ_ADDR (IRQ_INTST (2)), /* tx */ +#endif +#endif + -1 }; diff -Nru a/arch/v850/kernel/rte_ma1_cb.c b/arch/v850/kernel/rte_ma1_cb.c --- a/arch/v850/kernel/rte_ma1_cb.c Sat Apr 12 14:44:09 2003 +++ b/arch/v850/kernel/rte_ma1_cb.c Sat Apr 12 14:44:09 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/rte_ma1_cb.c -- Midas labs RTE-V850E/MA1-CB board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -31,6 +31,11 @@ #define RAM_END (SDRAM_ADDR + SDRAM_SIZE) +void __init mach_early_init (void) +{ + rte_cb_early_init (); +} + void __init mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len) { @@ -67,7 +72,7 @@ if (chan == 0) { /* Put P42 & P43 in I/O port mode. */ MA_PORT4_PMC &= ~0xC; - /* Make P42 and output, and P43 an input. */ + /* Make P42 an output, and P43 an input. */ MA_PORT4_PM = (MA_PORT4_PM & ~0xC) | 0x8; } diff -Nru a/arch/v850/kernel/rte_mb_a_pci.c b/arch/v850/kernel/rte_mb_a_pci.c --- a/arch/v850/kernel/rte_mb_a_pci.c Sat Apr 12 14:44:06 2003 +++ b/arch/v850/kernel/rte_mb_a_pci.c Sat Apr 12 14:44:06 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/mb_a_pci.c -- PCI support for Midas lab RTE-MOTHER-A board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -165,7 +165,6 @@ "PCI: PLX Technology PCI9080 HOST/PCI bridge\n"); MB_A_PCI_PCICR = 0x147; - MB_A_PCI_DMLBAM = 0x0; MB_A_PCI_PCIBAR0 = 0x007FFF00; MB_A_PCI_PCIBAR1 = 0x0000FF00; @@ -179,11 +178,28 @@ /* Reprogram the motherboard's IO/config address space, as we don't support the GCS7 address space that the - default uses. Note that we have to give the address - from the motherboard's point of view, which is - different than the CPU's. */ - MB_A_PCI_DMLBAI = MB_A_PCI_IO_ADDR - GCS5_ADDR; + default uses. */ + + /* Significant address bits used for decoding PCI GCS5 space + accessess. */ MB_A_PCI_DMRR = ~(MB_A_PCI_MEM_SIZE - 1); + + /* I don't understand this, but the SolutionGear example code + uses such an offset, and it doesn't work without it. XXX */ +#if GCS5_SIZE == 0x00800000 +#define GCS5_CFG_OFFS 0x00800000 +#else +#define GCS5_CFG_OFFS 0 +#endif + + /* Address bit values for matching. Note that we have to give + the address from the motherboard's point of view, which is + different than the CPU's. */ + /* PCI memory space. */ + MB_A_PCI_DMLBAM = GCS5_CFG_OFFS + 0x0; + /* PCI I/O space. */ + MB_A_PCI_DMLBAI = + GCS5_CFG_OFFS + (MB_A_PCI_IO_ADDR - GCS5_ADDR); mb_pci_bus = pci_scan_bus (0, &mb_pci_config_ops, 0); diff -Nru a/arch/v850/kernel/rte_nb85e_cb.c b/arch/v850/kernel/rte_nb85e_cb.c --- a/arch/v850/kernel/rte_nb85e_cb.c Sat Apr 12 14:44:10 2003 +++ b/arch/v850/kernel/rte_nb85e_cb.c Sat Apr 12 14:44:10 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/rte_nb85e_cb.c -- Midas labs RTE-V850E/NB85E-CB board * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -26,10 +26,30 @@ #include "mach.h" +void __init mach_early_init (void) +{ + /* Configure caching; some possible settings: + + BHC = 0x0000, DCC = 0x0000 -- all caching disabled + BHC = 0x0040, DCC = 0x0000 -- SDRAM: icache only + BHC = 0x0080, DCC = 0x0C00 -- SDRAM: write-back dcache only + BHC = 0x00C0, DCC = 0x0C00 -- SDRAM: icache + write-back dcache + BHC = 0x00C0, DCC = 0x0800 -- SDRAM: icache + write-thru dcache + + We can only cache SDRAM (we can't use cache SRAM because it's in + the same memory region as the on-chip RAM and I/O space). + + Unfortunately, the dcache seems to be buggy, so we only use the + icache for now. */ + nb85e_cache_enable (0x0040 /* BHC */, 0x0000 /* DCC */); + + rte_cb_early_init (); +} + void __init mach_get_physical_ram (unsigned long *ram_start, unsigned long *ram_len) { - /* We just use SDRAM here; the kernel itself is in SRAM. */ + /* We just use SDRAM here. */ *ram_start = SDRAM_ADDR; *ram_len = SDRAM_SIZE; } @@ -41,8 +61,10 @@ u32 root_fs_image_end = (u32)&_root_fs_image_end; /* Reserve the memory used by the root filesystem image if it's - in RAM. */ - if (root_fs_image_start >= RAM_START && root_fs_image_start < RAM_END) + in SDRAM. */ + if (root_fs_image_end > root_fs_image_start + && root_fs_image_start >= SDRAM_ADDR + && root_fs_image_start < (SDRAM_ADDR + SDRAM_SIZE)) reserve_bootmem (root_fs_image_start, root_fs_image_end - root_fs_image_start); } @@ -51,4 +73,25 @@ { tv->tv_sec = 0; tv->tv_nsec = 0; +} + +/* Called before configuring an on-chip UART. */ +void rte_nb85e_cb_uart_pre_configure (unsigned chan, + unsigned cflags, unsigned baud) +{ + /* The RTE-NB85E-CB connects some general-purpose I/O pins on the + CPU to the RTS/CTS lines the UART's serial connection, as follows: + P00 = CTS (in), P01 = DSR (in), P02 = RTS (out), P03 = DTR (out). */ + + TEG_PORT0_PM = 0x03; /* P00 and P01 inputs, P02 and P03 outputs */ + TEG_PORT0_IO = 0x03; /* Accept input */ + + /* Do pre-configuration for the actual UART. */ + teg_uart_pre_configure (chan, cflags, baud); +} + +void __init mach_init_irqs (void) +{ + teg_init_irqs (); + rte_cb_init_irqs (); } diff -Nru a/arch/v850/kernel/simcons.c b/arch/v850/kernel/simcons.c --- a/arch/v850/kernel/simcons.c Sat Apr 12 14:44:09 2003 +++ b/arch/v850/kernel/simcons.c Sat Apr 12 14:44:09 2003 @@ -1,8 +1,8 @@ /* * arch/v850/kernel/simcons.c -- Console I/O for GDB v850e simulator * - * Copyright (C) 2001,02 NEC Corporation - * Copyright (C) 2001,02 Miles Bader + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader * * This file is subject to the terms and conditions of the GNU General * Public License. See the file COPYING in the main directory of this @@ -19,6 +19,7 @@ #include #include +#include #include diff -Nru a/arch/v850/kernel/teg.c b/arch/v850/kernel/teg.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/kernel/teg.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,63 @@ +/* + * arch/v850/kernel/teg.c -- NB85E-TEG cpu chip + * + * Copyright (C) 2001,02,03 NEC Electronics Corporation + * Copyright (C) 2001,02,03 Miles Bader + * + * This file is subject to the terms and conditions of the GNU General + * Public License. See the file COPYING in the main directory of this + * archive for more details. + * + * Written by Miles Bader + */ + +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "mach.h" + +void __init mach_sched_init (struct irqaction *timer_action) +{ + /* Select timer interrupt instead of external pin. */ + TEG_ISS |= 0x1; + /* Start hardware timer. */ + nb85e_timer_d_configure (0, HZ); + /* Install timer interrupt handler. */ + setup_irq (IRQ_INTCMD(0), timer_action); +} + +static struct nb85e_intc_irq_init irq_inits[] = { + { "IRQ", 0, NUM_CPU_IRQS, 1, 7 }, + { "CMD", IRQ_INTCMD(0), IRQ_INTCMD_NUM, 1, 5 }, + { "SER", IRQ_INTSER(0), IRQ_INTSER_NUM, 1, 3 }, + { "SR", IRQ_INTSR(0), IRQ_INTSR_NUM, 1, 4 }, + { "ST", IRQ_INTST(0), IRQ_INTST_NUM, 1, 5 }, + { 0 } +}; +#define NUM_IRQ_INITS ((sizeof irq_inits / sizeof irq_inits[0]) - 1) + +static struct hw_interrupt_type hw_itypes[NUM_IRQ_INITS]; + +/* Initialize MA chip interrupts. */ +void __init teg_init_irqs (void) +{ + nb85e_intc_init_irq_types (irq_inits, hw_itypes); +} + +/* Called before configuring an on-chip UART. */ +void teg_uart_pre_configure (unsigned chan, unsigned cflags, unsigned baud) +{ + /* Enable UART I/O pins instead of external interrupt pins, and + UART interrupts instead of external pin interrupts. */ + TEG_ISS |= 0x4E; +} diff -Nru a/arch/v850/rte_nb85e_cb-multi.ld b/arch/v850/rte_nb85e_cb-multi.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/rte_nb85e_cb-multi.ld Sat Apr 12 14:44:10 2003 @@ -0,0 +1,57 @@ +/* Linker script for the Midas labs RTE-NB85E-CB evaluation board + (CONFIG_RTE_CB_NB85E), with the Multi debugger ROM monitor . */ + +MEMORY { + /* 1MB of SRAM; we can't use the last 96KB, because it's used by + the monitor scratch-RAM. This memory is mirrored 4 times. */ + SRAM : ORIGIN = 0x03C00000, LENGTH = 0x000E8000 + /* Monitor scratch RAM; only the interrupt vectors should go here. */ + MRAM : ORIGIN = 0x03CE8000, LENGTH = 0x00018000 + /* 16MB of SDRAM. */ + SDRAM : ORIGIN = 0x01000000, LENGTH = 0x01000000 +} + +#ifdef CONFIG_RTE_CB_NB85E_KSRAM +# define KRAM SRAM +#else +# define KRAM SDRAM +#endif + +SECTIONS { + /* We can't use RAMK_KRAM_CONTENTS because that puts the whole + kernel in a single ELF segment, and the Multi debugger (which + we use to load the kernel) appears to have bizarre problems + dealing with it. */ + + .text : { + __kram_start = . ; + TEXT_CONTENTS + } > KRAM + + .data : { + DATA_CONTENTS + BSS_CONTENTS + RAMK_INIT_CONTENTS + __kram_end = . ; + BOOTMAP_CONTENTS + + /* The address at which the interrupt vectors are initially + loaded by the loader. We can't load the interrupt vectors + directly into their target location, because the monitor + ROM for the GHS Multi debugger barfs if we try. + Unfortunately, Multi also doesn't deal correctly with ELF + sections where the LMA and VMA differ (it just ignores the + LMA), so we can't use that feature to work around the + problem! What we do instead is just put the interrupt + vectors into a normal section, and have the + `mach_early_init' function for Midas boards do the + necessary copying and relocation at runtime (this section + basically only contains `jr' instructions, so it's not + that hard). */ + . = ALIGN (0x10) ; + __intv_load_start = . ; + INTV_CONTENTS + } > KRAM + + .root ALIGN (4096) : { ROOT_FS_CONTENTS } > SDRAM +} diff -Nru a/arch/v850/rte_nb85e_cb.ld b/arch/v850/rte_nb85e_cb.ld --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/arch/v850/rte_nb85e_cb.ld Sat Apr 12 14:44:10 2003 @@ -0,0 +1,25 @@ +/* Linker script for the Midas labs RTE-NB85E-CB evaluation board + (CONFIG_RTE_CB_NB85E). */ + +MEMORY { + LOW : ORIGIN = 0x0, LENGTH = 0x00100000 + /* 1MB of SRAM; we can't use the last 96KB, because it's used by + the monitor scratch-RAM. This memory is mirrored 4 times. */ + SRAM : ORIGIN = 0x03C00000, LENGTH = 0x000E8000 + /* Monitor scratch RAM; only the interrupt vectors should go here. */ + MRAM : ORIGIN = 0x03CE8000, LENGTH = 0x00018000 + /* 16MB of SDRAM. */ + SDRAM : ORIGIN = 0x01000000, LENGTH = 0x01000000 +} + +#ifdef CONFIG_RTE_CB_NB85E_KSRAM +# define KRAM SRAM +#else +# define KRAM SDRAM +#endif + +SECTIONS { + .intv : { INTV_CONTENTS } > LOW + .sram : { RAMK_KRAM_CONTENTS } > KRAM + .root : { ROOT_FS_CONTENTS } > SDRAM +} diff -Nru a/arch/x86_64/kernel/suspend.c b/arch/x86_64/kernel/suspend.c --- a/arch/x86_64/kernel/suspend.c Sat Apr 12 14:44:08 2003 +++ b/arch/x86_64/kernel/suspend.c Sat Apr 12 14:44:08 2003 @@ -16,7 +16,6 @@ #include #include #include -#include #include #include #include diff -Nru a/drivers/acpi/bus.c b/drivers/acpi/bus.c --- a/drivers/acpi/bus.c Sat Apr 12 14:44:08 2003 +++ b/drivers/acpi/bus.c Sat Apr 12 14:44:08 2003 @@ -676,7 +676,7 @@ return_VALUE(-ENODEV); } -decl_subsys(acpi,NULL); +decl_subsys(acpi,NULL,NULL); static int __init acpi_init (void) { diff -Nru a/drivers/acpi/processor.c b/drivers/acpi/processor.c --- a/drivers/acpi/processor.c Sat Apr 12 14:44:09 2003 +++ b/drivers/acpi/processor.c Sat Apr 12 14:44:09 2003 @@ -36,13 +36,13 @@ #include #include #include -#include #include #include #include #include #include +#include #include #include diff -Nru a/drivers/base/base.h b/drivers/base/base.h --- a/drivers/base/base.h Sat Apr 12 14:44:07 2003 +++ b/drivers/base/base.h Sat Apr 12 14:44:07 2003 @@ -18,13 +18,8 @@ #ifdef CONFIG_HOTPLUG -extern int dev_hotplug(struct device *dev, const char *action); extern int class_hotplug(struct device *dev, const char *action); #else -static inline int dev_hotplug(struct device *dev, const char *action) -{ - return 0; -} static inline int class_hotplug(struct device *dev, const char *action) { return 0; diff -Nru a/drivers/base/bus.c b/drivers/base/bus.c --- a/drivers/base/bus.c Sat Apr 12 14:44:06 2003 +++ b/drivers/base/bus.c Sat Apr 12 14:44:06 2003 @@ -132,7 +132,7 @@ }; -decl_subsys(bus,&ktype_bus); +decl_subsys(bus,&ktype_bus,NULL); /** * bus_for_each_dev - device iterator. diff -Nru a/drivers/base/class.c b/drivers/base/class.c --- a/drivers/base/class.c Sat Apr 12 14:44:10 2003 +++ b/drivers/base/class.c Sat Apr 12 14:44:10 2003 @@ -49,7 +49,9 @@ .sysfs_ops = &class_sysfs_ops, }; -static decl_subsys(class,&ktype_devclass); +/* Classes can't use the kobject hotplug logic, as + * they do not add new kobjects to the system */ +static decl_subsys(class,&ktype_devclass,NULL); static int devclass_dev_link(struct device_class * cls, struct device * dev) diff -Nru a/drivers/base/core.c b/drivers/base/core.c --- a/drivers/base/core.c Sat Apr 12 14:44:06 2003 +++ b/drivers/base/core.c Sat Apr 12 14:44:06 2003 @@ -23,13 +23,12 @@ DECLARE_MUTEX(device_sem); -#define to_dev(obj) container_of(obj,struct device,kobj) - /* * sysfs bindings for devices. */ +#define to_dev(obj) container_of(obj,struct device,kobj) #define to_dev_attr(_attr) container_of(_attr,struct device_attribute,attr) extern struct attribute * dev_default_attrs[]; @@ -86,11 +85,55 @@ .default_attrs = dev_default_attrs, }; + +static int dev_hotplug_filter(struct kset *kset, struct kobject *kobj) +{ + struct kobj_type *ktype = get_ktype(kobj); + + if (ktype == &ktype_device) { + struct device *dev = to_dev(kobj); + if (dev->bus) + return 1; + } + return 0; +} + +static char *dev_hotplug_name(struct kset *kset, struct kobject *kobj) +{ + struct device *dev = to_dev(kobj); + + return dev->bus->name; +} + +static int dev_hotplug(struct kset *kset, struct kobject *kobj, char **envp, + int num_envp, char *buffer, int buffer_size) +{ + struct device *dev = to_dev(kobj); + int retval = 0; + + if (dev->bus->hotplug) { + /* have the bus specific function add its stuff */ + retval = dev->bus->hotplug (dev, envp, num_envp, buffer, buffer_size); + if (retval) { + pr_debug ("%s - hotplug() returned %d\n", + __FUNCTION__, retval); + } + } + + return retval; +} + +static struct kset_hotplug_ops device_hotplug_ops = { + .filter = dev_hotplug_filter, + .name = dev_hotplug_name, + .hotplug = dev_hotplug, +}; + /** * device_subsys - structure to be registered with kobject core. */ -decl_subsys(devices,&ktype_device); +decl_subsys(devices, &ktype_device, &device_hotplug_ops); /** @@ -192,9 +235,6 @@ if (platform_notify) platform_notify(dev); - /* notify userspace of device entry */ - dev_hotplug(dev, "add"); - devclass_add_device(dev); register_done: if (error && parent) @@ -277,9 +317,6 @@ */ if (platform_notify_remove) platform_notify_remove(dev); - - /* notify userspace that this device is about to disappear */ - dev_hotplug (dev, "remove"); bus_remove_device(dev); diff -Nru a/drivers/base/firmware.c b/drivers/base/firmware.c --- a/drivers/base/firmware.c Sat Apr 12 14:44:08 2003 +++ b/drivers/base/firmware.c Sat Apr 12 14:44:08 2003 @@ -6,7 +6,7 @@ #include #include -static decl_subsys(firmware,NULL); +static decl_subsys(firmware,NULL,NULL); int firmware_register(struct subsystem * s) { diff -Nru a/drivers/base/hotplug.c b/drivers/base/hotplug.c --- a/drivers/base/hotplug.c Sat Apr 12 14:44:06 2003 +++ b/drivers/base/hotplug.c Sat Apr 12 14:44:06 2003 @@ -2,8 +2,8 @@ * drivers/base/hotplug.c - hotplug call code * * Copyright (c) 2000-2001 David Brownell - * Copyright (c) 2002 Greg Kroah-Hartman - * Copyright (c) 2002 IBM Corp. + * Copyright (c) 2002-2003 Greg Kroah-Hartman + * Copyright (c) 2002-2003 IBM Corp. * * Based off of drivers/usb/core/usb.c:call_agent(), which was * written by David Brownell. @@ -53,17 +53,6 @@ if (!hotplug_path [0]) return -ENODEV; - if (in_interrupt ()) { - pr_debug ("%s - in_interrupt, not allowed!", __FUNCTION__); - return -EIO; - } - - if (!current->fs->root) { - /* don't try to do anything unless we have a root partition */ - pr_debug ("%s - %s -- no FS yet\n", __FUNCTION__, action); - return -EIO; - } - envp = (char **) kmalloc (NUM_ENVP * sizeof (char *), GFP_KERNEL); if (!envp) return -ENOMEM; @@ -127,23 +116,6 @@ kfree (envp); return retval; } - - -/* - * dev_hotplug - called when any device is added or removed from a bus - */ -int dev_hotplug (struct device *dev, const char *action) -{ - pr_debug ("%s\n", __FUNCTION__); - if (!dev) - return -ENODEV; - - if (!dev->bus) - return -ENODEV; - - return do_hotplug (dev, dev->bus->name, action, dev->bus->hotplug); -} - /* * class_hotplug - called when a class is added or removed from a device diff -Nru a/drivers/block/Kconfig b/drivers/block/Kconfig --- a/drivers/block/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/block/Kconfig Sat Apr 12 14:44:06 2003 @@ -28,6 +28,13 @@ tristate "Atari floppy support" depends on ATARI +config BLK_DEV_FD98 + tristate "NEC PC-9800 floppy disk support" + depends on X86_PC9800 + ---help--- + If you want to use the floppy disk drive(s) of NEC PC-9801/PC-9821, + say Y. + config BLK_DEV_SWIM_IOP bool "Macintosh IIfx/Quadra 900/Quadra 950 floppy support (EXPERIMENTAL)" depends on MAC && EXPERIMENTAL diff -Nru a/drivers/block/Makefile b/drivers/block/Makefile --- a/drivers/block/Makefile Sat Apr 12 14:44:09 2003 +++ b/drivers/block/Makefile Sat Apr 12 14:44:09 2003 @@ -12,6 +12,7 @@ obj-$(CONFIG_MAC_FLOPPY) += swim3.o obj-$(CONFIG_BLK_DEV_FD) += floppy.o +obj-$(CONFIG_BLK_DEV_FD98) += floppy98.o obj-$(CONFIG_AMIGA_FLOPPY) += amiflop.o obj-$(CONFIG_ATARI_FLOPPY) += ataflop.o obj-$(CONFIG_BLK_DEV_SWIM_IOP) += swim_iop.o diff -Nru a/drivers/block/floppy.c b/drivers/block/floppy.c --- a/drivers/block/floppy.c Sat Apr 12 14:44:06 2003 +++ b/drivers/block/floppy.c Sat Apr 12 14:44:06 2003 @@ -4396,11 +4396,9 @@ return 0; } spin_unlock_irqrestore(&floppy_usage_lock, flags); - MOD_INC_USE_COUNT; if (fd_request_irq()) { DPRINT("Unable to grab IRQ%d for the floppy driver\n", FLOPPY_IRQ); - MOD_DEC_USE_COUNT; spin_lock_irqsave(&floppy_usage_lock, flags); usage_count--; spin_unlock_irqrestore(&floppy_usage_lock, flags); @@ -4410,7 +4408,6 @@ DPRINT("Unable to grab DMA%d for the floppy driver\n", FLOPPY_DMA); fd_free_irq(); - MOD_DEC_USE_COUNT; spin_lock_irqsave(&floppy_usage_lock, flags); usage_count--; spin_unlock_irqrestore(&floppy_usage_lock, flags); @@ -4459,7 +4456,6 @@ release_region(FDCS->address + 2, 4); release_region(FDCS->address + 7, 1); } - MOD_DEC_USE_COUNT; spin_lock_irqsave(&floppy_usage_lock, flags); usage_count--; spin_unlock_irqrestore(&floppy_usage_lock, flags); @@ -4527,7 +4523,6 @@ release_region(FDCS->address+7, 1); } fdc = old_fdc; - MOD_DEC_USE_COUNT; } diff -Nru a/drivers/block/floppy98.c b/drivers/block/floppy98.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/block/floppy98.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,4669 @@ +/* + * linux/drivers/block/floppy.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + * Copyright (C) 1993, 1994 Alain Knaff + * Copyright (C) 1998 Alan Cox + */ +/* + * 02.12.91 - Changed to static variables to indicate need for reset + * and recalibrate. This makes some things easier (output_byte reset + * checking etc), and means less interrupt jumping in case of errors, + * so the code is hopefully easier to understand. + */ + +/* + * This file is certainly a mess. I've tried my best to get it working, + * but I don't like programming floppies, and I have only one anyway. + * Urgel. I should check for more errors, and do more graceful error + * recovery. Seems there are problems with several drives. I've tried to + * correct them. No promises. + */ + +/* + * As with hd.c, all routines within this file can (and will) be called + * by interrupts, so extreme caution is needed. A hardware interrupt + * handler may not sleep, or a kernel panic will happen. Thus I cannot + * call "floppy-on" directly, but have to set a special timer interrupt + * etc. + */ + +/* + * 28.02.92 - made track-buffering routines, based on the routines written + * by entropy@wintermute.wpi.edu (Lawrence Foard). Linus. + */ + +/* + * Automatic floppy-detection and formatting written by Werner Almesberger + * (almesber@nessie.cs.id.ethz.ch), who also corrected some problems with + * the floppy-change signal detection. + */ + +/* + * 1992/7/22 -- Hennus Bergman: Added better error reporting, fixed + * FDC data overrun bug, added some preliminary stuff for vertical + * recording support. + * + * 1992/9/17: Added DMA allocation & DMA functions. -- hhb. + * + * TODO: Errors are still not counted properly. + */ + +/* 1992/9/20 + * Modifications for ``Sector Shifting'' by Rob Hooft (hooft@chem.ruu.nl) + * modeled after the freeware MS-DOS program fdformat/88 V1.8 by + * Christoph H. Hochst\"atter. + * I have fixed the shift values to the ones I always use. Maybe a new + * ioctl() should be created to be able to modify them. + * There is a bug in the driver that makes it impossible to format a + * floppy as the first thing after bootup. + */ + +/* + * 1993/4/29 -- Linus -- cleaned up the timer handling in the kernel, and + * this helped the floppy driver as well. Much cleaner, and still seems to + * work. + */ + +/* 1994/6/24 --bbroad-- added the floppy table entries and made + * minor modifications to allow 2.88 floppies to be run. + */ + +/* 1994/7/13 -- Paul Vojta -- modified the probing code to allow three or more + * disk types. + */ + +/* + * 1994/8/8 -- Alain Knaff -- Switched to fdpatch driver: Support for bigger + * format bug fixes, but unfortunately some new bugs too... + */ + +/* 1994/9/17 -- Koen Holtman -- added logging of physical floppy write + * errors to allow safe writing by specialized programs. + */ + +/* 1995/4/24 -- Dan Fandrich -- added support for Commodore 1581 3.5" disks + * by defining bit 1 of the "stretch" parameter to mean put sectors on the + * opposite side of the disk, leaving the sector IDs alone (i.e. Commodore's + * drives are "upside-down"). + */ + +/* + * 1995/8/26 -- Andreas Busse -- added Mips support. + */ + +/* + * 1995/10/18 -- Ralf Baechle -- Portability cleanup; move machine dependent + * features to asm/floppy.h. + */ + +/* + * 1998/05/07 -- Russell King -- More portability cleanups; moved definition of + * interrupt and dma channel to asm/floppy.h. Cleaned up some formatting & + * use of '0' for NULL. + */ + +/* + * 1998/06/07 -- Alan Cox -- Merged the 2.0.34 fixes for resource allocation + * failures. + */ + +/* + * 1998/09/20 -- David Weinehall -- Added slow-down code for buggy PS/2-drives. + */ + +/* + * 1999/01/19 -- N.Fujita & Linux/98 Project -- Added code for NEC PC-9800 + * series. + */ + +/* + * 1999/08/13 -- Paul Slootman -- floppy stopped working on Alpha after 24 + * days, 6 hours, 32 minutes and 32 seconds (i.e. MAXINT jiffies; ints were + * being used to store jiffies, which are unsigned longs). + */ + +/* + * 2000/08/28 -- Arnaldo Carvalho de Melo + * - get rid of check_region + * - s/suser/capable/ + */ + +/* + * 2001/08/26 -- Paul Gortmaker - fix insmod oops on machines with no + * floppy controller (lingering task on list after module is gone... boom.) + */ + +/* + * 2002/02/07 -- Anton Altaparmakov - Fix io ports reservation to correct range + * (0x3f2-0x3f5, 0x3f7). This fix is a bit of a hack but the proper fix + * requires many non-obvious changes in arch dependent code. + */ + +/* + * 2002/10/12 -- Osamu Tomita + * split code from floppy.c + * support NEC PC-9800 only + */ + +#define FLOPPY_SANITY_CHECK +#undef FLOPPY_SILENT_DCL_CLEAR + +/* +#define PC9800_DEBUG_FLOPPY +#define PC9800_DEBUG_FLOPPY2 +*/ + +#define REALLY_SLOW_IO + +#define DEBUGT 2 +#define DCL_DEBUG /* debug disk change line */ + +/* do print messages for unexpected interrupts */ +static int print_unex=1; +#include +#include +#include +#include +#include +#include +#include +#define FDPATCHES +#include + +/* + * 1998/1/21 -- Richard Gooch -- devfs support + */ + + +#include +#define FLOPPY98_MOTOR_MASK 0x08 + +#define FDPATCHES +#include +#define FD98_STATUS (0 + FD_IOPORT ) +#define FD98_DATA (2 + FD_IOPORT ) +#define FD_MODE (4 + FD_IOPORT ) +#define FD_MODE_CHANGE 0xbe +#define FD_EMODE_CHANGE 0x4be + +#include +#include +#include +#include +#include +#include +#include +#include /* CMOS defines */ +#include +#include +#include +#include +#include +#include /* for invalidate_buffers() */ + +/* + * PS/2 floppies have much slower step rates than regular floppies. + * It's been recommended that take about 1/4 of the default speed + * in some more extreme cases. + */ +static int slow_floppy; + +#include +#include +#include +#include +#include + +#ifndef DEFAULT_FLOPPY_IRQ +# define DEFAULT_FLOPPY_IRQ 11 +#endif +#ifndef DEFAULT_FLOPPY_DMA +# define DEFAULT_FLOPPY_DMA 2 +#endif + +static int FLOPPY_IRQ=DEFAULT_FLOPPY_IRQ; +static int FLOPPY_DMA=DEFAULT_FLOPPY_DMA; +static int can_use_virtual_dma=2; +static int auto_detect_mode = 0; +static int retry_auto_detect = 0; +#define FD_AFTER_RESET_DELAY 1000 + +/* ======= + * can use virtual DMA: + * 0 = use of virtual DMA disallowed by config + * 1 = use of virtual DMA prescribed by config + * 2 = no virtual DMA preference configured. By default try hard DMA, + * but fall back on virtual DMA when not enough memory available + */ + +static int use_virtual_dma; +/* ======= + * use virtual DMA + * 0 using hard DMA + * 1 using virtual DMA + * This variable is set to virtual when a DMA mem problem arises, and + * reset back in floppy_grab_irq_and_dma. + * It is not safe to reset it in other circumstances, because the floppy + * driver may have several buffers in use at once, and we do currently not + * record each buffers capabilities + */ + +static spinlock_t floppy_lock = SPIN_LOCK_UNLOCKED; + +static unsigned short virtual_dma_port=0x3f0; +void floppy_interrupt(int irq, void *dev_id, struct pt_regs * regs); +static int set_mode(char mask, char data); +static void register_devfs_entries (int drive) __init; + +#define K_64 0x10000 /* 64KB */ + +/* the following is the mask of allowed drives. By default units 2 and + * 3 of both floppy controllers are disabled, because switching on the + * motor of these drives causes system hangs on some PCI computers. drive + * 0 is the low bit (0x1), and drive 7 is the high bit (0x80). Bits are on if + * a drive is allowed. + * + * NOTE: This must come before we include the arch floppy header because + * some ports reference this variable from there. -DaveM + */ + +static int allowed_drive_mask = 0x0f; + +#include + +static int irqdma_allocated; + +#define LOCAL_END_REQUEST +#define DEVICE_NAME "floppy" + +#include +#include +#include /* for the compatibility eject ioctl */ +#include + +static struct request *current_req; +static struct request_queue floppy_queue; + +#ifndef fd_get_dma_residue +#define fd_get_dma_residue() get_dma_residue(FLOPPY_DMA) +#endif + +/* Dma Memory related stuff */ + +#ifndef fd_dma_mem_free +#define fd_dma_mem_free(addr, size) free_pages(addr, get_order(size)) +#endif + +#ifndef fd_dma_mem_alloc +#define fd_dma_mem_alloc(size) __get_dma_pages(GFP_KERNEL,get_order(size)) +#endif + +static inline void fallback_on_nodma_alloc(char **addr, size_t l) +{ +#ifdef FLOPPY_CAN_FALLBACK_ON_NODMA + if (*addr) + return; /* we have the memory */ + if (can_use_virtual_dma != 2) + return; /* no fallback allowed */ + printk("DMA memory shortage. Temporarily falling back on virtual DMA\n"); + *addr = (char *) nodma_mem_alloc(l); +#else + return; +#endif +} + +/* End dma memory related stuff */ + +static unsigned long fake_change; +static int initialising=1; + +static inline int TYPE(kdev_t x) { + return (minor(x)>>2) & 0x1f; +} +static inline int DRIVE(kdev_t x) { + return (minor(x)&0x03) | ((minor(x)&0x80) >> 5); +} +#define ITYPE(x) (((x)>>2) & 0x1f) +#define TOMINOR(x) ((x & 3) | ((x & 4) << 5)) +#define UNIT(x) ((x) & 0x03) /* drive on fdc */ +#define FDC(x) (((x) & 0x04) >> 2) /* fdc of drive */ +#define REVDRIVE(fdc, unit) ((unit) + ((fdc) << 2)) + /* reverse mapping from unit and fdc to drive */ +#define DP (&drive_params[current_drive]) +#define DRS (&drive_state[current_drive]) +#define DRWE (&write_errors[current_drive]) +#define FDCS (&fdc_state[fdc]) +#define CLEARF(x) (clear_bit(x##_BIT, &DRS->flags)) +#define SETF(x) (set_bit(x##_BIT, &DRS->flags)) +#define TESTF(x) (test_bit(x##_BIT, &DRS->flags)) + +#define UDP (&drive_params[drive]) +#define UDRS (&drive_state[drive]) +#define UDRWE (&write_errors[drive]) +#define UFDCS (&fdc_state[FDC(drive)]) +#define UCLEARF(x) (clear_bit(x##_BIT, &UDRS->flags)) +#define USETF(x) (set_bit(x##_BIT, &UDRS->flags)) +#define UTESTF(x) (test_bit(x##_BIT, &UDRS->flags)) + +#define DPRINT(format, args...) printk(DEVICE_NAME "%d: " format, current_drive , ## args) + +#define PH_HEAD(floppy,head) (((((floppy)->stretch & 2) >>1) ^ head) << 2) +#define STRETCH(floppy) ((floppy)->stretch & FD_STRETCH) + +#define CLEARSTRUCT(x) memset((x), 0, sizeof(*(x))) + +/* read/write */ +#define COMMAND raw_cmd->cmd[0] +#define DR_SELECT raw_cmd->cmd[1] +#define TRACK raw_cmd->cmd[2] +#define HEAD raw_cmd->cmd[3] +#define SECTOR raw_cmd->cmd[4] +#define SIZECODE raw_cmd->cmd[5] +#define SECT_PER_TRACK raw_cmd->cmd[6] +#define GAP raw_cmd->cmd[7] +#define SIZECODE2 raw_cmd->cmd[8] +#define NR_RW 9 + +/* format */ +#define F_SIZECODE raw_cmd->cmd[2] +#define F_SECT_PER_TRACK raw_cmd->cmd[3] +#define F_GAP raw_cmd->cmd[4] +#define F_FILL raw_cmd->cmd[5] +#define NR_F 6 + +/* + * Maximum disk size (in kilobytes). This default is used whenever the + * current disk size is unknown. + * [Now it is rather a minimum] + */ +#define MAX_DISK_SIZE 4 /* 3984*/ + + +/* + * globals used by 'result()' + */ +#define MAX_REPLIES 16 +static unsigned char reply_buffer[MAX_REPLIES]; +static int inr; /* size of reply buffer, when called from interrupt */ +#define ST0 (reply_buffer[0]) +#define ST1 (reply_buffer[1]) +#define ST2 (reply_buffer[2]) +#define ST3 (reply_buffer[0]) /* result of GETSTATUS */ +#define R_TRACK (reply_buffer[3]) +#define R_HEAD (reply_buffer[4]) +#define R_SECTOR (reply_buffer[5]) +#define R_SIZECODE (reply_buffer[6]) + +#define SEL_DLY (2*HZ/100) + +/* + * this struct defines the different floppy drive types. + */ +static struct { + struct floppy_drive_params params; + const char *name; /* name printed while booting */ +} default_drive_params[]= { +/* NOTE: the time values in jiffies should be in msec! + CMOS drive type + | Maximum data rate supported by drive type + | | Head load time, msec + | | | Head unload time, msec (not used) + | | | | Step rate interval, usec + | | | | | Time needed for spinup time (jiffies) + | | | | | | Timeout for spinning down (jiffies) + | | | | | | | Spindown offset (where disk stops) + | | | | | | | | Select delay + | | | | | | | | | RPS + | | | | | | | | | | Max number of tracks + | | | | | | | | | | | Interrupt timeout + | | | | | | | | | | | | Max nonintlv. sectors + | | | | | | | | | | | | | -Max Errors- flags */ +{{0, 500, 16, 16, 8000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 80, 3*HZ, 20, {3,1,2,0,2}, 0, + 0, { 7, 4, 8, 2, 1, 5, 3,10}, 3*HZ/2, 0 }, "unknown" }, + +{{1, 300, 16, 16, 8000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 40, 3*HZ, 17, {3,1,2,0,2}, 0, + 0, { 1, 0, 0, 0, 0, 0, 0, 0}, 3*HZ/2, 1 }, "360K PC" }, /*5 1/4 360 KB PC*/ + +{{2, 500, 16, 16, 6000, 4*HZ/10, 3*HZ, 14, SEL_DLY, 6, 83, 3*HZ, 17, {3,1,2,0,2}, 0, + 0, { 2, 6, 4, 0, 0, 0, 0, 0}, 3*HZ/2, 2 }, "1.2M" }, /*5 1/4 HD AT*/ + +{{3, 250, 16, 16, 3000, 1*HZ, 3*HZ, 0, SEL_DLY, 5, 83, 3*HZ, 20, {3,1,2,0,2}, 0, + 0, { 4, 6, 0, 0, 0, 0, 0, 0}, 3*HZ/2, 4 }, "720k" }, /*3 1/2 DD*/ + +{{4, 500, 16, 16, 4000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 20, {3,1,2,0,2}, 0, + 0, { 7,10, 2, 4, 6, 0, 0, 0}, 3*HZ/2, 7 }, "1.44M" }, /*3 1/2 HD*/ + +{{5, 1000, 15, 8, 3000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 40, {3,1,2,0,2}, 0, + 0, { 7, 8, 4,25,28,22,31,21}, 3*HZ/2, 8 }, "2.88M AMI BIOS" }, /*3 1/2 ED*/ + +{{6, 1000, 15, 8, 3000, 4*HZ/10, 3*HZ, 10, SEL_DLY, 5, 83, 3*HZ, 40, {3,1,2,0,2}, 0, + 0, { 7, 8, 4,25,28,22,31,21}, 3*HZ/2, 8 }, "2.88M" } /*3 1/2 ED*/ +/* | --autodetected formats--- | | | + * read_track | | Name printed when booting + * | Native format + * Frequency of disk change checks */ +}; + +static struct floppy_drive_params drive_params[N_DRIVE]; +static struct floppy_drive_struct drive_state[N_DRIVE]; +static struct floppy_write_errors write_errors[N_DRIVE]; +static struct timer_list motor_off_timer[N_DRIVE]; +static struct gendisk *disks[N_DRIVE]; +static struct floppy_raw_cmd *raw_cmd, default_raw_cmd; + +/* + * This struct defines the different floppy types. + * + * Bit 0 of 'stretch' tells if the tracks need to be doubled for some + * types (e.g. 360kB diskette in 1.2MB drive, etc.). Bit 1 of 'stretch' + * tells if the disk is in Commodore 1581 format, which means side 0 sectors + * are located on side 1 of the disk but with a side 0 ID, and vice-versa. + * This is the same as the Sharp MZ-80 5.25" CP/M disk format, except that the + * 1581's logical side 0 is on physical side 1, whereas the Sharp's logical + * side 0 is on physical side 0 (but with the misnamed sector IDs). + * 'stretch' should probably be renamed to something more general, like + * 'options'. Other parameters should be self-explanatory (see also + * setfdprm(8)). + */ +/* + Size + | Sectors per track + | | Head + | | | Tracks + | | | | Stretch + | | | | | Gap 1 size + | | | | | | Data rate, | 0x40 for perp + | | | | | | | Spec1 (stepping rate, head unload + | | | | | | | | /fmt gap (gap2) */ +static struct floppy_struct floppy_type[32] = { + { 0, 0,0, 0,0,0x00,0x00,0x00,0x00,NULL }, /* 0 no testing */ +#if 0 + { 720, 9,2,40,0,0x2A,0x02,0xDF,0x50,"d360" }, /* 1 360KB PC */ +#else + { 2464,16,2,77,0,0x35,0x48,0xDF,0x74,"d360" }, /* 1 1.25MB 98 */ +#endif + { 2400,15,2,80,0,0x1B,0x00,0xDF,0x54,"h1200" }, /* 2 1.2MB AT */ + { 720, 9,1,80,0,0x2A,0x02,0xDF,0x50,"D360" }, /* 3 360KB SS 3.5" */ + { 1440, 9,2,80,0,0x2A,0x02,0xDF,0x50,"D720" }, /* 4 720KB 3.5" */ + { 720, 9,2,40,1,0x23,0x01,0xDF,0x50,"h360" }, /* 5 360KB AT */ + { 1440, 9,2,80,0,0x23,0x01,0xDF,0x50,"h720" }, /* 6 720KB AT */ + { 2880,18,2,80,0,0x1B,0x00,0xCF,0x6C,"H1440" }, /* 7 1.44MB 3.5" */ + { 5760,36,2,80,0,0x1B,0x43,0xAF,0x54,"E2880" }, /* 8 2.88MB 3.5" */ + { 6240,39,2,80,0,0x1B,0x43,0xAF,0x28,"E3120" }, /* 9 3.12MB 3.5" */ + + { 2880,18,2,80,0,0x25,0x00,0xDF,0x02,"h1440" }, /* 10 1.44MB 5.25" */ + { 3360,21,2,80,0,0x1C,0x00,0xCF,0x0C,"H1680" }, /* 11 1.68MB 3.5" */ + { 820,10,2,41,1,0x25,0x01,0xDF,0x2E,"h410" }, /* 12 410KB 5.25" */ + { 1640,10,2,82,0,0x25,0x02,0xDF,0x2E,"H820" }, /* 13 820KB 3.5" */ + { 2952,18,2,82,0,0x25,0x00,0xDF,0x02,"h1476" }, /* 14 1.48MB 5.25" */ + { 3444,21,2,82,0,0x25,0x00,0xDF,0x0C,"H1722" }, /* 15 1.72MB 3.5" */ + { 840,10,2,42,1,0x25,0x01,0xDF,0x2E,"h420" }, /* 16 420KB 5.25" */ + { 1660,10,2,83,0,0x25,0x02,0xDF,0x2E,"H830" }, /* 17 830KB 3.5" */ + { 2988,18,2,83,0,0x25,0x00,0xDF,0x02,"h1494" }, /* 18 1.49MB 5.25" */ + { 3486,21,2,83,0,0x25,0x00,0xDF,0x0C,"H1743" }, /* 19 1.74 MB 3.5" */ + + { 1760,11,2,80,0,0x1C,0x09,0xCF,0x00,"h880" }, /* 20 880KB 5.25" */ + { 2080,13,2,80,0,0x1C,0x01,0xCF,0x00,"D1040" }, /* 21 1.04MB 3.5" */ + { 2240,14,2,80,0,0x1C,0x19,0xCF,0x00,"D1120" }, /* 22 1.12MB 3.5" */ + { 3200,20,2,80,0,0x1C,0x20,0xCF,0x2C,"h1600" }, /* 23 1.6MB 5.25" */ + { 3520,22,2,80,0,0x1C,0x08,0xCF,0x2e,"H1760" }, /* 24 1.76MB 3.5" */ + { 3840,24,2,80,0,0x1C,0x20,0xCF,0x00,"H1920" }, /* 25 1.92MB 3.5" */ + { 6400,40,2,80,0,0x25,0x5B,0xCF,0x00,"E3200" }, /* 26 3.20MB 3.5" */ + { 7040,44,2,80,0,0x25,0x5B,0xCF,0x00,"E3520" }, /* 27 3.52MB 3.5" */ + { 7680,48,2,80,0,0x25,0x63,0xCF,0x00,"E3840" }, /* 28 3.84MB 3.5" */ + + { 3680,23,2,80,0,0x1C,0x10,0xCF,0x00,"H1840" }, /* 29 1.84MB 3.5" */ + { 1600,10,2,80,0,0x25,0x02,0xDF,0x2E,"D800" }, /* 30 800KB 3.5" */ + { 3200,20,2,80,0,0x1C,0x00,0xCF,0x2C,"H1600" }, /* 31 1.6MB 3.5" */ +}; + +#define NUMBER(x) (sizeof(x) / sizeof(*(x))) +#define SECTSIZE (_FD_SECTSIZE(*floppy)) + +/* Auto-detection: Disk type used until the next media change occurs. */ +static struct floppy_struct *current_type[N_DRIVE]; + +/* + * User-provided type information. current_type points to + * the respective entry of this array. + */ +static struct floppy_struct user_params[N_DRIVE]; + +static sector_t floppy_sizes[256]; + +/* + * The driver is trying to determine the correct media format + * while probing is set. rw_interrupt() clears it after a + * successful access. + */ +static int probing; + +/* Synchronization of FDC access. */ +#define FD_COMMAND_NONE -1 +#define FD_COMMAND_ERROR 2 +#define FD_COMMAND_OKAY 3 + +static volatile int command_status = FD_COMMAND_NONE; +static unsigned long fdc_busy; +static DECLARE_WAIT_QUEUE_HEAD(fdc_wait); +static DECLARE_WAIT_QUEUE_HEAD(command_done); + +#define NO_SIGNAL (!interruptible || !signal_pending(current)) +#define CALL(x) if ((x) == -EINTR) return -EINTR +#define ECALL(x) if ((ret = (x))) return ret; +#define _WAIT(x,i) CALL(ret=wait_til_done((x),i)) +#define WAIT(x) _WAIT((x),interruptible) +#define IWAIT(x) _WAIT((x),1) + +/* Errors during formatting are counted here. */ +static int format_errors; + +/* Format request descriptor. */ +static struct format_descr format_req; + +/* + * Rate is 0 for 500kb/s, 1 for 300kbps, 2 for 250kbps + * Spec1 is 0xSH, where S is stepping rate (F=1ms, E=2ms, D=3ms etc), + * H is head unload time (1=16ms, 2=32ms, etc) + */ + +/* + * Track buffer + * Because these are written to by the DMA controller, they must + * not contain a 64k byte boundary crossing, or data will be + * corrupted/lost. + */ +static char *floppy_track_buffer; +static int max_buffer_sectors; + +static int *errors; +typedef void (*done_f)(int); +static struct cont_t { + void (*interrupt)(void); /* this is called after the interrupt of the + * main command */ + void (*redo)(void); /* this is called to retry the operation */ + void (*error)(void); /* this is called to tally an error */ + done_f done; /* this is called to say if the operation has + * succeeded/failed */ +} *cont; + +static void floppy_ready(void); +static void floppy_start(void); +static void process_fd_request(void); +static void recalibrate_floppy(void); +static void floppy_shutdown(unsigned long); + +static int floppy_grab_irq_and_dma(void); +static void floppy_release_irq_and_dma(void); + +/* + * The "reset" variable should be tested whenever an interrupt is scheduled, + * after the commands have been sent. This is to ensure that the driver doesn't + * get wedged when the interrupt doesn't come because of a failed command. + * reset doesn't need to be tested before sending commands, because + * output_byte is automatically disabled when reset is set. + */ +#define CHECK_RESET { if (FDCS->reset){ reset_fdc(); return; } } +static void reset_fdc(void); + +/* + * These are global variables, as that's the easiest way to give + * information to interrupts. They are the data used for the current + * request. + */ +#define NO_TRACK -1 +#define NEED_1_RECAL -2 +#define NEED_2_RECAL -3 + +static int usage_count; + +/* buffer related variables */ +static int buffer_track = -1; +static int buffer_drive = -1; +static int buffer_min = -1; +static int buffer_max = -1; + +/* fdc related variables, should end up in a struct */ +static struct floppy_fdc_state fdc_state[N_FDC]; +static int fdc; /* current fdc */ + +static struct floppy_struct *_floppy = floppy_type; +static unsigned char current_drive; +static long current_count_sectors; +static unsigned char fsector_t; /* sector in track */ +static unsigned char in_sector_offset; /* offset within physical sector, + * expressed in units of 512 bytes */ + +#ifndef fd_eject +static inline int fd_eject(int drive) +{ + return -EINVAL; +} +#endif + +#ifdef DEBUGT +static long unsigned debugtimer; +#endif + +/* + * Debugging + * ========= + */ +static inline void set_debugt(void) +{ +#ifdef DEBUGT + debugtimer = jiffies; +#endif +} + +static inline void debugt(const char *message) +{ +#ifdef DEBUGT + if (DP->flags & DEBUGT) + printk("%s dtime=%lu\n", message, jiffies-debugtimer); +#endif +} + +typedef void (*timeout_fn)(unsigned long); +static struct timer_list fd_timeout = TIMER_INITIALIZER(floppy_shutdown, 0, 0); + +static const char *timeout_message; + +#ifdef FLOPPY_SANITY_CHECK +static void is_alive(const char *message) +{ + /* this routine checks whether the floppy driver is "alive" */ + if (fdc_busy && command_status < 2 && !timer_pending(&fd_timeout)){ + DPRINT("timeout handler died: %s\n",message); + } +} +#endif + +static void (*do_floppy)(void) = NULL; + +#ifdef FLOPPY_SANITY_CHECK + +#define OLOGSIZE 20 + +static void (*lasthandler)(void); +static unsigned long interruptjiffies; +static unsigned long resultjiffies; +static int resultsize; +static unsigned long lastredo; + +static struct output_log { + unsigned char data; + unsigned char status; + unsigned long jiffies; +} output_log[OLOGSIZE]; + +static int output_log_pos; +#endif + +#define current_reqD -1 +#define MAXTIMEOUT -2 + +static void reschedule_timeout(int drive, const char *message, int marg) +{ + if (drive == current_reqD) + drive = current_drive; + del_timer(&fd_timeout); + if (drive < 0 || drive > N_DRIVE) { + fd_timeout.expires = jiffies + 20UL*HZ; + drive=0; + } else + fd_timeout.expires = jiffies + UDP->timeout; + add_timer(&fd_timeout); + if (UDP->flags & FD_DEBUG){ + DPRINT("reschedule timeout "); + printk(message, marg); + printk("\n"); + } + timeout_message = message; +} + +static int maximum(int a, int b) +{ + if (a > b) + return a; + else + return b; +} +#define INFBOUND(a,b) (a)=maximum((a),(b)); + +static int minimum(int a, int b) +{ + if (a < b) + return a; + else + return b; +} +#define SUPBOUND(a,b) (a)=minimum((a),(b)); + + +/* + * Bottom half floppy driver. + * ========================== + * + * This part of the file contains the code talking directly to the hardware, + * and also the main service loop (seek-configure-spinup-command) + */ + +/* + * disk change. + * This routine is responsible for maintaining the FD_DISK_CHANGE flag, + * and the last_checked date. + * + * last_checked is the date of the last check which showed 'no disk change' + * FD_DISK_CHANGE is set under two conditions: + * 1. The floppy has been changed after some i/o to that floppy already + * took place. + * 2. No floppy disk is in the drive. This is done in order to ensure that + * requests are quickly flushed in case there is no disk in the drive. It + * follows that FD_DISK_CHANGE can only be cleared if there is a disk in + * the drive. + * + * For 1., maxblock is observed. Maxblock is 0 if no i/o has taken place yet. + * For 2., FD_DISK_NEWCHANGE is watched. FD_DISK_NEWCHANGE is cleared on + * each seek. If a disk is present, the disk change line should also be + * cleared on each seek. Thus, if FD_DISK_NEWCHANGE is clear, but the disk + * change line is set, this means either that no disk is in the drive, or + * that it has been removed since the last seek. + * + * This means that we really have a third possibility too: + * The floppy has been changed after the last seek. + */ + +static int disk_change(int drive) +{ + return UTESTF(FD_DISK_CHANGED); +} + +static int set_mode(char mask, char data) +{ + register unsigned char newdor, olddor; + + olddor = FDCS->dor; + newdor = (olddor & mask) | data; + if (newdor != olddor) { + FDCS->dor = newdor; + fd_outb(newdor, FD_MODE); + } + + if (newdor & FLOPPY98_MOTOR_MASK) + floppy_grab_irq_and_dma(); + + if (olddor & FLOPPY98_MOTOR_MASK) + floppy_release_irq_and_dma(); + + return olddor; +} + +static void twaddle(void) +{ + if (DP->select_delay) + return; + + fd_outb(FDCS->dor & 0xf7, FD_MODE); + fd_outb(FDCS->dor, FD_MODE); + DRS->select_date = jiffies; +} + +/* reset all driver information about the current fdc. This is needed after + * a reset, and after a raw command. */ +static void reset_fdc_info(int mode) +{ + int drive; + + FDCS->spec1 = FDCS->spec2 = -1; + FDCS->need_configure = 1; + FDCS->perp_mode = 1; + FDCS->rawcmd = 0; + for (drive = 0; drive < N_DRIVE; drive++) + if (FDC(drive) == fdc && + (mode || UDRS->track != NEED_1_RECAL)) + UDRS->track = NEED_2_RECAL; +} + +/* selects the fdc and drive, and enables the fdc's input/dma. */ +static void set_fdc(int drive) +{ + fdc = 0; + current_drive = drive; + set_mode(~0, 0x10); + if (FDCS->rawcmd == 2) + reset_fdc_info(1); + + if (fd_inb(FD98_STATUS) != STATUS_READY) + FDCS->reset = 1; +} + +/* locks the driver */ +static int _lock_fdc(int drive, int interruptible, int line) +{ + if (!usage_count){ + printk(KERN_ERR "Trying to lock fdc while usage count=0 at line %d\n", line); + return -1; + } + if(floppy_grab_irq_and_dma()==-1) + return -EBUSY; + + if (test_and_set_bit(0, &fdc_busy)) { + DECLARE_WAITQUEUE(wait, current); + add_wait_queue(&fdc_wait, &wait); + + for (;;) { + set_current_state(TASK_INTERRUPTIBLE); + + if (!test_and_set_bit(0, &fdc_busy)) + break; + + schedule(); + + if (!NO_SIGNAL) { + remove_wait_queue(&fdc_wait, &wait); + return -EINTR; + } + } + + set_current_state(TASK_RUNNING); + remove_wait_queue(&fdc_wait, &wait); + } + command_status = FD_COMMAND_NONE; + + reschedule_timeout(drive, "lock fdc", 0); + set_fdc(drive); + return 0; +} + +#define lock_fdc(drive,interruptible) _lock_fdc(drive,interruptible, __LINE__) + +#define LOCK_FDC(drive,interruptible) \ +if (lock_fdc(drive,interruptible)) return -EINTR; + + +/* unlocks the driver */ +static inline void unlock_fdc(void) +{ + raw_cmd = 0; + if (!fdc_busy) + DPRINT("FDC access conflict!\n"); + + if (do_floppy) + DPRINT("device interrupt still active at FDC release: %p!\n", + do_floppy); + command_status = FD_COMMAND_NONE; + del_timer(&fd_timeout); + cont = NULL; + clear_bit(0, &fdc_busy); + floppy_release_irq_and_dma(); + wake_up(&fdc_wait); +} + +#ifndef CONFIG_PC9800_MOTOR_OFF /* tomita */ + +/* switches the motor off after a given timeout */ +static void motor_off_callback(unsigned long nr) +{ + printk(KERN_DEBUG "fdc%lu: turn off motor\n", nr); +} + +/* schedules motor off */ +static void floppy_off(unsigned int drive) +{ +} + +#else /* CONFIG_PC9800_MOTOR_OFF */ + +/* switches the motor off after a given timeout */ +static void motor_off_callback(unsigned long fdc) +{ + printk(KERN_DEBUG "fdc%u: turn off motor\n", (unsigned int) fdc); + + fd_outb(0, FD_MODE); /* MTON = 0 */ +} + +static struct timer_list motor_off_timer[N_FDC] = { + { data: 0, function: motor_off_callback }, +#if N_FDC > 1 + { data: 1, function: motor_off_callback }, +#endif +#if N_FDC > 2 +# error "N_FDC > 2; please fix initializer for motor_off_timer[]" +#endif +}; + +/* schedules motor off */ +static void floppy_off(unsigned int drive) +{ + unsigned long volatile delta; + register int fdc = FDC(drive); + + if (!(FDCS->dor & (0x10 << UNIT(drive)))) + return; + + del_timer(motor_off_timer + fdc); + +#if 0 + /* make spindle stop in a position which minimizes spinup time + * next time */ + if (UDP->rps){ + delta = jiffies - UDRS->first_read_date + HZ - + UDP->spindown_offset; + delta = ((delta * UDP->rps) % HZ) / UDP->rps; + motor_off_timer[drive].expires = jiffies + UDP->spindown - delta; + } +#else + if (UDP->rps) + motor_off_timer[drive].expires = jiffies + UDP->spindown; +#endif + + add_timer(motor_off_timer + fdc); +} + +#endif /* CONFIG_PC9800_MOTOR_OFF */ + +/* + * cycle through all N_DRIVE floppy drives, for disk change testing. + * stopping at current drive. This is done before any long operation, to + * be sure to have up to date disk change information. + */ +static void scandrives(void) +{ + int i, drive, saved_drive; + + if (DP->select_delay) + return; + + saved_drive = current_drive; + for (i=0; i < N_DRIVE; i++){ + drive = (saved_drive + i + 1) % N_DRIVE; + if (UDRS->fd_ref == 0 || UDP->select_delay != 0) + continue; /* skip closed drives */ + set_fdc(drive); + } + set_fdc(saved_drive); +} + +static void empty(void) +{ +} + +static DECLARE_WORK(floppy_work, NULL, NULL); + +static void schedule_bh( void (*handler)(void*) ) +{ + PREPARE_WORK(&floppy_work, handler, NULL); + schedule_work(&floppy_work); +} + +static struct timer_list fd_timer = TIMER_INITIALIZER(NULL, 0, 0); + +static void cancel_activity(void) +{ + do_floppy = NULL; + PREPARE_WORK(&floppy_work, (void*)(void*)empty, NULL); + del_timer(&fd_timer); +} + +/* this function makes sure that the disk stays in the drive during the + * transfer */ +static void fd_watchdog(void) +{ +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from watchdog\n"); + } +#endif + + if (disk_change(current_drive)){ + DPRINT("disk removed during i/o\n"); + cancel_activity(); + cont->done(0); + reset_fdc(); + } else { + del_timer(&fd_timer); + fd_timer.function = (timeout_fn) fd_watchdog; + fd_timer.expires = jiffies + HZ / 10; + add_timer(&fd_timer); + } +} + +static void main_command_interrupt(void) +{ + del_timer(&fd_timer); + cont->interrupt(); +} + +/* waits for a delay (spinup or select) to pass */ +static int fd_wait_for_completion(unsigned long delay, timeout_fn function) +{ + if (FDCS->reset){ + reset_fdc(); /* do the reset during sleep to win time + * if we don't need to sleep, it's a good + * occasion anyways */ + return 1; + } + + if ((signed) (jiffies - delay) < 0){ + del_timer(&fd_timer); + fd_timer.function = function; + fd_timer.expires = delay; + add_timer(&fd_timer); + return 1; + } + return 0; +} + +static spinlock_t floppy_hlt_lock = SPIN_LOCK_UNLOCKED; +static int hlt_disabled; +static void floppy_disable_hlt(void) +{ + unsigned long flags; + + spin_lock_irqsave(&floppy_hlt_lock, flags); + if (!hlt_disabled) { + hlt_disabled=1; +#ifdef HAVE_DISABLE_HLT + disable_hlt(); +#endif + } + spin_unlock_irqrestore(&floppy_hlt_lock, flags); +} + +static void floppy_enable_hlt(void) +{ + unsigned long flags; + + spin_lock_irqsave(&floppy_hlt_lock, flags); + if (hlt_disabled){ + hlt_disabled=0; +#ifdef HAVE_DISABLE_HLT + enable_hlt(); +#endif + } + spin_unlock_irqrestore(&floppy_hlt_lock, flags); +} + + +static void setup_DMA(void) +{ + unsigned long f; + +#ifdef FLOPPY_SANITY_CHECK + if (raw_cmd->length == 0){ + int i; + + printk("zero dma transfer size:"); + for (i=0; i < raw_cmd->cmd_count; i++) + printk("%x,", raw_cmd->cmd[i]); + printk("\n"); + cont->done(0); + FDCS->reset = 1; + return; + } + if (((unsigned long) raw_cmd->kernel_data) % 512){ + printk("non aligned address: %p\n", raw_cmd->kernel_data); + cont->done(0); + FDCS->reset=1; + return; + } +#endif + f=claim_dma_lock(); + fd_disable_dma(); +#ifdef fd_dma_setup + if (fd_dma_setup(raw_cmd->kernel_data, raw_cmd->length, + (raw_cmd->flags & FD_RAW_READ)? + DMA_MODE_READ : DMA_MODE_WRITE, + FDCS->address) < 0) { + release_dma_lock(f); + cont->done(0); + FDCS->reset=1; + return; + } + release_dma_lock(f); +#else + fd_clear_dma_ff(); + fd_cacheflush(raw_cmd->kernel_data, raw_cmd->length); + fd_set_dma_mode((raw_cmd->flags & FD_RAW_READ)? + DMA_MODE_READ : DMA_MODE_WRITE); + fd_set_dma_addr(raw_cmd->kernel_data); + fd_set_dma_count(raw_cmd->length); + virtual_dma_port = FDCS->address; + fd_enable_dma(); + release_dma_lock(f); +#endif + floppy_disable_hlt(); +} + +static void show_floppy(void); + +/* waits until the fdc becomes ready */ + +#ifdef PC9800_DEBUG_FLOPPY +#define READY_DELAY 10000000 +#else +#define READY_DELAY 100000 +#endif + +static int wait_til_ready(void) +{ + int counter, status; + if (FDCS->reset) + return -1; + for (counter = 0; counter < READY_DELAY; counter++) { + status = fd_inb(FD98_STATUS); + if (status & STATUS_READY) + return status; + } + if (!initialising) { + DPRINT("Getstatus times out (%x) on fdc %d\n", + status, fdc); + show_floppy(); + } + FDCS->reset = 1; + return -1; +} + +/* sends a command byte to the fdc */ +static int output_byte(char byte) +{ + int status; + + if ((status = wait_til_ready()) < 0) + return -1; + if ((status & (STATUS_READY|STATUS_DIR|STATUS_DMA)) == STATUS_READY){ + fd_outb(byte,FD98_DATA); +#ifdef FLOPPY_SANITY_CHECK + output_log[output_log_pos].data = byte; + output_log[output_log_pos].status = status; + output_log[output_log_pos].jiffies = jiffies; + output_log_pos = (output_log_pos + 1) % OLOGSIZE; +#endif + return 0; + } + FDCS->reset = 1; + if (!initialising) { + DPRINT("Unable to send byte %x to FDC. Fdc=%x Status=%x\n", + byte, fdc, status); + show_floppy(); + } + return -1; +} +#define LAST_OUT(x) if (output_byte(x)<0){ reset_fdc();return;} + +/* gets the response from the fdc */ +static int result(void) +{ + int i, status=0; + + for(i=0; i < MAX_REPLIES; i++) { + if ((status = wait_til_ready()) < 0) + break; + status &= STATUS_DIR|STATUS_READY|STATUS_BUSY|STATUS_DMA; + if ((status & ~STATUS_BUSY) == STATUS_READY){ +#ifdef FLOPPY_SANITY_CHECK + resultjiffies = jiffies; + resultsize = i; +#endif + return i; + } + if (status == (STATUS_DIR|STATUS_READY|STATUS_BUSY)) + reply_buffer[i] = fd_inb(FD98_DATA); + else + break; + } + if (!initialising) { + DPRINT("get result error. Fdc=%d Last status=%x Read bytes=%d\n", + fdc, status, i); + show_floppy(); + } + FDCS->reset = 1; + return -1; +} + +static int fifo_depth = 0xa; +static int no_fifo; + +#define NOMINAL_DTR 500 + +/* Issue a "SPECIFY" command to set the step rate time, head unload time, + * head load time, and DMA disable flag to values needed by floppy. + * + * The value "dtr" is the data transfer rate in Kbps. It is needed + * to account for the data rate-based scaling done by the 82072 and 82077 + * FDC types. This parameter is ignored for other types of FDCs (i.e. + * 8272a). + * + * Note that changing the data transfer rate has a (probably deleterious) + * effect on the parameters subject to scaling for 82072/82077 FDCs, so + * fdc_specify is called again after each data transfer rate + * change. + * + * srt: 1000 to 16000 in microseconds + * hut: 16 to 240 milliseconds + * hlt: 2 to 254 milliseconds + * + * These values are rounded up to the next highest available delay time. + */ +static void fdc_specify(void) +{ + output_byte(FD_SPECIFY); + output_byte(FDCS->spec1 = 0xdf); + output_byte(FDCS->spec2 = 0x24); +} + +static void tell_sector(void) +{ + printk(": track %d, head %d, sector %d, size %d", + R_TRACK, R_HEAD, R_SECTOR, R_SIZECODE); +} /* tell_sector */ + +static int auto_detect_mode_pc9800(void) +{ +#ifdef PC9800_DEBUG_FLOPPY + printk("auto_detect_mode_pc9800: retry_auto_detect=%d\n", + retry_auto_detect); +#endif + if (retry_auto_detect > 4) { + retry_auto_detect = 0; + return 1; + } + + switch ((int)(_floppy - floppy_type)) { + case 2: + _floppy = floppy_type + 4; + break; + + case 4: + case 6: + _floppy = floppy_type + 7; + break; + + case 7: + case 10: + _floppy = floppy_type + 2; + break; + + default: + _floppy = floppy_type + 7; + } + + retry_auto_detect++; + return 0; +} + +static void access_mode_change_pc9800(void); + +/* + * OK, this error interpreting routine is called after a + * DMA read/write has succeeded + * or failed, so we check the results, and copy any buffers. + * hhb: Added better error reporting. + * ak: Made this into a separate routine. + */ +static int interpret_errors(void) +{ + char bad; + + if (inr!=7) { + DPRINT("-- FDC reply error"); + FDCS->reset = 1; + return 1; + } + + /* check IC to find cause of interrupt */ + switch (ST0 & ST0_INTR) { + case 0x40: /* error occurred during command execution */ + if (ST1 & ST1_EOC) + return 0; /* occurs with pseudo-DMA */ + bad = 1; + if (ST1 & ST1_WP) { + DPRINT("Drive is write protected\n"); + CLEARF(FD_DISK_WRITABLE); + cont->done(0); + bad = 2; + } else if (ST1 & ST1_ND) { + SETF(FD_NEED_TWADDLE); + } else if (ST1 & ST1_OR) { + if (DP->flags & FTD_MSG) + DPRINT("Over/Underrun - retrying\n"); + bad = 0; + }else if (*errors >= DP->max_errors.reporting){ + if (ST0 & ST0_ECE) { + printk("Recalibrate failed!"); + } else if (ST2 & ST2_CRC) { + printk("data CRC error"); + tell_sector(); + } else if (ST1 & ST1_CRC) { + printk("CRC error"); + tell_sector(); + } else if ((ST1 & (ST1_MAM|ST1_ND)) || (ST2 & ST2_MAM)) { + if (auto_detect_mode) { + bad = (char)auto_detect_mode_pc9800(); + access_mode_change_pc9800(); + } + + if (bad) { + printk("floppy error: MA: _floppy - floppy_type=%d\n", (int)(_floppy - floppy_type)); + printk("bad=%d\n", (int)bad); + if (!probing) { + printk("sector not found"); + tell_sector(); + } else + printk("probe failed..."); + } + } else if (ST2 & ST2_WC) { /* seek error */ + printk("wrong cylinder"); + } else if (ST2 & ST2_BC) { /* cylinder marked as bad */ + printk("bad cylinder"); + } else { + printk("unknown error. ST[0..2] are: 0x%x 0x%x 0x%x", ST0, ST1, ST2); + tell_sector(); + } + printk("\n"); + + } + if (ST2 & ST2_WC || ST2 & ST2_BC) + /* wrong cylinder => recal */ + DRS->track = NEED_2_RECAL; + return bad; + case 0x80: /* invalid command given */ + DPRINT("Invalid FDC command given!\n"); + cont->done(0); + return 2; + case 0xc0: + SETF(FD_DISK_CHANGED); + SETF(FD_DISK_WRITABLE); + DPRINT("Abnormal termination caused by polling\n"); + cont->error(); + return 2; + default: /* (0) Normal command termination */ + auto_detect_mode = 0; + return 0; + } +} + +/* + * This routine is called when everything should be correctly set up + * for the transfer (i.e. floppy motor is on, the correct floppy is + * selected, and the head is sitting on the right track). + */ +static void setup_rw_floppy(void) +{ + int i,r, flags,dflags; + unsigned long ready_date; + timeout_fn function; + + access_mode_change_pc9800(); + flags = raw_cmd->flags; + if (flags & (FD_RAW_READ | FD_RAW_WRITE)) + flags |= FD_RAW_INTR; + + if ((flags & FD_RAW_SPIN) && !(flags & FD_RAW_NO_MOTOR)){ + ready_date = DRS->spinup_date + DP->spinup; + /* If spinup will take a long time, rerun scandrives + * again just before spinup completion. Beware that + * after scandrives, we must again wait for selection. + */ + if ((signed) (ready_date - jiffies) > DP->select_delay){ + ready_date -= DP->select_delay; + function = (timeout_fn) floppy_start; + } else + function = (timeout_fn) setup_rw_floppy; + + /* wait until the floppy is spinning fast enough */ + if (fd_wait_for_completion(ready_date,function)) + return; + } + dflags = DRS->flags; + + if ((flags & FD_RAW_READ) || (flags & FD_RAW_WRITE)) + setup_DMA(); + + if (flags & FD_RAW_INTR) + do_floppy = main_command_interrupt; + + r=0; + for (i=0; i< raw_cmd->cmd_count; i++) + r|=output_byte(raw_cmd->cmd[i]); + +#ifdef DEBUGT + debugt("rw_command: "); +#endif + if (r){ + cont->error(); + reset_fdc(); + return; + } + + if (!(flags & FD_RAW_INTR)){ + inr = result(); + cont->interrupt(); + } else if (flags & FD_RAW_NEED_DISK) + fd_watchdog(); +} + +static int blind_seek; + +/* + * This is the routine called after every seek (or recalibrate) interrupt + * from the floppy controller. + */ +static void seek_interrupt(void) +{ +#ifdef DEBUGT + debugt("seek interrupt:"); +#endif + if (inr != 2 || (ST0 & 0xF8) != 0x20) { + DRS->track = NEED_2_RECAL; + cont->error(); + cont->redo(); + return; + } + if (DRS->track >= 0 && DRS->track != ST1 && !blind_seek){ +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("clearing NEWCHANGE flag because of effective seek\n"); + DPRINT("jiffies=%lu\n", jiffies); + } +#endif + CLEARF(FD_DISK_NEWCHANGE); /* effective seek */ + CLEARF(FD_DISK_CHANGED); /* effective seek */ + DRS->select_date = jiffies; + } + DRS->track = ST1; + floppy_ready(); +} + +static void check_wp(void) +{ + if (TESTF(FD_VERIFY)) { + /* check write protection */ + output_byte(FD_GETSTATUS); + output_byte(UNIT(current_drive)); + if (result() != 1){ + FDCS->reset = 1; + return; + } + CLEARF(FD_VERIFY); + CLEARF(FD_NEED_TWADDLE); +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("checking whether disk is write protected\n"); + DPRINT("wp=%x\n",ST3 & 0x40); + } +#endif + if (!(ST3 & 0x40)) + SETF(FD_DISK_WRITABLE); + else + CLEARF(FD_DISK_WRITABLE); + } +} + +static void seek_floppy(void) +{ + int track; + + blind_seek=0; + +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from seek\n"); + } +#endif + + if (!TESTF(FD_DISK_NEWCHANGE) && + disk_change(current_drive) && + (raw_cmd->flags & FD_RAW_NEED_DISK)){ + /* the media changed flag should be cleared after the seek. + * If it isn't, this means that there is really no disk in + * the drive. + */ + SETF(FD_DISK_CHANGED); + cont->done(0); + cont->redo(); + return; + } + if (DRS->track <= NEED_1_RECAL){ + recalibrate_floppy(); + return; + } else if (TESTF(FD_DISK_NEWCHANGE) && + (raw_cmd->flags & FD_RAW_NEED_DISK) && + (DRS->track <= NO_TRACK || DRS->track == raw_cmd->track)) { + /* we seek to clear the media-changed condition. Does anybody + * know a more elegant way, which works on all drives? */ + if (raw_cmd->track) + track = raw_cmd->track - 1; + else { + if (DP->flags & FD_SILENT_DCL_CLEAR){ + blind_seek = 1; + raw_cmd->flags |= FD_RAW_NEED_SEEK; + } + track = 1; + } + } else { + check_wp(); + if (raw_cmd->track != DRS->track && + (raw_cmd->flags & FD_RAW_NEED_SEEK)) + track = raw_cmd->track; + else { + setup_rw_floppy(); + return; + } + } + + do_floppy = seek_interrupt; + output_byte(FD_SEEK); + output_byte(UNIT(current_drive)); + LAST_OUT(track); +#ifdef DEBUGT + debugt("seek command:"); +#endif +} + +static void recal_interrupt(void) +{ +#ifdef DEBUGT + debugt("recal interrupt:"); +#endif + if (inr !=2) + FDCS->reset = 1; + else if (ST0 & ST0_ECE) { + switch(DRS->track){ + case NEED_1_RECAL: +#ifdef DEBUGT + debugt("recal interrupt need 1 recal:"); +#endif + /* after a second recalibrate, we still haven't + * reached track 0. Probably no drive. Raise an + * error, as failing immediately might upset + * computers possessed by the Devil :-) */ + cont->error(); + cont->redo(); + return; + case NEED_2_RECAL: +#ifdef DEBUGT + debugt("recal interrupt need 2 recal:"); +#endif + /* If we already did a recalibrate, + * and we are not at track 0, this + * means we have moved. (The only way + * not to move at recalibration is to + * be already at track 0.) Clear the + * new change flag */ +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("clearing NEWCHANGE flag because of second recalibrate\n"); + } +#endif + + CLEARF(FD_DISK_NEWCHANGE); + DRS->select_date = jiffies; + /* fall through */ + default: +#ifdef DEBUGT + debugt("recal interrupt default:"); +#endif + /* Recalibrate moves the head by at + * most 80 steps. If after one + * recalibrate we don't have reached + * track 0, this might mean that we + * started beyond track 80. Try + * again. */ + DRS->track = NEED_1_RECAL; + break; + } + } else + DRS->track = ST1; + floppy_ready(); +} + +static void print_result(char *message, int inr) +{ + int i; + + DPRINT("%s ", message); + if (inr >= 0) + for (i=0; i= N_FDC || FDCS->address == -1){ + /* we don't even know which FDC is the culprit */ + printk("DOR0=%x\n", fdc_state[0].dor); + printk("floppy interrupt on bizarre fdc %d\n",fdc); + printk("handler=%p\n", handler); + is_alive("bizarre fdc"); + return; + } + + FDCS->reset = 0; + /* We have to clear the reset flag here, because apparently on boxes + * with level triggered interrupts (PS/2, Sparc, ...), it is needed to + * emit SENSEI's to clear the interrupt line. And FDCS->reset blocks the + * emission of the SENSEI's. + * It is OK to emit floppy commands because we are in an interrupt + * handler here, and thus we have to fear no interference of other + * activity. + */ + + do_print = !handler && !initialising; + + inr = result(); + if (inr && do_print) + print_result("unexpected interrupt", inr); + if (inr == 0){ + do { + output_byte(FD_SENSEI); + inr = result(); + if ((ST0 & ST0_INTR) == 0xC0) { + int drive = ST0 & ST0_DS; + + /* Attention Interrupt. */ + if (ST0 & ST0_NR) { +#ifdef PC9800_DEBUG_FLOPPY + if (do_print) + printk(KERN_DEBUG + "floppy debug: floppy ejected (drive %d)\n", + drive); +#endif + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + } else { +#ifdef PC9800_DEBUG_FLOPPY + if (do_print) + printk(KERN_DEBUG + "floppy debug: floppy inserted (drive %d)\n", + drive); +#endif + } + } /* Attention Interrupt */ +#ifdef PC9800_DEBUG_FLOPPY + else { + printk(KERN_DEBUG + "floppy debug : unknown interrupt\n"); + } +#endif + } while ((ST0 & 0x83) != UNIT(current_drive) && inr == 2); + } + if (handler) { + schedule_bh( (void *)(void *) handler); + } else { +#if 0 + FDCS->reset = 1; +#endif + } + is_alive("normal interrupt end"); +} + +static void recalibrate_floppy(void) +{ +#ifdef DEBUGT + debugt("recalibrate floppy:"); +#endif + do_floppy = recal_interrupt; + output_byte(FD_RECALIBRATE); + LAST_OUT(UNIT(current_drive)); +} + +/* + * Must do 4 FD_SENSEIs after reset because of ``drive polling''. + */ +static void reset_interrupt(void) +{ +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy debug: reset interrupt\n"); +#endif +#ifdef DEBUGT + debugt("reset interrupt:"); +#endif + result(); /* get the status ready for set_fdc */ + if (FDCS->reset) { + printk("reset set in interrupt, calling %p\n", cont->error); + cont->error(); /* a reset just after a reset. BAD! */ + } + cont->redo(); +} + +/* + * reset is done by pulling bit 2 of DOR low for a while (old FDCs), + * or by setting the self clearing bit 7 of STATUS (newer FDCs) + */ +static void reset_fdc(void) +{ + unsigned long flags; + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy debug: reset_fdc\n"); +#endif + + do_floppy = reset_interrupt; + FDCS->reset = 0; + reset_fdc_info(0); + + /* Pseudo-DMA may intercept 'reset finished' interrupt. */ + /* Irrelevant for systems with true DMA (i386). */ + + flags=claim_dma_lock(); + fd_disable_dma(); + release_dma_lock(flags); + + fd_outb(FDCS->dor | 0x80, FD_MODE); + udelay(FD_RESET_DELAY); + fd_outb(FDCS->dor, FD_MODE); + udelay(FD_AFTER_RESET_DELAY); +} + +static void show_floppy(void) +{ + int i; + + printk("\n"); + printk("floppy driver state\n"); + printk("-------------------\n"); + printk("now=%lu last interrupt=%lu diff=%lu last called handler=%p\n", + jiffies, interruptjiffies, jiffies-interruptjiffies, lasthandler); + + +#ifdef FLOPPY_SANITY_CHECK + printk("timeout_message=%s\n", timeout_message); + printk("last output bytes:\n"); + for (i=0; i < OLOGSIZE; i++) + printk("%2x %2x %lu\n", + output_log[(i+output_log_pos) % OLOGSIZE].data, + output_log[(i+output_log_pos) % OLOGSIZE].status, + output_log[(i+output_log_pos) % OLOGSIZE].jiffies); + printk("last result at %lu\n", resultjiffies); + printk("last redo_fd_request at %lu\n", lastredo); + for (i=0; ireset = 1; + if (cont){ + cont->done(0); + cont->redo(); /* this will recall reset when needed */ + } else { + printk("no cont in shutdown!\n"); + process_fd_request(); + } + is_alive("floppy shutdown"); +} +/*typedef void (*timeout_fn)(unsigned long);*/ + +static void access_mode_change_pc9800(void) +{ + static int access_mode, mode_change_now, old_mode, new_set = 1; +#ifdef PC9800_DEBUG_FLOPPY2 + printk("enter access_mode_change\n"); +#endif + access_mode = mode_change_now = 0; + if (DP->cmos==4) { + switch ((int)(_floppy - &floppy_type[0])) { + case 1: + case 2: + new_set = 1; + access_mode = 2; + break; + + case 4: + case 6: + new_set = 1; + access_mode = 3; + break; + + case 7: + case 10: + new_set = 1; + access_mode = 1; + break; + + default: + access_mode = 1; + break; + } + + old_mode = fd_inb(FD_MODE_CHANGE) & 3; + + switch (access_mode) { + case 1: + if ((old_mode & 2) == 0) { + fd_outb(old_mode | 2, FD_MODE_CHANGE); + mode_change_now = 1; + } else { + fd_outb(current_drive << 5, FD_EMODE_CHANGE); + if (fd_inb(FD_EMODE_CHANGE) == 0xff) + return; + } + + fd_outb((current_drive << 5) | 0x11, FD_EMODE_CHANGE); + mode_change_now = 1; + break; + + case 2: + if ((old_mode & 2) == 0) { + fd_outb(old_mode | 2, FD_MODE_CHANGE); + mode_change_now = 1; + } else { + fd_outb(current_drive << 5, FD_EMODE_CHANGE); + if ((fd_inb(FD_EMODE_CHANGE) & 1) == 0) + return; + fd_outb((current_drive << 5) | 0x10, FD_EMODE_CHANGE); + mode_change_now = 1; + } + + break; + + case 3: + if ((old_mode & 2) == 0) + return; + fd_outb(current_drive << 5, FD_EMODE_CHANGE); + if (fd_inb(FD_EMODE_CHANGE) & 1) + fd_outb((current_drive << 5) | 0x10, FD_EMODE_CHANGE); + fd_outb(old_mode & 0xfd, FD_MODE_CHANGE); + mode_change_now = 1; + break; + + default: + break; + } + } else { + switch ((int)(_floppy - &floppy_type[0])) { + case 1: + case 2: + new_set = 1; + access_mode = 2; + break; + + case 4: + case 6: + new_set = 1; + access_mode = 3; + break; + + default: + switch (DP->cmos) { + case 2: + access_mode = 2; + break; + + case 3: + access_mode = 3; + break; + + default: + break; + } + + break; + } + + old_mode = fd_inb(FD_MODE_CHANGE) & 3; + + switch (access_mode) { + case 2: + if ((old_mode & 2) == 0) { + fd_outb(old_mode | 2, FD_MODE_CHANGE); + mode_change_now = 1; + } + + break; + + case 3: + if (old_mode & 2) { + fd_outb(old_mode & 0xfd, FD_MODE_CHANGE); + mode_change_now = 1; + } + + break; + + default: + break; + } + } +#ifdef PC9800_DEBUG_FLOPPY2 + printk("floppy debug: DP->cmos=%d\n", DP->cmos); + printk("floppy debug: mode_change_now=%d\n", mode_change_now); + printk("floppy debug: access_mode=%d\n", access_mode); + printk("floppy debug: old_mode=%d\n", old_mode); + printk("floppy debug: _floppy - &floppy_type[0]=%d\n", (int)(_floppy - &floppy_type[0])); +#endif /* PC9800_DEBUG_FLOPPY2 */ + if(mode_change_now) + reset_fdc(); +} + +/* start motor, check media-changed condition and write protection */ +static int start_motor(void (*function)(void) ) +{ + access_mode_change_pc9800(); + set_mode(~0, 0x8); + + /* wait_for_completion also schedules reset if needed. */ + return(fd_wait_for_completion(DRS->select_date+DP->select_delay, + (timeout_fn) function)); +} + +static void floppy_ready(void) +{ + CHECK_RESET; + if (start_motor(floppy_ready)) return; + +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from floppy_ready\n"); + } +#endif + if (!(raw_cmd->flags & FD_RAW_NO_MOTOR) && + disk_change(current_drive) && + !DP->select_delay) + twaddle(); /* this clears the dcl on certain drive/controller + * combinations */ + +#ifdef fd_chose_dma_mode + if ((raw_cmd->flags & FD_RAW_READ) || + (raw_cmd->flags & FD_RAW_WRITE)) + { + unsigned long flags = claim_dma_lock(); + fd_chose_dma_mode(raw_cmd->kernel_data, + raw_cmd->length); + release_dma_lock(flags); + } +#endif + +#if 0 + access_mode_change_pc9800(); +#endif + if (raw_cmd->flags & (FD_RAW_NEED_SEEK | FD_RAW_NEED_DISK)){ + fdc_specify(); /* must be done here because of hut, hlt ... */ + seek_floppy(); + } else { + if ((raw_cmd->flags & FD_RAW_READ) || + (raw_cmd->flags & FD_RAW_WRITE)) + fdc_specify(); + setup_rw_floppy(); + } +} + +static void floppy_start(void) +{ + reschedule_timeout(current_reqD, "floppy start", 0); + + scandrives(); +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("setting NEWCHANGE in floppy_start\n"); + } +#endif + SETF(FD_DISK_NEWCHANGE); + floppy_ready(); +} + +/* + * ======================================================================== + * here ends the bottom half. Exported routines are: + * floppy_start, floppy_off, floppy_ready, lock_fdc, unlock_fdc, set_fdc, + * start_motor, reset_fdc, reset_fdc_info, interpret_errors. + * Initialization also uses output_byte, result, set_dor, floppy_interrupt + * and set_dor. + * ======================================================================== + */ +/* + * General purpose continuations. + * ============================== + */ + +static void do_wakeup(void) +{ + reschedule_timeout(MAXTIMEOUT, "do wakeup", 0); + cont = 0; + command_status += 2; + wake_up(&command_done); +} + +static struct cont_t wakeup_cont={ + empty, + do_wakeup, + empty, + (done_f)empty +}; + + +static struct cont_t intr_cont={ + empty, + process_fd_request, + empty, + (done_f) empty +}; + +static int wait_til_done(void (*handler)(void), int interruptible) +{ + int ret; + + schedule_bh((void *)(void *)handler); + + if (command_status < 2 && NO_SIGNAL) { + DECLARE_WAITQUEUE(wait, current); + + add_wait_queue(&command_done, &wait); + for (;;) { + set_current_state(interruptible? + TASK_INTERRUPTIBLE: + TASK_UNINTERRUPTIBLE); + + if (command_status >= 2 || !NO_SIGNAL) + break; + + is_alive("wait_til_done"); + + schedule(); + } + + set_current_state(TASK_RUNNING); + remove_wait_queue(&command_done, &wait); + } + + if (command_status < 2){ + cancel_activity(); + cont = &intr_cont; + reset_fdc(); + return -EINTR; + } + +#ifdef PC9800_DEBUG_FLOPPY + if (command_status != FD_COMMAND_OKAY) + printk("floppy check: wait_til_done out:%d\n", command_status); +#endif + if (FDCS->reset) + command_status = FD_COMMAND_ERROR; + if (command_status == FD_COMMAND_OKAY) + ret=0; + else + ret=-EIO; + command_status = FD_COMMAND_NONE; + return ret; +} + +static void generic_done(int result) +{ + command_status = result; + cont = &wakeup_cont; +} + +static void generic_success(void) +{ + cont->done(1); +} + +static void generic_failure(void) +{ + cont->done(0); +} + +static void success_and_wakeup(void) +{ + generic_success(); + cont->redo(); +} + + +/* + * formatting and rw support. + * ========================== + */ + +static int next_valid_format(void) +{ + int probed_format; + + probed_format = DRS->probed_format; + while(1){ + if (probed_format >= 8 || + !DP->autodetect[probed_format]){ + DRS->probed_format = 0; + return 1; + } + if (floppy_type[DP->autodetect[probed_format]].sect){ + DRS->probed_format = probed_format; + return 0; + } + probed_format++; + } +} + +static void bad_flp_intr(void) +{ + if (probing){ + DRS->probed_format++; + if (!next_valid_format()) + return; + } + (*errors)++; + INFBOUND(DRWE->badness, *errors); + if (*errors > DP->max_errors.abort) + cont->done(0); + if (*errors > DP->max_errors.reset) + FDCS->reset = 1; + else if (*errors > DP->max_errors.recal) + DRS->track = NEED_2_RECAL; +} + +static void set_floppy(int drive) +{ + int type = ITYPE(UDRS->fd_device); + if (type) { + auto_detect_mode = 0; + _floppy = floppy_type + type; + } else if (auto_detect_mode == 0) { + auto_detect_mode = 1; + retry_auto_detect = 0; + _floppy = current_type[drive]; + } +#ifdef PC9800_DEBUG_FLOPPY2 + printk("set_floppy: set floppy type=%d\n", (int)(_floppy - floppy_type)); +#endif +} + +/* + * formatting support. + * =================== + */ +static void format_interrupt(void) +{ + switch (interpret_errors()){ + case 1: + cont->error(); + case 2: + break; + case 0: + cont->done(1); + } + cont->redo(); +} + +#define CODE2SIZE (ssize = ((1 << SIZECODE) + 3) >> 2) +#define FM_MODE(x,y) ((y) & ~(((x)->rate & 0x80) >>1)) +#define CT(x) ((x) | 0xc0) +static void setup_format_params(int track) +{ + struct fparm { + unsigned char track,head,sect,size; + } *here = (struct fparm *)floppy_track_buffer; + int il,n; + int count,head_shift,track_shift; + + raw_cmd = &default_raw_cmd; + raw_cmd->track = track; + + raw_cmd->flags = FD_RAW_WRITE | FD_RAW_INTR | FD_RAW_SPIN | + FD_RAW_NEED_DISK | FD_RAW_NEED_SEEK; + raw_cmd->rate = _floppy->rate & 0x43; + raw_cmd->cmd_count = NR_F; + COMMAND = FM_MODE(_floppy,FD_FORMAT); + DR_SELECT = UNIT(current_drive) + PH_HEAD(_floppy,format_req.head); + F_SIZECODE = FD_SIZECODE(_floppy); + F_SECT_PER_TRACK = _floppy->sect << 2 >> F_SIZECODE; + F_GAP = _floppy->fmt_gap; + F_FILL = FD_FILL_BYTE; + + raw_cmd->kernel_data = floppy_track_buffer; + raw_cmd->length = 4 * F_SECT_PER_TRACK; + + /* allow for about 30ms for data transport per track */ + head_shift = (F_SECT_PER_TRACK + 5) / 6; + + /* a ``cylinder'' is two tracks plus a little stepping time */ + track_shift = 2 * head_shift + 3; + + /* position of logical sector 1 on this track */ + n = (track_shift * format_req.track + head_shift * format_req.head) + % F_SECT_PER_TRACK; + + /* determine interleave */ + il = 1; + if (_floppy->fmt_gap < 0x22) + il++; + + /* initialize field */ + for (count = 0; count < F_SECT_PER_TRACK; ++count) { + here[count].track = format_req.track; + here[count].head = format_req.head; + here[count].sect = 0; + here[count].size = F_SIZECODE; + } + /* place logical sectors */ + for (count = 1; count <= F_SECT_PER_TRACK; ++count) { + here[n].sect = count; + n = (n+il) % F_SECT_PER_TRACK; + if (here[n].sect) { /* sector busy, find next free sector */ + ++n; + if (n>= F_SECT_PER_TRACK) { + n-=F_SECT_PER_TRACK; + while (here[n].sect) ++n; + } + } + } +} + +static void redo_format(void) +{ + buffer_track = -1; + setup_format_params(format_req.track << STRETCH(_floppy)); + floppy_start(); +#ifdef DEBUGT + debugt("queue format request"); +#endif +} + +static struct cont_t format_cont={ + format_interrupt, + redo_format, + bad_flp_intr, + generic_done }; + +static int do_format(kdev_t device, struct format_descr *tmp_format_req) +{ + int ret; + int drive=DRIVE(device); + + LOCK_FDC(drive,1); + set_floppy(drive); + if (!_floppy || + _floppy->track > DP->tracks || + tmp_format_req->track >= _floppy->track || + tmp_format_req->head >= _floppy->head || + (_floppy->sect << 2) % (1 << FD_SIZECODE(_floppy)) || + !_floppy->fmt_gap) { + process_fd_request(); + return -EINVAL; + } + format_req = *tmp_format_req; + format_errors = 0; + cont = &format_cont; + errors = &format_errors; + IWAIT(redo_format); + process_fd_request(); + return ret; +} + +/* + * Buffer read/write and support + * ============================= + */ + +static inline void end_request(struct request *req, int uptodate) +{ + if (end_that_request_first(req, uptodate, current_count_sectors)) + return; + add_disk_randomness(req->rq_disk); + floppy_off((long)req->rq_disk->private_data); + blkdev_dequeue_request(req); + end_that_request_last(req); + + /* We're done with the request */ + current_req = NULL; +} + + +/* new request_done. Can handle physical sectors which are smaller than a + * logical buffer */ +static void request_done(int uptodate) +{ + struct request_queue *q = &floppy_queue; + struct request *req = current_req; + unsigned long flags; + int block; + + probing = 0; + reschedule_timeout(MAXTIMEOUT, "request done %d", uptodate); + + if (!req) { + printk("floppy.c: no request in request_done\n"); + return; + } + + if (uptodate){ + /* maintain values for invalidation on geometry + * change */ + block = current_count_sectors + req->sector; + INFBOUND(DRS->maxblock, block); + if (block > _floppy->sect) + DRS->maxtrack = 1; + + /* unlock chained buffers */ + spin_lock_irqsave(q->queue_lock, flags); + end_request(req, 1); + spin_unlock_irqrestore(q->queue_lock, flags); + } else { + if (rq_data_dir(req) == WRITE) { + /* record write error information */ + DRWE->write_errors++; + if (DRWE->write_errors == 1) { + DRWE->first_error_sector = req->sector; + DRWE->first_error_generation = DRS->generation; + } + DRWE->last_error_sector = req->sector; + DRWE->last_error_generation = DRS->generation; + } + spin_lock_irqsave(q->queue_lock, flags); + end_request(req, 0); + spin_unlock_irqrestore(q->queue_lock, flags); + } +} + +/* Interrupt handler evaluating the result of the r/w operation */ +static void rw_interrupt(void) +{ + int nr_sectors, ssize, eoc, heads; + + if (R_HEAD >= 2) { + /* some Toshiba floppy controllers occasionnally seem to + * return bogus interrupts after read/write operations, which + * can be recognized by a bad head number (>= 2) */ + return; + } + + if (!DRS->first_read_date) + DRS->first_read_date = jiffies; + + nr_sectors = 0; + CODE2SIZE; + + if (ST1 & ST1_EOC) + eoc = 1; + else + eoc = 0; + + if (COMMAND & 0x80) + heads = 2; + else + heads = 1; + + nr_sectors = (((R_TRACK-TRACK) * heads + + R_HEAD-HEAD) * SECT_PER_TRACK + + R_SECTOR-SECTOR + eoc) << SIZECODE >> 2; + +#ifdef FLOPPY_SANITY_CHECK + if (nr_sectors / ssize > + (in_sector_offset + current_count_sectors + ssize - 1) / ssize) { + DPRINT("long rw: %x instead of %lx\n", + nr_sectors, current_count_sectors); + printk("rs=%d s=%d\n", R_SECTOR, SECTOR); + printk("rh=%d h=%d\n", R_HEAD, HEAD); + printk("rt=%d t=%d\n", R_TRACK, TRACK); + printk("heads=%d eoc=%d\n", heads, eoc); + printk("spt=%d st=%d ss=%d\n", SECT_PER_TRACK, + fsector_t, ssize); + printk("in_sector_offset=%d\n", in_sector_offset); + } +#endif + + nr_sectors -= in_sector_offset; + INFBOUND(nr_sectors,0); + SUPBOUND(current_count_sectors, nr_sectors); + + switch (interpret_errors()){ + case 2: + cont->redo(); + return; + case 1: + if (!current_count_sectors){ + cont->error(); + cont->redo(); + return; + } + break; + case 0: + if (!current_count_sectors){ + cont->redo(); + return; + } + current_type[current_drive] = _floppy; + floppy_sizes[TOMINOR(current_drive) ]= _floppy->size; + break; + } + + if (probing) { + if (DP->flags & FTD_MSG) + DPRINT("Auto-detected floppy type %s in fd%d\n", + _floppy->name,current_drive); + current_type[current_drive] = _floppy; + floppy_sizes[TOMINOR(current_drive)] = _floppy->size; + probing = 0; + } + + if (CT(COMMAND) != FD_READ || + raw_cmd->kernel_data == current_req->buffer){ + /* transfer directly from buffer */ + cont->done(1); + } else if (CT(COMMAND) == FD_READ){ + buffer_track = raw_cmd->track; + buffer_drive = current_drive; + INFBOUND(buffer_max, nr_sectors + fsector_t); + } + cont->redo(); +} + +/* Compute maximal contiguous buffer size. */ +static int buffer_chain_size(void) +{ + struct bio *bio; + struct bio_vec *bv; + int size, i; + char *base; + + base = bio_data(current_req->bio); + size = 0; + + rq_for_each_bio(bio, current_req) { + bio_for_each_segment(bv, bio, i) { + if (page_address(bv->bv_page) + bv->bv_offset != base + size) + break; + + size += bv->bv_len; + } + } + + return size >> 9; +} + +/* Compute the maximal transfer size */ +static int transfer_size(int ssize, int max_sector, int max_size) +{ + SUPBOUND(max_sector, fsector_t + max_size); + + /* alignment */ + max_sector -= (max_sector % _floppy->sect) % ssize; + + /* transfer size, beginning not aligned */ + current_count_sectors = max_sector - fsector_t ; + + return max_sector; +} + +/* + * Move data from/to the track buffer to/from the buffer cache. + */ +static void copy_buffer(int ssize, int max_sector, int max_sector_2) +{ + int remaining; /* number of transferred 512-byte sectors */ + struct bio_vec *bv; + struct bio *bio; + char *buffer, *dma_buffer; + int size, i; + + max_sector = transfer_size(ssize, + minimum(max_sector, max_sector_2), + current_req->nr_sectors); + + if (current_count_sectors <= 0 && CT(COMMAND) == FD_WRITE && + buffer_max > fsector_t + current_req->nr_sectors) + current_count_sectors = minimum(buffer_max - fsector_t, + current_req->nr_sectors); + + remaining = current_count_sectors << 9; +#ifdef FLOPPY_SANITY_CHECK + if ((remaining >> 9) > current_req->nr_sectors && + CT(COMMAND) == FD_WRITE){ + DPRINT("in copy buffer\n"); + printk("current_count_sectors=%ld\n", current_count_sectors); + printk("remaining=%d\n", remaining >> 9); + printk("current_req->nr_sectors=%ld\n",current_req->nr_sectors); + printk("current_req->current_nr_sectors=%u\n", + current_req->current_nr_sectors); + printk("max_sector=%d\n", max_sector); + printk("ssize=%d\n", ssize); + } +#endif + + buffer_max = maximum(max_sector, buffer_max); + + dma_buffer = floppy_track_buffer + ((fsector_t - buffer_min) << 9); + + size = current_req->current_nr_sectors << 9; + + rq_for_each_bio(bio, current_req) { + bio_for_each_segment(bv, bio, i) { + if (!remaining) + break; + + size = bv->bv_len; + SUPBOUND(size, remaining); + + buffer = page_address(bv->bv_page) + bv->bv_offset; +#ifdef FLOPPY_SANITY_CHECK + if (dma_buffer + size > + floppy_track_buffer + (max_buffer_sectors << 10) || + dma_buffer < floppy_track_buffer){ + DPRINT("buffer overrun in copy buffer %d\n", + (int) ((floppy_track_buffer - dma_buffer) >>9)); + printk("fsector_t=%d buffer_min=%d\n", + fsector_t, buffer_min); + printk("current_count_sectors=%ld\n", + current_count_sectors); + if (CT(COMMAND) == FD_READ) + printk("read\n"); + if (CT(COMMAND) == FD_READ) + printk("write\n"); + break; + } + if (((unsigned long)buffer) % 512) + DPRINT("%p buffer not aligned\n", buffer); +#endif + if (CT(COMMAND) == FD_READ) + memcpy(buffer, dma_buffer, size); + else + memcpy(dma_buffer, buffer, size); + + remaining -= size; + dma_buffer += size; + } + } +#ifdef FLOPPY_SANITY_CHECK + if (remaining){ + if (remaining > 0) + max_sector -= remaining >> 9; + DPRINT("weirdness: remaining %d\n", remaining>>9); + } +#endif +} + +#if 0 +static inline int check_dma_crossing(char *start, + unsigned long length, char *message) +{ + if (CROSS_64KB(start, length)) { + printk("DMA xfer crosses 64KB boundary in %s %p-%p\n", + message, start, start+length); + return 1; + } else + return 0; +} +#endif + +/* work around a bug in pseudo DMA + * (on some FDCs) pseudo DMA does not stop when the CPU stops + * sending data. Hence we need a different way to signal the + * transfer length: We use SECT_PER_TRACK. Unfortunately, this + * does not work with MT, hence we can only transfer one head at + * a time + */ +static void virtualdmabug_workaround(void) +{ + int hard_sectors, end_sector; + + if(CT(COMMAND) == FD_WRITE) { + COMMAND &= ~0x80; /* switch off multiple track mode */ + + hard_sectors = raw_cmd->length >> (7 + SIZECODE); + end_sector = SECTOR + hard_sectors - 1; +#ifdef FLOPPY_SANITY_CHECK + if(end_sector > SECT_PER_TRACK) { + printk("too many sectors %d > %d\n", + end_sector, SECT_PER_TRACK); + return; + } +#endif + SECT_PER_TRACK = end_sector; /* make sure SECT_PER_TRACK points + * to end of transfer */ + } +} + +/* + * Formulate a read/write request. + * this routine decides where to load the data (directly to buffer, or to + * tmp floppy area), how much data to load (the size of the buffer, the whole + * track, or a single sector) + * All floppy_track_buffer handling goes in here. If we ever add track buffer + * allocation on the fly, it should be done here. No other part should need + * modification. + */ + +static int make_raw_rw_request(void) +{ + int aligned_sector_t; + int max_sector, max_size, tracksize, ssize; + + if(max_buffer_sectors == 0) { + printk("VFS: Block I/O scheduled on unopened device\n"); + return 0; + } + + set_fdc((long)current_req->rq_disk->private_data); + + raw_cmd = &default_raw_cmd; + raw_cmd->flags = FD_RAW_SPIN | FD_RAW_NEED_DISK | FD_RAW_NEED_DISK | + FD_RAW_NEED_SEEK; + raw_cmd->cmd_count = NR_RW; + if (rq_data_dir(current_req) == READ) { + raw_cmd->flags |= FD_RAW_READ; + COMMAND = FM_MODE(_floppy,FD_READ); + } else if (rq_data_dir(current_req) == WRITE){ + raw_cmd->flags |= FD_RAW_WRITE; + COMMAND = FM_MODE(_floppy,FD_WRITE); + } else { + DPRINT("make_raw_rw_request: unknown command\n"); + return 0; + } + + max_sector = _floppy->sect * _floppy->head; + + TRACK = (int)current_req->sector / max_sector; + fsector_t = (int)current_req->sector % max_sector; + if (_floppy->track && TRACK >= _floppy->track) { + if (current_req->current_nr_sectors & 1) { + current_count_sectors = 1; + return 1; + } else + return 0; + } + HEAD = fsector_t / _floppy->sect; + + if (((_floppy->stretch & FD_SWAPSIDES) || TESTF(FD_NEED_TWADDLE)) && + fsector_t < _floppy->sect) + max_sector = _floppy->sect; + + /* 2M disks have phantom sectors on the first track */ + if ((_floppy->rate & FD_2M) && (!TRACK) && (!HEAD)){ + max_sector = 2 * _floppy->sect / 3; + if (fsector_t >= max_sector){ + current_count_sectors = minimum(_floppy->sect - fsector_t, + current_req->nr_sectors); + return 1; + } + SIZECODE = 2; + } else + SIZECODE = FD_SIZECODE(_floppy); + raw_cmd->rate = _floppy->rate & 0x43; + if ((_floppy->rate & FD_2M) && + (TRACK || HEAD) && + raw_cmd->rate == 2) + raw_cmd->rate = 1; + + if (SIZECODE) + SIZECODE2 = 0xff; + else + SIZECODE2 = 0x80; + raw_cmd->track = TRACK << STRETCH(_floppy); + DR_SELECT = UNIT(current_drive) + PH_HEAD(_floppy,HEAD); + GAP = _floppy->gap; + CODE2SIZE; + SECT_PER_TRACK = _floppy->sect << 2 >> SIZECODE; + SECTOR = ((fsector_t % _floppy->sect) << 2 >> SIZECODE) + 1; + + /* tracksize describes the size which can be filled up with sectors + * of size ssize. + */ + tracksize = _floppy->sect - _floppy->sect % ssize; + if (tracksize < _floppy->sect){ + SECT_PER_TRACK ++; + if (tracksize <= fsector_t % _floppy->sect) + SECTOR--; + + /* if we are beyond tracksize, fill up using smaller sectors */ + while (tracksize <= fsector_t % _floppy->sect){ + while(tracksize + ssize > _floppy->sect){ + SIZECODE--; + ssize >>= 1; + } + SECTOR++; SECT_PER_TRACK ++; + tracksize += ssize; + } + max_sector = HEAD * _floppy->sect + tracksize; + } else if (!TRACK && !HEAD && !(_floppy->rate & FD_2M) && probing) { + max_sector = _floppy->sect; + } else if (!HEAD && CT(COMMAND) == FD_WRITE) { + /* for virtual DMA bug workaround */ + max_sector = _floppy->sect; + } + + in_sector_offset = (fsector_t % _floppy->sect) % ssize; + aligned_sector_t = fsector_t - in_sector_offset; + max_size = current_req->nr_sectors; + if ((raw_cmd->track == buffer_track) && + (current_drive == buffer_drive) && + (fsector_t >= buffer_min) && (fsector_t < buffer_max)) { + /* data already in track buffer */ + if (CT(COMMAND) == FD_READ) { + copy_buffer(1, max_sector, buffer_max); + return 1; + } + } else if (in_sector_offset || current_req->nr_sectors < ssize){ + if (CT(COMMAND) == FD_WRITE){ + if (fsector_t + current_req->nr_sectors > ssize && + fsector_t + current_req->nr_sectors < ssize + ssize) + max_size = ssize + ssize; + else + max_size = ssize; + } + raw_cmd->flags &= ~FD_RAW_WRITE; + raw_cmd->flags |= FD_RAW_READ; + COMMAND = FM_MODE(_floppy,FD_READ); + } else if ((unsigned long)current_req->buffer < MAX_DMA_ADDRESS) { + unsigned long dma_limit; + int direct, indirect; + + indirect= transfer_size(ssize,max_sector,max_buffer_sectors*2) - + fsector_t; + + /* + * Do NOT use minimum() here---MAX_DMA_ADDRESS is 64 bits wide + * on a 64 bit machine! + */ + max_size = buffer_chain_size(); + dma_limit = (MAX_DMA_ADDRESS - ((unsigned long) current_req->buffer)) >> 9; + if ((unsigned long) max_size > dma_limit) { + max_size = dma_limit; + } + /* 64 kb boundaries */ + if (CROSS_64KB(current_req->buffer, max_size << 9)) + max_size = (K_64 - + ((unsigned long)current_req->buffer) % K_64)>>9; + direct = transfer_size(ssize,max_sector,max_size) - fsector_t; + /* + * We try to read tracks, but if we get too many errors, we + * go back to reading just one sector at a time. + * + * This means we should be able to read a sector even if there + * are other bad sectors on this track. + */ + if (!direct || + (indirect * 2 > direct * 3 && + *errors < DP->max_errors.read_track && + /*!TESTF(FD_NEED_TWADDLE) &&*/ + ((!probing || (DP->read_track&(1<probed_format)))))){ + max_size = current_req->nr_sectors; + } else { + raw_cmd->kernel_data = current_req->buffer; + raw_cmd->length = current_count_sectors << 9; + if (raw_cmd->length == 0){ + DPRINT("zero dma transfer attempted from make_raw_request\n"); + DPRINT("indirect=%d direct=%d fsector_t=%d", + indirect, direct, fsector_t); + return 0; + } +/* check_dma_crossing(raw_cmd->kernel_data, + raw_cmd->length, + "end of make_raw_request [1]");*/ + + virtualdmabug_workaround(); + return 2; + } + } + + if (CT(COMMAND) == FD_READ) + max_size = max_sector; /* unbounded */ + + /* claim buffer track if needed */ + if (buffer_track != raw_cmd->track || /* bad track */ + buffer_drive !=current_drive || /* bad drive */ + fsector_t > buffer_max || + fsector_t < buffer_min || + ((CT(COMMAND) == FD_READ || + (!in_sector_offset && current_req->nr_sectors >= ssize))&& + max_sector > 2 * max_buffer_sectors + buffer_min && + max_size + fsector_t > 2 * max_buffer_sectors + buffer_min) + /* not enough space */){ + buffer_track = -1; + buffer_drive = current_drive; + buffer_max = buffer_min = aligned_sector_t; + } + raw_cmd->kernel_data = floppy_track_buffer + + ((aligned_sector_t-buffer_min)<<9); + + if (CT(COMMAND) == FD_WRITE){ + /* copy write buffer to track buffer. + * if we get here, we know that the write + * is either aligned or the data already in the buffer + * (buffer will be overwritten) */ +#ifdef FLOPPY_SANITY_CHECK + if (in_sector_offset && buffer_track == -1) + DPRINT("internal error offset !=0 on write\n"); +#endif + buffer_track = raw_cmd->track; + buffer_drive = current_drive; + copy_buffer(ssize, max_sector, 2*max_buffer_sectors+buffer_min); + } else + transfer_size(ssize, max_sector, + 2*max_buffer_sectors+buffer_min-aligned_sector_t); + + /* round up current_count_sectors to get dma xfer size */ + raw_cmd->length = in_sector_offset+current_count_sectors; + raw_cmd->length = ((raw_cmd->length -1)|(ssize-1))+1; + raw_cmd->length <<= 9; +#ifdef FLOPPY_SANITY_CHECK + /*check_dma_crossing(raw_cmd->kernel_data, raw_cmd->length, + "end of make_raw_request");*/ + if ((raw_cmd->length < current_count_sectors << 9) || + (raw_cmd->kernel_data != current_req->buffer && + CT(COMMAND) == FD_WRITE && + (aligned_sector_t + (raw_cmd->length >> 9) > buffer_max || + aligned_sector_t < buffer_min)) || + raw_cmd->length % (128 << SIZECODE) || + raw_cmd->length <= 0 || current_count_sectors <= 0){ + DPRINT("fractionary current count b=%lx s=%lx\n", + raw_cmd->length, current_count_sectors); + if (raw_cmd->kernel_data != current_req->buffer) + printk("addr=%d, length=%ld\n", + (int) ((raw_cmd->kernel_data - + floppy_track_buffer) >> 9), + current_count_sectors); + printk("st=%d ast=%d mse=%d msi=%d\n", + fsector_t, aligned_sector_t, max_sector, max_size); + printk("ssize=%x SIZECODE=%d\n", ssize, SIZECODE); + printk("command=%x SECTOR=%d HEAD=%d, TRACK=%d\n", + COMMAND, SECTOR, HEAD, TRACK); + printk("buffer drive=%d\n", buffer_drive); + printk("buffer track=%d\n", buffer_track); + printk("buffer_min=%d\n", buffer_min); + printk("buffer_max=%d\n", buffer_max); + return 0; + } + + if (raw_cmd->kernel_data != current_req->buffer){ + if (raw_cmd->kernel_data < floppy_track_buffer || + current_count_sectors < 0 || + raw_cmd->length < 0 || + raw_cmd->kernel_data + raw_cmd->length > + floppy_track_buffer + (max_buffer_sectors << 10)){ + DPRINT("buffer overrun in schedule dma\n"); + printk("fsector_t=%d buffer_min=%d current_count=%ld\n", + fsector_t, buffer_min, + raw_cmd->length >> 9); + printk("current_count_sectors=%ld\n", + current_count_sectors); + if (CT(COMMAND) == FD_READ) + printk("read\n"); + if (CT(COMMAND) == FD_READ) + printk("write\n"); + return 0; + } + } else if (raw_cmd->length > current_req->nr_sectors << 9 || + current_count_sectors > current_req->nr_sectors){ + DPRINT("buffer overrun in direct transfer\n"); + return 0; + } else if (raw_cmd->length < current_count_sectors << 9){ + DPRINT("more sectors than bytes\n"); + printk("bytes=%ld\n", raw_cmd->length >> 9); + printk("sectors=%ld\n", current_count_sectors); + } + if (raw_cmd->length == 0){ + DPRINT("zero dma transfer attempted from make_raw_request\n"); + return 0; + } +#endif + + virtualdmabug_workaround(); + return 2; +} + +static void redo_fd_request(void) +{ +#define REPEAT {request_done(0); continue; } + int drive; + int tmp; + + lastredo = jiffies; + if (current_drive < N_DRIVE) + floppy_off(current_drive); + + for (;;) { + if (!current_req) { + struct request *req; + + spin_lock_irq(floppy_queue.queue_lock); + req = elv_next_request(&floppy_queue); + spin_unlock_irq(floppy_queue.queue_lock); + if (!req) { + do_floppy = NULL; + unlock_fdc(); + return; + } + current_req = req; + } + drive = (long)current_req->rq_disk->private_data; + set_fdc(drive); + reschedule_timeout(current_reqD, "redo fd request", 0); + + set_floppy(drive); + raw_cmd = & default_raw_cmd; + raw_cmd->flags = 0; + if (start_motor(redo_fd_request)) return; + disk_change(current_drive); + if (test_bit(current_drive, &fake_change) || + TESTF(FD_DISK_CHANGED)){ + DPRINT("disk absent or changed during operation\n"); + REPEAT; + } + if (!_floppy) { /* Autodetection */ + if (!probing){ + DRS->probed_format = 0; + if (next_valid_format()){ + DPRINT("no autodetectable formats\n"); + _floppy = NULL; + REPEAT; + } + } + probing = 1; + _floppy = floppy_type+DP->autodetect[DRS->probed_format]; + } else + probing = 0; + errors = & (current_req->errors); + tmp = make_raw_rw_request(); + if (tmp < 2){ + request_done(tmp); + continue; + } + + if (TESTF(FD_NEED_TWADDLE)) + twaddle(); + schedule_bh( (void *)(void *) floppy_start); +#ifdef DEBUGT + debugt("queue fd request"); +#endif + return; + } +#undef REPEAT +} + +static struct cont_t rw_cont={ + rw_interrupt, + redo_fd_request, + bad_flp_intr, + request_done }; + +static void process_fd_request(void) +{ + cont = &rw_cont; + schedule_bh( (void *)(void *) redo_fd_request); +} + +static void do_fd_request(request_queue_t * q) +{ + if(max_buffer_sectors == 0) { + printk("VFS: do_fd_request called on non-open device\n"); + return; + } + + if (usage_count == 0) { + printk("warning: usage count=0, current_req=%p exiting\n", current_req); + printk("sect=%ld flags=%lx\n", (long)current_req->sector, current_req->flags); + return; + } + if (fdc_busy){ + /* fdc busy, this new request will be treated when the + current one is done */ + is_alive("do fd request, old request running"); + return; + } + lock_fdc(MAXTIMEOUT,0); + process_fd_request(); + is_alive("do fd request"); +} + +static struct cont_t poll_cont={ + success_and_wakeup, + floppy_ready, + generic_failure, + generic_done }; + +static int poll_drive(int interruptible, int flag) +{ + int ret; + /* no auto-sense, just clear dcl */ + raw_cmd = &default_raw_cmd; + raw_cmd->flags= flag; + raw_cmd->track=0; + raw_cmd->cmd_count=0; + cont = &poll_cont; +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("setting NEWCHANGE in poll_drive\n"); + } +#endif + SETF(FD_DISK_NEWCHANGE); + WAIT(floppy_ready); + return ret; +} + +/* + * User triggered reset + * ==================== + */ + +static void reset_intr(void) +{ + printk("weird, reset interrupt called\n"); +} + +static struct cont_t reset_cont={ + reset_intr, + success_and_wakeup, + generic_failure, + generic_done }; + +static int user_reset_fdc(int drive, int arg, int interruptible) +{ + int ret; + + ret=0; + LOCK_FDC(drive,interruptible); + if (arg == FD_RESET_ALWAYS) + FDCS->reset=1; + if (FDCS->reset){ + cont = &reset_cont; + WAIT(reset_fdc); + } + process_fd_request(); + return ret; +} + +/* + * Misc Ioctl's and support + * ======================== + */ +static inline int fd_copyout(void *param, const void *address, unsigned long size) +{ + return copy_to_user(param,address, size) ? -EFAULT : 0; +} + +static inline int fd_copyin(void *param, void *address, unsigned long size) +{ + return copy_from_user(address, param, size) ? -EFAULT : 0; +} + +#define _COPYOUT(x) (copy_to_user((void *)param, &(x), sizeof(x)) ? -EFAULT : 0) +#define _COPYIN(x) (copy_from_user(&(x), (void *)param, sizeof(x)) ? -EFAULT : 0) + +#define COPYOUT(x) ECALL(_COPYOUT(x)) +#define COPYIN(x) ECALL(_COPYIN(x)) + +static inline const char *drive_name(int type, int drive) +{ + struct floppy_struct *floppy; + + if (type) + floppy = floppy_type + type; + else { + if (UDP->native_format) + floppy = floppy_type + UDP->native_format; + else + return "(null)"; + } + if (floppy->name) + return floppy->name; + else + return "(null)"; +} + + +/* raw commands */ +static void raw_cmd_done(int flag) +{ + int i; + + if (!flag) { + raw_cmd->flags |= FD_RAW_FAILURE; + raw_cmd->flags |= FD_RAW_HARDFAILURE; + } else { + raw_cmd->reply_count = inr; + if (raw_cmd->reply_count > MAX_REPLIES) + raw_cmd->reply_count=0; + for (i=0; i< raw_cmd->reply_count; i++) + raw_cmd->reply[i] = reply_buffer[i]; + + if (raw_cmd->flags & (FD_RAW_READ | FD_RAW_WRITE)) + { + unsigned long flags; + flags=claim_dma_lock(); + raw_cmd->length = fd_get_dma_residue(); + release_dma_lock(flags); + } + + if ((raw_cmd->flags & FD_RAW_SOFTFAILURE) && + (!raw_cmd->reply_count || (raw_cmd->reply[0] & 0xc0))) + raw_cmd->flags |= FD_RAW_FAILURE; + + if (disk_change(current_drive)) + raw_cmd->flags |= FD_RAW_DISK_CHANGE; + else + raw_cmd->flags &= ~FD_RAW_DISK_CHANGE; + if (raw_cmd->flags & FD_RAW_NO_MOTOR_AFTER) + motor_off_callback(current_drive); + + if (raw_cmd->next && + (!(raw_cmd->flags & FD_RAW_FAILURE) || + !(raw_cmd->flags & FD_RAW_STOP_IF_FAILURE)) && + ((raw_cmd->flags & FD_RAW_FAILURE) || + !(raw_cmd->flags &FD_RAW_STOP_IF_SUCCESS))) { + raw_cmd = raw_cmd->next; + return; + } + } + generic_done(flag); +} + + +static struct cont_t raw_cmd_cont={ + success_and_wakeup, + floppy_start, + generic_failure, + raw_cmd_done +}; + +static inline int raw_cmd_copyout(int cmd, char *param, + struct floppy_raw_cmd *ptr) +{ + int ret; + + while(ptr) { + COPYOUT(*ptr); + param += sizeof(struct floppy_raw_cmd); + if ((ptr->flags & FD_RAW_READ) && ptr->buffer_length){ + if (ptr->length>=0 && ptr->length<=ptr->buffer_length) + ECALL(fd_copyout(ptr->data, + ptr->kernel_data, + ptr->buffer_length - + ptr->length)); + } + ptr = ptr->next; + } + return 0; +} + + +static void raw_cmd_free(struct floppy_raw_cmd **ptr) +{ + struct floppy_raw_cmd *next,*this; + + this = *ptr; + *ptr = 0; + while(this) { + if (this->buffer_length) { + fd_dma_mem_free((unsigned long)this->kernel_data, + this->buffer_length); + this->buffer_length = 0; + } + next = this->next; + kfree(this); + this = next; + } +} + + +static inline int raw_cmd_copyin(int cmd, char *param, + struct floppy_raw_cmd **rcmd) +{ + struct floppy_raw_cmd *ptr; + int ret; + int i; + + *rcmd = 0; + while(1) { + ptr = (struct floppy_raw_cmd *) + kmalloc(sizeof(struct floppy_raw_cmd), GFP_USER); + if (!ptr) + return -ENOMEM; + *rcmd = ptr; + COPYIN(*ptr); + ptr->next = 0; + ptr->buffer_length = 0; + param += sizeof(struct floppy_raw_cmd); + if (ptr->cmd_count > 33) + /* the command may now also take up the space + * initially intended for the reply & the + * reply count. Needed for long 82078 commands + * such as RESTORE, which takes ... 17 command + * bytes. Murphy's law #137: When you reserve + * 16 bytes for a structure, you'll one day + * discover that you really need 17... + */ + return -EINVAL; + + for (i=0; i< 16; i++) + ptr->reply[i] = 0; + ptr->resultcode = 0; + ptr->kernel_data = 0; + + if (ptr->flags & (FD_RAW_READ | FD_RAW_WRITE)) { + if (ptr->length <= 0) + return -EINVAL; + ptr->kernel_data =(char*)fd_dma_mem_alloc(ptr->length); + fallback_on_nodma_alloc(&ptr->kernel_data, + ptr->length); + if (!ptr->kernel_data) + return -ENOMEM; + ptr->buffer_length = ptr->length; + } + if (ptr->flags & FD_RAW_WRITE) + ECALL(fd_copyin(ptr->data, ptr->kernel_data, + ptr->length)); + rcmd = & (ptr->next); + if (!(ptr->flags & FD_RAW_MORE)) + return 0; + ptr->rate &= 0x43; + } +} + + +static int raw_cmd_ioctl(int cmd, void *param) +{ + int drive, ret, ret2; + struct floppy_raw_cmd *my_raw_cmd; + + if (FDCS->rawcmd <= 1) + FDCS->rawcmd = 1; + for (drive= 0; drive < N_DRIVE; drive++){ + if (FDC(drive) != fdc) + continue; + if (drive == current_drive){ + if (UDRS->fd_ref > 1){ + FDCS->rawcmd = 2; + break; + } + } else if (UDRS->fd_ref){ + FDCS->rawcmd = 2; + break; + } + } + + if (FDCS->reset) + return -EIO; + + ret = raw_cmd_copyin(cmd, param, &my_raw_cmd); + if (ret) { + raw_cmd_free(&my_raw_cmd); + return ret; + } + + raw_cmd = my_raw_cmd; + cont = &raw_cmd_cont; + ret=wait_til_done(floppy_start,1); +#ifdef DCL_DEBUG + if (DP->flags & FD_DEBUG){ + DPRINT("calling disk change from raw_cmd ioctl\n"); + } +#endif + + if (ret != -EINTR && FDCS->reset) + ret = -EIO; + + DRS->track = NO_TRACK; + + ret2 = raw_cmd_copyout(cmd, param, my_raw_cmd); + if (!ret) + ret = ret2; + raw_cmd_free(&my_raw_cmd); + return ret; +} + +static int invalidate_drive(struct block_device *bdev) +{ + /* invalidate the buffer track to force a reread */ + set_bit((long)bdev->bd_disk->private_data, &fake_change); + process_fd_request(); + check_disk_change(bdev); + return 0; +} + + +static inline void clear_write_error(int drive) +{ + CLEARSTRUCT(UDRWE); +} + +static inline int set_geometry(unsigned int cmd, struct floppy_struct *g, + int drive, int type, struct block_device *bdev) +{ + int cnt; + + /* sanity checking for parameters.*/ + if (g->sect <= 0 || + g->head <= 0 || + g->track <= 0 || + g->track > UDP->tracks>>STRETCH(g) || + /* check if reserved bits are set */ + (g->stretch&~(FD_STRETCH|FD_SWAPSIDES)) != 0) + return -EINVAL; + if (type){ + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; + LOCK_FDC(drive,1); + for (cnt = 0; cnt < N_DRIVE; cnt++){ + if (ITYPE(drive_state[cnt].fd_device) == type && + drive_state[cnt].fd_ref) + set_bit(drive, &fake_change); + } + floppy_type[type] = *g; + floppy_type[type].name="user format"; + for (cnt = type << 2; cnt < (type << 2) + 4; cnt++) + floppy_sizes[cnt]= floppy_sizes[cnt+0x80]= + floppy_type[type].size+1; + process_fd_request(); + for (cnt = 0; cnt < N_DRIVE; cnt++){ + if (ITYPE(drive_state[cnt].fd_device) == type && + drive_state[cnt].fd_ref) + __check_disk_change( + MKDEV(FLOPPY_MAJOR, + drive_state[cnt].fd_device)); + } + } else { + LOCK_FDC(drive,1); + if (cmd != FDDEFPRM) + /* notice a disk change immediately, else + * we lose our settings immediately*/ + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + user_params[drive] = *g; + if (buffer_drive == drive) + SUPBOUND(buffer_max, user_params[drive].sect); + current_type[drive] = &user_params[drive]; + floppy_sizes[drive] = user_params[drive].size; + if (cmd == FDDEFPRM) + DRS->keep_data = -1; + else + DRS->keep_data = 1; + /* invalidation. Invalidate only when needed, i.e. + * when there are already sectors in the buffer cache + * whose number will change. This is useful, because + * mtools often changes the geometry of the disk after + * looking at the boot block */ + if (DRS->maxblock > user_params[drive].sect || DRS->maxtrack) + invalidate_drive(bdev); + else + process_fd_request(); + } + return 0; +} + +/* handle obsolete ioctl's */ +static int ioctl_table[]= { + FDCLRPRM, + FDSETPRM, + FDDEFPRM, + FDGETPRM, + FDMSGON, + FDMSGOFF, + FDFMTBEG, + FDFMTTRK, + FDFMTEND, + FDSETEMSGTRESH, + FDFLUSH, + FDSETMAXERRS, + FDGETMAXERRS, + FDGETDRVTYP, + FDSETDRVPRM, + FDGETDRVPRM, + FDGETDRVSTAT, + FDPOLLDRVSTAT, + FDRESET, + FDGETFDCSTAT, + FDWERRORCLR, + FDWERRORGET, + FDRAWCMD, + FDEJECT, + FDTWADDLE +}; + +static inline int normalize_ioctl(int *cmd, int *size) +{ + int i; + + for (i=0; i < ARRAY_SIZE(ioctl_table); i++) { + if ((*cmd & 0xffff) == (ioctl_table[i] & 0xffff)){ + *size = _IOC_SIZE(*cmd); + *cmd = ioctl_table[i]; + if (*size > _IOC_SIZE(*cmd)) { + printk("ioctl not yet supported\n"); + return -EFAULT; + } + return 0; + } + } + return -EINVAL; +} + +static int get_floppy_geometry(int drive, int type, struct floppy_struct **g) +{ + if (type) + *g = &floppy_type[type]; + else { + LOCK_FDC(drive,0); + CALL(poll_drive(0,0)); + process_fd_request(); + *g = current_type[drive]; + } + if (!*g) + return -ENODEV; + return 0; +} + +static int fd_ioctl(struct inode *inode, struct file *filp, unsigned int cmd, + unsigned long param) +{ +#define FD_IOCTL_ALLOWED ((filp) && (filp)->private_data) +#define OUT(c,x) case c: outparam = (const char *) (x); break +#define IN(c,x,tag) case c: *(x) = inparam. tag ; return 0 + + int i,drive,type; + kdev_t device; + int ret; + int size; + union inparam { + struct floppy_struct g; /* geometry */ + struct format_descr f; + struct floppy_max_errors max_errors; + struct floppy_drive_params dp; + } inparam; /* parameters coming from user space */ + const char *outparam; /* parameters passed back to user space */ + + device = inode->i_rdev; + type = TYPE(device); + drive = DRIVE(device); + + /* convert compatibility eject ioctls into floppy eject ioctl. + * We do this in order to provide a means to eject floppy disks before + * installing the new fdutils package */ + if (cmd == CDROMEJECT || /* CD-ROM eject */ + cmd == 0x6470 /* SunOS floppy eject */) { + DPRINT("obsolete eject ioctl\n"); + DPRINT("please use floppycontrol --eject\n"); + cmd = FDEJECT; + } + + /* generic block device ioctls */ + switch(cmd) { + /* the following have been inspired by the corresponding + * code for other block devices. */ + struct floppy_struct *g; + case HDIO_GETGEO: + { + struct hd_geometry loc; + ECALL(get_floppy_geometry(drive, type, &g)); + loc.heads = g->head; + loc.sectors = g->sect; + loc.cylinders = g->track; + loc.start = 0; + return _COPYOUT(loc); + } + } + + /* convert the old style command into a new style command */ + if ((cmd & 0xff00) == 0x0200) { + ECALL(normalize_ioctl(&cmd, &size)); + } else + return -EINVAL; + + /* permission checks */ + if (((cmd & 0x40) && !FD_IOCTL_ALLOWED) || + ((cmd & 0x80) && !capable(CAP_SYS_ADMIN))) + return -EPERM; + + /* copyin */ + CLEARSTRUCT(&inparam); + if (_IOC_DIR(cmd) & _IOC_WRITE) + ECALL(fd_copyin((void *)param, &inparam, size)) + + switch (cmd) { + case FDEJECT: + if (UDRS->fd_ref != 1) + /* somebody else has this drive open */ + return -EBUSY; + LOCK_FDC(drive,1); + + /* do the actual eject. Fails on + * non-Sparc architectures */ + ret=fd_eject(UNIT(drive)); + + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + process_fd_request(); + return ret; + case FDCLRPRM: + LOCK_FDC(drive,1); + current_type[drive] = NULL; + floppy_sizes[drive] = MAX_DISK_SIZE << 1; + UDRS->keep_data = 0; + return invalidate_drive(inode->i_bdev); + case FDSETPRM: + case FDDEFPRM: + return set_geometry(cmd, & inparam.g, + drive, type, inode->i_bdev); + case FDGETPRM: + ECALL(get_floppy_geometry(drive, type, + (struct floppy_struct**) + &outparam)); + break; + + case FDMSGON: + UDP->flags |= FTD_MSG; + return 0; + case FDMSGOFF: + UDP->flags &= ~FTD_MSG; + return 0; + + case FDFMTBEG: + LOCK_FDC(drive,1); + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if (ret & FD_VERIFY) { + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + + if(ret & FD_VERIFY){ + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + ret = UDRS->flags; + } + process_fd_request(); + if (ret & FD_VERIFY) + return -ENODEV; + if (!(ret & FD_DISK_WRITABLE)) + return -EROFS; + return 0; + case FDFMTTRK: + if (UDRS->fd_ref != 1) + return -EBUSY; + return do_format(device, &inparam.f); + case FDFMTEND: + case FDFLUSH: + LOCK_FDC(drive,1); + return invalidate_drive(inode->i_bdev); + + case FDSETEMSGTRESH: + UDP->max_errors.reporting = + (unsigned short) (param & 0x0f); + return 0; + OUT(FDGETMAXERRS, &UDP->max_errors); + IN(FDSETMAXERRS, &UDP->max_errors, max_errors); + + case FDGETDRVTYP: + outparam = drive_name(type,drive); + SUPBOUND(size,strlen(outparam)+1); + break; + + IN(FDSETDRVPRM, UDP, dp); + OUT(FDGETDRVPRM, UDP); + + case FDPOLLDRVSTAT: + LOCK_FDC(drive,1); + CALL(poll_drive(1, FD_RAW_NEED_DISK)); + process_fd_request(); + /* fall through */ + OUT(FDGETDRVSTAT, UDRS); + + case FDRESET: + return user_reset_fdc(drive, (int)param, 1); + + OUT(FDGETFDCSTAT,UFDCS); + + case FDWERRORCLR: + CLEARSTRUCT(UDRWE); + return 0; + OUT(FDWERRORGET,UDRWE); + + case FDRAWCMD: + if (type) + return -EINVAL; + LOCK_FDC(drive,1); + set_floppy(drive); + CALL(i = raw_cmd_ioctl(cmd,(void *) param)); + process_fd_request(); + return i; + + case FDTWADDLE: + LOCK_FDC(drive,1); + twaddle(); + process_fd_request(); + return 0; + + default: + return -EINVAL; + } + + if (_IOC_DIR(cmd) & _IOC_READ) + return fd_copyout((void *)param, outparam, size); + else + return 0; +#undef OUT +#undef IN +} + +static void __init config_types(void) +{ + int first=1; + int drive; + extern struct fd_info { + unsigned char dummy[4 * 6]; + unsigned char fd_types[8]; + } drive_info; + + for (drive = 0; drive < 4; drive++) + UDP->cmos = drive_info.fd_types[drive]; + + /* XXX */ + /* additional physical CMOS drive detection should go here */ + + for (drive=0; drive < N_DRIVE; drive++){ + unsigned int type = UDP->cmos; + struct floppy_drive_params *params; + const char *name = NULL; + static char temparea[32]; + + if (type < NUMBER(default_drive_params)) { + params = &default_drive_params[type].params; + if (type) { + name = default_drive_params[type].name; + allowed_drive_mask |= 1 << drive; + } + else + allowed_drive_mask &= ~(1 << drive); + } else { + params = &default_drive_params[0].params; + sprintf(temparea, "unknown type %d (usb?)", type); + name = temparea; + } + if (name) { + const char * prepend = ","; + if (first) { + prepend = KERN_INFO "Floppy drive(s):"; + first = 0; + } + printk("%s fd%d is %s", prepend, drive, name); + register_devfs_entries (drive); + } + *UDP = *params; + } + if (!first) + printk("\n"); +} + +static int floppy_release(struct inode * inode, struct file * filp) +{ + int drive = DRIVE(inode->i_rdev); + + if (UDRS->fd_ref < 0) + UDRS->fd_ref=0; + else if (!UDRS->fd_ref--) { + DPRINT("floppy_release with fd_ref == 0"); + UDRS->fd_ref = 0; + } + floppy_release_irq_and_dma(); + return 0; +} + +/* + * floppy_open check for aliasing (/dev/fd0 can be the same as + * /dev/PS0 etc), and disallows simultaneous access to the same + * drive with different device numbers. + */ +#define RETERR(x) do{floppy_release(inode,filp); return -(x);}while(0) + +static int floppy_open(struct inode * inode, struct file * filp) +{ + int drive; + int old_dev; + int try; + char *tmp; + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: start\n"); +#endif + filp->private_data = (void*) 0; + + drive = DRIVE(inode->i_rdev); +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: drive=%d, current_drive=%d, UDP->cmos=%d\n" + "floppy open: FDCS={spec1=%d, spec2=%d, dtr=%d, version=%d, dor=%d, address=%lu}\n", + drive, current_drive, UDP->cmos, FDCS->spec1, FDCS->spec2, + FDCS->dtr, FDCS->version, FDCS->dor, FDCS->address); + if (_floppy) { + printk("floppy open: _floppy={size=%d, sect=%d, head=%d, track=%d, spec1=%d}\n", + _floppy->size, _floppy->sect, _floppy->head, + _floppy->track, _floppy->spec1); + } else { + printk("floppy open: _floppy=NULL\n"); + } +#endif /* PC9800_DEBUG_FLOPPY */ + + if (drive >= N_DRIVE || + !(allowed_drive_mask & (1 << drive)) || + fdc_state[FDC(drive)].version == FDC_NONE) + return -ENXIO; + + if (TYPE(inode->i_rdev) >= NUMBER(floppy_type)) + return -ENXIO; + old_dev = UDRS->fd_device; + if (UDRS->fd_ref && old_dev != minor(inode->i_rdev)) + return -EBUSY; + + if (!UDRS->fd_ref && (UDP->flags & FD_BROKEN_DCL)){ + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + } + + if (UDRS->fd_ref == -1 || + (UDRS->fd_ref && (filp->f_flags & O_EXCL))) + return -EBUSY; + + if (floppy_grab_irq_and_dma()) + return -EBUSY; + + if (filp->f_flags & O_EXCL) + UDRS->fd_ref = -1; + else + UDRS->fd_ref++; + + if (!floppy_track_buffer){ + /* if opening an ED drive, reserve a big buffer, + * else reserve a small one */ + if ((UDP->cmos == 6) || (UDP->cmos == 5)) + try = 64; /* Only 48 actually useful */ + else + try = 32; /* Only 24 actually useful */ + + tmp=(char *)fd_dma_mem_alloc(1024 * try); + if (!tmp && !floppy_track_buffer) { + try >>= 1; /* buffer only one side */ + INFBOUND(try, 16); + tmp= (char *)fd_dma_mem_alloc(1024*try); + } + if (!tmp && !floppy_track_buffer) { + fallback_on_nodma_alloc(&tmp, 2048 * try); + } + if (!tmp && !floppy_track_buffer) { + DPRINT("Unable to allocate DMA memory\n"); + RETERR(ENXIO); + } + if (floppy_track_buffer) { + if (tmp) + fd_dma_mem_free((unsigned long)tmp,try*1024); + } else { + buffer_min = buffer_max = -1; + floppy_track_buffer = tmp; + max_buffer_sectors = try; + } + } + + UDRS->fd_device = minor(inode->i_rdev); + set_capacity(disks[drive], floppy_sizes[minor(inode->i_rdev)]); + if (old_dev != -1 && old_dev != minor(inode->i_rdev)) { + if (buffer_drive == drive) + buffer_track = -1; + /* umm, invalidate_buffers() in ->open?? --hch */ + invalidate_buffers(mk_kdev(FLOPPY_MAJOR,old_dev)); + } + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: floppy.c:%d passed\n", __LINE__); +#endif + + + /* Allow ioctls if we have write-permissions even if read-only open. + * Needed so that programs such as fdrawcmd still can work on write + * protected disks */ + if ((filp->f_mode & 2) || + (inode->i_sb && (permission(inode,2) == 0))) + filp->private_data = (void*) 8; + + if (UFDCS->rawcmd == 1) + UFDCS->rawcmd = 2; + +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: floppy.c:%d passed\n", __LINE__); +#endif + + if (filp->f_flags & O_NDELAY) + return 0; + if (filp->f_mode & 3) { + UDRS->last_checked = 0; + check_disk_change(inode->i_bdev); + if (UTESTF(FD_DISK_CHANGED)) + RETERR(ENXIO); + } + if ((filp->f_mode & 2) && !(UTESTF(FD_DISK_WRITABLE))) + RETERR(EROFS); +#ifdef PC9800_DEBUG_FLOPPY + printk("floppy open: end normally\n"); +#endif + + return 0; +#undef RETERR +} + +/* + * Check if the disk has been changed or if a change has been faked. + */ +static int check_floppy_change(struct gendisk *disk) +{ + int drive = (long)disk->private_data; + +#ifdef PC9800_DEBUG_FLOPPY + printk("check_floppy_change: MINOR=%d\n", minor(dev)); +#endif + + if (UTESTF(FD_DISK_CHANGED) || UTESTF(FD_VERIFY)) + return 1; + + if (UDP->checkfreq < (int)(jiffies - UDRS->last_checked)) { + if(floppy_grab_irq_and_dma()) { + return 1; + } + + lock_fdc(drive,0); + poll_drive(0,0); + process_fd_request(); + floppy_release_irq_and_dma(); + } + + if (UTESTF(FD_DISK_CHANGED) || + UTESTF(FD_VERIFY) || + test_bit(drive, &fake_change) || + (!ITYPE(UDRS->fd_device) && !current_type[drive])) + return 1; + return 0; +} + +/* + * This implements "read block 0" for floppy_revalidate(). + * Needed for format autodetection, checking whether there is + * a disk in the drive, and whether that disk is writable. + */ + +static int floppy_rb0_complete(struct bio *bio, unsigned int bytes_done, int err) +{ + if (bio->bi_size) + return 1; + + complete((struct completion*)bio->bi_private); + return 0; +} + +static int __floppy_read_block_0(struct block_device *bdev) +{ + struct bio bio; + struct bio_vec bio_vec; + struct completion complete; + struct page *page; + size_t size; + + page = alloc_page(GFP_NOIO); + if (!page) { + process_fd_request(); + return -ENOMEM; + } + + size = bdev->bd_block_size; + if (!size) + size = 1024; + + bio_init(&bio); + bio.bi_io_vec = &bio_vec; + bio_vec.bv_page = page; + bio_vec.bv_len = size; + bio_vec.bv_offset = 0; + bio.bi_vcnt = 1; + bio.bi_idx = 0; + bio.bi_size = size; + bio.bi_bdev = bdev; + bio.bi_sector = 0; + init_completion(&complete); + bio.bi_private = &complete; + bio.bi_end_io = floppy_rb0_complete; + + submit_bio(READ, &bio); + generic_unplug_device(bdev_get_queue(bdev)); + process_fd_request(); + wait_for_completion(&complete); + + __free_page(page); + + return 0; +} + +static int floppy_read_block_0(struct gendisk *disk) +{ + struct block_device *bdev; + int ret; + + bdev = bdget(MKDEV(disk->major, disk->first_minor)); + if (!bdev) { + printk("No block device for %s\n", disk->disk_name); + BUG(); + } + bdev->bd_disk = disk; /* ewww */ + ret = __floppy_read_block_0(bdev); + atomic_dec(&bdev->bd_count); + return ret; +} + +/* revalidate the floppy disk, i.e. trigger format autodetection by reading + * the bootblock (block 0). "Autodetection" is also needed to check whether + * there is a disk in the drive at all... Thus we also do it for fixed + * geometry formats */ +static int floppy_revalidate(struct gendisk *disk) +{ + int drive=(long)disk->private_data; +#define NO_GEOM (!current_type[drive] && !ITYPE(UDRS->fd_device)) + int cf; + int res = 0; + + if (UTESTF(FD_DISK_CHANGED) || + UTESTF(FD_VERIFY) || + test_bit(drive, &fake_change) || + NO_GEOM){ + if(usage_count == 0) { + printk("VFS: revalidate called on non-open device.\n"); + return -EFAULT; + } + lock_fdc(drive,0); + cf = UTESTF(FD_DISK_CHANGED) || UTESTF(FD_VERIFY); + if (!(cf || test_bit(drive, &fake_change) || NO_GEOM)){ + process_fd_request(); /*already done by another thread*/ + return 0; + } + UDRS->maxblock = 0; + UDRS->maxtrack = 0; + if (buffer_drive == drive) + buffer_track = -1; + clear_bit(drive, &fake_change); + UCLEARF(FD_DISK_CHANGED); + if (cf) + UDRS->generation++; + if (NO_GEOM){ + /* auto-sensing */ + res = floppy_read_block_0(disk); + } else { + if (cf) + poll_drive(0, FD_RAW_NEED_DISK); + process_fd_request(); + } + } + set_capacity(disk, floppy_sizes[UDRS->fd_device]); + return res; +} + +static struct block_device_operations floppy_fops = { + .owner = THIS_MODULE, + .open = floppy_open, + .release = floppy_release, + .ioctl = fd_ioctl, + .media_changed = check_floppy_change, + .revalidate_disk= floppy_revalidate, +}; + +static char *table[] = +{"", +#if 0 +"d360", +#else +"h1232", +#endif +"h1200", "u360", "u720", "h360", "h720", +"u1440", "u2880", "CompaQ", "h1440", "u1680", "h410", +"u820", "h1476", "u1722", "h420", "u830", "h1494", "u1743", +"h880", "u1040", "u1120", "h1600", "u1760", "u1920", +"u3200", "u3520", "u3840", "u1840", "u800", "u1600", +NULL +}; +static int t360[] = {1,0}, t1200[] = {2,5,6,10,12,14,16,18,20,23,0}, +t3in[] = {8,9,26,27,28, 7,11,15,19,24,25,29,31, 3,4,13,17,21,22,30,0}; +static int *table_sup[] = +{NULL, t360, t1200, t3in+5+8, t3in+5, t3in, t3in}; + +static void __init register_devfs_entries (int drive) +{ + int base_minor, i; + + base_minor = (drive < 4) ? drive : (124 + drive); + if (UDP->cmos < NUMBER(default_drive_params)) { + i = 0; + do { + char name[16]; + + sprintf(name, "floppy/%d%s", drive, table[table_sup[UDP->cmos][i]]); + devfs_register(NULL, name, DEVFS_FL_DEFAULT, FLOPPY_MAJOR, + base_minor + (table_sup[UDP->cmos][i] << 2), + S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP |S_IWGRP, + &floppy_fops, NULL); + } while (table_sup[UDP->cmos][i++]); + } +} + +/* + * Floppy Driver initialization + * ============================= + */ + +static inline char __init get_fdc_version(void) +{ + return FDC_8272A; +} + +/* lilo configuration */ + +static void __init floppy_set_flags(int *ints,int param, int param2) +{ + int i; + + for (i=0; i < ARRAY_SIZE(default_drive_params); i++){ + if (param) + default_drive_params[i].params.flags |= param2; + else + default_drive_params[i].params.flags &= ~param2; + } + DPRINT("%s flag 0x%x\n", param2 ? "Setting" : "Clearing", param); +} + +static void __init daring(int *ints,int param, int param2) +{ + int i; + + for (i=0; i < ARRAY_SIZE(default_drive_params); i++){ + if (param){ + default_drive_params[i].params.select_delay = 0; + default_drive_params[i].params.flags |= FD_SILENT_DCL_CLEAR; + } else { + default_drive_params[i].params.select_delay = 2*HZ/100; + default_drive_params[i].params.flags &= ~FD_SILENT_DCL_CLEAR; + } + } + DPRINT("Assuming %s floppy hardware\n", param ? "standard" : "broken"); +} + +static void __init set_cmos(int *ints, int dummy, int dummy2) +{ + int current_drive=0; + + if (ints[0] != 2){ + DPRINT("wrong number of parameters for CMOS\n"); + return; + } + current_drive = ints[1]; + if (current_drive < 0 || current_drive >= 8){ + DPRINT("bad drive for set_cmos\n"); + return; + } +#if N_FDC > 1 + if (current_drive >= 4 && !FDC2) + FDC2 = 0x370; +#endif + DP->cmos = ints[2]; + DPRINT("setting CMOS code to %d\n", ints[2]); +} + +static struct param_table { + const char *name; + void (*fn)(int *ints, int param, int param2); + int *var; + int def_param; + int param2; +} config_params[]={ + { "allowed_drive_mask", 0, &allowed_drive_mask, 0xff, 0}, /* obsolete */ + { "all_drives", 0, &allowed_drive_mask, 0xff, 0 }, /* obsolete */ + { "irq", 0, &FLOPPY_IRQ, DEFAULT_FLOPPY_IRQ, 0 }, + { "dma", 0, &FLOPPY_DMA, DEFAULT_FLOPPY_DMA, 0 }, + + { "daring", daring, 0, 1, 0}, +#if N_FDC > 1 + { "two_fdc", 0, &FDC2, 0x370, 0 }, + { "one_fdc", 0, &FDC2, 0, 0 }, +#endif + { "broken_dcl", floppy_set_flags, 0, 1, FD_BROKEN_DCL }, + { "messages", floppy_set_flags, 0, 1, FTD_MSG }, + { "silent_dcl_clear", floppy_set_flags, 0, 1, FD_SILENT_DCL_CLEAR }, + { "debug", floppy_set_flags, 0, 1, FD_DEBUG }, + + { "nodma", 0, &can_use_virtual_dma, 1, 0 }, + { "yesdma", 0, &can_use_virtual_dma, 0, 0 }, + + { "fifo_depth", 0, &fifo_depth, 0xa, 0 }, + { "nofifo", 0, &no_fifo, 0x20, 0 }, + { "usefifo", 0, &no_fifo, 0, 0 }, + + { "cmos", set_cmos, 0, 0, 0 }, + { "slow", 0, &slow_floppy, 1, 0 }, + + { "unexpected_interrupts", 0, &print_unex, 1, 0 }, + { "no_unexpected_interrupts", 0, &print_unex, 0, 0 }, + + EXTRA_FLOPPY_PARAMS +}; + +static int __init floppy_setup(char *str) +{ + int i; + int param; + int ints[11]; + + str = get_options(str,ARRAY_SIZE(ints),ints); + if (str) { + for (i=0; i< ARRAY_SIZE(config_params); i++){ + if (strcmp(str,config_params[i].name) == 0){ + if (ints[0]) + param = ints[1]; + else + param = config_params[i].def_param; + if (config_params[i].fn) + config_params[i]. + fn(ints,param, + config_params[i].param2); + if (config_params[i].var) { + DPRINT("%s=%d\n", str, param); + *config_params[i].var = param; + } + return 1; + } + } + } + if (str) { + DPRINT("unknown floppy option [%s]\n", str); + + DPRINT("allowed options are:"); + for (i=0; i< ARRAY_SIZE(config_params); i++) + printk(" %s",config_params[i].name); + printk("\n"); + } else + DPRINT("botched floppy option\n"); + DPRINT("Read linux/Documentation/floppy.txt\n"); + return 0; +} + +static int have_no_fdc= -ENODEV; + +static struct platform_device floppy_device = { + .name = "floppy", + .id = 0, + .dev = { + .name = "Floppy Drive", + }, +}; + +static struct gendisk *floppy_find(dev_t dev, int *part, void *data) +{ + int drive = (*part&3) | ((*part&0x80) >> 5); + if (drive >= N_DRIVE || + !(allowed_drive_mask & (1 << drive)) || + fdc_state[FDC(drive)].version == FDC_NONE) + return NULL; + return get_disk(disks[drive]); +} + +int __init floppy_init(void) +{ + int i,unit,drive; + int err; + + raw_cmd = NULL; + FDC1 = 0x90; + + for (i=0; imajor = FLOPPY_MAJOR; + disks[i]->first_minor = TOMINOR(i); + disks[i]->fops = &floppy_fops; + sprintf(disks[i]->disk_name, "fd%d", i); + } + + blk_register_region(MKDEV(FLOPPY_MAJOR, 0), 256, THIS_MODULE, + floppy_find, NULL, NULL); + + for (i=0; i<256; i++) + if (ITYPE(i)) + floppy_sizes[i] = floppy_type[ITYPE(i)].size; + else + floppy_sizes[i] = MAX_DISK_SIZE << 1; + + blk_init_queue(&floppy_queue, do_fd_request, &floppy_lock); + reschedule_timeout(MAXTIMEOUT, "floppy init", MAXTIMEOUT); + config_types(); + + for (i = 0; i < N_FDC; i++) { + fdc = i; + CLEARSTRUCT(FDCS); + FDCS->dtr = -1; + FDCS->dor = 0; + } + + if ((fd_inb(FD_MODE_CHANGE) & 1) == 0) + FDC1 = 0xc8; + + use_virtual_dma = can_use_virtual_dma & 1; + fdc_state[0].address = FDC1; + if (fdc_state[0].address == -1) { + err = -ENODEV; + goto out1; + } +#if N_FDC > 1 + fdc_state[1].address = FDC2; +#endif + + fdc = 0; /* reset fdc in case of unexpected interrupt */ + if (floppy_grab_irq_and_dma()){ + err = -EBUSY; + goto out1; + } + + /* initialise drive state */ + for (drive = 0; drive < N_DRIVE; drive++) { + CLEARSTRUCT(UDRS); + CLEARSTRUCT(UDRWE); + USETF(FD_DISK_NEWCHANGE); + USETF(FD_DISK_CHANGED); + USETF(FD_VERIFY); + UDRS->fd_device = -1; + floppy_track_buffer = NULL; + max_buffer_sectors = 0; + } + + for (i = 0; i < N_FDC; i++) { + fdc = i; + FDCS->driver_version = FD_DRIVER_VERSION; + for (unit=0; unit<4; unit++) + FDCS->track[unit] = 0; + if (FDCS->address == -1) + continue; + FDCS->rawcmd = 2; + user_reset_fdc(-1, FD_RESET_ALWAYS, 0); + + /* Try to determine the floppy controller type */ + FDCS->version = get_fdc_version(); + if (FDCS->version == FDC_NONE){ + /* free ioports reserved by floppy_grab_irq_and_dma() */ + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + release_region(0xbe, 1); + release_region(0x4be, 1); + FDCS->address = -1; + continue; + } + if (can_use_virtual_dma == 2 && FDCS->version < FDC_82072A) + can_use_virtual_dma = 0; + + have_no_fdc = 0; + /* Not all FDCs seem to be able to handle the version command + * properly, so force a reset for the standard FDC clones, + * to avoid interrupt garbage. + */ + user_reset_fdc(-1,FD_RESET_ALWAYS,0); + } + fdc=0; + del_timer(&fd_timeout); + current_drive = 0; + floppy_release_irq_and_dma(); +#if 0 /* no message */ + initialising=0; +#endif + if (have_no_fdc) { + DPRINT("no floppy controllers found\n"); + flush_scheduled_work(); + if (usage_count) + floppy_release_irq_and_dma(); + err = have_no_fdc; + goto out2; + } + + for (drive = 0; drive < N_DRIVE; drive++) { + init_timer(&motor_off_timer[drive]); + motor_off_timer[drive].data = drive; + motor_off_timer[drive].function = motor_off_callback; + if (!(allowed_drive_mask & (1 << drive))) + continue; + if (fdc_state[FDC(drive)].version == FDC_NONE) + continue; + /* to be cleaned up... */ + disks[drive]->private_data = (void*)(long)drive; + disks[drive]->queue = &floppy_queue; + add_disk(disks[drive]); + } + + platform_device_register(&floppy_device); + return 0; + +out1: + del_timer(&fd_timeout); +out2: + blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); + unregister_blkdev(FLOPPY_MAJOR,"fd"); + blk_cleanup_queue(&floppy_queue); +out: + for (i=0; iaddress != -1){ + static char floppy[] = "floppy"; + if (!request_region(FDCS->address, 1, floppy)) + goto cleanup0; + + if (!request_region(FDCS->address + 2, 1, floppy)) { + release_region(FDCS->address, 1); + goto cleanup0; + } + + if (!request_region(FDCS->address + 4, 1, floppy)) { + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + goto cleanup0; + } + + if (fdc == 0) { /* internal FDC */ + if (request_region(0xbe, 1, "floppy mode change")) { + if (request_region(0x4be, 1, "floppy ex. mode change")) + continue; + else + DPRINT("Floppy io-port 0x4be in use\n"); + + release_region(0xbe, 1); + } else + DPRINT("Floppy io-port 0xbe in use\n"); + + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + } + + goto cleanup1; + } + } + for (fdc=0; fdc< N_FDC; fdc++){ + if (FDCS->address != -1){ + reset_fdc_info(1); + fd_outb(FDCS->dor, FD_MODE); + } + } + fdc = 0; + fd_outb((FDCS->dor & 8), FD_MODE); + + for (fdc = 0; fdc < N_FDC; fdc++) + if (FDCS->address != -1) + fd_outb(FDCS->dor, FD_MODE); + /* + * The driver will try and free resources and relies on us + * to know if they were allocated or not. + */ + fdc = 0; + irqdma_allocated = 1; + return 0; + +cleanup0: + DPRINT("Floppy io-port 0x%04lx in use\n", FDCS->address); +cleanup1: + fd_free_irq(); + fd_free_dma(); + while(--fdc >= 0) { + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + if (fdc == 0) { + release_region(0x00be, 1); + release_region(0x04be, 1); + } + } + MOD_DEC_USE_COUNT; + spin_lock_irqsave(&floppy_usage_lock, flags); + usage_count--; + spin_unlock_irqrestore(&floppy_usage_lock, flags); + return -1; +} + +static void floppy_release_irq_and_dma(void) +{ + int old_fdc; +#ifdef FLOPPY_SANITY_CHECK + int drive; +#endif + long tmpsize; + unsigned long tmpaddr; + unsigned long flags; + + spin_lock_irqsave(&floppy_usage_lock, flags); + if (--usage_count){ + spin_unlock_irqrestore(&floppy_usage_lock, flags); + return; + } + spin_unlock_irqrestore(&floppy_usage_lock, flags); + if(irqdma_allocated) + { + fd_disable_dma(); + fd_free_dma(); + fd_free_irq(); + irqdma_allocated=0; + } + fd_outb(0, FD_MODE); + floppy_enable_hlt(); + + if (floppy_track_buffer && max_buffer_sectors) { + tmpsize = max_buffer_sectors*1024; + tmpaddr = (unsigned long)floppy_track_buffer; + floppy_track_buffer = NULL; + max_buffer_sectors = 0; + buffer_min = buffer_max = -1; + fd_dma_mem_free(tmpaddr, tmpsize); + } + +#ifdef FLOPPY_SANITY_CHECK + for (drive=0; drive < N_FDC * 4; drive++) + if (timer_pending(motor_off_timer + drive)) + printk("motor off timer %d still active\n", drive); + + if (timer_pending(&fd_timeout)) + printk("floppy timer still active:%s\n", timeout_message); + if (timer_pending(&fd_timer)) + printk("auxiliary floppy timer still active\n"); + if (floppy_work.pending) + printk("work still pending\n"); +#endif + old_fdc = fdc; + for (fdc = 0; fdc < N_FDC; fdc++) + if (FDCS->address != -1) { + release_region(FDCS->address, 1); + release_region(FDCS->address + 2, 1); + release_region(FDCS->address + 4, 1); + if (fdc == 0) { + release_region(0xbe, 1); + release_region(0x4be, 1); + } + } + fdc = old_fdc; + MOD_DEC_USE_COUNT; +} + + +#ifdef MODULE + +char *floppy; + +static void unregister_devfs_entries (int drive) +{ + int i; + + if (UDP->cmos < NUMBER(default_drive_params)) { + i = 0; + do { + devfs_remove("floppy/%d%s", drive, table[table_sup[UDP->cmos][i]]); + } while (table_sup[UDP->cmos][i++]); + } +} + +static void __init parse_floppy_cfg_string(char *cfg) +{ + char *ptr; + + while(*cfg) { + for(ptr = cfg;*cfg && *cfg != ' ' && *cfg != '\t'; cfg++); + if (*cfg) { + *cfg = '\0'; + cfg++; + } + if (*ptr) + floppy_setup(ptr); + } +} + +int init_module(void) +{ + printk(KERN_INFO "inserting floppy driver for " UTS_RELEASE "\n"); + + if (floppy) + parse_floppy_cfg_string(floppy); + return floppy_init(); +} + +void cleanup_module(void) +{ + int drive; + + platform_device_unregister(&floppy_device); + blk_unregister_region(MKDEV(FLOPPY_MAJOR, 0), 256); + unregister_blkdev(FLOPPY_MAJOR, "fd"); + for (drive = 0; drive < N_DRIVE; drive++) { + if ((allowed_drive_mask & (1 << drive)) && + fdc_state[FDC(drive)].version != FDC_NONE) { + del_gendisk(disks[drive]); + unregister_devfs_entries(drive); + } + put_disk(disks[drive]); + } + devfs_remove("floppy"); + + blk_cleanup_queue(&floppy_queue); + /* eject disk, if any */ + fd_eject(0); +} + +MODULE_PARM(floppy,"s"); +MODULE_PARM(FLOPPY_IRQ,"i"); +MODULE_PARM(FLOPPY_DMA,"i"); +MODULE_AUTHOR("Osamu Tomita"); +MODULE_SUPPORTED_DEVICE("fd"); +MODULE_LICENSE("GPL"); + +#else + +__setup ("floppy=", floppy_setup); +module_init(floppy_init) +#endif diff -Nru a/drivers/block/genhd.c b/drivers/block/genhd.c --- a/drivers/block/genhd.c Sat Apr 12 14:44:08 2003 +++ b/drivers/block/genhd.c Sat Apr 12 14:44:08 2003 @@ -525,9 +525,21 @@ .default_attrs = default_attrs, }; +extern struct kobj_type ktype_part; + +static int block_hotplug_filter(struct kset *kset, struct kobject *kobj) +{ + struct kobj_type *ktype = get_ktype(kobj); + + return ((ktype == &ktype_block) || (ktype == &ktype_part)); +} + +static struct kset_hotplug_ops block_hotplug_ops = { + .filter = block_hotplug_filter, +}; /* declare block_subsys. */ -static decl_subsys(block,&ktype_block); +static decl_subsys(block, &ktype_block, &block_hotplug_ops); struct gendisk *alloc_disk(int minors) diff -Nru a/drivers/block/paride/pf.c b/drivers/block/paride/pf.c --- a/drivers/block/paride/pf.c Sat Apr 12 14:44:09 2003 +++ b/drivers/block/paride/pf.c Sat Apr 12 14:44:09 2003 @@ -780,10 +780,10 @@ if (pf_busy) return; repeat: - if (elv_queue_empty(q)) + pf_req = elv_next_request(q); + if (!pf_req) return; - pf_req = elv_next_request(q); pf_current = pf_req->rq_disk->private_data; pf_block = pf_req->sector; pf_run = pf_req->nr_sectors; diff -Nru a/drivers/block/paride/pg.c b/drivers/block/paride/pg.c --- a/drivers/block/paride/pg.c Sat Apr 12 14:44:09 2003 +++ b/drivers/block/paride/pg.c Sat Apr 12 14:44:09 2003 @@ -233,14 +233,14 @@ int busy; /* write done, read expected */ int start; /* jiffies at command start */ int dlen; /* transfer size requested */ - int timeout; /* timeout requested */ + unsigned long timeout; /* timeout requested */ int status; /* last sense key */ int drive; /* drive */ unsigned long access; /* count of active opens ... */ int present; /* device present ? */ char *bufptr; char name[PG_NAMELEN]; /* pg0, pg1, ... */ - }; +}; struct pg_unit pg[PG_UNITS]; @@ -292,43 +292,47 @@ schedule_timeout(cs); } -static int pg_wait( int unit, int go, int stop, int tmo, char * msg ) - -{ int j, r, e, s, p; +static int pg_wait(int unit, int go, int stop, unsigned long tmo, char *msg) +{ + int j, r, e, s, p, to; PG.status = 0; j = 0; - while ((((r=RR(1,6))&go)||(stop&&(!(r&stop))))&&(time_before(jiffies,tmo))) { - if (j++ < PG_SPIN) udelay(PG_SPIN_DEL); - else pg_sleep(1); - } - - if ((r&(STAT_ERR&stop))||time_after_eq(jiffies, tmo)) { - s = RR(0,7); - e = RR(0,1); - p = RR(0,2); - if (verbose > 1) - printk("%s: %s: stat=0x%x err=0x%x phase=%d%s\n", - PG.name,msg,s,e,p,time_after_eq(jiffies, tmo)?" timeout":""); - - - if (time_after_eq(jiffies, tmo)) e |= 0x100; - PG.status = (e >> 4) & 0xff; - return -1; + while ((((r=RR(1,6))&go) || (stop&&(!(r&stop)))) + && time_before(jiffies,tmo)) { + if (j++ < PG_SPIN) + udelay(PG_SPIN_DEL); + else + pg_sleep(1); + } + + to = time_after_eq(jiffies, tmo); + + if ((r&(STAT_ERR&stop)) || to) { + s = RR(0,7); + e = RR(0,1); + p = RR(0,2); + if (verbose > 1) + printk("%s: %s: stat=0x%x err=0x%x phase=%d%s\n", + PG.name, msg, s, e, p, to ? " timeout" : ""); + if (to) + e |= 0x100; + PG.status = (e >> 4) & 0xff; + return -1; } return 0; } -static int pg_command( int unit, char * cmd, int dlen, int tmo ) - -{ int k; +static int pg_command(int unit, char *cmd, int dlen, unsigned long tmo) +{ + int k; pi_connect(PI); WR(0,6,DRIVE); - if (pg_wait(unit,STAT_BUSY|STAT_DRQ,0,tmo,"before command")) { + if (pg_wait(unit, STAT_BUSY|STAT_DRQ, 0, tmo, "before command")) { pi_disconnect(PI); return -1; } @@ -337,15 +341,15 @@ WR(0,5,dlen / 256); WR(0,7,0xa0); /* ATAPI packet command */ - if (pg_wait(unit,STAT_BUSY,STAT_DRQ,tmo,"command DRQ")) { + if (pg_wait(unit, STAT_BUSY, STAT_DRQ, tmo, "command DRQ")) { pi_disconnect(PI); return -1; } if (RR(0,2) != 1) { - printk("%s: command phase error\n",PG.name); - pi_disconnect(PI); - return -1; + printk("%s: command phase error\n",PG.name); + pi_disconnect(PI); + return -1; } pi_write_block(PI,cmd,12); @@ -358,27 +362,30 @@ return 0; } -static int pg_completion( int unit, char * buf, int tmo) - -{ int r, d, n, p; +static int pg_completion(int unit, char *buf, unsigned long tmo) +{ + int r, d, n, p; - r = pg_wait(unit,STAT_BUSY,STAT_DRQ|STAT_READY|STAT_ERR, - tmo,"completion"); + r = pg_wait(unit, STAT_BUSY, STAT_DRQ|STAT_READY|STAT_ERR, + tmo, "completion"); PG.dlen = 0; while (RR(0,7)&STAT_DRQ) { - d = (RR(0,4)+256*RR(0,5)); - n = ((d+3)&0xfffc); - p = RR(0,2)&3; - if (p == 0) pi_write_block(PI,buf,n); - if (p == 2) pi_read_block(PI,buf,n); - if (verbose > 1) printk("%s: %s %d bytes\n",PG.name, - p?"Read":"Write",n); - PG.dlen += (1-p)*d; - buf += d; - r = pg_wait(unit,STAT_BUSY,STAT_DRQ|STAT_READY|STAT_ERR, - tmo,"completion"); + d = (RR(0,4)+256*RR(0,5)); + n = ((d+3)&0xfffc); + p = RR(0,2)&3; + if (p == 0) + pi_write_block(PI,buf,n); + if (p == 2) + pi_read_block(PI,buf,n); + if (verbose > 1) + printk("%s: %s %d bytes\n", PG.name, + p?"Read":"Write", n); + PG.dlen += (1-p)*d; + buf += d; + r = pg_wait(unit, STAT_BUSY, STAT_DRQ|STAT_READY|STAT_ERR, + tmo, "completion"); } pi_disconnect(PI); diff -Nru a/drivers/block/paride/pseudo.h b/drivers/block/paride/pseudo.h --- a/drivers/block/paride/pseudo.h Sat Apr 12 14:44:07 2003 +++ b/drivers/block/paride/pseudo.h Sat Apr 12 14:44:07 2003 @@ -39,7 +39,7 @@ static void (* ps_continuation)(void); static int (* ps_ready)(void); -static int ps_timeout; +static unsigned long ps_timeout; static int ps_tq_active = 0; static int ps_nice = 0; @@ -70,7 +70,7 @@ spin_unlock_irqrestore(&ps_spinlock,flags); } -static void ps_tq_int( void *data ) +static void ps_tq_int(void *data) { void (*con)(void); unsigned long flags; diff -Nru a/drivers/char/Kconfig b/drivers/char/Kconfig --- a/drivers/char/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/char/Kconfig Sat Apr 12 14:44:06 2003 @@ -575,6 +575,17 @@ console. This driver allows each pSeries partition to have a console which is accessed via the HMC. +config PC9800_OLDLP + tristate "NEC PC-9800 old-style printer port support" + depends on X86_PC9800 && !PARPORT + ---help--- + If you intend to attach a printer to the parallel port of NEC PC-9801 + /PC-9821 with OLD compatibility mode, Say Y. + +config PC9800_OLDLP_CONSOLE + bool "Support for console on line printer" + depends on PC9800_OLDLP + source "drivers/i2c/Kconfig" @@ -755,7 +766,7 @@ config RTC tristate "Enhanced Real Time Clock Support" - depends on !PPC32 && !PARISC && !IA64 + depends on !PPC32 && !PARISC && !IA64 && !X86_PC9800 ---help--- If you say Y here and create a character special file /dev/rtc with major number 10 and minor number 135 using mknod ("man mknod"), you @@ -813,6 +824,15 @@ config EFI_RTC bool "EFI Real Time Clock Services" depends on IA64 + +config RTC98 + tristate "NEC PC-9800 Real Time Clock Support" + depends on X86_PC9800 + default y + ---help--- + If you say Y here and create a character special file /dev/rtc with + major number 10 and minor number 135 using mknod ("man mknod"), you + will get access to the real time clock (or hardware clock) built config H8 bool "Tadpole ANA H8 Support (OBSOLETE)" diff -Nru a/drivers/char/agp/Kconfig b/drivers/char/agp/Kconfig --- a/drivers/char/agp/Kconfig Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/Kconfig Sat Apr 12 14:44:08 2003 @@ -29,17 +29,13 @@ bool "/dev/agpgart (AGP Support)" depends on GART_IOMMU -config AGP3 - bool "AGP 3.0 compliance (EXPERIMENTAL)" - depends on AGP - config AGP_INTEL - tristate "Intel 440LX/BX/GX and I815/I820/830M/I830MP/I840/I845/845G/I850/852GM/855GM/I860/865G support" - depends on AGP + tristate "Intel 440LX/BX/GX, I8xx and E7x05 support" + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the - XFree86 4.x on Intel 440LX/BX/GX, 815, 820, 830, 840, 845, 850 - and 860 chipsets and full support for the 810, 815, 830M, 845G, + XFree86 4.x on Intel 440LX/BX/GX, 815, 820, 830, 840, 845, 850, 860 + E7205 and E7505 chipsets and full support for the 810, 815, 830M, 845G, 852GM, 855GM and 865G integrated graphics chipsets. You should say Y here if you use XFree86 3.3.6 or 4.x and want to @@ -48,7 +44,7 @@ #config AGP_I810 # tristate "Intel I810/I815/I830M (on-board) support" -# depends on AGP +# depends on AGP && !X86_64 # help # This option gives you AGP support for the Xserver on the Intel 810 # 815 and 830m chipset boards for their on-board integrated graphics. This @@ -56,7 +52,7 @@ config AGP_VIA tristate "VIA chipset support" - depends on AGP + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the XFree86 4.x on VIA MPV3/Apollo Pro chipsets. @@ -66,7 +62,7 @@ config AGP_AMD tristate "AMD Irongate, 761, and 762 support" - depends on AGP + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the XFree86 4.x on AMD Irongate, 761, and 762 chipsets. @@ -76,7 +72,7 @@ config AGP_SIS tristate "Generic SiS support" - depends on AGP + depends on AGP && !X86_64 help This option gives you AGP support for the GLX component of the "soon to be released" XFree86 4.x on Silicon Integrated Systems [SiS] @@ -89,7 +85,7 @@ config AGP_ALI tristate "ALI chipset support" - depends on AGP + depends on AGP && !X86_64 ---help--- This option gives you AGP support for the GLX component of the XFree86 4.x on the following ALi chipsets. The supported chipsets @@ -107,7 +103,7 @@ config AGP_SWORKS tristate "Serverworks LE/HE support" - depends on AGP + depends on AGP && !X86_64 help Say Y here to support the Serverworks AGP card. See for product descriptions and images. @@ -138,16 +134,4 @@ tristate depends on AGP && (ALPHA_GENERIC || ALPHA_TITAN || ALPHA_MARVEL) default AGP - -# Put AGP 3.0 entries below here. - -config AGP_I7505 - tristate "Intel 7205/7505 support (AGP 3.0)" - depends on AGP3 - help - This option gives you AGP support for the GLX component of the - XFree86 4.x on Intel I7505 chipsets. - - You should say Y here if you use XFree86 3.3.6 or 4.x and want to - use GLX or DRI. If unsure, say N diff -Nru a/drivers/char/agp/Makefile b/drivers/char/agp/Makefile --- a/drivers/char/agp/Makefile Sat Apr 12 14:44:07 2003 +++ b/drivers/char/agp/Makefile Sat Apr 12 14:44:07 2003 @@ -3,8 +3,7 @@ # space ioctl interface to use agp memory. It also adds a kernel interface # that other drivers could use to manipulate agp memory. -agpgart-y := backend.o frontend.o generic.o -agpgart-$(CONFIG_AGP3) += generic-3.0.o +agpgart-y := backend.o frontend.o generic.o generic-3.0.o agpgart-objs := $(agpgart-y) obj-$(CONFIG_AGP) += agpgart.o @@ -19,5 +18,4 @@ obj-$(CONFIG_AGP_AMD_8151) += amd-k8-agp.o obj-$(CONFIG_AGP_ALPHA_CORE) += alpha-agp.o -obj-$(CONFIG_AGP_I7x05) += i7x05-agp.o diff -Nru a/drivers/char/agp/agp.h b/drivers/char/agp/agp.h --- a/drivers/char/agp/agp.h Sat Apr 12 14:44:07 2003 +++ b/drivers/char/agp/agp.h Sat Apr 12 14:44:07 2003 @@ -1,6 +1,6 @@ /* * AGPGART - * Copyright (C) 2002 Dave Jones + * Copyright (C) 2002-2003 Dave Jones * Copyright (C) 1999 Jeff Hartmann * Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Xi Graphics, Inc. @@ -46,7 +46,7 @@ panic(PFX "timed out waiting for the other CPUs!\n"); } #else -static inline void global_cache_flush(void) +static void global_cache_flush(void) { flush_agp_cache(); } @@ -281,6 +281,7 @@ #define INTEL_I7505_ATTBASE 0x78 #define INTEL_I7505_ERRSTS 0x42 #define INTEL_I7505_AGPCTRL 0x70 +#define INTEL_I7505_MCHCFG 0x50 /* VIA register */ #define VIA_APBASE 0x10 @@ -380,8 +381,7 @@ /* Generic routines. */ -void agp_generic_agp_enable(u32 mode); -void agp_generic_agp_3_0_enable(u32 mode); +void agp_generic_enable(u32 mode); int agp_generic_create_gatt_table(void); int agp_generic_free_gatt_table(void); agp_memory *agp_create_memory(int scratch_pages); @@ -399,5 +399,6 @@ int agp_unregister_driver(struct agp_driver *drv); u32 agp_collect_device_status(u32 mode, u32 command); void agp_device_command(u32 command, int agp_v3); +int agp_3_0_node_enable(u32 mode, u32 minor); #endif /* _AGP_BACKEND_PRIV_H */ diff -Nru a/drivers/char/agp/ali-agp.c b/drivers/char/agp/ali-agp.c --- a/drivers/char/agp/ali-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/ali-agp.c Sat Apr 12 14:44:08 2003 @@ -208,7 +208,7 @@ agp_bridge->cleanup = ali_cleanup; agp_bridge->tlb_flush = ali_tlbflush; agp_bridge->mask_memory = ali_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = ali_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; diff -Nru a/drivers/char/agp/amd-k7-agp.c b/drivers/char/agp/amd-k7-agp.c --- a/drivers/char/agp/amd-k7-agp.c Sat Apr 12 14:44:10 2003 +++ b/drivers/char/agp/amd-k7-agp.c Sat Apr 12 14:44:10 2003 @@ -368,7 +368,7 @@ agp_bridge->cleanup = amd_irongate_cleanup; agp_bridge->tlb_flush = amd_irongate_tlbflush; agp_bridge->mask_memory = amd_irongate_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = amd_create_gatt_table; agp_bridge->free_gatt_table = amd_free_gatt_table; diff -Nru a/drivers/char/agp/amd-k8-agp.c b/drivers/char/agp/amd-k8-agp.c --- a/drivers/char/agp/amd-k8-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/amd-k8-agp.c Sat Apr 12 14:44:08 2003 @@ -1,12 +1,12 @@ /* - * Copyright 2001,2002 SuSE Labs + * Copyright 2001-2003 SuSE Labs. * Distributed under the GNU public license, v2. * - * This is a GART driver for the AMD K8 northbridge and the AMD 8151 - * AGP bridge. The main work is done in the northbridge. The configuration - * is only mirrored in the 8151 for compatibility (could be likely - * removed now). - */ + * This is a GART driver for the AMD Opteron/Athlon64 on-CPU northbridge. + * It also includes support for the AMD 8151 AGP bridge, + * although it doesn't actually do much, as all the real + * work is done in the northbridge(s). + */ /* * On x86-64 the AGP driver needs to be initialized early by the IOMMU @@ -224,7 +224,7 @@ static struct gatt_mask amd_8151_masks[] = { - {0x00000001, 0} + {.mask = 0x00000001, .type = 0} }; @@ -265,7 +265,7 @@ /* If not enough, go to AGP v2 setup */ if (v3_devs<2) { printk (KERN_INFO "AGP: Only %d devices found, not enough, trying AGPv2\n", v3_devs); - return agp_generic_agp_enable(mode); + return agp_generic_enable(mode); } else { printk (KERN_INFO "AGP: Enough AGPv3 devices found, setting up...\n"); } @@ -339,6 +339,8 @@ cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP); if (cap_ptr == 0) return -ENODEV; + + printk (KERN_INFO PFX "Detected Opteron/Athlon64 on-CPU GART\n"); agp_bridge->dev = dev; agp_bridge->capndx = cap_ptr; diff -Nru a/drivers/char/agp/backend.c b/drivers/char/agp/backend.c --- a/drivers/char/agp/backend.c Sat Apr 12 14:44:09 2003 +++ b/drivers/char/agp/backend.c Sat Apr 12 14:44:09 2003 @@ -1,6 +1,6 @@ /* * AGPGART driver backend routines. - * Copyright (C) 2002 Dave Jones. + * Copyright (C) 2002-2003 Dave Jones. * Copyright (C) 1999 Jeff Hartmann. * Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Xi Graphics, Inc. diff -Nru a/drivers/char/agp/frontend.c b/drivers/char/agp/frontend.c --- a/drivers/char/agp/frontend.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/agp/frontend.c Sat Apr 12 14:44:06 2003 @@ -1,6 +1,6 @@ /* * AGPGART driver frontend - * Copyright (C) 2002 Dave Jones + * Copyright (C) 2002-2003 Dave Jones * Copyright (C) 1999 Jeff Hartmann * Copyright (C) 1999 Precision Insight, Inc. * Copyright (C) 1999 Xi Graphics, Inc. diff -Nru a/drivers/char/agp/generic-3.0.c b/drivers/char/agp/generic-3.0.c --- a/drivers/char/agp/generic-3.0.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/agp/generic-3.0.c Sat Apr 12 14:44:06 2003 @@ -319,10 +319,10 @@ * Fully configure and enable an AGP 3.0 host bridge and all the devices * lying behind it. */ -static int agp_3_0_node_enable(u32 mode, u32 minor) +int agp_3_0_node_enable(u32 mode, u32 minor) { struct pci_dev *td = agp_bridge->dev, *dev; - u8 bus_num, mcapndx; + u8 mcapndx; u32 isoch, arqsz, cal_cycle, tmp, rate; u32 tstatus, tcmd, mcmd, mstatus, ncapid; u32 mmajor, mminor; @@ -343,23 +343,30 @@ head = &dev_list->list; INIT_LIST_HEAD(head); - /* - * Find all the devices on this bridge's secondary bus and add them - * to dev_list. - */ - pci_read_config_byte(td, PCI_SECONDARY_BUS, &bus_num); - pci_for_each_dev(dev) { - if(dev->bus->number == bus_num) { - if((cur = kmalloc(sizeof(*cur), GFP_KERNEL)) == NULL) { - ret = -ENOMEM; - goto free_and_exit; - } - - cur->dev = dev; + /* Find all AGP devices, and add them to dev_list. */ + pci_for_each_dev(dev) { + switch ((dev->class >>8) & 0xff00) { + case 0x0001: /* Unclassified device */ + case 0x0300: /* Display controller */ + case 0x0400: /* Multimedia controller */ + case 0x0600: /* Bridge */ + mcapndx = pci_find_capability(dev, PCI_CAP_ID_AGP); + if (mcapndx == 0) + continue; + + if((cur = kmalloc(sizeof(*cur), GFP_KERNEL)) == NULL) { + ret = -ENOMEM; + goto free_and_exit; + } + cur->dev = dev; + + pos = &cur->list; + list_add(pos, head); + ndevs++; + continue; - pos = &cur->list; - list_add(pos, head); - ndevs++; + default: + continue; } } @@ -518,33 +525,5 @@ return ret; } -/* - * Entry point to AGP 3.0 host bridge init. Check to see if we - * have an AGP 3.0 device operating in 3.0 mode. Call - * agp_3_0_node_enable or agp_generic_agp_enable if we don't - * (AGP 3.0 devices are required to operate as AGP 2.0 devices - * when not using 3.0 electricals. - */ -void agp_generic_agp_3_0_enable(u32 mode) -{ - u32 ncapid, major, minor, agp_3_0; - - pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx, &ncapid); - - major = (ncapid >> 20) & 0xf; - minor = (ncapid >> 16) & 0xf; - - printk(KERN_INFO PFX "Found an AGP %d.%d compliant device.\n",major, minor); - - if(major >= 3) { - pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx + 0x4, &agp_3_0); - /* - * Check to see if we are operating in 3.0 mode - */ - if((agp_3_0 >> 3) & 0x1) - agp_3_0_node_enable(mode, minor); - } -} - -EXPORT_SYMBOL(agp_generic_agp_3_0_enable); +EXPORT_SYMBOL_GPL(agp_3_0_node_enable); diff -Nru a/drivers/char/agp/generic.c b/drivers/char/agp/generic.c --- a/drivers/char/agp/generic.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/agp/generic.c Sat Apr 12 14:44:07 2003 @@ -34,6 +34,7 @@ #include #include #include +#include #include "agp.h" __u32 *agp_gatt_table; @@ -392,21 +393,37 @@ } } -void agp_generic_agp_enable(u32 mode) +void agp_generic_enable(u32 mode) { - u32 command; + u32 command, ncapid, major, minor; + pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx, &ncapid); + major = (ncapid >> 20) & 0xf; + minor = (ncapid >> 16) & 0xf; + printk(KERN_INFO PFX "Found an AGP %d.%d compliant device.\n",major, minor); + + if(major >= 3) { + u32 agp_3_0; + + pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx + 0x4, &agp_3_0); + /* Check to see if we are operating in 3.0 mode */ + if((agp_3_0 >> 3) & 0x1) { + agp_3_0_node_enable(mode, minor); + return; + } else { + printk (KERN_INFO PFX "not in AGP 3.0 mode, falling back to 2.x\n"); + } + } + + /* AGP v<3 */ pci_read_config_dword(agp_bridge->dev, - agp_bridge->capndx + PCI_AGP_STATUS, - &command); + agp_bridge->capndx + PCI_AGP_STATUS, &command); command = agp_collect_device_status(mode, command); command |= 0x100; pci_write_config_dword(agp_bridge->dev, - agp_bridge->capndx + PCI_AGP_COMMAND, - command); - + agp_bridge->capndx + PCI_AGP_COMMAND, command); agp_device_command(command, 0); } @@ -745,7 +762,7 @@ EXPORT_SYMBOL(agp_generic_destroy_page); EXPORT_SYMBOL(agp_generic_suspend); EXPORT_SYMBOL(agp_generic_resume); -EXPORT_SYMBOL(agp_generic_agp_enable); +EXPORT_SYMBOL(agp_generic_enable); EXPORT_SYMBOL(agp_generic_create_gatt_table); EXPORT_SYMBOL(agp_generic_free_gatt_table); EXPORT_SYMBOL(agp_generic_insert_memory); diff -Nru a/drivers/char/agp/hp-agp.c b/drivers/char/agp/hp-agp.c --- a/drivers/char/agp/hp-agp.c Sat Apr 12 14:44:09 2003 +++ b/drivers/char/agp/hp-agp.c Sat Apr 12 14:44:09 2003 @@ -339,7 +339,7 @@ agp_bridge->cleanup = hp_zx1_cleanup; agp_bridge->tlb_flush = hp_zx1_tlbflush; agp_bridge->mask_memory = hp_zx1_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = hp_zx1_create_gatt_table; agp_bridge->free_gatt_table = hp_zx1_free_gatt_table; @@ -369,7 +369,7 @@ } static struct agp_driver hp_agp_driver = { - .owner = THIS_MODULE; + .owner = THIS_MODULE, }; static int __init agp_hp_probe (struct pci_dev *dev, const struct pci_device_id *ent) @@ -394,7 +394,7 @@ { } }; -MODULE_DEVICE_TABLE(pci, agp_pci_table); +MODULE_DEVICE_TABLE(pci, agp_hp_pci_table); static struct __initdata pci_driver agp_hp_pci_driver = { .name = "agpgart-hp", diff -Nru a/drivers/char/agp/i460-agp.c b/drivers/char/agp/i460-agp.c --- a/drivers/char/agp/i460-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/i460-agp.c Sat Apr 12 14:44:08 2003 @@ -536,7 +536,7 @@ agp_bridge->cleanup = i460_cleanup; agp_bridge->tlb_flush = i460_tlb_flush; agp_bridge->mask_memory = i460_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = i460_create_gatt_table; agp_bridge->free_gatt_table = i460_free_gatt_table; @@ -560,7 +560,7 @@ } static struct agp_driver i460_agp_driver = { - .owner = THIS_MODULE; + .owner = THIS_MODULE, }; static int __init agp_intel_i460_probe (struct pci_dev *dev, const struct pci_device_id *ent) diff -Nru a/drivers/char/agp/i7x05-agp.c b/drivers/char/agp/i7x05-agp.c --- a/drivers/char/agp/i7x05-agp.c Sat Apr 12 14:44:06 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,234 +0,0 @@ -#include -#include -#include -#include -#include "agp.h" - -static int intel_7505_fetch_size(void) -{ - int i; - u16 tmp; - aper_size_info_16 *values; - - /* - * For AGP 3.0 APSIZE is now 16 bits - */ - pci_read_config_word (agp_bridge->dev, INTEL_I7505_APSIZE, &tmp); - tmp = (tmp & 0xfff); - - values = A_SIZE_16(agp_bridge->aperture_sizes); - - for (i=0; i < agp_bridge->num_aperture_sizes; i++) { - if (tmp == values[i].size_value) { - agp_bridge->previous_size = agp_bridge->current_size = - (void *)(values + i); - agp_bridge->aperture_size_idx = i; - return values[i].size; - } - } - return 0; -} - - -static void intel_7505_tlbflush(agp_memory *mem) -{ - u32 temp; - pci_read_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, &temp); - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, temp & ~(1 << 7)); - pci_read_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, &temp); - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, temp | (1 << 7)); -} - -static void intel_7505_cleanup(void) -{ - aper_size_info_16 *previous_size; - - previous_size = A_SIZE_16(agp_bridge->previous_size); - pci_write_config_byte(agp_bridge->dev, INTEL_I7505_APSIZE, - previous_size->size_value); -} - - -static int intel_7505_configure(void) -{ - u32 temp; - aper_size_info_16 *current_size; - - current_size = A_SIZE_16(agp_bridge->current_size); - - /* aperture size */ - pci_write_config_word(agp_bridge->dev, INTEL_I7505_APSIZE, - current_size->size_value); - - /* address to map to */ - pci_read_config_dword(agp_bridge->dev, INTEL_I7505_NAPBASELO, &temp); - agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); - - /* attbase */ - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_ATTBASE, - agp_bridge->gatt_bus_addr); - - /* agpctrl */ - pci_write_config_dword(agp_bridge->dev, INTEL_I7505_AGPCTRL, 0x0000); - - /* clear error registers */ - pci_write_config_byte(agp_bridge->dev, INTEL_I7505_ERRSTS, 0xff); - return 0; -} - -static aper_size_info_16 intel_7505_sizes[7] = -{ - {256, 65536, 6, 0xf00}, - {128, 32768, 5, 0xf20}, - {64, 16384, 4, 0xf30}, - {32, 8192, 3, 0xf38}, - {16, 4096, 2, 0xf3c}, - {8, 2048, 1, 0xf3e}, - {4, 1024, 0, 0xf3f} -}; - -static void i7505_setup (u32 mode) -{ - if ((agp_generic_agp_3_0_enable)==FALSE) - agp_generic_agp_enable(mode); -} - -static int __init intel_7505_setup (struct pci_dev *pdev) -{ - agp_bridge->masks = intel_generic_masks; - agp_bridge->aperture_sizes = (void *) intel_7505_sizes; - agp_bridge->size_type = U16_APER_SIZE; - agp_bridge->num_aperture_sizes = 7; - agp_bridge->dev_private_data = NULL; - agp_bridge->needs_scratch_page = FALSE; - agp_bridge->configure = intel_7505_configure; - agp_bridge->fetch_size = intel_7505_fetch_size; - agp_bridge->cleanup = intel_7505_cleanup; - agp_bridge->tlb_flush = intel_7505_tlbflush; - agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = i7505_enable; - agp_bridge->cache_flush = global_cache_flush; - agp_bridge->create_gatt_table = agp_generic_create_gatt_table; - agp_bridge->free_gatt_table = agp_generic_free_gatt_table; - agp_bridge->insert_memory = agp_generic_insert_memory; - agp_bridge->remove_memory = agp_generic_remove_memory; - agp_bridge->alloc_by_type = agp_generic_alloc_by_type; - agp_bridge->free_by_type = agp_generic_free_by_type; - agp_bridge->agp_alloc_page = agp_generic_alloc_page; - agp_bridge->agp_destroy_page = agp_generic_destroy_page; - agp_bridge->suspend = agp_generic_suspend; - agp_bridge->resume = agp_generic_resume; - agp_bridge->cant_use_aperture = 0; - return 0; -} - -struct agp_device_ids i7x05_agp_device_ids[] __initdata = -{ - { - .device_id = PCI_DEVICE_ID_INTEL_7505_0, - .chipset = INTEL_I7505, - .chipset_name = "i7505", - }, - { - .device_id = PCI_DEVICE_ID_INTEL_7205_0, - .chipset = INTEL_I7505, - .chipset_name = "i7205", - }, - { }, /* dummy final entry, always present */ -}; - -/* scan table above for supported devices */ -static int __init agp_lookup_host_bridge (struct pci_dev *pdev) -{ - int j=0; - struct agp_device_ids *devs; - - devs = i7x05_agp_device_ids; - - while (devs[j].chipset_name != NULL) { - if (pdev->device == devs[j].device_id) { - printk (KERN_INFO PFX "Detected Intel %s chipset\n", - devs[j].chipset_name); - agp_bridge->type = devs[j].chipset; - - if (devs[j].chipset_setup != NULL) - return devs[j].chipset_setup(pdev); - else - return intel_7505_setup(pdev); - } - j++; - } - - printk(KERN_ERR PFX "Unsupported Intel chipset (device id: %04x),", - pdev->device); - return -ENODEV; -} - -static struct agp_driver i7x05_agp_driver = { - .owner = THIS_MODULE; -}; - -static int __init agp_i7x05_probe (struct pci_dev *dev, const struct pci_device_id *ent) -{ - u8 cap_ptr = 0; - - cap_ptr = pci_find_capability(dev, PCI_CAP_ID_AGP); - if (cap_ptr == 0) - return -ENODEV; - - if (agp_lookup_host_bridge(dev) != -ENODEV) { - agp_bridge->dev = dev; - agp_bridge->capndx = cap_ptr; - /* Fill in the mode register */ - pci_read_config_dword(agp_bridge->dev, agp_bridge->capndx+PCI_AGP_STATUS, &agp_bridge->mode) - i7x05_agp_driver.dev = dev; - agp_register_driver(&i7x05_agp_driver); - return 0; - } - return -ENODEV; -} - - -static struct pci_device_id agp_i7x05_pci_table[] __initdata = { - { - .class = (PCI_CLASS_BRIDGE_HOST << 8), - .class_mask = ~0, - .vendor = PCI_VENDOR_ID_INTEL, - .device = PCI_ANY_ID, - .subvendor = PCI_ANY_ID, - .subdevice = PCI_ANY_ID, - }, - { } -}; - -MODULE_DEVICE_TABLE(pci, agp_i7x05_pci_table); - -static struct __initdata pci_driver agp_i7x05_pci_driver = { - .name = "agpgart-i7x05", - .id_table = agp_i7x05_pci_table, - .probe = agp_i7x05_probe, -}; - -int __init agp_i7x05_init(void) -{ - int ret_val; - - ret_val = pci_module_init(&agp_i7x05_pci_driver); - if (ret_val) - agp_bridge->type = NOT_SUPPORTED; - - return ret_val; -} - -static void __exit agp_i7x05_cleanup(void) -{ - agp_unregister_driver(&i7x05_agp_driver); - pci_unregister_driver(&agp_i7x05_pci_driver); -} - -module_init(agp_i7x05_init); -module_exit(agp_i7x05_cleanup); - -MODULE_AUTHOR("Matthew E Tolentino "); -MODULE_LICENSE("GPL and additional rights"); - diff -Nru a/drivers/char/agp/intel-agp.c b/drivers/char/agp/intel-agp.c --- a/drivers/char/agp/intel-agp.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/agp/intel-agp.c Sat Apr 12 14:44:08 2003 @@ -960,6 +960,34 @@ return 0; } +static int intel_7505_configure(void) +{ + u32 temp; + u16 temp2; + struct aper_size_info_8 *current_size; + + current_size = A_SIZE_8(agp_bridge->current_size); + + /* aperture size */ + pci_write_config_byte(agp_bridge->dev, INTEL_APSIZE, current_size->size_value); + + /* address to map to */ + pci_read_config_dword(agp_bridge->dev, INTEL_APBASE, &temp); + agp_bridge->gart_bus_addr = (temp & PCI_BASE_ADDRESS_MEM_MASK); + + /* attbase - aperture base */ + pci_write_config_dword(agp_bridge->dev, INTEL_ATTBASE, agp_bridge->gatt_bus_addr); + + /* agpctrl */ + pci_write_config_dword(agp_bridge->dev, INTEL_AGPCTRL, 0x0000); + + /* mchcfg */ + pci_read_config_word(agp_bridge->dev, INTEL_I7505_MCHCFG, &temp2); + pci_write_config_word(agp_bridge->dev, INTEL_I7505_MCHCFG, temp2 | (1 << 9)); + + return 0; +} + static unsigned long intel_mask_memory(unsigned long addr, int type) { /* Memory type is ignored */ @@ -1026,7 +1054,7 @@ agp_bridge->cleanup = intel_cleanup; agp_bridge->tlb_flush = intel_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1055,7 +1083,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1085,7 +1113,7 @@ agp_bridge->cleanup = intel_820_cleanup; agp_bridge->tlb_flush = intel_820_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1114,7 +1142,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1143,7 +1171,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1172,7 +1200,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1201,7 +1229,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1230,7 +1258,7 @@ agp_bridge->cleanup = intel_8xx_cleanup; agp_bridge->tlb_flush = intel_8xx_tlbflush; agp_bridge->mask_memory = intel_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -1246,6 +1274,34 @@ return 0; } +static int __init intel_7505_setup (struct pci_dev *pdev) +{ + agp_bridge->masks = intel_generic_masks; + agp_bridge->aperture_sizes = (void *) intel_8xx_sizes; + agp_bridge->size_type = U8_APER_SIZE; + agp_bridge->num_aperture_sizes = 7; + agp_bridge->dev_private_data = NULL; + agp_bridge->needs_scratch_page = FALSE; + agp_bridge->configure = intel_7505_configure; + agp_bridge->fetch_size = intel_8xx_fetch_size; + agp_bridge->cleanup = intel_8xx_cleanup; + agp_bridge->tlb_flush = intel_8xx_tlbflush; + agp_bridge->mask_memory = intel_mask_memory; + agp_bridge->agp_enable = agp_generic_enable; + agp_bridge->cache_flush = global_cache_flush; + agp_bridge->create_gatt_table = agp_generic_create_gatt_table; + agp_bridge->free_gatt_table = agp_generic_free_gatt_table; + agp_bridge->insert_memory = agp_generic_insert_memory; + agp_bridge->remove_memory = agp_generic_remove_memory; + agp_bridge->alloc_by_type = agp_generic_alloc_by_type; + agp_bridge->free_by_type = agp_generic_free_by_type; + agp_bridge->agp_alloc_page = agp_generic_alloc_page; + agp_bridge->agp_destroy_page = agp_generic_destroy_page; + agp_bridge->suspend = agp_generic_suspend; + agp_bridge->resume = agp_generic_resume; + agp_bridge->cant_use_aperture = 0; + return 0; +} struct agp_device_ids intel_agp_device_ids[] __initdata = { { @@ -1328,6 +1384,18 @@ .chipset = INTEL_I865_G, .chipset_name = "865G", .chipset_setup = intel_845_setup + }, + { + .device_id = PCI_DEVICE_ID_INTEL_7505_0, + .chipset = INTEL_E7505, + .chipset_name = "E7505", + .chipset_setup = intel_7505_setup + }, + { + .device_id = PCI_DEVICE_ID_INTEL_7205_0, + .chipset = INTEL_E7505, + .chipset_name = "E7205", + .chipset_setup = intel_7505_setup }, { }, /* dummy final entry, always present */ }; diff -Nru a/drivers/char/agp/sis-agp.c b/drivers/char/agp/sis-agp.c --- a/drivers/char/agp/sis-agp.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/agp/sis-agp.c Sat Apr 12 14:44:06 2003 @@ -99,7 +99,7 @@ agp_bridge->cleanup = sis_cleanup; agp_bridge->tlb_flush = sis_tlbflush; agp_bridge->mask_memory = sis_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; diff -Nru a/drivers/char/agp/via-agp.c b/drivers/char/agp/via-agp.c --- a/drivers/char/agp/via-agp.c Sat Apr 12 14:44:09 2003 +++ b/drivers/char/agp/via-agp.c Sat Apr 12 14:44:09 2003 @@ -101,7 +101,6 @@ }; -#ifdef CONFIG_AGP3 static int via_fetch_size_agp3(void) { int i; @@ -186,7 +185,7 @@ agp_bridge->num_aperture_sizes = 10; agp_bridge->dev_private_data = NULL; agp_bridge->needs_scratch_page = FALSE; - agp_bridge->agp_enable = agp_generic_agp_3_0_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->configure = via_configure_agp3; agp_bridge->fetch_size = via_fetch_size_agp3; agp_bridge->cleanup = via_cleanup_agp3; @@ -206,18 +205,10 @@ agp_bridge->cant_use_aperture = 0; return 0; } -#else -static int __init via_generic_agp3_setup (struct pci_dev *pdev) -{ - printk (KERN_INFO PFX "Bridge in AGP3 mode, but CONFIG_AGP3=n\n"); - return -ENODEV; -} -#endif /* CONFIG_AGP3 */ static int __init via_generic_setup (struct pci_dev *pdev) { -#ifdef CONFIG_AGP3 /* Garg, there are KT400s with KT266 IDs. */ if (pdev->device == PCI_DEVICE_ID_VIA_8367_0) { @@ -235,7 +226,6 @@ /* Its in 2.0 mode, drop through. */ } } -#endif agp_bridge->masks = via_generic_masks; agp_bridge->aperture_sizes = (void *) via_generic_sizes; @@ -248,7 +238,7 @@ agp_bridge->cleanup = via_cleanup; agp_bridge->tlb_flush = via_tlbflush; agp_bridge->mask_memory = via_mask_memory; - agp_bridge->agp_enable = agp_generic_agp_enable; + agp_bridge->agp_enable = agp_generic_enable; agp_bridge->cache_flush = global_cache_flush; agp_bridge->create_gatt_table = agp_generic_create_gatt_table; agp_bridge->free_gatt_table = agp_generic_free_gatt_table; @@ -319,10 +309,10 @@ }, /* VT8361 */ -/* { + { .device_id = PCI_DEVICE_ID_VIA_8361, // 0x3112 .chipset_name = "Apollo KLE133", - }, */ + }, /* VT8365 / VT8362 */ { @@ -331,10 +321,10 @@ }, /* VT8753A */ -/* { - .device_id = PCI_DEVICE_ID_VIA_8753_0, // 0x3128 + { + .device_id = PCI_DEVICE_ID_VIA_8753_0, .chipset_name = "P4X266", - }, */ + }, /* VT8366 */ { @@ -349,16 +339,16 @@ }, /* KM266 / PM266 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_KM266, // 0x3116 + { + .device_id = PCI_DEVICE_ID_VIA_KM266, .chipset_name = "KM266/PM266", - }, */ + }, /* CLE266 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_CLE266, // 0x3123 + { + .device_id = PCI_DEVICE_ID_VIA_CLE266, .chipset_name = "CLE266", - }, */ + }, { .device_id = PCI_DEVICE_ID_VIA_8377_0, @@ -374,16 +364,16 @@ }, /* VT8752*/ -/* { - .device_id = PCI_DEVICE_ID_VIA_8752, // 0x3148 + { + .device_id = PCI_DEVICE_ID_VIA_8752, .chipset_name = "ProSavage DDR P4M266", - }, */ + }, /* KN266/PN266 */ -/* { - .device_id = PCI_DEVICE_ID_KN266, // 0x3156 + { + .device_id = PCI_DEVICE_ID_VIA_KN266, .chipset_name = "KN266/PN266", - }, */ + }, /* VT8754 */ { @@ -392,28 +382,28 @@ }, /* P4N333 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_P4N333, // 0x3178 + { + .device_id = PCI_DEVICE_ID_VIA_P4N333, .chipset_name = "P4N333", - }, */ + }, /* P4X600 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_P4X600, // 0x0198 + { + .device_id = PCI_DEVICE_ID_VIA_P4X600, .chipset_name = "P4X600", - }, */ + }, /* KM400 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_KM400, // 0x3205 + { + .device_id = PCI_DEVICE_ID_VIA_KM400, .chipset_name = "KM400", - }, */ + }, /* P4M400 */ -/* { - .device_id = PCI_DEVICE_ID_VIA_P4M400, // 0x3209 + { + .device_id = PCI_DEVICE_ID_VIA_P4M400, .chipset_name = "PM400", - }, */ + }, { }, /* dummy final entry, always present */ }; diff -Nru a/drivers/char/applicom.c b/drivers/char/applicom.c --- a/drivers/char/applicom.c Sat Apr 12 14:44:10 2003 +++ b/drivers/char/applicom.c Sat Apr 12 14:44:10 2003 @@ -29,22 +29,12 @@ #include #include #include -#include #include #include #include "applicom.h" -#if LINUX_VERSION_CODE < 0x20300 -/* These probably want adding to */ -#define init_waitqueue_head(x) do { *(x) = NULL; } while (0) -#define PCI_BASE_ADDRESS(dev) (dev->base_address[0]) -#define DECLARE_WAIT_QUEUE_HEAD(x) struct wait_queue *x -#define __setup(x,y) /* */ -#else -#define PCI_BASE_ADDRESS(dev) (dev->resource[0].start) -#endif /* NOTE: We use for loops with {write,read}b() instead of memcpy_{from,to}io throughout this driver. This is because @@ -220,18 +210,18 @@ if (pci_enable_device(dev)) return -EIO; - RamIO = ioremap(PCI_BASE_ADDRESS(dev), LEN_RAM_IO); + RamIO = ioremap(dev->resource[0].start, LEN_RAM_IO); if (!RamIO) { - printk(KERN_INFO "ac.o: Failed to ioremap PCI memory space at 0x%lx\n", PCI_BASE_ADDRESS(dev)); + printk(KERN_INFO "ac.o: Failed to ioremap PCI memory space at 0x%lx\n", dev->resource[0].start); return -EIO; } printk(KERN_INFO "Applicom %s found at mem 0x%lx, irq %d\n", - applicom_pci_devnames[dev->device-1], PCI_BASE_ADDRESS(dev), + applicom_pci_devnames[dev->device-1], dev->resource[0].start, dev->irq); - if (!(boardno = ac_register_board(PCI_BASE_ADDRESS(dev), + if (!(boardno = ac_register_board(dev->resource[0].start, (unsigned long)RamIO,0))) { printk(KERN_INFO "ac.o: PCI Applicom device doesn't have correct signature.\n"); iounmap(RamIO); diff -Nru a/drivers/char/drm/drmP.h b/drivers/char/drm/drmP.h --- a/drivers/char/drm/drmP.h Sat Apr 12 14:44:09 2003 +++ b/drivers/char/drm/drmP.h Sat Apr 12 14:44:09 2003 @@ -242,17 +242,17 @@ DRM(ioremapfree)( (map)->handle, (map)->size ); \ } while (0) -#define DRM_FIND_MAP(_map, _o) \ -do { \ - struct list_head *_list; \ - list_for_each( _list, &dev->maplist->head ) { \ - drm_map_list_t *_entry = (drm_map_list_t *)_list; \ - if ( _entry->map && \ - _entry->map->offset == (_o) ) { \ - (_map) = _entry->map; \ - break; \ - } \ - } \ +#define DRM_FIND_MAP(_map, _o) \ +do { \ + struct list_head *_list; \ + list_for_each( _list, &dev->maplist->head ) { \ + drm_map_list_t *_entry = list_entry( _list, drm_map_list_t, head ); \ + if ( _entry->map && \ + _entry->map->offset == (_o) ) { \ + (_map) = _entry->map; \ + break; \ + } \ + } \ } while(0) #define DRM_DROP_MAP(_map) diff -Nru a/drivers/char/drm/drm_agpsupport.h b/drivers/char/drm/drm_agpsupport.h --- a/drivers/char/drm/drm_agpsupport.h Sat Apr 12 14:44:05 2003 +++ b/drivers/char/drm/drm_agpsupport.h Sat Apr 12 14:44:05 2003 @@ -266,12 +266,6 @@ head->cant_use_aperture = head->agp_info.cant_use_aperture; head->page_mask = head->agp_info.page_mask; #endif - - DRM_INFO("AGP %d.%d aperture @ 0x%08lx %ZuMB\n", - head->agp_info.version.major, - head->agp_info.version.minor, - head->agp_info.aper_base, - head->agp_info.aper_size); } return head; } diff -Nru a/drivers/char/drm/drm_bufs.h b/drivers/char/drm/drm_bufs.h --- a/drivers/char/drm/drm_bufs.h Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/drm_bufs.h Sat Apr 12 14:44:06 2003 @@ -106,7 +106,7 @@ switch ( map->type ) { case _DRM_REGISTERS: case _DRM_FRAME_BUFFER: -#if !defined(__sparc__) && !defined(__alpha__) +#if !defined(__sparc__) && !defined(__alpha__) && !defined(__ia64__) if ( map->offset + map->size < map->offset || map->offset < virt_to_phys(high_memory) ) { DRM(free)( map, sizeof(*map), DRM_MEM_MAPS ); @@ -210,7 +210,7 @@ down(&dev->struct_sem); list = &dev->maplist->head; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *) list; + r_list = list_entry(list, drm_map_list_t, head); if(r_list->map && r_list->map->handle == request.handle && diff -Nru a/drivers/char/drm/drm_context.h b/drivers/char/drm/drm_context.h --- a/drivers/char/drm/drm_context.h Sat Apr 12 14:44:05 2003 +++ b/drivers/char/drm/drm_context.h Sat Apr 12 14:44:05 2003 @@ -194,7 +194,7 @@ down(&dev->struct_sem); list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); if(r_list->map && r_list->map->handle == request.handle) goto found; diff -Nru a/drivers/char/drm/drm_dma.h b/drivers/char/drm/drm_dma.h --- a/drivers/char/drm/drm_dma.h Sat Apr 12 14:44:08 2003 +++ b/drivers/char/drm/drm_dma.h Sat Apr 12 14:44:08 2003 @@ -444,7 +444,7 @@ d->flags & _DRM_DMA_WAIT); if (!buf) break; if (buf->pending || buf->waiting) { - DRM_ERROR("Free buffer %d in use by %x (w%d, p%d)\n", + DRM_ERROR("Free buffer %d in use: filp %p (w%d, p%d)\n", buf->idx, buf->filp, buf->waiting, @@ -651,7 +651,7 @@ * for the same vblank sequence number; nothing to be done in * that case */ - list_for_each( ( (struct list_head *) vbl_sig ), &dev->vbl_sigs.head ) { + list_for_each_entry( vbl_sig, &dev->vbl_sigs.head, head ) { if (vbl_sig->sequence == vblwait.request.sequence && vbl_sig->info.si_signo == vblwait.request.signal && vbl_sig->task == current) @@ -702,19 +702,20 @@ void DRM(vbl_send_signals)( drm_device_t *dev ) { - struct list_head *tmp; + struct list_head *list, *tmp; drm_vbl_sig_t *vbl_sig; unsigned int vbl_seq = atomic_read( &dev->vbl_received ); unsigned long flags; spin_lock_irqsave( &dev->vbl_lock, flags ); - list_for_each_safe( ( (struct list_head *) vbl_sig ), tmp, &dev->vbl_sigs.head ) { + list_for_each_safe( list, tmp, &dev->vbl_sigs.head ) { + vbl_sig = list_entry( list, drm_vbl_sig_t, head ); if ( ( vbl_seq - vbl_sig->sequence ) <= (1<<23) ) { vbl_sig->info.si_code = vbl_seq; send_sig_info( vbl_sig->info.si_signo, &vbl_sig->info, vbl_sig->task ); - list_del( (struct list_head *) vbl_sig ); + list_del( list ); DRM_FREE( vbl_sig, sizeof(*vbl_sig) ); diff -Nru a/drivers/char/drm/drm_ioctl.h b/drivers/char/drm/drm_ioctl.h --- a/drivers/char/drm/drm_ioctl.h Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/drm_ioctl.h Sat Apr 12 14:44:06 2003 @@ -204,7 +204,7 @@ i = 0; list_for_each(list, &dev->maplist->head) { if(i == idx) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); break; } i++; diff -Nru a/drivers/char/drm/drm_os_linux.h b/drivers/char/drm/drm_os_linux.h --- a/drivers/char/drm/drm_os_linux.h Sat Apr 12 14:44:09 2003 +++ b/drivers/char/drm/drm_os_linux.h Sat Apr 12 14:44:09 2003 @@ -46,9 +46,8 @@ #define DRM_GETSAREA() \ do { \ - struct list_head *list; \ - list_for_each( list, &dev->maplist->head ) { \ - drm_map_list_t *entry = (drm_map_list_t *)list; \ + drm_map_list_t *entry; \ + list_for_each_entry( entry, &dev->maplist->head, head ) { \ if ( entry->map && \ entry->map->type == _DRM_SHM && \ (entry->map->flags & _DRM_CONTAINS_LOCK) ) { \ @@ -60,28 +59,28 @@ #define DRM_HZ HZ -#define DRM_WAIT_ON( ret, queue, timeout, condition ) \ -do { \ - DECLARE_WAITQUEUE(entry, current); \ - unsigned long end = jiffies + (timeout); \ - add_wait_queue(&(queue), &entry); \ - \ - for (;;) { \ - current->state = TASK_INTERRUPTIBLE; \ - if (condition) \ - break; \ - if((signed)(end - jiffies) <= 0) { \ - ret = -EBUSY; \ - break; \ - } \ +#define DRM_WAIT_ON( ret, queue, timeout, condition ) \ +do { \ + DECLARE_WAITQUEUE(entry, current); \ + unsigned long end = jiffies + (timeout); \ + add_wait_queue(&(queue), &entry); \ + \ + for (;;) { \ + current->state = TASK_INTERRUPTIBLE; \ + if (condition) \ + break; \ + if (time_after_eq(jiffies, end)) { \ + ret = -EBUSY; \ + break; \ + } \ schedule_timeout((HZ/100 > 1) ? HZ/100 : 1); \ - if (signal_pending(current)) { \ - ret = -EINTR; \ - break; \ - } \ - } \ - current->state = TASK_RUNNING; \ - remove_wait_queue(&(queue), &entry); \ + if (signal_pending(current)) { \ + ret = -EINTR; \ + break; \ + } \ + } \ + current->state = TASK_RUNNING; \ + remove_wait_queue(&(queue), &entry); \ } while (0) diff -Nru a/drivers/char/drm/drm_proc.h b/drivers/char/drm/drm_proc.h --- a/drivers/char/drm/drm_proc.h Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/drm_proc.h Sat Apr 12 14:44:06 2003 @@ -168,9 +168,9 @@ struct list_head *list; /* Hardcoded from _DRM_FRAME_BUFFER, - _DRM_REGISTERS, _DRM_SHM, and - _DRM_AGP. */ - const char *types[] = { "FB", "REG", "SHM", "AGP" }; + _DRM_REGISTERS, _DRM_SHM, _DRM_AGP, and + _DRM_SCATTER_GATHER. */ + const char *types[] = { "FB", "REG", "SHM", "AGP", "SG" }; const char *type; int i; @@ -186,10 +186,10 @@ "address mtrr\n\n"); i = 0; if (dev->maplist != NULL) list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); map = r_list->map; if(!map) continue; - if (map->type < 0 || map->type > 3) type = "??"; + if (map->type < 0 || map->type > 4) type = "??"; else type = types[map->type]; DRM_PROC_PRINT("%4d 0x%08lx 0x%08lx %4.4s 0x%02x 0x%08lx ", i, diff -Nru a/drivers/char/drm/drm_vm.h b/drivers/char/drm/drm_vm.h --- a/drivers/char/drm/drm_vm.h Sat Apr 12 14:44:10 2003 +++ b/drivers/char/drm/drm_vm.h Sat Apr 12 14:44:10 2003 @@ -73,7 +73,7 @@ if(!dev->agp || !dev->agp->cant_use_aperture) goto vm_nopage_error; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); map = r_list->map; if (!map) continue; if (map->offset == VM_OFFSET(vma)) break; @@ -189,7 +189,7 @@ found_maps = 0; list = &dev->maplist->head; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *) list; + r_list = list_entry(list, drm_map_list_t, head); if (r_list->map == map) found_maps++; } @@ -392,7 +392,7 @@ list_for_each(list, &dev->maplist->head) { unsigned long off; - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); map = r_list->map; if (!map) continue; off = DRIVER_GET_MAP_OFS(); diff -Nru a/drivers/char/drm/gamma_dma.c b/drivers/char/drm/gamma_dma.c --- a/drivers/char/drm/gamma_dma.c Sat Apr 12 14:44:10 2003 +++ b/drivers/char/drm/gamma_dma.c Sat Apr 12 14:44:10 2003 @@ -605,7 +605,7 @@ memset( dev_priv, 0, sizeof(drm_gamma_private_t) ); list_for_each(list, &dev->maplist->head) { - drm_map_list_t *r_list = (drm_map_list_t *)list; + drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head); if( r_list->map && r_list->map->type == _DRM_SHM && r_list->map->flags & _DRM_CONTAINS_LOCK ) { @@ -809,7 +809,7 @@ down(&dev->struct_sem); r_list = NULL; list_for_each(list, &dev->maplist->head) { - r_list = (drm_map_list_t *)list; + r_list = list_entry(list, drm_map_list_t, head); if(r_list->map && r_list->map->handle == request.handle) break; } diff -Nru a/drivers/char/drm/i810_dma.c b/drivers/char/drm/i810_dma.c --- a/drivers/char/drm/i810_dma.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/drm/i810_dma.c Sat Apr 12 14:44:07 2003 @@ -340,7 +340,7 @@ memset(dev_priv, 0, sizeof(drm_i810_private_t)); list_for_each(list, &dev->maplist->head) { - drm_map_list_t *r_list = (drm_map_list_t *)list; + drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head); if( r_list->map && r_list->map->type == _DRM_SHM && r_list->map->flags & _DRM_CONTAINS_LOCK ) { diff -Nru a/drivers/char/drm/i830_dma.c b/drivers/char/drm/i830_dma.c --- a/drivers/char/drm/i830_dma.c Sat Apr 12 14:44:06 2003 +++ b/drivers/char/drm/i830_dma.c Sat Apr 12 14:44:06 2003 @@ -363,7 +363,7 @@ memset(dev_priv, 0, sizeof(drm_i830_private_t)); list_for_each(list, &dev->maplist->head) { - drm_map_list_t *r_list = (drm_map_list_t *)list; + drm_map_list_t *r_list = list_entry(list, drm_map_list_t, head); if( r_list->map && r_list->map->type == _DRM_SHM && r_list->map->flags & _DRM_CONTAINS_LOCK ) { diff -Nru a/drivers/char/sx.c b/drivers/char/sx.c --- a/drivers/char/sx.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/sx.c Sat Apr 12 14:44:07 2003 @@ -238,7 +238,6 @@ #include "sxboards.h" #include "sxwindow.h" -#include #include #include "sx.h" @@ -1726,9 +1725,9 @@ tmp = kmalloc (SX_CHUNK_SIZE, GFP_USER); if (!tmp) return -ENOMEM; - Get_user (nbytes, descr++); - Get_user (offset, descr++); - Get_user (data, descr++); + get_user (nbytes, descr++); + get_user (offset, descr++); + get_user (data, descr++); while (nbytes && data) { for (i=0;inbytes)?nbytes-i:SX_CHUNK_SIZE); } - Get_user (nbytes, descr++); - Get_user (offset, descr++); - Get_user (data, descr++); + get_user (nbytes, descr++); + get_user (offset, descr++); + get_user (data, descr++); } kfree (tmp); sx_nports += sx_init_board (board); @@ -1816,13 +1815,13 @@ rc = 0; switch (cmd) { case TIOCGSOFTCAR: - rc = Put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), + rc = put_user(((tty->termios->c_cflag & CLOCAL) ? 1 : 0), (unsigned int *) arg); break; case TIOCSSOFTCAR: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); tty->termios->c_cflag = (tty->termios->c_cflag & ~CLOCAL) | (ival ? CLOCAL : 0); @@ -1848,7 +1847,7 @@ case TIOCMBIS: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(unsigned int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); sx_setsignals(port, ((ival & TIOCM_DTR) ? 1 : -1), ((ival & TIOCM_RTS) ? 1 : -1)); sx_reconfigure_port(port); @@ -1857,7 +1856,7 @@ case TIOCMBIC: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(unsigned int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); sx_setsignals(port, ((ival & TIOCM_DTR) ? 0 : -1), ((ival & TIOCM_RTS) ? 0 : -1)); sx_reconfigure_port(port); @@ -1866,7 +1865,7 @@ case TIOCMSET: if ((rc = verify_area(VERIFY_READ, (void *) arg, sizeof(unsigned int))) == 0) { - Get_user(ival, (unsigned int *) arg); + get_user(ival, (unsigned int *) arg); sx_setsignals(port, ((ival & TIOCM_DTR) ? 1 : 0), ((ival & TIOCM_RTS) ? 1 : 0)); sx_reconfigure_port(port); @@ -2484,7 +2483,7 @@ printk (KERN_DEBUG "sx: performing cntrl reg fix: %08x -> %08x\n", t, CNTRL_REG_GOODVALUE); writel (CNTRL_REG_GOODVALUE, rebase + CNTRL_REG_OFFSET); } - my_iounmap (hwbase, rebase); + iounmap ((char *) rebase); } #endif @@ -2574,7 +2573,7 @@ 0x18000 .... */ if (IS_CF_BOARD (board)) board->base += 0x18000; - board->irq = get_irq (pdev); + board->irq = pdev->irq; sx_dprintk (SX_DEBUG_PROBE, "Got a specialix card: %x/%lx(%d) %x.\n", tint, boards[found].base, board->irq, board->flags); @@ -2583,7 +2582,7 @@ found++; fix_sx_pci (pdev, board); } else - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } #endif @@ -2600,7 +2599,7 @@ if (probe_sx (board)) { found++; } else { - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } @@ -2616,7 +2615,7 @@ if (probe_si (board)) { found++; } else { - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } for (i=0;ihw_base, board->base); + iounmap ((char *) (board->base)); } } @@ -2692,7 +2691,7 @@ /* It is safe/allowed to del_timer a non-active timer */ del_timer (& board->timer); - my_iounmap (board->hw_base, board->base); + iounmap ((char *) (board->base)); } } if (misc_deregister(&sx_fw_device) < 0) { diff -Nru a/drivers/char/tty_io.c b/drivers/char/tty_io.c --- a/drivers/char/tty_io.c Sat Apr 12 14:44:08 2003 +++ b/drivers/char/tty_io.c Sat Apr 12 14:44:08 2003 @@ -136,7 +136,7 @@ * redirect is the pseudo-tty that console output * is redirected to if asked by TIOCCONS. */ -struct tty_struct * redirect; +static struct tty_struct *redirect; static void initialize_tty_struct(struct tty_struct *tty); diff -Nru a/drivers/char/upd4990a.c b/drivers/char/upd4990a.c --- a/drivers/char/upd4990a.c Sat Apr 12 14:44:07 2003 +++ b/drivers/char/upd4990a.c Sat Apr 12 14:44:07 2003 @@ -343,19 +343,28 @@ static int __init rtc_init(void) { + int err = 0; + if (!request_region(UPD4990A_IO, 1, "rtc")) { printk(KERN_ERR "upd4990a: could not acquire I/O port %#x\n", UPD4990A_IO); return -EBUSY; } + err = misc_register(&rtc_dev); + if (err) { + printk(KERN_ERR "upd4990a: can't misc_register() on minor=%d\n", + RTC_MINOR); + release_region(UPD4990A_IO, 1); + return err; + } + #if 0 printk(KERN_INFO "\xB6\xDA\xDD\xC0\xDE \xC4\xDE\xB9\xB2 Driver\n"); /* Calender Clock Driver */ #else printk(KERN_INFO "Real Time Clock driver for NEC PC-9800 v" RTC98_VERSION "\n"); #endif - misc_register(&rtc_dev); create_proc_read_entry("driver/rtc", 0, NULL, rtc_read_proc, NULL); init_timer(&rtc_uie_timer); diff -Nru a/drivers/hotplug/pci_hotplug_core.c b/drivers/hotplug/pci_hotplug_core.c --- a/drivers/hotplug/pci_hotplug_core.c Sat Apr 12 14:44:09 2003 +++ b/drivers/hotplug/pci_hotplug_core.c Sat Apr 12 14:44:09 2003 @@ -100,7 +100,7 @@ .sysfs_ops = &hotplug_slot_sysfs_ops }; -static decl_subsys(hotplug_slots, &hotplug_slot_ktype); +static decl_subsys(hotplug_slots, &hotplug_slot_ktype, NULL); /* these strings match up with the values in pci_bus_speed */ diff -Nru a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig --- a/drivers/i2c/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/Kconfig Sat Apr 12 14:44:06 2003 @@ -142,6 +142,17 @@ . The module will be called i2c-elektor. +config I2C_KEYWEST + tristate "Powermac Keywest I2C interface" + depends on I2C && ALL_PPC + help + This supports the use of the I2C interface in the combo-I/O + chip on recent Apple machines. Say Y if you have such a machine. + + This driver is also available as a module. If you want to compile + it as a module, say M here and read Documentation/modules.txt. + The module will be called i2c-keywest. + config ITE_I2C_ALGO tristate "ITE I2C Algorithm" depends on MIPS_ITE8172 && I2C diff -Nru a/drivers/i2c/Makefile b/drivers/i2c/Makefile --- a/drivers/i2c/Makefile Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/Makefile Sat Apr 12 14:44:06 2003 @@ -10,6 +10,7 @@ obj-$(CONFIG_I2C_VELLEMAN) += i2c-velleman.o obj-$(CONFIG_I2C_ALGOPCF) += i2c-algo-pcf.o obj-$(CONFIG_I2C_ELEKTOR) += i2c-elektor.o +obj-$(CONFIG_I2C_KEYWEST) += i2c-keywest.o obj-$(CONFIG_ITE_I2C_ALGO) += i2c-algo-ite.o obj-$(CONFIG_ITE_I2C_ADAP) += i2c-adap-ite.o obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o diff -Nru a/drivers/i2c/busses/Kconfig b/drivers/i2c/busses/Kconfig --- a/drivers/i2c/busses/Kconfig Sat Apr 12 14:44:09 2003 +++ b/drivers/i2c/busses/Kconfig Sat Apr 12 14:44:09 2003 @@ -116,5 +116,31 @@ in the lm_sensors package, which you can download at http://www.lm-sensors.nu + +config I2C_VIAPRO + tristate " VIA 82C596/82C686/823x" + depends on I2C && PCI && EXPERIMENTAL + help + + If you say yes to this option, support will be included for the VIA + 82C596/82C686/823x I2C interfaces. Specifically, the following + chipsets are supported: + 82C596A/B + 82C686A/B + 8231 + 8233 + 8233A + 8235 + + This can also be built as a module which can be inserted and removed + while the kernel is running. If you want to compile it as a module, + say M here and read . + + The module will be called i2c-viapro. + + You will also need the latest user-space utilties: you can find them + in the lm_sensors package, which you can download at + http://www.lm-sensors.nu + endmenu diff -Nru a/drivers/i2c/busses/Makefile b/drivers/i2c/busses/Makefile --- a/drivers/i2c/busses/Makefile Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/busses/Makefile Sat Apr 12 14:44:06 2003 @@ -8,3 +8,4 @@ obj-$(CONFIG_I2C_I801) += i2c-i801.o obj-$(CONFIG_I2C_ISA) += i2c-isa.o obj-$(CONFIG_I2C_PIIX4) += i2c-piix4.o +obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o diff -Nru a/drivers/i2c/busses/i2c-viapro.c b/drivers/i2c/busses/i2c-viapro.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/busses/i2c-viapro.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,504 @@ +/* + i2c-viapro.c - Part of lm_sensors, Linux kernel modules for hardware + monitoring + Copyright (c) 1998 - 2002 Frodo Looijaard , + Philip Edelbrock , Kyösti Mälkki , + Mark D. Studebaker + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +/* + Supports Via devices: + 82C596A/B (0x3050) + 82C596B (0x3051) + 82C686A/B + 8231 + 8233 + 8233A (0x3147 and 0x3177) + 8235 + Note: we assume there can only be one device, with one SMBus interface. +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define SMBBA1 0x90 +#define SMBBA2 0x80 +#define SMBBA3 0xD0 + +/* SMBus address offsets */ +#define SMBHSTSTS (0 + vt596_smba) +#define SMBHSLVSTS (1 + vt596_smba) +#define SMBHSTCNT (2 + vt596_smba) +#define SMBHSTCMD (3 + vt596_smba) +#define SMBHSTADD (4 + vt596_smba) +#define SMBHSTDAT0 (5 + vt596_smba) +#define SMBHSTDAT1 (6 + vt596_smba) +#define SMBBLKDAT (7 + vt596_smba) +#define SMBSLVCNT (8 + vt596_smba) +#define SMBSHDWCMD (9 + vt596_smba) +#define SMBSLVEVT (0xA + vt596_smba) +#define SMBSLVDAT (0xC + vt596_smba) + +/* PCI Address Constants */ + +/* SMBus data in configuration space can be found in two places, + We try to select the better one*/ + +static unsigned short smb_cf_hstcfg = 0xD2; + +#define SMBHSTCFG (smb_cf_hstcfg) +#define SMBSLVC (SMBHSTCFG+1) +#define SMBSHDW1 (SMBHSTCFG+2) +#define SMBSHDW2 (SMBHSTCFG+3) +#define SMBREV (SMBHSTCFG+4) + +/* Other settings */ +#define MAX_TIMEOUT 500 +#define ENABLE_INT9 0 + +/* VT82C596 constants */ +#define VT596_QUICK 0x00 +#define VT596_BYTE 0x04 +#define VT596_BYTE_DATA 0x08 +#define VT596_WORD_DATA 0x0C +#define VT596_BLOCK_DATA 0x14 + +/* insmod parameters */ + +/* If force is set to anything different from 0, we forcibly enable the + VT596. DANGEROUS! */ +static int force = 0; +MODULE_PARM(force, "i"); +MODULE_PARM_DESC(force, "Forcibly enable the SMBus. DANGEROUS!"); + +/* If force_addr is set to anything different from 0, we forcibly enable + the VT596 at the given address. VERY DANGEROUS! */ +static int force_addr = 0; +MODULE_PARM(force_addr, "i"); +MODULE_PARM_DESC(force_addr, + "Forcibly enable the SMBus at the given address. " + "EXTREMELY DANGEROUS!"); + +static void vt596_do_pause(unsigned int amount); +static int vt596_transaction(void); +s32 vt596_access(struct i2c_adapter * adap, u16 addr, unsigned short flags, + char read_write, u8 command, int size, union i2c_smbus_data * data); +u32 vt596_func(struct i2c_adapter *adapter); + +static struct i2c_algorithm smbus_algorithm = { + .name = "Non-I2C SMBus adapter", + .id = I2C_ALGO_SMBUS, + .smbus_xfer = vt596_access, + .functionality = vt596_func, +}; + +static struct i2c_adapter vt596_adapter = { + .owner = THIS_MODULE, + .id = I2C_ALGO_SMBUS | I2C_HW_SMBUS_VIA2, + .algo = &smbus_algorithm, + .dev = { + .name = "unset", + }, +}; + + + + +static unsigned short vt596_smba = 0; + + +/* Detect whether a compatible device can be found, and initialize it. */ +int vt596_setup(struct pci_dev *VT596_dev, struct pci_device_id const *id) +{ + unsigned char temp; + + dev_info(&VT596_dev->dev, "Found Via %s device\n", VT596_dev->dev.name); + + /* Determine the address of the SMBus areas */ + if (force_addr) { + vt596_smba = force_addr & 0xfff0; + force = 0; + } else { + if ((pci_read_config_word(VT596_dev, id->driver_data, &vt596_smba)) + || !(vt596_smba & 0x1)) { + /* try 2nd address and config reg. for 596 */ + if((id->device == PCI_DEVICE_ID_VIA_82C596_3) && + (!pci_read_config_word(VT596_dev, SMBBA2, &vt596_smba)) && + (vt596_smba & 0x1)) { + smb_cf_hstcfg = 0x84; + } else { + /* no matches at all */ + dev_err(&VT596_dev->dev, "Cannot configure " + "SMBus I/O Base address\n"); + return(-ENODEV); + } + } + vt596_smba &= 0xfff0; + if(vt596_smba == 0) { + dev_err(&VT596_dev->dev, "SMBus base address " + "uninitialized - upgrade BIOS or use " + "force_addr=0xaddr\n"); + return -ENODEV; + } + } + + if (!request_region(vt596_smba, 8, "viapro-smbus")) { + dev_err(&VT596_dev->dev, "SMBus region 0x%x already in use!\n", + vt596_smba); + return(-ENODEV); + } + + pci_read_config_byte(VT596_dev, SMBHSTCFG, &temp); + /* If force_addr is set, we program the new address here. Just to make + sure, we disable the VT596 first. */ + if (force_addr) { + pci_write_config_byte(VT596_dev, SMBHSTCFG, temp & 0xfe); + pci_write_config_word(VT596_dev, id->driver_data, vt596_smba); + pci_write_config_byte(VT596_dev, SMBHSTCFG, temp | 0x01); + dev_warn(&VT596_dev->dev, "WARNING: SMBus interface set to new " + "address 0x%04x!\n", vt596_smba); + } else if ((temp & 1) == 0) { + if (force) { + /* NOTE: This assumes I/O space and other allocations + * WERE done by the Bios! Don't complain if your + * hardware does weird things after enabling this. + * :') Check for Bios updates before resorting to + * this. + */ + pci_write_config_byte(VT596_dev, SMBHSTCFG, + temp | 1); + dev_info(&VT596_dev->dev, "Enabling SMBus device\n"); + } else { + dev_err(&VT596_dev->dev, "SMBUS: Error: Host SMBus " + "controller not enabled! - upgrade BIOS or " + "use force=1\n"); + return(-ENODEV); + } + } + + if ((temp & 0x0E) == 8) + dev_dbg(&VT596_dev->dev, "using Interrupt 9 for SMBus.\n"); + else if ((temp & 0x0E) == 0) + dev_dbg(&VT596_dev->dev, "using Interrupt SMI# for SMBus.\n"); + else + dev_dbg(&VT596_dev->dev, "Illegal Interrupt configuration " + "(or code out of date)!\n"); + + pci_read_config_byte(VT596_dev, SMBREV, &temp); + dev_dbg(&VT596_dev->dev, "SMBREV = 0x%X\n", temp); + dev_dbg(&VT596_dev->dev, "VT596_smba = 0x%X\n", vt596_smba); + + return(0); +} + + +/* Internally used pause function */ +void vt596_do_pause(unsigned int amount) +{ + current->state = TASK_INTERRUPTIBLE; + schedule_timeout(amount); +} + +/* Another internally used function */ +int vt596_transaction(void) +{ + int temp; + int result = 0; + int timeout = 0; + + dev_dbg(&vt596_adapter.dev, "Transaction (pre): CNT=%02x, CMD=%02x, " + "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT), + inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0), + inb_p(SMBHSTDAT1)); + + /* Make sure the SMBus host is ready to start transmitting */ + if ((temp = inb_p(SMBHSTSTS)) != 0x00) { + dev_dbg(&vt596_adapter.dev, "SMBus busy (0x%02x). " + "Resetting...\n", temp); + + outb_p(temp, SMBHSTSTS); + if ((temp = inb_p(SMBHSTSTS)) != 0x00) { + dev_dbg(&vt596_adapter.dev, "Failed! (0x%02x)\n", temp); + + return -1; + } else { + dev_dbg(&vt596_adapter.dev, "Successfull!\n"); + } + } + + /* start the transaction by setting bit 6 */ + outb_p(inb(SMBHSTCNT) | 0x040, SMBHSTCNT); + + /* We will always wait for a fraction of a second! + I don't know if VIA needs this, Intel did */ + do { + vt596_do_pause(1); + temp = inb_p(SMBHSTSTS); + } while ((temp & 0x01) && (timeout++ < MAX_TIMEOUT)); + + /* If the SMBus is still busy, we give up */ + if (timeout >= MAX_TIMEOUT) { + result = -1; + dev_dbg(&vt596_adapter.dev, "SMBus Timeout!\n"); + } + + if (temp & 0x10) { + result = -1; + dev_dbg(&vt596_adapter.dev, "Error: Failed bus transaction\n"); + } + + if (temp & 0x08) { + result = -1; + dev_info(&vt596_adapter.dev, "Bus collision! SMBus may be " + "locked until next hard\nreset. (sorry!)\n"); + /* Clock stops and slave is stuck in mid-transmission */ + } + + if (temp & 0x04) { + result = -1; + dev_dbg(&vt596_adapter.dev, "Error: no response!\n"); + } + + if (inb_p(SMBHSTSTS) != 0x00) + outb_p(inb(SMBHSTSTS), SMBHSTSTS); + + if ((temp = inb_p(SMBHSTSTS)) != 0x00) { + dev_dbg(&vt596_adapter.dev, "Failed reset at end of " + "transaction (%02x)\n", temp); + } + dev_dbg(&vt596_adapter.dev, "Transaction (post): CNT=%02x, CMD=%02x, " + "ADD=%02x, DAT0=%02x, DAT1=%02x\n", inb_p(SMBHSTCNT), + inb_p(SMBHSTCMD), inb_p(SMBHSTADD), inb_p(SMBHSTDAT0), + inb_p(SMBHSTDAT1)); + + return result; +} + +/* Return -1 on error. */ +s32 vt596_access(struct i2c_adapter *adap, u16 addr, unsigned short flags, + char read_write, u8 command, int size, + union i2c_smbus_data * data) +{ + int i, len; + + switch (size) { + case I2C_SMBUS_PROC_CALL: + dev_info(&vt596_adapter.dev, "I2C_SMBUS_PROC_CALL not supported!\n"); + return -1; + case I2C_SMBUS_QUICK: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + size = VT596_QUICK; + break; + case I2C_SMBUS_BYTE: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + if (read_write == I2C_SMBUS_WRITE) + outb_p(command, SMBHSTCMD); + size = VT596_BYTE; + break; + case I2C_SMBUS_BYTE_DATA: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + outb_p(command, SMBHSTCMD); + if (read_write == I2C_SMBUS_WRITE) + outb_p(data->byte, SMBHSTDAT0); + size = VT596_BYTE_DATA; + break; + case I2C_SMBUS_WORD_DATA: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + outb_p(command, SMBHSTCMD); + if (read_write == I2C_SMBUS_WRITE) { + outb_p(data->word & 0xff, SMBHSTDAT0); + outb_p((data->word & 0xff00) >> 8, SMBHSTDAT1); + } + size = VT596_WORD_DATA; + break; + case I2C_SMBUS_BLOCK_DATA: + outb_p(((addr & 0x7f) << 1) | (read_write & 0x01), + SMBHSTADD); + outb_p(command, SMBHSTCMD); + if (read_write == I2C_SMBUS_WRITE) { + len = data->block[0]; + if (len < 0) + len = 0; + if (len > 32) + len = 32; + outb_p(len, SMBHSTDAT0); + i = inb_p(SMBHSTCNT); /* Reset SMBBLKDAT */ + for (i = 1; i <= len; i++) + outb_p(data->block[i], SMBBLKDAT); + } + size = VT596_BLOCK_DATA; + break; + } + + outb_p((size & 0x1C) + (ENABLE_INT9 & 1), SMBHSTCNT); + + if (vt596_transaction()) /* Error in transaction */ + return -1; + + if ((read_write == I2C_SMBUS_WRITE) || (size == VT596_QUICK)) + return 0; + + + switch (size) { + case VT596_BYTE: + /* Where is the result put? I assume here it is in + * SMBHSTDAT0 but it might just as well be in the + * SMBHSTCMD. No clue in the docs + */ + data->byte = inb_p(SMBHSTDAT0); + break; + case VT596_BYTE_DATA: + data->byte = inb_p(SMBHSTDAT0); + break; + case VT596_WORD_DATA: + data->word = inb_p(SMBHSTDAT0) + (inb_p(SMBHSTDAT1) << 8); + break; + case VT596_BLOCK_DATA: + data->block[0] = inb_p(SMBHSTDAT0); + i = inb_p(SMBHSTCNT); /* Reset SMBBLKDAT */ + for (i = 1; i <= data->block[0]; i++) + data->block[i] = inb_p(SMBBLKDAT); + break; + } + return 0; +} + + +u32 vt596_func(struct i2c_adapter *adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_BLOCK_DATA; +} + + + +static struct pci_device_id vt596_ids[] __devinitdata = { + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_82C596_3, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_82C596B_3, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_82C686_4, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8233_0, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA3 + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8233A, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA3, + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8235, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA3 + }, + { + .vendor = PCI_VENDOR_ID_VIA, + .device = PCI_DEVICE_ID_VIA_8231_4, + .subvendor = PCI_ANY_ID, + .subdevice = PCI_ANY_ID, + .driver_data = SMBBA1, + }, + { 0, } +}; + +static int __devinit vt596_probe(struct pci_dev *dev, const struct pci_device_id *id) +{ + int retval; + + retval = vt596_setup(dev, id); + if (retval) + return retval; + + vt596_adapter.dev.parent = &dev->dev; + + snprintf(vt596_adapter.dev.name, DEVICE_NAME_SIZE, + "SMBus Via Pro adapter at %04x", vt596_smba); + + retval = i2c_add_adapter(&vt596_adapter); + + return retval; +} + +static void __devexit vt596_remove(struct pci_dev *dev) +{ + i2c_del_adapter(&vt596_adapter); +} + +static struct pci_driver vt596_driver = { + .name = "vt596 smbus", + .id_table = vt596_ids, + .probe = vt596_probe, + .remove = __devexit_p(vt596_remove), +}; + +static int __init i2c_vt596_init(void) +{ + return pci_module_init(&vt596_driver); +} + + +static void __exit i2c_vt596_exit(void) +{ + pci_unregister_driver(&vt596_driver); + release_region(vt596_smba, 8); +} + + + +MODULE_AUTHOR("Frodo Looijaard and Philip Edelbrock "); +MODULE_DESCRIPTION("vt82c596 SMBus driver"); + +MODULE_LICENSE("GPL"); + +module_init(i2c_vt596_init); +module_exit(i2c_vt596_exit); diff -Nru a/drivers/i2c/chips/Kconfig b/drivers/i2c/chips/Kconfig --- a/drivers/i2c/chips/Kconfig Sat Apr 12 14:44:08 2003 +++ b/drivers/i2c/chips/Kconfig Sat Apr 12 14:44:08 2003 @@ -66,7 +66,8 @@ config I2C_SENSOR tristate - depends on SENSORS_ADM1021 || SENSORS_LM75 || SENSORS_VIA686A || SENSORS_W83781D - default m + default y if SENSORS_ADM1021=y || SENSORS_LM75=y || SENSORS_VIA686A=y || SENSORS_W83781D=y + default m if SENSORS_ADM1021=m || SENSORS_LM75=m || SENSORS_VIA686A=m || SENSORS_W83781D=m + default n endmenu diff -Nru a/drivers/i2c/chips/via686a.c b/drivers/i2c/chips/via686a.c --- a/drivers/i2c/chips/via686a.c Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/chips/via686a.c Sat Apr 12 14:44:06 2003 @@ -87,9 +87,9 @@ static const u8 reghyst[] = { 0x3a, 0x3e, 0x1e }; /* temps numbered 1-3 */ -#define VIA686A_REG_TEMP(nr) (regtemp[(nr) - 1]) -#define VIA686A_REG_TEMP_OVER(nr) (regover[(nr) - 1]) -#define VIA686A_REG_TEMP_HYST(nr) (reghyst[(nr) - 1]) +#define VIA686A_REG_TEMP(nr) (regtemp[nr]) +#define VIA686A_REG_TEMP_OVER(nr) (regover[nr]) +#define VIA686A_REG_TEMP_HYST(nr) (reghyst[nr]) #define VIA686A_REG_TEMP_LOW1 0x4b // bits 7-6 #define VIA686A_REG_TEMP_LOW23 0x49 // 2 = bits 5-4, 3 = bits 7-6 @@ -369,6 +369,8 @@ dynamically allocated, at the same time when a new via686a client is allocated. */ struct via686a_data { + int sysctl_id; + struct semaphore update_lock; char valid; /* !=0 if following fields are valid */ unsigned long last_updated; /* In jiffies */ @@ -391,13 +393,258 @@ static int via686a_detect(struct i2c_adapter *adapter, int address, int kind); static int via686a_detach_client(struct i2c_client *client); -static int via686a_read_value(struct i2c_client *client, u8 register); -static void via686a_write_value(struct i2c_client *client, u8 register, - u8 value); +static inline int via686a_read_value(struct i2c_client *client, u8 reg) +{ + return (inb_p(client->addr + reg)); +} + +static inline void via686a_write_value(struct i2c_client *client, u8 reg, + u8 value) +{ + outb_p(value, client->addr + reg); +} + static void via686a_update_client(struct i2c_client *client); static void via686a_init_client(struct i2c_client *client); -static int via686a_id = 0; +/* following are the sysfs callback functions */ + +/* 7 voltage sensors */ +static ssize_t show_in(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in[nr], nr)*10 ); +} + +static ssize_t show_in_min(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_min[nr], nr)*10 ); +} + +static ssize_t show_in_max(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", IN_FROM_REG(data->in_max[nr], nr)*10 ); +} + +static ssize_t set_in_min(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + unsigned long val = simple_strtoul(buf, NULL, 10)/10; + data->in_min[nr] = IN_TO_REG(val,nr); + via686a_write_value(client, VIA686A_REG_IN_MIN(nr), + data->in_min[nr]); + return count; +} +static ssize_t set_in_max(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + unsigned long val = simple_strtoul(buf, NULL, 10)/10; + data->in_max[nr] = IN_TO_REG(val,nr); + via686a_write_value(client, VIA686A_REG_IN_MAX(nr), + data->in_max[nr]); + return count; +} +#define show_in_offset(offset) \ +static ssize_t \ + show_in##offset (struct device *dev, char *buf) \ +{ \ + return show_in(dev, buf, 0x##offset); \ +} \ +static ssize_t \ + show_in##offset##_min (struct device *dev, char *buf) \ +{ \ + return show_in_min(dev, buf, 0x##offset); \ +} \ +static ssize_t \ + show_in##offset##_max (struct device *dev, char *buf) \ +{ \ + return show_in_max(dev, buf, 0x##offset); \ +} \ +static ssize_t set_in##offset##_min (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_in_min(dev, buf, count, 0x##offset); \ +} \ +static ssize_t set_in##offset##_max (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_in_max(dev, buf, count, 0x##offset); \ +} \ +static DEVICE_ATTR(in_input##offset, S_IRUGO, show_in##offset, NULL) \ +static DEVICE_ATTR(in_min##offset, S_IRUGO | S_IWUSR, \ + show_in##offset##_min, set_in##offset##_min) \ +static DEVICE_ATTR(in_max##offset, S_IRUGO | S_IWUSR, \ + show_in##offset##_max, set_in##offset##_max) + +show_in_offset(0); +show_in_offset(1); +show_in_offset(2); +show_in_offset(3); +show_in_offset(4); + +/* 3 temperatures */ +static ssize_t show_temp(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", TEMP_FROM_REG10(data->temp[nr])*10 ); +} +/* more like overshoot temperature */ +static ssize_t show_temp_max(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_over[nr])*10); +} +/* more like hysteresis temperature */ +static ssize_t show_temp_min(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf, "%ld\n", TEMP_FROM_REG(data->temp_hyst[nr])*10); +} +static ssize_t set_temp_max(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10)/10; + data->temp_over[nr] = TEMP_TO_REG(val); + via686a_write_value(client, VIA686A_REG_TEMP_OVER(nr), data->temp_over[nr]); + return count; +} +static ssize_t set_temp_min(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10)/10; + data->temp_hyst[nr] = TEMP_TO_REG(val); + via686a_write_value(client, VIA686A_REG_TEMP_HYST(nr), data->temp_hyst[nr]); + return count; +} +#define show_temp_offset(offset) \ +static ssize_t show_temp_##offset (struct device *dev, char *buf) \ +{ \ + return show_temp(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t \ +show_temp_##offset##_max (struct device *dev, char *buf) \ +{ \ + return show_temp_max(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t \ +show_temp_##offset##_min (struct device *dev, char *buf) \ +{ \ + return show_temp_min(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t set_temp_##offset##_max (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_temp_max(dev, buf, count, 0x##offset - 1); \ +} \ +static ssize_t set_temp_##offset##_min (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_temp_min(dev, buf, count, 0x##offset - 1); \ +} \ +static DEVICE_ATTR(temp_input##offset, S_IRUGO, show_temp_##offset, NULL) \ +static DEVICE_ATTR(temp_max##offset, S_IRUGO | S_IWUSR, \ + show_temp_##offset##_max, set_temp_##offset##_max) \ +static DEVICE_ATTR(temp_min##offset, S_IRUGO | S_IWUSR, \ + show_temp_##offset##_min, set_temp_##offset##_min) + +show_temp_offset(1); +show_temp_offset(2); +show_temp_offset(3); + +/* 2 Fans */ +static ssize_t show_fan(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", FAN_FROM_REG(data->fan[nr], + DIV_FROM_REG(data->fan_div[nr])) ); +} +static ssize_t show_fan_min(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", + FAN_FROM_REG(data->fan_min[nr], DIV_FROM_REG(data->fan_div[nr])) ); +} +static ssize_t show_fan_div(struct device *dev, char *buf, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", DIV_FROM_REG(data->fan_div[nr]) ); +} +static ssize_t set_fan_min(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10); + data->fan_min[nr] = FAN_TO_REG(val, DIV_FROM_REG(data->fan_div[nr])); + via686a_write_value(client, VIA686A_REG_FAN_MIN(nr+1), data->fan_min[nr]); + return count; +} +static ssize_t set_fan_div(struct device *dev, const char *buf, + size_t count, int nr) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + int val = simple_strtol(buf, NULL, 10); + int old = via686a_read_value(client, VIA686A_REG_FANDIV); + data->fan_div[nr] = DIV_TO_REG(val); + old = (old & 0x0f) | (data->fan_div[1] << 6) | (data->fan_div[0] << 4); + via686a_write_value(client, VIA686A_REG_FANDIV, old); + return count; +} + +#define show_fan_offset(offset) \ +static ssize_t show_fan_##offset (struct device *dev, char *buf) \ +{ \ + return show_fan(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t show_fan_##offset##_min (struct device *dev, char *buf) \ +{ \ + return show_fan_min(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t show_fan_##offset##_div (struct device *dev, char *buf) \ +{ \ + return show_fan_div(dev, buf, 0x##offset - 1); \ +} \ +static ssize_t set_fan_##offset##_min (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_fan_min(dev, buf, count, 0x##offset - 1); \ +} \ +static ssize_t set_fan_##offset##_div (struct device *dev, \ + const char *buf, size_t count) \ +{ \ + return set_fan_div(dev, buf, count, 0x##offset - 1); \ +} \ +static DEVICE_ATTR(fan_input##offset, S_IRUGO, show_fan_##offset, NULL) \ +static DEVICE_ATTR(fan_min##offset, S_IRUGO | S_IWUSR, \ + show_fan_##offset##_min, set_fan_##offset##_min) \ +static DEVICE_ATTR(fan_div##offset, S_IRUGO | S_IWUSR, \ + show_fan_##offset##_div, set_fan_##offset##_div) + +show_fan_offset(1); +show_fan_offset(2); + +/* Alarm */ +static ssize_t show_alarm(struct device *dev, char *buf) { + struct i2c_client *client = to_i2c_client(dev); + struct via686a_data *data = i2c_get_clientdata(client); + via686a_update_client(client); + return sprintf(buf,"%d\n", ALARMS_FROM_REG(data->alarms)); +} +static DEVICE_ATTR(alarm, S_IRUGO | S_IWUSR, show_alarm, NULL); /* The driver. I choose to use type i2c_driver, as at is identical to both smbus_driver and isa_driver, and clients could be of either kind */ @@ -411,83 +658,6 @@ }; - -/* The /proc/sys entries */ - -/* -- SENSORS SYSCTL START -- */ -#define VIA686A_SYSCTL_IN0 1000 -#define VIA686A_SYSCTL_IN1 1001 -#define VIA686A_SYSCTL_IN2 1002 -#define VIA686A_SYSCTL_IN3 1003 -#define VIA686A_SYSCTL_IN4 1004 -#define VIA686A_SYSCTL_FAN1 1101 -#define VIA686A_SYSCTL_FAN2 1102 -#define VIA686A_SYSCTL_TEMP 1200 -#define VIA686A_SYSCTL_TEMP2 1201 -#define VIA686A_SYSCTL_TEMP3 1202 -#define VIA686A_SYSCTL_FAN_DIV 2000 -#define VIA686A_SYSCTL_ALARMS 2001 - -#define VIA686A_ALARM_IN0 0x01 -#define VIA686A_ALARM_IN1 0x02 -#define VIA686A_ALARM_IN2 0x04 -#define VIA686A_ALARM_IN3 0x08 -#define VIA686A_ALARM_TEMP 0x10 -#define VIA686A_ALARM_FAN1 0x40 -#define VIA686A_ALARM_FAN2 0x80 -#define VIA686A_ALARM_IN4 0x100 -#define VIA686A_ALARM_TEMP2 0x800 -#define VIA686A_ALARM_CHAS 0x1000 -#define VIA686A_ALARM_TEMP3 0x8000 - -/* -- SENSORS SYSCTL END -- */ - -#if 0 -/* These files are created for each detected VIA686A. This is just a template; - though at first sight, you might think we could use a statically - allocated list, we need some way to get back to the parent - which - is done through one of the 'extra' fields which are initialized - when a new copy is allocated. */ -static ctl_table via686a_dir_table_template[] = { - {VIA686A_SYSCTL_IN0, "in0", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN1, "in1", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN2, "in2", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN3, "in3", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_IN4, "in4", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_in}, - {VIA686A_SYSCTL_FAN1, "fan1", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_fan}, - {VIA686A_SYSCTL_FAN2, "fan2", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_fan}, - {VIA686A_SYSCTL_TEMP, "temp1", NULL, 0, 0644, NULL, &i2c_proc_real, - &i2c_sysctl_real, NULL, &via686a_temp}, - {VIA686A_SYSCTL_TEMP2, "temp2", NULL, 0, 0644, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_temp}, - {VIA686A_SYSCTL_TEMP3, "temp3", NULL, 0, 0644, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_temp}, - {VIA686A_SYSCTL_FAN_DIV, "fan_div", NULL, 0, 0644, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_fan_div}, - {VIA686A_SYSCTL_ALARMS, "alarms", NULL, 0, 0444, NULL, - &i2c_proc_real, &i2c_sysctl_real, NULL, &via686a_alarms}, - {0} -}; -#endif - -static inline int via686a_read_value(struct i2c_client *client, u8 reg) -{ - return (inb_p(client->addr + reg)); -} - -static inline void via686a_write_value(struct i2c_client *client, u8 reg, - u8 value) -{ - outb_p(value, client->addr + reg); -} - /* This is called when the module is loaded */ static int via686a_attach_adapter(struct i2c_adapter *adapter) { @@ -499,7 +669,7 @@ struct i2c_client *new_client; struct via686a_data *data; int err = 0; - const char *name = "via686a"; + const char client_name[] = "via686a chip"; u16 val; /* Make sure we are probing the ISA bus!! */ @@ -552,16 +722,49 @@ new_client->adapter = adapter; new_client->driver = &via686a_driver; new_client->flags = 0; + new_client->dev.parent = &adapter->dev; /* Fill in the remaining client fields and put into the global list */ - snprintf(new_client->dev.name, DEVICE_NAME_SIZE, name); + snprintf(new_client->dev.name, DEVICE_NAME_SIZE, client_name); - new_client->id = via686a_id++; data->valid = 0; init_MUTEX(&data->update_lock); /* Tell the I2C layer a new client has arrived */ if ((err = i2c_attach_client(new_client))) goto ERROR3; + + /* register sysfs hooks */ + device_create_file(&new_client->dev, &dev_attr_in_input0); + device_create_file(&new_client->dev, &dev_attr_in_input1); + device_create_file(&new_client->dev, &dev_attr_in_input2); + device_create_file(&new_client->dev, &dev_attr_in_input3); + device_create_file(&new_client->dev, &dev_attr_in_input4); + device_create_file(&new_client->dev, &dev_attr_in_min0); + device_create_file(&new_client->dev, &dev_attr_in_min1); + device_create_file(&new_client->dev, &dev_attr_in_min2); + device_create_file(&new_client->dev, &dev_attr_in_min3); + device_create_file(&new_client->dev, &dev_attr_in_min4); + device_create_file(&new_client->dev, &dev_attr_in_max0); + device_create_file(&new_client->dev, &dev_attr_in_max1); + device_create_file(&new_client->dev, &dev_attr_in_max2); + device_create_file(&new_client->dev, &dev_attr_in_max3); + device_create_file(&new_client->dev, &dev_attr_in_max4); + device_create_file(&new_client->dev, &dev_attr_temp_input1); + device_create_file(&new_client->dev, &dev_attr_temp_input2); + device_create_file(&new_client->dev, &dev_attr_temp_input3); + device_create_file(&new_client->dev, &dev_attr_temp_max1); + device_create_file(&new_client->dev, &dev_attr_temp_max2); + device_create_file(&new_client->dev, &dev_attr_temp_max3); + device_create_file(&new_client->dev, &dev_attr_temp_min1); + device_create_file(&new_client->dev, &dev_attr_temp_min2); + device_create_file(&new_client->dev, &dev_attr_temp_min3); + device_create_file(&new_client->dev, &dev_attr_fan_input1); + device_create_file(&new_client->dev, &dev_attr_fan_input2); + device_create_file(&new_client->dev, &dev_attr_fan_min1); + device_create_file(&new_client->dev, &dev_attr_fan_min2); + device_create_file(&new_client->dev, &dev_attr_fan_div1); + device_create_file(&new_client->dev, &dev_attr_fan_div2); + device_create_file(&new_client->dev, &dev_attr_alarm); /* Initialize the VIA686A chip */ via686a_init_client(new_client); @@ -629,7 +832,7 @@ FAN_TO_REG(VIA686A_INIT_FAN_MIN, 2)); via686a_write_value(client, VIA686A_REG_FAN_MIN(2), FAN_TO_REG(VIA686A_INIT_FAN_MIN, 2)); - for (i = 1; i <= 3; i++) { + for (i = 0; i <= 2; i++) { via686a_write_value(client, VIA686A_REG_TEMP_OVER(i), TEMP_TO_REG(VIA686A_INIT_TEMP_OVER)); via686a_write_value(client, VIA686A_REG_TEMP_HYST(i), @@ -670,13 +873,13 @@ data->fan_min[i - 1] = via686a_read_value(client, VIA686A_REG_FAN_MIN(i)); } - for (i = 1; i <= 3; i++) { - data->temp[i - 1] = via686a_read_value(client, + for (i = 0; i <= 2; i++) { + data->temp[i] = via686a_read_value(client, VIA686A_REG_TEMP(i)) << 2; - data->temp_over[i - 1] = + data->temp_over[i] = via686a_read_value(client, VIA686A_REG_TEMP_OVER(i)); - data->temp_hyst[i - 1] = + data->temp_hyst[i] = via686a_read_value(client, VIA686A_REG_TEMP_HYST(i)); } @@ -709,164 +912,12 @@ up(&data->update_lock); } - -/* The next few functions are the call-back functions of the /proc/sys and - sysctl files. Which function is used is defined in the ctl_table in - the extra1 field. - Each function must return the magnitude (power of 10 to divide the date - with) if it is called with operation==SENSORS_PROC_REAL_INFO. It must - put a maximum of *nrels elements in results reflecting the data of this - file, and set *nrels to the number it actually put in it, if operation== - SENSORS_PROC_REAL_READ. Finally, it must get upto *nrels elements from - results and write them to the chip, if operations==SENSORS_PROC_REAL_WRITE. - Note that on SENSORS_PROC_REAL_READ, I do not check whether results is - large enough (by checking the incoming value of *nrels). This is not very - good practice, but as long as you put less than about 5 values in results, - you can assume it is large enough. */ -/* FIXME, remove these functions, they are here to verify the sysfs conversion - * is correct, or not */ -__attribute__((unused)) -static void via686a_in(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int nr = ctl_name - VIA686A_SYSCTL_IN0; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 2; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = IN_FROM_REG(data->in_min[nr], nr); - results[1] = IN_FROM_REG(data->in_max[nr], nr); - results[2] = IN_FROM_REG(data->in[nr], nr); - *nrels_mag = 3; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - if (*nrels_mag >= 1) { - data->in_min[nr] = IN_TO_REG(results[0], nr); - via686a_write_value(client, VIA686A_REG_IN_MIN(nr), - data->in_min[nr]); - } - if (*nrels_mag >= 2) { - data->in_max[nr] = IN_TO_REG(results[1], nr); - via686a_write_value(client, VIA686A_REG_IN_MAX(nr), - data->in_max[nr]); - } - } -} - -__attribute__((unused)) -static void via686a_fan(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int nr = ctl_name - VIA686A_SYSCTL_FAN1 + 1; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 0; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = FAN_FROM_REG(data->fan_min[nr - 1], - DIV_FROM_REG(data->fan_div - [nr - 1])); - results[1] = FAN_FROM_REG(data->fan[nr - 1], - DIV_FROM_REG(data->fan_div[nr - 1])); - *nrels_mag = 2; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - if (*nrels_mag >= 1) { - data->fan_min[nr - 1] = FAN_TO_REG(results[0], - DIV_FROM_REG(data-> - fan_div[nr -1])); - via686a_write_value(client, - VIA686A_REG_FAN_MIN(nr), - data->fan_min[nr - 1]); - } - } -} - -__attribute__((unused)) -static void via686a_temp(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int nr = ctl_name - VIA686A_SYSCTL_TEMP; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 1; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = TEMP_FROM_REG(data->temp_over[nr]); - results[1] = TEMP_FROM_REG(data->temp_hyst[nr]); - results[2] = TEMP_FROM_REG10(data->temp[nr]); - *nrels_mag = 3; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - if (*nrels_mag >= 1) { - data->temp_over[nr] = TEMP_TO_REG(results[0]); - via686a_write_value(client, - VIA686A_REG_TEMP_OVER(nr + 1), - data->temp_over[nr]); - } - if (*nrels_mag >= 2) { - data->temp_hyst[nr] = TEMP_TO_REG(results[1]); - via686a_write_value(client, - VIA686A_REG_TEMP_HYST(nr + 1), - data->temp_hyst[nr]); - } - } -} - -__attribute__((unused)) -static void via686a_alarms(struct i2c_client *client, int operation, int ctl_name, - int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 0; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = ALARMS_FROM_REG(data->alarms); - *nrels_mag = 1; - } -} - -__attribute__((unused)) -static void via686a_fan_div(struct i2c_client *client, int operation, - int ctl_name, int *nrels_mag, long *results) -{ - struct via686a_data *data = i2c_get_clientdata(client); - int old; - - if (operation == SENSORS_PROC_REAL_INFO) - *nrels_mag = 0; - else if (operation == SENSORS_PROC_REAL_READ) { - via686a_update_client(client); - results[0] = DIV_FROM_REG(data->fan_div[0]); - results[1] = DIV_FROM_REG(data->fan_div[1]); - *nrels_mag = 2; - } else if (operation == SENSORS_PROC_REAL_WRITE) { - old = via686a_read_value(client, VIA686A_REG_FANDIV); - if (*nrels_mag >= 2) { - data->fan_div[1] = DIV_TO_REG(results[1]); - old = (old & 0x3f) | (data->fan_div[1] << 6); - } - if (*nrels_mag >= 1) { - data->fan_div[0] = DIV_TO_REG(results[0]); - old = (old & 0xcf) | (data->fan_div[0] << 4); - via686a_write_value(client, VIA686A_REG_FANDIV, - old); - } - } -} - - static struct pci_device_id via686a_pci_ids[] __devinitdata = { { .vendor = PCI_VENDOR_ID_VIA, .device = PCI_DEVICE_ID_VIA_82C686_4, .subvendor = PCI_ANY_ID, .subdevice = PCI_ANY_ID, - .class = 0, - .class_mask = 0, - .driver_data = 0, }, { 0, } }; diff -Nru a/drivers/i2c/chips/w83781d.c b/drivers/i2c/chips/w83781d.c --- a/drivers/i2c/chips/w83781d.c Sat Apr 12 14:44:05 2003 +++ b/drivers/i2c/chips/w83781d.c Sat Apr 12 14:44:05 2003 @@ -364,7 +364,7 @@ \ w83781d_update_client(client); \ \ - return sprintf(buf,"%ld\n", (long)IN_FROM_REG(data->reg[nr])); \ + return sprintf(buf,"%ld\n", (long)IN_FROM_REG(data->reg[nr] * 10)); \ } show_in_reg(in); show_in_reg(in_min); @@ -378,7 +378,7 @@ u32 val; \ \ val = simple_strtoul(buf, NULL, 10); \ - data->in_##reg[nr] = IN_TO_REG(val); \ + data->in_##reg[nr] = (IN_TO_REG(val) / 10); \ w83781d_write_value(client, W83781D_REG_IN_##REG(nr), data->in_##reg[nr]); \ \ return count; \ @@ -712,7 +712,7 @@ { struct i2c_client *client = to_i2c_client(dev); struct w83781d_data *data = i2c_get_clientdata(client); - u32 val, old, old2, old3; + u32 val, old, old2, old3 = 0; val = simple_strtoul(buf, NULL, 10); old = w83781d_read_value(client, W83781D_REG_VID_FANDIV); diff -Nru a/drivers/i2c/i2c-adap-ite.c b/drivers/i2c/i2c-adap-ite.c --- a/drivers/i2c/i2c-adap-ite.c Sat Apr 12 14:44:06 2003 +++ b/drivers/i2c/i2c-adap-ite.c Sat Apr 12 14:44:06 2003 @@ -196,9 +196,11 @@ static struct i2c_adapter iic_ite_ops = { .owner = THIS_MODULE, - .name = "ITE IIC adapter", .id = I2C_HW_I_IIC, .algo_data = &iic_ite_data, + .dev = { + .name = "ITE IIC adapter", + }, }; /* Called when the module is loaded. This function starts the diff -Nru a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c --- a/drivers/i2c/i2c-dev.c Sat Apr 12 14:44:09 2003 +++ b/drivers/i2c/i2c-dev.c Sat Apr 12 14:44:09 2003 @@ -77,7 +77,7 @@ static struct i2c_driver i2cdev_driver = { .owner = THIS_MODULE, - .name = "i2c-dev dummy driver", + .name = "dev driver", .id = I2C_DRIVERID_I2CDEV, .flags = I2C_DF_DUMMY, .attach_adapter = i2cdev_attach_adapter, @@ -100,10 +100,6 @@ char *tmp; int ret; -#ifdef DEBUG - struct inode *inode = file->f_dentry->d_inode; -#endif /* DEBUG */ - struct i2c_client *client = (struct i2c_client *)file->private_data; if (count > 8192) @@ -114,10 +110,8 @@ if (tmp==NULL) return -ENOMEM; -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: i2c-%d reading %d bytes.\n",minor(inode->i_rdev), - count); -#endif + pr_debug("i2c-dev.o: i2c-%d reading %d bytes.\n", + minor(file->f_dentry->d_inode->i_rdev), count); ret = i2c_master_recv(client,tmp,count); if (ret >= 0) @@ -133,10 +127,6 @@ char *tmp; struct i2c_client *client = (struct i2c_client *)file->private_data; -#ifdef DEBUG - struct inode *inode = file->f_dentry->d_inode; -#endif /* DEBUG */ - if (count > 8192) count = 8192; @@ -149,10 +139,9 @@ return -EFAULT; } -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: i2c-%d writing %d bytes.\n",minor(inode->i_rdev), - count); -#endif + pr_debug("i2c-dev.o: i2c-%d writing %d bytes.\n", + minor(file->f_dentry->d_inode->i_rdev), count); + ret = i2c_master_send(client,tmp,count); kfree(tmp); return ret; @@ -169,10 +158,8 @@ int i,datasize,res; unsigned long funcs; -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: i2c-%d ioctl, cmd: 0x%x, arg: %lx.\n", - minor(inode->i_rdev),cmd, arg); -#endif /* DEBUG */ + pr_debug("i2c-dev.o: i2c-%d ioctl, cmd: 0x%x, arg: %lx.\n", + minor(inode->i_rdev),cmd, arg); switch ( cmd ) { case I2C_SLAVE: @@ -207,6 +194,11 @@ sizeof(rdwr_arg))) return -EFAULT; + /* Put an arbritrary limit on the number of messages that can + * be sent at once */ + if (rdwr_arg.nmsgs > 42) + return -EINVAL; + rdwr_pa = (struct i2c_msg *) kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg), GFP_KERNEL); @@ -214,38 +206,43 @@ if (rdwr_pa == NULL) return -ENOMEM; res = 0; - for( i=0; i 8192) { + res = -EINVAL; + break; + } rdwr_pa[i].buf = kmalloc(rdwr_pa[i].len, GFP_KERNEL); - if(rdwr_pa[i].buf == NULL) - { + if(rdwr_pa[i].buf == NULL) { res = -ENOMEM; break; } if(copy_from_user(rdwr_pa[i].buf, rdwr_arg.msgs[i].buf, - rdwr_pa[i].len)) - { - kfree(rdwr_pa[i].buf); + rdwr_pa[i].len)) { res = -EFAULT; break; } } - if (!res) - { + if (res < 0) { + int j; + for (j = 0; j < i; ++j) + kfree(rdwr_pa[j].buf); + kfree(rdwr_pa); + return res; + } + if (!res) { res = i2c_transfer(client->adapter, rdwr_pa, rdwr_arg.nmsgs); } - while(i-- > 0) - { + while(i-- > 0) { if( res>=0 && (rdwr_pa[i].flags & I2C_M_RD)) { if(copy_to_user( @@ -274,20 +271,18 @@ (data_arg.size != I2C_SMBUS_BLOCK_DATA) && (data_arg.size != I2C_SMBUS_I2C_BLOCK_DATA) && (data_arg.size != I2C_SMBUS_BLOCK_PROC_CALL)) { -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: size out of range (%x) in ioctl I2C_SMBUS.\n", - data_arg.size); -#endif + dev_dbg(&client->dev, + "size out of range (%x) in ioctl I2C_SMBUS.\n", + data_arg.size); return -EINVAL; } /* Note that I2C_SMBUS_READ and I2C_SMBUS_WRITE are 0 and 1, so the check is valid if size==I2C_SMBUS_QUICK too. */ if ((data_arg.read_write != I2C_SMBUS_READ) && (data_arg.read_write != I2C_SMBUS_WRITE)) { -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: read_write out of range (%x) in ioctl I2C_SMBUS.\n", - data_arg.read_write); -#endif + dev_dbg(&client->dev, + "read_write out of range (%x) in ioctl I2C_SMBUS.\n", + data_arg.read_write); return -EINVAL; } @@ -298,15 +293,14 @@ (data_arg.read_write == I2C_SMBUS_WRITE))) /* These are special: we do not use data */ return i2c_smbus_xfer(client->adapter, client->addr, - client->flags, - data_arg.read_write, - data_arg.command, - data_arg.size, NULL); + client->flags, + data_arg.read_write, + data_arg.command, + data_arg.size, NULL); if (data_arg.data == NULL) { -#ifdef DEBUG - printk(KERN_DEBUG "i2c-dev.o: data is NULL pointer in ioctl I2C_SMBUS.\n"); -#endif + dev_dbg(&client->dev, + "data is NULL pointer in ioctl I2C_SMBUS.\n"); return -EINVAL; } @@ -365,7 +359,7 @@ return 0; - out_kfree: +out_kfree: kfree(client); return -ENODEV; } @@ -428,7 +422,8 @@ { int res; - printk(KERN_INFO "i2c-dev.o: i2c /dev entries driver module version %s (%s)\n", I2C_VERSION, I2C_DATE); + printk(KERN_INFO "i2c /dev entries driver module version %s (%s)\n", + I2C_VERSION, I2C_DATE); if (register_chrdev(I2C_MAJOR,"i2c",&i2cdev_fops)) { printk(KERN_ERR "i2c-dev.o: unable to get major %d for i2c bus\n", diff -Nru a/drivers/i2c/i2c-frodo.c b/drivers/i2c/i2c-frodo.c --- a/drivers/i2c/i2c-frodo.c Sat Apr 12 14:44:05 2003 +++ b/drivers/i2c/i2c-frodo.c Sat Apr 12 14:44:05 2003 @@ -59,9 +59,11 @@ static struct i2c_adapter frodo_ops = { .owner = THIS_MODULE, - .name = "Frodo adapter driver", .id = I2C_HW_B_FRODO, .algo_data = &bit_frodo_data, + .dev = { + .name = "Frodo adapter driver", + }, }; static int __init i2c_frodo_init (void) diff -Nru a/drivers/i2c/i2c-keywest.c b/drivers/i2c/i2c-keywest.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/i2c-keywest.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,666 @@ +/* + i2c Support for Apple Keywest I2C Bus Controller + + Copyright (c) 2001 Benjamin Herrenschmidt + + Original work by + + Copyright (c) 2000 Philip Edelbrock + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + + Changes: + + 2001/12/13 BenH New implementation + 2001/12/15 BenH Add support for "byte" and "quick" + transfers. Add i2c_xfer routine. + + My understanding of the various modes supported by keywest are: + + - Dumb mode : not implemented, probably direct tweaking of lines + - Standard mode : simple i2c transaction of type + S Addr R/W A Data A Data ... T + - Standard sub mode : combined 8 bit subaddr write with data read + S Addr R/W A SubAddr A Data A Data ... T + - Combined mode : Subaddress and Data sequences appended with no stop + S Addr R/W A SubAddr S Addr R/W A Data A Data ... T + + Currently, this driver uses only Standard mode for i2c xfer, and + smbus byte & quick transfers ; and uses StandardSub mode for + other smbus transfers instead of combined as we need that for the + sound driver to be happy +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include + +#include "i2c-keywest.h" + +#undef POLLED_MODE + +#define DBG(x...) do {\ + if (debug > 0) \ + printk(KERN_DEBUG "KW:" x); \ + } while(0) + + +MODULE_AUTHOR("Benjamin Herrenschmidt "); +MODULE_DESCRIPTION("I2C driver for Apple's Keywest"); +MODULE_LICENSE("GPL"); +MODULE_PARM(probe, "i"); +MODULE_PARM(debug, "i"); + +int probe = 0; +int debug = 0; + +static struct keywest_iface *ifaces = NULL; + +#ifdef POLLED_MODE +/* This isn't fast, but will go once I implement interrupt with + * proper timeout + */ +static u8 +wait_interrupt(struct keywest_iface* iface) +{ + int i; + u8 isr; + + for (i = 0; i < POLL_TIMEOUT; i++) { + isr = read_reg(reg_isr) & KW_I2C_IRQ_MASK; + if (isr != 0) + return isr; + current->state = TASK_UNINTERRUPTIBLE; + schedule_timeout(1); + } + return isr; +} +#endif /* POLLED_MODE */ + + +static void +do_stop(struct keywest_iface* iface, int result) +{ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_STOP); + iface->state = state_stop; + iface->result = result; +} + +/* Main state machine for standard & standard sub mode */ +static void +handle_interrupt(struct keywest_iface *iface, u8 isr) +{ + int ack; + + DBG("handle_interrupt(), got: %x, status: %x, state: %d\n", + isr, read_reg(reg_status), iface->state); + if (isr == 0 && iface->state != state_stop) { + do_stop(iface, -1); + return; + } + if (isr & KW_I2C_IRQ_STOP && iface->state != state_stop) { + iface->result = -1; + iface->state = state_stop; + } + switch(iface->state) { + case state_addr: + if (!(isr & KW_I2C_IRQ_ADDR)) { + do_stop(iface, -1); + break; + } + ack = read_reg(reg_status); + DBG("ack on set address: %x\n", ack); + if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { + do_stop(iface, -1); + break; + } + /* Handle rw "quick" mode */ + if (iface->datalen == 0) + do_stop(iface, 0); + else if (iface->read_write == I2C_SMBUS_READ) { + iface->state = state_read; + if (iface->datalen > 1) + write_reg(reg_control, read_reg(reg_control) + | KW_I2C_CTL_AAK); + } else { + iface->state = state_write; + DBG("write byte: %x\n", *(iface->data)); + write_reg(reg_data, *(iface->data++)); + iface->datalen--; + } + + break; + case state_read: + if (!(isr & KW_I2C_IRQ_DATA)) { + do_stop(iface, -1); + break; + } + *(iface->data++) = read_reg(reg_data); + DBG("read byte: %x\n", *(iface->data-1)); + iface->datalen--; + if (iface->datalen == 0) + iface->state = state_stop; + else + write_reg(reg_control, 0); + break; + case state_write: + if (!(isr & KW_I2C_IRQ_DATA)) { + do_stop(iface, -1); + break; + } + /* Check ack status */ + ack = read_reg(reg_status); + DBG("ack on data write: %x\n", ack); + if ((ack & KW_I2C_STAT_LAST_AAK) == 0) { + do_stop(iface, -1); + break; + } + if (iface->datalen) { + DBG("write byte: %x\n", *(iface->data)); + write_reg(reg_data, *(iface->data++)); + iface->datalen--; + } else + do_stop(iface, 0); + break; + + case state_stop: + if (!(isr & KW_I2C_IRQ_STOP) && (++iface->stopretry) < 10) + do_stop(iface, -1); + else { + iface->state = state_idle; + write_reg(reg_control, 0x00); + write_reg(reg_ier, 0x00); +#ifndef POLLED_MODE + complete(&iface->complete); +#endif /* POLLED_MODE */ + } + break; + } + + write_reg(reg_isr, isr); +} + +#ifndef POLLED_MODE + +/* Interrupt handler */ +static void +keywest_irq(int irq, void *dev_id, struct pt_regs *regs) +{ + struct keywest_iface *iface = (struct keywest_iface *)dev_id; + + spin_lock(&iface->lock); + del_timer(&iface->timeout_timer); + handle_interrupt(iface, read_reg(reg_isr)); + if (iface->state != state_idle) { + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + } + spin_unlock(&iface->lock); +} + +static void +keywest_timeout(unsigned long data) +{ + struct keywest_iface *iface = (struct keywest_iface *)data; + + DBG("timeout !\n"); + spin_lock_irq(&iface->lock); + handle_interrupt(iface, read_reg(reg_isr)); + if (iface->state != state_idle) { + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + } + spin_unlock(&iface->lock); +} + +#endif /* POLLED_MODE */ + +/* + * SMBUS-type transfer entrypoint + */ +static s32 +keywest_smbus_xfer( struct i2c_adapter* adap, + u16 addr, + unsigned short flags, + char read_write, + u8 command, + int size, + union i2c_smbus_data* data) +{ + struct keywest_chan* chan = i2c_get_adapdata(adap); + struct keywest_iface* iface = chan->iface; + int len; + u8* buffer; + u16 cur_word; + int rc = 0; + + if (iface->state == state_dead) + return -1; + + /* Prepare datas & select mode */ + iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; + switch (size) { + case I2C_SMBUS_QUICK: + len = 0; + buffer = NULL; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + break; + case I2C_SMBUS_BYTE: + len = 1; + buffer = &data->byte; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + break; + case I2C_SMBUS_BYTE_DATA: + len = 1; + buffer = &data->byte; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + case I2C_SMBUS_WORD_DATA: + len = 2; + cur_word = cpu_to_le16(data->word); + buffer = (u8 *)&cur_word; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + case I2C_SMBUS_BLOCK_DATA: + len = data->block[0]; + buffer = &data->block[1]; + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + break; + default: + return -1; + } + + /* Original driver had this limitation */ + if (len > 32) + len = 32; + + down(&iface->sem); + + DBG("chan: %d, addr: 0x%x, transfer len: %d, read: %d\n", + chan->chan_no, addr, len, read_write == I2C_SMBUS_READ); + + iface->data = buffer; + iface->datalen = len; + iface->state = state_addr; + iface->result = 0; + iface->stopretry = 0; + iface->read_write = read_write; + + /* Setup channel & clear pending irqs */ + write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); + write_reg(reg_isr, read_reg(reg_isr)); + write_reg(reg_status, 0); + + /* Set up address and r/w bit */ + write_reg(reg_addr, + (addr << 1) | ((read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); + + /* Set up the sub address */ + if ((iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_STANDARDSUB + || (iface->cur_mode & KW_I2C_MODE_MODE_MASK) == KW_I2C_MODE_COMBINED) + write_reg(reg_subaddr, command); + + /* Arm timeout */ + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + + /* Start sending address & enable interrupt*/ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); + write_reg(reg_ier, KW_I2C_IRQ_MASK); + +#ifdef POLLED_MODE + DBG("using polled mode...\n"); + /* State machine, to turn into an interrupt handler */ + while(iface->state != state_idle) { + u8 isr = wait_interrupt(iface); + handle_interrupt(iface, isr); + } +#else /* POLLED_MODE */ + DBG("using interrupt mode...\n"); + wait_for_completion(&iface->complete); +#endif /* POLLED_MODE */ + + rc = iface->result; + DBG("transfer done, result: %d\n", rc); + + if (rc == 0 && size == I2C_SMBUS_WORD_DATA && read_write == I2C_SMBUS_READ) + data->word = le16_to_cpu(cur_word); + + /* Release sem */ + up(&iface->sem); + + return rc; +} + +/* + * Generic i2c master transfer entrypoint + */ +static int +keywest_xfer( struct i2c_adapter *adap, + struct i2c_msg msgs[], + int num) +{ + struct keywest_chan* chan = i2c_get_adapdata(adap); + struct keywest_iface* iface = chan->iface; + struct i2c_msg *pmsg; + int i, completed; + int rc = 0; + + down(&iface->sem); + + /* Set adapter to standard mode */ + iface->cur_mode &= ~KW_I2C_MODE_MODE_MASK; + iface->cur_mode |= KW_I2C_MODE_STANDARD; + + completed = 0; + for (i = 0; rc >= 0 && i < num;) { + u8 addr; + + pmsg = &msgs[i++]; + addr = pmsg->addr; + if (pmsg->flags & I2C_M_TEN) { + printk(KERN_ERR "i2c-keywest: 10 bits addr not supported !\n"); + rc = -EINVAL; + break; + } + DBG("xfer: chan: %d, doing %s %d bytes to 0x%02x - %d of %d messages\n", + chan->chan_no, + pmsg->flags & I2C_M_RD ? "read" : "write", + pmsg->len, addr, i, num); + + /* Setup channel & clear pending irqs */ + write_reg(reg_mode, iface->cur_mode | (chan->chan_no << 4)); + write_reg(reg_isr, read_reg(reg_isr)); + write_reg(reg_status, 0); + + iface->data = pmsg->buf; + iface->datalen = pmsg->len; + iface->state = state_addr; + iface->result = 0; + iface->stopretry = 0; + if (pmsg->flags & I2C_M_RD) + iface->read_write = I2C_SMBUS_READ; + else + iface->read_write = I2C_SMBUS_WRITE; + + /* Set up address and r/w bit */ + if (pmsg->flags & I2C_M_REV_DIR_ADDR) + addr ^= 1; + write_reg(reg_addr, + (addr << 1) | + ((iface->read_write == I2C_SMBUS_READ) ? 0x01 : 0x00)); + + /* Arm timeout */ + iface->timeout_timer.expires = jiffies + POLL_TIMEOUT; + add_timer(&iface->timeout_timer); + + /* Start sending address & enable interrupt*/ + write_reg(reg_control, read_reg(reg_control) | KW_I2C_CTL_XADDR); + write_reg(reg_ier, KW_I2C_IRQ_MASK); + +#ifdef POLLED_MODE + DBG("using polled mode...\n"); + /* State machine, to turn into an interrupt handler */ + while(iface->state != state_idle) { + u8 isr = wait_interrupt(iface); + handle_interrupt(iface, isr); + } +#else /* POLLED_MODE */ + DBG("using interrupt mode...\n"); + wait_for_completion(&iface->complete); +#endif /* POLLED_MODE */ + + rc = iface->result; + if (rc == 0) + completed++; + DBG("transfer done, result: %d\n", rc); + } + + /* Release sem */ + up(&iface->sem); + + return completed; +} + +static u32 +keywest_func(struct i2c_adapter * adapter) +{ + return I2C_FUNC_SMBUS_QUICK | I2C_FUNC_SMBUS_BYTE | + I2C_FUNC_SMBUS_BYTE_DATA | I2C_FUNC_SMBUS_WORD_DATA | + I2C_FUNC_SMBUS_BLOCK_DATA; +} + +/* For now, we only handle combined mode (smbus) */ +static struct i2c_algorithm keywest_algorithm = { + name: "Keywest i2c", + id: I2C_ALGO_SMBUS, + smbus_xfer: keywest_smbus_xfer, + master_xfer: keywest_xfer, + functionality: keywest_func, +}; + + +static int +create_iface(struct device_node* np) +{ + unsigned long steps, *psteps, *prate; + unsigned bsteps, tsize, i, nchan, addroffset; + struct keywest_iface* iface; + int rc; + + psteps = (unsigned long *)get_property(np, "AAPL,address-step", NULL); + steps = psteps ? (*psteps) : 0x10; + + /* Hrm... maybe we can be smarter here */ + for (bsteps = 0; (steps & 0x01) == 0; bsteps++) + steps >>= 1; + + if (!strcmp(np->parent->name, "uni-n")) { + nchan = 2; + addroffset = 3; + } else { + addroffset = 0; + nchan = 1; + } + + tsize = sizeof(struct keywest_iface) + + (sizeof(struct keywest_chan) + 4) * nchan; + iface = (struct keywest_iface *) kmalloc(tsize, GFP_KERNEL); + if (iface == NULL) { + printk(KERN_ERR "i2c-keywest: can't allocate inteface !\n"); + return -ENOMEM; + } + memset(iface, 0, tsize); + init_MUTEX(&iface->sem); + spin_lock_init(&iface->lock); + init_completion(&iface->complete); + iface->bsteps = bsteps; + iface->chan_count = nchan; + iface->state = state_idle; + iface->irq = np->intrs[0].line; + iface->channels = (struct keywest_chan *) + (((unsigned long)(iface + 1) + 3UL) & ~3UL); + iface->base = (unsigned long)ioremap(np->addrs[0].address + addroffset, + np->addrs[0].size); + if (iface->base == 0) { + printk(KERN_ERR "i2c-keywest: can't map inteface !\n"); + kfree(iface); + return -ENOMEM; + } + + init_timer(&iface->timeout_timer); + iface->timeout_timer.function = keywest_timeout; + iface->timeout_timer.data = (unsigned long)iface; + + /* Select interface rate */ + iface->cur_mode = KW_I2C_MODE_100KHZ; + prate = (unsigned long *)get_property(np, "AAPL,i2c-rate", NULL); + if (prate) switch(*prate) { + case 100: + iface->cur_mode = KW_I2C_MODE_100KHZ; + break; + case 50: + iface->cur_mode = KW_I2C_MODE_50KHZ; + break; + case 25: + iface->cur_mode = KW_I2C_MODE_25KHZ; + break; + default: + printk(KERN_WARNING "i2c-keywest: unknown rate %ldKhz, using 100KHz\n", + *prate); + } + + /* Select standard sub mode */ + iface->cur_mode |= KW_I2C_MODE_STANDARDSUB; + + /* Write mode */ + write_reg(reg_mode, iface->cur_mode); + + /* Switch interrupts off & clear them*/ + write_reg(reg_ier, 0x00); + write_reg(reg_isr, KW_I2C_IRQ_MASK); + +#ifndef POLLED_MODE + /* Request chip interrupt */ + rc = request_irq(iface->irq, keywest_irq, 0, "keywest i2c", iface); + if (rc) { + printk(KERN_ERR "i2c-keywest: can't get IRQ %d !\n", iface->irq); + iounmap((void *)iface->base); + kfree(iface); + return -ENODEV; + } +#endif /* POLLED_MODE */ + + for (i=0; ichannels[i]; + u8 addr; + + sprintf(chan->adapter.dev.name, "%s %d", np->parent->name, i); + chan->iface = iface; + chan->chan_no = i; + chan->adapter.id = I2C_ALGO_SMBUS; + chan->adapter.algo = &keywest_algorithm; + chan->adapter.algo_data = NULL; + chan->adapter.client_register = NULL; + chan->adapter.client_unregister = NULL; + i2c_set_adapdata(&chan->adapter, chan); + + rc = i2c_add_adapter(&chan->adapter); + if (rc) { + printk("i2c-keywest.c: Adapter %s registration failed\n", + chan->adapter.dev.name); + i2c_set_adapdata(&chan->adapter, NULL); + } + if (probe) { + printk("Probe: "); + for (addr = 0x00; addr <= 0x7f; addr++) { + if (i2c_smbus_xfer(&chan->adapter,addr, + 0,0,0,I2C_SMBUS_QUICK,NULL) >= 0) + printk("%02x ", addr); + } + printk("\n"); + } + } + + printk(KERN_INFO "Found KeyWest i2c on \"%s\", %d channel%s, stepping: %d bits\n", + np->parent->name, nchan, nchan > 1 ? "s" : "", bsteps); + + iface->next = ifaces; + ifaces = iface; + return 0; +} + +static void +dispose_iface(struct keywest_iface *iface) +{ + int i, rc; + + ifaces = iface->next; + + /* Make sure we stop all activity */ + down(&iface->sem); +#ifndef POLLED_MODE + spin_lock_irq(&iface->lock); + while (iface->state != state_idle) { + spin_unlock_irq(&iface->lock); + schedule(); + spin_lock_irq(&iface->lock); + } +#endif /* POLLED_MODE */ + iface->state = state_dead; +#ifndef POLLED_MODE + spin_unlock_irq(&iface->lock); + free_irq(iface->irq, iface); +#endif /* POLLED_MODE */ + up(&iface->sem); + + /* Release all channels */ + for (i=0; ichan_count; i++) { + struct keywest_chan* chan = &iface->channels[i]; + if (i2c_get_adapdata(&chan->adapter) == NULL) + continue; + rc = i2c_del_adapter(&chan->adapter); + i2c_set_adapdata(&chan->adapter, NULL); + /* We aren't that prepared to deal with this... */ + if (rc) + printk("i2c-keywest.c: i2c_del_adapter failed, that's bad !\n"); + } + iounmap((void *)iface->base); + kfree(iface); +} + +static int __init +i2c_keywest_init(void) +{ + struct device_node *np; + int rc = -ENODEV; + + np = find_compatible_devices("i2c", "keywest"); + while (np != 0) { + if (np->n_addrs >= 1 && np->n_intrs >= 1) + rc = create_iface(np); + np = np->next; + } + if (ifaces) + rc = 0; + return rc; +} + +static void __exit +i2c_keywest_cleanup(void) +{ + while(ifaces) + dispose_iface(ifaces); +} + +module_init(i2c_keywest_init); +module_exit(i2c_keywest_cleanup); diff -Nru a/drivers/i2c/i2c-keywest.h b/drivers/i2c/i2c-keywest.h --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/i2c/i2c-keywest.h Sat Apr 12 14:44:10 2003 @@ -0,0 +1,111 @@ +#ifndef __I2C_KEYWEST_H__ +#define __I2C_KEYWEST_H__ + +/* The Tumbler audio equalizer can be really slow sometimes */ +#define POLL_TIMEOUT (2*HZ) + +/* Register indices */ +typedef enum { + reg_mode = 0, + reg_control, + reg_status, + reg_isr, + reg_ier, + reg_addr, + reg_subaddr, + reg_data +} reg_t; + + +/* Mode register */ +#define KW_I2C_MODE_100KHZ 0x00 +#define KW_I2C_MODE_50KHZ 0x01 +#define KW_I2C_MODE_25KHZ 0x02 +#define KW_I2C_MODE_DUMB 0x00 +#define KW_I2C_MODE_STANDARD 0x04 +#define KW_I2C_MODE_STANDARDSUB 0x08 +#define KW_I2C_MODE_COMBINED 0x0C +#define KW_I2C_MODE_MODE_MASK 0x0C +#define KW_I2C_MODE_CHAN_MASK 0xF0 + +/* Control register */ +#define KW_I2C_CTL_AAK 0x01 +#define KW_I2C_CTL_XADDR 0x02 +#define KW_I2C_CTL_STOP 0x04 +#define KW_I2C_CTL_START 0x08 + +/* Status register */ +#define KW_I2C_STAT_BUSY 0x01 +#define KW_I2C_STAT_LAST_AAK 0x02 +#define KW_I2C_STAT_LAST_RW 0x04 +#define KW_I2C_STAT_SDA 0x08 +#define KW_I2C_STAT_SCL 0x10 + +/* IER & ISR registers */ +#define KW_I2C_IRQ_DATA 0x01 +#define KW_I2C_IRQ_ADDR 0x02 +#define KW_I2C_IRQ_STOP 0x04 +#define KW_I2C_IRQ_START 0x08 +#define KW_I2C_IRQ_MASK 0x0F + +/* Physical interface */ +struct keywest_iface +{ + unsigned long base; + unsigned bsteps; + int irq; + struct semaphore sem; + spinlock_t lock; + struct keywest_chan* channels; + unsigned chan_count; + u8 cur_mode; + char read_write; + u8* data; + unsigned datalen; + int state; + int result; + int stopretry; + struct timer_list timeout_timer; + struct completion complete; + struct keywest_iface* next; +}; + +enum { + state_idle, + state_addr, + state_read, + state_write, + state_stop, + state_dead +}; + +/* Channel on an interface */ +struct keywest_chan +{ + struct i2c_adapter adapter; + struct keywest_iface* iface; + unsigned chan_no; +}; + +/* Register access */ + +static inline u8 __read_reg(struct keywest_iface *iface, reg_t reg) +{ + return in_8(((volatile u8 *)iface->base) + + (((unsigned)reg) << iface->bsteps)); +} + +static inline void __write_reg(struct keywest_iface *iface, reg_t reg, u8 val) +{ + out_8(((volatile u8 *)iface->base) + + (((unsigned)reg) << iface->bsteps), val); + (void)__read_reg(iface, reg); + udelay(10); +} + +#define write_reg(reg, val) __write_reg(iface, reg, val) +#define read_reg(reg) __read_reg(iface, reg) + + + +#endif /* __I2C_KEYWEST_H__ */ diff -Nru a/drivers/i2c/scx200_i2c.c b/drivers/i2c/scx200_i2c.c --- a/drivers/i2c/scx200_i2c.c Sat Apr 12 14:44:08 2003 +++ b/drivers/i2c/scx200_i2c.c Sat Apr 12 14:44:08 2003 @@ -82,9 +82,11 @@ static struct i2c_adapter scx200_i2c_ops = { .owner = THIS_MODULE, - .name = "NatSemi SCx200 I2C", .id = I2C_HW_B_VELLE, .algo_data = &scx200_i2c_data, + .dev = { + .name = "NatSemi SCx200 I2C", + }, }; int scx200_i2c_init(void) @@ -110,7 +112,7 @@ if (i2c_bit_add_bus(&scx200_i2c_ops) < 0) { printk(KERN_ERR NAME ": adapter %s registration failed\n", - scx200_i2c_ops.name); + scx200_i2c_ops.dev.name); return -ENODEV; } diff -Nru a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c --- a/drivers/ide/ide-probe.c Sat Apr 12 14:44:08 2003 +++ b/drivers/ide/ide-probe.c Sat Apr 12 14:44:08 2003 @@ -1008,8 +1008,8 @@ * do not. */ - q->queuedata = HWGROUP(drive); blk_init_queue(q, do_ide_request, &ide_lock); + q->queuedata = HWGROUP(drive); drive->queue_setup = 1; blk_queue_segment_boundary(q, 0xffff); diff -Nru a/drivers/ide/pci/hpt366.c b/drivers/ide/pci/hpt366.c --- a/drivers/ide/pci/hpt366.c Sat Apr 12 14:44:08 2003 +++ b/drivers/ide/pci/hpt366.c Sat Apr 12 14:44:08 2003 @@ -1106,13 +1106,10 @@ ((findev->devfn - dev->devfn) == 1) && (PCI_FUNC(findev->devfn) & 1)) { u8 irq = 0, irq2 = 0; - pci_read_config_byte(dev, PCI_INTERRUPT_LINE, &irq); - pci_read_config_byte(findev, PCI_INTERRUPT_LINE, &irq2); - if (irq != irq2) { - pci_write_config_byte(findev, - PCI_INTERRUPT_LINE, irq); + if (findev->irq != dev->irq) { + /* FIXME: we need a core pci_set_interrupt() */ findev->irq = dev->irq; - printk("%s: pci-config space interrupt " + printk(KERN_WARNING "%s: pci-config space interrupt " "fixed.\n", d->name); } ide_setup_pci_devices(dev, findev, d); diff -Nru a/drivers/ide/pci/pdc202xx_new.c b/drivers/ide/pci/pdc202xx_new.c --- a/drivers/ide/pci/pdc202xx_new.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ide/pci/pdc202xx_new.c Sat Apr 12 14:44:09 2003 @@ -592,15 +592,8 @@ if ((findev->vendor == dev->vendor) && (findev->device == dev->device) && (PCI_SLOT(findev->devfn) & 2)) { - u8 irq = 0, irq2 = 0; - pci_read_config_byte(dev, - PCI_INTERRUPT_LINE, &irq); - pci_read_config_byte(findev, - PCI_INTERRUPT_LINE, &irq2); - if (irq != irq2) { + if (findev->irq != dev->irq) { findev->irq = dev->irq; - pci_write_config_byte(findev, - PCI_INTERRUPT_LINE, irq); } ide_setup_pci_devices(dev, findev, d); return; diff -Nru a/drivers/ide/pci/serverworks.c b/drivers/ide/pci/serverworks.c --- a/drivers/ide/pci/serverworks.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ide/pci/serverworks.c Sat Apr 12 14:44:06 2003 @@ -419,7 +419,13 @@ static void svwks_tune_drive (ide_drive_t *drive, u8 pio) { - (void) svwks_tune_chipset(drive, (XFER_PIO_0 + pio)); + /* Tune to desired value or to "best". We must not adjust + "best" when we adjust from pio numbers to rate values! */ + + if(pio != 255) + (void) svwks_tune_chipset(drive, (XFER_PIO_0 + pio)); + else + (void) svwks_tune_chipset(drive, 255); } static int config_chipset_for_dma (ide_drive_t *drive) diff -Nru a/drivers/ieee1394/csr.c b/drivers/ieee1394/csr.c --- a/drivers/ieee1394/csr.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/csr.c Sat Apr 12 14:44:06 2003 @@ -18,7 +18,8 @@ */ #include -#include /* needed for MODULE_PARM */ +#include +#include #include "ieee1394_types.h" #include "hosts.h" @@ -27,9 +28,10 @@ /* Module Parameters */ /* this module parameter can be used to disable mapping of the FCP registers */ -MODULE_PARM(fcp,"i"); -MODULE_PARM_DESC(fcp, "Map FCP registers (default = 1, disable = 0)."); + static int fcp = 1; +module_param(fcp, int, 0444); +MODULE_PARM_DESC(fcp, "Map FCP registers (default = 1, disable = 0)."); static u16 csr_crc16(unsigned *data, int length) { diff -Nru a/drivers/ieee1394/dv1394.c b/drivers/ieee1394/dv1394.c --- a/drivers/ieee1394/dv1394.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/dv1394.c Sat Apr 12 14:44:09 2003 @@ -2919,11 +2919,7 @@ } #ifdef CONFIG_DEVFS_FS - if (!devfs_mk_dir("ieee1394/dv")) { - printk(KERN_ERR "dv1394: unable to create /dev/ieee1394/dv\n"); - ieee1394_unregister_chardev(IEEE1394_MINOR_BLOCK_DV1394); - return -ENOMEM; - } + devfs_mk_dir("ieee1394/dv"); #endif #ifdef CONFIG_PROC_FS diff -Nru a/drivers/ieee1394/highlevel.c b/drivers/ieee1394/highlevel.c --- a/drivers/ieee1394/highlevel.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/highlevel.c Sat Apr 12 14:44:09 2003 @@ -57,7 +57,8 @@ list_add_tail(&hl->hl_list, &hl_drivers); up(&hl_drivers_lock); - hl_all_hosts(hl->op->add_host); + if (hl->op->add_host) + hl_all_hosts(hl->op->add_host); return hl; } @@ -98,6 +99,7 @@ struct hpsb_address_serve *as; struct list_head *entry; int retval = 0; + unsigned long flags; if (((start|end) & 3) || (start >= end) || (end > 0x1000000000000ULL)) { HPSB_ERR("%s called with invalid addresses", __FUNCTION__); @@ -116,7 +118,7 @@ as->start = start; as->end = end; - write_lock_irq(&addr_space_lock); + write_lock_irqsave(&addr_space_lock, flags); entry = addr_space.next; while (list_entry(entry, struct hpsb_address_serve, as_list)->end <= start) { @@ -128,7 +130,7 @@ } entry = entry->next; } - write_unlock_irq(&addr_space_lock); + write_unlock_irqrestore(&addr_space_lock, flags); if (retval == 0) { kfree(as); @@ -142,8 +144,9 @@ int retval = 0; struct hpsb_address_serve *as; struct list_head *entry; + unsigned long flags; - write_lock_irq(&addr_space_lock); + write_lock_irqsave(&addr_space_lock, flags); entry = hl->addr_list.next; @@ -159,7 +162,7 @@ } } - write_unlock_irq(&addr_space_lock); + write_unlock_irqrestore(&addr_space_lock, flags); return retval; } @@ -202,7 +205,8 @@ list_for_each(entry, &hl_drivers) { hl = list_entry(entry, struct hpsb_highlevel, hl_list); - hl->op->add_host(host); + if (hl->op->add_host) + hl->op->add_host(host); } up(&hl_drivers_lock); } @@ -237,48 +241,40 @@ up(&hl_drivers_lock); } -void highlevel_iso_receive(struct hpsb_host *host, quadlet_t *data, +void highlevel_iso_receive(struct hpsb_host *host, void *data, unsigned int length) { struct list_head *entry; struct hpsb_highlevel *hl; - int channel = (data[0] >> 8) & 0x3f; + int channel = (((quadlet_t *)data)[0] >> 8) & 0x3f; down(&hl_drivers_lock); - entry = hl_drivers.next; - - while (entry != &hl_drivers) { + list_for_each(entry, &hl_drivers) { hl = list_entry(entry, struct hpsb_highlevel, hl_list); - if (hl->op->iso_receive) { + + if (hl->op->iso_receive) hl->op->iso_receive(host, channel, data, length); - } - entry = entry->next; } up(&hl_drivers_lock); } void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction, - u8 *data, unsigned int length) + void *data, unsigned int length) { struct list_head *entry; struct hpsb_highlevel *hl; - int cts = data[0] >> 4; + int cts = ((quadlet_t *)data)[0] >> 4; down(&hl_drivers_lock); - entry = hl_drivers.next; - - while (entry != &hl_drivers) { + list_for_each(entry, &hl_drivers) { hl = list_entry(entry, struct hpsb_highlevel, hl_list); - if (hl->op->fcp_request) { - hl->op->fcp_request(host, nodeid, direction, cts, data, - length); - } - entry = entry->next; + if (hl->op->fcp_request) + hl->op->fcp_request(host, nodeid, direction, cts, data, length); } up(&hl_drivers_lock); } -int highlevel_read(struct hpsb_host *host, int nodeid, quadlet_t *buffer, +int highlevel_read(struct hpsb_host *host, int nodeid, void *data, u64 addr, unsigned int length, u16 flags) { struct hpsb_address_serve *as; @@ -295,13 +291,14 @@ if (as->end > addr) { partlength = min(as->end - addr, (u64) length); - if (as->op->read != NULL) { - rcode = as->op->read(host, nodeid, buffer, + if (as->op->read) { + rcode = as->op->read(host, nodeid, data, addr, partlength, flags); } else { rcode = RCODE_TYPE_ERROR; } + (u8 *)data += partlength; length -= partlength; addr += partlength; @@ -324,7 +321,7 @@ } int highlevel_write(struct hpsb_host *host, int nodeid, int destid, - quadlet_t *data, u64 addr, unsigned int length, u16 flags) + void *data, u64 addr, unsigned int length, u16 flags) { struct hpsb_address_serve *as; struct list_head *entry; @@ -340,13 +337,14 @@ if (as->end > addr) { partlength = min(as->end - addr, (u64) length); - if (as->op->write != NULL) { + if (as->op->write) { rcode = as->op->write(host, nodeid, destid, data, addr, partlength, flags); } else { rcode = RCODE_TYPE_ERROR; } + (u8 *)data += partlength; length -= partlength; addr += partlength; @@ -383,7 +381,7 @@ while (as->start <= addr) { if (as->end > addr) { - if (as->op->lock != NULL) { + if (as->op->lock) { rcode = as->op->lock(host, nodeid, store, addr, data, arg, ext_tcode, flags); } else { @@ -416,7 +414,7 @@ while (as->start <= addr) { if (as->end > addr) { - if (as->op->lock64 != NULL) { + if (as->op->lock64) { rcode = as->op->lock64(host, nodeid, store, addr, data, arg, ext_tcode, flags); diff -Nru a/drivers/ieee1394/highlevel.h b/drivers/ieee1394/highlevel.h --- a/drivers/ieee1394/highlevel.h Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/highlevel.h Sat Apr 12 14:44:07 2003 @@ -108,19 +108,19 @@ later case, no response will be sent and the driver, that handled the request will send the response itself. */ -int highlevel_read(struct hpsb_host *host, int nodeid, quadlet_t *buffer, +int highlevel_read(struct hpsb_host *host, int nodeid, void *data, u64 addr, unsigned int length, u16 flags); int highlevel_write(struct hpsb_host *host, int nodeid, int destid, - quadlet_t *data, u64 addr, unsigned int length, u16 flags); + void *data, u64 addr, unsigned int length, u16 flags); int highlevel_lock(struct hpsb_host *host, int nodeid, quadlet_t *store, u64 addr, quadlet_t data, quadlet_t arg, int ext_tcode, u16 flags); int highlevel_lock64(struct hpsb_host *host, int nodeid, octlet_t *store, u64 addr, octlet_t data, octlet_t arg, int ext_tcode, u16 flags); -void highlevel_iso_receive(struct hpsb_host *host, quadlet_t *data, +void highlevel_iso_receive(struct hpsb_host *host, void *data, unsigned int length); void highlevel_fcp_request(struct hpsb_host *host, int nodeid, int direction, - u8 *data, unsigned int length); + void *data, unsigned int length); /* diff -Nru a/drivers/ieee1394/hosts.h b/drivers/ieee1394/hosts.h --- a/drivers/ieee1394/hosts.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/hosts.h Sat Apr 12 14:44:06 2003 @@ -1,6 +1,7 @@ #ifndef _IEEE1394_HOSTS_H #define _IEEE1394_HOSTS_H +#include #include #include #include @@ -64,6 +65,8 @@ struct hpsb_host_driver *driver; struct pci_dev *pdev; + + struct device device; }; diff -Nru a/drivers/ieee1394/ieee1394.h b/drivers/ieee1394/ieee1394.h --- a/drivers/ieee1394/ieee1394.h Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/ieee1394.h Sat Apr 12 14:44:07 2003 @@ -46,9 +46,13 @@ #define ACKX_TIMEOUT (-4) -#define SPEED_100 0x0 -#define SPEED_200 0x1 -#define SPEED_400 0x2 +#define SPEED_100 0x00 +#define SPEED_200 0x01 +#define SPEED_400 0x02 +#define SPEED_800 0x03 +#define SPEED_1600 0x04 +#define SPEED_3200 0x05 + /* Maps speed values above to a string representation */ extern const char *hpsb_speedto_str[]; diff -Nru a/drivers/ieee1394/ieee1394_core.c b/drivers/ieee1394/ieee1394_core.c --- a/drivers/ieee1394/ieee1394_core.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/ieee1394_core.c Sat Apr 12 14:44:06 2003 @@ -28,6 +28,7 @@ #include #include #include +#include #include #include #include @@ -48,13 +49,9 @@ /* * Disable the nodemgr detection and config rom reading functionality. */ -MODULE_PARM(disable_nodemgr, "i"); -MODULE_PARM_DESC(disable_nodemgr, "Disable nodemgr functionality."); static int disable_nodemgr = 0; - -MODULE_PARM(disable_hotplug, "i"); -MODULE_PARM_DESC(disable_hotplug, "Disable hotplug for detected nodes."); -static int disable_hotplug = 0; +module_param(disable_nodemgr, int, 0444); +MODULE_PARM_DESC(disable_nodemgr, "Disable nodemgr functionality."); /* We are GPL, so treat us special */ MODULE_LICENSE("GPL"); @@ -62,7 +59,7 @@ static kmem_cache_t *hpsb_packet_cache; /* Some globals used */ -const char *hpsb_speedto_str[] = { "S100", "S200", "S400" }; +const char *hpsb_speedto_str[] = { "S100", "S200", "S400", "S800", "S1600", "S3200" }; static void dump_packet(const char *text, quadlet_t *data, int size) { @@ -130,9 +127,8 @@ { struct hpsb_packet *packet = NULL; void *data = NULL; - int kmflags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; - packet = kmem_cache_alloc(hpsb_packet_cache, kmflags); + packet = kmem_cache_alloc(hpsb_packet_cache, GFP_ATOMIC); if (packet == NULL) return NULL; @@ -140,7 +136,7 @@ packet->header = packet->embedded_header; if (data_size) { - data = kmalloc(data_size + 8, kmflags); + data = kmalloc(data_size + 8, GFP_ATOMIC); if (data == NULL) { kmem_cache_free(hpsb_packet_cache, packet); return NULL; @@ -496,8 +492,7 @@ quadlet_t *data; size_t size=packet->data_size+packet->header_size; - int kmflags = in_interrupt() ? GFP_ATOMIC : GFP_KERNEL; - data = kmalloc(packet->header_size + packet->data_size, kmflags); + data = kmalloc(packet->header_size + packet->data_size, GFP_ATOMIC); if (!data) { HPSB_ERR("unable to allocate memory for concatenating header and data"); return 0; @@ -1120,7 +1115,7 @@ /* follow through with the open() */ retval = file_ops->open(inode, file); - if(retval == 0) { + if (retval == 0) { /* If the open() succeeded, then ieee1394 will be left * with an extra module reference, so we discard it here. @@ -1166,7 +1161,7 @@ #ifdef CONFIG_PROC_FS /* Must be done before we start everything else, since the drivers * may use it. */ - ieee1394_procfs_entry = proc_mkdir( "ieee1394", proc_bus); + ieee1394_procfs_entry = proc_mkdir("ieee1394", proc_bus); if (ieee1394_procfs_entry == NULL) { HPSB_ERR("unable to create /proc/bus/ieee1394\n"); unregister_chrdev(IEEE1394_MAJOR, "ieee1394"); @@ -1179,7 +1174,7 @@ init_hpsb_highlevel(); init_csr(); if (!disable_nodemgr) - init_ieee1394_nodemgr(disable_hotplug); + init_ieee1394_nodemgr(); else HPSB_INFO("nodemgr functionality disabled"); @@ -1273,7 +1268,7 @@ EXPORT_SYMBOL(hpsb_node_lock); EXPORT_SYMBOL(hpsb_register_protocol); EXPORT_SYMBOL(hpsb_unregister_protocol); -EXPORT_SYMBOL(hpsb_release_unit_directory); +EXPORT_SYMBOL(ieee1394_bus_type); /** csr.c **/ EXPORT_SYMBOL(hpsb_update_config_rom); diff -Nru a/drivers/ieee1394/ieee1394_core.h b/drivers/ieee1394/ieee1394_core.h --- a/drivers/ieee1394/ieee1394_core.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/ieee1394_core.h Sat Apr 12 14:44:06 2003 @@ -231,4 +231,7 @@ /* the proc_fs entry for /proc/ieee1394 */ extern struct proc_dir_entry *ieee1394_procfs_entry; +/* Our sysfs bus entry */ +extern struct bus_type ieee1394_bus_type; + #endif /* _IEEE1394_CORE_H */ diff -Nru a/drivers/ieee1394/ieee1394_hotplug.h b/drivers/ieee1394/ieee1394_hotplug.h --- a/drivers/ieee1394/ieee1394_hotplug.h Sat Apr 12 14:44:10 2003 +++ b/drivers/ieee1394/ieee1394_hotplug.h Sat Apr 12 14:44:10 2003 @@ -1,6 +1,8 @@ #ifndef _IEEE1394_HOTPLUG_H #define _IEEE1394_HOTPLUG_H +#include + #include "ieee1394_core.h" #include "nodemgr.h" @@ -32,26 +34,6 @@ struct ieee1394_device_id *id_table; /* - * The probe function is called when a device is added to the - * bus and the nodemgr finds a matching entry in the drivers - * device id table or when registering this driver and a - * previously unhandled device can be handled. The driver may - * decline to handle the device based on further investigation - * of the device (or whatever reason) in which case a negative - * error code should be returned, otherwise 0 should be - * returned. The driver may use the driver_data field in the - * unit directory to store per device driver specific data. - */ - int (*probe)(struct unit_directory *ud); - - /* - * The disconnect function is called when a device is removed - * from the bus or if it wasn't possible to read the guid - * after the last bus reset. - */ - void (*disconnect)(struct unit_directory *ud); - - /* * The update function is called when the node has just * survived a bus reset, i.e. it is still present on the bus. * However, it may be necessary to reestablish the connection @@ -59,18 +41,12 @@ */ void (*update)(struct unit_directory *ud); - /* Driver in list of all registered drivers */ - struct list_head list; - /* The list of unit directories managed by this driver */ - struct list_head unit_directories; + /* Our LDM structure */ + struct device_driver driver; }; int hpsb_register_protocol(struct hpsb_protocol_driver *driver); void hpsb_unregister_protocol(struct hpsb_protocol_driver *driver); - -int hpsb_claim_unit_directory(struct unit_directory *ud, - struct hpsb_protocol_driver *driver); -void hpsb_release_unit_directory(struct unit_directory *ud); #endif /* _IEEE1394_HOTPLUG_H */ diff -Nru a/drivers/ieee1394/ieee1394_transactions.c b/drivers/ieee1394/ieee1394_transactions.c --- a/drivers/ieee1394/ieee1394_transactions.c Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/ieee1394_transactions.c Sat Apr 12 14:44:07 2003 @@ -146,10 +146,10 @@ spin_lock_irqsave(&tp->lock, flags); - packet->tlabel = find_next_zero_bit(&tp->pool, 64, tp->next); + packet->tlabel = find_next_zero_bit(tp->pool, 64, tp->next); tp->next = (packet->tlabel + 1) % 64; /* Should _never_ happen */ - BUG_ON(test_and_set_bit(packet->tlabel, &tp->pool)); + BUG_ON(test_and_set_bit(packet->tlabel, tp->pool)); tp->allocations++; spin_unlock_irqrestore(&tp->lock, flags); @@ -177,7 +177,7 @@ BUG_ON(packet->tlabel > 63 || packet->tlabel < 0); spin_lock_irqsave(&tp->lock, flags); - BUG_ON(!test_and_clear_bit(packet->tlabel, &tp->pool)); + BUG_ON(!test_and_clear_bit(packet->tlabel, tp->pool)); spin_unlock_irqrestore(&tp->lock, flags); up(&tp->count); diff -Nru a/drivers/ieee1394/ieee1394_types.h b/drivers/ieee1394/ieee1394_types.h --- a/drivers/ieee1394/ieee1394_types.h Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/ieee1394_types.h Sat Apr 12 14:44:09 2003 @@ -72,19 +72,20 @@ /* Transaction Label handling */ struct hpsb_tlabel_pool { - u64 pool; + DECLARE_BITMAP(pool, 64); spinlock_t lock; u8 next; u32 allocations; struct semaphore count; }; -#define HPSB_TPOOL_INIT(_tp) \ -do { \ - sema_init(&(_tp)->count, 63); \ - spin_lock_init(&(_tp)->lock); \ - (_tp)->next = 0; \ - (_tp)->pool = 0; \ +#define HPSB_TPOOL_INIT(_tp) \ +do { \ + CLEAR_BITMAP((_tp)->pool, 64); \ + spin_lock_init(&(_tp)->lock); \ + (_tp)->next = 0; \ + (_tp)->allocations = 0; \ + sema_init(&(_tp)->count, 63); \ } while(0) diff -Nru a/drivers/ieee1394/iso.c b/drivers/ieee1394/iso.c --- a/drivers/ieee1394/iso.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/iso.c Sat Apr 12 14:44:09 2003 @@ -14,7 +14,7 @@ void hpsb_iso_stop(struct hpsb_iso *iso) { - if(!iso->flags & HPSB_ISO_DRIVER_STARTED) + if (!(iso->flags & HPSB_ISO_DRIVER_STARTED)) return; iso->host->driver->isoctl(iso, iso->type == HPSB_ISO_XMIT ? diff -Nru a/drivers/ieee1394/nodemgr.c b/drivers/ieee1394/nodemgr.c --- a/drivers/ieee1394/nodemgr.c Sat Apr 12 14:44:08 2003 +++ b/drivers/ieee1394/nodemgr.c Sat Apr 12 14:44:08 2003 @@ -1,8 +1,8 @@ /* * Node information (ConfigROM) collection and management. * - * Copyright (C) 2000 Andreas E. Bombe - * 2001 Ben Collins + * Copyright (C) 2000 Andreas E. Bombe + * 2001-2003 Ben Collins * * This code is licensed under the GPL. See the file COPYING in the root * directory of the kernel sources for details. @@ -17,9 +17,7 @@ #include #include #include -#ifdef CONFIG_PROC_FS -#include -#endif +#include #include #include @@ -32,24 +30,23 @@ #include "csr.h" #include "nodemgr.h" -#ifdef CONFIG_IEEE1394_OUI_DB -struct oui_list_struct { - int oui; - char *name; -}; -extern struct oui_list_struct oui_list[]; -static char *nodemgr_find_oui_name(int oui) { +static char *nodemgr_find_oui_name(int oui) +{ +#ifdef CONFIG_IEEE1394_OUI_DB + extern struct oui_list_struct { + int oui; + char *name; + } oui_list[]; int i; for (i = 0; oui_list[i].name; i++) if (oui_list[i].oui == oui) return oui_list[i].name; - +#endif return NULL; } -#endif /* * Basically what we do here is start off retrieving the bus_info block. @@ -60,163 +57,469 @@ * complete directory entry (be it a leaf or a directory). We then process * it and add the info to our structure for that particular node. * - * We verify CRC's along the way for each directory/block/leaf. The - * entire node structure is generic, and simply stores the information in - * a way that's easy to parse by the protocol interface. + * We verify CRC's along the way for each directory/block/leaf. The entire + * node structure is generic, and simply stores the information in a way + * that's easy to parse by the protocol interface. */ -/* The nodemgr maintains a number of data structures: the node list, - * the driver list, unit directory list and the host info list. The - * first three lists are accessed from process context only: /proc - * readers, insmod and rmmod, and the nodemgr thread. Access to these - * lists are serialized by means of the nodemgr_serialize mutex, which - * must be taken before accessing the structures and released - * afterwards. The host info list is only accessed during insmod, - * rmmod and from interrupt and allways only for a short period of - * time, so a spinlock is used to protect this list. +/* + * The nodemgr relies heavily on the Drive Model for device callbacks and + * driver/device mappings. The old nodemgr used to handle all this itself, + * but now we are much simpler because of the LDM. */ static DECLARE_MUTEX(nodemgr_serialize); -static LIST_HEAD(node_list); -static LIST_HEAD(driver_list); -static LIST_HEAD(unit_directory_list); static LIST_HEAD(host_info_list); static spinlock_t host_info_lock = SPIN_LOCK_UNLOCKED; -/* Disables use of the hotplug calls. */ -static int nodemgr_disable_hotplug = 0; - struct host_info { struct hpsb_host *host; struct list_head list; struct completion exited; struct semaphore reset_sem; int pid; + int id; + char daemon_name[15]; +}; + + +#define fw_attr(class, class_type, field, type, format_string) \ +static ssize_t fw_show_##class##_##field (struct device *dev, char *buf)\ +{ \ + class_type *class; \ + class = container_of(dev, class_type, device); \ + return sprintf(buf, format_string, (type)class->field); \ +} \ +static struct device_attribute dev_attr_##class##_##field = { \ + .attr = {.name = __stringify(field), .mode = S_IRUGO }, \ + .show = fw_show_##class##_##field, \ }; -#ifdef CONFIG_PROC_FS -#define PUTF(fmt, args...) out += sprintf(out, fmt, ## args) +#define fw_drv_attr(field, type, format_string) \ +static ssize_t fw_drv_show_##field (struct device_driver *drv, char *buf) \ +{ \ + struct hpsb_protocol_driver *driver; \ + driver = container_of(drv, struct hpsb_protocol_driver, driver); \ + return sprintf(buf, format_string, (type)driver->field);\ +} \ +static struct driver_attribute driver_attr_drv_##field = { \ + .attr = {.name = __stringify(field), .mode = S_IRUGO }, \ + .show = fw_drv_show_##field, \ +}; + -static int raw1394_read_proc(char *page, char **start, off_t off, - int count, int *eof, void *data) +static ssize_t fw_show_ne_bus_options(struct device *dev, char *buf) { - struct list_head *lh; - struct node_entry *ne; - int len; - char *out = page; - unsigned long flags; + struct node_entry *ne = container_of(dev, struct node_entry, device); - if (down_interruptible(&nodemgr_serialize)) - return -EINTR; + return sprintf(buf, "IRMC(%d) CMC(%d) ISC(%d) BMC(%d) PMC(%d) GEN(%d) " + "LSPD(%d) MAX_REC(%d) CYC_CLK_ACC(%d)\n", ne->busopt.irmc, + ne->busopt.cmc, ne->busopt.isc, ne->busopt.bmc, + ne->busopt.pmc, ne->busopt.generation, ne->busopt.lnkspd, + ne->busopt.max_rec, ne->busopt.cyc_clk_acc); +} +static DEVICE_ATTR(bus_options,S_IRUGO,fw_show_ne_bus_options,NULL); - list_for_each(lh, &node_list) { - struct list_head *l; - int ud_count = 0; - ne = list_entry(lh, struct node_entry, list); - if (!ne) - continue; +static ssize_t fw_show_ne_tlabels_free(struct device *dev, char *buf) +{ + struct node_entry *ne = container_of(dev, struct node_entry, device); + return sprintf(buf, "%d\n", atomic_read(&ne->tpool->count.count) + 1); +} +static DEVICE_ATTR(tlabels_free,S_IRUGO,fw_show_ne_tlabels_free,NULL); - PUTF("Node[" NODE_BUS_FMT "] GUID[%016Lx]:\n", - NODE_BUS_ARGS(ne->nodeid), (unsigned long long)ne->guid); - /* Generic Node information */ - PUTF(" Vendor ID : `%s' [0x%06x]\n", ne->oui_name, ne->vendor_id); - if (ne->vendor_name) - PUTF(" Vendor text : `%s'\n", ne->vendor_name); - PUTF(" Capabilities: 0x%06x\n", ne->capabilities); - PUTF(" Tlabel stats:\n"); - spin_lock_irqsave(&ne->tpool->lock, flags); - PUTF(" Free : %d\n", atomic_read(&ne->tpool->count.count) + 1); - PUTF(" Total : %u\n", ne->tpool->allocations); - PUTF(" Mask : %016Lx\n", (unsigned long long)ne->tpool->pool); - spin_unlock_irqrestore(&ne->tpool->lock, flags); - PUTF(" Bus Options :\n"); - PUTF(" IRMC(%d) CMC(%d) ISC(%d) BMC(%d) PMC(%d) GEN(%d)\n" - " LSPD(%d) MAX_REC(%d) CYC_CLK_ACC(%d)\n", - ne->busopt.irmc, ne->busopt.cmc, ne->busopt.isc, ne->busopt.bmc, - ne->busopt.pmc, ne->busopt.generation, ne->busopt.lnkspd, - ne->busopt.max_rec, ne->busopt.cyc_clk_acc); - - /* If this is the host entry, output some info about it aswell */ - if (ne->host != NULL && ne->host->node_id == ne->nodeid) { - PUTF(" Host Node Status:\n"); - PUTF(" Host Driver : %s\n", ne->host->driver->name); - PUTF(" Nodes connected : %d\n", ne->host->node_count); - PUTF(" Nodes active : %d\n", ne->host->nodes_active); - PUTF(" SelfIDs received: %d\n", ne->host->selfid_count); - PUTF(" Irm ID : [" NODE_BUS_FMT "]\n", - NODE_BUS_ARGS(ne->host->irm_id)); - PUTF(" BusMgr ID : [" NODE_BUS_FMT "]\n", - NODE_BUS_ARGS(ne->host->busmgr_id)); - PUTF(" In Bus Reset : %s\n", ne->host->in_bus_reset ? "yes" : "no"); - PUTF(" Root : %s\n", ne->host->is_root ? "yes" : "no"); - PUTF(" Cycle Master : %s\n", ne->host->is_cycmst ? "yes" : "no"); - PUTF(" IRM : %s\n", ne->host->is_irm ? "yes" : "no"); - PUTF(" Bus Manager : %s\n", ne->host->is_busmgr ? "yes" : "no"); - } - - /* Now the unit directories */ - list_for_each (l, &ne->unit_directories) { - struct unit_directory *ud = list_entry (l, struct unit_directory, node_list); - int printed = 0; // small hack - - PUTF(" Unit Directory %d:\n", ud_count++); - - if (ud->flags & UNIT_DIRECTORY_VENDOR_ID || - ud->flags & UNIT_DIRECTORY_MODEL_ID) { - PUTF(" Vendor/Model ID : "); - } - if (ud->flags & UNIT_DIRECTORY_VENDOR_ID) { - PUTF("%s [%06x]", ud->vendor_name ?: "Unknown", - ud->vendor_id); - printed = 1; - } - if (ud->flags & UNIT_DIRECTORY_MODEL_ID) { - if (!printed) { - PUTF("%s [%06x]", ne->vendor_name ?: "Unknown", - ne->vendor_id); - } - PUTF(" / %s [%06x]", ud->model_name ?: "Unknown", ud->model_id); - printed = 1; - } - if (printed) - PUTF("\n"); +static ssize_t fw_show_ne_tlabels_allocations(struct device *dev, char *buf) +{ + struct node_entry *ne = container_of(dev, struct node_entry, device); + return sprintf(buf, "%u\n", ne->tpool->allocations); +} +static DEVICE_ATTR(tlabels_allocations,S_IRUGO,fw_show_ne_tlabels_allocations,NULL); + + +static ssize_t fw_show_ne_tlabels_mask(struct device *dev, char *buf) +{ + struct node_entry *ne = container_of(dev, struct node_entry, device); +#if (BITS_PER_LONG <= 32) + return sprintf(buf, "0x%08lx%08lx\n", ne->tpool->pool[0], ne->tpool->pool[1]); +#else + return sprintf(buf, "0x%016lx\n", ne->tpool->pool[0]); +#endif +} +static DEVICE_ATTR(tlabels_mask,S_IRUGO,fw_show_ne_tlabels_mask,NULL); + + +fw_attr(ne, struct node_entry, capabilities, unsigned int, "0x%06x\n") +fw_attr(ne, struct node_entry, nodeid, unsigned int, "0x%04x\n") + +fw_attr(ne, struct node_entry, vendor_id, unsigned int, "0x%06x\n") +fw_attr(ne, struct node_entry, vendor_name, const char *, "%s\n") +fw_attr(ne, struct node_entry, vendor_oui, const char *, "%s\n") + +fw_attr(ne, struct node_entry, guid, unsigned long long, "0x%016Lx\n") +fw_attr(ne, struct node_entry, guid_vendor_id, unsigned int, "0x%06x\n") +fw_attr(ne, struct node_entry, guid_vendor_oui, const char *, "%s\n") + +static struct device_attribute *const fw_ne_attrs[] = { + &dev_attr_ne_guid, + &dev_attr_ne_guid_vendor_id, + &dev_attr_ne_capabilities, + &dev_attr_ne_vendor_id, + &dev_attr_ne_nodeid, + &dev_attr_bus_options, + &dev_attr_tlabels_free, + &dev_attr_tlabels_allocations, + &dev_attr_tlabels_mask, +}; + + + +fw_attr(ud, struct unit_directory, address, unsigned long long, "0x%016Lx\n") +fw_attr(ud, struct unit_directory, length, int, "%d\n") +/* These are all dependent on the value being provided */ +fw_attr(ud, struct unit_directory, vendor_id, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, model_id, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, specifier_id, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, version, unsigned int, "0x%06x\n") +fw_attr(ud, struct unit_directory, vendor_name, const char *, "%s\n") +fw_attr(ud, struct unit_directory, vendor_oui, const char *, "%s\n") +fw_attr(ud, struct unit_directory, model_name, const char *, "%s\n") + +static struct device_attribute *const fw_ud_attrs[] = { + &dev_attr_ud_address, + &dev_attr_ud_length, +}; + + +fw_attr(host, struct hpsb_host, node_count, int, "%d\n") +fw_attr(host, struct hpsb_host, selfid_count, int, "%d\n") +fw_attr(host, struct hpsb_host, nodes_active, int, "%d\n") +fw_attr(host, struct hpsb_host, in_bus_reset, int, "%d\n") +fw_attr(host, struct hpsb_host, is_root, int, "%d\n") +fw_attr(host, struct hpsb_host, is_cycmst, int, "%d\n") +fw_attr(host, struct hpsb_host, is_irm, int, "%d\n") +fw_attr(host, struct hpsb_host, is_busmgr, int, "%d\n") + +static struct device_attribute *const fw_host_attrs[] = { + &dev_attr_host_node_count, + &dev_attr_host_selfid_count, + &dev_attr_host_nodes_active, + &dev_attr_host_in_bus_reset, + &dev_attr_host_is_root, + &dev_attr_host_is_cycmst, + &dev_attr_host_is_irm, + &dev_attr_host_is_busmgr, +}; + + +static ssize_t fw_show_drv_device_ids(struct device_driver *drv, char *buf) +{ + struct hpsb_protocol_driver *driver; + struct ieee1394_device_id *id; + int length = 0; + char *scratch = buf; + + driver = container_of(drv, struct hpsb_protocol_driver, driver); + + for (id = driver->id_table; id->match_flags != 0; id++) { + int need_coma = 0; + + if (id->match_flags & IEEE1394_MATCH_VENDOR_ID) { + length += sprintf(scratch, "vendor_id=0x%06x", id->vendor_id); + scratch = buf + length; + need_coma++; + } + + if (id->match_flags & IEEE1394_MATCH_MODEL_ID) { + length += sprintf(scratch, "%smodel_id=0x%06x", + need_coma++ ? "," : "", + id->model_id); + scratch = buf + length; + } + + if (id->match_flags & IEEE1394_MATCH_SPECIFIER_ID) { + length += sprintf(scratch, "%sspecifier_id=0x%06x", + need_coma++ ? "," : "", + id->specifier_id); + scratch = buf + length; + } - if (ud->flags & UNIT_DIRECTORY_SPECIFIER_ID) - PUTF(" Software Spec ID : %06x\n", ud->specifier_id); - if (ud->flags & UNIT_DIRECTORY_VERSION) - PUTF(" Software Version : %06x\n", ud->version); - if (ud->driver) - PUTF(" Driver : %s\n", ud->driver->name); - PUTF(" Length (in quads): %d\n", ud->count); + if (id->match_flags & IEEE1394_MATCH_VERSION) { + length += sprintf(scratch, "%sversion=0x%06x", + need_coma++ ? "," : "", + id->version); + scratch = buf + length; } + if (need_coma) { + *scratch++ = '\n'; + length++; + } } - up(&nodemgr_serialize); + return length; +} +static DRIVER_ATTR(device_ids,S_IRUGO,fw_show_drv_device_ids,NULL); - len = out - page; - len -= off; - if (len < count) { - *eof = 1; - if (len <= 0) - return 0; - } else - len = count; - *start = page + off; +fw_drv_attr(name, const char *, "%s\n") + +static struct driver_attribute *const fw_drv_attrs[] = { + &driver_attr_drv_name, + &driver_attr_device_ids, +}; + + +static void nodemgr_create_drv_files(struct hpsb_protocol_driver *driver) +{ + struct device_driver *drv = &driver->driver; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_drv_attrs); i++) + driver_create_file(drv, fw_drv_attrs[i]); +} + + +static void nodemgr_remove_drv_files(struct hpsb_protocol_driver *driver) +{ + struct device_driver *drv = &driver->driver; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_drv_attrs); i++) + driver_remove_file(drv, fw_drv_attrs[i]); +} + - return len; +static void nodemgr_create_ne_dev_files(struct node_entry *ne) +{ + struct device *dev = &ne->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_ne_attrs); i++) + device_create_file(dev, fw_ne_attrs[i]); +} + + +static void nodemgr_create_host_dev_files(struct hpsb_host *host) +{ + struct device *dev = &host->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_host_attrs); i++) + device_create_file(dev, fw_host_attrs[i]); +} + + +static struct node_entry *find_entry_by_nodeid(struct hpsb_host *host, nodeid_t nodeid); + +static void nodemgr_update_host_dev_links(struct hpsb_host *host) +{ + struct device *dev = &host->device; + struct node_entry *ne; + + sysfs_remove_link(&dev->kobj, "irm_id"); + sysfs_remove_link(&dev->kobj, "busmgr_id"); + sysfs_remove_link(&dev->kobj, "host_id"); + + if ((ne = find_entry_by_nodeid(host, host->irm_id))) + sysfs_create_link(&dev->kobj, &ne->device.kobj, "irm_id"); + if ((ne = find_entry_by_nodeid(host, host->busmgr_id))) + sysfs_create_link(&dev->kobj, &ne->device.kobj, "busmgr_id"); + if ((ne = find_entry_by_nodeid(host, host->node_id))) + sysfs_create_link(&dev->kobj, &ne->device.kobj, "host_id"); } -#undef PUTF -#endif /* CONFIG_PROC_FS */ +static void nodemgr_create_ud_dev_files(struct unit_directory *ud) +{ + struct device *dev = &ud->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_ud_attrs); i++) + device_create_file(dev, fw_ud_attrs[i]); + + if (ud->flags & UNIT_DIRECTORY_SPECIFIER_ID) + device_create_file(dev, &dev_attr_ud_specifier_id); + + if (ud->flags & UNIT_DIRECTORY_VERSION) + device_create_file(dev, &dev_attr_ud_version); + + if (ud->flags & UNIT_DIRECTORY_VENDOR_ID) { + device_create_file(dev, &dev_attr_ud_vendor_id); + if (ud->flags & UNIT_DIRECTORY_VENDOR_TEXT) + device_create_file(dev, &dev_attr_ud_vendor_name); + } + + if (ud->flags & UNIT_DIRECTORY_MODEL_ID) { + device_create_file(dev, &dev_attr_ud_model_id); + if (ud->flags & UNIT_DIRECTORY_MODEL_TEXT) + device_create_file(dev, &dev_attr_ud_model_name); + } +} + + +static int nodemgr_bus_match(struct device * dev, struct device_driver * drv) +{ + struct hpsb_protocol_driver *driver; + struct unit_directory *ud; + struct ieee1394_device_id *id; + + if (dev->class_num != DEV_CLASS_UNIT_DIRECTORY) + return 0; + + ud = container_of(dev, struct unit_directory, device); + driver = container_of(drv, struct hpsb_protocol_driver, driver); + + for (id = driver->id_table; id->match_flags != 0; id++) { + if ((id->match_flags & IEEE1394_MATCH_VENDOR_ID) && + id->vendor_id != ud->vendor_id) + continue; + + if ((id->match_flags & IEEE1394_MATCH_MODEL_ID) && + id->model_id != ud->model_id) + continue; + + if ((id->match_flags & IEEE1394_MATCH_SPECIFIER_ID) && + id->specifier_id != ud->specifier_id) + continue; + + if ((id->match_flags & IEEE1394_MATCH_VERSION) && + id->version != ud->version) + continue; + + return 1; + } + + return 0; +} + + +static void nodemgr_release_ud(struct device *dev) +{ + kfree(container_of(dev, struct unit_directory, device)); +} + + +static void nodemgr_release_ne(struct device *dev) +{ + kfree(container_of(dev, struct node_entry, device)); +} + + +static void nodemgr_remove_ud(struct unit_directory *ud) +{ + struct device *dev = &ud->device; + int i; + + for (i = 0; i < ARRAY_SIZE(fw_ud_attrs); i++) + device_remove_file(dev, fw_ud_attrs[i]); + + device_remove_file(dev, &dev_attr_ud_specifier_id); + device_remove_file(dev, &dev_attr_ud_version); + device_remove_file(dev, &dev_attr_ud_vendor_id); + device_remove_file(dev, &dev_attr_ud_vendor_name); + device_remove_file(dev, &dev_attr_ud_vendor_oui); + device_remove_file(dev, &dev_attr_ud_model_id); + device_remove_file(dev, &dev_attr_ud_model_name); + + device_unregister(dev); +} + + +static void nodemgr_remove_node_uds(struct node_entry *ne) +{ + struct list_head *lh, *next; + + list_for_each_safe(lh, next, &ne->device.children) { + struct unit_directory *ud; + ud = container_of(list_to_dev(lh), struct unit_directory, device); + nodemgr_remove_ud(ud); + } +} + + +static void nodemgr_update_ud_names(struct host_info *hi, struct node_entry *ne) +{ + struct list_head *lh; + + list_for_each(lh, &ne->device.children) { + struct unit_directory *ud; + ud = container_of(list_to_dev(lh), struct unit_directory, device); + + snprintf(ud->device.name, DEVICE_NAME_SIZE, + "IEEE-1394 unit directory %d-" NODE_BUS_FMT "-%u", + hi->id, NODE_BUS_ARGS(ne->nodeid), ud->id); + } +} + + +static void nodemgr_remove_ne(struct node_entry *ne) +{ + struct device *dev = &ne->device; + int i; + + nodemgr_remove_node_uds(ne); + + for (i = 0; i < ARRAY_SIZE(fw_ne_attrs); i++) + device_remove_file(dev, fw_ne_attrs[i]); + + device_remove_file(dev, &dev_attr_ne_guid_vendor_oui); + device_remove_file(dev, &dev_attr_ne_vendor_name); + device_remove_file(dev, &dev_attr_ne_vendor_oui); + + device_unregister(dev); +} + + +static void nodemgr_remove_host_dev(struct device *dev) +{ + int i; + struct list_head *lh, *next; + + list_for_each_safe(lh, next, &dev->children) { + struct node_entry *ne; + ne = container_of(list_to_dev(lh), struct node_entry, device); + nodemgr_remove_ne(ne); + } + + for (i = 0; i < ARRAY_SIZE(fw_host_attrs); i++) + device_remove_file(dev, fw_host_attrs[i]); + + sysfs_remove_link(&dev->kobj, "irm_id"); + sysfs_remove_link(&dev->kobj, "busmgr_id"); + sysfs_remove_link(&dev->kobj, "host_id"); +} + + +static struct device nodemgr_dev_template_ud = { + .bus = &ieee1394_bus_type, + .release = nodemgr_release_ud, + .class_num = DEV_CLASS_UNIT_DIRECTORY, +}; + +static struct device nodemgr_dev_template_ne = { + .bus = &ieee1394_bus_type, + .release = nodemgr_release_ne, + .class_num = DEV_CLASS_NODE, +}; + +static struct device nodemgr_dev_template_host = { + .bus = &ieee1394_bus_type, + .class_num = DEV_CLASS_HOST, +}; + + +static int nodemgr_hotplug(struct device *dev, char **envp, int num_envp, + char *buffer, int buffer_size); + + +struct bus_type ieee1394_bus_type = { + .name = "ieee1394", + .match = nodemgr_bus_match, + .hotplug = nodemgr_hotplug, +}; -static void nodemgr_process_config_rom(struct node_entry *ne, - quadlet_t busoptions); static int nodemgr_read_quadlet(struct hpsb_host *host, nodeid_t nodeid, unsigned int generation, @@ -292,7 +595,8 @@ ret = -ENXIO; for (; size > 0; size--, address += 4, quadp++) { for (i = 0; i < 3; i++) { - ret = hpsb_read(ne->host, ne->nodeid, ne->generation, address, quadp, 4); + + ret = hpsb_node_read(ne, address, quadp, 4); if (ret != -EAGAIN) break; } @@ -349,9 +653,10 @@ if (!ne) return NULL; + memset(ne, 0, total_size); + if (size != 0) { - ne->vendor_name - = (const char *) &(ne->quadlets[2]); + ne->vendor_name = (const char *) &(ne->quadlets[2]); ne->quadlets[size] = 0; } else { ne->vendor_name = NULL; @@ -360,62 +665,129 @@ return ne; } + +static void nodemgr_process_config_rom(struct host_info *hi, + struct node_entry *ne, quadlet_t busoptions); + static struct node_entry *nodemgr_create_node(octlet_t guid, quadlet_t busoptions, - struct hpsb_host *host, - nodeid_t nodeid, unsigned int generation) + struct host_info *hi, nodeid_t nodeid, + unsigned int generation) { + struct hpsb_host *host = hi->host; struct node_entry *ne; ne = nodemgr_scan_root_directory (host, nodeid, generation); if (!ne) return NULL; - INIT_LIST_HEAD(&ne->list); - INIT_LIST_HEAD(&ne->unit_directories); - ne->tpool = &host->tpool[nodeid & NODE_MASK]; ne->host = host; ne->nodeid = nodeid; - ne->guid = guid; ne->generation = generation; - list_add_tail(&ne->list, &node_list); + ne->guid = guid; + ne->guid_vendor_id = (guid >> 40) & 0xffffff; + ne->guid_vendor_oui = nodemgr_find_oui_name(ne->guid_vendor_id); + + memcpy(&ne->device, &nodemgr_dev_template_ne, + sizeof(ne->device)); + ne->device.parent = &host->device; + snprintf(ne->device.bus_id, BUS_ID_SIZE, "%016Lx", + (unsigned long long)(ne->guid)); + snprintf(ne->device.name, DEVICE_NAME_SIZE, + "IEEE-1394 device %d-" NODE_BUS_FMT, hi->id, + NODE_BUS_ARGS(ne->nodeid)); + + device_register(&ne->device); - nodemgr_process_config_rom (ne, busoptions); + if (ne->guid_vendor_oui) + device_create_file(&ne->device, &dev_attr_ne_guid_vendor_oui); + nodemgr_create_ne_dev_files(ne); - HPSB_DEBUG("%s added: ID:BUS[" NODE_BUS_FMT "] GUID[%016Lx] [%s] (%s)", + nodemgr_process_config_rom (hi, ne, busoptions); + + nodemgr_update_ud_names(hi, ne); + + HPSB_DEBUG("%s added: ID:BUS[%d-" NODE_BUS_FMT "] GUID[%016Lx]", (host->node_id == nodeid) ? "Host" : "Node", - NODE_BUS_ARGS(nodeid), (unsigned long long)guid, - ne->oui_name, - ne->vendor_name ?: "Unknown"); + hi->id, NODE_BUS_ARGS(nodeid), (unsigned long long)guid); return ne; } -static struct node_entry *find_entry_by_guid(u64 guid) + +struct guid_search_baton { + u64 guid; + struct node_entry *ne; +}; + +static int nodemgr_guid_search_cb(struct device *dev, void *__data) { - struct list_head *lh; + struct guid_search_baton *search = __data; struct node_entry *ne; - - list_for_each(lh, &node_list) { - ne = list_entry(lh, struct node_entry, list); - if (ne->guid == guid) return ne; - } - return NULL; + if (dev->class_num != DEV_CLASS_NODE) + return 0; + + ne = container_of(dev, struct node_entry, device); + + if (ne->guid == search->guid) { + search->ne = ne; + return 1; + } + + return 0; } -static struct node_entry *find_entry_by_nodeid(nodeid_t nodeid) +static struct node_entry *find_entry_by_guid(u64 guid) { - struct list_head *lh; + struct guid_search_baton search; + + search.guid = guid; + search.ne = NULL; + + bus_for_each_dev(&ieee1394_bus_type, NULL, &search, nodemgr_guid_search_cb); + + return search.ne; +} + + +struct nodeid_search_baton { + nodeid_t nodeid; struct node_entry *ne; + struct hpsb_host *host; +}; + +static int nodemgr_nodeid_search_cb(struct device *dev, void *__data) +{ + struct nodeid_search_baton *search = __data; + struct node_entry *ne; + + if (dev->class_num != DEV_CLASS_NODE) + return 0; + + ne = container_of(dev, struct node_entry, device); - list_for_each(lh, &node_list) { - ne = list_entry(lh, struct node_entry, list); - if (ne->nodeid == nodeid) return ne; + if (ne->host == search->host && ne->nodeid == search->nodeid) { + search->ne = ne; + /* Returning 1 stops the iteration */ + return 1; } - return NULL; + return 0; +} + +static struct node_entry *find_entry_by_nodeid(struct hpsb_host *host, nodeid_t nodeid) +{ + struct nodeid_search_baton search; + + search.nodeid = nodeid; + search.ne = NULL; + search.host = host; + + bus_for_each_dev(&ieee1394_bus_type, NULL, &search, nodemgr_nodeid_search_cb); + + return search.ne; } static struct unit_directory *nodemgr_scan_unit_directory @@ -500,28 +872,27 @@ return NULL; } } + total_size += count * sizeof (quadlet_t); ud = kmalloc (total_size, GFP_KERNEL); + if (ud != NULL) { - memset (ud, 0, sizeof *ud); + memset (ud, 0, total_size); ud->flags = flags; - ud->count = count; + ud->length = count; ud->vendor_name_size = vendor_name_size; ud->model_name_size = model_name_size; - /* If there is no vendor name in the unit directory, - use the one in the root directory. */ - ud->vendor_name = ne->vendor_name; } + return ud; } + /* This implementation currently only scans the config rom and its * immediate unit directories looking for software_id and - * software_version entries, in order to get driver autoloading working. - */ - -static void nodemgr_process_unit_directory(struct node_entry *ne, - octlet_t address) + * software_version entries, in order to get driver autoloading working. */ +static void nodemgr_process_unit_directory(struct host_info *hi, struct node_entry *ne, + octlet_t address, unsigned int id) { struct unit_directory *ud; quadlet_t quad; @@ -533,6 +904,7 @@ ud->ne = ne; ud->address = address; + ud->id = id; if (nodemgr_read_quadlet(ne->host, ne->nodeid, ne->generation, address, &quad)) @@ -556,14 +928,16 @@ case CONFIG_ROM_VENDOR_ID: ud->vendor_id = value; ud->flags |= UNIT_DIRECTORY_VENDOR_ID; + + if (ud->vendor_id) + ud->vendor_oui = nodemgr_find_oui_name(ud->vendor_id); + if ((ud->flags & UNIT_DIRECTORY_VENDOR_TEXT) != 0) { length--; address += 4; - quadp = &(ud->quadlets[ud->count]); - if (nodemgr_read_text_leaf(ne, address, - quadp) == 0 - && quadp[0] == 0 - && quadp[1] == 0) { + quadp = &(ud->quadlets[ud->length]); + if (nodemgr_read_text_leaf(ne, address, quadp) == 0 + && quadp[0] == 0 && quadp[1] == 0) { /* We only support minimal ASCII and English. */ quadp[ud->vendor_name_size] = 0; @@ -579,11 +953,9 @@ if ((ud->flags & UNIT_DIRECTORY_MODEL_TEXT) != 0) { length--; address += 4; - quadp = &(ud->quadlets[ud->count + ud->vendor_name_size + 1]); - if (nodemgr_read_text_leaf(ne, address, - quadp) == 0 - && quadp[0] == 0 - && quadp[1] == 0) { + quadp = &(ud->quadlets[ud->length + ud->vendor_name_size + 1]); + if (nodemgr_read_text_leaf(ne, address, quadp) == 0 + && quadp[0] == 0 && quadp[1] == 0) { /* We only support minimal ASCII and English. */ quadp[ud->model_name_size] = 0; @@ -619,8 +991,17 @@ } } - list_add_tail(&ud->node_list, &ne->unit_directories); - list_add_tail(&ud->driver_list, &unit_directory_list); + memcpy(&ud->device, &nodemgr_dev_template_ud, + sizeof(ud->device)); + ud->device.parent = &ne->device; + snprintf(ud->device.bus_id, BUS_ID_SIZE, "%s-%u", + ne->device.bus_id, ud->id); + + device_register(&ud->device); + + if (ud->vendor_oui) + device_create_file(&ud->device, &dev_attr_ud_vendor_oui); + nodemgr_create_ud_dev_files(ud); return; @@ -657,11 +1038,12 @@ return; } -static void nodemgr_process_root_directory(struct node_entry *ne) +static void nodemgr_process_root_directory(struct host_info *hi, struct node_entry *ne) { octlet_t address; quadlet_t quad; int length; + unsigned int ud_id = 0; address = CSR_REGISTER_BASE + CSR_CONFIG_ROM; @@ -688,24 +1070,23 @@ switch (code) { case CONFIG_ROM_VENDOR_ID: ne->vendor_id = value; -#ifdef CONFIG_IEEE1394_OUI_DB - ne->oui_name = nodemgr_find_oui_name(value); -#else - ne->oui_name = "Unknown"; -#endif + + if (ne->vendor_id) + ne->vendor_oui = nodemgr_find_oui_name(ne->vendor_id); + /* Now check if there is a vendor name text string. */ if (ne->vendor_name != NULL) { length--; address += 4; - if (nodemgr_read_text_leaf(ne, address, - ne->quadlets) - != 0 - || ne->quadlets [0] != 0 - || ne->quadlets [1] != 0) + if (nodemgr_read_text_leaf(ne, address, ne->quadlets) != 0 + || ne->quadlets[0] != 0 || ne->quadlets[1] != 0) /* We only support minimal ASCII and English. */ ne->vendor_name = NULL; + else + device_create_file(&ne->device, + &dev_attr_ne_vendor_name); } break; @@ -714,7 +1095,7 @@ break; case CONFIG_ROM_UNIT_DIRECTORY: - nodemgr_process_unit_directory(ne, address + value * 4); + nodemgr_process_unit_directory(hi, ne, address + value * 4, ud_id++); break; case CONFIG_ROM_DESCRIPTOR_LEAF: @@ -729,208 +1110,94 @@ #ifdef CONFIG_HOTPLUG -static void nodemgr_call_policy(char *verb, struct unit_directory *ud) +static int nodemgr_hotplug(struct device *dev, char **envp, int num_envp, + char *buffer, int buffer_size) { - char *argv [3], **envp, *buf, *scratch; - int i = 0, value; - - /* User requested to disable hotplug when module was loaded. */ - if (nodemgr_disable_hotplug) - return; - - if (!hotplug_path [0]) - return; - if (!current->fs->root) - return; - if (!(envp = (char **) kmalloc(20 * sizeof (char *), GFP_KERNEL))) { - HPSB_DEBUG ("ENOMEM"); - return; - } - if (!(buf = kmalloc(256, GFP_KERNEL))) { - kfree(envp); - HPSB_DEBUG("ENOMEM2"); - return; - } + struct unit_directory *ud; + char *scratch; + int i = 0; + int length = 0; + + if (!dev) + return -ENODEV; + + if (dev->class_num != DEV_CLASS_UNIT_DIRECTORY) + return -ENODEV; + + ud = container_of(dev, struct unit_directory, device); + + scratch = buffer; + +#define PUT_ENVP(fmt,val) \ +do { \ + envp[i++] = scratch; \ + length += snprintf(scratch, buffer_size - length, \ + fmt, val); \ + if ((buffer_size - length <= 0) || (i >= num_envp)) \ + return -ENOMEM; \ + ++length; \ + scratch = buffer + length; \ +} while(0) + + PUT_ENVP("VENDOR_ID=%06x", ud->vendor_id); + PUT_ENVP("MODEL_ID=%06x", ud->model_id); + PUT_ENVP("GUID=%016Lx", (unsigned long long)ud->ne->guid); + PUT_ENVP("SPECIFIER_ID=%06x", ud->specifier_id); + PUT_ENVP("VERSION=%06x", ud->version); - /* only one standardized param to hotplug command: type */ - argv[0] = hotplug_path; - argv[1] = "ieee1394"; - argv[2] = 0; - - /* minimal command environment */ - envp[i++] = "HOME=/"; - envp[i++] = "PATH=/sbin:/bin:/usr/sbin:/usr/bin"; +#undef PUT_ENVP -#ifdef CONFIG_IEEE1394_VERBOSEDEBUG - /* hint that policy agent should enter no-stdout debug mode */ - envp[i++] = "DEBUG=kernel"; -#endif - /* extensible set of named bus-specific parameters, - * supporting multiple driver selection algorithms. - */ - scratch = buf; - - envp[i++] = scratch; - scratch += sprintf(scratch, "ACTION=%s", verb) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "VENDOR_ID=%06x", ud->ne->vendor_id) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "GUID=%016Lx", (long long unsigned)ud->ne->guid) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "SPECIFIER_ID=%06x", ud->specifier_id) + 1; - envp[i++] = scratch; - scratch += sprintf(scratch, "VERSION=%06x", ud->version) + 1; - envp[i++] = 0; + envp[i] = 0; - /* NOTE: user mode daemons can call the agents too */ -#ifdef CONFIG_IEEE1394_VERBOSEDEBUG - HPSB_DEBUG("NodeMgr: %s %s %016Lx", argv[0], verb, (long long unsigned)ud->ne->guid); -#endif - value = call_usermodehelper(argv[0], argv, envp, 0); - kfree(buf); - kfree(envp); - if (value != 0) - HPSB_DEBUG("NodeMgr: hotplug policy returned %d", value); + return 0; } #else -static inline void -nodemgr_call_policy(char *verb, struct unit_directory *ud) +static int nodemgr_hotplug(struct device *dev, char **envp, int num_envp, + char *buffer, int buffer_size) { -#ifdef CONFIG_IEEE1394_VERBOSEDEBUG - HPSB_DEBUG("NodeMgr: nodemgr_call_policy(): hotplug not enabled"); -#endif - return; + return -ENODEV; } #endif /* CONFIG_HOTPLUG */ -static void nodemgr_claim_unit_directory(struct unit_directory *ud, - struct hpsb_protocol_driver *driver) -{ - ud->driver = driver; - list_del(&ud->driver_list); - list_add_tail(&ud->driver_list, &driver->unit_directories); -} - -static void nodemgr_release_unit_directory(struct unit_directory *ud) -{ - ud->driver = NULL; - list_del(&ud->driver_list); - list_add_tail(&ud->driver_list, &unit_directory_list); -} - -void hpsb_release_unit_directory(struct unit_directory *ud) -{ - down(&nodemgr_serialize); - nodemgr_release_unit_directory(ud); - up(&nodemgr_serialize); -} -static void nodemgr_free_unit_directories(struct node_entry *ne) +static int nodemgr_alloc_host_num(void) { + int hostnum = 0; + unsigned long flags; struct list_head *lh; - struct unit_directory *ud; - lh = ne->unit_directories.next; - while (lh != &ne->unit_directories) { - ud = list_entry(lh, struct unit_directory, node_list); - lh = lh->next; - if (ud->driver && ud->driver->disconnect) - ud->driver->disconnect(ud); - nodemgr_release_unit_directory(ud); - nodemgr_call_policy("remove", ud); - list_del(&ud->driver_list); - kfree(ud); - } -} - -static struct ieee1394_device_id * -nodemgr_match_driver(struct hpsb_protocol_driver *driver, - struct unit_directory *ud) -{ - struct ieee1394_device_id *id; - - for (id = driver->id_table; id->match_flags != 0; id++) { - if ((id->match_flags & IEEE1394_MATCH_VENDOR_ID) && - id->vendor_id != ud->vendor_id) - continue; + spin_lock_irqsave (&host_info_lock, flags); - if ((id->match_flags & IEEE1394_MATCH_MODEL_ID) && - id->model_id != ud->model_id) - continue; + while (1) { + int found = 0; - if ((id->match_flags & IEEE1394_MATCH_SPECIFIER_ID) && - id->specifier_id != ud->specifier_id) - continue; + list_for_each(lh, &host_info_list) { + struct host_info *hi = list_entry(lh, struct host_info, list); + if (hi->id == hostnum) { + found = 1; + break; + } + } - if ((id->match_flags & IEEE1394_MATCH_VERSION) && - id->version != ud->version) - continue; + if (!found) + break; - return id; + hostnum++; } - return NULL; -} - -static struct hpsb_protocol_driver * -nodemgr_find_driver(struct unit_directory *ud) -{ - struct list_head *l; - struct hpsb_protocol_driver *match, *driver; - struct ieee1394_device_id *device_id; - - match = NULL; - list_for_each(l, &driver_list) { - driver = list_entry(l, struct hpsb_protocol_driver, list); - device_id = nodemgr_match_driver(driver, ud); - - if (device_id != NULL) { - match = driver; - break; - } - } + spin_unlock_irqrestore (&host_info_lock, flags); - return match; + return hostnum; } -static void nodemgr_bind_drivers (struct node_entry *ne) -{ - struct list_head *lh; - struct hpsb_protocol_driver *driver; - struct unit_directory *ud; - - list_for_each(lh, &ne->unit_directories) { - ud = list_entry(lh, struct unit_directory, node_list); - driver = nodemgr_find_driver(ud); - if (driver != NULL && driver->probe(ud) == 0) - nodemgr_claim_unit_directory(ud, driver); - nodemgr_call_policy("add", ud); - } -} int hpsb_register_protocol(struct hpsb_protocol_driver *driver) { - struct unit_directory *ud; - struct list_head *lh; - - if (down_interruptible(&nodemgr_serialize)) - return -EINTR; - - list_add_tail(&driver->list, &driver_list); - - INIT_LIST_HEAD(&driver->unit_directories); - lh = unit_directory_list.next; - while (lh != &unit_directory_list) { - ud = list_entry(lh, struct unit_directory, driver_list); - lh = lh->next; - if (nodemgr_match_driver(driver, ud) && driver->probe(ud) == 0) - nodemgr_claim_unit_directory(ud, driver); - } - - up(&nodemgr_serialize); + driver_register(&driver->driver); + nodemgr_create_drv_files(driver); /* * Right now registration always succeeds, but maybe we should @@ -942,26 +1209,14 @@ void hpsb_unregister_protocol(struct hpsb_protocol_driver *driver) { - struct list_head *lh; - struct unit_directory *ud; - - down(&nodemgr_serialize); - - list_del(&driver->list); - lh = driver->unit_directories.next; - while (lh != &driver->unit_directories) { - ud = list_entry(lh, struct unit_directory, driver_list); - lh = lh->next; - if (ud->driver && ud->driver->disconnect) - ud->driver->disconnect(ud); - nodemgr_release_unit_directory(ud); - } - - up(&nodemgr_serialize); + nodemgr_remove_drv_files(driver); + /* This will subsequently disconnect all devices that our driver + * is attached to. */ + driver_unregister(&driver->driver); } -static void nodemgr_process_config_rom(struct node_entry *ne, - quadlet_t busoptions) +static void nodemgr_process_config_rom(struct host_info *hi, + struct node_entry *ne, quadlet_t busoptions) { ne->busopt.irmc = (busoptions >> 31) & 1; ne->busopt.cmc = (busoptions >> 30) & 1; @@ -981,16 +1236,42 @@ ne->busopt.cyc_clk_acc, ne->busopt.max_rec, ne->busopt.generation, ne->busopt.lnkspd); #endif + device_remove_file(&ne->device, &dev_attr_ne_vendor_oui); - /* - * When the config rom changes we disconnect all drivers and - * free the cached unit directories and reread the whole - * thing. If this was a new device, the call to - * nodemgr_disconnect_drivers is a no-op and all is well. - */ - nodemgr_free_unit_directories(ne); - nodemgr_process_root_directory(ne); - nodemgr_bind_drivers(ne); + nodemgr_process_root_directory(hi, ne); + + if (ne->vendor_oui) + device_create_file(&ne->device, &dev_attr_ne_vendor_oui); +} + + +/* Searches the list of ud's that match a ne as the parent. If the ud has + * a driver associated with it, we call that driver's update function + * with the ud as the argument. */ +static int nodemgr_driver_search_cb(struct device *dev, void *__data) +{ + struct node_entry *ne = __data; + struct unit_directory *ud; + + if (dev->class_num != DEV_CLASS_UNIT_DIRECTORY) + return 0; + + ud = container_of(dev, struct unit_directory, device); + + if (&ne->device != ud->device.parent) + return 0; + + if (ud->device.driver) { + struct hpsb_protocol_driver *pdrv; + + pdrv = container_of(ud->device.driver, + struct hpsb_protocol_driver, driver); + + if (pdrv->update) + pdrv->update(ud); + } + + return 0; } /* @@ -1001,29 +1282,42 @@ * the to take whatever actions required. */ static void nodemgr_update_node(struct node_entry *ne, quadlet_t busoptions, - struct hpsb_host *host, - nodeid_t nodeid, unsigned int generation) + struct host_info *hi, nodeid_t nodeid, + unsigned int generation) { - struct list_head *lh; - struct unit_directory *ud; + int update_ud_names = 0; if (ne->nodeid != nodeid) { + snprintf(ne->device.name, DEVICE_NAME_SIZE, + "IEEE-1394 device %d-" NODE_BUS_FMT, + hi->id, NODE_BUS_ARGS(ne->nodeid)); HPSB_DEBUG("Node " NODE_BUS_FMT " changed to " NODE_BUS_FMT, NODE_BUS_ARGS(ne->nodeid), NODE_BUS_ARGS(nodeid)); ne->nodeid = nodeid; + + update_ud_names++; + } + + if (ne->busopt.generation != ((busoptions >> 4) & 0xf)) { + /* If the node's configrom generation has changed, we + * unregister all the unit directories. */ + nodemgr_remove_node_uds(ne); + + /* This will re-register our unitdir's */ + nodemgr_process_config_rom (hi, ne, busoptions); + + update_ud_names++; } - if (ne->busopt.generation != ((busoptions >> 4) & 0xf)) - nodemgr_process_config_rom (ne, busoptions); + if (update_ud_names) + nodemgr_update_ud_names(hi, ne); /* Since that's done, we can declare this record current */ ne->generation = generation; - list_for_each (lh, &ne->unit_directories) { - ud = list_entry (lh, struct unit_directory, node_list); - if (ud->driver != NULL && ud->driver->update != NULL) - ud->driver->update(ud); - } + /* Update unit_dirs with attached drivers */ + bus_for_each_dev(&ieee1394_bus_type, NULL, ne, + nodemgr_driver_search_cb); } static int read_businfo_block(struct hpsb_host *host, nodeid_t nodeid, unsigned int generation, @@ -1087,24 +1381,13 @@ return 0; } -static void nodemgr_remove_node(struct node_entry *ne) -{ - HPSB_DEBUG("Device removed: Node[" NODE_BUS_FMT "] GUID[%016Lx] [%s]", - NODE_BUS_ARGS(ne->nodeid), (unsigned long long)ne->guid, - ne->vendor_name ?: "Unknown"); - - nodemgr_free_unit_directories(ne); - list_del(&ne->list); - kfree(ne); - - return; -} /* This is where we probe the nodes for their information and provided * features. */ -static void nodemgr_node_probe_one(struct hpsb_host *host, +static void nodemgr_node_probe_one(struct host_info *hi, nodeid_t nodeid, int generation) { + struct hpsb_host *host = hi->host; struct node_entry *ne; quadlet_t buffer[5]; octlet_t guid; @@ -1132,58 +1415,48 @@ ne = find_entry_by_guid(guid); if (!ne) - nodemgr_create_node(guid, buffer[2], host, nodeid, generation); + nodemgr_create_node(guid, buffer[2], hi, nodeid, generation); else - nodemgr_update_node(ne, buffer[2], host, nodeid, generation); + nodemgr_update_node(ne, buffer[2], hi, nodeid, generation); return; } -static void nodemgr_node_probe_cleanup(struct hpsb_host *host, unsigned int generation) + +struct cleanup_baton { + unsigned int generation; + struct hpsb_host *host; + struct node_entry *ne; +}; + +static int nodemgr_remove_node(struct device *dev, void *__data) { - struct list_head *lh, *next; + struct cleanup_baton *cleanup = __data; struct node_entry *ne; - /* Now check to see if we have any nodes that aren't referenced - * any longer. */ - list_for_each_safe(lh, next, &node_list) { - ne = list_entry(lh, struct node_entry, list); + if (dev->class_num != DEV_CLASS_NODE) + return 0; - /* Only checking this host */ - if (ne->host != host) - continue; + ne = container_of(dev, struct node_entry, device); + + if (ne->host != cleanup->host) + return 0; - /* If the generation didn't get updated, then either the - * node was removed, or it failed the above probe. Either - * way, we remove references to it, since they are - * invalid. */ - if (ne->generation != generation) - nodemgr_remove_node(ne); + if (ne->generation != cleanup->generation) { + cleanup->ne = ne; + return 1; } - return; + return 0; } -static void nodemgr_node_probe(struct hpsb_host *host) + +static void nodemgr_node_probe(struct host_info *hi, int generation) { int count; + struct hpsb_host *host = hi->host; struct selfid *sid = (struct selfid *)host->topology_map; nodeid_t nodeid = LOCAL_BUS; - unsigned int generation; - - /* Pause for 1/4 second, to make sure things settle down. If - * schedule_timeout returns non-zero, it means we caught a signal - * and need to return. */ - set_current_state(TASK_INTERRUPTIBLE); - if (schedule_timeout (HZ/4)) - return; - - /* Now get the generation in which the node ID's we collect - * are valid. During the bus scan we will use this generation - * for the read transactions, so that if another reset occurs - * during the scan the transactions will fail instead of - * returning bogus data. */ - generation = get_hpsb_generation(host); /* Scan each node on the bus */ for (count = host->selfid_count; count; count--, sid++) { @@ -1194,8 +1467,7 @@ nodeid++; continue; } - - nodemgr_node_probe_one(host, nodeid++, generation); + nodemgr_node_probe_one(hi, nodeid++, generation); } /* If we had a bus reset while we were scanning the bus, it is @@ -1204,8 +1476,33 @@ * were still on the bus. The bus reset increased * hi->reset_sem, so there's a bus scan pending which will do * the clean up eventually. */ - if (generation == get_hpsb_generation(host)) - nodemgr_node_probe_cleanup(host, generation); + if (generation == get_hpsb_generation(host)) { + struct cleanup_baton cleanup; + + cleanup.generation = generation; + cleanup.host = host; + + /* This will iterate until all devices that do not match + * the generation are removed. */ + while (bus_for_each_dev(&ieee1394_bus_type, NULL, &cleanup, + nodemgr_remove_node)) { + struct node_entry *ne = cleanup.ne; + + HPSB_DEBUG("Device removed: ID:BUS[" NODE_BUS_FMT "] GUID[%016Lx]", + NODE_BUS_ARGS(ne->nodeid), (unsigned long long)ne->guid); + + nodemgr_remove_ne(ne); + } + + /* Now let's tell the bus to rescan our devices. This may + * seem like overhead, but the driver-model core will only + * scan a device for a driver when either the device is + * added, or when a new driver is added. A bus reset is a + * good reason to rescan devices that were there before. + * For example, an sbp2 device may become available for + * login, if the host that held it was just removed. */ + bus_rescan_devices(&ieee1394_bus_type); + } return; } @@ -1226,8 +1523,7 @@ hpsb_write(host, LOCAL_BUS | ALL_NODES, get_hpsb_generation(host), (CSR_REGISTER_BASE | CSR_BROADCAST_CHANNEL), - &bc, - sizeof(quadlet_t)); + &bc, sizeof(quadlet_t)); } /* We need to ensure that if we are not the IRM, that the IRM node is capable of @@ -1249,7 +1545,7 @@ if (status < 0 || !(be32_to_cpu(bc) & 0x80000000)) { /* The root node does not have a valid BROADCAST_CHANNEL * register and we do, so reset the bus with force_root set */ - HPSB_INFO("Remote root is not IRM capable, resetting..."); + HPSB_DEBUG("Remote root is not IRM capable, resetting..."); hpsb_reset_bus(host, LONG_RESET_FORCE_ROOT); return 0; } @@ -1259,27 +1555,58 @@ static int nodemgr_host_thread(void *__hi) { struct host_info *hi = (struct host_info *)__hi; + struct hpsb_host *host = hi->host; /* No userlevel access needed */ - daemonize("knodemgrd"); + daemonize(hi->daemon_name); allow_signal(SIGTERM); - + + /* Setup our device-model entries */ + device_register(&host->device); + nodemgr_create_host_dev_files(host); + /* Sit and wait for a signal to probe the nodes on the bus. This * happens when we get a bus reset. */ while (!down_interruptible(&hi->reset_sem) && !down_interruptible(&nodemgr_serialize)) { + unsigned int generation; + int i; - if (!nodemgr_check_root_capability(hi->host)) { + /* Pause for 1/4 second, to make sure things settle down. */ + for (i = HZ/4; i > 0; i-= HZ/16) { + set_current_state(TASK_INTERRUPTIBLE); + if (schedule_timeout(HZ/16)) + goto caught_signal; + + /* Now get the generation in which the node ID's we collect + * are valid. During the bus scan we will use this generation + * for the read transactions, so that if another reset occurs + * during the scan the transactions will fail instead of + * returning bogus data. */ + generation = get_hpsb_generation(hi->host); + + /* If we get a reset before we are done waiting, then + * start the the waiting over again */ + while (!down_trylock(&hi->reset_sem)) + i = HZ/4; + } + + if (!nodemgr_check_root_capability(host)) { /* Do nothing, we are resetting */ up(&nodemgr_serialize); continue; } - nodemgr_node_probe(hi->host); - nodemgr_do_irm_duties(hi->host); + nodemgr_node_probe(hi, generation); + nodemgr_do_irm_duties(host); + + /* Update some of our sysfs symlinks */ + nodemgr_update_host_dev_links(host); up(&nodemgr_serialize); } + +caught_signal: #ifdef CONFIG_IEEE1394_VERBOSEDEBUG HPSB_DEBUG ("NodeMgr: Exiting thread for %s", hi->host->driver->name); #endif @@ -1298,24 +1625,24 @@ return ne; } -struct node_entry *hpsb_nodeid_get_entry(nodeid_t nodeid) +struct node_entry *hpsb_nodeid_get_entry(struct hpsb_host *host, nodeid_t nodeid) { struct node_entry *ne; down(&nodemgr_serialize); - ne = find_entry_by_nodeid(nodeid); + ne = find_entry_by_nodeid(host, nodeid); up(&nodemgr_serialize); return ne; } -struct node_entry *hpsb_check_nodeid(nodeid_t nodeid) +struct node_entry *hpsb_check_nodeid(struct hpsb_host *host, nodeid_t nodeid) { struct node_entry *ne; if (down_trylock(&nodemgr_serialize)) return NULL; - ne = find_entry_by_nodeid(nodeid); + ne = find_entry_by_nodeid(host, nodeid); up(&nodemgr_serialize); return ne; @@ -1389,23 +1716,38 @@ /* Initialize the hostinfo here and start the thread. The * thread blocks on the reset semaphore until a bus reset * happens. */ + memset(hi, 0, sizeof(*hi)); hi->host = host; INIT_LIST_HEAD(&hi->list); init_completion(&hi->exited); sema_init(&hi->reset_sem, 0); + hi->id = nodemgr_alloc_host_num(); + + memcpy(&host->device, &nodemgr_dev_template_host, + sizeof(host->device)); + host->device.parent = &host->pdev->dev; + snprintf(host->device.bus_id, BUS_ID_SIZE, "fw-host%d", hi->id); + snprintf(host->device.name, DEVICE_NAME_SIZE, "IEEE-1394 Host %s-%d", + host->driver->name, hi->id); + + sprintf(hi->daemon_name, "knodemgrd_%d", hi->id); + + spin_lock_irqsave (&host_info_lock, flags); + hi->pid = kernel_thread(nodemgr_host_thread, hi, CLONE_FS | CLONE_FILES | CLONE_SIGHAND); if (hi->pid < 0) { - HPSB_ERR ("NodeMgr: failed to start NodeMgr thread for %s", - host->driver->name); + HPSB_ERR ("NodeMgr: failed to start %s thread for %s", + hi->daemon_name, host->driver->name); kfree(hi); + spin_unlock_irqrestore (&host_info_lock, flags); return; } - spin_lock_irqsave (&host_info_lock, flags); list_add_tail (&hi->list, &host_info_list); + spin_unlock_irqrestore (&host_info_lock, flags); return; @@ -1442,7 +1784,6 @@ static void nodemgr_remove_host(struct hpsb_host *host) { struct list_head *lh, *next; - struct node_entry *ne; unsigned long flags; struct host_info *hi = NULL; @@ -1455,31 +1796,20 @@ break; } } - spin_unlock_irqrestore (&host_info_lock, flags); if (hi) { if (hi->pid >= 0) { kill_proc(hi->pid, SIGTERM, 1); wait_for_completion(&hi->exited); + nodemgr_remove_host_dev(&host->device); + device_unregister(&host->device); } kfree(hi); - } - else + } else HPSB_ERR("NodeMgr: host %s does not exist, cannot remove", host->driver->name); - down(&nodemgr_serialize); - - /* Even if we fail the host_info part, remove all the node - * entries. */ - list_for_each_safe(lh, next, &node_list) { - ne = list_entry(lh, struct node_entry, list); - - if (ne->host == host) - nodemgr_remove_node(ne); - } - - up(&nodemgr_serialize); + spin_unlock_irqrestore (&host_info_lock, flags); return; } @@ -1492,15 +1822,10 @@ static struct hpsb_highlevel *hl; -#define PROC_ENTRY "devices" - -void init_ieee1394_nodemgr(int disable_hotplug) +void init_ieee1394_nodemgr(void) { - nodemgr_disable_hotplug = disable_hotplug; -#ifdef CONFIG_PROC_FS - if (!create_proc_read_entry(PROC_ENTRY, 0444, ieee1394_procfs_entry, raw1394_read_proc, NULL)) - HPSB_ERR("Can't create devices procfs entry"); -#endif + bus_register(&ieee1394_bus_type); + hl = hpsb_register_highlevel("Node manager", &nodemgr_ops); if (!hl) { HPSB_ERR("NodeMgr: out of memory during ieee1394 initialization"); @@ -1510,7 +1835,6 @@ void cleanup_ieee1394_nodemgr(void) { hpsb_unregister_highlevel(hl); -#ifdef CONFIG_PROC_FS - remove_proc_entry(PROC_ENTRY, ieee1394_procfs_entry); -#endif + + bus_unregister(&ieee1394_bus_type); } diff -Nru a/drivers/ieee1394/nodemgr.h b/drivers/ieee1394/nodemgr.h --- a/drivers/ieee1394/nodemgr.h Sat Apr 12 14:44:08 2003 +++ b/drivers/ieee1394/nodemgr.h Sat Apr 12 14:44:08 2003 @@ -20,6 +20,8 @@ #ifndef _IEEE1394_NODEMGR_H #define _IEEE1394_NODEMGR_H +#include + #define CONFIG_ROM_BUS_INFO_LENGTH(q) ((q) >> 24) #define CONFIG_ROM_BUS_CRC_LENGTH(q) (((q) >> 16) & 0xff) #define CONFIG_ROM_BUS_CRC(q) ((q) & 0xffff) @@ -76,6 +78,12 @@ u16 max_rec; /* Maximum packet size node can receive */ }; +enum { + DEV_CLASS_NODE, + DEV_CLASS_UNIT_DIRECTORY, + DEV_CLASS_HOST, +}; + #define UNIT_DIRECTORY_VENDOR_ID 0x01 #define UNIT_DIRECTORY_MODEL_ID 0x02 #define UNIT_DIRECTORY_SPECIFIER_ID 0x04 @@ -87,18 +95,16 @@ * A unit directory corresponds to a protocol supported by the * node. If a node supports eg. IP/1394 and AV/C, its config rom has a * unit directory for each of these protocols. - * - * Unit directories appear on two types of lists: for each node we - * maintain a list of the unit directories found in its config rom and - * for each driver we maintain a list of the unit directories - * (ie. devices) the driver manages. */ struct unit_directory { struct node_entry *ne; /* The node which this directory belongs to */ octlet_t address; /* Address of the unit directory on the node */ u8 flags; /* Indicates which entries were read */ + quadlet_t vendor_id; const char *vendor_name; + const char *vendor_oui; + int vendor_name_size; quadlet_t model_id; const char *model_name; @@ -106,22 +112,21 @@ quadlet_t specifier_id; quadlet_t version; - struct hpsb_protocol_driver *driver; - void *driver_data; + unsigned int id; - /* For linking the nodes managed by the driver, or unmanaged nodes */ - struct list_head driver_list; + int length; /* Number of quadlets */ - /* For linking directories belonging to a node */ - struct list_head node_list; + struct device device; - int count; /* Number of quadlets */ + /* XXX Must be last in the struct! */ quadlet_t quadlets[0]; }; struct node_entry { - struct list_head list; u64 guid; /* GUID of this node */ + u32 guid_vendor_id; /* Top 24bits of guid */ + const char *guid_vendor_oui; /* OUI name of guid vendor id */ + struct hpsb_host *host; /* Host this node is attached to */ nodeid_t nodeid; /* NodeID */ struct bus_options busopt; /* Bus Options */ @@ -129,14 +134,16 @@ /* The following is read from the config rom */ u32 vendor_id; + const char *vendor_name; + const char *vendor_oui; + u32 capabilities; - struct list_head unit_directories; struct hpsb_tlabel_pool *tpool; - const char *vendor_name; - char *oui_name; + struct device device; + /* XXX Must be last in the struct! */ quadlet_t quadlets[0]; }; @@ -154,11 +161,11 @@ /* Same as above, but use the nodeid to get an node entry. This is not * fool-proof by itself, since the nodeid can change. */ -struct node_entry *hpsb_nodeid_get_entry(nodeid_t nodeid); +struct node_entry *hpsb_nodeid_get_entry(struct hpsb_host *host, nodeid_t nodeid); /* Same as above except that it will not block waiting for the nodemgr * serialize semaphore. */ -struct node_entry *hpsb_check_nodeid(nodeid_t nodeid); +struct node_entry *hpsb_check_nodeid(struct hpsb_host *host, nodeid_t nodeid); /* * If the entry refers to a local host, this function will return the pointer @@ -188,7 +195,7 @@ int extcode, quadlet_t *data, quadlet_t arg); -void init_ieee1394_nodemgr(int disable_hotplug); +void init_ieee1394_nodemgr(void); void cleanup_ieee1394_nodemgr(void); #endif /* _IEEE1394_NODEMGR_H */ diff -Nru a/drivers/ieee1394/ohci1394.c b/drivers/ieee1394/ohci1394.c --- a/drivers/ieee1394/ohci1394.c Sat Apr 12 14:44:09 2003 +++ b/drivers/ieee1394/ohci1394.c Sat Apr 12 14:44:09 2003 @@ -80,6 +80,10 @@ * Manfred Weihs * . Reworked code for initiating bus resets * (long, short, with or without hold-off) + * + * Nandu Santhi + * . Added support for nVidia nForce2 onboard Firewire chipset + * */ #include @@ -90,6 +94,7 @@ #include #include #include +#include #include #include #include @@ -145,7 +150,7 @@ #define OHCI_DMA_FREE(fmt, args...) \ HPSB_ERR("%s(%s)free(%d): "fmt, OHCI1394_DRIVER_NAME, __FUNCTION__, \ --global_outstanding_dmas, ## args) -u32 global_outstanding_dmas = 0; +static int global_outstanding_dmas = 0; #else #define OHCI_DMA_ALLOC(fmt, args...) #define OHCI_DMA_FREE(fmt, args...) @@ -160,12 +165,12 @@ printk(level "%s_%d: " fmt "\n" , OHCI1394_DRIVER_NAME, card , ## args) static char version[] __devinitdata = - "$Rev: 801 $ Ben Collins "; + "$Rev: 858 $ Ben Collins "; /* Module Parameters */ -MODULE_PARM(phys_dma,"i"); -MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1)."); static int phys_dma = 1; +module_param(phys_dma, int, 0644); +MODULE_PARM_DESC(phys_dma, "Enable physical dma (default = 1)."); static void dma_trm_tasklet(unsigned long data); static void dma_trm_reset(struct dma_trm_ctx *d); @@ -354,10 +359,10 @@ static void ohci_soft_reset(struct ti_ohci *ohci) { int i; - reg_write(ohci, OHCI1394_HCControlSet, 0x00010000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_softReset); for (i = 0; i < OHCI_LOOP_COUNT; i++) { - if (reg_read(ohci, OHCI1394_HCControlSet) & 0x00010000) + if (!reg_read(ohci, OHCI1394_HCControlSet) & OHCI1394_HCControl_softReset) break; mdelay(1); } @@ -514,7 +519,7 @@ reg_write(ohci, OHCI1394_NodeID, 0x0000ffc0); /* Enable posted writes */ - reg_write(ohci, OHCI1394_HCControlSet, 0x00040000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_postedWriteEnable); /* Clear link control register */ reg_write(ohci, OHCI1394_LinkControlClear, 0xffffffff); @@ -577,7 +582,7 @@ (OHCI1394_MAX_PHYS_RESP_RETRIES<<8)); /* We don't want hardware swapping */ - reg_write(ohci, OHCI1394_HCControlClear, 0x40000000); + reg_write(ohci, OHCI1394_HCControlClear, OHCI1394_HCControl_noByteSwap); /* Enable interrupts */ reg_write(ohci, OHCI1394_IntMaskSet, @@ -594,7 +599,7 @@ OHCI1394_cycleInconsistent); /* Enable link */ - reg_write(ohci, OHCI1394_HCControlSet, 0x00020000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_linkEnable); buf = reg_read(ohci, OHCI1394_Version); PRINT(KERN_INFO, ohci->id, "OHCI-1394 %d.%d (PCI): IRQ=[%d] " @@ -1190,10 +1195,11 @@ /* iso->irq_interval is in packets - translate that to blocks */ /* (err, sort of... 1 is always the safest value) */ recv->block_irq_interval = iso->irq_interval / recv->nblocks; + if(recv->block_irq_interval*4 > recv->nblocks) + recv->block_irq_interval = recv->nblocks/4; if(recv->block_irq_interval < 1) recv->block_irq_interval = 1; - else if(recv->block_irq_interval*4 > recv->nblocks) - recv->block_irq_interval = recv->nblocks/4; + } else { int max_packet_size; @@ -2291,17 +2297,35 @@ * selfID phase, so we disable busReset interrupts, to * avoid burying the cpu in interrupt requests. */ spin_lock_irqsave(&ohci->event_lock, flags); - reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset); - if (ohci->dev->vendor == PCI_VENDOR_ID_APPLE && - ohci->dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) { - udelay(10); - while(reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) { - reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset); + reg_write(ohci, OHCI1394_IntMaskClear, OHCI1394_busReset); + + if (ohci->check_busreset) { + int loop_count = 0; + + udelay(10); + + while (reg_read(ohci, OHCI1394_IntEventSet) & OHCI1394_busReset) { + reg_write(ohci, OHCI1394_IntEventClear, OHCI1394_busReset); + spin_unlock_irqrestore(&ohci->event_lock, flags); - udelay(10); + udelay(10); spin_lock_irqsave(&ohci->event_lock, flags); - } - } + + /* The loop counter check is to prevent the driver + * from remaining in this state forever. For the + * initial bus reset, the loop continues for ever + * and the system hangs, until some device is plugged-in + * or out manually into a port! The forced reset seems + * to solve this problem. This mainly effects nForce2. */ + if (loop_count > 10000) { + hpsb_reset_bus(host, 1); + DBGMSG(ohci->id, "Detected bus-reset loop. Forced a bus reset!"); + loop_count = 0; + } + + loop_count++; + } + } spin_unlock_irqrestore(&ohci->event_lock, flags); if (!host->in_bus_reset) { DBGMSG(ohci->id, "irq_handler: Bus reset requested"); @@ -2438,6 +2462,8 @@ if (event) PRINT(KERN_ERR, ohci->id, "Unhandled interrupt(s) 0x%08x", event); + + return; } /* Put the buffer back into the dma context */ @@ -3277,6 +3303,18 @@ ohci->selfid_swap = 1; #endif +#ifndef PCI_DEVICE_ID_NVIDIA_NFORCE2_FW +#define PCI_DEVICE_ID_NVIDIA_NFORCE2_FW 0x006e +#endif + + /* These chipsets require a bit of extra care when checking after + * a busreset. */ + if ((dev->vendor == PCI_VENDOR_ID_APPLE && + dev->device == PCI_DEVICE_ID_APPLE_UNI_N_FW) || + (dev->vendor == PCI_VENDOR_ID_NVIDIA && + dev->device == PCI_DEVICE_ID_NVIDIA_NFORCE2_FW)) + ohci->check_busreset = 1; + /* We hardwire the MMIO length, since some CardBus adaptors * fail to report the right length. Anyway, the ohci spec * clearly says it's 2kb, so this shouldn't be a problem. */ @@ -3363,7 +3401,7 @@ * accessing registers in the SClk domain without LPS enabled * will lock up the machine. Wait 50msec to make sure we have * full link enabled. */ - reg_write(ohci, OHCI1394_HCControlSet, 0x00080000); + reg_write(ohci, OHCI1394_HCControlSet, OHCI1394_HCControl_LPS); mdelay(50); /* Determine the number of available IR and IT contexts. */ @@ -3489,7 +3527,7 @@ static struct pci_device_id ohci1394_pci_tbl[] __devinitdata = { { .class = PCI_CLASS_FIREWIRE_OHCI, - .class_mask = ~0, + .class_mask = PCI_ANY_ID, .vendor = PCI_ANY_ID, .device = PCI_ANY_ID, .subvendor = PCI_ANY_ID, diff -Nru a/drivers/ieee1394/ohci1394.h b/drivers/ieee1394/ohci1394.h --- a/drivers/ieee1394/ohci1394.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/ohci1394.h Sat Apr 12 14:44:06 2003 @@ -233,6 +233,9 @@ unsigned int selfid_swap:1; /* Some Apple chipset seem to swap incoming headers for us */ unsigned int no_swap_incoming:1; + + /* Force extra paranoia checking on bus-reset handling */ + unsigned int check_busreset:1; }; static inline int cross_bound(unsigned long addr, unsigned int size) @@ -288,6 +291,13 @@ #define OHCI1394_VendorID 0x040 #define OHCI1394_HCControlSet 0x050 #define OHCI1394_HCControlClear 0x054 +#define OHCI1394_HCControl_noByteSwap 0x40000000 +#define OHCI1394_HCControl_programPhyEnable 0x00800000 +#define OHCI1394_HCControl_aPhyEnhanceEnable 0x00400000 +#define OHCI1394_HCControl_LPS 0x00080000 +#define OHCI1394_HCControl_postedWriteEnable 0x00040000 +#define OHCI1394_HCControl_linkEnable 0x00020000 +#define OHCI1394_HCControl_softReset 0x00010000 #define OHCI1394_SelfIDBuffer 0x064 #define OHCI1394_SelfIDCount 0x068 #define OHCI1394_IRMultiChanMaskHiSet 0x070 diff -Nru a/drivers/ieee1394/pcilynx.c b/drivers/ieee1394/pcilynx.c --- a/drivers/ieee1394/pcilynx.c Sat Apr 12 14:44:07 2003 +++ b/drivers/ieee1394/pcilynx.c Sat Apr 12 14:44:07 2003 @@ -37,6 +37,7 @@ #include #include #include +#include #include #include #include @@ -71,9 +72,9 @@ /* Module Parameters */ -MODULE_PARM(skip_eeprom,"i"); -MODULE_PARM_DESC(skip_eeprom, "Do not try to read bus info block from serial eeprom, but user generic one (default = 0)."); static int skip_eeprom = 0; +module_param(skip_eeprom, int, 0444); +MODULE_PARM_DESC(skip_eeprom, "Use generic bus info block instead of serial eeprom (default = 0)."); static struct hpsb_host_driver lynx_driver; @@ -983,8 +984,9 @@ * on performance - the value 2400 was found by experiment and may not work * everywhere as good as here - use mem_mindma option for modules to change */ -short mem_mindma = 2400; -MODULE_PARM(mem_mindma, "h"); +static short mem_mindma = 2400; +module_param(mem_mindma, short, 0444); +MODULE_PARM_DESC(mem_mindma, "Minimum amount of data required to use DMA"); static ssize_t mem_dmaread(struct memdata *md, u32 physbuf, ssize_t count, int offset) diff -Nru a/drivers/ieee1394/sbp2.c b/drivers/ieee1394/sbp2.c --- a/drivers/ieee1394/sbp2.c Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/sbp2.c Sat Apr 12 14:44:06 2003 @@ -27,44 +27,22 @@ * driver. It also registers as a SCSI lower-level driver in order to accept * SCSI commands for transport using SBP-2. * - * The easiest way to add/detect new SBP-2 devices is to run the shell script - * rescan-scsi-bus.sh (or re-load the SBP-2 driver). This script may be - * found at: - * http://www.garloff.de/kurt/linux/rescan-scsi-bus.sh - * - * As an alternative, you may manually add/remove SBP-2 devices via the procfs with - * add-single-device or remove-single-device , where: - * = host (starting at zero for first SCSI adapter) - * = bus (normally zero) - * = target (starting at zero for first SBP-2 device) - * = lun (normally zero) - * - * e.g. To manually add/detect a new SBP-2 device - * echo "scsi add-single-device 0 0 0 0" > /proc/scsi/scsi - * - * e.g. To manually remove a SBP-2 device after it's been unplugged - * echo "scsi remove-single-device 0 0 0 0" > /proc/scsi/scsi - * - * e.g. To check to see which SBP-2/SCSI devices are currently registered - * cat /proc/scsi/scsi - * - * After scanning for new SCSI devices (above), you may access any attached - * SBP-2 storage devices as if they were SCSI devices (e.g. mount /dev/sda1, - * fdisk, mkfs, etc.). + * You may access any attached SBP-2 storage devices as if they were SCSI + * devices (e.g. mount /dev/sda1, fdisk, mkfs, etc.). * * * Module Load Options: * - * sbp2_max_speed - Force max speed allowed - * (2 = 400mb, 1 = 200mb, 0 = 100mb. default = 2) - * sbp2_serialize_io - Serialize all I/O coming down from the scsi drivers - * (0 = deserialized, 1 = serialized, default = 0) - * sbp2_max_sectors, - Change max sectors per I/O supported (default = 255) - * sbp2_exclusive_login - Set to zero if you'd like to allow multiple hosts the ability - * to log in at the same time. Sbp2 device must support this, - * and you must know what you're doing (default = 1) + * max_speed - Force max speed allowed + * (2 = 400mb, 1 = 200mb, 0 = 100mb. default = 2) + * serialize_io - Serialize all I/O coming down from the scsi drivers + * (0 = deserialized, 1 = serialized, default = 0) + * max_sectors, - Change max sectors per I/O supported (default = 255) + * exclusive_login - Set to zero if you'd like to allow multiple hosts the ability + * to log in at the same time. Sbp2 device must support this, + * and you must know what you're doing (default = 1) * - * (e.g. insmod sbp2 sbp2_serialize_io = 1) + * (e.g. insmod sbp2 sbp2.serialize_io = 1) * * * Current Support: @@ -258,7 +236,7 @@ * * New packet dump debug define (CONFIG_IEEE1394_SBP2_PACKET_DUMP) which allows * dumping of all sbp2 related packets sent and received. Especially effective * when phys dma is disabled on ohci controller (e.g. insmod ohci1394 phys_dma=0). - * * Added new sbp2 module load option (sbp2_exclusive_login) for allowing + * * Added new sbp2 module load option (exclusive_login) for allowing * non-exclusive login to sbp2 device, for special multi-host applications. * 04/23/02 - Fix for Sony CD-ROM drives. Only send fetch agent reset to sbp2 device if it * returns the dead bit in status. Thanks to Chandan (chandan@toad.net) for this one. @@ -285,6 +263,7 @@ #include #include #include +#include #include #include #include @@ -319,14 +298,14 @@ #include "sbp2.h" static char version[] __devinitdata = - "$Rev: 797 $ James Goodwin "; + "$Rev: 846 $ James Goodwin "; /* * Module load parameter definitions */ /* - * Change sbp2_max_speed on module load if you have a bad IEEE-1394 + * Change max_speed on module load if you have a bad IEEE-1394 * controller that has trouble running 2KB packets at 400mb. * * NOTE: On certain OHCI parts I have seen short packets on async transmit @@ -334,34 +313,34 @@ * bump down the speed if you are running into problems. * * Valid values: - * sbp2_max_speed = 2 (default: max speed 400mb) - * sbp2_max_speed = 1 (max speed 200mb) - * sbp2_max_speed = 0 (max speed 100mb) + * max_speed = 2 (default: max speed 400mb) + * max_speed = 1 (max speed 200mb) + * max_speed = 0 (max speed 100mb) */ -MODULE_PARM(sbp2_max_speed,"i"); -MODULE_PARM_DESC(sbp2_max_speed, "Force max speed (2 = 400mb default, 1 = 200mb, 0 = 100mb)"); -static int sbp2_max_speed = SPEED_400; +static int max_speed = SPEED_400; +module_param(max_speed, int, 0644); +MODULE_PARM_DESC(max_speed, "Force max speed (2 = 400mb default, 1 = 200mb, 0 = 100mb)"); /* - * Set sbp2_serialize_io to 1 if you'd like only one scsi command sent + * Set serialize_io to 1 if you'd like only one scsi command sent * down to us at a time (debugging). This might be necessary for very * badly behaved sbp2 devices. */ -MODULE_PARM(sbp2_serialize_io,"i"); -MODULE_PARM_DESC(sbp2_serialize_io, "Serialize all I/O coming down from the scsi drivers (default = 0)"); -static int sbp2_serialize_io = 0; /* serialize I/O - available for debugging purposes */ +static int serialize_io = 0; +module_param(serialize_io, int, 0444); +MODULE_PARM_DESC(serialize_io, "Serialize all I/O coming down from the scsi drivers (default = 0)"); /* - * Bump up sbp2_max_sectors if you'd like to support very large sized + * Bump up max_sectors if you'd like to support very large sized * transfers. Please note that some older sbp2 bridge chips are broken for * transfers greater or equal to 128KB. Default is a value of 255 * sectors, or just under 128KB (at 512 byte sector size). I can note that * the Oxsemi sbp2 chipsets have no problems supporting very large * transfer sizes. */ -MODULE_PARM(sbp2_max_sectors,"i"); -MODULE_PARM_DESC(sbp2_max_sectors, "Change max sectors per I/O supported (default = 255)"); -static int sbp2_max_sectors = SBP2_MAX_SECTORS; +static int max_sectors = SBP2_MAX_SECTORS; +module_param(max_sectors, int, 0444); +MODULE_PARM_DESC(max_sectors, "Change max sectors per I/O supported (default = 255)"); /* * Exclusive login to sbp2 device? In most cases, the sbp2 driver should @@ -370,13 +349,13 @@ * etc.). If you're running an sbp2 device that supports multiple logins, * and you're either running read-only filesystems or some sort of special * filesystem supporting multiple hosts (one such filesystem is OpenGFS, - * see opengfs.sourceforge.net for more info), then set sbp2_exclusive_login + * see opengfs.sourceforge.net for more info), then set exclusive_login * to zero. Note: The Oxsemi OXFW911 sbp2 chipset supports up to four * concurrent logins. */ -MODULE_PARM(sbp2_exclusive_login,"i"); -MODULE_PARM_DESC(sbp2_exclusive_login, "Exclusive login to sbp2 device (default = 1)"); -static int sbp2_exclusive_login = 1; +static int exclusive_login = 1; +module_param(exclusive_login, int, 0644); +MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device (default = 1)"); /* * SCSI inquiry hack for really badly behaved sbp2 devices. Turn this on @@ -384,13 +363,13 @@ * This hack makes the inquiry look more like a typical MS Windows * inquiry. * - * If sbp2_force_inquiry_hack=1 is required for your device to work, + * If force_inquiry_hack=1 is required for your device to work, * please submit the logged sbp2_firmware_revision value of this device to * the linux1394-devel mailing list. */ -MODULE_PARM(sbp2_force_inquiry_hack,"i"); -MODULE_PARM_DESC(sbp2_force_inquiry_hack, "Force SCSI inquiry hack (default = 0)"); -static int sbp2_force_inquiry_hack = 0; +static int force_inquiry_hack = 0; +module_param(force_inquiry_hack, int, 0444); +MODULE_PARM_DESC(force_inquiry_hack, "Force SCSI inquiry hack (default = 0)"); /* @@ -466,12 +445,10 @@ * Globals */ -static void sbp2scsi_complete_all_commands(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id, u32 status); -static void sbp2scsi_complete_command(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id, u32 scsi_status, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)); @@ -486,7 +463,6 @@ static struct hpsb_highlevel *sbp2_hl_handle = NULL; static struct hpsb_highlevel_ops sbp2_hl_ops = { - .add_host = sbp2_add_host, .remove_host = sbp2_remove_host, }; @@ -502,13 +478,18 @@ #endif static struct hpsb_protocol_driver sbp2_driver = { - .name = "SBP2 Driver", - .id_table = sbp2_id_table, - .probe = sbp2_probe, - .disconnect = sbp2_disconnect, - .update = sbp2_update + .name = "SBP2 Driver", + .id_table = sbp2_id_table, + .update = sbp2_update, + .driver = { + .name = SBP2_DEVICE_NAME, + .bus = &ieee1394_bus_type, + .probe = sbp2_probe, + .remove = sbp2_remove, + }, }; + /* List of device firmware's that require a forced 36 byte inquiry. */ static u32 sbp2_broken_inquiry_list[] = { 0x00002800, /* Stefan Richter */ @@ -648,14 +629,14 @@ * This function is called to create a pool of command orbs used for * command processing. It is called when a new sbp2 device is detected. */ -static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id, - struct sbp2scsi_host_info *hi) +static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; int i; unsigned long flags, orbs; struct sbp2_command_info *command; - orbs = sbp2_serialize_io ? 2 : SBP2_MAX_COMMAND_ORBS; + orbs = serialize_io ? 2 : SBP2_MAX_COMMAND_ORBS; spin_lock_irqsave(&scsi_id->sbp2_command_orb_lock, flags); for (i = 0; i < orbs; i++) { @@ -686,9 +667,9 @@ /* * This function is called to delete a pool of command orbs. */ -static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id, - struct sbp2scsi_host_info *hi) +static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id) { + struct hpsb_host *host = scsi_id->hi->host; struct list_head *lh, *next; struct sbp2_command_info *command; unsigned long flags; @@ -699,11 +680,11 @@ command = list_entry(lh, struct sbp2_command_info, list); /* Release our generic DMA's */ - pci_unmap_single(hi->host->pdev, command->command_orb_dma, + pci_unmap_single(host->pdev, command->command_orb_dma, sizeof(struct sbp2_command_orb), PCI_DMA_BIDIRECTIONAL); SBP2_DMA_FREE("single command orb DMA"); - pci_unmap_single(hi->host->pdev, command->sge_dma, + pci_unmap_single(host->pdev, command->sge_dma, sizeof(command->scatter_gather_element), PCI_DMA_BIDIRECTIONAL); SBP2_DMA_FREE("scatter_gather_element"); @@ -773,8 +754,7 @@ static struct sbp2_command_info *sbp2util_allocate_command_orb( struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *Current_SCpnt, - void (*Current_done)(Scsi_Cmnd *), - struct sbp2scsi_host_info *hi) + void (*Current_done)(Scsi_Cmnd *)) { struct list_head *lh; struct sbp2_command_info *command = NULL; @@ -849,78 +829,86 @@ * IEEE-1394 core driver stack related section *********************************************/ -static int sbp2_probe(struct unit_directory *ud) +static int sbp2_probe(struct device *dev) { + struct unit_directory *ud; struct sbp2scsi_host_info *hi; - SBP2_DEBUG("sbp2_probe"); - hi = sbp2_find_host_info(ud->ne->host); + SBP2_DEBUG(__FUNCTION__); + + ud = container_of(dev, struct unit_directory, device); + + /* This will only add it if it doesn't exist */ + hi = sbp2_add_host(ud->ne->host); + + if (!hi) + return -ENODEV; return sbp2_start_device(hi, ud); } -static void sbp2_disconnect(struct unit_directory *ud) +static int sbp2_remove(struct device *dev) { - struct sbp2scsi_host_info *hi; - struct scsi_id_instance_data *scsi_id = ud->driver_data; + struct unit_directory *ud; + struct scsi_id_instance_data *scsi_id; - SBP2_DEBUG("sbp2_disconnect"); - hi = sbp2_find_host_info(ud->ne->host); + SBP2_DEBUG(__FUNCTION__); - if (hi != NULL) { - sbp2_logout_device(hi, scsi_id); - sbp2_remove_device(hi, scsi_id); + ud = container_of(dev, struct unit_directory, device); + scsi_id = ud->device.driver_data; + ud->device.driver_data = NULL; + + if (scsi_id != NULL) { + sbp2_logout_device(scsi_id); + sbp2_remove_device(scsi_id); } + + return 0; } static void sbp2_update(struct unit_directory *ud) { - struct sbp2scsi_host_info *hi; - struct scsi_id_instance_data *scsi_id = ud->driver_data; + struct scsi_id_instance_data *scsi_id = ud->device.driver_data; + struct sbp2scsi_host_info *hi = scsi_id->hi; unsigned long flags; SBP2_DEBUG("sbp2_update"); - hi = sbp2_find_host_info(ud->ne->host); - if (sbp2_reconnect_device(hi, scsi_id)) { + if (sbp2_reconnect_device(scsi_id)) { /* * Ok, reconnect has failed. Perhaps we didn't * reconnect fast enough. Try doing a regular login. */ - if (sbp2_login_device(hi, scsi_id)) { - + if (sbp2_login_device(scsi_id)) { /* Login failed too, just remove the device. */ SBP2_ERR("sbp2_reconnect_device failed!"); - sbp2_remove_device(hi, scsi_id); - hpsb_release_unit_directory(ud); + sbp2_remove_device(scsi_id); return; } } /* Set max retries to something large on the device. */ - sbp2_set_busy_timeout(hi, scsi_id); + sbp2_set_busy_timeout(scsi_id); /* Do a SBP-2 fetch agent reset. */ - sbp2_agent_reset(hi, scsi_id, 1); + sbp2_agent_reset(scsi_id, 1); /* Get the max speed and packet size that we can use. */ - sbp2_max_speed_and_size(hi, scsi_id); + sbp2_max_speed_and_size(scsi_id); /* Complete any pending commands with busy (so they get * retried) and remove them from our queue */ spin_lock_irqsave(&hi->sbp2_command_lock, flags); - sbp2scsi_complete_all_commands(hi, scsi_id, DID_BUS_BUSY); + sbp2scsi_complete_all_commands(scsi_id, DID_BUS_BUSY); spin_unlock_irqrestore(&hi->sbp2_command_lock, flags); } -/* - * This function is called after registering our operations in sbp2_init. - * We go ahead and allocate some memory for our host info structure, and - * init some structures. - */ -static void sbp2_add_host(struct hpsb_host *host) +/* This functions is called by the sbp2_probe, for each new device. If the + * host_info already exists, it will return it. If not, it allocated a new + * host_info entry and a corresponding scsi_host. */ +static struct sbp2scsi_host_info *sbp2_add_host(struct hpsb_host *host) { struct sbp2scsi_host_info *hi; unsigned long flags; @@ -928,11 +916,15 @@ SBP2_DEBUG("sbp2_add_host"); + hi = sbp2_find_host_info(host); + if (hi) + return hi; + /* Register our host with the SCSI stack. */ scsi_host = scsi_register (&scsi_driver_template, sizeof(struct sbp2scsi_host_info)); if (!scsi_host) { SBP2_ERR("failed to register scsi host"); - return; + return NULL; } hi = (struct sbp2scsi_host_info *)&scsi_host->hostdata; @@ -948,11 +940,10 @@ list_add_tail(&hi->list, &sbp2_host_info_list); spin_unlock_irqrestore(&sbp2_host_info_lock, flags); - /* - * XXX(hch): Hopefully the ieee1394 code will be converted - * to the driver model at some point. Until that happens - * we'll have to pass in NULL here. - */ + /* XXX We need a device to pass here as the scsi-host class. Can't + * use the PCI device, since it is already bound to the ieee1394 + * host. Can't use the fw-host device since it is multi-class + * enabled (scsi-host uses classdata member of the device). */ if (scsi_add_host(hi->scsi_host, NULL)) { SBP2_ERR("failed to add scsi host"); @@ -963,7 +954,7 @@ scsi_unregister(hi->scsi_host); } - return; + return hi; } /* @@ -1048,6 +1039,8 @@ goto alloc_fail_first; memset(scsi_id, 0, sizeof(struct scsi_id_instance_data)); + scsi_id->hi = hi; + /* Login FIFO DMA */ scsi_id->login_response = pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_login_response), @@ -1076,7 +1069,7 @@ scsi_id->login_orb = pci_alloc_consistent(hi->host->pdev, sizeof(struct sbp2_login_orb), &scsi_id->login_orb_dma); - if (scsi_id->login_orb == NULL) { + if (!scsi_id->login_orb) { alloc_fail: if (scsi_id->logout_orb) { pci_free_consistent(hi->host->pdev, @@ -1105,7 +1098,8 @@ kfree(scsi_id); alloc_fail_first: SBP2_ERR ("Could not allocate memory for scsi_id"); - return(-ENOMEM); + + return -ENOMEM; } SBP2_DMA_ALLOC("consistent DMA region for login ORB"); @@ -1116,7 +1110,7 @@ scsi_id->ud = ud; scsi_id->speed_code = SPEED_100; scsi_id->max_payload_size = sbp2_speedto_maxrec[SPEED_100]; - ud->driver_data = scsi_id; + ud->device.driver_data = scsi_id; atomic_set(&scsi_id->sbp2_login_complete, 0); @@ -1149,9 +1143,9 @@ /* * Create our command orb pool */ - if (sbp2util_create_command_orb_pool(scsi_id, hi)) { + if (sbp2util_create_command_orb_pool(scsi_id)) { SBP2_ERR("sbp2util_create_command_orb_pool failed!"); - sbp2_remove_device(hi, scsi_id); + sbp2_remove_device(scsi_id); return -ENOMEM; } @@ -1160,35 +1154,33 @@ */ if (i == hi->scsi_host->max_id) { SBP2_ERR("No slots left for SBP-2 device"); - sbp2_remove_device(hi, scsi_id); + sbp2_remove_device(scsi_id); return -EBUSY; } /* * Login to the sbp-2 device */ - if (sbp2_login_device(hi, scsi_id)) { - + if (sbp2_login_device(scsi_id)) { /* Login failed, just remove the device. */ - SBP2_ERR("sbp2_login_device failed"); - sbp2_remove_device(hi, scsi_id); + sbp2_remove_device(scsi_id); return -EBUSY; } /* * Set max retries to something large on the device */ - sbp2_set_busy_timeout(hi, scsi_id); + sbp2_set_busy_timeout(scsi_id); /* * Do a SBP-2 fetch agent reset */ - sbp2_agent_reset(hi, scsi_id, 1); + sbp2_agent_reset(scsi_id, 1); /* * Get the max speed and packet size that we can use */ - sbp2_max_speed_and_size(hi, scsi_id); + sbp2_max_speed_and_size(scsi_id); /* Add this device to the scsi layer now */ sdev = scsi_add_device(hi->scsi_host, 0, scsi_id->id, 0); @@ -1203,21 +1195,21 @@ /* * This function removes an sbp2 device from the sbp2scsi_host_info struct. */ -static void sbp2_remove_device(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id) +static void sbp2_remove_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct scsi_device *sdev = scsi_find_device(hi->scsi_host, 0, scsi_id->id, 0); SBP2_DEBUG("sbp2_remove_device"); /* Complete any pending commands with selection timeout */ - sbp2scsi_complete_all_commands(hi, scsi_id, DID_NO_CONNECT); + sbp2scsi_complete_all_commands(scsi_id, DID_NO_CONNECT); /* Remove it from the scsi layer now */ - if (scsi_remove_device(sdev)) + if (sdev && scsi_remove_device(sdev)) SBP2_ERR("scsi_remove_device failed"); - sbp2util_remove_command_orb_pool(scsi_id, hi); + sbp2util_remove_command_orb_pool(scsi_id); hi->scsi_id[scsi_id->id] = NULL; @@ -1311,8 +1303,9 @@ * This function is called in order to login to a particular SBP-2 device, * after a bus reset. */ -static int sbp2_login_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_login_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; quadlet_t data[2]; SBP2_DEBUG("sbp2_login_device"); @@ -1333,7 +1326,7 @@ scsi_id->login_orb->lun_misc = ORB_SET_FUNCTION(LOGIN_REQUEST); scsi_id->login_orb->lun_misc |= ORB_SET_RECONNECT(0); /* One second reconnect time */ - scsi_id->login_orb->lun_misc |= ORB_SET_EXCLUSIVE(sbp2_exclusive_login); /* Exclusive access to device */ + scsi_id->login_orb->lun_misc |= ORB_SET_EXCLUSIVE(exclusive_login); /* Exclusive access to device */ scsi_id->login_orb->lun_misc |= ORB_SET_NOTIFY(1); /* Notify us of login complete */ /* Set the lun if we were able to pull it from the device's unit directory */ if (scsi_id->sbp2_device_type_and_lun != SBP2_DEVICE_TYPE_LUN_UNINITIALIZED) { @@ -1438,8 +1431,9 @@ * This function is called in order to logout from a particular SBP-2 * device, usually called during driver unload. */ -static int sbp2_logout_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_logout_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; quadlet_t data[2]; SBP2_DEBUG("sbp2_logout_device"); @@ -1496,8 +1490,9 @@ * This function is called in order to reconnect to a particular SBP-2 * device, after a bus reset. */ -static int sbp2_reconnect_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_reconnect_device(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; quadlet_t data[2]; SBP2_DEBUG("sbp2_reconnect_device"); @@ -1584,8 +1579,8 @@ * This function is called in order to set the busy timeout (number of * retries to attempt) on the sbp2 device. */ -static int sbp2_set_busy_timeout(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) -{ +static int sbp2_set_busy_timeout(struct scsi_id_instance_data *scsi_id) +{ quadlet_t data; SBP2_DEBUG("sbp2_set_busy_timeout"); @@ -1625,7 +1620,7 @@ ud = scsi_id->ud; /* Handle different fields in the unit directory, based on keys */ - for (i = 0; i < ud->count; i++) { + for (i = 0; i < ud->length; i++) { switch (CONFIG_ROM_KEY(ud->quadlets[i])) { case SBP2_CSR_OFFSET_KEY: /* Save off the management agent address */ @@ -1679,7 +1674,7 @@ /* Firmware revision */ scsi_id->sbp2_firmware_revision = CONFIG_ROM_VALUE(ud->quadlets[i]); - if (sbp2_force_inquiry_hack) + if (force_inquiry_hack) SBP2_INFO("sbp2_firmware_revision = %x", (unsigned int) scsi_id->sbp2_firmware_revision); else SBP2_DEBUG("sbp2_firmware_revision = %x", @@ -1697,20 +1692,20 @@ /* If the vendor id is 0xa0b8 (Symbios vendor id), then we have a * bridge with 128KB max transfer size limitation. For sanity, we - * only voice this when the current sbp2_max_sectors setting + * only voice this when the current max_sectors setting * exceeds the 128k limit. By default, that is not the case. * * It would be really nice if we could detect this before the scsi * host gets initialized. That way we can down-force the - * sbp2_max_sectors to account for it. That is not currently + * max_sectors to account for it. That is not currently * possible. */ if ((scsi_id->sbp2_firmware_revision & 0xffff00) == SBP2_128KB_BROKEN_FIRMWARE && - (sbp2_max_sectors * 512) > (128*1024)) { + (max_sectors * 512) > (128*1024)) { SBP2_WARN("Node " NODE_BUS_FMT ": Bridge only supports 128KB max transfer size.", NODE_BUS_ARGS(scsi_id->ne->nodeid)); - SBP2_WARN("WARNING: Current sbp2_max_sectors setting is larger than 128KB (%d sectors)!", - sbp2_max_sectors); + SBP2_WARN("WARNING: Current max_sectors setting is larger than 128KB (%d sectors)!", + max_sectors); scsi_id->workarounds |= SBP2_BREAKAGE_128K_MAX_TRANSFER; } @@ -1737,8 +1732,10 @@ * the speed that it needs to use, and the max_rec the host supports, and * it takes care of the rest. */ -static int sbp2_max_speed_and_size(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id) +static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id) { + struct sbp2scsi_host_info *hi = scsi_id->hi; + SBP2_DEBUG("sbp2_max_speed_and_size"); /* Initial setting comes from the hosts speed map */ @@ -1746,8 +1743,8 @@ + NODEID_TO_NODE(scsi_id->ne->nodeid)]; /* Bump down our speed if the user requested it */ - if (scsi_id->speed_code > sbp2_max_speed) { - scsi_id->speed_code = sbp2_max_speed; + if (scsi_id->speed_code > max_speed) { + scsi_id->speed_code = max_speed; SBP2_ERR("Forcing SBP-2 max speed down to %s", hpsb_speedto_str[scsi_id->speed_code]); } @@ -1767,8 +1764,9 @@ /* * This function is called in order to perform a SBP-2 agent reset. */ -static int sbp2_agent_reset(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, int wait) +static int sbp2_agent_reset(struct scsi_id_instance_data *scsi_id, int wait) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct hpsb_packet *packet; quadlet_t data; @@ -1811,8 +1809,7 @@ * This function is called to create the actual command orb and s/g list * out of the scsi command itself. */ -static int sbp2_create_command_orb(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static int sbp2_create_command_orb(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command, unchar *scsi_cmd, unsigned int scsi_use_sg, @@ -1820,6 +1817,7 @@ void *scsi_request_buffer, unsigned char scsi_dir) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct scatterlist *sgpnt = (struct scatterlist *) scsi_request_buffer; struct sbp2_command_orb *command_orb = &command->command_orb; struct sbp2_unrestricted_page_table *scatter_gather_element = @@ -2062,9 +2060,10 @@ /* * This function is called in order to begin a regular SBP-2 command. */ -static int sbp2_link_orb_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_link_orb_command(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct hpsb_packet *packet; struct sbp2_command_orb *command_orb = &command->command_orb; @@ -2166,7 +2165,7 @@ /* * This function is called in order to begin a regular SBP-2 command. */ -static int sbp2_send_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_send_command(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) { unchar *cmd = (unchar *) SCpnt->cmnd; @@ -2184,7 +2183,7 @@ /* * Allocate a command orb and s/g structure */ - command = sbp2util_allocate_command_orb(scsi_id, SCpnt, done, hi); + command = sbp2util_allocate_command_orb(scsi_id, SCpnt, done); if (!command) { return(-EIO); } @@ -2195,7 +2194,7 @@ * reject this inquiry command. Fix the request_bufflen. */ if (*cmd == INQUIRY) { - if (sbp2_force_inquiry_hack || scsi_id->workarounds & SBP2_BREAKAGE_INQUIRY_HACK) + if (force_inquiry_hack || scsi_id->workarounds & SBP2_BREAKAGE_INQUIRY_HACK) request_bufflen = cmd[4] = 0x24; else request_bufflen = cmd[4]; @@ -2204,7 +2203,7 @@ /* * Now actually fill in the comamnd orb and sbp2 s/g list */ - sbp2_create_command_orb(hi, scsi_id, command, cmd, SCpnt->use_sg, + sbp2_create_command_orb(scsi_id, command, cmd, SCpnt->use_sg, request_bufflen, SCpnt->request_buffer, SCpnt->sc_data_direction); /* @@ -2224,7 +2223,7 @@ /* * Link up the orb, and ring the doorbell if needed */ - sbp2_link_orb_command(hi, scsi_id, command); + sbp2_link_orb_command(scsi_id, command); return(0); } @@ -2543,7 +2542,7 @@ * Initiate a fetch agent reset. */ SBP2_DEBUG("Dead bit set - initiating fetch agent reset"); - sbp2_agent_reset(hi, scsi_id, 0); + sbp2_agent_reset(scsi_id, 0); } SBP2_ORB_DEBUG("completing command orb %p", &command->command_orb); @@ -2583,7 +2582,8 @@ * io_request_lock (in sbp2scsi_queuecommand). */ SBP2_DEBUG("Completing SCSI command"); - sbp2scsi_complete_command(hi, scsi_id, scsi_status, SCpnt, command->Current_done); + sbp2scsi_complete_command(scsi_id, scsi_status, SCpnt, + command->Current_done); SBP2_ORB_DEBUG("command orb completed"); } @@ -2649,7 +2649,7 @@ SBP2_DEBUG("REQUEST_SENSE"); memcpy(SCpnt->request_buffer, SCpnt->sense_buffer, SCpnt->request_bufflen); memset(SCpnt->sense_buffer, 0, sizeof(SCpnt->sense_buffer)); - sbp2scsi_complete_command(hi, scsi_id, SBP2_SCSI_STATUS_GOOD, SCpnt, done); + sbp2scsi_complete_command(scsi_id, SBP2_SCSI_STATUS_GOOD, SCpnt, done); return(0); } @@ -2667,9 +2667,10 @@ * Try and send our SCSI command */ spin_lock_irqsave(&hi->sbp2_command_lock, flags); - if (sbp2_send_command(hi, scsi_id, SCpnt, done)) { + if (sbp2_send_command(scsi_id, SCpnt, done)) { SBP2_ERR("Error sending SCSI command"); - sbp2scsi_complete_command(hi, scsi_id, SBP2_SCSI_STATUS_SELECTION_TIMEOUT, SCpnt, done); + sbp2scsi_complete_command(scsi_id, SBP2_SCSI_STATUS_SELECTION_TIMEOUT, + SCpnt, done); } spin_unlock_irqrestore(&hi->sbp2_command_lock, flags); @@ -2680,10 +2681,10 @@ * This function is called in order to complete all outstanding SBP-2 * commands (in case of resets, etc.). */ -static void sbp2scsi_complete_all_commands(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_all_commands(struct scsi_id_instance_data *scsi_id, u32 status) { + struct sbp2scsi_host_info *hi = scsi_id->hi; struct list_head *lh; struct sbp2_command_info *command; @@ -2715,8 +2716,7 @@ * * This can be called in interrupt context. */ -static void sbp2scsi_complete_command(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static void sbp2scsi_complete_command(struct scsi_id_instance_data *scsi_id, u32 scsi_status, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)) { @@ -2825,9 +2825,9 @@ done (SCpnt); spin_unlock_irqrestore(&io_request_lock,flags); #else - spin_lock_irqsave(hi->scsi_host->host_lock,flags); + spin_lock_irqsave(scsi_id->hi->scsi_host->host_lock,flags); done (SCpnt); - spin_unlock_irqrestore(hi->scsi_host->host_lock,flags); + spin_unlock_irqrestore(scsi_id->hi->scsi_host->host_lock,flags); #endif return; @@ -2876,8 +2876,8 @@ /* * Initiate a fetch agent reset. */ - sbp2_agent_reset(hi, scsi_id, 0); - sbp2scsi_complete_all_commands(hi, scsi_id, DID_BUS_BUSY); + sbp2_agent_reset(scsi_id, 0); + sbp2scsi_complete_all_commands(scsi_id, DID_BUS_BUSY); spin_unlock_irqrestore(&hi->sbp2_command_lock, flags); } @@ -2896,7 +2896,7 @@ if (scsi_id) { SBP2_ERR("Generating sbp2 fetch agent reset"); - sbp2_agent_reset(hi, scsi_id, 0); + sbp2_agent_reset(scsi_id, 0); } return(SUCCESS); @@ -2904,7 +2904,7 @@ static const char *sbp2scsi_info (struct Scsi_Host *host) { - return "SCSI emulation for for IEEE-1394 Storage Devices"; + return "SCSI emulation for IEEE-1394 SBP-2 Devices"; } /* Called for contents of procfs */ @@ -2936,10 +2936,10 @@ SPRINTF("Driver version : %s\n", version); SPRINTF("\nModule options :\n"); - SPRINTF(" sbp2_max_speed : %s\n", hpsb_speedto_str[sbp2_max_speed]); - SPRINTF(" sbp2_max_sectors : %d\n", sbp2_max_sectors); - SPRINTF(" sbp2_serialize_io : %s\n", sbp2_serialize_io ? "yes" : "no"); - SPRINTF(" sbp2_exclusive_login : %s\n", sbp2_exclusive_login ? "yes" : "no"); + SPRINTF(" max_speed : %s\n", hpsb_speedto_str[max_speed]); + SPRINTF(" max_sectors : %d\n", max_sectors); + SPRINTF(" serialize_io : %s\n", serialize_io ? "yes" : "no"); + SPRINTF(" exclusive_login : %s\n", exclusive_login ? "yes" : "no"); SPRINTF("\nAttached devices : %s\n", !list_empty(&host->my_devices) ? "" : "none"); @@ -3010,7 +3010,7 @@ /* Module load debug option to force one command at a time * (serializing I/O) */ - if (sbp2_serialize_io) { + if (serialize_io) { SBP2_ERR("Driver forced to serialize I/O (serialize_io = 1)"); scsi_driver_template.can_queue = 1; scsi_driver_template.cmd_per_lun = 1; @@ -3019,7 +3019,7 @@ /* * Set max sectors (module load option). Default is 255 sectors. */ - scsi_driver_template.max_sectors = sbp2_max_sectors; + scsi_driver_template.max_sectors = max_sectors; /* diff -Nru a/drivers/ieee1394/sbp2.h b/drivers/ieee1394/sbp2.h --- a/drivers/ieee1394/sbp2.h Sat Apr 12 14:44:06 2003 +++ b/drivers/ieee1394/sbp2.h Sat Apr 12 14:44:06 2003 @@ -238,7 +238,7 @@ */ #define SBP2_MAX_SG_ELEMENT_LENGTH 0xf000 -#define SBP2SCSI_MAX_SCSI_IDS 16 /* Max sbp2 device instances supported */ +#define SBP2SCSI_MAX_SCSI_IDS 32 /* Max sbp2 device instances supported */ #define SBP2_MAX_SECTORS 255 /* Max sectors supported */ #ifndef TYPE_SDAD @@ -320,6 +320,10 @@ #define SBP2_BREAKAGE_128K_MAX_TRANSFER 0x1 #define SBP2_BREAKAGE_INQUIRY_HACK 0x2 + +struct sbp2scsi_host_info; + + /* * Information needed on a per scsi id basis (one for each sbp2 device) */ @@ -375,6 +379,9 @@ /* Node entry, as retrieved from NodeMgr entries */ struct node_entry *ne; + /* A backlink to our host_info */ + struct sbp2scsi_host_info *hi; + /* Device specific workarounds/brokeness */ u32 workarounds; }; @@ -406,7 +413,6 @@ * SCSI ID instance data (one for each sbp2 device instance possible) */ struct scsi_id_instance_data *scsi_id[SBP2SCSI_MAX_SCSI_IDS]; - }; /* @@ -416,30 +422,30 @@ /* * Various utility prototypes */ -static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id, struct sbp2scsi_host_info *hi); -static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id, struct sbp2scsi_host_info *hi); +static int sbp2util_create_command_orb_pool(struct scsi_id_instance_data *scsi_id); +static void sbp2util_remove_command_orb_pool(struct scsi_id_instance_data *scsi_id); static struct sbp2_command_info *sbp2util_find_command_for_orb(struct scsi_id_instance_data *scsi_id, dma_addr_t orb); static struct sbp2_command_info *sbp2util_find_command_for_SCpnt(struct scsi_id_instance_data *scsi_id, void *SCpnt); static struct sbp2_command_info *sbp2util_allocate_command_orb(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *Current_SCpnt, - void (*Current_done)(Scsi_Cmnd *), - struct sbp2scsi_host_info *hi); + void (*Current_done)(Scsi_Cmnd *)); static void sbp2util_mark_command_completed(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command); /* * IEEE-1394 core driver related prototypes */ -static void sbp2_add_host(struct hpsb_host *host); +static struct sbp2scsi_host_info *sbp2_add_host(struct hpsb_host *host); static struct sbp2scsi_host_info *sbp2_find_host_info(struct hpsb_host *host); static void sbp2_remove_host(struct hpsb_host *host); -static int sbp2_probe(struct unit_directory *ud); -static void sbp2_disconnect(struct unit_directory *ud); + +static int sbp2_probe(struct device *dev); +static int sbp2_remove(struct device *dev); static void sbp2_update(struct unit_directory *ud); + static int sbp2_start_device(struct sbp2scsi_host_info *hi, struct unit_directory *ud); -static void sbp2_remove_device(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id); +static void sbp2_remove_device(struct scsi_id_instance_data *scsi_id); #ifdef CONFIG_IEEE1394_SBP2_PHYS_DMA static int sbp2_handle_physdma_write(struct hpsb_host *host, int nodeid, int destid, quadlet_t *data, @@ -451,29 +457,28 @@ /* * SBP-2 protocol related prototypes */ -static int sbp2_login_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); -static int sbp2_reconnect_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); -static int sbp2_logout_device(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); +static int sbp2_login_device(struct scsi_id_instance_data *scsi_id); +static int sbp2_reconnect_device(struct scsi_id_instance_data *scsi_id); +static int sbp2_logout_device(struct scsi_id_instance_data *scsi_id); static int sbp2_handle_status_write(struct hpsb_host *host, int nodeid, int destid, quadlet_t *data, u64 addr, unsigned int length, u16 flags); -static int sbp2_agent_reset(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, int wait); -static int sbp2_create_command_orb(struct sbp2scsi_host_info *hi, - struct scsi_id_instance_data *scsi_id, +static int sbp2_agent_reset(struct scsi_id_instance_data *scsi_id, int wait); +static int sbp2_create_command_orb(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command, unchar *scsi_cmd, unsigned int scsi_use_sg, unsigned int scsi_request_bufflen, void *scsi_request_buffer, unsigned char scsi_dir); -static int sbp2_link_orb_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_link_orb_command(struct scsi_id_instance_data *scsi_id, struct sbp2_command_info *command); -static int sbp2_send_command(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id, +static int sbp2_send_command(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *SCpnt, void (*done)(Scsi_Cmnd *)); static unsigned int sbp2_status_to_sense_data(unchar *sbp2_status, unchar *sense_data); static void sbp2_check_sbp2_command(struct scsi_id_instance_data *scsi_id, unchar *cmd); static void sbp2_check_sbp2_response(struct scsi_id_instance_data *scsi_id, Scsi_Cmnd *SCpnt); static void sbp2_parse_unit_directory(struct scsi_id_instance_data *scsi_id); -static int sbp2_set_busy_timeout(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); -static int sbp2_max_speed_and_size(struct sbp2scsi_host_info *hi, struct scsi_id_instance_data *scsi_id); +static int sbp2_set_busy_timeout(struct scsi_id_instance_data *scsi_id); +static int sbp2_max_speed_and_size(struct scsi_id_instance_data *scsi_id); #endif /* SBP2_H */ diff -Nru a/drivers/input/keyboard/98kbd.c b/drivers/input/keyboard/98kbd.c --- a/drivers/input/keyboard/98kbd.c Sat Apr 12 14:44:07 2003 +++ b/drivers/input/keyboard/98kbd.c Sat Apr 12 14:44:07 2003 @@ -189,6 +189,13 @@ input_sync(&kbd98->dev); return; + case KEY_CAPSLOCK: + input_report_key(&kbd98->dev, keycode, 1); + input_sync(&kbd98->dev); + input_report_key(&kbd98->dev, keycode, 0); + input_sync(&kbd98->dev); + return; + case KBD98_KEY_NULL: return; diff -Nru a/drivers/media/Kconfig b/drivers/media/Kconfig --- a/drivers/media/Kconfig Sat Apr 12 14:44:06 2003 +++ b/drivers/media/Kconfig Sat Apr 12 14:44:06 2003 @@ -32,5 +32,24 @@ source "drivers/media/dvb/Kconfig" +source "drivers/media/common/Kconfig" + +config VIDEO_TUNER + tristate + default y if VIDEO_BT848=y || VIDEO_SAA7134=y || VIDEO_MXB=y + default m if VIDEO_BT848=m || VIDEO_SAA7134=m || VIDEO_MXB=m + depends on VIDEO_DEV + +config VIDEO_BUF + tristate + default y if VIDEO_BT848=y || VIDEO_SAA7134=y || VIDEO_SAA7146=y + default m if VIDEO_BT848=m || VIDEO_SAA7134=m || VIDEO_SAA7146=m + depends on VIDEO_DEV + +config VIDEO_BTCX + tristate + default VIDEO_BT848 + depends on VIDEO_DEV + endmenu diff -Nru a/drivers/media/Makefile b/drivers/media/Makefile --- a/drivers/media/Makefile Sat Apr 12 14:44:09 2003 +++ b/drivers/media/Makefile Sat Apr 12 14:44:09 2003 @@ -2,4 +2,4 @@ # Makefile for the kernel multimedia device drivers. # -obj-y := video/ radio/ dvb/ +obj-y := video/ radio/ dvb/ common/ diff -Nru a/drivers/media/common/Kconfig b/drivers/media/common/Kconfig --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/Kconfig Sat Apr 12 14:44:10 2003 @@ -0,0 +1,11 @@ +config VIDEO_SAA7146 + tristate + default y if DVB_AV7110=y || DVB_BUDGET=y || DVB_BUDGET_AV=y || VIDEO_MXB=y || VIDEO_DPC=y + default m if DVB_AV7110=m || DVB_BUDGET=m || DVB_BUDGET_AV=m || VIDEO_MXB=m || VIDEO_DPC=m + depends on VIDEO_DEV && PCI + +config VIDEO_VIDEOBUF + tristate + default y if VIDEO_SAA7134=y || VIDEO_BT848=y || VIDEO_SAA7146=y + default m if VIDEO_SAA7134=m || VIDEO_BT848=m || VIDEO_SAA7146=m + depends on VIDEO_DEV diff -Nru a/drivers/media/common/Makefile b/drivers/media/common/Makefile --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/Makefile Sat Apr 12 14:44:10 2003 @@ -0,0 +1,5 @@ +saa7146-objs := saa7146_i2c.o saa7146_core.o +saa7146_vv-objs := saa7146_fops.o saa7146_video.o saa7146_hlp.o saa7146_vbi.o + +obj-$(CONFIG_VIDEO_SAA7146) += saa7146.o saa7146_vv.o + diff -Nru a/drivers/media/common/saa7146_core.c b/drivers/media/common/saa7146_core.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_core.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,524 @@ +/* + saa7146.o - driver for generic saa7146-based hardware + + Copyright (C) 1998-2003 Michael Hunold + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +/* global variables */ +struct list_head saa7146_devices; +struct semaphore saa7146_devices_lock; + +static int initialized = 0; +int saa7146_num = 0; + +unsigned int saa7146_debug = 0; + +MODULE_PARM(saa7146_debug,"i"); +MODULE_PARM_DESC(saa7146_debug, "debug level (default: 0)"); + +#if 0 +static void dump_registers(struct saa7146_dev* dev) +{ + int i = 0; + + INFO((" @ %li jiffies:\n",jiffies)); + for(i = 0; i <= 0x148; i+=4) { + printk("0x%03x: 0x%08x\n",i,saa7146_read(dev,i)); + } +} +#endif + +/**************************************************************************** + * general helper functions + ****************************************************************************/ + +/* this is videobuf_vmalloc_to_sg() from video-buf.c */ +static +struct scatterlist* vmalloc_to_sg(unsigned char *virt, int nr_pages) +{ + struct scatterlist *sglist; + struct page *pg; + int i; + + sglist = kmalloc(sizeof(struct scatterlist)*nr_pages, GFP_KERNEL); + if (NULL == sglist) + return NULL; + memset(sglist,0,sizeof(struct scatterlist)*nr_pages); + for (i = 0; i < nr_pages; i++, virt += PAGE_SIZE) { + pg = vmalloc_to_page(virt); + if (NULL == pg) + goto err; + if (PageHighMem(pg)) + BUG(); + sglist[i].page = pg; + sglist[i].length = PAGE_SIZE; + } + return sglist; + + err: + kfree(sglist); + return NULL; +} + +/********************************************************************************/ +/* common page table functions */ + +#define SAA7146_PGTABLE_SIZE 4096 + +char *saa7146_vmalloc_build_pgtable(struct pci_dev *pci, long length, struct saa7146_pgtable *pt) +{ + struct scatterlist *slist = NULL; + int pages = (length+PAGE_SIZE-1)/PAGE_SIZE; + char *mem = vmalloc(length); + int slen = 0; + + if (NULL == mem) { + return NULL; + } + + if (!(slist = vmalloc_to_sg(mem, pages))) { + vfree(mem); + return NULL; + } + + if (saa7146_pgtable_alloc(pci, pt)) { + kfree(slist); + vfree(mem); + return NULL; + } + + slen = pci_map_sg(pci,slist,pages,PCI_DMA_FROMDEVICE); + saa7146_pgtable_build_single(pci, pt, slist, slen); + + /* fixme: here's a memory leak: slist never gets freed by any other + function ...*/ + return mem; +} + +void saa7146_pgtable_free(struct pci_dev *pci, struct saa7146_pgtable *pt) +{ +//fm DEB_EE(("pci:%p, pt:%p\n",pci,pt)); + + if (NULL == pt->cpu) + return; + pci_free_consistent(pci, pt->size, pt->cpu, pt->dma); + pt->cpu = NULL; +} + +int saa7146_pgtable_alloc(struct pci_dev *pci, struct saa7146_pgtable *pt) +{ + u32 *cpu; + dma_addr_t dma_addr; + +//fm DEB_EE(("pci:%p, pt:%p\n",pci,pt)); + + cpu = pci_alloc_consistent(pci, SAA7146_PGTABLE_SIZE, &dma_addr); + if (NULL == cpu) { +//fm ERR(("pci_alloc_consistent() failed.")); + return -ENOMEM; + } + pt->size = SAA7146_PGTABLE_SIZE; + pt->cpu = cpu; + pt->dma = dma_addr; + + return 0; +} + +void saa7146_pgtable_build_single(struct pci_dev *pci, struct saa7146_pgtable *pt, struct scatterlist *list, int length ) +{ + u32 *ptr, fill; + int i,p; + +//fm DEB_EE(("pci:%p, pt:%p, sl:%p, len:%d\n",pci,pt,list,length)); + + /* if we have a user buffer, the first page may not be + aligned to a page boundary. */ + pt->offset = list->offset; + + ptr = pt->cpu; + for (i = 0; i < length; i++, list++) { + for (p = 0; p * 4096 < list->length; p++, ptr++) { + *ptr = sg_dma_address(list) - list->offset; + } + } + + + /* safety; fill the page table up with the last valid page */ + fill = *(ptr-1); + for(;i<1024;i++) { + *ptr++ = fill; + } +/* + ptr = pt->cpu; + for(j=0;j<60;j++) { + printk("ptr1 %d: 0x%08x\n",j,ptr[j]); + } +*/ +} + +/********************************************************************************/ +/* gpio functions */ + +void saa7146_setgpio(struct saa7146_dev *dev, int port, u32 data) +{ + u32 val = 0; + + val=saa7146_read(dev,GPIO_CTRL); + val&=~(0xff << (8*(port))); + val|=(data)<<(8*(port)); + saa7146_write(dev, GPIO_CTRL, val); +} + +/********************************************************************************/ +/* interrupt handler */ + +static void interrupt_hw(int irq, void *dev_id, struct pt_regs *regs) +{ + struct saa7146_dev *dev = (struct saa7146_dev*)dev_id; + u32 isr = 0; + + /* read out the interrupt status register */ + isr = saa7146_read(dev, ISR); + + /* is this our interrupt? */ + if ( 0 == isr ) { + /* nope, some other device */ + return; + } + + saa7146_write(dev, ISR, isr); +// DEB_INT(("0x%08x\n",isr)); + + if( 0 != (dev->ext)) { + if( 0 != (dev->ext->irq_mask & isr )) { + if( 0 != dev->ext->irq_func ) { + dev->ext->irq_func(dev, &isr); + } + isr &= ~dev->ext->irq_mask; + } + } + if (0 != (isr & (MASK_27))) { + DEB_INT(("irq: RPS0 (0x%08x).\n",isr)); + if( 0 != dev->vv_data && 0 != dev->vv_callback) { + dev->vv_callback(dev,isr); + } + isr &= ~MASK_27; + } + if (0 != (isr & (MASK_28))) { + if( 0 != dev->vv_data && 0 != dev->vv_callback) { + dev->vv_callback(dev,isr); + } + isr &= ~MASK_28; + } + if (0 != (isr & (MASK_16|MASK_17))) { + u32 status = saa7146_read(dev, I2C_STATUS); + if( (0x3 == (status & 0x3)) || (0 == (status & 0x1)) ) { + IER_DISABLE(dev, MASK_16|MASK_17); + /* only wake up if we expect something */ + if( 0 != dev->i2c_op ) { + u32 psr = (saa7146_read(dev, PSR) >> 16) & 0x2; + u32 ssr = (saa7146_read(dev, SSR) >> 17) & 0x1f; + DEB_I2C(("irq: i2c, status: 0x%08x, psr:0x%02x, ssr:0x%02x).\n",status,psr,ssr)); + dev->i2c_op = 0; + wake_up(&dev->i2c_wq); + } else { + DEB_I2C(("unexpected irq: i2c, status: 0x%08x, isr %#x\n",status, isr)); + } + } else { + DEB_I2C(("unhandled irq: i2c, status: 0x%08x, isr %#x\n",status, isr)); + } + isr &= ~(MASK_16|MASK_17); + } + if( 0 != isr ) { + ERR(("warning: interrupt enabled, but not handled properly.(0x%08x)\n",isr)); + ERR(("disabling interrupt source(s)!\n")); + IER_DISABLE(dev,isr); + } +} + +/*********************************************************************************/ +/* configuration-functions */ + +static +int saa7146_init_one(struct pci_dev *pci, const struct pci_device_id *ent) +{ + unsigned long adr = 0, len = 0; + struct saa7146_dev* dev = kmalloc (sizeof(struct saa7146_dev),GFP_KERNEL); + + struct saa7146_pci_extension_data *pci_ext = (struct saa7146_pci_extension_data *)ent->driver_data; + struct saa7146_extension* ext = pci_ext->ext; + int err = 0; + + if (!(dev = kmalloc (sizeof(struct saa7146_dev),GFP_KERNEL))) { + ERR(("out of memory.\n")); + return -ENOMEM; + } + + /* clear out mem for sure */ + memset(dev, 0x0, sizeof(struct saa7146_dev)); + + DEB_EE(("pci:%p\n",pci)); + + if (pci_enable_device(pci)) { + ERR(("pci_enable_device() failed.\n")); + err = -EIO; + goto pci_error; + } + + /* enable bus-mastering */ + pci_set_master(pci); + + dev->pci = pci; + /* get chip-revision; this is needed to enable bug-fixes */ + if( 0 > pci_read_config_dword(dev->pci, PCI_CLASS_REVISION, &dev->revision)) { + ERR(("pci_read_config_dword() failed.\n")); + err = -ENODEV; + goto pci_error; + } + dev->revision &= 0xf; + + /* remap the memory from virtual to physical adress */ + adr = pci_resource_start(pci,0); + len = pci_resource_len(pci,0); + + if (!request_mem_region(pci_resource_start(pci,0), pci_resource_len(pci,0), "saa7146")) { + ERR(("request_mem_region() failed.\n")); + err = -ENODEV; + goto pci_error; + } + + if (!(dev->mem = ioremap(adr,len))) { + ERR(("ioremap() failed.\n")); + err = -ENODEV; + goto ioremap_error; + } + + /* we don't do a master reset here anymore, it screws up + some boards that don't have an i2c-eeprom for configuration + values */ +/* + saa7146_write(dev, MC1, MASK_31); +*/ + + /* disable alle irqs */ + saa7146_write(dev, IER, 0); + + /* shut down all dma transfers */ + saa7146_write(dev, MC1, 0x00ff0000); + + /* clear out any rps-signals pending */ + saa7146_write(dev, MC2, 0xf8000000); + + /* request an interrupt for the saa7146 */ + if (request_irq(dev->pci->irq, interrupt_hw, SA_SHIRQ | SA_INTERRUPT, + dev->name, dev)) + { + ERR(("request_irq() failed.\n")); + err = -ENODEV; + goto irq_error; + } + + /* get memory for various stuff */ + dev->rps0 = (u32*)kmalloc(SAA7146_RPS_MEM, GFP_KERNEL); + if( NULL == dev->rps0 ) { + err = -ENOMEM; + goto kmalloc_error_1; + } + memset(dev->rps0, 0x0, SAA7146_RPS_MEM); + + dev->rps1 = (u32*)kmalloc(SAA7146_RPS_MEM, GFP_KERNEL); + if( NULL == dev->rps1 ) { + err = -ENOMEM; + goto kmalloc_error_2; + } + memset(dev->rps1, 0x0, SAA7146_RPS_MEM); + + dev->i2c_mem = (u32*)kmalloc(SAA7146_I2C_MEM, GFP_KERNEL); + if( NULL == dev->i2c_mem ) { + err = -ENOMEM; + goto kmalloc_error_3; + } + memset(dev->i2c_mem, 0x00, SAA7146_I2C_MEM); + + /* the rest + print status message */ + + /* create a nice device name */ + sprintf(&dev->name[0], "saa7146 (%d)",saa7146_num); + + INFO(("found saa7146 @ mem 0x%08x (revision %d, irq %d) (0x%04x,0x%04x).\n", (unsigned int)dev->mem, dev->revision,dev->pci->irq,dev->pci->subsystem_vendor,dev->pci->subsystem_device)); + dev->ext = ext; + + pci_set_drvdata(pci,dev); + + init_MUTEX(&dev->lock); + dev->int_slock = SPIN_LOCK_UNLOCKED; + dev->slock = SPIN_LOCK_UNLOCKED; + + init_MUTEX(&dev->i2c_lock); + + dev->module = THIS_MODULE; + init_waitqueue_head(&dev->i2c_wq); + + if( 0 != ext->probe) { + if( 0 != ext->probe(dev) ) { + DEB_D(("ext->probe() failed for %p. skipping device.\n",dev)); + err = -ENODEV; + goto probe_error; + } + } + + if( 0 != ext->attach(dev,pci_ext) ) { + DEB_D(("ext->attach() failed for %p. skipping device.\n",dev)); + err = -ENODEV; + goto attach_error; + } + + INIT_LIST_HEAD(&dev->item); + list_add_tail(&dev->item,&saa7146_devices); + saa7146_num++; + + /* set some default values */ + saa7146_write(dev, BCS_CTRL, 0x80400040); + + err = 0; + goto out; +attach_error: +probe_error: + pci_set_drvdata(pci,NULL); + kfree( dev->i2c_mem ); +kmalloc_error_3: + kfree( dev->rps1 ); +kmalloc_error_2: + kfree( dev->rps0 ); +kmalloc_error_1: + free_irq(dev->pci->irq, (void *)dev); +irq_error: + iounmap(dev->mem); +ioremap_error: + release_mem_region(adr,len); +pci_error: + kfree(dev); +out: + return err; +} + +static +void saa7146_remove_one(struct pci_dev *pdev) +{ + struct saa7146_dev* dev = (struct saa7146_dev*) pci_get_drvdata(pdev); + DEB_EE(("dev:%p\n",dev)); + + dev->ext->detach(dev); + + /* shut down all video dma transfers */ + saa7146_write(dev, MC1, 0x00ff0000); + + /* disable all irqs, release irq-routine */ + saa7146_write(dev, IER, 0); + + free_irq(dev->pci->irq, (void *)dev); + + /* free kernel memory */ + kfree(dev->rps0 ); + kfree(dev->rps1 ); + kfree(dev->i2c_mem); + + iounmap(dev->mem); + release_mem_region(pci_resource_start(dev->pci,0), pci_resource_len(dev->pci,0)); + + list_del(&dev->item); + kfree(dev); + + saa7146_num--; +} + +/*********************************************************************************/ +/* extension handling functions */ + +int saa7146_register_extension(struct saa7146_extension* ext) +{ + DEB_EE(("ext:%p\n",ext)); + + if( 0 == initialized ) { + INIT_LIST_HEAD(&saa7146_devices); + init_MUTEX(&saa7146_devices_lock); + initialized = 1; + } + + ext->driver.name = ext->name; + ext->driver.id_table = ext->pci_tbl; + ext->driver.probe = saa7146_init_one; + ext->driver.remove = saa7146_remove_one; + + printk("saa7146: register extension '%s'.\n",ext->name); + return pci_module_init(&ext->driver); +} + +int saa7146_unregister_extension(struct saa7146_extension* ext) +{ + DEB_EE(("ext:%p\n",ext)); + printk("saa7146: unregister extension '%s'.\n",ext->name); + pci_unregister_driver(&ext->driver); + return 0; +} + +static +int __init saa7146_init_module(void) +{ + if( 0 == initialized ) { + INIT_LIST_HEAD(&saa7146_devices); + init_MUTEX(&saa7146_devices_lock); + initialized = 1; + } + return 0; +} + +static +void __exit saa7146_cleanup_module(void) +{ +} + +module_init(saa7146_init_module); +module_exit(saa7146_cleanup_module); + +EXPORT_SYMBOL_GPL(saa7146_register_extension); +EXPORT_SYMBOL_GPL(saa7146_unregister_extension); + +/* misc functions used by extension modules */ +EXPORT_SYMBOL_GPL(saa7146_pgtable_alloc); +EXPORT_SYMBOL_GPL(saa7146_pgtable_free); +EXPORT_SYMBOL_GPL(saa7146_pgtable_build_single); +EXPORT_SYMBOL_GPL(saa7146_vmalloc_build_pgtable); + +EXPORT_SYMBOL_GPL(saa7146_setgpio); + +EXPORT_SYMBOL_GPL(saa7146_i2c_transfer); +EXPORT_SYMBOL_GPL(saa7146_i2c_adapter_prepare); + +EXPORT_SYMBOL_GPL(saa7146_debug); +EXPORT_SYMBOL_GPL(saa7146_devices); +EXPORT_SYMBOL_GPL(saa7146_devices_lock); + +MODULE_AUTHOR("Michael Hunold "); +MODULE_DESCRIPTION("driver for generic saa7146-based hardware"); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/media/common/saa7146_fops.c b/drivers/media/common/saa7146_fops.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_fops.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,493 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +#define BOARD_CAN_DO_VBI(dev) (dev->revision != 0 && dev->vv_data->vbi_minor != -1) + +/********************************************************************************/ +/* common dma functions */ + +void saa7146_dma_free(struct saa7146_dev *dev,struct saa7146_buf *buf) +{ + DEB_EE(("dev:%p, buf:%p\n",dev,buf)); + + if (in_interrupt()) + BUG(); + + videobuf_waiton(&buf->vb,0,0); + videobuf_dma_pci_unmap(dev->pci, &buf->vb.dma); + videobuf_dma_free(&buf->vb.dma); + buf->vb.state = STATE_NEEDS_INIT; +} + + +/********************************************************************************/ +/* common buffer functions */ + +int saa7146_buffer_queue(struct saa7146_dev *dev, + struct saa7146_dmaqueue *q, + struct saa7146_buf *buf) +{ +#if DEBUG_SPINLOCKS + BUG_ON(!spin_is_locked(&dev->slock)); +#endif + DEB_EE(("dev:%p, dmaq:%p, buf:%p\n", dev, q, buf)); + + if( NULL == q ) { + ERR(("internal error: fatal NULL pointer for q.\n")); + return 0; + } + + if (NULL == q->curr) { + q->curr = buf; + DEB_D(("immediately activating buffer %p\n", buf)); + buf->activate(dev,buf,NULL); + } else { + list_add_tail(&buf->vb.queue,&q->queue); + buf->vb.state = STATE_QUEUED; + DEB_D(("adding buffer %p to queue. (active buffer present)\n", buf)); + } + return 0; +} + +void saa7146_buffer_finish(struct saa7146_dev *dev, + struct saa7146_dmaqueue *q, + int state) +{ +#if DEBUG_SPINLOCKS + BUG_ON(!spin_is_locked(&dev->slock)); +#endif + if( NULL == q->curr ) { + ERR(("internal error: fatal NULL pointer for q->curr.\n")); + return; + } + + DEB_EE(("dev:%p, dmaq:%p, state:%d\n", dev, q, state)); + + /* finish current buffer */ + q->curr->vb.state = state; + do_gettimeofday(&q->curr->vb.ts); + wake_up(&q->curr->vb.done); + + q->curr = NULL; +} + +void saa7146_buffer_next(struct saa7146_dev *dev, + struct saa7146_dmaqueue *q, int vbi) +{ + struct saa7146_buf *buf,*next = NULL; + + if( NULL == q ) { + ERR(("internal error: fatal NULL pointer for q.\n")); + return; + } + + DEB_EE(("dev:%p, dmaq:%p, vbi:%d\n", dev, q, vbi)); + +#if DEBUG_SPINLOCKS + BUG_ON(!spin_is_locked(&dev->slock)); +#endif + if (!list_empty(&q->queue)) { + /* activate next one from queue */ + buf = list_entry(q->queue.next,struct saa7146_buf,vb.queue); + list_del(&buf->vb.queue); + if (!list_empty(&q->queue)) + next = list_entry(q->queue.next,struct saa7146_buf, vb.queue); + q->curr = buf; + DEB_D(("next buffer: buf:%p, prev:%p, next:%p\n", buf, q->queue.prev,q->queue.next)); + buf->activate(dev,buf,next); + } else { + DEB_D(("no next buffer. stopping.\n")); + if( 0 != vbi ) { + /* turn off video-dma3 */ + saa7146_write(dev,MC1, MASK_20); + } else { + /* nothing to do -- just prevent next video-dma1 transfer + by lowering the protection address */ + + // fixme: fix this for vflip != 0 + + saa7146_write(dev, PROT_ADDR1, 0); + /* write the address of the rps-program */ + saa7146_write(dev, RPS_ADDR0, virt_to_bus(&dev->rps0[ 0])); + /* turn on rps */ + saa7146_write(dev, MC1, (MASK_12 | MASK_28)); + } + del_timer(&q->timeout); + } +} + +void saa7146_buffer_timeout(unsigned long data) +{ + struct saa7146_dmaqueue *q = (struct saa7146_dmaqueue*)data; + struct saa7146_dev *dev = q->dev; + unsigned long flags; + + DEB_EE(("dev:%p, dmaq:%p\n", dev, q)); + + spin_lock_irqsave(&dev->slock,flags); + if (q->curr) { + DEB_D(("timeout on %p\n", q->curr)); + saa7146_buffer_finish(dev,q,STATE_ERROR); + } + + /* we don't restart the transfer here like other drivers do. when + a streaming capture is disabled, the timeout function will be + called for the current buffer. if we activate the next buffer now, + we mess up our capture logic. if a timeout occurs on another buffer, + then something is seriously broken before, so no need to buffer the + next capture IMHO... */ +/* + saa7146_buffer_next(dev,q); +*/ + spin_unlock_irqrestore(&dev->slock,flags); +} + +/********************************************************************************/ +/* file operations */ + +static +int fops_open(struct inode *inode, struct file *file) +{ + unsigned int minor = minor(inode->i_rdev); + struct saa7146_dev *h = NULL, *dev = NULL; + struct list_head *list; + struct saa7146_fh *fh = NULL; + int result = 0; + + enum v4l2_buf_type type = V4L2_BUF_TYPE_VIDEO_CAPTURE; + + DEB_EE(("inode:%p, file:%p, minor:%d\n",inode,file,minor)); + + if (down_interruptible(&saa7146_devices_lock)) + return -ERESTARTSYS; + + list_for_each(list,&saa7146_devices) { + h = list_entry(list, struct saa7146_dev, item); + if( NULL == h->vv_data ) { + DEB_D(("device %p has not registered video devices.\n",h)); + continue; + } + DEB_D(("trying: %p @ major %d,%d\n",h,h->vv_data->video_minor,h->vv_data->vbi_minor)); + + if (h->vv_data->video_minor == minor) { + dev = h; + } + if (h->vv_data->vbi_minor == minor) { + type = V4L2_BUF_TYPE_VBI_CAPTURE; + dev = h; + } + } + if (NULL == dev) { + DEB_S(("no such video device.\n")); + result = -ENODEV; + goto out; + } + + DEB_D(("using: %p\n",dev)); + + /* check if an extension is registered */ + if( NULL == dev->ext ) { + DEB_S(("no extension registered for this device.\n")); + result = -ENODEV; + goto out; + } + + /* allocate per open data */ + fh = kmalloc(sizeof(*fh),GFP_KERNEL); + if (NULL == fh) { + DEB_S(("cannot allocate memory for per open data.\n")); + result = -ENOMEM; + goto out; + } + memset(fh,0,sizeof(*fh)); + + // FIXME: do we need to increase *our* usage count? + + if( 0 == try_module_get(dev->ext->module)) { + result = -EINVAL; + goto out; + } + + file->private_data = fh; + fh->dev = dev; + fh->type = type; + + saa7146_video_uops.open(dev,fh); + if( 0 != BOARD_CAN_DO_VBI(dev) ) { + saa7146_vbi_uops.open(dev,fh); + } + + result = 0; +out: + if( fh != 0 && result != 0 ) { + kfree(fh); + } + up(&saa7146_devices_lock); + return result; +} + +static int fops_release(struct inode *inode, struct file *file) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + + DEB_EE(("inode:%p, file:%p\n",inode,file)); + + if (down_interruptible(&saa7146_devices_lock)) + return -ERESTARTSYS; + + saa7146_video_uops.release(dev,fh,file); + if( 0 != BOARD_CAN_DO_VBI(dev) ) { + saa7146_vbi_uops.release(dev,fh,file); + } + + module_put(dev->ext->module); + file->private_data = NULL; + kfree(fh); + + up(&saa7146_devices_lock); + + return 0; +} + +int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *arg); +static int fops_ioctl(struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) +{ +/* + DEB_EE(("inode:%p, file:%p, cmd:%d, arg:%li\n",inode, file, cmd, arg)); +*/ + return video_usercopy(inode, file, cmd, arg, saa7146_video_do_ioctl); +} + +static int fops_mmap(struct file *file, struct vm_area_struct * vma) +{ + struct saa7146_fh *fh = file->private_data; + struct videobuf_queue *q; + + switch (fh->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, vma:%p\n",file, vma)); + q = &fh->video_q; + break; + } + case V4L2_BUF_TYPE_VBI_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VBI_CAPTURE: file:%p, vma:%p\n",file, vma)); + q = &fh->vbi_q; + break; + } + default: + BUG(); + return 0; + } + return videobuf_mmap_mapper(vma,q); +} + +static unsigned int fops_poll(struct file *file, struct poll_table_struct *wait) +{ + struct saa7146_fh *fh = file->private_data; + struct videobuf_buffer *buf = NULL; + struct videobuf_queue *q; + + DEB_EE(("file:%p, poll:%p\n",file, wait)); + + if (V4L2_BUF_TYPE_VBI_CAPTURE == fh->type) { + if( 0 == fh->vbi_q.streaming ) + return videobuf_poll_stream(file, &fh->vbi_q, wait); + q = &fh->vbi_q; + } else { + q = &fh->video_q; + } + + if (!list_empty(&q->stream)) + buf = list_entry(q->stream.next, struct videobuf_buffer, stream); + + if (!buf) { + return POLLERR; + } + + poll_wait(file, &buf->done, wait); + if (buf->state == STATE_DONE || buf->state == STATE_ERROR) { + return POLLIN|POLLRDNORM; + } + + return 0; +} + +static ssize_t fops_read(struct file *file, char *data, size_t count, loff_t *ppos) +{ + struct saa7146_fh *fh = file->private_data; + + switch (fh->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: file:%p, data:%p, count:%d\n",file, data, count)); + return saa7146_video_uops.read(file,data,count,ppos); + } + case V4L2_BUF_TYPE_VBI_CAPTURE: { + DEB_EE(("V4L2_BUF_TYPE_VBI_CAPTURE: file:%p, data:%p, count:%d\n",file, data, count)); + return saa7146_vbi_uops.read(file,data,count,ppos); + } + break; + default: + BUG(); + return 0; + } +} + +static struct file_operations video_fops = +{ + .owner = THIS_MODULE, + .open = fops_open, + .release = fops_release, + .read = fops_read, + .poll = fops_poll, + .mmap = fops_mmap, + .ioctl = fops_ioctl, + .llseek = no_llseek, +}; + +void vv_callback(struct saa7146_dev *dev, unsigned long status) +{ + u32 isr = status; + + DEB_EE(("dev:%p, isr:0x%08x\n",dev,(u32)status)); + + if (0 != (isr & (MASK_27))) { + DEB_INT(("irq: RPS0 (0x%08x).\n",isr)); + saa7146_video_uops.irq_done(dev,isr); + } + + if (0 != (isr & (MASK_28))) { + u32 mc2 = saa7146_read(dev, MC2); + if( 0 != (mc2 & MASK_15)) { + DEB_INT(("irq: RPS1 vbi workaround (0x%08x).\n",isr)); + wake_up(&dev->vv_data->vbi_wq); + saa7146_write(dev,MC2, MASK_31); + return; + } + DEB_INT(("irq: RPS1 (0x%08x).\n",isr)); + saa7146_vbi_uops.irq_done(dev,isr); + } +} + +static struct video_device device_template = +{ + .hardware = VID_HARDWARE_SAA7146, + .fops = &video_fops, + .minor = -1, +}; + +int saa7146_vv_init(struct saa7146_dev* dev) +{ + struct saa7146_vv *vv = kmalloc (sizeof(struct saa7146_vv),GFP_KERNEL); + if( NULL == vv ) { + ERR(("out of memory. aborting.\n")); + return -1; + } + memset(vv, 0x0, sizeof(*vv)); + + DEB_EE(("dev:%p\n",dev)); + + vv->video_minor = -1; + vv->vbi_minor = -1; + + vv->clipping = (u32*)kmalloc(SAA7146_CLIPPING_MEM, GFP_KERNEL); + if( NULL == vv->clipping ) { + ERR(("out of memory. aborting.\n")); + kfree(vv); + return -1; + } + memset(vv->clipping, 0x0, SAA7146_CLIPPING_MEM); + + saa7146_video_uops.init(dev,vv); + saa7146_vbi_uops.init(dev,vv); + + dev->vv_data = vv; + dev->vv_callback = &vv_callback; + + return 0; +} + +int saa7146_vv_release(struct saa7146_dev* dev) +{ + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("dev:%p\n",dev)); + + kfree(vv); + dev->vv_data = NULL; + dev->vv_callback = NULL; + + return 0; +} + +int saa7146_register_device(struct video_device *vid, struct saa7146_dev* dev, char *name, int type) +{ + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("dev:%p, name:'%s'\n",dev,name)); + + *vid = device_template; + strncpy(vid->name, name, 32); + vid->priv = dev; + + // fixme: -1 should be an insmod parameter *for the extension* (like "video_nr"); + if (video_register_device(vid,type,-1) < 0) { + ERR(("cannot register vbi v4l2 device. skipping.\n")); + return -1; + } + + if( VFL_TYPE_GRABBER == type ) { + vv->video_minor = vid->minor; + INFO(("%s: registered device video%d [v4l2]\n", dev->name,vid->minor & 0x1f)); + } else { + vv->vbi_minor = vid->minor; + INFO(("%s: registered device vbi%d [v4l2]\n", dev->name,vid->minor & 0x1f)); + } + + return 0; +} + +int saa7146_unregister_device(struct video_device *vid, struct saa7146_dev* dev) +{ + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("dev:%p\n",dev)); + + if( VFL_TYPE_GRABBER == vid->type ) { + vv->video_minor = -1; + } else { + vv->vbi_minor = -1; + } + video_unregister_device(vid); + + return 0; +} + +static +int __init saa7146_vv_init_module(void) +{ + return 0; +} + + +static +void __exit saa7146_vv_cleanup_module(void) +{ +} + +module_init(saa7146_vv_init_module); +module_exit(saa7146_vv_cleanup_module); + +EXPORT_SYMBOL_GPL(saa7146_set_hps_source_and_sync); +EXPORT_SYMBOL_GPL(saa7146_register_device); +EXPORT_SYMBOL_GPL(saa7146_unregister_device); + +EXPORT_SYMBOL_GPL(saa7146_vv_init); +EXPORT_SYMBOL_GPL(saa7146_vv_release); + +MODULE_AUTHOR("Michael Hunold "); +MODULE_DESCRIPTION("video4linux driver for saa7146-based hardware"); +MODULE_LICENSE("GPL"); diff -Nru a/drivers/media/common/saa7146_hlp.c b/drivers/media/common/saa7146_hlp.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_hlp.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,1043 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +#define my_min(type,x,y) \ + ({ type __x = (x), __y = (y); __x < __y ? __x: __y; }) +#define my_max(type,x,y) \ + ({ type __x = (x), __y = (y); __x > __y ? __x: __y; }) + +static +void calculate_output_format_register(struct saa7146_dev* saa, u32 palette, u32* clip_format) +{ + /* clear out the necessary bits */ + *clip_format &= 0x0000ffff; + /* set these bits new */ + *clip_format |= (( ((palette&0xf00)>>8) << 30) | ((palette&0x00f) << 24) | (((palette&0x0f0)>>4) << 16)); +} + +static +void calculate_bcs_ctrl_register(struct saa7146_dev *dev, int brightness, int contrast, int colour, u32 *bcs_ctrl) +{ + *bcs_ctrl = ((brightness << 24) | (contrast << 16) | (colour << 0)); +} + +static +void calculate_hps_source_and_sync(struct saa7146_dev *dev, int source, int sync, u32* hps_ctrl) +{ + *hps_ctrl &= ~(MASK_30 | MASK_31 | MASK_28); + *hps_ctrl |= (source << 30) | (sync << 28); +} + +static +void calculate_hxo_and_hyo(struct saa7146_vv *vv, u32* hps_h_scale, u32* hps_ctrl) +{ + int hyo = 0, hxo = 0; + + hyo = vv->standard->v_offset; + hxo = vv->standard->h_offset; + + *hps_h_scale &= ~(MASK_B0 | 0xf00); + *hps_h_scale |= (hxo << 0); + + *hps_ctrl &= ~(MASK_W0 | MASK_B2); + *hps_ctrl |= (hyo << 12); +} + +/* helper functions for the calculation of the horizontal- and vertical + scaling registers, clip-format-register etc ... + these functions take pointers to the (most-likely read-out + original-values) and manipulate them according to the requested + changes. +*/ + +/* hps_coeff used for CXY and CXUV; scale 1/1 -> scale 1/64 */ +static struct { + u16 hps_coeff; + u16 weight_sum; +} hps_h_coeff_tab [] = { + {0x00, 2}, {0x02, 4}, {0x00, 4}, {0x06, 8}, {0x02, 8}, + {0x08, 8}, {0x00, 8}, {0x1E, 16}, {0x0E, 8}, {0x26, 8}, + {0x06, 8}, {0x42, 8}, {0x02, 8}, {0x80, 8}, {0x00, 8}, + {0xFE, 16}, {0xFE, 8}, {0x7E, 8}, {0x7E, 8}, {0x3E, 8}, + {0x3E, 8}, {0x1E, 8}, {0x1E, 8}, {0x0E, 8}, {0x0E, 8}, + {0x06, 8}, {0x06, 8}, {0x02, 8}, {0x02, 8}, {0x00, 8}, + {0x00, 8}, {0xFE, 16}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, + {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, + {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, + {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0xFE, 8}, {0x7E, 8}, + {0x7E, 8}, {0x3E, 8}, {0x3E, 8}, {0x1E, 8}, {0x1E, 8}, + {0x0E, 8}, {0x0E, 8}, {0x06, 8}, {0x06, 8}, {0x02, 8}, + {0x02, 8}, {0x00, 8}, {0x00, 8}, {0xFE, 16} +}; + +/* table of attenuation values for horizontal scaling */ +u8 h_attenuation[] = { 1, 2, 4, 8, 2, 4, 8, 16, 0}; + +/* calculate horizontal scale registers */ +static +int calculate_h_scale_registers(struct saa7146_dev *dev, + int in_x, int out_x, int flip_lr, + u32* hps_ctrl, u32* hps_v_gain, u32* hps_h_prescale, u32* hps_h_scale) +{ + /* horizontal prescaler */ + u32 dcgx = 0, xpsc = 0, xacm = 0, cxy = 0, cxuv = 0; + /* horizontal scaler */ + u32 xim = 0, xp = 0, xsci =0; + /* vertical scale & gain */ + u32 pfuv = 0; + + /* helper variables */ + u32 h_atten = 0, i = 0; + + if ( 0 == out_x ) { + return -EINVAL; + } + + /* mask out vanity-bit */ + *hps_ctrl &= ~MASK_29; + + /* calculate prescale-(xspc)-value: [n .. 1/2) : 1 + [1/2 .. 1/3) : 2 + [1/3 .. 1/4) : 3 + ... */ + if (in_x > out_x) { + xpsc = in_x / out_x; + } + else { + /* zooming */ + xpsc = 1; + } + + /* if flip_lr-bit is set, number of pixels after + horizontal prescaling must be < 384 */ + if ( 0 != flip_lr ) { + + /* set vanity bit */ + *hps_ctrl |= MASK_29; + + while (in_x / xpsc >= 384 ) + xpsc++; + } + /* if zooming is wanted, number of pixels after + horizontal prescaling must be < 768 */ + else { + while ( in_x / xpsc >= 768 ) + xpsc++; + } + + /* maximum prescale is 64 (p.69) */ + if ( xpsc > 64 ) + xpsc = 64; + + /* keep xacm clear*/ + xacm = 0; + + /* set horizontal filter parameters (CXY = CXUV) */ + cxy = hps_h_coeff_tab[( (xpsc - 1) < 63 ? (xpsc - 1) : 63 )].hps_coeff; + cxuv = cxy; + + /* calculate and set horizontal fine scale (xsci) */ + + /* bypass the horizontal scaler ? */ + if ( (in_x == out_x) && ( 1 == xpsc ) ) + xsci = 0x400; + else + xsci = ( (1024 * in_x) / (out_x * xpsc) ) + xpsc; + + /* set start phase for horizontal fine scale (xp) to 0 */ + xp = 0; + + /* set xim, if we bypass the horizontal scaler */ + if ( 0x400 == xsci ) + xim = 1; + else + xim = 0; + + /* if the prescaler is bypassed, enable horizontal + accumulation mode (xacm) and clear dcgx */ + if( 1 == xpsc ) { + xacm = 1; + dcgx = 0; + } + else { + xacm = 0; + /* get best match in the table of attenuations + for horizontal scaling */ + h_atten = hps_h_coeff_tab[( (xpsc - 1) < 63 ? (xpsc - 1) : 63 )].weight_sum; + + for (i = 0; h_attenuation[i] != 0; i++) { + if (h_attenuation[i] >= h_atten) + break; + } + + dcgx = i; + } + + /* the horizontal scaling increment controls the UV filter + to reduce the bandwith to improve the display quality, + so set it ... */ + if ( xsci == 0x400) + pfuv = 0x00; + else if ( xsci < 0x600) + pfuv = 0x01; + else if ( xsci < 0x680) + pfuv = 0x11; + else if ( xsci < 0x700) + pfuv = 0x22; + else + pfuv = 0x33; + + + *hps_v_gain &= MASK_W0|MASK_B2; + *hps_v_gain |= (pfuv << 24); + + *hps_h_scale &= ~(MASK_W1 | 0xf000); + *hps_h_scale |= (xim << 31) | (xp << 24) | (xsci << 12); + + *hps_h_prescale |= (dcgx << 27) | ((xpsc-1) << 18) | (xacm << 17) | (cxy << 8) | (cxuv << 0); + + return 0; +} + +static struct { + u16 hps_coeff; + u16 weight_sum; +} hps_v_coeff_tab [] = { + {0x0100, 2}, {0x0102, 4}, {0x0300, 4}, {0x0106, 8}, {0x0502, 8}, + {0x0708, 8}, {0x0F00, 8}, {0x011E, 16}, {0x110E, 16}, {0x1926, 16}, + {0x3906, 16}, {0x3D42, 16}, {0x7D02, 16}, {0x7F80, 16}, {0xFF00, 16}, + {0x01FE, 32}, {0x01FE, 32}, {0x817E, 32}, {0x817E, 32}, {0xC13E, 32}, + {0xC13E, 32}, {0xE11E, 32}, {0xE11E, 32}, {0xF10E, 32}, {0xF10E, 32}, + {0xF906, 32}, {0xF906, 32}, {0xFD02, 32}, {0xFD02, 32}, {0xFF00, 32}, + {0xFF00, 32}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, + {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, + {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, + {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x01FE, 64}, {0x817E, 64}, + {0x817E, 64}, {0xC13E, 64}, {0xC13E, 64}, {0xE11E, 64}, {0xE11E, 64}, + {0xF10E, 64}, {0xF10E, 64}, {0xF906, 64}, {0xF906, 64}, {0xFD02, 64}, + {0xFD02, 64}, {0xFF00, 64}, {0xFF00, 64}, {0x01FE, 128} +}; + +/* table of attenuation values for vertical scaling */ +u16 v_attenuation[] = { 2, 4, 8, 16, 32, 64, 128, 256, 0}; + +/* calculate vertical scale registers */ +static +int calculate_v_scale_registers(struct saa7146_dev *dev, enum v4l2_field field, + int in_y, int out_y, u32* hps_v_scale, u32* hps_v_gain) +{ + int lpi = 0; + + /* vertical scaling */ + u32 yacm = 0, ysci = 0, yacl = 0, ypo = 0, ype = 0; + /* vertical scale & gain */ + u32 dcgy = 0, cya_cyb = 0; + + /* helper variables */ + u32 v_atten = 0, i = 0; + + /* error, if vertical zooming */ + if ( in_y < out_y ) { + return -EINVAL; + } + + /* linear phase interpolation may be used + if scaling is between 1 and 1/2 (both fields used) + or scaling is between 1/2 and 1/4 (if only one field is used) */ + + if (V4L2_FIELD_HAS_BOTH(field)) { + if( 2*out_y >= in_y) { + lpi = 1; + } + } else if (field == V4L2_FIELD_TOP || field == V4L2_FIELD_BOTTOM) { + if( 4*out_y >= in_y ) { + lpi = 1; + } + out_y *= 2; + } + if( 0 != lpi ) { + + yacm = 0; + yacl = 0; + cya_cyb = 0x00ff; + + /* calculate scaling increment */ + if ( in_y > out_y ) + ysci = ((1024 * in_y) / (out_y + 1)) - 1024; + else + ysci = 0; + + dcgy = 0; + + /* calculate ype and ypo */ + ype = ysci / 16; + ypo = ype + (ysci / 64); + + } + else { + yacm = 1; + + /* calculate scaling increment */ + ysci = (((10 * 1024 * (in_y - out_y - 1)) / in_y) + 9) / 10; + + /* calculate ype and ypo */ + ypo = ype = ((ysci + 15) / 16); + + /* the sequence length interval (yacl) has to be set according + to the prescale value, e.g. [n .. 1/2) : 0 + [1/2 .. 1/3) : 1 + [1/3 .. 1/4) : 2 + ... */ + if ( ysci < 512) { + yacl = 0; + } + else { + yacl = ( ysci / (1024 - ysci) ); + } + + /* get filter coefficients for cya, cyb from table hps_v_coeff_tab */ + cya_cyb = hps_v_coeff_tab[ (yacl < 63 ? yacl : 63 ) ].hps_coeff; + + /* get best match in the table of attenuations for vertical scaling */ + v_atten = hps_v_coeff_tab[ (yacl < 63 ? yacl : 63 ) ].weight_sum; + + for (i = 0; v_attenuation[i] != 0; i++) { + if (v_attenuation[i] >= v_atten) + break; + } + + dcgy = i; + } + + /* ypo and ype swapped in spec ? */ + *hps_v_scale |= (yacm << 31) | (ysci << 21) | (yacl << 15) | (ypo << 8 ) | (ype << 1); + + *hps_v_gain &= ~(MASK_W0|MASK_B2); + *hps_v_gain |= (dcgy << 16) | (cya_cyb << 0); + + return 0; +} + +/* simple bubble-sort algorithm with duplicate elimination */ +static +int sort_and_eliminate(u32* values, int* count) +{ + int low = 0, high = 0, top = 0, temp = 0; + int cur = 0, next = 0; + + /* sanity checks */ + if( (0 > *count) || (NULL == values) ) { + return -EINVAL; + } + + /* bubble sort the first ´count´ items of the array ´values´ */ + for( top = *count; top > 0; top--) { + for( low = 0, high = 1; high < top; low++, high++) { + if( values[low] > values[high] ) { + temp = values[low]; + values[low] = values[high]; + values[high] = temp; + } + } + } + + /* remove duplicate items */ + for( cur = 0, next = 1; next < *count; next++) { + if( values[cur] != values[next]) + values[++cur] = values[next]; + } + + *count = cur + 1; + + return 0; +} + +static +void calculate_clipping_registers_rect(struct saa7146_dev *dev, struct saa7146_fh *fh, + struct saa7146_video_dma *vdma2, u32* clip_format, u32* arbtr_ctrl, enum v4l2_field field) +{ + struct saa7146_vv *vv = dev->vv_data; + u32 *clipping = vv->clipping; + + int width = fh->ov.win.w.width; + int height = fh->ov.win.w.height; + int clipcount = fh->ov.nclips; + + u32 line_list[32]; + u32 pixel_list[32]; + int numdwords = 0; + + int i = 0, j = 0; + int cnt_line = 0, cnt_pixel = 0; + + int x[32], y[32], w[32], h[32]; + + /* clear out memory */ + memset(&line_list[0], 0x00, sizeof(u32)*32); + memset(&pixel_list[0], 0x00, sizeof(u32)*32); + memset(clipping, 0x00, SAA7146_CLIPPING_MEM); + + /* fill the line and pixel-lists */ + for(i = 0; i < clipcount; i++) { + int l = 0, r = 0, t = 0, b = 0; + + x[i] = fh->ov.clips[i].c.left; + y[i] = fh->ov.clips[i].c.top; + w[i] = fh->ov.clips[i].c.width; + h[i] = fh->ov.clips[i].c.height; + + if( w[i] < 0) { + x[i] += w[i]; w[i] = -w[i]; + } + if( h[i] < 0) { + y[i] += h[i]; h[i] = -h[i]; + } + if( x[i] < 0) { + w[i] += x[i]; x[i] = 0; + } + if( y[i] < 0) { + h[i] += y[i]; y[i] = 0; + } + if( 0 != vv->vflip ) { + y[i] = height - y[i] - h[i]; + } + + l = x[i]; + r = x[i]+w[i]; + t = y[i]; + b = y[i]+h[i]; + + /* insert left/right coordinates */ + pixel_list[ 2*i ] = my_min(int, l, width); + pixel_list[(2*i)+1] = my_min(int, r, width); + /* insert top/bottom coordinates */ + line_list[ 2*i ] = my_min(int, t, height); + line_list[(2*i)+1] = my_min(int, b, height); + } + + /* sort and eliminate lists */ + cnt_line = cnt_pixel = 2*clipcount; + sort_and_eliminate( &pixel_list[0], &cnt_pixel ); + sort_and_eliminate( &line_list[0], &cnt_line ); + + /* calculate the number of used u32s */ + numdwords = my_max(int, (cnt_line+1), (cnt_pixel+1))*2; + numdwords = my_max(int, 4, numdwords); + numdwords = my_min(int, 64, numdwords); + + /* fill up cliptable */ + for(i = 0; i < cnt_pixel; i++) { + clipping[2*i] |= (pixel_list[i] << 16); + } + for(i = 0; i < cnt_line; i++) { + clipping[(2*i)+1] |= (line_list[i] << 16); + } + + /* fill up cliptable with the display infos */ + for(j = 0; j < clipcount; j++) { + + for(i = 0; i < cnt_pixel; i++) { + + if( x[j] < 0) + x[j] = 0; + + if( pixel_list[i] < (x[j] + w[j])) { + + if ( pixel_list[i] >= x[j] ) { + clipping[2*i] |= (1 << j); + } + } + } + for(i = 0; i < cnt_line; i++) { + + if( y[j] < 0) + y[j] = 0; + + if( line_list[i] < (y[j] + h[j]) ) { + + if( line_list[i] >= y[j] ) { + clipping[(2*i)+1] |= (1 << j); + } + } + } + } + + /* adjust arbitration control register */ + *arbtr_ctrl &= 0xffff00ff; + *arbtr_ctrl |= 0x00001c00; + + vdma2->base_even = virt_to_bus(clipping); + vdma2->base_odd = virt_to_bus(clipping); + vdma2->prot_addr = virt_to_bus(clipping)+((sizeof(u32))*(numdwords)); + vdma2->base_page = 0x04; + vdma2->pitch = 0x00; + vdma2->num_line_byte = (0 << 16 | (sizeof(u32))*(numdwords-1) ); + + /* set clipping-mode. this depends on the field(s) used */ + *clip_format &= 0xfffffff7; + if (V4L2_FIELD_HAS_BOTH(field)) { + *clip_format |= 0x00000008; + } else if (field == V4L2_FIELD_TOP) { + *clip_format |= 0x00000000; + } else if (field == V4L2_FIELD_BOTTOM) { + *clip_format |= 0x00000000; + } +} + +/* disable clipping */ +static +void saa7146_disable_clipping(struct saa7146_dev *dev) +{ + u32 clip_format = saa7146_read(dev, CLIP_FORMAT_CTRL); + + /* mask out relevant bits (=lower word)*/ + clip_format &= MASK_W1; + + /* upload clipping-registers*/ + saa7146_write(dev, CLIP_FORMAT_CTRL,clip_format); + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); + + /* disable video dma2 */ + saa7146_write(dev, MC1, (MASK_21)); +} + +static +void saa7146_set_clipping_rect(struct saa7146_dev *dev, struct saa7146_fh *fh) +{ + enum v4l2_field field = fh->ov.win.field; + int clipcount = fh->ov.nclips; + + struct saa7146_video_dma vdma2; + + u32 clip_format = saa7146_read(dev, CLIP_FORMAT_CTRL); + u32 arbtr_ctrl = saa7146_read(dev, PCI_BT_V1); + + // fixme: is this used at all? SAA7146_CLIPPING_RECT_INVERTED; + u32 type = SAA7146_CLIPPING_RECT; + + /* check clipcount, disable clipping if clipcount == 0*/ + if( clipcount == 0 ) { + saa7146_disable_clipping(dev); + return; + } + + calculate_clipping_registers_rect(dev, fh, &vdma2, &clip_format, &arbtr_ctrl, field); + + /* set clipping format */ + clip_format &= 0xffff0008; + clip_format |= (type << 4); + + /* prepare video dma2 */ + saa7146_write(dev, BASE_EVEN2, vdma2.base_even); + saa7146_write(dev, BASE_ODD2, vdma2.base_odd); + saa7146_write(dev, PROT_ADDR2, vdma2.prot_addr); + saa7146_write(dev, BASE_PAGE2, vdma2.base_page); + saa7146_write(dev, PITCH2, vdma2.pitch); + saa7146_write(dev, NUM_LINE_BYTE2, vdma2.num_line_byte); + + /* prepare the rest */ + saa7146_write(dev, CLIP_FORMAT_CTRL,clip_format); + saa7146_write(dev, PCI_BT_V1, arbtr_ctrl); + + /* upload clip_control-register, clipping-registers, enable video dma2 */ + saa7146_write(dev, MC2, (MASK_05 | MASK_21 | MASK_03 | MASK_19)); + saa7146_write(dev, MC1, (MASK_05 | MASK_21)); +} + +static +void saa7146_set_window(struct saa7146_dev *dev, int width, int height, enum v4l2_field field) +{ + struct saa7146_vv *vv = dev->vv_data; + + int source = vv->current_hps_source; + int sync = vv->current_hps_sync; + + u32 hps_v_scale = 0, hps_v_gain = 0, hps_ctrl = 0, hps_h_prescale = 0, hps_h_scale = 0; + + /* set vertical scale */ + hps_v_scale = 0; /* all bits get set by the function-call */ + hps_v_gain = 0; /* fixme: saa7146_read(dev, HPS_V_GAIN);*/ + calculate_v_scale_registers(dev, field, vv->standard->v_calc, height, &hps_v_scale, &hps_v_gain); + + /* set horizontal scale */ + hps_ctrl = 0; + hps_h_prescale = 0; /* all bits get set in the function */ + hps_h_scale = 0; + calculate_h_scale_registers(dev, vv->standard->h_calc, width, vv->hflip, &hps_ctrl, &hps_v_gain, &hps_h_prescale, &hps_h_scale); + + /* set hyo and hxo */ + calculate_hxo_and_hyo(vv, &hps_h_scale, &hps_ctrl); + calculate_hps_source_and_sync(dev, source, sync, &hps_ctrl); + + /* write out new register contents */ + saa7146_write(dev, HPS_V_SCALE, hps_v_scale); + saa7146_write(dev, HPS_V_GAIN, hps_v_gain); + saa7146_write(dev, HPS_CTRL, hps_ctrl); + saa7146_write(dev, HPS_H_PRESCALE,hps_h_prescale); + saa7146_write(dev, HPS_H_SCALE, hps_h_scale); + + /* upload shadow-ram registers */ + saa7146_write(dev, MC2, (MASK_05 | MASK_06 | MASK_21 | MASK_22) ); +} + +/* calculate the new memory offsets for a desired position */ +static +void saa7146_set_position(struct saa7146_dev *dev, int w_x, int w_y, int w_height, enum v4l2_field field) +{ + struct saa7146_vv *vv = dev->vv_data; + + int b_depth = vv->ov_fmt->depth; + int b_bpl = vv->ov_fb.fmt.bytesperline; + u32 base = (u32)vv->ov_fb.base; + + struct saa7146_video_dma vdma1; + + /* calculate memory offsets for picture, look if we shall top-down-flip */ + vdma1.pitch = 2*b_bpl; + if ( 0 == vv->vflip ) { + vdma1.base_even = (u32)base + (w_y * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); + vdma1.base_odd = vdma1.base_even + (vdma1.pitch / 2); + vdma1.prot_addr = vdma1.base_even + (w_height * (vdma1.pitch / 2)); + } + else { + vdma1.base_even = (u32)base + ((w_y+w_height) * (vdma1.pitch/2)) + (w_x * (b_depth / 8)); + vdma1.base_odd = vdma1.base_even - (vdma1.pitch / 2); + vdma1.prot_addr = vdma1.base_odd - (w_height * (vdma1.pitch / 2)); + } + + if (V4L2_FIELD_HAS_BOTH(field)) { + } else if (field == V4L2_FIELD_TOP) { + vdma1.base_odd = vdma1.prot_addr; + vdma1.pitch /= 2; + } else if (field == V4L2_FIELD_BOTTOM) { + vdma1.base_odd = vdma1.base_even; + vdma1.base_even = vdma1.prot_addr; + vdma1.pitch /= 2; + } + + if ( 0 != vv->vflip ) { + vdma1.pitch *= -1; + } + + vdma1.base_page = 0; + vdma1.num_line_byte = (vv->standard->v_field<<16)+vv->standard->h_pixels; + + saa7146_write_out_dma(dev, 1, &vdma1); +} + +static +void saa7146_set_output_format(struct saa7146_dev *dev, unsigned long palette) +{ + u32 clip_format = saa7146_read(dev, CLIP_FORMAT_CTRL); + + /* call helper function */ + calculate_output_format_register(dev,palette,&clip_format); + + /* update the hps registers */ + saa7146_write(dev, CLIP_FORMAT_CTRL, clip_format); + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); +} + +void saa7146_set_picture_prop(struct saa7146_dev *dev, int brightness, int contrast, int colour) +{ + u32 bcs_ctrl = 0; + + calculate_bcs_ctrl_register(dev, brightness, contrast, colour, &bcs_ctrl); + saa7146_write(dev, BCS_CTRL, bcs_ctrl); + + /* update the bcs register */ + saa7146_write(dev, MC2, (MASK_06 | MASK_22)); +} + + +/* select input-source */ +void saa7146_set_hps_source_and_sync(struct saa7146_dev *dev, int source, int sync) +{ + struct saa7146_vv *vv = dev->vv_data; + u32 hps_ctrl = 0; + + /* read old state */ + hps_ctrl = saa7146_read(dev, HPS_CTRL); + + hps_ctrl &= ~( MASK_31 | MASK_30 | MASK_28 ); + hps_ctrl |= (source << 30) | (sync << 28); + + /* write back & upload register */ + saa7146_write(dev, HPS_CTRL, hps_ctrl); + saa7146_write(dev, MC2, (MASK_05 | MASK_21)); + + vv->current_hps_source = source; + vv->current_hps_sync = sync; +} + +/* write "data" to the gpio-pin "pin" */ +void saa7146_set_gpio(struct saa7146_dev *dev, u8 pin, u8 data) +{ + u32 value = 0; + + /* sanity check */ + if(pin > 3) + return; + + /* read old register contents */ + value = saa7146_read(dev, GPIO_CTRL ); + + value &= ~(0xff << (8*pin)); + value |= (data << (8*pin)); + + saa7146_write(dev, GPIO_CTRL, value); +} + +/* reprogram hps, enable(1) / disable(0) video */ +void saa7146_set_overlay(struct saa7146_dev *dev, struct saa7146_fh *fh, int v) +{ + struct saa7146_vv *vv = dev->vv_data; + + /* enable ? */ + if( 0 == v) { + /* disable video dma1 */ + saa7146_write(dev, MC1, MASK_22); + return; + } + + saa7146_set_window(dev, fh->ov.win.w.width, fh->ov.win.w.height, fh->ov.win.field); + saa7146_set_position(dev, fh->ov.win.w.left, fh->ov.win.w.top, fh->ov.win.w.height, fh->ov.win.field); + saa7146_set_output_format(dev, vv->ov_fmt->trans); + saa7146_set_clipping_rect(dev, fh); + + /* enable video dma1 */ + saa7146_write(dev, MC1, (MASK_06 | MASK_22)); +} + +void saa7146_write_out_dma(struct saa7146_dev* dev, int which, struct saa7146_video_dma* vdma) +{ + int where = 0; + + if( which < 1 || which > 3) { + return; + } + + /* calculate starting address */ + where = (which-1)*0x18; + + if( 0 != (dev->ext->ext_vv_data->flags & SAA7146_EXT_SWAP_ODD_EVEN)) { + saa7146_write(dev, where, vdma->base_even); + saa7146_write(dev, where+0x04, vdma->base_odd); + } else { + saa7146_write(dev, where, vdma->base_odd); + saa7146_write(dev, where+0x04, vdma->base_even); + } + saa7146_write(dev, where+0x08, vdma->prot_addr); + saa7146_write(dev, where+0x0c, vdma->pitch); + saa7146_write(dev, where+0x10, vdma->base_page); + saa7146_write(dev, where+0x14, vdma->num_line_byte); + + /* upload */ + saa7146_write(dev, MC2, (MASK_02<<(which-1))|(MASK_18<<(which-1))); +/* + printk("vdma%d.base_even: 0x%08x\n", which,vdma->base_even); + printk("vdma%d.base_odd: 0x%08x\n", which,vdma->base_odd); + printk("vdma%d.prot_addr: 0x%08x\n", which,vdma->prot_addr); + printk("vdma%d.base_page: 0x%08x\n", which,vdma->base_page); + printk("vdma%d.pitch: 0x%08x\n", which,vdma->pitch); + printk("vdma%d.num_line_byte: 0x%08x\n", which,vdma->num_line_byte); +*/ +} +static +int calculate_video_dma_grab_packed(struct saa7146_dev* dev, struct saa7146_buf *buf) +{ + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_video_dma vdma1; + + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + int width = buf->fmt->width; + int height = buf->fmt->height; + enum v4l2_field field = buf->fmt->field; + + int depth = sfmt->depth; + + DEB_CAP(("[size=%dx%d,fields=%s]\n", + width,height,v4l2_field_names[field])); + + vdma1.pitch = (width*depth*2)/8; + vdma1.num_line_byte = ((vv->standard->v_field<<16) + vv->standard->h_pixels); + vdma1.base_page = buf->pt[0].dma | ME1; + + if( 0 != vv->vflip ) { + vdma1.prot_addr = buf->pt[0].offset; + vdma1.base_even = buf->pt[0].offset+(vdma1.pitch/2)*height; + vdma1.base_odd = vdma1.base_even - (vdma1.pitch/2); + } else { + vdma1.base_even = buf->pt[0].offset; + vdma1.base_odd = vdma1.base_even + (vdma1.pitch/2); + vdma1.prot_addr = buf->pt[0].offset+(vdma1.pitch/2)*height; + } + + if (V4L2_FIELD_HAS_BOTH(field)) { + } else if (field == V4L2_FIELD_TOP) { + vdma1.base_odd = vdma1.prot_addr; + vdma1.pitch /= 2; + } else if (field == V4L2_FIELD_BOTTOM) { + vdma1.base_odd = vdma1.base_even; + vdma1.base_even = vdma1.prot_addr; + vdma1.pitch /= 2; + } + + if( 0 != vv->vflip ) { + vdma1.pitch *= -1; + } + + saa7146_write_out_dma(dev, 1, &vdma1); + return 0; +} + +static +int calc_planar_422(struct saa7146_vv *vv, struct saa7146_buf *buf, struct saa7146_video_dma *vdma2, struct saa7146_video_dma *vdma3) +{ + int height = buf->fmt->height; + int width = buf->fmt->width; + + vdma2->pitch = width; + vdma3->pitch = width; + + if( 0 != vv->vflip ) { + vdma2->prot_addr = buf->pt[1].offset; + vdma2->base_even = ((vdma2->pitch/2)*height)+buf->pt[1].offset; + vdma2->base_odd = vdma2->base_even - (vdma2->pitch/2); + + vdma3->prot_addr = buf->pt[2].offset; + vdma3->base_even = ((vdma3->pitch/2)*height)+buf->pt[2].offset; + vdma3->base_odd = vdma3->base_even - (vdma3->pitch/2); + + } else { + vdma3->base_even = buf->pt[2].offset; + vdma3->base_odd = vdma3->base_even + (vdma3->pitch/2); + vdma3->prot_addr = (vdma3->pitch/2)*height+buf->pt[2].offset; + + vdma2->base_even = buf->pt[1].offset; + vdma2->base_odd = vdma2->base_even + (vdma2->pitch/2); + vdma2->prot_addr = (vdma2->pitch/2)*height+buf->pt[1].offset; + } + + return 0; +} + +static +int calc_planar_420(struct saa7146_vv *vv, struct saa7146_buf *buf, struct saa7146_video_dma *vdma2, struct saa7146_video_dma *vdma3) +{ + int height = buf->fmt->height; + int width = buf->fmt->width; + + vdma2->pitch = width/2; + vdma3->pitch = width/2; + + if( 0 != vv->vflip ) { + vdma2->prot_addr = buf->pt[2].offset; + vdma2->base_even = ((vdma2->pitch/2)*height)+buf->pt[2].offset; + vdma2->base_odd = vdma2->base_even - (vdma2->pitch/2); + + vdma3->prot_addr = buf->pt[1].offset; + vdma3->base_even = ((vdma3->pitch/2)*height)+buf->pt[1].offset; + vdma3->base_odd = vdma3->base_even - (vdma3->pitch/2); + + } else { + vdma3->base_even = buf->pt[2].offset; + vdma3->base_odd = vdma3->base_even + (vdma3->pitch); + vdma3->prot_addr = (vdma3->pitch/2)*height+buf->pt[2].offset; + + vdma2->base_even = buf->pt[1].offset; + vdma2->base_odd = vdma2->base_even + (vdma2->pitch); + vdma2->prot_addr = (vdma2->pitch/2)*height+buf->pt[1].offset; + } + return 0; +} + + +static +int calculate_video_dma_grab_planar(struct saa7146_dev* dev, struct saa7146_buf *buf) +{ + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_video_dma vdma1; + struct saa7146_video_dma vdma2; + struct saa7146_video_dma vdma3; + + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + int width = buf->fmt->width; + int height = buf->fmt->height; + enum v4l2_field field = buf->fmt->field; + + BUG_ON(0 == buf->pt[0].dma); + BUG_ON(0 == buf->pt[1].dma); + BUG_ON(0 == buf->pt[2].dma); + + DEB_CAP(("[size=%dx%d,fields=%s]\n", + width,height,v4l2_field_names[field])); + + /* fixme: what happens for user space buffers here?. The offsets are + most likely wrong, this version here only works for page-aligned + buffers, modifications to the pagetable-functions are necessary...*/ + + vdma1.pitch = width*2; + vdma1.num_line_byte = ((vv->standard->v_field<<16) + vv->standard->h_pixels); + vdma1.base_page = buf->pt[0].dma | ME1; + + if( 0 != vv->vflip ) { + vdma1.prot_addr = buf->pt[0].offset; + vdma1.base_even = ((vdma1.pitch/2)*height)+buf->pt[0].offset; + vdma1.base_odd = vdma1.base_even - (vdma1.pitch/2); + } else { + vdma1.base_even = buf->pt[0].offset; + vdma1.base_odd = vdma1.base_even + (vdma1.pitch/2); + vdma1.prot_addr = (vdma1.pitch/2)*height+buf->pt[0].offset; + } + + vdma2.num_line_byte = 0; /* unused */ + vdma2.base_page = buf->pt[1].dma | ME1; + + vdma3.num_line_byte = 0; /* unused */ + vdma3.base_page = buf->pt[2].dma | ME1; + + switch( sfmt->depth ) { + case 12: { + calc_planar_420(vv,buf,&vdma2,&vdma3); + break; + } + case 16: { + calc_planar_422(vv,buf,&vdma2,&vdma3); + break; + } + default: { + return -1; + } + } + + if (V4L2_FIELD_HAS_BOTH(field)) { + } else if (field == V4L2_FIELD_TOP) { + vdma1.base_odd = vdma1.prot_addr; + vdma1.pitch /= 2; + vdma2.base_odd = vdma2.prot_addr; + vdma2.pitch /= 2; + vdma3.base_odd = vdma3.prot_addr; + vdma3.pitch /= 2; + } else if (field == V4L2_FIELD_BOTTOM) { + vdma1.base_odd = vdma1.base_even; + vdma1.base_even = vdma1.prot_addr; + vdma1.pitch /= 2; + vdma2.base_odd = vdma2.base_even; + vdma2.base_even = vdma2.prot_addr; + vdma2.pitch /= 2; + vdma3.base_odd = vdma3.base_even; + vdma3.base_even = vdma3.prot_addr; + vdma3.pitch /= 2; + } + + if( 0 != vv->vflip ) { + vdma1.pitch *= -1; + vdma2.pitch *= -1; + vdma3.pitch *= -1; + } + + saa7146_write_out_dma(dev, 1, &vdma1); + if( sfmt->swap != 0 ) { + saa7146_write_out_dma(dev, 3, &vdma2); + saa7146_write_out_dma(dev, 2, &vdma3); + } else { + saa7146_write_out_dma(dev, 2, &vdma2); + saa7146_write_out_dma(dev, 3, &vdma3); + } + return 0; +} + +static +void program_capture_engine(struct saa7146_dev *dev, int planar) +{ + struct saa7146_vv *vv = dev->vv_data; + int count = 0; + + unsigned long e_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_E_FID_A : CMD_E_FID_B; + unsigned long o_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_O_FID_A : CMD_O_FID_B; + + /* write beginning of rps-program */ + count = 0; + + /* wait for o_fid_a/b / e_fid_a/b toggle only if bit 0 is not set*/ + dev->rps0[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG0 | e_wait; + dev->rps0[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG0 | o_wait; + + /* set bit 0 */ + dev->rps0[ count++ ] = CMD_WR_REG | (1 << 8) | (MC2/4); + dev->rps0[ count++ ] = MASK_27 | MASK_11; + + /* turn on video-dma1 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_06 | MASK_22; /* => mask */ + dev->rps0[ count++ ] = MASK_06 | MASK_22; /* => values */ + if( 0 != planar ) { + /* turn on video-dma2 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_05 | MASK_21; /* => mask */ + dev->rps0[ count++ ] = MASK_05 | MASK_21; /* => values */ + + /* turn on video-dma3 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_04 | MASK_20; /* => mask */ + dev->rps0[ count++ ] = MASK_04 | MASK_20; /* => values */ + } + + /* wait for o_fid_a/b / e_fid_a/b toggle */ + dev->rps0[ count++ ] = CMD_PAUSE | e_wait; + dev->rps0[ count++ ] = CMD_PAUSE | o_wait; + + /* turn off video-dma1 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_22 | MASK_06; /* => mask */ + dev->rps0[ count++ ] = MASK_22; /* => values */ + if( 0 != planar ) { + /* turn off video-dma2 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_05 | MASK_21; /* => mask */ + dev->rps0[ count++ ] = MASK_21; /* => values */ + + /* turn off video-dma3 */ + dev->rps0[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps0[ count++ ] = MASK_04 | MASK_20; /* => mask */ + dev->rps0[ count++ ] = MASK_20; /* => values */ + } + + /* generate interrupt */ + dev->rps0[ count++ ] = CMD_INTERRUPT; + + /* stop */ + dev->rps0[ count++ ] = CMD_STOP; +} + +void saa7146_set_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next) +{ + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + DEB_CAP(("buf:%p, next:%p\n",buf,next)); + + saa7146_set_window(dev, buf->fmt->width, buf->fmt->height, buf->fmt->field); + saa7146_set_output_format(dev, sfmt->trans); + saa7146_disable_clipping(dev); + + if( 0 != IS_PLANAR(sfmt->trans)) { + calculate_video_dma_grab_planar(dev, buf); + program_capture_engine(dev,1); + } else { + calculate_video_dma_grab_packed(dev, buf); + program_capture_engine(dev,0); + } + + /* write the address of the rps-program */ + saa7146_write(dev, RPS_ADDR0, virt_to_bus(&dev->rps0[ 0])); + + /* turn on rps */ + saa7146_write(dev, MC1, (MASK_12 | MASK_28)); +} + diff -Nru a/drivers/media/common/saa7146_i2c.c b/drivers/media/common/saa7146_i2c.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_i2c.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,424 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +/* helper function */ +static +void my_wait(struct saa7146_dev *dev, long ms) +{ + set_current_state(TASK_INTERRUPTIBLE); + schedule_timeout((((ms+10)/10)*HZ)/1000); +} + +u32 saa7146_i2c_func(struct i2c_adapter *adapter) +{ +//fm DEB_I2C(("'%s'.\n", adapter->name)); + + return I2C_FUNC_I2C + | I2C_FUNC_SMBUS_QUICK + | I2C_FUNC_SMBUS_READ_BYTE | I2C_FUNC_SMBUS_WRITE_BYTE + | I2C_FUNC_SMBUS_READ_BYTE_DATA | I2C_FUNC_SMBUS_WRITE_BYTE_DATA; +} + +/* this function returns the status-register of our i2c-device */ +static inline +u32 saa7146_i2c_status(struct saa7146_dev *dev) +{ + u32 iicsta = saa7146_read(dev, I2C_STATUS); +/* + DEB_I2C(("status: 0x%08x\n",iicsta)); +*/ + return iicsta; +} + +/* this function runs through the i2c-messages and prepares the data to be + sent through the saa7146. have a look at the specifications p. 122 ff + to understand this. it returns the number of u32s to send, or -1 + in case of an error. */ +static +int saa7146_i2c_msg_prepare(const struct i2c_msg m[], int num, u32 *op) +{ + int h1, h2; + int i, j, addr; + int mem = 0, op_count = 0; + + /* first determine size of needed memory */ + for(i = 0; i < num; i++) { + mem += m[i].len + 1; + } + + /* worst case: we need one u32 for three bytes to be send + plus one extra byte to address the device */ + mem = 1 + ((mem-1) / 3); + + /* we assume that op points to a memory of at least SAA7146_I2C_MEM bytes + size. if we exceed this limit... */ + if ( (4*mem) > SAA7146_I2C_MEM ) { +//fm DEB_I2C(("cannot prepare i2c-message.\n")); + return -ENOMEM; + } + + /* be careful: clear out the i2c-mem first */ + memset(op,0,sizeof(u32)*mem); + + /* loop through all messages */ + for(i = 0; i < num; i++) { + + /* insert the address of the i2c-slave. + note: we get 7 bit i2c-addresses, + so we have to perform a translation */ + addr = (m[i].addr*2) + ( (0 != (m[i].flags & I2C_M_RD)) ? 1 : 0); + h1 = op_count/3; h2 = op_count%3; + op[h1] |= ( (u8)addr << ((3-h2)*8)); + op[h1] |= (SAA7146_I2C_START << ((3-h2)*2)); + op_count++; + + /* loop through all bytes of message i */ + for(j = 0; j < m[i].len; j++) { + /* insert the data bytes */ + h1 = op_count/3; h2 = op_count%3; + op[h1] |= ( (u32)((u8)m[i].buf[j]) << ((3-h2)*8)); + op[h1] |= ( SAA7146_I2C_CONT << ((3-h2)*2)); + op_count++; + } + + } + + /* have a look at the last byte inserted: + if it was: ...CONT change it to ...STOP */ + h1 = (op_count-1)/3; h2 = (op_count-1)%3; + if ( SAA7146_I2C_CONT == (0x3 & (op[h1] >> ((3-h2)*2))) ) { + op[h1] &= ~(0x2 << ((3-h2)*2)); + op[h1] |= (SAA7146_I2C_STOP << ((3-h2)*2)); + } + + /* return the number of u32s to send */ + return mem; +} + +/* this functions loops through all i2c-messages. normally, it should determine + which bytes were read through the adapter and write them back to the corresponding + i2c-message. but instead, we simply write back all bytes. + fixme: this could be improved. */ +static +int saa7146_i2c_msg_cleanup(const struct i2c_msg m[], int num, u32 *op) +{ + int i, j; + int op_count = 0; + + /* loop through all messages */ + for(i = 0; i < num; i++) { + + op_count++; + + /* loop throgh all bytes of message i */ + for(j = 0; j < m[i].len; j++) { + /* write back all bytes that could have been read */ + m[i].buf[j] = (op[op_count/3] >> ((3-(op_count%3))*8)); + op_count++; + } + } + + return 0; +} + +/* this functions resets the i2c-device and returns 0 if everything was fine, otherwise -1 */ +static +int saa7146_i2c_reset(struct saa7146_dev *dev) +{ + /* get current status */ + u32 status = saa7146_i2c_status(dev); + + /* clear registers for sure */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, I2C_TRANSFER, 0); + + /* check if any operation is still in progress */ + if ( 0 != ( status & SAA7146_I2C_BUSY) ) { + + /* yes, kill ongoing operation */ + DEB_I2C(("busy_state detected.\n")); + + /* set "ABORT-OPERATION"-bit (bit 7)*/ + saa7146_write(dev, I2C_STATUS, (dev->i2c_bitrate | MASK_07)); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + + /* clear all error-bits pending; this is needed because p.123, note 1 */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + } + + /* check if any error is (still) present. (this can be necessary because p.123, note 1) */ + status = saa7146_i2c_status(dev); + + if ( dev->i2c_bitrate != status ) { + + DEB_I2C(("error_state detected. status:0x%08x\n",status)); + + /* Repeat the abort operation. This seems to be necessary + after serious protocol errors caused by e.g. the SAA7740 */ + saa7146_write(dev, I2C_STATUS, (dev->i2c_bitrate | MASK_07)); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + + /* clear all error-bits pending */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + + /* the data sheet says it might be necessary to clear the status + twice after an abort */ + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + my_wait(dev,SAA7146_I2C_DELAY); + } + + /* if any error is still present, a fatal error has occured ... */ + status = saa7146_i2c_status(dev); + if ( dev->i2c_bitrate != status ) { + DEB_I2C(("fatal error. status:0x%08x\n",status)); + return -1; + } + + return 0; +} + +/* this functions writes out the data-byte 'dword' to the i2c-device. + it returns 0 if ok, -1 if the transfer failed, -2 if the transfer + failed badly (e.g. address error) */ +static +int saa7146_i2c_writeout(struct saa7146_dev *dev, u32* dword) +{ + u32 status = 0, mc2 = 0; + int timeout; + + /* write out i2c-command */ + DEB_I2C(("before: 0x%08x (status: 0x%08x), %d\n",*dword,saa7146_read(dev, I2C_STATUS), dev->i2c_op)); + + if( 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags)) { + + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, I2C_TRANSFER, *dword); + + dev->i2c_op = 1; + IER_ENABLE(dev, MASK_16|MASK_17); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + + wait_event_interruptible(dev->i2c_wq, dev->i2c_op == 0); + if (signal_pending (current)) { + /* a signal arrived */ + return -ERESTARTSYS; + } + status = saa7146_read(dev, I2C_STATUS); + } else { + saa7146_write(dev, I2C_STATUS, dev->i2c_bitrate); + saa7146_write(dev, I2C_TRANSFER, *dword); + saa7146_write(dev, MC2, (MASK_00 | MASK_16)); + + /* do not poll for i2c-status before upload is complete */ + timeout = jiffies + HZ/100 + 1; /* 10ms */ + while(1) { + mc2 = (saa7146_read(dev, MC2) & 0x1); + if( 0 != mc2 ) { + break; + } + if (jiffies > timeout) { + printk(KERN_WARNING "saa7146_i2c_writeout: timed out waiting for MC2\n"); + return -EIO; + } + } + /* wait until we get a transfer done or error */ + timeout = jiffies + HZ/100 + 1; /* 10ms */ + while(1) { + status = saa7146_i2c_status(dev); + if( (0x3 == (status & 0x3)) || (0 == (status & 0x1)) ) { + break; + } + if (jiffies > timeout) { + /* this is normal when probing the bus + * (no answer from nonexisistant device...) + */ + DEB_I2C(("saa7146_i2c_writeout: timed out waiting for end of xfer\n")); + return -EIO; + } + my_wait(dev,1); + } + } + + /* give a detailed status report */ + if ( 0 != (status & SAA7146_I2C_ERR)) { + + if( 0 != (status & SAA7146_I2C_SPERR) ) { + DEB_I2C(("error due to invalid start/stop condition.\n")); + } + if( 0 != (status & SAA7146_I2C_DTERR) ) { + DEB_I2C(("error in data transmission.\n")); + } + if( 0 != (status & SAA7146_I2C_DRERR) ) { + DEB_I2C(("error when receiving data.\n")); + } + if( 0 != (status & SAA7146_I2C_AL) ) { + DEB_I2C(("error because arbitration lost.\n")); + } + + /* we handle address-errors here */ + if( 0 != (status & SAA7146_I2C_APERR) ) { + DEB_I2C(("error in address phase.\n")); + return -EREMOTEIO; + } + + return -EIO; + } + + /* read back data, just in case we were reading ... */ + *dword = saa7146_read(dev, I2C_TRANSFER); + + DEB_I2C(("after: 0x%08x\n",*dword)); + return 0; +} + +int saa7146_i2c_transfer(struct saa7146_dev *dev, const struct i2c_msg msgs[], int num, int retries) +{ + int i = 0, count = 0; + u32* buffer = dev->i2c_mem; + int err = 0; + int address_err = 0; + + if (down_interruptible (&dev->i2c_lock)) + return -ERESTARTSYS; + + for(i=0;i count ) { + err = -1; + goto out; + } + + do { + /* reset the i2c-device if necessary */ + err = saa7146_i2c_reset(dev); + if ( 0 > err ) { + DEB_I2C(("could not reset i2c-device.\n")); + goto out; + } + + /* write out the u32s one after another */ + for(i = 0; i < count; i++) { + err = saa7146_i2c_writeout(dev, &buffer[i] ); + if ( 0 != err) { + /* this one is unsatisfying: some i2c slaves on some + dvb cards don't acknowledge correctly, so the saa7146 + thinks that an address error occured. in that case, the + transaction should be retrying, even if an address error + occured. analog saa7146 based cards extensively rely on + i2c address probing, however, and address errors indicate that a + device is really *not* there. retrying in that case + increases the time the device needs to probe greatly, so + it should be avoided. because of the fact, that only + analog based cards use irq based i2c transactions (for dvb + cards, this screwes up other interrupt sources), we bail out + completely for analog cards after an address error and trust + the saa7146 address error detection. */ + if ( -EREMOTEIO == err ) { + if( 0 != (SAA7146_USE_I2C_IRQ & dev->ext->flags)) { + goto out; + } + address_err++; + } + DEB_I2C(("error while sending message(s). starting again.\n")); + break; + } + } + if( 0 == err ) { + err = num; + break; + } + + /* delay a bit before retrying */ + my_wait(dev, 10); + + } while (err != num && retries--); + + /* if every retry had an address error, exit right away */ + if (address_err == retries) { + goto out; + } + + /* if any things had to be read, get the results */ + if ( 0 != saa7146_i2c_msg_cleanup(msgs, num, buffer)) { + DEB_I2C(("could not cleanup i2c-message.\n")); + err = -1; + goto out; + } + + /* return the number of delivered messages */ + DEB_I2C(("transmission successful. (msg:%d).\n",err)); +out: + /* another bug in revision 0: the i2c-registers get uploaded randomly by other + uploads, so we better clear them out before continueing */ + if( 0 == dev->revision ) { + u32 zero = 0; + saa7146_i2c_reset(dev); + if( 0 != saa7146_i2c_writeout(dev, &zero)) { + INFO(("revision 0 error. this should never happen.\n")); + } + } + + up(&dev->i2c_lock); + return err; +} + +/* utility functions */ +static +int saa7146_i2c_xfer(struct i2c_adapter* adapter, struct i2c_msg msg[], int num) +{ + struct saa7146_dev* dev = i2c_get_adapdata(adapter); + + DEB_I2C(("adapter: '%s'.\n", adapter->dev.name)); + + /* use helper function to transfer data */ + return saa7146_i2c_transfer(dev, msg, num, adapter->retries); +} + + +/*****************************************************************************/ +/* i2c-adapter helper functions */ +#include + +/* exported algorithm data */ +static +struct i2c_algorithm saa7146_algo = { + .name = "saa7146 i2c algorithm", + .id = I2C_ALGO_SAA7146, + .master_xfer = saa7146_i2c_xfer, + .functionality = saa7146_i2c_func, +}; + +int saa7146_i2c_adapter_prepare(struct saa7146_dev *dev, struct i2c_adapter *i2c_adapter, u32 bitrate) +{ + DEB_EE(("bitrate: 0x%08x\n",bitrate)); + + dev->i2c_bitrate = bitrate; + saa7146_i2c_reset(dev); + + if( NULL != i2c_adapter ) { + memset(i2c_adapter,0,sizeof(struct i2c_adapter)); + strcpy(i2c_adapter->dev.name, dev->name); + i2c_set_adapdata(i2c_adapter,dev); + i2c_adapter->algo = &saa7146_algo; + i2c_adapter->algo_data = NULL; + i2c_adapter->id = I2C_ALGO_SAA7146; + i2c_adapter->timeout = SAA7146_I2C_TIMEOUT; + i2c_adapter->retries = SAA7146_I2C_RETRIES; + } + + return 0; +} diff -Nru a/drivers/media/common/saa7146_vbi.c b/drivers/media/common/saa7146_vbi.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_vbi.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,468 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +static int vbi_pixel_to_capture = 720 * 2; + +static +int vbi_workaround(struct saa7146_dev *dev) +{ + struct saa7146_vv *vv = dev->vv_data; + + u32 *cpu; + dma_addr_t dma_addr; + + int i, index; + + DECLARE_WAITQUEUE(wait, current); + + DEB_VBI(("dev:%p\n",dev)); + + /* once again, a bug in the saa7146: the brs acquisition + is buggy and especially the BXO-counter does not work + as specified. there is this workaround, but please + don't let me explain it. ;-) */ + + cpu = pci_alloc_consistent(dev->pci, 4096, &dma_addr); + if (NULL == cpu) + return -ENOMEM; + + /* setup some basic programming, just for the workaround */ + saa7146_write(dev, BASE_EVEN3, dma_addr); + saa7146_write(dev, BASE_ODD3, dma_addr+vbi_pixel_to_capture); + saa7146_write(dev, PROT_ADDR3, dma_addr+4096); + saa7146_write(dev, PITCH3, vbi_pixel_to_capture); + saa7146_write(dev, BASE_PAGE3, 0x0); + saa7146_write(dev, NUM_LINE_BYTE3, (2<<16)|((vbi_pixel_to_capture)<<0)); + saa7146_write(dev, MC2, MASK_04|MASK_20); + + + /* we have to do the workaround two times to be sure that + everything is ok */ + for(i = 0; i < 2; i++) { + + /* indicate to the irq handler that we do the workaround */ + saa7146_write(dev, MC2, MASK_31|MASK_15); + + saa7146_write(dev, NUM_LINE_BYTE3, (1<<16)|(2<<0)); + saa7146_write(dev, MC2, MASK_04|MASK_20); + + index = 0; + + /* load brs-control register */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (BRS_CTRL/4); + /* BXO = 1h, BRS to outbound */ + dev->rps1[index++]=0xc000008c; + /* wait for vbi_a */ + dev->rps1[index++] = CMD_PAUSE | MASK_10; + /* upload brs */ + dev->rps1[index++] = CMD_UPLOAD | MASK_08; + /* load brs-control register */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (BRS_CTRL/4); + /* BYO = 1, BXO = NQBIL (=1728 for PAL, for NTSC this is 858*2) - NumByte3 (=1440) = 288 */ + dev->rps1[index++] = ((1728-(vbi_pixel_to_capture)) << 7) | MASK_19; + /* wait for brs_done */ + dev->rps1[index++] = CMD_PAUSE | MASK_08; + /* upload brs */ + dev->rps1[index++] = CMD_UPLOAD | MASK_08; + /* load video-dma3 NumLines3 and NumBytes3 */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (NUM_LINE_BYTE3/4); + /* dev->vbi_count*2 lines, 720 pixel (= 1440 Bytes) */ + dev->rps1[index++]= (2 << 16) | (vbi_pixel_to_capture); + /* load brs-control register */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (BRS_CTRL/4); + /* Set BRS right: note: this is an experimental value for BXO (=> PAL!) */ + dev->rps1[index++] = (540 << 7) | (5 << 19); // 5 == vbi_start + /* wait for brs_done */ + dev->rps1[index++] = CMD_PAUSE | MASK_08; + /* upload brs and video-dma3*/ + dev->rps1[index++] = CMD_UPLOAD | MASK_08 | MASK_04; + /* load mc2 register: enable dma3 */ + dev->rps1[index++] = CMD_WR_REG | (1 << 8) | (MC1/4); + dev->rps1[index++] = MASK_20 | MASK_04; + /* generate interrupt */ + dev->rps1[index++] = CMD_INTERRUPT; + /* stop rps1 */ + dev->rps1[index++] = CMD_STOP; + + /* enable rps1 irqs */ + IER_ENABLE(dev,MASK_28); + + /* prepare to wait to be woken up by the irq-handler */ + add_wait_queue(&vv->vbi_wq, &wait); + current->state = TASK_INTERRUPTIBLE; + + /* start rps1 to enable workaround */ + saa7146_write(dev, RPS_ADDR1, virt_to_bus(&dev->rps1[ 0])); + saa7146_write(dev, MC1, (MASK_13 | MASK_29)); + + schedule(); + + DEB_VBI(("brs bug workaround %d/1.\n",i)); + + remove_wait_queue(&vv->vbi_wq, &wait); + current->state = TASK_RUNNING; + + /* disable rps1 irqs */ + IER_DISABLE(dev,MASK_28); + + /* stop video-dma3 */ + saa7146_write(dev, MC1, MASK_20); + + if(signal_pending(current)) { + + DEB_VBI(("aborted.\n")); + + /* stop rps1 for sure */ + saa7146_write(dev, MC1, MASK_29); + + pci_free_consistent(dev->pci, 4096, cpu, dma_addr); + return -EINTR; + } + } + + pci_free_consistent(dev->pci, 4096, cpu, dma_addr); + return 0; +} + +void saa7146_set_vbi_capture(struct saa7146_dev *dev, struct saa7146_buf *buf, struct saa7146_buf *next) +{ + struct saa7146_vv *vv = dev->vv_data; + + struct saa7146_video_dma vdma3; + + int count = 0; + unsigned long e_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_E_FID_A : CMD_E_FID_B; + unsigned long o_wait = vv->current_hps_sync == SAA7146_HPS_SYNC_PORT_A ? CMD_O_FID_A : CMD_O_FID_B; + +/* + vdma3.base_even = (u32)dev->ov_fb.base+2048*70; + vdma3.base_odd = (u32)dev->ov_fb.base; + vdma3.prot_addr = (u32)dev->ov_fb.base+2048*164; + vdma3.pitch = 2048; + vdma3.base_page = 0; + vdma3.num_line_byte = (64<<16)|((vbi_pixel_to_capture)<<0); // set above! +*/ + vdma3.base_even = buf->pt[2].offset; + vdma3.base_odd = buf->pt[2].offset + 16 * vbi_pixel_to_capture; + vdma3.prot_addr = buf->pt[2].offset + 16 * 2 * vbi_pixel_to_capture; + vdma3.pitch = vbi_pixel_to_capture; + vdma3.base_page = buf->pt[2].dma | ME1; + vdma3.num_line_byte = (16 << 16) | vbi_pixel_to_capture; + saa7146_write_out_dma(dev, 3, &vdma3); + + /* write beginning of rps-program */ + count = 0; + + /* wait for o_fid_a/b / e_fid_a/b toggle only if bit 1 is not set */ + + /* we don't wait here for the first field anymore. this is different from the video + capture and might cause that the first buffer is only half filled (with only + one field). but since this is some sort of streaming data, this is not that negative. + but by doing this, we can use the whole engine from video-buf.c... */ + +/* + dev->rps1[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG1 | e_wait; + dev->rps1[ count++ ] = CMD_PAUSE | CMD_OAN | CMD_SIG1 | o_wait; +*/ + /* set bit 1 */ + dev->rps1[ count++ ] = CMD_WR_REG | (1 << 8) | (MC2/4); + dev->rps1[ count++ ] = MASK_28 | MASK_12; + + /* turn on video-dma3 */ + dev->rps1[ count++ ] = CMD_WR_REG_MASK | (MC1/4); + dev->rps1[ count++ ] = MASK_04 | MASK_20; /* => mask */ + dev->rps1[ count++ ] = MASK_04 | MASK_20; /* => values */ + + /* wait for o_fid_a/b / e_fid_a/b toggle */ + dev->rps1[ count++ ] = CMD_PAUSE | o_wait; + dev->rps1[ count++ ] = CMD_PAUSE | e_wait; + + /* generate interrupt */ + dev->rps1[ count++ ] = CMD_INTERRUPT; + + /* stop */ + dev->rps1[ count++ ] = CMD_STOP; + + /* enable rps1 irqs */ + IER_ENABLE(dev, MASK_28); + + /* write the address of the rps-program */ + saa7146_write(dev, RPS_ADDR1, virt_to_bus(&dev->rps1[ 0])); + + /* turn on rps */ + saa7146_write(dev, MC1, (MASK_13 | MASK_29)); +} + +static +int buffer_activate(struct saa7146_dev *dev, + struct saa7146_buf *buf, + struct saa7146_buf *next) +{ + struct saa7146_vv *vv = dev->vv_data; + buf->vb.state = STATE_ACTIVE; + + DEB_VBI(("dev:%p, buf:%p, next:%p\n",dev,buf,next)); + saa7146_set_vbi_capture(dev,buf,next); + + mod_timer(&vv->vbi_q.timeout, jiffies+BUFFER_TIMEOUT); + return 0; +} + +static +int buffer_prepare(struct file *file, struct videobuf_buffer *vb,enum v4l2_field field) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + int err = 0; + int lines, llength, size; + + lines = 16 * 2 ; /* 2 fields */ + llength = vbi_pixel_to_capture; + size = lines * llength; + + DEB_VBI(("vb:%p\n",vb)); + + if (0 != buf->vb.baddr && buf->vb.bsize < size) { + DEB_VBI(("size mismatch.\n")); + return -EINVAL; + } + + if (buf->vb.size != size) + saa7146_dma_free(dev,buf); + + if (STATE_NEEDS_INIT == buf->vb.state) { + buf->vb.width = llength; + buf->vb.height = lines; + buf->vb.size = size; + buf->vb.field = field; // FIXME: check this + + saa7146_pgtable_free(dev->pci, &buf->pt[2]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[2]); + + err = videobuf_iolock(dev->pci,&buf->vb); + if (err) + goto oops; + saa7146_pgtable_build_single(dev->pci, &buf->pt[2], buf->vb.dma.sglist, buf->vb.dma.sglen); + } + buf->vb.state = STATE_PREPARED; + buf->activate = buffer_activate; + + return 0; + + oops: + DEB_VBI(("error out.\n")); + saa7146_dma_free(dev,buf); + + return err; +} + +static int +buffer_setup(struct file *file, unsigned int *count, unsigned int *size) +{ + int llength,lines; + + lines = 16 * 2 ; /* 2 fields */ + llength = vbi_pixel_to_capture; + + *size = lines * llength; + *count = 2; + + DEB_VBI(("count:%d, size:%d\n",*count,*size)); + + return 0; +} + +static +void buffer_queue(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_VBI(("vb:%p\n",vb)); + saa7146_buffer_queue(dev,&vv->vbi_q,buf); +} + +static +void buffer_release(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_VBI(("vb:%p\n",vb)); + saa7146_dma_free(dev,buf); +} + +static +struct videobuf_queue_ops vbi_qops = { + .buf_setup = buffer_setup, + .buf_prepare = buffer_prepare, + .buf_queue = buffer_queue, + .buf_release = buffer_release, +}; + +/* ------------------------------------------------------------------ */ + +static +void vbi_stop(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + DEB_VBI(("dev:%p, fh:%p\n",dev, fh)); + + spin_lock_irqsave(&dev->slock,flags); + + /* disable rps1 */ + saa7146_write(dev, MC1, MASK_29); + + /* disable rps1 irqs */ + IER_DISABLE(dev, MASK_28); + + /* shut down dma 3 transfers */ + saa7146_write(dev, MC1, MASK_20); + + vv->vbi_streaming = NULL; + spin_unlock_irqrestore(&dev->slock, flags); +} + +static +void vbi_read_timeout(unsigned long data) +{ + struct saa7146_fh *fh = (struct saa7146_fh *)data; + struct saa7146_dev *dev = fh->dev; + + DEB_VBI(("dev:%p, fh:%p\n",dev, fh)); + + vbi_stop(fh); +} + +static +void vbi_init(struct saa7146_dev *dev, struct saa7146_vv *vv) +{ + DEB_VBI(("dev:%p\n",dev)); + + INIT_LIST_HEAD(&vv->vbi_q.queue); + + init_timer(&vv->vbi_q.timeout); + vv->vbi_q.timeout.function = saa7146_buffer_timeout; + vv->vbi_q.timeout.data = (unsigned long)(&vv->vbi_q); + vv->vbi_q.dev = dev; + + init_waitqueue_head(&vv->vbi_wq); +} + +static +void vbi_open(struct saa7146_dev *dev, struct saa7146_fh *fh) +{ + DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); + + memset(&fh->vbi_fmt,0,sizeof(fh->vbi_fmt)); + + fh->vbi_fmt.sampling_rate = 27000000; + fh->vbi_fmt.offset = 248; /* todo */ + fh->vbi_fmt.samples_per_line = vbi_pixel_to_capture; + fh->vbi_fmt.sample_format = V4L2_PIX_FMT_GREY; + + /* fixme: this only works for PAL */ + fh->vbi_fmt.start[0] = 5; + fh->vbi_fmt.count[0] = 16; + fh->vbi_fmt.start[1] = 312; + fh->vbi_fmt.count[1] = 16; + + videobuf_queue_init(&fh->vbi_q, &vbi_qops, + dev->pci, &dev->slock, + V4L2_BUF_TYPE_VBI_CAPTURE, + V4L2_FIELD_SEQ_TB, // FIXME: does this really work? + sizeof(struct saa7146_buf)); + init_MUTEX(&fh->vbi_q.lock); + + init_timer(&fh->vbi_read_timeout); + fh->vbi_read_timeout.function = vbi_read_timeout; + fh->vbi_read_timeout.data = (unsigned long)fh; + + vbi_workaround(dev); +} + +static +void vbi_close(struct saa7146_dev *dev, struct saa7146_fh *fh, struct file *file) +{ + struct saa7146_vv *vv = dev->vv_data; + DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); + + if( fh == vv->vbi_streaming ) { + vbi_stop(fh); + } +} + +static +void vbi_irq_done(struct saa7146_dev *dev, unsigned long status) +{ + struct saa7146_vv *vv = dev->vv_data; + spin_lock(&dev->slock); + + if (vv->vbi_q.curr) { + DEB_VBI(("dev:%p, curr:%p\n",dev,vv->vbi_q.curr)); + /* this must be += 2, one count for each field */ + vv->vbi_fieldcount+=2; + vv->vbi_q.curr->vb.field_count = vv->vbi_fieldcount; + saa7146_buffer_finish(dev,&vv->vbi_q,STATE_DONE); + } else { + DEB_VBI(("dev:%p\n",dev)); + } + saa7146_buffer_next(dev,&vv->vbi_q,1); + + spin_unlock(&dev->slock); +} + +static +ssize_t vbi_read(struct file *file, char *data, size_t count, loff_t *ppos) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + ssize_t ret = 0; + + DEB_VBI(("dev:%p, fh:%p\n",dev,fh)); + + if( NULL == vv->vbi_streaming ) { + // fixme: check if dma3 is available + // fixme: activate vbi engine here if necessary. (really?) + vv->vbi_streaming = fh; + } + + if( fh != vv->vbi_streaming ) { + DEB_VBI(("open %p is already using vbi capture.",vv->vbi_streaming)); + return -EBUSY; + } + + mod_timer(&fh->vbi_read_timeout, jiffies+BUFFER_TIMEOUT); + ret = videobuf_read_stream(file, &fh->vbi_q, data, count, ppos, 1); +/* + printk("BASE_ODD3: 0x%08x\n", saa7146_read(dev, BASE_ODD3)); + printk("BASE_EVEN3: 0x%08x\n", saa7146_read(dev, BASE_EVEN3)); + printk("PROT_ADDR3: 0x%08x\n", saa7146_read(dev, PROT_ADDR3)); + printk("PITCH3: 0x%08x\n", saa7146_read(dev, PITCH3)); + printk("BASE_PAGE3: 0x%08x\n", saa7146_read(dev, BASE_PAGE3)); + printk("NUM_LINE_BYTE3: 0x%08x\n", saa7146_read(dev, NUM_LINE_BYTE3)); + printk("BRS_CTRL: 0x%08x\n", saa7146_read(dev, BRS_CTRL)); +*/ + return ret; +} + +struct saa7146_use_ops saa7146_vbi_uops = { + .init = vbi_init, + .open = vbi_open, + .release = vbi_close, + .irq_done = vbi_irq_done, + .read = vbi_read, +}; + +EXPORT_SYMBOL_GPL(saa7146_vbi_uops); diff -Nru a/drivers/media/common/saa7146_video.c b/drivers/media/common/saa7146_video.c --- /dev/null Wed Dec 31 16:00:00 1969 +++ b/drivers/media/common/saa7146_video.c Sat Apr 12 14:44:10 2003 @@ -0,0 +1,1387 @@ +#include + +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,5,51) + #define KBUILD_MODNAME saa7146 +#endif + +static +int memory = 32; + +MODULE_PARM(memory,"i"); +MODULE_PARM_DESC(memory, "maximum memory usage for capture buffers (default: 32Mb)"); + +/* format descriptions for capture and preview */ +static +struct saa7146_format formats[] = { + { + .name = "RGB-8 (3-3-2)", + .pixelformat = V4L2_PIX_FMT_RGB332, + .trans = RGB08_COMPOSED, + .depth = 8, + }, { + .name = "RGB-16 (5/B-6/G-5/R)", /* really? */ + .pixelformat = V4L2_PIX_FMT_RGB565, + .trans = RGB16_COMPOSED, + .depth = 16, + }, { + .name = "RGB-24 (B-G-R)", + .pixelformat = V4L2_PIX_FMT_BGR24, + .trans = RGB24_COMPOSED, + .depth = 24, + }, { + .name = "RGB-32 (B-G-R)", + .pixelformat = V4L2_PIX_FMT_BGR32, + .trans = RGB32_COMPOSED, + .depth = 32, + }, { + .name = "Greyscale-8", + .pixelformat = V4L2_PIX_FMT_GREY, + .trans = Y8, + .depth = 8, + }, { + .name = "YUV 4:2:2 planar (Y-Cb-Cr)", + .pixelformat = V4L2_PIX_FMT_YUV422P, + .trans = YUV422_DECOMPOSED, + .depth = 16, + .swap = 1, + }, { + .name = "YVU 4:2:0 planar (Y-Cb-Cr)", + .pixelformat = V4L2_PIX_FMT_YVU420, + .trans = YUV420_DECOMPOSED, + .depth = 12, + .swap = 1, + }, { + .name = "YUV 4:2:0 planar (Y-Cb-Cr)", + .pixelformat = V4L2_PIX_FMT_YUV420, + .trans = YUV420_DECOMPOSED, + .depth = 12, + }, { + .name = "YUV 4:2:2 (U-Y-V-Y)", + .pixelformat = V4L2_PIX_FMT_UYVY, + .trans = YUV422_COMPOSED, + .depth = 16, + } +}; + +/* unfortunately, the saa7146 contains a bug which prevents it from doing on-the-fly byte swaps. + due to this, it's impossible to provide additional *packed* formats, which are simply byte swapped + (like V4L2_PIX_FMT_YUYV) ... 8-( */ + +static +int NUM_FORMATS = sizeof(formats)/sizeof(struct saa7146_format); + +struct saa7146_format* format_by_fourcc(struct saa7146_dev *dev, int fourcc) +{ + int i, j = NUM_FORMATS; + + for (i = 0; i < j; i++) { + if (formats[i].pixelformat == fourcc) { + return formats+i; + } + } + + DEB_D(("unknown pixelformat:'%4.4s'\n",(char *)&fourcc)); + return NULL; +} + +static +int g_fmt(struct saa7146_fh *fh, struct v4l2_format *f) +{ + struct saa7146_dev *dev = fh->dev; + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + f->fmt.pix = fh->video_fmt; + return 0; + case V4L2_BUF_TYPE_VIDEO_OVERLAY: + f->fmt.win = fh->ov.win; + return 0; + case V4L2_BUF_TYPE_VBI_CAPTURE: + { + f->fmt.vbi = fh->vbi_fmt; + return 0; + } + default: + DEB_D(("invalid format type '%d'.\n",f->type)); + return -EINVAL; + } +} + +static +int try_win(struct saa7146_dev *dev, struct v4l2_window *win) +{ + struct saa7146_vv *vv = dev->vv_data; + enum v4l2_field field; + int maxw, maxh; + + DEB_EE(("dev:%p\n",dev)); + + if (NULL == vv->ov_fb.base) { + DEB_D(("no fb base set.\n")); + return -EINVAL; + } + if (NULL == vv->ov_fmt) { + DEB_D(("no fb fmt set.\n")); + return -EINVAL; + } + if (win->w.width < 64 || win->w.height < 64) { + DEB_D(("min width/height. (%d,%d)\n",win->w.width,win->w.height)); + return -EINVAL; + } + if (win->clipcount > 16) { + DEB_D(("clipcount too big.\n")); + return -EINVAL; + } + + field = win->field; + maxw = vv->standard->h_max_out; + maxh = vv->standard->v_max_out; + + if (V4L2_FIELD_ANY == field) { + field = (win->w.height > maxh/2) + ? V4L2_FIELD_INTERLACED + : V4L2_FIELD_TOP; + } + switch (field) { + case V4L2_FIELD_TOP: + case V4L2_FIELD_BOTTOM: + maxh = maxh / 2; + break; + case V4L2_FIELD_INTERLACED: + break; + default: { + DEB_D(("no known field mode '%d'.\n",field)); + return -EINVAL; + } + } + + win->field = field; + if (win->w.width > maxw) + win->w.width = maxw; + if (win->w.height > maxh) + win->w.height = maxh; + + return 0; +} + +static +int try_fmt(struct saa7146_fh *fh, struct v4l2_format *f) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + int err; + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + { + struct saa7146_format *fmt; + enum v4l2_field field; + int maxw, maxh; + + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n",dev,fh)); + + fmt = format_by_fourcc(dev,f->fmt.pix.pixelformat); + if (NULL == fmt) { + return -EINVAL; + } + + field = f->fmt.pix.field; + maxw = vv->standard->h_max_out; + maxh = vv->standard->v_max_out; + + if (V4L2_FIELD_ANY == field) { + field = (f->fmt.pix.height > maxh/2) + ? V4L2_FIELD_INTERLACED + : V4L2_FIELD_BOTTOM; + } + switch (field) { + case V4L2_FIELD_TOP: + case V4L2_FIELD_BOTTOM: + maxh = maxh / 2; + break; + case V4L2_FIELD_INTERLACED: + break; + default: { + DEB_D(("no known field mode '%d'.\n",field)); + return -EINVAL; + } + } + + f->fmt.pix.field = field; + if (f->fmt.pix.width > maxw) + f->fmt.pix.width = maxw; + if (f->fmt.pix.height > maxh) + f->fmt.pix.height = maxh; + f->fmt.pix.sizeimage = + (f->fmt.pix.width * f->fmt.pix.height * fmt->depth)/8; + return 0; + } + case V4L2_BUF_TYPE_VIDEO_OVERLAY: + DEB_EE(("V4L2_BUF_TYPE_VIDEO_OVERLAY: dev:%p, fh:%p\n",dev,fh)); + err = try_win(dev,&f->fmt.win); + if (0 != err) { + return err; + } + return 0; + default: + DEB_EE(("unknown format type '%d'\n",f->type)); + return -EINVAL; + } +} + +static +int start_preview(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + int err = 0; + + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + /* check if we have overlay informations */ + if( NULL == fh->ov.fh ) { + DEB_D(("not overlay data available. try S_FMT first.\n")); + return -EAGAIN; + } + + /* check if overlay is running */ + if( 0 != vv->ov_data ) { + if( fh != vv->ov_data->fh ) { + DEB_D(("overlay is running in another open.\n")); + return -EAGAIN; + } + DEB_D(("overlay is already active.\n")); + return 0; + } + + if( 0 != vv->streaming ) { + DEB_D(("streaming capture is active.\n")); + return -EBUSY; + } + + err = try_win(dev,&fh->ov.win); + if (0 != err) { + return err; + } + + vv->ov_data = &fh->ov; + + DEB_D(("%dx%d+%d+%d %s field=%s\n", + fh->ov.win.w.width,fh->ov.win.w.height, + fh->ov.win.w.left,fh->ov.win.w.top, + vv->ov_fmt->name,v4l2_field_names[fh->ov.win.field])); + + saa7146_set_overlay(dev, fh, 1); + + return 0; +} + +static +int stop_preview(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + DEB_EE(("saa7146.o: stop_preview()\n")); + + /* check if overlay is running */ + if( 0 == vv->ov_data ) { + DEB_D(("overlay is not active.\n")); + return 0; + } + + if( fh != vv->ov_data->fh ) { + DEB_D(("overlay is active, but for another open.\n")); + return -EBUSY; + } + + saa7146_set_overlay(dev, fh, 0); + vv->ov_data = NULL; + + return 0; +} + +static +int s_fmt(struct saa7146_fh *fh, struct v4l2_format *f) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + unsigned long flags; + int err; + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + DEB_EE(("V4L2_BUF_TYPE_VIDEO_CAPTURE: dev:%p, fh:%p\n",dev,fh)); + if( fh == vv->streaming ) { + DEB_EE(("streaming capture is active")); + return -EAGAIN; + } + err = try_fmt(fh,f); + if (0 != err) + return err; + fh->video_fmt = f->fmt.pix; + DEB_EE(("set to pixelformat '%4.4s'\n",(char *)&fh->video_fmt.pixelformat)); + return 0; + case V4L2_BUF_TYPE_VIDEO_OVERLAY: + DEB_EE(("V4L2_BUF_TYPE_VIDEO_OVERLAY: dev:%p, fh:%p\n",dev,fh)); + err = try_win(dev,&f->fmt.win); + if (0 != err) + return err; + down(&dev->lock); + fh->ov.win = f->fmt.win; + fh->ov.nclips = f->fmt.win.clipcount; + if (fh->ov.nclips > 16) + fh->ov.nclips = 16; + if (copy_from_user(fh->ov.clips,f->fmt.win.clips,sizeof(struct v4l2_clip)*fh->ov.nclips)) { + up(&dev->lock); + return -EFAULT; + } + + /* fh->ov.fh is used to indicate that we have valid overlay informations, too */ + fh->ov.fh = fh; + + /* check if we have an active overlay */ + if( vv->ov_data != NULL ) { + if( fh == vv->ov_data->fh) { + spin_lock_irqsave(&dev->slock,flags); + stop_preview(fh); + start_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + } + up(&dev->lock); + return 0; + default: + DEB_D(("unknown format type '%d'\n",f->type)); + return -EINVAL; + } +} + +/********************************************************************************/ +/* device controls */ + +static +struct v4l2_queryctrl controls[] = { + { + id: V4L2_CID_BRIGHTNESS, + name: "Brightness", + minimum: 0, + maximum: 255, + step: 1, + default_value: 128, + type: V4L2_CTRL_TYPE_INTEGER, + },{ + id: V4L2_CID_CONTRAST, + name: "Contrast", + minimum: 0, + maximum: 127, + step: 1, + default_value: 64, + type: V4L2_CTRL_TYPE_INTEGER, + },{ + id: V4L2_CID_SATURATION, + name: "Saturation", + minimum: 0, + maximum: 127, + step: 1, + default_value: 64, + type: V4L2_CTRL_TYPE_INTEGER, + },{ + id: V4L2_CID_VFLIP, + name: "Vertical flip", + minimum: 0, + maximum: 1, + type: V4L2_CTRL_TYPE_BOOLEAN, + },{ + id: V4L2_CID_HFLIP, + name: "Horizontal flip", + minimum: 0, + maximum: 1, + type: V4L2_CTRL_TYPE_BOOLEAN, + }, +}; +static +int NUM_CONTROLS = sizeof(controls)/sizeof(struct v4l2_queryctrl); + +#define V4L2_CID_PRIVATE_LASTP1 (V4L2_CID_PRIVATE_BASE + 0) + +static +struct v4l2_queryctrl* ctrl_by_id(int id) +{ + int i; + + for (i = 0; i < NUM_CONTROLS; i++) + if (controls[i].id == id) + return controls+i; + return NULL; +} + +static +int get_control(struct saa7146_fh *fh, struct v4l2_control *c) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + const struct v4l2_queryctrl* ctrl; + u32 value = 0; + + ctrl = ctrl_by_id(c->id); + if (NULL == ctrl) + return -EINVAL; + switch (c->id) { + case V4L2_CID_BRIGHTNESS: + value = saa7146_read(dev, BCS_CTRL); + c->value = 0xff & (value >> 24); + break; + case V4L2_CID_CONTRAST: + value = saa7146_read(dev, BCS_CTRL); + c->value = 0x7f & (value >> 16); + break; + case V4L2_CID_SATURATION: + value = saa7146_read(dev, BCS_CTRL); + c->value = 0x7f & (value >> 0); + break; + case V4L2_CID_VFLIP: + c->value = vv->vflip; + break; + case V4L2_CID_HFLIP: + c->value = vv->hflip; + break; + default: + return -EINVAL; + } + + return 0; +} + +static +int set_control(struct saa7146_fh *fh, struct v4l2_control *c) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + const struct v4l2_queryctrl* ctrl; + unsigned long flags; + int restart_overlay = 0; + + ctrl = ctrl_by_id(c->id); + if (NULL == ctrl) { + DEB_D(("unknown control %d\n",c->id)); + return -EINVAL; + } + + switch (ctrl->type) { + case V4L2_CTRL_TYPE_BOOLEAN: + case V4L2_CTRL_TYPE_MENU: + case V4L2_CTRL_TYPE_INTEGER: + if (c->value < ctrl->minimum) + c->value = ctrl->minimum; + if (c->value > ctrl->maximum) + c->value = ctrl->maximum; + break; + default: + /* nothing */; + }; + + switch (c->id) { + case V4L2_CID_BRIGHTNESS: { + u32 value = saa7146_read(dev, BCS_CTRL); + value &= 0x00ffffff; + value |= (c->value << 24); + saa7146_write(dev, BCS_CTRL, value); + saa7146_write(dev, MC2, MASK_22 | MASK_06 ); + break; + } + case V4L2_CID_CONTRAST: { + u32 value = saa7146_read(dev, BCS_CTRL); + value &= 0xff00ffff; + value |= (c->value << 16); + saa7146_write(dev, BCS_CTRL, value); + saa7146_write(dev, MC2, MASK_22 | MASK_06 ); + break; + } + case V4L2_CID_SATURATION: { + u32 value = saa7146_read(dev, BCS_CTRL); + value &= 0xffffff00; + value |= (c->value << 0); + saa7146_write(dev, BCS_CTRL, value); + saa7146_write(dev, MC2, MASK_22 | MASK_06 ); + break; + } + case V4L2_CID_HFLIP: + /* fixme: we can supfhrt changing VFLIP and HFLIP here... */ + if( 0 != vv->streaming ) { + DEB_D(("V4L2_CID_HFLIP while active capture.\n")); + return -EINVAL; + } + vv->hflip = c->value; + restart_overlay = 1; + break; + case V4L2_CID_VFLIP: + if( 0 != vv->streaming ) { + DEB_D(("V4L2_CID_VFLIP while active capture.\n")); + return -EINVAL; + } + vv->vflip = c->value; + restart_overlay = 1; + break; + default: { + return -EINVAL; + } + } + if( 0 != restart_overlay ) { + if( 0 != vv->ov_data ) { + if( fh == vv->ov_data->fh ) { + spin_lock_irqsave(&dev->slock,flags); + stop_preview(fh); + start_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + } + } + return 0; +} + +/********************************************************************************/ +/* common pagetable functions */ + +static +int saa7146_pgtable_build(struct saa7146_dev *dev, struct saa7146_buf *buf) +{ + struct pci_dev *pci = dev->pci; + struct scatterlist *list = buf->vb.dma.sglist; + int length = buf->vb.dma.sglen; + struct saa7146_format *sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + DEB_EE(("dev:%p, buf:%p\n",dev,buf)); + + if( 0 != IS_PLANAR(sfmt->trans)) { + struct saa7146_pgtable *pt1 = &buf->pt[0]; + struct saa7146_pgtable *pt2 = &buf->pt[1]; + struct saa7146_pgtable *pt3 = &buf->pt[2]; + u32 *ptr1, *ptr2, *ptr3; + u32 fill; + + int size = buf->fmt->width*buf->fmt->height; + int i,p,m1,m2,m3,o1,o2; + + switch( sfmt->depth ) { + case 12: { + /* create some offsets inside the page table */ + m1 = ((size+PAGE_SIZE)/PAGE_SIZE)-1; + m2 = ((size+(size/4)+PAGE_SIZE)/PAGE_SIZE)-1; + m3 = ((size+(size/2)+PAGE_SIZE)/PAGE_SIZE)-1; + o1 = size%PAGE_SIZE; + o2 = (size+(size/4))%PAGE_SIZE; + printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2); + break; + } + case 16: { + /* create some offsets inside the page table */ + m1 = ((size+PAGE_SIZE)/PAGE_SIZE)-1; + m2 = ((size+(size/2)+PAGE_SIZE)/PAGE_SIZE)-1; + m3 = ((2*size+PAGE_SIZE)/PAGE_SIZE)-1; + o1 = size%PAGE_SIZE; + o2 = (size+(size/2))%PAGE_SIZE; + printk("size:%d, m1:%d, m2:%d, m3:%d, o1:%d, o2:%d\n",size,m1,m2,m3,o1,o2); + break; + } + default: { + return -1; + } + } + + ptr1 = pt1->cpu; + ptr2 = pt2->cpu; + ptr3 = pt3->cpu; + + /* walk all pages, copy all page addresses to ptr1 */ + for (i = 0; i < length; i++, list++) { + for (p = 0; p * 4096 < list->length; p++, ptr1++) { + *ptr1 = sg_dma_address(list) - list->offset; + } + } +/* + ptr1 = pt1->cpu; + for(j=0;j<40;j++) { + printk("ptr1 %d: 0x%08x\n",j,ptr1[j]); + } +*/ + + /* if we have a user buffer, the first page may not be + aligned to a page boundary. */ + pt1->offset = buf->vb.dma.sglist->offset; + pt2->offset = pt1->offset+o1; + pt3->offset = pt1->offset+o2; + + /* create video-dma2 page table */ + ptr1 = pt1->cpu; + for(i = m1; i <= m2 ; i++, ptr2++) { + *ptr2 = ptr1[i]; + } + fill = *(ptr2-1); + for(;i<1024;i++,ptr2++) { + *ptr2 = fill; + } + /* create video-dma3 page table */ + ptr1 = pt1->cpu; + for(i = m2; i <= m3; i++,ptr3++) { + *ptr3 = ptr1[i]; + } + fill = *(ptr3-1); + for(;i<1024;i++,ptr3++) { + *ptr3 = fill; + } + /* finally: finish up video-dma1 page table */ + ptr1 = pt1->cpu+m1; + fill = pt1->cpu[m1]; + for(i=m1;i<1024;i++,ptr1++) { + *ptr1 = fill; + } +/* + ptr1 = pt1->cpu; + ptr2 = pt2->cpu; + ptr3 = pt3->cpu; + for(j=0;j<40;j++) { + printk("ptr1 %d: 0x%08x\n",j,ptr1[j]); + } + for(j=0;j<40;j++) { + printk("ptr2 %d: 0x%08x\n",j,ptr2[j]); + } + for(j=0;j<40;j++) { + printk("ptr3 %d: 0x%08x\n",j,ptr3[j]); + } +*/ + } else { + struct saa7146_pgtable *pt = &buf->pt[0]; + saa7146_pgtable_build_single(pci, pt, list, length); + } + + return 0; +} + + +/********************************************************************************/ +/* file operations */ + +static +int video_begin(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + if( fh == vv->streaming ) { + DEB_S(("already capturing.\n")); + return 0; + } + if( vv->streaming != 0 ) { + DEB_S(("already capturing, but in another open.\n")); + return -EBUSY; + } + + /* fixme: check for planar formats here, if we will interfere with + vbi capture for example */ + + spin_lock_irqsave(&dev->slock,flags); + + /* clear out beginning of streaming bit */ + saa7146_write(dev, MC2, MASK_27 ); + + /* enable rps0 irqs */ + IER_ENABLE(dev, MASK_27); + + vv->streaming = fh; + spin_unlock_irqrestore(&dev->slock,flags); + return 0; +} + +static +int video_end(struct saa7146_fh *fh) +{ + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + + DEB_EE(("dev:%p, fh:%p\n",dev,fh)); + + if( vv->streaming != fh ) { + DEB_S(("not capturing.\n")); + return -EINVAL; + } + + spin_lock_irqsave(&dev->slock,flags); + + /* disable rps0 */ + saa7146_write(dev, MC1, MASK_28); + + /* disable rps0 irqs */ + IER_DISABLE(dev, MASK_27); + + // fixme: only used formats here! + /* fixme: look at planar formats here, especially at the + shutdown of planar formats! */ + + /* shut down all used video dma transfers */ + /* fixme: what about the budget-dvb cards? they use + video-dma3, but video_end should not get called anyway ...*/ + saa7146_write(dev, MC1, 0x00700000); + + vv->streaming = NULL; + spin_unlock_irqrestore(&dev->slock, flags); + + return 0; +} + +/* + * This function is _not_ called directly, but from + * video_generic_ioctl (and maybe others). userspace + * copying is done already, arg is a kernel fhinter. + */ + +int saa7146_video_do_ioctl(struct inode *inode, struct file *file, unsigned int cmd, void *arg) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + + unsigned long flags; + int err = 0, result = 0, ee = 0; + + struct saa7146_use_ops *ops; + struct videobuf_queue *q; + + /* check if extension handles the command */ + for(ee = 0; dev->ext->ext_vv_data->ioctls[ee].flags != 0; ee++) { + if( cmd == dev->ext->ext_vv_data->ioctls[ee].cmd ) + break; + } + + if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_EXCLUSIVE) ) { + DEB_D(("extension handles ioctl exclusive.\n")); + result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg); + return result; + } + if( 0 != (dev->ext->ext_vv_data->ioctls[ee].flags & SAA7146_BEFORE) ) { + DEB_D(("extension handles ioctl before.\n")); + result = dev->ext->ext_vv_data->ioctl(dev, cmd, arg); + if( -EAGAIN != result ) { + return result; + } + } + + /* fixme: add handle "after" case (is it still needed?) */ + + switch (fh->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: { + ops = &saa7146_video_uops; + q = &fh->video_q; + break; + } + case V4L2_BUF_TYPE_VBI_CAPTURE: { + ops = &saa7146_vbi_uops; + q = &fh->vbi_q; + break; + } + default: + BUG(); + return 0; + } + + switch (cmd) { + case VIDIOC_QUERYCAP: + { + struct v4l2_capability *cap = arg; + memset(cap,0,sizeof(*cap)); + + DEB_EE(("VIDIOC_QUERYCAP\n")); + + strcpy(cap->driver, "saa7146 v4l2"); + strncpy(cap->card, dev->ext->name, sizeof(cap->card)); + sprintf(cap->bus_info,"PCI:%s",dev->pci->slot_name); + cap->version = SAA7146_VERSION_CODE; + cap->capabilities = + V4L2_CAP_VIDEO_CAPTURE | + V4L2_CAP_VIDEO_OVERLAY | + V4L2_CAP_READWRITE | + V4L2_CAP_STREAMING; + cap->capabilities |= dev->ext->ext_vv_data->capabilities; + return 0; + } + case VIDIOC_G_FBUF: + { + struct v4l2_framebuffer *fb = arg; + + DEB_EE(("VIDIOC_G_FBUF\n")); + + *fb = vv->ov_fb; + fb->capability = V4L2_FBUF_CAP_LIST_CLIPPING; + return 0; + } + case VIDIOC_S_FBUF: + { + struct v4l2_framebuffer *fb = arg; + struct saa7146_format *fmt; + + DEB_EE(("VIDIOC_S_FBUF\n")); + +/* + if(!capable(CAP_SYS_ADMIN)) { // && !capable(CAP_SYS_RAWIO)) { + DEB_D(("VIDIOC_S_FBUF: not CAP_SYS_ADMIN or CAP_SYS_RAWIO.\n")); + return -EPERM; + } +*/ + if( 0 != vv->ov_data ) { + DEB_D(("VIDIOC_S_FBUF: overlay is active.\n")); + return -EPERM; + } + + /* check args */ + fmt = format_by_fourcc(dev,fb->fmt.pixelformat); + if (NULL == fmt) { + return -EINVAL; + } + + /* ok, accept it */ + vv->ov_fb = *fb; + vv->ov_fmt = fmt; + if (0 == vv->ov_fb.fmt.bytesperline) + vv->ov_fb.fmt.bytesperline = + vv->ov_fb.fmt.width*fmt->depth/8; + return 0; + } + case VIDIOC_ENUM_FMT: + { + struct v4l2_fmtdesc *f = arg; + int index; + + switch (f->type) { + case V4L2_BUF_TYPE_VIDEO_CAPTURE: + case V4L2_BUF_TYPE_VIDEO_OVERLAY: { + index = f->index; + if (index < 0 || index >= NUM_FORMATS) { + return -EINVAL; + } + memset(f,0,sizeof(*f)); + f->index = index; + strncpy(f->description,formats[index].name,31); + f->pixelformat = formats[index].pixelformat; + break; + } + default: + return -EINVAL; + } + + DEB_EE(("VIDIOC_ENUMSTD: type:%d, index:%d\n",f->type,f->index)); + return 0; + } + case VIDIOC_QUERYCTRL: + { + const struct v4l2_queryctrl *ctrl; + struct v4l2_queryctrl *c = arg; + + if ((c->id < V4L2_CID_BASE || + c->id >= V4L2_CID_LASTP1) && + (c->id < V4L2_CID_PRIVATE_BASE || + c->id >= V4L2_CID_PRIVATE_LASTP1)) + return -EINVAL; + + ctrl = ctrl_by_id(c->id); + if( NULL == ctrl ) { + c->flags = V4L2_CTRL_FLAG_DISABLED; + return 0; + } + + DEB_EE(("VIDIOC_QUERYCTRL: id:%d\n",c->id)); + *c = *ctrl; + return 0; + } + case VIDIOC_G_CTRL: { + DEB_EE(("VIDIOC_G_CTRL\n")); + return get_control(fh,arg); + } + case VIDIOC_S_CTRL: + { + DEB_EE(("VIDIOC_S_CTRL\n")); + down(&dev->lock); + err = set_control(fh,arg); + up(&dev->lock); + return err; + } + case VIDIOC_G_PARM: + { + struct v4l2_streamparm *parm = arg; + if( parm->type != V4L2_BUF_TYPE_VIDEO_CAPTURE ) { + return -EINVAL; + } + memset(&parm->parm.capture,0,sizeof(struct v4l2_captureparm)); + parm->parm.capture.readbuffers = 1; + // fixme: only for PAL! + parm->parm.capture.timeperframe.numerator = 1; + parm->parm.capture.timeperframe.denominator = 25; + return 0; + } + case VIDIOC_G_FMT: + { + struct v4l2_format *f = arg; + DEB_EE(("VIDIOC_G_FMT\n")); + return g_fmt(fh,f); + } + case VIDIOC_S_FMT: + { + struct v4l2_format *f = arg; + DEB_EE(("VIDIOC_S_FMT\n")); + return s_fmt(fh,f); + } + case VIDIOC_TRY_FMT: + { + struct v4l2_format *f = arg; + DEB_EE(("VIDIOC_TRY_FMT\n")); + return try_fmt(fh,f); + } + case VIDIOC_G_STD: + { + v4l2_std_id *id = arg; + DEB_EE(("VIDIOC_G_STD\n")); + *id = vv->standard->id; + return 0; + } + /* the saa7146 supfhrts (used in conjunction with the saa7111a for example) + PAL / NTSC / SECAM. if your hardware does not (or does more) + -- override this function in your extension */ + case VIDIOC_ENUMSTD: + { + struct v4l2_standard *e = arg; + if (e->index < 0 ) + return -EINVAL; + if( e->index < dev->ext->ext_vv_data->num_stds ) { + DEB_EE(("VIDIOC_ENUMSTD: index:%d\n",e->index)); + return v4l2_video_std_construct(e, dev->ext->ext_vv_data->stds[e->index].id, dev->ext->ext_vv_data->stds[e->index].name); + } + return -EINVAL; + } + case VIDIOC_S_STD: + { + v4l2_std_id *id = arg; + int i; + + int restart_overlay = 0; + int found = 0; + + struct saa7146_fh *ov_fh = NULL; + + if( 0 != vv->streaming ) { + return -EBUSY; + } + + down(&dev->lock); + + if( vv->ov_data != NULL ) { + ov_fh = vv->ov_data->fh; + stop_preview(ov_fh); + restart_overlay = 1; + } + + for(i = 0; i < dev->ext->ext_vv_data->num_stds; i++) + if (*id & dev->ext->ext_vv_data->stds[i].id) + break; + if (i != dev->ext->ext_vv_data->num_stds) { + vv->standard = &dev->ext->ext_vv_data->stds[i]; + if( NULL != dev->ext->ext_vv_data->std_callback ) + dev->ext->ext_vv_data->std_callback(dev, vv->standard); + found = 1; + } + + if( 0 != restart_overlay ) { + start_preview(ov_fh); + } + up(&dev->lock); + + if( 0 == found ) { + DEB_EE(("VIDIOC_S_STD: standard not found.\n")); + return -EINVAL; + } + + DEB_EE(("VIDIOC_S_STD: set to standard to '%s'\n",vv->standard->name)); + return 0; + } + case VIDIOC_OVERLAY: + { + int on = *(int *)arg; + int err = 0; + + if( NULL == vv->ov_fmt ) { + DEB_D(("VIDIOC_OVERLAY: no framebuffer informations. call S_FBUF first!\n")); + return -EAGAIN; + } + + DEB_D(("VIDIOC_OVERLAY on:%d\n",on)); + if( 0 != on ) { + if( vv->ov_data != NULL ) { + if( fh != vv->ov_data->fh) { + return -EAGAIN; + } + } + spin_lock_irqsave(&dev->slock,flags); + err = start_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } else { + if( vv->ov_data != NULL ) { + if( fh != vv->ov_data->fh) { + return -EAGAIN; + } + } + spin_lock_irqsave(&dev->slock,flags); + err = stop_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + return err; + } + case VIDIOC_REQBUFS: { + DEB_D(("VIDIOC_REQBUFS \n")); + return videobuf_reqbufs(file,q,arg); + } + case VIDIOC_QUERYBUF: { + DEB_D(("VIDIOC_QUERYBUF \n")); + return videobuf_querybuf(q,arg); + } + case VIDIOC_QBUF: { + DEB_D(("VIDIOC_QBUF \n")); + return videobuf_qbuf(file,q,arg); + } + case VIDIOC_DQBUF: { + DEB_D(("VIDIOC_DQBUF \n")); + return videobuf_dqbuf(file,q,arg); + } + case VIDIOC_STREAMON: { + DEB_D(("VIDIOC_STREAMON \n")); + if( 0 != ops->capture_begin ) { + if( 0 != (err = ops->capture_begin(fh))) { + return err; + } + } + err = videobuf_streamon(file,q); + return err; + } + case VIDIOC_STREAMOFF: { + DEB_D(("VIDIOC_STREAMOFF \n")); + if( 0 != ops->capture_end ) { + ops->capture_end(fh); + } + err = videobuf_streamoff(file,q); + return 0; + } + case VIDIOCGMBUF: + { + struct video_mbuf *mbuf = arg; + struct videobuf_queue *q; + int i; + + /* fixme: number of capture buffers and sizes for v4l apps */ + int gbuffers = 2; + int gbufsize = 768*576*4; + + DEB_D(("VIDIOCGMBUF \n")); + + q = &fh->video_q; + down(&q->lock); + err = videobuf_mmap_setup(file,q,gbuffers,gbufsize); + if (err < 0) { + up(&q->lock); + return err; + } + memset(mbuf,0,sizeof(*mbuf)); + mbuf->frames = gbuffers; + mbuf->size = gbuffers * gbufsize; + for (i = 0; i < gbuffers; i++) + mbuf->offsets[i] = i * gbufsize; + up(&q->lock); + return 0; + } + default: + return v4l_compat_translate_ioctl(inode,file,cmd,arg, + saa7146_video_do_ioctl); + } + return 0; +} + +/*********************************************************************************/ +/* buffer handling functions */ + +static +int buffer_activate (struct saa7146_dev *dev, + struct saa7146_buf *buf, + struct saa7146_buf *next) +{ + struct saa7146_vv *vv = dev->vv_data; + + buf->vb.state = STATE_ACTIVE; + saa7146_set_capture(dev,buf,next); + + mod_timer(&vv->video_q.timeout, jiffies+BUFFER_TIMEOUT); + return 0; +} + +static +int buffer_prepare(struct file *file, struct videobuf_buffer *vb, enum v4l2_field field) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + int size,err = 0; + + /* sanity checks */ + if (fh->video_fmt.width < 64 || + fh->video_fmt.height < 64 || + fh->video_fmt.width > vv->standard->h_max_out || + fh->video_fmt.height > vv->standard->v_max_out) { + DEB_D(("w (%d) / h (%d) out of bounds.\n",fh->video_fmt.width,fh->video_fmt.height)); + return -EINVAL; + } + + size = fh->video_fmt.sizeimage; + if (0 != buf->vb.baddr && buf->vb.bsize < size) { + DEB_D(("size mismatch.\n")); + return -EINVAL; + } + + DEB_CAP(("buffer_prepare [size=%dx%d,bytes=%d,fields=%s]\n", + fh->video_fmt.width,fh->video_fmt.height,size,v4l2_field_names[fh->video_fmt.field])); + if (buf->vb.width != fh->video_fmt.width || + buf->vb.height != fh->video_fmt.height || + buf->vb.size != size || + buf->vb.field != field || + buf->vb.field != fh->video_fmt.field || + buf->fmt != &fh->video_fmt) { + saa7146_dma_free(dev,buf); + } + + if (STATE_NEEDS_INIT == buf->vb.state) { + struct saa7146_format *sfmt; + + buf->vb.width = fh->video_fmt.width; + buf->vb.height = fh->video_fmt.height; + buf->vb.size = size; + buf->vb.field = field; + buf->fmt = &fh->video_fmt; + buf->vb.field = fh->video_fmt.field; + + sfmt = format_by_fourcc(dev,buf->fmt->pixelformat); + + if( 0 != IS_PLANAR(sfmt->trans)) { + saa7146_pgtable_free(dev->pci, &buf->pt[0]); + saa7146_pgtable_free(dev->pci, &buf->pt[1]); + saa7146_pgtable_free(dev->pci, &buf->pt[2]); + + saa7146_pgtable_alloc(dev->pci, &buf->pt[0]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[1]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[2]); + } else { + saa7146_pgtable_free(dev->pci, &buf->pt[0]); + saa7146_pgtable_alloc(dev->pci, &buf->pt[0]); + } + + err = videobuf_iolock(dev->pci,&buf->vb); + if (err) + goto oops; + err = saa7146_pgtable_build(dev,buf); + if (err) + goto oops; + } + buf->vb.state = STATE_PREPARED; + buf->activate = buffer_activate; + + return 0; + + oops: + DEB_D(("error out.\n")); + saa7146_dma_free(dev,buf); + + return err; +} + +static +int buffer_setup(struct file *file, unsigned int *count, unsigned int *size) +{ + struct saa7146_fh *fh = file->private_data; + + if (0 == *count || *count > MAX_SAA7146_CAPTURE_BUFFERS) + *count = MAX_SAA7146_CAPTURE_BUFFERS; + + *size = fh->video_fmt.sizeimage; + + /* check if we exceed the "memory" parameter */ + if( (*count * *size) > (memory*1048576) ) { + *count = (memory*1048576) / *size; + } + + DEB_CAP(("%d buffers, %d bytes each.\n",*count,*size)); + + return 0; +} + +static +void buffer_queue(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_CAP(("vbuf:%p\n",vb)); + saa7146_buffer_queue(fh->dev,&vv->video_q,buf); +} + + +static +void buffer_release(struct file *file, struct videobuf_buffer *vb) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_buf *buf = (struct saa7146_buf *)vb; + + DEB_CAP(("vbuf:%p\n",vb)); + saa7146_dma_free(dev,buf); +} + +static +struct videobuf_queue_ops video_qops = { + .buf_setup = buffer_setup, + .buf_prepare = buffer_prepare, + .buf_queue = buffer_queue, + .buf_release = buffer_release, +}; + +/********************************************************************************/ +/* file operations */ + +static +void video_init(struct saa7146_dev *dev, struct saa7146_vv *vv) +{ + INIT_LIST_HEAD(&vv->video_q.queue); + + init_timer(&vv->video_q.timeout); + vv->video_q.timeout.function = saa7146_buffer_timeout; + vv->video_q.timeout.data = (unsigned long)(&vv->video_q); + vv->video_q.dev = dev; + + /* set some default values */ + vv->standard = &dev->ext->ext_vv_data->stds[0]; + + /* FIXME: what's this? */ + vv->current_hps_source = SAA7146_HPS_SOURCE_PORT_A; + vv->current_hps_sync = SAA7146_HPS_SYNC_PORT_A; +} + + +static +void video_open(struct saa7146_dev *dev, struct saa7146_fh *fh) +{ + struct saa7146_format *sfmt; + + fh->video_fmt.width = 384; + fh->video_fmt.height = 288; + fh->video_fmt.pixelformat = V4L2_PIX_FMT_BGR24; + fh->video_fmt.field = V4L2_FIELD_ANY; + sfmt = format_by_fourcc(dev,fh->video_fmt.pixelformat); + fh->video_fmt.sizeimage = (fh->video_fmt.width * fh->video_fmt.height * sfmt->depth)/8; + + videobuf_queue_init(&fh->video_q, &video_qops, + dev->pci, &dev->slock, + V4L2_BUF_TYPE_VIDEO_CAPTURE, + V4L2_FIELD_INTERLACED, + sizeof(struct saa7146_buf)); + + init_MUTEX(&fh->video_q.lock); +} + + +static +void video_close(struct saa7146_dev *dev, struct saa7146_fh *fh, struct file *file) +{ + struct saa7146_vv *vv = dev->vv_data; + unsigned long flags; + + if( 0 != vv->ov_data ) { + if( fh == vv->ov_data->fh ) { + spin_lock_irqsave(&dev->slock,flags); + stop_preview(fh); + spin_unlock_irqrestore(&dev->slock,flags); + } + } + + if( fh == vv->streaming ) { + video_end(fh); + } + + videobuf_queue_cancel(file,&fh->video_q); +} + + +static +void video_irq_done(struct saa7146_dev *dev, unsigned long st) +{ + struct saa7146_vv *vv = dev->vv_data; + struct saa7146_dmaqueue *q = &vv->video_q; + + spin_lock(&dev->slock); + DEB_CAP(("called.\n")); + + /* only finish the buffer if we have one... */ + if( NULL != q->curr ) { + saa7146_buffer_finish(dev,q,STATE_DONE); + } + saa7146_buffer_next(dev,q,0); + + spin_unlock(&dev->slock); +} + +static +ssize_t video_read(struct file *file, char *data, size_t count, loff_t *ppos) +{ + struct saa7146_fh *fh = file->private_data; + struct saa7146_dev *dev = fh->dev; + struct saa7146_vv *vv = dev->vv_data; + ssize_t ret = 0; + + int restart_overlay = 0; + struct saa7146_fh *ov_fh = NULL; + + DEB_EE(("called.\n")); + + if( vv->ov_data != NULL ) { + ov_fh = vv->ov_data->fh; + stop_preview(ov_fh); + restart_overlay = 1; + } + + if( 0 != video_begin(fh)) { + return -EAGAIN; + } + ret = videobuf_read_one(file,&fh->video_q , data, count, ppos); + video_end(fh); + + /* restart overlay if it was active before */ + if( 0 != restart_overlay ) { + start_preview(ov_fh); + } + + return ret; +} + +struct saa7146_use_ops saa7146_video_uops = { + .init = video_init, + .open = video_open, + .release = video_close, + .irq_done = video_irq_done, + .read = video_read, + .capture_begin = video_begin, + .capture_end = video_end, +}; + +EXPORT_SYMBOL_GPL(saa7146_video_uops); diff -Nru a/drivers/media/dvb/Kconfig b/drivers/media/dvb/Kconfig --- a/drivers/media/dvb/Kconfig Sat Apr 12 14:44:07 2003 +++ b/drivers/media/dvb/Kconfig Sat Apr 12 14:44:07 2003 @@ -3,7 +3,7 @@ # menu "Digital Video Broadcasting Devices" - depends on VIDEO_DEV!=n + depends on NET && INET config DVB bool "DVB For Linux" @@ -32,10 +32,10 @@ source "drivers/media/dvb/frontends/Kconfig" -comment "Supported DVB Adapters" +comment "Supported SAA7146 based PCI Adapters" depends on DVB -source "drivers/media/dvb/av7110/Kconfig" +source "drivers/media/dvb/ttpci/Kconfig" endmenu diff -Nru a/drivers/media/dvb/Makefile b/drivers/media/dvb/Makefile --- a/drivers/media/dvb/Makefile Sat Apr 12 14:44:08 2003 +++ b/drivers/media/dvb/Makefile Sat Apr 12 14:44:08 2003 @@ -2,4 +2,4 @@ # Makefile for the kernel multimedia device drivers. # -obj-y := dvb-core/ frontends/ av7110/ +obj-y := dvb-core/ frontends/ ttpci/ # ttusb-budget/ diff -Nru a/drivers/media/dvb/av7110/Kconfig b/drivers/media/dvb/av7110/Kconfig --- a/drivers/media/dvb/av7110/Kconfig Sat Apr 12 14:44:10 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,26 +0,0 @@ -config DVB_AV7110 - tristate "SAA7146 based AV7110 and Nova/budget cards" - depends on VIDEO_DEV && DVB_CORE - help - Support for SAA7146 and AV7110 based DVB cards as produced - by Fujitsu-Siemens, Technotrend, Hauppauge and others. - - Simple cards like so called Budget- or Nova-PCI cards are - supported as well as fullfeatured cards with onboard MPEG2 - decoder. - - Say Y if you own such a card and want to use it. - -config DVB_AV7110_OSD - bool "AV7110 OSD support" - depends on DVB_AV7110 - help - The AV7110 firmware provides some code to generate an OnScreenDisplay - on the video output. This is kind of nonstandard and not guaranteed to - be maintained. - - Anyway, some popular DVB software like VDR uses this OSD to render - its menus, so say Y if you want to use this software. - - All other people say N. - diff -Nru a/drivers/media/dvb/av7110/Makefile b/drivers/media/dvb/av7110/Makefile --- a/drivers/media/dvb/av7110/Makefile Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,9 +0,0 @@ -# -# Makefile for the kernel AV7110 DVB device driver -# - -dvb-ttpci-objs := saa7146_core.o saa7146_v4l.o av7110.o av7110_ir.o - -obj-$(CONFIG_DVB_AV7110) += dvb-ttpci.o - -EXTRA_CFLAGS = -Idrivers/media/dvb/dvb-core/ diff -Nru a/drivers/media/dvb/av7110/av7110.c b/drivers/media/dvb/av7110/av7110.c --- a/drivers/media/dvb/av7110/av7110.c Sat Apr 12 14:44:05 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,4840 +0,0 @@ -/* - * av7110.c: driver for the SAA7146 based AV110 cards (like the Fujitsu-Siemens DVB) - * and Nova/Budget DVB cards - * - * Copyright (C) 1999-2002 Ralph Metzler - * & Marcus Metzler for convergence integrated media GmbH - * - * originally based on code by: - * Copyright (C) 1998,1999 Christian Theiss - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * Or, point your browser to http://www.gnu.org/copyleft/gpl.html - * - * - * the project's page is at http://www.linuxtv.org/dvb/ - */ - -#define NEW_CI 1 - -#define __KERNEL_SYSCALLS__ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include -#include -#include - -#include - -#include "../dvb-core/dvb_i2c.h" -#include "../dvb-core/dvb_frontend.h" -#include "av7110.h" - -#include "saa7146_core.h" -#include "saa7146_v4l.h" -#include "saa7146_defs.h" - - -static int AV_StartPlay(av7110_t *av7110, int av); -static void restart_feeds(av7110_t *av7110); -static int bootarm(av7110_t *av7110); -static inline int i2c_writereg(av7110_t *av7110, u8 id, u8 reg, u8 val); -static inline u8 i2c_readreg(av7110_t *av7110, u8 id, u8 reg); -static int outcom(av7110_t *av7110, int type, int com, int num, ...); -static void SetMode(av7110_t *av7110, int mode); - -void pes_to_ts(u8 const *buf, long int length, u16 pid, p2t_t *p); -void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter, struct dvb_demux_feed *feed); - -static u32 vidmem = 0; -static u32 vidlow = 0; - -static int av7110_debug = 0; -#define dprintk if (av7110_debug) printk - -static int vidmode=CVBS_RGB_OUT; -static int init_vpid; -static int init_apid; -static int pids_off; -static int adac=DVB_ADAC_TI; - -#define saacomm(x,y) av7110->saa->command(av7110->saa->i2c_bus, (x), (y)) - - -/**************************************************************************** - * General helper functions - ****************************************************************************/ - -static inline void ddelay(int i) -{ - current->state=TASK_INTERRUPTIBLE; - schedule_timeout((HZ*i)/100); -} - - -/**************************************************************************** - * GPIO and DEBI functions - ****************************************************************************/ - -#define saaread(adr) saa7146_read(saamem,(adr)) -#define saawrite(dat,adr) saa7146_write(saamem,(adr),(dat)) - -inline static void -setgpio(av7110_t *av7110, int port, u32 data) -{ - void *saamem=av7110->saa_mem; - u32 val; - - val=saaread(GPIO_CTRL); - val&=~(0xff << (8*(port))); - val|=(data)<<(8*(port)); - saawrite(val, GPIO_CTRL); -} - -/* This DEBI code is based on the Stradis driver - by Nathan Laredo */ - -static -int wait_for_debi_done(av7110_t *av7110) -{ - void *saamem=av7110->saa_mem; - int start; - - /* wait for registers to be programmed */ - start = jiffies; - while (1) { - if (saaread(MC2) & 2) - break; - if (jiffies-start > HZ/20) { - printk ("%s: timed out while waiting for registers " - "getting programmed\n", __FUNCTION__); - return -ETIMEDOUT; - } - } - - /* wait for transfer to complete */ - start = jiffies; - while (1) { - if (!(saaread(PSR) & SPCI_DEBI_S)) - break; - saaread(MC2); - if (jiffies-start > HZ/4) { - printk ("%s: timed out while waiting for transfer " - "completion\n", __FUNCTION__); - return -ETIMEDOUT; - } - } - - return 0; -} - -static int debiwrite(av7110_t *av7110, u32 config, - int addr, u32 val, int count) -{ - void *saamem=av7110->saa_mem; - u32 cmd; - - if (count <= 0 || count > 32764) - return -1; - if (wait_for_debi_done(av7110) < 0) - return -1; - saawrite(config, DEBI_CONFIG); - if (count <= 4) /* immediate transfer */ - saawrite(val, DEBI_AD); - else /* block transfer */ - saawrite(av7110->debi_bus, DEBI_AD); - saawrite((cmd = (count << 17) | (addr & 0xffff)), DEBI_COMMAND); - saawrite((2 << 16) | 2, MC2); - return 0; -} - -static u32 debiread(av7110_t *av7110, u32 config, int addr, int count) -{ - void *saamem=av7110->saa_mem; - u32 result = 0; - - if (count > 32764 || count <= 0) - return 0; - if (wait_for_debi_done(av7110) < 0) - return 0; - saawrite(av7110->debi_bus, DEBI_AD); - saawrite((count << 17) | 0x10000 | (addr & 0xffff), - DEBI_COMMAND); - - saawrite(config, DEBI_CONFIG); - saawrite((2 << 16) | 2, MC2); - if (count > 4) - return count; - wait_for_debi_done(av7110); - result = saaread(DEBI_AD); - result &= (0xffffffffUL >> ((4-count)*8)); - return result; -} - -/* DEBI during interrupt */ - -static inline void -iwdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - if (count>4 && val) - memcpy(av7110->debi_virt, (char *) val, count); - debiwrite(av7110, config, addr, val, count); -} - -static inline u32 -irdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - u32 res; - - res=debiread(av7110, config, addr, count); - if (count<=4) - memcpy(av7110->debi_virt, (char *) &res, count); - return res; -} - -/* DEBI outside interrupts, only for count<=4! */ - -static inline void -wdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - unsigned long flags; - - spin_lock_irqsave(&av7110->debilock, flags); - debiwrite(av7110, config, addr, val, count); - spin_unlock_irqrestore(&av7110->debilock, flags); -} - -static inline u32 -rdebi(av7110_t *av7110, u32 config, int addr, u32 val, int count) -{ - unsigned long flags; - u32 res; - - spin_lock_irqsave(&av7110->debilock, flags); - res=debiread(av7110, config, addr, count); - spin_unlock_irqrestore(&av7110->debilock, flags); - return res; -} - - -static inline char -chtrans(char c) -{ - if (c<32 || c>126) - c=0x20; - return c; -} - - -/* handle mailbox registers of the dual ported RAM */ - -static inline void -ARM_ResetMailBox(av7110_t *av7110) -{ - unsigned long flags; - - spin_lock_irqsave(&av7110->debilock, flags); - debiread(av7110, DEBINOSWAP, IRQ_RX, 2); - //printk("dvb: IRQ_RX=%d\n", debiread(av7110, DEBINOSWAP, IRQ_RX, 2)); - debiwrite(av7110, DEBINOSWAP, IRQ_RX, 0, 2); - spin_unlock_irqrestore(&av7110->debilock, flags); -} - -static inline void -ARM_ClearMailBox(av7110_t *av7110) -{ - iwdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); -} - -static inline void -ARM_ClearIrq(av7110_t *av7110) -{ - irdebi(av7110, DEBINOSWAP, IRQ_RX, 0, 2); -} - -static void -reset_arm(av7110_t *av7110) -{ - setgpio(av7110, RESET_LINE, GPIO_OUTLO); - - /* Disable DEBI and GPIO irq */ - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~(MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - - mdelay(800); - setgpio(av7110, RESET_LINE, GPIO_OUTHI); - mdelay(800); - - ARM_ResetMailBox(av7110); - - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_03 ); - - av7110->arm_ready=1; - printk("av7110: ARM RESET\n"); -} - -static void -recover_arm(av7110_t *av7110) -{ - if (current->files) - bootarm(av7110); - else { - printk("OOPS, no current->files\n"); - reset_arm(av7110); - } - ddelay(10); - restart_feeds(av7110); -} - -static void -arm_error(av7110_t *av7110) -{ - av7110->arm_errors++; - av7110->arm_ready=0; - recover_arm(av7110); -} - -static int arm_thread(void *data) -{ - av7110_t *av7110 = data; - u16 newloops; - - lock_kernel(); -#if 0 - daemonize("arm_mon"); -#else - exit_mm(current); - current->session=current->pgrp=1; - sigfillset(¤t->blocked); - strcpy(current->comm, "arm_mon"); -#endif - av7110->arm_thread = current; - unlock_kernel(); - - while (!av7110->arm_rmmod && !signal_pending(current)) { - interruptible_sleep_on_timeout(&av7110->arm_wait, 5*HZ); - - if (!av7110->arm_ready) - continue; - - if (down_interruptible(&av7110->dcomlock)) - break; - - newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2); - up(&av7110->dcomlock); - - if (newloops==av7110->arm_loops) { - printk("av7110%d: ARM crashed!\n", - av7110->saa->dvb_adapter->num); - - arm_error(av7110); - - if (down_interruptible(&av7110->dcomlock)) - break; - - newloops=rdebi(av7110, DEBINOSWAP, STATUS_LOOPS, 0, 2)-1; - up(&av7110->dcomlock); - } - av7110->arm_loops=newloops; - } - - av7110->arm_thread = NULL; - return 0; -} - - -static int -record_cb(dvb_filter_pes2ts_t *p2t, u8 *buf, size_t len) -{ - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) p2t->priv; - - if (!(dvbdmxfeed->ts_type & TS_PACKET)) - return 0; - if (buf[3]==0xe0) // video PES do not have a length in TS - buf[4]=buf[5]=0; - if (dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY) - return dvbdmxfeed->cb.ts(buf, len, 0, 0, - &dvbdmxfeed->feed.ts, DMX_OK); - else - return dvb_filter_pes2ts(p2t, buf, len); -} - -static int -dvb_filter_pes2ts_cb(void *priv, unsigned char *data) -{ - struct dvb_demux_feed *dvbdmxfeed=(struct dvb_demux_feed *) priv; - - dvbdmxfeed->cb.ts(data, 188, 0, 0, - &dvbdmxfeed->feed.ts, - DMX_OK); - return 0; -} - -static int -AV_StartRecord(av7110_t *av7110, int av, - struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - - if (av7110->playing||(av7110->rec_mode&av)) - return -EBUSY; - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - dvbdmx->recording=1; - av7110->rec_mode|=av; - - switch (av7110->rec_mode) { - case RP_AUDIO: - dvb_filter_pes2ts_init (&av7110->p2t[0], - dvbdmx->pesfilter[0]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[0]); - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0); - break; - - case RP_VIDEO: - dvb_filter_pes2ts_init (&av7110->p2t[1], - dvbdmx->pesfilter[1]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[1]); - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0); - break; - - case RP_AV: - dvb_filter_pes2ts_init (&av7110->p2t[0], - dvbdmx->pesfilter[0]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[0]); - dvb_filter_pes2ts_init (&av7110->p2t[1], - dvbdmx->pesfilter[1]->pid, - dvb_filter_pes2ts_cb, - (void *)dvbdmx->pesfilter[1]); - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AV_PES, 0); - break; - } - return 0; -} - -static int -AV_StartPlay(av7110_t *av7110, int av) -{ - if (av7110->rec_mode) - return -EBUSY; - if (av7110->playing&av) - return -EBUSY; - - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - - if (av7110->playing == RP_NONE) { - dvb_filter_ipack_reset(&av7110->ipack[0]); - dvb_filter_ipack_reset(&av7110->ipack[1]); - } - - av7110->playing|=av; - switch (av7110->playing) { - case RP_AUDIO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0); - break; - case RP_VIDEO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0); - av7110->sinfo=0; - break; - case RP_AV: - av7110->sinfo=0; - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AV_PES, 0); - break; - } - return av7110->playing; -} - -static void -AV_Stop(av7110_t *av7110, int av) -{ - if (!(av7110->playing&av) && !(av7110->rec_mode&av)) - return; - - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - if (av7110->playing) { - av7110->playing&=~av; - switch (av7110->playing) { - case RP_AUDIO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, AudioPES, 0); - break; - case RP_VIDEO: - outcom(av7110, COMTYPE_REC_PLAY, __Play, 2, VideoPES, 0); - break; - case RP_NONE: - SetMode(av7110, av7110->vidmode); - break; - } - } else { - av7110->rec_mode&=~av; - switch (av7110->rec_mode) { - case RP_AUDIO: - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, AudioPES, 0); - break; - case RP_VIDEO: - outcom(av7110, COMTYPE_REC_PLAY, __Record, 2, VideoPES, 0); - break; - case RP_NONE: - break; - } - } -} - -/**************************************************************************** - * Buffer handling - ****************************************************************************/ - -static inline void -ring_buffer_flush(ring_buffer_t *rbuf) -{ - spin_lock_irq(&rbuf->lock); - rbuf->pwrite=rbuf->pread; - spin_unlock_irq(&rbuf->lock); - wake_up(&rbuf->queue); -} - -static inline void -ring_buffer_init(ring_buffer_t *rbuf, u8 *data, int len) -{ - rbuf->pread=rbuf->pwrite=0; - rbuf->data=data; - rbuf->size=len; - init_waitqueue_head(&rbuf->queue); - spin_lock_init(&(rbuf->lock)); - rbuf->lock=SPIN_LOCK_UNLOCKED; - sema_init(&(rbuf->sema), 1); -} - -static inline -int ring_buffer_empty(ring_buffer_t *rbuf) -{ - return (rbuf->pread==rbuf->pwrite); -} - -static inline -int ring_buffer_free(ring_buffer_t *rbuf) -{ - int free; - - free=rbuf->pread - rbuf->pwrite; - if (free<=0) - free+=rbuf->size; - return free; -} - -static inline -int ring_buffer_avail(ring_buffer_t *rbuf) -{ - int avail; - - avail=rbuf->pwrite - rbuf->pread; - if (avail<0) - avail+=rbuf->size; - return avail; -} - -#if 0 -static void -ring_buffer_block(ring_buffer_t *rbuf, unsigned long count) -{ - if (ring_buffer_free(rbuf)>=count) - return; - while (!wait_event_interruptible(rbuf->queue, - (ring_buffer_free(rbuf)>=count))); -} -#endif - -static long -ring_buffer_write(ring_buffer_t *rbuf, - const char *buf, unsigned long count, - int nonblock, int usermem) -{ - unsigned long todo = count; - int free, split; - - while (todo > 0) { - if (ring_buffer_free(rbuf)<=2048) { - if (nonblock) - return count-todo; - if (wait_event_interruptible(rbuf->queue, - (ring_buffer_free(rbuf)>2048))) - return count-todo; - } - dprintk ("function: %s pread=%08x pwrite=%08x\n", __FUNCTION__, - rbuf->pread, rbuf->pwrite); - //mdelay(2); - free = rbuf->pread - rbuf->pwrite; - split=rbuf->size; - if (free<=0) { - free+=rbuf->size; - split-=rbuf->pwrite; - } - if (free > todo) - free = todo; - - if (split < free) { - if (!usermem) - memcpy(rbuf->data+rbuf->pwrite, buf, split); - else - if (copy_from_user(rbuf->data+rbuf->pwrite, - buf, split)) - return -EFAULT; - buf += split; - todo -= split; - free -= split; - rbuf->pwrite = 0; - } - if (!usermem) - memcpy(rbuf->data+rbuf->pwrite, buf, free); - else - if (copy_from_user(rbuf->data+rbuf->pwrite, buf, free)) - return -EFAULT; - rbuf->pwrite = (rbuf->pwrite + free)%rbuf->size; - todo -= free; - buf += free; - } - - return count-todo; -} - -#if 0 -static void -ring_buffer_put(ring_buffer_t *db, u8 *buf, int len) -{ - int split, fsize; - - fsize=db->pread - db->pwrite; - if (fsize <= 0) { - fsize+=db->size; - split=db->size-db->pwrite; - } else - split=0; - if (len>=fsize) { - dprintk("buffer overflow\n"); - return; - } - if (split>=len) - split=0; - if (split) { - memcpy(db->data + db->pwrite, buf, split); - len-=split; - db->pwrite=0; - } - memcpy(db->data + db->pwrite, split + buf, len); - db->pwrite=(db->pwrite+len)%db->size; -} -#endif - - -/**************************************************************************** - * TT budget / WinTV Nova - ****************************************************************************/ - -static int -TTBStop(av7110_t *av7110) -{ - if (--av7110->feeding) - return av7110->feeding; - saa7146_write(av7110->saa_mem, MC1, MASK_20); // DMA3 off - saa7146_write(av7110->saa_mem, MC1, MASK_28); // RPS0 off - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~MASK_10 ); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER)& ~MASK_07); - return 0; -} - -#define TS_WIDTH (4*188) -#define TS_HEIGHT (1024/4) -static int -TTBStart(av7110_t *av7110) -{ - struct saa7146 *saa=av7110->saa; - - //printk ("function : %s\n", __FUNCTION__); - if (av7110->feeding) - return ++av7110->feeding; - - saa7146_write(saa->mem, MC1, MASK_20); // DMA3 off - - memset(saa->grabbing, 0x00, TS_HEIGHT*TS_WIDTH); - - saa7146_write(saa->mem, PCI_BT_V1, 0x001c0000); - - av7110->tsf=0; - av7110->ttbp=0; - saa7146_write(saa->mem, DD1_INIT, 0x02000680); - saa7146_write(saa->mem, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - saa7146_write(saa->mem, BRS_CTRL, 0x60000000); - saa7146_write(saa->mem, MC2, (MASK_08 | MASK_24)); - mdelay(10); - - saa7146_write(saa->mem, BASE_ODD3, 0); - saa7146_write(saa->mem, BASE_EVEN3, TS_WIDTH*TS_HEIGHT/2); - saa7146_write(saa->mem, PROT_ADDR3, TS_WIDTH*TS_HEIGHT); - saa7146_write(saa->mem, BASE_PAGE3, virt_to_bus(saa->page_table[0])|ME1|0xb0); - saa7146_write(saa->mem, PITCH3, TS_WIDTH); - - saa7146_write(saa->mem, NUM_LINE_BYTE3, ((TS_HEIGHT/2)<<16)|TS_WIDTH); - saa7146_write(saa->mem, MC2, (MASK_04 | MASK_20)); - - // VPE - saa7146_write(saa->mem, IER, saa7146_read(saa->mem, IER)|MASK_10); - - saa7146_write(saa->mem, MC1, (MASK_04 | MASK_20)); // DMA3 on - - // FIDB - saa7146_write(saa->mem, IER, saa7146_read(saa->mem, IER)|MASK_07); - - return ++av7110->feeding; -} - -/** - * Hack! we save the last av7110 ptr. This should be ok, since - * you rarely will use more then one IR control. - * - * If we want to support multiple controls we would have to do much more... - */ -void av7110_setup_irc_config (av7110_t *av7110, u32 ir_config) -{ - static av7110_t *last; - - if (!av7110) - av7110 = last; - else - last = av7110; - - outcom(av7110, COMTYPE_PIDFILTER, SetIR, 1, ir_config); -} - -static void (*irc_handler)(u32); - -void av7110_register_irc_handler(void (*func)(u32)) -{ - //dprintk("registering %08x\n",func); - irc_handler = func; -} - -void av7110_unregister_irc_handler(void (*func)(u32)) -{ - //dprintk("unregistering %08x\n",func); - irc_handler = NULL; -} - -void run_handlers(unsigned long ircom) -{ - if (irc_handler != NULL) - (*irc_handler)((u32) ircom); -} - -DECLARE_TASKLET(irtask,run_handlers,0); - -void IR_handle(av7110_t *av7110, u32 ircom) -{ - dprintk("av7110: ircommand = %08x\n", ircom); - irtask.data = (unsigned long) ircom; - tasklet_schedule(&irtask); -} - -/**************************************************************************** - * IRQ handling - ****************************************************************************/ - -void CI_handle(av7110_t *av7110, u8 *data, u16 len) -{ - //CI_out(av7110, data, len); - - if (len<3) - return; - switch (data[0]) { - case CI_MSG_CI_INFO: - if (data[2]!=1 && data[2]!=2) - break; - switch (data[1]) { - case 0: - av7110->ci_slot[data[2]-1].flags=0; - break; - case 1: - av7110->ci_slot[data[2]-1].flags|=CA_CI_MODULE_PRESENT; - break; - case 2: - av7110->ci_slot[data[2]-1].flags|=CA_CI_MODULE_READY; - break; - } - break; - case CI_SWITCH_PRG_REPLY: - //av7110->ci_stat=data[1]; - break; - default: - break; - } - -} - -static inline int -DvbDmxFilterCallback(u8 * buffer1, size_t buffer1_len, - u8 * buffer2, size_t buffer2_len, - struct dvb_demux_filter *dvbdmxfilter, - dmx_success_t success, - av7110_t *av7110) -{ - if (!dvbdmxfilter->feed->demux->dmx.frontend) - return 0; - if (dvbdmxfilter->feed->demux->dmx.frontend->source==DMX_MEMORY_FE) - return 0; - - switch(dvbdmxfilter->type) { - case DMX_TYPE_SEC: - if ((((buffer1[1]<<8)|buffer1[2])&0xfff)+3!=buffer1_len) - return 0; - if (dvbdmxfilter->doneq) { - dmx_section_filter_t *filter=&dvbdmxfilter->filter; - int i; - u8 xor, neq=0; - - for (i=0; ifilter_value[i]^buffer1[i]; - neq|=dvbdmxfilter->maskandnotmode[i]&xor; - } - if (!neq) - return 0; - } - return dvbdmxfilter->feed->cb.sec(buffer1, buffer1_len, - buffer2, buffer2_len, - &dvbdmxfilter->filter, - DMX_OK); - case DMX_TYPE_TS: - if (!(dvbdmxfilter->feed->ts_type & TS_PACKET)) - return 0; - if (dvbdmxfilter->feed->ts_type & TS_PAYLOAD_ONLY) - return dvbdmxfilter->feed->cb.ts(buffer1, buffer1_len, - buffer2, buffer2_len, - &dvbdmxfilter->feed->feed.ts, - DMX_OK); - else - pes_to_ts(buffer1, buffer1_len, - dvbdmxfilter->feed->pid, - &av7110->p2t_filter[dvbdmxfilter->index]); - default: - return 0; - } -} - - -u8 pshead[0x26] = { - 0x00, 0x00, 0x01, 0xba, 0x5f, 0xff, 0xfe, 0xe6, - 0xc4, 0x01, 0x01, 0x89, 0xc3, 0xf8, 0x00, 0x00, - 0x01, 0xbb, 0x00, 0x12, 0x80, 0xc4, 0xe1, 0x00, - 0xe1, 0xff, 0xb9, 0xe0, 0xe8, 0xb8, 0xc0, 0x20, - 0xbd, 0xe0, 0x44, 0xbf, 0xe0, 0x02, -}; - - -static void vpeirq (unsigned long data) -{ - //printk("vpeirq %08x\n", saa7146_read(av7110->saa_mem, PCI_VDP3)); -} - -#if 0 -static void fidbirq(struct saa7146* saa, void *data) -{ - av7110_t *av7110=(av7110_t *) data; - u8 *mem; - - mem=(av7110->tsf ? TS_HEIGHT*TS_WIDTH/2 :0)+(u8 *)av7110->saa->grabbing; - - // FIXME: think of something better without busy waiting - if (av7110->tsf) - while (saa7146_read(av7110->saa_mem, PCI_VDP3)>0x20000); - else - while (saa7146_read(av7110->saa_mem, PCI_VDP3)<0x17800); - - av7110->tsf^=1; - saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600|(av7110->tsf ? 0x40:0x80)); - saa7146_write(av7110->saa_mem, MC2, - (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - // FIXME: use bottom half or tasklet - if (av7110->feeding && mem[0]==0x47) - dvb_dmx_swfilter_packets(&av7110->demux, mem, 512); -} -#else -static -void fidbirq (unsigned long data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - u8 *mem=(u8 *)(av7110->saa->grabbing); - int num; - u32 dmapos; - - dmapos=saa7146_read(av7110->saa_mem, PCI_VDP3); - dmapos-=(dmapos%188); - - if (av7110->tsf) { - mem+=av7110->ttbp; - if (dmapos<0x20000) { - num=1024-av7110->ttbp/188; - av7110->ttbp=0; - } else { - num=(dmapos - av7110->ttbp)/188; - av7110->ttbp=dmapos; - } - } else { - if (av7110->ttbp>1000*188 && av7110->ttbp<1024*188) { - if (av7110->feeding) - dvb_dmx_swfilter_packets(&av7110->demux, - mem+av7110->ttbp, - 1024- av7110->ttbp / 188); - } - num=dmapos/188; - av7110->ttbp=dmapos; - } - - av7110->tsf^=1; - saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600|(av7110->tsf ? 0x40:0x80)); - saa7146_write(av7110->saa_mem, MC2, - (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - // FIXME: use bottom half or tasklet - if (av7110->feeding && mem[0]==0x47) - dvb_dmx_swfilter_packets(&av7110->demux, mem, num); -} -#endif - -//#define DEBUG_TIMING -inline static void -print_time(char *s) -{ -#ifdef DEBUG_TIMING - struct timeval tv; - do_gettimeofday(&tv); - printk("%s: %d.%d\n", s, (int)tv.tv_sec, (int)tv.tv_usec); -#endif -} - -static void -ci_get_data(ring_buffer_t *cibuf, u8 *data, int len) -{ - int free, split=0, pread=cibuf->pread; - - free=pread-cibuf->pwrite; - if (free<=0) - free+=cibuf->size; - if (free<=len+2) - return; - cibuf->data[cibuf->pwrite]=(len>>8); - cibuf->data[(cibuf->pwrite+1)%cibuf->size]=(len&0xff); - cibuf->pwrite=(cibuf->pwrite+2)%cibuf->size; - - if (pread<=cibuf->pwrite) - split=cibuf->size-cibuf->pwrite; - if (split && splitdata + cibuf->pwrite, data, split); - memcpy(cibuf->data, data+split, len-split); - } else - memcpy(cibuf->data + cibuf->pwrite, data, len); - cibuf->pwrite=(cibuf->pwrite+len)%cibuf->size; - - wake_up_interruptible(&cibuf->queue); -} - -static -void debiirq (unsigned long data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - int type=av7110->debitype; - int handle=(type>>8)&0x1f; - - print_time("debi"); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~MASK_19 ); - saa7146_write(av7110->saa_mem, ISR, MASK_19 ); - - if (type==-1) { - printk("DEBI irq oops\n"); - ARM_ClearMailBox(av7110); - ARM_ClearIrq(av7110); - return; - } - av7110->debitype=-1; - - switch (type&0xff) { - - case DATA_TS_RECORD: - dvb_dmx_swfilter_packets(&av7110->demux, - (const u8 *)av7110->debi_virt, - av7110->debilen/188); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - break; - - case DATA_PES_RECORD: - if (av7110->demux.recording) - record_cb(&av7110->p2t[handle], - (u8 *)av7110->debi_virt, - av7110->debilen); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_IPMPE: - case DATA_FSECTION: - case DATA_PIPING: - if (av7110->handle2filter[handle]) - DvbDmxFilterCallback((u8 *)av7110->debi_virt, - av7110->debilen, 0, 0, - av7110->handle2filter[handle], - DMX_OK, av7110); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_CI_GET: - { - u8 *data=av7110->debi_virt; - - if ((data[0]<2) && data[2]==0xff) { - int flags=0; - if (data[5]>0) - flags|=CA_CI_MODULE_PRESENT; - if (data[5]>5) - flags|=CA_CI_MODULE_READY; - av7110->ci_slot[data[0]].flags=flags; - } else - ci_get_data(&av7110->ci_rbuffer, - av7110->debi_virt, - av7110->debilen); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - } - - case DATA_COMMON_INTERFACE: - CI_handle(av7110, (u8 *)av7110->debi_virt, av7110->debilen); -#if 0 - { - int i; - - printk("av7110%d: ", av7110->num); - printk("%02x ", *(u8 *)av7110->debi_virt); - printk("%02x ", *(1+(u8 *)av7110->debi_virt)); - for (i=2; idebilen; i++) - printk("%02x ", (*(i+(unsigned char *)av7110->debi_virt))); - for (i=2; idebilen; i++) - printk("%c", chtrans(*(i+(unsigned char *)av7110->debi_virt))); - - printk("\n"); - } -#endif - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_DEBUG_MESSAGE: - ((s8*)av7110->debi_virt)[Reserved_SIZE-1]=0; - printk("%s\n", (s8 *)av7110->debi_virt); - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - - case DATA_CI_PUT: - case DATA_MPEG_PLAY: - case DATA_BMP_LOAD: - spin_lock(&av7110->debilock); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); - return; - default: - break; - } - spin_lock(&av7110->debilock); - ARM_ClearMailBox(av7110); - spin_unlock(&av7110->debilock); -} - -static int -pes_play(void *dest, ring_buffer_t *buf, int dlen) -{ - int len, split=0; - u32 sync; - u16 blen; - - dprintk ("function : %s\n", __FUNCTION__); - if (!dlen) { - wake_up(&buf->queue); - return -1; - } - while (1) { - if ((len=ring_buffer_avail(buf)) < 6) - return -1; - sync=(buf->data[buf->pread])<<24; - sync|=(buf->data[(buf->pread+1)%buf->size]<<16); - sync|=(buf->data[(buf->pread+2)%buf->size]<<8); - sync|=buf->data[(buf->pread+3)%buf->size]; - - if (((sync&~0x1f)==0x000001e0) || - ((sync&~0x1f)==0x000001c0) || - (sync==0x000001bd)) - break; - printk("resync\n"); - buf->pread=(buf->pread+1)%buf->size; - } - blen=(buf->data[(buf->pread+4)%buf->size]<<8); - blen|=buf->data[(buf->pread+5)%buf->size]; - blen+=6; - if (len dlen) { - printk("buffer empty\n"); - wake_up(&buf->queue); - return -1; - } -/* if (blen>2048) { - buf->pread=(buf->pread+blen)%buf->size; - printk("packet too large\n"); - return -1; - } -*/ - len=blen; - if (buf->pread + len > buf->size) - split=buf->size-buf->pread; - if (split>0) { - memcpy(dest, buf->data+buf->pread, split); - buf->pread=0; - len-=split; - } - memcpy(split + dest, - buf->data + buf->pread, len); - buf->pread = (buf->pread +len)%buf->size; - - dprintk ("function: %s pread=%08x pwrite=%08x\n", __FUNCTION__, - buf->pread, buf->pwrite); - wake_up(&buf->queue); - return blen; -} - -static -void gpioirq (unsigned long data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - u32 rxbuf, txbuf; - int len; - - //printk("GPIO0 irq\n"); - - if (av7110->debitype !=-1) - printk("GPIO0 irq oops\n"); - - spin_lock(&av7110->debilock); - - ARM_ClearIrq(av7110); - - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~MASK_19 ); - saa7146_write(av7110->saa_mem, ISR, MASK_19 ); - - av7110->debitype = irdebi(av7110, DEBINOSWAP, IRQ_STATE, 0, 2); - av7110->debilen = irdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - av7110->debibuf = 0; - rxbuf=irdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - txbuf=irdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - len=(av7110->debilen+3)&(~3); - - dprintk("GPIO0 irq %d %d\n", av7110->debitype, av7110->debilen); - print_time("gpio"); - - dprintk("GPIO0 irq %02x\n", av7110->debitype&0xff); - switch (av7110->debitype&0xff) { - - case DATA_TS_PLAY: - case DATA_PES_PLAY: - break; - - case DATA_CI_PUT: - { - int avail, split=0, pwrite; - ring_buffer_t *cibuf=&av7110->ci_wbuffer; - - pwrite=cibuf->pwrite; - avail=pwrite-cibuf->pread; - if (avail<0) - avail+=cibuf->size; - if (avail<=2) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - len=(cibuf->data[cibuf->pread]<<8); - len|=cibuf->data[(cibuf->pread+1)%cibuf->size]; - if (availpread=(cibuf->pread+2)%cibuf->size; - - if (pwritepread) - split=cibuf->size-cibuf->pread; - if (split && splitdebi_virt, cibuf->data+cibuf->pread, split); - memcpy(av7110->debi_virt+split, cibuf->data, todo); - } else - memcpy(av7110->debi_virt, cibuf->data+cibuf->pread, len); - cibuf->pread=(cibuf->pread+len)%cibuf->size; - wake_up(&cibuf->queue); - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); - wait_for_debi_done(av7110); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19 ); - if (len<5) len=5; /* we want a real DEBI DMA */ - iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); - spin_unlock(&av7110->debilock); - return; - } - - case DATA_MPEG_PLAY: - if (!av7110->playing) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - len=0; - if (av7110->debitype&0x100) { - spin_lock(&av7110->aout.lock); - len=pes_play(av7110->debi_virt, &av7110->aout, 2048); - spin_unlock(&av7110->aout.lock); - } - if (len<=0 && (av7110->debitype&0x200) - &&av7110->videostate.play_state!=VIDEO_FREEZED) { - spin_lock(&av7110->avout.lock); - len=pes_play(av7110->debi_virt, &av7110->avout, 2048); - spin_unlock(&av7110->avout.lock); - } - if (len<=0) { - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - break; - } - dprintk("GPIO0 PES_PLAY len=%04x\n", len); - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); - wait_for_debi_done(av7110); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19 ); - - iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); - spin_unlock(&av7110->debilock); - return; - - case DATA_BMP_LOAD: - len=av7110->debilen; - if (!len) { - av7110->bmp_state=BMP_LOADED; - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_LEN, 0, 2); - iwdebi(av7110, DEBINOSWAP, TX_BUFF, 0, 2); - wake_up(&av7110->bmpq); - break; - } - if (len>av7110->bmplen) - len=av7110->bmplen; - if (len>2*1024) - len=2*1024; - iwdebi(av7110, DEBINOSWAP, TX_LEN, len, 2); - iwdebi(av7110, DEBINOSWAP, IRQ_STATE_EXT, len, 2); - memcpy(av7110->debi_virt, av7110->bmpbuf+av7110->bmpp, len); - av7110->bmpp+=len; - av7110->bmplen-=len; - wait_for_debi_done(av7110); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19 ); - if (len<5) len=5; /* we want a real DEBI DMA */ - iwdebi(av7110, DEBISWAB, DPRAM_BASE+txbuf, 0, (len+3)&~3); - spin_unlock(&av7110->debilock); - return; - - case DATA_CI_GET: - case DATA_COMMON_INTERFACE: - case DATA_FSECTION: - case DATA_IPMPE: - case DATA_PIPING: - if (!len || len>4*1024) { - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; - } /* yes, fall through */ - case DATA_TS_RECORD: - case DATA_PES_RECORD: - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19); - irdebi(av7110, DEBISWAB, DPRAM_BASE+rxbuf, 0, len); - spin_unlock(&av7110->debilock); - return; - - case DATA_DEBUG_MESSAGE: - if (!len || len>0xff) { - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; - } - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_19); - irdebi(av7110, DEBISWAB, Reserved, 0, len); - spin_unlock(&av7110->debilock); - return; - - case DATA_IRCOMMAND: - IR_handle(av7110, - swahw32(irdebi(av7110, DEBINOSWAP, Reserved, 0, 4))); - iwdebi(av7110, DEBINOSWAP, RX_BUFF, 0, 2); - break; - - default: - printk("gpioirq unknown type=%d len=%d\n", - av7110->debitype, av7110->debilen); - break; - } - ARM_ClearMailBox(av7110); - av7110->debitype=-1; - spin_unlock(&av7110->debilock); - dprintk("GPIO0 irq exit 0\n"); -} - - -/**************************************************************************** - * DEBI command polling - ****************************************************************************/ - - -static int OutCommand(av7110_t *av7110, u16* buf, int length) -{ - int i; - u32 start; - - if (!av7110->arm_ready) - return -1; - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2 ) ) - { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_FREE) { - printk("outcommand error 1\n"); - //arm_error(av7110); - return -1; - } - } - -#ifndef _NOHANDSHAKE - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) - { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_SHAKE) { - printk("outcommand error 2\n"); - //arm_error(av7110); - return -1; - } - } -#endif - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, MSGSTATE, 0, 2) & OSDQFull ) - { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_OSD) - { - printk("outcommand error 3\n"); - //arm_error(av7110); - return -1; - } - } - for (i=2; iarm_ready) - return -1; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - - ret=OutCommand(av7110, buf, length); - up(&av7110->dcomlock); - return ret; -} - - -static int outcom(av7110_t *av7110, int type, int com, int num, ...) -{ - va_list args; - u16 buf[num+2]; - int i; - - buf[0]=(( type << 8 ) | com); - buf[1]=num; - - if (num) { - va_start(args, num); - for (i=0; iarm_ready) - return -1; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - - if ((err = OutCommand(av7110, Buff, length)) < 0) { - up(&av7110->dcomlock); - return err; - } - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, COMMAND, 0, 2) ) - { -#ifdef _NOHANDSHAKE - ddelay(1); -#endif - if ((jiffies - start) > ARM_WAIT_FREE) { - printk("commandrequest error 1\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } - -#ifndef _NOHANDSHAKE - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_SHAKE) { - printk("commandrequest error 2\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } -#endif - - for (i=0; idcomlock); - return 0; -} - - -static inline int -RequestParameter(av7110_t *av7110, u16 tag, u16* Buff, s16 length) -{ - return CommandRequest(av7110, &tag, 0, Buff, length); -} - - -/**************************************************************************** - * Firmware commands - ****************************************************************************/ - - -inline static int -SendDAC(av7110_t *av7110, u8 addr, u8 data) -{ - return outcom(av7110, COMTYPE_AUDIODAC, AudioDAC, 2, addr, data); -} - -static int -SetVolume(av7110_t *av7110, int volleft, int volright) -{ - int err; - - switch (av7110->adac_type) { - case DVB_ADAC_TI: - volleft=(volleft*256)/946; - volright=(volright*256)/946; - if (volleft > 0x45) - volleft=0x45; - if (volright > 0x45) - volright=0x45; - err=SendDAC(av7110, 3, 0x80 + volleft); - if (err) - return err; - return SendDAC(av7110, 4, volright); - - case DVB_ADAC_CRYSTAL: - volleft=127-volleft/2; - volright=127-volright/2; - i2c_writereg(av7110, 0x20, 0x03, volleft); - i2c_writereg(av7110, 0x20, 0x04, volright); - return 0; - } - return 0; -} - -#ifdef CONFIG_DVB_AV7110_OSD - -inline static int ResetBlend(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, SetNonBlend, 1, windownr); -} - -inline static int SetColorBlend(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, SetCBlend, 1, windownr); -} - -inline static int SetWindowBlend(av7110_t *av7110, u8 windownr, u8 blending) -{ - return outcom(av7110, COMTYPE_OSD, SetWBlend, 2, windownr, blending); -} - -inline static int SetBlend_(av7110_t *av7110, u8 windownr, - OSDPALTYPE colordepth, u16 index, u8 blending) -{ - return outcom(av7110, COMTYPE_OSD, SetBlend, 4, - windownr, colordepth, index, blending); -} - -inline static int SetColor_(av7110_t *av7110, u8 windownr, - OSDPALTYPE colordepth, u16 index, u16 colorhi, u16 colorlo) -{ - return outcom(av7110, COMTYPE_OSD, SetColor, 5, - windownr, colordepth, index, colorhi, colorlo); -} - -inline static int BringToTop(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, WTop, 1, windownr); -} - -inline static int SetFont(av7110_t *av7110, u8 windownr, u8 fontsize, - u16 colorfg, u16 colorbg) -{ - return outcom(av7110, COMTYPE_OSD, Set_Font, 4, - windownr, fontsize, colorfg, colorbg); -} - -static int FlushText(av7110_t *av7110) -{ - u32 start; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_OSD) { - printk("outtext error\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } - up(&av7110->dcomlock); - return 0; -} - -static int WriteText(av7110_t *av7110, u8 win, u16 x, u16 y, u8* buf) -{ - int i, ret; - u32 start; - int length=strlen(buf)+1; - u16 cbuf[5] = { (COMTYPE_OSD<<8) + DText, 3, win, x, y }; - - if (down_interruptible(&av7110->dcomlock)) - return -ERESTARTSYS; - - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, BUFF1_BASE, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_OSD) { - printk("outtext error\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } -#ifndef _NOHANDSHAKE - start = jiffies; - while ( rdebi(av7110, DEBINOSWAP, HANDSHAKE_REG, 0, 2 ) ) { - ddelay(1); - if ((jiffies - start) > ARM_WAIT_SHAKE) { - printk("outtext error\n"); - up(&av7110->dcomlock); - //arm_error(av7110); - return -1; - } - } -#endif - for (i=0; idcomlock); - return ret; -} - -inline static int DrawLine(av7110_t *av7110, u8 windownr, - u16 x, u16 y, u16 dx, u16 dy, u16 color) -{ - return outcom(av7110, COMTYPE_OSD, DLine, 6, - windownr, x, y, dx, dy, color); -} - -inline static int DrawBlock(av7110_t *av7110, u8 windownr, - u16 x, u16 y, u16 dx, u16 dy, u16 color) -{ - return outcom(av7110, COMTYPE_OSD, DBox, 6, - windownr, x, y, dx, dy, color); -} - -inline static int HideWindow(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, WHide, 1, windownr); -} - -inline static int MoveWindowRel(av7110_t *av7110, u8 windownr, u16 x, u16 y) -{ - return outcom(av7110, COMTYPE_OSD, WMoveD, 3, windownr, x, y); -} - -inline static int MoveWindowAbs(av7110_t *av7110, u8 windownr, u16 x, u16 y) -{ - return outcom(av7110, COMTYPE_OSD, WMoveA, 3, windownr, x, y); -} - -inline static int DestroyOSDWindow(av7110_t *av7110, u8 windownr) -{ - return outcom(av7110, COMTYPE_OSD, WDestroy, 1, windownr); -} - -#if 0 -static void DestroyOSDWindows(av7110_t *av7110) -{ - int i; - - for (i=1; i<7; i++) - outcom(av7110, COMTYPE_OSD, WDestroy, 1, i); -} -#endif - -static inline int -CreateOSDWindow(av7110_t *av7110, u8 windownr, - DISPTYPE disptype, u16 width, u16 height) -{ - return outcom(av7110, COMTYPE_OSD, WCreate, 4, - windownr, disptype, width, height); -} - - -static OSDPALTYPE bpp2pal[8]={Pal1Bit, Pal2Bit, 0, Pal4Bit, 0, 0, 0, Pal8Bit}; -static DISPTYPE bpp2bit[8]={BITMAP1, BITMAP2, 0, BITMAP4, 0, 0, 0, BITMAP8}; - -static inline int -LoadBitmap(av7110_t *av7110, u16 format, u16 dx, u16 dy, int inc, u8* data) -{ - int bpp; - int i; - int d, delta; - u8 c; - DECLARE_WAITQUEUE(wait, current); - - if (av7110->bmp_state==BMP_LOADING) { - add_wait_queue(&av7110->bmpq, &wait); - while (1) { - set_current_state(TASK_INTERRUPTIBLE); - if (av7110->bmp_state!=BMP_LOADING - || signal_pending(current)) - break; - schedule(); - } - current->state=TASK_RUNNING; - remove_wait_queue(&av7110->bmpq, &wait); - } - if (av7110->bmp_state==BMP_LOADING) - return -1; - av7110->bmp_state=BMP_LOADING; - if (format==BITMAP8) { bpp=8; delta = 1; } - else if (format==BITMAP4) { bpp=4; delta = 2; } - else if (format==BITMAP2) { bpp=2; delta = 4; } - else if (format==BITMAP1) { bpp=1; delta = 8; } - else { - av7110->bmp_state=BMP_NONE; - return -1; - } - av7110->bmplen= ((dx*dy*bpp+7)&~7)/8; - av7110->bmpp=0; - if (av7110->bmplen>32768) { - av7110->bmp_state=BMP_NONE; - return -1; - } - for (i=0; ibmpbuf+1024+i*dx, data+i*inc, dx)) { - av7110->bmp_state=BMP_NONE; - return -1; - } - } - if (format != BITMAP8) { - for (i=0; ibmpbuf)[1024+i*delta+delta-1]; - for (d=delta-2; d>=0; d--) { - c |= (((u8 *)av7110->bmpbuf)[1024+i*delta+d] - << ((delta-d-1)*bpp)); - ((u8 *)av7110->bmpbuf)[1024+i] = c; - } - } - } - av7110->bmplen+=1024; - return outcom(av7110, COMTYPE_OSD, LoadBmp, 3, format, dx, dy); -} - -static int -BlitBitmap(av7110_t *av7110, u16 win, u16 x, u16 y, u16 trans) -{ - DECLARE_WAITQUEUE(wait, current); - - if (av7110->bmp_state==BMP_NONE) - return -1; - if (av7110->bmp_state==BMP_LOADING) { - add_wait_queue(&av7110->bmpq, &wait); - while (1) { - set_current_state(TASK_INTERRUPTIBLE); - if (av7110->bmp_state!=BMP_LOADING - || signal_pending(current)) - break; - schedule(); - } - current->state=TASK_RUNNING; - remove_wait_queue(&av7110->bmpq, &wait); - } - if (av7110->bmp_state==BMP_LOADED) - return outcom(av7110, COMTYPE_OSD, BlitBmp, 4, win, x, y, trans); - return -1; -} - -static inline int -ReleaseBitmap(av7110_t *av7110) -{ - if (av7110->bmp_state!=BMP_LOADED) - return -1; - av7110->bmp_state=BMP_NONE; - return outcom(av7110, COMTYPE_OSD, ReleaseBmp, 0); -} - -static u32 RGB2YUV(u16 R, u16 G, u16 B) -{ - u16 y, u, v; - u16 Y, Cr, Cb; - - y = R * 77 + G * 150 + B * 29; // Luma=0.299R+0.587G+0.114B 0..65535 - u = 2048+B * 8 -(y>>5); // Cr 0..4095 - v = 2048+R * 8 -(y>>5); // Cb 0..4095 - - Y=y/256; - Cb=u/16; - Cr=v/16; - - return Cr|(Cb<<16)|(Y<<8); -} - -static void -OSDSetColor(av7110_t *av7110, u8 color, u8 r, u8 g, u8 b, u8 blend) -{ - u16 ch, cl; - u32 yuv; - - yuv=blend ? RGB2YUV(r,g,b) : 0; - cl=(yuv&0xffff); - ch=((yuv>>16)&0xffff); - SetColor_(av7110, av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], - color, ch, cl); - SetBlend_(av7110, av7110->osdwin, bpp2pal[av7110->osdbpp[av7110->osdwin]], - color, ((blend>>4)&0x0f)); -} - -static int -OSDSetBlock(av7110_t *av7110, int x0, int y0, int x1, int y1, int inc, u8 *data) -{ - uint w, h, bpp, bpl, size, lpb, bnum, brest; - int i; - - w=x1-x0+1; h=y1-y0+1; - if (inc<=0) - inc=w; - if (w<=0 || w>720 || h<=0 || h>576) - return -1; - bpp=av7110->osdbpp[av7110->osdwin]+1; - bpl=((w*bpp+7)&~7)/8; - size=h*bpl; - lpb=(32*1024)/bpl; - bnum=size/(lpb*bpl); - brest=size-bnum*lpb*bpl; - - for (i=0; iosdbpp[av7110->osdwin]], w, lpb, inc, data); - BlitBitmap(av7110, av7110->osdwin, x0, y0+i*lpb, 0); - data+=lpb*inc; - } - if (brest) { - LoadBitmap(av7110, bpp2bit[av7110->osdbpp[av7110->osdwin]], w, brest/bpl, inc, data); - BlitBitmap(av7110, av7110->osdwin, x0, y0+bnum*lpb, 0); - } - ReleaseBitmap(av7110); - return 0; -} - -static int -OSD_DrawCommand(av7110_t *av7110, osd_cmd_t *dc) -{ - switch (dc->cmd) { - case OSD_Close: - DestroyOSDWindow(av7110, av7110->osdwin); - return 0; - case OSD_Open: - av7110->osdbpp[av7110->osdwin]=(dc->color-1)&7; - CreateOSDWindow(av7110, av7110->osdwin, bpp2bit[av7110->osdbpp[av7110->osdwin]], - dc->x1-dc->x0+1, dc->y1-dc->y0+1); - if (!dc->data) { - MoveWindowAbs(av7110, av7110->osdwin, dc->x0, dc->y0); - SetColorBlend(av7110, av7110->osdwin); - } - return 0; - case OSD_Show: - MoveWindowRel(av7110, av7110->osdwin, 0, 0); - return 0; - case OSD_Hide: - HideWindow(av7110, av7110->osdwin); - return 0; - case OSD_Clear: - DrawBlock(av7110, av7110->osdwin, 0, 0, 720, 576, 0); - return 0; - case OSD_Fill: - DrawBlock(av7110, av7110->osdwin, 0, 0, 720, 576, dc->color); - return 0; - case OSD_SetColor: - OSDSetColor(av7110, dc->color, dc->x0, dc->y0, dc->x1, dc->y1); - return 0; - case OSD_SetPalette: - { - int i, len=dc->x0-dc->color+1; - u8 *colors=(u8 *)dc->data; - - for (i=0; icolor+i, - colors[i*4] , colors[i*4+1], - colors[i*4+2], colors[i*4+3]); - return 0; - } - case OSD_SetTrans: - return 0; - case OSD_SetPixel: - DrawLine(av7110, av7110->osdwin, - dc->x0, dc->y0, 0, 0, - dc->color); - return 0; - case OSD_GetPixel: - return 0; - - case OSD_SetRow: - dc->y1=dc->y0; - case OSD_SetBlock: - OSDSetBlock(av7110, dc->x0, dc->y0, dc->x1, dc->y1, dc->color, dc->data); - return 0; - - case OSD_FillRow: - DrawBlock(av7110, av7110->osdwin, dc->x0, dc->y0, - dc->x1-dc->x0+1, dc->y1, - dc->color); - return 0; - case OSD_FillBlock: - DrawBlock(av7110, av7110->osdwin, dc->x0, dc->y0, - dc->x1-dc->x0+1, dc->y1-dc->y0+1, - dc->color); - return 0; - case OSD_Line: - DrawLine(av7110, av7110->osdwin, - dc->x0, dc->y0, dc->x1-dc->x0, dc->y1-dc->y0, - dc->color); - return 0; - case OSD_Query: - return 0; - case OSD_Test: - return 0; - case OSD_Text: - { - char textbuf[240]; - - if (strncpy_from_user(textbuf, dc->data, 240)<0) - return -EFAULT; - textbuf[239]=0; - if (dc->x1>3) - dc->x1=3; - SetFont(av7110, av7110->osdwin, dc->x1, - (u16) (dc->color&0xffff), (u16) (dc->color>>16)); - FlushText(av7110); - WriteText(av7110, av7110->osdwin, dc->x0, dc->y0, textbuf); - return 0; - } - case OSD_SetWindow: - if (dc->x0<1 || dc->x0>7) - return -EINVAL; - av7110->osdwin=dc->x0; - return 0; - case OSD_MoveWindow: - MoveWindowAbs(av7110, av7110->osdwin, dc->x0, dc->y0); - SetColorBlend(av7110, av7110->osdwin); - return 0; - default: - return -EINVAL; - } -} -#endif /* CONFIG_DVB_AV7110_OSD */ - - -/* get version of the firmware ROM, RTSL, video ucode and ARM application */ - -static void -firmversion(av7110_t *av7110) -{ - u16 buf[20]; - - u16 tag = ((COMTYPE_REQUEST << 8) + ReqVersion); - - RequestParameter(av7110, tag, buf, 16); - - av7110->arm_fw=(buf[0] << 16) + buf[1]; - av7110->arm_rtsl=(buf[2] << 16) + buf[3]; - av7110->arm_vid=(buf[4] << 16) + buf[5]; - av7110->arm_app=(buf[6] << 16) + buf[7]; - av7110->avtype=(buf[8] << 16) + buf[9]; - - printk ("DVB: AV711%d(%d) - firm %08x, rtsl %08x, vid %08x, app %08x\n", - av7110->avtype, av7110->saa->dvb_adapter->num, av7110->arm_fw, - av7110->arm_rtsl, av7110->arm_vid, av7110->arm_app); - - return; -} - -static int -waitdebi(av7110_t *av7110, int adr, int state) -{ - int k; - - for (k=0; k<100; k++, udelay(500)) { - if (irdebi(av7110, DEBINOSWAP, adr, 0, 2) == state) - return 0; - } - return -1; -} - - -static int -load_dram(av7110_t *av7110, u32 *data, int len) -{ - int i; - int blocks, rest; - u32 base, bootblock=BOOT_BLOCK; - - blocks=len/BOOT_MAX_SIZE; - rest=len % BOOT_MAX_SIZE; - base=DRAM_START_CODE; - - for (i=0; i 0) { - if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BUFFER_EMPTY) < 0) - return -1; - if (rest>4) - iwdebi(av7110, DEBISWAB, bootblock, i*(BOOT_MAX_SIZE)+(u32)data, rest); - else - iwdebi(av7110, DEBISWAB, bootblock, i*(BOOT_MAX_SIZE)-4+(u32)data, rest+4); - - iwdebi(av7110, DEBISWAB, BOOT_BASE, swab32(base), 4); - iwdebi(av7110, DEBINOSWAP, BOOT_SIZE, rest, 2); - iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); - } - if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BUFFER_EMPTY) < 0) - return -1; - iwdebi(av7110, DEBINOSWAP, BOOT_SIZE, 0, 2); - iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); - if (waitdebi(av7110, BOOT_STATE, BOOTSTATE_BOOT_COMPLETE) < 0) - return -1; - return 0; -} - - -static u8 -bootcode[] = { - 0xea, 0x00, 0x00, 0x0e, 0xe1, 0xb0, 0xf0, 0x0e, /* 0x0000 */ - 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, - 0xe2, 0x5e, 0xf0, 0x08, 0xe2, 0x5e, 0xf0, 0x04, - 0xe2, 0x5e, 0xf0, 0x04, 0xe2, 0x5e, 0xf0, 0x04, - 0x2c, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0c, - 0x00, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x34, - 0x00, 0x00, 0x00, 0x00, 0xa5, 0xa5, 0x5a, 0x5a, - 0x00, 0x1f, 0x15, 0x55, 0x00, 0x00, 0x00, 0x09, - 0xe5, 0x9f, 0xd0, 0x5c, 0xe5, 0x9f, 0x40, 0x54, /* 0x0040 */ - 0xe3, 0xa0, 0x00, 0x00, 0xe5, 0x84, 0x00, 0x00, - 0xe5, 0x84, 0x00, 0x04, 0xe1, 0xd4, 0x10, 0xb0, - 0xe3, 0x51, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xfc, - 0xe1, 0xa0, 0x10, 0x0d, 0xe5, 0x94, 0x30, 0x04, - 0xe1, 0xd4, 0x20, 0xb2, 0xe2, 0x82, 0x20, 0x3f, - 0xe1, 0xb0, 0x23, 0x22, 0x03, 0xa0, 0x00, 0x02, - 0xe1, 0xc4, 0x00, 0xb0, 0x0a, 0xff, 0xff, 0xf4, - 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, /* 0x0080 */ - 0xe8, 0xb1, 0x1f, 0xe0, 0xe8, 0xa3, 0x1f, 0xe0, - 0xe2, 0x52, 0x20, 0x01, 0x1a, 0xff, 0xff, 0xf9, - 0xe2, 0x2d, 0xdb, 0x05, 0xea, 0xff, 0xff, 0xec, - 0x2c, 0x00, 0x03, 0xf8, 0x2c, 0x00, 0x04, 0x00, -}; - -#include "av7110_firm.h" - -static int -bootarm(av7110_t *av7110) -{ - u32 ret; - int i; - - setgpio(av7110, RESET_LINE, GPIO_OUTLO); - - /* Disable DEBI and GPIO irq */ - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & - ~(MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - - /* enable DEBI */ - saa7146_write(av7110->saa_mem, MC1, 0x08800880); - saa7146_write(av7110->saa_mem, DD1_STREAM_B, 0x00000000); - saa7146_write(av7110->saa_mem, MC2, (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - - /* test DEBI */ - iwdebi(av7110, DEBISWAP, DPRAM_BASE, 0x76543210, 4); - if ((ret=irdebi(av7110, DEBINOSWAP, DPRAM_BASE, 0, 4))!=0x10325476) { - printk("dvb: debi test in bootarm() failed: " - "%08x != %08x\n", ret, 0x10325476);; - return -1; - } - for (i=0; i<8192; i+=4) - iwdebi(av7110, DEBISWAP, DPRAM_BASE+i, 0x00, 4); - dprintk("bootarm: debi test OK\n");; - - /* boot */ - dprintk("bootarm: load boot code\n"); - - setgpio(av7110, ARM_IRQ_LINE, GPIO_IRQLO); - //setgpio(av7110, DEBI_DONE_LINE, GPIO_INPUT); - //setgpio(av7110, 3, GPIO_INPUT); - - iwdebi(av7110, DEBISWAB, DPRAM_BASE, (u32) bootcode, sizeof(bootcode)); - iwdebi(av7110, DEBINOSWAP, BOOT_STATE, BOOTSTATE_BUFFER_FULL, 2); - - wait_for_debi_done(av7110); - setgpio(av7110, RESET_LINE, GPIO_OUTHI); - current->state=TASK_INTERRUPTIBLE; - schedule_timeout(HZ); - - dprintk("bootarm: load dram code\n"); - - if (load_dram(av7110, (u32 *)Root, sizeof(Root))<0) - return -1; - - setgpio(av7110, RESET_LINE, GPIO_OUTLO); - mdelay(1); - - dprintk("bootarm: load dpram code\n"); - - iwdebi(av7110, DEBISWAB, DPRAM_BASE, (u32) Dpram, sizeof(Dpram)); - - wait_for_debi_done(av7110); - - setgpio(av7110, RESET_LINE, GPIO_OUTHI); - mdelay(800); - - //ARM_ClearIrq(av7110); - ARM_ResetMailBox(av7110); - saa7146_write(av7110->saa_mem, ISR, (MASK_19 | MASK_03)); - saa7146_write(av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) | MASK_03 ); - - av7110->arm_errors=0; - av7110->arm_ready=1; - return 0; -} - -static inline int -SetPIDs(av7110_t *av7110, u16 vpid, u16 apid, u16 ttpid, - u16 subpid, u16 pcrpid) -{ - if (vpid == 0x1fff || apid == 0x1fff || - ttpid == 0x1fff || subpid == 0x1fff || pcrpid == 0x1fff) - vpid = apid = ttpid = subpid = pcrpid = 0; - - return outcom(av7110, COMTYPE_PIDFILTER, MultiPID, 5, - pcrpid, vpid, apid, ttpid, subpid); -} - -static void -ChangePIDs(av7110_t *av7110, u16 vpid, u16 apid, u16 ttpid, - u16 subpid, u16 pcrpid) -{ - if (down_interruptible(&av7110->pid_mutex)) - return; - - if (!(vpid&0x8000)) av7110->pids[DMX_PES_VIDEO]=vpid; - if (!(apid&0x8000)) av7110->pids[DMX_PES_AUDIO]=apid; - if (!(ttpid&0x8000)) av7110->pids[DMX_PES_TELETEXT]=ttpid; - if (!(pcrpid&0x8000)) av7110->pids[DMX_PES_PCR]=pcrpid; - - av7110->pids[DMX_PES_SUBTITLE]=0; - - if (av7110->fe_synced) - SetPIDs(av7110, vpid, apid, ttpid, subpid, pcrpid); - - up(&av7110->pid_mutex); -} - - -static void -SetMode(av7110_t *av7110, int mode) -{ - outcom(av7110, COMTYPE_ENCODER, LoadVidCode, 1, mode); - - if (!av7110->playing) { - ChangePIDs(av7110, av7110->pids[DMX_PES_VIDEO], - av7110->pids[DMX_PES_AUDIO], - av7110->pids[DMX_PES_TELETEXT], - 0, av7110->pids[DMX_PES_PCR]); - outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); - } -} - -inline static void -TestMode(av7110_t *av7110, int mode) -{ - outcom(av7110, COMTYPE_ENCODER, SetTestMode, 1, mode); -} - -inline static void -VidMode(av7110_t *av7110, int mode) -{ - outcom(av7110, COMTYPE_ENCODER, SetVidMode, 1, mode); -} - - -static inline int -vidcom(av7110_t *av7110, u32 com, u32 arg) -{ - return outcom(av7110, 0x80, 0x02, 4, - (com>>16), (com&0xffff), - (arg>>16), (arg&0xffff)); -} - -static inline int -audcom(av7110_t *av7110, u32 com) -{ - return outcom(av7110, 0x80, 0x03, 4, - (com>>16), (com&0xffff)); -} - -inline static void -Set22K(av7110_t *av7110, int state) -{ - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - outcom(av7110, COMTYPE_AUDIODAC, (state ? ON22K : OFF22K), 0); - if (av7110->saa->card_type==DVB_CARD_TT_BUDGET) - setgpio(av7110, 3, (state ? GPIO_OUTHI : GPIO_OUTLO)); -} - - -/* Diseqc functions only for TT Budget card */ -/* taken from the Skyvision DVB driver by - Ralph Metzler */ - - -inline static void -DiseqcSendBit(av7110_t *av7110, int data) -{ - setgpio(av7110, 3, GPIO_OUTHI); - udelay(data ? 500 : 1000); - setgpio(av7110, 3, GPIO_OUTLO); - udelay(data ? 1000 : 500); -} - -static void -DiseqcSendByte(av7110_t *av7110, int data) -{ - int i, par=1, d; - - for (i=7; i>=0; i--) - { - d=(data>>i)&1; - par^=d; - DiseqcSendBit(av7110, d); - } - DiseqcSendBit(av7110, par); -} - -inline static int -SendDiSEqCMsg(av7110_t *av7110, int len, u8 *msg, int burst) -{ - int i; - - switch (av7110->saa->card_type) { - case DVB_CARD_TT_SIEMENS: - { - u16 buf[18] = { ((COMTYPE_AUDIODAC << 8) + SendDiSEqC), - 16, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; - - if (len>10) - len=10; - buf[1] = len+2; - buf[2] = len; - - if (burst!=-1) - buf[3]=burst ? 0x01 : 0x00; - - else - buf[3]=0xffff; - - for (i=0; isaa->i2c_bus; - struct i2c_msg msgs; - - msgs.flags=0; - msgs.addr=id/2; - msgs.len=2; - msgs.buf=msg; - return i2c->xfer (i2c, &msgs, 1); -} - -static inline int -msp_writereg(av7110_t *av7110, u8 dev, u16 reg, u16 val) -{ - u8 msg[5]={ dev, reg>>8, reg&0xff, val>>8 , val&0xff }; - struct dvb_i2c_bus *i2c = av7110->saa->i2c_bus; - struct i2c_msg msgs; - - msgs.flags=0; - msgs.addr=0x40; - msgs.len=5; - msgs.buf=msg; - return i2c->xfer(i2c, &msgs, 1); -} - -static inline u8 -i2c_readreg(av7110_t *av7110, u8 id, u8 reg) -{ - struct dvb_i2c_bus *i2c = av7110->saa->i2c_bus; - u8 mm1[] = {0x00}; - u8 mm2[] = {0x00}; - struct i2c_msg msgs[2]; - - msgs[0].flags=0; - msgs[1].flags=I2C_M_RD; - msgs[0].addr=msgs[1].addr=id/2; - mm1[0]=reg; - msgs[0].len=1; msgs[1].len=1; - msgs[0].buf=mm1; msgs[1].buf=mm2; - i2c->xfer(i2c, msgs, 2); - - return mm2[0]; -} - - -/**************************************************************************** - * I/O buffer management and control - ****************************************************************************/ - -static int sw2mode[16] = { - VIDEO_MODE_PAL, VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, - VIDEO_MODE_NTSC, VIDEO_MODE_NTSC, VIDEO_MODE_PAL, VIDEO_MODE_NTSC, - VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, - VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, VIDEO_MODE_PAL, -}; - -static void -get_video_format(av7110_t *av7110, u8 *buf, int count) -{ - int i; - int hsize,vsize; - int sw; - u8 *p; - - if (av7110->sinfo) - return; - for (i=7; i> 4) | (p[0] << 4); - vsize = ((p[1] &0x0F) << 8) | (p[2]); - sw = (p[3]&0x0F); - SetMode(av7110, sw2mode[sw]); - dprintk("dvb: playback %dx%d fr=%d\n", hsize, vsize, sw); - av7110->sinfo=1; - break; - } -} - -static void -play_video_cb(u8 *buf, int count, void *priv) -{ - av7110_t *av7110=(av7110_t *) priv; - - if ((buf[3]&0xe0)==0xe0) { - get_video_format(av7110, buf, count); - ring_buffer_write(&av7110->avout, buf, count, 0, 0); - } else - ring_buffer_write(&av7110->aout, buf, count, 0, 0); -} - -static void -play_audio_cb(u8 *buf, int count, void *priv) -{ - av7110_t *av7110=(av7110_t *) priv; - - ring_buffer_write(&av7110->aout, buf, count, 0, 0); -} - -#define FREE_COND (ring_buffer_free(&av7110->avout)>=20*1024 && ring_buffer_free(&av7110->aout)>=20*1024) - -static ssize_t -dvb_play(av7110_t *av7110, const u8 *buf, - unsigned long count, int nonblock, int type, int umem) -{ - unsigned long todo = count, n; - - if (!av7110->kbuf[type]) - return -ENOBUFS; - - if (nonblock && !FREE_COND) - return -EWOULDBLOCK; - - while (todo>0) { - if (!FREE_COND) { - if (nonblock) - return count-todo; - if (wait_event_interruptible(av7110->avout.queue, - FREE_COND)) - return count-todo; - } - n=todo; - if (n>IPACKS*2) - n=IPACKS*2; - if (umem) { - if (copy_from_user(av7110->kbuf[type], buf, n)) - return -EFAULT; - dvb_filter_instant_repack(av7110->kbuf[type], n, - &av7110->ipack[type]); - } else { - dvb_filter_instant_repack((u8 *)buf, n, - &av7110->ipack[type]); - } - todo -= n; - buf += n; - } - return count-todo; -} - -static ssize_t -dvb_aplay(av7110_t *av7110, const u8 *buf, - unsigned long count, int nonblock, int type) -{ - unsigned long todo = count, n; - - if (!av7110->kbuf[type]) - return -ENOBUFS; - if (nonblock && ring_buffer_free(&av7110->aout)<20*1024) - return -EWOULDBLOCK; - - while (todo>0) { - if (ring_buffer_free(&av7110->aout)<20*1024) { - if (nonblock) - return count-todo; - if (wait_event_interruptible(av7110->aout.queue, - (ring_buffer_free(&av7110->aout)>= - 20*1024))) - return count-todo; - } - n=todo; - if (n>IPACKS*2) - n=IPACKS*2; - if (copy_from_user(av7110->kbuf[type], buf, n)) - return -EFAULT; - dvb_filter_instant_repack(av7110->kbuf[type], n, - &av7110->ipack[type]); -// memcpy(dvb->kbuf[type], buf, n); - todo -= n; - buf += n; - } - return count-todo; -} - -void init_p2t(p2t_t *p, struct dvb_demux_feed *feed) -{ - memset(p->pes,0,TS_SIZE); - p->counter = 0; - p->pos = 0; - p->frags = 0; - if (feed) p->feed = feed; -} - -void clear_p2t(p2t_t *p) -{ - memset(p->pes,0,TS_SIZE); -// p->counter = 0; - p->pos = 0; - p->frags = 0; -} - - -long int find_pes_header(u8 const *buf, long int length, int *frags) -{ - int c = 0; - int found = 0; - - *frags = 0; - - while (c < length-3 && !found) { - if (buf[c] == 0x00 && buf[c+1] == 0x00 && - buf[c+2] == 0x01) { - switch ( buf[c+3] ) { - - case PROG_STREAM_MAP: - case PRIVATE_STREAM2: - case PROG_STREAM_DIR: - case ECM_STREAM : - case EMM_STREAM : - case PADDING_STREAM : - case DSM_CC_STREAM : - case ISO13522_STREAM: - case PRIVATE_STREAM1: - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - found = 1; - break; - - default: - c++; - break; - } - } else c++; - } - if (c == length-3 && !found){ - if (buf[length-1] == 0x00) *frags = 1; - if (buf[length-2] == 0x00 && - buf[length-1] == 0x00) *frags = 2; - if (buf[length-3] == 0x00 && - buf[length-2] == 0x00 && - buf[length-1] == 0x01) *frags = 3; - return -1; - } - - return c; -} - -void pes_to_ts( u8 const *buf, long int length, u16 pid, p2t_t *p) -{ - int c,c2,l,add; - int check,rest; - - c = 0; - c2 = 0; - if (p->frags){ - check = 0; - switch(p->frags){ - case 1: - if ( buf[c] == 0x00 && buf[c+1] == 0x01 ){ - check = 1; - c += 2; - } - break; - case 2: - if ( buf[c] == 0x01 ){ - check = 1; - c++; - } - break; - case 3: - check = 1; - } - if(check){ - switch ( buf[c] ) { - - case PROG_STREAM_MAP: - case PRIVATE_STREAM2: - case PROG_STREAM_DIR: - case ECM_STREAM : - case EMM_STREAM : - case PADDING_STREAM : - case DSM_CC_STREAM : - case ISO13522_STREAM: - case PRIVATE_STREAM1: - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - p->pes[0] = 0x00; - p->pes[1] = 0x00; - p->pes[2] = 0x01; - p->pes[3] = buf[c]; - p->pos=4; - memcpy(p->pes+p->pos,buf+c,(TS_SIZE-4)-p->pos); - c += (TS_SIZE-4)-p->pos; - p_to_t(p->pes,(TS_SIZE-4),pid,&p->counter, - p->feed); - clear_p2t(p); - break; - - default: - c=0; - break; - } - } - p->frags = 0; - } - - if (p->pos){ - c2 = find_pes_header(buf+c,length-c,&p->frags); - if (c2 >= 0 && c2 < (TS_SIZE-4)-p->pos){ - l = c2+c; - } else l = (TS_SIZE-4)-p->pos; - memcpy(p->pes+p->pos,buf,l); - c += l; - p->pos += l; - p_to_t(p->pes,p->pos,pid,&p->counter, p->feed); - clear_p2t(p); - } - - add = 0; - while (c < length){ - c2 = find_pes_header(buf+c+add,length-c-add,&p->frags); - if (c2 >= 0) { - c2 += c+add; - if (c2 > c){ - p_to_t(buf+c,c2-c,pid,&p->counter, - p->feed); - c = c2; - clear_p2t(p); - add = 0; - } else add = 1; - } else { - l = length-c; - rest = l % (TS_SIZE-4); - l -= rest; - p_to_t(buf+c,l,pid,&p->counter, - p->feed); - memcpy(p->pes,buf+c+l,rest); - p->pos = rest; - c = length; - } - } -} - - -int write_ts_header2(u16 pid, u8 *counter, int pes_start, u8 *buf, u8 length) -{ - int i; - int c = 0; - int fill; - u8 tshead[4] = { 0x47, 0x00, 0x00, 0x10}; - - - fill = (TS_SIZE-4)-length; - if (pes_start) tshead[1] = 0x40; - if (fill) tshead[3] = 0x30; - tshead[1] |= (u8)((pid & 0x1F00) >> 8); - tshead[2] |= (u8)(pid & 0x00FF); - tshead[3] |= ((*counter)++ & 0x0F) ; - memcpy(buf,tshead,4); - c+=4; - - - if (fill){ - buf[4] = fill-1; - c++; - if (fill >1){ - buf[5] = 0x00; - c++; - } - for ( i = 6; i < fill+4; i++){ - buf[i] = 0xFF; - c++; - } - } - - return c; -} - - -void p_to_t(u8 const *buf, long int length, u16 pid, u8 *counter, - struct dvb_demux_feed *feed) -{ - - int l, pes_start; - u8 obuf[TS_SIZE]; - long int c = 0; - - pes_start = 0; - if ( length > 3 && - buf[0] == 0x00 && buf[1] == 0x00 && buf[2] == 0x01 ) - switch (buf[3]){ - case PROG_STREAM_MAP: - case PRIVATE_STREAM2: - case PROG_STREAM_DIR: - case ECM_STREAM : - case EMM_STREAM : - case PADDING_STREAM : - case DSM_CC_STREAM : - case ISO13522_STREAM: - case PRIVATE_STREAM1: - case AUDIO_STREAM_S ... AUDIO_STREAM_E: - case VIDEO_STREAM_S ... VIDEO_STREAM_E: - pes_start = 1; - break; - - default: - break; - } - - while ( c < length ){ - memset(obuf,0,TS_SIZE); - if (length - c >= (TS_SIZE-4)){ - l = write_ts_header2(pid, counter, pes_start - , obuf, (TS_SIZE-4)); - memcpy(obuf+l, buf+c, TS_SIZE-l); - c += TS_SIZE-l; - } else { - l = write_ts_header2(pid, counter, pes_start - , obuf, length-c); - memcpy(obuf+l, buf+c, TS_SIZE-l); - c = length; - } - feed->cb.ts(obuf, 188, 0, 0, &feed->feed.ts, DMX_OK); - pes_start = 0; - } -} - - -/**************************************************************************** - * V4L SECTION - ****************************************************************************/ - -static int dvb_do_ioctl (struct inode *inode, struct file *file, - unsigned int cmd, void *arg) -{ - struct video_device *dev = video_devdata (file); - av7110_t *av7110 = dev->priv; - - switch (cmd) { - case VIDIOCGCAP: - { - struct video_capability *b = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGCAP called\n"); - - strcpy(b->name, &dev->name[0]); - - b->type = av7110->video.type; - - b->channels = 1; - b->audios = 2; - b->maxwidth = 768; - b->maxheight = 576; - b->minwidth = 32; - b->minheight = 32; - - return 0; - } - - case VIDIOCGCHAN: - { - static const - struct video_channel dvb_chan = { 0, "DVB", 1, 3, 1, 1 }; - struct video_channel *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGCHAN called\n"); - - memcpy(v, &dvb_chan, sizeof(struct video_channel)); - - return 0; - - } - - case VIDIOCSCHAN: - { - struct video_channel *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCSCHAN called\n"); - - if (v->channel>0) - return -EINVAL; - - if (v->norm > 1) - return -EOPNOTSUPP; - - av7110->vidmode = v->norm; - SetMode(av7110, v->norm); - av7110->saa->mode = v->norm; - return 0; - } - - case VIDIOCGTUNER: - { - struct video_tuner *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGTUNER called\n"); - - /* only channel 0 has a tuner */ - if(!v->tuner) - return -EINVAL; - - /* fill the structure */ - strcpy(v->name, "DVB"); - v->rangelow = 0x00000000; - v->rangehigh = 0xffffffff; - - v->flags= VIDEO_TUNER_PAL | VIDEO_TUNER_NTSC; - v->mode = av7110->vidmode; - - /* fixme: fill in signal strength here */ - v->signal = 0xffff; - - return 0; - } - - case VIDIOCSTUNER: - { - struct video_tuner *v = arg; - - dprintk(KERN_ERR "dvb: VIDIOCSTUNER called\n"); - - /* only channel 0 has a tuner */ - if (!v->tuner) - return -EINVAL; - - /* check if format is supported */ - if(v->mode != VIDEO_MODE_PAL && v->mode != VIDEO_MODE_NTSC - /* && v->mode != VIDEO_MODE_SECAM */ ) - return -EOPNOTSUPP; - - av7110->vidmode = v->mode; - SetMode(av7110, v->mode); - - return 0; - } - - case VIDIOCGPICT: - { - struct video_picture *p = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGPICT called\n"); - - saacomm(SAA7146_V4L_GPICT, p); - - dprintk("dvb: VIDIOCGPICT called: b:%d c:%d s:%d d:%d p:%d\n", - p->brightness, p->contrast, p->colour, - p->depth, p->palette); - - return 0; - } - - case VIDIOCSPICT: - { - struct video_picture *p = arg; - - dprintk("dvb: VIDIOCSPICT called: b:%d c:%d s:%d d:%d p:%d\n", - p->brightness, p->contrast, p->colour, - p->depth, p->palette); - - switch (p->palette) { - case VIDEO_PALETTE_RGB555: - case VIDEO_PALETTE_RGB565: - case VIDEO_PALETTE_RGB24: - case VIDEO_PALETTE_RGB32: - case VIDEO_PALETTE_UYVY: - case VIDEO_PALETTE_YUV422P: - case VIDEO_PALETTE_YUV420P: - case VIDEO_PALETTE_YUV411P: - break; - default: - return -EINVAL; - } - - saacomm(SAA7146_V4L_SPICT, p); - - return 0; - - } - - case VIDIOCSWIN: - { - struct video_window *w = arg; - - dprintk("dvb: VIDIOCSWIN called: " - "clips: %d, x:%d, y:%d, h:%d, w:%d\n", - w->clipcount, w->x, w->y, w->height, w->width); - - saacomm(SAA7146_V4L_SWIN, w); - - return 0; - } - - case VIDIOCGWIN: - { - dprintk(KERN_ERR "dvb: VIDIOCGWIN called\n"); - return 0; - } - - case VIDIOCCAPTURE: - { - int *v = arg; - - dprintk("dvb: VIDIOCCAPTURE called, mode:%d (0=disable)\n", *v); - - saacomm(SAA7146_V4L_CCAPTURE, v); - - return 0; - } - - case VIDIOCGFBUF: - { - struct video_buffer *b = arg; - - dprintk(KERN_ERR "dvb: VIDIOCGFBUF called\n"); - - saacomm(SAA7146_V4L_GFBUF, b); - - return 0; - - } - - case VIDIOCSFBUF: - { - struct video_buffer *b = arg; - u32 vid = (vidmem << 16) | vidlow; - - /* see if vidmem-override is requested */ - if (vidmem) { - printk ("dvb: video-memory-override. (0x%08x)\n", vid); - b->base = (void*) vid; - } - - saacomm(SAA7146_V4L_SFBUF, b); - - dprintk(KERN_ERR "dvb: VIDIOCSFBUF called\n"); - - return 0; - } - - /* Video key event - to dev 255 is to all - - * cuts capture on all DMA windows with this key (0xFFFFFFFF == all) - */ - case VIDIOCKEY: - { - dprintk(KERN_ERR "dvb: VIDIOCKEY called\n"); - return 0; - } - - case VIDIOCGAUDIO: - { - struct video_audio *v = arg; - - v->flags = VIDEO_AUDIO_MUTABLE; - /* let's auto-detect */ - return 0; - } - - case VIDIOCSAUDIO: - { - //struct video_audio *v; - return 0; - } - - case VIDIOCSYNC: - { - int i = 0; - int *frame = (int*) arg; - - dprintk ("dvb: VIDIOCSYNC called - frame: %d\n", *frame); - - /* simply pass the requested frame-number to the corresponding - saa7146-function ... */ - i = saacomm(SAA7146_V4L_CSYNC, frame); - - dprintk ("dvb: VIDIOCSYNC done - frame: %d\n", *frame); - - return i; - } - - case VIDIOCMCAPTURE: - { - struct video_mmap *vm = arg; - int i = 0; - - dprintk(KERN_ERR "dvb: VIDIOCMCAPTURE called: fr:%d," - "fmt:%d, w:%d, h:%d\n", - vm->frame, vm->format, vm->width, vm->height); - - switch (vm->format) { - case VIDEO_PALETTE_YUV422P: - case VIDEO_PALETTE_YUV420P: - case VIDEO_PALETTE_YUV411P: - return -EINVAL; - } - - /* simply pass the structure for the requested frame-number - to the corresponding saa7146-function ... */ - i = saacomm(SAA7146_V4L_CMCAPTURE, vm); - - return i; - } - - case VIDIOCGMBUF: - { - struct video_mbuf *mbuf = arg; - dprintk(KERN_ERR "dvb: VIDIOCGMBUF called\n"); - saacomm(SAA7146_V4L_GMBUF, mbuf); - return 0; - - } - - case VIDIOCGUNIT: - { - /*struct video_unit vu;*/ - dprintk(KERN_ERR "dvb: VIDIOCGUNIT called\n"); - return 0; - } - - case VIDIOCGCAPTURE: - { - dprintk(KERN_ERR "dvb: VIDIOCGCAPTURE called\n"); - return 0; - } - case VIDIOCSCAPTURE: - { - dprintk(KERN_ERR "dvb: VIDIOCSCAPTURE called\n"); - return 0; - } - - default: - return -ENOIOCTLCMD; - } - - return 0; -} - - -static int dvb_ioctl (struct inode *inode, struct file *file, - unsigned int cmd, unsigned long arg) -{ - return video_usercopy(inode, file, cmd, arg, dvb_do_ioctl); -} - - -static int dvb_mmap(struct file* file, struct vm_area_struct *vma) -{ - struct video_device *dev = video_devdata (file); - av7110_t *av7110 = dev->priv; - - dprintk(KERN_ERR "av7110: dvb_mmap called, adr:%08lx, size:0x%08lx\n", - vma->vm_start, vma->vm_end - vma->vm_start); - - if (saacomm(SAA7146_DO_MMAP, vma)) { - printk(KERN_ERR "av7110: dvb_mmap failed!\n"); - return -1; - } - - return 0; -} - - -static unsigned int dvb_audio_poll(struct file *file, poll_table *wait) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned int mask=0; - - if (av7110->playing) { - if (ring_buffer_free(&av7110->aout)>20*1024) - return (POLLOUT | POLLWRNORM); - - poll_wait(file, &av7110->aout.queue, wait); - - if (ring_buffer_free(&av7110->aout)>20*1024) - mask |= (POLLOUT | POLLWRNORM); - } else /* if not playing: may play if asked for */ - mask = (POLLOUT | POLLWRNORM); - - return mask; -} - - -static struct file_operations dvb_fops = { - .ioctl = dvb_ioctl, - .mmap = dvb_mmap, - .llseek = no_llseek -}; - - -/* template for video_device-structure */ -static struct video_device dvb_template = { - .owner = THIS_MODULE, - .name = "DVB Board", - .type = VID_TYPE_TUNER | - VID_TYPE_CAPTURE | - VID_TYPE_OVERLAY | - VID_TYPE_CLIPPING | - VID_TYPE_FRAMERAM | - VID_TYPE_SCALES, - .hardware = VID_HARDWARE_SAA7146, - .fops = &dvb_fops -}; - - -static int vid_register(av7110_t *av7110) -{ - memcpy( &av7110->video, &dvb_template, sizeof(struct video_device)); - - av7110->video.priv = av7110; - - if (video_register_device(&av7110->video, VFL_TYPE_GRABBER, -1)) { - printk(KERN_ERR "dvb: can't register videodevice\n"); - return -1; - } - - return 0; -} - -static inline int vid_unregister(av7110_t *av7110) -{ - if (av7110->video.minor != -1) - video_unregister_device(&av7110->video); - - return 0; -} - -/**************************************************************************** - * END OF V4L SECTION - ****************************************************************************/ - - -/**************************************************************************** - * DVB API SECTION - ****************************************************************************/ - - -/****************************************************************************** - * hardware filter functions - ******************************************************************************/ - -static int -StartHWFilter(struct dvb_demux_filter *dvbdmxfilter) -{ - struct dvb_demux_feed *dvbdmxfeed=dvbdmxfilter->feed; - av7110_t *av7110=(av7110_t *) dvbdmxfeed->demux->priv; - u16 buf[20]; - int ret, i; - u16 handle; -// u16 mode=0x0320; - u16 mode=0xb96a; - - if (dvbdmxfilter->type==DMX_TYPE_SEC) { - buf[4]=(dvbdmxfilter->filter.filter_value[0]<<8)| - dvbdmxfilter->maskandmode[0]; - for (i=3; i<18; i++) - buf[i+4-2]=(dvbdmxfilter->filter.filter_value[i]<<8)| - dvbdmxfilter->maskandmode[i]; - mode=4; - } else - if ((dvbdmxfeed->ts_type & TS_PACKET) && - !(dvbdmxfeed->ts_type & TS_PAYLOAD_ONLY)) - init_p2t(&av7110->p2t_filter[dvbdmxfilter->index], dvbdmxfeed); - - buf[0] = (COMTYPE_PID_FILTER << 8) + AddPIDFilter; - buf[1] = 16; - buf[2] = dvbdmxfeed->pid; - buf[3] = mode; - - ret=CommandRequest(av7110, buf, 20, &handle, 1); - if (ret<0) - return ret; - - av7110->handle2filter[handle]=dvbdmxfilter; - dvbdmxfilter->hw_handle=handle; - - return ret; -} - -static int -StopHWFilter(struct dvb_demux_filter *dvbdmxfilter) -{ - av7110_t *av7110=(av7110_t *) dvbdmxfilter->feed->demux->priv; - u16 buf[3]; - u16 answ[2]; - int ret; - u16 handle; - - handle=dvbdmxfilter->hw_handle; - if (handle >= MAXFILT) { - dprintk("dvb: StopHWFilter tried to stop invalid filter %d.\n", - handle); - dprintk("dvb: filter type = %d\n", dvbdmxfilter->type); - return 0; - } - - av7110->handle2filter[handle]=NULL; - - buf[0] = (COMTYPE_PID_FILTER << 8) + DelPIDFilter; - buf[1] = 1; - buf[2] = handle; - ret=CommandRequest(av7110, buf, 3, answ, 2); - - if (answ[1] != handle) { - dprintk("dvb: filter %d shutdown error :%d\n", handle, answ[1]); - ret=-1; - } - return ret; -} - - -static int -dvb_write_to_decoder(struct dvb_demux_feed *dvbdmxfeed, u8 *buf, size_t count) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - ipack *ipack=&av7110->ipack[dvbdmxfeed->pes_type]; - - switch (dvbdmxfeed->pes_type) { - case 0: - if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) { - return -EINVAL; - } - break; - case 1: - if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) { - return -EINVAL; - } - break; - default: - return -1; - } - - if (!(buf[3]&0x10)) { // no payload? - return -1; - } - if (buf[1]&0x40) - dvb_filter_ipack_flush(ipack); - - if (buf[3]&0x20) { // adaptation field? - count-=buf[4]+1; - buf+=buf[4]+1; - if (!count) { - return 0; - } - } - - dvb_filter_instant_repack(buf+4, count-4, - &av7110->ipack[dvbdmxfeed->pes_type]); - return 0; -} - -static void -dvb_feed_start_pid(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - u16 *pid=dvbdmx->pids, npids[5]; - int i; - - npids[0]=npids[1]=npids[2]=npids[3]=0xffff; - npids[4]=0xffff; - i=dvbdmxfeed->pes_type; - npids[i]=(pid[i]&0x8000) ? 0 : pid[i]; - if ((i==2) && npids[i] && (dvbdmxfeed->ts_type & TS_PACKET)) { - npids[i]=0; - ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); - StartHWFilter(dvbdmxfeed->filter); - return; - } - if (dvbdmxfeed->pes_type<=2) - ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); - - if (dvbdmxfeed->pes_type<2 && npids[0]) - if (av7110->fe_synced) - outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); - - if ((dvbdmxfeed->ts_type & TS_PACKET)) { - if (dvbdmxfeed->pes_type == 0 && - !(dvbdmx->pids[0]&0x8000)) - AV_StartRecord(av7110, RP_AUDIO, - dvbdmxfeed); - if (dvbdmxfeed->pes_type == 1 && - !(dvbdmx->pids[1]&0x8000)) - AV_StartRecord(av7110, RP_VIDEO, - dvbdmxfeed); - } -} - -static void -dvb_feed_stop_pid(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - u16 *pid=dvbdmx->pids, npids[5]; - int i; - - if (dvbdmxfeed->pes_type<=1) { - AV_Stop(av7110, dvbdmxfeed->pes_type ? - RP_VIDEO : RP_AUDIO); - if (!av7110->rec_mode) - dvbdmx->recording=0; - if (!av7110->playing) - dvbdmx->playing=0; - } - npids[0]=npids[1]=npids[2]=npids[3]=0xffff; - npids[4]=0xffff; - i=dvbdmxfeed->pes_type; - switch (i) { - case 2: //teletext - if (dvbdmxfeed->ts_type & TS_PACKET) - StopHWFilter(dvbdmxfeed->filter); - npids[2]=0; - break; - case 0: - case 1: - case 4: - if (!pids_off) - return; - npids[i]=(pid[i]&0x8000) ? 0 : pid[i]; - break; - } - ChangePIDs(av7110, npids[1], npids[0], npids[2], npids[3], npids[4]); -} - -static int -dvb_start_feed(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - - if (!dvbdmx->dmx.frontend) - return -EINVAL; - - if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) - return TTBStart(av7110); - - if (dvbdmxfeed->pid>0x1fff) - return -1; - - if (dvbdmxfeed->type == DMX_TYPE_TS) { - if ((dvbdmxfeed->ts_type & TS_DECODER) - && (dvbdmxfeed->pes_typedmx.frontend->source) { - case DMX_MEMORY_FE: - if (dvbdmxfeed->ts_type & TS_DECODER) - if (dvbdmxfeed->pes_type<2 && - !(dvbdmx->pids[0]&0x8000) && - !(dvbdmx->pids[1]&0x8000)) { - ring_buffer_flush(&av7110->avout); - ring_buffer_flush(&av7110->aout); - AV_StartPlay(av7110,RP_AV); - dvbdmx->playing=1; - } - break; - default: - dvb_feed_start_pid(dvbdmxfeed); - break; - } - } else - if ((dvbdmxfeed->ts_type & TS_PACKET) && - (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE)) - StartHWFilter(dvbdmxfeed->filter); - } - - if (dvbdmxfeed->type == DMX_TYPE_SEC) { - int i; - - for (i=0; ifilternum; i++) { - if (dvbdmx->filter[i].state!=DMX_STATE_READY) - continue; - if (dvbdmx->filter[i].type!=DMX_TYPE_SEC) - continue; - if (dvbdmx->filter[i].filter.parent!=&dvbdmxfeed->feed.sec) - continue; - dvbdmx->filter[i].state=DMX_STATE_GO; - if (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE) - StartHWFilter(&dvbdmx->filter[i]); - } - } - return 0; -} - - -static int -dvb_stop_feed(struct dvb_demux_feed *dvbdmxfeed) -{ - struct dvb_demux *dvbdmx=dvbdmxfeed->demux; - av7110_t *av7110=(av7110_t *) dvbdmx->priv; - - if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) - return TTBStop(av7110); - - if (dvbdmxfeed->type == DMX_TYPE_TS) { - if (dvbdmxfeed->ts_type & TS_DECODER) { - if (dvbdmxfeed->pes_type>=DMX_TS_PES_OTHER || - !dvbdmx->pesfilter[dvbdmxfeed->pes_type]) - return -EINVAL; - dvbdmx->pids[dvbdmxfeed->pes_type]|=0x8000; - dvbdmx->pesfilter[dvbdmxfeed->pes_type]=0; - } - if (dvbdmxfeed->ts_type & TS_DECODER && - (dvbdmxfeed->pes_typets_type & TS_PACKET) && - (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE)) - StopHWFilter(dvbdmxfeed->filter); - } - - if (dvbdmxfeed->type == DMX_TYPE_SEC) { - int i; - - for (i=0; ifilternum; i++) - if (dvbdmx->filter[i].state==DMX_STATE_GO && - dvbdmx->filter[i].filter.parent==&dvbdmxfeed->feed.sec) { - dvbdmx->filter[i].state=DMX_STATE_READY; - if (dvbdmx->dmx.frontend->source!=DMX_MEMORY_FE) - StopHWFilter(&dvbdmx->filter[i]); - } - } - return 0; -} - - -static void -restart_feeds(av7110_t *av7110) -{ - struct dvb_demux *dvbdmx=&av7110->demux; - struct dvb_demux_feed *feed; - int mode; - int i; - - mode=av7110->playing; - av7110->playing=0; - av7110->rec_mode=0; - - for (i=0; ifilternum; i++) { - feed=&dvbdmx->feed[i]; - if (feed->state==DMX_STATE_GO) - dvb_start_feed(feed); - } - - if (mode) - AV_StartPlay(av7110, mode); -} - -/****************************************************************************** - * SEC device file operations - ******************************************************************************/ - -static -int av7110_diseqc_ioctl (struct dvb_frontend *fe, unsigned int cmd, void *arg) -{ - av7110_t *av7110 = fe->before_after_data; - - switch (cmd) { - case FE_SET_TONE: - switch ((fe_sec_tone_mode_t) arg) { - case SEC_TONE_ON: - Set22K (av7110, 1); - break; - case SEC_TONE_OFF: - Set22K (av7110, 0); - break; - default: - return -EINVAL; - }; - break; - - case FE_DISEQC_SEND_MASTER_CMD: - { - struct dvb_diseqc_master_cmd *cmd = arg; - - SendDiSEqCMsg (av7110, cmd->msg_len, cmd->msg, 0); - break; - } - - case FE_DISEQC_SEND_BURST: - SendDiSEqCMsg (av7110, 0, NULL, (int) arg); - break; - - default: - return -EOPNOTSUPP; - }; - - return 0; -} - -/****************************************************************************** - * CI link layer file ops (FIXME: move this to separate module later) - ******************************************************************************/ - -int ci_ll_init(ring_buffer_t *cirbuf, ring_buffer_t *ciwbuf, int size) -{ - ring_buffer_init(cirbuf, vmalloc(size), size); - ring_buffer_init(ciwbuf, vmalloc(size), size); - return 0; -} - -void ci_ll_flush(ring_buffer_t *cirbuf, ring_buffer_t *ciwbuf) -{ - ring_buffer_flush(cirbuf); - ring_buffer_flush(ciwbuf); -} - -void ci_ll_release(ring_buffer_t *cirbuf, ring_buffer_t *ciwbuf) -{ - vfree(cirbuf->data); - cirbuf->data=0; - vfree(ciwbuf->data); - ciwbuf->data=0; -} - - -int ci_ll_reset(ring_buffer_t *cibuf, struct file *file, - int slots, ca_slot_info_t *slot) -{ - int i; - - if (ring_buffer_free(cibuf)<8) - return -EBUSY; - for (i=0; i<2; i++) - if (slots&(1<data[cibuf->pwrite]=0x00; - cibuf->data[(cibuf->pwrite+1)%cibuf->size]=0x06; - cibuf->data[(cibuf->pwrite+2)%cibuf->size]=i; - cibuf->data[(cibuf->pwrite+3)%cibuf->size]=0x00; - cibuf->data[(cibuf->pwrite+4)%cibuf->size]=0xff; - cibuf->data[(cibuf->pwrite+5)%cibuf->size]=0x02; - cibuf->data[(cibuf->pwrite+6)%cibuf->size]=0x00; - cibuf->data[(cibuf->pwrite+7)%cibuf->size]=0x00; - cibuf->pwrite=(cibuf->pwrite+8)%cibuf->size; - slot[i].flags=0; - } - return 0; -} - -static ssize_t -ci_ll_write(ring_buffer_t *cibuf, struct file *file, const char *buf, size_t count, loff_t *ppos) -{ - int free, split; - int32_t pread; - int non_blocking=file->f_flags&O_NONBLOCK; - - if (count>2048) - return -EINVAL; - pread=cibuf->pread; - free=pread-cibuf->pwrite; - if (free<=0) - free+=cibuf->size; - if (count+2>=free) { - if (non_blocking) - return -EWOULDBLOCK; - if (wait_event_interruptible(cibuf->queue, - (ring_buffer_free(cibuf)>count+2))) - return 0; - } - cibuf->data[cibuf->pwrite]=(count>>8); - cibuf->data[(cibuf->pwrite+1)%cibuf->size]=(count&0xff); - cibuf->pwrite=(cibuf->pwrite+2)%cibuf->size; - - if (pread>cibuf->pwrite) - split=0; - else - split=cibuf->size-cibuf->pwrite; - if (split && splitdata + cibuf->pwrite, buf, split)) - return -EFAULT; - if (copy_from_user(cibuf->data, buf+split, count-split)) - return -EFAULT; - } else - if (copy_from_user(cibuf->data + cibuf->pwrite, buf, count)) - return -EFAULT; - cibuf->pwrite=(cibuf->pwrite+count)%cibuf->size; - return count; -} - -static ssize_t -ci_ll_read(ring_buffer_t *cibuf, struct file *file, char *buf, size_t count, loff_t *ppos) -{ - int split=0, avail, pwrite; - int non_blocking=file->f_flags&O_NONBLOCK; - - if (!cibuf->data || !count) - return 0; - if (non_blocking && (ring_buffer_empty(cibuf))) - return -EWOULDBLOCK; - if (wait_event_interruptible(cibuf->queue, - !ring_buffer_empty(cibuf))) - return 0; - pwrite=cibuf->pwrite; - avail=pwrite - cibuf->pread; - if (avail<0) - avail+=cibuf->size; - if (avail<4) - return 0; - count=(cibuf->data[cibuf->pread]<<8); - count|=cibuf->data[(cibuf->pread+1)%cibuf->size]; - if (availpread=(cibuf->pread+2)%cibuf->size; - - if (pwritepread) - split=cibuf->size-cibuf->pread; - if (split && splitdata+cibuf->pread, split)) - return -EFAULT; - if (copy_to_user(buf+split, cibuf->data, count-split)) - return -EFAULT; - } else - if (copy_to_user(buf, cibuf->data+cibuf->pread, count)) - return -EFAULT; - cibuf->pread=(cibuf->pread + count)%cibuf->size; - return count; -} - -static int -dvb_ca_open(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - int err=dvb_generic_open(inode, file); - - if (err<0) - return err; - ci_ll_flush(&av7110->ci_rbuffer, &av7110->ci_wbuffer); - return 0; -} - -static unsigned -int dvb_ca_poll(struct file *file, poll_table *wait) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - unsigned int mask=0; - - ring_buffer_t *rbuf=&av7110->ci_rbuffer; - ring_buffer_t *wbuf=&av7110->ci_wbuffer; - - if (!ring_buffer_empty(rbuf)) - mask|=POLLIN; - if (ring_buffer_avail(wbuf)>1024) - mask|=POLLOUT; - if (mask) - return mask; - - poll_wait(file, &rbuf->queue, wait); - - if (!ring_buffer_empty(rbuf)) - mask|=POLLIN; - if (ring_buffer_avail(wbuf)>1024) - mask|=POLLOUT; - - return mask; -} - -static int -dvb_ca_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned long arg=(unsigned long) parg; - - switch (cmd) { - case CA_RESET: -#ifdef NEW_CI - - return ci_ll_reset(&av7110->ci_wbuffer, file, arg, &av7110->ci_slot[0]); -#endif - break; - - case CA_GET_CAP: - { - ca_caps_t cap; - - cap.slot_num=2; -#ifdef NEW_CI - cap.slot_type=CA_CI_LINK; -#else - cap.slot_type=CA_CI; -#endif - cap.descr_num=16; - cap.descr_type=CA_ECD; - memcpy(parg, &cap, sizeof(cap)); - } - break; - - case CA_GET_SLOT_INFO: - { - ca_slot_info_t *info=(ca_slot_info_t *)parg; - - if (info->num>1) - return -EINVAL; -#ifdef NEW_CI - av7110->ci_slot[info->num].type = CA_CI_LINK; -#else - av7110->ci_slot[info->num].type = CA_CI; -#endif - memcpy(info, &av7110->ci_slot[info->num], sizeof(ca_slot_info_t)); - } - break; - - case CA_GET_MSG: - break; - - case CA_SEND_MSG: - break; - - case CA_GET_DESCR_INFO: - { - ca_descr_info_t info; - - info.num=16; - info.type=CA_ECD; - memcpy (parg, &info, sizeof (info)); - } - break; - - case CA_SET_DESCR: - { - ca_descr_t *descr=(ca_descr_t*) parg; - - if (descr->index>=16) - return -EINVAL; - if (descr->parity>1) - return -EINVAL; - outcom(av7110, COMTYPE_PIDFILTER, SetDescr, 5, - (descr->index<<8)|descr->parity, - (descr->cw[0]<<8)|descr->cw[1], - (descr->cw[2]<<8)|descr->cw[3], - (descr->cw[4]<<8)|descr->cw[5], - (descr->cw[6]<<8)|descr->cw[7]); - } - break; - - default: - return -EINVAL; - } - return 0; -} - -static ssize_t -dvb_ca_write(struct file *file, const char *buf, - size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - return ci_ll_write(&av7110->ci_wbuffer, file, buf, count, ppos); -} - -static ssize_t -dvb_ca_read(struct file *file, char *buf, size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - return ci_ll_read(&av7110->ci_rbuffer, file, buf, count, ppos); - -} - - - -/****************************************************************************** - * DVB device file operations - ******************************************************************************/ - -static unsigned int dvb_video_poll(struct file *file, poll_table *wait) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned int mask=0; - - if (av7110->playing) { - if (FREE_COND) - return (POLLOUT | POLLWRNORM); - - poll_wait(file, &av7110->avout.queue, wait); - - if (FREE_COND) - mask |= (POLLOUT | POLLWRNORM); - } else /* if not playing: may play if asked for */ - mask = (POLLOUT | POLLWRNORM); - - return mask; -} - -static ssize_t -dvb_video_write(struct file *file, const char *buf, - size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - if (av7110->videostate.stream_source!=VIDEO_SOURCE_MEMORY) - return -EPERM; - - return dvb_play(av7110, buf, count, file->f_flags&O_NONBLOCK, 1, 1); -} - -static ssize_t -dvb_audio_write(struct file *file, const char *buf, - size_t count, loff_t *ppos) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - if (av7110->audiostate.stream_source!=AUDIO_SOURCE_MEMORY) { - printk(KERN_ERR "not audio source memory\n"); - return -EPERM; - } - return dvb_aplay(av7110, buf, count, file->f_flags&O_NONBLOCK, 0); -} - -u8 iframe_header[] = { 0x00, 0x00, 0x01, 0xe0, 0x00, 0x00, 0x80, 0x00, 0x00 }; - -#define MIN_IFRAME 400000 - -static void -play_iframe(av7110_t *av7110, u8 *buf, unsigned int len, int nonblock) -{ - int i, n=1; - - if (!(av7110->playing&RP_VIDEO)) { - AV_StartPlay(av7110, RP_VIDEO); - n=MIN_IFRAME/len+1; - } - - dvb_play(av7110, iframe_header, sizeof(iframe_header), 0, 1, 0); - - for (i=0; iipack[1]); -} - - -static int -dvb_video_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned long arg=(unsigned long) parg; - int ret=0; - - if (((file->f_flags&O_ACCMODE)==O_RDONLY) && - (cmd!=VIDEO_GET_STATUS)) - return -EPERM; - - switch (cmd) { - case VIDEO_STOP: - av7110->videostate.play_state=VIDEO_STOPPED; - if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) - AV_Stop(av7110, RP_VIDEO); - else - vidcom(av7110, 0x000e, - av7110->videostate.video_blank ? 0 : 1); - av7110->trickmode=TRICK_NONE; - break; - - case VIDEO_PLAY: - av7110->trickmode=TRICK_NONE; - if (av7110->videostate.play_state==VIDEO_FREEZED) { - av7110->videostate.play_state=VIDEO_PLAYING; - vidcom(av7110, 0x000d, 0); - } - - if (av7110->videostate.stream_source==VIDEO_SOURCE_MEMORY) { - if (av7110->playing==RP_AV) { - outcom(av7110, COMTYPE_REC_PLAY, __Stop, 0); - av7110->playing&=~RP_VIDEO; - } - AV_StartPlay(av7110,RP_VIDEO); - vidcom(av7110, 0x000d, 0); - } else { - //AV_Stop(av7110, RP_VIDEO); - vidcom(av7110, 0x000d, 0); - } - av7110->videostate.play_state=VIDEO_PLAYING; - break; - - case VIDEO_FREEZE: - av7110->videostate.play_state=VIDEO_FREEZED; - if (av7110->playing&RP_VIDEO) - outcom(av7110, COMTYPE_REC_PLAY, __Pause, 0); - else - vidcom(av7110, 0x0102, 1); - av7110->trickmode=TRICK_FREEZE; - break; - - case VIDEO_CONTINUE: - if (av7110->playing&RP_VIDEO) - outcom(av7110, COMTYPE_REC_PLAY, __Continue, 0); - vidcom(av7110, 0x000d, 0); - av7110->videostate.play_state=VIDEO_PLAYING; - av7110->trickmode=TRICK_NONE; - break; - - case VIDEO_SELECT_SOURCE: - av7110->videostate.stream_source=(video_stream_source_t) arg; - break; - - case VIDEO_SET_BLANK: - av7110->videostate.video_blank=(int) arg; - break; - - case VIDEO_GET_STATUS: - memcpy(parg, &av7110->videostate, sizeof(struct video_status)); - break; - - case VIDEO_GET_EVENT: - //FIXME: write firmware support for this - ret=-EOPNOTSUPP; - - case VIDEO_SET_DISPLAY_FORMAT: - { - video_displayformat_t format=(video_displayformat_t) arg; - u16 val=0; - - switch(format) { - case VIDEO_PAN_SCAN: - val=VID_PAN_SCAN_PREF; - break; - - case VIDEO_LETTER_BOX: - val=VID_VC_AND_PS_PREF; - break; - - case VIDEO_CENTER_CUT_OUT: - val=VID_CENTRE_CUT_PREF; - break; - - default: - ret=-EINVAL; - break; - } - if (ret<0) - break; - av7110->videostate.video_format=format; - ret=outcom(av7110, COMTYPE_ENCODER, SetPanScanType, - 1, (u16) val); - break; - } - - case VIDEO_SET_FORMAT: - if (arg>1) { - ret=-EINVAL; - break; - } - av7110->display_ar=arg; - ret=outcom(av7110, COMTYPE_ENCODER, SetMonitorType, - 1, (u16) arg); - break; - - case VIDEO_STILLPICTURE: - { - struct video_still_picture *pic= - (struct video_still_picture *) parg; - ring_buffer_flush(&av7110->avout); - play_iframe(av7110, pic->iFrame, pic->size, - file->f_flags&O_NONBLOCK); - break; - } - - case VIDEO_FAST_FORWARD: - //note: arg is ignored by firmware - if (av7110->playing&RP_VIDEO) - outcom(av7110, COMTYPE_REC_PLAY, - __Scan_I, 2, AV_PES, 0); - else - vidcom(av7110, 0x16, arg); - av7110->trickmode=TRICK_FAST; - av7110->videostate.play_state=VIDEO_PLAYING; - break; - - case VIDEO_SLOWMOTION: - if (av7110->playing&RP_VIDEO) { - outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0); - vidcom(av7110, 0x22, arg); - } else { - vidcom(av7110, 0x0d, 0); - vidcom(av7110, 0x0e, 0); - vidcom(av7110, 0x22, arg); - } - av7110->trickmode=TRICK_SLOW; - av7110->videostate.play_state=VIDEO_PLAYING; - break; - - case VIDEO_GET_CAPABILITIES: - *(int *)parg=VIDEO_CAP_MPEG1| - VIDEO_CAP_MPEG2| - VIDEO_CAP_SYS| - VIDEO_CAP_PROG; - break; - - case VIDEO_CLEAR_BUFFER: - ring_buffer_flush(&av7110->avout); - dvb_filter_ipack_reset(&av7110->ipack[1]); - - if (av7110->playing==RP_AV) { - outcom(av7110, COMTYPE_REC_PLAY, - __Play, 2, AV_PES, 0); - if (av7110->trickmode==TRICK_FAST) - outcom(av7110, COMTYPE_REC_PLAY, - __Scan_I, 2, AV_PES, 0); - if (av7110->trickmode==TRICK_SLOW) { - outcom(av7110, COMTYPE_REC_PLAY, __Slow, 2, 0, 0); - vidcom(av7110, 0x22, arg); - } - if (av7110->trickmode==TRICK_FREEZE) - vidcom(av7110, 0x000e, 1); - } - break; - - case VIDEO_SET_STREAMTYPE: - - break; - - default: - ret=-ENOIOCTLCMD; - break; - } - return ret; -} - -static int -dvb_audio_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - unsigned long arg=(unsigned long) parg; - int ret=0; - - if (((file->f_flags&O_ACCMODE)==O_RDONLY) && - (cmd!=AUDIO_GET_STATUS)) - return -EPERM; - - switch (cmd) { - case AUDIO_STOP: - if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) - AV_Stop(av7110, RP_AUDIO); - else - audcom(av7110, 1); - av7110->audiostate.play_state=AUDIO_STOPPED; - break; - - case AUDIO_PLAY: - if (av7110->audiostate.stream_source==AUDIO_SOURCE_MEMORY) - AV_StartPlay(av7110, RP_AUDIO); - audcom(av7110, 2); - av7110->audiostate.play_state=AUDIO_PLAYING; - break; - - case AUDIO_PAUSE: - audcom(av7110, 1); - av7110->audiostate.play_state=AUDIO_PAUSED; - break; - - case AUDIO_CONTINUE: - if (av7110->audiostate.play_state==AUDIO_PAUSED) { - av7110->audiostate.play_state=AUDIO_PLAYING; - audcom(av7110, 0x12); - } - break; - - case AUDIO_SELECT_SOURCE: - av7110->audiostate.stream_source=(audio_stream_source_t) arg; - break; - - case AUDIO_SET_MUTE: - { - audcom(av7110, arg ? 1 : 2); - av7110->audiostate.mute_state=(int) arg; - break; - } - - case AUDIO_SET_AV_SYNC: - av7110->audiostate.AV_sync_state=(int) arg; - audcom(av7110, arg ? 0x0f : 0x0e); - break; - - case AUDIO_SET_BYPASS_MODE: - ret=-EINVAL; - break; - - case AUDIO_CHANNEL_SELECT: - av7110->audiostate.channel_select=(audio_channel_select_t) arg; - - switch(av7110->audiostate.channel_select) { - case AUDIO_STEREO: - audcom(av7110, 0x80); - break; - - case AUDIO_MONO_LEFT: - audcom(av7110, 0x100); - break; - - case AUDIO_MONO_RIGHT: - audcom(av7110, 0x200); - break; - - default: - ret=-EINVAL; - break; - } - break; - - case AUDIO_GET_STATUS: - memcpy(parg, &av7110->audiostate, sizeof(struct audio_status)); - break; - - case AUDIO_GET_CAPABILITIES: - *(int *)parg=AUDIO_CAP_LPCM| - AUDIO_CAP_MP1| - AUDIO_CAP_MP2; - break; - - case AUDIO_CLEAR_BUFFER: - ring_buffer_flush(&av7110->aout); - dvb_filter_ipack_reset(&av7110->ipack[0]); - if (av7110->playing==RP_AV) - outcom(av7110, COMTYPE_REC_PLAY, - __Play, 2, AV_PES, 0); - break; - case AUDIO_SET_ID: - - break; - case AUDIO_SET_MIXER: - { - struct audio_mixer *amix=(struct audio_mixer *)parg; - - SetVolume(av7110, amix->volume_left, amix->volume_right); - break; - } - case AUDIO_SET_STREAMTYPE: - break; - default: - ret=-ENOIOCTLCMD; - break; - } - return ret; -} - -static int -dvb_osd_ioctl(struct inode *inode, struct file *file, - unsigned int cmd, void *parg) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - -#ifdef CONFIG_DVB_AV7110_OSD - if (cmd==OSD_SEND_CMD) - return OSD_DrawCommand(av7110, (osd_cmd_t *)parg); -#endif - return -EINVAL; -} - -static int dvb_video_open(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - int err; - - if ((err=dvb_generic_open(inode, file))<0) - return err; - ring_buffer_flush(&av7110->aout); - ring_buffer_flush(&av7110->avout); - av7110->video_blank=1; - av7110->audiostate.AV_sync_state=1; - av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX; - return 0; -} - -static int dvb_video_release(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - AV_Stop(av7110, RP_VIDEO); - return dvb_generic_release(inode, file); -} - -static int dvb_audio_open(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - int err=dvb_generic_open(inode, file); - - if (err<0) - return err; - ring_buffer_flush(&av7110->aout); - av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX; - return 0; -} - -static int dvb_audio_release(struct inode *inode, struct file *file) -{ - struct dvb_device *dvbdev=(struct dvb_device *) file->private_data; - av7110_t *av7110=(av7110_t *) dvbdev->priv; - - AV_Stop(av7110, RP_AUDIO); - return dvb_generic_release(inode, file); -} - - - -/****************************************************************************** - * driver registration - ******************************************************************************/ - -static struct file_operations dvb_video_fops = { - .owner = THIS_MODULE, - .write = dvb_video_write, - .ioctl = dvb_generic_ioctl, - .open = dvb_video_open, - .release = dvb_video_release, - .poll = dvb_video_poll, -}; - -static struct dvb_device dvbdev_video = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_video_fops, - .kernel_ioctl = dvb_video_ioctl, -}; - -static struct file_operations dvb_audio_fops = { - .owner = THIS_MODULE, - .write = dvb_audio_write, - .ioctl = dvb_generic_ioctl, - .open = dvb_audio_open, - .release = dvb_audio_release, - .poll = dvb_audio_poll, -}; - -static struct dvb_device dvbdev_audio = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_audio_fops, - .kernel_ioctl = dvb_audio_ioctl, -}; - -static struct file_operations dvb_ca_fops = { - .owner = THIS_MODULE, - .read = dvb_ca_read, - .write = dvb_ca_write, - .ioctl = dvb_generic_ioctl, - .open = dvb_ca_open, - .release = dvb_generic_release, - .poll = dvb_ca_poll, -}; - -static struct dvb_device dvbdev_ca = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_ca_fops, - .kernel_ioctl = dvb_ca_ioctl, -}; - -static struct file_operations dvb_osd_fops = { - .owner = THIS_MODULE, - .ioctl = dvb_generic_ioctl, - .open = dvb_generic_open, - .release = dvb_generic_release, -}; - -static struct dvb_device dvbdev_osd = { - .priv = 0, - .users = 1, - .writers = 1, - .fops = &dvb_osd_fops, - .kernel_ioctl = dvb_osd_ioctl, -}; - - -static -void av7110_before_after_tune (fe_status_t s, void *data) -{ - struct av7110_s *av7110 = data; - - av7110->fe_synced = (s & FE_HAS_LOCK) ? 1 : 0; - - if (av7110->playing) - return; - - if (down_interruptible(&av7110->pid_mutex)) - return; - - if (av7110->fe_synced) { - SetPIDs(av7110, av7110->pids[DMX_PES_VIDEO], - av7110->pids[DMX_PES_AUDIO], - av7110->pids[DMX_PES_TELETEXT], 0, - av7110->pids[DMX_PES_PCR]); - outcom(av7110, COMTYPE_PIDFILTER, Scan, 0); - } else - SetPIDs(av7110, 0, 0, 0, 0, 0); - - up(&av7110->pid_mutex); -} - - -static int -dvb_register(av7110_t *av7110) -{ - int ret, i; - dmx_frontend_t *dvbfront=&av7110->hw_frontend; - struct dvb_demux *dvbdemux=&av7110->demux; - - if (av7110->registered) - return -1; - - av7110->registered=1; - - av7110->dvb_adapter = av7110->saa->dvb_adapter; - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - dvb_add_frontend_notifier (av7110->dvb_adapter, - av7110_before_after_tune, av7110); - /** - * init DiSEqC stuff - */ - if (av7110->saa->card_type==DVB_CARD_TT_BUDGET || - av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - dvb_add_frontend_ioctls (av7110->dvb_adapter, - av7110_diseqc_ioctl, NULL, av7110); - - av7110->audiostate.AV_sync_state=0; - av7110->audiostate.mute_state=0; - av7110->audiostate.play_state=AUDIO_STOPPED; - av7110->audiostate.stream_source=AUDIO_SOURCE_DEMUX; - av7110->audiostate.channel_select=AUDIO_STEREO; - av7110->audiostate.bypass_mode=0; - - av7110->videostate.video_blank=0; - av7110->videostate.play_state=VIDEO_STOPPED; - av7110->videostate.stream_source=VIDEO_SOURCE_DEMUX; - av7110->videostate.video_format=VIDEO_FORMAT_4_3; - av7110->videostate.display_format=VIDEO_CENTER_CUT_OUT; - av7110->display_ar=VIDEO_FORMAT_4_3; - - memcpy(av7110->demux_id, "demux0_0", 9); - av7110->demux_id[7]=av7110->saa->dvb_adapter->num+0x30; - dvbdemux->priv=(void *) av7110; - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - for (i = 0; i < MAXFILT; i++) - av7110->handle2filter[i]=NULL; - - dvbdemux->filternum=32; - dvbdemux->feednum=32; - dvbdemux->start_feed=dvb_start_feed; - dvbdemux->stop_feed=dvb_stop_feed; - dvbdemux->write_to_decoder=dvb_write_to_decoder; - - dvbdemux->dmx.vendor="TI"; - dvbdemux->dmx.model="AV7110"; - dvbdemux->dmx.id=av7110->demux_id; - dvbdemux->dmx.capabilities=(DMX_TS_FILTERING| - DMX_SECTION_FILTERING| - DMX_MEMORY_BASED_FILTERING); - - dvb_dmx_init(&av7110->demux); - - - dvbfront->id="hw_frontend"; - dvbfront->vendor="VLSI"; - dvbfront->model="DVB Frontend"; - dvbfront->source=DMX_FRONTEND_0; - - av7110->dmxdev.filternum=32; - av7110->dmxdev.demux=&dvbdemux->dmx; - av7110->dmxdev.capabilities=0; - - dvb_dmxdev_init(&av7110->dmxdev, av7110->dvb_adapter); - } - - if (av7110->saa->card_type>=DVB_CARD_TT_BUDGET) { - dvbdemux->filternum=256; - dvbdemux->feednum=256; - dvbdemux->start_feed=dvb_start_feed; - dvbdemux->stop_feed=dvb_stop_feed; - dvbdemux->write_to_decoder=0; - - dvbdemux->dmx.vendor="CIM"; - dvbdemux->dmx.model="sw"; - dvbdemux->dmx.id=av7110->demux_id; - dvbdemux->dmx.capabilities=(DMX_TS_FILTERING| - DMX_SECTION_FILTERING| - DMX_MEMORY_BASED_FILTERING); - - dvb_dmx_init(&av7110->demux); - - dvbfront->id="hw_frontend"; - dvbfront->vendor="VLSI"; - dvbfront->model="DVB Frontend"; - dvbfront->source=DMX_FRONTEND_0; - - av7110->dmxdev.filternum=256; - av7110->dmxdev.demux=&dvbdemux->dmx; - av7110->dmxdev.capabilities=0; - - dvb_dmxdev_init(&av7110->dmxdev, av7110->dvb_adapter); - } - - ret=dvbdemux->dmx.add_frontend(&dvbdemux->dmx, - &av7110->hw_frontend); - if (ret<0) - return ret; - - av7110->mem_frontend.id="mem_frontend"; - av7110->mem_frontend.vendor="memory"; - av7110->mem_frontend.model="sw"; - av7110->mem_frontend.source=DMX_MEMORY_FE; - ret=dvbdemux->dmx.add_frontend(&dvbdemux->dmx, - &av7110->mem_frontend); - if (ret<0) - return ret; - - ret=dvbdemux->dmx.connect_frontend(&dvbdemux->dmx, - &av7110->hw_frontend); - if (ret<0) - return ret; - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - dvb_register_device(av7110->dvb_adapter, &av7110->video_dev, - &dvbdev_video, av7110, DVB_DEVICE_VIDEO); - dvb_register_device(av7110->dvb_adapter, &av7110->audio_dev, - &dvbdev_audio, av7110, DVB_DEVICE_AUDIO); - dvb_register_device(av7110->dvb_adapter, &av7110->osd_dev, - &dvbdev_osd, av7110, DVB_DEVICE_OSD); - dvb_register_device(av7110->dvb_adapter, &av7110->ca_dev, - &dvbdev_ca, av7110, DVB_DEVICE_CA); - vid_register(av7110); -#ifdef USE_DVB_DSP - dvb->dsp_dev = dvb_register_dsp(dvb_audio_open, - dvb_audio_release, - dvb_audio_ioctl, - dvb_audio_write, - av7110->audio_dev); -#endif - } - - av7110->dvb_net.card_num=av7110->saa->dvb_adapter->num; - dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx); - - return 0; -} - - -static void -dvb_unregister(av7110_t *av7110) -{ - struct dvb_demux *dvbdemux=&av7110->demux; - - if (!av7110->registered) - return; - - dvb_net_release(&av7110->dvb_net); - - dvbdemux->dmx.close(&dvbdemux->dmx); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->hw_frontend); - dvbdemux->dmx.remove_frontend(&dvbdemux->dmx, &av7110->mem_frontend); - - dvb_dmxdev_release(&av7110->dmxdev); - dvb_dmx_release(&av7110->demux); - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) - dvb_remove_frontend_notifier (av7110->dvb_adapter, - av7110_before_after_tune); - - dvb_remove_frontend_ioctls (av7110->dvb_adapter, - av7110_diseqc_ioctl, NULL); - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - vid_unregister(av7110); - dvb_unregister_device(av7110->audio_dev); - dvb_unregister_device(av7110->video_dev); - dvb_unregister_device(av7110->osd_dev); - dvb_unregister_device(av7110->ca_dev); -#ifdef USE_DVB_DSP - dvb_unregister_dsp(av7110->dsp_dev); -#endif - } -} - -/**************************************************************************** - * INITIALIZATION - ****************************************************************************/ - -static -int av7110_attach (struct saa7146 *saa, void **av7110_ptr) -{ - struct av7110_s *av7110; - - if (!(av7110 = kmalloc (sizeof (struct av7110_s), GFP_KERNEL))) { - printk ("%s: out of memory!\n", __FUNCTION__); - return -ENOMEM; - } - - *av7110_ptr = av7110; - - memset(av7110, 0, sizeof(av7110_t)); - - tasklet_init (&av7110->debi_tasklet, debiirq, (unsigned long) av7110); - tasklet_init (&av7110->gpio_tasklet, gpioirq, (unsigned long) av7110); - tasklet_init (&av7110->vpe_tasklet, vpeirq, (unsigned long) av7110); - tasklet_init (&av7110->fidb_tasklet, fidbirq, (unsigned long) av7110); - - sema_init(&av7110->pid_mutex, 1); - - /* locks for data transfers from/to AV7110 */ - spin_lock_init (&av7110->debilock); - sema_init(&av7110->dcomlock, 1); - av7110->debilock=SPIN_LOCK_UNLOCKED; - av7110->debitype=-1; - - av7110->saa=(struct saa7146 *) saa; - av7110->saa_mem=av7110->saa->mem; - - /* default ADAC type */ - av7110->adac_type = adac; - - /* default OSD window */ - av7110->osdwin=1; - - /* ARM "watchdog" */ - init_waitqueue_head(&av7110->arm_wait); - av7110->arm_thread=0; - - av7110->vidmode=VIDEO_MODE_PAL; - - dvb_filter_ipack_init(&av7110->ipack[0], IPACKS, play_audio_cb); - av7110->ipack[0].data=(void *) av7110; - dvb_filter_ipack_init(&av7110->ipack[1], IPACKS, play_video_cb); - av7110->ipack[1].data=(void *) av7110; - - - /* allocate and init buffers */ - - av7110->debi_virt=pci_alloc_consistent(av7110->saa->device, 8192, - &av7110->debi_bus); - if (!av7110->debi_virt) - return -1; - - av7110->iobuf=vmalloc(AVOUTLEN+AOUTLEN+BMPLEN+4*IPACKS); - if (!av7110->iobuf) - return -1; - - ring_buffer_init(&av7110->avout, av7110->iobuf, AVOUTLEN); - ring_buffer_init(&av7110->aout, av7110->iobuf+AVOUTLEN, AOUTLEN); - - /* init BMP buffer */ - av7110->bmpbuf=av7110->iobuf+AVOUTLEN+AOUTLEN; - init_waitqueue_head(&av7110->bmpq); - - av7110->kbuf[0]=(u8 *)(av7110->iobuf+AVOUTLEN+AOUTLEN+BMPLEN); - av7110->kbuf[1]=av7110->kbuf[0]+2*IPACKS; - - /* CI link layer buffers */ - ci_ll_init(&av7110->ci_rbuffer, &av7110->ci_wbuffer, 8192); - - /* handle different card types */ - - /* load firmware into AV7110 cards */ - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - bootarm(av7110); - firmversion(av7110); - if ((av7110->arm_app&0xffff)<0x2502) { - printk("av7110: Warning, firmware version is too old. System might be unstable!!!\n"); - } - kernel_thread(arm_thread, (void *) av7110, 0); - } else { - saa7146_write(av7110->saa_mem, DD1_INIT, 0x02000600); - saa7146_write(av7110->saa_mem, MC2, - (MASK_09 | MASK_25 | MASK_10 | MASK_26)); - setgpio(av7110, 2, GPIO_OUTHI); /* frontend power on */ - } - - SetVolume(av7110, 0xff, 0xff); - - if (av7110->saa->card_type==DVB_CARD_TT_SIEMENS) { - VidMode(av7110, vidmode); - - /* remaining inits according to card and frontend type */ - - if (i2c_writereg(av7110, 0x20, 0x00, 0x00)==1) { - dprintk("av7110%d: Crystal audio DAC detected\n", - av7110->saa->dvb_adapter->num); - av7110->adac_type = DVB_ADAC_CRYSTAL; - i2c_writereg(av7110, 0x20, 0x01, 0xd2); - i2c_writereg(av7110, 0x20, 0x02, 0x49); - i2c_writereg(av7110, 0x20, 0x03, 0x00); - i2c_writereg(av7110, 0x20, 0x04, 0x00); - } - - /** - * some special handling for the Siemens DVB-C card... - */ - if (av7110->saa->device->subsystem_vendor == 0x110a) { - if (i2c_writereg(av7110, 0x80, 0x0, 0x80)==1) { - i2c_writereg(av7110, 0x80, 0x0, 0); - printk("av7110: DVB-C analog module detected, " - "initializing MSP3400\n"); - ddelay(10); - msp_writereg(av7110, 0x12, 0x0013, 0x0c00); - msp_writereg(av7110, 0x12, 0x0000, 0x7f00); // loudspeaker + headphone - msp_writereg(av7110, 0x12, 0x0008, 0x0220); // loudspeaker source - msp_writereg(av7110, 0x12, 0x0004, 0x7f00); // loudspeaker volume - msp_writereg(av7110, 0x12, 0x000a, 0x0220); // SCART 1 source - msp_writereg(av7110, 0x12, 0x0007, 0x7f00); // SCART 1 volume - msp_writereg(av7110, 0x12, 0x000d, 0x4800); // prescale SCART - } - - // switch DVB SCART on - outcom(av7110, COMTYPE_AUDIODAC, MainSwitch, 1, 0); - outcom(av7110, COMTYPE_AUDIODAC, ADSwitch, 1, 1); - - //setgpio(av7110, 1, GPIO_OUTHI); // RGB on, SCART pin 16 - //setgpio(av7110, 3, GPIO_OUTLO); // SCARTpin 8 - av7110->adac_type = DVB_ADAC_NONE; - } - } - - if (init_vpid != 0 || init_apid != 0) - ChangePIDs(av7110, init_vpid, init_apid, 0, 0, 0); - - av7110_setup_irc_config (av7110, 0); - dvb_register(av7110); - - return 0; -} - - -static -int av7110_detach (struct saa7146 *saa, void** av7110_ptr) -{ - struct av7110_s *av7110 = *av7110_ptr; - - av7110->arm_rmmod=1; - wake_up_interruptible(&av7110->arm_wait); - - while (av7110->arm_thread) - ddelay(1); - - dvb_unregister(av7110); - - saa7146_write (av7110->saa_mem, IER, - saa7146_read(av7110->saa_mem, IER) & ~(MASK_19 | MASK_03)); - - saa7146_write(av7110->saa_mem, ISR,(MASK_19 | MASK_03)); - - ci_ll_release(&av7110->ci_rbuffer, &av7110->ci_wbuffer); - dvb_filter_ipack_free(&av7110->ipack[0]); - dvb_filter_ipack_free(&av7110->ipack[1]); - vfree(av7110->iobuf); - pci_free_consistent(av7110->saa->device, 8192, av7110->debi_virt, - av7110->debi_bus); - - kfree (av7110); - *av7110_ptr = NULL; - - return 0; -} - - -static -void av7110_irq(struct saa7146 *saa, u32 isr, void *data) -{ - struct av7110_s *av7110 = (struct av7110_s*) data; - - if (isr & MASK_19) - tasklet_schedule (&av7110->debi_tasklet); - - if (isr & MASK_03) - tasklet_schedule (&av7110->gpio_tasklet); - - if (isr & MASK_10) - tasklet_schedule (&av7110->vpe_tasklet); - - if (isr & MASK_07) - tasklet_schedule (&av7110->fidb_tasklet); -} - - -static -int av7110_command(struct saa7146 *saa, void *p, unsigned int cmd, void *arg) -{ - switch(cmd) { - case SAA7146_SUSPEND: - printk("dvb_suspend()\n"); - break; - case SAA7146_RESUME: - printk("dvb_resume()\n"); - break; - default: - return -ENOIOCTLCMD; - } - return 0; -} - - -static -void av7110_inc_use(struct saa7146* adap) -{ - MOD_INC_USE_COUNT; -} - - -static -void av7110_dec_use(struct saa7146* adap) -{ - MOD_DEC_USE_COUNT; -} - - -static struct saa7146_extension av7110_extension = { - "dvb extension\0", - MASK_07|MASK_10|MASK_19|MASK_03|MASK_27, - av7110_irq, - av7110_command, - av7110_attach, - av7110_detach, - av7110_inc_use, - av7110_dec_use -}; - - -int __init av7110_init(void) -{ - int result = 0; - - if ((result = saa7146_add_extension(&av7110_extension))) { - printk("%s: saa7146_add_extension() failed!\n", - __FUNCTION__); - return result; - } - - return result; -} - - -void __exit av7110_exit(void) -{ - if (saa7146_del_extension(&av7110_extension)) - printk(KERN_ERR "dvb: extension deregistration failed.\n"); -} - -//MODULE_DESCRIPTION("driver for the SAA7146 based AV110 PCI DVB cards by " -// "Siemens, Technotrend, Hauppauge"); -//MODULE_AUTHOR("Ralph Metzler, Marcus Metzler, others"); -//MODULE_LICENSE("GPL"); - -MODULE_PARM(av7110_debug,"i"); -MODULE_PARM(vidmem,"l"); -MODULE_PARM(vidlow,"l"); -MODULE_PARM(vidmode,"i"); -MODULE_PARM(init_vpid,"i"); -MODULE_PARM(init_apid,"i"); -MODULE_PARM(pids_off,"i"); -MODULE_PARM(adac,"i"); - -/* - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * indent-tabs-mode: nil - * tab-width: 8 - * End: - */ - diff -Nru a/drivers/media/dvb/av7110/av7110.h b/drivers/media/dvb/av7110/av7110.h --- a/drivers/media/dvb/av7110/av7110.h Sat Apr 12 14:44:09 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,743 +0,0 @@ -#ifndef _AV7110_H_ -#define _AV7110_H_ - -#define DVB_FIRM_PATH "/lib/DVB/" - -#include -#include -#include -#include - -#ifdef CONFIG_DEVFS_FS -#include -#endif - -/* DEBI transfer mode defs */ - -#define DEBINOSWAP 0x000e0000 -#define DEBISWAB 0x001e0000 -#define DEBISWAP 0x002e0000 - -#define ARM_WAIT_FREE (HZ) -#define ARM_WAIT_SHAKE (HZ/5) -#define ARM_WAIT_OSD (HZ) - -#if LINUX_VERSION_CODE < 0x020300 -#define net_device device -#define DECLARE_MUTEX(foo) struct semaphore foo = MUTEX -#define DECLARE_MUTEX_LOCKED(foo) struct semaphore foo = MUTEX_LOCKED -#define WAIT_QUEUE struct wait_queue* -#define init_waitqueue_head(wq) *(wq) = NULL; -#define DECLARE_WAITQUEUE(wait, current) struct wait_queue wait = { current, NULL } -#define set_current_state(state_value) \ - do { current->state = state_value; } while (0) -#define list_for_each(pos, head) \ - for (pos = (head)->next; pos != (head); pos = pos->next) - -#else - -#define WAIT_QUEUE wait_queue_head_t - -#endif - -#include -#include -#include -#include -#include -#include - -#include "../dvb-core/dvbdev.h" -#include "../dvb-core/demux.h" -#include "../dvb-core/dvb_demux.h" -#include "../dvb-core/dmxdev.h" -#include "../dvb-core/dvb_filter.h" -#include "../dvb-core/dvb_net.h" - - -typedef enum BOOTSTATES -{ - BOOTSTATE_BUFFER_EMPTY = 0, - BOOTSTATE_BUFFER_FULL = 1, - BOOTSTATE_BOOT_COMPLETE = 2 -} BOOTSTATES; - -typedef enum GPIO_MODE -{ - GPIO_INPUT = 0x00, - GPIO_IRQHI = 0x10, - GPIO_IRQLO = 0x20, - GPIO_IRQHL = 0x30, - GPIO_OUTLO = 0x40, - GPIO_OUTHI = 0x50 -} GPIO_MODE; - -typedef enum -{ RP_None, - AudioPES, - AudioMp2, - AudioPCM, - VideoPES, - AV_PES -} TYPE_REC_PLAY_FORMAT; - -typedef struct PARAMSTRUCT -{ - unsigned int wCommand; - int error; - unsigned long pdwData[100]; -} PARAMSTRUCT, *PPARAMSTRUCT; - -typedef enum OSDPALTYPE -{ - NoPalet = 0, /* No palette */ - Pal1Bit = 2, /* 2 colors for 1 Bit Palette */ - Pal2Bit = 4, /* 4 colors for 2 bit palette */ - Pal4Bit = 16, /* 16 colors for 4 bit palette */ - Pal8Bit = 256 /* 256 colors for 16 bit palette */ -} OSDPALTYPE, *POSDPALTYPE; - -typedef enum { - BITMAP1, /* 1 bit bitmap */ - BITMAP2, /* 2 bit bitmap */ - BITMAP4, /* 4 bit bitmap */ - BITMAP8, /* 8 bit bitmap */ - BITMAP1HR, /* 1 Bit bitmap half resolution */ - BITMAP2HR, /* 2 bit bitmap half resolution */ - BITMAP4HR, /* 4 bit bitmap half resolution */ - BITMAP8HR, /* 8 bit bitmap half resolution */ - YCRCB422, /* 4:2:2 YCRCB Graphic Display */ - YCRCB444, /* 4:4:4 YCRCB Graphic Display */ - YCRCB444HR, /* 4:4:4 YCRCB graphic half resolution */ - VIDEOTSIZE, /* True Size Normal MPEG Video Display */ - VIDEOHSIZE, /* MPEG Video Display Half Resolution */ - VIDEOQSIZE, /* MPEG Video Display Quarter Resolution */ - VIDEODSIZE, /* MPEG Video Display Double Resolution */ - VIDEOTHSIZE, /* True Size MPEG Video Display Half Resolution */ - VIDEOTQSIZE, /* True Size MPEG Video Display Quarter Resolution*/ - VIDEOTDSIZE, /* True Size MPEG Video Display Double Resolution */ - VIDEONSIZE, /* Full Size MPEG Video Display */ - CURSOR /* Cursor */ -} DISPTYPE; /* Window display type */ - -// switch defines -#define SB_GPIO 3 -#define SB_OFF GPIO_OUTLO //SlowBlank aus (TV-Mode) -#define SB_ON GPIO_INPUT //SlowBlank an (AV-Mode) -#define SB_WIDE GPIO_OUTHI //SlowBlank 6V (16/9-Mode) nicht realisiert - -#define FB_GPIO 1 -#define FB_OFF GPIO_LO //FastBlank aus (CVBS-Mode) -#define FB_ON GPIO_OUTHI //FastBlank an (RGB-Mode) -#define FB_LOOP GPIO_INPUT //FastBlank der PC-Grafik durchschleifen - -typedef enum VIDEOOUTPUTMODE -{ - NO_OUT = 0, //disable analog Output - CVBS_RGB_OUT = 1, - CVBS_YC_OUT = 2, - YC_OUT = 3 -} VIDEOOUTPUTMODE, *PVIDEOOUTPUTMODE; - - -#define GPMQFull 0x0001 //Main Message Queue Full -#define GPMQOver 0x0002 //Main Message Queue Overflow -#define HPQFull 0x0004 //High Priority Msg Queue Full -#define HPQOver 0x0008 -#define OSDQFull 0x0010 //OSD Queue Full -#define OSDQOver 0x0020 - -#define SECTION_EIT 0x01 -#define SECTION_SINGLE 0x00 -#define SECTION_CYCLE 0x02 -#define SECTION_CONTINUOS 0x04 -#define SECTION_MODE 0x06 -#define SECTION_IPMPE 0x0C // bis zu 4k groß -#define SECTION_HIGH_SPEED 0x1C // vergrößerter Puffer für High Speed Filter -#define DATA_PIPING_FLAG 0x20 // für Data Piping Filter - -#define PBUFSIZE_NONE 0x0000 -#define PBUFSIZE_1P 0x0100 -#define PBUFSIZE_2P 0x0200 -#define PBUFSIZE_1K 0x0300 -#define PBUFSIZE_2K 0x0400 -#define PBUFSIZE_4K 0x0500 -#define PBUFSIZE_8K 0x0600 -#define PBUFSIZE_16K 0x0700 -#define PBUFSIZE_32K 0x0800 - -typedef enum { - WCreate, - WDestroy, - WMoveD, - WMoveA, - WHide, - WTop, - DBox, - DLine, - DText, - Set_Font, - SetColor, - SetBlend, - SetWBlend, - SetCBlend, - SetNonBlend, - LoadBmp, - BlitBmp, - ReleaseBmp, - SetWTrans, - SetWNoTrans -} OSDCOM; - -typedef enum { - MultiPID, - VideoPID, - AudioPID, - InitFilt, - FiltError, - NewVersion, - CacheError, - AddPIDFilter, - DelPIDFilter, - Scan, - SetDescr, - SetIR -} PIDCOM; - -typedef enum { - SelAudChannels -} MPEGCOM; - -typedef enum { - AudioDAC, - CabADAC, - ON22K, - OFF22K, - MainSwitch, - ADSwitch, - SendDiSEqC, - SetRegister -} AUDCOM; - -typedef enum { - AudioState, - AudioBuffState, - VideoState1, - VideoState2, - VideoState3, - CrashCounter, - ReqVersion, - ReqVCXO, - ReqRegister -} REQCOM; - -typedef enum { - SetVidMode, - SetTestMode, - LoadVidCode, - SetMonitorType, - SetPanScanType, - SetFreezeMode -} ENC; - -typedef enum { - __Record, - __Stop, - __Play, - __Pause, - __Slow, - __FF_IP, - __Scan_I, - __Continue -} REC_PLAY; - -typedef enum { - COMTYPE_NOCOM, - COMTYPE_PIDFILTER, - COMTYPE_MPEGDECODER, - COMTYPE_OSD, - COMTYPE_BMP, - COMTYPE_ENCODER, - COMTYPE_AUDIODAC, - COMTYPE_REQUEST, - COMTYPE_SYSTEM, - COMTYPE_REC_PLAY, - COMTYPE_COMMON_IF, - COMTYPE_PID_FILTER, - COMTYPE_PES, - COMTYPE_TS, - COMTYPE_VIDEO, - COMTYPE_AUDIO, - COMTYPE_CI_LL, -} COMTYPE; - -typedef enum { - AV7110_VIDEO_FREEZE, - AV7110_VIDEO_CONTINUE -} VIDEOCOM; - -typedef enum { - DVB_AUDIO_PAUSE, -} AUDIOCOM; - - -#define VID_NONE_PREF 0x00 /* No aspect ration processing preferred */ -#define VID_PAN_SCAN_PREF 0x01 /* Pan and Scan Display preferred */ -#define VID_VERT_COMP_PREF 0x02 /* Vertical compression display preferred */ -#define VID_VC_AND_PS_PREF 0x03 /* PanScan and vertical Compression if allowed */ -#define VID_CENTRE_CUT_PREF 0x05 /* PanScan with zero vector */ - -#define DATA_NONE 0x00 -#define DATA_FSECTION 0x01 -#define DATA_IPMPE 0x02 -#define DATA_MPEG_RECORD 0x03 -#define DATA_DEBUG_MESSAGE 0x04 -#define DATA_COMMON_INTERFACE 0x05 -#define DATA_MPEG_PLAY 0x06 -#define DATA_BMP_LOAD 0x07 -#define DATA_IRCOMMAND 0x08 -#define DATA_PIPING 0x09 -#define DATA_STREAMING 0x0a -#define DATA_CI_GET 0x0b -#define DATA_CI_PUT 0x0c - -#define DATA_PES_RECORD 0x10 -#define DATA_PES_PLAY 0x11 -#define DATA_TS_RECORD 0x12 -#define DATA_TS_PLAY 0x13 - -#define CI_CMD_ERROR 0x00 -#define CI_CMD_ACK 0x01 -#define CI_CMD_SYSTEM_READY 0x02 -#define CI_CMD_KEYPRESS 0x03 -#define CI_CMD_ON_TUNED 0x04 -#define CI_CMD_ON_SWITCH_PROGRAM 0x05 -#define CI_CMD_SECTION_ARRIVED 0x06 -#define CI_CMD_SECTION_TIMEOUT 0x07 -#define CI_CMD_TIME 0x08 -#define CI_CMD_ENTER_MENU 0x09 -#define CI_CMD_FAST_PSI 0x0a -#define CI_CMD_GET_SLOT_INFO 0x0b - -#define CI_MSG_NONE 0x00 -#define CI_MSG_CI_INFO 0x01 -#define CI_MSG_MENU 0x02 -#define CI_MSG_LIST 0x03 -#define CI_MSG_TEXT 0x04 -#define CI_MSG_REQUEST_INPUT 0x05 -#define CI_MSG_INPUT_COMPLETE 0x06 -#define CI_MSG_LIST_MORE 0x07 -#define CI_MSG_MENU_MORE 0x08 -#define CI_MSG_CLOSE_MMI_IMM 0x09 -#define CI_MSG_SECTION_REQUEST 0x0a -#define CI_MSG_CLOSE_FILTER 0x0b -#define CI_PSI_COMPLETE 0x0c -#define CI_MODULE_READY 0x0d -#define CI_SWITCH_PRG_REPLY 0x0e -#define CI_MSG_TEXT_MORE 0x0f - -#define CI_MSG_CA_PMT 0xe0 -#define CI_MSG_ERROR 0xf0 - -typedef struct ring_buffer_s { - u8 *data; - int size; - int pread; - int pwrite; - - WAIT_QUEUE queue; - spinlock_t lock; - struct semaphore sema; - - int error; -} ring_buffer_t; - - -#define PROG_STREAM_MAP 0xBC -#define PRIVATE_STREAM1 0xBD -#define PADDING_STREAM 0xBE -#define PRIVATE_STREAM2 0xBF -#define AUDIO_STREAM_S 0xC0 -#define AUDIO_STREAM_E 0xDF -#define VIDEO_STREAM_S 0xE0 -#define VIDEO_STREAM_E 0xEF -#define ECM_STREAM 0xF0 -#define EMM_STREAM 0xF1 -#define DSM_CC_STREAM 0xF2 -#define ISO13522_STREAM 0xF3 -#define PROG_STREAM_DIR 0xFF - -#define PTS_DTS_FLAGS 0xC0 - -//pts_dts flags -#define PTS_ONLY 0x80 -#define PTS_DTS 0xC0 -#define TS_SIZE 188 -#define TRANS_ERROR 0x80 -#define PAY_START 0x40 -#define TRANS_PRIO 0x20 -#define PID_MASK_HI 0x1F -//flags -#define TRANS_SCRMBL1 0x80 -#define TRANS_SCRMBL2 0x40 -#define ADAPT_FIELD 0x20 -#define PAYLOAD 0x10 -#define COUNT_MASK 0x0F - -// adaptation flags -#define DISCON_IND 0x80 -#define RAND_ACC_IND 0x40 -#define ES_PRI_IND 0x20 -#define PCR_FLAG 0x10 -#define OPCR_FLAG 0x08 -#define SPLICE_FLAG 0x04 -#define TRANS_PRIV 0x02 -#define ADAP_EXT_FLAG 0x01 - -// adaptation extension flags -#define LTW_FLAG 0x80 -#define PIECE_RATE 0x40 -#define SEAM_SPLICE 0x20 - -#define MAX_PLENGTH 0xFFFF -#define MAX_VID_PES 0x1FFF - -typedef struct section_s { - int id; - int length; - int found; - u8 payload[4096+3]; -} section_t; - - -#define MY_STATE_PES_START 1 -#define MY_STATE_PES_STARTED 2 -#define MY_STATE_FULL 4 - -#define MASKL DMX_MAX_FILTER_SIZE -#define MAXFILT 32 - -struct dvb_filter { - int state; - int flags; - int type; - u8 ts_state; - - u16 pid; - u8 value[MASKL]; - u8 mask[MASKL]; -}; - - -enum {AV_PES_STREAM, PS_STREAM, TS_STREAM, PES_STREAM}; - -typedef struct ps_packet_s{ - u8 scr[6]; - u8 mux_rate[3]; - u8 stuff_length; - u8 data[20]; - u8 sheader_llength[2]; - int sheader_length; - u8 rate_bound[3]; - u8 audio_bound; - u8 video_bound; - u8 reserved; - int npes; - int mpeg; -} ps_packet_t; - -typedef struct a2p_s{ - int type; - int found; - int length; - int headr; - u8 cid; - u8 flags; - u8 abuf[MAX_PLENGTH]; - int alength; - u8 vbuf[MAX_PLENGTH]; - int vlength; - int plength; - u8 last_av_pts[4]; - u8 av_pts[4]; - u8 scr[4]; - u16 count0; - u16 count1; - u16 pidv; - u16 pida; - u16 countv; - u16 counta; - void *dataA; - void *dataV; - void (*write_cb)(u8 const *buf, long int count, - void *data); -} a2p_t; - - -typedef struct p2t_s { - u8 pes[TS_SIZE]; - u8 counter; - long int pos; - int frags; - struct dvb_demux_feed *feed; -} p2t_t; - - -/* place to store all the necessary device information */ -typedef struct av7110_s { - - /* devices */ - - struct dvb_device dvb_dev; - dvb_net_t dvb_net; - struct video_device video; - - struct saa7146 *saa; - - struct tasklet_struct debi_tasklet; - struct tasklet_struct gpio_tasklet; - struct tasklet_struct vpe_tasklet; - struct tasklet_struct fidb_tasklet; - - int adac_type; /* audio DAC type */ -#define DVB_ADAC_TI 0 -#define DVB_ADAC_CRYSTAL 1 -#define DVB_ADAC_NONE -1 - - - /* buffers */ - - void *iobuf; /* memory for all buffers */ - ring_buffer_t avout; /* buffer for video or A/V mux */ -#define AVOUTLEN (128*1024) - ring_buffer_t aout; /* buffer for audio */ -#define AOUTLEN (64*1024) - void *bmpbuf; -#define BMPLEN (8*32768+1024) - - /* bitmap buffers and states */ - - int bmpp; - int bmplen; - int bmp_win; - u16 bmp_x, bmp_y; - int bmp_trans; - int bmp_state; -#define BMP_NONE 0 -#define BMP_LOADING 1 -#define BMP_LOADINGS 2 -#define BMP_LOADED 3 - WAIT_QUEUE bmpq; - - - /* DEBI and polled command interface */ - - spinlock_t debilock; - struct semaphore dcomlock; - int debitype; - int debilen; - int debibuf; - - - /* Recording and playback flags */ - - int rec_mode; - int playing; -#define RP_NONE 0 -#define RP_VIDEO 1 -#define RP_AUDIO 2 -#define RP_AV 3 - - - /* OSD */ - - int osdwin; /* currently active window */ - u16 osdbpp[8]; - - - /* CA */ - - ca_slot_info_t ci_slot[2]; - - int vidmode; - dmxdev_t dmxdev; - struct dvb_demux demux; - char demux_id[16]; - - dmx_frontend_t hw_frontend; - dmx_frontend_t mem_frontend; - - int fe_synced; - struct semaphore pid_mutex; - - int video_blank; - struct video_status videostate; - int display_ar; - int trickmode; -#define TRICK_NONE 0 -#define TRICK_FAST 1 -#define TRICK_SLOW 2 -#define TRICK_FREEZE 3 - struct audio_status audiostate; - - struct dvb_demux_filter *handle2filter[MAXFILT]; - p2t_t p2t_filter[MAXFILT]; - dvb_filter_pes2ts_t p2t[2]; - struct ipack_s ipack[2]; - u8 *kbuf[2]; - - int sinfo; - int shsize; - int swsize; - - int tsf; - u32 ttbp; - int feeding; - - int arm_errors; - int registered; - - - /* AV711X */ - - u32 arm_fw; - u32 arm_rtsl; - u32 arm_vid; - u32 arm_app; - u32 avtype; - int arm_ready; - struct task_struct *arm_thread; - WAIT_QUEUE arm_wait; - u16 arm_loops; - int arm_rmmod; - - void *saa_mem; - void *debi_virt; - dma_addr_t debi_bus; - - u16 pids[DMX_PES_OTHER]; - - ring_buffer_t ci_rbuffer; - ring_buffer_t ci_wbuffer; - - - struct dvb_adapter *dvb_adapter; - struct dvb_device *video_dev; - struct dvb_device *audio_dev; - struct dvb_device *ca_dev; - struct dvb_device *osd_dev; - - int dsp_dev; -} av7110_t; - - -#define DPRAM_BASE 0x4000 - -#define BOOT_STATE (DPRAM_BASE + 0x3F8) -#define BOOT_SIZE (DPRAM_BASE + 0x3FA) -#define BOOT_BASE (DPRAM_BASE + 0x3FC) -#define BOOT_BLOCK (DPRAM_BASE + 0x400) -#define BOOT_MAX_SIZE 0xc00 - -#define IRQ_STATE (DPRAM_BASE + 0x0F4) -#define IRQ_STATE_EXT (DPRAM_BASE + 0x0F6) -#define MSGSTATE (DPRAM_BASE + 0x0F8) -#define FILT_STATE (DPRAM_BASE + 0x0FA) -#define COMMAND (DPRAM_BASE + 0x0FC) -#define COM_BUFF (DPRAM_BASE + 0x100) -#define COM_BUFF_SIZE 0x20 - -#define BUFF1_BASE (DPRAM_BASE + 0x120) -#define BUFF1_SIZE 0xE0 - -#define DATA_BUFF_BASE (DPRAM_BASE + 0x200) -#define DATA_BUFF_SIZE 0x1C00 - -/* new buffers */ - -#define DATA_BUFF0_BASE (DPRAM_BASE + 0x200) -#define DATA_BUFF0_SIZE 0x0800 - -#define DATA_BUFF1_BASE (DATA_BUFF0_BASE+DATA_BUFF0_SIZE) -#define DATA_BUFF1_SIZE 0x0800 - -#define DATA_BUFF2_BASE (DATA_BUFF1_BASE+DATA_BUFF1_SIZE) -#define DATA_BUFF2_SIZE 0x0800 - -#define Reserved (DPRAM_BASE + 0x1E00) -#define Reserved_SIZE 0x1C0 - -#define DEBUG_WINDOW (DPRAM_BASE + 0x1FC0) -#define DBG_LOOP_CNT (DEBUG_WINDOW + 0x00) -#define DBG_SEC_CNT (DEBUG_WINDOW + 0x02) -#define DBG_AVRP_BUFF (DEBUG_WINDOW + 0x04) -#define DBG_AVRP_PEAK (DEBUG_WINDOW + 0x06) -#define DBG_MSG_CNT (DEBUG_WINDOW + 0x08) -#define DBG_CODE_REG (DEBUG_WINDOW + 0x0a) -#define DBG_TTX_Q (DEBUG_WINDOW + 0x0c) -#define DBG_AUD_EN (DEBUG_WINDOW + 0x0e) -#define DBG_WRONG_COM (DEBUG_WINDOW + 0x10) -#define DBG_ARR_OVFL (DEBUG_WINDOW + 0x12) -#define DBG_BUFF_OVFL (DEBUG_WINDOW + 0x14) -#define DBG_OVFL_CNT (DEBUG_WINDOW + 0x16) -#define DBG_SEC_OVFL (DEBUG_WINDOW + 0x18) - -#define STATUS_BASE (DPRAM_BASE + 0x1FC0) -#define STATUS_SCR (STATUS_BASE + 0x00) -#define STATUS_MODES (STATUS_BASE + 0x04) -#define STATUS_LOOPS (STATUS_BASE + 0x08) - -#define RX_TYPE (DPRAM_BASE + 0x1FE8) -#define RX_LEN (DPRAM_BASE + 0x1FEA) -#define TX_TYPE (DPRAM_BASE + 0x1FEC) -#define TX_LEN (DPRAM_BASE + 0x1FEE) - -#define RX_BUFF (DPRAM_BASE + 0x1FF4) -#define TX_BUFF (DPRAM_BASE + 0x1FF6) - -#define HANDSHAKE_REG (DPRAM_BASE + 0x1FF8) -#define COM_IF_LOCK (DPRAM_BASE + 0x1FFA) - -#define IRQ_RX (DPRAM_BASE + 0x1FFC) -#define IRQ_TX (DPRAM_BASE + 0x1FFE) - -#define DRAM_START_CODE 0x2e000404 -#define DRAM_MAX_CODE_SIZE 0x00100000 - -#define RESET_LINE 2 -#define DEBI_DONE_LINE 1 -#define ARM_IRQ_LINE 0 - -#define DAC_CS 0x8000 -#define DAC_CDS 0x0000 - - -extern unsigned char *av7110_dpram_addr, *av7110_root_addr; -extern int av7110_dpram_len, av7110_root_len; - -extern void av7110_register_irc_handler(void (*func)(u32)); -extern void av7110_unregister_irc_handler(void (*func)(u32)); -extern void av7110_setup_irc_config (av7110_t *av7110, u32 ir_config); - -extern int av7110_init (void); -extern int av7110_ir_init (void); - -extern void av7110_exit (void); -extern void av7110_ir_exit (void); - - -#endif /* _AV7110_H_ */ - -/* - * Local variables: - * c-indent-level: 8 - * c-brace-imaginary-offset: 0 - * c-brace-offset: -8 - * c-argdecl-indent: 8 - * c-label-offset: -8 - * c-continued-statement-offset: 8 - * c-continued-brace-offset: 0 - * indent-tabs-mode: nil - * tab-width: 8 - * End: - */ diff -Nru a/drivers/media/dvb/av7110/av7110_firm.h b/drivers/media/dvb/av7110/av7110_firm.h --- a/drivers/media/dvb/av7110/av7110_firm.h Sat Apr 12 14:44:07 2003 +++ /dev/null Wed Dec 31 16:00:00 1969 @@ -1,31852 +0,0 @@ - -#include - -u8 Dpram [] __initdata = { - 0xe5, 0x9f, 0xf0, 0x1c, 0xe1, 0xb0, 0xf0, 0x0e, - 0xe5, 0x9f, 0xf0, 0x18, 0xe2, 0x5e, 0xf0, 0x04, - 0xe2, 0x5e, 0xf0, 0x08, 0xe1, 0xa0, 0x00, 0x00, - 0xea, 0x00, 0x00, 0x06, 0xe2, 0x5e, 0xf0, 0x04, - 0x2c, 0x00, 0x00, 0xe8, 0x2e, 0x02, 0xcb, 0x40, - 0x2e, 0x02, 0x39, 0xb4, 0xa5, 0xa5, 0x5a, 0x5a, - 0x00, 0x1f, 0x15, 0x55, 0x00, 0x00, 0x00, 0x09, - 0xe9, 0x2d, 0x5f, 0xff, 0xe1, 0x4f, 0x00, 0x00, - 0xe9, 0x2d, 0x00, 0x01, 0xe2, 0x8f, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x10, 0x21, 0xff, 0x48, 0x25, - 0x68, 0x00, 0x40, 0x52, 0x42, 0x08, 0xd1, 0x0b, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x07, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x03, - 0x0a, 0x00, 0x42, 0x08, 0xd0, 0x29, 0x32, 0x20, - 0x21, 0x0f, 0x42, 0x08, 0xd1, 0x01, 0x32, 0x10, - 0x09, 0x00, 0x21, 0x01, 0x42, 0x08, 0xd1, 0x08, - 0x1d, 0x12, 0x21, 0x02, 0x42, 0x08, 0xd1, 0x04, - 0x1d, 0x12, 0x21, 0x04, 0x42, 0x08, 0xd1, 0x00, - 0x1d, 0x12, 0x48, 0x13, 0x68, 0x00, 0xb4, 0x01, - 0x08, 0x90, 0x21, 0x01, 0x40, 0x81, 0x48, 0x0f, - 0x60, 0x01, 0x48, 0x0d, 0x58, 0x82, 0x48, 0x01, - 0x46, 0x86, 0x47, 0x10, 0x2c, 0x00, 0x00, 0xb1, - 0xbc, 0x02, 0x48, 0x0b, 0x68, 0x02, 0x23, 0x20, - 0x05, 0x1b, 0x40, 0x1a, 0x43, 0x99, 0x43, 0x11, - 0x60, 0x01, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe8, 0xbd, 0x00, 0x01, 0xe1, 0x69, 0xf0, 0x00, - 0xe8, 0xbd, 0x5f, 0xff, 0xe2, 0x5e, 0xf0, 0x04, - 0x2e, 0x08, 0x3b, 0xa4, 0x66, 0x00, 0x00, 0x14, - 0x66, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x1c, - 0x00, 0x00, 0x00, 0x0c, 0x2e, 0x02, 0xcc, 0x48, - 0x2c, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, -}; - - -u8 Root [] __initdata = { - 0xb4, 0x90, 0x49, 0x18, 0x1c, 0x0b, 0x4a, 0x18, - 0x1a, 0x50, 0x4f, 0x18, 0x1a, 0x79, 0x10, 0x8f, - 0x21, 0x00, 0x2f, 0x00, 0xdd, 0x04, 0xcb, 0x10, - 0xc2, 0x10, 0x31, 0x01, 0x42, 0xb9, 0xdb, 0xfa, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x09, 0x4a, 0x13, 0x60, 0x11, - 0x49, 0x13, 0x18, 0x08, 0x49, 0x13, 0x60, 0x08, - 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x02, 0x36, 0x7c, - 0x9e, 0x00, 0x0a, 0x00, 0x2e, 0x02, 0x37, 0x7c, - 0x2e, 0x02, 0x36, 0xcc, 0x2e, 0x02, 0x38, 0x9c, - 0x2e, 0x02, 0x37, 0x04, 0x2e, 0x02, 0x38, 0xa0, - 0x2e, 0x02, 0x37, 0x20, 0x2e, 0x02, 0x38, 0xa4, - 0x2e, 0x02, 0x36, 0xcc, 0x2e, 0x02, 0x38, 0xa8, - 0x2e, 0x02, 0x36, 0xe8, 0x2e, 0x02, 0x38, 0xac, - 0x2e, 0x02, 0x37, 0x20, 0x2e, 0x02, 0x38, 0xb0, - 0x2e, 0x02, 0x37, 0x04, 0x2e, 0x02, 0x38, 0xb4, - 0x2e, 0x02, 0x36, 0x7c, 0x2e, 0x02, 0x38, 0xb8, - 0xb5, 0xf0, 0x1c, 0x0c, 0x1c, 0x15, 0x1c, 0x07, - 0xb0, 0x82, 0x2a, 0x00, 0xd1, 0x03, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x0e, 0x38, - 0x06, 0x00, 0x21, 0x0b, 0x06, 0x89, 0x4b, 0x43, - 0x93, 0x01, 0x42, 0x88, 0xd1, 0x32, 0x08, 0x78, - 0xd3, 0x05, 0x1e, 0x78, 0x88, 0x00, 0x70, 0x20, - 0x34, 0x01, 0x3d, 0x01, 0x37, 0x01, 0x08, 0xb8, - 0xd3, 0x0f, 0x2d, 0x02, 0xdb, 0x0d, 0x08, 0x60, - 0xd3, 0x06, 0x88, 0x39, 0x0a, 0x09, 0x70, 0x21, - 0x88, 0x38, 0x70, 0x60, 0x34, 0x02, 0xe0, 0x02, - 0x88, 0x38, 0x80, 0x20, 0x34, 0x02, 0x3d, 0x02, - 0x37, 0x02, 0x07, 0xae, 0x0f, 0xb6, 0x1b, 0xad, - 0xd0, 0x08, 0x9b, 0x01, 0x68, 0x1b, 0x1c, 0x38, - 0x1c, 0x21, 0x1c, 0x2a, 0xf0, 0x1d, 0xfe, 0x6a, - 0x19, 0x7f, 0x19, 0x64, 0x2e, 0x00, 0xd0, 0x54, - 0x68, 0x38, 0x90, 0x00, 0x46, 0x6f, 0x78, 0x38, - 0x70, 0x20, 0x34, 0x01, 0x37, 0x01, 0x3e, 0x01, - 0xd1, 0xf9, 0xe0, 0x4a, 0x0e, 0x20, 0x06, 0x00, - 0x42, 0x88, 0xd1, 0x3f, 0xe0, 0x14, 0x08, 0x60, - 0xd3, 0x08, 0x1e, 0x60, 0x88, 0x01, 0x23, 0xff, - 0x02, 0x1b, 0x40, 0x19, 0x78, 0x3a, 0x43, 0x11, - 0x80, 0x01, 0xe0, 0x06, 0x88, 0x21, 0x06, 0x09, - 0x0e, 0x09, 0x78, 0x3a, 0x02, 0x12, 0x43, 0x11, - 0x80, 0x21, 0x34, 0x01, 0x3d, 0x01, 0x37, 0x01, - 0x07, 0xb8, 0xd0, 0x01, 0x2d, 0x00, 0xdc, 0xe6, - 0x07, 0xae, 0x0f, 0xb6, 0x1b, 0xad, 0xd0, 0x06, - 0x9b, 0x01, 0x68, 0x1b, 0x1c, 0x38, 0x1c, 0x21, - 0x1c, 0x2a, 0xf0, 0x1d, 0xfe, 0x33, 0x19, 0x7f, - 0x19, 0x64, 0x2e, 0x00, 0xd0, 0x1d, 0x08, 0x60, - 0xd3, 0x08, 0x1e, 0x60, 0x88, 0x01, 0x23, 0xff, - 0x02, 0x1b, 0x40, 0x19, 0x78, 0x3a, 0x43, 0x11, - 0x80, 0x01, 0xe0, 0x06, 0x88, 0x21, 0x06, 0x09, - 0x0e, 0x09, 0x78, 0x3a, 0x02, 0x12, 0x43, 0x11, - 0x80, 0x21, 0x34, 0x01, 0x37, 0x01, 0x3e, 0x01, - 0xd1, 0xe9, 0xe0, 0x06, 0x9b, 0x01, 0x68, 0x1b, - 0x1c, 0x38, 0x1c, 0x21, 0x1c, 0x2a, 0xf0, 0x1d, - 0xfe, 0x11, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x48, - 0xb5, 0x00, 0x20, 0x03, 0xf0, 0x03, 0xfb, 0x98, - 0x48, 0x03, 0x89, 0x02, 0x8a, 0x01, 0x89, 0x80, - 0xf0, 0x05, 0xff, 0xc2, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x00, 0x00, 0xb5, 0xf0, 0x4f, 0x10, - 0x89, 0x3c, 0x89, 0xbe, 0x8a, 0x3d, 0x23, 0x04, - 0x43, 0xdb, 0x68, 0x78, 0x40, 0x18, 0x0c, 0x1a, - 0x60, 0x78, 0xb4, 0x04, 0x1c, 0x13, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x14, - 0x20, 0x01, 0x60, 0x78, 0xb0, 0x01, 0x4a, 0x07, - 0xb4, 0x04, 0x1c, 0x20, 0x1c, 0x31, 0x1c, 0x2a, - 0x4b, 0x04, 0xf0, 0x00, 0xf8, 0x09, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0xf0, 0x9f, 0x05, 0x04, 0x04, 0x0c, 0x24, - 0x04, 0x0d, 0x0c, 0x2d, 0x04, 0x16, 0x0c, 0x36, - 0x04, 0x18, 0x0c, 0x00, 0xb0, 0x82, 0x90, 0x00, - 0x04, 0x38, 0x0c, 0x00, 0xb0, 0x81, 0x49, 0xa9, - 0x4f, 0xa9, 0x42, 0x8d, 0xd1, 0x00, 0x89, 0xbd, - 0x42, 0x8e, 0xd1, 0x00, 0x8a, 0x3e, 0x4a, 0xa7, - 0x42, 0x95, 0xd1, 0x02, 0x89, 0xbd, 0x08, 0xd3, - 0x81, 0xbb, 0x4b, 0xa4, 0x42, 0x9e, 0xd1, 0x02, - 0x8a, 0x3e, 0x08, 0xdb, 0x82, 0x3b, 0x9a, 0x01, - 0x42, 0x8a, 0xd1, 0x01, 0x8a, 0xba, 0x92, 0x01, - 0xa0, 0x9f, 0x22, 0x2d, 0x21, 0x00, 0xf0, 0x06, - 0xf8, 0x69, 0xa0, 0x9f, 0x22, 0x37, 0x21, 0x00, - 0xf0, 0x06, 0xf8, 0x64, 0x22, 0x3c, 0x21, 0x00, - 0x1c, 0x28, 0xf0, 0x06, 0xf8, 0x97, 0xa0, 0x9c, - 0x22, 0x41, 0x21, 0x00, 0xf0, 0x06, 0xf8, 0x5a, - 0x22, 0x46, 0x21, 0x00, 0x1c, 0x30, 0xf0, 0x06, - 0xf8, 0x8d, 0xa0, 0x99, 0x22, 0x37, 0x21, 0x01, - 0xf0, 0x06, 0xf8, 0x50, 0x22, 0x3e, 0x21, 0x01, - 0x1c, 0x20, 0xf0, 0x06, 0xf8, 0x83, 0xa0, 0x96, - 0x22, 0x37, 0x21, 0x02, 0xf0, 0x06, 0xf8, 0x46, - 0x22, 0x3e, 0x21, 0x02, 0x98, 0x01, 0xf0, 0x06, - 0xf8, 0x79, 0x8a, 0xbb, 0x99, 0x01, 0x42, 0x99, - 0xd0, 0x20, 0x68, 0x38, 0x90, 0x02, 0x28, 0x00, - 0xd0, 0x1a, 0x2b, 0x00, 0xd0, 0x0a, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x1c, 0xb4, 0x07, 0x1c, 0x19, - 0x23, 0x10, 0x22, 0x1d, 0x98, 0x05, 0xf0, 0x0f, - 0xfe, 0x75, 0xb0, 0x03, 0x98, 0x01, 0x28, 0x00, - 0xd0, 0x0a, 0x22, 0x01, 0x21, 0x00, 0x20, 0x1c, - 0xb4, 0x07, 0x99, 0x04, 0x23, 0x10, 0x22, 0x1d, - 0x68, 0x38, 0xf0, 0x0f, 0xfe, 0x67, 0xb0, 0x03, - 0x98, 0x01, 0x82, 0xb8, 0x4b, 0x80, 0x42, 0x9c, - 0xd0, 0x46, 0xdc, 0x37, 0x2c, 0x00, 0xd0, 0x3d, - 0x3b, 0x02, 0x42, 0x9c, 0xd0, 0x38, 0x4b, 0x7d, - 0x42, 0x9c, 0xd1, 0x00, 0x1c, 0x34, 0xa0, 0x7c, - 0x22, 0x42, 0x21, 0x01, 0xf0, 0x06, 0xf8, 0x0a, - 0x22, 0x43, 0x21, 0x01, 0x1c, 0x20, 0xf0, 0x06, - 0xf8, 0x3d, 0xa0, 0x78, 0x22, 0x47, 0x21, 0x01, - 0xf0, 0x06, 0xf8, 0x00, 0x22, 0x00, 0xb4, 0x04, - 0x23, 0x00, 0x49, 0x64, 0x20, 0x1c, 0xf0, 0x0f, - 0xff, 0xdf, 0x89, 0xb8, 0xb0, 0x01, 0x42, 0x85, - 0xd1, 0x02, 0x89, 0x38, 0x42, 0x84, 0xd0, 0x44, - 0x81, 0xbd, 0x20, 0x1f, 0xf0, 0x10, 0xfb, 0x18, - 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x02, 0x20, 0x1f, 0xf0, 0x10, 0xf9, 0x90, - 0x2d, 0x00, 0xd0, 0x33, 0x2d, 0x01, 0xd1, 0x11, - 0x25, 0x00, 0xe0, 0x32, 0x4b, 0x57, 0x42, 0x9c, - 0xd0, 0x04, 0x33, 0x01, 0x42, 0x9c, 0xd1, 0xca, - 0x89, 0x3c, 0xe7, 0xc8, 0x2d, 0x00, 0xd0, 0x01, - 0x1c, 0x2c, 0xe7, 0xc4, 0x1c, 0x34, 0xe7, 0xc2, - 0x1c, 0x2c, 0xe7, 0xc0, 0x42, 0xac, 0xd1, 0x01, - 0x20, 0x80, 0xe0, 0x00, 0x20, 0x00, 0x22, 0x00, - 0xb4, 0x04, 0x06, 0x00, 0x0e, 0x00, 0x22, 0x02, - 0x43, 0x02, 0x23, 0x01, 0x20, 0x1f, 0x1c, 0x29, - 0xf0, 0x0f, 0xff, 0xa6, 0x23, 0x01, 0x02, 0x9b, - 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1f, 0xb0, 0x01, - 0xf0, 0x10, 0xf9, 0x62, 0x21, 0x00, 0x20, 0x1f, - 0xf0, 0x10, 0xfe, 0x54, 0x20, 0x01, 0xf0, 0x13, - 0xfa, 0x43, 0xe0, 0x02, 0x20, 0x00, 0xf0, 0x13, - 0xfa, 0x3f, 0x8a, 0x38, 0x42, 0x86, 0xd1, 0x02, - 0x89, 0x39, 0x42, 0x8c, 0xd0, 0x52, 0x28, 0x00, - 0xd0, 0x0d, 0x20, 0x03, 0xf0, 0x13, 0xfb, 0x96, - 0x20, 0x1e, 0xf0, 0x10, 0xfb, 0x93, 0x23, 0x03, - 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x10, 0xf9, 0x41, 0x82, 0x3e, - 0x2e, 0x00, 0xd0, 0x3f, 0x42, 0xb4, 0xd1, 0x02, - 0x20, 0x80, 0x90, 0x00, 0xe0, 0x01, 0x20, 0x00, - 0x90, 0x00, 0xf0, 0x23, 0xf8, 0x8d, 0x23, 0x01, - 0x04, 0x1b, 0x43, 0x18, 0xf0, 0x23, 0xf8, 0x8c, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x14, 0xf8, 0x74, - 0x20, 0xff, 0x49, 0x37, 0x68, 0x09, 0x70, 0x08, - 0x49, 0x36, 0x48, 0x37, 0x23, 0x1e, 0x22, 0x10, - 0xf0, 0x14, 0xf9, 0xa8, 0x48, 0x35, 0x68, 0x00, - 0x78, 0x01, 0x23, 0x06, 0x43, 0x19, 0x70, 0x01, - 0xf0, 0x23, 0xf8, 0x72, 0x4b, 0x32, 0x40, 0x18, - 0xf0, 0x23, 0xf8, 0x72, 0x22, 0x00, 0xb4, 0x04, - 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x22, 0x02, - 0x43, 0x02, 0x23, 0x02, 0x20, 0x1e, 0x1c, 0x31, - 0xf0, 0x0f, 0xff, 0x46, 0x23, 0x01, 0x02, 0x9b, - 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1e, 0xb0, 0x01, - 0xf0, 0x10, 0xf9, 0x02, 0x21, 0x00, 0x20, 0x1e, - 0xf0, 0x10, 0xfd, 0xf4, 0x42, 0xac, 0xd0, 0x18, - 0x42, 0xb4, 0xd0, 0x16, 0x2c, 0x00, 0xd0, 0x14, - 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, - 0x20, 0x1c, 0xf0, 0x10, 0xf8, 0xf1, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x00, 0x22, 0x82, 0x20, 0x1c, - 0x1c, 0x21, 0xf0, 0x0f, 0xff, 0x25, 0xb0, 0x01, - 0xa0, 0x1a, 0x22, 0x47, 0x21, 0x01, 0xf0, 0x05, - 0xff, 0x39, 0x81, 0x3c, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfe, - 0x53, 0x49, 0x44, 0x3a, 0x00, 0x00, 0x00, 0x00, - 0x56, 0x50, 0x49, 0x44, 0x3a, 0x00, 0x00, 0x00, - 0x41, 0x50, 0x49, 0x44, 0x3a, 0x00, 0x00, 0x00, - 0x50, 0x43, 0x52, 0x50, 0x49, 0x44, 0x3a, 0x00, - 0x54, 0x58, 0x54, 0x50, 0x49, 0x44, 0x3a, 0x00, - 0x00, 0x00, 0xff, 0xfd, 0x00, 0x00, 0xff, 0xfc, - 0x2f, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x98, 0x2e, 0x08, 0x48, 0x10, - 0x2e, 0x08, 0x05, 0xb4, 0x2e, 0x08, 0x9b, 0xc4, - 0xff, 0xfe, 0xff, 0xff, 0x2a, 0x00, 0x00, 0x00, - 0xb5, 0x00, 0x22, 0x00, 0xb4, 0x04, 0x04, 0x01, - 0x0c, 0x09, 0x23, 0x00, 0x4a, 0x03, 0x1e, 0x50, - 0xf7, 0xff, 0xfe, 0x66, 0xb0, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x00, 0x22, 0x00, 0xb4, 0x04, 0x04, 0x02, - 0x0c, 0x12, 0x23, 0x00, 0x49, 0x03, 0x1e, 0x48, - 0xf7, 0xff, 0xfe, 0x56, 0xb0, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0xd0, 0x08, - 0x28, 0x01, 0xd0, 0x0b, 0x28, 0x02, 0xd1, 0x02, - 0x02, 0x00, 0xf0, 0x13, 0xfa, 0xcf, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x80, 0xf0, 0x13, 0xfa, 0xca, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0xff, 0x30, 0x01, - 0xf0, 0x13, 0xfa, 0xc4, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xb0, 0x27, 0x00, 0x4c, 0x1b, 0x20, 0x01, - 0x04, 0x80, 0x21, 0x00, 0x22, 0x00, 0xc4, 0x86, - 0xc4, 0x84, 0x3c, 0x14, 0xf0, 0x05, 0xf8, 0x9c, - 0x61, 0x60, 0x28, 0x00, 0xd0, 0x06, 0x21, 0x01, - 0x04, 0x89, 0x61, 0xe1, 0x18, 0x41, 0x62, 0x20, - 0x61, 0xa1, 0xe0, 0x02, 0x61, 0xe7, 0x61, 0xa7, - 0x62, 0x27, 0x68, 0x21, 0x00, 0xc9, 0x4a, 0x10, - 0x18, 0x89, 0x60, 0x48, 0x20, 0x00, 0x49, 0x0f, - 0x4d, 0x0f, 0x00, 0x42, 0x52, 0x8d, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x1d, 0xdb, 0xf8, - 0x20, 0x00, 0x1c, 0x39, 0x4c, 0x0b, 0x4f, 0x0c, - 0x4b, 0x0c, 0x00, 0x42, 0x52, 0xa5, 0x00, 0x82, - 0x50, 0xb9, 0x50, 0x99, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf5, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x00, 0x1c, - 0x2e, 0x08, 0x3c, 0x20, 0x2e, 0x08, 0x49, 0xa8, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x4a, 0x98, 0x2e, 0x08, 0x4b, 0x18, - 0xb4, 0xf0, 0xb0, 0x81, 0x49, 0x25, 0xc9, 0x0c, - 0x39, 0x08, 0x1a, 0xd2, 0x60, 0x8a, 0xd5, 0x02, - 0x32, 0xff, 0x32, 0x01, 0x60, 0x8a, 0x6a, 0x0a, - 0x62, 0x8a, 0x68, 0x8f, 0x2f, 0xfe, 0xdb, 0x03, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0x47, 0x70, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x4c, 0x1b, - 0x69, 0xa6, 0x69, 0x64, 0x2f, 0x3e, 0xdb, 0x24, - 0x00, 0xdb, 0x4f, 0x19, 0x19, 0xdb, 0x68, 0x5b, - 0x62, 0x4b, 0x93, 0x00, 0x1a, 0x9f, 0x4b, 0x15, - 0x69, 0xdd, 0x2f, 0x00, 0xdc, 0x00, 0x19, 0x7f, - 0x23, 0x01, 0x03, 0x1b, 0x18, 0xc3, 0x42, 0xbb, - 0xdd, 0x0f, 0x18, 0x17, 0x42, 0xb7, 0xdb, 0x09, - 0x9a, 0x00, 0x1b, 0x12, 0x2a, 0x00, 0xdc, 0x00, - 0x19, 0x52, 0x42, 0x93, 0xdd, 0x11, 0x18, 0x20, - 0x62, 0x08, 0xe0, 0x0e, 0x62, 0x0f, 0x1c, 0x14, - 0xe0, 0x0b, 0x18, 0x10, 0x62, 0x08, 0x1c, 0x14, - 0xe0, 0x07, 0x18, 0x12, 0x42, 0xb2, 0xdb, 0x00, - 0x62, 0x0c, 0x6a, 0x0a, 0x18, 0x10, 0x62, 0x08, - 0x1c, 0x14, 0x1c, 0x20, 0xb0, 0x01, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x1c, - 0x2e, 0x08, 0x3c, 0x20, 0x48, 0x03, 0x6a, 0x81, - 0x62, 0x01, 0x69, 0x01, 0x31, 0x01, 0x61, 0x01, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x00, 0x1c, - 0xb5, 0xf7, 0x04, 0x05, 0x0c, 0x2d, 0x04, 0x0e, - 0x0c, 0x36, 0xb0, 0x81, 0x23, 0x01, 0x03, 0x1b, - 0x98, 0x03, 0x42, 0x9e, 0xdd, 0x05, 0x20, 0xff, - 0xb0, 0x01, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x4f, 0x24, 0x68, 0xb9, 0x29, 0xff, - 0xdb, 0x02, 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xf4, - 0x00, 0x69, 0x19, 0x49, 0x00, 0x89, 0x4a, 0x20, - 0x18, 0x8c, 0x89, 0x21, 0x29, 0x01, 0xd0, 0x02, - 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xe9, 0x79, 0x81, - 0x91, 0x00, 0x88, 0xa0, 0x08, 0x40, 0x07, 0x80, - 0xd1, 0x02, 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0xf4, - 0x88, 0xa0, 0x23, 0x06, 0x40, 0x18, 0x28, 0x02, - 0xd1, 0x09, 0x88, 0xe0, 0x99, 0x00, 0x42, 0x88, - 0xd1, 0x05, 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0xe8, - 0x20, 0xff, 0xb0, 0x01, 0xe7, 0xd1, 0x88, 0xe0, - 0x4b, 0x10, 0x42, 0x98, 0xd1, 0x01, 0x99, 0x00, - 0x80, 0xe1, 0x68, 0x39, 0x00, 0xc8, 0x4a, 0x0e, - 0x52, 0x15, 0x18, 0x80, 0x80, 0x46, 0x9a, 0x03, - 0x31, 0x01, 0x60, 0x42, 0x20, 0x00, 0x23, 0xff, - 0x60, 0x39, 0x33, 0x01, 0x42, 0x99, 0xd1, 0x00, - 0x60, 0x38, 0x68, 0xb9, 0x31, 0x01, 0x60, 0xb9, - 0x68, 0xfb, 0x42, 0x99, 0xdd, 0x00, 0x60, 0xf9, - 0xb0, 0x01, 0xe7, 0xb2, 0x2e, 0x08, 0x00, 0x1c, - 0x2e, 0x08, 0x48, 0x28, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x3c, 0x20, 0xb5, 0xf0, 0x26, 0xff, - 0xb0, 0x83, 0x49, 0x3b, 0x91, 0x01, 0x48, 0x3b, - 0x8e, 0x80, 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x4f, 0x38, - 0xcf, 0x05, 0x3f, 0x08, 0x1a, 0x80, 0x60, 0xb8, - 0x1c, 0x01, 0xd5, 0x02, 0x1d, 0xc8, 0x30, 0xf9, - 0x60, 0xb8, 0x68, 0xb8, 0x28, 0x00, 0xd1, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xd0, 0x49, 0x30, 0x5a, 0x0d, 0x18, 0x40, - 0x88, 0x44, 0x68, 0x40, 0x90, 0x00, 0x00, 0xa8, - 0x49, 0x2d, 0x58, 0x09, 0x91, 0x02, 0x29, 0x00, - 0xd0, 0x08, 0x49, 0x2c, 0x58, 0x0b, 0x99, 0x00, - 0x9e, 0x02, 0x1c, 0x28, 0x1c, 0x22, 0xf0, 0x1d, - 0xfa, 0xdb, 0x26, 0x00, 0x48, 0x28, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x09, 0x1c, 0x28, 0xf0, 0x0d, - 0xfa, 0xc3, 0x28, 0xff, 0xd1, 0x04, 0x98, 0x00, - 0x1c, 0x21, 0xf0, 0x0d, 0xfa, 0x3f, 0x26, 0x00, - 0x2e, 0x00, 0xd0, 0x29, 0x06, 0xed, 0x0e, 0xed, - 0x1c, 0xe0, 0x08, 0x82, 0x00, 0x92, 0x98, 0x00, - 0x99, 0x01, 0x6a, 0xfb, 0xf0, 0x1d, 0xfa, 0xba, - 0x00, 0x68, 0x19, 0x40, 0x00, 0x80, 0x49, 0x1b, - 0x18, 0x40, 0x88, 0x80, 0x21, 0x0c, 0x40, 0x01, - 0x29, 0x0c, 0xd1, 0x04, 0x02, 0x29, 0x31, 0x02, - 0x04, 0x09, 0x0c, 0x09, 0xe0, 0x03, 0x02, 0x29, - 0x31, 0x01, 0x04, 0x09, 0x0c, 0x09, 0x08, 0x40, - 0xd3, 0x04, 0x04, 0x08, 0x0c, 0x00, 0x21, 0x01, - 0x03, 0xc9, 0x43, 0x01, 0x48, 0x09, 0x85, 0x01, - 0x85, 0x44, 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, - 0x68, 0x78, 0x28, 0xff, 0xd1, 0x02, 0x20, 0x00, - 0x60, 0x78, 0xe0, 0x01, 0x30, 0x01, 0x60, 0x78, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x02, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x08, 0x3c, 0x20, - 0x2e, 0x08, 0x4a, 0x98, 0x2e, 0x08, 0x4b, 0x18, - 0x2e, 0x08, 0x1a, 0x94, 0x2e, 0x08, 0x48, 0x28, - 0xb4, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x4f, 0x14, - 0x8e, 0xba, 0x2a, 0x00, 0xd0, 0x03, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0xf0, 0x47, 0x70, 0x1c, 0x05, - 0x4c, 0x10, 0x1d, 0x48, 0xd5, 0x00, 0x30, 0x01, - 0x10, 0x40, 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, - 0x29, 0x02, 0xdb, 0xf2, 0x29, 0xe0, 0xdc, 0xf0, - 0x22, 0x00, 0x29, 0x00, 0xdd, 0x07, 0x00, 0x53, - 0x5a, 0xee, 0x52, 0xe6, 0x32, 0x01, 0x04, 0x12, - 0x0c, 0x12, 0x42, 0x8a, 0xdb, 0xf7, 0x22, 0x04, - 0x85, 0x3a, 0x00, 0x49, 0x85, 0x79, 0x21, 0x0f, - 0x02, 0x49, 0x86, 0xb9, 0xbc, 0xf0, 0x47, 0x70, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x1e, 0x00, - 0xb5, 0xb0, 0x27, 0x00, 0x4d, 0x13, 0x8e, 0xa9, - 0x29, 0x00, 0xd0, 0x03, 0x43, 0xf8, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x79, 0x04, 0x09, - 0x0c, 0x09, 0x1c, 0x3a, 0x1c, 0x0f, 0x56, 0x81, - 0x29, 0x00, 0xd1, 0xf7, 0x24, 0x00, 0x2f, 0xfe, - 0xdd, 0x03, 0x27, 0xfe, 0x1d, 0xc1, 0x31, 0xd9, - 0x77, 0xcc, 0x1c, 0x7a, 0x49, 0x08, 0xf7, 0xff, - 0xfb, 0x8f, 0x20, 0x04, 0x85, 0x28, 0x1c, 0xf8, - 0x08, 0x80, 0x00, 0x80, 0x85, 0x68, 0x20, 0x0f, - 0x02, 0x40, 0x86, 0xa8, 0x1c, 0x20, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x1e, 0x00, 0xb5, 0x90, 0x06, 0x04, - 0x0e, 0x24, 0x06, 0x0f, 0x0e, 0x3f, 0xb0, 0x88, - 0xf0, 0x04, 0xfa, 0x1e, 0x28, 0x00, 0xd0, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x08, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xab, 0x00, 0x70, 0x1c, - 0x70, 0x5f, 0x46, 0x68, 0x21, 0x20, 0xf0, 0x0a, - 0xfa, 0x6f, 0xb0, 0x08, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0xb4, 0xf0, 0x04, 0x0a, 0x0c, 0x12, - 0x4b, 0x15, 0x8e, 0x9f, 0x2f, 0x00, 0xd0, 0x03, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, 0x47, 0x70, - 0x07, 0xd7, 0x0f, 0xff, 0x04, 0x09, 0x0c, 0x09, - 0x08, 0x49, 0x2f, 0x00, 0xd0, 0x03, 0x31, 0x03, - 0x04, 0x09, 0x0c, 0x09, 0xe0, 0x02, 0x31, 0x02, - 0x04, 0x09, 0x0c, 0x09, 0x1c, 0x05, 0x4c, 0x0b, - 0x20, 0x00, 0x29, 0x00, 0xdd, 0x07, 0x00, 0x47, - 0x5b, 0xee, 0x53, 0xe6, 0x30, 0x01, 0x04, 0x00, - 0x0c, 0x00, 0x42, 0x88, 0xdb, 0xf7, 0x20, 0x05, - 0x85, 0x18, 0x85, 0x5a, 0x20, 0x01, 0x02, 0x40, - 0x86, 0x98, 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x02, 0x00, - 0x04, 0x01, 0x0c, 0x09, 0x48, 0x0b, 0x6f, 0xc2, - 0x20, 0x00, 0x43, 0xc0, 0x2a, 0x00, 0xd1, 0x0f, - 0x4a, 0x09, 0x8e, 0xd3, 0x2b, 0x00, 0xd1, 0x0b, - 0x48, 0x08, 0x86, 0xc1, 0x23, 0x07, 0x86, 0x83, - 0x85, 0x93, 0x85, 0xd1, 0x20, 0x09, 0x02, 0x40, - 0x86, 0xd0, 0x20, 0x01, 0x87, 0x90, 0x20, 0x00, - 0x47, 0x70, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0x80, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x00, 0xc0, - 0xb5, 0x80, 0x1c, 0x01, 0x4a, 0x0d, 0x8e, 0xd3, - 0x20, 0x00, 0x43, 0xc0, 0x2b, 0x00, 0xd1, 0x12, - 0x8d, 0x93, 0x2b, 0x07, 0xd1, 0x0f, 0x8d, 0xd7, - 0x20, 0x00, 0x85, 0x90, 0x2f, 0x00, 0xd0, 0x0a, - 0x23, 0x01, 0x02, 0xdb, 0x42, 0x9f, 0xdc, 0x06, - 0x1c, 0x3a, 0x48, 0x05, 0x4b, 0x05, 0x6a, 0xdb, - 0xf0, 0x1d, 0xf9, 0x98, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x12, 0x00, 0x2e, 0x08, 0x00, 0x1c, - 0xb5, 0xf0, 0xb0, 0x83, 0x49, 0x62, 0x8e, 0x88, - 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x4e, 0x5f, 0x78, 0x30, - 0x49, 0x5f, 0x91, 0x02, 0x78, 0x09, 0x42, 0x88, - 0xd1, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0x4d, 0x5b, 0x4b, 0x5c, - 0x93, 0x01, 0x1d, 0xd9, 0x31, 0x19, 0x7d, 0x0a, - 0x00, 0x53, 0x18, 0x9b, 0x01, 0x1b, 0x19, 0x5b, - 0x78, 0xdc, 0x1c, 0x1f, 0x79, 0x1b, 0x42, 0x9c, - 0xd1, 0x04, 0x79, 0x7b, 0x07, 0xdb, 0x0f, 0xdb, - 0x2b, 0x01, 0xd1, 0x06, 0x7d, 0x0b, 0x93, 0x00, - 0x32, 0x01, 0x07, 0x52, 0x0f, 0x52, 0x75, 0x0a, - 0xe0, 0x08, 0x32, 0x01, 0x07, 0x52, 0x0f, 0x52, - 0x75, 0x0a, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x28, 0x08, 0xdb, 0xe0, 0x28, 0x08, 0xd1, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x00, 0x00, 0x43, 0x18, 0x18, 0x01, 0x00, - 0x19, 0x47, 0x78, 0xf8, 0x00, 0xc0, 0x19, 0xc0, - 0x89, 0x84, 0x23, 0x01, 0x03, 0x1b, 0x42, 0x9c, - 0xdd, 0x00, 0x1c, 0x1c, 0x68, 0x81, 0x89, 0xc0, - 0x18, 0x08, 0x1c, 0xe1, 0x08, 0x8a, 0x00, 0x92, - 0x49, 0x3e, 0x9b, 0x01, 0x6a, 0xdb, 0xf0, 0x1d, - 0xf9, 0x35, 0x88, 0x38, 0x02, 0x00, 0x30, 0x09, - 0x49, 0x35, 0x85, 0x08, 0x85, 0x4c, 0x20, 0x01, - 0x02, 0x40, 0x86, 0x88, 0x78, 0xf8, 0x00, 0xc0, - 0x19, 0xc0, 0x89, 0xc1, 0x19, 0x09, 0x81, 0xc1, - 0x78, 0xf8, 0x00, 0xc0, 0x19, 0xc0, 0x89, 0x81, - 0x1b, 0x09, 0x81, 0x81, 0x78, 0xf8, 0x00, 0xc0, - 0x19, 0xc0, 0x89, 0x81, 0x29, 0x00, 0xd1, 0x4f, - 0x24, 0x00, 0x81, 0xc4, 0x78, 0xf9, 0x6a, 0xb8, - 0x18, 0x40, 0x73, 0x04, 0x78, 0xf8, 0x30, 0x01, - 0x07, 0x80, 0x0f, 0x80, 0x70, 0xf8, 0x78, 0x30, - 0x30, 0x01, 0x70, 0x30, 0x78, 0xf8, 0x79, 0x39, - 0x42, 0x88, 0xd1, 0x3d, 0x79, 0x78, 0x21, 0x02, - 0x40, 0x01, 0x29, 0x02, 0xd1, 0x1e, 0x70, 0xfc, - 0x71, 0x3c, 0x71, 0x7c, 0x49, 0x22, 0x80, 0x39, - 0x6a, 0xb8, 0x68, 0x00, 0xf0, 0x04, 0xfd, 0xb6, - 0x6a, 0xb8, 0xf0, 0x04, 0xfd, 0xb3, 0x20, 0x00, - 0x49, 0x1d, 0x00, 0x42, 0x18, 0x12, 0x01, 0x12, - 0x5a, 0xaa, 0x42, 0x8a, 0xd1, 0x04, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf4, - 0x28, 0x08, 0xd1, 0x1d, 0x70, 0x34, 0x99, 0x02, - 0x70, 0x0c, 0xe0, 0x19, 0x07, 0xc0, 0x0f, 0xc0, - 0x28, 0x01, 0xd1, 0x15, 0x70, 0xfc, 0x71, 0x3c, - 0x21, 0x06, 0x1d, 0xf8, 0x30, 0x19, 0x73, 0x41, - 0x6a, 0xb9, 0x72, 0x0c, 0x79, 0x79, 0x08, 0x49, - 0x00, 0x49, 0x71, 0x79, 0x22, 0x04, 0x7b, 0x01, - 0xb4, 0x06, 0x78, 0xb9, 0x22, 0x0a, 0x20, 0x85, - 0x6a, 0xbb, 0xf0, 0x0f, 0xfd, 0xc3, 0xb0, 0x02, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x03, 0xc0, - 0x2e, 0x08, 0x03, 0xbc, 0x2e, 0x08, 0x45, 0x18, - 0x2e, 0x08, 0x00, 0x1c, 0x2c, 0x00, 0x02, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x4f, 0x0b, - 0x68, 0x38, 0x28, 0x00, 0xd1, 0x0f, 0x20, 0x2f, - 0x02, 0x80, 0xf0, 0x04, 0xfd, 0x91, 0x60, 0x38, - 0x20, 0x00, 0x49, 0x07, 0x60, 0x08, 0x49, 0x07, - 0x60, 0x08, 0x49, 0x07, 0x60, 0x08, 0x20, 0x2f, - 0x02, 0x80, 0x49, 0x06, 0x60, 0x08, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xcb, 0x04, - 0x2e, 0x02, 0xcb, 0x0c, 0x2e, 0x02, 0xcb, 0x08, - 0x2e, 0x02, 0xcb, 0x10, 0x2e, 0x02, 0xcb, 0x14, - 0xb5, 0x80, 0x4f, 0x04, 0x68, 0x38, 0xf0, 0x04, - 0xfd, 0x7d, 0x20, 0x00, 0x60, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xcb, 0x04, - 0xb5, 0xf0, 0xb0, 0x82, 0x4a, 0x33, 0x8e, 0x90, - 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x48, 0x30, 0x68, 0x01, - 0x4e, 0x30, 0x68, 0x30, 0x1a, 0x09, 0xd1, 0x03, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x29, 0x00, 0xda, 0x02, 0x23, 0x2f, 0x02, 0x9b, - 0x18, 0xc9, 0x23, 0x2f, 0x01, 0x1b, 0x42, 0x99, - 0xda, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x4a, 0x24, 0x8e, 0xd2, 0x2a, 0x00, - 0xd0, 0x06, 0x4b, 0x25, 0x42, 0x99, 0xda, 0x03, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1f, 0xcf, 0x3f, 0xff, 0x3f, 0x72, 0x4b, 0x21, - 0x42, 0x9f, 0xdd, 0x00, 0x1c, 0x1f, 0x21, 0x2f, - 0x02, 0x89, 0x1a, 0x0c, 0x4d, 0x1e, 0x49, 0x1f, - 0x91, 0x01, 0x42, 0xa7, 0xdd, 0x14, 0x1b, 0x3a, - 0x92, 0x00, 0x99, 0x01, 0x68, 0x09, 0x18, 0x08, - 0x1c, 0x22, 0x49, 0x1b, 0x6b, 0x2b, 0xf0, 0x1d, - 0xf8, 0x45, 0x4b, 0x19, 0x18, 0xe1, 0x98, 0x01, - 0x9a, 0x00, 0x68, 0x00, 0x6b, 0x2b, 0xf0, 0x1d, - 0xf8, 0x3d, 0x9a, 0x00, 0x60, 0x32, 0xe0, 0x0e, - 0x99, 0x01, 0x68, 0x09, 0x18, 0x08, 0x1c, 0x3a, - 0x49, 0x11, 0x6b, 0x2b, 0xf0, 0x1d, 0xf8, 0x32, - 0x68, 0x30, 0x19, 0xc1, 0x20, 0x2f, 0x02, 0x80, - 0xf0, 0x1d, 0xf8, 0x36, 0x60, 0x31, 0x20, 0x12, - 0x4a, 0x04, 0x85, 0x10, 0x85, 0x57, 0x20, 0x01, - 0x02, 0x40, 0x86, 0x90, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x02, 0xcb, 0x0c, 0x2e, 0x02, 0xcb, 0x08, - 0x00, 0x00, 0x0a, 0x48, 0x00, 0x00, 0x0f, 0x6c, - 0x2e, 0x08, 0x00, 0x1c, 0x2e, 0x02, 0xcb, 0x04, - 0x2c, 0x00, 0x02, 0x00, 0x2a, 0x00, 0xd0, 0x05, - 0x78, 0x03, 0x70, 0x0b, 0x30, 0x01, 0x31, 0x01, - 0x3a, 0x01, 0xd1, 0xf9, 0x47, 0x70, 0xb5, 0xf3, - 0xb0, 0x83, 0x98, 0x03, 0x78, 0x40, 0x00, 0x80, - 0x1c, 0x0f, 0x49, 0x3d, 0x58, 0x08, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0xb0, 0xb0, 0x03, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x03, - 0x88, 0x45, 0x30, 0x04, 0xc8, 0x41, 0x1d, 0xf2, - 0x32, 0xb9, 0x1a, 0x14, 0x23, 0x01, 0x03, 0x1b, - 0x42, 0x9d, 0xdd, 0x03, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0xec, 0x19, 0x79, 0x91, 0x00, - 0x4b, 0x30, 0x93, 0x02, 0x2c, 0xbc, 0xdc, 0x01, - 0x2c, 0x00, 0xda, 0x07, 0x9b, 0x02, 0x68, 0x18, - 0x30, 0x01, 0x60, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0xdc, 0x42, 0xac, 0xdb, 0x06, - 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x2a, - 0xf0, 0x1c, 0xff, 0xd0, 0xe0, 0x44, 0x2d, 0x00, - 0xdd, 0x42, 0x4b, 0x25, 0x93, 0x01, 0x99, 0x00, - 0x42, 0x8f, 0xd9, 0x07, 0x9b, 0x02, 0x68, 0x18, - 0x30, 0x01, 0x60, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0xc4, 0x42, 0xa5, 0xdd, 0x07, - 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x22, - 0xf0, 0x1c, 0xff, 0xb8, 0x68, 0x36, 0xe0, 0x05, - 0x9b, 0x02, 0x68, 0x5b, 0x1c, 0x39, 0x1c, 0x2a, - 0xf0, 0x1c, 0xff, 0xb0, 0x19, 0x3f, 0x1b, 0x2d, - 0x79, 0xb0, 0x19, 0x80, 0x9a, 0x03, 0x78, 0x52, - 0x00, 0xd3, 0x1a, 0x9a, 0x00, 0x92, 0x9b, 0x01, - 0x68, 0x1b, 0x18, 0xd2, 0x78, 0x92, 0x06, 0xd2, - 0x0e, 0xd2, 0x1d, 0x31, 0x2a, 0x12, 0xd1, 0x06, - 0x78, 0xca, 0x0a, 0x12, 0xd2, 0x03, 0x78, 0x89, - 0x29, 0x09, 0xd1, 0x00, 0x38, 0x01, 0x1d, 0xf1, - 0x31, 0xb9, 0x1a, 0x0c, 0x2c, 0xbc, 0xdc, 0x01, - 0x2c, 0x00, 0xda, 0x03, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x03, 0xe7, 0x90, 0x2d, 0x00, 0xdc, 0xbe, - 0x20, 0x00, 0xb0, 0x03, 0xe7, 0x8b, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x00, 0x58, - 0x2e, 0x08, 0x9b, 0x30, 0xb4, 0xf0, 0x68, 0x42, - 0x68, 0x84, 0x1d, 0xe1, 0x31, 0xb7, 0x1c, 0x16, - 0xb0, 0x81, 0x42, 0x91, 0xd9, 0x09, 0x78, 0x51, - 0x07, 0x09, 0x0f, 0x09, 0x02, 0x09, 0x78, 0x92, - 0x43, 0x11, 0x31, 0x03, 0x04, 0x09, 0x0c, 0x09, - 0xe0, 0x5b, 0x68, 0x21, 0x79, 0x8b, 0x93, 0x00, - 0x1d, 0x0f, 0x18, 0x59, 0x78, 0x45, 0x00, 0xeb, - 0x1b, 0x5b, 0x00, 0x9b, 0x4d, 0x2b, 0x68, 0x2d, - 0x19, 0x5b, 0x78, 0x9b, 0x06, 0xdb, 0x0e, 0xdb, - 0x2b, 0x12, 0xd1, 0x31, 0x1d, 0xe3, 0x33, 0xb9, - 0x1b, 0x9b, 0x06, 0x1d, 0x0e, 0x2d, 0x78, 0xfe, - 0x0a, 0x33, 0xd2, 0x29, 0x2d, 0x0e, 0xda, 0x27, - 0x9b, 0x00, 0x2b, 0x09, 0xdd, 0x06, 0x79, 0x3b, - 0x18, 0xfb, 0x33, 0x05, 0x42, 0x8b, 0xd0, 0x1f, - 0x39, 0x01, 0xe0, 0x1d, 0x9b, 0x00, 0x2b, 0x09, - 0xd1, 0x1a, 0x79, 0x3b, 0x2b, 0x00, 0xd0, 0x01, - 0x39, 0x01, 0xe0, 0x15, 0x39, 0x01, 0x1d, 0xe3, - 0x33, 0xb8, 0x42, 0x93, 0xd9, 0x09, 0x78, 0x53, - 0x07, 0x1b, 0x0f, 0x1b, 0x02, 0x1b, 0x04, 0x1b, - 0x0c, 0x1b, 0x33, 0x03, 0x04, 0x1b, 0x0c, 0x1b, - 0xe0, 0x03, 0x78, 0x4b, 0x33, 0x03, 0x04, 0x1b, - 0x0c, 0x1b, 0x42, 0x9d, 0xda, 0x00, 0x31, 0x01, - 0x1d, 0xe3, 0x33, 0xb8, 0x42, 0x93, 0xd9, 0x0b, - 0x78, 0x52, 0x07, 0x12, 0x0f, 0x12, 0x02, 0x12, - 0x04, 0x12, 0x0c, 0x12, 0x78, 0x09, 0x18, 0x51, - 0x31, 0x03, 0x04, 0x09, 0x0c, 0x09, 0xe0, 0x08, - 0x78, 0x0a, 0x07, 0x12, 0x0f, 0x12, 0x02, 0x12, - 0x78, 0x49, 0x43, 0x11, 0x31, 0x03, 0x04, 0x09, - 0x0c, 0x09, 0x80, 0x41, 0xb0, 0x01, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x30, - 0x4a, 0x02, 0xc2, 0x03, 0x3a, 0x08, 0x20, 0x00, - 0x60, 0x90, 0x47, 0x70, 0x2e, 0x08, 0x44, 0x20, - 0x48, 0x01, 0x68, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x44, 0x20, 0x48, 0x01, 0x68, 0x80, - 0x08, 0xc0, 0x47, 0x70, 0x2e, 0x08, 0x44, 0x20, - 0x48, 0x02, 0x68, 0x81, 0x08, 0xc9, 0x68, 0x00, - 0x18, 0x08, 0x47, 0x70, 0x2e, 0x08, 0x44, 0x20, - 0xb4, 0xf0, 0x1c, 0x03, 0x20, 0x00, 0xb0, 0x82, - 0x49, 0x53, 0x91, 0x01, 0x68, 0x89, 0x18, 0xcf, - 0x97, 0x00, 0x08, 0xca, 0x07, 0x4c, 0x0f, 0x64, - 0x49, 0x4f, 0x68, 0x09, 0xd1, 0x32, 0x1c, 0x1f, - 0xd5, 0x04, 0x42, 0x7f, 0x07, 0x7f, 0x0f, 0x7f, - 0x42, 0x7f, 0xe0, 0x01, 0x07, 0x7f, 0x0f, 0x7f, - 0x2f, 0x00, 0xd1, 0x27, 0x2b, 0x10, 0xd0, 0x16, - 0xdc, 0x05, 0x2b, 0x00, 0xd0, 0x5a, 0x2b, 0x08, - 0xd1, 0x59, 0x5c, 0x88, 0xe0, 0x81, 0x2b, 0x18, - 0xd0, 0x13, 0x2b, 0x20, 0xd1, 0x53, 0x5c, 0x88, - 0x06, 0x00, 0x18, 0x89, 0x78, 0x4a, 0x04, 0x12, - 0x18, 0x80, 0x78, 0x8a, 0x02, 0x12, 0x18, 0x80, - 0x78, 0xc9, 0x18, 0x40, 0xe0, 0x71, 0x5c, 0x88, - 0x02, 0x00, 0x18, 0x89, 0x78, 0x49, 0x18, 0x40, - 0xe0, 0x6b, 0x5c, 0x88, 0x04, 0x00, 0x18, 0x89, - 0x78, 0x4a, 0x02, 0x12, 0x18, 0x80, 0x78, 0x89, - 0x18, 0x40, 0xe0, 0x62, 0x2b, 0x00, 0xd1, 0x03, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x9f, 0x00, 0x08, 0xfd, 0x07, 0x7f, 0x0f, 0x7f, - 0x2b, 0x20, 0xdc, 0x56, 0x1a, 0xae, 0x4d, 0x2f, - 0x2e, 0x05, 0xd2, 0x52, 0xa3, 0x01, 0x5d, 0x9b, - 0x00, 0x5b, 0x44, 0x9f, 0x02, 0x09, 0x14, 0x25, - 0x38, 0x00, 0x5c, 0x88, 0x5d, 0x29, 0x40, 0x08, - 0x21, 0x08, 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x44, - 0x1c, 0x50, 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, - 0x02, 0x12, 0x5c, 0x08, 0x18, 0x80, 0x21, 0x08, - 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x39, 0x1c, 0x50, - 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, 0x02, 0x12, - 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, 0x02, 0x00, - 0x5c, 0xc9, 0x18, 0x08, 0x21, 0x08, 0x1b, 0xc9, - 0x40, 0xc8, 0xe0, 0x2a, 0xe0, 0x29, 0xe0, 0x28, - 0x1c, 0x50, 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, - 0x02, 0x12, 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, - 0x02, 0x00, 0x1c, 0x5a, 0x5c, 0xcb, 0x18, 0x18, - 0x02, 0x00, 0x5c, 0x89, 0x18, 0x08, 0x21, 0x08, - 0x1b, 0xc9, 0x40, 0xc8, 0xe0, 0x15, 0x1c, 0x50, - 0x5c, 0x8a, 0x5d, 0x2b, 0x40, 0x1a, 0x02, 0x12, - 0x1c, 0x43, 0x5c, 0x08, 0x18, 0x80, 0x02, 0x00, - 0x1c, 0x5a, 0x5c, 0xcb, 0x18, 0x18, 0x02, 0x03, - 0x1c, 0x50, 0x5c, 0x8a, 0x18, 0xd2, 0x40, 0xba, - 0x5c, 0x08, 0x21, 0x08, 0x1b, 0xc9, 0x40, 0xc8, - 0x18, 0x80, 0x99, 0x01, 0x9f, 0x00, 0x60, 0x8f, - 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x44, 0x20, 0x2e, 0x08, 0x00, 0x60, - 0xb5, 0xb0, 0x1c, 0x07, 0x20, 0x00, 0x24, 0x00, - 0x2f, 0x00, 0xdd, 0x09, 0x00, 0x85, 0x18, 0x2d, - 0x00, 0x6d, 0x20, 0x04, 0xf7, 0xff, 0xff, 0x44, - 0x19, 0x40, 0x34, 0x01, 0x42, 0xbc, 0xdb, 0xf5, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x47, 0x70, 0xb5, 0xb0, 0x1c, 0x0c, 0x1c, 0x05, - 0x1c, 0x17, 0xb0, 0x90, 0xf0, 0x22, 0xfa, 0x20, - 0x49, 0x25, 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0xe8, - 0xf0, 0x22, 0xf9, 0xde, 0x4b, 0x23, 0x40, 0x18, - 0xf0, 0x22, 0xf9, 0xde, 0xf0, 0x22, 0xfa, 0x4a, - 0x20, 0x10, 0x90, 0x0a, 0x20, 0xff, 0x90, 0x0b, - 0xa8, 0x0f, 0x90, 0x0c, 0x20, 0x0c, 0x90, 0x0d, - 0x48, 0x1d, 0x90, 0x0e, 0xa8, 0x0a, 0xf0, 0x14, - 0xfb, 0xa5, 0xab, 0x07, 0x70, 0x1d, 0x94, 0x08, - 0x72, 0x1f, 0x24, 0x00, 0xab, 0x09, 0x70, 0x5c, - 0x27, 0x00, 0x4d, 0x18, 0xf0, 0x14, 0xfc, 0x06, - 0x28, 0x00, 0xd0, 0x02, 0x37, 0x01, 0x42, 0xaf, - 0xdb, 0xf8, 0x20, 0x01, 0xa9, 0x07, 0xf0, 0x14, - 0xfc, 0x07, 0xf0, 0x14, 0xfb, 0xfb, 0x28, 0x00, - 0xd1, 0xfb, 0x94, 0x0b, 0xa8, 0x0a, 0xf0, 0x14, - 0xfb, 0x89, 0xf0, 0x22, 0xf9, 0xe9, 0x21, 0x00, - 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0xb1, 0xf0, 0x22, - 0xf9, 0xa7, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, - 0xf0, 0x22, 0xf9, 0xa6, 0xf0, 0x22, 0xfa, 0x12, - 0x46, 0x68, 0xf0, 0x14, 0xfb, 0xc3, 0x98, 0x04, - 0xb0, 0x10, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x00, 0x15, 0xa5, 0xff, 0xff, 0xf7, 0xff, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x9e, 0x09, 0x1c, 0x04, 0x1c, 0x0d, - 0x1c, 0x17, 0xb0, 0x93, 0xf0, 0x22, 0xf9, 0xc4, - 0x49, 0x31, 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0x8c, - 0xf0, 0x22, 0xf9, 0x82, 0x4b, 0x2f, 0x40, 0x18, - 0xf0, 0x22, 0xf9, 0x82, 0xf0, 0x22, 0xf9, 0xee, - 0x20, 0x10, 0x90, 0x0d, 0x20, 0xff, 0x90, 0x0e, - 0xa8, 0x12, 0x90, 0x0f, 0x20, 0x0c, 0x90, 0x10, - 0x48, 0x29, 0x90, 0x11, 0xa8, 0x0d, 0xf0, 0x14, - 0xfb, 0x49, 0xab, 0x07, 0x70, 0x1c, 0x95, 0x08, - 0x72, 0x1f, 0x20, 0xff, 0xab, 0x09, 0x70, 0x58, - 0x1c, 0x60, 0x71, 0x18, 0x9b, 0x16, 0x93, 0x0b, - 0xab, 0x0c, 0x70, 0x1e, 0x20, 0xff, 0x70, 0x58, - 0x24, 0x00, 0x4d, 0x20, 0xf0, 0x14, 0xfb, 0xa2, - 0x28, 0x00, 0xd0, 0x02, 0x34, 0x01, 0x42, 0xac, - 0xdb, 0xf8, 0x2f, 0x00, 0xd1, 0x04, 0x20, 0x01, - 0xa9, 0x0a, 0xf0, 0x14, 0xfb, 0xa1, 0xe0, 0x03, - 0x20, 0x02, 0xa9, 0x07, 0xf0, 0x14, 0xfb, 0x9c, - 0xf0, 0x14, 0xfb, 0x90, 0x28, 0x00, 0xd1, 0xfb, - 0x27, 0x00, 0x97, 0x0e, 0xa8, 0x0d, 0xf0, 0x14, - 0xfb, 0x1d, 0xf0, 0x22, 0xf9, 0x7d, 0x21, 0x00, - 0x20, 0x0c, 0xf0, 0x22, 0xf9, 0x45, 0xf0, 0x22, - 0xf9, 0x3b, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, - 0xf0, 0x22, 0xf9, 0x3a, 0xf0, 0x22, 0xf9, 0xa6, - 0x46, 0x68, 0xf0, 0x14, 0xfb, 0x57, 0x98, 0x01, - 0x0a, 0x80, 0xd2, 0x05, 0x20, 0x01, 0xb0, 0x13, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xb0, 0x13, 0xe7, 0xf8, 0x00, 0x00, - 0x2e, 0x00, 0x15, 0xa5, 0xff, 0xff, 0xf7, 0xff, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x27, 0x10, - 0x1c, 0x01, 0x48, 0x04, 0x61, 0xc1, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x01, 0x48, 0x02, 0x60, 0x01, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x68, - 0x6e, 0x00, 0x17, 0x00, 0xb5, 0xb0, 0x4f, 0x41, - 0x69, 0x38, 0x4c, 0x41, 0x28, 0x00, 0xd0, 0x07, - 0x20, 0x03, 0x60, 0x20, 0x69, 0x38, 0x38, 0x01, - 0x61, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x02, 0x69, 0x78, 0x28, 0x00, 0xd0, 0x04, - 0x60, 0x21, 0x69, 0x78, 0x38, 0x01, 0x61, 0x78, - 0xd1, 0xf3, 0x68, 0xf8, 0x28, 0x00, 0xd0, 0x20, - 0x38, 0x01, 0x60, 0xf8, 0x4a, 0x35, 0xd0, 0x08, - 0x68, 0xbb, 0x18, 0xd2, 0x3a, 0x20, 0x7f, 0xd2, - 0x1e, 0x45, 0x40, 0xea, 0x07, 0xd2, 0x0f, 0xd2, - 0xe0, 0x09, 0x68, 0xbb, 0x18, 0xd2, 0x3a, 0x20, - 0x7f, 0xd2, 0x4b, 0x2f, 0x5c, 0x9a, 0x23, 0x01, - 0x40, 0x5a, 0x06, 0x12, 0x0e, 0x12, 0x23, 0x01, - 0x2a, 0x00, 0xd0, 0x02, 0x61, 0x79, 0x61, 0x3b, - 0xe0, 0x01, 0x61, 0x39, 0x61, 0x7b, 0x28, 0x00, - 0xd1, 0xcf, 0x68, 0xb8, 0x30, 0x01, 0x60, 0xb8, - 0x23, 0x09, 0x68, 0x7a, 0x1c, 0x01, 0x42, 0x90, - 0xdc, 0x03, 0x60, 0xfb, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x20, 0x1c, 0x55, 0x42, 0x8d, - 0xd1, 0x03, 0x61, 0x78, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x95, 0x42, 0x8d, 0xd1, 0x0d, - 0x7e, 0x3d, 0x2d, 0xff, 0xd0, 0x0a, 0x2d, 0x00, - 0xd0, 0x03, 0x60, 0xfb, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x19, 0x61, 0x38, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x32, 0x03, 0x42, 0x8a, - 0xd1, 0x04, 0x20, 0x22, 0x61, 0x78, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x69, 0xf9, 0x60, 0x21, - 0x68, 0x79, 0x68, 0xba, 0x31, 0x04, 0x42, 0x91, - 0xd1, 0x0a, 0x69, 0xf9, 0x29, 0x00, 0xd0, 0x03, - 0x61, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x61, 0x78, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xf0, 0x03, 0xff, 0xca, 0x20, 0x00, 0x60, 0x38, - 0x69, 0xf8, 0x60, 0x20, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x68, - 0x6e, 0x00, 0x17, 0x00, 0x2e, 0x08, 0x44, 0x2c, - 0x2e, 0x08, 0x00, 0x68, 0xb5, 0xb0, 0x04, 0x0b, - 0x0c, 0x1b, 0x04, 0x14, 0x0c, 0x24, 0x49, 0x14, - 0x68, 0x0a, 0x2a, 0x00, 0xd0, 0x02, 0x68, 0x0a, - 0x2a, 0x00, 0xd1, 0xfc, 0x22, 0x01, 0x60, 0x0a, - 0x2b, 0x0a, 0xdd, 0x00, 0x23, 0x0a, 0x22, 0x00, - 0x4f, 0x0e, 0x2b, 0x00, 0xdd, 0x05, 0x00, 0x55, - 0x5b, 0x45, 0x54, 0xbd, 0x32, 0x01, 0x42, 0x9a, - 0xdb, 0xf9, 0x76, 0x0c, 0x20, 0xff, 0x18, 0xfa, - 0x70, 0x50, 0x20, 0x00, 0x60, 0x4b, 0x22, 0x20, - 0x61, 0x08, 0x61, 0x4a, 0x60, 0x88, 0x60, 0xc8, - 0x49, 0x05, 0x20, 0x32, 0xf0, 0x03, 0xff, 0x66, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x68, 0x2e, 0x08, 0x44, 0x2c, - 0x2e, 0x00, 0x17, 0x61, 0xb5, 0x80, 0x04, 0x01, - 0x0c, 0x09, 0x20, 0x00, 0x22, 0x00, 0xb0, 0x88, - 0x00, 0x47, 0x46, 0x6b, 0x53, 0xda, 0x30, 0x01, - 0x04, 0x00, 0x14, 0x00, 0x28, 0x10, 0xdb, 0xf7, - 0x22, 0x80, 0x00, 0x43, 0x46, 0x68, 0x52, 0xc2, - 0x46, 0x6a, 0x1c, 0x08, 0x21, 0x05, 0xf0, 0x04, - 0xfa, 0x33, 0x49, 0x06, 0x80, 0x88, 0x00, 0x42, - 0x18, 0x12, 0x00, 0x92, 0x4b, 0x04, 0x5a, 0x9a, - 0x81, 0x0a, 0xb0, 0x08, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x88, - 0x2e, 0x08, 0x48, 0x28, 0xb5, 0x80, 0xb0, 0xb2, - 0x46, 0x68, 0xf0, 0x15, 0xf8, 0x99, 0xaf, 0x16, - 0xcf, 0x83, 0x9a, 0x19, 0xf0, 0x00, 0xf9, 0xd2, - 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0xed, 0xb0, 0x32, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0x06, 0x00, 0x0e, 0x00, 0x06, 0x09, 0x0e, 0x09, - 0xf0, 0x0f, 0xfd, 0x7a, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x06, 0x09, - 0x0e, 0x09, 0x4b, 0x05, 0x68, 0x1b, 0x06, 0x1b, - 0x0e, 0x1b, 0x2b, 0x30, 0xd3, 0x01, 0xf0, 0x0f, - 0xfd, 0x6b, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xbc, 0xb5, 0xf0, 0x25, 0x00, - 0x4e, 0x1a, 0x4c, 0x1b, 0x4f, 0x1b, 0x68, 0x30, - 0x68, 0x00, 0x00, 0x40, 0x0a, 0x40, 0x02, 0x40, - 0x21, 0x19, 0x06, 0x89, 0x6a, 0x89, 0x4b, 0x18, - 0x40, 0x19, 0x0a, 0x49, 0x43, 0x08, 0x49, 0x17, - 0x64, 0x08, 0xf0, 0x01, 0xfc, 0x63, 0xf0, 0x02, - 0xf9, 0x3b, 0x68, 0x38, 0x30, 0x01, 0x60, 0x38, - 0x48, 0x13, 0x88, 0x01, 0x31, 0x01, 0x80, 0x01, - 0x20, 0x0c, 0x68, 0x21, 0xf0, 0x1c, 0xfc, 0x42, - 0x29, 0x00, 0xd1, 0x01, 0xf7, 0xff, 0xff, 0xae, - 0x20, 0x32, 0x68, 0x21, 0xf0, 0x1c, 0xfc, 0x3a, - 0x4b, 0x0c, 0x42, 0x98, 0xd9, 0x01, 0x49, 0x0c, - 0x60, 0xf9, 0x42, 0x85, 0xd0, 0xd3, 0x1c, 0x05, - 0xf0, 0x00, 0xfe, 0x40, 0x20, 0x00, 0x60, 0x38, - 0xe7, 0xcd, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xa4, - 0x2e, 0x08, 0x05, 0xbc, 0x2e, 0x08, 0x01, 0x88, - 0x00, 0x03, 0xfe, 0x00, 0x2c, 0x00, 0x1f, 0x80, - 0x2c, 0x00, 0x1f, 0xc8, 0x00, 0x00, 0x05, 0x46, - 0x2e, 0x00, 0x19, 0x65, 0xb5, 0xf0, 0x27, 0x00, - 0xb0, 0x94, 0x46, 0x68, 0x4c, 0x2f, 0xcc, 0x6e, - 0xc0, 0x6e, 0xcc, 0x6e, 0xc0, 0x6e, 0x23, 0x28, - 0x22, 0x41, 0x00, 0xd2, 0x21, 0x00, 0x20, 0x01, - 0xf0, 0x0d, 0xfd, 0xda, 0x22, 0xff, 0x21, 0x64, - 0x20, 0x01, 0x32, 0xf5, 0xf0, 0x0d, 0xfe, 0x9c, - 0x20, 0x00, 0x46, 0x69, 0x5c, 0x09, 0x40, 0x41, - 0x23, 0x35, 0x40, 0x59, 0xaa, 0x0a, 0x54, 0x11, - 0x30, 0x01, 0x28, 0x25, 0xdb, 0xf5, 0x24, 0x00, - 0xa9, 0x0a, 0x54, 0x0c, 0x22, 0x00, 0x20, 0x01, - 0x1c, 0x23, 0xf0, 0x0e, 0xf8, 0xfa, 0x4e, 0x1e, - 0x4d, 0x1e, 0x4c, 0x1f, 0xf0, 0x03, 0xff, 0x6e, - 0xf0, 0x03, 0xff, 0x6c, 0x28, 0x28, 0xd9, 0x10, - 0x42, 0xb0, 0xd3, 0x0e, 0x69, 0xe9, 0x08, 0xc9, - 0xd3, 0x0b, 0x4b, 0x1a, 0x18, 0xc1, 0x20, 0x1e, - 0xf0, 0x1c, 0xfb, 0xe0, 0x21, 0x64, 0x1d, 0xc2, - 0x32, 0xff, 0x32, 0xee, 0x20, 0x01, 0xf0, 0x0d, - 0xfe, 0x6f, 0xf0, 0x01, 0xfb, 0xeb, 0xf0, 0x02, - 0xf8, 0xc3, 0xf0, 0x03, 0xff, 0x53, 0x1c, 0x01, - 0x20, 0x7d, 0x00, 0xc0, 0xf0, 0x1c, 0xfb, 0xce, - 0x1c, 0x01, 0x48, 0x0f, 0x88, 0x02, 0x32, 0x01, - 0x80, 0x02, 0x42, 0xb9, 0xd0, 0xd6, 0x2f, 0x04, - 0xd3, 0x06, 0x20, 0x01, 0xf0, 0x0d, 0xfd, 0x78, - 0xb0, 0x14, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x0f, 0xf0, 0x00, 0xfd, 0xcb, 0x20, 0x00, - 0x60, 0x20, 0xe7, 0xc7, 0x2e, 0x02, 0xcc, 0x74, - 0x00, 0x00, 0x0b, 0xb8, 0x72, 0x00, 0x01, 0x00, - 0x2e, 0x08, 0x01, 0x88, 0xff, 0xff, 0xf4, 0x48, - 0x2c, 0x00, 0x1f, 0xc8, 0xb5, 0x80, 0x27, 0x00, - 0x48, 0x08, 0x81, 0x07, 0x48, 0x08, 0x49, 0x09, - 0x60, 0xc8, 0xf0, 0x03, 0xfd, 0x43, 0xf7, 0xff, - 0xff, 0x85, 0xf0, 0x00, 0xf8, 0xd3, 0xf7, 0xff, - 0xff, 0x39, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x00, 0x19, 0x53, 0x2e, 0x08, 0x01, 0x88, - 0x47, 0x70, 0xb5, 0xf0, 0x4d, 0x29, 0x68, 0x01, - 0x31, 0x03, 0x10, 0x89, 0x1e, 0xcb, 0x68, 0x41, - 0x10, 0x89, 0x68, 0x82, 0x10, 0x92, 0x00, 0x89, - 0x30, 0x0c, 0x18, 0x0c, 0x21, 0x03, 0x05, 0x89, - 0x27, 0x35, 0x06, 0x7f, 0x60, 0x39, 0x49, 0x22, - 0x68, 0x0e, 0x08, 0xb6, 0x00, 0xb6, 0x60, 0x0e, - 0x21, 0x00, 0x2b, 0x00, 0xd9, 0x04, 0xc8, 0x40, - 0xc5, 0x40, 0x31, 0x01, 0x42, 0x99, 0xd3, 0xfa, - 0x23, 0x00, 0x49, 0x1c, 0x65, 0x8b, 0x20, 0x00, - 0x2a, 0x00, 0xd9, 0x04, 0xcc, 0x20, 0x64, 0x8d, - 0x30, 0x01, 0x42, 0x90, 0xd3, 0xfa, 0x48, 0x18, - 0x60, 0x03, 0x60, 0x3b, 0x66, 0x8b, 0x60, 0x3b, - 0x22, 0x01, 0x64, 0xca, 0x21, 0x00, 0x4a, 0x15, - 0x68, 0x03, 0x2b, 0x00, 0xd1, 0x05, 0x33, 0x01, - 0x2b, 0x64, 0xdb, 0xfc, 0x31, 0x01, 0x42, 0x91, - 0xdb, 0xf6, 0x48, 0x11, 0x68, 0x01, 0x23, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x49, 0x0f, 0x20, 0x33, - 0x06, 0x40, 0x65, 0x41, 0x49, 0x0e, 0x65, 0x81, - 0x49, 0x0e, 0x66, 0x81, 0x39, 0x04, 0x66, 0x41, - 0x21, 0x03, 0x67, 0x01, 0x21, 0x00, 0x20, 0x0d, - 0xf0, 0x14, 0xfd, 0x62, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x70, 0x6a, 0x00, 0x00, 0x80, - 0xcc, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x27, 0x10, - 0x6a, 0x00, 0x00, 0x10, 0xcc, 0x00, 0x0f, 0x84, - 0xcc, 0x00, 0x0f, 0x88, 0x98, 0x00, 0x0f, 0x88, - 0xb5, 0x00, 0x22, 0x00, 0x21, 0x00, 0x20, 0x08, - 0xf0, 0x15, 0xf9, 0x9c, 0x48, 0x08, 0x21, 0x40, - 0xf0, 0x14, 0xfe, 0x6c, 0x20, 0x01, 0x21, 0x35, - 0x06, 0x49, 0x61, 0x08, 0x20, 0x02, 0x43, 0xc0, - 0x49, 0x04, 0x63, 0x08, 0x20, 0x00, 0x21, 0x39, - 0x06, 0x49, 0x62, 0xc8, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x02, 0x3b, 0x04, 0x72, 0x00, 0x01, 0x00, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x0f, 0xd0, 0x10, - 0x29, 0x01, 0xd0, 0x12, 0x29, 0x02, 0xd0, 0x14, - 0x29, 0x03, 0xd1, 0x01, 0x49, 0x0c, 0x60, 0x01, - 0x68, 0x01, 0x68, 0x40, 0x43, 0x08, 0x22, 0x00, - 0x21, 0x1e, 0xf0, 0x15, 0xf9, 0xdb, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x01, 0x04, 0x49, 0x60, 0x01, - 0xe7, 0xf2, 0x21, 0x21, 0x03, 0x09, 0x60, 0x01, - 0xe7, 0xee, 0x21, 0x41, 0x03, 0x09, 0x60, 0x01, - 0xe7, 0xea, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x98, - 0x00, 0x08, 0x10, 0x08, 0xb5, 0x00, 0x1c, 0x01, - 0x48, 0x0b, 0xd0, 0x0e, 0x29, 0x01, 0xd0, 0x0f, - 0x29, 0x02, 0xd1, 0x01, 0x21, 0x04, 0x60, 0x41, - 0x68, 0x01, 0x68, 0x40, 0x43, 0x08, 0x22, 0x00, - 0x21, 0x1e, 0xf0, 0x15, 0xf9, 0xb7, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x01, 0x60, 0x41, 0xe7, 0xf3, - 0x21, 0x02, 0x60, 0x41, 0xe7, 0xf0, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x98, 0xb5, 0x80, 0x4b, 0x09, - 0x22, 0x0a, 0x21, 0x0a, 0x20, 0x0b, 0xf0, 0x15, - 0xfb, 0xeb, 0x20, 0x0b, 0xf0, 0x15, 0xfd, 0x0d, - 0x4f, 0x05, 0x60, 0x38, 0x00, 0x80, 0xf0, 0x03, - 0xff, 0x2b, 0x60, 0x78, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xc4, - 0x2e, 0x08, 0x01, 0xd4, 0xb5, 0xb0, 0x25, 0x00, - 0x1c, 0x0c, 0x1c, 0x07, 0x2a, 0x08, 0xd2, 0x30, - 0xa3, 0x01, 0x5c, 0x9b, 0x00, 0x5b, 0x44, 0x9f, - 0x2c, 0x29, 0x29, 0x03, 0x29, 0x29, 0x03, 0x29, - 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x4d, 0x23, 0x2d, - 0x01, 0x1b, 0x42, 0x9f, 0xd0, 0x13, 0x23, 0x0b, - 0x01, 0x9b, 0x42, 0x9f, 0xd0, 0x0f, 0x23, 0xff, - 0x33, 0xe1, 0x42, 0x9f, 0xd0, 0x0b, 0x23, 0xff, - 0x33, 0x61, 0x42, 0x9f, 0xd0, 0x07, 0x23, 0x21, - 0x01, 0x1b, 0x42, 0x9f, 0xd0, 0x03, 0x23, 0x11, - 0x01, 0x5b, 0x42, 0x9f, 0xd1, 0x08, 0x23, 0x09, - 0x01, 0x9b, 0x42, 0x9c, 0xd0, 0x09, 0x08, 0x5b, - 0x42, 0x9c, 0xd0, 0x06, 0x2c, 0xf0, 0xd0, 0x04, - 0x25, 0x01, 0xe0, 0x02, 0x20, 0x01, 0xf0, 0x00, - 0xf8, 0x27, 0x4f, 0x12, 0x6c, 0x78, 0x42, 0x85, - 0xd0, 0x1c, 0x1d, 0xfb, 0x33, 0x35, 0x2d, 0x00, - 0xd0, 0x12, 0x1f, 0xda, 0x3a, 0x0d, 0x21, 0x03, - 0x1d, 0x10, 0xb4, 0x07, 0x22, 0x0b, 0xb4, 0x04, - 0x1c, 0x19, 0x23, 0x00, 0x22, 0x00, 0x20, 0x00, - 0xf0, 0x0f, 0xff, 0xe4, 0x6a, 0xb8, 0x1c, 0x29, - 0xb0, 0x04, 0xf0, 0x11, 0xf9, 0x33, 0xe0, 0x04, - 0x21, 0x00, 0x6a, 0xb8, 0x1c, 0x1a, 0xf0, 0x10, - 0xfa, 0xe9, 0x64, 0x7d, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0x98, - 0xb5, 0xf0, 0x1c, 0x07, 0xb0, 0x81, 0x4d, 0x56, - 0x1d, 0xee, 0x36, 0x19, 0x79, 0x30, 0x42, 0x87, - 0xd1, 0x03, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x24, 0x00, 0x6c, 0x68, 0x28, 0x00, - 0xd0, 0x05, 0x64, 0x6c, 0x4a, 0x4f, 0x21, 0x00, - 0x6a, 0xa8, 0xf0, 0x10, 0xfa, 0xcb, 0x71, 0x37, - 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x14, 0xfc, 0x5c, - 0x20, 0x00, 0xf0, 0x11, 0xff, 0x5d, 0x20, 0x1f, - 0xf0, 0x0e, 0xff, 0xf2, 0x26, 0x03, 0x02, 0x76, - 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, 0x20, 0x1f, - 0x1c, 0x33, 0xf0, 0x0e, 0xfe, 0x69, 0x20, 0x1e, - 0xf0, 0x0f, 0xf8, 0xb0, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x02, 0x20, 0x1e, 0x1c, 0x33, 0xf0, 0x0e, - 0xfe, 0x5f, 0x26, 0x1c, 0x1c, 0x39, 0x48, 0x3e, - 0x27, 0x0c, 0x29, 0x06, 0xd2, 0x07, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x12, 0x03, 0x21, 0x12, 0x30, 0x48, 0x39, - 0x21, 0x40, 0xf0, 0x14, 0xfd, 0x5b, 0xab, 0x00, - 0x70, 0x1c, 0x20, 0x08, 0x70, 0x58, 0x70, 0x9e, - 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, 0xf0, 0x15, - 0xf8, 0x7d, 0xe0, 0x2b, 0x21, 0x1f, 0x43, 0xc9, - 0xf0, 0x14, 0xfd, 0x4c, 0xab, 0x00, 0x70, 0x1c, - 0x70, 0x5c, 0x70, 0x9f, 0x70, 0xdc, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x15, 0xf8, 0x6e, - 0xe0, 0x1c, 0x21, 0x40, 0xf0, 0x14, 0xfd, 0x3e, - 0xab, 0x00, 0x70, 0x1c, 0x20, 0x10, 0x70, 0x58, - 0x70, 0x9e, 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, - 0x20, 0x08, 0xf0, 0x15, 0xf8, 0x5f, 0xe0, 0x0d, - 0x21, 0x1f, 0x43, 0xc9, 0xf0, 0x14, 0xfd, 0x2e, - 0xab, 0x00, 0x70, 0x1c, 0x70, 0x5c, 0x70, 0x9f, - 0x70, 0xdc, 0x22, 0x00, 0x21, 0x00, 0x20, 0x08, - 0xf0, 0x15, 0xf8, 0x50, 0x20, 0x01, 0x21, 0x35, - 0x06, 0x49, 0x61, 0x08, 0x20, 0x02, 0x43, 0xc0, - 0x49, 0x19, 0x63, 0x08, 0x20, 0x39, 0x06, 0x40, - 0x62, 0xc4, 0xcd, 0x03, 0x43, 0x08, 0x22, 0x00, - 0x21, 0x1e, 0xf0, 0x15, 0xf8, 0xa7, 0x48, 0x15, - 0xf0, 0x11, 0xfe, 0x68, 0x20, 0x00, 0xf0, 0x11, - 0xfe, 0xd9, 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x68, - 0x20, 0x00, 0xf0, 0x03, 0xfb, 0x15, 0x20, 0x01, - 0xf0, 0x11, 0xfe, 0xde, 0x4a, 0x0e, 0xb4, 0x04, - 0x1c, 0x13, 0x3a, 0x01, 0x49, 0x0d, 0x1e, 0xc8, - 0xf7, 0xfe, 0xfb, 0xae, 0x21, 0x00, 0x20, 0x0d, - 0xb0, 0x01, 0xf0, 0x14, 0xfb, 0xcd, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xd4, - 0x2e, 0x02, 0x81, 0x70, 0x2e, 0x02, 0x3b, 0x04, - 0x72, 0x00, 0x01, 0x00, 0x00, 0x80, 0x10, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, - 0xb5, 0xb0, 0x1c, 0x07, 0x4c, 0x10, 0x6a, 0x20, - 0x42, 0x87, 0xd0, 0x19, 0x20, 0x00, 0x2f, 0x03, - 0xd1, 0x02, 0x21, 0x01, 0x61, 0x61, 0xe0, 0x00, - 0x61, 0x60, 0x21, 0x02, 0x4d, 0x0b, 0x60, 0x29, - 0x71, 0x28, 0x71, 0x68, 0x22, 0x01, 0xb4, 0x04, - 0x7a, 0x23, 0x7c, 0x22, 0x7b, 0x21, 0x20, 0x00, - 0xf0, 0x14, 0xfe, 0x9a, 0x69, 0x61, 0x1c, 0x28, - 0xb0, 0x01, 0xf0, 0x15, 0xff, 0x41, 0x62, 0x27, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xb0, - 0xb5, 0x00, 0x22, 0x02, 0x49, 0x09, 0x60, 0x0a, - 0x22, 0x00, 0x71, 0x0a, 0x71, 0x4a, 0x39, 0x48, - 0x28, 0x00, 0xd0, 0x08, 0x28, 0x01, 0xd1, 0x00, - 0x72, 0x08, 0x6a, 0x08, 0x62, 0x0a, 0xf7, 0xff, - 0xff, 0xc7, 0xbc, 0x08, 0x47, 0x18, 0x72, 0x0a, - 0xe7, 0xf7, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xe0, - 0xb5, 0x80, 0x06, 0x00, 0x0e, 0x00, 0x4f, 0x0b, - 0xd0, 0x02, 0x20, 0x00, 0x73, 0x38, 0xe0, 0x01, - 0x20, 0x01, 0x73, 0x38, 0x22, 0x01, 0xb4, 0x04, - 0x7a, 0x3b, 0x7c, 0x3a, 0x7b, 0x39, 0x20, 0x00, - 0xf0, 0x14, 0xfe, 0x62, 0x69, 0x79, 0xb0, 0x01, - 0x48, 0x03, 0xf0, 0x15, 0xff, 0x09, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x01, 0x98, - 0x2e, 0x08, 0x01, 0xb0, 0xb5, 0x80, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x01, 0x4f, 0x08, 0x74, 0x39, - 0x22, 0x01, 0xb4, 0x04, 0x7a, 0x3b, 0x7b, 0x39, - 0x1c, 0x02, 0x20, 0x00, 0xf0, 0x14, 0xfe, 0x48, - 0x69, 0x79, 0xb0, 0x01, 0x48, 0x03, 0xf0, 0x15, - 0xfe, 0xef, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0x98, 0x2e, 0x08, 0x01, 0xb0, - 0xb4, 0xb0, 0x21, 0x00, 0x48, 0x08, 0x60, 0x01, - 0x20, 0x00, 0x4c, 0x08, 0x4f, 0x08, 0x4b, 0x09, - 0x4a, 0x09, 0x00, 0x85, 0x51, 0x61, 0x54, 0x39, - 0x54, 0x19, 0x54, 0x11, 0x30, 0x01, 0x28, 0x20, - 0xdb, 0xf7, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x01, 0xe8, 0x2e, 0x08, 0x44, 0x38, - 0x2e, 0x08, 0x44, 0xb8, 0x2e, 0x08, 0x44, 0xf8, - 0x2e, 0x08, 0x44, 0xd8, 0x06, 0x00, 0x0e, 0x00, - 0x21, 0x01, 0x40, 0x81, 0x43, 0xca, 0x49, 0x05, - 0x68, 0x0b, 0x40, 0x1a, 0x60, 0x0a, 0x21, 0x00, - 0x00, 0x82, 0x4b, 0x03, 0x50, 0x99, 0x4a, 0x03, - 0x54, 0x11, 0x47, 0x70, 0x2e, 0x08, 0x01, 0xe8, - 0x2e, 0x08, 0x44, 0x38, 0x2e, 0x08, 0x44, 0xb8, - 0xb5, 0xf0, 0xb0, 0x84, 0x4f, 0x36, 0x68, 0x38, - 0x1d, 0xc1, 0x31, 0x0d, 0x20, 0x00, 0xf0, 0x2a, - 0xfb, 0x93, 0x1c, 0x04, 0x68, 0x38, 0x1d, 0xc1, - 0x31, 0x05, 0x20, 0x00, 0xf0, 0x2a, 0xfb, 0x8c, - 0x1c, 0x05, 0x68, 0x38, 0x1d, 0xc1, 0x31, 0x09, - 0x20, 0x00, 0xf0, 0x2a, 0xfb, 0x85, 0x43, 0x2c, - 0x1c, 0x20, 0x4c, 0x2c, 0x68, 0x21, 0x43, 0x08, - 0x27, 0x00, 0x60, 0x20, 0x1c, 0x05, 0xd0, 0x4a, - 0x48, 0x29, 0x90, 0x03, 0x48, 0x29, 0x90, 0x02, - 0x4a, 0x29, 0x92, 0x01, 0x4e, 0x29, 0x08, 0x68, - 0xd3, 0x3c, 0x98, 0x03, 0x5d, 0xc0, 0x28, 0x00, - 0xd0, 0x32, 0x98, 0x02, 0x5d, 0xc0, 0x28, 0x00, - 0xd0, 0x2a, 0x46, 0x68, 0x1c, 0x39, 0xf0, 0x16, - 0xfb, 0x01, 0xa8, 0x00, 0x78, 0x00, 0x28, 0x01, - 0xd1, 0x1b, 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, - 0x5d, 0xf0, 0x28, 0x00, 0xd1, 0x06, 0x20, 0xff, - 0x55, 0xf0, 0x21, 0x00, 0x00, 0xb8, 0x9a, 0x01, - 0x50, 0x11, 0xe0, 0x1f, 0x20, 0x02, 0x1c, 0x39, - 0xf0, 0x00, 0xf8, 0x8e, 0x28, 0x00, 0xd1, 0x19, - 0x21, 0x00, 0x55, 0xf1, 0x20, 0x01, 0x40, 0xb8, - 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, - 0xe0, 0x10, 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, - 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, 0xe0, 0x09, - 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, 0xe0, 0x05, - 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, 0x68, 0x21, - 0x40, 0x08, 0x60, 0x20, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0x08, 0x6d, 0xd1, 0xbb, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x78, 0x2e, 0x08, 0x01, 0xe8, - 0x2e, 0x08, 0x44, 0xd8, 0x2e, 0x08, 0x44, 0xf8, - 0x2e, 0x08, 0x44, 0x38, 0x2e, 0x08, 0x44, 0xb8, - 0xb5, 0xf0, 0x27, 0x00, 0xb0, 0x85, 0x4c, 0x26, - 0x68, 0x25, 0x2d, 0x00, 0xd0, 0x44, 0x4e, 0x25, - 0x48, 0x25, 0x90, 0x04, 0x49, 0x25, 0x91, 0x03, - 0x4a, 0x25, 0x92, 0x02, 0x48, 0x25, 0x90, 0x01, - 0x08, 0x68, 0xd3, 0x34, 0x5d, 0xf0, 0x28, 0x00, - 0xd0, 0x2b, 0x98, 0x04, 0x5d, 0xc0, 0x28, 0x00, - 0xd0, 0x2d, 0x46, 0x68, 0x1c, 0x39, 0xf0, 0x16, - 0xfa, 0x9d, 0xa8, 0x00, 0x78, 0x00, 0x28, 0x01, - 0xd1, 0x18, 0x68, 0x60, 0x30, 0x01, 0x60, 0x60, - 0x00, 0xb8, 0x99, 0x03, 0x58, 0x09, 0x69, 0x09, - 0x9a, 0x02, 0x50, 0x11, 0x20, 0x02, 0x1c, 0x39, - 0xf0, 0x00, 0xf8, 0x2e, 0x28, 0x00, 0xd1, 0x16, - 0x21, 0x00, 0x98, 0x01, 0x55, 0xc1, 0x20, 0x01, - 0x40, 0xb8, 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, - 0x60, 0x20, 0xe0, 0x0c, 0x20, 0x01, 0x40, 0xb8, - 0x43, 0xc0, 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, - 0xe0, 0x05, 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, - 0x68, 0x21, 0x40, 0x08, 0x60, 0x20, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x08, 0x6d, 0xd1, 0xc3, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xe8, 0x2e, 0x08, 0x44, 0xd8, - 0x2e, 0x08, 0x44, 0xf8, 0x2e, 0x08, 0x9b, 0xc8, - 0x2e, 0x08, 0x44, 0x38, 0x2e, 0x08, 0x44, 0xb8, - 0xb4, 0xf0, 0x06, 0x02, 0x0e, 0x12, 0xb0, 0x82, - 0x92, 0x00, 0x06, 0x0c, 0x0e, 0x24, 0x00, 0xa0, - 0xb0, 0x81, 0x49, 0x31, 0x58, 0x09, 0x91, 0x00, - 0x29, 0x00, 0xd1, 0x03, 0x20, 0xb0, 0xb0, 0x03, - 0xbc, 0xf0, 0x47, 0x70, 0x49, 0x2d, 0x68, 0x09, - 0x18, 0x47, 0x00, 0xe1, 0x1b, 0x09, 0x00, 0x89, - 0x4a, 0x2b, 0x68, 0x12, 0x18, 0x89, 0x9a, 0x01, - 0x4d, 0x2a, 0x4b, 0x2b, 0x93, 0x02, 0x2a, 0x01, - 0xd0, 0x28, 0x2a, 0x02, 0xd1, 0x44, 0x4b, 0x29, - 0x58, 0x1a, 0x2a, 0x00, 0xd1, 0x03, 0x20, 0xff, - 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, 0x60, 0x4a, - 0x22, 0x00, 0x50, 0x1a, 0x5c, 0xa8, 0x42, 0xa0, - 0xd1, 0x06, 0x00, 0x90, 0x9b, 0x02, 0x58, 0x18, - 0x78, 0x46, 0x23, 0x80, 0x43, 0x9e, 0x70, 0x46, - 0x1c, 0x50, 0x06, 0x02, 0x0e, 0x12, 0x2a, 0x20, - 0xdb, 0xf0, 0x88, 0x08, 0x4b, 0x1c, 0x40, 0x18, - 0x80, 0x08, 0x98, 0x00, 0x9a, 0x01, 0x70, 0xc2, - 0x68, 0x38, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x38, 0xe0, 0x19, 0x68, 0x38, 0x4b, 0x17, - 0x40, 0x18, 0x60, 0x38, 0x98, 0x00, 0x9a, 0x01, - 0x70, 0xc2, 0x20, 0x00, 0x60, 0x88, 0x70, 0xc8, - 0x60, 0xc8, 0x5c, 0x29, 0x42, 0xa1, 0xd1, 0x06, - 0x00, 0x81, 0x9b, 0x02, 0x58, 0x59, 0x78, 0x4a, - 0x23, 0x80, 0x43, 0x1a, 0x70, 0x4a, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf0, - 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, - 0x20, 0xbc, 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x44, 0x38, - 0xff, 0xff, 0xfb, 0xff, 0xff, 0xff, 0xdf, 0xff, - 0xb4, 0xf0, 0x78, 0x43, 0x00, 0x9e, 0x49, 0x32, - 0x59, 0x8c, 0x88, 0x42, 0x68, 0x87, 0x68, 0x40, - 0x1d, 0xf9, 0x31, 0xb9, 0x1a, 0x09, 0x42, 0x91, - 0xda, 0x3d, 0x25, 0x00, 0x1c, 0x18, 0x00, 0xdb, - 0x1a, 0x18, 0x00, 0x80, 0x4b, 0x2b, 0x68, 0x1b, - 0x18, 0xc0, 0x78, 0x80, 0x06, 0xc0, 0x0e, 0xc0, - 0x28, 0x12, 0xd1, 0x02, 0x29, 0x0e, 0xda, 0x00, - 0x25, 0x01, 0x2a, 0x00, 0xdd, 0x2b, 0x42, 0x8a, - 0xdd, 0x05, 0x68, 0x3f, 0x2f, 0x00, 0xd1, 0x02, - 0x20, 0xba, 0xbc, 0xf0, 0x47, 0x70, 0x1a, 0x52, - 0x79, 0xb9, 0x23, 0xc0, 0x1a, 0x59, 0x79, 0xfb, - 0x1d, 0x38, 0x08, 0x5b, 0xd3, 0x01, 0x22, 0x00, - 0xe0, 0x16, 0x2d, 0x00, 0xd0, 0x14, 0x42, 0x91, - 0xdb, 0x01, 0x31, 0x01, 0xe0, 0x10, 0x1c, 0x4b, - 0x42, 0x93, 0xd1, 0x0d, 0x78, 0x85, 0x2d, 0x09, - 0xdd, 0x06, 0x79, 0x05, 0x78, 0x80, 0x35, 0x09, - 0x42, 0x85, 0xd0, 0x05, 0x1c, 0x19, 0xe0, 0x03, - 0x78, 0x80, 0x28, 0x09, 0xd1, 0x00, 0x1c, 0x19, - 0x25, 0x00, 0x2a, 0x00, 0xdc, 0xd3, 0x69, 0x21, - 0x20, 0x00, 0x1c, 0x0a, 0x42, 0xb9, 0xd0, 0xd4, - 0x68, 0x0b, 0x42, 0xbb, 0xd0, 0x08, 0x68, 0x09, - 0x29, 0x00, 0xd1, 0x02, 0x20, 0xba, 0xbc, 0xf0, - 0x47, 0x70, 0x68, 0x0b, 0x42, 0xbb, 0xd1, 0xf6, - 0x4b, 0x07, 0x51, 0x9a, 0x60, 0x08, 0x69, 0xa2, - 0x69, 0x23, 0x60, 0x13, 0x61, 0xa1, 0x61, 0x27, - 0x61, 0x67, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x44, 0x38, 0xb5, 0xf0, 0x06, 0x07, - 0x0e, 0x3f, 0x04, 0x0c, 0x0c, 0x24, 0x06, 0x15, - 0x0e, 0x2d, 0x00, 0xf8, 0x49, 0x2c, 0x68, 0x09, - 0x18, 0x40, 0x00, 0xb9, 0x4a, 0x2b, 0x68, 0x12, - 0x18, 0x8a, 0x00, 0xf9, 0x1b, 0xc9, 0x00, 0x89, - 0x4b, 0x29, 0x68, 0x1b, 0x18, 0xc9, 0x68, 0x16, - 0x23, 0x01, 0x03, 0x5b, 0x43, 0x9e, 0x60, 0x16, - 0x68, 0x06, 0x23, 0x03, 0x03, 0x9b, 0x43, 0x9e, - 0x60, 0x06, 0x4b, 0x24, 0x42, 0x9c, 0xd0, 0x36, - 0x68, 0x06, 0x23, 0x21, 0x43, 0x9e, 0x60, 0x06, - 0x68, 0x16, 0x23, 0x07, 0x03, 0x5b, 0x40, 0x33, - 0x60, 0x13, 0x23, 0x07, 0x03, 0x5b, 0x43, 0x9c, - 0x1c, 0x23, 0x68, 0x14, 0x43, 0x23, 0x60, 0x13, - 0x22, 0x00, 0x75, 0x0a, 0x88, 0x0c, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x9c, 0x80, 0x0c, 0x07, 0xab, - 0x0f, 0x9b, 0x2b, 0x01, 0xd1, 0x04, 0x88, 0x0c, - 0x23, 0x10, 0x43, 0x23, 0x80, 0x0b, 0xe0, 0x03, - 0x88, 0x0c, 0x23, 0x10, 0x43, 0x9c, 0x80, 0x0c, - 0x68, 0x01, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x19, - 0x60, 0x01, 0x00, 0xf9, 0x4b, 0x0e, 0x68, 0x1b, - 0x18, 0xc9, 0x60, 0x4a, 0x68, 0x01, 0x4b, 0x0d, - 0x43, 0x19, 0x60, 0x01, 0x68, 0x01, 0x60, 0x01, - 0x21, 0x0f, 0x60, 0x41, 0xe0, 0x04, 0x1c, 0x38, - 0xf0, 0x13, 0xfa, 0xb6, 0x28, 0x00, 0xd1, 0x00, - 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0x3c, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0x40, 0x00, 0x00, 0x20, 0xa0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x07, - 0xb0, 0x8a, 0x48, 0x58, 0x29, 0x00, 0xd1, 0x0a, - 0x4d, 0x57, 0x69, 0x01, 0x91, 0x04, 0x49, 0x57, - 0x91, 0x03, 0x69, 0x41, 0x91, 0x02, 0x6a, 0x00, - 0x1e, 0x43, 0x93, 0x01, 0xe0, 0x0b, 0x29, 0x20, - 0xd1, 0x15, 0x4d, 0x53, 0x69, 0x81, 0x91, 0x04, - 0x49, 0x52, 0x91, 0x03, 0x69, 0xc1, 0x91, 0x02, - 0x6a, 0x40, 0x1e, 0x43, 0x93, 0x01, 0x24, 0x00, - 0x4b, 0x4f, 0x93, 0x09, 0x4a, 0x4f, 0x92, 0x08, - 0x4b, 0x4f, 0x93, 0x07, 0x4e, 0x4f, 0x96, 0x06, - 0x4a, 0x4f, 0x92, 0x05, 0xe0, 0x7a, 0x20, 0xb3, - 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x04, 0x00, 0x80, 0x19, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xc0, 0x68, 0x01, 0x98, 0x04, - 0x00, 0x80, 0x58, 0x28, 0x9a, 0x04, 0x18, 0xaa, - 0x00, 0x5b, 0x18, 0xd2, 0x78, 0x12, 0x92, 0x00, - 0x22, 0x00, 0x9b, 0x04, 0x18, 0xee, 0x23, 0x01, - 0x02, 0xdb, 0x18, 0xf3, 0x70, 0x1a, 0x9a, 0x04, - 0x32, 0x01, 0x92, 0x04, 0x9b, 0x01, 0x40, 0x1a, - 0x92, 0x04, 0x29, 0x00, 0xd0, 0x56, 0xb0, 0x82, - 0x91, 0x01, 0x21, 0x01, 0x9a, 0x02, 0x2a, 0x80, - 0xd1, 0x19, 0x22, 0x00, 0x9b, 0x01, 0x40, 0x0b, - 0xd0, 0x10, 0x9b, 0x0b, 0x5c, 0x9b, 0x2b, 0xff, - 0xd0, 0x0c, 0x9b, 0x0b, 0x5c, 0x9b, 0x93, 0x00, - 0x00, 0x91, 0x9a, 0x0a, 0x58, 0x52, 0x00, 0xa1, - 0x19, 0xc9, 0x61, 0x0a, 0x1c, 0x61, 0x06, 0x0c, - 0x0e, 0x24, 0xe0, 0x1c, 0x00, 0x49, 0x32, 0x01, - 0x2a, 0x10, 0xd3, 0xe7, 0xe0, 0x17, 0x22, 0x00, - 0x9b, 0x01, 0x40, 0x0b, 0xd0, 0x0f, 0x9b, 0x09, - 0x5c, 0x9b, 0x2b, 0xff, 0xd0, 0x0b, 0x93, 0x00, - 0x00, 0x93, 0x9e, 0x08, 0x58, 0xf6, 0x00, 0xa3, - 0x19, 0xdb, 0x61, 0x1e, 0x28, 0x00, 0xd0, 0x02, - 0x1c, 0x63, 0x06, 0x1c, 0x0e, 0x24, 0x00, 0x49, - 0x32, 0x01, 0x2a, 0x20, 0xd3, 0xe8, 0x2c, 0x00, - 0xd0, 0x1b, 0x9b, 0x00, 0x70, 0x7b, 0x60, 0x78, - 0x9b, 0x00, 0x00, 0x99, 0x9a, 0x07, 0x58, 0x52, - 0x69, 0x51, 0xe0, 0x07, 0x68, 0x09, 0x29, 0x00, - 0xd1, 0x04, 0x20, 0xba, 0xb0, 0x0c, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x42, 0x88, 0xd3, 0xf5, - 0x1d, 0xcb, 0x33, 0xb9, 0x42, 0x83, 0xd3, 0xf1, - 0x60, 0xb9, 0x61, 0x51, 0x1c, 0x38, 0xf0, 0x13, - 0xfa, 0xc0, 0xb0, 0x02, 0x98, 0x04, 0x99, 0x02, - 0x42, 0x88, 0xd0, 0x01, 0x2c, 0x00, 0xd0, 0x83, - 0x70, 0x3c, 0x98, 0x04, 0x99, 0x03, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x9e, 0x00, 0x04, 0x80, - 0x2e, 0x08, 0x9d, 0xfc, 0x9e, 0x00, 0x04, 0x90, - 0x2e, 0x08, 0xa6, 0xfc, 0x9e, 0x00, 0x04, 0x98, - 0x2e, 0x08, 0x9d, 0x30, 0x2e, 0x08, 0x9c, 0xd0, - 0x2e, 0x08, 0x9d, 0x10, 0x2e, 0x08, 0x9c, 0x50, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0x00, 0x20, 0xff, - 0x49, 0x03, 0x60, 0x08, 0x20, 0x01, 0x05, 0x00, - 0xf0, 0x21, 0xf9, 0x74, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xe8, 0xb5, 0xf0, 0x06, 0x07, - 0x0e, 0x3f, 0x06, 0x0c, 0x0e, 0x24, 0x20, 0x10, - 0x2f, 0x1f, 0xdc, 0x2c, 0x2c, 0x1f, 0xdc, 0x2a, - 0x1c, 0x39, 0x43, 0x21, 0x08, 0x49, 0xd2, 0x26, - 0x49, 0x14, 0x1c, 0x38, 0xf0, 0x21, 0xf9, 0x70, - 0x26, 0x01, 0x1c, 0x35, 0x40, 0xbd, 0x1c, 0x30, - 0x40, 0xa0, 0x1c, 0x04, 0x43, 0x28, 0xf0, 0x21, - 0xf9, 0x5a, 0xf0, 0x21, 0xf9, 0x5d, 0x43, 0xa8, - 0xf0, 0x21, 0xf9, 0x5e, 0xf0, 0x21, 0xf9, 0x58, - 0x43, 0xa0, 0xf0, 0x21, 0xf9, 0x59, 0x1c, 0x38, - 0xf0, 0x15, 0xfc, 0x02, 0x1c, 0x04, 0xd1, 0x07, - 0x21, 0x03, 0x05, 0x09, 0x20, 0x00, 0x1c, 0x3a, - 0x1c, 0x33, 0xf0, 0x16, 0xfa, 0xb3, 0x1c, 0x04, - 0xf7, 0xff, 0xfc, 0x92, 0x1c, 0x20, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x00, 0x2c, 0x0b, - 0xb5, 0xf0, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x06, 0x16, 0x0e, 0x36, 0x9f, 0x05, - 0x06, 0x38, 0x0e, 0x00, 0x22, 0x00, 0x21, 0x00, - 0xb4, 0x07, 0x21, 0x10, 0x1c, 0x1a, 0xb4, 0x06, - 0x23, 0x10, 0x1c, 0x20, 0x1c, 0x29, 0x1c, 0x32, - 0xf0, 0x00, 0xf8, 0x54, 0xb0, 0x05, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x06, 0x04, - 0x0e, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x06, 0x16, - 0x0e, 0x36, 0x9f, 0x05, 0x06, 0x38, 0x0e, 0x00, - 0x22, 0x00, 0x21, 0x00, 0xb4, 0x07, 0x21, 0x18, - 0x1c, 0x1a, 0xb4, 0x06, 0x23, 0x11, 0x1c, 0x20, - 0x1c, 0x29, 0x1c, 0x32, 0xf0, 0x00, 0xf8, 0x3a, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x06, 0x16, 0x0e, 0x36, 0x9f, 0x05, - 0x06, 0x38, 0x0e, 0x00, 0x22, 0x00, 0x21, 0x00, - 0xb4, 0x07, 0x21, 0x20, 0x1c, 0x1a, 0xb4, 0x06, - 0x23, 0x51, 0x1c, 0x20, 0x1c, 0x29, 0x1c, 0x32, - 0xf0, 0x00, 0xf8, 0x20, 0xb0, 0x05, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x06, 0x03, - 0x0e, 0x1b, 0x04, 0x0d, 0x0c, 0x2d, 0x06, 0x16, - 0x0e, 0x36, 0x9c, 0x09, 0x9f, 0x0a, 0x06, 0x20, - 0x0e, 0x00, 0x22, 0x00, 0x1c, 0x39, 0xb4, 0x07, - 0x21, 0x10, 0x9a, 0x06, 0xb4, 0x06, 0x1c, 0x18, - 0x23, 0x62, 0x1c, 0x29, 0x1c, 0x32, 0xf0, 0x00, - 0xf8, 0x05, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x9e, 0x09, - 0x9f, 0x0b, 0x06, 0x04, 0x0e, 0x24, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x88, 0x91, 0x00, 0x06, 0x15, - 0x0e, 0x2d, 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, - 0x06, 0x32, 0x0e, 0x12, 0x92, 0x02, 0x06, 0x38, - 0x0e, 0x00, 0x90, 0x03, 0xb0, 0x82, 0xf0, 0x21, - 0xf8, 0xbf, 0x0d, 0x40, 0xd2, 0x09, 0x20, 0xff, - 0x90, 0x00, 0xf0, 0x21, 0xf8, 0xb9, 0x23, 0x01, - 0x05, 0x1b, 0x43, 0x18, 0xf0, 0x21, 0xf8, 0xb8, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x03, - 0x08, 0x40, 0xd3, 0x02, 0x22, 0x12, 0x92, 0x01, - 0xe0, 0x01, 0x22, 0x11, 0x92, 0x01, 0x22, 0x01, - 0x1c, 0x11, 0x40, 0xa9, 0x4b, 0x5f, 0x1c, 0x0f, - 0x68, 0x18, 0x40, 0x07, 0xd0, 0x01, 0x27, 0x11, - 0xe0, 0xa2, 0x27, 0x00, 0x43, 0x08, 0x60, 0x18, - 0x23, 0x1c, 0x98, 0x05, 0x40, 0x18, 0x28, 0x1c, - 0xd1, 0x06, 0x21, 0x01, 0x20, 0x7d, 0x01, 0x00, - 0xf0, 0x15, 0xff, 0x60, 0x1c, 0x06, 0xe0, 0x0d, - 0x98, 0x05, 0x08, 0x40, 0xd3, 0x05, 0x21, 0x01, - 0x20, 0xc8, 0xf0, 0x15, 0xff, 0x57, 0x1c, 0x06, - 0xe0, 0x04, 0x21, 0x01, 0x20, 0x3c, 0xf0, 0x15, - 0xff, 0x51, 0x1c, 0x06, 0x20, 0x34, 0xf0, 0x03, - 0xf9, 0x57, 0x00, 0xaa, 0x92, 0x09, 0x49, 0x4c, - 0x91, 0x08, 0x50, 0x88, 0x00, 0xa1, 0x91, 0x07, - 0x48, 0x4a, 0x90, 0x06, 0x58, 0x40, 0x28, 0x00, - 0xd1, 0x05, 0x00, 0xb0, 0xf0, 0x03, 0xf9, 0x48, - 0x99, 0x07, 0x9a, 0x06, 0x50, 0x50, 0x98, 0x09, - 0x99, 0x08, 0x58, 0x08, 0x28, 0x00, 0xd0, 0x04, - 0x98, 0x06, 0x99, 0x07, 0x58, 0x40, 0x28, 0x00, - 0xd1, 0x01, 0x27, 0x13, 0xe0, 0x64, 0x99, 0x07, - 0x4a, 0x3f, 0x58, 0x51, 0x29, 0x00, 0xd1, 0x3a, - 0x9a, 0x01, 0xb4, 0x04, 0x23, 0x40, 0x1c, 0x31, - 0x1c, 0x22, 0xf0, 0x15, 0xff, 0xaf, 0xb0, 0x01, - 0x1c, 0x07, 0xd1, 0x17, 0x23, 0x03, 0x02, 0x5b, - 0x22, 0x01, 0x02, 0xd2, 0x21, 0x01, 0x1c, 0x20, - 0xf0, 0x0e, 0xf8, 0xf2, 0x22, 0x00, 0xb4, 0x04, - 0x22, 0x02, 0x99, 0x03, 0x9b, 0x02, 0x1c, 0x20, - 0xf0, 0x0d, 0xff, 0x26, 0xb0, 0x01, 0x1c, 0x07, - 0xd1, 0x04, 0x22, 0x01, 0x48, 0x2f, 0x55, 0x02, - 0x48, 0x2f, 0x55, 0x02, 0x2f, 0x00, 0xd1, 0x16, - 0x98, 0x16, 0x28, 0x00, 0xd0, 0x13, 0x21, 0x02, - 0x98, 0x16, 0xf0, 0x15, 0xfe, 0xff, 0x1c, 0x07, - 0x00, 0x80, 0xf0, 0x03, 0xf9, 0x05, 0x99, 0x07, - 0x4a, 0x28, 0x50, 0x50, 0x28, 0x00, 0xd0, 0x05, - 0x1c, 0x39, 0x1c, 0x22, 0xf0, 0x15, 0xff, 0x13, - 0x1c, 0x07, 0xe0, 0x00, 0x27, 0x13, 0x2f, 0x00, - 0xd1, 0x22, 0x98, 0x03, 0x09, 0x80, 0xd3, 0x06, - 0x20, 0x5c, 0xf0, 0x03, 0xf8, 0xf1, 0x28, 0x00, - 0xd1, 0x02, 0x27, 0x13, 0xe0, 0x00, 0x20, 0x00, - 0x1c, 0x02, 0x98, 0x05, 0x99, 0x17, 0xb4, 0x07, - 0x1c, 0x2a, 0xb4, 0x04, 0x98, 0x0d, 0x99, 0x0c, - 0x58, 0x08, 0x99, 0x18, 0x9a, 0x08, 0x9b, 0x07, - 0xf0, 0x00, 0xf9, 0x1c, 0xb0, 0x04, 0x2f, 0x00, - 0xd1, 0x06, 0x98, 0x09, 0x99, 0x08, 0x58, 0x08, - 0x1c, 0x21, 0xf0, 0x12, 0xf9, 0x93, 0x1c, 0x07, - 0x2f, 0x00, 0xd0, 0x03, 0x1c, 0x20, 0x1c, 0x29, - 0xf0, 0x00, 0xf8, 0x20, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0xf0, 0x20, 0xff, 0xf1, 0x4b, 0x0c, - 0x40, 0x18, 0xf0, 0x20, 0xff, 0xf1, 0x1c, 0x38, - 0xb0, 0x0a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x01, 0xf0, - 0x2e, 0x08, 0x01, 0xf4, 0x2e, 0x08, 0x02, 0x74, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x44, 0xf8, - 0x2e, 0x08, 0x44, 0xd8, 0x2e, 0x08, 0x02, 0xf4, - 0xff, 0xef, 0xff, 0xff, 0xb5, 0xf0, 0x06, 0x07, - 0x0e, 0x3f, 0x06, 0x0d, 0x0e, 0x2d, 0xb0, 0x83, - 0xf0, 0x20, 0xff, 0xce, 0x0d, 0x40, 0xd2, 0x09, - 0x20, 0xff, 0x90, 0x00, 0xf0, 0x20, 0xff, 0xc8, - 0x23, 0x01, 0x05, 0x1b, 0x43, 0x18, 0xf0, 0x20, - 0xff, 0xc7, 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, - 0x24, 0x00, 0x20, 0x01, 0x40, 0xa8, 0x1c, 0x02, - 0x49, 0x3f, 0x1c, 0x13, 0x68, 0x08, 0x40, 0x03, - 0xd0, 0x69, 0x43, 0xd2, 0x40, 0x10, 0x00, 0xae, - 0x60, 0x08, 0x4d, 0x3c, 0x59, 0xa8, 0x28, 0x00, - 0xd0, 0x62, 0x78, 0x81, 0x91, 0x02, 0x08, 0x49, - 0xd3, 0x02, 0x23, 0x12, 0x93, 0x01, 0xe0, 0x01, - 0x23, 0x11, 0x93, 0x01, 0x1c, 0x39, 0xf0, 0x12, - 0xf9, 0xad, 0x1c, 0x04, 0x59, 0xa8, 0x6b, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x03, 0xf8, 0x96, - 0x59, 0xa8, 0x6a, 0xc0, 0x28, 0x00, 0xd0, 0x01, - 0xf0, 0x03, 0xf8, 0x90, 0x59, 0xa8, 0xf0, 0x03, - 0xf8, 0x8d, 0x20, 0x00, 0x51, 0xa8, 0x00, 0xbd, - 0x48, 0x2b, 0x59, 0x40, 0x78, 0x80, 0x28, 0x00, - 0xd1, 0x40, 0x1c, 0x39, 0xf0, 0x15, 0xfc, 0xd2, - 0x2c, 0x00, 0xd1, 0x2a, 0x98, 0x02, 0x09, 0x80, - 0xd3, 0x0a, 0x21, 0x00, 0x1c, 0x3a, 0x48, 0x25, - 0xf0, 0x15, 0xfe, 0x6d, 0x28, 0x00, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x22, 0x00, 0xb4, 0x04, 0x22, 0x02, 0x9b, 0x02, - 0x1c, 0x38, 0x49, 0x1e, 0xf0, 0x0d, 0xfe, 0x54, - 0xb0, 0x01, 0x1c, 0x04, 0xd1, 0x11, 0x9a, 0x01, - 0xb4, 0x04, 0x26, 0x00, 0x21, 0x00, 0x1c, 0x3a, - 0x1c, 0x33, 0x48, 0x18, 0xf0, 0x15, 0xfe, 0xbe, - 0x1c, 0x04, 0xb0, 0x01, 0x48, 0x16, 0x55, 0xc6, - 0x48, 0x16, 0x55, 0xc6, 0x1c, 0x38, 0xf7, 0xff, - 0xfa, 0xc5, 0x4f, 0x15, 0x59, 0x78, 0xf0, 0x03, - 0xf8, 0x51, 0x26, 0x00, 0x51, 0x7e, 0x37, 0x80, - 0x59, 0x78, 0x28, 0x00, 0xd0, 0x04, 0xf0, 0x03, - 0xf8, 0x49, 0x51, 0x7e, 0xe0, 0x02, 0xe0, 0x00, - 0xe0, 0x00, 0x24, 0x12, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0xf0, 0x20, 0xff, 0x45, 0x4b, 0x0b, - 0x40, 0x18, 0xf0, 0x20, 0xff, 0x45, 0x1c, 0x20, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xf0, 0x2e, 0x08, 0x01, 0xf4, - 0x2e, 0x08, 0x9b, 0xc8, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x44, 0xf8, 0x2e, 0x08, 0x44, 0xd8, - 0x2e, 0x08, 0x02, 0x74, 0xff, 0xef, 0xff, 0xff, - 0xb5, 0xb0, 0x06, 0x00, 0x0e, 0x00, 0x00, 0x80, - 0x1c, 0x0c, 0x1c, 0x17, 0xb0, 0xad, 0x49, 0x1c, - 0x58, 0x08, 0x90, 0x04, 0x78, 0x81, 0x23, 0x04, - 0x40, 0x19, 0x25, 0x00, 0x29, 0x00, 0xd0, 0x0b, - 0xa9, 0x25, 0xf0, 0x12, 0xfd, 0x6f, 0xab, 0x00, - 0x80, 0x5d, 0xa8, 0x25, 0x90, 0x24, 0x46, 0x68, - 0x21, 0x00, 0xf0, 0x12, 0xfd, 0x8e, 0xe0, 0x0c, - 0x78, 0x00, 0x0a, 0x00, 0xd3, 0x04, 0x20, 0x01, - 0x03, 0x00, 0xab, 0x00, 0x80, 0x58, 0xe0, 0x03, - 0x20, 0x01, 0x02, 0x80, 0xab, 0x00, 0x80, 0x58, - 0x20, 0x00, 0x28, 0x00, 0xd1, 0x0e, 0xa8, 0x00, - 0x88, 0x40, 0x60, 0x38, 0xf0, 0x02, 0xff, 0xd4, - 0x60, 0x20, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x13, - 0xe0, 0x06, 0x1c, 0x01, 0x46, 0x68, 0xf0, 0x12, - 0xfd, 0x70, 0xe0, 0x01, 0x60, 0x25, 0x60, 0x3d, - 0xb0, 0x2d, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x01, 0xf4, 0xb4, 0xf0, 0x06, 0x12, - 0x0e, 0x12, 0x06, 0x1b, 0x0e, 0x1b, 0x9c, 0x06, - 0x9f, 0x07, 0x9d, 0x05, 0x9e, 0x04, 0x06, 0x36, - 0x0e, 0x36, 0x06, 0x2d, 0xd0, 0x02, 0x25, 0x80, - 0x70, 0x05, 0xe0, 0x01, 0x25, 0x00, 0x70, 0x05, - 0x25, 0x00, 0x70, 0x45, 0x80, 0x85, 0x72, 0x05, - 0x70, 0xc6, 0x70, 0x83, 0x62, 0xc4, 0x63, 0x07, - 0x27, 0x00, 0x23, 0x00, 0x2a, 0x00, 0xdd, 0x10, - 0x5c, 0xcc, 0x19, 0xc5, 0x73, 0x2c, 0x18, 0xcc, - 0x78, 0x66, 0x1c, 0x7c, 0x06, 0x25, 0x0e, 0x2d, - 0x1c, 0x3c, 0x18, 0x24, 0x77, 0x26, 0x33, 0x02, - 0x06, 0x1b, 0x0e, 0x1b, 0x1c, 0x2f, 0x42, 0x93, - 0xdb, 0xee, 0xbc, 0xf0, 0x47, 0x70, 0xb5, 0xf0, - 0xb0, 0xac, 0x21, 0x00, 0xa8, 0x07, 0xf0, 0x12, - 0xfb, 0xf5, 0xa8, 0x07, 0x78, 0x00, 0x90, 0x06, - 0x28, 0x00, 0xd0, 0x4b, 0x24, 0x00, 0x98, 0x06, - 0x28, 0x00, 0xdd, 0x43, 0xa8, 0x07, 0xf0, 0x12, - 0xff, 0xbc, 0x00, 0xa1, 0xa8, 0x07, 0x18, 0x08, - 0x69, 0x07, 0x78, 0xfe, 0xad, 0x07, 0x88, 0x6d, - 0x78, 0xb8, 0x09, 0xc0, 0xd3, 0x12, 0xa8, 0x07, - 0xa9, 0x01, 0xf0, 0x16, 0xfa, 0x0b, 0x78, 0xb8, - 0x08, 0x40, 0xd3, 0x05, 0x46, 0x6a, 0x1c, 0x38, - 0xa9, 0x01, 0xf0, 0x16, 0xfa, 0x38, 0xe0, 0x08, - 0x46, 0x6a, 0x1c, 0x38, 0xa9, 0x01, 0xf0, 0x16, - 0xfa, 0x75, 0xe0, 0x02, 0x20, 0x40, 0xab, 0x00, - 0x70, 0x18, 0xa8, 0x00, 0x78, 0x00, 0x09, 0xc0, - 0xd3, 0x16, 0x1c, 0x28, 0xf7, 0xfd, 0xfe, 0xf8, - 0x1c, 0x07, 0xd0, 0x11, 0xa8, 0x07, 0x1c, 0x39, - 0xf0, 0x12, 0xfe, 0x2e, 0x28, 0x00, 0xd1, 0x09, - 0x1c, 0x30, 0x1c, 0x29, 0x1c, 0x3a, 0xf7, 0xfd, - 0xff, 0x47, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfd, - 0xff, 0x39, 0xe0, 0x01, 0xf7, 0xfd, 0xff, 0x36, - 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, 0x98, 0x06, - 0x42, 0x84, 0xdb, 0xbb, 0xa8, 0x07, 0xf0, 0x12, - 0xfc, 0x97, 0xe7, 0xaa, 0xf7, 0xff, 0xfa, 0x5c, - 0xb0, 0x2c, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0xb0, 0xad, 0x21, 0x00, 0xa8, 0x08, - 0xf0, 0x12, 0xfb, 0x98, 0x22, 0x05, 0x21, 0x16, - 0x1c, 0x04, 0xf0, 0x03, 0xfd, 0x6a, 0x2c, 0xb2, - 0xd1, 0x03, 0x21, 0x00, 0xa8, 0x08, 0xf0, 0x12, - 0xfb, 0x47, 0xa8, 0x08, 0x78, 0x00, 0x90, 0x06, - 0x28, 0x00, 0xd0, 0x73, 0x25, 0x00, 0x98, 0x06, - 0x28, 0x00, 0xdd, 0x57, 0xa8, 0x08, 0xf0, 0x12, - 0xff, 0x54, 0x00, 0xa9, 0xa8, 0x08, 0x18, 0x08, - 0x69, 0x07, 0x78, 0xf8, 0x90, 0x07, 0xae, 0x08, - 0x88, 0x76, 0x78, 0xb8, 0x09, 0xc0, 0xd3, 0x12, - 0xa8, 0x08, 0xa9, 0x01, 0xf0, 0x16, 0xf9, 0xa2, - 0x78, 0xb8, 0x08, 0x40, 0xd3, 0x05, 0x46, 0x6a, - 0x1c, 0x38, 0xa9, 0x01, 0xf0, 0x16, 0xf9, 0xcf, - 0xe0, 0x08, 0x46, 0x6a, 0x1c, 0x38, 0xa9, 0x01, - 0xf0, 0x16, 0xfa, 0x0c, 0xe0, 0x02, 0x20, 0x40, - 0xab, 0x00, 0x70, 0x18, 0xa8, 0x00, 0x78, 0x00, - 0x09, 0xc0, 0xd3, 0x29, 0x78, 0xb8, 0x09, 0x80, - 0xd3, 0x0f, 0xa8, 0x08, 0xa9, 0x01, 0xf0, 0x16, - 0xfb, 0x69, 0x1c, 0x04, 0xa8, 0x00, 0x78, 0x00, - 0x08, 0x80, 0xd2, 0x02, 0x78, 0xb8, 0x08, 0x80, - 0xd3, 0x1a, 0x1c, 0x38, 0xf0, 0x16, 0xfc, 0x70, - 0xe0, 0x16, 0x1c, 0x30, 0xf7, 0xfd, 0xfe, 0x7c, - 0x1c, 0x07, 0xd0, 0x11, 0xa8, 0x08, 0x1c, 0x39, - 0xf0, 0x12, 0xfd, 0xb2, 0x28, 0x00, 0xd1, 0x09, - 0x98, 0x07, 0x1c, 0x31, 0x1c, 0x3a, 0xf7, 0xfd, - 0xfe, 0xcb, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfd, - 0xfe, 0xbd, 0xe0, 0x01, 0xf7, 0xfd, 0xfe, 0xba, - 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x06, - 0x42, 0x85, 0xdb, 0xa7, 0x98, 0x06, 0x28, 0x00, - 0xd0, 0x08, 0xa8, 0x08, 0xf0, 0x12, 0xfc, 0x18, - 0x2c, 0xb2, 0xd1, 0x03, 0x21, 0x00, 0xa8, 0x08, - 0xf0, 0x12, 0xfa, 0xda, 0xf7, 0xff, 0xf9, 0x5c, - 0x21, 0x00, 0xa8, 0x08, 0xf7, 0xff, 0xfb, 0x88, - 0x1c, 0x04, 0xa8, 0x08, 0x78, 0x00, 0x90, 0x06, - 0x28, 0x00, 0xe0, 0x00, 0xe0, 0x00, 0xd1, 0x89, - 0xf7, 0xff, 0xf9, 0xca, 0xb0, 0x2d, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x26, 0x00, - 0x48, 0x28, 0x71, 0x06, 0x70, 0x06, 0x20, 0x00, - 0x4f, 0x27, 0x4a, 0x28, 0x49, 0x28, 0x00, 0x43, - 0x52, 0xd6, 0x52, 0xfe, 0x00, 0x83, 0x50, 0xce, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x28, 0x1d, - 0xdb, 0xf5, 0x28, 0x20, 0xda, 0x08, 0x00, 0x43, - 0x52, 0xd6, 0x00, 0x83, 0x50, 0xce, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x20, 0xdb, 0xf6, - 0x20, 0x01, 0x02, 0x80, 0xf0, 0x20, 0xfd, 0xa3, - 0xf0, 0x20, 0xfd, 0xa6, 0x4b, 0x1b, 0x40, 0x18, - 0xf0, 0x20, 0xfd, 0xa6, 0x49, 0x1a, 0x20, 0x0a, - 0xf0, 0x20, 0xfd, 0xa6, 0x21, 0x00, 0x4f, 0x19, - 0x20, 0xff, 0x4a, 0x19, 0x00, 0x4b, 0x18, 0x5b, - 0x01, 0x1b, 0x52, 0xd7, 0x18, 0x9b, 0x70, 0x98, - 0x70, 0xde, 0x71, 0x1e, 0x1d, 0xdc, 0x34, 0x19, - 0x73, 0x26, 0x71, 0x5e, 0x1c, 0x1d, 0x23, 0x06, - 0x73, 0x63, 0x23, 0x00, 0x00, 0xdc, 0x19, 0x2c, - 0x81, 0xa6, 0x81, 0xe6, 0x33, 0x01, 0x06, 0x1b, - 0x0e, 0x1b, 0x60, 0xa6, 0x2b, 0x04, 0xdb, 0xf5, - 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x08, - 0xdb, 0xe0, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xbc, - 0x2e, 0x08, 0x4a, 0x60, 0x2e, 0x08, 0x4a, 0x20, - 0x2e, 0x08, 0x46, 0x98, 0xff, 0xff, 0xfb, 0xff, - 0x2e, 0x00, 0x30, 0x45, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x45, 0x18, 0xb5, 0xf0, 0x06, 0x00, - 0x0e, 0x00, 0xb0, 0x83, 0x90, 0x00, 0x04, 0x09, - 0x0c, 0x09, 0x91, 0x01, 0x06, 0x10, 0x0e, 0x00, - 0x04, 0x1c, 0x0c, 0x24, 0x27, 0x00, 0x49, 0x5a, - 0x00, 0x7b, 0x19, 0xdb, 0x01, 0x1b, 0x5a, 0xcd, - 0x4b, 0x58, 0x42, 0x9d, 0xd1, 0x01, 0x1c, 0x3a, - 0xe0, 0x04, 0x1c, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, - 0x2f, 0x08, 0xdb, 0xf1, 0x2f, 0x08, 0xd1, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x46, 0x4f, 0x50, - 0x97, 0x02, 0x5b, 0xbb, 0x2b, 0x00, 0xd0, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x23, 0x01, 0x9f, 0x02, - 0x53, 0xbb, 0x00, 0x53, 0x18, 0x9a, 0x01, 0x12, - 0x18, 0x57, 0x80, 0x38, 0x20, 0x14, 0xf0, 0x02, - 0xfe, 0x03, 0x1c, 0x01, 0x62, 0xb8, 0x20, 0x00, - 0x29, 0x00, 0xd1, 0x08, 0x49, 0x41, 0x80, 0x39, - 0x9f, 0x02, 0x53, 0xb8, 0x43, 0xc0, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x0d, - 0x21, 0xff, 0x02, 0x09, 0x40, 0x21, 0x12, 0x08, - 0x28, 0x09, 0xd2, 0x1f, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x1b, 0x04, 0x06, 0x09, - 0x0c, 0x0f, 0x12, 0x15, 0x18, 0x00, 0x24, 0xb8, - 0xe0, 0x16, 0x24, 0xff, 0x34, 0x71, 0xe0, 0x13, - 0x24, 0x01, 0x02, 0xa4, 0xe0, 0x10, 0x24, 0x01, - 0x02, 0xe4, 0xe0, 0x0d, 0x24, 0x01, 0x03, 0x24, - 0xe0, 0x0a, 0x24, 0x01, 0x03, 0x64, 0xe0, 0x07, - 0x24, 0x01, 0x03, 0xa4, 0xe0, 0x04, 0x24, 0x01, - 0x03, 0xe4, 0xe0, 0x01, 0x24, 0x01, 0x02, 0xa4, - 0x80, 0xac, 0x88, 0xa8, 0x00, 0x80, 0xf0, 0x02, - 0xfd, 0xc7, 0x60, 0x28, 0x28, 0x00, 0xd1, 0x0d, - 0x48, 0x24, 0x80, 0x38, 0x20, 0x00, 0x9f, 0x02, - 0x53, 0xb8, 0x1c, 0x28, 0xf0, 0x02, 0xfd, 0xde, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x00, 0x70, 0xb8, - 0x26, 0x00, 0x88, 0x38, 0x00, 0x80, 0x49, 0x1d, - 0x50, 0x0e, 0x20, 0x00, 0x1c, 0x01, 0x43, 0x61, - 0x68, 0x2a, 0x18, 0x8a, 0x00, 0xc1, 0x19, 0xc9, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x60, 0x8a, - 0x28, 0x04, 0xdb, 0xf3, 0x20, 0xb8, 0x1c, 0x21, - 0xf0, 0x1b, 0xf9, 0x30, 0x1d, 0xfc, 0x34, 0x19, - 0x73, 0x20, 0x72, 0x2e, 0x78, 0xb8, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, 0xf0, 0x0d, - 0xfd, 0x63, 0x22, 0x00, 0xb4, 0x04, 0x78, 0xb8, - 0x23, 0x05, 0x22, 0x02, 0x99, 0x02, 0xf0, 0x0d, - 0xfb, 0x97, 0x22, 0x04, 0x7b, 0x21, 0xb0, 0x01, - 0xb4, 0x06, 0x78, 0xb9, 0x22, 0x0a, 0x20, 0x85, - 0x6a, 0xbb, 0xf0, 0x0d, 0xfd, 0xdf, 0x1c, 0x30, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x45, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x46, 0x98, - 0xb5, 0xf0, 0xb0, 0x82, 0x46, 0x68, 0xf0, 0x0e, - 0xfb, 0x73, 0x21, 0x00, 0x4f, 0x24, 0x4b, 0x25, - 0x93, 0x01, 0x4a, 0x25, 0x00, 0x48, 0x18, 0x40, - 0x01, 0x00, 0x19, 0xc0, 0x78, 0x84, 0x9d, 0x00, - 0x40, 0xe5, 0x07, 0xeb, 0x0f, 0xdb, 0x2b, 0x01, - 0xd1, 0x31, 0x6a, 0x83, 0x7a, 0x1c, 0x2c, 0xa4, - 0xd0, 0x01, 0x2c, 0xa5, 0xd1, 0x2b, 0x1d, 0xc4, - 0x34, 0x19, 0xe0, 0x0e, 0x79, 0x05, 0x73, 0x65, - 0x88, 0xde, 0x79, 0x05, 0x00, 0xed, 0x18, 0x2d, - 0x81, 0xae, 0x79, 0x05, 0x35, 0x01, 0x07, 0xad, - 0x0f, 0xad, 0x71, 0x05, 0x78, 0x15, 0x35, 0x01, - 0x70, 0x15, 0x7a, 0x9d, 0x7b, 0x66, 0x42, 0xb5, - 0xd0, 0x02, 0x79, 0x45, 0x2d, 0x00, 0xd0, 0xe9, - 0x7a, 0x1b, 0x2b, 0xa5, 0xd1, 0x0f, 0x79, 0x43, - 0x07, 0xdc, 0x0f, 0xe4, 0x2c, 0x01, 0xd0, 0x0a, - 0x1c, 0x1c, 0x23, 0x01, 0x43, 0x23, 0x71, 0x43, - 0x88, 0x00, 0x00, 0x80, 0x9b, 0x01, 0x18, 0xc0, - 0x68, 0x03, 0x33, 0x01, 0x60, 0x03, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0x29, 0x08, 0xdb, 0xbd, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x45, 0x18, 0x2e, 0x08, 0x46, 0x98, - 0x2e, 0x08, 0x03, 0xbc, 0xb5, 0xf0, 0x04, 0x05, - 0x0c, 0x2d, 0x20, 0x00, 0x4c, 0x31, 0x00, 0x42, - 0x18, 0x12, 0x01, 0x12, 0x5a, 0xa2, 0x42, 0xaa, - 0xd1, 0x01, 0x1c, 0x01, 0xe0, 0x04, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf2, - 0x28, 0x08, 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x48, - 0x18, 0x40, 0x01, 0x00, 0x19, 0x07, 0x78, 0xb8, - 0x49, 0x25, 0xf0, 0x0d, 0xfd, 0xab, 0x79, 0x78, - 0x23, 0x02, 0x43, 0x18, 0x71, 0x78, 0x78, 0xbe, - 0x20, 0xff, 0x70, 0xb8, 0x21, 0x00, 0x1d, 0xf8, - 0x30, 0x19, 0x73, 0x01, 0x21, 0x06, 0x73, 0x41, - 0x78, 0xf8, 0x79, 0x39, 0x42, 0x88, 0xd1, 0x11, - 0x79, 0x78, 0x07, 0xc0, 0x0f, 0xc0, 0x28, 0x01, - 0xd0, 0x0c, 0x20, 0x00, 0x70, 0xf8, 0x71, 0x38, - 0x71, 0x78, 0x48, 0x17, 0x80, 0x38, 0x6a, 0xb8, - 0x68, 0x00, 0xf0, 0x02, 0xfc, 0xff, 0x6a, 0xb8, - 0xf0, 0x02, 0xfc, 0xfc, 0x4f, 0x12, 0x00, 0x68, - 0x49, 0x12, 0x52, 0x0f, 0x00, 0x71, 0x4a, 0x12, - 0x52, 0x57, 0x21, 0x00, 0x4a, 0x11, 0x52, 0x11, - 0x1c, 0x30, 0x1c, 0x29, 0xf0, 0x02, 0xff, 0xfa, - 0x20, 0x00, 0x00, 0x41, 0x18, 0x09, 0x01, 0x09, - 0x5a, 0x61, 0x42, 0xb9, 0xd1, 0x04, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x08, 0xdb, 0xf4, - 0x28, 0x08, 0xd1, 0x03, 0x21, 0x00, 0x48, 0x08, - 0x71, 0x01, 0x70, 0x01, 0x20, 0x00, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x45, 0x18, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x49, 0xa8, 0x2e, 0x08, 0x4a, 0x20, - 0x2e, 0x08, 0x03, 0xbc, 0xb5, 0x80, 0x1c, 0x07, - 0x30, 0x28, 0xf0, 0x02, 0xfc, 0xa5, 0x49, 0x07, - 0x64, 0x88, 0x65, 0x08, 0x65, 0x48, 0x19, 0xc0, - 0x64, 0xc8, 0x20, 0x00, 0x64, 0x08, 0x64, 0x4f, - 0x49, 0x03, 0x84, 0x08, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x01, 0x00, 0xb5, 0x80, 0x1c, 0x07, - 0x30, 0x28, 0xf0, 0x02, 0xfc, 0x8d, 0x49, 0x06, - 0x66, 0x08, 0x66, 0x88, 0x66, 0xc8, 0x19, 0xc0, - 0x66, 0x48, 0x20, 0x00, 0x65, 0x88, 0x65, 0xcf, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x03, 0xc4, 0xb4, 0x80, 0x04, 0x09, - 0x0c, 0x09, 0x88, 0x02, 0x42, 0x8a, 0xd0, 0x18, - 0x4a, 0x0d, 0x8f, 0x13, 0x2b, 0x01, 0xd0, 0x04, - 0x23, 0x01, 0x87, 0x13, 0x8f, 0x17, 0x2f, 0x01, - 0xd1, 0xfb, 0x88, 0x03, 0x42, 0x8b, 0xd0, 0x03, - 0x80, 0x01, 0x88, 0x03, 0x42, 0x8b, 0xd1, 0xfb, - 0x8f, 0x11, 0x1c, 0x10, 0x29, 0x00, 0xd0, 0x04, - 0x21, 0x00, 0x87, 0x01, 0x8f, 0x02, 0x2a, 0x00, - 0xd1, 0xfb, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2c, 0x00, 0x1f, 0xc0, 0xb5, 0x80, 0x48, 0x27, - 0x8f, 0x40, 0x28, 0x00, 0xd1, 0x47, 0x4f, 0x26, - 0x88, 0x38, 0x12, 0x00, 0x4a, 0x25, 0x28, 0x06, - 0xd0, 0x21, 0xdc, 0x08, 0x28, 0x06, 0xd2, 0x36, - 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x3a, 0x09, 0x09, 0x15, 0x32, 0x09, 0x28, 0x0a, - 0xd0, 0x1b, 0xdc, 0x08, 0x28, 0x07, 0xd0, 0x15, - 0x28, 0x09, 0xd1, 0x28, 0x88, 0x79, 0x88, 0x38, - 0xf0, 0x00, 0xf8, 0xd4, 0xe0, 0x27, 0x28, 0x0b, - 0xd0, 0x1c, 0x28, 0x80, 0xd1, 0x1f, 0xf0, 0x00, - 0xf9, 0x25, 0xe0, 0x20, 0x88, 0x79, 0x88, 0x38, - 0xf0, 0x00, 0xf8, 0x2c, 0xe0, 0x1b, 0xf0, 0x00, - 0xf9, 0x75, 0xe0, 0x18, 0xf0, 0x00, 0xf9, 0xe0, - 0xe0, 0x15, 0x88, 0x38, 0xb0, 0x84, 0xab, 0x00, - 0x80, 0x18, 0x88, 0x78, 0x70, 0x98, 0x92, 0x01, - 0x46, 0x69, 0x20, 0x75, 0xf0, 0x08, 0xf8, 0x04, - 0xb0, 0x04, 0xe0, 0x08, 0x88, 0x79, 0x88, 0x38, - 0xf0, 0x00, 0xfc, 0x50, 0xe0, 0x03, 0x48, 0x08, - 0x8e, 0x81, 0x31, 0x01, 0x86, 0x81, 0x21, 0x00, - 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x8f, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x01, 0x00, - 0x2e, 0x08, 0x04, 0x04, 0xb5, 0xf0, 0x04, 0x04, - 0x0c, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x1c, 0x17, - 0xf0, 0x20, 0xfb, 0x5e, 0x2d, 0x10, 0xdd, 0x03, - 0x20, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x68, 0x10, 0x40, 0x00, 0x40, 0x04, 0x01, - 0x0c, 0x09, 0x1c, 0x88, 0x00, 0x40, 0x1d, 0x02, - 0x48, 0x1b, 0x6c, 0x03, 0x18, 0x9d, 0x6c, 0x46, - 0x4b, 0x1a, 0x42, 0xb5, 0xdd, 0x08, 0x88, 0x19, - 0x1c, 0x18, 0x23, 0x20, 0x43, 0x19, 0x80, 0x01, - 0x20, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x64, 0x05, 0x35, 0x28, 0x42, 0xb5, 0xdd, 0x04, - 0x88, 0x1e, 0x1c, 0x1d, 0x23, 0x10, 0x43, 0x33, - 0x80, 0x2b, 0x6d, 0x03, 0x80, 0x9c, 0x6d, 0x04, - 0x80, 0xe2, 0x23, 0x00, 0x29, 0x00, 0xdd, 0x08, - 0x88, 0x3d, 0x00, 0x5c, 0x6d, 0x06, 0x19, 0xa4, - 0x81, 0x25, 0x33, 0x01, 0x37, 0x02, 0x42, 0x8b, - 0xdb, 0xf6, 0x6d, 0x01, 0x18, 0x8a, 0x6c, 0xc3, - 0x42, 0x9a, 0xd9, 0x00, 0x6c, 0x82, 0x60, 0x0a, - 0x65, 0x02, 0xf0, 0x20, 0xfb, 0x53, 0x20, 0x00, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x03, 0xc4, 0x2c, 0x00, 0x00, 0xf8, - 0xb4, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x08, - 0x0c, 0x00, 0x28, 0x10, 0xdd, 0x02, 0x20, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x30, 0x01, 0x4f, 0x1c, - 0x40, 0x07, 0x1c, 0xb8, 0x00, 0x40, 0x1d, 0x01, - 0x48, 0x1a, 0x6d, 0x83, 0x18, 0x5d, 0x6d, 0xc6, - 0x4b, 0x19, 0x42, 0xb5, 0xdd, 0x07, 0x88, 0x19, - 0x1c, 0x18, 0x23, 0x02, 0x43, 0x19, 0x80, 0x01, - 0x20, 0x01, 0xbc, 0xf0, 0x47, 0x70, 0x65, 0x85, - 0x35, 0x28, 0x42, 0xb5, 0xdd, 0x04, 0x88, 0x1e, - 0x1c, 0x1d, 0x23, 0x01, 0x43, 0x33, 0x80, 0x2b, - 0x6e, 0x83, 0x80, 0x9c, 0x6e, 0x84, 0x80, 0xe1, - 0x23, 0x00, 0x2f, 0x00, 0xdd, 0x08, 0x88, 0x15, - 0x00, 0x5c, 0x6e, 0x86, 0x19, 0xa4, 0x81, 0x25, - 0x32, 0x02, 0x33, 0x01, 0x42, 0xbb, 0xdb, 0xf6, - 0x6e, 0x82, 0x18, 0x51, 0x6e, 0x43, 0x42, 0x99, - 0xd3, 0x00, 0x6e, 0x01, 0x60, 0x11, 0x66, 0x81, - 0x20, 0x00, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xfe, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0xb0, 0x04, 0x04, - 0x0c, 0x24, 0x04, 0x0d, 0x0c, 0x2d, 0x1c, 0x17, - 0xf0, 0x20, 0xfa, 0xc2, 0x1c, 0x20, 0x1c, 0x29, - 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0xa9, 0x1c, 0x07, - 0xf0, 0x20, 0xfa, 0xf0, 0x1c, 0x38, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0xb4, 0xf0, 0x04, 0x04, - 0x0c, 0x24, 0x04, 0x09, 0x0c, 0x09, 0x29, 0x08, - 0xdd, 0x02, 0x20, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x00, 0x88, 0x1d, 0xc7, 0x37, 0x01, 0x48, 0x19, - 0x6d, 0x83, 0x19, 0xdd, 0x6d, 0xc6, 0x4b, 0x18, - 0x42, 0xb5, 0xdd, 0x07, 0x88, 0x19, 0x1c, 0x18, - 0x23, 0x02, 0x43, 0x19, 0x80, 0x01, 0x20, 0x01, - 0xbc, 0xf0, 0x47, 0x70, 0x65, 0x85, 0x35, 0x28, - 0x42, 0xb5, 0xdd, 0x04, 0x88, 0x1e, 0x1c, 0x1d, - 0x23, 0x01, 0x43, 0x33, 0x80, 0x2b, 0x6e, 0x83, - 0x80, 0x9c, 0x6e, 0x84, 0x80, 0xe7, 0x23, 0x00, - 0x6e, 0x84, 0x29, 0x00, 0xdd, 0x06, 0xca, 0x40, - 0x00, 0x9d, 0x19, 0x2d, 0x60, 0xae, 0x33, 0x01, - 0x42, 0x8b, 0xdb, 0xf8, 0x6e, 0x81, 0x19, 0xca, - 0x6e, 0x43, 0x42, 0x9a, 0xd3, 0x00, 0x6e, 0x02, - 0x60, 0x0a, 0x66, 0x82, 0x20, 0x00, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x48, 0x28, - 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x4f, 0x27, - 0x28, 0x01, 0xd0, 0x13, 0x28, 0x02, 0xd0, 0x1a, - 0x28, 0x03, 0xd1, 0x0c, 0x68, 0x38, 0x88, 0x41, - 0x29, 0x0e, 0xdb, 0x02, 0x88, 0x41, 0x29, 0x0f, - 0xdd, 0x2f, 0x88, 0x01, 0x04, 0x09, 0x88, 0x40, - 0x43, 0x08, 0xf0, 0x10, 0xfd, 0x0f, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x68, 0x38, 0x88, 0x82, - 0x88, 0x41, 0x88, 0x00, 0xf0, 0x13, 0xfb, 0xee, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x68, 0x38, - 0x88, 0x81, 0x04, 0x09, 0x88, 0xc2, 0x43, 0x11, - 0x88, 0x02, 0x04, 0x12, 0x88, 0x40, 0x43, 0x10, - 0xf0, 0x13, 0xf8, 0x92, 0x68, 0x38, 0x88, 0x41, - 0x29, 0x0e, 0xd1, 0x08, 0x88, 0x81, 0x04, 0x09, - 0x88, 0xc0, 0x43, 0x08, 0xf0, 0x10, 0xfb, 0x8c, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, - 0xf0, 0x10, 0xfb, 0x86, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x88, 0x41, 0x48, 0x08, 0x29, 0x0e, - 0xd1, 0x02, 0x21, 0x00, 0x60, 0x01, 0xe0, 0x01, - 0x21, 0x01, 0x60, 0x01, 0x68, 0x00, 0xf0, 0x00, - 0xfb, 0xb7, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x00, 0xfc, 0x2e, 0x08, 0x03, 0xc4, - 0x2e, 0x08, 0x04, 0xf8, 0xb5, 0x90, 0x48, 0x31, - 0x88, 0x00, 0x06, 0x04, 0x0e, 0x24, 0x48, 0x30, - 0x22, 0x03, 0x21, 0x02, 0x4f, 0x2f, 0x2c, 0x08, - 0xd2, 0x4f, 0xa3, 0x02, 0x5d, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x4b, 0x10, 0x16, - 0x1c, 0x28, 0x34, 0x3f, 0x68, 0x39, 0x88, 0x49, - 0x06, 0x09, 0x0e, 0x09, 0x88, 0x00, 0x06, 0x00, - 0x0e, 0x00, 0xf0, 0x03, 0xfa, 0x8d, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x03, 0xf7, 0xfe, - 0xf8, 0x9f, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x02, 0xf7, 0xfe, 0xf8, 0x99, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x88, 0x00, 0x4b, 0x1e, - 0x28, 0x00, 0xd0, 0x03, 0x60, 0x1a, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x60, 0x19, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x88, 0x00, 0x4b, 0x19, - 0x28, 0x00, 0xd0, 0x03, 0x60, 0x1a, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x60, 0x19, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x02, 0xfe, 0x4c, - 0x68, 0x39, 0x88, 0x4a, 0x1d, 0x08, 0x88, 0x09, - 0xf7, 0xfe, 0xf9, 0x10, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x38, 0x88, 0x81, 0x04, 0x09, - 0x88, 0xc2, 0x18, 0x8a, 0x88, 0x01, 0x04, 0x09, - 0x88, 0x40, 0x50, 0x0a, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1d, 0xf8, 0x30, 0x39, 0x8e, 0x81, - 0x31, 0x01, 0x86, 0x81, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x00, 0xfc, - 0x2c, 0x00, 0x01, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0x6e, 0x00, 0x13, 0x00, 0x6e, 0x00, 0x12, 0x00, - 0xb5, 0x90, 0xb0, 0x84, 0x48, 0x73, 0x88, 0x00, - 0x06, 0x00, 0x0e, 0x00, 0x4c, 0x72, 0x4f, 0x73, - 0x28, 0x0a, 0xd2, 0x60, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x04, 0x0e, 0x16, 0x39, - 0x5d, 0x85, 0x8f, 0xb6, 0xbe, 0xcc, 0xf0, 0x10, - 0xfe, 0xc7, 0x90, 0x03, 0x14, 0x00, 0x68, 0x39, - 0x80, 0x08, 0x98, 0x03, 0x68, 0x39, 0x80, 0x48, - 0xe0, 0xc7, 0x20, 0x1e, 0xa9, 0x03, 0xf0, 0x10, - 0xfd, 0xc9, 0x98, 0x03, 0x68, 0x39, 0x80, 0x08, - 0xe0, 0xbf, 0x1c, 0x20, 0xf0, 0x13, 0xf9, 0xc0, - 0x20, 0x00, 0x00, 0x81, 0x58, 0x61, 0x00, 0x42, - 0x68, 0x3b, 0x52, 0x99, 0x30, 0x01, 0x28, 0x04, - 0xdd, 0xf7, 0x20, 0x07, 0x00, 0x81, 0x58, 0x61, - 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, - 0x87, 0x91, 0x30, 0x01, 0x28, 0x0b, 0xdd, 0xf5, - 0x20, 0x0d, 0x00, 0x81, 0x58, 0x61, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, 0x87, 0x51, - 0x30, 0x01, 0x28, 0x12, 0xdd, 0xf5, 0xe0, 0x9c, - 0x20, 0x13, 0x00, 0x81, 0x58, 0x61, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, 0x83, 0x51, - 0x30, 0x01, 0x28, 0x15, 0xdd, 0xf5, 0x20, 0x00, - 0x00, 0x81, 0x19, 0x09, 0x6d, 0x89, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x80, 0xd1, 0x30, 0x01, - 0x28, 0x0a, 0xdd, 0xf5, 0x20, 0x00, 0x00, 0x81, - 0x19, 0x09, 0x31, 0x80, 0x68, 0x49, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x83, 0x91, 0x30, 0x01, - 0x28, 0x01, 0xdd, 0xf4, 0xe0, 0x79, 0xe0, 0x73, - 0x20, 0x02, 0x00, 0x81, 0x19, 0x09, 0x31, 0x80, - 0x68, 0x49, 0x00, 0x42, 0x68, 0x3b, 0x18, 0xd2, - 0x3a, 0x40, 0x87, 0x91, 0x30, 0x01, 0x28, 0x05, - 0xdd, 0xf3, 0x20, 0x09, 0x00, 0x81, 0x19, 0x09, - 0x31, 0x80, 0x68, 0x49, 0x00, 0x42, 0x68, 0x3b, - 0x18, 0xd2, 0x3a, 0x40, 0x86, 0xd1, 0x30, 0x01, - 0x28, 0x0f, 0xdd, 0xf3, 0x20, 0x11, 0x00, 0x81, - 0x19, 0x09, 0x31, 0x80, 0x68, 0x49, 0x00, 0x42, - 0x68, 0x3b, 0x18, 0xd2, 0x3a, 0x40, 0x86, 0x91, - 0x30, 0x01, 0x28, 0x13, 0xdd, 0xf3, 0xe0, 0x50, - 0x22, 0x00, 0x21, 0x00, 0x20, 0x01, 0x02, 0xc0, - 0xf7, 0xff, 0xfe, 0x48, 0x6f, 0xb8, 0x49, 0x2a, - 0x80, 0x08, 0xe0, 0x46, 0x46, 0x68, 0xf0, 0x15, - 0xff, 0xa7, 0x98, 0x00, 0x0c, 0x00, 0x68, 0x39, - 0x80, 0x08, 0x98, 0x00, 0x68, 0x39, 0x80, 0x48, - 0x98, 0x01, 0x0c, 0x00, 0x68, 0x39, 0x80, 0x88, - 0x98, 0x01, 0x68, 0x39, 0x80, 0xc8, 0x98, 0x02, - 0x0c, 0x00, 0x68, 0x39, 0x81, 0x08, 0x98, 0x02, - 0x68, 0x39, 0x81, 0x48, 0x20, 0x01, 0x68, 0x39, - 0x81, 0x88, 0x48, 0x1c, 0x68, 0x39, 0x81, 0xc8, - 0x48, 0x1b, 0x68, 0x01, 0x14, 0x09, 0x68, 0x3a, - 0x82, 0x11, 0x68, 0x00, 0x68, 0x39, 0x82, 0x48, - 0xe0, 0x1f, 0x20, 0x19, 0x06, 0x80, 0x6b, 0x80, - 0x06, 0x00, 0x0e, 0x00, 0x68, 0x39, 0x80, 0x08, - 0xe0, 0x17, 0x68, 0x38, 0x88, 0x01, 0x04, 0x09, - 0x88, 0x40, 0x18, 0x08, 0x68, 0x00, 0x90, 0x03, - 0x14, 0x00, 0x68, 0x39, 0x80, 0x08, 0x98, 0x03, - 0x68, 0x39, 0x80, 0x48, 0xe0, 0x09, 0x48, 0x0d, - 0x68, 0x00, 0x68, 0x39, 0x80, 0x08, 0xe0, 0x04, - 0x1d, 0xf8, 0x30, 0x39, 0x8e, 0x81, 0x31, 0x01, - 0x86, 0x81, 0xb0, 0x04, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x00, 0xfc, - 0x2e, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x03, 0xc4, - 0x2c, 0x00, 0x01, 0x00, 0x00, 0x00, 0x25, 0x02, - 0x2e, 0x08, 0x05, 0x74, 0x2e, 0x08, 0x00, 0x58, - 0xb5, 0x80, 0x4f, 0x53, 0x6d, 0x78, 0x6d, 0x39, - 0x42, 0x81, 0xd0, 0x59, 0x88, 0x81, 0x06, 0x09, - 0x0e, 0x09, 0x29, 0x12, 0xd2, 0x55, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x09, 0x10, 0x1a, 0x14, 0x20, 0x52, 0x24, 0x2f, - 0x3a, 0x45, 0x56, 0x60, 0x67, 0x6c, 0x70, 0x74, - 0x7a, 0x81, 0x89, 0xc3, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0b, 0xfe, 0x91, 0xe0, 0x72, - 0x89, 0x00, 0xf0, 0x0b, 0xfe, 0x75, 0xe0, 0x6e, - 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0b, - 0xff, 0x4f, 0xe0, 0x68, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0b, 0xfe, 0xf7, 0xe0, 0x62, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0x8d, 0xe0, 0x5e, - 0x8a, 0x42, 0x8a, 0x01, 0xb4, 0x06, 0x89, 0xc3, - 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, - 0xf8, 0x11, 0xb0, 0x02, 0xe0, 0x53, 0x8a, 0x42, - 0x8a, 0x01, 0xb4, 0x06, 0x89, 0xc3, 0x89, 0x82, - 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, 0xf8, 0x58, - 0xb0, 0x02, 0xe0, 0x48, 0x89, 0x83, 0x89, 0x42, - 0x89, 0x00, 0x49, 0x2e, 0xf0, 0x0c, 0xf9, 0x99, - 0x21, 0x00, 0x48, 0x2c, 0xf7, 0xff, 0xfc, 0x7e, - 0xe0, 0x3d, 0x89, 0xc1, 0x04, 0x0b, 0x14, 0x1b, - 0x89, 0x81, 0x04, 0x0a, 0x14, 0x12, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0c, 0xf9, 0xb9, 0xe0, 0x32, - 0xe0, 0x43, 0xe0, 0x30, 0x89, 0x00, 0xf0, 0x0b, - 0xff, 0x6b, 0xe0, 0x2c, 0x89, 0xc1, 0x04, 0x09, - 0x8a, 0x02, 0x18, 0x8b, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0c, 0xf9, 0xf1, 0xe0, 0x22, - 0x89, 0xc3, 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, - 0xf0, 0x0c, 0xfa, 0x1c, 0xe0, 0x1b, 0x89, 0x41, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0x8d, 0xe0, 0x16, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0xa7, 0xe0, 0x12, - 0x89, 0x00, 0xf0, 0x0b, 0xff, 0xb7, 0xe0, 0x0e, - 0x89, 0x82, 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, - 0xfa, 0x9b, 0xe0, 0x08, 0x89, 0xc3, 0x89, 0x82, - 0x89, 0x41, 0x89, 0x00, 0xf0, 0x0c, 0xfb, 0x34, - 0xe0, 0x01, 0xf0, 0x0c, 0xfb, 0xcb, 0x6d, 0x78, - 0x88, 0xc0, 0x6c, 0x39, 0x1a, 0x08, 0x64, 0x38, - 0x6c, 0x79, 0x1a, 0x08, 0x28, 0x28, 0xdb, 0x05, - 0x48, 0x07, 0x88, 0x01, 0x23, 0x10, 0x43, 0xdb, - 0x40, 0x19, 0x80, 0x01, 0x6d, 0x78, 0x68, 0x00, - 0x65, 0x78, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x03, 0xc4, 0x2c, 0x00, 0x01, 0x20, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x06, 0x00, - 0x0e, 0x00, 0x06, 0x09, 0x0e, 0x09, 0x89, 0xd7, - 0x23, 0xc7, 0x40, 0x7b, 0x81, 0xd3, 0x4b, 0x06, - 0x6f, 0xdf, 0x37, 0x01, 0x67, 0xdf, 0x2f, 0x28, - 0xda, 0x03, 0x4b, 0x04, 0x68, 0x1b, 0xf0, 0x1a, - 0xfb, 0xf5, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x03, 0xc4, 0x2e, 0x08, 0x01, 0x94, - 0xb5, 0x90, 0x4f, 0x5d, 0x6e, 0xf8, 0x6e, 0xb9, - 0x42, 0x81, 0xd0, 0x5c, 0x88, 0x81, 0x0a, 0x0a, - 0x2a, 0x0a, 0xd2, 0x59, 0xa3, 0x01, 0x5c, 0x9b, - 0x00, 0x5b, 0x44, 0x9f, 0x99, 0x04, 0x3e, 0x99, - 0x99, 0x44, 0x99, 0x99, 0x6c, 0x72, 0x06, 0x09, - 0x0e, 0x09, 0x24, 0x00, 0x29, 0x0c, 0xd2, 0x4b, - 0xa3, 0x01, 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, - 0x1e, 0x0a, 0x14, 0x2b, 0x8b, 0x8b, 0x8b, 0x8b, - 0x8b, 0x28, 0x8b, 0x05, 0x68, 0x38, 0x88, 0x00, - 0xf0, 0x03, 0xf8, 0xde, 0xe0, 0x80, 0x22, 0x00, - 0xb4, 0x04, 0x89, 0x01, 0x1c, 0x23, 0x4a, 0x49, - 0x1e, 0x50, 0xf7, 0xfc, 0xfd, 0xe9, 0xb0, 0x01, - 0xe0, 0x76, 0x22, 0x00, 0xb4, 0x04, 0x89, 0x02, - 0x1c, 0x23, 0x49, 0x44, 0x1e, 0x48, 0xf7, 0xfc, - 0xfd, 0xdf, 0xb0, 0x01, 0xe0, 0x6c, 0x8a, 0x02, - 0xb4, 0x04, 0x89, 0xc3, 0x89, 0x82, 0x89, 0x41, - 0x89, 0x00, 0xf7, 0xfc, 0xfd, 0xd5, 0xb0, 0x01, - 0xe0, 0x62, 0xf7, 0xfc, 0xfd, 0x9d, 0xe0, 0x5f, - 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfe, 0xfd, 0xea, - 0xe0, 0x5a, 0x06, 0x09, 0xd1, 0x58, 0x89, 0x00, - 0xf7, 0xfc, 0xff, 0x76, 0xe0, 0x54, 0x06, 0x09, - 0x0e, 0x09, 0x29, 0x06, 0xd2, 0x0c, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x09, 0x0d, 0x11, 0x15, 0x19, 0x89, 0x00, - 0xf7, 0xfe, 0xf8, 0xaa, 0xe0, 0x44, 0xe0, 0x54, - 0xe0, 0x42, 0x89, 0x00, 0xf7, 0xfe, 0xf8, 0xca, - 0xe0, 0x3e, 0x89, 0x00, 0xf7, 0xfe, 0xf9, 0x58, - 0xe0, 0x3a, 0x89, 0x00, 0xf7, 0xfe, 0xfa, 0x3c, - 0xe0, 0x36, 0x89, 0x00, 0xf7, 0xfe, 0xfa, 0x6e, - 0xe0, 0x32, 0x89, 0x00, 0x06, 0x00, 0x0e, 0x00, - 0xf7, 0xfe, 0xfa, 0x4a, 0xe0, 0x2c, 0x06, 0x08, - 0xd1, 0x2a, 0x6f, 0xb8, 0x30, 0x01, 0x67, 0xb8, - 0xe0, 0x26, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x08, - 0xd2, 0x22, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x0c, 0x08, 0x0f, - 0x12, 0x16, 0x19, 0x1c, 0x89, 0x00, 0xf0, 0x01, - 0xf9, 0x93, 0xe0, 0x15, 0x89, 0x00, 0xf0, 0x01, - 0xf9, 0xbb, 0xe0, 0x11, 0xf0, 0x01, 0xfa, 0x06, - 0xe0, 0x0e, 0xf0, 0x01, 0xfa, 0x5d, 0xe0, 0x0b, - 0x89, 0x00, 0xf0, 0x01, 0xfa, 0xe1, 0xe0, 0x07, - 0xf0, 0x01, 0xfb, 0x1a, 0xe0, 0x04, 0xf0, 0x01, - 0xfb, 0x33, 0xe0, 0x01, 0xf0, 0x01, 0xfa, 0x90, - 0x6e, 0xf8, 0x88, 0xc0, 0x6d, 0xb9, 0x1a, 0x08, - 0x65, 0xb8, 0x6d, 0xf9, 0x1a, 0x08, 0x28, 0x28, - 0xdb, 0x04, 0x48, 0x07, 0x88, 0x01, 0x08, 0x49, - 0x00, 0x49, 0x80, 0x01, 0x6e, 0xf8, 0x68, 0x00, - 0x66, 0xf8, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x03, 0xc4, 0x00, 0x00, 0xff, 0xff, - 0x2c, 0x00, 0x00, 0xf8, 0xb5, 0x80, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x17, 0x28, 0x03, 0xd0, 0x0b, - 0x28, 0x07, 0xd0, 0x0e, 0x28, 0x08, 0xd1, 0x03, - 0x88, 0x38, 0xf0, 0x02, 0xfa, 0x5d, 0x80, 0x78, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfe, 0xfd, 0x5e, - 0xe7, 0xf6, 0x88, 0x79, 0x88, 0x38, 0x1d, 0x3a, - 0xf0, 0x02, 0xf8, 0xce, 0x49, 0x01, 0x68, 0x09, - 0x80, 0x08, 0xe7, 0xed, 0x2e, 0x08, 0x03, 0xc4, - 0x48, 0x0d, 0x6f, 0xc0, 0x28, 0x00, 0xd1, 0x0c, - 0x49, 0x0c, 0x60, 0x08, 0x48, 0x0c, 0x8e, 0x83, - 0x49, 0x0c, 0x22, 0x01, 0x2b, 0x00, 0xd0, 0x05, - 0x8d, 0x03, 0x86, 0x8b, 0x8d, 0x43, 0x86, 0xcb, - 0x87, 0x82, 0x47, 0x70, 0x8e, 0xc3, 0x2b, 0x00, - 0xd0, 0xfb, 0x8d, 0x83, 0x86, 0x8b, 0x8d, 0xc3, - 0x86, 0xcb, 0x87, 0x82, 0x47, 0x70, 0x00, 0x00, - 0x2c, 0x00, 0x1f, 0x80, 0x2e, 0x08, 0x04, 0x44, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x00, 0xc0, - 0xb5, 0x00, 0xf0, 0x00, 0xfa, 0x91, 0xf7, 0xfd, - 0xf9, 0x53, 0xf7, 0xfc, 0xff, 0xd7, 0xf7, 0xfd, - 0xfa, 0x53, 0xf0, 0x03, 0xf8, 0xb1, 0xf7, 0xff, - 0xff, 0xcf, 0x48, 0x16, 0x8e, 0x80, 0x28, 0x00, - 0xd1, 0x21, 0x48, 0x15, 0x6f, 0xc0, 0x28, 0x00, - 0xd1, 0x13, 0x48, 0x14, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x0f, 0xb0, 0x82, 0x46, 0x69, 0xa8, 0x01, - 0xf0, 0x01, 0xfa, 0xd8, 0xa8, 0x01, 0x78, 0x00, - 0x28, 0x32, 0xda, 0x05, 0xa8, 0x00, 0x78, 0x00, - 0x28, 0x32, 0xda, 0x01, 0xf0, 0x07, 0xf9, 0xb0, - 0xb0, 0x02, 0x48, 0x0b, 0x69, 0xc0, 0x08, 0xc0, - 0xd3, 0x07, 0x48, 0x0a, 0x6c, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0xf7, 0xff, 0xfd, 0xfd, 0xbc, 0x08, - 0x47, 0x18, 0xf7, 0xff, 0xfe, 0xc1, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2c, 0x00, 0x1f, 0x80, 0x2e, 0x08, 0x1a, 0x94, - 0x72, 0x00, 0x01, 0x00, 0x2e, 0x08, 0x03, 0xc4, - 0xb4, 0x80, 0x02, 0x4f, 0x4b, 0x07, 0x40, 0x3b, - 0x43, 0x1a, 0x23, 0x19, 0x06, 0x9b, 0x62, 0x9a, - 0x0a, 0x49, 0x02, 0x49, 0x08, 0x49, 0x07, 0xc0, - 0x43, 0x08, 0x49, 0x03, 0x68, 0x09, 0x60, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0x00, 0x03, 0xfe, 0x00, - 0x2e, 0x08, 0x9b, 0xa4, 0xb4, 0x90, 0x4b, 0x0c, - 0x68, 0x1f, 0x68, 0x3f, 0x0f, 0xff, 0x60, 0x07, - 0x68, 0x18, 0x68, 0x00, 0x00, 0x40, 0x0a, 0x47, - 0x02, 0x7f, 0x20, 0x19, 0x06, 0x80, 0x6a, 0x84, - 0x4b, 0x06, 0x40, 0x23, 0x0a, 0x5b, 0x43, 0x3b, - 0x60, 0x0b, 0x6a, 0x80, 0x05, 0xc0, 0x0d, 0xc0, - 0x60, 0x10, 0xbc, 0x90, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xa4, 0x00, 0x03, 0xfe, 0x00, - 0xb5, 0x00, 0x49, 0x1d, 0x62, 0xc8, 0x28, 0x00, - 0xd0, 0x11, 0x28, 0x01, 0xd0, 0x1b, 0x28, 0x02, - 0xd0, 0x25, 0x28, 0x03, 0xd1, 0x09, 0x48, 0x19, - 0x68, 0x01, 0x08, 0x49, 0x00, 0x49, 0x60, 0x01, - 0x22, 0x01, 0x21, 0x01, 0x20, 0x00, 0xf0, 0x10, - 0xfd, 0x47, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x13, - 0x68, 0x01, 0x08, 0x49, 0x00, 0x49, 0x60, 0x01, - 0x48, 0x11, 0x68, 0x01, 0x04, 0x03, 0x43, 0x19, - 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x0d, - 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x0b, 0x68, 0x01, 0x4b, 0x0b, 0x40, 0x19, - 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x07, - 0x68, 0x01, 0x08, 0x49, 0x00, 0x49, 0x60, 0x01, - 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, 0xf0, 0x10, - 0xfd, 0x23, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x6a, 0x00, 0x00, 0x18, - 0x6c, 0x00, 0x00, 0x20, 0xff, 0xdf, 0xff, 0xff, - 0xb5, 0x90, 0x48, 0x11, 0x6c, 0xc1, 0x6c, 0x80, - 0x1a, 0x0f, 0x48, 0x10, 0xd5, 0x01, 0x69, 0x01, - 0x18, 0x7f, 0x69, 0x00, 0x10, 0x80, 0x4c, 0x0e, - 0x42, 0xb8, 0xda, 0x0b, 0x68, 0xe0, 0x28, 0x00, - 0xd1, 0x08, 0x48, 0x0c, 0x68, 0x01, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, 0x20, 0x02, - 0xf0, 0x10, 0xf8, 0xc4, 0x2f, 0x00, 0xd1, 0x04, - 0x20, 0x01, 0x61, 0xe0, 0x6b, 0xa0, 0x30, 0x01, - 0x63, 0xa0, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x04, 0x48, - 0x2e, 0x08, 0x04, 0xc8, 0x6c, 0x00, 0x00, 0x20, - 0xb5, 0x00, 0x20, 0x03, 0xf0, 0x10, 0xf8, 0xae, - 0x20, 0x1e, 0xf0, 0x0d, 0xf8, 0xab, 0x23, 0x03, - 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x0c, 0xfe, 0x59, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x02, 0x22, 0x02, 0x49, 0x07, - 0x20, 0x1e, 0xf0, 0x0c, 0xfc, 0x8d, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1e, - 0xb0, 0x01, 0xf0, 0x0c, 0xfe, 0x49, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xff, - 0xb5, 0x00, 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x12, - 0xfc, 0x23, 0x20, 0x1f, 0xf0, 0x0c, 0xff, 0xbc, - 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x02, 0x20, 0x1f, 0xf0, 0x0c, 0xfe, 0x34, - 0x20, 0x00, 0xf0, 0x0f, 0xff, 0x19, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x01, 0x22, 0x02, 0x49, 0x07, - 0x20, 0x1f, 0xf0, 0x0c, 0xfc, 0x65, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, 0x20, 0x1f, - 0xb0, 0x01, 0xf0, 0x0c, 0xfe, 0x21, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0x1f, 0xfe, - 0xb5, 0x80, 0x20, 0x0f, 0x02, 0x40, 0x4f, 0x0a, - 0x61, 0x38, 0x49, 0x0a, 0x6c, 0x89, 0x61, 0x79, - 0xf0, 0x01, 0xfe, 0x42, 0x1d, 0xf9, 0x31, 0x79, - 0x61, 0x08, 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, - 0x61, 0xf8, 0x62, 0x38, 0x64, 0xf8, 0x20, 0xff, - 0x72, 0x08, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x66, 0x00, 0x00, 0x80, - 0xb5, 0x80, 0x4f, 0x05, 0x69, 0x38, 0x28, 0x00, - 0xd0, 0x03, 0xf0, 0x01, 0xfe, 0x4b, 0x20, 0x00, - 0x61, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0x00, 0x4a, 0x0d, - 0xb4, 0x04, 0x1f, 0x10, 0x1e, 0x51, 0x1c, 0x13, - 0xf7, 0xfc, 0xfb, 0xaa, 0x21, 0x33, 0x06, 0x49, - 0x6d, 0x88, 0x6d, 0x4a, 0x1a, 0x82, 0xb0, 0x01, - 0x48, 0x07, 0x62, 0x42, 0x6d, 0x49, 0x62, 0xc1, - 0x21, 0x00, 0x65, 0x81, 0x21, 0x01, 0x02, 0xc9, - 0x64, 0x41, 0x21, 0x01, 0x30, 0x60, 0x76, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x04, 0x48, 0xb5, 0x00, 0x4a, 0x10, - 0xb4, 0x04, 0x1c, 0x13, 0x3a, 0x01, 0x49, 0x0f, - 0x1e, 0xc8, 0xf7, 0xfc, 0xfb, 0x89, 0x21, 0x33, - 0x06, 0x49, 0x6d, 0x88, 0x6d, 0x4a, 0x1a, 0x82, - 0xb0, 0x01, 0x48, 0x0b, 0x62, 0x42, 0x6d, 0x49, - 0x62, 0xc1, 0x21, 0x00, 0x65, 0x81, 0x21, 0x01, - 0x02, 0xc9, 0x64, 0x41, 0x21, 0x01, 0x30, 0x60, - 0x76, 0x01, 0x48, 0x06, 0x23, 0x02, 0x68, 0x01, - 0x43, 0x19, 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0xff, 0xfe, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x00, 0x04, - 0x48, 0x03, 0x23, 0x02, 0x43, 0xdb, 0x68, 0x01, - 0x40, 0x19, 0x60, 0x01, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x00, 0x04, 0xb5, 0xf0, 0x20, 0x0f, - 0x02, 0x40, 0x4c, 0x11, 0x61, 0x20, 0x20, 0x00, - 0xf7, 0xfc, 0xfc, 0xf6, 0x48, 0x0f, 0xf7, 0xfc, - 0xfc, 0xf3, 0x26, 0x00, 0x1d, 0xe0, 0x30, 0x59, - 0x77, 0x06, 0x25, 0xff, 0x1d, 0xe7, 0x37, 0x79, - 0x70, 0x3d, 0x20, 0x01, 0x63, 0x78, 0x60, 0xe6, - 0x69, 0x78, 0x28, 0x00, 0xd1, 0x04, 0x20, 0x41, - 0x01, 0x40, 0xf0, 0x01, 0xfd, 0xb1, 0x61, 0x78, - 0x69, 0x78, 0x28, 0x00, 0xd0, 0x01, 0x76, 0x3e, - 0x70, 0x3d, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x1f, 0xff, - 0xb5, 0x00, 0x20, 0x00, 0xf7, 0xfd, 0xff, 0xdc, - 0x22, 0x00, 0xb4, 0x04, 0x23, 0x00, 0x4a, 0x06, - 0x21, 0x00, 0x20, 0x00, 0xf7, 0xfc, 0xfb, 0x28, - 0x21, 0x00, 0x20, 0x0d, 0xb0, 0x01, 0xf0, 0x12, - 0xfb, 0x47, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x22, 0x00, - 0xb4, 0x04, 0x27, 0x00, 0x1c, 0x3b, 0x4a, 0x17, - 0x21, 0x00, 0x20, 0x00, 0xf7, 0xfc, 0xfb, 0x14, - 0x22, 0x00, 0xb0, 0x01, 0xb4, 0x04, 0x1c, 0x3b, - 0x4a, 0x12, 0x49, 0x13, 0x20, 0x00, 0xf7, 0xfc, - 0xfb, 0x0b, 0x21, 0x33, 0x06, 0x49, 0x6d, 0x88, - 0x6d, 0x4a, 0x1a, 0x82, 0xb0, 0x01, 0x48, 0x0f, - 0x62, 0x42, 0x6d, 0x49, 0x63, 0x01, 0x21, 0x01, - 0x02, 0xc9, 0x64, 0x81, 0x21, 0x01, 0x65, 0x87, - 0x30, 0x60, 0x76, 0x01, 0x77, 0x07, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf7, 0xff, 0xfe, 0x28, - 0x20, 0x00, 0xf7, 0xff, 0xfe, 0x59, 0x21, 0x00, - 0x20, 0x0d, 0xf0, 0x12, 0xfb, 0x11, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0x1f, 0xfe, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0xf0, 0x06, 0x05, 0x0e, 0x2d, 0x20, 0x0f, - 0x02, 0x40, 0x4f, 0x2f, 0x26, 0x33, 0x06, 0x76, - 0x61, 0x38, 0x6d, 0xb0, 0x6d, 0x71, 0x1a, 0x40, - 0x62, 0x78, 0x62, 0xb8, 0x20, 0x00, 0x1d, 0xfc, - 0x34, 0x79, 0x60, 0xe0, 0x2d, 0x00, 0xd0, 0x02, - 0x20, 0xff, 0xf7, 0xfd, 0xff, 0x79, 0x22, 0x00, - 0xb4, 0x04, 0x23, 0x00, 0x21, 0x00, 0x20, 0x00, - 0xf7, 0xfc, 0xfa, 0xc6, 0x22, 0x01, 0x21, 0x01, - 0x20, 0x00, 0xb0, 0x01, 0xf0, 0x10, 0xfb, 0x84, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x10, 0xfc, 0x44, - 0x22, 0x00, 0xb4, 0x04, 0x23, 0x00, 0x4a, 0x1d, - 0x20, 0x00, 0x1e, 0x51, 0xf7, 0xfc, 0xfa, 0xb4, - 0x20, 0x01, 0x63, 0x60, 0x69, 0x60, 0xb0, 0x01, - 0x28, 0x00, 0xd1, 0x04, 0x20, 0x41, 0x01, 0x40, - 0xf0, 0x01, 0xfd, 0x1a, 0x61, 0x60, 0x69, 0x60, - 0x28, 0x00, 0xd0, 0x03, 0x20, 0x00, 0x76, 0x20, - 0x20, 0xff, 0x70, 0x20, 0x6d, 0x70, 0x63, 0x38, - 0x20, 0x01, 0x02, 0xc0, 0x64, 0xb8, 0x20, 0x00, - 0x26, 0x01, 0x65, 0xb8, 0x1d, 0xf9, 0x31, 0x59, - 0x76, 0x0e, 0x22, 0x00, 0x21, 0x00, 0x20, 0x00, - 0xf7, 0xff, 0xfd, 0xc6, 0x21, 0x00, 0x20, 0x0d, - 0xf0, 0x12, 0xfa, 0xb2, 0x20, 0x00, 0x60, 0xf8, - 0x2d, 0x00, 0xd1, 0x02, 0xf7, 0xff, 0xfd, 0xf0, - 0x61, 0xe6, 0x20, 0x00, 0x60, 0xb8, 0x66, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x1f, 0xff, - 0xb5, 0xb0, 0x4f, 0x44, 0x25, 0x00, 0x6d, 0x38, - 0x4c, 0x43, 0x28, 0x05, 0xd2, 0x14, 0xa3, 0x02, - 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x10, 0x03, 0x2e, 0x62, 0x70, 0x00, 0x4d, 0x3f, - 0x68, 0x28, 0x08, 0x41, 0xd2, 0x08, 0x08, 0xc0, - 0xd3, 0x09, 0xf7, 0xff, 0xfe, 0xb3, 0x23, 0x04, - 0x43, 0xdb, 0x68, 0x28, 0x40, 0x18, 0x60, 0x28, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x6d, 0x78, - 0x28, 0x00, 0xd0, 0xf9, 0x28, 0x01, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x06, 0xf0, 0x00, 0xf8, 0x6a, - 0x8e, 0xa0, 0x28, 0x00, 0xd1, 0xf0, 0xf0, 0x00, - 0xf9, 0x27, 0x6d, 0x78, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0xe9, 0x8e, 0xa0, 0x28, 0x00, - 0xd1, 0xe6, 0xf0, 0x00, 0xfa, 0x49, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x8e, 0xe0, 0x28, 0x00, - 0xd1, 0xde, 0x8d, 0xa0, 0x06, 0x00, 0x0e, 0x00, - 0x28, 0x06, 0xd1, 0x12, 0x48, 0x26, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x06, 0x6d, 0x78, 0x28, 0x01, - 0xd0, 0x01, 0x28, 0x05, 0xd1, 0x01, 0xf0, 0x00, - 0xfc, 0xc3, 0x6d, 0x78, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x01, 0xf0, 0x00, 0xfc, 0x2c, - 0x85, 0xa5, 0x8d, 0xa0, 0x28, 0x00, 0xd1, 0xc3, - 0x6d, 0x78, 0x28, 0x01, 0xd0, 0x08, 0x28, 0x04, - 0xd0, 0x0b, 0x28, 0x05, 0xd1, 0xbc, 0xf0, 0x00, - 0xfd, 0xdd, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xf0, 0x00, 0xfd, 0xb2, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0xf0, 0x00, 0xfd, 0x81, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x8e, 0xe0, 0x28, 0x00, - 0xd1, 0xaa, 0x20, 0x06, 0x85, 0xa0, 0x85, 0xe5, - 0x20, 0x09, 0x02, 0x40, 0x86, 0xe0, 0x20, 0x04, - 0x65, 0x38, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x8e, 0xe0, 0x28, 0x00, 0xd1, 0x9c, 0x8d, 0xa0, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x06, 0xd1, 0x97, - 0x85, 0xa5, 0x65, 0x3d, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x00, 0x04, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0xb0, 0x48, 0x46, - 0x6c, 0xc1, 0x4c, 0x46, 0x64, 0x21, 0x69, 0x60, - 0x1a, 0x09, 0x1d, 0xe7, 0x37, 0x79, 0x63, 0xf9, - 0x29, 0x00, 0xda, 0x02, 0x69, 0x22, 0x18, 0x89, - 0x63, 0xf9, 0x23, 0xff, 0x6b, 0xf9, 0x33, 0x01, - 0x42, 0x99, 0xdb, 0x73, 0x22, 0x01, 0x03, 0x12, - 0x42, 0x91, 0xdd, 0x00, 0x63, 0xfa, 0x6b, 0xf9, - 0x08, 0x89, 0x00, 0x89, 0x63, 0xf9, 0x7a, 0x3a, - 0x2a, 0x00, 0xd0, 0x05, 0x23, 0xff, 0x03, 0x5b, - 0x1a, 0xc2, 0x61, 0xe2, 0x22, 0x00, 0x72, 0x3a, - 0x18, 0x42, 0x49, 0x35, 0x25, 0x12, 0x42, 0x8a, - 0xdd, 0x2c, 0x1a, 0x08, 0x64, 0x38, 0xf0, 0x1f, - 0xfb, 0x53, 0x4b, 0x32, 0x40, 0x18, 0xf0, 0x1f, - 0xfb, 0x53, 0x22, 0x00, 0x49, 0x30, 0xb4, 0x06, - 0x69, 0x60, 0x69, 0x39, 0x18, 0x41, 0x23, 0xff, - 0x03, 0x5b, 0x1a, 0xc9, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc0, 0x6c, 0x3a, 0x1c, 0x2b, 0xf0, 0x14, - 0xfc, 0x21, 0x22, 0x00, 0xb0, 0x02, 0x49, 0x28, - 0xb4, 0x06, 0x6b, 0xf8, 0x6c, 0x39, 0x1a, 0x42, - 0x69, 0x39, 0x1c, 0x2b, 0x48, 0x25, 0xf0, 0x14, - 0xfc, 0x15, 0xb0, 0x02, 0xf0, 0x1f, 0xfb, 0x30, - 0x23, 0x01, 0x04, 0x9b, 0x43, 0x18, 0xf0, 0x1f, - 0xfb, 0x2f, 0xe0, 0x1d, 0xf0, 0x1f, 0xfb, 0x28, - 0x4b, 0x1c, 0x40, 0x18, 0xf0, 0x1f, 0xfb, 0x28, - 0x22, 0x00, 0x49, 0x1b, 0xb4, 0x06, 0x69, 0x60, - 0x69, 0x39, 0x18, 0x41, 0x23, 0xff, 0x03, 0x5b, - 0x1a, 0xc9, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, - 0x6b, 0xfa, 0x1c, 0x2b, 0xf0, 0x14, 0xfb, 0xf6, - 0xb0, 0x02, 0xf0, 0x1f, 0xfb, 0x11, 0x23, 0x01, - 0x04, 0x9b, 0x43, 0x18, 0xf0, 0x1f, 0xfb, 0x10, - 0x69, 0x60, 0x6b, 0xf9, 0x18, 0x40, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc1, 0x61, 0x60, 0x4b, 0x0e, - 0x42, 0x99, 0xd3, 0x02, 0x69, 0x21, 0x1a, 0x40, - 0x61, 0x60, 0x23, 0xff, 0x03, 0x5b, 0x69, 0x60, - 0x1a, 0xc0, 0xe0, 0x00, 0xe0, 0x00, 0x62, 0x20, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x04, 0x48, - 0x00, 0x1f, 0xfe, 0x00, 0xff, 0xfb, 0xff, 0xff, - 0x9e, 0x00, 0x08, 0x00, 0xcc, 0x1f, 0xe0, 0x00, - 0xcc, 0x1f, 0xfe, 0x00, 0x21, 0x00, 0x23, 0xff, - 0x68, 0x02, 0x33, 0xc1, 0x42, 0x9a, 0xd0, 0x01, - 0x1c, 0x08, 0x47, 0x70, 0x79, 0xc2, 0x0a, 0x12, - 0xd2, 0x01, 0x1c, 0x08, 0x47, 0x70, 0x7a, 0x41, - 0x23, 0x0e, 0x40, 0x19, 0x07, 0x49, 0x7a, 0x82, - 0x05, 0x92, 0x43, 0x11, 0x7a, 0xc2, 0x23, 0xfe, - 0x40, 0x1a, 0x03, 0x92, 0x43, 0x11, 0x7b, 0x02, - 0x01, 0xd2, 0x43, 0x11, 0x7b, 0x40, 0x40, 0x18, - 0x08, 0x40, 0x43, 0x08, 0x49, 0x01, 0x67, 0x08, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0xf0, 0xb0, 0x86, 0x4c, 0x8c, 0x6c, 0xe0, - 0x1d, 0xe7, 0x37, 0x79, 0x1d, 0xfd, 0x35, 0x39, - 0x28, 0x00, 0xd0, 0x04, 0x28, 0x01, 0xd0, 0x3a, - 0x28, 0x02, 0xd1, 0x73, 0xe0, 0x74, 0x69, 0xe0, - 0x6a, 0x21, 0x1a, 0x09, 0x63, 0xf9, 0x1c, 0x0a, - 0xd5, 0x02, 0x69, 0x21, 0x18, 0x51, 0x63, 0xf9, - 0x6b, 0xf9, 0x29, 0x04, 0xdb, 0x67, 0x69, 0x3e, - 0x5c, 0x31, 0x06, 0x0a, 0x65, 0x7a, 0x92, 0x05, - 0x1c, 0x41, 0x69, 0x20, 0x90, 0x04, 0xf0, 0x19, - 0xfe, 0xe3, 0x61, 0xe1, 0x5c, 0x70, 0x04, 0x00, - 0x9a, 0x05, 0x18, 0x82, 0x65, 0x7a, 0x92, 0x03, - 0x98, 0x04, 0x31, 0x01, 0xf0, 0x19, 0xfe, 0xd8, - 0x61, 0xe1, 0x5c, 0x70, 0x02, 0x00, 0x9a, 0x03, - 0x18, 0x80, 0x65, 0x78, 0x90, 0x02, 0x98, 0x04, - 0x31, 0x01, 0xf0, 0x19, 0xfe, 0xcd, 0x61, 0xe1, - 0x5c, 0x70, 0x9a, 0x02, 0x18, 0x80, 0x65, 0x78, - 0x98, 0x04, 0x31, 0x01, 0xf0, 0x19, 0xfe, 0xc4, - 0x20, 0x01, 0x64, 0xe0, 0x61, 0xe1, 0x6a, 0x20, - 0x69, 0xe1, 0x1a, 0x40, 0x63, 0xf8, 0x1c, 0x01, - 0xd4, 0x05, 0x48, 0x67, 0x69, 0x06, 0x30, 0x80, - 0x69, 0x02, 0x92, 0x01, 0xe0, 0x03, 0x69, 0x20, - 0x18, 0x08, 0x63, 0xf8, 0xe7, 0xf5, 0x6b, 0xf8, - 0x90, 0x00, 0x28, 0x02, 0xdb, 0x22, 0x6d, 0x78, - 0x09, 0x01, 0x01, 0x09, 0x23, 0xff, 0x33, 0xc1, - 0x42, 0x99, 0xd1, 0x31, 0x9a, 0x01, 0x69, 0xe0, - 0x5c, 0x11, 0x02, 0x09, 0x83, 0x29, 0x1c, 0x41, - 0x1c, 0x30, 0xf0, 0x19, 0xfe, 0x9d, 0x61, 0xe1, - 0x69, 0x38, 0x5c, 0x40, 0x8b, 0x2a, 0x18, 0x80, - 0x83, 0x28, 0x8b, 0x28, 0x30, 0x06, 0x83, 0x28, - 0x19, 0x88, 0x1f, 0x41, 0x1c, 0x30, 0xf0, 0x19, - 0xfe, 0x8f, 0x61, 0xe1, 0x21, 0xff, 0x71, 0x39, - 0x20, 0x02, 0x64, 0xe0, 0x6c, 0xe0, 0x28, 0x02, - 0xd1, 0x00, 0xe0, 0x01, 0xe0, 0x94, 0xe0, 0x93, - 0x6a, 0x20, 0x69, 0xe1, 0x1a, 0x40, 0x63, 0xf8, - 0x1c, 0x01, 0xd5, 0x02, 0x69, 0x20, 0x18, 0x08, - 0x63, 0xf8, 0x79, 0x38, 0x28, 0x00, 0xd0, 0x13, - 0x20, 0x01, 0x02, 0xc0, 0x83, 0xa8, 0xe0, 0x11, - 0x02, 0x01, 0x65, 0x79, 0x9a, 0x01, 0x69, 0xe0, - 0x5c, 0x12, 0x18, 0x51, 0x65, 0x79, 0x1c, 0x41, - 0x1c, 0x30, 0xf0, 0x19, 0xfe, 0x69, 0x61, 0xe1, - 0x98, 0x00, 0x38, 0x01, 0x63, 0xf8, 0xe7, 0xb2, - 0x48, 0x3c, 0x83, 0xa8, 0x8b, 0x28, 0x6b, 0xf9, - 0x42, 0x88, 0xda, 0x01, 0x63, 0xf8, 0xe0, 0x02, - 0x8b, 0xa8, 0x42, 0x81, 0xdb, 0x68, 0x8b, 0xa8, - 0x6b, 0xf9, 0x42, 0x81, 0xdd, 0x00, 0x63, 0xf8, - 0x48, 0x35, 0x21, 0x00, 0x66, 0x78, 0x80, 0x01, - 0x30, 0x02, 0x21, 0xff, 0x31, 0xc1, 0x66, 0x78, - 0x80, 0x01, 0x48, 0x32, 0x66, 0x78, 0x79, 0x39, - 0x29, 0x00, 0xd0, 0x21, 0x21, 0x00, 0x71, 0x39, - 0x69, 0x3b, 0x69, 0x20, 0x18, 0x1a, 0xb4, 0x04, - 0x69, 0xe0, 0x18, 0x18, 0x6b, 0xfa, 0x49, 0x2a, - 0xf0, 0x00, 0xfe, 0xec, 0x6b, 0xf8, 0x38, 0x06, - 0x6e, 0x79, 0x80, 0x08, 0x31, 0x02, 0x66, 0x79, - 0xb0, 0x01, 0x48, 0x25, 0xf7, 0xff, 0xff, 0x02, - 0x8b, 0x28, 0x6b, 0xf9, 0x1a, 0x40, 0x83, 0x28, - 0x69, 0xe0, 0x6b, 0xf9, 0x18, 0x41, 0x69, 0x20, - 0xf0, 0x19, 0xfe, 0x26, 0x61, 0xe1, 0xe0, 0x26, - 0x6b, 0xf9, 0x31, 0x03, 0x80, 0x01, 0x48, 0x1e, - 0x21, 0x01, 0x03, 0xc9, 0x66, 0x78, 0x80, 0x01, - 0x30, 0x02, 0x21, 0xff, 0x66, 0x78, 0x80, 0x01, - 0x48, 0x1a, 0x66, 0x78, 0x69, 0x3b, 0x69, 0x20, - 0x18, 0x1a, 0xb4, 0x04, 0x69, 0xe0, 0x18, 0x18, - 0x6b, 0xfa, 0x49, 0x17, 0xf0, 0x00, 0xfe, 0xbe, - 0x8b, 0x28, 0x6b, 0xf9, 0x1a, 0x40, 0x83, 0x28, - 0x69, 0xe0, 0x6b, 0xfe, 0x19, 0x81, 0x69, 0x20, - 0xb0, 0x01, 0xf0, 0x19, 0xfe, 0x01, 0x1d, 0xf0, - 0x30, 0x02, 0x61, 0xe1, 0x63, 0xf8, 0x8b, 0x28, - 0x28, 0x00, 0xd1, 0x01, 0x21, 0x00, 0x64, 0xe0, - 0x21, 0x10, 0x48, 0x0c, 0x85, 0x01, 0x6b, 0xf9, - 0x85, 0x41, 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, - 0xb0, 0x06, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x07, 0xf7, - 0x2c, 0x00, 0x02, 0x00, 0x2c, 0x00, 0x02, 0x04, - 0x2c, 0x00, 0x02, 0x06, 0x2c, 0x00, 0x02, 0x0a, - 0x2c, 0x00, 0x02, 0x09, 0x2c, 0x00, 0x1f, 0xc0, - 0xb5, 0xf0, 0x20, 0x33, 0x06, 0x40, 0x6e, 0x40, - 0xb0, 0x81, 0x4f, 0x77, 0x63, 0xb8, 0x6a, 0xf9, - 0x1a, 0x40, 0x1d, 0xfc, 0x34, 0x79, 0x63, 0xe0, - 0x28, 0x00, 0xda, 0x02, 0x6a, 0x79, 0x18, 0x40, - 0x63, 0xe0, 0x6b, 0xe0, 0x4b, 0x71, 0x42, 0x98, - 0xdc, 0x03, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x6d, 0xb9, 0x48, 0x6e, 0x1d, 0xc5, - 0x35, 0x59, 0x29, 0x00, 0xd1, 0x16, 0x7e, 0x01, - 0x29, 0x00, 0xd1, 0x13, 0x21, 0x01, 0x75, 0x01, - 0x21, 0x05, 0x84, 0x29, 0x23, 0x0d, 0x06, 0x9b, - 0x6c, 0x79, 0x1a, 0xca, 0x68, 0x52, 0x31, 0x08, - 0x23, 0x05, 0x02, 0x5b, 0x64, 0x79, 0x66, 0xba, - 0x42, 0x99, 0xdb, 0x06, 0x21, 0x01, 0x02, 0xc9, - 0x64, 0x79, 0xe0, 0x02, 0x21, 0x00, 0x75, 0x01, - 0x84, 0x29, 0x8c, 0x29, 0x1c, 0x4a, 0x6a, 0xfb, - 0x1a, 0x9a, 0x07, 0x92, 0x0f, 0x92, 0x18, 0x51, - 0x84, 0x29, 0x7e, 0x01, 0x29, 0x00, 0xd0, 0x03, - 0x21, 0x00, 0x66, 0x39, 0x66, 0x79, 0x76, 0x01, - 0x6c, 0x79, 0x4a, 0x58, 0x69, 0x52, 0x42, 0x91, - 0xd0, 0x26, 0x6e, 0x7a, 0x2a, 0x00, 0xd1, 0x10, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc9, 0x68, 0x09, - 0x66, 0x79, 0x1c, 0x0a, 0x6e, 0x3b, 0x18, 0x59, - 0x66, 0x39, 0x4b, 0x51, 0x42, 0x99, 0xdb, 0x04, - 0x32, 0x01, 0x31, 0x01, 0x40, 0x19, 0x66, 0x39, - 0x66, 0x7a, 0x6e, 0x79, 0x6d, 0xba, 0x1a, 0x89, - 0x65, 0x21, 0x91, 0x00, 0x8c, 0x2b, 0x4e, 0x4b, - 0x1a, 0xf3, 0x42, 0x8b, 0xd3, 0x04, 0x63, 0xe1, - 0x21, 0x00, 0x65, 0xb9, 0x66, 0x79, 0xe0, 0x0a, - 0x18, 0xd1, 0x63, 0xe3, 0x65, 0xb9, 0xe0, 0x06, - 0x8c, 0x29, 0x4a, 0x44, 0x1a, 0x51, 0x63, 0xe1, - 0x6d, 0xba, 0x18, 0x51, 0x65, 0xb9, 0x49, 0x42, - 0x66, 0x61, 0x8c, 0x2a, 0x6b, 0xe1, 0x18, 0x89, - 0x31, 0x03, 0x83, 0xa9, 0x22, 0x00, 0x6e, 0x61, - 0x80, 0x0a, 0x31, 0x02, 0x22, 0xff, 0x32, 0xe1, - 0x66, 0x61, 0x80, 0x0a, 0x31, 0x02, 0x66, 0x61, - 0x8b, 0xaa, 0x80, 0x0a, 0x31, 0x02, 0x66, 0x61, - 0x7d, 0x00, 0x28, 0x00, 0xd0, 0x1d, 0x4a, 0x37, - 0x80, 0x0a, 0x1c, 0x88, 0x66, 0x60, 0x8c, 0x29, - 0x02, 0x09, 0x6e, 0xba, 0x0f, 0x52, 0x23, 0x06, - 0x40, 0x1a, 0x43, 0x11, 0x23, 0x21, 0x43, 0x19, - 0x80, 0x01, 0x30, 0x02, 0x66, 0x60, 0x6e, 0xb9, - 0x0b, 0x89, 0x23, 0x01, 0x43, 0x19, 0x80, 0x01, - 0x30, 0x02, 0x66, 0x60, 0x6e, 0xb9, 0x00, 0x49, - 0x43, 0x19, 0x80, 0x01, 0x30, 0x02, 0x66, 0x60, - 0xe0, 0x0b, 0x20, 0x01, 0x03, 0xc0, 0x80, 0x08, - 0x31, 0x02, 0x66, 0x61, 0x8c, 0x28, 0x02, 0x00, - 0x23, 0xff, 0x43, 0x18, 0x80, 0x08, 0x31, 0x02, - 0x66, 0x61, 0x48, 0x23, 0x6e, 0x61, 0x80, 0x08, - 0x31, 0x02, 0x66, 0x61, 0x80, 0x08, 0x31, 0x02, - 0x22, 0x33, 0x06, 0x52, 0x66, 0x61, 0x00, 0x53, - 0x6d, 0x90, 0x18, 0xc2, 0xb4, 0x04, 0x08, 0x5a, - 0x6d, 0x50, 0x18, 0xc6, 0x8c, 0x28, 0x4b, 0x1b, - 0x18, 0xc1, 0x00, 0x53, 0x6a, 0xf8, 0x18, 0xc0, - 0x6b, 0xe2, 0x1c, 0x33, 0xf0, 0x00, 0xfd, 0xb6, - 0x6a, 0xf8, 0x6b, 0xe1, 0x18, 0x40, 0x22, 0x33, - 0x06, 0x52, 0x62, 0xf8, 0x6d, 0x92, 0xb0, 0x01, - 0x42, 0x90, 0xdb, 0x02, 0x6a, 0x79, 0x1a, 0x40, - 0x62, 0xf8, 0x21, 0xff, 0x31, 0x11, 0x48, 0x10, - 0x85, 0x01, 0x8b, 0xa9, 0x31, 0x06, 0x85, 0x41, - 0x21, 0x01, 0x02, 0x49, 0x86, 0x81, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0x00, 0x00, 0x0f, 0xee, - 0x2e, 0x08, 0x04, 0xa8, 0xcc, 0x00, 0x0f, 0x00, - 0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x07, 0xf7, - 0x2c, 0x00, 0x02, 0x00, 0x00, 0x00, 0x80, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x2c, 0x00, 0x02, 0x09, - 0x2c, 0x00, 0x1f, 0xc0, 0xb5, 0xb0, 0x1c, 0x07, - 0xb0, 0x83, 0x4d, 0x20, 0x6b, 0x28, 0xf7, 0xff, - 0xfa, 0x53, 0x48, 0x1f, 0x6c, 0xc1, 0x6c, 0x80, - 0x1a, 0x08, 0xd5, 0x03, 0x1f, 0xe9, 0x39, 0x79, - 0x69, 0x09, 0x18, 0x40, 0x6e, 0xa9, 0x29, 0x00, - 0xd0, 0x22, 0x29, 0x10, 0xd0, 0x20, 0x29, 0x20, - 0xd0, 0x24, 0x29, 0x30, 0xd1, 0x04, 0x24, 0x2d, - 0x43, 0x44, 0xd5, 0x00, 0x34, 0x3f, 0x11, 0xa4, - 0x46, 0x6a, 0xa8, 0x01, 0xa9, 0x02, 0xf7, 0xff, - 0xfa, 0x19, 0x1b, 0x38, 0x99, 0x02, 0x1a, 0x08, - 0x22, 0x7d, 0x01, 0x52, 0x42, 0x90, 0xdc, 0x01, - 0x42, 0x90, 0xda, 0x05, 0x1a, 0x09, 0x91, 0x02, - 0x22, 0x00, 0x20, 0x00, 0xf7, 0xff, 0xf9, 0xf4, - 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x01, 0x04, 0x1a, 0x24, 0xd5, 0x00, 0x34, 0x1f, - 0x11, 0x64, 0xe7, 0xe1, 0x21, 0x4b, 0x43, 0x41, - 0x20, 0x93, 0xf0, 0x19, 0xfc, 0x91, 0x1c, 0x04, - 0xe7, 0xda, 0x00, 0x00, 0x2e, 0x08, 0x04, 0xc8, - 0x66, 0x00, 0x00, 0x80, 0xb5, 0x90, 0x1c, 0x07, - 0xb0, 0x83, 0x4c, 0x18, 0x6f, 0x60, 0x30, 0x01, - 0x46, 0x6a, 0x67, 0x60, 0xa8, 0x01, 0xa9, 0x02, - 0xf7, 0xff, 0xf9, 0xe8, 0x4b, 0x14, 0x18, 0xf9, - 0x98, 0x02, 0x1a, 0x40, 0x4b, 0x13, 0x42, 0x98, - 0xdc, 0x04, 0x42, 0xd8, 0xdb, 0x02, 0x69, 0xe0, - 0x28, 0x01, 0xd1, 0x07, 0x91, 0x02, 0x20, 0x00, - 0x90, 0x01, 0x22, 0x00, 0xf7, 0xff, 0xf9, 0xc0, - 0x20, 0x01, 0x61, 0xe0, 0x69, 0xe0, 0x28, 0x00, - 0xd0, 0x0b, 0x6b, 0x20, 0xf7, 0xff, 0xf9, 0xec, - 0x6f, 0x60, 0x67, 0xa0, 0x48, 0x08, 0x60, 0x07, - 0x6f, 0xe0, 0x30, 0x01, 0x67, 0xe0, 0x20, 0x00, - 0x61, 0xe0, 0xb0, 0x03, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0xc8, - 0xff, 0xff, 0xec, 0x78, 0x00, 0x02, 0xbf, 0x20, - 0x2e, 0x08, 0x05, 0x48, 0xb4, 0xf0, 0x1c, 0x1c, - 0x23, 0x00, 0x9f, 0x04, 0x60, 0x3b, 0x79, 0x85, - 0x23, 0xc0, 0x40, 0x1d, 0x4b, 0x33, 0x2d, 0x80, - 0xd1, 0x16, 0x25, 0x02, 0x60, 0x9d, 0x79, 0xc5, - 0x0a, 0x2b, 0xd3, 0x06, 0x7a, 0x45, 0x23, 0xe0, - 0x40, 0x2b, 0x2b, 0x20, 0xd1, 0x01, 0x23, 0x09, - 0x60, 0x3b, 0x7a, 0x03, 0x33, 0x09, 0x60, 0x13, - 0x79, 0x02, 0x02, 0x12, 0x79, 0x45, 0x43, 0x2a, - 0x32, 0x06, 0x1a, 0xd2, 0x60, 0x22, 0xe0, 0x25, - 0x25, 0x06, 0x26, 0x01, 0x60, 0x9e, 0x79, 0x83, - 0x2b, 0xff, 0xd1, 0x03, 0x35, 0x01, 0x5d, 0x43, - 0x2b, 0xff, 0xd0, 0xfb, 0x5d, 0x46, 0x23, 0xc0, - 0x40, 0x33, 0x2b, 0x40, 0xd1, 0x00, 0x35, 0x02, - 0x5d, 0x46, 0x09, 0x33, 0x07, 0x9b, 0xd0, 0x08, - 0x60, 0x3d, 0x5d, 0x46, 0x09, 0x73, 0xd3, 0x02, - 0x1d, 0xeb, 0x33, 0x03, 0xe0, 0x02, 0x1d, 0x6b, - 0xe0, 0x00, 0x1c, 0x6b, 0x60, 0x13, 0x79, 0x02, - 0x02, 0x12, 0x79, 0x45, 0x43, 0x2a, 0x32, 0x06, - 0x1a, 0xd2, 0x60, 0x22, 0x68, 0x3a, 0x2a, 0x00, - 0xd0, 0x20, 0x5c, 0x82, 0x23, 0x0e, 0x40, 0x1a, - 0x07, 0x52, 0x60, 0x0a, 0x68, 0x3b, 0x18, 0xc3, - 0x78, 0x5b, 0x05, 0x9b, 0x43, 0x1a, 0x60, 0x0a, - 0x68, 0x3b, 0x18, 0xc3, 0x78, 0x9c, 0x23, 0xfe, - 0x40, 0x23, 0x03, 0x9b, 0x43, 0x1a, 0x60, 0x0a, - 0x68, 0x3b, 0x18, 0xc3, 0x78, 0xdb, 0x01, 0xdb, - 0x43, 0x1a, 0x60, 0x0a, 0x68, 0x3b, 0x18, 0xc0, - 0x79, 0x00, 0x23, 0xfe, 0x40, 0x18, 0x08, 0x40, - 0x43, 0x10, 0x60, 0x08, 0x20, 0x00, 0xbc, 0xf0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0xb0, 0xb0, 0x83, 0x48, 0x3f, 0x49, 0x40, - 0x8d, 0xc9, 0x4c, 0x40, 0x63, 0xe1, 0x29, 0x06, - 0xda, 0x03, 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x01, 0x09, 0x49, 0x01, 0x49, - 0x23, 0xff, 0x33, 0xe1, 0x42, 0x99, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x46, 0x6a, 0xb4, 0x04, 0xaa, 0x03, 0xab, 0x02, - 0x49, 0x35, 0xf7, 0xff, 0xff, 0x6f, 0xb0, 0x01, - 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, 0x99, 0x01, - 0x18, 0x40, 0x6b, 0xe1, 0x42, 0x88, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x00, 0x4f, 0x2c, 0x28, 0x00, 0xd0, 0x25, - 0x6e, 0x38, 0x6d, 0xb9, 0x18, 0x40, 0x23, 0x01, - 0x06, 0x1b, 0x66, 0x38, 0x42, 0x98, 0xdb, 0x04, - 0x43, 0xdb, 0x18, 0xc0, 0x66, 0x38, 0x1e, 0x48, - 0x65, 0xb8, 0x23, 0x0d, 0x06, 0x9b, 0x6d, 0xb8, - 0x6c, 0xb9, 0x1a, 0xc9, 0x60, 0x08, 0x6e, 0xe0, - 0x6c, 0xb9, 0x1a, 0xc9, 0x60, 0x48, 0x20, 0x00, - 0x65, 0xb8, 0x6c, 0xb8, 0x30, 0x08, 0x23, 0x05, - 0x02, 0x5b, 0x64, 0xb8, 0x42, 0x98, 0xd1, 0x02, - 0x20, 0x01, 0x02, 0xc0, 0x64, 0xb8, 0x6c, 0xb8, - 0x49, 0x19, 0x61, 0x48, 0x24, 0x33, 0x06, 0x64, - 0x00, 0x63, 0x6d, 0xa0, 0x18, 0xc2, 0xb4, 0x04, - 0x6d, 0x60, 0x18, 0xc5, 0x6e, 0x60, 0x18, 0xc1, - 0x98, 0x03, 0x4b, 0x0e, 0x18, 0xc0, 0x9a, 0x02, - 0x1c, 0x2b, 0xf0, 0x00, 0xfc, 0x53, 0xb0, 0x01, - 0x6d, 0xb8, 0x99, 0x01, 0x18, 0x40, 0x65, 0xb8, - 0x48, 0x0e, 0x68, 0x02, 0x18, 0x51, 0x60, 0x01, - 0x6e, 0x60, 0x6d, 0xa1, 0x42, 0x88, 0xdb, 0x04, - 0x48, 0x0a, 0x68, 0x01, 0x6a, 0x7a, 0x1a, 0x89, - 0x60, 0x01, 0xb0, 0x03, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x12, 0x00, - 0x2c, 0x00, 0x1f, 0xc0, 0x2e, 0x08, 0x04, 0xc8, - 0x2e, 0x08, 0x05, 0x34, 0x2e, 0x08, 0x04, 0x48, - 0xcc, 0x00, 0x0f, 0x00, 0x66, 0x00, 0x00, 0x64, - 0xb5, 0xf0, 0xb0, 0x83, 0x4e, 0x65, 0x25, 0x00, - 0x4f, 0x65, 0x6a, 0xf8, 0xf7, 0xff, 0xf8, 0xcc, - 0x48, 0x64, 0x8d, 0xc0, 0x63, 0xf8, 0x28, 0x0a, - 0xda, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x34, 0x09, 0x60, 0x01, 0x40, - 0x23, 0xff, 0x33, 0xc1, 0x42, 0x98, 0xd0, 0x07, - 0x23, 0xff, 0x33, 0xbe, 0x42, 0x9c, 0xd0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x46, 0x6a, 0xb4, 0x04, 0xaa, 0x03, 0xab, 0x02, - 0x49, 0x57, 0x1c, 0x30, 0xf7, 0xff, 0xfe, 0xd6, - 0xb0, 0x01, 0x28, 0x00, 0xd0, 0x03, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, - 0x99, 0x01, 0x18, 0x41, 0x6b, 0xfa, 0x42, 0x91, - 0xd0, 0x03, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x01, 0x1c, 0x22, 0x4c, 0x4d, - 0x23, 0xff, 0x33, 0xbe, 0x42, 0x9a, 0xd1, 0x3c, - 0x5c, 0x30, 0x28, 0xa0, 0xd0, 0x03, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xe0, - 0x28, 0x00, 0xd1, 0x1b, 0x20, 0x02, 0x63, 0x78, - 0x60, 0xe1, 0x21, 0x00, 0x20, 0x00, 0xf0, 0x0f, - 0xf9, 0x4f, 0x20, 0x00, 0xf7, 0xfb, 0xfe, 0xb8, - 0x98, 0x02, 0x4b, 0x3c, 0x18, 0xc0, 0x79, 0x40, - 0x23, 0x30, 0x40, 0x18, 0x66, 0xb8, 0xd0, 0x16, - 0x28, 0x10, 0xd0, 0x14, 0x28, 0x20, 0xd0, 0x17, - 0x28, 0x30, 0xd1, 0x03, 0x21, 0x20, 0x20, 0x1e, - 0xf0, 0x0f, 0xfc, 0x69, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x2b, 0x6d, 0x60, 0x28, 0x05, 0xd1, 0x28, - 0x68, 0xf8, 0x28, 0x00, 0xd1, 0x25, 0x6f, 0x38, - 0xf7, 0xff, 0xfe, 0x08, 0xe0, 0x21, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x0f, 0xfc, 0x58, 0xe7, 0xed, - 0x21, 0x08, 0x20, 0x1e, 0xf0, 0x0f, 0xfc, 0x53, - 0xe7, 0xe8, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x08, - 0x20, 0x00, 0x63, 0x79, 0x21, 0x00, 0x60, 0xe0, - 0xf0, 0x0f, 0xf9, 0x1a, 0x20, 0x02, 0xf0, 0x0f, - 0xf9, 0x6d, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x08, - 0x6d, 0x60, 0x28, 0x05, 0xd1, 0x05, 0x68, 0xf8, - 0x28, 0x00, 0xd1, 0x02, 0x6f, 0x38, 0xf7, 0xff, - 0xfe, 0x2d, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x01, - 0x98, 0x02, 0x1d, 0xc5, 0x6b, 0xf8, 0x1b, 0x42, - 0x63, 0xfa, 0x7e, 0x39, 0x69, 0x78, 0x18, 0x41, - 0x4b, 0x16, 0x18, 0xe8, 0xf7, 0xfb, 0xfb, 0xfc, - 0x7e, 0x38, 0x6b, 0xf9, 0x18, 0x40, 0x07, 0x81, - 0x0f, 0x89, 0x76, 0x39, 0x1a, 0x44, 0x20, 0x01, - 0x06, 0x00, 0x49, 0x15, 0x60, 0x08, 0xf0, 0x1e, - 0xfe, 0x53, 0x4b, 0x14, 0x40, 0x18, 0xf0, 0x1e, - 0xfe, 0x53, 0x22, 0x04, 0x49, 0x10, 0xb4, 0x06, - 0x23, 0x12, 0x21, 0x1e, 0x69, 0x78, 0x1c, 0x22, - 0xf0, 0x13, 0xff, 0x28, 0xb0, 0x02, 0xf0, 0x1e, - 0xfe, 0x43, 0x23, 0x01, 0x04, 0x9b, 0x43, 0x18, - 0xf0, 0x1e, 0xfe, 0x42, 0x69, 0x78, 0x59, 0x01, - 0x60, 0x01, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2c, 0x00, 0x12, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x05, 0x38, 0x2e, 0x08, 0x04, 0x48, - 0x9e, 0x00, 0x08, 0x00, 0xff, 0xfb, 0xff, 0xff, - 0x20, 0x33, 0x06, 0x40, 0x6e, 0x81, 0x6e, 0x40, - 0x1a, 0x09, 0x48, 0x0f, 0x63, 0xc1, 0x29, 0x00, - 0xdc, 0x04, 0x1f, 0xc2, 0x3a, 0x79, 0x6a, 0x52, - 0x18, 0x89, 0x63, 0xc1, 0x6b, 0xc1, 0x08, 0x89, - 0x00, 0x89, 0x23, 0x01, 0x02, 0xdb, 0x63, 0xc1, - 0x42, 0x99, 0xdd, 0x0b, 0x4a, 0x07, 0x42, 0x91, - 0xdd, 0x00, 0x63, 0xc2, 0x4a, 0x06, 0x49, 0x07, - 0x85, 0x8a, 0x6b, 0xc0, 0x85, 0xc8, 0x20, 0x09, - 0x02, 0x40, 0x86, 0xc8, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0x02, 0x06, 0x2c, 0x00, 0x1f, 0xc0, - 0x48, 0x0f, 0x78, 0x01, 0x29, 0x00, 0xd0, 0x1a, - 0x49, 0x0e, 0x6c, 0x8a, 0x6c, 0xc9, 0x1a, 0x51, - 0x63, 0xc1, 0x1c, 0x0a, 0x29, 0x00, 0xdc, 0x04, - 0x1f, 0xc1, 0x39, 0x79, 0x69, 0x09, 0x18, 0x51, - 0x63, 0xc1, 0x23, 0x01, 0x03, 0x1b, 0x6b, 0xc1, - 0x42, 0x99, 0xdb, 0x08, 0x22, 0xff, 0x32, 0x07, - 0x49, 0x05, 0x85, 0x8a, 0x6b, 0xc0, 0x85, 0xc8, - 0x20, 0x09, 0x02, 0x40, 0x86, 0xc8, 0x47, 0x70, - 0x2e, 0x08, 0x04, 0xc8, 0x66, 0x00, 0x00, 0x80, - 0x2c, 0x00, 0x1f, 0xc0, 0xb4, 0x80, 0x20, 0x00, - 0x49, 0x1e, 0x6c, 0x8a, 0x6c, 0xc9, 0x1a, 0x52, - 0x49, 0x1d, 0x2a, 0x00, 0xdc, 0x01, 0x69, 0x0b, - 0x18, 0xd2, 0x23, 0x01, 0x02, 0xdb, 0x42, 0x9a, - 0xdd, 0x00, 0x08, 0xd8, 0x22, 0x33, 0x06, 0x52, - 0x6e, 0x93, 0x6e, 0x52, 0x1a, 0x9a, 0x2a, 0x00, - 0xdc, 0x01, 0x6a, 0x4b, 0x18, 0xd2, 0x08, 0x92, - 0x00, 0x92, 0x4b, 0x14, 0x68, 0xdb, 0x2b, 0x00, - 0xd0, 0x06, 0x23, 0x01, 0x03, 0x1b, 0x6a, 0x4f, - 0x18, 0xfb, 0x6a, 0x89, 0x1a, 0x59, 0xe0, 0x01, - 0x21, 0x01, 0x03, 0x09, 0x42, 0x8a, 0xdd, 0x04, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x01, 0x02, 0x5b, - 0x43, 0x18, 0x28, 0x00, 0xd0, 0x0b, 0x4b, 0x0a, - 0x42, 0x9a, 0xdd, 0x00, 0x1c, 0x1a, 0x21, 0x06, - 0x43, 0x01, 0x48, 0x08, 0x85, 0x81, 0x85, 0xc2, - 0x21, 0x09, 0x02, 0x49, 0x86, 0xc1, 0xbc, 0x80, - 0x47, 0x70, 0x00, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0x00, 0x00, 0xff, 0xff, 0x2c, 0x00, 0x1f, 0xc0, - 0xb5, 0x90, 0x04, 0x00, 0x0c, 0x00, 0x4f, 0x13, - 0x6d, 0x39, 0x29, 0x00, 0xd1, 0x10, 0x24, 0x01, - 0x28, 0x01, 0xd0, 0x10, 0x28, 0x04, 0xd0, 0x15, - 0x28, 0x05, 0xd1, 0x09, 0xf7, 0xff, 0xf8, 0x52, - 0xf7, 0xff, 0xf8, 0x06, 0x20, 0x00, 0x66, 0xf8, - 0x67, 0x38, 0x20, 0x05, 0x65, 0x78, 0x65, 0x3c, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, - 0xff, 0xfb, 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x3e, - 0x20, 0x04, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0x90, 0x04, 0x00, 0x0c, 0x00, 0x4f, 0x23, - 0x6d, 0x39, 0x29, 0x00, 0xd0, 0x0e, 0x29, 0x02, - 0xd1, 0x09, 0x6d, 0x78, 0x28, 0x01, 0xd0, 0x34, - 0x28, 0x04, 0xd0, 0x27, 0x28, 0x05, 0xd1, 0x02, - 0x20, 0xff, 0xf7, 0xff, 0xf8, 0xd1, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x24, 0x02, 0x28, 0x01, - 0xd0, 0x0c, 0x28, 0x04, 0xd0, 0x12, 0x28, 0x05, - 0xd1, 0xf5, 0x20, 0x00, 0xf7, 0xff, 0xf8, 0xc4, - 0x20, 0x05, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x42, - 0x20, 0x01, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xf8, 0x7a, - 0x20, 0x04, 0x65, 0x78, 0x65, 0x3c, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x21, 0x00, 0x20, 0x0e, - 0xf0, 0x11, 0xfb, 0xb2, 0x21, 0x00, 0x20, 0x0d, - 0xf0, 0x11, 0xfb, 0xae, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x02, 0xf0, 0x0f, 0xf8, 0x0e, - 0x20, 0xff, 0x49, 0x03, 0x70, 0x08, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x04, 0x48, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0xf0, 0x4f, 0x2b, - 0x24, 0x00, 0x6d, 0x38, 0x28, 0x01, 0xd0, 0x1e, - 0x28, 0x02, 0xd1, 0x19, 0x26, 0x03, 0x6d, 0x78, - 0x1d, 0xfd, 0x35, 0x79, 0x28, 0x01, 0xd0, 0x34, - 0x28, 0x04, 0xd0, 0x3f, 0x28, 0x05, 0xd1, 0x0f, - 0x20, 0x02, 0x63, 0x6c, 0xf0, 0x0e, 0xff, 0xee, - 0x20, 0x00, 0xf7, 0xfb, 0xfd, 0x01, 0xf7, 0xff, - 0xf8, 0x2b, 0x65, 0x3e, 0x20, 0x00, 0x65, 0x78, - 0xf7, 0xfe, 0xfe, 0xc2, 0x20, 0x01, 0x61, 0xe8, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x6d, 0x78, - 0x28, 0x01, 0xd0, 0x0c, 0x28, 0x04, 0xd0, 0x11, - 0x28, 0x05, 0xd1, 0xf5, 0xf7, 0xfe, 0xff, 0x8c, - 0xf7, 0xfe, 0xff, 0xe2, 0x65, 0x3c, 0x65, 0x7c, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, - 0xff, 0x83, 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, 0xff, 0xd4, - 0x65, 0x3c, 0x65, 0x7c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x63, 0x6c, 0x20, 0x02, 0x60, 0xfc, - 0xf0, 0x0e, 0xff, 0xbc, 0x20, 0x00, 0xf7, 0xfb, - 0xfc, 0xcf, 0x65, 0x7c, 0x65, 0x3e, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xfe, 0xff, 0xf4, - 0x65, 0x7c, 0x65, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0xb5, 0x90, 0x4c, 0x1b, 0x68, 0xe0, 0x28, 0x03, - 0xd0, 0x1f, 0x1f, 0xe7, 0x3f, 0x79, 0x6d, 0x38, - 0x28, 0x02, 0xd1, 0x1a, 0x6d, 0x78, 0x28, 0x01, - 0xd0, 0x1a, 0x28, 0x04, 0xd0, 0x20, 0x28, 0x05, - 0xd1, 0x13, 0x4a, 0x14, 0x49, 0x14, 0x48, 0x15, - 0xf7, 0xfe, 0xfe, 0x54, 0x21, 0x00, 0x20, 0x0e, - 0xf0, 0x11, 0xfb, 0x2a, 0x20, 0x01, 0xf0, 0x0e, - 0xff, 0x8d, 0x20, 0x03, 0x60, 0xe0, 0x68, 0xf8, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x01, 0xf0, 0x0e, - 0xff, 0x85, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0xf0, 0x0e, 0xff, 0x7f, 0x20, 0x00, - 0x70, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x20, 0x0b, 0xf0, 0x11, 0xfb, 0x10, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x2e, 0x08, 0x05, 0x54, - 0x2e, 0x08, 0x05, 0x4c, 0x2e, 0x08, 0x05, 0x50, - 0xb5, 0xf0, 0x4c, 0x21, 0x6d, 0x20, 0x28, 0x02, - 0xd1, 0x24, 0x26, 0xff, 0x6d, 0x60, 0x1d, 0xe7, - 0x37, 0x79, 0x28, 0x01, 0xd0, 0x1d, 0x28, 0x04, - 0xd0, 0x1f, 0x28, 0x05, 0xd1, 0x1a, 0x20, 0x01, - 0xf0, 0x0e, 0xff, 0x58, 0x25, 0x00, 0x68, 0xe0, - 0x28, 0x00, 0xd0, 0x04, 0x21, 0x00, 0x20, 0x00, - 0xf0, 0x0e, 0xfe, 0xfa, 0x60, 0xe5, 0x70, 0x3e, - 0x68, 0xf8, 0x28, 0x03, 0xd1, 0x14, 0x48, 0x13, - 0x22, 0x00, 0x68, 0x41, 0x20, 0x00, 0xf7, 0xfe, - 0xfd, 0xef, 0x6b, 0x38, 0xf7, 0xfe, 0xfe, 0x20, - 0xe0, 0x0f, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, - 0xfa, 0xd3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0x61, 0xf8, 0x6b, 0x38, 0xf7, 0xfe, - 0xfe, 0x0f, 0x20, 0x02, 0x60, 0xfd, 0xf0, 0x0e, - 0xff, 0x2d, 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, - 0xfa, 0xc3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x05, 0x48, - 0xb5, 0xb0, 0x04, 0x07, 0x0c, 0x3f, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x2f, 0x3f, 0xdd, 0x00, - 0x27, 0x3f, 0x48, 0x17, 0x6d, 0x01, 0x29, 0x02, - 0xd1, 0x13, 0x6d, 0x40, 0x25, 0x02, 0x4c, 0x15, - 0x28, 0x04, 0xd0, 0x11, 0x28, 0x05, 0xd1, 0x0c, - 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x11, 0xfa, 0xa4, - 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, 0xfa, 0xa0, - 0x20, 0x22, 0x1c, 0x39, 0xf0, 0x11, 0xfa, 0x9c, - 0x60, 0xe5, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x11, 0xfa, 0x94, - 0x21, 0x00, 0x20, 0x0d, 0xf0, 0x11, 0xfa, 0x90, - 0x20, 0x22, 0x1c, 0x39, 0xf0, 0x11, 0xfa, 0x8c, - 0x20, 0x00, 0xf7, 0xfe, 0xfd, 0xcd, 0x60, 0xe5, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0xb5, 0x00, 0x48, 0x0b, 0x6d, 0x01, 0x29, 0x02, - 0xd1, 0x10, 0x6d, 0x40, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x0b, 0x21, 0x00, 0x20, 0x16, - 0xf0, 0x11, 0xfa, 0x72, 0x20, 0x00, 0xf7, 0xfe, - 0xfd, 0xb3, 0x21, 0x00, 0x48, 0x03, 0x70, 0x01, - 0x21, 0x01, 0x60, 0xc1, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0xb5, 0x00, 0x48, 0x0b, 0x6d, 0x01, 0x29, 0x02, - 0xd1, 0x10, 0x6d, 0x40, 0x28, 0x04, 0xd0, 0x01, - 0x28, 0x05, 0xd1, 0x0b, 0x21, 0x00, 0x20, 0x1a, - 0xf0, 0x11, 0xfa, 0x56, 0x20, 0x00, 0xf7, 0xfe, - 0xfd, 0x97, 0x21, 0x00, 0x48, 0x03, 0x70, 0x01, - 0x21, 0x01, 0x60, 0xc1, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x04, 0x48, 0x2e, 0x08, 0x04, 0xc8, - 0x48, 0x03, 0x6d, 0x00, 0x28, 0x00, 0xd1, 0x00, - 0x47, 0x70, 0x20, 0xff, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0x48, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0x4d, 0x52, 0x6d, 0x29, 0x48, 0x52, - 0x26, 0x00, 0x29, 0x01, 0xd0, 0x4c, 0x29, 0x02, - 0xd1, 0x6e, 0x6d, 0x69, 0x29, 0x01, 0xd0, 0x20, - 0x29, 0x04, 0xd0, 0x2e, 0x29, 0x05, 0xd1, 0x3e, - 0x6c, 0xc1, 0x6c, 0x80, 0x1a, 0x08, 0xd5, 0x01, - 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, - 0x69, 0x28, 0xf0, 0x18, 0xff, 0xdd, 0x70, 0x20, - 0x20, 0x33, 0x06, 0x40, 0x6e, 0x41, 0x6e, 0x80, - 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, 0x18, 0x40, - 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, 0xf0, 0x18, - 0xff, 0xcf, 0x70, 0x38, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x6c, 0xc1, 0x6c, 0x80, 0x1a, 0x08, - 0xd5, 0x01, 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, - 0x43, 0x41, 0x69, 0x28, 0xf0, 0x18, 0xff, 0xc0, - 0x70, 0x20, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x33, 0x06, 0x40, 0x6e, 0x41, - 0x6e, 0x80, 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, - 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, - 0xf0, 0x18, 0xff, 0xae, 0x70, 0x38, 0x70, 0x26, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x70, 0x26, - 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x6d, 0x69, 0x29, 0x01, 0xd0, 0x21, 0x29, 0x04, - 0xd0, 0x2f, 0x29, 0x05, 0xd1, 0x3f, 0x69, 0x69, - 0x6c, 0xc0, 0x1a, 0x40, 0xd5, 0x01, 0x69, 0x29, - 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x69, 0x28, - 0xf0, 0x18, 0xff, 0x92, 0x70, 0x20, 0x21, 0x33, - 0x06, 0x49, 0x6a, 0xe8, 0x6e, 0x49, 0x1a, 0x08, - 0xd5, 0x01, 0x6a, 0x69, 0x18, 0x40, 0x21, 0x64, - 0x43, 0x41, 0x6a, 0x68, 0xf0, 0x18, 0xff, 0x84, - 0x70, 0x38, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xe0, 0x26, 0x69, 0x69, 0x6c, 0xc0, 0x1a, 0x40, - 0xd5, 0x01, 0x69, 0x29, 0x18, 0x40, 0x21, 0x64, - 0x43, 0x41, 0x69, 0x28, 0xf0, 0x18, 0xff, 0x74, - 0x70, 0x20, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x33, 0x06, 0x49, 0x6a, 0xe8, - 0x6e, 0x49, 0x1a, 0x08, 0xd5, 0x01, 0x6a, 0x69, - 0x18, 0x40, 0x21, 0x64, 0x43, 0x41, 0x6a, 0x68, - 0xf0, 0x18, 0xff, 0x62, 0x70, 0x38, 0x70, 0x26, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x70, 0x26, - 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x70, 0x26, 0x70, 0x3e, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x04, 0x48, - 0x66, 0x00, 0x00, 0x80, 0xb5, 0xf0, 0x1c, 0x17, - 0x9e, 0x05, 0x1a, 0xf2, 0x1c, 0x0d, 0x21, 0x00, - 0x1c, 0x1c, 0x42, 0xba, 0xda, 0x03, 0x1c, 0x08, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x42, 0xa0, - 0xd3, 0x01, 0x42, 0xb0, 0xd9, 0x03, 0x1c, 0x08, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x19, 0xc1, - 0x42, 0xb1, 0xd9, 0x0c, 0x1a, 0x32, 0x4e, 0x0a, - 0x64, 0x32, 0x1c, 0x29, 0xf7, 0xfb, 0xf8, 0x84, - 0x6c, 0x30, 0x1a, 0x3a, 0x18, 0x29, 0x1c, 0x20, - 0xf7, 0xfb, 0xf8, 0x7e, 0xe0, 0x03, 0x1c, 0x29, - 0x1c, 0x3a, 0xf7, 0xfb, 0xf8, 0x79, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0xb5, 0xf0, 0x1c, 0x17, - 0x9e, 0x05, 0x1a, 0xf2, 0x1c, 0x05, 0x20, 0x00, - 0x1c, 0x1c, 0x42, 0xba, 0xdb, 0x18, 0x42, 0xa1, - 0xd3, 0x16, 0x42, 0xb1, 0xd2, 0x14, 0x19, 0xc8, - 0x42, 0xb0, 0xd9, 0x0c, 0x1a, 0x72, 0x4e, 0x0a, - 0x64, 0x32, 0x1c, 0x28, 0xf7, 0xfb, 0xf8, 0x5c, - 0x6c, 0x30, 0x1a, 0x3a, 0x18, 0x28, 0x1c, 0x21, - 0xf7, 0xfb, 0xf8, 0x56, 0xe0, 0x03, 0x1c, 0x28, - 0x1c, 0x3a, 0xf7, 0xfb, 0xf8, 0x51, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x04, 0xc8, 0x47, 0x70, 0xb5, 0x00, - 0xb0, 0x82, 0x46, 0x6a, 0x49, 0x06, 0xa8, 0x01, - 0xf7, 0xfe, 0xfc, 0x58, 0x21, 0x00, 0x20, 0x0b, - 0xf0, 0x11, 0xf9, 0x2e, 0x20, 0x03, 0x49, 0x03, - 0x61, 0x88, 0xb0, 0x02, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0x64, 0x2e, 0x08, 0x05, 0x48, - 0xb5, 0x80, 0x4f, 0x0b, 0x22, 0x00, 0x20, 0x00, - 0x69, 0xf9, 0xf7, 0xfe, 0xfc, 0x2d, 0x21, 0x00, - 0x20, 0x0d, 0xf0, 0x11, 0xf9, 0x19, 0x21, 0x01, - 0x1f, 0xf8, 0x38, 0x79, 0x61, 0xc1, 0x6b, 0x00, - 0xf7, 0xfe, 0xfc, 0x56, 0x20, 0x00, 0x61, 0xb8, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0x48, 0xb5, 0x80, 0x4f, 0x06, - 0x68, 0x38, 0x1d, 0xc1, 0x31, 0xb5, 0x20, 0x2f, - 0x02, 0x80, 0xf0, 0x18, 0xfe, 0xbd, 0x60, 0x39, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x02, 0xcb, 0x10, 0x48, 0x05, 0x8f, 0xc1, - 0x29, 0x00, 0xd0, 0x05, 0x21, 0x00, 0x87, 0xc1, - 0x48, 0x03, 0x69, 0x01, 0x31, 0x01, 0x61, 0x01, - 0x47, 0x70, 0x00, 0x00, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x05, 0x68, 0x48, 0x03, 0x21, 0x00, - 0x60, 0x01, 0x48, 0x03, 0x69, 0x41, 0x31, 0x01, - 0x61, 0x41, 0x47, 0x70, 0x2e, 0x08, 0x48, 0x00, - 0x2e, 0x08, 0x05, 0x68, 0xb5, 0x00, 0xb0, 0x88, - 0x46, 0x68, 0xf0, 0x13, 0xfc, 0xbf, 0x48, 0x07, - 0x69, 0x81, 0x31, 0x01, 0x23, 0x01, 0x22, 0x06, - 0x61, 0x81, 0x21, 0x47, 0x02, 0x49, 0x05, 0x48, - 0xf0, 0x13, 0xfb, 0xac, 0xb0, 0x08, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0x68, - 0xb5, 0x90, 0x1c, 0x07, 0x20, 0xff, 0x30, 0xa5, - 0xb0, 0x85, 0x90, 0x00, 0x20, 0x01, 0x02, 0x40, - 0x90, 0x02, 0x48, 0x12, 0x90, 0x04, 0x20, 0x0e, - 0xab, 0x03, 0x80, 0x18, 0x46, 0x68, 0xf0, 0x13, - 0xfc, 0xd1, 0x2f, 0x00, 0xd0, 0x16, 0x20, 0x33, - 0x06, 0x40, 0x6d, 0x40, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc7, 0x98, 0x02, 0x1e, 0x79, 0xf0, 0x00, - 0xfb, 0x31, 0x4c, 0x09, 0x68, 0x20, 0x28, 0x00, - 0xd1, 0x04, 0x20, 0xa5, 0x01, 0xc0, 0xf0, 0x00, - 0xfb, 0x37, 0x60, 0x20, 0x98, 0x02, 0x1a, 0x38, - 0x49, 0x04, 0x60, 0x88, 0xb0, 0x05, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x1c, 0x00, 0x00, - 0x2e, 0x08, 0x00, 0x00, 0x2e, 0x08, 0x05, 0x68, - 0xb5, 0x00, 0x22, 0x01, 0x21, 0x01, 0x20, 0x00, - 0xf0, 0x0f, 0xf9, 0x2e, 0x48, 0x04, 0x68, 0x00, - 0x78, 0x01, 0x23, 0x06, 0x43, 0x19, 0x70, 0x01, - 0xf0, 0x00, 0xf9, 0xea, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0xc4, 0xb5, 0xf0, 0x48, 0x55, - 0x4e, 0x55, 0x80, 0x30, 0x27, 0x00, 0x4c, 0x55, - 0x86, 0xe7, 0x86, 0xa7, 0x48, 0x54, 0x60, 0x07, - 0xf0, 0x0b, 0xf8, 0x2e, 0x48, 0x53, 0xf0, 0x14, - 0xf8, 0xdb, 0xf7, 0xfa, 0xff, 0x29, 0x21, 0xff, - 0x48, 0x51, 0x60, 0x01, 0x68, 0x01, 0x29, 0x00, - 0xd0, 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0x01, - 0x4a, 0x4e, 0x60, 0xd1, 0x60, 0x07, 0xf7, 0xfc, - 0xfb, 0x17, 0x20, 0x01, 0xf7, 0xff, 0xff, 0x98, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x0e, 0xfc, 0x6c, - 0xf0, 0x01, 0xfa, 0xbc, 0x48, 0x48, 0x60, 0x07, - 0x25, 0x02, 0x48, 0x48, 0x60, 0x05, 0x20, 0x03, - 0x49, 0x47, 0x60, 0x08, 0x49, 0x47, 0x60, 0x08, - 0x49, 0x47, 0x60, 0x0d, 0x49, 0x47, 0x60, 0x08, - 0x48, 0x47, 0x60, 0x07, 0x48, 0x47, 0x65, 0x87, - 0xf0, 0x00, 0xf9, 0x8a, 0xf0, 0x14, 0xf9, 0x48, - 0x20, 0x00, 0xf0, 0x11, 0xfe, 0x85, 0x28, 0x00, - 0xd1, 0x64, 0x48, 0x43, 0xf0, 0x0e, 0xfa, 0xbe, - 0x20, 0x00, 0xf0, 0x0e, 0xfb, 0x2f, 0x87, 0xe7, - 0x87, 0xa7, 0x22, 0x01, 0xb4, 0x04, 0x22, 0x03, - 0x21, 0x01, 0x20, 0x00, 0x1c, 0x2b, 0xf0, 0x11, - 0xfb, 0x2b, 0x20, 0x02, 0xb0, 0x01, 0xf7, 0xfc, - 0xfc, 0x73, 0xf7, 0xff, 0xff, 0x95, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xfd, 0xfd, 0xc7, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xfd, 0xfd, 0xdb, 0xf0, 0x09, - 0xff, 0x4f, 0xf0, 0x09, 0xff, 0x8d, 0xf7, 0xfb, - 0xf9, 0xbf, 0x21, 0x18, 0x20, 0x14, 0xf7, 0xfd, - 0xf8, 0x11, 0xf7, 0xfd, 0xfb, 0xbf, 0xf7, 0xfb, - 0xfd, 0x0d, 0x03, 0xe8, 0xf0, 0x00, 0xfa, 0x5c, - 0xf0, 0x05, 0xfc, 0x30, 0x49, 0x2b, 0x70, 0x08, - 0x05, 0xa8, 0xf0, 0x1e, 0xf9, 0x78, 0x49, 0x2a, - 0x20, 0x17, 0xf0, 0x1e, 0xf9, 0x81, 0x49, 0x29, - 0x20, 0x08, 0xf0, 0x1e, 0xf9, 0x7d, 0xf0, 0x1e, - 0xf9, 0x73, 0x4b, 0x27, 0x40, 0x18, 0xf0, 0x1e, - 0xf9, 0x73, 0x01, 0xe8, 0xf0, 0x1e, 0xf9, 0x67, - 0x48, 0x24, 0x23, 0x01, 0x22, 0x08, 0x21, 0x81, - 0x01, 0x09, 0x60, 0x07, 0xf0, 0x11, 0xfa, 0x38, - 0xf0, 0x01, 0xfa, 0xd6, 0x49, 0x20, 0x20, 0x04, - 0xf0, 0x1e, 0xf9, 0x66, 0xf0, 0x1e, 0xf9, 0x5c, - 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, 0xf0, 0x1e, - 0xf9, 0x5b, 0x20, 0x10, 0xf0, 0x1e, 0xf9, 0x4f, - 0x87, 0x67, 0x21, 0x00, 0x1c, 0x30, 0xf7, 0xfd, - 0xfd, 0xa9, 0x1c, 0x38, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x2c, 0x00, 0x00, 0xfc, 0x2c, 0x00, 0x1f, 0xc0, - 0x2e, 0x08, 0x04, 0x98, 0x07, 0x77, 0x77, 0x20, - 0x72, 0x00, 0x02, 0x00, 0x2e, 0x08, 0x05, 0x68, - 0x6e, 0x00, 0x10, 0x00, 0x6e, 0x00, 0x11, 0x00, - 0x6e, 0x00, 0x14, 0x00, 0x6e, 0x00, 0x15, 0x00, - 0x6e, 0x00, 0x16, 0x00, 0x6e, 0x00, 0x17, 0x00, - 0x6e, 0x00, 0x18, 0x00, 0xcc, 0x00, 0x0f, 0x80, - 0x00, 0x80, 0x10, 0x80, 0x2e, 0x08, 0x1a, 0x94, - 0x2e, 0x00, 0x54, 0xa1, 0x2e, 0x00, 0x54, 0xc1, - 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x08, 0x48, 0x00, - 0x2e, 0x00, 0x54, 0x81, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf9, 0x55, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x4b, 0x0c, 0x18, 0xff, 0x21, 0x03, 0x48, 0x0c, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x01, 0x1c, 0x21, 0xf0, 0x1e, 0xf9, 0x0c, - 0xf0, 0x1e, 0xf9, 0x02, 0x23, 0x02, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf9, 0x01, 0xf0, 0x1e, - 0xf9, 0x6d, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x00, 0x00, 0x9e, 0x34, - 0x6e, 0x00, 0x03, 0x00, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf9, 0x29, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x21, 0x03, 0x37, 0xff, 0x37, 0x96, 0x48, 0x0b, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x01, 0x1c, 0x21, 0xf0, 0x1e, 0xf8, 0xe0, - 0xf0, 0x1e, 0xf8, 0xd6, 0x23, 0x02, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf8, 0xd5, 0xf0, 0x1e, - 0xf9, 0x41, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x6e, 0x00, 0x03, 0x00, - 0xb5, 0x00, 0xf0, 0x1e, 0xf9, 0x01, 0x20, 0x03, - 0x49, 0x05, 0x60, 0x08, 0xf0, 0x1e, 0xf8, 0xc0, - 0x23, 0x02, 0x43, 0x18, 0xf0, 0x1e, 0xf8, 0xc0, - 0xf0, 0x1e, 0xf9, 0x2c, 0xbc, 0x08, 0x47, 0x18, - 0x6e, 0x00, 0x03, 0x00, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf8, 0xed, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x4b, 0x0c, 0x18, 0xff, 0x21, 0x03, 0x48, 0x0c, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x05, 0x1c, 0x21, 0xf0, 0x1e, 0xf8, 0xa4, - 0xf0, 0x1e, 0xf8, 0x9a, 0x23, 0x20, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf8, 0x99, 0xf0, 0x1e, - 0xf9, 0x05, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x00, 0x00, 0x9e, 0x34, - 0x6e, 0x00, 0x04, 0x00, 0xb5, 0x90, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x1e, 0xf8, 0xc1, 0x2f, 0x01, - 0xda, 0x00, 0x27, 0x01, 0x4b, 0x0e, 0x42, 0x9f, - 0xdd, 0x00, 0x1c, 0x1f, 0x3f, 0x01, 0x04, 0x3f, - 0x21, 0x03, 0x37, 0xff, 0x37, 0x96, 0x48, 0x0b, - 0x60, 0x01, 0x60, 0x47, 0x21, 0x01, 0x60, 0x01, - 0x20, 0x05, 0x1c, 0x21, 0xf0, 0x1e, 0xf8, 0x78, - 0xf0, 0x1e, 0xf8, 0x6e, 0x23, 0x20, 0x43, 0xdb, - 0x40, 0x18, 0xf0, 0x1e, 0xf8, 0x6d, 0xf0, 0x1e, - 0xf8, 0xd9, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x00, 0xfd, 0xe8, 0x6e, 0x00, 0x04, 0x00, - 0xb5, 0x00, 0xf0, 0x1e, 0xf8, 0x99, 0x20, 0x03, - 0x49, 0x05, 0x60, 0x08, 0xf0, 0x1e, 0xf8, 0x58, - 0x23, 0x20, 0x43, 0x18, 0xf0, 0x1e, 0xf8, 0x58, - 0xf0, 0x1e, 0xf8, 0xc4, 0xbc, 0x08, 0x47, 0x18, - 0x6e, 0x00, 0x04, 0x00, 0xb5, 0x00, 0x48, 0x0b, - 0x68, 0x41, 0x31, 0x14, 0x60, 0x41, 0x68, 0x81, - 0x31, 0x01, 0x60, 0x81, 0x48, 0x08, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x28, 0x01, 0xd1, 0x01, - 0xf7, 0xfe, 0xfa, 0x52, 0xbc, 0x08, 0x47, 0x18, - 0x48, 0x04, 0x21, 0x10, 0xf0, 0x0f, 0xf8, 0x34, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x08, 0x04, 0xfc, 0x2e, 0x08, 0x05, 0xb4, - 0xb5, 0x00, 0xf0, 0x1e, 0xf8, 0x69, 0x21, 0x00, - 0x48, 0x08, 0x60, 0x41, 0x60, 0x81, 0x49, 0x08, - 0x20, 0x07, 0xf0, 0x1e, 0xf8, 0x2d, 0xf0, 0x1e, - 0xf8, 0x23, 0x23, 0x80, 0x43, 0xdb, 0x40, 0x18, - 0xf0, 0x1e, 0xf8, 0x22, 0xf0, 0x1e, 0xf8, 0x8e, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x00, 0x58, 0xe1, 0x48, 0x01, 0x68, 0x40, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xb4, - 0xb5, 0x90, 0x49, 0x0d, 0x1c, 0x0f, 0x48, 0x0d, - 0x24, 0x1e, 0x22, 0x10, 0x1c, 0x23, 0xf0, 0x0f, - 0xf9, 0x35, 0x22, 0x02, 0x21, 0x10, 0x1c, 0x38, - 0x1c, 0x23, 0xf0, 0x0b, 0xfb, 0x9d, 0x49, 0x08, - 0x20, 0x10, 0xf0, 0x1e, 0xf8, 0x05, 0xf0, 0x1d, - 0xff, 0xfb, 0x4b, 0x06, 0x40, 0x18, 0xf0, 0x1d, - 0xff, 0xfb, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x48, 0x10, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x00, 0x59, 0xa5, 0xff, 0xfe, 0xff, 0xff, - 0xb5, 0x00, 0xb0, 0x86, 0x46, 0x68, 0x49, 0x0c, - 0xc9, 0x0c, 0xc0, 0x0c, 0xc9, 0x0c, 0xc0, 0x0c, - 0xc9, 0x0c, 0xc0, 0x0c, 0x48, 0x09, 0xab, 0x00, - 0xcb, 0x0e, 0xb0, 0x03, 0xf0, 0x0f, 0xf9, 0x3a, - 0xb0, 0x03, 0x48, 0x07, 0x68, 0x01, 0x08, 0x4a, - 0xd3, 0x04, 0x08, 0x49, 0x00, 0x49, 0x23, 0x04, - 0x43, 0x19, 0x60, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x48, 0x10, 0x2e, 0x08, 0x05, 0xb4, - 0x2e, 0x08, 0x00, 0x04, 0xb5, 0x80, 0x29, 0x0c, - 0xd2, 0x00, 0x21, 0x0c, 0x31, 0x07, 0x08, 0xc9, - 0x00, 0xc9, 0x27, 0x00, 0x68, 0x02, 0x42, 0x82, - 0xd0, 0x03, 0x68, 0x93, 0x42, 0x8b, 0xd3, 0x0d, - 0x1c, 0x17, 0x2f, 0x00, 0xd0, 0x1e, 0x68, 0xb8, - 0x1a, 0x42, 0x2a, 0x0c, 0xd2, 0x00, 0x1c, 0x01, - 0x1a, 0x42, 0xd1, 0x05, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x76, 0xe0, 0x0c, 0x68, 0x12, 0xe7, 0xea, - 0x1d, 0xca, 0x32, 0x01, 0x1a, 0x80, 0x60, 0xb8, - 0x19, 0xc0, 0x1d, 0xc7, 0x37, 0x01, 0x20, 0x00, - 0x60, 0x38, 0x60, 0x78, 0x60, 0xb9, 0x68, 0xb8, - 0x60, 0x38, 0x1d, 0xf8, 0x30, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xb0, 0x1f, 0xcc, - 0x3c, 0x01, 0x68, 0x21, 0x19, 0x0a, 0x60, 0xa1, - 0x68, 0x07, 0x32, 0x08, 0x42, 0x87, 0xd1, 0x06, - 0x68, 0x41, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x48, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x42, 0x97, - 0xd1, 0x0f, 0x68, 0x7d, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x46, 0x68, 0xa0, 0x68, 0xb9, 0x18, 0x40, - 0x30, 0x08, 0x60, 0xa0, 0x1c, 0x20, 0x1c, 0x29, - 0xf0, 0x00, 0xf8, 0x36, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xbb, 0x19, 0xdb, 0x33, 0x08, - 0x42, 0xa3, 0xd1, 0x13, 0x68, 0xb8, 0x18, 0x40, - 0x30, 0x08, 0x60, 0xb8, 0x19, 0xc0, 0x68, 0x3c, - 0x30, 0x08, 0x42, 0xa0, 0xd1, 0xdc, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x29, 0x68, 0xb8, 0x68, 0xa1, - 0x18, 0x40, 0x30, 0x08, 0x60, 0xb8, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x42, 0xbc, 0xd2, 0x06, - 0x68, 0x79, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x14, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0x3f, - 0xe7, 0xc0, 0xb5, 0x00, 0x31, 0x10, 0x32, 0x01, - 0x1c, 0x0b, 0x1a, 0x51, 0x39, 0x08, 0x60, 0x99, - 0x60, 0x00, 0x1c, 0x01, 0x60, 0x40, 0x1c, 0x18, - 0xf0, 0x00, 0xf8, 0x02, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x0a, 0x60, 0x02, 0x60, 0x08, 0x68, 0x02, - 0x60, 0x50, 0x60, 0x41, 0x47, 0x70, 0xc8, 0x06, - 0x38, 0x08, 0x60, 0x11, 0xc8, 0x03, 0x60, 0x41, - 0x47, 0x70, 0xb5, 0x00, 0x1c, 0x0a, 0x1c, 0x01, - 0x48, 0x02, 0xf7, 0xff, 0xff, 0xde, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x05, 0xd8, - 0xb5, 0x90, 0x1c, 0x07, 0xf0, 0x1d, 0xff, 0x24, - 0x23, 0x11, 0x05, 0x1b, 0x1c, 0x04, 0x43, 0x18, - 0xf0, 0x1d, 0xff, 0x22, 0x1c, 0x39, 0x48, 0x05, - 0xf7, 0xff, 0xff, 0x50, 0x1c, 0x07, 0x1c, 0x20, - 0xf0, 0x1d, 0xff, 0x1a, 0x1c, 0x38, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x05, 0xd8, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x02, 0xf7, 0xff, - 0xff, 0x41, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xd8, 0xb5, 0x90, 0x1c, 0x07, - 0xd0, 0x0e, 0xf0, 0x1d, 0xff, 0x01, 0x23, 0x11, - 0x05, 0x1b, 0x1c, 0x04, 0x43, 0x18, 0xf0, 0x1d, - 0xfe, 0xff, 0x1c, 0x39, 0x48, 0x04, 0xf7, 0xff, - 0xff, 0x61, 0x1c, 0x20, 0xf0, 0x1d, 0xfe, 0xf8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xd8, 0xb5, 0x00, 0x4a, 0x04, - 0xc2, 0x03, 0x1c, 0x0a, 0x1c, 0x01, 0x48, 0x03, - 0xf7, 0xff, 0xff, 0x97, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xd0, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x02, 0xf7, 0xff, - 0xff, 0x11, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xd0, 0xb5, 0x00, 0x49, 0x08, - 0x68, 0x0a, 0x42, 0x90, 0xd3, 0x02, 0x68, 0x49, - 0x42, 0x88, 0xd9, 0x03, 0xf7, 0xff, 0xff, 0xc6, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x01, 0x48, 0x03, - 0xf7, 0xff, 0xff, 0x30, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xd0, - 0xb5, 0x00, 0x4a, 0x05, 0x60, 0x90, 0x60, 0xd1, - 0x1c, 0x0a, 0x1c, 0x01, 0x48, 0x03, 0xf7, 0xff, - 0xff, 0x68, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xe0, - 0xb5, 0x00, 0x1c, 0x01, 0x48, 0x02, 0xf7, 0xff, - 0xfe, 0xe1, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x05, 0xe0, 0xb5, 0x00, 0x49, 0x08, - 0x68, 0x8a, 0x42, 0x90, 0xd3, 0x02, 0x68, 0xc9, - 0x42, 0x88, 0xd9, 0x03, 0xf7, 0xff, 0xff, 0x96, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x01, 0x48, 0x03, - 0xf7, 0xff, 0xff, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x05, 0xc0, 0x2e, 0x08, 0x05, 0xe0, - 0xb5, 0xf0, 0x06, 0x07, 0x0e, 0x3f, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x81, 0x91, 0x00, 0x06, 0x16, - 0x0e, 0x36, 0x00, 0xbd, 0x4c, 0x15, 0x59, 0x60, - 0x28, 0x00, 0xd1, 0x15, 0xf7, 0xfb, 0xfa, 0x06, - 0x22, 0x00, 0xb4, 0x04, 0x23, 0x00, 0x22, 0x02, - 0x99, 0x01, 0x1c, 0x38, 0xf0, 0x0a, 0xfd, 0x5c, - 0x23, 0x01, 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x01, - 0x1c, 0x38, 0xb0, 0x01, 0xf0, 0x0a, 0xff, 0x18, - 0x20, 0x03, 0x00, 0x71, 0x4a, 0x0a, 0x52, 0x50, - 0x59, 0x60, 0x30, 0x01, 0x51, 0x60, 0x48, 0x09, - 0x23, 0x14, 0x5e, 0xc1, 0x29, 0x00, 0xd1, 0x02, - 0x49, 0x07, 0x4a, 0x08, 0x65, 0xd1, 0x8a, 0x81, - 0x31, 0x01, 0x82, 0x81, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xca, 0x84, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x07, 0x68, - 0x2e, 0x02, 0xc8, 0x94, 0xa0, 0x00, 0x0d, 0x00, - 0xb5, 0xb0, 0x06, 0x07, 0x0e, 0x3f, 0x06, 0x0c, - 0x0e, 0x24, 0x00, 0xb9, 0x48, 0x1a, 0x58, 0x42, - 0x3a, 0x01, 0x50, 0x42, 0xd1, 0x20, 0x23, 0x01, - 0x02, 0x9b, 0x00, 0x5a, 0x21, 0x02, 0x1c, 0x38, - 0xf0, 0x0a, 0xfe, 0xe6, 0x22, 0x00, 0xb4, 0x04, - 0x25, 0x00, 0x1c, 0x38, 0x1c, 0x2b, 0x49, 0x13, - 0xf0, 0x0a, 0xfd, 0x1a, 0x00, 0x61, 0xb0, 0x01, - 0x48, 0x11, 0x52, 0x45, 0x48, 0x0f, 0x4a, 0x11, - 0x52, 0x50, 0x00, 0x79, 0x4a, 0x10, 0x52, 0x50, - 0x00, 0x62, 0x19, 0x12, 0x00, 0x92, 0x49, 0x0f, - 0x18, 0x53, 0x81, 0x1d, 0x52, 0x88, 0x80, 0x58, - 0x48, 0x0d, 0x8a, 0x81, 0x39, 0x01, 0x82, 0x81, - 0x23, 0x14, 0x5e, 0xc0, 0x28, 0x00, 0xd1, 0x03, - 0x20, 0xd7, 0x00, 0xc0, 0x49, 0x09, 0x65, 0xc8, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x02, 0xca, 0x84, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x49, 0xa8, 0x2e, 0x08, 0x48, 0x28, - 0x2e, 0x08, 0x07, 0x68, 0xa0, 0x00, 0x0d, 0x00, - 0xb5, 0xf0, 0x04, 0x06, 0x0c, 0x36, 0x04, 0x0c, - 0x0c, 0x24, 0x1c, 0x17, 0xb0, 0x8a, 0x46, 0x69, - 0x1c, 0x30, 0x1c, 0x22, 0xf0, 0x00, 0xf8, 0xb0, - 0x23, 0x01, 0x1c, 0x05, 0x42, 0xd8, 0xd1, 0x03, - 0xb0, 0x0a, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x4b, 0x4e, 0x42, 0x9c, 0xd1, 0x06, 0xa8, 0x00, - 0x88, 0x00, 0x1c, 0x31, 0x1c, 0x2a, 0xf7, 0xff, - 0xff, 0x57, 0xe0, 0x7f, 0x20, 0x20, 0x40, 0x20, - 0x28, 0x20, 0xd1, 0x1f, 0x06, 0x2a, 0x0e, 0x12, - 0xa8, 0x00, 0x88, 0x00, 0x06, 0x00, 0x0e, 0x00, - 0x1c, 0x31, 0x1c, 0x23, 0xf7, 0xfd, 0xf8, 0x72, - 0x28, 0x00, 0xd0, 0x6f, 0x48, 0x42, 0x00, 0x69, - 0x4a, 0x42, 0x52, 0x50, 0xa9, 0x00, 0x88, 0x09, - 0x00, 0x49, 0x4a, 0x41, 0x52, 0x50, 0xa8, 0x00, - 0x88, 0x00, 0x1c, 0x29, 0xf0, 0x00, 0xf9, 0xce, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x0a, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x21, 0x00, - 0xaa, 0x01, 0x88, 0x3b, 0x0a, 0x1b, 0x70, 0x13, - 0x88, 0x3b, 0x93, 0x09, 0x32, 0x01, 0x06, 0x1b, - 0xd0, 0x02, 0x1c, 0x48, 0x06, 0x00, 0x0e, 0x00, - 0x9b, 0x09, 0x70, 0x13, 0x31, 0x01, 0x32, 0x01, - 0x37, 0x02, 0x29, 0x0e, 0xdb, 0xed, 0x21, 0x00, - 0x23, 0x00, 0x70, 0x13, 0x31, 0x01, 0x32, 0x01, - 0x29, 0x04, 0xdb, 0xfa, 0x21, 0x0c, 0x40, 0x21, - 0x29, 0x0c, 0xd1, 0x03, 0x04, 0x21, 0x0c, 0x09, - 0x24, 0x01, 0x43, 0x0c, 0x28, 0x06, 0xdc, 0x0e, - 0x06, 0x22, 0x0e, 0x12, 0xb4, 0x04, 0x06, 0x2a, - 0x0e, 0x12, 0xa8, 0x01, 0x88, 0x00, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x31, 0xab, 0x02, 0xf7, 0xfc, - 0xfc, 0x4f, 0xb0, 0x01, 0xe0, 0x1e, 0x28, 0x0a, - 0xdc, 0x0e, 0x06, 0x22, 0x0e, 0x12, 0xb4, 0x04, - 0x06, 0x2a, 0x0e, 0x12, 0xa8, 0x01, 0x88, 0x00, - 0x06, 0x00, 0x0e, 0x00, 0x1c, 0x31, 0xab, 0x02, - 0xf7, 0xfc, 0xfc, 0x58, 0xb0, 0x01, 0xe0, 0x0d, - 0x06, 0x22, 0x0e, 0x12, 0xb4, 0x04, 0x06, 0x2a, - 0x0e, 0x12, 0xa8, 0x01, 0x88, 0x00, 0x06, 0x00, - 0x0e, 0x00, 0x1c, 0x31, 0xab, 0x02, 0xf7, 0xfc, - 0xfc, 0x63, 0xb0, 0x01, 0x28, 0x00, 0xd0, 0x05, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x0a, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xff, 0xa8, 0x00, - 0x88, 0x00, 0x00, 0x6a, 0x19, 0x52, 0x00, 0x92, - 0x49, 0x0a, 0x52, 0x88, 0x18, 0x50, 0x80, 0x46, - 0x80, 0x84, 0x49, 0x05, 0x80, 0xc1, 0x21, 0x01, - 0x81, 0x01, 0x1c, 0x28, 0xb0, 0x0a, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0xb9, 0x6a, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x49, 0xa8, 0x2e, 0x08, 0x48, 0x28, - 0xb4, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x17, - 0x0c, 0x3f, 0xb0, 0x82, 0x48, 0x58, 0x22, 0x00, - 0x4d, 0x58, 0x95, 0x01, 0x1c, 0x06, 0x00, 0x53, - 0x9d, 0x01, 0x5a, 0xed, 0x42, 0xb5, 0xd1, 0x02, - 0x04, 0x10, 0x0c, 0x00, 0xe0, 0x02, 0x32, 0x01, - 0x2a, 0x20, 0xdb, 0xf4, 0x42, 0xb0, 0xd1, 0x04, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, - 0x47, 0x70, 0x80, 0x0e, 0x4a, 0x4e, 0x92, 0x00, - 0x4d, 0x4e, 0x4a, 0x4f, 0x4b, 0x4f, 0x42, 0x9f, - 0xd1, 0x32, 0x23, 0x00, 0x00, 0x5f, 0x5b, 0xd7, - 0x42, 0xa7, 0xd1, 0x0a, 0x00, 0x5f, 0x5b, 0xef, - 0x2f, 0x03, 0xd1, 0x01, 0x80, 0x0b, 0xe0, 0x07, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, - 0x47, 0x70, 0x33, 0x01, 0x2b, 0x1c, 0xdb, 0xed, - 0x88, 0x0f, 0x4b, 0x3f, 0x42, 0x9f, 0xd1, 0x0a, - 0x27, 0x00, 0x00, 0x7b, 0x5a, 0xd6, 0x4b, 0x3c, - 0x42, 0x9e, 0xd1, 0x01, 0x80, 0x0f, 0xe0, 0x02, - 0x37, 0x01, 0x2f, 0x1c, 0xdb, 0xf5, 0x88, 0x0f, - 0x4b, 0x37, 0x42, 0x9f, 0xd1, 0x04, 0x20, 0x00, - 0x43, 0xc0, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x23, 0x03, 0x00, 0x47, 0x9e, 0x00, 0x53, 0xf3, - 0x88, 0x0f, 0x00, 0x7f, 0x53, 0xeb, 0xe0, 0x54, - 0x23, 0x20, 0x40, 0x3b, 0x2b, 0x20, 0xd1, 0x1e, - 0x23, 0x00, 0x00, 0x5f, 0x5b, 0xd7, 0x42, 0xa7, - 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x33, 0x01, 0x2b, 0x1c, - 0xdb, 0xf3, 0x27, 0x00, 0x00, 0x7b, 0x5a, 0xd5, - 0x42, 0xb5, 0xd1, 0x01, 0x80, 0x0f, 0xe0, 0x02, - 0x37, 0x01, 0x2f, 0x1c, 0xdb, 0xf6, 0x88, 0x0f, - 0x42, 0xb7, 0xd1, 0x36, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x23, 0x00, - 0x00, 0x5f, 0x5b, 0xd7, 0x42, 0xa7, 0xd1, 0x0a, - 0x00, 0x5f, 0x5b, 0xef, 0x2f, 0x02, 0xd1, 0x01, - 0x80, 0x0b, 0xe0, 0x07, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, 0x33, 0x01, - 0x2b, 0x1c, 0xdb, 0xed, 0x88, 0x0f, 0x4b, 0x14, - 0x42, 0x9f, 0xd1, 0x0a, 0x27, 0x00, 0x00, 0x7b, - 0x5a, 0xd6, 0x4b, 0x11, 0x42, 0x9e, 0xd1, 0x01, - 0x80, 0x0f, 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x1c, - 0xdb, 0xf5, 0x88, 0x0f, 0x4b, 0x0c, 0x42, 0x9f, - 0xd1, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x23, 0x02, 0x00, 0x47, - 0x9e, 0x00, 0x53, 0xf3, 0x88, 0x0f, 0x00, 0x7f, - 0x53, 0xeb, 0x00, 0x43, 0x9d, 0x01, 0x52, 0xec, - 0x88, 0x09, 0x00, 0x49, 0x52, 0x54, 0x04, 0x00, - 0x14, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x49, 0xe0, - 0x2e, 0x08, 0x4a, 0x20, 0x2e, 0x08, 0x4a, 0x60, - 0x2e, 0x08, 0x49, 0xa8, 0x00, 0x00, 0xb9, 0x6a, - 0xb5, 0xf0, 0x04, 0x07, 0x0c, 0x3f, 0xb0, 0x81, - 0x4a, 0x34, 0x92, 0x00, 0x1c, 0x11, 0x42, 0x97, - 0xd0, 0x01, 0x2f, 0x20, 0xdb, 0x05, 0x20, 0x00, - 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x7c, 0x4a, 0x2e, 0x5b, 0x10, - 0x42, 0x88, 0xd1, 0x05, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x49, 0x28, 0x53, 0x11, 0x23, 0x00, 0x49, 0x29, - 0x00, 0x5e, 0x5b, 0x8e, 0x42, 0x86, 0xd1, 0x02, - 0x04, 0x1d, 0x0c, 0x2d, 0xe0, 0x02, 0x33, 0x01, - 0x2b, 0x1c, 0xdb, 0xf5, 0x23, 0x00, 0x00, 0x5e, - 0x5b, 0x96, 0x42, 0x86, 0xd1, 0x03, 0x04, 0x1a, - 0x0c, 0x12, 0x92, 0x00, 0xe0, 0x02, 0x33, 0x01, - 0x2b, 0x20, 0xdb, 0xf4, 0x9a, 0x00, 0x4e, 0x1b, - 0x42, 0xb2, 0xd1, 0x0d, 0x22, 0x00, 0x00, 0x53, - 0x5a, 0xcb, 0x42, 0x83, 0xd1, 0x05, 0x23, 0x00, - 0x00, 0x50, 0x4a, 0x19, 0x52, 0x13, 0x52, 0x0e, - 0xe0, 0x02, 0x32, 0x01, 0x2a, 0x1c, 0xdb, 0xf2, - 0x4e, 0x16, 0x5b, 0x30, 0x28, 0x02, 0xd1, 0x05, - 0x23, 0x00, 0x53, 0x33, 0x1c, 0x28, 0x1c, 0x39, - 0xf0, 0x00, 0xf8, 0x38, 0x5b, 0x30, 0x28, 0x01, - 0xd1, 0x0a, 0x1c, 0x38, 0xf7, 0xfc, 0xff, 0xe6, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x5b, 0x30, 0x28, 0x03, 0xd1, 0x03, 0x1c, 0x28, - 0x1c, 0x39, 0xf7, 0xff, 0xfd, 0xcd, 0x04, 0x38, - 0x14, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x49, 0xe0, 0x2e, 0x08, 0x49, 0xa8, - 0x2e, 0x08, 0x4a, 0x60, 0x2e, 0x08, 0x4a, 0x20, - 0x04, 0x01, 0x0c, 0x09, 0x20, 0x02, 0x00, 0x4b, - 0x18, 0x5b, 0x00, 0x9b, 0x4a, 0x03, 0x18, 0x99, - 0x81, 0x08, 0x48, 0x03, 0x52, 0xd0, 0x80, 0x48, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x48, 0x28, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0x80, 0x04, 0x0f, - 0x0c, 0x3f, 0x06, 0x39, 0x0e, 0x09, 0x06, 0x00, - 0x0e, 0x00, 0xf7, 0xfc, 0xfc, 0x1b, 0x20, 0x00, - 0x00, 0x7b, 0x19, 0xdb, 0x00, 0x9b, 0x4a, 0x04, - 0x18, 0x99, 0x81, 0x08, 0x48, 0x03, 0x52, 0xd0, - 0x80, 0x48, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x48, 0x28, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x80, 0x04, 0x09, 0x0c, 0x09, 0x78, 0x42, - 0x02, 0x12, 0x78, 0x83, 0x43, 0x1a, 0x05, 0x12, - 0x0d, 0x12, 0x27, 0x00, 0x43, 0xff, 0x32, 0x03, - 0x42, 0x8a, 0xd0, 0x03, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x0b, 0xf9, 0xa0, - 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x9c, 0x09, - 0x04, 0x00, 0x0c, 0x00, 0xb0, 0x81, 0x90, 0x00, - 0x06, 0x09, 0x0e, 0x09, 0x06, 0x12, 0x0e, 0x12, - 0xb0, 0x88, 0x4f, 0x16, 0x68, 0xb8, 0x28, 0x0c, - 0xdb, 0x06, 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x09, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x23, 0x00, 0x00, 0x45, 0x46, 0x6e, - 0x53, 0x73, 0x30, 0x01, 0x04, 0x00, 0x14, 0x00, - 0x28, 0x10, 0xdb, 0xf7, 0x02, 0x08, 0x43, 0x10, - 0xab, 0x00, 0x80, 0x18, 0x46, 0x6a, 0x21, 0x04, - 0x98, 0x08, 0xf7, 0xff, 0xfd, 0x95, 0x28, 0x00, - 0xda, 0x01, 0xb0, 0x09, 0xe7, 0xe4, 0x00, 0x81, - 0x4a, 0x05, 0x50, 0x54, 0x9b, 0x0c, 0x4a, 0x05, - 0x50, 0x53, 0x68, 0xb9, 0x31, 0x01, 0x60, 0xb9, - 0xb0, 0x09, 0xe7, 0xd9, 0x2e, 0x08, 0x07, 0x80, - 0x2e, 0x08, 0x4b, 0x18, 0x2e, 0x08, 0x4a, 0x98, - 0xb5, 0x80, 0x04, 0x07, 0x14, 0x3f, 0xd5, 0x04, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0xf4, - 0x20, 0x00, 0x00, 0xb9, 0x4a, 0x05, 0x50, 0x50, - 0x4a, 0x05, 0x50, 0x50, 0x49, 0x05, 0x68, 0x8a, - 0x3a, 0x01, 0x60, 0x8a, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x4a, 0x98, - 0x2e, 0x08, 0x4b, 0x18, 0x2e, 0x08, 0x07, 0x80, - 0xb5, 0x90, 0x27, 0x00, 0x4c, 0x08, 0x00, 0xb8, - 0x58, 0x20, 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x38, - 0xf7, 0xff, 0xff, 0xd6, 0x37, 0x01, 0x2f, 0x20, - 0xdb, 0xf5, 0x20, 0x00, 0x49, 0x03, 0x60, 0xc8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4a, 0x98, 0x2e, 0x08, 0x07, 0x80, - 0xb5, 0x00, 0xf7, 0xff, 0xff, 0xe5, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xff, 0x04, 0x00, 0x14, 0x00, - 0xb0, 0x83, 0x90, 0x00, 0x1c, 0x0f, 0x04, 0x11, - 0x0c, 0x09, 0x24, 0x00, 0x1c, 0x38, 0x1c, 0x0d, - 0xb0, 0x81, 0xf7, 0xff, 0xff, 0x59, 0x1c, 0x01, - 0x20, 0x00, 0x29, 0x00, 0xd0, 0x04, 0xb0, 0x04, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x78, 0xf9, 0x02, 0x09, 0x79, 0x3a, 0x43, 0x11, - 0x04, 0x09, 0x0c, 0x09, 0x9b, 0x07, 0x88, 0x1a, - 0x42, 0x91, 0xd0, 0x01, 0xb0, 0x04, 0xe7, 0xef, - 0x7a, 0x39, 0x02, 0x09, 0x7a, 0x7a, 0x43, 0x11, - 0x04, 0xc9, 0x0c, 0xc9, 0x91, 0x00, 0x7a, 0xb9, - 0x02, 0x09, 0x7a, 0xfa, 0x43, 0x11, 0x05, 0x0b, - 0x0d, 0x1b, 0x1d, 0xf9, 0x31, 0x05, 0x27, 0x00, - 0x1d, 0xd8, 0x30, 0x09, 0x1a, 0x2a, 0x2b, 0x00, - 0xdd, 0x0a, 0x78, 0x08, 0x28, 0x09, 0xd1, 0x00, - 0x37, 0x01, 0x78, 0x48, 0x1c, 0x85, 0x1b, 0x5b, - 0x18, 0x40, 0x1c, 0x81, 0x2b, 0x00, 0xdc, 0xf4, - 0x2a, 0x00, 0xdd, 0x36, 0x48, 0x2c, 0x88, 0x06, - 0x96, 0x03, 0x88, 0x85, 0x95, 0x02, 0x78, 0xc8, - 0x02, 0x00, 0x79, 0x0b, 0x43, 0x18, 0x05, 0x00, - 0x0d, 0x00, 0x78, 0x0b, 0x2b, 0x01, 0xd0, 0x01, - 0x2b, 0x02, 0xd1, 0x06, 0x78, 0x4d, 0x02, 0x2d, - 0x78, 0x8e, 0x43, 0x35, 0x04, 0xed, 0x0c, 0xed, - 0x9e, 0x03, 0x2b, 0x04, 0xd0, 0x01, 0x2b, 0x03, - 0xd1, 0x09, 0x78, 0x4b, 0x02, 0x1b, 0x78, 0x8d, - 0x43, 0x2b, 0x04, 0xdb, 0x0c, 0xdb, 0x9d, 0x02, - 0x42, 0xab, 0xd1, 0x00, 0x24, 0x01, 0x1d, 0x43, - 0x1a, 0xd2, 0x31, 0x05, 0x28, 0x00, 0xdd, 0x0a, - 0x78, 0x0b, 0x2b, 0x09, 0xd1, 0x00, 0x37, 0x01, - 0x78, 0x4b, 0x1c, 0x9d, 0x1b, 0x40, 0x18, 0x59, - 0x31, 0x02, 0x28, 0x00, 0xdc, 0xf4, 0x2a, 0x00, - 0xdc, 0xcd, 0x2c, 0x00, 0xd0, 0x17, 0xf7, 0xff, - 0xff, 0x63, 0x99, 0x00, 0x48, 0x0f, 0x80, 0x01, - 0x2f, 0x00, 0xd0, 0x0d, 0x20, 0x0a, 0xb0, 0x84, - 0xab, 0x00, 0x80, 0x18, 0x20, 0x02, 0x70, 0x98, - 0x9b, 0x0b, 0x93, 0x01, 0x46, 0x69, 0x20, 0x75, - 0xf0, 0x04, 0xff, 0x76, 0xb0, 0x04, 0xe0, 0x07, - 0xf7, 0xfa, 0xf8, 0xf4, 0xe0, 0x04, 0x98, 0x01, - 0xf7, 0xff, 0xff, 0x2a, 0xf0, 0x00, 0xf8, 0x22, - 0x20, 0x00, 0xb0, 0x04, 0xe7, 0x74, 0x00, 0x00, - 0x2e, 0x08, 0x07, 0x80, 0x2e, 0x08, 0x00, 0x08, - 0xb4, 0x90, 0x04, 0x02, 0x0c, 0x12, 0x04, 0x0f, - 0x0c, 0x3f, 0x4b, 0x07, 0x68, 0xd8, 0x28, 0x80, - 0xda, 0x08, 0x2a, 0x00, 0xd0, 0x06, 0x00, 0x41, - 0x4c, 0x04, 0x52, 0x67, 0x4f, 0x04, 0x52, 0x7a, - 0x30, 0x01, 0x60, 0xd8, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x07, 0x80, 0x2e, 0x08, 0x4b, 0x98, - 0x2e, 0x08, 0x4c, 0x98, 0xb5, 0x90, 0x4f, 0x13, - 0x24, 0x00, 0x43, 0xe4, 0x68, 0xf8, 0x28, 0x00, - 0xd1, 0x03, 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x40, 0x49, 0x0e, 0x18, 0x41, - 0x1e, 0x8a, 0xb4, 0x04, 0x49, 0x0d, 0x18, 0x40, - 0x38, 0x40, 0x8f, 0xc0, 0x4b, 0x0c, 0x22, 0xff, - 0x21, 0x02, 0xf7, 0xff, 0xfe, 0xaf, 0xb0, 0x01, - 0x28, 0x00, 0xda, 0x03, 0x1c, 0x20, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x68, 0xf8, 0x38, 0x01, - 0x60, 0xf8, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x07, 0x80, - 0x2e, 0x08, 0x4c, 0x98, 0x2e, 0x08, 0x4b, 0x98, - 0x2e, 0x00, 0x62, 0xef, 0xb5, 0xf0, 0x04, 0x05, - 0x14, 0x2d, 0x1c, 0x0f, 0x04, 0x11, 0x0c, 0x09, - 0x1c, 0x0e, 0x4c, 0x28, 0x23, 0x02, 0x69, 0x20, - 0x42, 0xd8, 0xd0, 0x04, 0x1c, 0x38, 0xf7, 0xff, - 0xfe, 0x6b, 0x28, 0x00, 0xd0, 0x06, 0x1c, 0x28, - 0xf7, 0xff, 0xfe, 0xc2, 0x20, 0x00, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x79, 0xb8, 0x69, 0x21, - 0x42, 0x88, 0xd1, 0x09, 0x20, 0x01, 0x43, 0xc0, - 0x61, 0x20, 0x1c, 0x28, 0xf7, 0xff, 0xfe, 0xb4, - 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x23, 0x01, 0x42, 0xd9, 0xd1, 0x02, 0x61, 0x20, - 0x20, 0x00, 0x60, 0xe0, 0x37, 0x08, 0x1f, 0xf4, - 0x3c, 0x05, 0x2c, 0x00, 0xdd, 0x11, 0x78, 0x38, - 0x02, 0x00, 0x78, 0x79, 0x43, 0x08, 0x04, 0x00, - 0x0c, 0x00, 0x78, 0xb9, 0x02, 0x09, 0x78, 0xfa, - 0x43, 0x11, 0x04, 0xc9, 0x0c, 0xc9, 0xf7, 0xff, - 0xff, 0x77, 0x37, 0x04, 0x3c, 0x04, 0x2c, 0x00, - 0xdc, 0xed, 0xf7, 0xff, 0xff, 0x8b, 0xf7, 0xff, - 0xff, 0x89, 0xf7, 0xff, 0xff, 0x87, 0xf7, 0xff, - 0xff, 0x85, 0xf7, 0xff, 0xff, 0x83, 0xf7, 0xff, - 0xff, 0x81, 0xf7, 0xff, 0xff, 0x7f, 0xf7, 0xff, - 0xff, 0x7d, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x07, 0x80, - 0xb5, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x26, 0x00, 0x43, 0xf6, 0x4f, 0x0f, - 0x62, 0x3e, 0x61, 0xfe, 0x61, 0xbe, 0xf7, 0xff, - 0xfe, 0x8f, 0x2d, 0x00, 0xd0, 0x13, 0x2c, 0x00, - 0xd0, 0x11, 0x0c, 0xf0, 0x42, 0x85, 0xd0, 0x0e, - 0x42, 0x84, 0xd0, 0x0c, 0x80, 0x3c, 0x80, 0xbd, - 0x20, 0x00, 0x61, 0x3e, 0x22, 0x00, 0x61, 0x78, - 0xb4, 0x04, 0x4b, 0x05, 0x22, 0xff, 0x21, 0x00, - 0xf7, 0xff, 0xfe, 0x1c, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x07, 0x80, - 0x2e, 0x00, 0x64, 0xc9, 0x56, 0x47, 0x41, 0x38, - 0x78, 0x31, 0x36, 0x00, 0xb5, 0x00, 0xb0, 0x81, - 0x48, 0x05, 0x69, 0xc0, 0x68, 0x80, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x00, 0xf0, 0x13, 0xfa, 0x22, - 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0xf0, 0x27, 0x00, - 0xb0, 0x85, 0x97, 0x00, 0x26, 0x10, 0x96, 0x01, - 0x25, 0x05, 0x01, 0xed, 0x95, 0x02, 0x20, 0xff, - 0x30, 0xd1, 0x90, 0x03, 0x97, 0x04, 0x22, 0x00, - 0x21, 0x00, 0xb4, 0x06, 0x4c, 0x0d, 0x69, 0xe0, - 0x68, 0x81, 0x1c, 0x08, 0xaa, 0x02, 0x1c, 0x3b, - 0xf0, 0x13, 0xfc, 0x8a, 0xb0, 0x02, 0x97, 0x00, - 0x20, 0xff, 0x30, 0xd1, 0x90, 0x01, 0x95, 0x02, - 0x96, 0x03, 0x97, 0x04, 0x69, 0xe0, 0x68, 0x80, - 0x46, 0x69, 0xf0, 0x13, 0xfb, 0xbb, 0xf7, 0xff, - 0xff, 0xc9, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x90, 0x20, 0x07, 0xb0, 0x85, 0xf0, 0x08, - 0xff, 0xaf, 0x24, 0xff, 0x34, 0xe1, 0x22, 0x05, - 0x01, 0xd2, 0x21, 0x00, 0x20, 0x07, 0x1c, 0x23, - 0xf0, 0x08, 0xff, 0xbe, 0x27, 0x00, 0x22, 0x00, - 0x21, 0x02, 0x20, 0x07, 0x1c, 0x3b, 0xf0, 0x09, - 0xfb, 0x67, 0x22, 0x01, 0x21, 0x01, 0x20, 0x07, - 0x1c, 0x3b, 0xf0, 0x09, 0xfb, 0x19, 0x22, 0x32, - 0x21, 0x32, 0x20, 0x07, 0xf0, 0x09, 0xf8, 0x74, - 0x97, 0x00, 0x97, 0x01, 0x20, 0x05, 0x01, 0xc0, - 0x90, 0x02, 0x94, 0x03, 0x97, 0x04, 0x48, 0x06, - 0x69, 0xc0, 0x68, 0x80, 0x46, 0x69, 0xf0, 0x13, - 0xfb, 0x85, 0xf7, 0xff, 0xff, 0x93, 0xb0, 0x05, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0xb4, 0x80, 0x01, 0x00, - 0x4b, 0x2a, 0x18, 0xc0, 0x4b, 0x2a, 0x69, 0xdb, - 0x69, 0x9f, 0x00, 0x8b, 0x18, 0x59, 0x02, 0x09, - 0x18, 0x89, 0x18, 0x79, 0x78, 0x02, 0x70, 0x0a, - 0x78, 0x42, 0x1d, 0xcb, 0x33, 0x39, 0x74, 0x1a, - 0x78, 0x82, 0x1d, 0xcb, 0x33, 0x99, 0x70, 0x1a, - 0x78, 0xc2, 0x1d, 0xcb, 0x33, 0xd9, 0x74, 0x1a, - 0x79, 0x02, 0x1d, 0xcb, 0x33, 0xff, 0x33, 0x3a, - 0x70, 0x1a, 0x79, 0x42, 0x1d, 0xcb, 0x33, 0xff, - 0x33, 0x7a, 0x74, 0x1a, 0x79, 0x82, 0x1d, 0xcb, - 0x33, 0xff, 0x33, 0xda, 0x70, 0x1a, 0x79, 0xc2, - 0x23, 0x11, 0x01, 0x5b, 0x18, 0xcb, 0x74, 0x1a, - 0x7a, 0x02, 0x23, 0x05, 0x01, 0xdb, 0x18, 0xcb, - 0x70, 0x1a, 0x7a, 0x42, 0x23, 0x0b, 0x01, 0x9b, - 0x18, 0xcb, 0x74, 0x1a, 0x7a, 0x82, 0x23, 0x19, - 0x01, 0x5b, 0x18, 0xcb, 0x70, 0x1a, 0x7a, 0xc2, - 0x23, 0x1b, 0x01, 0x5b, 0x18, 0xcb, 0x74, 0x1a, - 0x7b, 0x02, 0x23, 0x0f, 0x01, 0x9b, 0x18, 0xcb, - 0x70, 0x1a, 0x7b, 0x42, 0x23, 0x01, 0x02, 0x9b, - 0x18, 0xcb, 0x74, 0x1a, 0x7b, 0x82, 0x23, 0x23, - 0x01, 0x5b, 0x18, 0xcb, 0x70, 0x1a, 0x7b, 0xc0, - 0x23, 0x25, 0x01, 0x5b, 0x18, 0xc9, 0x74, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x07, 0xa4, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0xb0, 0x23, 0x00, - 0x1c, 0x07, 0x56, 0xc0, 0x1c, 0x14, 0x1c, 0x0d, - 0x28, 0x00, 0xd0, 0x0f, 0x20, 0x50, 0x1c, 0x21, - 0xf0, 0x17, 0xfd, 0x3e, 0x19, 0x41, 0x23, 0x00, - 0x56, 0xf8, 0x1c, 0x22, 0xf7, 0xff, 0xff, 0x92, - 0x23, 0x00, 0x37, 0x01, 0x56, 0xf8, 0x34, 0x01, - 0x28, 0x00, 0xd1, 0xef, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x90, 0x06, 0x00, 0x0e, 0x00, - 0x04, 0x09, 0x14, 0x09, 0x04, 0x17, 0x14, 0x3f, - 0x09, 0x03, 0xb0, 0x81, 0x4a, 0x08, 0x5c, 0xd4, - 0xab, 0x00, 0x70, 0x1c, 0x07, 0x00, 0x0f, 0x00, - 0x5c, 0x10, 0x70, 0x58, 0x20, 0x00, 0x70, 0x98, - 0x46, 0x68, 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0xce, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x17, 0xbc, 0xb5, 0x90, 0x04, 0x00, - 0x0c, 0x00, 0x04, 0x09, 0x14, 0x09, 0x04, 0x17, - 0x14, 0x3f, 0x0b, 0x03, 0xb0, 0x82, 0x4a, 0x0f, - 0x5c, 0xd4, 0xab, 0x00, 0x70, 0x1c, 0x0a, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xd4, 0xab, 0x00, - 0x70, 0x5c, 0x09, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xd4, 0xab, 0x00, 0x70, 0x9c, 0x07, 0x00, - 0x0f, 0x00, 0x5c, 0x10, 0x70, 0xd8, 0x20, 0x00, - 0x71, 0x18, 0x46, 0x68, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0xa5, 0xb0, 0x02, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x17, 0xbc, - 0xb5, 0x90, 0x04, 0x0f, 0x14, 0x3f, 0x04, 0x12, - 0x14, 0x12, 0x0f, 0x03, 0xb0, 0x83, 0x49, 0x1b, - 0x5c, 0xcc, 0xab, 0x00, 0x70, 0x1c, 0x0e, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x00, - 0x70, 0x5c, 0x0d, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xcc, 0xab, 0x00, 0x70, 0x9c, 0x0c, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x00, - 0x70, 0xdc, 0x0b, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xcc, 0xab, 0x01, 0x70, 0x1c, 0x0a, 0x03, - 0x07, 0x1b, 0x0f, 0x1b, 0x5c, 0xcc, 0xab, 0x01, - 0x70, 0x5c, 0x09, 0x03, 0x07, 0x1b, 0x0f, 0x1b, - 0x5c, 0xcc, 0xab, 0x01, 0x70, 0x9c, 0x07, 0x00, - 0x0f, 0x00, 0x5c, 0x08, 0x70, 0xd8, 0x20, 0x00, - 0x71, 0x18, 0x46, 0x68, 0x1c, 0x39, 0xf7, 0xff, - 0xff, 0x65, 0xb0, 0x03, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x17, 0xbc, - 0xb5, 0xf0, 0x1c, 0x04, 0x04, 0x10, 0x14, 0x00, - 0xb0, 0x81, 0x90, 0x00, 0x04, 0x1e, 0x14, 0x36, - 0x22, 0x3c, 0x1c, 0x20, 0x1c, 0x0f, 0xb0, 0x85, - 0xf0, 0x17, 0xfc, 0xd2, 0xa3, 0x72, 0xcb, 0x0c, - 0xf0, 0x17, 0xfc, 0xde, 0xf0, 0x17, 0xfc, 0xe0, - 0x4d, 0x71, 0x5c, 0x28, 0xab, 0x02, 0x70, 0x18, - 0x22, 0x38, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0xc3, 0xa3, 0x6b, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0xcf, 0xf0, 0x17, 0xfc, 0xd1, 0x5c, 0x28, - 0xab, 0x02, 0x70, 0x58, 0x22, 0x34, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0xb5, 0xa3, 0x64, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0xc1, 0xf0, 0x17, - 0xfc, 0xc3, 0x5c, 0x28, 0xab, 0x02, 0x70, 0x98, - 0x22, 0x30, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0xa7, 0xa3, 0x5d, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0xb3, 0xf0, 0x17, 0xfc, 0xb5, 0x5c, 0x28, - 0xab, 0x02, 0x70, 0xd8, 0x22, 0x2c, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x99, 0xa3, 0x56, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0xa5, 0xf0, 0x17, - 0xfc, 0xa7, 0x5c, 0x28, 0xab, 0x03, 0x70, 0x18, - 0x22, 0x28, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x8b, 0xa3, 0x4f, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x97, 0xf0, 0x17, 0xfc, 0x99, 0x5c, 0x28, - 0xab, 0x03, 0x70, 0x58, 0x22, 0x24, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x7d, 0xa3, 0x48, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x89, 0xf0, 0x17, - 0xfc, 0x8b, 0x5c, 0x28, 0xab, 0x03, 0x70, 0x98, - 0x22, 0x20, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x6f, 0xa3, 0x41, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x7b, 0xf0, 0x17, 0xfc, 0x7d, 0x5c, 0x28, - 0xab, 0x03, 0x70, 0xd8, 0x22, 0x1c, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x61, 0xa3, 0x3a, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x6d, 0xf0, 0x17, - 0xfc, 0x6f, 0x5c, 0x28, 0xab, 0x00, 0x70, 0x18, - 0x22, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x53, 0xa3, 0x33, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x5f, 0xf0, 0x17, 0xfc, 0x61, 0x5c, 0x28, - 0xab, 0x00, 0x70, 0x58, 0x22, 0x14, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x45, 0xa3, 0x2c, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x51, 0xf0, 0x17, - 0xfc, 0x53, 0x5c, 0x28, 0xab, 0x00, 0x70, 0x98, - 0x22, 0x10, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x37, 0xa3, 0x25, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x43, 0xf0, 0x17, 0xfc, 0x45, 0x5c, 0x28, - 0xab, 0x00, 0x70, 0xd8, 0x22, 0x0c, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x29, 0xa3, 0x1e, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x35, 0xf0, 0x17, - 0xfc, 0x37, 0x5c, 0x28, 0xab, 0x01, 0x70, 0x18, - 0x22, 0x08, 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x17, - 0xfc, 0x1b, 0xa3, 0x17, 0xcb, 0x0c, 0xf0, 0x17, - 0xfc, 0x27, 0xf0, 0x17, 0xfc, 0x29, 0x5c, 0x28, - 0xab, 0x01, 0x70, 0x58, 0x22, 0x04, 0x1c, 0x20, - 0x1c, 0x39, 0xf0, 0x17, 0xfc, 0x0d, 0xa3, 0x10, - 0xcb, 0x0c, 0xf0, 0x17, 0xfc, 0x19, 0xf0, 0x17, - 0xfc, 0x1b, 0x5c, 0x28, 0xab, 0x01, 0x70, 0x98, - 0xa3, 0x0b, 0xcb, 0x0c, 0x1c, 0x20, 0x1c, 0x39, - 0xf0, 0x17, 0xfc, 0x0e, 0xf0, 0x17, 0xfc, 0x10, - 0x5c, 0x28, 0xab, 0x01, 0x70, 0xd8, 0x20, 0x00, - 0x73, 0x18, 0x46, 0x68, 0x99, 0x05, 0x1c, 0x32, - 0x33, 0x0c, 0xf7, 0xff, 0xfe, 0x6f, 0xb0, 0x06, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x17, 0xbc, 0x21, 0x00, 0xb0, 0x81, - 0x91, 0x00, 0xe0, 0x02, 0x99, 0x00, 0x31, 0x01, - 0x91, 0x00, 0x99, 0x00, 0x42, 0x81, 0xdb, 0xf9, - 0xb0, 0x01, 0x47, 0x70, 0xb5, 0xf0, 0x06, 0x06, - 0x0e, 0x36, 0x25, 0x02, 0x48, 0x0d, 0x60, 0x05, - 0x27, 0x07, 0x4c, 0x0d, 0x60, 0x25, 0x20, 0x01, - 0x40, 0xb8, 0x40, 0x30, 0xd0, 0x01, 0x20, 0x03, - 0xe0, 0x00, 0x20, 0x02, 0x49, 0x09, 0x60, 0x08, - 0x20, 0x0a, 0xf7, 0xff, 0xff, 0xdf, 0x20, 0x03, - 0x60, 0x20, 0x20, 0x0c, 0xf7, 0xff, 0xff, 0xda, - 0x3f, 0x01, 0xd5, 0xeb, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x6e, 0x00, 0x14, 0x00, - 0x6e, 0x00, 0x13, 0x00, 0x6e, 0x00, 0x12, 0x00, - 0xb5, 0x80, 0x06, 0x00, 0x0e, 0x00, 0x06, 0x0f, - 0x0e, 0x3f, 0x06, 0x00, 0x0e, 0x00, 0x23, 0x80, - 0x43, 0x18, 0xf7, 0xff, 0xff, 0xcf, 0x20, 0x14, - 0xf7, 0xff, 0xff, 0xc0, 0x1c, 0x38, 0xf7, 0xff, - 0xff, 0xc9, 0x20, 0x03, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x04, 0x60, 0x08, 0x49, 0x04, - 0x60, 0x08, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x6e, 0x00, 0x14, 0x00, 0x6e, 0x00, 0x12, 0x00, - 0x6e, 0x00, 0x13, 0x00, 0xb5, 0x00, 0x21, 0x01, - 0x20, 0x02, 0xf7, 0xff, 0xff, 0xd9, 0x48, 0x10, - 0xf7, 0xff, 0xff, 0xa4, 0x21, 0x00, 0x20, 0x02, - 0xf7, 0xff, 0xff, 0xd2, 0x48, 0x0d, 0xf7, 0xff, - 0xff, 0x9d, 0x21, 0x44, 0x20, 0x00, 0xf7, 0xff, - 0xff, 0xcb, 0x21, 0x81, 0x20, 0x01, 0xf7, 0xff, - 0xff, 0xc7, 0x21, 0xf0, 0x20, 0x02, 0xf7, 0xff, - 0xff, 0xc3, 0x21, 0x45, 0x20, 0x03, 0xf7, 0xff, - 0xff, 0xbf, 0x21, 0x45, 0x20, 0x04, 0xf7, 0xff, - 0xff, 0xbb, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x4e, 0x20, 0x00, 0x00, 0xc3, 0x50, - 0xb5, 0x80, 0x06, 0x07, 0x0e, 0x3f, 0x06, 0x08, - 0x0e, 0x00, 0x28, 0x45, 0xdd, 0x00, 0x20, 0x45, - 0x1d, 0xc1, 0x31, 0x79, 0x20, 0x03, 0xf7, 0xff, - 0xff, 0xa7, 0x2f, 0x45, 0xdd, 0x00, 0x27, 0x45, - 0x20, 0x04, 0x1d, 0xf9, 0x31, 0x79, 0xf7, 0xff, - 0xff, 0x9f, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x00, 0xf0, 0x1c, 0xfe, 0xcd, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x18, 0xf0, 0x1c, 0xfe, 0xcc, - 0xf0, 0x1c, 0xfe, 0xc6, 0x23, 0x01, 0x03, 0x9b, - 0x43, 0x18, 0xf0, 0x1c, 0xfe, 0xc5, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x00, 0xf0, 0x1c, 0xfe, 0xbc, - 0x4b, 0x05, 0x40, 0x18, 0xf0, 0x1c, 0xfe, 0xbc, - 0xf0, 0x1c, 0xfe, 0xb6, 0x4b, 0x03, 0x40, 0x18, - 0xf0, 0x1c, 0xfe, 0xb6, 0xbc, 0x08, 0x47, 0x18, - 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xdf, 0xff, - 0xb5, 0x80, 0x1c, 0x07, 0xf7, 0xff, 0xff, 0xd8, - 0x07, 0xf8, 0x0f, 0x40, 0x49, 0x0a, 0x58, 0x08, - 0x0c, 0x39, 0xd3, 0x05, 0x23, 0x01, 0x02, 0x5b, - 0x68, 0x01, 0x43, 0x19, 0x60, 0x01, 0xe0, 0x03, - 0x68, 0x01, 0x4b, 0x06, 0x40, 0x19, 0x60, 0x01, - 0xf0, 0x13, 0xff, 0x5e, 0xf7, 0xff, 0xff, 0xd5, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x44, 0xff, 0xff, 0xfd, 0xff, - 0xb5, 0x00, 0x4a, 0x09, 0x1f, 0x11, 0x20, 0x0e, - 0xf0, 0x13, 0xff, 0x08, 0x28, 0x00, 0xd1, 0x09, - 0x48, 0x06, 0xf0, 0x13, 0xff, 0x49, 0x49, 0x06, - 0x20, 0x0e, 0xf0, 0x1c, 0xfe, 0x85, 0xf7, 0xff, - 0xff, 0xbc, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x17, 0xe0, 0x2e, 0x08, 0x1a, 0x38, - 0x2e, 0x00, 0x6c, 0xab, 0xb5, 0x00, 0xf7, 0xff, - 0xff, 0x9f, 0x21, 0x00, 0x20, 0x0e, 0xf0, 0x1c, - 0xfe, 0x73, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, - 0xa0, 0x0d, 0x22, 0x00, 0x21, 0x0b, 0xf7, 0xff, - 0xfd, 0x61, 0x4f, 0x0d, 0x22, 0x0a, 0x21, 0x0b, - 0x68, 0x38, 0xf7, 0xff, 0xfd, 0xbd, 0x68, 0x38, - 0x30, 0x01, 0x60, 0x38, 0x48, 0x09, 0x7c, 0x01, - 0x29, 0x01, 0xd1, 0x05, 0x69, 0x41, 0x29, 0xff, - 0xd0, 0x02, 0x20, 0x01, 0xf0, 0x00, 0xf8, 0x0c, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x49, 0x52, 0x20, 0x49, 0x52, 0x51, 0x3a, 0x00, - 0x2e, 0x08, 0x1a, 0x4c, 0x2e, 0x08, 0x17, 0xcc, - 0xb5, 0x90, 0x06, 0x0c, 0x0e, 0x24, 0x1c, 0x07, - 0xf7, 0xff, 0xff, 0x6e, 0x48, 0x11, 0x68, 0x01, - 0x00, 0x49, 0x08, 0x49, 0x07, 0xfa, 0x43, 0x11, - 0x0a, 0x09, 0x02, 0x09, 0x43, 0x21, 0x60, 0x01, - 0x68, 0xc2, 0x2a, 0x00, 0xd1, 0x11, 0x68, 0x82, - 0x1c, 0x53, 0x68, 0x82, 0x60, 0x83, 0x00, 0x92, - 0x4b, 0x09, 0x50, 0x99, 0x68, 0x81, 0x29, 0x64, - 0xd1, 0x01, 0x21, 0x00, 0x60, 0x81, 0x68, 0x81, - 0x68, 0x42, 0x42, 0x91, 0xd1, 0x01, 0x21, 0x01, - 0x60, 0xc1, 0xf7, 0xff, 0xff, 0x5e, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x17, 0xcc, - 0x2e, 0x08, 0x4d, 0x98, 0xb5, 0x90, 0x1c, 0x07, - 0xf7, 0xff, 0xff, 0x42, 0x48, 0x10, 0x68, 0xc1, - 0x24, 0x00, 0x29, 0x00, 0xd1, 0x03, 0x68, 0x41, - 0x68, 0x82, 0x42, 0x91, 0xd0, 0x12, 0x68, 0x41, - 0x1c, 0x4a, 0x68, 0x41, 0x60, 0x42, 0x00, 0x89, - 0x4a, 0x0a, 0x58, 0x51, 0x60, 0x39, 0x68, 0x41, - 0x29, 0x64, 0xd1, 0x00, 0x60, 0x44, 0x60, 0xc4, - 0xf7, 0xff, 0xff, 0x3b, 0x20, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xff, 0x35, - 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x17, 0xcc, 0x2e, 0x08, 0x4d, 0x98, - 0xb5, 0x80, 0xb0, 0x81, 0x4f, 0x0e, 0x8e, 0xb8, - 0x28, 0x00, 0xd1, 0x04, 0x46, 0x68, 0xf7, 0xff, - 0xff, 0xcd, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x00, - 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x98, 0x00, 0x49, 0x07, 0x60, 0x08, - 0x20, 0x08, 0x85, 0x38, 0x20, 0x04, 0x85, 0x78, - 0x20, 0x0f, 0x02, 0x40, 0x86, 0xb8, 0x20, 0x01, - 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x00, 0x1f, 0xc0, 0x2c, 0x00, 0x1e, 0x00, - 0xb5, 0x00, 0x49, 0x0b, 0xca, 0x08, 0xc1, 0x08, - 0xca, 0x08, 0xc1, 0x08, 0xca, 0x0c, 0xc1, 0x0c, - 0x78, 0x01, 0x48, 0x08, 0x70, 0x01, 0x78, 0x00, - 0x28, 0x01, 0xd1, 0x04, 0xf0, 0x00, 0xf8, 0x41, - 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x28, 0x2e, 0x08, 0x1a, 0x50, - 0xb5, 0x90, 0x27, 0x00, 0x48, 0x13, 0x70, 0x07, - 0x20, 0x02, 0xf0, 0x04, 0xfb, 0x57, 0x28, 0x00, - 0xd1, 0x03, 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0x21, 0x01, 0x4a, 0x0e, - 0x00, 0x43, 0x18, 0x1b, 0x00, 0x9b, 0x18, 0x9c, - 0x70, 0xa1, 0x52, 0xd7, 0x30, 0x01, 0x28, 0x02, - 0xdb, 0xf6, 0x22, 0x00, 0x1c, 0x08, 0x4c, 0x09, - 0x00, 0x53, 0x18, 0x9b, 0x00, 0xdb, 0x19, 0x19, - 0x70, 0x88, 0x52, 0xe7, 0x70, 0xcf, 0x32, 0x01, - 0x2a, 0x08, 0xdb, 0xf5, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x50, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x60, - 0xb5, 0x00, 0xf0, 0x04, 0xf9, 0xe7, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x80, 0x20, 0x00, 0x49, 0x17, - 0x78, 0x09, 0x29, 0x01, 0xd1, 0x26, 0x49, 0x16, - 0x78, 0x4a, 0x2a, 0x14, 0xd0, 0x18, 0xdc, 0x09, - 0x2a, 0x11, 0xd0, 0x12, 0x2a, 0x12, 0xd0, 0x16, - 0x2a, 0x13, 0xd1, 0x16, 0x68, 0x8f, 0xf0, 0x00, - 0xf8, 0x77, 0xe0, 0x12, 0x2a, 0x15, 0xd0, 0x05, - 0x2a, 0x23, 0xd1, 0x0e, 0x68, 0x8f, 0xf0, 0x00, - 0xf8, 0xaf, 0xe0, 0x0a, 0xf0, 0x00, 0xf8, 0x8a, - 0xe0, 0x07, 0xf0, 0x00, 0xf8, 0x13, 0xe0, 0x04, - 0xf0, 0x00, 0xf8, 0x4a, 0xe0, 0x01, 0xf0, 0x00, - 0xf8, 0x2d, 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x04, 0xfa, 0xe6, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x50, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0d, 0x79, 0xa0, 0x28, 0x01, 0xd1, 0x12, - 0xf0, 0x00, 0xf9, 0x1c, 0x1c, 0x07, 0xd5, 0x01, - 0x20, 0x00, 0xe0, 0x0d, 0x88, 0xa4, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x11, 0x1c, 0x38, 0xf0, 0x00, - 0xfa, 0x0d, 0x28, 0x00, 0xd1, 0x03, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf9, 0x47, 0x20, 0x01, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0a, 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x96, - 0x1c, 0x07, 0xd4, 0x0a, 0x88, 0xa4, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x12, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0xf1, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf9, 0x2d, 0x20, 0x01, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x28, - 0xb5, 0xb0, 0xb0, 0x81, 0x4c, 0x0b, 0x88, 0xa0, - 0xf0, 0x00, 0xf8, 0x7c, 0x1c, 0x07, 0xd4, 0x0c, - 0x88, 0xa5, 0x79, 0xa2, 0x46, 0x6b, 0x21, 0x14, - 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xd7, 0x28, 0x00, - 0xd0, 0x03, 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, - 0xf9, 0x11, 0x20, 0x01, 0xb0, 0x01, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x28, - 0xb5, 0x90, 0xb0, 0x81, 0x4c, 0x0c, 0x88, 0xa0, - 0xf0, 0x00, 0xf8, 0x60, 0x1c, 0x07, 0xd4, 0x0c, - 0x68, 0xa0, 0x78, 0x01, 0x88, 0xa0, 0xf0, 0x00, - 0xf8, 0x71, 0x1c, 0x02, 0xd4, 0x07, 0x46, 0x6b, - 0x21, 0x13, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xb6, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x00, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0d, 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x42, - 0x1c, 0x07, 0xd4, 0x0f, 0x00, 0x78, 0x19, 0xc0, - 0x00, 0x80, 0x49, 0x0a, 0x18, 0x40, 0x7a, 0x01, - 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x4f, 0x1c, 0x02, - 0xd4, 0x04, 0x46, 0x6b, 0x21, 0x15, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x94, 0x20, 0x01, 0xb0, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x28, 0x2e, 0x08, 0x4f, 0x48, - 0xb5, 0x90, 0xb0, 0x81, 0x4f, 0x10, 0x88, 0xb8, - 0xf0, 0x00, 0xf8, 0x20, 0x1c, 0x04, 0xd4, 0x14, - 0x79, 0xb9, 0x88, 0xb8, 0xf0, 0x00, 0xf8, 0x32, - 0x1c, 0x02, 0xd5, 0x08, 0x79, 0xba, 0x88, 0xb9, - 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x49, 0x1c, 0x02, - 0xd5, 0x01, 0x20, 0x00, 0xe0, 0x08, 0x46, 0x6b, - 0x21, 0x23, 0x1c, 0x20, 0xf0, 0x00, 0xf9, 0x6e, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x00, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x28, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x08, 0x00, 0x43, - 0x18, 0x1b, 0x00, 0x9b, 0x18, 0x5f, 0x78, 0xbf, - 0x2f, 0x01, 0xd0, 0x02, 0x5a, 0xcb, 0x42, 0x93, - 0xd0, 0x04, 0x30, 0x01, 0x28, 0x02, 0xdb, 0xf2, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x4f, 0x48, 0xb4, 0xb0, 0x04, 0x02, - 0x0c, 0x12, 0x06, 0x0f, 0x0e, 0x3f, 0x20, 0x00, - 0x49, 0x0a, 0x00, 0x44, 0x18, 0x24, 0x00, 0xe4, - 0x18, 0x63, 0x78, 0x9d, 0x2d, 0x01, 0xd0, 0x05, - 0x5b, 0x0c, 0x42, 0x94, 0xd1, 0x02, 0x78, 0xdb, - 0x42, 0xbb, 0xd0, 0x04, 0x30, 0x01, 0x28, 0x08, - 0xdb, 0xef, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x4f, 0x60, - 0xb5, 0xb0, 0x04, 0x09, 0x0c, 0x09, 0x06, 0x12, - 0x0e, 0x12, 0x24, 0x00, 0x1c, 0x07, 0x48, 0x13, - 0x00, 0x63, 0x19, 0x1b, 0x00, 0xdb, 0x18, 0x1b, - 0x78, 0x9b, 0x2b, 0x01, 0xd1, 0x16, 0x00, 0x63, - 0x19, 0x1b, 0x00, 0xdb, 0x18, 0x1d, 0x70, 0xea, - 0x52, 0xc1, 0x20, 0x03, 0x70, 0xa8, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x9a, 0x00, 0x78, 0x19, 0xc0, - 0x00, 0x80, 0x49, 0x09, 0x18, 0x40, 0x88, 0xc1, - 0x31, 0x01, 0x80, 0xc1, 0x1c, 0x20, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x34, 0x01, 0x2c, 0x08, - 0xdb, 0xde, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x60, - 0x2e, 0x08, 0x4f, 0x48, 0xb4, 0x90, 0x20, 0x00, - 0x4c, 0x19, 0x4f, 0x1a, 0x88, 0xba, 0x49, 0x1a, - 0x00, 0x43, 0x18, 0x1b, 0x00, 0x9b, 0x18, 0x5b, - 0x78, 0x9b, 0x2b, 0x01, 0xd1, 0x17, 0x00, 0x43, - 0x18, 0x1b, 0x00, 0x9b, 0x52, 0xca, 0x22, 0x02, - 0x18, 0x59, 0x70, 0x8a, 0x22, 0x00, 0x80, 0xca, - 0x72, 0x4a, 0x89, 0x3a, 0x2a, 0x10, 0xdb, 0x03, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x9a, 0xdd, 0x03, - 0x20, 0x02, 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, - 0x80, 0x8a, 0xbc, 0x90, 0x47, 0x70, 0x00, 0x43, - 0x18, 0x1b, 0x00, 0xdb, 0x5a, 0xe3, 0x42, 0x93, - 0xd1, 0x03, 0x20, 0x01, 0x43, 0xc0, 0xbc, 0x90, - 0x47, 0x70, 0x30, 0x01, 0x28, 0x02, 0xdb, 0xd3, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x4f, 0x60, 0x2e, 0x08, 0x4f, 0x28, - 0x2e, 0x08, 0x4f, 0x48, 0xb5, 0xf0, 0x04, 0x0e, - 0x0c, 0x36, 0x1c, 0x07, 0xd5, 0x06, 0x2f, 0x02, - 0xdb, 0x04, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, 0x00, 0x7b, - 0x19, 0xdb, 0x00, 0x9b, 0x49, 0x0e, 0x18, 0x5a, - 0x70, 0x90, 0x22, 0x00, 0x52, 0xca, 0x24, 0x00, - 0x4d, 0x0c, 0x00, 0x60, 0x19, 0x00, 0x00, 0xc0, - 0x5a, 0x29, 0x42, 0xb1, 0xd1, 0x08, 0x22, 0x00, - 0x19, 0x41, 0x70, 0xca, 0x52, 0x2a, 0x20, 0x01, - 0x70, 0x88, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x20, - 0x34, 0x01, 0x2c, 0x08, 0xdb, 0xed, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x60, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x04, - 0xf8, 0x6b, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x4f, 0x28, 0xb5, 0x00, 0x49, 0x03, - 0x78, 0x08, 0xf0, 0x04, 0xf8, 0x61, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x4f, 0x38, - 0xb5, 0xf0, 0x01, 0x46, 0x18, 0x36, 0x00, 0xb6, - 0x1c, 0x07, 0xb0, 0x84, 0x48, 0x0c, 0x90, 0x03, - 0x18, 0x34, 0x68, 0xa0, 0x28, 0x00, 0xd0, 0x0a, - 0x46, 0x69, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x3e, - 0x1c, 0x05, 0xd0, 0x02, 0x98, 0x01, 0xf0, 0x04, - 0xf9, 0x23, 0x2d, 0x00, 0xd1, 0xf4, 0x20, 0x00, - 0x99, 0x03, 0x51, 0x88, 0x60, 0x60, 0x60, 0xa0, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x50, 0x20, 0xb4, 0xb0, 0x01, 0x43, - 0x18, 0x18, 0x00, 0x80, 0x4a, 0x12, 0x18, 0x82, - 0x20, 0x00, 0x68, 0x93, 0x2b, 0x0a, 0xda, 0x1d, - 0x33, 0x01, 0x60, 0x93, 0x78, 0x8c, 0x68, 0x55, - 0x00, 0x6b, 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xd3, - 0x73, 0x9c, 0x68, 0x4c, 0x68, 0x55, 0x00, 0x6b, - 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xd3, 0x61, 0x1c, - 0x89, 0x0f, 0x68, 0x54, 0x00, 0x63, 0x19, 0x1b, - 0x00, 0x9b, 0x18, 0xd1, 0x82, 0x8f, 0x68, 0x51, - 0x31, 0x01, 0x60, 0x51, 0x29, 0x0a, 0xdb, 0x00, - 0x60, 0x50, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x50, 0x20, 0xb4, 0xb0, 0x01, 0x47, - 0x18, 0x3f, 0x00, 0xbf, 0x4a, 0x12, 0x18, 0xbc, - 0x20, 0x00, 0x68, 0xa3, 0x2b, 0x00, 0xdd, 0x1d, - 0x3b, 0x01, 0x60, 0xa3, 0x59, 0xd5, 0x00, 0x6b, - 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xe3, 0x7b, 0x9b, - 0x70, 0x8b, 0x59, 0xd5, 0x00, 0x6b, 0x19, 0x5b, - 0x00, 0x9b, 0x18, 0xe3, 0x69, 0x1b, 0x60, 0x4b, - 0x59, 0xd5, 0x00, 0x6b, 0x19, 0x5b, 0x00, 0x9b, - 0x18, 0xe3, 0x8a, 0x9b, 0x81, 0x0b, 0x59, 0xd1, - 0x31, 0x01, 0x51, 0xd1, 0x29, 0x0a, 0xdb, 0x00, - 0x51, 0xd0, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x50, 0x20, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x1c, 0x1f, 0x00, 0x43, 0x18, 0x1b, - 0x00, 0x9b, 0x4c, 0x0f, 0x19, 0x1b, 0x78, 0x9b, - 0x2b, 0x02, 0xd0, 0x0f, 0x2b, 0x03, 0xd0, 0x07, - 0x2b, 0x04, 0xd1, 0x11, 0x1c, 0x3b, 0xf0, 0x00, - 0xf9, 0x27, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xf8, 0x37, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3a, 0xf0, 0x00, - 0xf8, 0x09, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x4f, 0x48, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x23, 0x01, 0x60, 0x13, 0x29, 0x11, - 0xd1, 0x17, 0x22, 0x23, 0x49, 0x0d, 0x70, 0x0a, - 0x22, 0x21, 0x70, 0x4a, 0x22, 0x04, 0x80, 0x4a, - 0x00, 0x44, 0x18, 0x24, 0x00, 0xa4, 0x4f, 0x0a, - 0x5b, 0x38, 0x80, 0x88, 0xf7, 0xff, 0xff, 0x34, - 0x28, 0x00, 0xd0, 0x06, 0x20, 0x03, 0x19, 0xe1, - 0x70, 0x88, 0x20, 0x01, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x4f, 0x28, - 0x2e, 0x08, 0x4f, 0x48, 0xb5, 0xff, 0x06, 0x09, - 0x0e, 0x09, 0x27, 0x00, 0x20, 0x00, 0xb0, 0x84, - 0x60, 0x18, 0x1c, 0x1e, 0x98, 0x04, 0x00, 0x43, - 0x18, 0x18, 0x00, 0x80, 0x90, 0x03, 0x4a, 0x6a, - 0x92, 0x02, 0x18, 0x84, 0x25, 0x02, 0x48, 0x69, - 0x29, 0x12, 0xd0, 0x71, 0x9a, 0x06, 0x00, 0x53, - 0x18, 0x9a, 0x00, 0xd2, 0x4b, 0x66, 0x18, 0xd2, - 0x92, 0x01, 0x29, 0x13, 0xd0, 0x17, 0x29, 0x14, - 0xd0, 0x67, 0x29, 0x23, 0xd1, 0x66, 0x89, 0x82, - 0x99, 0x06, 0xb4, 0x04, 0x68, 0x83, 0x9d, 0x02, - 0x78, 0xea, 0x98, 0x05, 0xf0, 0x00, 0xf9, 0x52, - 0xb0, 0x01, 0x1c, 0x07, 0xd0, 0x5b, 0x89, 0xa8, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x01, 0x60, 0x30, - 0x21, 0x04, 0x70, 0xa1, 0xe0, 0x97, 0x68, 0x81, - 0x78, 0x4a, 0x23, 0x80, 0x40, 0x1a, 0x88, 0xc0, - 0x1e, 0x83, 0x04, 0x1d, 0x0c, 0x2d, 0x31, 0x02, - 0x91, 0x00, 0x2a, 0x80, 0xd1, 0x28, 0x88, 0xa1, - 0x42, 0x81, 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x87, - 0x9c, 0x01, 0x8a, 0xa1, 0x29, 0x00, 0xd1, 0x0c, - 0x1c, 0x28, 0xf0, 0x03, 0xff, 0xfb, 0x61, 0x20, - 0x28, 0x00, 0xd0, 0xf3, 0x82, 0xa5, 0x69, 0x20, - 0x99, 0x00, 0x1c, 0x2a, 0xf0, 0x16, 0xff, 0x12, - 0xe0, 0x75, 0x19, 0x48, 0x04, 0x02, 0x0c, 0x12, - 0x69, 0x20, 0xf0, 0x03, 0xff, 0xf0, 0x28, 0x00, - 0xd0, 0xe4, 0x61, 0x20, 0x8a, 0xa1, 0x18, 0x40, - 0x99, 0x00, 0x1c, 0x2a, 0xf0, 0x16, 0xff, 0x02, - 0x8a, 0xa0, 0x19, 0x40, 0x82, 0xa0, 0xe0, 0x62, - 0x9e, 0x01, 0x8a, 0xb1, 0x4c, 0x3d, 0x29, 0x00, - 0xd1, 0x1a, 0x1c, 0x28, 0xf0, 0x03, 0xff, 0xd6, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xce, 0x21, 0x23, - 0x70, 0x21, 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, - 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, 0x80, 0xa1, - 0x78, 0xf1, 0x71, 0xa1, 0x81, 0xa5, 0x99, 0x00, - 0x1c, 0x2a, 0xf0, 0x16, 0xfe, 0xe3, 0xe0, 0x24, - 0xe0, 0x4b, 0xe0, 0x2e, 0xe0, 0x43, 0xe0, 0x42, - 0x19, 0x48, 0x04, 0x02, 0x0c, 0x12, 0x69, 0x30, - 0xf0, 0x03, 0xff, 0xbd, 0x28, 0x00, 0xd0, 0xb1, - 0x61, 0x30, 0x8a, 0xb1, 0x18, 0x40, 0x99, 0x00, - 0x1c, 0x2a, 0xf0, 0x16, 0xfe, 0xcf, 0x8a, 0xb0, - 0x19, 0x40, 0x82, 0xb0, 0x21, 0x23, 0x70, 0x21, - 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, 0x98, 0x03, - 0x9a, 0x02, 0x5a, 0x10, 0x80, 0xa0, 0x78, 0xf0, - 0x71, 0xa0, 0x8a, 0xb0, 0x81, 0xa0, 0x69, 0x30, - 0x60, 0xa0, 0xf7, 0xff, 0xfe, 0x7f, 0x28, 0x00, - 0xd1, 0x03, 0x68, 0xa0, 0xf0, 0x03, 0xff, 0xbc, - 0xe0, 0x19, 0x20, 0x00, 0x82, 0xb0, 0x61, 0x30, - 0xe0, 0x14, 0x9a, 0x06, 0x06, 0x11, 0x0e, 0x09, - 0x29, 0x02, 0xd1, 0x10, 0x21, 0x23, 0x70, 0x01, - 0x21, 0x22, 0x70, 0x41, 0x21, 0x04, 0x80, 0x41, - 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, 0x80, 0x81, - 0xf7, 0xff, 0xfe, 0x5a, 0x28, 0x00, 0xd1, 0x00, - 0xe7, 0x78, 0x70, 0xa5, 0x27, 0x01, 0x1c, 0x38, - 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x23, 0x70, 0x01, 0x21, 0x22, - 0x70, 0x41, 0x21, 0x04, 0x80, 0x41, 0x99, 0x03, - 0x9a, 0x02, 0x5a, 0x51, 0x80, 0x81, 0xf7, 0xff, - 0xfe, 0x43, 0x28, 0x00, 0xd1, 0xe9, 0xe7, 0x61, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x28, - 0x2e, 0x08, 0x4f, 0x60, 0x2e, 0x08, 0x4f, 0x38, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x24, 0x00, - 0x20, 0x00, 0x60, 0x18, 0x1c, 0x1f, 0xb0, 0x84, - 0x29, 0x14, 0xd0, 0x04, 0xdc, 0x09, 0x29, 0x12, - 0xd0, 0x01, 0x29, 0x13, 0xd1, 0x65, 0x98, 0x04, - 0x1c, 0x3b, 0xf7, 0xff, 0xff, 0x03, 0x1c, 0x04, - 0xe0, 0x6e, 0x29, 0x15, 0xd0, 0x0a, 0x29, 0x23, - 0xd1, 0x5b, 0x49, 0x38, 0x1c, 0x10, 0xf7, 0xff, - 0xfe, 0x51, 0x1c, 0x04, 0xd0, 0x64, 0x20, 0x01, - 0x60, 0x38, 0xe0, 0x61, 0x1c, 0x17, 0x22, 0x00, - 0x98, 0x04, 0x00, 0x43, 0x18, 0x18, 0x00, 0x80, - 0x49, 0x31, 0x18, 0x43, 0x93, 0x03, 0x72, 0x5a, - 0x5a, 0x0a, 0x92, 0x00, 0x9b, 0x03, 0x88, 0xd8, - 0x28, 0x01, 0xd0, 0x03, 0x37, 0x01, 0x2f, 0x08, - 0xd1, 0x00, 0x27, 0x00, 0x26, 0x00, 0x48, 0x2b, - 0x90, 0x01, 0x1d, 0x01, 0x91, 0x02, 0x4d, 0x2a, - 0x00, 0x78, 0x19, 0xc0, 0x00, 0xc0, 0x5a, 0x29, - 0x9a, 0x00, 0x42, 0x91, 0xd1, 0x32, 0x19, 0x40, - 0x89, 0x80, 0x28, 0x00, 0xdd, 0x0e, 0x22, 0x00, - 0xb4, 0x04, 0x00, 0x78, 0x19, 0xc0, 0x00, 0xc0, - 0x19, 0x40, 0x78, 0xc2, 0x23, 0x00, 0x98, 0x05, - 0x1c, 0x39, 0xf0, 0x00, 0xf8, 0x3f, 0x1c, 0x04, - 0xb0, 0x01, 0xe0, 0x26, 0x99, 0x02, 0x1c, 0x38, - 0xf7, 0xff, 0xfe, 0x40, 0x1c, 0x04, 0xd0, 0x19, - 0x98, 0x01, 0x89, 0x82, 0xb4, 0x04, 0x98, 0x02, - 0x68, 0x84, 0x00, 0x78, 0x19, 0xc0, 0x00, 0xc0, - 0x19, 0x45, 0x78, 0xea, 0x98, 0x05, 0x1c, 0x39, - 0x1c, 0x23, 0x1c, 0x2e, 0xf0, 0x00, 0xf8, 0x26, - 0x1c, 0x04, 0x89, 0xa8, 0xb0, 0x01, 0x28, 0x00, - 0xd1, 0x0b, 0x68, 0x70, 0xf0, 0x03, 0xff, 0x10, - 0xe0, 0x07, 0xe0, 0x0d, 0x36, 0x01, 0x37, 0x01, - 0x2f, 0x08, 0xd1, 0x00, 0x27, 0x00, 0x2e, 0x08, - 0xdb, 0xbe, 0x9b, 0x03, 0x7a, 0x58, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0x03, 0x9b, 0x03, 0x70, 0x98, - 0x1c, 0x20, 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x2c, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x38, - 0x2e, 0x08, 0x4f, 0x60, 0xb5, 0xff, 0x06, 0x16, - 0x0e, 0x36, 0x9f, 0x09, 0x04, 0x3c, 0x0c, 0x24, - 0x1c, 0x18, 0x00, 0x4b, 0x18, 0x59, 0x00, 0xc9, - 0xb0, 0x85, 0x4a, 0x30, 0x18, 0x8f, 0x28, 0x00, - 0xd1, 0x02, 0x89, 0xbc, 0x68, 0xbd, 0xe0, 0x03, - 0x60, 0x78, 0x60, 0xb8, 0x81, 0xbc, 0x1c, 0x05, - 0x99, 0x05, 0x00, 0x4b, 0x18, 0x5b, 0x00, 0x9b, - 0x93, 0x04, 0x1c, 0xa2, 0x49, 0x28, 0x91, 0x03, - 0x18, 0x59, 0x91, 0x02, 0x88, 0x89, 0x42, 0x8a, - 0xdd, 0x0a, 0x20, 0x80, 0x90, 0x00, 0x1e, 0x88, - 0x04, 0x04, 0x0c, 0x24, 0x19, 0x28, 0x60, 0xb8, - 0x89, 0xb8, 0x1b, 0x00, 0x81, 0xb8, 0xe0, 0x09, - 0x21, 0x00, 0x91, 0x00, 0x81, 0xb9, 0x28, 0x00, - 0xd1, 0x04, 0x68, 0x78, 0xf0, 0x03, 0xfe, 0xbc, - 0x21, 0x00, 0x60, 0x79, 0x1c, 0xa0, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x01, 0xf0, 0x03, 0xfe, 0x8e, - 0x4f, 0x18, 0x60, 0xb8, 0x1c, 0x01, 0xd1, 0x01, - 0x20, 0x00, 0xe0, 0x22, 0x20, 0x21, 0x70, 0x38, - 0x20, 0x13, 0x70, 0x78, 0x20, 0x08, 0x80, 0x78, - 0x98, 0x04, 0x9a, 0x03, 0x5a, 0x10, 0x80, 0xb8, - 0x98, 0x01, 0x80, 0xf8, 0x70, 0x0e, 0x98, 0x00, - 0x68, 0xb9, 0x70, 0x48, 0x68, 0xb8, 0x30, 0x02, - 0x1c, 0x29, 0x1c, 0x22, 0xf0, 0x16, 0xfd, 0x92, - 0xf7, 0xff, 0xfd, 0x54, 0x28, 0x00, 0xd1, 0x03, - 0x68, 0xb8, 0xf0, 0x03, 0xfe, 0x91, 0xe7, 0xdf, - 0x99, 0x02, 0x72, 0x0e, 0x20, 0x01, 0x99, 0x02, - 0x72, 0x48, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x4f, 0x60, - 0x2e, 0x08, 0x4f, 0x48, 0x2e, 0x08, 0x4f, 0x38, - 0xb5, 0xf0, 0x4d, 0x15, 0x69, 0x68, 0x28, 0x00, - 0xd1, 0x06, 0x20, 0xff, 0x30, 0x01, 0xf0, 0x03, - 0xfe, 0x51, 0x61, 0x68, 0x28, 0x00, 0xd0, 0x11, - 0x27, 0x00, 0x4c, 0x10, 0x21, 0x01, 0x01, 0x3e, - 0x19, 0x30, 0x81, 0x01, 0x21, 0x00, 0x60, 0xc1, - 0x20, 0x00, 0x1c, 0x39, 0xf0, 0x05, 0xf9, 0x90, - 0x04, 0x00, 0x0c, 0x00, 0x53, 0xa0, 0x04, 0x00, - 0x14, 0x00, 0xd5, 0x04, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x37, 0x01, - 0x2f, 0x02, 0xdb, 0xe7, 0x21, 0x00, 0x82, 0x29, - 0x20, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x54, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf7, 0x04, 0x01, 0x0c, 0x09, 0x04, 0x16, - 0x0c, 0x36, 0x27, 0x00, 0x48, 0x12, 0x01, 0x3a, - 0x5a, 0x82, 0x42, 0x8a, 0xd0, 0x02, 0x37, 0x01, - 0x2f, 0x02, 0xdb, 0xf8, 0x2f, 0x02, 0xda, 0x17, - 0x24, 0x00, 0x99, 0x01, 0x1c, 0x38, 0x1c, 0x32, - 0xf0, 0x00, 0xf9, 0xd6, 0x1c, 0x05, 0x28, 0x02, - 0xd1, 0x05, 0x20, 0x14, 0xf0, 0x03, 0xfe, 0x3e, - 0x34, 0x01, 0x2c, 0x0a, 0xd0, 0x08, 0x2d, 0x02, - 0xd0, 0xef, 0x2d, 0x00, 0xd1, 0x04, 0x20, 0x00, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x43, 0xc0, 0xe7, 0xf8, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x4f, 0x14, - 0x26, 0x00, 0x69, 0x78, 0x28, 0x00, 0xd0, 0x02, - 0xf0, 0x03, 0xfe, 0x1a, 0x61, 0x7e, 0x24, 0x00, - 0x4d, 0x10, 0x01, 0x27, 0x5b, 0xe8, 0x28, 0x00, - 0xdd, 0x02, 0xf0, 0x05, 0xf9, 0xe7, 0x53, 0xee, - 0x19, 0x78, 0x68, 0xc7, 0x2f, 0x00, 0xd0, 0x0c, - 0x68, 0x38, 0x28, 0x00, 0xd0, 0x06, 0x1c, 0x38, - 0x68, 0x3f, 0xf0, 0x03, 0xfe, 0x05, 0x68, 0x38, - 0x28, 0x00, 0xd1, 0xf8, 0x1c, 0x38, 0xf0, 0x03, - 0xfd, 0xff, 0x34, 0x01, 0x2c, 0x02, 0xdb, 0xe4, - 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x54, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf0, 0x1c, 0x07, 0x20, 0x03, 0x1c, 0x0d, - 0x01, 0x39, 0x1c, 0x14, 0x4a, 0x12, 0x18, 0x8e, - 0x81, 0x30, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x22, - 0x28, 0x00, 0xd1, 0x10, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x6d, 0x28, 0x00, 0xd0, 0x04, 0x28, 0x07, - 0xd1, 0x12, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x22, 0xf0, 0x00, - 0xf8, 0xb3, 0x28, 0x00, 0xd0, 0x04, 0x20, 0x01, - 0x81, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x27, 0x01, - 0xb0, 0x81, 0xab, 0x00, 0x70, 0x1f, 0x01, 0x05, - 0x4c, 0x15, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x06, - 0xf0, 0x05, 0xf9, 0x56, 0x28, 0x00, 0xdd, 0x1d, - 0xa8, 0x00, 0x78, 0x40, 0x28, 0x00, 0xd0, 0x19, - 0x27, 0x00, 0x20, 0x02, 0xab, 0x00, 0x70, 0x18, - 0x26, 0x06, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x06, - 0xf0, 0x05, 0xf9, 0x46, 0x28, 0x00, 0xdb, 0x05, - 0x20, 0x14, 0xf0, 0x03, 0xfd, 0xaf, 0x37, 0x01, - 0x2f, 0x0a, 0xd1, 0x01, 0x1c, 0x30, 0xe0, 0x06, - 0xa8, 0x00, 0x78, 0x40, 0x28, 0x00, 0xd0, 0xec, - 0x20, 0x00, 0xe0, 0x00, 0x1c, 0x38, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0x80, 0x27, 0x01, - 0xb0, 0x81, 0xab, 0x00, 0x70, 0x1f, 0x01, 0x00, - 0x49, 0x09, 0x5a, 0x08, 0x46, 0x6a, 0x21, 0x06, - 0xf0, 0x05, 0xf9, 0x22, 0x28, 0x00, 0xdd, 0x05, - 0xa8, 0x00, 0x78, 0x40, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x00, 0xe0, 0x00, 0x1c, 0x38, 0xb0, 0x01, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x27, 0x00, - 0x26, 0x06, 0x01, 0x05, 0xb0, 0xff, 0xb0, 0x87, - 0x4c, 0x24, 0x20, 0x00, 0xab, 0x00, 0x80, 0x18, - 0x20, 0x01, 0x02, 0x40, 0x80, 0x58, 0xa8, 0x05, - 0x90, 0x01, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x02, - 0xf0, 0x05, 0xf8, 0xfe, 0x28, 0x00, 0xda, 0x01, - 0x1c, 0x30, 0xe0, 0x2f, 0xa9, 0x02, 0x88, 0x09, - 0xa8, 0x05, 0xaa, 0x03, 0xab, 0x04, 0xf0, 0x00, - 0xfa, 0x73, 0x28, 0x00, 0xda, 0x2b, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x20, 0xc8, 0xf0, 0x03, - 0xfd, 0x59, 0x2f, 0x0a, 0xdb, 0xdd, 0x2f, 0x0a, - 0xd0, 0xea, 0xa8, 0x03, 0x88, 0x00, 0xab, 0x00, - 0x80, 0x18, 0x27, 0x01, 0x80, 0x5f, 0xa8, 0x04, - 0x90, 0x01, 0x5b, 0x60, 0x46, 0x6a, 0x21, 0x03, - 0xf0, 0x05, 0xf8, 0xda, 0x28, 0x00, 0xdb, 0xdb, - 0xa8, 0x02, 0x88, 0x00, 0x28, 0x01, 0xd1, 0xd7, - 0xab, 0x85, 0x70, 0x5f, 0x27, 0x00, 0x70, 0x1f, - 0x5b, 0x60, 0x21, 0x07, 0xaa, 0x85, 0xf0, 0x05, - 0xf8, 0xcb, 0x1c, 0x38, 0xb0, 0x7f, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x27, 0x00, - 0xe7, 0xd9, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf7, 0x1c, 0x07, 0x20, 0x00, 0xb0, 0x84, - 0x4c, 0x5b, 0x70, 0x20, 0xab, 0x00, 0x70, 0x58, - 0x70, 0x18, 0x01, 0x38, 0x49, 0x59, 0x5a, 0x08, - 0x46, 0x6a, 0x21, 0x07, 0xf0, 0x05, 0xf8, 0xb0, - 0x28, 0x00, 0xdb, 0x2f, 0x1d, 0x22, 0x92, 0x03, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0x04, - 0x28, 0x01, 0xd0, 0x27, 0x78, 0x20, 0x23, 0x08, - 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, - 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xd3, 0x28, 0x01, - 0xd0, 0x1c, 0x78, 0x20, 0x23, 0xf7, 0x40, 0x18, - 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0xc8, 0x28, 0x01, 0xd0, 0x11, - 0x21, 0x01, 0x9a, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0xe7, 0x28, 0x01, 0xd0, 0x0a, 0x78, 0x20, - 0x23, 0x04, 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0xb6, - 0x28, 0x01, 0xd1, 0x01, 0x20, 0x05, 0xe0, 0x71, - 0x25, 0x00, 0x23, 0x01, 0x1c, 0x38, 0xa9, 0x02, - 0xaa, 0x01, 0xf0, 0x00, 0xf9, 0x33, 0x1c, 0x06, - 0x28, 0x01, 0xd0, 0xf3, 0x20, 0x14, 0xf0, 0x03, - 0xfc, 0xdd, 0x35, 0x01, 0x2d, 0x0a, 0xd0, 0xed, - 0x2e, 0x03, 0xd0, 0xee, 0x2e, 0x02, 0xd0, 0xec, - 0xa8, 0x02, 0x78, 0x00, 0x02, 0x00, 0xa9, 0x02, - 0x78, 0x49, 0x18, 0x40, 0x9a, 0x06, 0x60, 0x10, - 0x99, 0x05, 0x42, 0x88, 0xd9, 0x08, 0x99, 0x05, - 0x0a, 0x08, 0xab, 0x02, 0x70, 0x18, 0x99, 0x05, - 0x70, 0x59, 0x99, 0x05, 0x9a, 0x06, 0x60, 0x11, - 0x78, 0x20, 0x23, 0xfb, 0x40, 0x18, 0x70, 0x20, - 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0x81, 0x28, 0x01, 0xd0, 0x0a, 0x78, 0x20, - 0x23, 0x02, 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x76, - 0x28, 0x01, 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x31, - 0x25, 0x00, 0x22, 0x02, 0x1c, 0x38, 0xa9, 0x02, - 0xf0, 0x00, 0xf8, 0x36, 0x1c, 0x06, 0x28, 0x01, - 0xd0, 0xb4, 0x20, 0x14, 0xf0, 0x03, 0xfc, 0x9e, - 0x35, 0x01, 0x2d, 0x0a, 0xd0, 0xae, 0x2e, 0x02, - 0xd0, 0xef, 0x78, 0x20, 0x23, 0xfd, 0x40, 0x18, - 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x58, 0x28, 0x01, 0xd0, 0xe1, - 0x25, 0x00, 0x21, 0x01, 0x9a, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x76, 0x28, 0x01, 0xd0, 0x99, - 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, 0x71, 0x20, - 0x20, 0x14, 0xf0, 0x03, 0xfc, 0x7f, 0x35, 0x01, - 0x2d, 0x0a, 0xd0, 0x8f, 0x79, 0x20, 0x09, 0xc0, - 0xd3, 0xeb, 0x20, 0x00, 0xb0, 0x04, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x54, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf7, 0x04, 0x15, 0x0c, 0x2d, 0x1c, 0x07, - 0x01, 0x00, 0xb0, 0x82, 0x90, 0x01, 0x49, 0x3d, - 0x91, 0x00, 0x18, 0x40, 0x89, 0x00, 0x28, 0x01, - 0xd0, 0x07, 0x4a, 0x3b, 0x21, 0x01, 0x1c, 0x38, - 0x1c, 0x16, 0xf0, 0x00, 0xf9, 0x49, 0x28, 0x01, - 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x64, 0x4c, 0x37, - 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, 0x71, 0x20, - 0x79, 0x20, 0x0a, 0x00, 0xd3, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x66, 0x21, 0x01, 0x1c, 0x38, - 0x1c, 0x32, 0xf0, 0x00, 0xf9, 0x35, 0x28, 0x01, - 0xd0, 0xeb, 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, - 0x71, 0x20, 0x79, 0x20, 0x09, 0xc0, 0xd2, 0x01, - 0x20, 0x02, 0xe0, 0x49, 0x78, 0x20, 0x23, 0x01, - 0x43, 0x18, 0x70, 0x20, 0x78, 0x22, 0x21, 0x01, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xfb, 0x28, 0x01, - 0xd0, 0xd7, 0x06, 0x2a, 0x0e, 0x12, 0x21, 0x02, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xf3, 0x28, 0x01, - 0xd0, 0xcf, 0x0a, 0x2a, 0x21, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xec, 0x28, 0x01, 0xd0, 0xc8, - 0x98, 0x01, 0x99, 0x00, 0x5a, 0x08, 0x9a, 0x03, - 0x1c, 0x29, 0xf0, 0x04, 0xff, 0x55, 0x42, 0xa8, - 0xd1, 0xbf, 0x21, 0x01, 0x1c, 0x38, 0x1c, 0x32, - 0xf0, 0x00, 0xf9, 0x02, 0x28, 0x01, 0xd0, 0xb8, - 0x79, 0x20, 0x23, 0xc3, 0x40, 0x18, 0x71, 0x20, - 0x79, 0x20, 0x08, 0x80, 0xd3, 0x0c, 0x78, 0x20, - 0x23, 0xfe, 0x40, 0x18, 0x70, 0x20, 0x78, 0x22, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xca, - 0x28, 0x01, 0xd0, 0xa6, 0x20, 0x04, 0xe0, 0x0b, - 0x78, 0x20, 0x23, 0xfe, 0x40, 0x18, 0x70, 0x20, - 0x78, 0x22, 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0xbd, 0x28, 0x01, 0xd0, 0x99, 0x20, 0x00, - 0xb0, 0x02, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x50, - 0x2e, 0x08, 0x1a, 0x58, 0x2e, 0x08, 0x1a, 0x54, - 0xb5, 0xf0, 0xb0, 0x81, 0x46, 0x6a, 0x1c, 0x07, - 0x4e, 0x16, 0x25, 0x00, 0x69, 0x71, 0x1c, 0x2b, - 0xf0, 0x00, 0xf8, 0x2c, 0x28, 0x00, 0xd1, 0x21, - 0xa8, 0x00, 0x88, 0x00, 0x30, 0x07, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x03, 0xfb, 0xa3, 0x1c, 0x04, - 0xd0, 0x18, 0xa8, 0x00, 0x60, 0x25, 0x88, 0x00, - 0x80, 0xa0, 0xaa, 0x00, 0x88, 0x12, 0x69, 0x71, - 0x1d, 0xa0, 0xf0, 0x16, 0xfa, 0xb7, 0x01, 0x38, - 0x49, 0x09, 0x18, 0x40, 0x68, 0xc1, 0x29, 0x00, - 0xd1, 0x01, 0x60, 0xc4, 0xe0, 0x06, 0x68, 0x08, - 0x28, 0x00, 0xd0, 0x03, 0x68, 0x09, 0x68, 0x08, - 0x28, 0x00, 0xd1, 0xfb, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x54, - 0x2e, 0x08, 0x54, 0x50, 0xb5, 0xf0, 0x1c, 0x07, - 0x01, 0x00, 0xb0, 0x83, 0x90, 0x02, 0x1c, 0x14, - 0x1c, 0x0d, 0x49, 0x32, 0x91, 0x01, 0x18, 0x46, - 0x89, 0x30, 0x28, 0x01, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x58, 0x2b, 0x00, 0xd0, 0x12, 0x68, 0xf0, - 0x28, 0x00, 0xd0, 0x0f, 0x88, 0x82, 0x1d, 0x81, - 0x1c, 0x28, 0xf0, 0x16, 0xfa, 0x87, 0x68, 0xf0, - 0x88, 0x80, 0x80, 0x20, 0x68, 0xf0, 0x1c, 0x01, - 0x68, 0x00, 0x60, 0xf0, 0x1c, 0x08, 0xf0, 0x03, - 0xfb, 0x83, 0xe0, 0x42, 0x4a, 0x24, 0x92, 0x00, - 0x21, 0x01, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x74, - 0x28, 0x01, 0xd0, 0xe0, 0x4e, 0x21, 0x79, 0x30, - 0x23, 0xc3, 0x40, 0x18, 0x71, 0x30, 0x79, 0x30, - 0x0a, 0x00, 0xd2, 0x01, 0x20, 0x03, 0xe0, 0x31, - 0x4a, 0x1d, 0x21, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x63, 0x28, 0x01, 0xd0, 0xcf, 0x4a, 0x1b, - 0x21, 0x03, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x5c, - 0x28, 0x01, 0xd0, 0xc8, 0x7b, 0x30, 0x02, 0x00, - 0x7a, 0x31, 0x18, 0x40, 0x80, 0x20, 0x88, 0x20, - 0x4b, 0x15, 0x42, 0x98, 0xd0, 0xbf, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x98, 0xdc, 0xbb, 0x1c, 0x38, - 0xf7, 0xff, 0xfd, 0xc0, 0x28, 0x01, 0xd0, 0xb6, - 0x98, 0x02, 0x99, 0x01, 0x5a, 0x08, 0x88, 0x21, - 0x1c, 0x2a, 0xf0, 0x04, 0xfe, 0xb3, 0x88, 0x21, - 0x42, 0x88, 0xd1, 0xac, 0x21, 0x01, 0x9a, 0x00, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x39, 0x28, 0x01, - 0xd0, 0xa5, 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x50, - 0x2e, 0x08, 0x1a, 0x58, 0x2e, 0x08, 0x1a, 0x54, - 0x2e, 0x08, 0x1a, 0x5c, 0x2e, 0x08, 0x1a, 0x60, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0xb0, 0xb0, 0x81, - 0xab, 0x00, 0x70, 0x1a, 0x1c, 0x0c, 0x1c, 0x07, - 0xb0, 0x82, 0xf7, 0xff, 0xfd, 0x93, 0x25, 0x01, - 0x28, 0x01, 0xd1, 0x01, 0x1c, 0x28, 0xe0, 0x11, - 0xab, 0x00, 0x80, 0x1c, 0xa8, 0x02, 0x90, 0x01, - 0x01, 0x3c, 0x4f, 0x08, 0x5b, 0x38, 0x46, 0x6a, - 0x21, 0x05, 0xf0, 0x04, 0xfe, 0xb1, 0x28, 0x00, - 0xda, 0x03, 0x19, 0xe1, 0x81, 0x0d, 0x1c, 0x28, - 0xe0, 0x00, 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xf0, 0x1c, 0x14, 0x1c, 0x0d, 0x1c, 0x07, - 0xb0, 0x82, 0xf7, 0xff, 0xfd, 0x6f, 0x26, 0x01, - 0x28, 0x01, 0xd1, 0x01, 0x1c, 0x30, 0xe0, 0x10, - 0xab, 0x00, 0x80, 0x1d, 0x94, 0x01, 0x01, 0x3c, - 0x4f, 0x08, 0x5b, 0x38, 0x46, 0x6a, 0x21, 0x04, - 0xf0, 0x04, 0xfe, 0x8e, 0x28, 0x00, 0xda, 0x03, - 0x19, 0xe1, 0x81, 0x0e, 0x1c, 0x30, 0xe0, 0x00, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x50, - 0xb5, 0xb0, 0xb0, 0x86, 0x90, 0x05, 0x91, 0x04, - 0x20, 0x00, 0x90, 0x01, 0x1c, 0x14, 0x46, 0x6a, - 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, - 0xb4, 0x04, 0x1c, 0x1f, 0x21, 0x1d, 0x20, 0x00, - 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x82, - 0x25, 0x00, 0x43, 0xed, 0xb0, 0x04, 0x28, 0x00, - 0xdb, 0x3b, 0x46, 0x6a, 0xa8, 0x02, 0xa9, 0x01, - 0xb4, 0x07, 0xaa, 0x06, 0xb4, 0x04, 0x21, 0x1c, - 0x20, 0x00, 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, - 0xf8, 0x71, 0xb0, 0x04, 0x28, 0x00, 0xdb, 0x2c, - 0x46, 0x6a, 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, - 0xaa, 0x06, 0xb4, 0x04, 0x21, 0x15, 0x20, 0x00, - 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x62, - 0xb0, 0x04, 0x28, 0x00, 0xdb, 0x1d, 0x46, 0x6a, - 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, - 0xb4, 0x04, 0x21, 0x20, 0x20, 0x00, 0xaa, 0x09, - 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x53, 0xb0, 0x04, - 0x28, 0x00, 0xdb, 0x0e, 0x46, 0x6a, 0xa8, 0x02, - 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, 0xb4, 0x04, - 0x21, 0x1a, 0x20, 0x00, 0xaa, 0x09, 0xab, 0x08, - 0xf0, 0x00, 0xf8, 0x44, 0xb0, 0x04, 0x28, 0x00, - 0xda, 0x01, 0x1c, 0x28, 0xe0, 0x3a, 0x98, 0x02, - 0x80, 0x20, 0x20, 0x01, 0x90, 0x03, 0x43, 0xc4, - 0x46, 0x6a, 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, - 0xaa, 0x06, 0xb4, 0x04, 0x21, 0x1b, 0x20, 0x00, - 0xaa, 0x09, 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x2e, - 0xb0, 0x04, 0x28, 0x00, 0xd0, 0xf0, 0x42, 0xa0, - 0xd0, 0xee, 0x28, 0x00, 0xdb, 0xe5, 0x46, 0x6a, - 0xa8, 0x02, 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, - 0xb4, 0x04, 0x21, 0x14, 0x20, 0x00, 0xaa, 0x09, - 0xab, 0x08, 0xf0, 0x00, 0xf8, 0x1b, 0xb0, 0x04, - 0x28, 0x00, 0xdb, 0xd6, 0x46, 0x6a, 0xa8, 0x02, - 0xa9, 0x01, 0xb4, 0x07, 0xaa, 0x06, 0xb4, 0x04, - 0x21, 0xff, 0x20, 0x00, 0xaa, 0x09, 0xab, 0x08, - 0xf0, 0x00, 0xf8, 0x0c, 0xb0, 0x04, 0x28, 0x00, - 0xdb, 0xc7, 0x98, 0x01, 0x28, 0x0f, 0xd1, 0xc4, - 0x70, 0x38, 0x20, 0x01, 0xb0, 0x06, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0x06, 0x08, - 0x0e, 0x00, 0xb0, 0x83, 0x90, 0x00, 0x25, 0x00, - 0x24, 0x00, 0x26, 0x00, 0x1c, 0x17, 0x22, 0x00, - 0x21, 0x00, 0xb0, 0x87, 0x91, 0x04, 0x98, 0x07, - 0x28, 0xff, 0xd1, 0x0b, 0x68, 0x38, 0x78, 0x00, - 0x28, 0xff, 0xd1, 0x07, 0x9b, 0x0d, 0x68, 0x18, - 0x28, 0x01, 0xd1, 0x03, 0x20, 0x00, 0x9b, 0x0d, - 0x60, 0x18, 0xe1, 0x87, 0x68, 0x38, 0x78, 0x01, - 0x78, 0x43, 0x93, 0x05, 0x30, 0x02, 0x32, 0x02, - 0x60, 0x38, 0x92, 0x06, 0x9a, 0x07, 0x42, 0x8a, - 0xd1, 0x5b, 0x21, 0x01, 0x91, 0x04, 0x9a, 0x07, - 0x2a, 0x1b, 0xd0, 0x57, 0xdc, 0x0b, 0x2a, 0x14, - 0xd0, 0x5a, 0x2a, 0x15, 0xd0, 0x11, 0x2a, 0x1a, - 0xd1, 0x4f, 0x78, 0x02, 0x07, 0x91, 0x0f, 0x89, - 0x29, 0x01, 0xdd, 0x14, 0xe0, 0x10, 0x2a, 0xc0, - 0xd0, 0x73, 0x2a, 0xc1, 0xd1, 0x45, 0xa1, 0xb6, - 0xf0, 0x16, 0xf9, 0x4c, 0x28, 0x00, 0xd1, 0x07, - 0xe1, 0x47, 0x78, 0x01, 0x29, 0x05, 0xd1, 0x03, - 0x78, 0x40, 0x28, 0x00, 0xd1, 0x00, 0xe1, 0x40, - 0x20, 0x00, 0x43, 0xc0, 0xe1, 0x56, 0x23, 0x3c, - 0x40, 0x1a, 0x78, 0x40, 0x9b, 0x16, 0x60, 0x18, - 0x29, 0x00, 0xd1, 0x02, 0x68, 0x38, 0x78, 0x80, - 0xe0, 0x04, 0x68, 0x38, 0x78, 0x83, 0x78, 0xc0, - 0x02, 0x00, 0x18, 0x18, 0x9b, 0x14, 0x60, 0x18, - 0x98, 0x14, 0x68, 0x00, 0x4b, 0xa8, 0x42, 0x98, - 0xdc, 0xe6, 0x68, 0x38, 0x18, 0x43, 0x78, 0xdb, - 0x08, 0x5b, 0xd3, 0xe1, 0x18, 0x89, 0x31, 0x04, - 0x18, 0x40, 0x90, 0x02, 0x9b, 0x0d, 0x68, 0x18, - 0x9a, 0x06, 0x1a, 0x80, 0x9a, 0x05, 0x1a, 0x51, - 0x1a, 0x40, 0x90, 0x03, 0xaa, 0x14, 0xca, 0x07, - 0xb4, 0x07, 0x9a, 0x16, 0xb4, 0x04, 0x21, 0xc0, - 0x98, 0x0b, 0xaa, 0x06, 0xab, 0x07, 0xf7, 0xff, - 0xff, 0x81, 0xb0, 0x04, 0x28, 0x00, 0xdb, 0xc7, - 0xe1, 0x07, 0xe1, 0x06, 0x78, 0x00, 0x09, 0x81, - 0x07, 0x89, 0xd1, 0x02, 0x21, 0x01, 0xe0, 0x01, - 0xe0, 0xc1, 0x21, 0x00, 0x9a, 0x13, 0x68, 0x12, - 0x40, 0x11, 0xd1, 0xb9, 0x23, 0xc0, 0x43, 0xdb, - 0x40, 0x18, 0x90, 0x00, 0x28, 0x0f, 0xd1, 0x01, - 0x99, 0x15, 0x60, 0x08, 0x20, 0x00, 0x99, 0x13, - 0x60, 0x08, 0x68, 0x39, 0x78, 0x08, 0x0a, 0x00, - 0xd3, 0x73, 0x78, 0x48, 0x28, 0x04, 0xd1, 0x71, - 0x78, 0x8a, 0x92, 0x09, 0x20, 0x0b, 0x40, 0x10, - 0xd0, 0x6d, 0x78, 0xcb, 0x20, 0x00, 0x22, 0x00, - 0x08, 0x5e, 0xd3, 0x00, 0x30, 0x01, 0x10, 0x5b, - 0xe0, 0x00, 0xe0, 0xa1, 0x06, 0x1b, 0x0e, 0x1b, - 0x32, 0x01, 0x2a, 0x08, 0xdb, 0xf4, 0x22, 0x04, - 0x1c, 0xc3, 0x2b, 0x04, 0xdb, 0x07, 0x5c, 0x8e, - 0x0a, 0x33, 0xd3, 0x00, 0x30, 0x01, 0x32, 0x01, - 0x1c, 0xc3, 0x42, 0x93, 0xda, 0xf7, 0x9a, 0x09, - 0x30, 0x01, 0x08, 0xd2, 0xd3, 0x25, 0x18, 0x0b, - 0x78, 0xda, 0x92, 0x08, 0x07, 0x92, 0x0f, 0x92, - 0x1c, 0x1e, 0x2a, 0x03, 0xd0, 0x09, 0x22, 0x00, - 0x79, 0x35, 0x0a, 0x2b, 0xd3, 0x04, 0x32, 0x01, - 0x18, 0xb3, 0x79, 0x1d, 0x0a, 0x2b, 0xd2, 0xfa, - 0x1c, 0x55, 0x23, 0x1c, 0x9a, 0x08, 0x40, 0x1a, - 0x2a, 0x1c, 0xd0, 0x0b, 0x22, 0x00, 0x19, 0x73, - 0x79, 0x1c, 0x1c, 0x1e, 0x0a, 0x23, 0xd3, 0x04, - 0x32, 0x01, 0x18, 0xb3, 0x79, 0x1c, 0x0a, 0x23, - 0xd2, 0xfa, 0x1c, 0x54, 0x19, 0x40, 0x19, 0x00, - 0x30, 0x01, 0x9a, 0x09, 0x09, 0x12, 0xd3, 0x0e, - 0x18, 0x0a, 0x78, 0xd6, 0x0a, 0x33, 0xd3, 0x09, - 0x79, 0x12, 0x23, 0xc0, 0x40, 0x13, 0x09, 0x9d, - 0x23, 0x30, 0x40, 0x1a, 0x09, 0x14, 0x19, 0x40, - 0x19, 0x00, 0x30, 0x01, 0x30, 0x01, 0x9a, 0x09, - 0x09, 0x52, 0xd3, 0x05, 0x18, 0x0a, 0x78, 0xd2, - 0x09, 0x52, 0xd3, 0x00, 0x30, 0x02, 0x30, 0x01, - 0x9a, 0x09, 0x09, 0x52, 0x07, 0x92, 0xd0, 0x11, - 0x18, 0x0a, 0x78, 0xd2, 0x23, 0x18, 0x40, 0x13, - 0x08, 0xdd, 0x23, 0x60, 0x40, 0x13, 0x09, 0x5c, - 0xe0, 0x02, 0xe0, 0x2c, 0xe0, 0x2b, 0xe0, 0x2a, - 0x0a, 0x12, 0xd3, 0x00, 0x00, 0x64, 0x19, 0x40, - 0x19, 0x00, 0x30, 0x01, 0x30, 0x03, 0x18, 0x09, - 0x91, 0x02, 0x9b, 0x0d, 0x68, 0x19, 0x9a, 0x06, - 0x1a, 0x89, 0x1a, 0x08, 0x90, 0x03, 0xaa, 0x14, - 0xca, 0x07, 0xb4, 0x07, 0x9a, 0x16, 0xb4, 0x04, - 0x21, 0xc0, 0x98, 0x0b, 0xaa, 0x06, 0xab, 0x07, - 0xf7, 0xff, 0xfe, 0xd0, 0xb0, 0x04, 0x28, 0x00, - 0xdb, 0x0d, 0xaa, 0x14, 0xca, 0x07, 0xb4, 0x07, - 0x9a, 0x16, 0xb4, 0x04, 0x21, 0xc1, 0x98, 0x0b, - 0xaa, 0x06, 0xab, 0x07, 0xf7, 0xff, 0xfe, 0xc2, - 0xb0, 0x04, 0x28, 0x00, 0xda, 0x02, 0x26, 0x01, - 0x43, 0xf6, 0xe0, 0x46, 0x98, 0x00, 0x9a, 0x16, - 0x68, 0x11, 0x42, 0x88, 0xd1, 0x01, 0x26, 0x01, - 0xe0, 0x3f, 0x26, 0x00, 0xe0, 0x3d, 0x9a, 0x05, - 0x2a, 0x00, 0xd0, 0x00, 0xe6, 0xf8, 0xe0, 0x38, - 0x99, 0x0a, 0x29, 0x1b, 0xd1, 0x05, 0xa1, 0x2f, - 0xf0, 0x16, 0xf8, 0x34, 0x28, 0x00, 0xd1, 0xf5, - 0xe0, 0x2f, 0x9a, 0x05, 0x2a, 0x0e, 0xd1, 0xf1, - 0x78, 0x01, 0x29, 0x41, 0xd1, 0xee, 0x78, 0x40, - 0x28, 0x02, 0xd1, 0xeb, 0xa0, 0x2a, 0xf0, 0x16, - 0xf8, 0x51, 0x90, 0x01, 0x68, 0x38, 0x9a, 0x01, - 0x30, 0x02, 0xa1, 0x27, 0xf0, 0x16, 0xf8, 0x6c, - 0x28, 0x00, 0xd1, 0xdf, 0x68, 0x38, 0x9a, 0x01, - 0x18, 0x80, 0x78, 0x80, 0xf0, 0x00, 0xf8, 0x4a, - 0x28, 0x00, 0xd0, 0xd7, 0x68, 0x38, 0x9a, 0x01, - 0x18, 0x80, 0x78, 0xc1, 0x29, 0x2e, 0xd1, 0xd1, - 0x79, 0x00, 0xf0, 0x00, 0xf8, 0x3f, 0x28, 0x00, - 0xd0, 0xcc, 0x68, 0x38, 0x9a, 0x01, 0x18, 0x80, - 0x79, 0x40, 0xf0, 0x00, 0xf8, 0x37, 0x28, 0x00, - 0xd0, 0xc4, 0x9a, 0x06, 0x9b, 0x05, 0x18, 0xd2, - 0x9b, 0x0d, 0x68, 0x18, 0x42, 0x82, 0xda, 0xbd, - 0x68, 0x38, 0x9b, 0x05, 0x18, 0xc0, 0x60, 0x38, - 0x9b, 0x0d, 0x68, 0x18, 0x1a, 0x80, 0x60, 0x18, - 0x99, 0x04, 0x29, 0x00, 0xd1, 0x00, 0xe6, 0x6e, - 0x98, 0x07, 0x28, 0x1b, 0xd1, 0x01, 0x1c, 0x30, - 0xe0, 0x00, 0x20, 0x01, 0xb0, 0x0a, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x44, 0x56, 0x42, 0x5f, 0x43, 0x49, 0x5f, 0x4d, - 0x4f, 0x44, 0x55, 0x4c, 0x45, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x0f, 0xfe, 0x44, 0x56, 0x42, 0x5f, - 0x48, 0x4f, 0x53, 0x54, 0x00, 0x00, 0x00, 0x00, - 0x44, 0x56, 0x42, 0x5f, 0x43, 0x49, 0x5f, 0x56, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x01, 0x0e, 0x09, - 0x22, 0xf0, 0x40, 0x0a, 0x20, 0x00, 0x2a, 0x30, - 0xd1, 0x04, 0x07, 0x09, 0x0f, 0x09, 0x29, 0x09, - 0xdc, 0x00, 0x20, 0x01, 0x47, 0x70, 0xb5, 0xf3, - 0x26, 0x00, 0x1c, 0x07, 0xb0, 0x85, 0x48, 0x4f, - 0x90, 0x04, 0x23, 0x10, 0x5e, 0xc0, 0x22, 0x08, - 0x92, 0x01, 0x01, 0x01, 0x91, 0x03, 0x4a, 0x4c, - 0x92, 0x02, 0x18, 0x8d, 0x89, 0x29, 0x4c, 0x4b, - 0x29, 0x02, 0xd1, 0x47, 0x46, 0x6a, 0x23, 0x01, - 0x1d, 0xf9, 0x31, 0x01, 0xf7, 0xff, 0xfc, 0xc2, - 0x1c, 0x01, 0xd0, 0x16, 0x20, 0x04, 0x22, 0x03, - 0x29, 0x01, 0xd0, 0x2b, 0x29, 0x04, 0xd1, 0x6e, - 0x70, 0x22, 0x80, 0x60, 0x99, 0x03, 0x9a, 0x02, - 0x5a, 0x50, 0x80, 0xa0, 0x21, 0x02, 0x71, 0xa1, - 0x22, 0x08, 0x99, 0x06, 0x80, 0x0a, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x4b, 0x26, 0x03, - 0xe0, 0x5d, 0x21, 0x02, 0x70, 0x21, 0xa8, 0x00, - 0x88, 0x00, 0x30, 0x07, 0x04, 0x00, 0x0c, 0x00, - 0x80, 0x60, 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, - 0x80, 0xa1, 0xa9, 0x00, 0x88, 0x09, 0x80, 0xe1, - 0x30, 0x04, 0x99, 0x06, 0x80, 0x08, 0x9a, 0x01, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x32, - 0x26, 0x02, 0xe0, 0x44, 0x81, 0x2a, 0x70, 0x20, - 0x80, 0x60, 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x50, - 0x80, 0xa0, 0x22, 0x08, 0x99, 0x06, 0x80, 0x0a, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x22, - 0x26, 0x04, 0xe0, 0x34, 0x21, 0xff, 0x31, 0x01, - 0x1d, 0x2a, 0xf7, 0xff, 0xfa, 0x2d, 0x1c, 0x01, - 0x20, 0x0c, 0x29, 0x00, 0xd0, 0x16, 0x29, 0x07, - 0xd1, 0x29, 0x26, 0x01, 0x70, 0x26, 0x21, 0x08, - 0x80, 0x61, 0x99, 0x03, 0x9a, 0x02, 0x5a, 0x51, - 0x80, 0xa1, 0x21, 0x02, 0x71, 0xa1, 0x68, 0x69, - 0x81, 0x21, 0x99, 0x06, 0x80, 0x08, 0x1c, 0x02, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xff, 0x02, - 0x81, 0x2e, 0xe0, 0x13, 0x23, 0x01, 0x70, 0x23, - 0x21, 0x08, 0x80, 0x61, 0x99, 0x03, 0x9a, 0x02, - 0x5a, 0x51, 0x80, 0xa1, 0x71, 0xa3, 0x68, 0x69, - 0x81, 0x21, 0x99, 0x06, 0x80, 0x08, 0x1c, 0x02, - 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x15, 0xfe, 0xee, - 0x21, 0x02, 0x81, 0x29, 0x26, 0x01, 0x98, 0x04, - 0x8a, 0x00, 0x30, 0x01, 0x99, 0x04, 0x82, 0x08, - 0x23, 0x10, 0x98, 0x04, 0x5e, 0xc0, 0x28, 0x02, - 0xd1, 0x02, 0x20, 0x00, 0x99, 0x04, 0x82, 0x08, - 0x1c, 0x30, 0xb0, 0x05, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x54, - 0x2e, 0x08, 0x54, 0x50, 0x2e, 0x08, 0x54, 0x40, - 0xb5, 0x80, 0x27, 0x00, 0x78, 0x00, 0x49, 0x0d, - 0x72, 0x08, 0x7a, 0x0b, 0x48, 0x0c, 0x2b, 0x01, - 0xd1, 0x06, 0xca, 0x08, 0xc0, 0x08, 0xca, 0x08, - 0xc0, 0x08, 0xca, 0x0c, 0xc0, 0x0c, 0xe0, 0x07, - 0x68, 0xc9, 0x60, 0x01, 0x1c, 0x08, 0x49, 0x07, - 0xf7, 0xff, 0xff, 0x41, 0x1c, 0x07, 0xd0, 0x01, - 0xf0, 0x00, 0xf8, 0x50, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x6c, - 0x2e, 0x08, 0x54, 0x70, 0x2e, 0x08, 0x1a, 0x7c, - 0xb5, 0xb0, 0x24, 0x00, 0x4f, 0x17, 0x72, 0x3c, - 0x20, 0x01, 0xf0, 0x02, 0xff, 0xc3, 0x28, 0x00, - 0xd1, 0x03, 0x43, 0xc0, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0xf7, 0xff, 0xf9, 0x25, 0x28, 0x00, - 0xdc, 0x04, 0x20, 0x01, 0x43, 0xc0, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x25, 0x01, - 0x49, 0x0d, 0x00, 0x82, 0x18, 0x53, 0x70, 0x9d, - 0x52, 0x8c, 0x30, 0x01, 0x28, 0x02, 0xdb, 0xf8, - 0x68, 0xf8, 0x28, 0x00, 0xd1, 0x0a, 0x20, 0xff, - 0x30, 0x0d, 0xf0, 0x02, 0xff, 0x67, 0x60, 0xf8, - 0x28, 0x00, 0xd1, 0x03, 0x38, 0x03, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x28, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x6c, - 0x2e, 0x08, 0x1a, 0x6c, 0xb5, 0x80, 0x4f, 0x06, - 0x68, 0xf8, 0xf0, 0x02, 0xff, 0x79, 0x20, 0x00, - 0x60, 0xf8, 0xf7, 0xff, 0xf9, 0x53, 0xf0, 0x02, - 0xfe, 0x45, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x6c, 0xb5, 0x80, 0x21, 0x00, - 0x48, 0x18, 0x7a, 0x02, 0x48, 0x18, 0x2a, 0x01, - 0xd1, 0x0e, 0x78, 0x42, 0x2a, 0x13, 0xd1, 0x03, - 0x68, 0x87, 0xf0, 0x00, 0xf8, 0x2b, 0x1c, 0x01, - 0x29, 0x00, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x02, - 0xff, 0x5b, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x00, 0x78, 0x00, 0x28, 0x01, 0xd0, 0x14, - 0x28, 0x02, 0xd0, 0x08, 0x28, 0x03, 0xd0, 0x0b, - 0x28, 0x04, 0xd1, 0xf2, 0xf0, 0x00, 0xf8, 0x8c, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x00, - 0xf8, 0x6b, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0xf0, 0x00, 0xf8, 0x4c, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0xf0, 0x00, 0xf8, 0x23, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x6c, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0x80, 0xb0, 0x83, - 0x4f, 0x0b, 0x88, 0xb8, 0xf0, 0x00, 0xf8, 0xae, - 0x28, 0x00, 0xdb, 0x0a, 0x88, 0xf9, 0xab, 0x02, - 0x80, 0x19, 0x68, 0xb9, 0x91, 0x01, 0x46, 0x6b, - 0x21, 0x13, 0xaa, 0x01, 0xf0, 0x00, 0xf8, 0xd6, - 0xe0, 0x01, 0x20, 0x00, 0x90, 0x00, 0x98, 0x00, - 0xb0, 0x03, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0xf0, 0xb0, 0x83, - 0x4e, 0x0f, 0x68, 0x30, 0x88, 0x84, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x6e, 0x25, 0x01, 0x1c, 0x07, - 0xd4, 0x11, 0x68, 0x30, 0x79, 0x81, 0xab, 0x01, - 0x70, 0x19, 0x89, 0x00, 0x80, 0x58, 0x46, 0x6b, - 0x21, 0x01, 0x1c, 0x38, 0xaa, 0x01, 0xf0, 0x00, - 0xf8, 0xb5, 0x28, 0x00, 0xd1, 0x03, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x91, 0x1c, 0x28, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0x90, 0xb0, 0x83, - 0x4c, 0x0a, 0x68, 0x20, 0x88, 0x80, 0xf0, 0x00, - 0xf8, 0x4b, 0x27, 0x01, 0x28, 0x00, 0xdb, 0x08, - 0x68, 0x21, 0x79, 0x89, 0xab, 0x01, 0x70, 0x19, - 0x46, 0x6b, 0x21, 0x03, 0xaa, 0x01, 0xf0, 0x00, - 0xf8, 0x95, 0x1c, 0x38, 0xb0, 0x03, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x70, - 0xb5, 0x90, 0xb0, 0x83, 0x4c, 0x0b, 0x68, 0x20, - 0x88, 0x80, 0xf0, 0x00, 0xf8, 0x53, 0x27, 0x01, - 0x28, 0x00, 0xdb, 0x0a, 0x68, 0x21, 0x88, 0xca, - 0xab, 0x02, 0x80, 0x1a, 0x31, 0x08, 0x91, 0x01, - 0x46, 0x6b, 0x21, 0x02, 0xaa, 0x01, 0xf0, 0x00, - 0xf8, 0x79, 0x1c, 0x38, 0xb0, 0x03, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x70, - 0xb5, 0xb0, 0xb0, 0x81, 0x48, 0x0b, 0x68, 0x00, - 0x88, 0x84, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x36, - 0x25, 0x01, 0x1c, 0x07, 0xd4, 0x09, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x04, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x61, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf8, 0x3f, 0x1c, 0x28, 0xb0, 0x01, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x70, - 0xb4, 0x80, 0x04, 0x03, 0x0c, 0x1b, 0x20, 0x00, - 0x49, 0x0d, 0x00, 0x82, 0x18, 0x57, 0x78, 0xbf, - 0x2f, 0x01, 0xd1, 0x06, 0x00, 0x87, 0x53, 0xcb, - 0x23, 0x02, 0x18, 0x51, 0x70, 0x8b, 0xbc, 0x80, - 0x47, 0x70, 0x5a, 0x8a, 0x42, 0x9a, 0xd1, 0x03, - 0x20, 0x01, 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, - 0x30, 0x01, 0x28, 0x02, 0xdb, 0xe9, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x6c, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x07, 0x00, 0x83, - 0x18, 0x5f, 0x78, 0xbf, 0x2f, 0x01, 0xd0, 0x02, - 0x5a, 0xcb, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x02, 0xdb, 0xf4, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0x6c, - 0xb4, 0x80, 0x28, 0x00, 0xda, 0x05, 0x28, 0x02, - 0xdb, 0x03, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, - 0x47, 0x70, 0x23, 0x01, 0x00, 0x82, 0x49, 0x03, - 0x18, 0x57, 0x70, 0xbb, 0x23, 0x00, 0x52, 0x8b, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0x6c, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x02, - 0xfd, 0x77, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x70, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x00, 0x87, 0x4c, 0x0a, 0x19, 0x3f, - 0x78, 0xbf, 0x2f, 0x02, 0xd0, 0x06, 0x2f, 0x03, - 0xd1, 0x09, 0xf0, 0x00, 0xf8, 0x39, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xf0, 0x00, 0xf8, 0x0a, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x6c, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x27, 0x01, 0x60, 0x1f, 0x29, 0x01, - 0xd1, 0x19, 0x23, 0x12, 0x49, 0x0e, 0x70, 0x0b, - 0x23, 0x11, 0x70, 0x4b, 0x23, 0x08, 0x80, 0x4b, - 0x00, 0x84, 0x4f, 0x0c, 0x5b, 0x38, 0x80, 0x88, - 0x78, 0x10, 0x71, 0x88, 0x88, 0x50, 0x81, 0x08, - 0xf7, 0xff, 0xff, 0xc2, 0x28, 0x00, 0xd0, 0x06, - 0x20, 0x03, 0x19, 0xe1, 0x70, 0x88, 0x20, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x70, 0x2e, 0x08, 0x1a, 0x6c, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x17, - 0x22, 0x01, 0xb0, 0x81, 0x9b, 0x04, 0x25, 0x01, - 0x00, 0x86, 0x60, 0x1a, 0x48, 0x38, 0x90, 0x00, - 0x4c, 0x38, 0x29, 0x02, 0xd0, 0x23, 0x29, 0x03, - 0xd0, 0x41, 0x29, 0x04, 0xd0, 0x4f, 0x29, 0x13, - 0xd1, 0x5e, 0x88, 0xba, 0x98, 0x00, 0x5b, 0x80, - 0x68, 0x39, 0xf7, 0xfe, 0xff, 0x9d, 0x1c, 0x05, - 0xd1, 0x11, 0x20, 0x12, 0x70, 0x20, 0x20, 0x15, - 0x70, 0x60, 0x20, 0x04, 0x80, 0x60, 0x98, 0x00, - 0x5b, 0x80, 0x80, 0xa0, 0xf7, 0xff, 0xff, 0x88, - 0x28, 0x00, 0xd0, 0x4b, 0x20, 0x00, 0x9b, 0x04, - 0x25, 0x01, 0x60, 0x18, 0xe0, 0x46, 0x20, 0x00, - 0x9b, 0x04, 0x60, 0x18, 0xe0, 0x41, 0x88, 0xb8, - 0xf0, 0x02, 0xfd, 0xac, 0x60, 0xa0, 0x1c, 0x01, - 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x3b, 0x20, 0x12, - 0x70, 0x20, 0x20, 0x13, 0x70, 0x60, 0x20, 0x08, - 0x80, 0x60, 0x98, 0x00, 0x5b, 0x80, 0x80, 0xa0, - 0x88, 0xb8, 0x80, 0xe0, 0x88, 0xba, 0x1c, 0x08, - 0x68, 0x39, 0xf0, 0x15, 0xfc, 0xb7, 0xf7, 0xff, - 0xff, 0x63, 0x28, 0x00, 0xd1, 0x26, 0x68, 0xa0, - 0xf0, 0x02, 0xfd, 0xb6, 0xe0, 0x21, 0x20, 0x12, - 0x70, 0x20, 0x20, 0x14, 0x70, 0x60, 0x20, 0x04, - 0x80, 0x60, 0x98, 0x00, 0x5b, 0x80, 0x80, 0xa0, - 0x78, 0x38, 0x80, 0xa0, 0xf7, 0xff, 0xff, 0x50, - 0x28, 0x00, 0xd1, 0x13, 0xe0, 0x11, 0x20, 0x12, - 0x70, 0x20, 0x70, 0x60, 0x20, 0x04, 0x80, 0x60, - 0x98, 0x00, 0x5b, 0x80, 0x80, 0xa0, 0xf7, 0xff, - 0xff, 0x43, 0x28, 0x00, 0xd0, 0x05, 0x20, 0x02, - 0x99, 0x00, 0x18, 0x71, 0x70, 0x88, 0xe0, 0x01, - 0xe7, 0xff, 0x25, 0x00, 0x1c, 0x28, 0xb0, 0x01, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x6c, 0x2e, 0x08, 0x54, 0x70, - 0xb5, 0xf0, 0x1c, 0x17, 0x06, 0x02, 0x0e, 0x12, - 0x04, 0x0c, 0x0c, 0x24, 0x1c, 0x59, 0x1c, 0x48, - 0x1c, 0x1d, 0x1c, 0x43, 0xb0, 0x81, 0x93, 0x00, - 0x1f, 0xd6, 0x3e, 0x89, 0x2e, 0x07, 0xd2, 0x51, - 0xa3, 0x01, 0x5d, 0x9b, 0x00, 0x5b, 0x44, 0x9f, - 0x03, 0x4d, 0x14, 0x3e, 0x4d, 0x27, 0x31, 0x00, - 0x70, 0x2a, 0x1c, 0x0d, 0x21, 0x02, 0x70, 0x29, - 0x1c, 0x01, 0x1c, 0x05, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0xab, 0x88, 0xba, 0x68, 0x39, 0x1c, 0xa8, - 0xf0, 0x15, 0xfc, 0x5c, 0x88, 0xb8, 0x30, 0x04, - 0xe0, 0x3a, 0x70, 0x2a, 0x1c, 0x0d, 0x21, 0x07, - 0x70, 0x29, 0x1c, 0x05, 0x79, 0x38, 0x70, 0x28, - 0x9d, 0x00, 0x22, 0x04, 0x1c, 0x28, 0x1c, 0x39, - 0xf0, 0x15, 0xfc, 0x4c, 0x1c, 0x20, 0x1d, 0x29, - 0xf0, 0x00, 0xf8, 0x92, 0x20, 0x09, 0xe0, 0x27, - 0x70, 0x2a, 0x1c, 0x0d, 0x21, 0x02, 0x70, 0x29, - 0x1c, 0x01, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x88, - 0x20, 0x04, 0xe0, 0x1d, 0x70, 0x2a, 0x1c, 0x0d, - 0x21, 0x03, 0x70, 0x29, 0x1c, 0x05, 0x78, 0xb8, - 0x70, 0x28, 0x99, 0x00, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x7b, 0x20, 0x05, 0xe0, 0x10, 0x70, 0x2a, - 0x1c, 0x0d, 0x21, 0x06, 0x70, 0x29, 0x22, 0x04, - 0x1c, 0x39, 0x1c, 0x05, 0xf0, 0x15, 0xfc, 0x26, - 0x1c, 0x20, 0x1d, 0x29, 0xf0, 0x00, 0xf8, 0x6c, - 0x20, 0x08, 0xe0, 0x01, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x1c, 0x0f, 0x78, 0x01, 0x9d, 0x05, - 0x70, 0x11, 0x78, 0x41, 0x78, 0x12, 0x1c, 0x86, - 0x30, 0x03, 0x3a, 0x90, 0x1c, 0x1c, 0x2a, 0x07, - 0xd2, 0x51, 0xa3, 0x02, 0x5c, 0x9b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x11, 0x4d, 0x4d, - 0x1b, 0x2e, 0x39, 0x00, 0x29, 0x02, 0xd1, 0x3d, - 0x1c, 0x30, 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x4e, - 0x1c, 0xb0, 0x60, 0x28, 0x1f, 0x38, 0x80, 0xa8, - 0x88, 0x20, 0x80, 0xe8, 0xe0, 0x37, 0x29, 0x04, - 0xd1, 0x30, 0x22, 0x04, 0x1c, 0x68, 0x1c, 0x31, - 0xf0, 0x15, 0xfb, 0xf0, 0x2f, 0x06, 0xd0, 0x2e, - 0xe0, 0x28, 0x29, 0x07, 0xd1, 0x26, 0x78, 0x31, - 0x71, 0x29, 0x1c, 0x01, 0x1c, 0x06, 0x22, 0x04, - 0x1c, 0x28, 0xf0, 0x15, 0xfb, 0xe3, 0x1d, 0x30, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x2f, 0x88, 0x20, - 0x80, 0xe8, 0x2f, 0x09, 0xd0, 0x1b, 0xe0, 0x15, - 0x29, 0x02, 0xd1, 0x13, 0x1c, 0x30, 0x1c, 0x21, - 0xf0, 0x00, 0xf8, 0x24, 0x88, 0x20, 0x80, 0x28, - 0x2f, 0x04, 0xd0, 0x10, 0xe0, 0x0a, 0x29, 0x03, - 0xd1, 0x08, 0x78, 0x31, 0x70, 0xa9, 0x1c, 0x21, - 0xf0, 0x00, 0xf8, 0x18, 0x88, 0x20, 0x80, 0x28, - 0x2f, 0x05, 0xd0, 0x04, 0x20, 0x01, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x06, 0x00, 0x0e, 0x00, 0x0a, 0x02, 0x70, 0x0a, - 0x70, 0x48, 0x47, 0x70, 0x78, 0x02, 0x02, 0x12, - 0x78, 0x40, 0x18, 0x10, 0x80, 0x08, 0x47, 0x70, - 0xb5, 0x00, 0x78, 0x01, 0x48, 0x0b, 0x71, 0x01, - 0x79, 0x00, 0x28, 0x01, 0xd0, 0x01, 0x28, 0x02, - 0xd1, 0x0b, 0x48, 0x09, 0xca, 0x08, 0xc0, 0x08, - 0xca, 0x08, 0xc0, 0x08, 0xca, 0x0c, 0xc0, 0x0c, - 0xf0, 0x00, 0xf8, 0x37, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x80, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0x80, 0x20, 0x04, - 0xf0, 0x02, 0xfc, 0xa4, 0x22, 0x00, 0x28, 0x00, - 0xda, 0x03, 0x1c, 0x10, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x0a, 0x71, 0x02, 0x21, 0x00, - 0x20, 0x01, 0x4b, 0x09, 0x01, 0x0f, 0x55, 0xd8, - 0x31, 0x01, 0x29, 0x20, 0xdb, 0xfa, 0x21, 0x00, - 0x4b, 0x06, 0x00, 0x4f, 0x53, 0xda, 0x31, 0x01, - 0x29, 0x10, 0xdb, 0xfa, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x56, 0xa0, - 0xb5, 0x00, 0xf0, 0x02, 0xfb, 0x3b, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x80, 0x20, 0x00, 0x49, 0x1e, - 0x79, 0x0a, 0x49, 0x1e, 0x2a, 0x01, 0xd1, 0x26, - 0x78, 0x4a, 0x2a, 0x43, 0xd0, 0x1d, 0xdc, 0x09, - 0x2a, 0x31, 0xd0, 0x14, 0x2a, 0x33, 0xd0, 0x15, - 0x2a, 0x34, 0xd1, 0x25, 0x68, 0x8f, 0xf0, 0x00, - 0xf8, 0x2f, 0xe0, 0x21, 0x2a, 0x45, 0xd0, 0x06, - 0x2a, 0x46, 0xd0, 0x11, 0x2a, 0x48, 0xd1, 0x1b, - 0xf0, 0x00, 0xf8, 0xcc, 0xe0, 0x18, 0x68, 0x8f, - 0xf0, 0x00, 0xf8, 0x6a, 0xe0, 0x14, 0xf0, 0x00, - 0xf8, 0x8b, 0xe0, 0x11, 0xf0, 0x00, 0xf8, 0x92, - 0xe0, 0x0e, 0xf0, 0x00, 0xf8, 0xc9, 0xe0, 0x0b, - 0xf0, 0x00, 0xf8, 0xf0, 0xe0, 0x08, 0x88, 0x08, - 0x28, 0x70, 0xdb, 0x04, 0x28, 0x80, 0xda, 0x02, - 0xf0, 0x00, 0xf9, 0x0c, 0xe0, 0x00, 0x20, 0x01, - 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x02, - 0xfc, 0x2b, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x80, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x90, 0xb0, 0x85, 0xaa, 0x01, 0xb4, 0x04, - 0x4f, 0x1f, 0x89, 0xb9, 0x68, 0xb8, 0xaa, 0x05, - 0xab, 0x04, 0xf7, 0xff, 0xfe, 0xf9, 0x24, 0x00, - 0xb0, 0x01, 0x28, 0x00, 0xda, 0x01, 0x1c, 0x20, - 0xe0, 0x2d, 0xa8, 0x04, 0x78, 0x00, 0x28, 0x91, - 0xd0, 0x06, 0xa8, 0x03, 0x88, 0x00, 0xf0, 0x00, - 0xf9, 0x4f, 0x1c, 0x07, 0xd4, 0xf3, 0xe0, 0x10, - 0x79, 0x38, 0xab, 0x01, 0x70, 0x18, 0xa8, 0x01, - 0x78, 0x00, 0xf0, 0x00, 0xf8, 0xff, 0x28, 0x00, - 0xda, 0x06, 0x20, 0xf1, 0xab, 0x02, 0x70, 0x58, - 0xa8, 0x01, 0xf0, 0x00, 0xfe, 0x77, 0xe0, 0x12, - 0x1c, 0x07, 0x46, 0x6b, 0xa9, 0x04, 0x78, 0x09, - 0x1c, 0x38, 0xaa, 0x01, 0xf0, 0x00, 0xf9, 0xe2, - 0x28, 0x00, 0xd0, 0xd8, 0x01, 0x38, 0x49, 0x07, - 0x5c, 0x08, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x0c, 0x98, 0x00, 0xb0, 0x05, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0x90, 0xb0, 0x81, 0x4c, 0x0e, 0x88, 0xa0, - 0xf0, 0x00, 0xf9, 0x1a, 0x1c, 0x07, 0xd4, 0x07, - 0x78, 0x61, 0x46, 0x6b, 0x22, 0x00, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0xc0, 0x28, 0x00, 0xd1, 0x01, - 0x20, 0x00, 0x90, 0x00, 0x01, 0x38, 0x49, 0x07, - 0x5c, 0x08, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xe8, 0x98, 0x00, 0xb0, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0x00, 0x48, 0x03, 0x79, 0x00, 0xf0, 0x00, - 0xfd, 0xef, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0xf0, 0xb0, 0x83, - 0x4e, 0x14, 0x79, 0x30, 0xab, 0x00, 0x70, 0x18, - 0x27, 0x00, 0x4c, 0x13, 0x01, 0x3d, 0x5d, 0x60, - 0x28, 0x01, 0xd0, 0x13, 0x19, 0x29, 0x78, 0x4a, - 0x79, 0x30, 0x42, 0x82, 0xd0, 0x02, 0x79, 0x09, - 0x42, 0x81, 0xd1, 0x0b, 0x78, 0x71, 0x46, 0x6a, - 0x1c, 0x38, 0xab, 0x02, 0xf0, 0x00, 0xf9, 0x86, - 0x5d, 0x60, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xb4, 0x37, 0x01, 0x2f, 0x20, - 0xdb, 0xe4, 0xa8, 0x00, 0x78, 0x00, 0xf0, 0x00, - 0xfd, 0xd9, 0x98, 0x02, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x00, 0x48, 0x03, - 0x79, 0x00, 0xf0, 0x00, 0xfd, 0xe1, 0x20, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x90, 0xb0, 0x83, 0x4c, 0x11, 0x88, 0xa0, - 0xf0, 0x00, 0xf8, 0xb2, 0x1c, 0x07, 0xd5, 0x01, - 0x20, 0x01, 0xe0, 0x0c, 0x79, 0xa0, 0xab, 0x01, - 0x70, 0x18, 0x79, 0xe0, 0x70, 0x58, 0x78, 0x61, - 0x46, 0x6a, 0x1c, 0x38, 0x33, 0x04, 0xf0, 0x00, - 0xf9, 0x51, 0x28, 0x00, 0xd1, 0x00, 0x90, 0x02, - 0x01, 0x38, 0x49, 0x07, 0x5c, 0x08, 0x28, 0x02, - 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x7a, - 0x98, 0x02, 0xb0, 0x03, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x90, 0xb0, 0x81, - 0x4c, 0x0e, 0x88, 0xa0, 0xf0, 0x00, 0xf8, 0x88, - 0x1c, 0x07, 0xd5, 0x01, 0x20, 0x01, 0xe0, 0x07, - 0x78, 0x61, 0x46, 0x6b, 0x22, 0x00, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x2c, 0x28, 0x00, 0xd1, 0x00, - 0x90, 0x00, 0x01, 0x38, 0x49, 0x06, 0x5c, 0x08, - 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x55, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x80, 0xb0, 0x81, - 0x48, 0x0e, 0x88, 0x00, 0xf0, 0x00, 0xf8, 0x9e, - 0x1c, 0x07, 0xd5, 0x01, 0x20, 0x01, 0xe0, 0x11, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xd3, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x70, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0x05, 0x01, 0x38, 0x49, 0x06, 0x5c, 0x08, - 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x31, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb4, 0xb0, 0x06, 0x02, - 0x0e, 0x12, 0x49, 0x10, 0x23, 0x00, 0x5e, 0xcc, - 0x43, 0xdf, 0x2c, 0x20, 0xda, 0x17, 0x20, 0x00, - 0x4b, 0x0d, 0x01, 0x05, 0x5d, 0x5d, 0x2d, 0x01, - 0xd1, 0x0e, 0x25, 0x02, 0x01, 0x07, 0x55, 0xdd, - 0x18, 0xfb, 0x70, 0x5a, 0x1c, 0x42, 0x80, 0x5a, - 0x22, 0x00, 0x71, 0x1a, 0x80, 0xda, 0x81, 0x1a, - 0x1c, 0x62, 0x80, 0x0a, 0xbc, 0xb0, 0x47, 0x70, - 0x30, 0x01, 0x28, 0x20, 0xdb, 0xe9, 0x1c, 0x38, - 0xbc, 0xb0, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0x80, - 0x2e, 0x08, 0x54, 0xa0, 0xb5, 0x80, 0x1c, 0x07, - 0xd5, 0x06, 0x2f, 0x20, 0xdb, 0x04, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x87, 0x21, 0x01, - 0x01, 0x38, 0x4a, 0x05, 0x54, 0x11, 0x48, 0x05, - 0x88, 0x01, 0x39, 0x01, 0x80, 0x01, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x1a, 0x80, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x09, 0x01, 0x03, 0x5c, 0xcf, 0x2f, 0x01, - 0xd0, 0x06, 0x18, 0x5b, 0x88, 0x5f, 0x42, 0x97, - 0xd0, 0x07, 0x88, 0xdb, 0x42, 0x93, 0xd0, 0x04, - 0x30, 0x01, 0x28, 0x20, 0xdb, 0xf1, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0xb4, 0x90, 0x04, 0x02, - 0x0c, 0x12, 0x06, 0x0b, 0x0e, 0x1b, 0x20, 0x00, - 0x49, 0x0b, 0x01, 0x07, 0x5d, 0xcc, 0x2c, 0x01, - 0xd0, 0x0b, 0x18, 0x7f, 0x88, 0x7f, 0x42, 0x97, - 0xd1, 0x07, 0x01, 0x02, 0x18, 0x51, 0x71, 0x0b, - 0x1d, 0xc2, 0x32, 0x1a, 0x80, 0xca, 0xbc, 0x90, - 0x47, 0x70, 0x30, 0x01, 0x28, 0x20, 0xdb, 0xec, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x54, 0xa0, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x07, 0x01, 0x03, - 0x5c, 0xcf, 0x2f, 0x01, 0xd0, 0x03, 0x18, 0x5b, - 0x89, 0x1b, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x20, 0xdb, 0xf4, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0x80, 0x04, 0x01, 0x0c, 0x09, 0x22, 0x00, - 0x20, 0x00, 0x4b, 0x0f, 0x00, 0x47, 0x5b, 0xdf, - 0x2f, 0x00, 0xd1, 0x06, 0x1d, 0xc2, 0x32, 0x69, - 0x04, 0x12, 0x0c, 0x12, 0x00, 0x40, 0x52, 0x1a, - 0xe0, 0x02, 0x30, 0x01, 0x28, 0x10, 0xdd, 0xf1, - 0x2a, 0x00, 0xd0, 0x09, 0x20, 0x01, 0x04, 0x80, - 0x43, 0x10, 0xf0, 0x02, 0xf9, 0xdf, 0x04, 0x00, - 0x0c, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xa0, 0xb5, 0x90, 0x1c, 0x07, - 0x01, 0x00, 0x49, 0x0e, 0x18, 0x44, 0x89, 0x20, - 0x28, 0x00, 0xd0, 0x13, 0xf0, 0x02, 0xfa, 0x02, - 0x20, 0x00, 0x49, 0x0b, 0x01, 0x3a, 0x4b, 0x09, - 0x18, 0xd2, 0x89, 0x13, 0x22, 0x00, 0x00, 0x47, - 0x5b, 0xcf, 0x42, 0x9f, 0xd1, 0x02, 0x00, 0x40, - 0x52, 0x0a, 0xe0, 0x02, 0x30, 0x01, 0x28, 0x10, - 0xdd, 0xf5, 0x81, 0x22, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0xa0, - 0x2e, 0x08, 0x56, 0xa0, 0xb5, 0x00, 0x49, 0x03, - 0x78, 0x08, 0xf0, 0x02, 0xf9, 0x41, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x02, - 0xf9, 0x37, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x90, 0xb5, 0x90, 0x06, 0x09, - 0x0e, 0x09, 0x1c, 0x1f, 0x01, 0x03, 0x4c, 0x1d, - 0x5c, 0xe3, 0x1e, 0x9c, 0x2c, 0x07, 0xd2, 0x31, - 0xa3, 0x01, 0x5d, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x09, 0x15, 0x03, 0x0f, 0x1b, 0x21, 0x27, 0x00, - 0x1c, 0x3b, 0xf0, 0x00, 0xf9, 0x23, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3b, 0xf0, 0x00, - 0xf8, 0x27, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xf8, 0x5d, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3b, 0xf0, 0x00, - 0xfa, 0x51, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xfb, 0x65, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x3b, 0xf0, 0x00, - 0xfa, 0xf1, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x3b, 0xf0, 0x00, 0xfb, 0x35, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x1f, - 0x23, 0x01, 0x60, 0x3b, 0xb0, 0x81, 0x29, 0x91, - 0xd1, 0x23, 0x21, 0x45, 0x4b, 0x16, 0x70, 0x19, - 0x21, 0x42, 0x70, 0x59, 0x21, 0x08, 0x80, 0x59, - 0x01, 0x06, 0x4d, 0x14, 0x19, 0x74, 0x78, 0x60, - 0x71, 0x18, 0x88, 0x60, 0x80, 0xd8, 0x1c, 0x51, - 0x91, 0x00, 0x22, 0x04, 0x1d, 0xd8, 0x30, 0x01, - 0xf0, 0x15, 0xf8, 0xa8, 0xf7, 0xff, 0xff, 0x8a, - 0x28, 0x00, 0xd1, 0x01, 0x60, 0x38, 0xe0, 0x0f, - 0x22, 0x04, 0x99, 0x00, 0x1d, 0xe0, 0x30, 0x03, - 0xf0, 0x15, 0xf8, 0x9c, 0x20, 0x05, 0x55, 0xa8, - 0xe0, 0x03, 0x29, 0x7f, 0xdc, 0x01, 0x29, 0x45, - 0xd1, 0x01, 0x20, 0x00, 0x60, 0x38, 0x20, 0x01, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xff, 0x1c, 0x04, 0x06, 0x08, 0x0e, 0x00, - 0x21, 0x01, 0xb0, 0x84, 0x9b, 0x07, 0x25, 0x01, - 0x60, 0x19, 0x4e, 0x55, 0x01, 0x21, 0x91, 0x03, - 0x28, 0x33, 0xd0, 0x5d, 0x28, 0x43, 0xd1, 0x5c, - 0x20, 0x09, 0xf0, 0x02, 0xf9, 0x57, 0x4f, 0x51, - 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x94, 0x9a, 0x06, 0x79, 0x51, 0x01, 0x20, - 0x4a, 0x4b, 0x18, 0x84, 0x1d, 0xe0, 0x30, 0x03, - 0x90, 0x02, 0x29, 0x00, 0xd0, 0x4a, 0x88, 0x60, - 0xf7, 0xff, 0xfe, 0xc8, 0x28, 0x00, 0xda, 0x20, - 0x20, 0xf1, 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, - 0x22, 0x04, 0x99, 0x02, 0xf0, 0x15, 0xf8, 0x5a, - 0x20, 0x43, 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, - 0x20, 0x0c, 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, - 0x88, 0x61, 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, - 0xf7, 0xff, 0xfb, 0xca, 0x81, 0xb8, 0xf7, 0xff, - 0xff, 0x2d, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x00, - 0x9b, 0x07, 0x60, 0x18, 0xe0, 0x55, 0x20, 0x02, - 0xe0, 0x1e, 0x46, 0x68, 0x22, 0x04, 0x99, 0x02, - 0xf0, 0x15, 0xf8, 0x3c, 0x20, 0x43, 0x70, 0x38, - 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, 0x80, 0x78, - 0x9a, 0x06, 0x79, 0x50, 0x71, 0x38, 0x88, 0xe1, - 0x46, 0x6a, 0x20, 0x93, 0x68, 0xbb, 0xf7, 0xff, - 0xfb, 0xab, 0x81, 0xb8, 0xf7, 0xff, 0xff, 0x0e, - 0x28, 0x00, 0xd0, 0xe0, 0x20, 0x7d, 0x00, 0xc0, - 0xf7, 0xff, 0xfe, 0xbe, 0x81, 0x20, 0x20, 0x03, - 0x99, 0x03, 0x54, 0x70, 0x25, 0x01, 0xe0, 0x40, - 0xe0, 0x34, 0xe0, 0x37, 0x9a, 0x06, 0x79, 0x10, - 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, 0x22, 0x04, - 0x99, 0x02, 0xf0, 0x15, 0xf8, 0x13, 0x20, 0x43, - 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, - 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, 0x88, 0x61, - 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xff, - 0xfb, 0x83, 0x81, 0xb8, 0xf7, 0xff, 0xfe, 0xe6, - 0x28, 0x00, 0xd0, 0xb8, 0x9a, 0x06, 0x79, 0x10, - 0x28, 0x00, 0xd1, 0x13, 0x21, 0x45, 0x48, 0x14, - 0x70, 0x01, 0x21, 0x44, 0x70, 0x41, 0x27, 0x04, - 0x80, 0x47, 0x78, 0x61, 0x71, 0x81, 0x88, 0x61, - 0x80, 0x81, 0xf7, 0xff, 0xfe, 0xdd, 0x28, 0x00, - 0xd1, 0x01, 0x25, 0x00, 0xe0, 0x0d, 0x99, 0x03, - 0x54, 0x77, 0xe0, 0x0a, 0x20, 0x02, 0x99, 0x03, - 0x54, 0x70, 0xe0, 0x06, 0x28, 0x7f, 0xdc, 0x01, - 0x28, 0x45, 0xd1, 0x02, 0x20, 0x00, 0x9b, 0x07, - 0x60, 0x18, 0x1c, 0x28, 0xb0, 0x04, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0x90, 0xb5, 0xff, 0x06, 0x09, - 0x0e, 0x09, 0x22, 0x01, 0xb0, 0x83, 0x9b, 0x06, - 0x01, 0x00, 0x60, 0x1a, 0x90, 0x02, 0x4e, 0x98, - 0x19, 0x84, 0x4f, 0x98, 0x4d, 0x98, 0x29, 0x46, - 0xd0, 0x5d, 0xdc, 0x0e, 0x29, 0x33, 0xd0, 0x5b, - 0x29, 0x45, 0xd1, 0x5a, 0x89, 0xb8, 0x30, 0x04, - 0x04, 0x00, 0x0c, 0x00, 0xf0, 0x02, 0xf8, 0x96, - 0x60, 0xa8, 0x28, 0x00, 0xd1, 0x33, 0x20, 0x00, - 0xe0, 0xcf, 0x29, 0x90, 0xd0, 0x52, 0x29, 0x95, - 0xd1, 0x4b, 0x88, 0xe0, 0x28, 0x00, 0xd1, 0x6c, - 0x22, 0x05, 0x21, 0x04, 0x68, 0xb8, 0xf0, 0x02, - 0xf8, 0x8a, 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xee, - 0x21, 0x00, 0xab, 0x00, 0x70, 0x99, 0x22, 0x43, - 0x70, 0x3a, 0x22, 0x34, 0x70, 0x7a, 0x21, 0x0c, - 0x80, 0x79, 0x78, 0x61, 0x71, 0x39, 0x88, 0x61, - 0x46, 0x6a, 0x1c, 0x03, 0x20, 0x96, 0xf7, 0xff, - 0xfb, 0x0f, 0x81, 0xb8, 0xf7, 0xff, 0xfe, 0x72, - 0x28, 0x00, 0xd0, 0xd8, 0x20, 0x45, 0x70, 0x28, - 0x20, 0x47, 0x70, 0x68, 0x20, 0x04, 0x80, 0x68, - 0x88, 0x60, 0x80, 0xa8, 0x21, 0x00, 0x71, 0xa9, - 0xf7, 0xff, 0xfe, 0x6e, 0xe0, 0xb0, 0x68, 0xb9, - 0x91, 0x00, 0x89, 0xb9, 0xab, 0x01, 0x80, 0x19, - 0x22, 0x43, 0x70, 0x2a, 0x22, 0x34, 0x70, 0x6a, - 0x21, 0x0c, 0x80, 0x69, 0x78, 0x61, 0x71, 0x29, - 0x88, 0x61, 0x46, 0x6a, 0x1c, 0x03, 0x20, 0x90, - 0xf7, 0xff, 0xfa, 0xea, 0x81, 0xa8, 0xf7, 0xff, - 0xfe, 0x57, 0x28, 0x00, 0xd1, 0x06, 0x68, 0xa8, - 0xf0, 0x02, 0xf8, 0x6a, 0xe7, 0xaf, 0xe0, 0x61, - 0xe0, 0x8b, 0xe0, 0xc5, 0x20, 0x00, 0x9b, 0x06, - 0x60, 0x18, 0xe0, 0x61, 0x88, 0xe0, 0x28, 0x00, - 0xd1, 0x1c, 0x9a, 0x05, 0x88, 0x90, 0xf0, 0x02, - 0xf8, 0x35, 0x60, 0xa8, 0x1c, 0x01, 0xd0, 0x9e, - 0x20, 0x45, 0x70, 0x28, 0x70, 0x68, 0x22, 0x0c, - 0x80, 0x6a, 0x88, 0x60, 0x80, 0xa8, 0x9a, 0x05, - 0x88, 0x90, 0x81, 0xa8, 0x89, 0xaa, 0x1c, 0x08, - 0x99, 0x05, 0x68, 0x09, 0xf0, 0x14, 0xff, 0x42, - 0xf7, 0xff, 0xfe, 0x2e, 0x28, 0x00, 0xd1, 0xdd, - 0xe7, 0xd5, 0xe0, 0x16, 0x99, 0x05, 0x88, 0xc9, - 0x42, 0x81, 0xd1, 0x05, 0x78, 0x60, 0x71, 0x38, - 0x68, 0xb8, 0x1c, 0x81, 0x88, 0x60, 0xe0, 0x03, - 0x79, 0x21, 0x71, 0x39, 0x68, 0xb9, 0x31, 0x02, - 0xf7, 0xff, 0xfb, 0x76, 0x22, 0x43, 0x70, 0x3a, - 0xf7, 0xff, 0xfe, 0x0c, 0x28, 0x00, 0xd0, 0xc1, - 0xe0, 0x2a, 0x22, 0x43, 0x70, 0x3a, 0x22, 0x34, - 0x70, 0x7a, 0x21, 0x0c, 0x80, 0x79, 0x9a, 0x05, - 0x88, 0x11, 0x42, 0x88, 0xd1, 0x0f, 0x78, 0x60, - 0x71, 0x38, 0x68, 0xb8, 0x1c, 0x81, 0x88, 0x60, - 0xf7, 0xff, 0xfb, 0x5e, 0x88, 0xe1, 0x79, 0x20, - 0x88, 0x62, 0x80, 0xe2, 0x78, 0x62, 0x71, 0x22, - 0x80, 0x61, 0x70, 0x60, 0xe0, 0x05, 0x79, 0x21, - 0x71, 0x39, 0x68, 0xb9, 0x31, 0x02, 0xf7, 0xff, - 0xfb, 0x4f, 0xf7, 0xff, 0xfd, 0xe7, 0x28, 0x00, - 0xd0, 0x9c, 0xe0, 0x23, 0x20, 0x04, 0xf0, 0x01, - 0xff, 0xdd, 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, - 0x20, 0x01, 0xe0, 0x16, 0x25, 0x00, 0xab, 0x00, - 0x70, 0x9d, 0x22, 0x43, 0x70, 0x3a, 0x22, 0x34, - 0x70, 0x7a, 0x21, 0x0c, 0x80, 0x79, 0x78, 0x61, - 0x71, 0x39, 0x88, 0x61, 0x46, 0x6a, 0x1c, 0x03, - 0x20, 0x95, 0xf7, 0xff, 0xfa, 0x65, 0x81, 0xb8, - 0xf7, 0xff, 0xfd, 0xc8, 0x28, 0x00, 0xd1, 0x05, - 0x1c, 0x28, 0xb0, 0x03, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x7d, 0x00, 0xc0, - 0xf7, 0xff, 0xfd, 0x72, 0x81, 0x20, 0x20, 0x06, - 0xe0, 0x37, 0x88, 0xe0, 0x28, 0x00, 0xd0, 0x03, - 0x79, 0x20, 0x78, 0x61, 0x42, 0x88, 0xd1, 0x01, - 0x20, 0x02, 0xe0, 0x2e, 0x20, 0x04, 0xf0, 0x01, - 0xff, 0xa9, 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xcb, - 0x21, 0x00, 0xab, 0x00, 0x70, 0x99, 0x79, 0x21, - 0x9a, 0x05, 0x78, 0x12, 0x42, 0x91, 0xd1, 0x02, - 0x78, 0x61, 0x88, 0x63, 0xe0, 0x00, 0x88, 0xe3, - 0x22, 0x43, 0x70, 0x3a, 0x22, 0x34, 0x70, 0x7a, - 0x22, 0x0c, 0x80, 0x7a, 0x71, 0x39, 0x46, 0x6a, - 0x1c, 0x05, 0x20, 0x95, 0x1c, 0x19, 0x1c, 0x2b, - 0xf7, 0xff, 0xfa, 0x2a, 0x81, 0xb8, 0xf7, 0xff, - 0xfd, 0x8d, 0x28, 0x00, 0xd1, 0x03, 0x21, 0x00, - 0x9b, 0x06, 0x60, 0x18, 0xe6, 0xef, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xff, 0xfd, 0x39, 0x81, 0x20, - 0x20, 0x08, 0x99, 0x02, 0x54, 0x70, 0xe7, 0x9f, - 0x29, 0x7f, 0xdd, 0x9d, 0xe7, 0x36, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0xa0, 0x2e, 0x08, 0x54, 0x80, - 0x2e, 0x08, 0x54, 0x90, 0xb5, 0xff, 0x06, 0x09, - 0x0e, 0x09, 0x22, 0x01, 0xb0, 0x83, 0x9b, 0x06, - 0x01, 0x05, 0x60, 0x1a, 0x4e, 0x4f, 0x19, 0xac, - 0x1d, 0xe2, 0x32, 0x03, 0x92, 0x02, 0x4f, 0x4e, - 0x29, 0x33, 0xd0, 0x61, 0x29, 0x70, 0xd0, 0x37, - 0x29, 0x94, 0xd1, 0x5e, 0xf7, 0xff, 0xfd, 0x3a, - 0x88, 0xe0, 0x99, 0x05, 0x88, 0xc9, 0x42, 0x88, - 0xd1, 0x06, 0x22, 0x04, 0x98, 0x02, 0x99, 0x05, - 0xf0, 0x14, 0xff, 0x2c, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x00, 0xe0, 0x2c, 0x99, 0x05, 0x79, 0x08, - 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, 0x22, 0x04, - 0x99, 0x02, 0xf0, 0x14, 0xfe, 0x63, 0x20, 0x43, - 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, - 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, 0x88, 0x61, - 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xff, - 0xf9, 0xd3, 0x81, 0xb8, 0xf7, 0xff, 0xfd, 0x36, - 0x28, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x9b, 0x06, - 0x60, 0x18, 0xe7, 0xdd, 0x99, 0x05, 0x79, 0x08, - 0x28, 0x00, 0xd1, 0x53, 0x20, 0x04, 0xe0, 0x52, - 0x20, 0x09, 0xf0, 0x01, 0xff, 0x23, 0x60, 0xb8, - 0x28, 0x00, 0xd1, 0x05, 0x20, 0x01, 0xb0, 0x03, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0xf1, 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, - 0x22, 0x04, 0x99, 0x02, 0xf0, 0x14, 0xfe, 0x32, - 0x20, 0x43, 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, - 0x20, 0x0c, 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, - 0x88, 0x61, 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, - 0xf7, 0xff, 0xf9, 0xa2, 0x81, 0xb8, 0xf7, 0xff, - 0xfd, 0x05, 0x28, 0x00, 0xd0, 0xb0, 0xe0, 0x29, - 0xe0, 0x00, 0xe0, 0x2a, 0x78, 0x60, 0x99, 0x05, - 0x78, 0x09, 0x42, 0x88, 0xd1, 0x01, 0x20, 0x07, - 0xe0, 0x21, 0x20, 0x09, 0xf0, 0x01, 0xfe, 0xf2, - 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xa0, 0x20, 0xf1, - 0xab, 0x01, 0x70, 0x18, 0x46, 0x68, 0x22, 0x04, - 0x99, 0x02, 0xf0, 0x14, 0xfe, 0x07, 0x20, 0x43, - 0x70, 0x38, 0x20, 0x34, 0x70, 0x78, 0x20, 0x0c, - 0x80, 0x78, 0x78, 0x60, 0x71, 0x38, 0x88, 0x61, - 0x46, 0x6a, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xff, - 0xf9, 0x77, 0x81, 0xb8, 0xf7, 0xff, 0xfc, 0xda, - 0x28, 0x00, 0xd0, 0xa3, 0x20, 0x02, 0x55, 0x70, - 0xe7, 0xb0, 0x29, 0x7f, 0xdc, 0x01, 0x29, 0x45, - 0xd1, 0xac, 0x20, 0x00, 0x9b, 0x06, 0x60, 0x18, - 0xe7, 0xa8, 0x00, 0x00, 0x2e, 0x08, 0x54, 0xa0, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0xf0, 0x06, 0x09, - 0x0e, 0x09, 0x1c, 0x04, 0x20, 0x01, 0x60, 0x18, - 0x1c, 0x17, 0xb0, 0x82, 0x29, 0x70, 0xd0, 0x28, - 0x29, 0x94, 0xd1, 0x2c, 0x1c, 0x20, 0xf7, 0xff, - 0xfc, 0x95, 0x79, 0x38, 0x28, 0x00, 0xd1, 0x2d, - 0x20, 0x43, 0x4f, 0x19, 0x70, 0x38, 0x20, 0x34, - 0x70, 0x78, 0x20, 0x0c, 0x80, 0x78, 0x01, 0x25, - 0x4e, 0x16, 0x19, 0xac, 0x79, 0x20, 0x71, 0x38, - 0x88, 0xe1, 0x46, 0x6a, 0x20, 0x95, 0x68, 0xbb, - 0xf7, 0xff, 0xf9, 0x3e, 0x81, 0xb8, 0xf7, 0xff, - 0xfc, 0xa1, 0x28, 0x00, 0xd1, 0x01, 0x25, 0x00, - 0xe0, 0x14, 0x20, 0x7d, 0x00, 0xc0, 0xf7, 0xff, - 0xfc, 0x4f, 0x81, 0x20, 0x20, 0x08, 0x55, 0x70, - 0xe0, 0x0b, 0x1c, 0x20, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0x1d, 0x1c, 0x05, 0xe0, 0x06, 0x29, 0x7f, - 0xdc, 0x01, 0x29, 0x45, 0xd1, 0x01, 0x20, 0x00, - 0x60, 0x18, 0x25, 0x01, 0x1c, 0x28, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x22, 0x01, - 0x26, 0x02, 0x01, 0x05, 0x60, 0x1a, 0x1c, 0x1f, - 0x4c, 0x0c, 0x29, 0x33, 0xd0, 0x08, 0x29, 0x70, - 0xd0, 0x08, 0x29, 0x96, 0xd1, 0x08, 0xf7, 0xff, - 0xfc, 0x49, 0x20, 0x00, 0x60, 0x38, 0xe0, 0x01, - 0xf7, 0xff, 0xfc, 0x44, 0x55, 0x66, 0xe0, 0x05, - 0x29, 0x7f, 0xdc, 0x01, 0x29, 0x45, 0xd1, 0x01, - 0x20, 0x00, 0x60, 0x38, 0x20, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0xa0, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0xb0, 0x81, - 0x91, 0x00, 0x21, 0x01, 0xb0, 0x83, 0x9b, 0x07, - 0x60, 0x19, 0x91, 0x02, 0x01, 0x05, 0x99, 0x03, - 0x4e, 0x52, 0x19, 0xac, 0x4f, 0x52, 0x29, 0x33, - 0xd0, 0x4f, 0x29, 0x70, 0xd0, 0x06, 0x29, 0x96, - 0xd1, 0x5d, 0xf7, 0xff, 0xfc, 0x1f, 0x20, 0x00, - 0x9b, 0x07, 0x60, 0x18, 0x88, 0xe0, 0x28, 0x00, - 0xd1, 0x0f, 0x20, 0x45, 0x70, 0x38, 0x20, 0x47, - 0x70, 0x78, 0x20, 0x04, 0x80, 0x78, 0x88, 0x60, - 0x80, 0xb8, 0x20, 0x00, 0x71, 0xb8, 0xf7, 0xff, - 0xfc, 0x31, 0x28, 0x00, 0xd0, 0x75, 0x20, 0x02, - 0xe0, 0x51, 0x20, 0x05, 0xf0, 0x01, 0xfe, 0x26, - 0x4f, 0x42, 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, - 0x20, 0x01, 0xe0, 0x76, 0x21, 0x43, 0x70, 0x39, - 0x21, 0x34, 0x70, 0x79, 0x21, 0x0c, 0x80, 0x79, - 0x99, 0x03, 0x29, 0x70, 0xd1, 0x03, 0x21, 0x00, - 0xab, 0x00, 0x70, 0x99, 0xe0, 0x08, 0x9a, 0x06, - 0x78, 0x91, 0xab, 0x00, 0x70, 0x99, 0x88, 0xe1, - 0x9a, 0x06, 0x88, 0x12, 0x42, 0x91, 0xd1, 0x04, - 0x78, 0x61, 0x71, 0x39, 0x88, 0x61, 0x1c, 0x03, - 0xe0, 0x02, 0x79, 0x22, 0x71, 0x3a, 0x1c, 0x03, - 0x46, 0x6a, 0x20, 0x96, 0xf7, 0xff, 0xf8, 0x9c, - 0x81, 0xb8, 0xf7, 0xff, 0xfc, 0x09, 0x28, 0x00, - 0xd1, 0xcd, 0x68, 0xb8, 0xf0, 0x01, 0xfe, 0x1c, - 0xe7, 0xd2, 0x88, 0xe0, 0x28, 0x00, 0xd1, 0x0f, - 0x20, 0x45, 0x70, 0x38, 0x20, 0x47, 0x70, 0x78, - 0x20, 0x04, 0x80, 0x78, 0x88, 0x60, 0x80, 0xb8, - 0x20, 0x00, 0x71, 0xb8, 0xf7, 0xff, 0xfb, 0xea, - 0x28, 0x00, 0xd1, 0xb8, 0xe0, 0x38, 0xe0, 0x2e, - 0x78, 0x60, 0x79, 0x21, 0x42, 0x88, 0xd1, 0x02, - 0x20, 0x02, 0x55, 0x70, 0xe7, 0xb8, 0x79, 0x39, - 0x42, 0x81, 0xd1, 0x02, 0x20, 0x08, 0x55, 0x70, - 0xe0, 0x2a, 0x20, 0x05, 0xf0, 0x01, 0xfd, 0xd2, - 0x60, 0xb8, 0x28, 0x00, 0xd0, 0xac, 0x21, 0x00, - 0xab, 0x00, 0x70, 0x99, 0x21, 0x43, 0x70, 0x39, - 0x21, 0x34, 0x70, 0x79, 0x21, 0x0c, 0x80, 0x79, - 0x78, 0x61, 0x71, 0x39, 0x88, 0x61, 0x46, 0x6a, - 0x1c, 0x03, 0x20, 0x96, 0xf7, 0xff, 0xf8, 0x5c, - 0x81, 0xb8, 0xf7, 0xff, 0xfb, 0xbf, 0x28, 0x00, - 0xd1, 0x8d, 0x68, 0xb8, 0xf0, 0x01, 0xfd, 0xdc, - 0xe0, 0x00, 0xe0, 0x09, 0xe7, 0x87, 0x99, 0x03, - 0x29, 0x7f, 0xdc, 0x02, 0x99, 0x03, 0x29, 0x45, - 0xd1, 0x02, 0x20, 0x00, 0x9b, 0x07, 0x60, 0x18, - 0x98, 0x02, 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0xa0, - 0x2e, 0x08, 0x54, 0x80, 0x2e, 0x08, 0x54, 0x90, - 0xb5, 0x00, 0x06, 0x01, 0x0e, 0x09, 0x22, 0x45, - 0x48, 0x07, 0x70, 0x02, 0x22, 0x41, 0x70, 0x42, - 0x22, 0x04, 0x80, 0x42, 0x71, 0x01, 0xf7, 0xff, - 0xfb, 0x95, 0x28, 0x00, 0xd1, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0x00, 0x06, 0x01, - 0x0e, 0x09, 0x22, 0x45, 0x48, 0x07, 0x70, 0x02, - 0x22, 0x49, 0x70, 0x42, 0x22, 0x04, 0x80, 0x42, - 0x71, 0x01, 0xf7, 0xff, 0xfb, 0x7f, 0x28, 0x00, - 0xd1, 0x01, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x54, 0x80, - 0xb5, 0x00, 0x06, 0x01, 0x0e, 0x09, 0x22, 0x43, - 0x48, 0x07, 0x70, 0x02, 0x22, 0x32, 0x70, 0x42, - 0x22, 0x04, 0x80, 0x42, 0x71, 0x01, 0xf7, 0xff, - 0xfb, 0x69, 0x28, 0x00, 0xd1, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0x80, 0x79, 0x41, - 0xb0, 0x82, 0xab, 0x01, 0x70, 0x19, 0x1c, 0x41, - 0x46, 0x68, 0x22, 0x04, 0xf0, 0x14, 0xfc, 0x72, - 0x20, 0x43, 0x4f, 0x0b, 0x70, 0x38, 0x20, 0x34, - 0x70, 0x78, 0x20, 0x0c, 0x80, 0x78, 0x46, 0x6a, - 0x21, 0x00, 0x20, 0x92, 0x68, 0xbb, 0xf7, 0xfe, - 0xff, 0xe3, 0x81, 0xb8, 0xf7, 0xff, 0xfb, 0x46, - 0x28, 0x00, 0xd1, 0x00, 0xe0, 0x00, 0x20, 0x01, - 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x54, 0x80, 0xb5, 0xf0, 0x00, 0xc6, - 0x18, 0x36, 0x01, 0x36, 0x1c, 0x07, 0xb0, 0x84, - 0x48, 0x0d, 0x90, 0x03, 0x18, 0x34, 0x68, 0xa0, - 0x28, 0x00, 0xd0, 0x0b, 0x46, 0x69, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x48, 0x1c, 0x05, 0x28, 0x34, - 0xd1, 0x02, 0x98, 0x01, 0xf0, 0x01, 0xfd, 0x48, - 0x2d, 0x00, 0xd1, 0xf3, 0x20, 0x00, 0x99, 0x03, - 0x51, 0x88, 0x60, 0x60, 0x60, 0xa0, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x57, 0xc0, 0xb4, 0xb0, 0x06, 0x0f, - 0x0e, 0x3f, 0x00, 0xc3, 0x18, 0x18, 0x01, 0x00, - 0x49, 0x15, 0x18, 0x41, 0x20, 0x00, 0x68, 0x8b, - 0x2b, 0x0a, 0xda, 0x23, 0x33, 0x01, 0x60, 0x8b, - 0x68, 0x4d, 0x19, 0x4c, 0x34, 0x80, 0x71, 0x27, - 0x2f, 0x34, 0xd1, 0x14, 0x78, 0x14, 0x68, 0x4d, - 0x00, 0x6b, 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xcb, - 0x73, 0x1c, 0x68, 0x54, 0x68, 0x4d, 0x00, 0x6b, - 0x19, 0x5b, 0x00, 0x9b, 0x18, 0xcb, 0x61, 0x1c, - 0x89, 0x17, 0x68, 0x4c, 0x00, 0x63, 0x19, 0x1b, - 0x00, 0x9b, 0x18, 0xca, 0x82, 0x97, 0x68, 0x4a, - 0x32, 0x01, 0x60, 0x4a, 0x2a, 0x0a, 0xdb, 0x00, - 0x60, 0x48, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x57, 0xc0, 0xb4, 0xf0, 0x00, 0xc7, - 0x18, 0x3f, 0x01, 0x3f, 0x4a, 0x16, 0x18, 0xbc, - 0x25, 0x00, 0x68, 0xa0, 0x28, 0x00, 0xdc, 0x02, - 0x1c, 0x28, 0xbc, 0xf0, 0x47, 0x70, 0x38, 0x01, - 0x60, 0xa0, 0x59, 0xd3, 0x18, 0xe0, 0x30, 0x80, - 0x79, 0x00, 0x28, 0x34, 0xd1, 0x14, 0x1c, 0x1e, - 0x00, 0x5b, 0x19, 0x9b, 0x00, 0x9b, 0x18, 0xe3, - 0x7b, 0x1b, 0x70, 0x0b, 0x59, 0xd6, 0x00, 0x73, - 0x19, 0x9b, 0x00, 0x9b, 0x18, 0xe3, 0x69, 0x1b, - 0x60, 0x4b, 0x59, 0xd6, 0x00, 0x73, 0x19, 0x9b, - 0x00, 0x9b, 0x18, 0xe3, 0x8a, 0x9b, 0x81, 0x0b, - 0x59, 0xd1, 0x31, 0x01, 0x51, 0xd1, 0x29, 0x0a, - 0xdb, 0xdb, 0x51, 0xd5, 0xbc, 0xf0, 0x47, 0x70, - 0x2e, 0x08, 0x57, 0xc0, 0xb5, 0x00, 0x78, 0x01, - 0x48, 0x0c, 0x70, 0x01, 0x78, 0x01, 0x29, 0x01, - 0xd0, 0x01, 0x29, 0x02, 0xd1, 0x0e, 0x48, 0x0a, - 0x29, 0x01, 0xd1, 0x04, 0xca, 0x0a, 0xc0, 0x0a, - 0xca, 0x0a, 0xc0, 0x0a, 0xe0, 0x01, 0x88, 0x11, - 0x80, 0x01, 0xf0, 0x00, 0xf8, 0x32, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x88, - 0x2e, 0x08, 0x56, 0xc0, 0xb5, 0x90, 0x27, 0x00, - 0x48, 0x0d, 0x70, 0x07, 0x80, 0x87, 0x20, 0x03, - 0xf0, 0x01, 0xfc, 0xc0, 0x28, 0x00, 0xda, 0x03, - 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x20, 0x01, 0x27, 0xff, 0x4a, 0x07, - 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, 0x18, 0x9c, - 0x70, 0xa0, 0x52, 0xd7, 0x31, 0x01, 0x29, 0x08, - 0xdb, 0xf6, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x88, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x00, 0xf0, 0x01, 0xfb, 0x5f, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xb0, 0x27, 0x00, 0x48, 0x1f, - 0x78, 0x00, 0x4c, 0x1f, 0x28, 0x01, 0xd1, 0x1c, - 0x78, 0x60, 0x28, 0x23, 0xd0, 0x0f, 0xdc, 0x06, - 0x28, 0x21, 0xd0, 0x10, 0x28, 0x22, 0xd1, 0x28, - 0xf0, 0x00, 0xf8, 0x62, 0xe0, 0x24, 0x28, 0x32, - 0xd0, 0x0c, 0x28, 0x34, 0xd1, 0x21, 0x68, 0xa5, - 0xf0, 0x00, 0xf8, 0xea, 0xe0, 0x1c, 0x68, 0xa5, - 0xf0, 0x00, 0xf8, 0x88, 0xe0, 0x18, 0xf0, 0x00, - 0xf8, 0x25, 0xe0, 0x15, 0xf0, 0x00, 0xf8, 0xf8, - 0xe0, 0x12, 0x28, 0x02, 0xd1, 0x11, 0x88, 0x20, - 0xf0, 0x01, 0xfc, 0x28, 0x88, 0x20, 0x28, 0x50, - 0xdd, 0x04, 0x28, 0x58, 0xdc, 0x02, 0xf0, 0x00, - 0xf9, 0x03, 0xe0, 0x05, 0x28, 0x60, 0xdd, 0x04, - 0x28, 0x68, 0xdc, 0x02, 0xf0, 0x00, 0xf9, 0x22, - 0x1c, 0x07, 0x2f, 0x00, 0xd1, 0x02, 0x1c, 0x28, - 0xf0, 0x01, 0xfc, 0x4e, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x88, - 0x2e, 0x08, 0x56, 0xc0, 0xb5, 0x90, 0x20, 0x01, - 0xb0, 0x81, 0x90, 0x00, 0xf0, 0x00, 0xf9, 0x2c, - 0x1c, 0x04, 0xd5, 0x01, 0x20, 0x01, 0xe0, 0x1a, - 0x4f, 0x0f, 0x88, 0xb8, 0x00, 0xe1, 0x1b, 0x09, - 0x00, 0x89, 0x4a, 0x0e, 0x52, 0x50, 0x78, 0x79, - 0x46, 0x6b, 0x22, 0x00, 0x1c, 0x20, 0xf0, 0x00, - 0xfb, 0x05, 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x20, - 0xf0, 0x00, 0xf9, 0x60, 0x20, 0x35, 0x70, 0x38, - 0x20, 0x4a, 0x70, 0x78, 0x20, 0x04, 0x80, 0x78, - 0xf0, 0x00, 0xf9, 0xee, 0x98, 0x00, 0xb0, 0x01, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xf0, 0x20, 0x01, 0xb0, 0x81, 0x90, 0x00, - 0x4c, 0x14, 0x88, 0xa6, 0x27, 0x00, 0x4d, 0x14, - 0x00, 0xf8, 0x1b, 0xc0, 0x00, 0x80, 0x19, 0x41, - 0x78, 0x89, 0x29, 0x01, 0xd0, 0x0d, 0x5a, 0x28, - 0x42, 0xb0, 0xd1, 0x0a, 0x78, 0x61, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0xd6, - 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf9, 0x31, 0x37, 0x01, 0x2f, 0x08, 0xdb, 0xe7, - 0x20, 0x35, 0x70, 0x20, 0x20, 0x4b, 0x70, 0x60, - 0x20, 0x04, 0x80, 0x60, 0xf0, 0x00, 0xf9, 0xbc, - 0x98, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0xf0, 0x20, 0x00, - 0xb0, 0x87, 0x90, 0x00, 0x48, 0x2a, 0x89, 0x87, - 0x68, 0x85, 0x79, 0x80, 0x90, 0x05, 0x24, 0x00, - 0xaa, 0x03, 0xb4, 0x04, 0x04, 0x39, 0x0c, 0x09, - 0x9a, 0x06, 0x1c, 0x28, 0xab, 0x07, 0xf0, 0x00, - 0xfa, 0x21, 0xb0, 0x01, 0x90, 0x01, 0x28, 0x00, - 0xdb, 0x04, 0x98, 0x05, 0xf0, 0x00, 0xf9, 0x2c, - 0x1c, 0x06, 0xd5, 0x01, 0x20, 0x00, 0xe0, 0x36, - 0x98, 0x00, 0x30, 0x01, 0x90, 0x00, 0x98, 0x01, - 0x18, 0x2d, 0x1a, 0x3f, 0x2f, 0x00, 0xdd, 0x0b, - 0x04, 0x38, 0x0c, 0x00, 0xf0, 0x01, 0xfb, 0x96, - 0x1c, 0x04, 0xd0, 0xef, 0x1c, 0x20, 0x1c, 0x29, - 0x1c, 0x3a, 0xf0, 0x14, 0xfa, 0xaf, 0x1c, 0x25, - 0xa9, 0x06, 0x78, 0x09, 0x1c, 0x30, 0xaa, 0x03, - 0xab, 0x02, 0xf0, 0x00, 0xfa, 0x83, 0x28, 0x00, - 0xd0, 0xe0, 0x98, 0x00, 0x28, 0x02, 0xda, 0x01, - 0x2f, 0x00, 0xdc, 0xc9, 0x2c, 0x00, 0xd0, 0x02, - 0x1c, 0x20, 0xf0, 0x01, 0xfb, 0xa1, 0x2f, 0x00, - 0xd0, 0x01, 0x20, 0x00, 0x90, 0x02, 0x00, 0xf0, - 0x1b, 0x80, 0x00, 0x80, 0x49, 0x07, 0x18, 0x40, - 0x78, 0x80, 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x30, - 0xf0, 0x00, 0xf8, 0xc8, 0x98, 0x02, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x80, 0xb0, 0x81, 0x4f, 0x09, 0x79, 0x38, - 0xf0, 0x00, 0xf8, 0xe2, 0x28, 0x00, 0xdb, 0x06, - 0x78, 0x79, 0x46, 0x6b, 0x22, 0x00, 0xf0, 0x00, - 0xfa, 0x51, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x00, - 0x90, 0x00, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0x80, 0xb0, 0x81, 0x4f, 0x09, 0x79, 0x38, - 0xf0, 0x00, 0xf8, 0xca, 0x28, 0x00, 0xdb, 0x06, - 0x78, 0x79, 0x46, 0x6b, 0x22, 0x00, 0xf0, 0x00, - 0xfa, 0x39, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x00, - 0x90, 0x00, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0x90, 0xb0, 0x81, 0x48, 0x0f, 0x88, 0x00, - 0xf0, 0x00, 0xf8, 0xca, 0x1c, 0x07, 0xd5, 0x01, - 0x20, 0x01, 0xe0, 0x13, 0x20, 0x00, 0x00, 0xf9, - 0x1b, 0xc9, 0x00, 0x89, 0x4a, 0x0a, 0x18, 0x8c, - 0x80, 0xa0, 0x21, 0x50, 0x46, 0x6b, 0x22, 0x00, - 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0x17, 0x78, 0xa0, - 0x28, 0x02, 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x71, 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0x00, 0xb0, 0x81, - 0x48, 0x0b, 0x88, 0x00, 0xf0, 0x00, 0xf8, 0xbc, - 0x28, 0x00, 0xda, 0x01, 0x20, 0x01, 0xe0, 0x0c, - 0x21, 0x00, 0x00, 0xc2, 0x1a, 0x12, 0x00, 0x92, - 0x4b, 0x06, 0x18, 0xd2, 0x80, 0xd1, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x60, 0xf0, 0x00, 0xf9, 0xf2, - 0x98, 0x00, 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xf0, 0x4c, 0x22, 0x23, 0x04, 0x5e, 0xe1, - 0x1f, 0x58, 0x29, 0x08, 0xda, 0x35, 0x27, 0x00, - 0x4d, 0x1f, 0x00, 0xf9, 0x1b, 0xc9, 0x00, 0x89, - 0x19, 0x49, 0x78, 0x89, 0x29, 0x01, 0xd1, 0x2f, - 0x22, 0x00, 0x00, 0xd3, 0x1a, 0x9b, 0x00, 0x9b, - 0x19, 0x5b, 0x78, 0x9e, 0x2e, 0x01, 0xd0, 0x02, - 0x78, 0xdb, 0x42, 0x8b, 0xd0, 0x02, 0x32, 0x01, - 0x2a, 0x08, 0xdb, 0xf2, 0x2a, 0x08, 0xda, 0x04, - 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, 0x29, 0x09, - 0xdb, 0xea, 0x29, 0x09, 0xd0, 0x15, 0x00, 0xf8, - 0x1b, 0xc0, 0x00, 0x80, 0x19, 0x40, 0x70, 0xc1, - 0x21, 0x02, 0x70, 0x81, 0x21, 0x00, 0x80, 0x81, - 0x80, 0xc1, 0x82, 0x01, 0x60, 0xc1, 0x83, 0x01, - 0x61, 0x41, 0x76, 0x81, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0x7d, 0x88, 0xa0, 0x30, 0x01, 0x80, 0xa0, - 0x1c, 0x38, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x37, 0x01, 0x2f, 0x08, 0xdb, 0xc5, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x88, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0x90, 0x1c, 0x07, - 0xd5, 0x06, 0x2f, 0x08, 0xdb, 0x04, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x65, 0x00, 0xf8, - 0x1b, 0xc0, 0x00, 0x80, 0x49, 0x0a, 0x18, 0x44, - 0x88, 0xe0, 0x28, 0x00, 0xd0, 0x03, 0xf0, 0x01, - 0xfa, 0x79, 0x20, 0x00, 0x80, 0xe0, 0x1c, 0x38, - 0xf7, 0xff, 0xfd, 0x50, 0x20, 0x01, 0x70, 0xa0, - 0x48, 0x04, 0x88, 0x81, 0x39, 0x01, 0x80, 0x81, - 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x1a, 0x88, - 0xb4, 0x80, 0x06, 0x02, 0x0e, 0x12, 0x20, 0x00, - 0x49, 0x08, 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, - 0x18, 0x5b, 0x78, 0x9f, 0x2f, 0x01, 0xd0, 0x02, - 0x78, 0xdb, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf2, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x56, 0xe0, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x08, 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, - 0x18, 0x5b, 0x78, 0x9f, 0x2f, 0x01, 0xd0, 0x02, - 0x88, 0x9b, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf2, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x56, 0xe0, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x08, 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, - 0x18, 0x5b, 0x78, 0x9f, 0x2f, 0x01, 0xd0, 0x02, - 0x88, 0xdb, 0x42, 0x93, 0xd0, 0x04, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf2, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x80, 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, - 0x49, 0x05, 0x18, 0x47, 0x88, 0xb8, 0x28, 0x00, - 0xd0, 0x03, 0xf0, 0x01, 0xfa, 0x13, 0x20, 0x00, - 0x80, 0xb8, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0x80, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x49, 0x05, 0x18, 0x47, - 0x88, 0xf8, 0x28, 0x00, 0xd0, 0x03, 0xf0, 0x01, - 0xfa, 0x01, 0x20, 0x00, 0x80, 0xf8, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x00, 0x49, 0x03, 0x78, 0x08, 0xf0, 0x01, - 0xf9, 0x53, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xc0, 0xb5, 0x00, 0x49, 0x03, - 0x78, 0x08, 0xf0, 0x01, 0xf9, 0x49, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xd0, - 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, 0x49, 0x0a, - 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, 0x18, 0x5b, - 0x78, 0xdb, 0x42, 0x93, 0xd1, 0x06, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x5a, 0x08, 0x06, 0x00, - 0x0e, 0x00, 0x47, 0x70, 0x30, 0x01, 0x28, 0x08, - 0xdb, 0xee, 0x20, 0xff, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xe0, 0xb5, 0xf0, 0x06, 0x05, - 0x0e, 0x2d, 0x06, 0x0c, 0x0e, 0x24, 0x1c, 0x17, - 0x1c, 0x59, 0x1c, 0x1a, 0x1c, 0x4e, 0xb0, 0x81, - 0x2d, 0x86, 0xd0, 0x3b, 0xdc, 0x0b, 0x1f, 0xef, - 0x3f, 0x79, 0x2f, 0x06, 0xd2, 0x3c, 0xa3, 0x02, - 0x5d, 0xdb, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x3a, 0x32, 0x32, 0x32, 0x32, 0x32, 0x2d, 0xa0, - 0xd0, 0x15, 0xdc, 0x0d, 0x20, 0x02, 0x18, 0x1b, - 0x33, 0x01, 0x2d, 0x87, 0xd0, 0x01, 0x2d, 0x88, - 0xd1, 0x2a, 0x70, 0x15, 0x70, 0x08, 0x70, 0x34, - 0x78, 0x38, 0x70, 0x18, 0x20, 0x04, 0xe0, 0x25, - 0x2d, 0xa1, 0xd0, 0x04, 0x2d, 0xa2, 0xd1, 0x1f, - 0x20, 0xa0, 0x70, 0x10, 0xe0, 0x17, 0x70, 0x15, - 0x1c, 0x0d, 0x88, 0xb9, 0x46, 0x6a, 0x1c, 0x28, - 0xf0, 0x00, 0xf8, 0x5d, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x28, 0x70, 0x04, 0x88, 0xb9, 0x1e, 0x4a, - 0x68, 0x39, 0x30, 0x01, 0xf0, 0x14, 0xf8, 0xbe, - 0x88, 0xb8, 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, - 0x30, 0x01, 0xe0, 0x07, 0x70, 0x15, 0x20, 0x01, - 0x70, 0x08, 0x70, 0x34, 0x20, 0x03, 0xe0, 0x01, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x06, 0x16, - 0x0e, 0x36, 0x9d, 0x05, 0x1c, 0x04, 0x78, 0x00, - 0x70, 0x18, 0xb0, 0x82, 0x46, 0x6a, 0x34, 0x01, - 0x1c, 0x20, 0xa9, 0x01, 0x1c, 0x1f, 0xf0, 0x00, - 0xf8, 0x57, 0x21, 0x00, 0x43, 0xc9, 0x28, 0x00, - 0xdb, 0x06, 0xa8, 0x00, 0x88, 0x00, 0x18, 0x20, - 0x78, 0x02, 0x30, 0x01, 0x42, 0xb2, 0xd0, 0x01, - 0x1c, 0x08, 0xe0, 0x20, 0x78, 0x3a, 0x2a, 0x85, - 0xd0, 0x17, 0xdc, 0x06, 0x2a, 0x80, 0xd0, 0x10, - 0x2a, 0x83, 0xd0, 0x12, 0x2a, 0x84, 0xd1, 0xf3, - 0xe0, 0x0f, 0x2a, 0x86, 0xd0, 0x0d, 0x2a, 0xa0, - 0xd0, 0x01, 0x2a, 0xa1, 0xd1, 0xec, 0x60, 0x28, - 0xa8, 0x01, 0x88, 0x00, 0x38, 0x01, 0x80, 0xa8, - 0xe0, 0x03, 0x78, 0x00, 0x23, 0x80, 0x40, 0x18, - 0x70, 0x28, 0xa8, 0x01, 0x88, 0x00, 0xa9, 0x00, - 0x88, 0x09, 0x18, 0x40, 0x30, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x81, 0xab, 0x00, 0x80, 0x19, - 0x29, 0x7f, 0xdc, 0x05, 0xa9, 0x00, 0x88, 0x09, - 0x70, 0x01, 0x20, 0x01, 0x80, 0x10, 0xe0, 0x15, - 0xa9, 0x00, 0x88, 0x09, 0x29, 0xff, 0xdc, 0x07, - 0x21, 0x81, 0x70, 0x01, 0x21, 0x02, 0x80, 0x11, - 0xa9, 0x00, 0x88, 0x09, 0x70, 0x41, 0xe0, 0x09, - 0x21, 0x82, 0x70, 0x01, 0x21, 0x03, 0x80, 0x11, - 0xa9, 0x00, 0x78, 0x49, 0x70, 0x41, 0xa9, 0x00, - 0x78, 0x09, 0x70, 0x81, 0xb0, 0x01, 0x47, 0x70, - 0xb4, 0x90, 0x27, 0x01, 0x78, 0x04, 0x23, 0x80, - 0x40, 0x23, 0x2b, 0x80, 0xd1, 0x14, 0x06, 0x63, - 0x0e, 0x5b, 0x80, 0x13, 0x88, 0x13, 0x2b, 0x01, - 0xd1, 0x01, 0x78, 0x40, 0xe0, 0x05, 0x2b, 0x02, - 0xd1, 0x07, 0x78, 0x43, 0x02, 0x1b, 0x78, 0x80, - 0x18, 0x18, 0x80, 0x08, 0x88, 0x10, 0x30, 0x01, - 0xe0, 0x04, 0x27, 0x00, 0x43, 0xff, 0xe0, 0x02, - 0x80, 0x0c, 0x20, 0x01, 0x80, 0x10, 0x1c, 0x38, - 0xbc, 0x90, 0x47, 0x70, 0xb5, 0xf0, 0x1c, 0x07, - 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x18, 0x00, 0xfb, - 0x1b, 0xdb, 0x00, 0x9b, 0xb0, 0x82, 0x4c, 0x42, - 0x19, 0x1e, 0x78, 0xb3, 0x1e, 0x9c, 0x4b, 0x41, - 0x93, 0x01, 0x1d, 0x1d, 0x2c, 0x07, 0xd2, 0x63, - 0xa3, 0x01, 0x5d, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x60, 0x65, 0x03, 0x08, 0x40, 0x24, 0x6b, 0x00, - 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x80, - 0xe0, 0x66, 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xfa, 0x83, 0x1c, 0x04, 0x28, 0x01, 0xd1, 0x5a, - 0x78, 0xb0, 0x28, 0x04, 0xd1, 0x57, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfb, 0xf7, 0x1c, 0x01, - 0xd0, 0x59, 0x9b, 0x01, 0x68, 0x9d, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x68, - 0x1c, 0x04, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x46, - 0xe0, 0x36, 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xfc, 0x53, 0x1c, 0x04, 0x28, 0x01, 0xd1, 0x3e, - 0x78, 0xb0, 0x28, 0x04, 0xd1, 0x3b, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfb, 0xdb, 0x1c, 0x01, - 0xd0, 0x3d, 0x9b, 0x01, 0x68, 0x9d, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x4c, - 0x1c, 0x04, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x2a, - 0xe0, 0x1a, 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, - 0xfc, 0x03, 0x1c, 0x04, 0x28, 0x01, 0xd1, 0x22, - 0x78, 0xb0, 0x28, 0x04, 0xd1, 0x1f, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfb, 0xbf, 0x1c, 0x01, - 0xd0, 0x21, 0x9b, 0x01, 0x68, 0x9d, 0x46, 0x6b, - 0x22, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x30, - 0x1c, 0x04, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x0e, - 0x1c, 0x28, 0xf0, 0x01, 0xf8, 0xb5, 0xe0, 0x12, - 0xe0, 0x10, 0x1c, 0x02, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0x17, 0xe0, 0x09, 0x1c, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x62, 0xe0, 0x04, 0xe0, 0x06, - 0x1c, 0x03, 0x1c, 0x38, 0xf0, 0x00, 0xfd, 0x14, - 0x1c, 0x04, 0xe0, 0x00, 0x24, 0x00, 0x1c, 0x20, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0xf0, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x17, - 0x22, 0x01, 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, - 0xb0, 0x81, 0x60, 0x3a, 0x90, 0x00, 0x4e, 0x1f, - 0x19, 0x85, 0x29, 0x21, 0xd0, 0x02, 0x29, 0x80, - 0xd0, 0x2f, 0xe0, 0x06, 0x20, 0x03, 0xf0, 0x01, - 0xf8, 0x5d, 0x4c, 0x1b, 0x60, 0xa0, 0x1c, 0x01, - 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x2a, 0x20, 0x32, - 0x70, 0x20, 0x20, 0x23, 0x70, 0x60, 0x20, 0x0c, - 0x80, 0x60, 0x98, 0x00, 0x5a, 0x30, 0x80, 0xa0, - 0x78, 0xe8, 0x71, 0xa0, 0x1c, 0x0b, 0x79, 0xa1, - 0x22, 0x00, 0x20, 0x82, 0xf7, 0xff, 0xfe, 0x66, - 0x81, 0xa0, 0xf7, 0xff, 0xfe, 0x35, 0x28, 0x00, - 0xd1, 0x01, 0x60, 0x38, 0xe7, 0xe5, 0x78, 0xe8, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x09, 0xf0, 0x00, - 0xff, 0xe9, 0x80, 0xa8, 0x20, 0x03, 0x70, 0xa8, - 0xe0, 0x03, 0x7e, 0xa8, 0x28, 0x00, 0xd1, 0x00, - 0x60, 0x38, 0x20, 0x01, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0x2e, 0x08, 0x56, 0xc0, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x22, 0x01, - 0x60, 0x1a, 0x00, 0xc2, 0x1a, 0x12, 0x00, 0x92, - 0xb0, 0x81, 0x92, 0x00, 0x1c, 0x1f, 0x4e, 0x54, - 0x19, 0x95, 0x4c, 0x54, 0x29, 0x80, 0xd0, 0x35, - 0xdc, 0x04, 0x29, 0x22, 0xd0, 0x13, 0x29, 0x50, - 0xd1, 0x0d, 0xe0, 0x0e, 0x29, 0x83, 0xd0, 0x11, - 0x29, 0x84, 0xd1, 0x08, 0xf7, 0xff, 0xfd, 0xd4, - 0x20, 0x03, 0xf0, 0x01, 0xf8, 0x03, 0x4c, 0x4c, - 0x60, 0xa0, 0x1c, 0x01, 0xd1, 0x6d, 0x20, 0x00, - 0xe0, 0x89, 0x20, 0x02, 0xe0, 0x67, 0xf7, 0xff, - 0xfd, 0xc7, 0xe7, 0xfa, 0xf7, 0xff, 0xfd, 0xc4, - 0x20, 0x34, 0x70, 0x20, 0x20, 0x31, 0x70, 0x60, - 0x20, 0x04, 0x80, 0x60, 0x78, 0xe8, 0x71, 0x20, - 0xf7, 0xff, 0xfd, 0xde, 0x28, 0x00, 0xd1, 0x01, - 0x60, 0x38, 0xe0, 0x74, 0x78, 0xe8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x3c, 0xf0, 0x00, 0xff, 0x92, - 0x80, 0xa8, 0xe0, 0x65, 0xf7, 0xff, 0xfd, 0xa8, - 0x9a, 0x03, 0x78, 0x10, 0x28, 0x80, 0xd1, 0x21, - 0x20, 0x32, 0x70, 0x20, 0x20, 0x23, 0x70, 0x60, - 0x20, 0x0c, 0x80, 0x60, 0x9a, 0x00, 0x5a, 0xb0, - 0x80, 0xa0, 0x78, 0xe9, 0x71, 0xa1, 0x22, 0x00, - 0x20, 0x81, 0x68, 0xa3, 0xf7, 0xff, 0xfd, 0xe6, - 0x81, 0xa0, 0xf7, 0xff, 0xfd, 0xb5, 0x28, 0x00, - 0xd0, 0xc1, 0x78, 0xe8, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x28, 0xf0, 0x00, 0xff, 0x6b, 0x80, 0xa8, - 0x20, 0x07, 0xe0, 0x20, 0x20, 0x32, 0x70, 0x20, - 0x20, 0x23, 0x70, 0x60, 0x20, 0x0c, 0x80, 0x60, - 0x9a, 0x00, 0x5a, 0xb0, 0x80, 0xa0, 0x78, 0xe9, - 0x71, 0xa1, 0x22, 0x00, 0x20, 0xa2, 0x68, 0xa3, - 0xf7, 0xff, 0xfd, 0xc4, 0x81, 0xa0, 0xf7, 0xff, - 0xfd, 0x93, 0x28, 0x00, 0xd0, 0x0a, 0x78, 0xe8, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x17, 0xf0, 0x00, - 0xff, 0x49, 0x80, 0xa8, 0x20, 0x05, 0x70, 0xa8, - 0xe0, 0x1c, 0xe7, 0xff, 0x20, 0x32, 0x70, 0x20, - 0x20, 0x23, 0x70, 0x60, 0x20, 0x0c, 0x80, 0x60, - 0x9a, 0x00, 0x5a, 0xb0, 0x80, 0xa0, 0x78, 0xe8, - 0x71, 0xa0, 0x1c, 0x0b, 0x22, 0x00, 0x1c, 0x01, - 0x20, 0x85, 0xf7, 0xff, 0xfd, 0x9f, 0x81, 0xa0, - 0xf7, 0xff, 0xfd, 0x78, 0x28, 0x00, 0xd1, 0x01, - 0x60, 0x38, 0xe7, 0x78, 0x20, 0x02, 0x70, 0xa8, - 0x20, 0x00, 0x60, 0x38, 0x20, 0x01, 0xb0, 0x01, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xd0, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x1c, 0x07, 0x06, 0x08, 0x0e, 0x00, - 0x21, 0x01, 0xb0, 0x84, 0x9a, 0x07, 0x26, 0x01, - 0x60, 0x11, 0x00, 0xf9, 0x1b, 0xc9, 0x00, 0x89, - 0x91, 0x02, 0x4a, 0x78, 0x92, 0x03, 0x18, 0x8c, - 0x28, 0x22, 0xd0, 0x0d, 0x4d, 0x76, 0x28, 0x32, - 0xd0, 0x6f, 0x28, 0x34, 0xd0, 0x12, 0x28, 0x60, - 0xd1, 0x6c, 0x20, 0x03, 0xf0, 0x00, 0xff, 0x4a, - 0x60, 0xa8, 0x1c, 0x01, 0xd1, 0x67, 0xe0, 0x16, - 0x1c, 0x38, 0xf7, 0xff, 0xfd, 0x23, 0x1c, 0x38, - 0xf0, 0x00, 0xfc, 0x16, 0x1c, 0x06, 0xd0, 0x5f, - 0x20, 0x02, 0xe0, 0xcc, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0x19, 0x89, 0xa8, 0x30, 0x0a, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x00, 0xff, 0x33, 0x4f, 0x67, - 0x60, 0xb8, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x00, - 0xe0, 0xbf, 0x89, 0xa9, 0x22, 0x01, 0x02, 0x92, - 0x42, 0x91, 0xdc, 0x1e, 0x31, 0x01, 0xab, 0x01, - 0x80, 0x19, 0x68, 0xa9, 0x91, 0x00, 0x21, 0x32, - 0x70, 0x39, 0x21, 0x23, 0x70, 0x79, 0x21, 0x0c, - 0x80, 0x79, 0x99, 0x02, 0x9a, 0x03, 0x5a, 0x51, - 0x80, 0xb9, 0x78, 0xe1, 0x71, 0xb9, 0x46, 0x6a, - 0x1c, 0x03, 0x20, 0xa0, 0xf7, 0xff, 0xfd, 0x32, - 0x81, 0xb8, 0x20, 0x00, 0x82, 0x20, 0x21, 0x05, - 0x60, 0xe0, 0x70, 0xa1, 0x9a, 0x07, 0x60, 0x10, - 0xe0, 0x1f, 0xab, 0x01, 0x80, 0x1a, 0x68, 0xa9, - 0x91, 0x00, 0x21, 0x32, 0x70, 0x39, 0x21, 0x23, - 0x70, 0x79, 0x21, 0x0c, 0x80, 0x79, 0x99, 0x02, - 0x9a, 0x03, 0x5a, 0x51, 0x80, 0xb9, 0x78, 0xe1, - 0x71, 0xb9, 0x46, 0x6a, 0x1c, 0x03, 0x20, 0xa1, - 0xf7, 0xff, 0xfd, 0x14, 0x81, 0xb8, 0x68, 0xa8, - 0x60, 0xa0, 0x4b, 0x47, 0x18, 0xc0, 0x60, 0xe0, - 0x89, 0xa8, 0x1a, 0xc0, 0x82, 0x20, 0x20, 0x06, - 0x70, 0xa0, 0xf7, 0xff, 0xfc, 0xe3, 0x28, 0x00, - 0xd1, 0x07, 0x68, 0xb8, 0xf0, 0x00, 0xff, 0x08, - 0xe0, 0x2f, 0xe0, 0x0e, 0xe0, 0x63, 0xe0, 0x3a, - 0xe0, 0x6e, 0x78, 0xe0, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x3a, 0xf0, 0x00, 0xfe, 0x87, 0x80, 0xa0, - 0xe0, 0x62, 0x1c, 0x38, 0xf7, 0xff, 0xfc, 0xae, - 0x20, 0x03, 0xf0, 0x00, 0xfe, 0xcb, 0x60, 0xa8, - 0x1c, 0x01, 0xd0, 0x98, 0x20, 0x32, 0x70, 0x28, - 0x20, 0x23, 0x70, 0x68, 0x20, 0x0c, 0x80, 0x68, - 0x98, 0x02, 0x9a, 0x03, 0x5a, 0x10, 0x80, 0xa8, - 0x78, 0xe0, 0x71, 0xa8, 0x1c, 0x0b, 0x22, 0x00, - 0x1c, 0x01, 0x20, 0x84, 0xf7, 0xff, 0xfc, 0xd6, - 0x81, 0xa8, 0xf7, 0xff, 0xfc, 0xa5, 0x28, 0x00, - 0xd1, 0x01, 0x26, 0x00, 0xe0, 0x40, 0x78, 0xe0, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x23, 0xf0, 0x00, - 0xfe, 0x59, 0x80, 0xa0, 0xe0, 0x32, 0x20, 0x32, - 0x70, 0x28, 0x20, 0x23, 0x70, 0x68, 0x20, 0x0c, - 0x80, 0x68, 0x98, 0x02, 0x9a, 0x03, 0x5a, 0x10, - 0x80, 0xa8, 0x78, 0xe0, 0x71, 0xa8, 0x1c, 0x0b, - 0x22, 0x00, 0x1c, 0x01, 0x20, 0xa2, 0xf7, 0xff, - 0xfc, 0xb1, 0x81, 0xa8, 0xf7, 0xff, 0xfc, 0x80, - 0x28, 0x00, 0xd1, 0x02, 0x9a, 0x07, 0x60, 0x10, - 0xe7, 0xd7, 0x78, 0xe0, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x10, 0xf0, 0x00, 0xfe, 0x33, 0x80, 0xa0, - 0x21, 0x05, 0x70, 0xa1, 0xe0, 0x0c, 0x28, 0x7f, - 0xda, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, - 0x9a, 0x07, 0x1c, 0x38, 0xf0, 0x00, 0xfb, 0x64, - 0x1c, 0x06, 0xd0, 0x01, 0x20, 0x08, 0x70, 0xa0, - 0x1c, 0x30, 0xb0, 0x04, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xd0, - 0x00, 0x00, 0x03, 0xff, 0x00, 0x00, 0x27, 0x10, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x20, 0x01, - 0xb0, 0x84, 0x9a, 0x07, 0x25, 0x01, 0x60, 0x10, - 0x98, 0x04, 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, - 0x90, 0x03, 0x4e, 0xcf, 0x19, 0x87, 0x4c, 0xcf, - 0x29, 0x60, 0xd0, 0x6d, 0xdc, 0x0e, 0x29, 0x22, - 0xd0, 0x37, 0x29, 0x32, 0xd0, 0x69, 0x29, 0x34, - 0xd0, 0x68, 0x29, 0x50, 0xd1, 0x67, 0x20, 0x03, - 0xf0, 0x00, 0xfe, 0x40, 0x60, 0xa0, 0x28, 0x00, - 0xd1, 0x62, 0xe0, 0x80, 0x29, 0x80, 0xd0, 0x32, - 0x29, 0x84, 0xd0, 0x5e, 0x29, 0x86, 0xd1, 0x5a, - 0x98, 0x04, 0xf7, 0xff, 0xfc, 0x01, 0x20, 0x86, - 0x76, 0xb8, 0xf7, 0xff, 0xfb, 0x41, 0x1c, 0x05, - 0xd5, 0x73, 0x20, 0x01, 0xab, 0x01, 0x70, 0x18, - 0x21, 0x32, 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, - 0x21, 0x0c, 0x80, 0x61, 0x98, 0x03, 0x5a, 0x30, - 0x80, 0xa0, 0x78, 0xf9, 0x71, 0xa1, 0x20, 0x88, - 0x68, 0xa3, 0xaa, 0x01, 0xf7, 0xff, 0xfc, 0x3a, - 0x81, 0xa0, 0xf7, 0xff, 0xfc, 0x09, 0x28, 0x00, - 0xd1, 0x5c, 0x1c, 0x28, 0xf7, 0xff, 0xfb, 0x6e, - 0xe0, 0xdd, 0x98, 0x04, 0xf7, 0xff, 0xfb, 0xdc, - 0x98, 0x04, 0xf0, 0x00, 0xfa, 0xe1, 0x1c, 0x05, - 0xd0, 0x2a, 0x20, 0x02, 0xe1, 0x4c, 0x98, 0x04, - 0xf7, 0xff, 0xfb, 0xd2, 0x9a, 0x06, 0x78, 0x10, - 0x28, 0x80, 0xd1, 0x27, 0x21, 0x32, 0x70, 0x21, - 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, - 0x98, 0x03, 0x5a, 0x30, 0x80, 0xa0, 0x78, 0xf9, - 0x71, 0xa1, 0x22, 0x00, 0x20, 0x81, 0x68, 0xa3, - 0xf7, 0xff, 0xfc, 0x10, 0x81, 0xa0, 0xf7, 0xff, - 0xfb, 0xdf, 0x28, 0x00, 0xd0, 0x73, 0x78, 0xf8, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x9a, 0xf0, 0x00, - 0xfd, 0x95, 0x80, 0xb8, 0x20, 0x07, 0xe1, 0x23, - 0xe1, 0x23, 0xe0, 0xea, 0xe0, 0xe6, 0xe1, 0x13, - 0xe0, 0xed, 0xe0, 0x7e, 0x8a, 0x38, 0x28, 0x00, - 0xdd, 0x5e, 0x68, 0xf9, 0x29, 0x00, 0xd0, 0x5c, - 0x91, 0x01, 0x21, 0x32, 0x4c, 0x91, 0x70, 0x21, - 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, 0x80, 0x61, - 0x99, 0x03, 0x5a, 0x71, 0x80, 0xa1, 0x78, 0xf9, - 0x71, 0xa1, 0x26, 0x01, 0x02, 0xb6, 0x42, 0xb0, - 0xdd, 0x1c, 0x48, 0x8b, 0xf0, 0x00, 0xfd, 0xbe, - 0x60, 0xa0, 0x28, 0x00, 0xd1, 0x04, 0x20, 0x00, - 0xe0, 0x01, 0xe0, 0x8e, 0xe0, 0x7e, 0xe0, 0xfd, - 0xab, 0x02, 0x80, 0x1e, 0x78, 0xf9, 0x1c, 0x03, - 0x20, 0xa1, 0xaa, 0x01, 0xf7, 0xff, 0xfb, 0xce, - 0x81, 0xa0, 0x68, 0xf8, 0x4b, 0x81, 0x18, 0xc0, - 0x60, 0xf8, 0x8a, 0x38, 0x1a, 0xc0, 0x82, 0x38, - 0x20, 0x06, 0xe0, 0x1a, 0x30, 0x0a, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x00, 0xfd, 0x9f, 0x60, 0xa0, - 0x28, 0x00, 0xd0, 0xe0, 0x8a, 0x39, 0x31, 0x01, - 0xab, 0x02, 0x80, 0x19, 0x78, 0xf9, 0x1c, 0x03, - 0x20, 0xa0, 0xaa, 0x01, 0xf7, 0xff, 0xfb, 0xb2, - 0x81, 0xa0, 0x24, 0x00, 0x82, 0x3c, 0x60, 0xfc, - 0x68, 0xb8, 0xf0, 0x00, 0xfd, 0xb1, 0x20, 0x05, - 0x60, 0xbc, 0x70, 0xb8, 0xf7, 0xff, 0xfb, 0x82, - 0x28, 0x00, 0xd0, 0x0c, 0x78, 0xf8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x67, 0xf0, 0x00, 0xfd, 0x2e, - 0x80, 0xb8, 0x20, 0x00, 0xe0, 0x02, 0xe0, 0xa1, - 0xe0, 0x03, 0xe0, 0x02, 0x9a, 0x07, 0x60, 0x10, - 0xe0, 0xb7, 0x7e, 0xb8, 0x28, 0x00, 0xd1, 0x11, - 0x78, 0xf8, 0x30, 0x60, 0x04, 0x00, 0x0c, 0x00, - 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, 0x21, 0x7d, - 0x00, 0xc9, 0xf0, 0x00, 0xfd, 0x17, 0x80, 0xf8, - 0x20, 0x04, 0x70, 0xb8, 0x68, 0xa0, 0xf0, 0x00, - 0xfd, 0x83, 0xe0, 0xa2, 0x20, 0x00, 0x76, 0xb8, - 0xe0, 0x9f, 0x20, 0x84, 0x76, 0xb8, 0x21, 0x32, - 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, - 0x80, 0x61, 0x98, 0x03, 0x5a, 0x30, 0x80, 0xa0, - 0x78, 0xf9, 0x71, 0xa1, 0x22, 0x00, 0x20, 0x85, - 0x68, 0xa3, 0xf7, 0xff, 0xfb, 0x67, 0x81, 0xa0, - 0xf7, 0xff, 0xfb, 0x36, 0x28, 0x00, 0xd1, 0x01, - 0x25, 0x00, 0xe0, 0x03, 0x98, 0x04, 0xf0, 0x00, - 0xfa, 0x13, 0x1c, 0x05, 0x2d, 0x00, 0xd0, 0x00, - 0xe7, 0x2f, 0xe0, 0x7e, 0x78, 0xf8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x98, 0x00, 0x43, 0x18, 0x49, 0x40, - 0xf0, 0x00, 0xfc, 0xe0, 0x80, 0xb8, 0x20, 0x01, - 0xe0, 0x70, 0x00, 0xe8, 0x1b, 0x40, 0x00, 0x80, - 0x19, 0x81, 0x78, 0xc9, 0xab, 0x01, 0x70, 0x19, - 0x99, 0x03, 0x5a, 0x71, 0x52, 0x31, 0x21, 0x32, - 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, - 0x80, 0x61, 0x98, 0x03, 0x5a, 0x30, 0x80, 0xa0, - 0x78, 0xf9, 0x71, 0xa1, 0x20, 0x87, 0x68, 0xa3, - 0xaa, 0x01, 0xf7, 0xff, 0xfb, 0x2f, 0x81, 0xa0, - 0xf7, 0xff, 0xfa, 0xfe, 0x28, 0x00, 0xd1, 0x03, - 0x1c, 0x28, 0xf7, 0xff, 0xfa, 0x63, 0xe0, 0x31, - 0x21, 0x21, 0x9a, 0x07, 0x1c, 0x28, 0xf7, 0xff, - 0xfc, 0x8f, 0x1c, 0x05, 0x78, 0xf8, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x25, 0xf0, 0x00, 0xfc, 0xaa, - 0x80, 0xb8, 0xe0, 0x3a, 0x98, 0x04, 0x1d, 0x22, - 0xe0, 0x01, 0x22, 0x00, 0x98, 0x04, 0xf7, 0xfe, - 0xff, 0xd9, 0x1c, 0x05, 0xe0, 0x31, 0x21, 0x32, - 0x70, 0x21, 0x21, 0x23, 0x70, 0x61, 0x21, 0x0c, - 0x80, 0x61, 0x99, 0x03, 0x5a, 0x71, 0x80, 0xa1, - 0x78, 0xf9, 0x71, 0xa1, 0x22, 0x00, 0x1c, 0x03, - 0x20, 0x84, 0xf7, 0xff, 0xfa, 0xfb, 0x81, 0xa0, - 0xf7, 0xff, 0xfa, 0xca, 0x28, 0x00, 0xd1, 0x03, - 0x9a, 0x07, 0x60, 0x10, 0x25, 0x00, 0xe0, 0x18, - 0x78, 0xf8, 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, - 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, 0x49, 0x0e, - 0xf0, 0x00, 0xfc, 0x7c, 0x80, 0xb8, 0xe0, 0x0a, - 0x29, 0x7f, 0xda, 0x01, 0x21, 0x01, 0xe0, 0x00, - 0x21, 0x00, 0x98, 0x04, 0x9a, 0x07, 0xf0, 0x00, - 0xf9, 0xaf, 0x1c, 0x05, 0xd0, 0x01, 0x20, 0x08, - 0x70, 0xb8, 0x1c, 0x28, 0xb0, 0x04, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xc0, - 0x00, 0x00, 0x27, 0x10, 0x2e, 0x08, 0x56, 0xd0, - 0x00, 0x00, 0x04, 0x0a, 0x00, 0x00, 0x03, 0xff, - 0xb5, 0x80, 0x06, 0x09, 0x0e, 0x09, 0x1c, 0x07, - 0x20, 0x01, 0x60, 0x18, 0x29, 0x50, 0xd0, 0x0e, - 0xdc, 0x06, 0x29, 0x22, 0xd0, 0x0b, 0x29, 0x32, - 0xd0, 0x09, 0x29, 0x34, 0xd1, 0x0d, 0xe0, 0x06, - 0x29, 0x80, 0xd0, 0x02, 0x29, 0x84, 0xd1, 0x08, - 0xe0, 0x01, 0x20, 0x00, 0x70, 0x10, 0x1c, 0x38, - 0xf7, 0xff, 0xfe, 0x2e, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x29, 0x7f, 0xda, 0x01, 0x21, 0x01, - 0xe0, 0x00, 0x21, 0x00, 0x1c, 0x38, 0x1c, 0x1a, - 0xf0, 0x00, 0xf9, 0x72, 0x28, 0x00, 0xd0, 0xf1, - 0x21, 0x08, 0x00, 0xfa, 0x1b, 0xd2, 0x00, 0x92, - 0x4b, 0x02, 0x18, 0xd2, 0x70, 0x91, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xff, 0x06, 0x09, 0x0e, 0x09, 0x20, 0x01, - 0xb0, 0x81, 0x1c, 0x17, 0x9a, 0x04, 0x25, 0x01, - 0x60, 0x10, 0x98, 0x01, 0x00, 0xc2, 0x1a, 0x12, - 0x00, 0x92, 0x1c, 0x16, 0x48, 0x78, 0x90, 0x00, - 0x18, 0x14, 0x29, 0x80, 0xd0, 0x59, 0xdc, 0x08, - 0x29, 0x22, 0xd0, 0x1a, 0x29, 0x32, 0xd0, 0x55, - 0x29, 0x34, 0xd0, 0x53, 0x29, 0x50, 0xd1, 0x61, - 0xe0, 0xc8, 0x29, 0x84, 0xd0, 0x4e, 0x4e, 0x71, - 0x29, 0xa0, 0xd0, 0x18, 0x29, 0xa1, 0xd1, 0x59, - 0x98, 0x01, 0xf7, 0xff, 0xfa, 0x19, 0x8b, 0x21, - 0x29, 0x00, 0xd1, 0x54, 0x88, 0xb8, 0xf0, 0x00, - 0xfc, 0x45, 0x60, 0xb0, 0x28, 0x00, 0xd1, 0x58, - 0xe0, 0x15, 0x98, 0x01, 0xf7, 0xff, 0xfa, 0x0c, - 0x98, 0x01, 0xf0, 0x00, 0xf9, 0x11, 0x1c, 0x05, - 0xd0, 0x6a, 0x20, 0x02, 0xe0, 0xbd, 0x98, 0x01, - 0xf7, 0xff, 0xfa, 0x02, 0x8b, 0x21, 0x29, 0x00, - 0xd1, 0x07, 0x88, 0xb8, 0xf0, 0x00, 0xfc, 0x2e, - 0x60, 0xb0, 0x28, 0x00, 0xd1, 0x0c, 0x20, 0x00, - 0xe0, 0xb1, 0x88, 0xb8, 0x18, 0x08, 0x04, 0x02, - 0x0c, 0x12, 0x69, 0x60, 0xf0, 0x00, 0xfc, 0x27, - 0x60, 0xb0, 0x28, 0x00, 0xd0, 0xf3, 0x61, 0x60, - 0x20, 0x34, 0x70, 0x30, 0x70, 0x70, 0x20, 0x0c, - 0x80, 0x70, 0x78, 0xe0, 0x71, 0x30, 0x88, 0xb9, - 0x8b, 0x20, 0x18, 0x09, 0x81, 0xb1, 0x68, 0xb1, - 0x18, 0x08, 0x88, 0xba, 0x68, 0x39, 0xf0, 0x13, - 0xfb, 0x2d, 0xf7, 0xff, 0xfa, 0x07, 0x28, 0x00, - 0xd1, 0x05, 0x68, 0xb0, 0xf0, 0x00, 0xfc, 0x2c, - 0xe0, 0x53, 0xe0, 0x36, 0xe0, 0x76, 0x78, 0xe0, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x46, 0xf0, 0x00, - 0xfb, 0xad, 0x80, 0xa0, 0x20, 0x00, 0x83, 0x20, - 0x61, 0x60, 0xe0, 0x22, 0xe0, 0x6d, 0x88, 0xb8, - 0x18, 0x08, 0x04, 0x02, 0x0c, 0x12, 0x69, 0x60, - 0xf0, 0x00, 0xfb, 0xf1, 0x60, 0xb0, 0x28, 0x00, - 0xd0, 0xbd, 0x61, 0x60, 0x8b, 0x21, 0x69, 0x60, - 0x18, 0x40, 0x88, 0xba, 0x68, 0x39, 0xf0, 0x13, - 0xfb, 0x01, 0x8b, 0x20, 0x88, 0xb9, 0x18, 0x40, - 0x83, 0x20, 0x78, 0xe0, 0x30, 0x50, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, 0x43, 0x18, - 0x49, 0x33, 0xf0, 0x00, 0xfb, 0x87, 0x80, 0xa0, - 0x20, 0x00, 0x9a, 0x04, 0x60, 0x10, 0xe0, 0x55, - 0xe0, 0x54, 0x98, 0x01, 0xf7, 0xff, 0xf9, 0x98, - 0x78, 0x38, 0x28, 0x80, 0xd1, 0x23, 0x20, 0x32, - 0x4f, 0x2c, 0x70, 0x38, 0x20, 0x23, 0x70, 0x78, - 0x20, 0x0c, 0x80, 0x78, 0x98, 0x00, 0x5b, 0x80, - 0x80, 0xb8, 0x78, 0xe1, 0x71, 0xb9, 0x22, 0x00, - 0x20, 0x81, 0x68, 0xbb, 0xf7, 0xff, 0xf9, 0xd6, - 0x81, 0xb8, 0xf7, 0xff, 0xf9, 0xa5, 0x28, 0x00, - 0xd1, 0x01, 0x25, 0x00, 0xe0, 0x36, 0x78, 0xe0, - 0x30, 0x50, 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, - 0x04, 0x1b, 0x43, 0x18, 0x49, 0x1c, 0xf0, 0x00, - 0xfb, 0x59, 0x80, 0xa0, 0xe0, 0x2a, 0x7e, 0xa0, - 0x28, 0x00, 0xd1, 0x10, 0x78, 0xe0, 0x30, 0x60, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x21, 0x7d, 0x00, 0xc9, 0xf0, 0x00, - 0xfb, 0x49, 0x80, 0xe0, 0x20, 0x00, 0x9a, 0x04, - 0x60, 0x10, 0x20, 0x04, 0xe0, 0x15, 0x20, 0x00, - 0x76, 0xa0, 0xe0, 0x13, 0x98, 0x01, 0x9b, 0x04, - 0x1c, 0x3a, 0xf7, 0xff, 0xfd, 0x29, 0x1c, 0x05, - 0xe0, 0x0c, 0x29, 0x7f, 0xda, 0x01, 0x21, 0x01, - 0xe0, 0x00, 0x21, 0x00, 0x98, 0x01, 0x9a, 0x04, - 0xf0, 0x00, 0xf8, 0x6e, 0x1c, 0x05, 0xd0, 0x01, - 0x20, 0x08, 0x70, 0xa0, 0x1c, 0x28, 0xb0, 0x01, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x56, 0xd0, - 0x00, 0x00, 0x27, 0x10, 0x2e, 0x08, 0x56, 0xc0, - 0xb5, 0xf0, 0x1c, 0x07, 0x06, 0x08, 0x0e, 0x00, - 0x21, 0x01, 0x26, 0x02, 0x00, 0xfa, 0x1b, 0xd2, - 0x00, 0x92, 0x60, 0x19, 0x1c, 0x1c, 0x49, 0x19, - 0x18, 0x55, 0x28, 0x22, 0xd0, 0x19, 0x28, 0x50, - 0xd0, 0x11, 0x28, 0x80, 0xd0, 0x21, 0x28, 0x85, - 0xd1, 0x23, 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0x20, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x25, 0x28, 0x00, - 0xd0, 0x00, 0x70, 0xae, 0x21, 0x00, 0x60, 0x21, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x1a, 0x28, 0x00, 0xd0, 0xf7, - 0xe0, 0x07, 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0x0c, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x11, 0x28, 0x00, - 0xd0, 0xee, 0x70, 0xae, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0x00, 0x22, 0x34, 0x49, 0x0a, 0x70, 0x0a, - 0x22, 0x33, 0x70, 0x4a, 0x22, 0x04, 0x80, 0x4a, - 0x00, 0xc3, 0x1a, 0x18, 0x00, 0x80, 0x4a, 0x07, - 0x18, 0x80, 0x78, 0xc0, 0x71, 0x08, 0xf7, 0xff, - 0xf9, 0x0b, 0x28, 0x00, 0xd1, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x56, 0xc0, 0x2e, 0x08, 0x56, 0xe0, - 0xb5, 0xf0, 0x1c, 0x04, 0x20, 0x01, 0x26, 0x01, - 0x60, 0x10, 0x1c, 0x17, 0x4d, 0x1b, 0x29, 0x00, - 0xd0, 0x08, 0x20, 0x03, 0xf0, 0x00, 0xfb, 0x02, - 0x60, 0xa8, 0x28, 0x00, 0xd1, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x32, 0x70, 0x28, - 0x20, 0x23, 0x70, 0x68, 0x20, 0x0c, 0x80, 0x68, - 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, 0x49, 0x12, - 0x5a, 0x0a, 0x80, 0xaa, 0x18, 0x44, 0x78, 0xe1, - 0x71, 0xa9, 0x22, 0x00, 0x20, 0x84, 0x68, 0xab, - 0xf7, 0xff, 0xf9, 0x08, 0x81, 0xa8, 0xf7, 0xff, - 0xf8, 0xd7, 0x28, 0x00, 0xd1, 0x02, 0x26, 0x00, - 0x60, 0x38, 0xe0, 0x0a, 0x78, 0xe0, 0x30, 0x50, - 0x04, 0x00, 0x0c, 0x00, 0x23, 0x03, 0x04, 0x1b, - 0x43, 0x18, 0x49, 0x06, 0xf0, 0x00, 0xfa, 0x8a, - 0x80, 0xa0, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x56, 0xc0, - 0x2e, 0x08, 0x56, 0xe0, 0x00, 0x00, 0x27, 0x10, - 0x20, 0x00, 0x47, 0x70, 0xb5, 0x90, 0x28, 0x00, - 0xd0, 0x06, 0x21, 0xff, 0x4a, 0x24, 0x73, 0x11, - 0x4b, 0x24, 0x18, 0xc1, 0xf7, 0xfa, 0xfe, 0x88, - 0x20, 0x00, 0x21, 0x00, 0x4a, 0x22, 0x01, 0x83, - 0x18, 0x1b, 0x00, 0xdb, 0x18, 0x9b, 0x33, 0xff, - 0x33, 0xff, 0x33, 0x02, 0x60, 0x19, 0x60, 0x59, - 0x30, 0x01, 0x28, 0x06, 0xdb, 0xf3, 0x20, 0x00, - 0x43, 0xc4, 0x4a, 0x1c, 0x01, 0x03, 0x50, 0xd1, - 0x18, 0x9b, 0x60, 0xdc, 0x30, 0x01, 0x28, 0x1e, - 0xdb, 0xf8, 0x27, 0x01, 0x20, 0x02, 0x49, 0x18, - 0x60, 0x08, 0xf7, 0xfd, 0xfb, 0x11, 0x28, 0x01, - 0xd0, 0x00, 0x27, 0x00, 0xf7, 0xfb, 0xff, 0x78, - 0x28, 0x00, 0xd1, 0x00, 0x27, 0x00, 0xf7, 0xfe, - 0xfe, 0x09, 0x28, 0x00, 0xd1, 0x00, 0x27, 0x00, - 0xf7, 0xfd, 0xfe, 0x24, 0x28, 0x00, 0xd1, 0x00, - 0x27, 0x00, 0xf0, 0x01, 0xf9, 0x05, 0x28, 0x00, - 0xd1, 0x00, 0x27, 0x00, 0xf0, 0x02, 0xf8, 0xb6, - 0x42, 0xa0, 0xd1, 0x00, 0x27, 0x00, 0x2f, 0x01, - 0xd1, 0x01, 0xf0, 0x00, 0xf8, 0x0f, 0x1c, 0x38, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0x90, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x5e, 0x30, 0x2e, 0x08, 0x5c, 0x50, - 0x6e, 0x00, 0x11, 0x00, 0xb5, 0x00, 0xf0, 0x18, - 0xfd, 0x33, 0x49, 0x07, 0x20, 0x19, 0xf0, 0x18, - 0xfc, 0xfb, 0xf0, 0x18, 0xfc, 0xf1, 0x4b, 0x05, - 0x40, 0x18, 0xf0, 0x18, 0xfc, 0xf1, 0xf0, 0x18, - 0xfd, 0x5d, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x00, 0xaf, 0xb5, 0xfd, 0xff, 0xff, 0xff, - 0xb5, 0x00, 0xf0, 0x18, 0xfc, 0xe1, 0x23, 0x01, - 0x06, 0x5b, 0x43, 0x18, 0xf0, 0x18, 0xfc, 0xe0, - 0x20, 0x01, 0x06, 0x40, 0xf0, 0x18, 0xfc, 0xd3, - 0x48, 0x02, 0x68, 0x81, 0x31, 0x01, 0x60, 0x81, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0x90, - 0xb5, 0xf0, 0xb0, 0x84, 0xf0, 0x00, 0xfa, 0x80, - 0x4f, 0x99, 0x88, 0x39, 0x48, 0x99, 0x29, 0x06, - 0xd2, 0x64, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x03, 0x36, 0x61, 0x8e, - 0xb9, 0xe8, 0x1d, 0xc5, 0x35, 0xff, 0x35, 0xfa, - 0x68, 0x6c, 0x68, 0x2e, 0x2e, 0x00, 0xd1, 0x13, - 0xf7, 0xfa, 0xfc, 0xa0, 0x69, 0x39, 0x42, 0x88, - 0xd9, 0x24, 0xf7, 0xfa, 0xfc, 0x9b, 0x30, 0x64, - 0x61, 0x38, 0x20, 0x00, 0xab, 0x01, 0x70, 0x18, - 0x3b, 0x04, 0x70, 0x18, 0x46, 0x69, 0x22, 0x00, - 0xa8, 0x01, 0xf7, 0xfd, 0xfa, 0x69, 0xe0, 0x15, - 0x21, 0x01, 0xab, 0x01, 0x70, 0x19, 0x19, 0x01, - 0x31, 0xff, 0x31, 0xe1, 0x78, 0x09, 0x3b, 0x04, - 0x70, 0x19, 0x01, 0x21, 0x18, 0x0a, 0x46, 0x69, - 0xa8, 0x01, 0xf7, 0xfd, 0xfa, 0x59, 0x20, 0x1e, - 0x1c, 0x61, 0x3e, 0x01, 0xf0, 0x13, 0xf8, 0xd8, - 0x60, 0x69, 0x60, 0x2e, 0x21, 0x01, 0xe0, 0x54, - 0x23, 0x01, 0x02, 0x9b, 0x18, 0xc5, 0x68, 0xec, - 0x68, 0xae, 0x2e, 0x00, 0xd0, 0x20, 0x19, 0x01, - 0x23, 0x1f, 0x01, 0x5b, 0x18, 0xc9, 0x7a, 0x09, - 0xab, 0x00, 0x70, 0x19, 0xa9, 0x00, 0x78, 0x09, - 0x09, 0x09, 0x29, 0x06, 0xd0, 0x01, 0x21, 0x01, - 0xe0, 0x00, 0x21, 0x02, 0xab, 0x01, 0x70, 0x19, - 0x01, 0x21, 0x18, 0x08, 0x23, 0x41, 0x00, 0xdb, - 0x18, 0xc2, 0x46, 0x69, 0xa8, 0x01, 0xf7, 0xfb, - 0xfe, 0xa3, 0x20, 0x1e, 0x1c, 0x61, 0x3e, 0x01, - 0xf0, 0x13, 0xf8, 0xae, 0x60, 0xe9, 0x60, 0xae, - 0x21, 0x02, 0xe0, 0x2a, 0xe0, 0xc2, 0x23, 0x03, - 0x02, 0x5b, 0x18, 0xc5, 0x69, 0x6c, 0x69, 0x2e, - 0x2e, 0x00, 0xd0, 0x21, 0x21, 0x01, 0xab, 0x01, - 0x70, 0x19, 0x19, 0x01, 0x23, 0x2f, 0x01, 0x5b, - 0x18, 0xc9, 0x7c, 0x09, 0xab, 0x00, 0x70, 0x19, - 0xa9, 0x00, 0x78, 0x09, 0x09, 0x09, 0x29, 0x06, - 0xd1, 0x02, 0x21, 0x02, 0x71, 0x19, 0x33, 0x04, - 0x01, 0x21, 0x18, 0x08, 0x23, 0x41, 0x01, 0x1b, - 0x18, 0xc2, 0x46, 0x69, 0xa8, 0x01, 0xf7, 0xfe, - 0xfd, 0x09, 0x20, 0x1e, 0x1c, 0x61, 0x3e, 0x01, - 0xf0, 0x13, 0xf8, 0x82, 0x61, 0x69, 0x61, 0x2e, - 0x21, 0x03, 0x80, 0x39, 0x20, 0x00, 0xe0, 0x97, - 0x23, 0x01, 0x02, 0xdb, 0x18, 0xc5, 0x69, 0xec, - 0x69, 0xae, 0x2e, 0x00, 0xd0, 0x21, 0x21, 0x01, - 0xab, 0x01, 0x70, 0x19, 0x19, 0x01, 0x23, 0x3f, - 0x01, 0x5b, 0x18, 0xc9, 0x7e, 0x09, 0xab, 0x00, - 0x70, 0x19, 0xa9, 0x00, 0x78, 0x09, 0x09, 0x09, - 0x29, 0x06, 0xd1, 0x02, 0x21, 0x02, 0x71, 0x19, - 0x33, 0x04, 0x01, 0x21, 0x18, 0x08, 0x23, 0xc3, - 0x00, 0xdb, 0x18, 0xc2, 0x46, 0x69, 0xa8, 0x01, - 0xf7, 0xfd, 0xfc, 0xfe, 0x20, 0x1e, 0x1c, 0x61, - 0x3e, 0x01, 0xf0, 0x13, 0xf8, 0x55, 0x61, 0xe9, - 0x61, 0xae, 0x20, 0x04, 0xe0, 0x2c, 0x23, 0x05, - 0x02, 0x5b, 0x18, 0xc5, 0x6a, 0x6c, 0x6a, 0x2e, - 0x2e, 0x00, 0xd0, 0x24, 0x19, 0x01, 0x18, 0xc9, - 0x78, 0x09, 0xab, 0x00, 0x70, 0x19, 0xa9, 0x00, - 0x78, 0x09, 0x09, 0x09, 0x29, 0x06, 0xd0, 0x05, - 0x29, 0x07, 0xd0, 0x01, 0x29, 0x08, 0xd1, 0x03, - 0x21, 0x03, 0xe0, 0x02, 0x21, 0x02, 0xe0, 0x00, - 0x21, 0x01, 0xab, 0x01, 0x70, 0x19, 0x01, 0x21, - 0x18, 0x08, 0x23, 0x41, 0x01, 0x5b, 0x18, 0xc2, - 0x46, 0x69, 0xa8, 0x01, 0xf0, 0x00, 0xff, 0xb4, - 0x20, 0x1e, 0x1c, 0x61, 0x3e, 0x01, 0xf0, 0x13, - 0xf8, 0x27, 0x62, 0x69, 0x62, 0x2e, 0x20, 0x05, - 0x80, 0x38, 0xe7, 0xa3, 0xe7, 0xff, 0x23, 0x03, - 0x02, 0x9b, 0x18, 0xc6, 0x6a, 0xf4, 0x6a, 0xb5, - 0x2d, 0x00, 0xd0, 0x33, 0x19, 0x01, 0x18, 0xc9, - 0x7a, 0x09, 0xab, 0x00, 0x70, 0x19, 0xa9, 0x00, - 0x78, 0x09, 0x09, 0x09, 0x29, 0x09, 0xd0, 0x10, - 0x29, 0x0a, 0xd1, 0x1f, 0x01, 0x21, 0x18, 0x08, - 0x23, 0x05, 0x02, 0x5b, 0x18, 0xc0, 0x90, 0x02, - 0x8d, 0x01, 0x6a, 0xc0, 0xf7, 0xf5, 0xfd, 0x7c, - 0x23, 0x01, 0x42, 0xd8, 0xd0, 0x14, 0x98, 0x02, - 0xe0, 0x0d, 0x01, 0x21, 0x18, 0x08, 0x23, 0x05, - 0x02, 0x5b, 0x18, 0xc0, 0x90, 0x03, 0x8d, 0x01, - 0x6a, 0xc0, 0xf7, 0xf5, 0xfd, 0xe6, 0x23, 0x01, - 0x42, 0xd8, 0xd0, 0x05, 0x98, 0x03, 0x6a, 0xc0, - 0xf0, 0x00, 0xf9, 0x42, 0x34, 0x01, 0x3d, 0x01, - 0x20, 0x1e, 0x1c, 0x21, 0xf0, 0x12, 0xff, 0xe8, - 0x62, 0xf1, 0x62, 0xb5, 0x20, 0x00, 0x80, 0x38, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x90, 0x2e, 0x08, 0x5e, 0x30, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0xb4, 0x0f, 0xb5, 0x80, - 0xb0, 0x84, 0x99, 0x06, 0xaa, 0x07, 0x4f, 0x15, - 0x68, 0x38, 0xf0, 0x13, 0xf8, 0xf5, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0xab, 0x00, 0x80, 0x18, - 0x28, 0x80, 0xdc, 0x19, 0xa8, 0x00, 0x88, 0x00, - 0x28, 0x04, 0xdb, 0x15, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x02, 0xf0, 0x00, 0xf8, 0xeb, 0x28, 0x00, - 0xd0, 0x0e, 0x90, 0x01, 0xaa, 0x00, 0x88, 0x12, - 0x68, 0x39, 0xf0, 0x13, 0xf8, 0x03, 0x21, 0x00, - 0xaa, 0x00, 0x88, 0x12, 0x98, 0x01, 0x54, 0x81, - 0x46, 0x69, 0x20, 0xa6, 0xf0, 0x00, 0xf8, 0x24, - 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, 0xb0, 0x04, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xcc, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x1c, 0x07, - 0x1c, 0x20, 0xb0, 0x84, 0xf0, 0x00, 0xf8, 0xca, - 0x28, 0x00, 0xd1, 0x01, 0x43, 0xc0, 0xe0, 0x0b, - 0xab, 0x00, 0x80, 0x1c, 0x90, 0x01, 0x1c, 0x39, - 0x1c, 0x22, 0xf0, 0x12, 0xff, 0xdf, 0x46, 0x69, - 0x20, 0x96, 0xf0, 0x00, 0xf8, 0x05, 0x20, 0x00, - 0xb0, 0x04, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x06, 0x06, 0x0e, 0x36, 0x07, 0x30, - 0x0f, 0x00, 0x01, 0x83, 0x18, 0x18, 0x00, 0xc0, - 0x1c, 0x0f, 0xb0, 0x83, 0x49, 0x2e, 0x18, 0x45, - 0x1f, 0xe8, 0x38, 0x79, 0x90, 0x02, 0x6f, 0x84, - 0x6f, 0xc0, 0x2c, 0x1e, 0xda, 0x4e, 0x09, 0x31, - 0x29, 0x06, 0xd1, 0x11, 0x88, 0x3a, 0xb0, 0x81, - 0x92, 0x00, 0x19, 0x01, 0x20, 0x1e, 0x1c, 0x2f, - 0xf0, 0x12, 0xff, 0x6a, 0x9a, 0x00, 0x01, 0x08, - 0x18, 0x38, 0x38, 0xff, 0x38, 0xff, 0x38, 0x42, - 0x87, 0x02, 0x18, 0x68, 0xb0, 0x01, 0xe0, 0x34, - 0x29, 0x07, 0xd1, 0x22, 0x19, 0x01, 0x20, 0x1e, - 0xf0, 0x12, 0xff, 0x5a, 0x91, 0x00, 0x01, 0x08, - 0x18, 0x28, 0x90, 0x01, 0x22, 0x10, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x0a, 0x1c, 0x39, 0xf0, 0x12, - 0xff, 0x9d, 0x98, 0x00, 0x18, 0x28, 0x38, 0x40, - 0x76, 0x06, 0x78, 0xb8, 0xf0, 0x00, 0xf8, 0x76, - 0x99, 0x01, 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, - 0x67, 0xc8, 0x28, 0x00, 0xd1, 0x00, 0xe0, 0x1a, - 0x78, 0xba, 0x68, 0x79, 0xf0, 0x12, 0xff, 0x8a, - 0xe0, 0x11, 0x19, 0x01, 0x20, 0x1e, 0xf0, 0x12, - 0xff, 0x37, 0x91, 0x00, 0x01, 0x08, 0x18, 0x28, - 0x22, 0x10, 0x38, 0xff, 0x38, 0xff, 0x38, 0x0a, - 0x1c, 0x39, 0xf0, 0x12, 0xff, 0x7b, 0x98, 0x00, - 0x18, 0x28, 0x38, 0x40, 0x76, 0x06, 0x1c, 0x60, - 0x99, 0x02, 0x67, 0x88, 0x20, 0xff, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x5e, 0x30, 0xb5, 0xf3, 0x04, 0x0d, - 0x0c, 0x2d, 0x98, 0x00, 0x04, 0x06, 0x0c, 0x36, - 0x27, 0x00, 0x4c, 0x17, 0x01, 0x38, 0x58, 0x20, - 0x42, 0xb0, 0xd1, 0x07, 0xf7, 0xfa, 0xfa, 0xb2, - 0x19, 0x41, 0x01, 0x38, 0x19, 0x00, 0x60, 0xc1, - 0x60, 0x85, 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x1e, - 0xdb, 0xf0, 0x2f, 0x1e, 0xdb, 0x1a, 0x27, 0x00, - 0x01, 0x38, 0x58, 0x20, 0x28, 0x00, 0xd1, 0x0b, - 0x01, 0x38, 0x50, 0x26, 0x99, 0x00, 0x0c, 0x09, - 0x19, 0x04, 0x60, 0x61, 0xf7, 0xfa, 0xfa, 0x9a, - 0x19, 0x40, 0x60, 0xe0, 0x60, 0xa5, 0xe0, 0x02, - 0x37, 0x01, 0x2f, 0x1e, 0xdb, 0xec, 0x2f, 0x1e, - 0xdb, 0x04, 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x30, 0xe7, 0xf9, - 0x2e, 0x08, 0x5c, 0x50, 0xb4, 0x80, 0x21, 0x00, - 0x4a, 0x07, 0x23, 0x00, 0x01, 0x0f, 0x59, 0xd7, - 0x42, 0x87, 0xd1, 0x02, 0x01, 0x08, 0x50, 0x13, - 0xe0, 0x02, 0x31, 0x01, 0x29, 0x1e, 0xdb, 0xf5, - 0x1c, 0x18, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x5c, 0x50, 0xb5, 0x00, 0xf7, 0xfa, - 0xfb, 0xd7, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0x1c, 0x04, 0x1c, 0x10, 0x1c, 0x15, 0x1c, 0x0f, - 0xf7, 0xff, 0xff, 0xf4, 0x1c, 0x06, 0xd1, 0x06, - 0x1c, 0x20, 0xf7, 0xfa, 0xfb, 0xd3, 0x20, 0x00, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1b, 0xea, - 0x19, 0xf0, 0x21, 0x00, 0xf0, 0x12, 0xff, 0xfe, - 0x1c, 0x30, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x12, - 0xff, 0x01, 0x1c, 0x20, 0xf7, 0xfa, 0xfb, 0xc2, - 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x80, 0x27, 0x01, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xfa, 0xfb, 0xb8, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, 0x1c, 0x07, - 0xf7, 0xfa, 0xfa, 0x40, 0x19, 0xc7, 0xf7, 0xfa, - 0xfa, 0x3d, 0x42, 0xb8, 0xd3, 0xfb, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x01, 0x47, 0x70, - 0xb5, 0xf0, 0xf7, 0xfa, 0xfa, 0x33, 0x4e, 0x13, - 0x69, 0x71, 0x42, 0x88, 0xd0, 0x1d, 0xf7, 0xfa, - 0xfa, 0x2d, 0x27, 0x00, 0x61, 0x70, 0x4d, 0x10, - 0x4c, 0x10, 0x01, 0x38, 0x58, 0x22, 0x2a, 0x00, - 0xd0, 0x10, 0x19, 0x00, 0x68, 0xc3, 0x69, 0x71, - 0x42, 0x8b, 0xd2, 0x0b, 0x80, 0x2a, 0x68, 0x82, - 0x18, 0x51, 0x60, 0xc1, 0x68, 0x40, 0x07, 0x00, - 0x0f, 0x00, 0x23, 0x60, 0x43, 0x18, 0x1c, 0x29, - 0xf7, 0xff, 0xfe, 0xea, 0x37, 0x01, 0x2f, 0x1e, - 0xdb, 0xe7, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0x90, - 0x2e, 0x08, 0x5c, 0x40, 0x2e, 0x08, 0x5c, 0x50, - 0xb5, 0x80, 0x04, 0x00, 0x0c, 0x00, 0x21, 0x9f, - 0x4a, 0x07, 0x70, 0x11, 0x21, 0x80, 0x70, 0x51, - 0x21, 0x10, 0x70, 0x91, 0x27, 0x00, 0x70, 0xd7, - 0x21, 0x04, 0xf0, 0x01, 0xf8, 0xdd, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0xf0, 0x00, 0xf8, 0x03, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x12, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x01, - 0xf8, 0xbf, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x21, 0x00, - 0x20, 0x9f, 0x4a, 0x14, 0x70, 0x10, 0x20, 0x80, - 0x70, 0x50, 0x20, 0x11, 0x70, 0x90, 0x27, 0x00, - 0x48, 0x11, 0x01, 0x3d, 0x19, 0xed, 0x00, 0xed, - 0x59, 0x46, 0x2e, 0x00, 0xd0, 0x0c, 0x00, 0x8b, - 0x18, 0x9b, 0x0e, 0x36, 0x71, 0x1e, 0x59, 0x46, - 0x0c, 0x36, 0x71, 0x5e, 0x59, 0x46, 0x0a, 0x36, - 0x71, 0x9e, 0x59, 0x45, 0x71, 0xdd, 0x31, 0x01, - 0x37, 0x01, 0x2f, 0x07, 0xdb, 0xe9, 0x00, 0x88, - 0x70, 0xd0, 0x1d, 0x01, 0x1c, 0x20, 0xf0, 0x01, - 0xf8, 0x8f, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0xa8, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x20, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x01, - 0xf8, 0x77, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0xf0, 0x04, 0x07, 0x0c, 0x3f, 0xb0, 0x82, - 0x1c, 0xc8, 0x1c, 0x0c, 0x46, 0x69, 0xf0, 0x00, - 0xfc, 0x8b, 0x1c, 0x01, 0x00, 0xf8, 0x4a, 0x25, - 0x18, 0x80, 0x88, 0xc2, 0x20, 0x00, 0x4f, 0x24, - 0x00, 0xc3, 0x1a, 0x1b, 0x00, 0x9b, 0x19, 0xdb, - 0x78, 0xdb, 0x42, 0x93, 0xd1, 0x07, 0x00, 0xc2, - 0x1a, 0x12, 0x00, 0x92, 0x5a, 0xba, 0x32, 0x01, - 0x4b, 0x1e, 0x70, 0x9a, 0xe0, 0x04, 0x30, 0x01, - 0x04, 0x00, 0x14, 0x00, 0x28, 0x08, 0xdb, 0xeb, - 0x18, 0x61, 0x91, 0x01, 0x7a, 0x09, 0x04, 0x0d, - 0x14, 0x2d, 0x00, 0xc6, 0x1a, 0x36, 0x00, 0xb6, - 0x5b, 0xb8, 0x01, 0x00, 0x4c, 0x16, 0x19, 0x00, - 0x68, 0x40, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, - 0xff, 0x07, 0x1c, 0x68, 0xf7, 0xff, 0xfe, 0xde, - 0x5b, 0xb9, 0x01, 0x09, 0x19, 0x09, 0x60, 0x48, - 0x28, 0x00, 0xd0, 0x0a, 0x99, 0x01, 0x31, 0x09, - 0x1c, 0x2a, 0xf0, 0x12, 0xfd, 0xf3, 0x21, 0x00, - 0x5b, 0xb8, 0x01, 0x00, 0x19, 0x00, 0x68, 0x40, - 0x55, 0x41, 0x20, 0x02, 0x5b, 0xb9, 0x01, 0x0a, - 0x54, 0xa0, 0x1c, 0x08, 0xf0, 0x01, 0xf9, 0xae, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7a, 0x60, - 0x2e, 0x08, 0x56, 0xe0, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0x88, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x22, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x01, - 0xf8, 0x03, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0x90, 0x04, 0x04, 0x0c, 0x24, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xfc, 0x17, 0x18, 0x38, 0x78, 0xc0, 0x28, 0x00, - 0xd0, 0x0f, 0x23, 0x7d, 0x00, 0xdb, 0x43, 0x58, - 0x22, 0x03, 0x1c, 0x21, 0xf0, 0x01, 0xf8, 0x77, - 0x28, 0x00, 0xdd, 0x06, 0x00, 0x61, 0x4a, 0x07, - 0x18, 0x89, 0x31, 0xff, 0x31, 0xff, 0x31, 0x02, - 0x84, 0xc8, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x08, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7e, 0xa8, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x21, 0x9f, - 0x4a, 0x0b, 0x70, 0x11, 0x21, 0x84, 0x70, 0x51, - 0x21, 0x41, 0x70, 0x91, 0x49, 0x09, 0x68, 0x09, - 0x0a, 0x0b, 0x70, 0xd3, 0x71, 0x11, 0x49, 0x08, - 0x68, 0x09, 0x0c, 0x0b, 0x71, 0x53, 0x0a, 0x0b, - 0x71, 0x93, 0x71, 0xd1, 0x21, 0x08, 0xf0, 0x00, - 0xff, 0xbb, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x1a, 0xd8, - 0x2e, 0x08, 0x1a, 0xd4, 0xb5, 0x80, 0x04, 0x00, - 0x0c, 0x00, 0x21, 0x9f, 0x4a, 0x07, 0x70, 0x11, - 0x21, 0x80, 0x70, 0x51, 0x21, 0x30, 0x70, 0x91, - 0x27, 0x00, 0x70, 0xd7, 0x21, 0x04, 0xf0, 0x00, - 0xff, 0xa3, 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0x90, 0x04, 0x07, 0x0c, 0x3f, 0xb0, 0x81, - 0x1c, 0xc8, 0x46, 0x69, 0xf0, 0x00, 0xfb, 0xb8, - 0x00, 0xf8, 0x49, 0x19, 0x18, 0x40, 0x88, 0xc2, - 0x20, 0x00, 0x49, 0x18, 0x00, 0xc3, 0x1a, 0x1b, - 0x00, 0x9b, 0x18, 0x5b, 0x78, 0xdb, 0x42, 0x93, - 0xd1, 0x07, 0x00, 0xc2, 0x1a, 0x12, 0x00, 0x92, - 0x5a, 0x89, 0x31, 0x01, 0x4a, 0x12, 0x70, 0x91, - 0xe0, 0x04, 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, - 0x28, 0x08, 0xdb, 0xeb, 0x01, 0x00, 0x49, 0x0f, - 0x18, 0x47, 0x68, 0xb8, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xfe, 0x3e, 0x24, 0x00, 0x81, 0xbc, - 0xa8, 0x00, 0x88, 0x00, 0xf7, 0xff, 0xfe, 0x12, - 0x60, 0xb8, 0x28, 0x00, 0xd0, 0x03, 0xa8, 0x00, - 0x88, 0x00, 0x08, 0x40, 0x81, 0xb8, 0x1c, 0x20, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x7a, 0x60, 0x2e, 0x08, 0x56, 0xe0, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7e, 0x88, - 0xb5, 0x80, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x08, - 0x0c, 0x00, 0xf0, 0x02, 0xfc, 0xe9, 0x28, 0x00, - 0xd0, 0x0c, 0x68, 0x82, 0x2a, 0x00, 0xd0, 0x09, - 0x89, 0x81, 0x29, 0x00, 0xd0, 0x06, 0x1c, 0x38, - 0xf0, 0x00, 0xff, 0x46, 0x20, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0x90, 0x04, 0x04, 0x0c, 0x24, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xfb, 0x57, 0x18, 0x3f, 0x78, 0xf8, 0x28, 0x00, - 0xd0, 0x0d, 0x28, 0x01, 0xd1, 0x16, 0x1c, 0x20, - 0xf0, 0x00, 0xfc, 0x16, 0x79, 0x38, 0x23, 0x7d, - 0x00, 0xdb, 0x43, 0x58, 0x22, 0x01, 0x1c, 0x21, - 0xf0, 0x00, 0xff, 0xb1, 0xe0, 0x08, 0x1c, 0x20, - 0xf0, 0x00, 0xfc, 0x0a, 0x21, 0x09, 0x48, 0x06, - 0x70, 0x01, 0x21, 0x20, 0xf7, 0xff, 0xfc, 0xec, - 0x20, 0x00, 0xe0, 0x01, 0x20, 0x00, 0x43, 0xc0, - 0xb0, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0x90, 0x04, 0x04, - 0x0c, 0x24, 0xb0, 0x81, 0x1c, 0xc8, 0x1c, 0x0f, - 0x46, 0x69, 0xf0, 0x00, 0xfb, 0x29, 0x1c, 0x02, - 0x18, 0x38, 0x78, 0xc0, 0x28, 0x01, 0xd1, 0x04, - 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x00, 0xf8, 0x0a, - 0xe0, 0x03, 0x21, 0xf0, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x31, 0x20, 0x00, 0xb0, 0x01, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x04, 0x12, 0x14, 0x12, 0x18, 0x89, - 0x79, 0x0a, 0x2a, 0x00, 0xdd, 0x13, 0x2a, 0x03, - 0xdc, 0x11, 0x49, 0x0c, 0x70, 0x0a, 0x23, 0x9f, - 0x4a, 0x0b, 0x70, 0x13, 0x23, 0x88, 0x70, 0x53, - 0x23, 0x02, 0x70, 0x93, 0x70, 0xd3, 0x23, 0x01, - 0x71, 0x13, 0x78, 0x09, 0x71, 0x51, 0x21, 0x06, - 0xf0, 0x00, 0xfe, 0xd6, 0xe0, 0x02, 0x21, 0xf1, - 0xf0, 0x00, 0xf8, 0x0c, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x70, - 0x2e, 0x08, 0x72, 0x60, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0xb5, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0x23, 0x9f, 0x4a, 0x07, 0x70, 0x13, - 0x23, 0x88, 0x70, 0x53, 0x23, 0x02, 0x70, 0x93, - 0x23, 0x01, 0x70, 0xd3, 0x71, 0x11, 0x21, 0x05, - 0xf0, 0x00, 0xfe, 0xb6, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0xf3, 0xb0, 0x82, 0x4d, 0x1f, 0x78, 0x28, - 0x28, 0x0f, 0xd1, 0x2a, 0x99, 0x03, 0x1c, 0xc8, - 0xa9, 0x01, 0xf0, 0x00, 0xfa, 0xc9, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x00, 0x1d, 0xec, 0x34, 0xf9, - 0x88, 0xe1, 0xa8, 0x01, 0x88, 0x00, 0x18, 0x08, - 0x04, 0x06, 0x0c, 0x36, 0x68, 0xa0, 0x1c, 0x32, - 0xf7, 0xff, 0xfd, 0x41, 0x1c, 0x07, 0xd1, 0x01, - 0x43, 0xf8, 0xe0, 0x1d, 0x98, 0x00, 0x99, 0x03, - 0x18, 0x08, 0x1c, 0xc1, 0x88, 0xe0, 0x19, 0xc0, - 0xaa, 0x01, 0x88, 0x12, 0xf0, 0x12, 0xfc, 0x4e, - 0x1f, 0xb0, 0x04, 0x00, 0x0c, 0x00, 0x12, 0x01, - 0x71, 0x39, 0x71, 0x78, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0x4b, 0x21, 0x04, 0x48, 0x08, 0x70, 0x01, - 0x27, 0x00, 0x70, 0x47, 0x70, 0x87, 0x21, 0x03, - 0xf7, 0xff, 0xfc, 0x4a, 0x70, 0x2f, 0x1c, 0x38, - 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0xf0, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xfa, 0x87, 0x04, 0x05, 0x0c, 0x2d, 0x4e, 0x23, - 0x78, 0x30, 0x1d, 0xf4, 0x34, 0xf9, 0x28, 0x0f, - 0xd0, 0x23, 0xa8, 0x00, 0x88, 0x00, 0x30, 0x06, - 0xf7, 0xff, 0xfc, 0xfc, 0x60, 0xa0, 0x1c, 0x02, - 0xd0, 0x18, 0x19, 0x78, 0x1c, 0xc1, 0x1d, 0x90, - 0xaa, 0x00, 0x88, 0x12, 0xf0, 0x12, 0xfc, 0x12, - 0x20, 0x9f, 0x68, 0xa1, 0x70, 0x08, 0x20, 0x88, - 0x68, 0xa1, 0x70, 0x48, 0x20, 0x03, 0x68, 0xa1, - 0x70, 0x88, 0x20, 0x82, 0x68, 0xa1, 0x70, 0xc8, - 0x20, 0x0f, 0x70, 0x30, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x06, 0xe0, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x17, 0x88, 0xe1, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x0a, 0x68, 0xa0, 0xf7, 0xff, 0xfc, 0xdb, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xf2, 0x88, 0xe1, - 0x18, 0x40, 0x19, 0x79, 0xaa, 0x00, 0x88, 0x12, - 0x31, 0x03, 0xf0, 0x12, 0xfb, 0xeb, 0x88, 0xe0, - 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, 0x80, 0xe0, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0xf0, 0x1c, 0x0f, 0x04, 0x01, 0x0c, 0x09, - 0xb0, 0x81, 0x91, 0x00, 0xb0, 0x81, 0x46, 0x69, - 0x1c, 0xf8, 0xf0, 0x00, 0xfa, 0x2d, 0x1c, 0x02, - 0x18, 0x38, 0x78, 0xc1, 0x07, 0xc9, 0x0f, 0xc9, - 0x79, 0x04, 0x23, 0x05, 0x48, 0x16, 0x70, 0x03, - 0x70, 0x41, 0x70, 0x84, 0x21, 0x00, 0xab, 0x00, - 0x88, 0x1b, 0x3b, 0x02, 0x2b, 0x00, 0xdd, 0x09, - 0x18, 0x55, 0x19, 0xed, 0x79, 0x6d, 0x18, 0x46, - 0x70, 0xf5, 0x31, 0x01, 0x04, 0x09, 0x14, 0x09, - 0x42, 0x8b, 0xdc, 0xf5, 0x27, 0x00, 0xa9, 0x00, - 0x88, 0x09, 0x18, 0x41, 0x70, 0x4f, 0xa9, 0x00, - 0x88, 0x09, 0x31, 0x02, 0xf7, 0xff, 0xfb, 0xb8, - 0x23, 0x05, 0x48, 0x08, 0x70, 0x03, 0x21, 0x01, - 0x70, 0x41, 0x30, 0xff, 0x30, 0x01, 0x99, 0x01, - 0x80, 0x41, 0x80, 0x84, 0x80, 0xc7, 0x1c, 0x38, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7d, 0x7c, - 0xb5, 0xb0, 0x21, 0x9f, 0x4f, 0x1e, 0x70, 0x39, - 0x21, 0x88, 0x70, 0x79, 0x21, 0x08, 0x70, 0xb9, - 0x1d, 0xc2, 0x32, 0xf9, 0x88, 0xd1, 0x18, 0x09, - 0x78, 0x4b, 0x21, 0x01, 0x24, 0x00, 0x2b, 0x0b, - 0xd1, 0x05, 0x70, 0xf9, 0x71, 0x3c, 0x88, 0x50, - 0x21, 0x05, 0x1c, 0x3a, 0xe0, 0x17, 0x23, 0x81, - 0x70, 0xfb, 0x88, 0xd3, 0x33, 0x01, 0x71, 0x3b, - 0x71, 0x79, 0x21, 0x00, 0x88, 0xd3, 0x2b, 0x00, - 0xdd, 0x09, 0x18, 0x43, 0x78, 0x9b, 0x18, 0x7d, - 0x71, 0xab, 0x31, 0x01, 0x04, 0x09, 0x14, 0x09, - 0x88, 0xd3, 0x42, 0x8b, 0xdc, 0xf5, 0x88, 0xd0, - 0x1d, 0x81, 0x88, 0x50, 0x1c, 0x3a, 0xf0, 0x00, - 0xfd, 0x9f, 0x22, 0x20, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x12, 0xfc, 0x58, 0x20, 0x06, 0x70, 0x38, - 0x21, 0x20, 0x1c, 0x38, 0xf7, 0xff, 0xfb, 0x68, - 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0xf0, 0x1c, 0x0f, - 0x04, 0x01, 0x0c, 0x09, 0xb0, 0x83, 0x91, 0x00, - 0xb0, 0x84, 0x49, 0x2f, 0x91, 0x06, 0x78, 0x08, - 0x4e, 0x2e, 0x1c, 0xf1, 0x91, 0x05, 0x4d, 0x2e, - 0x28, 0x08, 0xd1, 0x34, 0x1c, 0xf8, 0xa9, 0x02, - 0xf0, 0x00, 0xf9, 0x9e, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x01, 0x88, 0xe9, 0xa8, 0x02, 0x88, 0x00, - 0x18, 0x08, 0x04, 0x02, 0x0c, 0x12, 0x92, 0x00, - 0x68, 0xa8, 0xf7, 0xff, 0xfc, 0x18, 0x1c, 0x04, - 0xd1, 0x02, 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x3a, - 0x98, 0x01, 0x18, 0x38, 0x1c, 0xc1, 0x88, 0xe8, - 0x19, 0x00, 0xaa, 0x02, 0x88, 0x12, 0xf0, 0x12, - 0xfb, 0x25, 0x9a, 0x00, 0x1f, 0x90, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x21, 0x71, 0x60, - 0x98, 0x05, 0x1c, 0x21, 0xaa, 0x03, 0xf0, 0x00, - 0xf9, 0xcd, 0x1c, 0x07, 0xd5, 0x03, 0x1c, 0x20, - 0xf7, 0xff, 0xfc, 0x1a, 0xe7, 0xe1, 0x1c, 0x20, - 0xf7, 0xff, 0xfc, 0x16, 0xe0, 0x06, 0x98, 0x05, - 0x1c, 0x39, 0xaa, 0x03, 0xf0, 0x00, 0xf9, 0xbe, - 0x1c, 0x07, 0xd4, 0xd6, 0x24, 0x02, 0x70, 0x34, - 0x12, 0x38, 0x70, 0x70, 0x70, 0xb7, 0xa8, 0x03, - 0x88, 0x00, 0x1c, 0xc1, 0x1c, 0x30, 0xf7, 0xff, - 0xfb, 0x0b, 0x99, 0x06, 0x70, 0x0c, 0x20, 0x01, - 0x99, 0x06, 0x70, 0x48, 0x99, 0x04, 0x80, 0x69, - 0x80, 0xa8, 0x21, 0x00, 0x80, 0xe9, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7d, 0x7c, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0x7c, 0xb5, 0xf0, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xf9, 0x3f, 0x04, 0x05, 0x0c, 0x2d, 0x4e, 0x23, - 0x78, 0x30, 0x1d, 0xf4, 0x34, 0xf9, 0x28, 0x08, - 0xd0, 0x23, 0xa8, 0x00, 0x88, 0x00, 0x30, 0x06, - 0xf7, 0xff, 0xfb, 0xb4, 0x60, 0xa0, 0x1c, 0x02, - 0xd0, 0x18, 0x19, 0x78, 0x1c, 0xc1, 0x1d, 0x90, - 0xaa, 0x00, 0x88, 0x12, 0xf0, 0x12, 0xfa, 0xca, - 0x20, 0x9f, 0x68, 0xa1, 0x70, 0x08, 0x20, 0x88, - 0x68, 0xa1, 0x70, 0x48, 0x20, 0x09, 0x68, 0xa1, - 0x70, 0x88, 0x20, 0x82, 0x68, 0xa1, 0x70, 0xc8, - 0x20, 0x08, 0x70, 0x30, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x06, 0xe0, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x17, 0x88, 0xe1, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x0a, 0x68, 0xa0, 0xf7, 0xff, 0xfb, 0x93, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xf2, 0x88, 0xe1, - 0x18, 0x40, 0x19, 0x79, 0xaa, 0x00, 0x88, 0x12, - 0x31, 0x03, 0xf0, 0x12, 0xfa, 0xa3, 0x88, 0xe0, - 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, 0x80, 0xe0, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0xb5, 0x80, 0x04, 0x00, 0x0c, 0x00, 0x22, 0x9f, - 0x4f, 0x0d, 0x70, 0x3a, 0x22, 0x88, 0x70, 0x7a, - 0x22, 0x0b, 0x70, 0xba, 0x22, 0x01, 0x70, 0xfa, - 0x71, 0x39, 0x21, 0x05, 0x1c, 0x3a, 0xf0, 0x00, - 0xfc, 0xbf, 0x22, 0x20, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x12, 0xfb, 0x78, 0x20, 0x06, 0x70, 0x38, - 0x21, 0x20, 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0x88, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x72, 0x60, 0xb5, 0xf0, 0x1c, 0x0f, - 0x04, 0x01, 0x0c, 0x09, 0xb0, 0x83, 0x91, 0x00, - 0xb0, 0x84, 0x49, 0x2f, 0x91, 0x06, 0x78, 0x08, - 0x4e, 0x2e, 0x1c, 0xf1, 0x91, 0x05, 0x4d, 0x2e, - 0x28, 0x07, 0xd1, 0x34, 0x1c, 0xf8, 0xa9, 0x02, - 0xf0, 0x00, 0xf8, 0xbe, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x01, 0x88, 0xe9, 0xa8, 0x02, 0x88, 0x00, - 0x18, 0x08, 0x04, 0x02, 0x0c, 0x12, 0x92, 0x00, - 0x68, 0xa8, 0xf7, 0xff, 0xfb, 0x38, 0x1c, 0x04, - 0xd1, 0x02, 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x3a, - 0x98, 0x01, 0x18, 0x38, 0x1c, 0xc1, 0x88, 0xe8, - 0x19, 0x00, 0xaa, 0x02, 0x88, 0x12, 0xf0, 0x12, - 0xfa, 0x45, 0x9a, 0x00, 0x1f, 0x90, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x21, 0x71, 0x60, - 0x98, 0x05, 0x1c, 0x21, 0xaa, 0x03, 0xf0, 0x00, - 0xf8, 0xed, 0x1c, 0x07, 0xd5, 0x03, 0x1c, 0x20, - 0xf7, 0xff, 0xfb, 0x3a, 0xe7, 0xe1, 0x1c, 0x20, - 0xf7, 0xff, 0xfb, 0x36, 0xe0, 0x06, 0x98, 0x05, - 0x1c, 0x39, 0xaa, 0x03, 0xf0, 0x00, 0xf8, 0xde, - 0x1c, 0x07, 0xd4, 0xd6, 0x24, 0x03, 0x70, 0x34, - 0x12, 0x38, 0x70, 0x70, 0x70, 0xb7, 0xa8, 0x03, - 0x88, 0x00, 0x19, 0x01, 0x1c, 0x30, 0xf7, 0xff, - 0xfa, 0x2b, 0x99, 0x06, 0x70, 0x0c, 0x20, 0x01, - 0x99, 0x06, 0x70, 0x48, 0x99, 0x04, 0x80, 0x69, - 0x80, 0xa8, 0x21, 0x00, 0x80, 0xe9, 0xb0, 0x07, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7d, 0x7c, 0x2e, 0x08, 0x72, 0x60, - 0x2e, 0x08, 0x7e, 0x7c, 0xb5, 0xf0, 0xb0, 0x81, - 0x1c, 0xc8, 0x1c, 0x0f, 0x46, 0x69, 0xf0, 0x00, - 0xf8, 0x5f, 0x04, 0x05, 0x0c, 0x2d, 0x4e, 0x23, - 0x78, 0x30, 0x1d, 0xf4, 0x34, 0xf9, 0x28, 0x07, - 0xd0, 0x23, 0xa8, 0x00, 0x88, 0x00, 0x30, 0x06, - 0xf7, 0xff, 0xfa, 0xd4, 0x60, 0xa0, 0x1c, 0x02, - 0xd0, 0x18, 0x19, 0x78, 0x1c, 0xc1, 0x1d, 0x90, - 0xaa, 0x00, 0x88, 0x12, 0xf0, 0x12, 0xf9, 0xea, - 0x20, 0x9f, 0x68, 0xa1, 0x70, 0x08, 0x20, 0x88, - 0x68, 0xa1, 0x70, 0x48, 0x20, 0x0c, 0x68, 0xa1, - 0x70, 0x88, 0x20, 0x82, 0x68, 0xa1, 0x70, 0xc8, - 0x20, 0x07, 0x70, 0x30, 0xa8, 0x00, 0x88, 0x00, - 0x30, 0x06, 0xe0, 0x18, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x17, 0x88, 0xe1, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x0a, 0x68, 0xa0, 0xf7, 0xff, 0xfa, 0xb3, - 0x60, 0xa0, 0x28, 0x00, 0xd0, 0xf2, 0x88, 0xe1, - 0x18, 0x40, 0x19, 0x79, 0xaa, 0x00, 0x88, 0x12, - 0x31, 0x03, 0xf0, 0x12, 0xf9, 0xc3, 0x88, 0xe0, - 0xa9, 0x00, 0x88, 0x09, 0x18, 0x40, 0x80, 0xe0, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7d, 0x7c, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0xb4, 0xb0, 0x24, 0x01, 0x22, 0x00, 0x78, 0x07, - 0x0a, 0x3b, 0xd3, 0x15, 0x23, 0x00, 0x06, 0x7c, - 0x0e, 0x64, 0x2c, 0x00, 0xdd, 0x0a, 0x02, 0x12, - 0x04, 0x12, 0x0c, 0x12, 0x18, 0xc5, 0x78, 0x6d, - 0x43, 0x2a, 0x04, 0x12, 0x0c, 0x12, 0x33, 0x01, - 0x42, 0x9c, 0xdc, 0xf4, 0x1c, 0x78, 0x06, 0x40, - 0x0e, 0x40, 0x04, 0x04, 0x14, 0x24, 0xe0, 0x01, - 0x06, 0x7a, 0x0e, 0x52, 0x80, 0x0a, 0x1c, 0x20, - 0xbc, 0xb0, 0x47, 0x70, 0xb5, 0xf0, 0x04, 0x16, - 0x0c, 0x36, 0x1c, 0x07, 0x78, 0x00, 0x04, 0x00, - 0x1c, 0x0c, 0x78, 0x79, 0x02, 0x09, 0x43, 0x08, - 0x78, 0xb9, 0x43, 0x08, 0xb0, 0x81, 0x4b, 0x12, - 0x42, 0x98, 0xd1, 0x09, 0x46, 0x69, 0x1c, 0xf8, - 0xf7, 0xff, 0xff, 0xca, 0x1c, 0x05, 0xa8, 0x00, - 0x88, 0x00, 0x30, 0x02, 0x42, 0xb0, 0xdd, 0x02, - 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x10, 0x19, 0x78, - 0xaa, 0x00, 0x88, 0x12, 0x1c, 0xc1, 0x1c, 0x20, - 0xf0, 0x12, 0xf9, 0x5c, 0xa8, 0x00, 0x88, 0x00, - 0x18, 0x28, 0x30, 0x03, 0x04, 0x00, 0x14, 0x00, - 0x21, 0x00, 0xaa, 0x00, 0x88, 0x12, 0x54, 0xa1, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x9f, 0x88, 0x03, 0xb5, 0xf7, 0x1c, 0x07, - 0x20, 0x00, 0xb0, 0x85, 0x90, 0x02, 0x26, 0x00, - 0x99, 0x06, 0x1c, 0xc8, 0xa9, 0x04, 0xf7, 0xff, - 0xff, 0x9f, 0xa9, 0x04, 0x88, 0x09, 0x1c, 0x04, - 0x43, 0xf0, 0x02, 0xc3, 0x42, 0xd9, 0xd2, 0x58, - 0x21, 0x00, 0x91, 0x03, 0x4d, 0x2d, 0x99, 0x06, - 0x19, 0x08, 0x22, 0x01, 0x02, 0xd2, 0x30, 0x04, - 0x1c, 0x29, 0xf7, 0xff, 0xff, 0xaf, 0x90, 0x01, - 0x23, 0x01, 0x42, 0xd8, 0xd0, 0x1c, 0x1c, 0x28, - 0xf0, 0x12, 0xf9, 0x98, 0x90, 0x00, 0x1c, 0x42, - 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x12, 0xf9, 0x22, - 0x98, 0x00, 0x18, 0x38, 0x1c, 0x47, 0x98, 0x00, - 0x18, 0x30, 0x1c, 0x46, 0x98, 0x01, 0x18, 0x24, - 0x98, 0x03, 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x03, 0x28, 0x03, 0xdb, 0xdb, 0xa8, 0x04, - 0x88, 0x00, 0x42, 0x84, 0xda, 0x27, 0xe0, 0x02, - 0x20, 0x00, 0x43, 0xc0, 0xe0, 0x29, 0x99, 0x06, - 0x19, 0x08, 0x22, 0x01, 0x02, 0xd2, 0x30, 0x04, - 0x1c, 0x29, 0xf7, 0xff, 0xff, 0x83, 0x90, 0x01, - 0x23, 0x01, 0x42, 0xd8, 0xd0, 0xf0, 0x1c, 0x28, - 0xf0, 0x12, 0xf9, 0x6c, 0x90, 0x00, 0x1c, 0x42, - 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x12, 0xf8, 0xf6, - 0x98, 0x00, 0x18, 0x38, 0x1c, 0x47, 0x98, 0x00, - 0x18, 0x30, 0x1c, 0x46, 0x98, 0x01, 0x18, 0x24, - 0x98, 0x02, 0x30, 0x01, 0x90, 0x02, 0xa8, 0x04, - 0x88, 0x00, 0x42, 0x84, 0xdb, 0xdb, 0x9a, 0x07, - 0x80, 0x16, 0x98, 0x02, 0x30, 0x03, 0x04, 0x00, - 0x14, 0x00, 0xb0, 0x05, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x6a, 0x60, - 0xb5, 0x00, 0x04, 0x01, 0x0c, 0x09, 0x20, 0x54, - 0xb0, 0x84, 0xab, 0x00, 0x70, 0x18, 0x22, 0x46, - 0x70, 0x5a, 0x22, 0x04, 0x80, 0x5a, 0x80, 0x99, - 0x46, 0x69, 0xf7, 0xff, 0xf8, 0xf5, 0xb0, 0x04, - 0xbc, 0x08, 0x47, 0x18, 0x47, 0x70, 0x00, 0x00, - 0xb5, 0x00, 0x78, 0x01, 0x48, 0x0c, 0x70, 0x01, - 0x78, 0x00, 0x28, 0x01, 0xd0, 0x03, 0x28, 0x02, - 0xd0, 0x01, 0x28, 0x03, 0xd1, 0x0b, 0x48, 0x09, - 0xca, 0x08, 0xc0, 0x08, 0xca, 0x08, 0xc0, 0x08, - 0xca, 0x0c, 0xc0, 0x0c, 0xf0, 0x00, 0xf8, 0x67, - 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0xa8, 0x2e, 0x08, 0x7b, 0x60, - 0xb5, 0x80, 0x20, 0x00, 0x27, 0x00, 0x4a, 0x1f, - 0x01, 0x03, 0x54, 0xd7, 0x18, 0x9b, 0x60, 0x5f, - 0x60, 0x9f, 0x81, 0x9f, 0x30, 0x01, 0x28, 0x02, - 0xdb, 0xf6, 0x48, 0x1b, 0x70, 0x07, 0x49, 0x1b, - 0x48, 0x1b, 0x60, 0x01, 0x49, 0x1b, 0x1d, 0xc2, - 0x32, 0x79, 0x60, 0x91, 0x49, 0x1a, 0x1d, 0xc2, - 0x32, 0xf9, 0x61, 0x11, 0x49, 0x19, 0x23, 0x05, - 0x01, 0xdb, 0x18, 0xc2, 0x23, 0x03, 0x02, 0x1b, - 0x62, 0x91, 0x18, 0xc1, 0x63, 0x0f, 0x49, 0x16, - 0x1d, 0xc2, 0x32, 0xff, 0x32, 0xfa, 0x30, 0xff, - 0x30, 0x81, 0x62, 0x11, 0x61, 0x87, 0x20, 0x05, - 0xf7, 0xff, 0xf9, 0x94, 0x28, 0x00, 0xda, 0x03, - 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x49, 0x0e, 0x00, 0xc2, 0x52, 0x8f, - 0x30, 0x01, 0x28, 0x40, 0xdb, 0xfa, 0x48, 0x0c, - 0x70, 0x47, 0x20, 0x01, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7e, 0x88, - 0x2e, 0x08, 0x1a, 0xa8, 0x00, 0x01, 0x00, 0x41, - 0x2e, 0x08, 0x7e, 0xa8, 0x00, 0x02, 0x00, 0x41, - 0x00, 0x03, 0x00, 0x41, 0x00, 0x40, 0x00, 0x41, - 0x00, 0x24, 0x00, 0x41, 0x2e, 0x08, 0x7b, 0x70, - 0x2e, 0x08, 0x7d, 0x7c, 0xb5, 0x00, 0xf7, 0xff, - 0xf8, 0x25, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0xb0, 0x83, 0x48, 0xda, 0x90, 0x02, 0x78, 0x00, - 0x21, 0x00, 0x4a, 0xd9, 0x4c, 0xd9, 0x4f, 0xda, - 0x28, 0x01, 0xd1, 0x71, 0x78, 0x78, 0x38, 0x41, - 0x4d, 0xd8, 0x4e, 0xd9, 0x4b, 0xd9, 0x93, 0x01, - 0x28, 0x0b, 0xd2, 0x6a, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0xc9, 0x8e, 0xc9, 0xde, - 0xdd, 0xc9, 0x67, 0xc9, 0x3b, 0x2b, 0x05, 0x00, - 0x88, 0xb8, 0x06, 0x00, 0x0e, 0x00, 0x01, 0x00, - 0x9b, 0x01, 0x54, 0x19, 0x9b, 0x01, 0x18, 0xc0, - 0x68, 0x40, 0x1c, 0x0c, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xf9, 0x26, 0x88, 0xb8, 0x06, 0x00, - 0x0e, 0x00, 0x01, 0x00, 0x9b, 0x01, 0x18, 0xc0, - 0x60, 0x44, 0x68, 0x80, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xf9, 0x1a, 0x88, 0xb8, 0x06, 0x00, - 0x0e, 0x00, 0x01, 0x01, 0x9b, 0x01, 0x18, 0xc9, - 0x22, 0x01, 0x60, 0x8c, 0x70, 0x32, 0x70, 0x74, - 0x18, 0x80, 0xe0, 0x09, 0x20, 0x01, 0x88, 0xb9, - 0x06, 0x09, 0x0e, 0x09, 0x01, 0x0a, 0x9b, 0x01, - 0x54, 0x98, 0x70, 0x30, 0x70, 0x70, 0x18, 0x08, - 0x70, 0xb0, 0x21, 0x20, 0x1c, 0x30, 0xf7, 0xff, - 0xf8, 0x07, 0xe0, 0x8d, 0x26, 0x00, 0x00, 0xf1, - 0x19, 0x08, 0x88, 0xc2, 0x79, 0x3b, 0x42, 0x9a, - 0xd1, 0x1e, 0x22, 0x00, 0x80, 0xc2, 0x58, 0x60, - 0xf0, 0x00, 0xfa, 0x86, 0x23, 0x01, 0x42, 0xd8, - 0xd0, 0x16, 0x01, 0x01, 0x18, 0x09, 0x00, 0xc9, - 0x19, 0x49, 0x88, 0x8a, 0x2a, 0x00, 0xd0, 0x01, - 0x3a, 0x01, 0x80, 0x8a, 0x28, 0x04, 0xd1, 0x0b, - 0x00, 0x70, 0x19, 0x40, 0x30, 0xff, 0x30, 0xff, - 0x30, 0x02, 0x90, 0x00, 0x8c, 0xc0, 0xf0, 0x00, - 0xfa, 0xcb, 0x22, 0x00, 0x98, 0x00, 0x84, 0xc2, - 0x36, 0x01, 0x2e, 0x20, 0xdb, 0xd7, 0xe0, 0x63, - 0xe0, 0x9c, 0xe0, 0x74, 0x88, 0xb8, 0x00, 0xc0, - 0x1c, 0x0e, 0x19, 0x01, 0x80, 0xce, 0x58, 0x20, - 0xf0, 0x00, 0xfa, 0x5e, 0x23, 0x01, 0x42, 0xd8, - 0xd0, 0x56, 0x01, 0x01, 0x18, 0x09, 0x00, 0xc9, - 0x19, 0x49, 0x88, 0x8a, 0x2a, 0x00, 0xd0, 0x01, - 0x3a, 0x01, 0x80, 0x8a, 0x28, 0x04, 0xd1, 0x5e, - 0x88, 0xb8, 0x00, 0x40, 0x19, 0x40, 0x30, 0xff, - 0x30, 0xff, 0x30, 0x02, 0x8c, 0xc0, 0xf0, 0x00, - 0xfa, 0xa3, 0x88, 0xb8, 0x00, 0x40, 0x19, 0x40, - 0x30, 0xff, 0x30, 0xff, 0x30, 0x02, 0x84, 0xc6, - 0xe0, 0xb6, 0x7a, 0x38, 0x06, 0x00, 0x7a, 0x79, - 0x04, 0x09, 0x43, 0x08, 0x7a, 0xb9, 0x02, 0x09, - 0x43, 0x08, 0x7a, 0xf9, 0x43, 0x08, 0x4b, 0x8a, - 0x42, 0x98, 0xd0, 0x43, 0xdc, 0x0d, 0x49, 0x89, - 0x42, 0x88, 0xd0, 0x19, 0x42, 0x90, 0xd0, 0x1b, - 0x49, 0x87, 0x42, 0x88, 0xd1, 0x3a, 0x1d, 0xe8, - 0x30, 0xf9, 0x8a, 0x82, 0x32, 0x01, 0x82, 0x82, - 0xe0, 0x28, 0x49, 0x84, 0x42, 0x88, 0xd0, 0x1f, - 0x49, 0x83, 0x42, 0x88, 0xd1, 0x2e, 0x23, 0x05, - 0x01, 0xdb, 0x18, 0xe8, 0x8d, 0x82, 0x2a, 0x00, - 0xd1, 0x13, 0x22, 0x01, 0x85, 0x82, 0xe0, 0x19, - 0x88, 0xa8, 0x30, 0x01, 0x80, 0xa8, 0xe0, 0x15, - 0x1d, 0xe8, 0x30, 0x79, 0x89, 0x81, 0x31, 0x01, - 0x81, 0x81, 0x88, 0xf9, 0x00, 0xc8, 0x50, 0x22, - 0x79, 0x3a, 0x19, 0x00, 0x80, 0xc2, 0xe0, 0x10, - 0xe0, 0x7b, 0x88, 0xf9, 0x22, 0xf3, 0xe0, 0x13, - 0x1d, 0xe8, 0x30, 0xff, 0x30, 0xfa, 0x8c, 0x82, - 0x32, 0x01, 0x84, 0x82, 0x88, 0xfa, 0x00, 0xd0, - 0x50, 0x21, 0x79, 0x39, 0x19, 0x00, 0x80, 0xc1, - 0x1c, 0x11, 0x22, 0x00, 0xe0, 0x04, 0xe0, 0xbd, - 0xe0, 0x1b, 0xe0, 0x05, 0x88, 0xf9, 0x22, 0xf0, - 0x20, 0x00, 0xf0, 0x00, 0xf9, 0xc1, 0xe0, 0x5f, - 0x88, 0xb8, 0x00, 0xc1, 0x58, 0x61, 0x4b, 0x64, - 0x42, 0x99, 0xd0, 0x0b, 0xdc, 0x58, 0x4b, 0x61, - 0x42, 0x99, 0xd0, 0x04, 0x42, 0x91, 0xd1, 0x54, - 0xf7, 0xff, 0xf8, 0xf4, 0xe0, 0xa6, 0xf7, 0xff, - 0xf8, 0x8b, 0xe0, 0xa3, 0xf7, 0xff, 0xf9, 0xc2, - 0xe0, 0xa0, 0x68, 0xb9, 0x98, 0x02, 0x60, 0x41, - 0x88, 0xb8, 0xf0, 0x00, 0xf8, 0xbd, 0x98, 0x02, - 0x68, 0x40, 0xe0, 0x8f, 0x28, 0x03, 0xd1, 0x50, - 0x68, 0x78, 0x88, 0x3b, 0x06, 0x1e, 0x0e, 0x36, - 0x1c, 0x05, 0x2e, 0x06, 0xd0, 0x3f, 0xdc, 0x08, - 0x2e, 0x06, 0xd2, 0x58, 0xa3, 0x01, 0x5d, 0x9b, - 0x00, 0x5b, 0x44, 0x9f, 0x5b, 0x55, 0x3c, 0x12, - 0x61, 0x4d, 0x2e, 0x0a, 0xd0, 0x3e, 0xdc, 0x05, - 0x2e, 0x08, 0xd0, 0x36, 0x2e, 0x09, 0xd1, 0x57, - 0x26, 0x00, 0xe0, 0x56, 0x2e, 0x0b, 0xd0, 0x66, - 0x2e, 0xe0, 0xd1, 0x51, 0x48, 0x49, 0x70, 0x01, - 0xe0, 0x69, 0x49, 0x49, 0x78, 0x4a, 0x2a, 0x01, - 0xd1, 0x4a, 0x78, 0x03, 0x1d, 0xca, 0x32, 0xf9, - 0x88, 0xd7, 0x18, 0x7f, 0x70, 0xbb, 0x88, 0xd3, - 0x33, 0x01, 0x80, 0xd3, 0x88, 0xd3, 0x88, 0x97, - 0x42, 0xbb, 0xd0, 0x02, 0x78, 0x00, 0x28, 0x0b, - 0xd1, 0x3a, 0x78, 0x08, 0x28, 0x02, 0xd0, 0x09, - 0x28, 0x03, 0xd0, 0x07, 0x28, 0x05, 0xd1, 0x33, - 0x1c, 0x08, 0xf7, 0xff, 0xfb, 0x59, 0xe0, 0x4a, - 0xe0, 0x54, 0xe0, 0x53, 0x78, 0x89, 0x88, 0x50, - 0xf7, 0xff, 0xfc, 0x52, 0xe0, 0x43, 0x78, 0xb9, - 0xf0, 0x00, 0xff, 0x52, 0xe0, 0x3f, 0x20, 0x00, - 0xe0, 0x0b, 0x78, 0xb9, 0xf0, 0x00, 0xfa, 0x2a, - 0xe0, 0x39, 0xe0, 0x3e, 0x78, 0x01, 0x02, 0x09, - 0x78, 0x40, 0x43, 0x08, 0x49, 0x2f, 0x81, 0x48, - 0x20, 0x08, 0xf0, 0x00, 0xfe, 0xeb, 0xe0, 0x2e, - 0x78, 0x01, 0x02, 0x09, 0x78, 0x40, 0x43, 0x08, - 0xf0, 0x00, 0xfa, 0x45, 0xe0, 0x27, 0xe0, 0x26, - 0x78, 0xba, 0x1c, 0x01, 0x78, 0x00, 0xf0, 0x00, - 0xfa, 0x13, 0xe0, 0x20, 0x78, 0xba, 0x1c, 0x01, - 0x78, 0x00, 0xf0, 0x00, 0xfa, 0x22, 0xe0, 0x1a, - 0xe0, 0x19, 0x00, 0xf0, 0x58, 0x21, 0x4b, 0x14, - 0x42, 0x99, 0xd1, 0x0d, 0x19, 0x00, 0x88, 0xc0, - 0xf7, 0xfd, 0xfd, 0x9a, 0x68, 0x79, 0x78, 0x09, - 0x30, 0x01, 0x42, 0x88, 0xd1, 0x04, 0x1c, 0x30, - 0xf7, 0xff, 0xf8, 0xd4, 0xe0, 0x07, 0xe0, 0x03, - 0x36, 0x01, 0x2e, 0x20, 0xdb, 0xe9, 0xe0, 0x02, - 0x20, 0xff, 0xf0, 0x00, 0xfa, 0x6b, 0x2d, 0x00, - 0xd0, 0x08, 0x1c, 0x28, 0xf7, 0xfe, 0xff, 0xa4, - 0xe0, 0x04, 0x28, 0x02, 0xd1, 0x02, 0x88, 0x38, - 0xf0, 0x00, 0xf9, 0xac, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0xa8, - 0x00, 0x02, 0x00, 0x41, 0x2e, 0x08, 0x7a, 0x60, - 0x2e, 0x08, 0x7b, 0x60, 0x2e, 0x08, 0x7e, 0xa8, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7e, 0x88, - 0x00, 0x20, 0x00, 0x41, 0x00, 0x01, 0x00, 0x41, - 0x00, 0x03, 0x00, 0x41, 0x00, 0x24, 0x00, 0x41, - 0x00, 0x40, 0x00, 0x41, 0x2e, 0x08, 0x1a, 0x94, - 0x2e, 0x08, 0x7d, 0x7c, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0x90, 0x04, 0x04, 0x0c, 0x24, 0x78, 0x08, - 0x04, 0x00, 0x1c, 0x0f, 0x78, 0x49, 0x02, 0x09, - 0x43, 0x08, 0x78, 0xb9, 0x43, 0x08, 0x4b, 0x47, - 0x42, 0x98, 0xd0, 0x5d, 0xdc, 0x20, 0x4b, 0x46, - 0x42, 0x98, 0xd0, 0x5a, 0xdc, 0x0f, 0x4b, 0x45, - 0x42, 0x98, 0xd0, 0x41, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x37, 0x4b, 0x43, 0x42, 0x98, 0xd1, 0x5f, - 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, 0xf8, 0x20, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x4b, 0x3f, - 0x42, 0x98, 0xd0, 0x3e, 0x4b, 0x3e, 0x42, 0x98, - 0xd1, 0x52, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xf8, 0x87, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x4b, 0x3a, 0x42, 0x98, 0xd0, 0x50, 0xdc, 0x0f, - 0x4b, 0x39, 0x42, 0x98, 0xd0, 0x3d, 0x33, 0x06, - 0x42, 0x98, 0xd0, 0x42, 0x4b, 0x37, 0x42, 0x98, - 0xd1, 0x3e, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xfa, 0xe1, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x4b, 0x33, 0x42, 0x98, 0xd0, 0x16, 0x33, 0x01, - 0x42, 0x98, 0xd1, 0x31, 0x1c, 0x20, 0x1c, 0x39, - 0xf7, 0xff, 0xfc, 0x20, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xfe, - 0xff, 0x85, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x20, 0xf7, 0xfe, 0xff, 0x9d, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, - 0xf7, 0xff, 0xfb, 0xa0, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xf9, 0x09, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xe0, 0x00, 0xe0, 0x1c, 0x1c, 0x20, 0x1c, 0x39, - 0xf7, 0xff, 0xf9, 0x02, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xf9, 0x29, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xe0, 0x18, 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, - 0xfa, 0x1b, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, 0xfb, 0x06, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x11, - 0x89, 0x40, 0xf0, 0x00, 0xf9, 0x60, 0x1c, 0x20, - 0x1c, 0x39, 0xf7, 0xff, 0xf8, 0x81, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x9f, 0x88, 0x00, - 0x00, 0x9f, 0x80, 0x31, 0x00, 0x9f, 0x80, 0x10, - 0x00, 0x9f, 0x80, 0x21, 0x00, 0x9f, 0x80, 0x33, - 0x00, 0x9f, 0x84, 0x40, 0x00, 0x9f, 0x88, 0x0a, - 0x00, 0x9f, 0x88, 0x01, 0x00, 0x9f, 0x88, 0x09, - 0x00, 0x9f, 0x88, 0x0c, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xf0, 0x04, 0x06, 0x0c, 0x36, 0x04, 0x0d, - 0x0c, 0x2d, 0x1c, 0x28, 0x1c, 0x17, 0xf7, 0xfe, - 0xfe, 0x9d, 0x4c, 0x0d, 0x60, 0xa0, 0x28, 0x00, - 0xd1, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x54, 0x70, 0x21, 0x21, 0x45, 0x70, 0x61, - 0x21, 0x0c, 0x80, 0x61, 0x80, 0xa6, 0x81, 0xa5, - 0x1c, 0x39, 0x1c, 0x2a, 0xf0, 0x11, 0xfd, 0xaa, - 0x78, 0x20, 0x1c, 0x21, 0xf7, 0xfe, 0xfd, 0xd0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7b, 0x60, 0xb5, 0x00, 0x06, 0x02, - 0x0e, 0x12, 0x20, 0x54, 0x49, 0x05, 0x70, 0x08, - 0x23, 0x48, 0x70, 0x4b, 0x23, 0x04, 0x80, 0x4b, - 0x71, 0x0a, 0xf7, 0xfe, 0xfd, 0xbd, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7b, 0x60, - 0xb5, 0x90, 0x04, 0x0b, 0x0c, 0x1b, 0x27, 0x54, - 0x49, 0x07, 0x70, 0x0f, 0x24, 0x43, 0x70, 0x4c, - 0x24, 0x04, 0x80, 0x4c, 0x71, 0xc8, 0x80, 0x8b, - 0x71, 0x8a, 0x1c, 0x38, 0xf7, 0xfe, 0xfd, 0xa8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7b, 0x60, 0xb5, 0x00, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x54, 0x49, 0x05, 0x70, 0x08, - 0x23, 0x46, 0x70, 0x4b, 0x23, 0x04, 0x80, 0x4b, - 0x80, 0x8a, 0xf7, 0xfe, 0xfd, 0x95, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7b, 0x60, - 0x23, 0xff, 0x04, 0x1b, 0x40, 0x18, 0x23, 0x01, - 0x05, 0x5b, 0x42, 0x98, 0xd0, 0x1e, 0xdc, 0x0b, - 0x09, 0x5b, 0x42, 0x98, 0xd0, 0x16, 0x00, 0x5b, - 0x42, 0x98, 0xd0, 0x15, 0x23, 0x03, 0x04, 0x1b, - 0x42, 0x98, 0xd1, 0x19, 0x20, 0x02, 0x47, 0x70, - 0x23, 0x09, 0x04, 0x9b, 0x42, 0x98, 0xd0, 0x0f, - 0x23, 0x01, 0x05, 0x9b, 0x42, 0x98, 0xd0, 0x0d, - 0x23, 0x03, 0x05, 0x5b, 0x42, 0x98, 0xd1, 0x0b, - 0x20, 0x06, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x01, 0x47, 0x70, 0x20, 0x03, 0x47, 0x70, - 0x20, 0x04, 0x47, 0x70, 0x20, 0x05, 0x47, 0x70, - 0x20, 0x00, 0x43, 0xc0, 0x47, 0x70, 0xb5, 0xb0, - 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x0b, 0x0c, 0x1b, - 0x04, 0x14, 0x0c, 0x24, 0x22, 0x00, 0x20, 0x00, - 0x49, 0x10, 0x00, 0xc5, 0x5b, 0x4d, 0x2d, 0x00, - 0xd1, 0x08, 0x1c, 0x42, 0x04, 0x12, 0x0c, 0x12, - 0x00, 0xc0, 0x52, 0x0a, 0x18, 0x40, 0x80, 0x84, - 0x80, 0x43, 0xe0, 0x02, 0x30, 0x01, 0x28, 0x40, - 0xdd, 0xef, 0x2a, 0x00, 0xd0, 0x0a, 0x20, 0x05, - 0x04, 0x00, 0x43, 0x10, 0x1c, 0x39, 0xf7, 0xfe, - 0xfd, 0xa9, 0x04, 0x00, 0x0c, 0x00, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x7b, 0x70, - 0xb5, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x0b, 0x00, 0xc3, 0x5a, 0xcb, 0x42, 0x93, - 0xd1, 0x09, 0x27, 0x00, 0x00, 0xc0, 0x52, 0x0f, - 0x1c, 0x10, 0xf7, 0xfe, 0xfd, 0xc7, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x30, 0x01, - 0x28, 0x40, 0xdb, 0xee, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x7b, 0x70, 0xb5, 0xf0, 0x04, 0x06, - 0x0c, 0x36, 0x27, 0x00, 0x4c, 0x17, 0x00, 0xf8, - 0x5a, 0x20, 0x42, 0xb0, 0xd1, 0x1d, 0x00, 0xfd, - 0x19, 0x28, 0x88, 0x81, 0x29, 0x05, 0xd2, 0x10, - 0xa3, 0x01, 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, - 0x17, 0x02, 0x09, 0x10, 0x17, 0x00, 0x21, 0x09, - 0x48, 0x0f, 0x70, 0x01, 0x21, 0x20, 0xf7, 0xfe, - 0xfc, 0xdf, 0xe0, 0x02, 0x88, 0x40, 0xf0, 0x01, - 0xfc, 0xf9, 0x5b, 0x60, 0xf7, 0xff, 0xff, 0xc0, - 0xe0, 0x06, 0x88, 0x40, 0xf7, 0xfe, 0xff, 0x2c, - 0xe0, 0x02, 0x37, 0x01, 0x2f, 0x40, 0xdb, 0xda, - 0x2f, 0x40, 0xd1, 0x02, 0x1c, 0x30, 0xf7, 0xfe, - 0xfd, 0x89, 0x20, 0x00, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x7b, 0x70, - 0x2e, 0x08, 0x72, 0x60, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0x00, 0x06, 0x00, 0x0e, 0x00, 0x28, 0x05, - 0xd0, 0x0c, 0x28, 0x0a, 0xd0, 0x05, 0x28, 0x0b, - 0xd1, 0x08, 0x78, 0x48, 0x22, 0x10, 0x21, 0x0b, - 0xe0, 0x02, 0x78, 0x48, 0x22, 0x10, 0x21, 0x0a, - 0xf0, 0x01, 0xfc, 0x90, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x00, 0x06, 0x00, 0x0e, 0x00, - 0x28, 0x05, 0xd0, 0x06, 0x28, 0x0a, 0xd0, 0x07, - 0x28, 0x0b, 0xd1, 0x02, 0x78, 0x88, 0xf0, 0x01, - 0xfb, 0xaf, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x78, 0x48, 0x28, 0x01, 0xd0, 0xf9, 0x78, 0x88, - 0xf0, 0x01, 0xfb, 0xa4, 0xe7, 0xf5, 0xb5, 0xf0, - 0x4d, 0x22, 0x81, 0x68, 0x27, 0x00, 0x06, 0x38, - 0x0e, 0x00, 0xf0, 0x01, 0xfb, 0xc5, 0x28, 0x4e, - 0xd1, 0x02, 0x1c, 0x38, 0xf0, 0x01, 0xfb, 0x6c, - 0x1c, 0x78, 0x04, 0x07, 0x14, 0x3f, 0x2f, 0x14, - 0xdb, 0xf1, 0x89, 0x68, 0xf0, 0x01, 0xfc, 0xda, - 0x89, 0x68, 0xf0, 0x01, 0xfc, 0x41, 0x21, 0x0e, - 0x4f, 0x17, 0x28, 0x00, 0xd1, 0x02, 0x70, 0x39, - 0x20, 0x04, 0xe0, 0x1e, 0x20, 0x00, 0x24, 0x00, - 0x4e, 0x14, 0x00, 0xe1, 0x58, 0x71, 0x4b, 0x14, - 0x42, 0x99, 0xd1, 0x0e, 0x89, 0x69, 0x1c, 0x20, - 0xf7, 0xfe, 0xff, 0x3e, 0x28, 0x00, 0xd0, 0x07, - 0x21, 0x0e, 0x70, 0x39, 0x20, 0x00, 0x70, 0x78, - 0x21, 0x06, 0x1c, 0x38, 0xf7, 0xfe, 0xfc, 0x60, - 0x20, 0x01, 0x34, 0x01, 0x2c, 0x20, 0xdb, 0xe8, - 0x28, 0x00, 0xd1, 0x07, 0x21, 0x0e, 0x70, 0x39, - 0x20, 0x05, 0x70, 0x78, 0x21, 0x06, 0x1c, 0x38, - 0xf7, 0xfe, 0xfc, 0x52, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x72, 0x60, 0x2e, 0x08, 0x7a, 0x60, - 0x00, 0x03, 0x00, 0x41, 0xb5, 0xf0, 0x06, 0x00, - 0x0e, 0x00, 0x21, 0x00, 0xb0, 0x85, 0x91, 0x02, - 0x22, 0x02, 0x92, 0x01, 0x28, 0xff, 0xd0, 0x02, - 0x22, 0x01, 0x92, 0x01, 0x1c, 0x01, 0x9a, 0x01, - 0x2a, 0x00, 0xdd, 0x4d, 0x4a, 0x28, 0x92, 0x04, - 0x4f, 0x28, 0x20, 0x01, 0x70, 0x38, 0x01, 0x08, - 0x9a, 0x04, 0x5c, 0x12, 0x70, 0x7a, 0x31, 0x01, - 0x91, 0x03, 0x70, 0xb9, 0x21, 0x00, 0x91, 0x00, - 0x9a, 0x04, 0x18, 0x84, 0x89, 0xa0, 0x28, 0x00, - 0xd0, 0x16, 0x68, 0xa3, 0x2b, 0x00, 0xd0, 0x13, - 0x70, 0xf8, 0x28, 0x00, 0xdd, 0x0b, 0x00, 0x4a, - 0x5a, 0x9d, 0x0a, 0x2e, 0x19, 0xd5, 0x71, 0x2e, - 0x5a, 0x9a, 0x71, 0x6a, 0x31, 0x01, 0x06, 0x09, - 0x0e, 0x09, 0x42, 0x88, 0xdc, 0xf3, 0x00, 0x40, - 0x99, 0x00, 0x18, 0x40, 0x1c, 0x45, 0xe0, 0x02, - 0x20, 0x00, 0x70, 0xf8, 0x25, 0x01, 0x68, 0x60, - 0x28, 0x00, 0xd0, 0x0e, 0xf0, 0x11, 0xfc, 0x66, - 0x1c, 0x02, 0x19, 0x78, 0x68, 0x61, 0x30, 0x03, - 0xf0, 0x11, 0xfb, 0xf0, 0x68, 0x60, 0xf0, 0x11, - 0xfc, 0x5d, 0x19, 0x45, 0x20, 0x00, 0x19, 0x79, - 0x70, 0xc8, 0x1c, 0x38, 0x1d, 0x69, 0xf7, 0xfe, - 0xfb, 0xf3, 0x99, 0x03, 0x06, 0x09, 0x0e, 0x09, - 0x98, 0x02, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x02, 0x9a, 0x01, 0x42, 0x90, 0xdb, 0xb4, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x7e, 0x88, 0x2e, 0x08, 0x72, 0x60, - 0xb5, 0x80, 0x20, 0x00, 0x22, 0x00, 0x1c, 0x0f, - 0x49, 0x0a, 0x54, 0x0a, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x28, 0x02, 0xdb, 0xf9, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0xc6, 0x28, 0x01, 0xd1, 0x03, - 0x1c, 0x38, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb8, - 0xb5, 0xf0, 0x04, 0x0c, 0x0c, 0x24, 0x1c, 0x17, - 0xf0, 0x00, 0xf8, 0x8e, 0x4d, 0x0d, 0x69, 0x28, - 0x4b, 0x0d, 0x18, 0xc6, 0x20, 0x04, 0xf0, 0x00, - 0xf9, 0x65, 0x20, 0x00, 0x2c, 0x00, 0xdd, 0x0c, - 0x5c, 0x39, 0x80, 0x31, 0x23, 0x03, 0x07, 0x1b, - 0x69, 0x29, 0x18, 0xc9, 0x88, 0x09, 0x54, 0x39, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x42, 0xa0, - 0xdb, 0xf2, 0x1c, 0x20, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb0, - 0x30, 0x00, 0x40, 0x00, 0xb5, 0xf0, 0x1c, 0x0c, - 0x1c, 0x17, 0xb0, 0x83, 0xf0, 0x00, 0xf8, 0x68, - 0x4e, 0x13, 0x69, 0x30, 0x4b, 0x13, 0x18, 0xc5, - 0x20, 0x04, 0xf0, 0x00, 0xf9, 0x3f, 0x23, 0x03, - 0x07, 0x1b, 0x69, 0x30, 0x18, 0xc1, 0x20, 0x00, - 0x2c, 0x00, 0xdd, 0x0a, 0x88, 0x2a, 0x54, 0x3a, - 0x88, 0x0a, 0x54, 0x3a, 0x88, 0x0a, 0x54, 0x3a, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x42, 0xa0, - 0xdb, 0xf4, 0x46, 0x68, 0x90, 0x02, 0x20, 0x01, - 0xab, 0x01, 0x80, 0x18, 0x21, 0x04, 0xa8, 0x01, - 0xf0, 0x00, 0xf8, 0x9e, 0x1c, 0x20, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0xb0, 0x30, 0x00, 0x40, 0x00, - 0xb5, 0xb0, 0x25, 0x01, 0x1c, 0x0c, 0x1c, 0x17, - 0xf0, 0x00, 0xf8, 0x36, 0x48, 0x18, 0x2c, 0x08, - 0xd2, 0x2a, 0xa3, 0x02, 0x5d, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x26, 0x04, 0x06, 0x0c, - 0x12, 0x18, 0x1e, 0x23, 0x25, 0x00, 0xe0, 0x1f, - 0x61, 0x47, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf8, 0x31, 0xe0, 0x14, 0x61, 0x47, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x53, 0xe0, 0x0e, - 0x61, 0x87, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x00, - 0xf8, 0x6f, 0xe0, 0x08, 0x61, 0x87, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x00, 0xf8, 0x93, 0xe0, 0x02, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xb1, 0x1c, 0x05, - 0xe0, 0x02, 0x1c, 0x38, 0xf0, 0x00, 0xfa, 0x14, - 0x1c, 0x28, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xb0, 0x20, 0x00, 0x47, 0x70, - 0x49, 0x05, 0x68, 0xca, 0x42, 0x90, 0xd0, 0x06, - 0x60, 0xc8, 0x28, 0x00, 0xd1, 0x00, 0xe0, 0x01, - 0x20, 0x01, 0x03, 0x40, 0x61, 0x08, 0x47, 0x70, - 0x2e, 0x08, 0x1a, 0xb0, 0xb5, 0xb0, 0x1c, 0x07, - 0x88, 0x00, 0x4a, 0x10, 0x43, 0x02, 0x48, 0x10, - 0x69, 0x00, 0x43, 0x02, 0x25, 0x03, 0x07, 0x2d, - 0x43, 0x05, 0x1c, 0x08, 0x1c, 0x14, 0xf0, 0x00, - 0xf8, 0xc1, 0x20, 0x00, 0x88, 0x79, 0x29, 0x00, - 0xdd, 0x0a, 0x88, 0x21, 0x68, 0x7a, 0x54, 0x11, - 0x88, 0x29, 0x68, 0x7a, 0x54, 0x11, 0x88, 0x79, - 0x30, 0x01, 0x34, 0x02, 0x42, 0x81, 0xdc, 0xf4, - 0x30, 0x01, 0x81, 0x38, 0x20, 0x00, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x30, 0x00, 0x40, 0x00, - 0x2e, 0x08, 0x1a, 0xb0, 0xb5, 0x90, 0x1c, 0x07, - 0x88, 0x00, 0x4b, 0x0d, 0x18, 0xc0, 0x4a, 0x0d, - 0x69, 0x12, 0x18, 0x84, 0x1c, 0x08, 0xf0, 0x00, - 0xf8, 0x9d, 0x20, 0x00, 0x88, 0x79, 0x29, 0x00, - 0xdd, 0x07, 0x68, 0x79, 0x5c, 0x09, 0x80, 0x21, - 0x88, 0x79, 0x30, 0x01, 0x34, 0x02, 0x42, 0x81, - 0xdc, 0xf7, 0x20, 0x01, 0x81, 0x38, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x30, 0x00, 0x40, 0x00, 0x2e, 0x08, 0x1a, 0xb0, - 0xb5, 0xb0, 0x1c, 0x07, 0x88, 0x00, 0x07, 0xc2, - 0x0f, 0xd2, 0x4c, 0x0f, 0xd0, 0x04, 0x23, 0xfe, - 0x40, 0x18, 0x4b, 0x0e, 0x18, 0xc0, 0xe0, 0x01, - 0x4b, 0x0d, 0x18, 0xc0, 0x69, 0x22, 0x18, 0x85, - 0x1c, 0x08, 0xf0, 0x00, 0xf8, 0x73, 0x23, 0x03, - 0x07, 0x1b, 0x69, 0x20, 0x18, 0xc0, 0x88, 0x29, - 0x68, 0x7a, 0x70, 0x11, 0x88, 0x01, 0x68, 0x7a, - 0x70, 0x11, 0x88, 0x00, 0x68, 0x79, 0x70, 0x08, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xb0, 0x30, 0x00, 0x50, 0x00, - 0x30, 0x00, 0x40, 0x00, 0xb5, 0x90, 0x88, 0x02, - 0x07, 0xd3, 0x0f, 0xdb, 0x1c, 0x07, 0x48, 0x0b, - 0x2b, 0x00, 0xd0, 0x02, 0x4b, 0x0a, 0x18, 0xd2, - 0xe0, 0x01, 0x4b, 0x0a, 0x18, 0xd2, 0x69, 0x00, - 0x18, 0x14, 0x1c, 0x08, 0xf0, 0x00, 0xf8, 0x4a, - 0x68, 0x78, 0x78, 0x00, 0x80, 0x20, 0x88, 0x38, - 0x07, 0xc0, 0x0f, 0xc0, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0xb0, - 0x30, 0x00, 0x50, 0x00, 0x30, 0x00, 0x40, 0x00, - 0xb5, 0x90, 0x1c, 0x07, 0x20, 0x00, 0x78, 0x39, - 0x29, 0x01, 0xd0, 0x02, 0x29, 0x02, 0xd1, 0x28, - 0xe0, 0x26, 0x48, 0x15, 0x24, 0x00, 0x68, 0x01, - 0x29, 0x00, 0xd0, 0x16, 0x60, 0x04, 0x20, 0x1a, - 0xf0, 0x00, 0xf9, 0x10, 0x20, 0xc8, 0xf7, 0xfe, - 0xfb, 0x79, 0x20, 0x01, 0x06, 0x40, 0xf0, 0x16, - 0xfd, 0xca, 0xf0, 0x16, 0xfd, 0xcd, 0x4b, 0x0d, - 0x40, 0x18, 0xf0, 0x16, 0xfd, 0xcd, 0x20, 0x00, - 0xf0, 0x00, 0xf8, 0xb8, 0x20, 0x01, 0xf0, 0x00, - 0xf8, 0xb5, 0x48, 0x09, 0x1f, 0xc1, 0x39, 0x01, - 0x68, 0xc9, 0x5c, 0x40, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0x01, 0x70, 0x78, 0xe0, 0x00, 0x70, 0x7c, - 0x20, 0x01, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0x98, 0xfd, 0xff, 0xff, 0xff, - 0x2e, 0x08, 0x1a, 0xb8, 0xb5, 0xb0, 0x1c, 0x07, - 0x4c, 0x1e, 0x68, 0xe0, 0x00, 0x80, 0x4d, 0x1e, - 0x58, 0x28, 0x42, 0xb8, 0xd0, 0x32, 0x2f, 0x08, - 0xd2, 0x2d, 0xa3, 0x02, 0x5d, 0xdb, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x29, 0x29, 0x04, 0x04, - 0x13, 0x13, 0x29, 0x29, 0x28, 0x03, 0xd0, 0x22, - 0x28, 0x02, 0xd0, 0x20, 0x20, 0x03, 0x49, 0x15, - 0x60, 0x08, 0x68, 0xe0, 0x00, 0xc3, 0x18, 0x18, - 0xf0, 0x00, 0xf8, 0xc8, 0x21, 0xf3, 0x40, 0x01, - 0xe0, 0x10, 0x28, 0x04, 0xd0, 0x13, 0x28, 0x05, - 0xd0, 0x11, 0x20, 0x00, 0x21, 0x03, 0x07, 0x09, - 0x80, 0x08, 0x68, 0xe0, 0x00, 0xc3, 0x18, 0x18, - 0xf0, 0x00, 0xf8, 0xb8, 0x23, 0xf3, 0x40, 0x18, - 0x21, 0x04, 0x43, 0x01, 0x68, 0xe0, 0x00, 0xc3, - 0x18, 0x18, 0xf0, 0x00, 0xf8, 0x95, 0x68, 0xe0, - 0x00, 0x80, 0x50, 0x2f, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb0, - 0x2e, 0x08, 0x1a, 0xb0, 0x6e, 0x00, 0x11, 0x00, - 0xb5, 0x80, 0x21, 0x80, 0x1c, 0x07, 0x20, 0x1f, - 0xf0, 0x00, 0xf8, 0x82, 0x21, 0x55, 0x20, 0x02, - 0xf0, 0x00, 0xf8, 0x7e, 0x20, 0x02, 0xf0, 0x00, - 0xf8, 0x95, 0x28, 0x55, 0xd0, 0x03, 0x20, 0x00, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x21, 0x33, - 0x20, 0x05, 0xf0, 0x00, 0xf8, 0x71, 0x21, 0x33, - 0x20, 0x0e, 0xf0, 0x00, 0xf8, 0x6d, 0x21, 0x21, - 0x20, 0x17, 0xf0, 0x00, 0xf8, 0x69, 0x21, 0x00, - 0x20, 0x01, 0xf0, 0x00, 0xf8, 0x65, 0x21, 0x00, - 0x20, 0x0a, 0xf0, 0x00, 0xf8, 0x61, 0x21, 0x01, - 0x20, 0x02, 0xf0, 0x00, 0xf8, 0x5d, 0x21, 0x01, - 0x20, 0x0b, 0xf0, 0x00, 0xf8, 0x59, 0x21, 0x00, - 0x20, 0x03, 0xf0, 0x00, 0xf8, 0x55, 0x21, 0x00, - 0x20, 0x0c, 0xf0, 0x00, 0xf8, 0x51, 0x21, 0x00, - 0x20, 0x04, 0xf0, 0x00, 0xf8, 0x4d, 0x21, 0x01, - 0x20, 0x0d, 0xf0, 0x00, 0xf8, 0x49, 0x21, 0x02, - 0x20, 0x1e, 0xf0, 0x00, 0xf8, 0x45, 0x21, 0x04, - 0x20, 0x1c, 0xf0, 0x00, 0xf8, 0x41, 0x21, 0x03, - 0x20, 0x1b, 0xf0, 0x00, 0xf8, 0x3d, 0x21, 0x01, - 0x20, 0x1f, 0xf0, 0x00, 0xf8, 0x39, 0x21, 0x01, - 0x20, 0x18, 0xf0, 0x00, 0xf8, 0x35, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x04, 0x20, 0x01, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x00, 0xc3, - 0x1c, 0x07, 0x18, 0x18, 0x1c, 0x06, 0xf0, 0x00, - 0xf8, 0x41, 0x07, 0xc0, 0x0f, 0xc0, 0x25, 0x01, - 0x4c, 0x10, 0x28, 0x00, 0xd0, 0x06, 0x5d, 0xe1, - 0x29, 0x00, 0xd0, 0x03, 0x1c, 0x28, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x28, 0x00, 0xd1, 0x01, - 0x55, 0xe0, 0xe7, 0xf7, 0x21, 0x80, 0x1c, 0x30, - 0xf0, 0x00, 0xf8, 0x12, 0x20, 0x32, 0xf7, 0xfe, - 0xfa, 0x95, 0x21, 0x00, 0x1c, 0x30, 0xf0, 0x00, - 0xf8, 0x0b, 0x20, 0x32, 0xf7, 0xfe, 0xfa, 0x8e, - 0x55, 0xe5, 0x1c, 0x28, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xb8, - 0xb5, 0xb0, 0x06, 0x07, 0x0e, 0x3f, 0x06, 0x0d, - 0x0e, 0x2d, 0x24, 0x09, 0xb0, 0x81, 0xab, 0x00, - 0x70, 0x1f, 0x70, 0x5d, 0x46, 0x69, 0x22, 0x02, - 0x20, 0x80, 0xf7, 0xf4, 0xfa, 0xe6, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x08, 0x1e, 0x60, 0x06, 0x04, - 0x0e, 0x24, 0xd1, 0xf0, 0xb0, 0x01, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x06, 0x04, - 0x0e, 0x24, 0xb0, 0x82, 0x48, 0x1f, 0x68, 0x00, - 0x90, 0x00, 0x25, 0x09, 0xab, 0x01, 0x70, 0x1c, - 0x20, 0xff, 0x3b, 0x04, 0x70, 0x18, 0x22, 0x01, - 0xb4, 0x04, 0x20, 0x80, 0xa9, 0x02, 0xab, 0x01, - 0xf7, 0xf4, 0xfb, 0x22, 0xb0, 0x01, 0xaf, 0x00, - 0x78, 0x3f, 0xab, 0x01, 0x70, 0x1c, 0x20, 0xff, - 0x3b, 0x04, 0x70, 0x18, 0x22, 0x01, 0xb4, 0x04, - 0x20, 0x80, 0xa9, 0x02, 0xab, 0x01, 0xf7, 0xf4, - 0xfb, 0x13, 0xb0, 0x01, 0xae, 0x00, 0x78, 0x36, - 0xab, 0x01, 0x70, 0x1c, 0x20, 0xff, 0x3b, 0x04, - 0x70, 0x18, 0x22, 0x01, 0xb4, 0x04, 0x20, 0x80, - 0xa9, 0x02, 0xab, 0x01, 0xf7, 0xf4, 0xfb, 0x04, - 0xb0, 0x01, 0xa8, 0x00, 0x78, 0x00, 0x42, 0xb7, - 0xd1, 0x03, 0x42, 0x87, 0xd1, 0x01, 0x1c, 0x38, - 0xe0, 0x04, 0x1e, 0x68, 0x06, 0x05, 0x0e, 0x2d, - 0xd1, 0xc8, 0x20, 0xff, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x02, 0xcc, 0x9c, - 0xb5, 0x80, 0x78, 0x01, 0x29, 0x00, 0xd1, 0x1b, - 0x78, 0x40, 0x28, 0x00, 0xd0, 0x18, 0x4f, 0x0e, - 0x68, 0xf8, 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, - 0xff, 0xad, 0x21, 0x20, 0x43, 0x01, 0x68, 0xf8, - 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, 0xff, 0x8c, - 0x68, 0xf8, 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, - 0xff, 0xa1, 0x21, 0x40, 0x43, 0x01, 0x68, 0xf8, - 0x00, 0xc3, 0x18, 0x18, 0xf7, 0xff, 0xff, 0x80, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xb0, 0xb5, 0x80, 0x20, 0xe1, - 0x01, 0x00, 0xf7, 0xfe, 0xf9, 0xcb, 0x49, 0x1f, - 0x60, 0xc8, 0x28, 0x00, 0xd0, 0x0d, 0x27, 0x00, - 0x80, 0x4f, 0x70, 0x0f, 0x20, 0x64, 0x80, 0x88, - 0x80, 0xcf, 0x21, 0x64, 0x20, 0x00, 0xf0, 0x00, - 0xfe, 0x34, 0x20, 0x00, 0x22, 0xff, 0x49, 0x18, - 0xe0, 0x08, 0x78, 0x08, 0x23, 0x80, 0x43, 0x18, - 0x70, 0x08, 0x20, 0x00, 0x43, 0xc0, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x01, 0x03, 0x18, 0x5b, - 0x70, 0x5a, 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, - 0x28, 0x0a, 0xdb, 0xf7, 0x20, 0x00, 0x49, 0x0f, - 0x22, 0xff, 0x32, 0x01, 0x54, 0x0f, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0x42, 0x90, 0xdb, 0xf9, - 0x20, 0x00, 0x49, 0x0b, 0x54, 0x0f, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0x42, 0x90, 0xdb, 0xf9, - 0x1c, 0x38, 0x49, 0x08, 0x63, 0x8f, 0x60, 0x4f, - 0x60, 0x0f, 0x62, 0x0f, 0x61, 0xcf, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x8f, 0x90, 0x2e, 0x08, 0x90, 0x7c, - 0x2e, 0x08, 0x91, 0x7c, 0x2e, 0x08, 0x90, 0x30, - 0xb5, 0x90, 0x27, 0x00, 0x4c, 0x0b, 0x01, 0x38, - 0x5c, 0x21, 0x29, 0x00, 0xd0, 0x09, 0x19, 0x00, - 0x68, 0x81, 0x29, 0x00, 0xd0, 0x02, 0x88, 0x80, - 0xf7, 0xff, 0xfb, 0x8a, 0x1c, 0x38, 0xf0, 0x00, - 0xff, 0x83, 0x37, 0x01, 0x2f, 0x0a, 0xdb, 0xee, - 0xf0, 0x00, 0xf8, 0x06, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x90, - 0xb5, 0xf0, 0x25, 0x00, 0x4f, 0x1e, 0x88, 0x78, - 0x26, 0x00, 0x28, 0x00, 0xdd, 0x2c, 0x00, 0xec, - 0x19, 0x64, 0x00, 0xa4, 0x68, 0xf8, 0x19, 0x00, - 0x68, 0x80, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfe, - 0xf9, 0x7b, 0x68, 0xf8, 0x19, 0x00, 0x60, 0x86, - 0x68, 0xf8, 0x19, 0x00, 0x68, 0x40, 0x28, 0x00, - 0xd0, 0x04, 0xf7, 0xfe, 0xf9, 0x71, 0x68, 0xf8, - 0x19, 0x00, 0x60, 0x46, 0x68, 0xf8, 0x59, 0x00, - 0x28, 0x00, 0xd0, 0x03, 0xf7, 0xfe, 0xf9, 0x68, - 0x68, 0xf8, 0x51, 0x06, 0x68, 0xf8, 0x19, 0x00, - 0x69, 0x40, 0x28, 0x00, 0xd0, 0x04, 0xf7, 0xfe, - 0xf9, 0x5f, 0x68, 0xf8, 0x19, 0x00, 0x61, 0x46, - 0x88, 0x78, 0x35, 0x01, 0x42, 0xa8, 0xdc, 0xd2, - 0x68, 0xf8, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xfe, - 0xf9, 0x53, 0x60, 0xfe, 0x80, 0x7e, 0x80, 0xbe, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0xf0, 0x06, 0x0d, - 0x0e, 0x2d, 0x1c, 0x07, 0x20, 0x02, 0x40, 0x28, - 0x26, 0x00, 0x43, 0xf6, 0x24, 0x00, 0x28, 0x00, - 0xd0, 0x0d, 0x68, 0x38, 0x28, 0x00, 0xd0, 0x02, - 0xf7, 0xfe, 0xf9, 0x3a, 0x60, 0x3c, 0x68, 0x78, - 0x28, 0x00, 0xd0, 0x02, 0xf7, 0xfe, 0xf9, 0x34, - 0x60, 0x7c, 0x61, 0x7e, 0x61, 0xbe, 0x08, 0x68, - 0xd3, 0x0d, 0x69, 0xf8, 0x28, 0x00, 0xd0, 0x02, - 0xf7, 0xfe, 0xf9, 0x2a, 0x61, 0xfc, 0x6a, 0x38, - 0x28, 0x00, 0xd0, 0x02, 0xf7, 0xfe, 0xf9, 0x24, - 0x62, 0x3c, 0x63, 0x3e, 0x63, 0x7e, 0x08, 0xe8, - 0xd3, 0x05, 0x6b, 0xb8, 0x28, 0x00, 0xd0, 0x02, - 0xf7, 0xfe, 0xf9, 0x1a, 0x63, 0xbc, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x80, 0x4f, 0x12, - 0x88, 0xb8, 0x1d, 0xc1, 0x31, 0x0d, 0x00, 0xca, - 0x18, 0x52, 0x00, 0x92, 0x00, 0xc1, 0x18, 0x09, - 0x00, 0x89, 0x68, 0xf8, 0xf7, 0xfe, 0xf8, 0xe7, - 0x60, 0xf8, 0x28, 0x00, 0xd0, 0x0b, 0x88, 0xb8, - 0x1d, 0xc1, 0x31, 0x0d, 0xf0, 0x00, 0xfd, 0x51, - 0x88, 0xb8, 0x30, 0x14, 0x80, 0xb8, 0x20, 0x00, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x78, 0x38, - 0x23, 0x80, 0x43, 0x18, 0x70, 0x38, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0x90, 0x06, 0x07, - 0x0e, 0x3f, 0x4c, 0x10, 0x2f, 0x11, 0xd1, 0x02, - 0x78, 0x20, 0x27, 0x08, 0x40, 0x07, 0xf7, 0xff, - 0xff, 0x3b, 0xf7, 0xff, 0xfe, 0xeb, 0x09, 0x38, - 0xd3, 0x03, 0x78, 0x20, 0x23, 0x08, 0x43, 0x18, - 0x70, 0x20, 0x4b, 0x09, 0x22, 0x00, 0x21, 0x00, - 0x20, 0x00, 0xf0, 0x00, 0xfe, 0x4f, 0x4b, 0x07, - 0x22, 0x11, 0x21, 0x00, 0x20, 0x42, 0xf0, 0x00, - 0xfe, 0x49, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x00, 0x00, 0x13, 0x88, 0x00, 0x00, 0x27, 0x10, - 0x49, 0x0e, 0x78, 0x0a, 0x08, 0x52, 0xd3, 0x01, - 0x22, 0xff, 0xe0, 0x00, 0x22, 0x00, 0x70, 0x02, - 0x78, 0x0a, 0x08, 0x92, 0xd3, 0x01, 0x22, 0xff, - 0xe0, 0x00, 0x22, 0x00, 0x70, 0x42, 0x78, 0x0a, - 0x09, 0x52, 0xd3, 0x01, 0x22, 0xff, 0xe0, 0x00, - 0x22, 0x00, 0x70, 0x82, 0x78, 0x09, 0x09, 0x89, - 0xd3, 0x01, 0x21, 0xff, 0xe0, 0x00, 0x21, 0x00, - 0x70, 0xc1, 0x47, 0x70, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0x00, 0xf7, 0xff, 0xfe, 0xf9, 0x48, 0x03, - 0x78, 0x01, 0x23, 0x80, 0x43, 0x19, 0x70, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xf0, 0x04, 0x0d, 0x0c, 0x2d, 0x1c, 0x07, - 0xb0, 0x81, 0x48, 0x3b, 0x90, 0x00, 0x78, 0x00, - 0x23, 0x80, 0x40, 0x18, 0x26, 0x00, 0x43, 0xf6, - 0x28, 0x00, 0xd1, 0x04, 0x1c, 0x38, 0xf0, 0x00, - 0xfe, 0xd5, 0x1c, 0x04, 0xd5, 0x01, 0x1c, 0x30, - 0xe0, 0x61, 0x78, 0x38, 0x4e, 0x33, 0x28, 0x42, - 0xd0, 0x45, 0xdc, 0x1c, 0x28, 0x00, 0xd0, 0x25, - 0x28, 0x01, 0xd0, 0x57, 0x28, 0x02, 0xd1, 0x55, - 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, 0xf9, 0xe8, - 0x28, 0x00, 0xd0, 0x04, 0x01, 0x20, 0x19, 0x80, - 0x88, 0x80, 0xf7, 0xff, 0xfa, 0x5d, 0x1c, 0x20, - 0xf0, 0x00, 0xfe, 0x56, 0xf0, 0x00, 0xfd, 0x6f, - 0x28, 0x00, 0xd1, 0x43, 0xf0, 0x00, 0xfd, 0x6b, - 0x28, 0x00, 0xd0, 0xfb, 0xe0, 0x3e, 0x28, 0x4e, - 0xd0, 0x38, 0x28, 0x70, 0xd0, 0x1e, 0x28, 0x73, - 0xd1, 0x38, 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, - 0xfc, 0x37, 0xe0, 0x33, 0x98, 0x00, 0x78, 0x00, - 0x08, 0x40, 0xd2, 0x2f, 0x1c, 0x38, 0x1c, 0x29, - 0xf0, 0x00, 0xf8, 0x36, 0x28, 0x01, 0xd1, 0x29, - 0x01, 0x20, 0x19, 0x80, 0x88, 0x80, 0xf7, 0xff, - 0xfa, 0x37, 0xf0, 0x00, 0xfd, 0x4c, 0x28, 0x00, - 0xd1, 0x20, 0xf0, 0x00, 0xfd, 0x48, 0x28, 0x00, - 0xd0, 0xfb, 0xe0, 0x1b, 0x1c, 0x38, 0x1c, 0x29, - 0xf0, 0x00, 0xfb, 0xf6, 0xe0, 0x16, 0x98, 0x00, - 0x78, 0x00, 0x09, 0x40, 0xd2, 0x12, 0x1c, 0x38, - 0x1c, 0x29, 0xf0, 0x00, 0xf8, 0xd1, 0x28, 0x10, - 0xd1, 0x0c, 0x01, 0x20, 0x19, 0x80, 0x88, 0x80, - 0xf7, 0xff, 0xfa, 0x1a, 0x1c, 0x20, 0xf0, 0x00, - 0xfe, 0x13, 0xe0, 0x03, 0x1c, 0x38, 0x1c, 0x29, - 0xf0, 0x00, 0xfb, 0x10, 0x20, 0x00, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x80, 0x2e, 0x08, 0x8f, 0x90, - 0xb5, 0xf0, 0x04, 0x09, 0x0c, 0x09, 0x25, 0x00, - 0xb0, 0x85, 0xf7, 0xf3, 0xff, 0xa9, 0x20, 0x08, - 0xf7, 0xf3, 0xff, 0xc2, 0x20, 0x04, 0xf7, 0xf3, - 0xff, 0xbf, 0x20, 0x0c, 0xf7, 0xf3, 0xff, 0xbc, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x03, 0x20, 0x10, - 0xf7, 0xf3, 0xff, 0xb6, 0x4f, 0x4d, 0x81, 0x38, - 0x20, 0x02, 0xf7, 0xf3, 0xff, 0xb1, 0x20, 0x05, - 0xf7, 0xf3, 0xff, 0xae, 0x06, 0x04, 0x0e, 0x24, - 0x20, 0x01, 0xf7, 0xf3, 0xff, 0xa9, 0x20, 0x08, - 0xf7, 0xf3, 0xff, 0xa6, 0x06, 0x06, 0x0e, 0x36, - 0x20, 0x08, 0xf7, 0xf3, 0xff, 0xa1, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x02, 0x48, 0x42, 0x90, 0x04, - 0x5d, 0x80, 0x0a, 0x01, 0xd3, 0x03, 0x06, 0xc0, - 0x0e, 0xc0, 0x42, 0xa0, 0xd0, 0x45, 0x20, 0x80, - 0x43, 0x20, 0x99, 0x04, 0x55, 0x88, 0x98, 0x03, - 0x38, 0x09, 0xd5, 0x00, 0x30, 0x03, 0x10, 0x80, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x01, 0x88, 0x7c, - 0x28, 0x00, 0xdd, 0x36, 0x20, 0x10, 0xf7, 0xf3, - 0xff, 0x83, 0x04, 0x06, 0x0c, 0x36, 0x20, 0x10, - 0xf7, 0xf3, 0xff, 0x7e, 0x04, 0xc1, 0x0c, 0xc9, - 0x91, 0x00, 0x2e, 0x00, 0xd0, 0x21, 0x1c, 0x30, - 0xf0, 0x00, 0xfb, 0xe0, 0x4b, 0x2f, 0x42, 0x98, - 0xd1, 0x10, 0x88, 0xb8, 0x88, 0x79, 0x42, 0x88, - 0xd1, 0x05, 0xf7, 0xff, 0xfe, 0xa3, 0x23, 0x01, - 0x42, 0xd8, 0xd1, 0x00, 0xe0, 0x49, 0x88, 0x79, - 0x31, 0x01, 0x80, 0x79, 0x1c, 0x61, 0x1c, 0x20, - 0x04, 0x0c, 0x0c, 0x24, 0x00, 0xc3, 0x18, 0x18, - 0x00, 0x80, 0x68, 0xf9, 0x18, 0x09, 0x81, 0xce, - 0x99, 0x00, 0x68, 0xfa, 0x18, 0x10, 0x82, 0x01, - 0xe0, 0x01, 0x99, 0x00, 0x80, 0xf9, 0x1c, 0x68, - 0x04, 0x05, 0x0c, 0x2d, 0x98, 0x01, 0x42, 0x85, - 0xdb, 0xc8, 0x98, 0x04, 0x99, 0x02, 0xf0, 0x00, - 0xfb, 0xd3, 0x28, 0xff, 0xd1, 0x28, 0x22, 0x00, - 0x21, 0x00, 0x20, 0x00, 0xf0, 0x00, 0xfe, 0x0a, - 0x04, 0x00, 0x0c, 0x00, 0xf0, 0x00, 0xfd, 0x78, - 0x78, 0x38, 0x09, 0x00, 0xd3, 0x16, 0x20, 0x00, - 0x88, 0x79, 0x29, 0x00, 0xdd, 0x12, 0x00, 0xc2, - 0x18, 0x12, 0x00, 0x92, 0x68, 0xf9, 0x18, 0x89, - 0x89, 0xca, 0x89, 0x7b, 0x42, 0x9a, 0xd0, 0x03, - 0x7f, 0x0a, 0x23, 0x80, 0x43, 0x1a, 0x77, 0x0a, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x88, 0x79, - 0x42, 0x81, 0xdc, 0xec, 0x78, 0x38, 0x23, 0x01, - 0x43, 0x18, 0x70, 0x38, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x90, 0x7c, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0xf0, 0x04, 0x09, 0x0c, 0x09, 0x25, 0x00, - 0xb0, 0x88, 0xf7, 0xf3, 0xfe, 0xf1, 0x20, 0x08, - 0xf7, 0xf3, 0xff, 0x0a, 0x20, 0x04, 0xf7, 0xf3, - 0xff, 0x07, 0x20, 0x0c, 0xf7, 0xf3, 0xff, 0x04, - 0x04, 0x04, 0x0c, 0x24, 0x20, 0x10, 0xf7, 0xf3, - 0xfe, 0xff, 0x20, 0x02, 0xf7, 0xf3, 0xfe, 0xfc, - 0x20, 0x05, 0xf7, 0xf3, 0xfe, 0xf9, 0x06, 0x06, - 0x0e, 0x36, 0x20, 0x01, 0xf7, 0xf3, 0xfe, 0xf4, - 0x20, 0x08, 0xf7, 0xf3, 0xfe, 0xf1, 0x06, 0x07, - 0x0e, 0x3f, 0x20, 0x08, 0xf7, 0xf3, 0xfe, 0xec, - 0x06, 0x01, 0x0e, 0x09, 0x91, 0x04, 0x20, 0x10, - 0xf7, 0xf3, 0xfe, 0xe6, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0xe3, 0x49, 0x4c, 0x91, 0x07, 0x5d, 0xc8, - 0x0a, 0x01, 0xd3, 0x05, 0x06, 0xc0, 0x0e, 0xc0, - 0x42, 0xb0, 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x88, - 0x20, 0x80, 0x43, 0x30, 0x99, 0x07, 0x55, 0xc8, - 0x4f, 0x45, 0x88, 0x78, 0x90, 0x00, 0x1f, 0xe0, - 0x38, 0x05, 0x90, 0x06, 0x28, 0x00, 0xdd, 0x68, - 0x48, 0x42, 0x90, 0x05, 0x20, 0x10, 0xf7, 0xf3, - 0xfe, 0xc7, 0x04, 0x06, 0x0c, 0x36, 0x20, 0x06, - 0xf7, 0xf3, 0xfe, 0xc2, 0x20, 0x06, 0xf7, 0xf3, - 0xfe, 0xbf, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x03, - 0x2e, 0x00, 0xd1, 0x11, 0x20, 0x0c, 0xf7, 0xf3, - 0xfe, 0xb7, 0x04, 0x06, 0x0c, 0x36, 0x24, 0x00, - 0x2e, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0xaf, 0x1c, 0x60, 0x04, 0x04, 0x0c, 0x24, - 0x42, 0xb4, 0xdb, 0xf7, 0x19, 0xa8, 0xe0, 0x3e, - 0x1c, 0x30, 0xf0, 0x00, 0xfb, 0x0f, 0x1c, 0x04, - 0x4b, 0x2f, 0x42, 0x98, 0xd1, 0x18, 0x88, 0xb8, - 0x88, 0x79, 0x42, 0x88, 0xd1, 0x05, 0xf7, 0xff, - 0xfd, 0xd1, 0x23, 0x01, 0x42, 0xd8, 0xd1, 0x00, - 0xe0, 0x47, 0x9c, 0x00, 0x00, 0xe1, 0x19, 0x09, - 0x00, 0x89, 0x68, 0xf8, 0x18, 0x40, 0x81, 0xc6, - 0x88, 0x78, 0x30, 0x01, 0x80, 0x78, 0x98, 0x00, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x90, 0x00, - 0x98, 0x03, 0x00, 0xe2, 0x19, 0x12, 0x00, 0x92, - 0x68, 0xf9, 0x18, 0x89, 0x77, 0xc8, 0x20, 0x0c, - 0xf7, 0xf3, 0xfe, 0x7e, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x02, 0x26, 0x00, 0x28, 0x00, 0xdd, 0x0c, - 0x98, 0x05, 0xa9, 0x01, 0x1c, 0x22, 0xf0, 0x00, - 0xfb, 0x45, 0xa8, 0x01, 0x88, 0x00, 0x18, 0x30, - 0x04, 0x06, 0x0c, 0x36, 0x98, 0x02, 0x42, 0x86, - 0xdb, 0xf2, 0x98, 0x02, 0x18, 0x28, 0x30, 0x05, - 0x04, 0x05, 0x0c, 0x2d, 0x98, 0x06, 0x42, 0xa8, - 0xdc, 0x98, 0x98, 0x07, 0x99, 0x04, 0xf0, 0x00, - 0xfa, 0xe7, 0x28, 0xff, 0xd1, 0x82, 0x78, 0x38, - 0x23, 0x10, 0x43, 0x18, 0x70, 0x38, 0x78, 0x38, - 0x08, 0x81, 0xd3, 0x05, 0x09, 0x41, 0xd3, 0x03, - 0x09, 0x00, 0xd2, 0x01, 0xf0, 0x00, 0xfe, 0xd3, - 0x20, 0x10, 0xb0, 0x08, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x91, 0x7c, - 0x2e, 0x08, 0x8f, 0x80, 0x2e, 0x08, 0x82, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0xf0, 0x04, 0x09, 0x0c, 0x09, 0x22, 0x00, - 0xb0, 0x90, 0x92, 0x0c, 0x92, 0x02, 0x92, 0x01, - 0xf7, 0xf3, 0xfe, 0x1a, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0x33, 0x20, 0x04, 0xf7, 0xf3, 0xfe, 0x30, - 0x20, 0x0c, 0xf7, 0xf3, 0xfe, 0x2d, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x0d, 0x20, 0x10, 0xf7, 0xf3, - 0xfe, 0x27, 0x04, 0x00, 0x0c, 0x00, 0x90, 0x0a, - 0x20, 0x02, 0xf7, 0xf3, 0xfe, 0x21, 0x20, 0x05, - 0xf7, 0xf3, 0xfe, 0x1e, 0x06, 0x03, 0x0e, 0x1b, - 0x93, 0x05, 0x20, 0x01, 0xf7, 0xf3, 0xfe, 0x18, - 0x06, 0x02, 0x0e, 0x12, 0x92, 0x04, 0x20, 0x08, - 0xf7, 0xf3, 0xfe, 0x12, 0x20, 0x08, 0xf7, 0xf3, - 0xfe, 0x0f, 0x20, 0x03, 0xf7, 0xf3, 0xfe, 0x0c, - 0x20, 0x0d, 0xf7, 0xf3, 0xfe, 0x09, 0x04, 0x07, - 0x0c, 0x3f, 0x20, 0x04, 0xf7, 0xf3, 0xfe, 0x04, - 0x20, 0x0c, 0xf7, 0xf3, 0xfe, 0x01, 0x04, 0x01, - 0x0c, 0x09, 0x91, 0x09, 0x98, 0x0a, 0xf0, 0x00, - 0xfd, 0x13, 0x1c, 0x04, 0xd1, 0x01, 0x43, 0xe0, - 0xe1, 0x27, 0x7f, 0x20, 0x0a, 0x00, 0xd3, 0x01, - 0x20, 0x00, 0xe1, 0x22, 0x84, 0x27, 0x25, 0x00, - 0x99, 0x09, 0x4e, 0x92, 0x1d, 0xf7, 0x37, 0xf9, - 0x29, 0x00, 0xdd, 0x2a, 0x98, 0x0a, 0xf0, 0x00, - 0xfa, 0x51, 0x1c, 0x02, 0x1c, 0x30, 0xa9, 0x06, - 0xf0, 0x00, 0xfa, 0xb4, 0x28, 0x09, 0xd1, 0x16, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x06, 0x20, 0xff, - 0x90, 0x01, 0x20, 0x01, 0x70, 0x38, 0x18, 0x28, - 0x04, 0x05, 0x0c, 0x2d, 0x20, 0xff, 0x90, 0x02, - 0x19, 0x78, 0xaa, 0x06, 0x88, 0x12, 0x1c, 0x31, - 0xf0, 0x10, 0xfd, 0x14, 0xa8, 0x06, 0x88, 0x00, - 0x18, 0x28, 0x04, 0x05, 0x0c, 0x2d, 0xa9, 0x06, - 0x88, 0x09, 0x98, 0x0c, 0x18, 0x40, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x0c, 0x99, 0x09, 0x42, 0x88, - 0xdb, 0xd4, 0x48, 0x7b, 0x90, 0x0f, 0x2d, 0x00, - 0xd0, 0x0d, 0x9a, 0x04, 0xb4, 0x04, 0x21, 0x03, - 0x98, 0x10, 0x9a, 0x0b, 0x9b, 0x06, 0xf0, 0x00, - 0xfd, 0xac, 0xb0, 0x01, 0x98, 0x0f, 0x1c, 0x39, - 0x1c, 0x2a, 0xf0, 0x00, 0xfd, 0xc8, 0x20, 0x00, - 0x90, 0x0b, 0x98, 0x0d, 0x99, 0x09, 0x1a, 0x40, - 0x38, 0x0d, 0x90, 0x0e, 0x28, 0x00, 0xdd, 0x75, - 0x20, 0x00, 0x90, 0x00, 0x25, 0x00, 0x20, 0x08, - 0xf7, 0xf3, 0xfd, 0x9e, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x03, 0x20, 0x03, 0xf7, 0xf3, 0xfd, 0x98, - 0x20, 0x0d, 0xf7, 0xf3, 0xfd, 0x95, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x07, 0x98, 0x03, 0x28, 0x07, - 0xd2, 0x12, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x0e, 0x04, 0x04, 0x07, - 0x07, 0x0e, 0x0c, 0x00, 0x98, 0x07, 0x82, 0x60, - 0xe0, 0x06, 0x99, 0x07, 0x1c, 0x20, 0xf0, 0x00, - 0xfd, 0x51, 0xe0, 0x01, 0x20, 0xff, 0x90, 0x00, - 0x20, 0x04, 0xf7, 0xf3, 0xfd, 0x79, 0x20, 0x0c, - 0xf7, 0xf3, 0xfd, 0x76, 0x04, 0x01, 0x0c, 0x09, - 0x91, 0x08, 0x20, 0x00, 0x90, 0x0c, 0x29, 0x00, - 0xdd, 0x1c, 0x98, 0x0a, 0xf0, 0x00, 0xf9, 0xd6, - 0x1c, 0x02, 0x1c, 0x30, 0xa9, 0x06, 0xf0, 0x00, - 0xfa, 0x39, 0x28, 0x09, 0xd0, 0x37, 0x28, 0x0a, - 0xd0, 0x44, 0x28, 0x56, 0xd1, 0x04, 0x98, 0x00, - 0x28, 0xff, 0xd1, 0x01, 0x98, 0x07, 0x83, 0x60, - 0xa9, 0x06, 0x88, 0x09, 0x98, 0x0c, 0x18, 0x40, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x0c, 0x99, 0x08, - 0x42, 0x88, 0xdb, 0xe2, 0x98, 0x03, 0x70, 0x38, - 0x98, 0x07, 0x12, 0x00, 0x70, 0x78, 0x98, 0x07, - 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, 0x71, 0x38, - 0x20, 0x01, 0x71, 0x78, 0x2d, 0x00, 0xd0, 0x40, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x0a, 0x20, 0xff, - 0x90, 0x02, 0x9a, 0x04, 0xb4, 0x04, 0x21, 0x03, - 0x98, 0x10, 0x9a, 0x0b, 0x9b, 0x06, 0xf0, 0x00, - 0xfd, 0x30, 0xb0, 0x01, 0x1f, 0x68, 0x12, 0x01, - 0x70, 0xf9, 0x71, 0x38, 0x98, 0x0f, 0x1c, 0x39, - 0x1c, 0x2a, 0xe0, 0x3e, 0xe0, 0x4b, 0x2d, 0x00, - 0xd1, 0x00, 0x25, 0x06, 0x19, 0x78, 0xaa, 0x06, - 0x88, 0x12, 0x1c, 0x31, 0xf0, 0x10, 0xfc, 0x6a, - 0xa8, 0x06, 0x88, 0x00, 0x18, 0x28, 0x04, 0x05, - 0x0c, 0x2d, 0xe7, 0xc1, 0x98, 0x03, 0x28, 0x04, - 0xd0, 0x02, 0x98, 0x03, 0x28, 0x03, 0xd1, 0xbb, - 0x69, 0x60, 0x28, 0x00, 0xd0, 0x09, 0x8b, 0x21, - 0x00, 0xc9, 0x18, 0x40, 0x78, 0xb1, 0x38, 0x06, - 0x70, 0x81, 0x78, 0x71, 0x70, 0x41, 0x78, 0x31, - 0x70, 0x01, 0x22, 0x00, 0x8b, 0x21, 0x00, 0xc9, - 0x69, 0x60, 0x18, 0x40, 0x38, 0x20, 0x77, 0x42, - 0xe7, 0xa6, 0x98, 0x01, 0x28, 0xff, 0xd1, 0x12, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x0a, 0x20, 0xff, - 0x90, 0x02, 0x9a, 0x04, 0xb4, 0x04, 0x21, 0x03, - 0x98, 0x10, 0x9a, 0x0b, 0x9b, 0x06, 0xf0, 0x00, - 0xfc, 0xec, 0xb0, 0x01, 0x22, 0x05, 0x98, 0x0f, - 0x1c, 0x39, 0xf0, 0x00, 0xfd, 0x24, 0x98, 0x0b, - 0x99, 0x08, 0x18, 0x40, 0x30, 0x06, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x0b, 0x98, 0x0e, 0x99, 0x0b, - 0x42, 0x88, 0xdd, 0x00, 0xe7, 0x3c, 0x7f, 0x20, - 0x23, 0x80, 0x43, 0x18, 0x77, 0x20, 0x9a, 0x04, - 0x07, 0xd0, 0x0e, 0x80, 0x9b, 0x05, 0x18, 0xc0, - 0x77, 0x60, 0x98, 0x02, 0x28, 0xff, 0xd1, 0x03, - 0x99, 0x0f, 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0x20, - 0x20, 0x01, 0xb0, 0x10, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x83, 0x80, - 0x2e, 0x08, 0x85, 0x80, 0xb5, 0xf0, 0x04, 0x09, - 0x0c, 0x09, 0x22, 0x00, 0xb0, 0x88, 0x92, 0x05, - 0xf7, 0xf3, 0xfc, 0xa2, 0x20, 0x08, 0xf7, 0xf3, - 0xfc, 0xbb, 0x20, 0x04, 0xf7, 0xf3, 0xfc, 0xb8, - 0x20, 0x0c, 0xf7, 0xf3, 0xfc, 0xb5, 0x04, 0x05, - 0x0c, 0x2d, 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0xb0, - 0x04, 0x07, 0x0c, 0x3f, 0x20, 0x02, 0xf7, 0xf3, - 0xfc, 0xab, 0x20, 0x05, 0xf7, 0xf3, 0xfc, 0xa8, - 0x20, 0x01, 0xf7, 0xf3, 0xfc, 0xa5, 0x06, 0x04, - 0x0e, 0x24, 0x20, 0x08, 0xf7, 0xf3, 0xfc, 0xa0, - 0x06, 0x06, 0x0e, 0x36, 0x20, 0x08, 0xf7, 0xf3, - 0xfc, 0x9b, 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0x98, - 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0x95, 0x20, 0x08, - 0xf7, 0xf3, 0xfc, 0x92, 0x20, 0x08, 0xf7, 0xf3, - 0xfc, 0x8f, 0x2c, 0x00, 0xd0, 0x65, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0xf4, 0x90, 0x03, 0x4b, 0x44, - 0x42, 0x98, 0xd0, 0x5e, 0x48, 0x43, 0x89, 0x41, - 0x42, 0xb9, 0xd1, 0x5b, 0x68, 0xc0, 0x9a, 0x03, - 0x00, 0xd1, 0x18, 0x89, 0x00, 0x89, 0x18, 0x40, - 0x7f, 0x80, 0x4c, 0x3f, 0x1d, 0xe7, 0x37, 0x39, - 0x28, 0x04, 0xd0, 0x0b, 0x28, 0x05, 0xd0, 0x09, - 0x2e, 0x00, 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x04, - 0x2e, 0x01, 0xd1, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x02, 0x72, 0xb8, 0x2d, 0x0f, 0xdd, 0x61, - 0x1f, 0xe8, 0x38, 0x08, 0x90, 0x07, 0x28, 0x00, - 0xdd, 0x5c, 0x48, 0x34, 0x90, 0x06, 0x20, 0x10, - 0xf7, 0xf3, 0xfc, 0x5e, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x04, 0x20, 0x10, 0xf7, 0xf3, 0xfc, 0x58, - 0x20, 0x18, 0xf7, 0xf3, 0xfc, 0x55, 0x90, 0x01, - 0x20, 0x18, 0xf7, 0xf3, 0xfc, 0x51, 0x90, 0x00, - 0x20, 0x03, 0xf7, 0xf3, 0xfc, 0x4d, 0x20, 0x01, - 0xf7, 0xf3, 0xfc, 0x4a, 0x20, 0x0c, 0xf7, 0xf3, - 0xfc, 0x47, 0x04, 0x05, 0x0c, 0x2d, 0x98, 0x05, - 0x19, 0x40, 0x30, 0x0c, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x05, 0x7a, 0xb8, 0x00, 0xc1, 0x1a, 0x09, - 0x00, 0x89, 0x19, 0x09, 0x69, 0x8a, 0x9b, 0x04, - 0x42, 0x9a, 0xd0, 0x2b, 0x26, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x28, 0x01, 0xd1, 0x0b, 0x98, 0x01, - 0x60, 0xc8, 0x7a, 0xb9, 0x00, 0xcb, 0x1a, 0x59, - 0x00, 0x89, 0x19, 0x09, 0x98, 0x00, 0x61, 0x08, - 0xe0, 0x05, 0xe0, 0x1f, 0xe0, 0x1e, 0x98, 0x01, - 0x63, 0xe0, 0x98, 0x00, 0x64, 0x20, 0x2d, 0x00, - 0xdd, 0x14, 0x98, 0x06, 0x9a, 0x03, 0xa9, 0x02, - 0xf0, 0x00, 0xf8, 0xec, 0x28, 0x4d, 0xd1, 0x06, - 0x7a, 0xb9, 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, - 0x19, 0x09, 0x98, 0x04, 0x61, 0x48, 0xa8, 0x02, - 0x88, 0x00, 0x18, 0x30, 0x04, 0x06, 0x0c, 0x36, - 0x42, 0xae, 0xdb, 0xea, 0x98, 0x07, 0x99, 0x05, - 0x42, 0x88, 0xdc, 0xa4, 0x20, 0x00, 0xb0, 0x08, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x8f, 0x80, - 0x2e, 0x08, 0x90, 0x30, 0x2e, 0x08, 0x89, 0x98, - 0xb5, 0x80, 0x04, 0x09, 0x0c, 0x09, 0xf7, 0xf3, - 0xfb, 0xd7, 0x20, 0x08, 0xf7, 0xf3, 0xfb, 0xf0, - 0x20, 0x04, 0xf7, 0xf3, 0xfb, 0xed, 0x20, 0x0c, - 0xf7, 0xf3, 0xfb, 0xea, 0x20, 0x10, 0xf7, 0xf3, - 0xfb, 0xe7, 0x4f, 0x07, 0x60, 0xf8, 0x20, 0x18, - 0xf7, 0xf3, 0xfb, 0xe2, 0x60, 0xb8, 0x48, 0x05, - 0x78, 0x01, 0x23, 0x20, 0x43, 0x19, 0x70, 0x01, - 0x20, 0x00, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1a, 0xcc, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xb0, 0x04, 0x09, 0x0c, 0x09, 0xb0, 0x81, - 0xf7, 0xf3, 0xfb, 0xb2, 0x20, 0x08, 0xf7, 0xf3, - 0xfb, 0xcb, 0x20, 0x04, 0xf7, 0xf3, 0xfb, 0xc8, - 0x20, 0x0c, 0xf7, 0xf3, 0xfb, 0xc5, 0x20, 0x10, - 0xf7, 0xf3, 0xfb, 0xc2, 0x04, 0x00, 0x0c, 0x00, - 0x4f, 0x11, 0x60, 0xf8, 0x20, 0x18, 0xf7, 0xf3, - 0xfb, 0xbb, 0x60, 0xb8, 0x20, 0x04, 0xf7, 0xf3, - 0xfb, 0xb7, 0x20, 0x0c, 0xf7, 0xf3, 0xfb, 0xb4, - 0x04, 0x04, 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, - 0xdd, 0x0c, 0x4d, 0x0a, 0x46, 0x69, 0x1c, 0x28, - 0x4a, 0x09, 0xf0, 0x00, 0xf8, 0x7b, 0xa8, 0x00, - 0x88, 0x00, 0x18, 0x38, 0x04, 0x07, 0x0c, 0x3f, - 0x42, 0xa7, 0xdb, 0xf3, 0x20, 0x00, 0xb0, 0x01, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1a, 0xcc, 0x2e, 0x08, 0x8a, 0x98, - 0x00, 0x00, 0xff, 0xff, 0xb4, 0x80, 0x04, 0x02, - 0x0c, 0x12, 0x20, 0x00, 0x49, 0x0a, 0x88, 0x49, - 0x29, 0x00, 0xdd, 0x0d, 0x4b, 0x08, 0x68, 0xdf, - 0x00, 0xc3, 0x18, 0x1b, 0x00, 0x9b, 0x18, 0xfb, - 0x89, 0xdb, 0x42, 0x93, 0xd0, 0x05, 0x30, 0x01, - 0x04, 0x00, 0x0c, 0x00, 0x42, 0x81, 0xdc, 0xf3, - 0x48, 0x02, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x80, 0x00, 0x00, 0xff, 0xff, - 0xb4, 0x80, 0x06, 0x0a, 0x0e, 0x12, 0x21, 0x00, - 0x32, 0x01, 0x2a, 0x00, 0xdd, 0x0a, 0x5c, 0x47, - 0x0a, 0x3b, 0xd2, 0x02, 0x20, 0x00, 0xbc, 0x80, - 0x47, 0x70, 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, - 0x42, 0x8a, 0xdc, 0xf4, 0x20, 0xff, 0xbc, 0x80, - 0x47, 0x70, 0xb4, 0x90, 0x04, 0x02, 0x0c, 0x12, - 0x04, 0x0f, 0x0c, 0x3f, 0x42, 0xba, 0xda, 0x29, - 0x20, 0x00, 0x49, 0x15, 0x00, 0xd3, 0x18, 0x9b, - 0x00, 0x9b, 0x68, 0xcc, 0x18, 0xe4, 0x81, 0xe0, - 0x68, 0xcc, 0x18, 0xe4, 0x77, 0x20, 0x68, 0xcc, - 0x18, 0xe4, 0x60, 0x60, 0x68, 0xcc, 0x50, 0xe0, - 0x68, 0xcc, 0x18, 0xe4, 0x82, 0x20, 0x68, 0xcc, - 0x18, 0xe4, 0x60, 0xa0, 0x68, 0xcc, 0x18, 0xe4, - 0x81, 0xa0, 0x68, 0xcc, 0x18, 0xe4, 0x61, 0x60, - 0x68, 0xcc, 0x18, 0xe4, 0x83, 0x20, 0x68, 0xcc, - 0x18, 0xe4, 0x83, 0x60, 0x68, 0xcc, 0x18, 0xe3, - 0x82, 0x58, 0x32, 0x01, 0x04, 0x12, 0x0c, 0x12, - 0x42, 0xba, 0xdb, 0xd7, 0xbc, 0x90, 0x47, 0x70, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0xf0, 0x04, 0x15, - 0x0c, 0x2d, 0x1c, 0x07, 0x20, 0x08, 0x1c, 0x0c, - 0xf7, 0xf3, 0xfb, 0x26, 0x06, 0x06, 0x0e, 0x36, - 0x20, 0x08, 0xf7, 0xf3, 0xfb, 0x21, 0x06, 0x01, - 0x0e, 0x09, 0x1c, 0x88, 0x80, 0x20, 0x2e, 0x48, - 0xd0, 0x42, 0xdc, 0x0c, 0x1e, 0xb0, 0x28, 0x09, - 0xd2, 0x61, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x25, 0x2c, 0x5e, 0x5e, - 0x5e, 0x5e, 0x33, 0x1e, 0x4f, 0x00, 0x2e, 0x56, - 0xd0, 0x4e, 0xdc, 0x0a, 0x2e, 0x4d, 0xd0, 0x36, - 0x2e, 0x4e, 0xd1, 0x51, 0x1c, 0x38, 0x1c, 0x2a, - 0xf0, 0x00, 0xfd, 0x4c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2e, 0x58, 0xd0, 0x32, 0x2e, 0x5d, - 0xd1, 0x46, 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, - 0xfc, 0x11, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfb, 0xbc, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0x1c, 0x2a, 0xf0, 0x00, 0xfb, 0xcd, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, - 0xf0, 0x00, 0xfb, 0xd8, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, - 0xfb, 0xe3, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfc, 0x00, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, - 0x1c, 0x2a, 0xf0, 0x00, 0xfc, 0x71, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, - 0xf0, 0x00, 0xfd, 0x6c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, - 0xfd, 0x97, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfd, 0xb4, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xff, - 0x1c, 0x38, 0x1c, 0x2a, 0xf0, 0x00, 0xfd, 0xbe, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0x22, 0x01, 0x20, 0x00, 0xb0, 0x88, 0x4f, 0x35, - 0x88, 0x79, 0x25, 0x00, 0x29, 0x00, 0xdd, 0x35, - 0x00, 0xc4, 0x18, 0x24, 0x00, 0xa4, 0x68, 0xf9, - 0x19, 0x09, 0x7f, 0x0e, 0x0a, 0x33, 0xd2, 0x1d, - 0x09, 0xf3, 0xd2, 0x1b, 0x8a, 0x0b, 0x2b, 0x00, - 0xd0, 0x18, 0x00, 0xc3, 0x18, 0x18, 0x00, 0x80, - 0x68, 0xfa, 0x18, 0x10, 0x8a, 0x02, 0x89, 0xc9, - 0x4b, 0x29, 0x20, 0x02, 0xf0, 0x00, 0xf8, 0x52, - 0x21, 0x00, 0x43, 0xc9, 0x42, 0x88, 0xd1, 0x01, - 0x1c, 0x08, 0xe0, 0x42, 0x68, 0xf8, 0x19, 0x00, - 0x7f, 0x01, 0x23, 0x40, 0x43, 0x19, 0x77, 0x01, - 0x1c, 0x28, 0xe0, 0x3a, 0x8a, 0x0b, 0x2b, 0x00, - 0xd1, 0x02, 0x23, 0xa0, 0x43, 0x33, 0x77, 0x0b, - 0x68, 0xf9, 0x19, 0x09, 0x7f, 0x09, 0x0a, 0x09, - 0xd2, 0x00, 0x22, 0x00, 0x88, 0x79, 0x30, 0x01, - 0x42, 0x81, 0xdc, 0xc9, 0x2a, 0x00, 0xd1, 0x01, - 0x20, 0x02, 0xe0, 0x26, 0x78, 0x38, 0x08, 0x81, - 0xd2, 0x22, 0x23, 0x02, 0x43, 0x18, 0x70, 0x38, - 0x78, 0x38, 0x09, 0x00, 0xd3, 0x02, 0x89, 0x78, - 0xf7, 0xfe, 0xfd, 0x1d, 0x20, 0x0c, 0xab, 0x00, - 0x70, 0x18, 0x88, 0x78, 0x0a, 0x01, 0x70, 0x59, - 0x70, 0x98, 0x46, 0x68, 0x21, 0x20, 0xf7, 0xfd, - 0xf9, 0xa7, 0x78, 0x38, 0x08, 0x81, 0xd3, 0x05, - 0x09, 0x41, 0xd3, 0x03, 0x09, 0x00, 0xd2, 0x01, - 0xf0, 0x00, 0xfa, 0xcd, 0x22, 0x14, 0x21, 0x00, - 0x20, 0x70, 0x1c, 0x2b, 0xf0, 0x00, 0xf8, 0x0a, - 0x20, 0x01, 0xb0, 0x08, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x80, - 0x00, 0x00, 0x13, 0x88, 0xb5, 0xf0, 0x06, 0x04, - 0x0e, 0x24, 0x04, 0x08, 0x0c, 0x00, 0xb0, 0x83, - 0x90, 0x00, 0x04, 0x10, 0x0c, 0x00, 0x90, 0x01, - 0x04, 0x1e, 0x0c, 0x36, 0xb0, 0x89, 0x98, 0x0a, - 0xf0, 0x00, 0xf9, 0x28, 0x90, 0x00, 0x23, 0x01, - 0x42, 0xd8, 0xd1, 0x00, 0xe0, 0x55, 0x98, 0x00, - 0x01, 0x01, 0x91, 0x0b, 0x4f, 0x2b, 0x19, 0xc8, - 0x70, 0x44, 0x9a, 0x09, 0x80, 0x42, 0x5c, 0x7a, - 0x23, 0x01, 0x43, 0x1a, 0x54, 0x7a, 0x99, 0x0a, - 0x80, 0xc1, 0x1c, 0x05, 0x60, 0x86, 0x20, 0x00, - 0x21, 0x00, 0x00, 0x42, 0xab, 0x01, 0x52, 0x99, - 0x30, 0x01, 0x04, 0x00, 0x14, 0x00, 0x28, 0x10, - 0xdb, 0xf6, 0x02, 0x20, 0x23, 0xff, 0x43, 0x18, - 0xab, 0x01, 0x80, 0x18, 0x2c, 0x02, 0xd0, 0x01, - 0x2c, 0x4e, 0xd1, 0x10, 0x20, 0xff, 0x02, 0x00, - 0x9a, 0x09, 0x40, 0x10, 0x23, 0xff, 0x43, 0x18, - 0xab, 0x01, 0x80, 0x58, 0x9a, 0x09, 0x02, 0x10, - 0x23, 0xff, 0x02, 0x1b, 0x40, 0x18, 0x23, 0xff, - 0x43, 0x18, 0xab, 0x02, 0x80, 0x18, 0x21, 0x04, - 0x98, 0x0a, 0xaa, 0x01, 0xf7, 0xf7, 0xfe, 0x98, - 0x04, 0x01, 0x0c, 0x09, 0x81, 0xa9, 0x20, 0x00, - 0x43, 0xc0, 0x42, 0x81, 0xd1, 0x07, 0x21, 0x00, - 0x9a, 0x0b, 0x54, 0xb9, 0x21, 0xff, 0x70, 0x69, - 0x0c, 0x01, 0x81, 0xa9, 0xe0, 0x0d, 0x99, 0x0b, - 0x5c, 0x78, 0x23, 0x02, 0x43, 0x18, 0x54, 0x78, - 0x2e, 0x00, 0xd0, 0x05, 0x22, 0x02, 0x99, 0x00, - 0x1c, 0x30, 0xf7, 0xfe, 0xfb, 0xe0, 0x80, 0xa8, - 0x20, 0x00, 0xb0, 0x0c, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x90, - 0xb5, 0xf0, 0x04, 0x00, 0x14, 0x00, 0x01, 0x05, - 0x4c, 0x10, 0x5d, 0x60, 0x26, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x19, 0x2f, 0x89, 0xb8, 0xf7, 0xf7, - 0xff, 0xe3, 0x22, 0x00, 0x43, 0xd2, 0x21, 0xff, - 0x42, 0x90, 0xd1, 0x07, 0x55, 0x66, 0x70, 0x79, - 0x0c, 0x00, 0x81, 0xb8, 0x1c, 0x10, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x55, 0x66, 0x70, 0x79, - 0x1c, 0x30, 0x49, 0x03, 0x81, 0xb9, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x90, - 0x00, 0x00, 0xff, 0xff, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x00, 0x47, 0x70, 0xb5, 0xb0, 0x04, 0x0d, - 0x0c, 0x2d, 0x1c, 0x07, 0xb0, 0x84, 0xf0, 0x00, - 0xf8, 0x2d, 0x23, 0x01, 0x42, 0xd8, 0xd1, 0x01, - 0x20, 0x01, 0xe0, 0x15, 0x1c, 0x28, 0xf7, 0xfd, - 0xf9, 0xb1, 0x1c, 0x04, 0xd0, 0x0f, 0x1c, 0x20, - 0x1c, 0x39, 0x1c, 0x2a, 0xf0, 0x10, 0xf8, 0xca, - 0x20, 0x06, 0xab, 0x00, 0x80, 0x18, 0x70, 0x9d, - 0x94, 0x01, 0x46, 0x69, 0x20, 0x85, 0xf7, 0xfd, - 0xf8, 0xeb, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x02, - 0xb0, 0x04, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x06, 0x00, 0x0e, 0x00, 0x28, 0x0a, 0xdd, 0x01, - 0x20, 0xff, 0x47, 0x70, 0x01, 0x00, 0x49, 0x02, - 0x18, 0x40, 0x78, 0x40, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x90, 0xb4, 0x90, 0x21, 0x00, - 0x4b, 0x13, 0x01, 0x0a, 0x5c, 0x9f, 0x2f, 0x00, - 0xd0, 0x18, 0x18, 0xd7, 0x78, 0x7c, 0x78, 0x02, - 0x42, 0x94, 0xd1, 0x13, 0x2a, 0x00, 0xd0, 0x0e, - 0x2a, 0x42, 0xd0, 0x0c, 0x2a, 0x70, 0xd0, 0x0a, - 0x2a, 0x73, 0xd0, 0x08, 0x79, 0x02, 0x78, 0xc4, - 0x02, 0x24, 0x19, 0x12, 0x04, 0x12, 0x0c, 0x12, - 0x88, 0x7f, 0x42, 0x97, 0xd1, 0x02, 0x1c, 0x08, - 0xbc, 0x90, 0x47, 0x70, 0x31, 0x01, 0x04, 0x09, - 0x14, 0x09, 0x29, 0x0a, 0xd1, 0xdd, 0x20, 0x00, - 0x43, 0xc0, 0xbc, 0x90, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x90, 0xb4, 0xb0, 0x06, 0x03, - 0x0e, 0x1b, 0x04, 0x0f, 0x0c, 0x3f, 0x06, 0x14, - 0x0e, 0x24, 0x20, 0x00, 0x4a, 0x09, 0x01, 0x01, - 0x18, 0x89, 0x78, 0x4d, 0x42, 0x9d, 0xd1, 0x04, - 0x2c, 0x00, 0xd0, 0x09, 0x88, 0x49, 0x42, 0xb9, - 0xd0, 0x06, 0x30, 0x01, 0x04, 0x00, 0x14, 0x00, - 0x28, 0x0a, 0xd1, 0xf0, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xb0, 0x47, 0x70, 0x2e, 0x08, 0x8f, 0x90, - 0xb4, 0x80, 0x04, 0x02, 0x0c, 0x12, 0x20, 0x00, - 0x49, 0x09, 0x01, 0x03, 0x5c, 0xcf, 0x2f, 0x00, - 0xd0, 0x06, 0x18, 0x5b, 0x89, 0x9b, 0x42, 0x93, - 0xd1, 0x02, 0x20, 0xff, 0xbc, 0x80, 0x47, 0x70, - 0x30, 0x01, 0x04, 0x00, 0x0c, 0x00, 0x28, 0x0a, - 0xdb, 0xef, 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x8f, 0x90, 0x48, 0x0a, 0x21, 0x00, - 0x4a, 0x0a, 0x01, 0x0b, 0x5c, 0xd3, 0x2b, 0x00, - 0xd1, 0x00, 0x1c, 0x08, 0x31, 0x01, 0x04, 0x09, - 0x0c, 0x09, 0x29, 0x0a, 0xdb, 0xf5, 0x4b, 0x04, - 0x42, 0x98, 0xd0, 0x02, 0x04, 0x00, 0x14, 0x00, - 0x47, 0x70, 0x20, 0x00, 0x43, 0xc0, 0x47, 0x70, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x8f, 0x90, - 0xb4, 0x80, 0x04, 0x07, 0x0c, 0x3f, 0x20, 0x00, - 0x49, 0x0b, 0x88, 0x4a, 0x2a, 0x00, 0xdd, 0x10, - 0x68, 0xc9, 0x00, 0xc3, 0x18, 0x1b, 0x00, 0x9b, - 0x18, 0xcb, 0x89, 0xdb, 0x42, 0xbb, 0xd1, 0x05, - 0x00, 0xc3, 0x18, 0x18, 0x00, 0x80, 0x18, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0x30, 0x01, 0x42, 0x82, - 0xdc, 0xef, 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0x90, 0x06, 0x03, - 0x0e, 0x1b, 0x06, 0x0c, 0x0e, 0x24, 0x06, 0x00, - 0x0e, 0x00, 0x01, 0x02, 0x48, 0x16, 0x18, 0x11, - 0x27, 0x00, 0x2c, 0x0a, 0xd0, 0x0c, 0x2c, 0x0b, - 0xd1, 0x06, 0x2b, 0x0a, 0xda, 0x04, 0x54, 0x87, - 0x20, 0xff, 0x70, 0x48, 0x48, 0x11, 0x81, 0x88, - 0x1c, 0x38, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2b, 0x0a, 0xda, 0xf9, 0x5c, 0x84, 0x23, 0x02, - 0x43, 0x23, 0x54, 0x83, 0x78, 0x48, 0x28, 0x00, - 0xd0, 0x0b, 0x28, 0x02, 0xd1, 0xf0, 0x88, 0x48, - 0xf7, 0xff, 0xff, 0xba, 0x28, 0x00, 0xd0, 0xeb, - 0x7f, 0x01, 0x23, 0x10, 0x43, 0x19, 0x77, 0x01, - 0xe7, 0xe6, 0x48, 0x05, 0x78, 0x01, 0x23, 0x40, - 0x43, 0x19, 0x70, 0x01, 0xe7, 0xe0, 0x00, 0x00, - 0x2e, 0x08, 0x8f, 0x90, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x8f, 0x80, 0xb5, 0x90, 0x04, 0x07, - 0x14, 0x3f, 0x2f, 0x0a, 0xda, 0x25, 0x2f, 0x00, - 0xdb, 0x23, 0x01, 0x38, 0x49, 0x17, 0x18, 0x44, - 0x78, 0x60, 0x28, 0x02, 0xd1, 0x0d, 0x88, 0x60, - 0xf7, 0xff, 0xff, 0x96, 0x28, 0x00, 0xd0, 0x08, - 0x7f, 0x01, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x19, - 0x77, 0x01, 0x7f, 0x01, 0x23, 0xa0, 0x43, 0x19, - 0x77, 0x01, 0x78, 0x60, 0x28, 0x42, 0xd1, 0x09, - 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0xa5, 0x4b, 0x0c, - 0x22, 0x11, 0x21, 0x00, 0x20, 0x42, 0xf7, 0xff, - 0xfe, 0x2d, 0xe0, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xfe, 0x9b, 0xf7, 0xff, 0xfd, 0xb4, 0x28, 0x00, - 0xd1, 0x03, 0xf7, 0xff, 0xfd, 0xb0, 0x28, 0x00, - 0xd0, 0xfb, 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x8f, 0x90, - 0x00, 0x00, 0x27, 0x10, 0xb5, 0xb0, 0x04, 0x05, - 0x0c, 0x2d, 0x24, 0x00, 0x27, 0x00, 0x48, 0x0e, - 0x21, 0x07, 0xf7, 0xfe, 0xff, 0x4b, 0x1c, 0x28, - 0xf7, 0xff, 0xff, 0x5e, 0x28, 0x00, 0xd0, 0x0e, - 0x8a, 0x41, 0x29, 0x00, 0xd0, 0x00, 0x1c, 0x0f, - 0x69, 0x40, 0x28, 0x00, 0xd0, 0x03, 0x88, 0x00, - 0x42, 0x88, 0xd0, 0x00, 0x1c, 0x04, 0x42, 0xbc, - 0xd0, 0x01, 0xf7, 0xf2, 0xf9, 0x27, 0x20, 0x00, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x90, 0x30, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x1c, 0x07, 0x69, 0x40, 0x28, 0x00, - 0xd0, 0x06, 0x8b, 0x39, 0x1c, 0x4a, 0x00, 0xd2, - 0x00, 0xc9, 0xf7, 0xfd, 0xf8, 0x4c, 0xe0, 0x02, - 0x20, 0x08, 0xf7, 0xfd, 0xf8, 0x43, 0x61, 0x78, - 0x69, 0x78, 0x28, 0x00, 0xd0, 0x0e, 0x8b, 0x39, - 0x31, 0x01, 0x83, 0x39, 0x8b, 0x39, 0x00, 0xc9, - 0x18, 0x40, 0x38, 0x40, 0x87, 0x04, 0x21, 0x00, - 0x8b, 0x3a, 0x00, 0xd2, 0x69, 0x78, 0x18, 0x80, - 0x38, 0x20, 0x76, 0x81, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0xb4, 0xb0, 0x06, 0x09, 0x0e, 0x09, - 0x04, 0x12, 0x0c, 0x12, 0x06, 0x1b, 0x0e, 0x1b, - 0x9f, 0x03, 0x06, 0x3c, 0x0e, 0x24, 0x27, 0x9f, - 0x70, 0x07, 0x27, 0x80, 0x70, 0x47, 0x27, 0x32, - 0x70, 0x87, 0x27, 0x82, 0x70, 0xc7, 0x27, 0x00, - 0x71, 0x07, 0x25, 0x06, 0x71, 0x45, 0x71, 0x81, - 0x0a, 0x11, 0x71, 0xc1, 0x72, 0x02, 0x08, 0x59, - 0x43, 0x21, 0x72, 0x41, 0x72, 0x87, 0x72, 0xc7, - 0x1c, 0x38, 0xbc, 0xb0, 0x47, 0x70, 0xb5, 0xb0, - 0x04, 0x14, 0x0c, 0x24, 0x1c, 0x07, 0x79, 0x00, - 0x02, 0x00, 0x79, 0x7a, 0x43, 0x10, 0x04, 0x05, - 0x0c, 0x2d, 0x1d, 0xf8, 0x30, 0x05, 0x1c, 0x22, - 0xf0, 0x0f, 0xff, 0x1c, 0x19, 0x28, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x39, 0x71, 0x78, - 0x0a, 0x20, 0x72, 0xb8, 0x72, 0xfc, 0x20, 0x00, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xb0, - 0x04, 0x15, 0x0c, 0x2d, 0x1c, 0x07, 0x79, 0x00, - 0x02, 0x00, 0x79, 0x7a, 0x43, 0x10, 0x04, 0x04, - 0x0c, 0x24, 0x19, 0x38, 0x30, 0x06, 0x1c, 0x2a, - 0xf0, 0x0f, 0xff, 0x00, 0x19, 0x60, 0x04, 0x00, - 0x0c, 0x00, 0x12, 0x01, 0x71, 0x39, 0x71, 0x78, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf3, 0x79, 0x08, 0x02, 0x00, 0x1c, 0x0f, - 0x79, 0x49, 0x43, 0x08, 0x04, 0x00, 0x0c, 0x00, - 0x25, 0x9f, 0x23, 0x80, 0x22, 0x32, 0x28, 0x80, - 0xda, 0x04, 0x24, 0x04, 0x70, 0xbd, 0x70, 0xfb, - 0x71, 0x3a, 0xe0, 0x07, 0x28, 0xff, 0xda, 0x07, - 0x24, 0x05, 0x70, 0x7d, 0x70, 0xbb, 0x70, 0xfa, - 0x21, 0x81, 0x71, 0x39, 0x71, 0x78, 0xe0, 0x00, - 0x24, 0x06, 0x19, 0x00, 0x1c, 0x06, 0xf7, 0xfc, - 0xff, 0xb5, 0x1c, 0x05, 0xd0, 0x0a, 0x20, 0x06, - 0x1b, 0x00, 0x19, 0xc1, 0x1c, 0x28, 0x1c, 0x32, - 0xf0, 0x0f, 0xfe, 0xcc, 0x98, 0x00, 0x60, 0x85, - 0x98, 0x00, 0x81, 0x86, 0x20, 0x00, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x47, 0x70, - 0xb5, 0xf0, 0x06, 0x12, 0x0e, 0x12, 0xb0, 0x81, - 0x92, 0x00, 0x25, 0x00, 0x1c, 0x04, 0x1c, 0x0f, - 0x28, 0x00, 0xd0, 0x01, 0x2f, 0x00, 0xd1, 0x01, - 0x20, 0x00, 0xe0, 0x34, 0x26, 0x00, 0x1c, 0x20, - 0xf0, 0x0f, 0xff, 0x20, 0x28, 0x00, 0xd9, 0x2a, - 0x5d, 0xa0, 0x28, 0x80, 0xdb, 0x03, 0x28, 0x9f, - 0xdc, 0x01, 0x21, 0x00, 0xe0, 0x00, 0x21, 0xff, - 0x9a, 0x00, 0x2a, 0x00, 0xd0, 0x0f, 0x28, 0x87, - 0xd1, 0x01, 0x22, 0xff, 0xe0, 0x00, 0x22, 0x00, - 0x2a, 0x00, 0xd0, 0x10, 0x29, 0x00, 0xd0, 0x0e, - 0x1c, 0x69, 0x04, 0x0a, 0x0c, 0x12, 0x1c, 0x29, - 0x54, 0x78, 0x1c, 0x15, 0xe0, 0x07, 0x29, 0x00, - 0xd0, 0x05, 0x1c, 0x69, 0x04, 0x09, 0x0c, 0x09, - 0x1c, 0x2a, 0x54, 0xb8, 0x1c, 0x0d, 0x1c, 0x70, - 0x04, 0x06, 0x0c, 0x36, 0x1c, 0x20, 0xf0, 0x0f, - 0xfe, 0xf5, 0x42, 0xb0, 0xd8, 0xd4, 0x20, 0x00, - 0x55, 0x78, 0x04, 0x28, 0x14, 0x00, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0xb5, 0xf0, 0x04, 0x0d, 0x0c, 0x2d, 0x26, 0x09, - 0x70, 0x06, 0x1c, 0x07, 0x70, 0x7d, 0x24, 0x00, - 0x2d, 0x00, 0xdd, 0x09, 0x20, 0x08, 0xf7, 0xf2, - 0xff, 0x27, 0x19, 0x39, 0x70, 0x88, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0x42, 0xac, 0xdb, 0xf5, - 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x27, 0x00, - 0x2c, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf2, - 0xff, 0x13, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xa7, 0xdb, 0xf7, 0x20, 0x02, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, 0xdd, 0x07, - 0x20, 0x08, 0xf7, 0xf2, 0xff, 0x01, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x42, 0xa7, 0xdb, 0xf7, - 0x20, 0x03, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x27, 0x00, - 0x2c, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf2, - 0xfe, 0xef, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xa7, 0xdb, 0xf7, 0x20, 0x08, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, 0xdd, 0x07, - 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0xdd, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x42, 0xa7, 0xdb, 0xf7, - 0x20, 0x5d, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x04, 0x14, 0x0c, 0x24, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0xce, 0x4f, 0x37, 0x00, 0xe3, - 0x19, 0x1c, 0x00, 0xa4, 0x68, 0xf9, 0x19, 0x09, - 0x77, 0x88, 0x20, 0x08, 0x1c, 0x26, 0xf7, 0xf2, - 0xfe, 0xc3, 0x06, 0x05, 0x0e, 0x2d, 0x68, 0xf8, - 0x19, 0x80, 0x68, 0x40, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xfc, 0xff, 0x06, 0x1c, 0x68, 0xf7, 0xfc, - 0xfe, 0xdd, 0x68, 0xf9, 0x19, 0x09, 0x60, 0x48, - 0x28, 0x00, 0xd1, 0x0b, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x1c, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0xac, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0x42, 0xae, - 0xdb, 0xf7, 0xe0, 0x13, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x0b, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0xa0, - 0x68, 0xf9, 0x19, 0x09, 0x68, 0x49, 0x55, 0x88, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0x42, 0xae, - 0xdb, 0xf3, 0x21, 0x00, 0x68, 0xf8, 0x19, 0x00, - 0x68, 0x40, 0x55, 0x81, 0x20, 0x08, 0xf7, 0xf2, - 0xfe, 0x8f, 0x06, 0x05, 0x0e, 0x2d, 0x68, 0xf8, - 0x59, 0x00, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xfc, - 0xfe, 0xd3, 0x1c, 0x68, 0xf7, 0xfc, 0xfe, 0xaa, - 0x68, 0xf9, 0x51, 0x08, 0x28, 0x00, 0xd1, 0x0b, - 0x27, 0x00, 0x2d, 0x00, 0xdd, 0x1a, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0x7a, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0x42, 0xaf, 0xdb, 0xf7, 0xe0, 0x11, - 0x26, 0x00, 0x2d, 0x00, 0xdd, 0x0a, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0x6e, 0x68, 0xf9, 0x59, 0x09, - 0x55, 0x88, 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, - 0x42, 0xae, 0xdb, 0xf4, 0x21, 0x00, 0x68, 0xf8, - 0x59, 0x00, 0x55, 0x81, 0x20, 0x48, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x8f, 0x80, - 0xb5, 0xf0, 0x04, 0x0d, 0x0c, 0x2d, 0x20, 0x18, - 0xf7, 0xf2, 0xfe, 0x56, 0x4f, 0x4e, 0x1d, 0xfc, - 0x34, 0x39, 0x7a, 0xa0, 0x28, 0x00, 0xd0, 0x0e, - 0x28, 0x01, 0xd0, 0x0c, 0x27, 0x00, 0x1e, 0xec, - 0x2c, 0x00, 0xdd, 0x68, 0x20, 0x08, 0xf7, 0xf2, - 0xfe, 0x47, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xbc, 0xdc, 0xf7, 0xe0, 0x84, 0x28, 0x00, - 0xd1, 0x01, 0x21, 0x02, 0xe0, 0x00, 0x21, 0x01, - 0x1c, 0x38, 0xf7, 0xfe, 0xfd, 0x3b, 0x20, 0x08, - 0xf7, 0xf2, 0xfe, 0x36, 0x06, 0x05, 0x0e, 0x2d, - 0x1c, 0x68, 0xf7, 0xfc, 0xfe, 0x57, 0x7a, 0xa1, - 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, 0x50, 0x78, - 0x28, 0x00, 0xd1, 0x0b, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x29, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0x24, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0x42, 0xae, - 0xdb, 0xf7, 0xe0, 0x20, 0x26, 0x00, 0x2d, 0x00, - 0xdd, 0x0d, 0x20, 0x08, 0xf7, 0xf2, 0xfe, 0x18, - 0x7a, 0xa1, 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, - 0x58, 0x79, 0x55, 0x88, 0x1c, 0x70, 0x06, 0x06, - 0x0e, 0x36, 0x42, 0xae, 0xdb, 0xf1, 0x20, 0x00, - 0x7a, 0xa1, 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, - 0x58, 0x79, 0x55, 0x88, 0x7a, 0xa0, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x58, 0x39, 0x22, 0x00, - 0x1c, 0x08, 0xf7, 0xff, 0xfe, 0x81, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0xfa, 0x06, 0x06, 0x0e, 0x36, - 0x1c, 0x70, 0xf7, 0xfc, 0xfe, 0x1b, 0x7a, 0xa1, - 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, 0x19, 0xc9, - 0x60, 0x48, 0x28, 0x00, 0xd1, 0x0c, 0x27, 0x00, - 0x2e, 0x00, 0xdd, 0x08, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0xe7, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xb7, 0xdb, 0xf7, 0xe0, 0x24, 0xe0, 0x23, - 0x25, 0x00, 0x2e, 0x00, 0xdd, 0x0e, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0xda, 0x7a, 0xa1, 0x00, 0xcb, - 0x1a, 0x59, 0x00, 0x89, 0x19, 0xc9, 0x68, 0x49, - 0x55, 0x48, 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, - 0x42, 0xb5, 0xdb, 0xf0, 0x20, 0x00, 0x7a, 0xa1, - 0x00, 0xcb, 0x1a, 0x59, 0x00, 0x89, 0x19, 0xc9, - 0x68, 0x49, 0x55, 0x48, 0x7a, 0xa0, 0x00, 0xc3, - 0x1a, 0x18, 0x00, 0x80, 0x19, 0xc0, 0x68, 0x41, - 0x22, 0x00, 0x1c, 0x08, 0xf7, 0xff, 0xfe, 0x40, - 0x20, 0x4d, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x90, 0x30, 0xb5, 0xf0, 0x1c, 0x07, - 0x20, 0x04, 0xb0, 0x81, 0xf7, 0xf2, 0xfd, 0xb0, - 0x20, 0x04, 0xf7, 0xf2, 0xfd, 0xad, 0x20, 0x18, - 0xf7, 0xf2, 0xfd, 0xaa, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0xa7, 0x04, 0x00, 0x0c, 0x00, 0x90, 0x00, - 0x26, 0x00, 0x28, 0x00, 0xdd, 0x2e, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0x9e, 0x04, 0x05, 0x0c, 0x2d, - 0x24, 0x00, 0x2d, 0x00, 0xdd, 0x08, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0x96, 0x55, 0x38, 0x1c, 0x60, - 0x04, 0x04, 0x0c, 0x24, 0x42, 0xac, 0xdb, 0xf6, - 0x20, 0x20, 0x55, 0x78, 0x19, 0x70, 0x06, 0x06, - 0x0e, 0x36, 0x20, 0x08, 0xf7, 0xf2, 0xfd, 0x88, - 0x04, 0x04, 0x0c, 0x24, 0x25, 0x00, 0x2c, 0x00, - 0xdd, 0x08, 0x20, 0x08, 0xf7, 0xf2, 0xfd, 0x80, - 0x55, 0x78, 0x1c, 0x68, 0x04, 0x05, 0x0c, 0x2d, - 0x42, 0xa5, 0xdb, 0xf6, 0x20, 0x00, 0x55, 0x38, - 0x19, 0x30, 0x06, 0x06, 0x0e, 0x36, 0x98, 0x00, - 0x42, 0x86, 0xdb, 0xd0, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x6f, 0x04, 0x05, 0x0c, 0x2d, 0x24, 0x00, - 0x2d, 0x00, 0xdd, 0x08, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x67, 0x55, 0x38, 0x1c, 0x60, 0x06, 0x04, - 0x0e, 0x24, 0x42, 0xac, 0xdb, 0xf6, 0x20, 0x00, - 0x55, 0x78, 0x20, 0x4e, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x04, 0x0c, - 0x0c, 0x24, 0x26, 0x00, 0x2c, 0x00, 0xdd, 0x24, - 0x4d, 0x14, 0x20, 0x18, 0xf7, 0xf2, 0xfd, 0x50, - 0x68, 0x29, 0x42, 0x88, 0xd1, 0x12, 0x20, 0x06, - 0xf7, 0xf2, 0xfd, 0x4a, 0x20, 0x01, 0xf7, 0xf2, - 0xfd, 0x47, 0x20, 0x01, 0xf7, 0xf2, 0xfd, 0x44, - 0x20, 0x10, 0xf7, 0xf2, 0xfd, 0x41, 0x20, 0x28, - 0xf7, 0xf2, 0xfd, 0x3e, 0x20, 0x10, 0xf7, 0xf2, - 0xfd, 0x3b, 0xe0, 0x08, 0x27, 0x00, 0x20, 0x08, - 0xf7, 0xf2, 0xfd, 0x36, 0x1c, 0x78, 0x04, 0x07, - 0x0c, 0x3f, 0x2f, 0x0a, 0xdb, 0xf7, 0x42, 0xa6, - 0xdb, 0xdb, 0x20, 0x58, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xd0, - 0xb5, 0xb0, 0x1c, 0x07, 0x04, 0x08, 0x0c, 0x00, - 0x24, 0x00, 0x08, 0x85, 0x2d, 0x00, 0xdd, 0x17, - 0x2c, 0x00, 0xd1, 0x0d, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x1b, 0x70, 0x38, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x17, 0x70, 0x78, 0x20, 0x08, 0xf7, 0xf2, - 0xfd, 0x13, 0x70, 0xb8, 0x20, 0x08, 0xe0, 0x00, - 0x20, 0x20, 0xf7, 0xf2, 0xfd, 0x0d, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0x42, 0xa5, 0xdc, 0xe7, - 0x20, 0x0a, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x04, 0x0c, 0x0c, 0x24, 0x27, 0x00, - 0x2c, 0x00, 0xdd, 0x07, 0x20, 0x08, 0xf7, 0xf2, - 0xfc, 0xfb, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0x42, 0xa7, 0xdb, 0xf7, 0x20, 0x56, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, 0x04, 0x0c, - 0x0c, 0x24, 0x27, 0x00, 0x2c, 0x00, 0xdd, 0x07, - 0x20, 0x08, 0xf7, 0xf2, 0xfc, 0xe9, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0x42, 0xa7, 0xdb, 0xf7, - 0x20, 0xff, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf7, 0x06, 0x0e, 0x0e, 0x36, 0xb0, 0x83, - 0xf0, 0x0c, 0xfc, 0x22, 0x1c, 0x05, 0xd0, 0x05, - 0x00, 0xa8, 0x30, 0x0c, 0xf7, 0xf7, 0xf8, 0x5c, - 0x1c, 0x04, 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x22, - 0x95, 0x01, 0x1d, 0xe0, 0x30, 0x05, 0x90, 0x02, - 0x46, 0x6a, 0xb4, 0x04, 0x25, 0x00, 0x98, 0x04, - 0x1c, 0x31, 0xaa, 0x02, 0x1c, 0x2b, 0x1c, 0x27, - 0xf0, 0x0c, 0xf9, 0xc8, 0xb0, 0x01, 0x98, 0x00, - 0x60, 0x38, 0x28, 0x00, 0xd0, 0x0b, 0x99, 0x05, - 0xf0, 0x0c, 0xfb, 0x9e, 0x28, 0x00, 0xd1, 0x02, - 0x60, 0x7d, 0x1c, 0x38, 0xe0, 0x07, 0x68, 0x38, - 0xa9, 0x01, 0xf0, 0x0c, 0xf9, 0xe7, 0x1c, 0x20, - 0xf7, 0xf7, 0xf8, 0x58, 0x1c, 0x28, 0xb0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xff, 0x9c, 0x0b, 0x9d, 0x09, 0x9e, 0x0a, - 0xb0, 0x8c, 0x4a, 0x78, 0x92, 0x0b, 0x49, 0x78, - 0x91, 0x0a, 0x2c, 0x00, 0xd1, 0x0b, 0x20, 0x00, - 0x00, 0x81, 0x9a, 0x0b, 0x58, 0x51, 0x29, 0x00, - 0xd1, 0x01, 0x1c, 0x04, 0xe0, 0x19, 0x30, 0x01, - 0x28, 0x08, 0xdb, 0xf5, 0xe0, 0x15, 0x2c, 0x08, - 0xd8, 0x07, 0x3c, 0x01, 0x00, 0xa0, 0x9a, 0x0b, - 0x58, 0x10, 0x28, 0x00, 0xd0, 0x0d, 0x20, 0x00, - 0xe0, 0xcf, 0x23, 0x20, 0x99, 0x0a, 0x5e, 0xcc, - 0x1c, 0x60, 0x84, 0x08, 0x99, 0x0a, 0x5e, 0xc8, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0x64, 0x99, 0x0a, - 0x84, 0x08, 0x2e, 0x00, 0xd0, 0x03, 0x2e, 0x01, - 0xd1, 0x03, 0x22, 0x01, 0xe0, 0x02, 0x22, 0x00, - 0xe0, 0x00, 0x22, 0x03, 0x92, 0x01, 0x1c, 0x28, - 0xf0, 0x08, 0xfd, 0xd3, 0x90, 0x00, 0x00, 0x80, - 0x30, 0x80, 0xf7, 0xf6, 0xff, 0xf1, 0x1c, 0x07, - 0xd0, 0xdd, 0x98, 0x00, 0x1d, 0xc2, 0x32, 0x79, - 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, 0xfc, 0x9e, - 0x98, 0x00, 0x60, 0xf8, 0x1d, 0xf8, 0x30, 0x79, - 0x61, 0x38, 0x98, 0x0e, 0x86, 0x78, 0x98, 0x0f, - 0x86, 0xb8, 0x98, 0x0c, 0x90, 0x02, 0x99, 0x0d, - 0x91, 0x03, 0x9a, 0x0e, 0x18, 0x80, 0x38, 0x01, - 0x90, 0x04, 0x98, 0x0f, 0x18, 0x08, 0x38, 0x01, - 0x90, 0x05, 0xa8, 0x02, 0x1c, 0x29, 0xf0, 0x08, - 0xfd, 0xb3, 0x61, 0x78, 0x9a, 0x01, 0x2a, 0x00, - 0xd0, 0x0e, 0x2a, 0x01, 0xd1, 0x1e, 0x00, 0x80, - 0xf7, 0xf6, 0xff, 0xc6, 0x61, 0xb8, 0x28, 0x00, - 0xd0, 0x04, 0x69, 0x79, 0x00, 0x8a, 0x21, 0x00, - 0xf0, 0x0f, 0xfc, 0x74, 0x20, 0x01, 0xe0, 0x0b, - 0x00, 0x80, 0xf7, 0xf7, 0xf8, 0x01, 0x61, 0xb8, - 0x28, 0x00, 0xd0, 0x04, 0x69, 0x79, 0x00, 0x8a, - 0x21, 0x00, 0xf0, 0x0f, 0xfc, 0x67, 0x20, 0x00, - 0x86, 0x38, 0x23, 0x01, 0x03, 0xdb, 0x69, 0xf8, - 0x43, 0x18, 0xe0, 0x0d, 0x61, 0xbe, 0x0e, 0x36, - 0x06, 0x36, 0x23, 0x0d, 0x06, 0x9b, 0x42, 0xde, - 0xd1, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x20, 0x01, - 0x86, 0x38, 0x69, 0xf8, 0x4b, 0x33, 0x40, 0x18, - 0x61, 0xf8, 0x69, 0xb8, 0x28, 0x00, 0xd1, 0x06, - 0x69, 0x78, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, - 0xf7, 0xf6, 0xff, 0xb4, 0xe7, 0x7f, 0x68, 0xf8, - 0x90, 0x06, 0x69, 0x38, 0x90, 0x07, 0x69, 0x78, - 0x90, 0x08, 0x69, 0xb8, 0x90, 0x09, 0xa8, 0x02, - 0x1c, 0x21, 0x1d, 0xfa, 0x32, 0x01, 0xb4, 0x07, - 0x1c, 0x2a, 0xb4, 0x04, 0x20, 0x00, 0x9a, 0x05, - 0xa9, 0x0a, 0xab, 0x0c, 0xf0, 0x03, 0xf8, 0x8a, - 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x5f, 0xe7, 0x63, 0x2d, 0x00, - 0xd0, 0x09, 0x2d, 0x01, 0xd0, 0x07, 0x2d, 0x02, - 0xd0, 0x05, 0x2d, 0x03, 0xd0, 0x03, 0x23, 0x02, - 0x69, 0xf8, 0x43, 0x18, 0x61, 0xf8, 0x85, 0xfc, - 0x2c, 0x08, 0xd2, 0x02, 0x00, 0xa0, 0x9a, 0x0b, - 0x50, 0x17, 0x20, 0x01, 0x24, 0x00, 0x63, 0xf8, - 0x63, 0xbc, 0x85, 0xbd, 0x21, 0x01, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x0c, 0x99, 0x0a, 0x8c, 0x88, - 0x06, 0x01, 0x0e, 0x09, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0xbe, 0x22, 0x00, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x93, 0x98, 0x18, 0x60, 0x38, - 0x98, 0x18, 0x28, 0x00, 0xd0, 0x06, 0x22, 0x00, - 0x21, 0x03, 0x1c, 0x23, 0x9c, 0x18, 0x1c, 0x38, - 0xf0, 0x0f, 0xfa, 0xaa, 0x68, 0xb8, 0x60, 0x78, - 0x1c, 0x38, 0xb0, 0x0c, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1a, 0xdc, - 0x2e, 0x08, 0x1a, 0xdc, 0xff, 0xff, 0x7f, 0xff, - 0xb5, 0x80, 0x1c, 0x07, 0xb0, 0x82, 0x28, 0x00, - 0xd0, 0x13, 0x68, 0x78, 0x28, 0x00, 0xd1, 0x10, - 0x68, 0xb8, 0x90, 0x00, 0x1d, 0xf8, 0x30, 0x05, - 0x90, 0x01, 0x46, 0x69, 0x68, 0x38, 0xf0, 0x0c, - 0xf8, 0xd1, 0x22, 0x0c, 0x21, 0x00, 0x1c, 0x38, - 0xf0, 0x0f, 0xfb, 0xd4, 0x1c, 0x38, 0xf7, 0xf6, - 0xff, 0x3d, 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x90, 0x1c, 0x07, 0xb0, 0x84, - 0x28, 0x00, 0xd1, 0x03, 0xb0, 0x04, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x23, 0x00, - 0x49, 0x1d, 0x00, 0x82, 0x58, 0x8c, 0x42, 0xbc, - 0xd1, 0x00, 0x50, 0x8b, 0x30, 0x01, 0x28, 0x08, - 0xdb, 0xf7, 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x00, - 0xf8, 0xbc, 0x68, 0xf8, 0x90, 0x00, 0x69, 0x38, - 0x90, 0x01, 0x69, 0x78, 0x90, 0x02, 0x69, 0xb8, - 0x90, 0x03, 0x46, 0x68, 0x1d, 0xc2, 0x32, 0x01, - 0x46, 0x69, 0x68, 0xb8, 0xf0, 0x03, 0xfb, 0x0e, - 0x6a, 0x38, 0x28, 0x00, 0xd0, 0x03, 0x68, 0x41, - 0x39, 0x01, 0x60, 0x41, 0x30, 0x04, 0x69, 0xf8, - 0x0c, 0x00, 0xd3, 0x0c, 0x23, 0x30, 0x5e, 0xf8, - 0x28, 0x00, 0xd1, 0x03, 0x69, 0xb8, 0xf7, 0xf6, - 0xff, 0x31, 0xe0, 0x04, 0x28, 0x01, 0xd1, 0x02, - 0x69, 0xb8, 0xf7, 0xf6, 0xfe, 0xfb, 0x22, 0x80, - 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, 0xfb, 0x8a, - 0x1c, 0x38, 0xf7, 0xf6, 0xfe, 0xf3, 0xe7, 0xbd, - 0x2e, 0x08, 0x1a, 0xdc, 0x28, 0x00, 0xd0, 0x08, - 0x28, 0x01, 0xd0, 0x08, 0x28, 0x02, 0xd0, 0x08, - 0x28, 0x03, 0xd1, 0x08, 0x20, 0xff, 0x30, 0x01, - 0x47, 0x70, 0x20, 0x02, 0x47, 0x70, 0x20, 0x04, - 0x47, 0x70, 0x20, 0x10, 0x47, 0x70, 0x20, 0x00, - 0x47, 0x70, 0xb5, 0x90, 0x1c, 0x07, 0x06, 0x08, - 0x0e, 0x00, 0x06, 0x14, 0x0e, 0x24, 0x28, 0x00, - 0xd0, 0x0a, 0x21, 0x03, 0x68, 0xb8, 0xf0, 0x04, - 0xfc, 0x15, 0x68, 0xb8, 0x1c, 0x21, 0xf0, 0x04, - 0xfc, 0xbd, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x21, 0x00, 0x68, 0xb8, 0xf0, 0x04, 0xfc, 0x0a, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0x06, 0x09, 0xd0, 0x02, 0x68, 0x80, 0x21, 0x02, - 0xe0, 0x01, 0x68, 0x80, 0x21, 0x00, 0xf0, 0x04, - 0xfb, 0xfd, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0x06, 0x09, 0x0e, 0x09, 0x28, 0x00, 0xd0, 0x02, - 0x68, 0x80, 0xf0, 0x04, 0xfe, 0x03, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xb0, 0x23, 0x05, 0x43, 0x18, - 0x4d, 0x08, 0x84, 0xa8, 0x27, 0x00, 0x4c, 0x08, - 0x00, 0xb8, 0x58, 0x20, 0x8c, 0xa9, 0x06, 0x09, - 0x0e, 0x09, 0xf7, 0xff, 0xff, 0xe8, 0x37, 0x01, - 0x2f, 0x08, 0xdb, 0xf5, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1a, 0xdc, - 0x2e, 0x08, 0x1a, 0xdc, 0x48, 0x01, 0x23, 0x24, - 0x5e, 0xc0, 0x47, 0x70, 0x2e, 0x08, 0x1a, 0xdc, - 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x28, 0x00, - 0xd0, 0x15, 0x6a, 0x20, 0x28, 0x00, 0xd0, 0x06, - 0x42, 0xb8, 0xd0, 0x10, 0x68, 0x41, 0x39, 0x01, - 0x60, 0x41, 0x20, 0x00, 0x62, 0x20, 0x2f, 0x00, - 0xd0, 0x09, 0x68, 0xa0, 0x68, 0x39, 0xf0, 0x0c, - 0xf8, 0x0f, 0x28, 0x00, 0xd1, 0x03, 0x62, 0x27, - 0x68, 0x78, 0x30, 0x01, 0x60, 0x78, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x06, 0x09, - 0xd0, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, - 0x68, 0x80, 0xf0, 0x04, 0xfd, 0x03, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x90, 0x1c, 0x07, 0x1c, 0x0c, - 0xd0, 0x01, 0x21, 0x01, 0xe0, 0x00, 0x21, 0x00, - 0x68, 0xb8, 0xf0, 0x04, 0xf8, 0x9b, 0x2c, 0x00, - 0xd0, 0x03, 0x23, 0x01, 0x69, 0xf8, 0x43, 0x18, - 0xe0, 0x02, 0x69, 0xf8, 0x08, 0x40, 0x00, 0x40, - 0x61, 0xf8, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x01, 0x21, 0x07, 0x07, 0x09, 0x63, 0x88, - 0x47, 0x70, 0x00, 0x00, 0xb5, 0x90, 0x9c, 0x03, - 0x9f, 0x04, 0xb0, 0x85, 0x91, 0x00, 0x92, 0x01, - 0x93, 0x02, 0x94, 0x03, 0x97, 0x04, 0x68, 0x80, - 0x46, 0x69, 0xf0, 0x0a, 0xff, 0x5f, 0xb0, 0x05, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, - 0xb0, 0x86, 0x98, 0x06, 0x6a, 0x40, 0x68, 0xc3, - 0x93, 0x05, 0x98, 0x06, 0x6b, 0xc0, 0x01, 0x80, - 0x06, 0x05, 0x0e, 0x2d, 0x95, 0x00, 0x68, 0x18, - 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, 0x01, 0x40, - 0x08, 0xc0, 0x90, 0x04, 0x99, 0x07, 0x68, 0x48, - 0x99, 0x04, 0x43, 0x48, 0x99, 0x07, 0x68, 0x09, - 0x08, 0xc9, 0x18, 0x0f, 0x97, 0x03, 0x21, 0x00, - 0x91, 0x02, 0x9b, 0x05, 0x68, 0x58, 0x28, 0x00, - 0xdd, 0x5e, 0x23, 0x32, 0x98, 0x06, 0x5e, 0xc0, - 0x9b, 0x09, 0x43, 0x58, 0x9a, 0x08, 0x18, 0x81, - 0x1c, 0x08, 0xd5, 0x00, 0x30, 0x03, 0x10, 0x80, - 0x29, 0x00, 0xda, 0x04, 0x42, 0x49, 0x07, 0x89, - 0x0f, 0x89, 0x42, 0x49, 0xe0, 0x01, 0x07, 0x89, - 0x0f, 0x89, 0x00, 0x4a, 0x9d, 0x00, 0x41, 0x15, - 0x1c, 0x2b, 0x06, 0x2d, 0x0e, 0x2d, 0x27, 0xc0, - 0x40, 0xd7, 0x06, 0x3a, 0x0e, 0x12, 0x9b, 0x06, - 0x69, 0x9b, 0x18, 0x18, 0x9b, 0x05, 0x9f, 0x03, - 0x19, 0xdb, 0x33, 0x88, 0x78, 0x1f, 0x33, 0x01, - 0x93, 0x01, 0x24, 0x00, 0x9b, 0x07, 0x68, 0x9b, - 0x2b, 0x00, 0xd9, 0x23, 0x0a, 0x3b, 0xd3, 0x05, - 0x78, 0x03, 0x43, 0x93, 0x70, 0x03, 0x78, 0x03, - 0x43, 0x2b, 0x70, 0x03, 0x31, 0x01, 0x29, 0x03, - 0xdd, 0x04, 0x22, 0xc0, 0x21, 0x00, 0x9d, 0x00, - 0x30, 0x01, 0xe0, 0x05, 0x10, 0x92, 0x06, 0x12, - 0x0e, 0x12, 0x10, 0xab, 0x06, 0x1d, 0x0e, 0x2d, - 0x00, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, 0x34, 0x01, - 0x07, 0x63, 0xd1, 0x03, 0x9b, 0x01, 0x78, 0x1f, - 0x33, 0x01, 0x93, 0x01, 0x9b, 0x07, 0x68, 0x9b, - 0x42, 0xa3, 0xd8, 0xdb, 0x98, 0x04, 0x9f, 0x03, - 0x18, 0x3f, 0x97, 0x03, 0x9b, 0x09, 0x33, 0x01, - 0x93, 0x09, 0x99, 0x02, 0x31, 0x01, 0x91, 0x02, - 0x9b, 0x05, 0x68, 0x58, 0x42, 0x88, 0xdc, 0xa0, - 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xff, 0xb0, 0x86, 0x98, 0x06, - 0x6a, 0x40, 0x68, 0xc3, 0x93, 0x05, 0x98, 0x06, - 0x6b, 0xc0, 0x07, 0x06, 0x0f, 0x36, 0x96, 0x00, - 0x01, 0x30, 0x06, 0x06, 0x0e, 0x36, 0x96, 0x01, - 0x68, 0x18, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, - 0x01, 0x40, 0x08, 0xc0, 0x90, 0x04, 0x68, 0x48, - 0x9a, 0x04, 0x43, 0x50, 0x68, 0x0a, 0x08, 0xd2, - 0x18, 0x17, 0x97, 0x03, 0x22, 0x00, 0x92, 0x02, - 0x9b, 0x05, 0x68, 0x58, 0x28, 0x00, 0xdd, 0x48, - 0x23, 0x32, 0x98, 0x06, 0x5e, 0xc0, 0x9b, 0x09, - 0x43, 0x58, 0x9a, 0x08, 0x18, 0x82, 0x1c, 0x10, - 0xd5, 0x00, 0x30, 0x01, 0x10, 0x40, 0x9b, 0x06, - 0x69, 0x9b, 0x18, 0x18, 0x9b, 0x05, 0x9f, 0x03, - 0x19, 0xdb, 0x1d, 0xdd, 0x35, 0x81, 0x78, 0x2f, - 0x24, 0x00, 0x68, 0x8b, 0x35, 0x01, 0x2b, 0x00, - 0xd9, 0x21, 0x0a, 0x3b, 0xd3, 0x10, 0x08, 0x53, - 0xd3, 0x06, 0x78, 0x06, 0x23, 0xf0, 0x40, 0x33, - 0x70, 0x03, 0x78, 0x03, 0x9e, 0x00, 0xe0, 0x05, - 0x78, 0x03, 0x07, 0x1b, 0x0f, 0x1b, 0x70, 0x03, - 0x78, 0x03, 0x9e, 0x01, 0x43, 0x33, 0x70, 0x03, - 0x32, 0x01, 0x08, 0x53, 0xd2, 0x00, 0x30, 0x01, - 0x00, 0x7b, 0x06, 0x1f, 0x0e, 0x3f, 0x34, 0x01, - 0x07, 0x63, 0xd1, 0x01, 0x78, 0x2f, 0x35, 0x01, - 0x68, 0x8b, 0x42, 0xa3, 0xd8, 0xdd, 0x98, 0x04, - 0x9f, 0x03, 0x18, 0x3f, 0x97, 0x03, 0x9b, 0x09, - 0x33, 0x01, 0x93, 0x09, 0x9a, 0x02, 0x32, 0x01, - 0x92, 0x02, 0x9b, 0x05, 0x68, 0x58, 0x42, 0x90, - 0xdc, 0xb6, 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xff, 0xb0, 0x83, - 0x98, 0x03, 0x6a, 0x40, 0x68, 0xc4, 0x98, 0x03, - 0x6b, 0xc0, 0x06, 0x03, 0x0e, 0x1b, 0x93, 0x00, - 0x68, 0x20, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, - 0x01, 0x40, 0x08, 0xc2, 0x92, 0x02, 0x68, 0x48, - 0x43, 0x50, 0x68, 0x0a, 0x08, 0xd2, 0x18, 0x10, - 0x90, 0x01, 0x25, 0x00, 0x68, 0x60, 0x28, 0x00, - 0xdd, 0x35, 0x23, 0x32, 0x98, 0x03, 0x5e, 0xc0, - 0x9b, 0x06, 0x43, 0x58, 0x9a, 0x05, 0x18, 0x80, - 0x9a, 0x03, 0x69, 0x92, 0x18, 0x17, 0x98, 0x01, - 0x18, 0x20, 0x1d, 0xc6, 0x36, 0x81, 0x78, 0x32, - 0x20, 0x00, 0x68, 0x8b, 0x36, 0x01, 0x2b, 0x00, - 0xd9, 0x16, 0x0a, 0x13, 0xd3, 0x01, 0x9b, 0x00, - 0x70, 0x3b, 0x00, 0x52, 0x06, 0x12, 0x0e, 0x12, - 0xd1, 0x09, 0x1d, 0xc2, 0x32, 0x01, 0x08, 0xd2, - 0x00, 0xd2, 0x1a, 0x10, 0x19, 0xc7, 0x1c, 0x10, - 0x78, 0x32, 0x36, 0x01, 0xe0, 0x01, 0x30, 0x01, - 0x37, 0x01, 0x68, 0x8b, 0x42, 0x83, 0xd8, 0xe8, - 0x98, 0x01, 0x9a, 0x02, 0x18, 0x80, 0x90, 0x01, - 0x9b, 0x06, 0x33, 0x01, 0x93, 0x06, 0x68, 0x60, - 0x35, 0x01, 0x42, 0xa8, 0xdc, 0xc9, 0xb0, 0x03, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xff, 0x23, 0x2c, 0x1c, 0x07, 0x5e, 0xc0, - 0xb0, 0x85, 0x28, 0x01, 0xd0, 0x0f, 0x28, 0x02, - 0xd0, 0x07, 0x28, 0x03, 0xd1, 0x11, 0xab, 0x06, - 0xcb, 0x0e, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0x9a, - 0xe0, 0x5d, 0xab, 0x06, 0xcb, 0x0e, 0x1c, 0x38, - 0xf7, 0xff, 0xff, 0x23, 0xe0, 0x57, 0xab, 0x06, - 0xcb, 0x0e, 0x1c, 0x38, 0xf7, 0xff, 0xfe, 0x97, - 0xe0, 0x51, 0x6a, 0x78, 0x68, 0xc0, 0x90, 0x04, - 0x68, 0x00, 0x01, 0x00, 0x30, 0x1f, 0x09, 0x40, - 0x01, 0x40, 0x08, 0xc0, 0x90, 0x03, 0x99, 0x06, - 0x68, 0x48, 0x99, 0x03, 0x43, 0x48, 0x99, 0x06, - 0x68, 0x09, 0x08, 0xc9, 0x18, 0x09, 0x91, 0x02, - 0x21, 0x00, 0x91, 0x01, 0x98, 0x04, 0x68, 0x40, - 0x28, 0x00, 0xdd, 0x38, 0x98, 0x04, 0x99, 0x02, - 0x9e, 0x07, 0x18, 0x40, 0x30, 0x88, 0x78, 0x05, - 0x30, 0x01, 0x90, 0x00, 0x24, 0x00, 0x99, 0x06, - 0x68, 0x88, 0x28, 0x00, 0xd9, 0x1d, 0x0a, 0x28, - 0xd3, 0x05, 0x68, 0xb8, 0x6b, 0xfb, 0x9a, 0x08, - 0x1c, 0x31, 0xf0, 0x0a, 0xfb, 0x7d, 0x00, 0x68, - 0x06, 0x05, 0x0e, 0x2d, 0xd1, 0x0b, 0x1d, 0xe0, - 0x30, 0x01, 0x08, 0xc0, 0x00, 0xc0, 0x1b, 0x01, - 0x19, 0x8e, 0x1c, 0x04, 0x98, 0x00, 0x78, 0x05, - 0x30, 0x01, 0x90, 0x00, 0xe0, 0x01, 0x34, 0x01, - 0x36, 0x01, 0x99, 0x06, 0x68, 0x88, 0x42, 0xa0, - 0xd8, 0xe1, 0x98, 0x03, 0x99, 0x02, 0x18, 0x09, - 0x91, 0x02, 0x9a, 0x08, 0x32, 0x01, 0x92, 0x08, - 0x99, 0x01, 0x31, 0x01, 0x91, 0x01, 0x98, 0x04, - 0x68, 0x40, 0x42, 0x88, 0xdc, 0xc6, 0xb0, 0x05, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x1c, 0x07, 0x20, 0x00, 0xb0, 0x88, - 0xf0, 0x08, 0xfa, 0x2b, 0x90, 0x06, 0x00, 0x80, - 0x30, 0x10, 0x00, 0x80, 0xf7, 0xf6, 0xfc, 0x48, - 0x1c, 0x04, 0x20, 0x00, 0x2c, 0x00, 0xd1, 0x03, - 0xb0, 0x08, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x1d, 0xe1, 0x31, 0x09, 0x91, 0x07, 0x49, 0x19, - 0x68, 0x4b, 0x1c, 0x5a, 0x60, 0x4a, 0x60, 0x63, - 0x60, 0xe7, 0x68, 0x39, 0x01, 0x09, 0x31, 0x1f, - 0x09, 0x49, 0x01, 0x49, 0x90, 0x00, 0x90, 0x01, - 0x1e, 0x48, 0x90, 0x02, 0x68, 0xe0, 0x68, 0x40, - 0x00, 0xc0, 0x38, 0x01, 0x90, 0x03, 0x46, 0x68, - 0x21, 0x00, 0xf0, 0x08, 0xfa, 0x09, 0x60, 0xa0, - 0x68, 0xe0, 0x30, 0x88, 0x90, 0x05, 0x68, 0xa0, - 0x90, 0x04, 0x46, 0x68, 0x1c, 0x22, 0x68, 0x61, - 0xb4, 0x07, 0x22, 0x00, 0xb4, 0x04, 0x22, 0x01, - 0x20, 0x00, 0xa9, 0x0a, 0xab, 0x08, 0xf0, 0x02, - 0xfd, 0x21, 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x03, - 0x1c, 0x20, 0xf7, 0xf6, 0xfc, 0x2f, 0x24, 0x00, - 0x1c, 0x20, 0xe7, 0xc5, 0x2e, 0x08, 0x1b, 0x04, - 0xb5, 0x80, 0x1c, 0x07, 0xb0, 0x84, 0x28, 0x00, - 0xd0, 0x1a, 0x20, 0x00, 0xf0, 0x08, 0xf9, 0xdd, - 0x90, 0x00, 0x1d, 0xf8, 0x30, 0x09, 0x90, 0x01, - 0x68, 0xb8, 0x90, 0x02, 0x68, 0xf8, 0x30, 0x88, - 0x90, 0x03, 0x46, 0x68, 0x46, 0x69, 0x1d, 0xc2, - 0x32, 0x01, 0x68, 0x38, 0xf0, 0x03, 0xf8, 0x0e, - 0x22, 0x10, 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x0f, - 0xf8, 0xa1, 0x1c, 0x38, 0xf7, 0xf6, 0xfc, 0x0a, - 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xff, 0x23, 0x32, 0x1c, 0x07, 0x5e, 0xc0, - 0x1c, 0x0c, 0x1c, 0x15, 0xb0, 0x8a, 0x42, 0x90, - 0xdd, 0x63, 0x6a, 0x78, 0x28, 0x00, 0xd1, 0x0b, - 0x4e, 0x38, 0x68, 0x30, 0x28, 0x00, 0xd1, 0x05, - 0x48, 0x37, 0xf7, 0xff, 0xff, 0x7d, 0x60, 0x30, - 0x28, 0x00, 0xd0, 0x61, 0x68, 0x30, 0x62, 0x78, - 0x23, 0x01, 0x6b, 0xb8, 0x6a, 0x79, 0x42, 0xd8, - 0xd1, 0x01, 0x22, 0x01, 0xe0, 0x00, 0x22, 0x00, - 0x92, 0x01, 0x68, 0xc8, 0x90, 0x00, 0x68, 0x00, - 0x90, 0x04, 0x98, 0x00, 0x68, 0x40, 0x90, 0x03, - 0x6b, 0xf8, 0x28, 0x01, 0xd1, 0x01, 0x90, 0x02, - 0xe0, 0x11, 0x20, 0x00, 0x90, 0x02, 0x9a, 0x01, - 0x2a, 0x00, 0xd1, 0x0c, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x57, 0x6b, 0xba, 0x99, 0x03, 0xb4, 0x06, - 0x1c, 0x03, 0x9a, 0x0f, 0x1c, 0x38, 0x1c, 0x29, - 0xf7, 0xff, 0xfd, 0x80, 0xb0, 0x02, 0x99, 0x03, - 0x91, 0x08, 0x20, 0x01, 0x90, 0x09, 0x78, 0x20, - 0x28, 0x00, 0xd0, 0x31, 0x23, 0x32, 0x5e, 0xf8, - 0x42, 0xa8, 0xdd, 0x22, 0x78, 0x20, 0x99, 0x00, - 0xf0, 0x00, 0xf8, 0x34, 0x90, 0x07, 0x1c, 0x06, - 0x78, 0x20, 0x07, 0x00, 0x0f, 0x00, 0x99, 0x04, - 0x43, 0x48, 0x90, 0x05, 0x78, 0x20, 0x09, 0x00, - 0x07, 0x40, 0x0f, 0x40, 0x99, 0x03, 0x43, 0x48, - 0x90, 0x06, 0x98, 0x02, 0x34, 0x01, 0x28, 0x00, - 0xd0, 0x0c, 0x99, 0x0d, 0x9a, 0x01, 0xb4, 0x06, - 0x6a, 0x78, 0x68, 0xb9, 0x68, 0x00, 0xaa, 0x07, - 0x1c, 0x2b, 0xf0, 0x0a, 0xfd, 0x81, 0xb0, 0x02, - 0xe0, 0x06, 0xe0, 0x09, 0x9b, 0x0d, 0x1c, 0x38, - 0xa9, 0x05, 0x1c, 0x2a, 0xf7, 0xff, 0xfe, 0xa8, - 0x19, 0xad, 0x78, 0x20, 0x28, 0x00, 0xd1, 0xcd, - 0xb0, 0x0a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x1b, 0x04, - 0x2e, 0x03, 0x45, 0xb8, 0x29, 0x00, 0xd1, 0x00, - 0x49, 0x02, 0x06, 0x40, 0x0e, 0x40, 0x18, 0x40, - 0x7a, 0x00, 0x47, 0x70, 0x2e, 0x03, 0x45, 0xb8, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0xd1, 0x08, - 0x4f, 0x0c, 0x68, 0x38, 0x28, 0x00, 0xd1, 0x03, - 0x48, 0x0b, 0xf7, 0xff, 0xfe, 0xf9, 0x60, 0x38, - 0x68, 0x3f, 0x25, 0x00, 0x78, 0x20, 0x28, 0x00, - 0xd0, 0x08, 0x78, 0x20, 0x68, 0xf9, 0x34, 0x01, - 0xf7, 0xff, 0xff, 0xe0, 0x19, 0x45, 0x78, 0x20, - 0x28, 0x00, 0xd1, 0xf6, 0x1c, 0x28, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1b, 0x04, - 0x2e, 0x03, 0x45, 0xb8, 0xb5, 0x80, 0x28, 0x00, - 0xd1, 0x08, 0x4f, 0x09, 0x68, 0x38, 0x28, 0x00, - 0xd1, 0x03, 0x48, 0x08, 0xf7, 0xff, 0xfe, 0xd8, - 0x60, 0x38, 0x68, 0x38, 0x28, 0x00, 0xd1, 0x02, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xc0, - 0x68, 0x40, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x1b, 0x04, 0x2e, 0x03, 0x45, 0xb8, - 0xb5, 0xf0, 0xb0, 0x83, 0x4a, 0x18, 0x21, 0x00, - 0x20, 0xff, 0x30, 0x01, 0xf7, 0xff, 0xfa, 0xac, - 0x49, 0x16, 0x27, 0x00, 0x64, 0x08, 0x49, 0x16, - 0x91, 0x02, 0x49, 0x16, 0x91, 0x01, 0x49, 0x16, - 0x91, 0x00, 0x4c, 0x16, 0x01, 0x38, 0x06, 0x01, - 0x0e, 0x09, 0x20, 0x10, 0x1c, 0x22, 0x1c, 0x0d, - 0xf7, 0xff, 0xfa, 0x9a, 0x00, 0xbe, 0x99, 0x02, - 0x51, 0x88, 0x20, 0x04, 0x1c, 0x29, 0x1c, 0x22, - 0xf7, 0xff, 0xfa, 0x92, 0x99, 0x01, 0x51, 0x88, - 0x20, 0x02, 0x1c, 0x29, 0x1c, 0x22, 0xf7, 0xff, - 0xfa, 0x8b, 0x99, 0x00, 0x51, 0x88, 0x37, 0x01, - 0x2f, 0x08, 0xdb, 0xe3, 0x20, 0x00, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x1b, 0x4c, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xbc, 0x2e, 0x08, 0x92, 0xdc, - 0x2e, 0x08, 0x92, 0xfc, 0x2e, 0x08, 0x1b, 0x0c, - 0xb5, 0x80, 0x48, 0x0c, 0xf7, 0xff, 0xfe, 0x84, - 0x4f, 0x0b, 0x64, 0x78, 0x48, 0x0b, 0xf7, 0xff, - 0xfe, 0x7f, 0x64, 0xb8, 0x48, 0x0a, 0xf7, 0xff, - 0xfe, 0x7b, 0x64, 0xf8, 0x20, 0x00, 0x22, 0x00, - 0x49, 0x08, 0x00, 0x83, 0x50, 0xca, 0x30, 0x01, - 0x28, 0x10, 0xdb, 0xfa, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x02, 0xcc, 0xa0, - 0x2e, 0x08, 0x1d, 0x0c, 0x2e, 0x03, 0x03, 0x2c, - 0x2e, 0x03, 0x45, 0xb8, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x90, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x00, 0xd0, 0x0b, 0x29, 0x0f, 0xdc, 0x09, - 0x00, 0x8c, 0x4f, 0x06, 0x59, 0x39, 0x29, 0x00, - 0xd0, 0x04, 0x1c, 0x08, 0xf7, 0xff, 0xfb, 0x91, - 0x20, 0x00, 0x51, 0x38, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xff, 0x04, 0x05, 0x0c, 0x2d, 0x04, 0x10, - 0x0c, 0x00, 0xb0, 0x82, 0x90, 0x00, 0x04, 0x18, - 0x0c, 0x00, 0x90, 0x01, 0x2d, 0x00, 0xd0, 0x01, - 0x2d, 0x0f, 0xdd, 0x01, 0x20, 0xff, 0xe0, 0x53, - 0x00, 0xaf, 0x4c, 0x2c, 0x59, 0xe0, 0x28, 0x00, - 0xd0, 0x02, 0x1c, 0x28, 0xf7, 0xff, 0xff, 0xd0, - 0x98, 0x00, 0x4a, 0x29, 0x40, 0x02, 0x92, 0x00, - 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9a, 0xdd, 0x01, - 0x1c, 0x1a, 0x93, 0x00, 0x23, 0x09, 0x01, 0x9b, - 0x98, 0x01, 0x42, 0x98, 0xdd, 0x01, 0x1c, 0x1a, - 0x93, 0x00, 0x2d, 0x08, 0xda, 0x01, 0x20, 0x00, - 0xe0, 0x00, 0x20, 0x01, 0x22, 0x00, 0x21, 0x00, - 0xb4, 0x07, 0x9a, 0x06, 0xb4, 0x04, 0x20, 0x00, - 0x9a, 0x04, 0x9b, 0x05, 0xf7, 0xff, 0xfa, 0x38, - 0x51, 0xe0, 0xb0, 0x04, 0x1c, 0x01, 0xd0, 0xd1, - 0x48, 0x18, 0x6c, 0x82, 0x62, 0x4a, 0x21, 0x01, - 0x59, 0xe2, 0x63, 0xd1, 0x21, 0x00, 0x43, 0xc9, - 0x59, 0xe2, 0x63, 0x91, 0x99, 0x03, 0x29, 0x08, - 0xd2, 0x10, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x06, 0x08, 0x0b, - 0x04, 0x06, 0x08, 0x0b, 0x48, 0x0e, 0xe0, 0x02, - 0x48, 0x0e, 0xe0, 0x00, 0x48, 0x0e, 0x59, 0xc6, - 0xe0, 0x00, 0x6c, 0x06, 0x59, 0xe0, 0x1c, 0x31, - 0xf7, 0xff, 0xfb, 0xd6, 0x59, 0xe0, 0x68, 0x80, - 0x21, 0x07, 0xf0, 0x04, 0xf9, 0xb3, 0x20, 0x00, - 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0x00, 0x00, 0xff, 0xfe, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xfc, 0x2e, 0x08, 0x92, 0xdc, - 0x2e, 0x08, 0x92, 0xbc, 0xb5, 0xf0, 0x04, 0x00, - 0x0c, 0x00, 0x04, 0x09, 0x14, 0x09, 0x04, 0x16, - 0x14, 0x36, 0xb0, 0x85, 0x28, 0x07, 0xdc, 0x29, - 0x00, 0x84, 0x4f, 0x21, 0x59, 0x38, 0x28, 0x00, - 0xd0, 0x24, 0x08, 0x49, 0x00, 0x49, 0x04, 0x0d, - 0x14, 0x2d, 0x68, 0x80, 0xa9, 0x01, 0xf0, 0x04, - 0xfa, 0x61, 0x98, 0x01, 0x19, 0x40, 0x90, 0x01, - 0x98, 0x03, 0x19, 0x40, 0x90, 0x03, 0x98, 0x02, - 0x19, 0x80, 0x90, 0x02, 0x98, 0x04, 0x19, 0x80, - 0x90, 0x04, 0x98, 0x01, 0x49, 0x15, 0x42, 0x88, - 0xd8, 0x0c, 0x98, 0x02, 0x42, 0x88, 0xd8, 0x09, - 0x23, 0x2d, 0x01, 0x1b, 0x98, 0x01, 0x42, 0x98, - 0xda, 0x04, 0x23, 0x09, 0x01, 0x9b, 0x98, 0x02, - 0x42, 0x98, 0xdb, 0x01, 0x20, 0xff, 0xe0, 0x12, - 0x59, 0x38, 0x68, 0x80, 0xa9, 0x01, 0xf0, 0x02, - 0xf8, 0x31, 0x59, 0x38, 0x68, 0x80, 0x46, 0x69, - 0xf0, 0x03, 0xff, 0x00, 0x98, 0x00, 0x28, 0x00, - 0xd1, 0x04, 0x59, 0x38, 0x68, 0x80, 0x21, 0x01, - 0xf0, 0x03, 0xfc, 0x44, 0x20, 0x00, 0xb0, 0x05, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0x80, 0x00, 0x00, 0x00, - 0xb5, 0xf0, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x0b, - 0x0c, 0x1b, 0x04, 0x16, 0x0c, 0x36, 0x20, 0xff, - 0xb0, 0x85, 0x2f, 0x07, 0xdc, 0x10, 0x00, 0xbc, - 0x4f, 0x1c, 0x59, 0x39, 0x29, 0x00, 0xd0, 0x0b, - 0x08, 0x5a, 0x00, 0x52, 0x04, 0x15, 0x0c, 0x2d, - 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9d, 0xda, 0x03, - 0x23, 0x09, 0x01, 0x9b, 0x42, 0x9e, 0xdb, 0x03, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x88, 0xa9, 0x01, 0xf0, 0x04, 0xfa, 0x02, - 0x98, 0x03, 0x99, 0x01, 0x1a, 0x40, 0x90, 0x03, - 0x19, 0x40, 0x90, 0x03, 0x98, 0x04, 0x99, 0x02, - 0x1a, 0x40, 0x90, 0x04, 0x19, 0x80, 0x90, 0x04, - 0x95, 0x01, 0x96, 0x02, 0x59, 0x38, 0x68, 0x80, - 0xa9, 0x01, 0xf0, 0x01, 0xff, 0xe3, 0x59, 0x38, - 0x68, 0x80, 0x46, 0x69, 0xf0, 0x03, 0xfe, 0xb2, - 0x98, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x59, 0x38, - 0x68, 0x80, 0x21, 0x01, 0xf0, 0x03, 0xfb, 0xf6, - 0x20, 0x00, 0xe7, 0xd5, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x00, 0x80, - 0x49, 0x04, 0x58, 0x08, 0x28, 0x00, 0xd0, 0x03, - 0x68, 0x80, 0x21, 0x00, 0xf0, 0x03, 0xfb, 0xe6, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x80, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x07, 0xdc, 0x0c, 0x29, 0x01, 0xdb, 0x0a, - 0x00, 0x88, 0x49, 0x06, 0x58, 0x08, 0x27, 0x00, - 0x28, 0x00, 0xd0, 0x03, 0x68, 0x80, 0x21, 0x01, - 0xf0, 0x03, 0xfa, 0x2c, 0x1c, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, 0x29, 0x0f, - 0xdc, 0x06, 0x00, 0x89, 0x4a, 0x03, 0x58, 0x51, - 0x29, 0x00, 0xd0, 0x01, 0x23, 0x32, 0x5e, 0xc8, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0x04, 0x01, 0x0c, 0x09, 0x20, 0x00, 0x29, 0x0f, - 0xdc, 0x06, 0x00, 0x89, 0x4a, 0x03, 0x58, 0x51, - 0x29, 0x00, 0xd0, 0x01, 0x23, 0x34, 0x5e, 0xc8, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xb0, 0x04, 0x03, 0x0c, 0x1b, 0x04, 0x0a, - 0x0c, 0x12, 0x20, 0xff, 0x2b, 0x07, 0xdc, 0x10, - 0x00, 0x9d, 0x4f, 0x09, 0x59, 0x79, 0x29, 0x00, - 0xd0, 0x0b, 0x07, 0x14, 0x0f, 0x24, 0x68, 0x88, - 0x21, 0x03, 0xf0, 0x03, 0xfe, 0x9b, 0x59, 0x78, - 0x68, 0x80, 0x1c, 0x21, 0xf0, 0x03, 0xff, 0x42, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0x00, 0x04, 0x01, - 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, - 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, - 0xd0, 0x04, 0x68, 0x88, 0x21, 0x02, 0xf0, 0x03, - 0xfe, 0x81, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0x00, 0x04, 0x01, - 0x0c, 0x09, 0x20, 0xff, 0x29, 0x07, 0xdc, 0x09, - 0x00, 0x89, 0x4a, 0x05, 0x58, 0x51, 0x29, 0x00, - 0xd0, 0x04, 0x68, 0x88, 0x21, 0x00, 0xf0, 0x03, - 0xfe, 0x6d, 0x20, 0x00, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0xb5, 0xf0, 0x04, 0x05, - 0x0c, 0x2d, 0x04, 0x09, 0x0c, 0x09, 0x04, 0x12, - 0x0c, 0x12, 0x04, 0x1e, 0x0c, 0x36, 0x9c, 0x05, - 0x9f, 0x06, 0x04, 0x24, 0x0c, 0x24, 0x04, 0x3f, - 0x0c, 0x3f, 0x20, 0xff, 0xb0, 0x85, 0x2d, 0x0f, - 0xdc, 0x04, 0x00, 0xab, 0x4d, 0x10, 0x58, 0xed, - 0x2d, 0x00, 0xd1, 0x03, 0xb0, 0x05, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x19, 0x88, 0x23, 0x32, - 0x5e, 0xeb, 0x42, 0x98, 0xdd, 0x02, 0x1a, 0x58, - 0x04, 0x06, 0x0c, 0x36, 0x19, 0x10, 0x23, 0x34, - 0x5e, 0xeb, 0x42, 0x98, 0xdd, 0x02, 0x1a, 0x98, - 0x04, 0x04, 0x0c, 0x24, 0x91, 0x00, 0x92, 0x01, - 0x96, 0x02, 0x94, 0x03, 0x97, 0x04, 0x46, 0x69, - 0x68, 0xa8, 0xf0, 0x0a, 0xfa, 0x13, 0xe7, 0xe1, - 0x2e, 0x08, 0x92, 0x7c, 0xb4, 0x80, 0x04, 0x03, - 0x0c, 0x1b, 0x20, 0x00, 0x29, 0x00, 0xdb, 0x0f, - 0x2a, 0x00, 0xdb, 0x0d, 0x00, 0x9b, 0x4f, 0x07, - 0x58, 0xff, 0x2f, 0x00, 0xd0, 0x08, 0x23, 0x32, - 0x5e, 0xfb, 0x42, 0x8b, 0xdd, 0x04, 0x23, 0x34, - 0x5e, 0xf9, 0x42, 0x91, 0xdd, 0x00, 0x20, 0x01, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xf0, 0x9c, 0x06, 0x9e, 0x05, 0x04, 0x00, - 0x0c, 0x00, 0xb0, 0x85, 0x90, 0x00, 0x04, 0x08, - 0x14, 0x00, 0x04, 0x17, 0x14, 0x3f, 0x04, 0x1d, - 0x14, 0x2d, 0x04, 0x31, 0x14, 0x09, 0x91, 0x01, - 0x04, 0x23, 0x0c, 0x1b, 0x93, 0x02, 0xb0, 0x82, - 0x99, 0x02, 0x00, 0x89, 0x91, 0x06, 0x4a, 0x71, - 0x92, 0x05, 0x58, 0x51, 0x29, 0x00, 0xd1, 0x01, - 0x20, 0xff, 0xe0, 0xd6, 0x2d, 0x00, 0xda, 0x0e, - 0x19, 0x40, 0x04, 0x00, 0x14, 0x00, 0x42, 0x69, - 0x04, 0x0d, 0x14, 0x2d, 0x99, 0x03, 0x18, 0x79, - 0x04, 0x0f, 0x14, 0x3f, 0x99, 0x03, 0x42, 0x49, - 0x04, 0x09, 0x14, 0x09, 0x91, 0x03, 0x1c, 0x01, - 0x1c, 0x04, 0x98, 0x02, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0xb1, 0x28, 0x00, 0xd0, 0x08, 0x98, 0x06, - 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, 0x9b, 0x04, - 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, 0xff, 0x70, - 0x98, 0x03, 0x10, 0x40, 0x90, 0x00, 0x10, 0x6e, - 0x1c, 0x28, 0xb0, 0x82, 0xf0, 0x0e, 0xfd, 0x38, - 0xf0, 0x0e, 0xfd, 0x74, 0x90, 0x00, 0x91, 0x01, - 0x98, 0x05, 0xf0, 0x0e, 0xfd, 0x31, 0xf0, 0x0e, - 0xfd, 0x6d, 0x9a, 0x00, 0x9b, 0x01, 0xb0, 0x02, - 0xf0, 0x0e, 0xfd, 0x6c, 0x28, 0x00, 0xd0, 0x4c, - 0x98, 0x03, 0x28, 0x00, 0xdd, 0x21, 0x26, 0x00, - 0x2d, 0x00, 0xdd, 0x6d, 0x98, 0x00, 0x99, 0x03, - 0x18, 0x40, 0x90, 0x00, 0x34, 0x01, 0x42, 0xa8, - 0xdb, 0x03, 0x98, 0x00, 0x1b, 0x40, 0x90, 0x00, - 0x37, 0x01, 0x98, 0x02, 0x1c, 0x21, 0x1c, 0x3a, - 0xf7, 0xff, 0xff, 0x78, 0x28, 0x00, 0xd0, 0x08, - 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, - 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, - 0xff, 0x37, 0x36, 0x01, 0x42, 0xae, 0xdb, 0xe1, - 0xe0, 0x76, 0x98, 0x03, 0x42, 0x40, 0x04, 0x00, - 0x14, 0x00, 0x90, 0x03, 0x98, 0x00, 0x42, 0x46, - 0x20, 0x00, 0x90, 0x01, 0x2d, 0x00, 0xdd, 0x43, - 0x98, 0x03, 0x18, 0x36, 0x34, 0x01, 0x42, 0xae, - 0xdb, 0x01, 0x1b, 0x76, 0x3f, 0x01, 0x98, 0x02, - 0x1c, 0x21, 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x52, - 0x28, 0x00, 0xd0, 0x08, 0x98, 0x06, 0x99, 0x05, - 0x58, 0x08, 0x68, 0x80, 0x9b, 0x04, 0x1c, 0x21, - 0x1c, 0x3a, 0xf0, 0x09, 0xff, 0x11, 0x98, 0x01, - 0x30, 0x01, 0x90, 0x01, 0x42, 0xa8, 0xdb, 0xe3, - 0xe0, 0x4e, 0x98, 0x03, 0x28, 0x00, 0xdd, 0x24, - 0x20, 0x00, 0x90, 0x01, 0x98, 0x03, 0x28, 0x00, - 0xdd, 0x1e, 0x19, 0x76, 0x99, 0x03, 0x37, 0x01, - 0x42, 0x8e, 0xdb, 0x02, 0x98, 0x03, 0x1a, 0x36, - 0x34, 0x01, 0x98, 0x02, 0x1c, 0x21, 0x1c, 0x3a, - 0xf7, 0xff, 0xff, 0x2c, 0x28, 0x00, 0xd0, 0x08, - 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, 0x68, 0x80, - 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x09, - 0xfe, 0xeb, 0x98, 0x01, 0x30, 0x01, 0x90, 0x01, - 0x99, 0x03, 0x42, 0x88, 0xdb, 0xe1, 0xe0, 0x27, - 0xe0, 0x26, 0x98, 0x03, 0x42, 0x40, 0x04, 0x01, - 0x14, 0x09, 0x91, 0x03, 0x20, 0x00, 0x90, 0x01, - 0x29, 0x00, 0xdd, 0x1d, 0x19, 0x76, 0x99, 0x03, - 0x3f, 0x01, 0x42, 0x8e, 0xdb, 0x02, 0x99, 0x03, - 0x1a, 0x76, 0x34, 0x01, 0x98, 0x02, 0x1c, 0x21, - 0x1c, 0x3a, 0xf7, 0xff, 0xff, 0x03, 0x28, 0x00, - 0xd0, 0x08, 0x98, 0x06, 0x99, 0x05, 0x58, 0x08, - 0x68, 0x80, 0x9b, 0x04, 0x1c, 0x21, 0x1c, 0x3a, - 0xf0, 0x09, 0xfe, 0xc2, 0x98, 0x01, 0x30, 0x01, - 0x90, 0x01, 0x99, 0x03, 0x42, 0x88, 0xdb, 0xe1, - 0x20, 0x00, 0xb0, 0x07, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb4, 0x80, 0x23, 0x00, 0x88, 0x01, 0x0a, 0x0a, - 0x06, 0x12, 0x0e, 0x12, 0x06, 0x09, 0x0e, 0x09, - 0x2a, 0xdf, 0xd0, 0x1a, 0xdc, 0x07, 0x2a, 0xc4, - 0xd0, 0x19, 0x2a, 0xd6, 0xd0, 0x1b, 0x2a, 0xdc, - 0xd1, 0x08, 0x22, 0x1e, 0xe0, 0x06, 0x2a, 0xe4, - 0xd0, 0x13, 0x2a, 0xf6, 0xd0, 0x15, 0x2a, 0xfc, - 0xd1, 0x00, 0x22, 0x1f, 0x29, 0xdf, 0xd0, 0x26, - 0xdc, 0x11, 0x29, 0xc4, 0xd0, 0x25, 0x29, 0xd6, - 0xd0, 0x27, 0x29, 0xdc, 0xd1, 0x12, 0x21, 0x1e, - 0xe0, 0x10, 0x22, 0x19, 0xe7, 0xf2, 0x22, 0x1a, - 0xe7, 0xf0, 0x22, 0x1b, 0xe7, 0xee, 0x22, 0x1c, - 0xe7, 0xec, 0x22, 0x1d, 0xe7, 0xea, 0x29, 0xe4, - 0xd0, 0x15, 0x29, 0xf6, 0xd0, 0x17, 0x29, 0xfc, - 0xd1, 0x00, 0x21, 0x1f, 0x02, 0x17, 0x18, 0x7f, - 0x80, 0x07, 0x30, 0x02, 0x2a, 0x00, 0xd0, 0x04, - 0x29, 0x00, 0xd0, 0x02, 0x33, 0x01, 0x2b, 0x70, - 0xdb, 0xc0, 0xbc, 0x80, 0x47, 0x70, 0x21, 0x19, - 0xe7, 0xf0, 0x21, 0x1a, 0xe7, 0xee, 0x21, 0x1b, - 0xe7, 0xec, 0x21, 0x1c, 0xe7, 0xea, 0x21, 0x1d, - 0xe7, 0xe8, 0xb5, 0xf0, 0x1c, 0x0f, 0x1c, 0x11, - 0x04, 0x02, 0x0c, 0x12, 0x04, 0x0c, 0x0c, 0x24, - 0x04, 0x1d, 0x0c, 0x2d, 0x00, 0x96, 0xb0, 0x81, - 0x48, 0x10, 0x90, 0x00, 0x59, 0x81, 0x20, 0xff, - 0x29, 0x00, 0xd0, 0x16, 0x2a, 0x00, 0xd0, 0x14, - 0x2a, 0x0f, 0xdc, 0x12, 0x23, 0x32, 0x5e, 0xca, - 0x42, 0xa2, 0xdb, 0x0e, 0x23, 0x34, 0x5e, 0xc9, - 0x42, 0xa9, 0xdb, 0x0a, 0x1c, 0x38, 0xf7, 0xff, - 0xff, 0x93, 0x98, 0x00, 0x59, 0x80, 0x1c, 0x39, - 0x1c, 0x22, 0x1c, 0x2b, 0xf7, 0xff, 0xfb, 0x5c, - 0x20, 0x00, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb4, 0xb0, 0x04, 0x07, 0x0c, 0x3f, 0x04, 0x09, - 0x0c, 0x09, 0x04, 0x14, 0x14, 0x24, 0x04, 0x1a, - 0x14, 0x12, 0x20, 0xff, 0x2f, 0x0f, 0xdc, 0x1d, - 0x00, 0xbd, 0x4f, 0x0f, 0x59, 0x7b, 0x2b, 0x00, - 0xd0, 0x18, 0x48, 0x0e, 0x29, 0x01, 0xd0, 0x05, - 0x29, 0x02, 0xd0, 0x01, 0x29, 0x03, 0xd0, 0x03, - 0x6c, 0x80, 0xe0, 0x02, 0x6c, 0x40, 0xe0, 0x00, - 0x6c, 0xc0, 0x62, 0x58, 0x59, 0x78, 0x63, 0xc4, - 0x20, 0x00, 0x43, 0xc0, 0x42, 0x82, 0xd1, 0x02, - 0x59, 0x79, 0x63, 0x88, 0xe0, 0x01, 0x59, 0x78, - 0x63, 0x82, 0x20, 0x00, 0xbc, 0xb0, 0x47, 0x70, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x0c, - 0xb5, 0x00, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x09, - 0x0c, 0x09, 0x00, 0x80, 0x4a, 0x07, 0x58, 0x10, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0xff, 0xbc, 0x08, - 0x47, 0x18, 0x07, 0x89, 0x0f, 0x89, 0x68, 0x80, - 0xf0, 0x03, 0xfe, 0x6c, 0x20, 0x00, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x80, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x12, - 0x0c, 0x12, 0x1c, 0x1f, 0x28, 0x07, 0xdc, 0x1f, - 0x28, 0x01, 0xdb, 0x1d, 0x00, 0x80, 0x4b, 0x10, - 0x58, 0x1b, 0x2b, 0x00, 0xd0, 0x18, 0x29, 0x02, - 0xd0, 0x0e, 0x29, 0x04, 0xd0, 0x0c, 0x29, 0x10, - 0xd0, 0x0a, 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, - 0xd1, 0x0e, 0x06, 0x12, 0x0e, 0x12, 0x1c, 0x39, - 0x48, 0x08, 0x6c, 0x00, 0x68, 0x00, 0xe0, 0x05, - 0x07, 0x12, 0x0f, 0x12, 0x49, 0x06, 0x58, 0x08, - 0x68, 0x00, 0x1c, 0x39, 0xf0, 0x0b, 0xfa, 0xf2, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xbc, 0xb5, 0xf0, 0x04, 0x07, - 0x0c, 0x3f, 0x04, 0x10, 0x0c, 0x00, 0x22, 0x00, - 0xb0, 0x85, 0x92, 0x00, 0x2f, 0x07, 0xdc, 0x74, - 0x2f, 0x01, 0xdb, 0x73, 0x00, 0xbe, 0x4a, 0x3e, - 0x59, 0x92, 0x2a, 0x00, 0xd0, 0x6f, 0x04, 0x1a, - 0x0c, 0x12, 0x07, 0xd5, 0x0f, 0xed, 0x24, 0x02, - 0x40, 0x14, 0x27, 0x04, 0x40, 0x17, 0x23, 0x08, - 0x40, 0x1a, 0x92, 0x04, 0x29, 0x02, 0xd0, 0x34, - 0x29, 0x04, 0xd0, 0x32, 0x29, 0x10, 0xd0, 0x30, - 0x01, 0x5b, 0x42, 0x99, 0xd1, 0x60, 0x06, 0x02, - 0x0e, 0x12, 0x46, 0x69, 0x1c, 0x16, 0x48, 0x31, - 0x90, 0x01, 0x6c, 0x00, 0x68, 0x00, 0xf0, 0x0b, - 0xfa, 0xe9, 0x98, 0x00, 0x4b, 0x2e, 0x40, 0x18, - 0x90, 0x00, 0x2d, 0x00, 0xd0, 0x02, 0x23, 0x02, - 0x43, 0x18, 0x90, 0x00, 0x2c, 0x00, 0xd0, 0x04, - 0x23, 0x01, 0x04, 0x5b, 0x98, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x2f, 0x00, 0xd0, 0x03, 0x23, 0x01, - 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x9a, 0x04, - 0x2a, 0x00, 0xd0, 0x04, 0x23, 0x01, 0x04, 0x1b, - 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x98, 0x01, - 0x99, 0x00, 0x6c, 0x00, 0x68, 0x00, 0x1c, 0x32, - 0xe0, 0x30, 0x07, 0x02, 0x0f, 0x12, 0x92, 0x03, - 0x48, 0x1c, 0x90, 0x02, 0x59, 0x80, 0x68, 0x00, - 0x46, 0x69, 0xf0, 0x0b, 0xfa, 0xbb, 0x98, 0x00, - 0x4b, 0x17, 0x40, 0x18, 0x90, 0x00, 0x2d, 0x00, - 0xd0, 0x02, 0x23, 0x02, 0x43, 0x18, 0x90, 0x00, - 0x2c, 0x00, 0xd0, 0x04, 0x23, 0x01, 0x04, 0x5b, - 0x98, 0x00, 0x43, 0x18, 0x90, 0x00, 0x2f, 0x00, - 0xd0, 0x03, 0x23, 0x01, 0x98, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x9a, 0x04, 0x2a, 0x00, 0xd0, 0x04, - 0x23, 0x01, 0x04, 0x1b, 0x98, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x98, 0x02, 0x9a, 0x03, 0x59, 0x80, - 0xe0, 0x02, 0xe0, 0x05, 0xe0, 0x04, 0xe0, 0x03, - 0x68, 0x00, 0x99, 0x00, 0xf0, 0x0b, 0xfa, 0x62, - 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x0c, - 0xff, 0xfc, 0xff, 0xfc, 0x2e, 0x08, 0x92, 0xbc, - 0xb5, 0xf0, 0x04, 0x04, 0x0c, 0x24, 0x04, 0x0d, - 0x0c, 0x2d, 0x04, 0x16, 0x0c, 0x36, 0xb0, 0x85, - 0xa8, 0x01, 0x49, 0x48, 0xc9, 0x8e, 0xc0, 0x8e, - 0x2c, 0x00, 0xd0, 0x07, 0x2c, 0x01, 0xd0, 0x07, - 0x2c, 0x02, 0xd0, 0x07, 0x2c, 0x03, 0xd1, 0x74, - 0x20, 0x08, 0xe0, 0x04, 0x20, 0x01, 0xe0, 0x02, - 0x20, 0x02, 0xe0, 0x00, 0x20, 0x04, 0x90, 0x00, - 0x23, 0x2d, 0x01, 0x1b, 0x42, 0x9d, 0xdc, 0x69, - 0x23, 0x09, 0x01, 0x9b, 0x42, 0x9e, 0xdc, 0x65, - 0x1e, 0x68, 0x90, 0x03, 0x1e, 0x70, 0x90, 0x04, - 0xa8, 0x01, 0x1c, 0x21, 0xf0, 0x07, 0xfb, 0xe4, - 0x4f, 0x37, 0x60, 0x78, 0x00, 0x80, 0x23, 0x01, - 0x04, 0x1b, 0x42, 0x98, 0xdc, 0x56, 0x1f, 0xf8, - 0x38, 0x79, 0x67, 0xc4, 0x68, 0x38, 0x28, 0x00, - 0xd0, 0x0a, 0x68, 0x80, 0xb0, 0x81, 0x46, 0x6b, - 0x22, 0x00, 0x21, 0x00, 0xf0, 0x09, 0xfd, 0x6e, - 0x68, 0x38, 0xf7, 0xfe, 0xfe, 0xd2, 0xb0, 0x01, - 0x22, 0x00, 0x21, 0x0a, 0x20, 0x01, 0xb4, 0x07, - 0x1c, 0x22, 0xb4, 0x04, 0x21, 0x00, 0x20, 0x00, - 0x1c, 0x2a, 0x1c, 0x33, 0xf7, 0xfe, 0xfd, 0xac, - 0x60, 0x38, 0xb0, 0x04, 0x28, 0x00, 0xd0, 0x40, - 0x69, 0x84, 0x98, 0x00, 0x43, 0x45, 0x1d, 0xe8, - 0xd5, 0x00, 0x30, 0x07, 0x10, 0xc0, 0x43, 0x70, - 0x1c, 0x01, 0x60, 0x78, 0x20, 0x00, 0x29, 0x00, - 0xdd, 0x05, 0x21, 0x00, 0x54, 0x21, 0x68, 0x7a, - 0x30, 0x01, 0x42, 0x90, 0xdb, 0xfa, 0x20, 0x01, - 0x02, 0x80, 0xf7, 0xf0, 0xff, 0x55, 0x28, 0x00, - 0xdb, 0xf9, 0x4d, 0x18, 0x1c, 0x28, 0xf7, 0xf0, - 0xff, 0x6f, 0x28, 0x00, 0xdb, 0xfa, 0x68, 0x78, - 0x28, 0x00, 0xdd, 0x14, 0x68, 0x78, 0x04, 0x00, - 0x0c, 0x00, 0xf7, 0xf0, 0xff, 0x45, 0x28, 0x00, - 0xdb, 0xf8, 0x1c, 0x20, 0xf7, 0xf0, 0xff, 0x60, - 0x28, 0x00, 0xdb, 0xfa, 0x18, 0x24, 0x68, 0x79, - 0x1a, 0x08, 0x60, 0x78, 0x28, 0x00, 0xdc, 0xed, - 0xe0, 0x01, 0xe0, 0x0a, 0xe0, 0x09, 0x20, 0x00, - 0xf7, 0xf0, 0xff, 0x32, 0x28, 0x00, 0xd1, 0xfa, - 0x1c, 0x20, 0xf7, 0xf0, 0xff, 0x4d, 0x28, 0x00, - 0xdb, 0xfa, 0xb0, 0x05, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x03, 0xa7, 0xc4, - 0x2e, 0x08, 0x1d, 0x8c, 0x2e, 0x08, 0x93, 0x1c, - 0xb5, 0xf0, 0x04, 0x00, 0x0c, 0x00, 0x04, 0x09, - 0x0c, 0x09, 0xb0, 0x87, 0x91, 0x00, 0x04, 0x11, - 0x0c, 0x09, 0x91, 0x01, 0x04, 0x19, 0x0c, 0x09, - 0x91, 0x02, 0xb0, 0x85, 0x28, 0x07, 0xdc, 0x43, - 0x28, 0x01, 0xdb, 0x41, 0x00, 0x85, 0x48, 0x3e, - 0x90, 0x0b, 0x59, 0x41, 0x29, 0x00, 0xd0, 0x3b, - 0x48, 0x3c, 0x90, 0x0a, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x36, 0x23, 0x2c, 0x5e, 0xca, 0x2a, 0x0b, - 0xd2, 0x32, 0xa3, 0x02, 0x5c, 0x9b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x06, 0x06, 0x06, 0x06, - 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x06, 0x00, - 0x22, 0x00, 0x92, 0x00, 0x92, 0x01, 0x23, 0x32, - 0x5e, 0xc3, 0x93, 0x02, 0x23, 0x34, 0x5e, 0xc0, - 0x90, 0x03, 0x92, 0x04, 0x98, 0x07, 0x08, 0x80, - 0xd3, 0x40, 0x23, 0x2c, 0x5e, 0xc8, 0x28, 0x00, - 0xd0, 0x08, 0x28, 0x01, 0xd0, 0x08, 0x28, 0x02, - 0xd0, 0x08, 0x28, 0x03, 0xd1, 0x10, 0x27, 0xff, - 0x37, 0x01, 0xe0, 0x04, 0x27, 0x02, 0xe0, 0x02, - 0x27, 0x04, 0xe0, 0x00, 0x27, 0x10, 0x4e, 0x24, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x9f, 0xd1, 0x16, - 0x24, 0x00, 0x48, 0x22, 0x90, 0x09, 0xe0, 0x03, - 0xb0, 0x0c, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xa0, 0x58, 0x31, 0x29, 0x00, 0xd0, 0x06, - 0x06, 0x22, 0x0e, 0x12, 0x98, 0x09, 0x6c, 0x00, - 0x68, 0x00, 0xf0, 0x0b, 0xf9, 0x53, 0x34, 0x01, - 0x42, 0xbc, 0xdb, 0xf1, 0xe0, 0x12, 0x24, 0x00, - 0x2f, 0x00, 0xdd, 0x0f, 0x48, 0x16, 0x90, 0x08, - 0x00, 0xa0, 0x58, 0x31, 0x29, 0x00, 0xd0, 0x06, - 0x07, 0x22, 0x0f, 0x12, 0x98, 0x08, 0x59, 0x40, - 0x68, 0x00, 0xf0, 0x0b, 0xf9, 0x3f, 0x34, 0x01, - 0x42, 0xbc, 0xdb, 0xf1, 0x98, 0x07, 0x08, 0x40, - 0xd3, 0x01, 0x22, 0xff, 0xe0, 0x00, 0x22, 0x00, - 0x99, 0x06, 0xb4, 0x06, 0x98, 0x0d, 0x59, 0x40, - 0x68, 0x81, 0x98, 0x0c, 0x68, 0x00, 0x68, 0x80, - 0x9b, 0x07, 0xaa, 0x02, 0xf0, 0x09, 0xff, 0x08, - 0xb0, 0x0e, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x92, 0x7c, 0x2e, 0x08, 0x1d, 0x8c, - 0x2e, 0x08, 0x93, 0x1c, 0x2e, 0x08, 0x1d, 0x0c, - 0x2e, 0x08, 0x92, 0xbc, 0xb5, 0x80, 0x4f, 0x05, - 0x68, 0x38, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xfe, - 0xfd, 0xd4, 0x20, 0x00, 0x60, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x1d, 0x8c, - 0xb5, 0x00, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x07, 0xdc, 0x09, 0x00, 0x89, 0x4a, 0x05, - 0x58, 0x51, 0x29, 0x00, 0xd0, 0x04, 0x68, 0x88, - 0x21, 0x01, 0xf0, 0x03, 0xfb, 0x93, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0x00, 0x04, 0x01, 0x0c, 0x09, 0x20, 0xff, - 0x29, 0x07, 0xdc, 0x09, 0x00, 0x89, 0x4a, 0x05, - 0x58, 0x51, 0x29, 0x00, 0xd0, 0x04, 0x68, 0x88, - 0x21, 0x00, 0xf0, 0x03, 0xfb, 0x7f, 0x20, 0x00, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x92, 0x7c, - 0xb5, 0xf7, 0xb0, 0x86, 0x9c, 0x07, 0x20, 0x00, - 0x6e, 0x40, 0x90, 0x05, 0x98, 0x05, 0x30, 0x0c, - 0x90, 0x05, 0x48, 0x7f, 0x90, 0x04, 0x98, 0x04, - 0x30, 0x0c, 0x90, 0x04, 0xf0, 0x13, 0xfc, 0x2a, - 0x90, 0x01, 0xf0, 0x13, 0xfc, 0x0d, 0x90, 0x00, - 0x20, 0x00, 0x43, 0xc0, 0x49, 0x79, 0x60, 0x08, - 0x20, 0x00, 0x43, 0xc0, 0x49, 0x77, 0x60, 0x88, - 0x20, 0x00, 0x43, 0xc0, 0x49, 0x75, 0x61, 0x08, - 0x98, 0x06, 0x28, 0x00, 0xd0, 0x73, 0x20, 0x00, - 0x6a, 0x40, 0x90, 0x03, 0x68, 0x20, 0x30, 0x05, - 0x99, 0x06, 0x1a, 0x08, 0x90, 0x06, 0x68, 0xe0, - 0x28, 0x00, 0xd0, 0x08, 0x68, 0x60, 0x99, 0x03, - 0x68, 0x09, 0x42, 0x88, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x06, 0x68, 0x60, - 0x9a, 0x08, 0x42, 0x90, 0xd1, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x73, - 0x68, 0x27, 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x01, - 0x98, 0x05, 0xe0, 0x00, 0x98, 0x04, 0x1c, 0x06, - 0x68, 0xe0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, - 0x6e, 0x40, 0xe0, 0x00, 0x48, 0x5c, 0x90, 0x02, - 0x1d, 0xe5, 0x35, 0x0d, 0x68, 0xa0, 0x28, 0x08, - 0xd2, 0x5f, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x16, 0x28, 0x3a, - 0x49, 0x55, 0x65, 0x71, 0x69, 0x20, 0x49, 0x55, - 0x60, 0x08, 0xcd, 0x02, 0x48, 0x53, 0x60, 0x41, - 0xcd, 0x02, 0x98, 0x02, 0x60, 0x01, 0x3f, 0x01, - 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, - 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x67, - 0x69, 0x20, 0x49, 0x4c, 0x60, 0x88, 0xcd, 0x02, - 0x48, 0x4a, 0x60, 0xc1, 0xcd, 0x02, 0x98, 0x02, - 0x60, 0x41, 0x3f, 0x01, 0x1c, 0x38, 0x3f, 0x01, - 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, 0xc6, 0x02, - 0xe7, 0xf8, 0xe0, 0x55, 0x69, 0x20, 0x49, 0x43, - 0x61, 0x08, 0xcd, 0x02, 0x48, 0x41, 0x61, 0x41, - 0xcd, 0x02, 0x98, 0x02, 0x60, 0x81, 0x3f, 0x01, - 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, - 0xcd, 0x02, 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x43, - 0x69, 0x20, 0x00, 0x80, 0xe0, 0x00, 0xe0, 0x4b, - 0x21, 0x00, 0x6a, 0x89, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x34, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x33, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x28, 0x69, 0x20, - 0x00, 0x80, 0x21, 0x00, 0x6e, 0x09, 0xe0, 0x01, - 0xe0, 0x28, 0xe0, 0x20, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x18, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x26, 0x50, 0x0e, 0x1c, 0x38, - 0x3f, 0x01, 0x28, 0x00, 0xd0, 0x02, 0xcd, 0x02, - 0xc6, 0x02, 0xe7, 0xf8, 0xe0, 0x0c, 0x69, 0x20, - 0x90, 0x03, 0x1c, 0x38, 0x3f, 0x01, 0x28, 0x00, - 0xd0, 0x04, 0xcd, 0x02, 0x98, 0x03, 0xc0, 0x02, - 0x90, 0x03, 0xe7, 0xf6, 0xe0, 0x00, 0xe7, 0xff, - 0x68, 0xe0, 0x28, 0xff, 0xd1, 0x01, 0x96, 0x05, - 0xe0, 0x00, 0x96, 0x04, 0x68, 0x20, 0x00, 0x80, - 0x19, 0x00, 0x1d, 0xc4, 0x34, 0x0d, 0xe7, 0x3b, - 0x98, 0x01, 0x28, 0x00, 0xd1, 0x01, 0xf0, 0x13, - 0xfb, 0x89, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x01, - 0xf0, 0x13, 0xfb, 0x68, 0x20, 0x00, 0x6e, 0x80, - 0x68, 0x00, 0x4b, 0x0f, 0x42, 0x98, 0xd0, 0x06, - 0x48, 0x0d, 0x21, 0x00, 0x6e, 0x89, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x08, 0x62, 0x08, 0x20, 0x00, - 0x21, 0x00, 0x6e, 0x89, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x06, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb0, 0x06, 0xe7, 0xf9, 0x00, 0x00, - 0x2e, 0x08, 0x97, 0x1c, 0x66, 0x00, 0x00, 0x80, - 0x2e, 0x08, 0x3b, 0xa4, 0x2e, 0x08, 0x1d, 0x94, - 0xda, 0xa5, 0xaa, 0x57, 0xb5, 0x80, 0xb0, 0xa7, - 0x46, 0x68, 0x4f, 0x08, 0x23, 0x13, 0xcf, 0x06, - 0xc0, 0x06, 0x3b, 0x01, 0xd1, 0xfb, 0xcf, 0x04, - 0xc0, 0x04, 0x46, 0x69, 0x4a, 0x04, 0x20, 0x27, - 0xf7, 0xff, 0xfe, 0xde, 0xb0, 0x27, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x03, 0xa7, 0xd4, - 0xf0, 0x24, 0x00, 0x09, 0xb5, 0xff, 0xb0, 0x83, - 0x99, 0x04, 0x04, 0x09, 0x0c, 0x09, 0x91, 0x00, - 0x9a, 0x05, 0x06, 0x16, 0x0e, 0x36, 0x9b, 0x06, - 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, 0x98, 0x0c, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x02, 0xb0, 0x84, - 0x25, 0x00, 0x98, 0x07, 0x1d, 0xc2, 0x32, 0x21, - 0x92, 0x00, 0x20, 0xff, 0x30, 0x01, 0x68, 0x00, - 0x49, 0x6b, 0x60, 0x08, 0x98, 0x12, 0x28, 0x01, - 0xd1, 0x73, 0x98, 0x07, 0x28, 0x00, 0xd1, 0x05, - 0x20, 0x63, 0xb0, 0x07, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x21, 0x00, 0x91, 0x01, - 0x99, 0x01, 0x23, 0xff, 0x33, 0xe1, 0x42, 0x99, - 0xd3, 0x04, 0xe0, 0x0a, 0x99, 0x01, 0x31, 0x01, - 0x91, 0x01, 0xe7, 0xf5, 0x20, 0x00, 0x99, 0x01, - 0x23, 0x2c, 0x43, 0x59, 0x9a, 0x00, 0x50, 0x50, - 0xe7, 0xf4, 0x98, 0x07, 0x49, 0x5b, 0x68, 0x09, - 0x60, 0x08, 0x98, 0x05, 0x28, 0x10, 0xdb, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x99, 0x05, - 0x29, 0x1f, 0xdc, 0x01, 0x21, 0x01, 0xe0, 0x00, - 0x21, 0x00, 0x40, 0x08, 0xd0, 0x04, 0x98, 0x05, - 0x49, 0x53, 0x68, 0x09, 0x60, 0x08, 0xe0, 0x02, - 0x20, 0x62, 0xb0, 0x07, 0xe7, 0xce, 0x20, 0x00, - 0x49, 0x4d, 0x68, 0x09, 0x70, 0x08, 0x1c, 0x30, - 0x23, 0x03, 0x02, 0x5b, 0x22, 0x01, 0x02, 0xd2, - 0x21, 0x01, 0xf0, 0x00, 0xfb, 0x01, 0x1c, 0x07, - 0x2f, 0x00, 0xd0, 0x02, 0x20, 0xa2, 0xb0, 0x07, - 0xe7, 0xbc, 0x22, 0x00, 0xb4, 0x04, 0x99, 0x05, - 0x1c, 0x30, 0x23, 0x04, 0x22, 0x00, 0xf0, 0x00, - 0xf9, 0x2f, 0xb0, 0x01, 0x1c, 0x07, 0x2f, 0x00, - 0xd0, 0x02, 0x20, 0xa2, 0xb0, 0x07, 0xe7, 0xad, - 0x98, 0x06, 0x28, 0x00, 0xdb, 0x04, 0x98, 0x06, - 0x28, 0x3f, 0xdc, 0x01, 0x9d, 0x06, 0xe0, 0x00, - 0x25, 0x1b, 0x98, 0x11, 0x01, 0x80, 0x43, 0x05, - 0x23, 0x80, 0x43, 0x1d, 0x48, 0x39, 0x68, 0x01, - 0x0a, 0x09, 0x02, 0x09, 0x60, 0x01, 0x48, 0x37, - 0x68, 0x01, 0x43, 0x29, 0x60, 0x01, 0xf0, 0x13, - 0xfa, 0x67, 0x90, 0x03, 0xf0, 0x13, 0xfa, 0x7e, - 0xe0, 0x00, 0xe0, 0x13, 0x90, 0x02, 0xf0, 0x13, - 0xfa, 0xdd, 0x1c, 0x04, 0x4b, 0x30, 0x40, 0x1c, - 0x1c, 0x20, 0xf0, 0x13, 0xfa, 0xdb, 0x98, 0x02, - 0x28, 0x40, 0xd0, 0x01, 0xf0, 0x13, 0xfa, 0xa6, - 0x98, 0x03, 0x28, 0x80, 0xd0, 0x01, 0xf0, 0x13, - 0xfa, 0x85, 0xe0, 0x43, 0x22, 0x00, 0xb4, 0x04, - 0x1c, 0x30, 0x23, 0x04, 0x22, 0x00, 0x49, 0x27, - 0xf0, 0x00, 0xf8, 0xee, 0xb0, 0x01, 0x1c, 0x07, - 0x2f, 0x00, 0xd0, 0x02, 0x20, 0xa2, 0xb0, 0x07, - 0xe7, 0x6c, 0x1c, 0x30, 0x23, 0x03, 0x02, 0x5b, - 0x22, 0x01, 0x02, 0xd2, 0x21, 0x02, 0xf0, 0x00, - 0xfa, 0xa3, 0x1c, 0x07, 0x2f, 0x00, 0xd0, 0x02, - 0x20, 0xa2, 0xb0, 0x07, 0xe7, 0x5e, 0x48, 0x19, - 0x68, 0x01, 0x0a, 0x09, 0x02, 0x09, 0x60, 0x01, - 0x48, 0x16, 0x68, 0x01, 0x23, 0x1b, 0x43, 0x19, - 0x60, 0x01, 0x48, 0x12, 0x68, 0x00, 0x68, 0x00, - 0x90, 0x07, 0xf0, 0x13, 0xfa, 0x21, 0x90, 0x03, - 0xf0, 0x13, 0xfa, 0x38, 0x90, 0x02, 0xf0, 0x13, - 0xfa, 0x99, 0x1c, 0x04, 0x23, 0x01, 0x04, 0x5b, - 0x43, 0x1c, 0x1c, 0x20, 0xf0, 0x13, 0xfa, 0x96, - 0x98, 0x02, 0x28, 0x40, 0xd0, 0x01, 0xf0, 0x13, - 0xfa, 0x61, 0x98, 0x03, 0x28, 0x80, 0xd0, 0x01, - 0xf0, 0x13, 0xfa, 0x40, 0x1c, 0x38, 0xb0, 0x07, - 0xe7, 0x34, 0xb0, 0x04, 0xb0, 0x03, 0xe7, 0x31, - 0x2e, 0x08, 0x9b, 0x24, 0x2e, 0x08, 0x9b, 0x1c, - 0x2e, 0x08, 0x9b, 0x20, 0x68, 0x00, 0x00, 0x38, - 0xff, 0xfd, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, - 0xb5, 0x00, 0xf7, 0xff, 0xfe, 0xe7, 0xf0, 0x00, - 0xf8, 0x02, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0xf0, 0x0b, 0xf9, 0x48, 0x26, 0x00, 0x2e, 0x04, - 0xd3, 0x02, 0xe0, 0x12, 0x36, 0x01, 0xe7, 0xfa, - 0x01, 0x30, 0x4b, 0x3c, 0x18, 0xc7, 0x25, 0x00, - 0x2d, 0x04, 0xd3, 0x02, 0xe0, 0x08, 0x35, 0x01, - 0xe7, 0xfa, 0x20, 0x00, 0x60, 0xb8, 0x20, 0x00, - 0x60, 0xf8, 0x37, 0xff, 0x37, 0x01, 0xe7, 0xf6, - 0xe7, 0xec, 0x4f, 0x35, 0x25, 0x00, 0x2d, 0x04, - 0xd3, 0x02, 0xe0, 0x07, 0x35, 0x01, 0xe7, 0xfa, - 0x20, 0x00, 0x60, 0xb8, 0x20, 0x00, 0x60, 0xf8, - 0x37, 0x10, 0xe7, 0xf7, 0x20, 0x00, 0x49, 0x2f, - 0x68, 0x09, 0x70, 0x08, 0x24, 0x00, 0x2c, 0x20, - 0xd3, 0x02, 0xe0, 0x1f, 0x34, 0x01, 0xe7, 0xfa, - 0x21, 0x00, 0x00, 0xe0, 0x4a, 0x2a, 0x68, 0x12, - 0x50, 0x11, 0x20, 0x00, 0x00, 0xe1, 0x4a, 0x28, - 0x68, 0x12, 0x18, 0x89, 0x60, 0x48, 0x21, 0x00, - 0x00, 0xe0, 0x4a, 0x26, 0x68, 0x12, 0x18, 0x80, - 0x60, 0x41, 0x20, 0x00, 0x00, 0xa1, 0x4a, 0x24, - 0x68, 0x12, 0x50, 0x50, 0x20, 0x00, 0x00, 0xe1, - 0x1b, 0x09, 0x00, 0x89, 0x4a, 0x21, 0x68, 0x12, - 0x52, 0x50, 0xe7, 0xdf, 0x20, 0x00, 0x21, 0x19, - 0x06, 0x89, 0x62, 0x48, 0x48, 0x1e, 0x21, 0x19, - 0x06, 0x89, 0x62, 0x48, 0x20, 0x00, 0x49, 0x1d, - 0x68, 0x09, 0x60, 0x08, 0x20, 0x00, 0x49, 0x1b, - 0x68, 0x09, 0x60, 0x48, 0x20, 0x00, 0x49, 0x19, - 0x68, 0x09, 0x60, 0xc8, 0x20, 0x00, 0x49, 0x17, - 0x68, 0x09, 0x61, 0x08, 0x20, 0x00, 0x49, 0x15, - 0x68, 0x09, 0x61, 0x48, 0x20, 0x00, 0x49, 0x13, - 0x68, 0x09, 0x61, 0x88, 0x20, 0x00, 0x49, 0x12, - 0x68, 0x09, 0x60, 0x08, 0x20, 0x00, 0x49, 0x10, - 0x68, 0x09, 0x60, 0x48, 0x20, 0x00, 0x49, 0x0e, - 0x68, 0x09, 0x60, 0x88, 0x48, 0x0d, 0x68, 0x01, - 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x9e, 0x00, 0x00, 0xc0, - 0x9e, 0x00, 0x09, 0x80, 0x2e, 0x08, 0x9b, 0x28, - 0x2e, 0x08, 0x9b, 0x3c, 0x2e, 0x08, 0x9b, 0x40, - 0x2e, 0x08, 0x9b, 0x38, 0x2e, 0x08, 0x9b, 0x30, - 0x00, 0x40, 0x00, 0x03, 0x2e, 0x08, 0x9b, 0x78, - 0x2e, 0x08, 0x9b, 0x7c, 0x6a, 0x00, 0x00, 0x10, - 0xb5, 0xff, 0xb0, 0x83, 0x98, 0x03, 0x06, 0x04, - 0x0e, 0x24, 0x99, 0x04, 0x04, 0x08, 0x0c, 0x00, - 0x90, 0x00, 0x9a, 0x05, 0x06, 0x10, 0x0e, 0x00, - 0x90, 0x01, 0x9b, 0x06, 0x06, 0x18, 0x0e, 0x00, - 0x90, 0x02, 0xb0, 0x81, 0x00, 0xe0, 0x49, 0xc1, - 0x68, 0x09, 0x18, 0x47, 0x00, 0xa0, 0x49, 0xc0, - 0x68, 0x09, 0x18, 0x45, 0x00, 0xe0, 0x1b, 0x00, - 0x00, 0x80, 0x49, 0xbe, 0x68, 0x09, 0x18, 0x46, - 0x2c, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x04, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0x28, 0x4b, 0xb9, 0x40, 0x18, 0x60, 0x28, - 0x68, 0x38, 0x4b, 0xb8, 0x40, 0x18, 0x60, 0x38, - 0x68, 0x38, 0x23, 0x40, 0x40, 0x18, 0xd0, 0x17, - 0x68, 0x38, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0x38, 0x48, 0xb3, 0x68, 0x01, 0x08, 0x49, - 0x00, 0x49, 0x60, 0x01, 0x48, 0xb1, 0x68, 0x01, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x19, 0x60, 0x01, - 0x98, 0x01, 0x4b, 0xaf, 0x42, 0x98, 0xd1, 0x03, - 0x20, 0x00, 0x49, 0xae, 0x68, 0x09, 0x60, 0x08, - 0x98, 0x01, 0x4b, 0xab, 0x42, 0x98, 0xd0, 0x73, - 0x68, 0x38, 0x23, 0x21, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0x38, 0x68, 0x28, 0x23, 0x07, 0x03, 0x5b, - 0x40, 0x18, 0x60, 0x28, 0x98, 0x01, 0x4b, 0xa6, - 0x40, 0x18, 0x68, 0x29, 0x43, 0x08, 0x60, 0x28, - 0x20, 0x00, 0x75, 0x30, 0x98, 0x02, 0x07, 0x80, - 0x0f, 0x80, 0x28, 0x01, 0xd1, 0x04, 0x88, 0x30, - 0x23, 0x10, 0x43, 0x18, 0x80, 0x30, 0xe0, 0x04, - 0x88, 0x30, 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, - 0x80, 0x30, 0x98, 0x02, 0x23, 0x80, 0x40, 0x18, - 0x28, 0x80, 0xd1, 0x08, 0x68, 0x38, 0x23, 0x40, - 0x43, 0x18, 0x60, 0x38, 0x20, 0xff, 0x49, 0x97, - 0x68, 0x09, 0x70, 0x08, 0xe0, 0x04, 0x68, 0x38, - 0x23, 0x40, 0x43, 0xdb, 0x40, 0x18, 0x60, 0x38, - 0x98, 0x03, 0x28, 0x01, 0xd1, 0x36, 0x88, 0x30, - 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, 0x80, 0x30, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0x40, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc1, 0x00, 0xe0, 0x4a, 0x8c, - 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, 0x20, 0x01, - 0x70, 0xb0, 0x68, 0x38, 0x23, 0x01, 0x03, 0x9b, - 0x43, 0x18, 0x60, 0x38, 0x68, 0x38, 0x4b, 0x87, - 0x43, 0x18, 0x60, 0x38, 0x48, 0x86, 0x70, 0x44, - 0x20, 0x00, 0x49, 0x86, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x01, 0x02, 0xc0, 0x49, 0x84, 0x61, 0x48, - 0x49, 0x83, 0x61, 0x08, 0x20, 0x01, 0x49, 0x83, - 0x64, 0x48, 0x20, 0x00, 0x49, 0x81, 0x64, 0x48, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0x20, 0x00, 0x49, 0x7e, 0x68, 0x09, - 0x60, 0x08, 0xe0, 0x9a, 0x98, 0x03, 0x28, 0x02, - 0xd1, 0x30, 0x20, 0x33, 0x06, 0x40, 0xe0, 0x00, - 0xe0, 0x94, 0x6d, 0xc0, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc0, 0x00, 0xe1, 0x4a, 0x70, 0x68, 0x12, - 0x18, 0x89, 0x60, 0x48, 0x20, 0x02, 0x70, 0xb0, - 0x68, 0x38, 0x23, 0x01, 0x03, 0xdb, 0x43, 0x18, - 0x60, 0x38, 0x68, 0x38, 0x4b, 0x6b, 0x43, 0x18, - 0x60, 0x38, 0x48, 0x6b, 0x70, 0x84, 0x20, 0x00, - 0x49, 0x6e, 0x60, 0x08, 0x00, 0xe0, 0x49, 0x5b, - 0x68, 0x09, 0x58, 0x08, 0x23, 0xff, 0x33, 0x01, - 0x43, 0x18, 0x00, 0xe1, 0x4a, 0x57, 0x68, 0x12, - 0x50, 0x50, 0x20, 0x4b, 0x49, 0x67, 0x60, 0x08, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0xe0, 0x66, 0x98, 0x03, 0x28, 0x04, - 0xd1, 0x15, 0x20, 0x00, 0x00, 0xe1, 0x4a, 0x5a, - 0x68, 0x12, 0x18, 0x89, 0x60, 0x48, 0x98, 0x03, - 0x70, 0xb0, 0x68, 0x38, 0x23, 0x20, 0x43, 0x18, - 0x60, 0x38, 0x68, 0x38, 0x60, 0x38, 0x48, 0x56, - 0x70, 0x04, 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, - 0x43, 0x18, 0x60, 0x28, 0xe0, 0x4d, 0x98, 0x03, - 0x23, 0x10, 0x40, 0x18, 0xd0, 0x0f, 0x21, 0x00, - 0x00, 0xe0, 0x4a, 0x4d, 0x68, 0x12, 0x18, 0x80, - 0x60, 0x41, 0x68, 0x38, 0x4b, 0x52, 0x43, 0x18, - 0x60, 0x38, 0x68, 0x38, 0x60, 0x38, 0x37, 0x04, - 0x20, 0x0e, 0x60, 0x38, 0xe0, 0x39, 0x98, 0x03, - 0x28, 0x08, 0xd1, 0x23, 0x48, 0x4d, 0x68, 0x00, - 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x03, - 0x20, 0x4f, 0xb0, 0x04, 0xe6, 0xf8, 0xe0, 0x67, - 0x20, 0x01, 0x49, 0x48, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x88, 0x48, 0x46, 0x68, 0x00, 0x30, 0x60, - 0x76, 0x04, 0x20, 0x01, 0x49, 0x43, 0x68, 0x09, - 0x31, 0x80, 0x70, 0xc8, 0x49, 0x42, 0x00, 0xe0, - 0x4a, 0x37, 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0xe0, 0x12, 0x21, 0x00, 0x00, 0xe0, - 0x4a, 0x31, 0x68, 0x12, 0x18, 0x80, 0x60, 0x41, - 0x98, 0x03, 0x70, 0xb0, 0x68, 0x38, 0x23, 0x20, - 0x43, 0x18, 0x60, 0x38, 0x68, 0x38, 0x60, 0x38, - 0x68, 0x28, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x60, 0x28, 0xe0, 0x33, 0x98, 0x03, 0x23, 0x10, - 0x40, 0x18, 0xd0, 0x09, 0x1c, 0x20, 0xf0, 0x05, - 0xf8, 0x0f, 0x90, 0x00, 0x28, 0x00, 0xd0, 0x02, - 0x98, 0x00, 0xb0, 0x04, 0xe6, 0xbc, 0xe0, 0x1a, - 0x98, 0x03, 0x28, 0x01, 0xd1, 0x03, 0x20, 0xff, - 0x49, 0x21, 0x70, 0x48, 0xe0, 0x13, 0x98, 0x03, - 0x28, 0x02, 0xd1, 0x03, 0x20, 0xff, 0x49, 0x1e, - 0x70, 0x88, 0xe0, 0x0c, 0x98, 0x03, 0x28, 0x08, - 0xd1, 0x09, 0x20, 0x00, 0x49, 0x21, 0x68, 0x09, - 0x31, 0x80, 0x70, 0xc8, 0x20, 0x00, 0x49, 0x1f, - 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, 0x7d, 0x30, - 0x07, 0xc0, 0x0f, 0xc0, 0x28, 0x01, 0xd1, 0x03, - 0x1c, 0x20, 0x49, 0x1c, 0xf0, 0x00, 0xf9, 0x16, - 0x20, 0x00, 0x70, 0xb0, 0x20, 0x00, 0xb0, 0x04, - 0xe6, 0x92, 0xb0, 0x01, 0xb0, 0x03, 0xe6, 0x8f, - 0xe6, 0x8e, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x3c, - 0x2e, 0x08, 0x9b, 0x38, 0x2e, 0x08, 0x9b, 0x30, - 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0x3f, 0xff, - 0x6a, 0x00, 0x00, 0x18, 0x6c, 0x00, 0x00, 0x20, - 0x00, 0x00, 0xff, 0xff, 0x2e, 0x08, 0x9b, 0x44, - 0xff, 0xff, 0x1f, 0xff, 0x2e, 0x08, 0x9b, 0x98, - 0x2e, 0x08, 0x9b, 0x40, 0x00, 0x00, 0x20, 0x01, - 0x2e, 0x08, 0x9b, 0x9c, 0x2e, 0x08, 0x9b, 0x68, - 0xcc, 0x00, 0x0f, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x2e, 0x08, 0x9b, 0xac, 0x2e, 0x08, 0x9b, 0xb0, - 0x00, 0x00, 0x20, 0xa0, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0xf0, 0xff, 0xff, 0x00, 0x00, - 0xb5, 0xff, 0x98, 0x00, 0x06, 0x01, 0x0e, 0x09, - 0x98, 0x01, 0x06, 0x02, 0x0e, 0x12, 0x98, 0x02, - 0x04, 0x07, 0x0c, 0x3f, 0x9b, 0x03, 0x04, 0x1c, - 0x0c, 0x24, 0x29, 0x20, 0xdb, 0x04, 0x20, 0xa2, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2a, 0x02, 0xd1, 0x0a, 0x00, 0xc8, 0x4b, 0x1f, - 0x68, 0x1b, 0x58, 0x18, 0x4b, 0x1e, 0x40, 0x18, - 0x00, 0xcb, 0x4d, 0x1c, 0x68, 0x2d, 0x50, 0xe8, - 0xe0, 0x30, 0x2a, 0x01, 0xd1, 0x0b, 0x00, 0xc8, - 0x4b, 0x18, 0x68, 0x1b, 0x58, 0x18, 0x43, 0x27, - 0x1c, 0x3b, 0x43, 0x18, 0x00, 0xcb, 0x4d, 0x15, - 0x68, 0x2d, 0x50, 0xe8, 0xe0, 0x22, 0x20, 0x00, - 0x28, 0x20, 0xdb, 0x04, 0xe0, 0x1e, 0x1c, 0x43, - 0x06, 0x1b, 0x16, 0x18, 0xe7, 0xf8, 0x2a, 0x03, - 0xd1, 0x0b, 0x00, 0xc3, 0x4d, 0x0d, 0x68, 0x2d, - 0x58, 0xeb, 0x1c, 0x3d, 0x43, 0x25, 0x43, 0x1d, - 0x00, 0xc3, 0x4e, 0x0a, 0x68, 0x36, 0x50, 0xf5, - 0xe0, 0x0b, 0x2a, 0x04, 0xd1, 0x09, 0x00, 0xc3, - 0x4d, 0x06, 0x68, 0x2d, 0x58, 0xed, 0x4b, 0x06, - 0x40, 0x2b, 0x00, 0xc5, 0x4e, 0x03, 0x68, 0x36, - 0x51, 0x73, 0xe7, 0xe0, 0x20, 0x00, 0xe7, 0xbb, - 0xe7, 0xba, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x3c, - 0xff, 0xff, 0xe1, 0xff, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x38, 0x0e, 0x00, 0x06, 0x11, - 0x0e, 0x09, 0x4c, 0x14, 0x68, 0x25, 0x4b, 0x14, - 0x40, 0x2b, 0x60, 0x23, 0x28, 0x01, 0xd1, 0x06, - 0x4c, 0x10, 0x68, 0x25, 0x23, 0x01, 0x04, 0x1b, - 0x43, 0x2b, 0x60, 0x23, 0xe0, 0x07, 0x28, 0x00, - 0xd1, 0x05, 0x4c, 0x0c, 0x68, 0x25, 0x23, 0x01, - 0x05, 0x9b, 0x43, 0x2b, 0x60, 0x23, 0x29, 0x01, - 0xd1, 0x06, 0x4c, 0x08, 0x68, 0x25, 0x23, 0x01, - 0x03, 0x9b, 0x43, 0x2b, 0x60, 0x23, 0xe0, 0x07, - 0x29, 0x02, 0xd1, 0x05, 0x4c, 0x03, 0x68, 0x25, - 0x23, 0x01, 0x03, 0xdb, 0x43, 0x2b, 0x60, 0x23, - 0xbc, 0xb0, 0x47, 0x70, 0x64, 0x00, 0x00, 0x24, - 0xff, 0xbe, 0x3f, 0xff, 0xb5, 0xff, 0x1c, 0x1f, - 0x9c, 0x09, 0xb0, 0x82, 0x98, 0x02, 0x04, 0x00, - 0x0c, 0x00, 0x90, 0x00, 0x99, 0x03, 0x06, 0x0a, - 0x0e, 0x12, 0x98, 0x04, 0x06, 0x05, 0x0e, 0x2d, - 0x98, 0x0c, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x01, - 0x00, 0xd0, 0x1a, 0x80, 0x00, 0x80, 0x4b, 0x1b, - 0x68, 0x1b, 0x18, 0xc1, 0x2a, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2d, 0x1f, 0xdb, 0x02, - 0x20, 0xaf, 0xb0, 0x02, 0xe7, 0xf6, 0x71, 0x8d, - 0x68, 0x3b, 0x00, 0xd0, 0x4e, 0x12, 0x68, 0x36, - 0x19, 0x80, 0x60, 0x43, 0x1c, 0x20, 0x71, 0xc8, - 0x20, 0x00, 0x80, 0x88, 0x20, 0x00, 0x60, 0xc8, - 0x98, 0x00, 0x23, 0x01, 0x43, 0x18, 0x75, 0x08, - 0x98, 0x01, 0x74, 0x88, 0x60, 0x8f, 0x88, 0xb8, - 0x82, 0x08, 0x20, 0x00, 0x74, 0xc8, 0x88, 0xb8, - 0x61, 0x38, 0x20, 0x00, 0x73, 0x38, 0x20, 0x00, - 0x73, 0x78, 0x20, 0x00, 0x73, 0xb8, 0x20, 0x00, - 0x73, 0xf8, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xd1, - 0xb0, 0x02, 0xe7, 0xcf, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x9b, 0x40, 0xb5, 0xf3, 0x98, 0x00, - 0x06, 0x04, 0x0e, 0x24, 0x99, 0x01, 0x04, 0x0d, - 0x0c, 0x2d, 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, - 0x49, 0x25, 0x68, 0x09, 0x18, 0x47, 0x2c, 0x20, - 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x4b, 0x21, 0x42, 0x9d, - 0xd1, 0x27, 0x00, 0xe1, 0x4b, 0x20, 0x68, 0x1b, - 0x18, 0xc8, 0x00, 0xa1, 0x4b, 0x1f, 0x68, 0x1b, - 0x18, 0xca, 0x68, 0x11, 0x4b, 0x1e, 0x40, 0x19, - 0x60, 0x11, 0x68, 0x01, 0x23, 0x40, 0x40, 0x19, - 0xd0, 0x13, 0x68, 0x01, 0x23, 0x40, 0x43, 0xdb, - 0x40, 0x19, 0x60, 0x01, 0x21, 0x00, 0x4b, 0x19, - 0x68, 0x1b, 0x70, 0x19, 0x49, 0x18, 0x68, 0x0b, - 0x08, 0x5b, 0x00, 0x5b, 0x60, 0x0b, 0x49, 0x17, - 0x68, 0x0e, 0x23, 0x01, 0x05, 0x5b, 0x43, 0x33, - 0x60, 0x0b, 0x68, 0x01, 0x4b, 0x14, 0x40, 0x19, - 0x60, 0x01, 0x20, 0x00, 0x75, 0x38, 0x20, 0x00, - 0x80, 0x38, 0x20, 0x00, 0x80, 0xb8, 0x68, 0xb8, - 0x72, 0x44, 0x20, 0xa0, 0x68, 0xb9, 0x72, 0x08, - 0x20, 0x00, 0x60, 0xb8, 0x79, 0xb9, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x12, 0xfe, 0x1f, 0x20, 0x00, - 0x71, 0xb8, 0x20, 0x00, 0xe7, 0xba, 0xe7, 0xb9, - 0x2e, 0x08, 0x9b, 0x30, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0x3c, 0x2e, 0x08, 0x9b, 0x38, - 0xff, 0xff, 0xdf, 0xff, 0x2e, 0x08, 0x9b, 0x2c, - 0x6a, 0x00, 0x00, 0x18, 0x6c, 0x00, 0x00, 0x20, - 0xff, 0xff, 0x3f, 0xde, 0xb5, 0xff, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x28, 0x0e, 0x00, - 0x06, 0x23, 0x0e, 0x1b, 0x06, 0x39, 0x0e, 0x09, - 0x9e, 0x03, 0x06, 0x36, 0x16, 0x32, 0x28, 0x20, - 0xda, 0x02, 0x4e, 0x08, 0x68, 0x36, 0x60, 0x30, - 0x4e, 0x07, 0x68, 0x36, 0x60, 0x33, 0x4e, 0x07, - 0x68, 0x36, 0x60, 0x31, 0x4e, 0x06, 0x68, 0x36, - 0x60, 0x32, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x58, - 0x2e, 0x08, 0x9b, 0x5c, 0x2e, 0x08, 0x9b, 0x60, - 0x2e, 0x08, 0x9b, 0x64, 0x1c, 0x01, 0x06, 0x08, - 0x0e, 0x00, 0x28, 0x01, 0xd1, 0x04, 0x22, 0x01, - 0x4b, 0x04, 0x68, 0x1b, 0x60, 0x1a, 0xe0, 0x03, - 0x22, 0x02, 0x4b, 0x02, 0x68, 0x1b, 0x60, 0x1a, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xa0, - 0xb5, 0xf1, 0x98, 0x00, 0x06, 0x04, 0x0e, 0x24, - 0xb0, 0x81, 0x27, 0x00, 0x26, 0x00, 0x4a, 0x55, - 0x92, 0x00, 0x00, 0xe0, 0x49, 0x54, 0x68, 0x09, - 0x58, 0x08, 0x23, 0x03, 0x03, 0x9b, 0x40, 0x18, - 0x23, 0x01, 0x03, 0x9b, 0x42, 0x98, 0xd0, 0x05, - 0x20, 0xa0, 0xb0, 0x01, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0xe0, 0x49, 0x4c, - 0x68, 0x09, 0x58, 0x08, 0x21, 0x20, 0x43, 0x01, - 0x00, 0xe0, 0x4a, 0x49, 0x68, 0x12, 0x50, 0x11, - 0x21, 0x00, 0x48, 0x48, 0xf0, 0x05, 0xfc, 0x3c, - 0x48, 0x47, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x01, - 0xe0, 0x08, 0xe0, 0x82, 0x20, 0x02, 0xf0, 0x0c, - 0xf8, 0x75, 0x1c, 0x38, 0x37, 0x01, 0x4b, 0x43, - 0x42, 0x98, 0xd3, 0xf1, 0x4b, 0x41, 0x42, 0x9f, - 0xd3, 0x00, 0x26, 0xa1, 0x48, 0x40, 0x68, 0x01, - 0x4b, 0x40, 0x40, 0x19, 0x60, 0x01, 0x20, 0x00, - 0x00, 0xe1, 0x1b, 0x09, 0x00, 0x89, 0x4a, 0x3e, - 0x68, 0x12, 0x18, 0x89, 0x70, 0x88, 0x20, 0x00, - 0x43, 0xc0, 0x49, 0x3c, 0x67, 0x48, 0x22, 0x00, - 0xb4, 0x04, 0x1c, 0x20, 0x23, 0x00, 0x22, 0x00, - 0x49, 0x39, 0xf7, 0xff, 0xfc, 0x69, 0xb0, 0x01, - 0x27, 0x00, 0x25, 0x00, 0x2d, 0x04, 0xdb, 0x02, - 0xe0, 0x1e, 0x35, 0x01, 0xe7, 0xfa, 0x00, 0xa9, - 0x22, 0x0f, 0x1c, 0x10, 0x40, 0x88, 0x01, 0x29, - 0x9a, 0x00, 0x18, 0x89, 0x68, 0x49, 0x42, 0xa1, - 0xd1, 0x11, 0x21, 0x33, 0x06, 0x49, 0x6b, 0xc9, - 0x40, 0x01, 0xd0, 0x01, 0x37, 0x01, 0xe0, 0x00, - 0xe0, 0x02, 0x4b, 0x26, 0x42, 0x9f, 0xd3, 0xf4, - 0x4b, 0x24, 0x42, 0x9f, 0xd3, 0x02, 0x26, 0xa1, - 0xe0, 0x02, 0xe0, 0x3a, 0x27, 0x00, 0xe7, 0xe0, - 0x48, 0x26, 0x68, 0x01, 0x23, 0xff, 0x33, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x48, 0x21, 0x6d, 0x80, - 0x49, 0x20, 0x65, 0x88, 0x48, 0x1f, 0x6b, 0xc0, - 0x23, 0x01, 0x07, 0x9b, 0x40, 0x18, 0xd0, 0x00, - 0xe7, 0xf8, 0x20, 0x33, 0x06, 0x40, 0x6d, 0x40, - 0x21, 0x33, 0x06, 0x49, 0x66, 0x48, 0x20, 0x33, - 0x06, 0x40, 0x6d, 0x80, 0x21, 0x33, 0x06, 0x49, - 0x66, 0x88, 0x20, 0x03, 0x02, 0x00, 0x49, 0x15, - 0x67, 0x48, 0x48, 0x11, 0x68, 0x01, 0x23, 0x01, - 0x02, 0x5b, 0x43, 0x19, 0x60, 0x01, 0x20, 0x00, - 0x49, 0x13, 0x65, 0x88, 0x20, 0x00, 0x49, 0x12, - 0x65, 0xc8, 0x20, 0x00, 0x49, 0x10, 0x66, 0x08, - 0x21, 0x00, 0x20, 0xff, 0xf0, 0x05, 0xfb, 0xb8, - 0x1c, 0x30, 0xb0, 0x01, 0xe7, 0x66, 0xb0, 0x01, - 0xe7, 0x64, 0xe7, 0x63, 0x9e, 0x00, 0x00, 0xc0, - 0x2e, 0x08, 0x9b, 0x3c, 0x00, 0x00, 0x80, 0x0f, - 0xcc, 0x00, 0x05, 0x00, 0x00, 0x1e, 0x84, 0x80, - 0x66, 0x00, 0x00, 0x4c, 0xff, 0xff, 0xfd, 0xff, - 0x2e, 0x08, 0x9b, 0x30, 0x66, 0x00, 0x00, 0x80, - 0x00, 0x00, 0xff, 0xff, 0x66, 0x00, 0x00, 0xe0, - 0xcc, 0x00, 0x00, 0x00, 0xb5, 0xf1, 0x98, 0x00, - 0x06, 0x07, 0x0e, 0x3f, 0xb0, 0x81, 0x25, 0x00, - 0x26, 0x00, 0x4a, 0x2e, 0x92, 0x00, 0x00, 0xf8, - 0x49, 0x2d, 0x68, 0x09, 0x58, 0x08, 0x23, 0x03, - 0x03, 0x9b, 0x40, 0x18, 0x23, 0x01, 0x03, 0xdb, - 0x42, 0x98, 0xd0, 0x05, 0x20, 0xa0, 0xb0, 0x01, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x22, 0x00, 0xb4, 0x04, 0x1c, 0x38, 0x23, 0x00, - 0x22, 0x00, 0x49, 0x24, 0xf7, 0xff, 0xfb, 0xd0, - 0xb0, 0x01, 0x24, 0x00, 0x2c, 0x04, 0xdb, 0x02, - 0xe0, 0x1e, 0x34, 0x01, 0xe7, 0xfa, 0x00, 0xa1, - 0x22, 0x0f, 0x1c, 0x10, 0x40, 0x88, 0x01, 0x21, - 0x9a, 0x00, 0x18, 0x89, 0x68, 0x49, 0x42, 0xb9, - 0xd1, 0x11, 0x21, 0x33, 0x06, 0x49, 0x6b, 0xc9, - 0x40, 0x01, 0xd0, 0x01, 0x35, 0x01, 0xe0, 0x00, - 0xe0, 0x02, 0x4b, 0x17, 0x42, 0x9d, 0xd3, 0xf4, - 0x4b, 0x15, 0x42, 0x9d, 0xd9, 0x02, 0x26, 0xa1, - 0xe0, 0x02, 0xe0, 0x1d, 0x25, 0x00, 0xe7, 0xe0, - 0x20, 0x04, 0xf0, 0x02, 0xff, 0xb7, 0x20, 0x01, - 0x21, 0x33, 0x06, 0x49, 0x66, 0xc8, 0x21, 0x00, - 0x00, 0xf8, 0x4a, 0x0b, 0x68, 0x12, 0x50, 0x11, - 0x21, 0x00, 0x00, 0xf8, 0x4a, 0x08, 0x68, 0x12, - 0x18, 0x80, 0x60, 0x41, 0x21, 0x00, 0x00, 0xb8, - 0x4a, 0x08, 0x68, 0x12, 0x50, 0x11, 0x1c, 0x30, - 0xb0, 0x01, 0xe7, 0xb5, 0xb0, 0x01, 0xe7, 0xb3, - 0xe7, 0xb2, 0x00, 0x00, 0x9e, 0x00, 0x00, 0xc0, - 0x2e, 0x08, 0x9b, 0x3c, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x01, 0xd4, 0xc0, 0x2e, 0x08, 0x9b, 0x38, - 0xb5, 0xff, 0x99, 0x01, 0x06, 0x0f, 0x0e, 0x3f, - 0x9a, 0x02, 0x06, 0x15, 0x0e, 0x2d, 0x9b, 0x03, - 0x06, 0x1e, 0x0e, 0x36, 0x2d, 0x1f, 0xdb, 0x04, - 0x20, 0xaf, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2f, 0x20, 0xdb, 0x01, 0x20, 0xa2, - 0xe7, 0xf7, 0x2e, 0x80, 0xd0, 0x13, 0xf0, 0x12, - 0xfc, 0xc3, 0x1c, 0x04, 0x1c, 0x39, 0x22, 0x80, - 0x20, 0x01, 0xf0, 0x00, 0xfb, 0x6d, 0x2c, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0xef, 0x98, 0x00, - 0x21, 0x80, 0x68, 0x49, 0x60, 0x08, 0x48, 0x09, - 0x68, 0x00, 0x70, 0x05, 0xe0, 0x0b, 0xf0, 0x12, - 0xfc, 0xaf, 0x1c, 0x04, 0x1c, 0x39, 0x22, 0x80, - 0x20, 0x02, 0xf0, 0x00, 0xfb, 0x59, 0x2c, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0xdb, 0x20, 0x00, - 0xe7, 0xd3, 0xe7, 0xd2, 0x2e, 0x08, 0x9b, 0x88, - 0xb5, 0xff, 0x99, 0x01, 0x06, 0x0e, 0x0e, 0x36, - 0x9a, 0x02, 0x06, 0x17, 0x0e, 0x3f, 0x9b, 0x03, - 0x06, 0x1c, 0x0e, 0x24, 0xb0, 0x82, 0x20, 0x80, - 0x40, 0x38, 0x90, 0x00, 0x06, 0x7f, 0x0e, 0x7f, - 0x2e, 0x1f, 0xdb, 0x05, 0x20, 0xaf, 0xb0, 0x02, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2c, 0x20, 0xdb, 0x02, 0x20, 0xa2, 0xb0, 0x02, - 0xe7, 0xf6, 0x2f, 0x04, 0xd1, 0x00, 0x27, 0x00, - 0x00, 0xe0, 0x1b, 0x00, 0x00, 0x80, 0x49, 0x17, - 0x68, 0x09, 0x18, 0x40, 0x90, 0x01, 0x98, 0x00, - 0x28, 0x00, 0xd0, 0x0d, 0xf0, 0x12, 0xfc, 0x74, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x02, 0x92, - 0x20, 0x02, 0xf0, 0x00, 0xfb, 0x1d, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0x9f, 0xe0, 0x13, - 0xf0, 0x12, 0xfc, 0x66, 0x1c, 0x05, 0x1c, 0x21, - 0x22, 0x01, 0x02, 0x92, 0x20, 0x01, 0xf0, 0x00, - 0xfb, 0x0f, 0x2d, 0x80, 0xd0, 0x01, 0xf0, 0x12, - 0xfc, 0x91, 0x98, 0x02, 0x21, 0x80, 0x68, 0x89, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x00, 0x55, 0xc6, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xc4, 0xb0, 0x02, - 0xe7, 0xc2, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x30, - 0xb5, 0xff, 0xb0, 0x82, 0x99, 0x03, 0x04, 0x0d, - 0x0c, 0x2d, 0x9a, 0x04, 0x06, 0x10, 0x0e, 0x00, - 0x90, 0x00, 0x9b, 0x05, 0x06, 0x18, 0x0e, 0x00, - 0x90, 0x01, 0x98, 0x00, 0x28, 0x1f, 0xdb, 0x05, - 0x20, 0xaf, 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x01, 0x23, 0x80, - 0x40, 0x18, 0xd1, 0x2f, 0x98, 0x00, 0x49, 0x2c, - 0x68, 0x09, 0x73, 0x08, 0x27, 0x00, 0x2f, 0x20, - 0xdb, 0x04, 0xe0, 0x26, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x20, 0x01, 0x40, 0xb8, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x1c, 0x24, 0x00, - 0x20, 0x40, 0x40, 0x28, 0xd0, 0x04, 0x04, 0x20, - 0x0c, 0x00, 0x24, 0x01, 0x03, 0xa4, 0x43, 0x04, - 0x20, 0x80, 0x40, 0x28, 0xd0, 0x04, 0x04, 0x20, - 0x0c, 0x00, 0x24, 0x01, 0x03, 0xe4, 0x43, 0x04, - 0xf0, 0x12, 0xfc, 0x0e, 0x1c, 0x06, 0x1c, 0x22, - 0x1c, 0x39, 0x20, 0x01, 0xf0, 0x00, 0xfa, 0xb8, - 0x2e, 0x80, 0xd0, 0x01, 0xf0, 0x12, 0xfc, 0x3a, - 0xe7, 0xd8, 0xe0, 0x24, 0x27, 0x00, 0x2f, 0x20, - 0xdb, 0x04, 0xe0, 0x20, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x20, 0x01, 0x40, 0xb8, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x16, 0x24, 0x00, - 0x20, 0x40, 0x40, 0x28, 0xd0, 0x01, 0x4b, 0x0d, - 0x40, 0x1c, 0x20, 0x80, 0x40, 0x28, 0xd0, 0x01, - 0x04, 0x64, 0x0c, 0x64, 0xf0, 0x12, 0xfb, 0xe8, - 0x1c, 0x06, 0x1c, 0x22, 0x1c, 0x39, 0x20, 0x02, - 0xf0, 0x00, 0xfa, 0x92, 0x2e, 0x80, 0xd0, 0x01, - 0xf0, 0x12, 0xfc, 0x14, 0xe7, 0xde, 0x20, 0x00, - 0xb0, 0x02, 0xe7, 0x9f, 0xb0, 0x02, 0xe7, 0x9d, - 0x2e, 0x08, 0x9b, 0x7c, 0x00, 0x00, 0xbf, 0xff, - 0xb5, 0x80, 0x1c, 0x07, 0x48, 0x07, 0x68, 0x01, - 0x20, 0x00, 0xf0, 0x1b, 0xfa, 0xad, 0x60, 0x38, - 0x48, 0x04, 0x68, 0x00, 0x1d, 0x01, 0x20, 0x00, - 0xf0, 0x1b, 0xfa, 0xa6, 0x60, 0x78, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x9b, 0x7c, - 0xb5, 0xf7, 0x1c, 0x07, 0x99, 0x01, 0x06, 0x0e, - 0x0e, 0x36, 0x9a, 0x02, 0x06, 0x14, 0x0e, 0x24, - 0x2e, 0x1f, 0xdb, 0x04, 0x20, 0xaf, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x20, - 0xdb, 0x01, 0x20, 0xa2, 0xe7, 0xf7, 0x20, 0x80, - 0x40, 0x20, 0xd0, 0x0d, 0xf0, 0x12, 0xfb, 0xa8, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x02, 0xd2, - 0x20, 0x02, 0xf0, 0x00, 0xfa, 0x51, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0xd3, 0xe0, 0x16, - 0x48, 0x0c, 0x68, 0x00, 0x60, 0x07, 0x48, 0x0b, - 0x68, 0x00, 0x71, 0x46, 0x20, 0xff, 0x49, 0x09, - 0x68, 0x09, 0x71, 0x08, 0xf0, 0x12, 0xfb, 0x90, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x02, 0xd2, - 0x20, 0x01, 0xf0, 0x00, 0xfa, 0x39, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0xbb, 0x20, 0x00, - 0xe7, 0xcd, 0xe7, 0xcc, 0x2e, 0x08, 0x9b, 0x80, - 0xb5, 0xf7, 0x1c, 0x07, 0x99, 0x01, 0x06, 0x0e, - 0x0e, 0x36, 0x9a, 0x02, 0x06, 0x14, 0x0e, 0x24, - 0x2e, 0x1f, 0xdb, 0x04, 0x20, 0xaf, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x20, - 0xdb, 0x01, 0x20, 0xa2, 0xe7, 0xf7, 0x20, 0x80, - 0x40, 0x20, 0xd0, 0x0d, 0xf0, 0x12, 0xfb, 0x68, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x03, 0x12, - 0x20, 0x02, 0xf0, 0x00, 0xfa, 0x11, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0x93, 0xe0, 0x16, - 0x48, 0x0c, 0x68, 0x00, 0x60, 0x07, 0x48, 0x0b, - 0x68, 0x00, 0x71, 0x46, 0x20, 0xff, 0x49, 0x09, - 0x68, 0x09, 0x71, 0x08, 0xf0, 0x12, 0xfb, 0x50, - 0x1c, 0x05, 0x1c, 0x21, 0x22, 0x01, 0x03, 0x12, - 0x20, 0x01, 0xf0, 0x00, 0xf9, 0xf9, 0x2d, 0x80, - 0xd0, 0x01, 0xf0, 0x12, 0xfb, 0x7b, 0x20, 0x00, - 0xe7, 0xcd, 0xe7, 0xcc, 0x2e, 0x08, 0x9b, 0x84, - 0xb5, 0xff, 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x99, 0x02, 0x06, 0x0d, - 0x0e, 0x2d, 0x9a, 0x03, 0x06, 0x16, 0x0e, 0x36, - 0x9f, 0x04, 0x1c, 0x29, 0x98, 0x00, 0xf0, 0x00, - 0xf8, 0x91, 0x28, 0x00, 0xd0, 0x05, 0x20, 0xa2, - 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x79, 0x38, 0x79, 0x79, 0x18, 0x40, - 0x79, 0xb9, 0x18, 0x40, 0x06, 0x04, 0x0e, 0x24, - 0x79, 0xb8, 0x02, 0x00, 0x43, 0x04, 0x00, 0x68, - 0x19, 0x80, 0x01, 0x00, 0x49, 0x15, 0x68, 0x09, - 0x50, 0x0c, 0x9b, 0x04, 0x88, 0x99, 0x00, 0x68, - 0x19, 0x80, 0x01, 0x00, 0x4a, 0x11, 0x68, 0x12, - 0x18, 0x80, 0x60, 0x41, 0x78, 0x78, 0x78, 0x39, - 0x18, 0x40, 0x78, 0xb9, 0x18, 0x40, 0x06, 0x04, - 0x0e, 0x24, 0x78, 0xb8, 0x02, 0x00, 0x43, 0x04, - 0x00, 0x68, 0x19, 0x80, 0x01, 0x00, 0x49, 0x09, - 0x68, 0x09, 0x18, 0x40, 0x60, 0x84, 0x9b, 0x04, - 0x88, 0x19, 0x00, 0x68, 0x19, 0x80, 0x01, 0x00, - 0x4a, 0x04, 0x68, 0x12, 0x18, 0x80, 0x60, 0xc1, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xc5, 0xb0, 0x01, - 0xe7, 0xc3, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x34, - 0xb5, 0xff, 0x1c, 0x07, 0x06, 0x3d, 0x0e, 0x2d, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0x9a, 0x02, - 0x06, 0x16, 0x0e, 0x36, 0x1c, 0x21, 0x1c, 0x28, - 0xf0, 0x00, 0xf8, 0x40, 0x28, 0x00, 0xd0, 0x04, - 0x20, 0xa2, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x9a, 0x03, 0x1c, 0x31, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x02, 0xe7, 0xf5, 0xe7, 0xf4, - 0xb4, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x13, - 0x06, 0x21, 0x0e, 0x09, 0x06, 0x3a, 0x0e, 0x12, - 0x29, 0x10, 0xdb, 0x02, 0x20, 0xa2, 0xbc, 0xf0, - 0x47, 0x70, 0x88, 0xdd, 0x00, 0x48, 0x18, 0x80, - 0x01, 0x00, 0x4e, 0x0f, 0x68, 0x36, 0x50, 0x35, - 0x88, 0x98, 0x00, 0x4d, 0x18, 0xad, 0x01, 0x2d, - 0x4e, 0x0b, 0x68, 0x36, 0x19, 0xad, 0x60, 0x68, - 0x88, 0x58, 0x00, 0x4d, 0x18, 0xad, 0x01, 0x2d, - 0x4e, 0x07, 0x68, 0x36, 0x19, 0xad, 0x60, 0xa8, - 0x88, 0x18, 0x00, 0x4d, 0x18, 0xad, 0x01, 0x2d, - 0x4e, 0x03, 0x68, 0x36, 0x19, 0xad, 0x60, 0xe8, - 0x20, 0x00, 0xe7, 0xdc, 0xe7, 0xdb, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x34, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x39, 0x0e, 0x09, 0x06, 0x15, - 0x0e, 0x2d, 0xb0, 0x81, 0x29, 0x20, 0xdb, 0x03, - 0x20, 0xa2, 0xb0, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2d, 0x10, 0xdb, 0x02, 0x20, 0xa2, 0xb0, 0x01, - 0xe7, 0xf8, 0x00, 0xc8, 0x4b, 0x0a, 0x68, 0x1b, - 0x18, 0xc4, 0x68, 0x20, 0x90, 0x00, 0x98, 0x00, - 0x4b, 0x08, 0x40, 0x18, 0x90, 0x00, 0x00, 0x68, - 0x23, 0x1e, 0x40, 0x18, 0x9b, 0x00, 0x43, 0x18, - 0x90, 0x00, 0x98, 0x00, 0x60, 0x20, 0x20, 0x00, - 0xb0, 0x01, 0xe7, 0xe3, 0xb0, 0x01, 0xe7, 0xe1, - 0x2e, 0x08, 0x9b, 0x3c, 0xff, 0xff, 0xdf, 0xe1, - 0x20, 0xff, 0x49, 0x02, 0x68, 0x09, 0x70, 0x08, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x98, - 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0a, 0xb0, 0x83, - 0x20, 0x00, 0x43, 0xc0, 0x23, 0x19, 0x06, 0x9b, - 0x67, 0x58, 0x08, 0xb9, 0x00, 0x89, 0x1a, 0x78, - 0x90, 0x02, 0x98, 0x02, 0x18, 0x10, 0x07, 0x80, - 0x0f, 0x80, 0x90, 0x01, 0x98, 0x02, 0x18, 0x10, - 0x08, 0x80, 0x90, 0x00, 0x9b, 0x02, 0x20, 0x03, - 0x1a, 0xc0, 0x23, 0x19, 0x06, 0x9b, 0x67, 0xd8, - 0x24, 0x00, 0x98, 0x00, 0x42, 0x84, 0xd3, 0x02, - 0xe0, 0x06, 0x34, 0x01, 0xe7, 0xf9, 0xc9, 0x08, - 0x20, 0x19, 0x06, 0x80, 0x67, 0x03, 0xe7, 0xf8, - 0x98, 0x01, 0x28, 0x00, 0xd0, 0x0b, 0x9b, 0x01, - 0x00, 0xd8, 0x25, 0x00, 0x43, 0xed, 0x40, 0xc5, - 0x1c, 0x2b, 0x43, 0xdb, 0x68, 0x0d, 0x40, 0x2b, - 0x25, 0x19, 0x06, 0xad, 0x67, 0x2b, 0x20, 0x19, - 0x06, 0x80, 0x6f, 0x40, 0xb0, 0x03, 0xbc, 0xb0, - 0x47, 0x70, 0xb0, 0x03, 0xe7, 0xfb, 0x1c, 0x01, - 0x06, 0x08, 0x0e, 0x00, 0x22, 0x19, 0x06, 0x92, - 0x63, 0x90, 0x47, 0x70, 0xb4, 0xf0, 0x48, 0x4d, - 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x74, - 0x22, 0x00, 0x27, 0x00, 0x49, 0x4a, 0x20, 0x00, - 0x28, 0x20, 0xdb, 0x04, 0xe0, 0x16, 0x1c, 0x43, - 0x06, 0x18, 0x0e, 0x00, 0xe7, 0xf8, 0x00, 0x83, - 0x58, 0xcc, 0x23, 0x01, 0x03, 0x5b, 0x40, 0x23, - 0xd0, 0x0b, 0x24, 0x01, 0x40, 0x84, 0x1c, 0x23, - 0x43, 0x1f, 0x00, 0x83, 0x58, 0xcc, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x9c, 0x1c, 0x23, 0x00, 0x84, - 0x51, 0x0b, 0xe7, 0xe8, 0x20, 0x00, 0x28, 0x04, - 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x43, 0x06, 0x18, - 0x0e, 0x00, 0xe7, 0xf8, 0x01, 0x05, 0x4b, 0x39, - 0x18, 0xec, 0x22, 0x00, 0x2a, 0x04, 0xdb, 0x04, - 0xe0, 0x0e, 0x1c, 0x53, 0x06, 0x1a, 0x0e, 0x12, - 0xe7, 0xf8, 0x4b, 0x35, 0x60, 0x23, 0x4b, 0x35, - 0x60, 0x63, 0x23, 0x00, 0x60, 0xa3, 0x23, 0x00, - 0x60, 0xe3, 0x34, 0xff, 0x34, 0x01, 0xe7, 0xf0, - 0xe7, 0xe4, 0xb0, 0x82, 0x4b, 0x2b, 0x69, 0xdc, - 0x23, 0x0c, 0x40, 0x23, 0x08, 0x9c, 0xab, 0x01, - 0x70, 0x1c, 0x4b, 0x28, 0x69, 0xdc, 0x23, 0x30, - 0x40, 0x23, 0x09, 0x1c, 0xab, 0x00, 0x70, 0x1c, - 0xab, 0x01, 0x78, 0x1b, 0xac, 0x00, 0x78, 0x24, - 0x42, 0xa3, 0xd1, 0x09, 0x23, 0x33, 0x06, 0x5b, - 0x6b, 0xdb, 0x2b, 0x00, 0xd1, 0x04, 0x4b, 0x1f, - 0x6a, 0x9b, 0x07, 0xdb, 0x0f, 0xdb, 0xd0, 0x21, - 0x4b, 0x1c, 0x69, 0xdd, 0x23, 0x0c, 0x40, 0x2b, - 0x08, 0x9c, 0x00, 0xa5, 0x26, 0x01, 0x40, 0xae, - 0x1c, 0x33, 0x25, 0x33, 0x06, 0x6d, 0x64, 0x2b, - 0x25, 0x01, 0x40, 0xa5, 0x1c, 0x2b, 0x4d, 0x1a, - 0x63, 0xab, 0x4b, 0x14, 0x69, 0xdd, 0x23, 0x0c, - 0x40, 0x2b, 0x08, 0x9d, 0xab, 0x01, 0x70, 0x1d, - 0xe0, 0x00, 0xe0, 0x1d, 0x4b, 0x0f, 0x69, 0xdd, - 0x23, 0x30, 0x40, 0x2b, 0x09, 0x1d, 0xab, 0x00, - 0x70, 0x1d, 0xe7, 0xcd, 0xb0, 0x02, 0x20, 0x00, - 0x28, 0x20, 0xdb, 0x04, 0xe0, 0x10, 0x1c, 0x43, - 0x06, 0x18, 0x0e, 0x00, 0xe7, 0xf8, 0x24, 0x01, - 0x40, 0x84, 0x1c, 0x23, 0x40, 0x3b, 0xd0, 0x06, - 0x00, 0x83, 0x58, 0xcc, 0x23, 0x01, 0x03, 0x5b, - 0x43, 0x23, 0x00, 0x84, 0x51, 0x0b, 0xe7, 0xee, - 0xbc, 0xf0, 0x47, 0x70, 0x66, 0x00, 0x01, 0x00, - 0x64, 0x00, 0x00, 0x80, 0x9e, 0x00, 0x00, 0xc0, - 0x9e, 0x00, 0x00, 0x00, 0x2e, 0x0f, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x80, 0xb4, 0x80, 0x1c, 0x03, - 0x1c, 0x0a, 0x48, 0x0a, 0x68, 0x00, 0x68, 0x01, - 0x20, 0x19, 0x06, 0x80, 0x6a, 0x80, 0x0a, 0x40, - 0x00, 0x4f, 0x43, 0x38, 0x60, 0x18, 0x0f, 0xc8, - 0x07, 0xc0, 0x60, 0x10, 0x68, 0x10, 0x0f, 0xc0, - 0x60, 0x10, 0x20, 0x00, 0xbc, 0x80, 0x47, 0x70, - 0xe7, 0xfc, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xa4, - 0xb5, 0x80, 0x1c, 0x07, 0x48, 0x05, 0x68, 0x00, - 0x1d, 0xc1, 0x31, 0x01, 0x20, 0x00, 0xf0, 0x1b, - 0xf8, 0x37, 0x60, 0x38, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x7c, - 0xb4, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x13, - 0x06, 0x20, 0x0e, 0x00, 0x06, 0x39, 0x0e, 0x09, - 0x04, 0x1a, 0x0c, 0x12, 0x4d, 0x07, 0x68, 0x2d, - 0x70, 0xe8, 0x4d, 0x06, 0x68, 0x2d, 0x70, 0xa9, - 0x4d, 0x04, 0x68, 0x2d, 0x80, 0x2a, 0x25, 0x01, - 0x04, 0x2d, 0x26, 0x33, 0x06, 0x76, 0x60, 0x35, - 0xbc, 0xf0, 0x47, 0x70, 0x2e, 0x08, 0x9b, 0xa8, - 0x20, 0x0d, 0x06, 0xc0, 0x69, 0xc0, 0x47, 0x70, - 0xe7, 0xfd, 0x1c, 0x01, 0x31, 0x01, 0x23, 0x2d, - 0x01, 0x1b, 0x42, 0x99, 0xd9, 0x03, 0x20, 0x2d, - 0x01, 0x00, 0x47, 0x70, 0xe0, 0x01, 0x1c, 0x08, - 0xe7, 0xfb, 0xe7, 0xfa, 0xb5, 0xf3, 0xb0, 0x85, - 0x20, 0x00, 0x90, 0x03, 0x20, 0x00, 0x90, 0x02, - 0x9f, 0x05, 0x69, 0x3d, 0x69, 0x38, 0x28, 0x13, - 0xd1, 0x05, 0x20, 0x75, 0xb0, 0x05, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x99, 0x06, - 0x68, 0x88, 0x68, 0x09, 0x1a, 0x40, 0x1c, 0x41, - 0x91, 0x04, 0x69, 0x78, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x02, 0x99, 0x04, 0x08, 0x49, 0x91, 0x04, - 0x00, 0xa8, 0x49, 0xf8, 0x58, 0x08, 0x99, 0x04, - 0x43, 0x48, 0x61, 0xf8, 0x99, 0x06, 0x68, 0x88, - 0x68, 0x09, 0x1a, 0x40, 0x30, 0x01, 0x63, 0xb8, - 0x68, 0xf8, 0x90, 0x01, 0x48, 0xf2, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x06, 0x98, 0x01, 0x28, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x05, 0x98, 0x01, 0x28, 0x08, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, - 0xd0, 0x07, 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x06, - 0xf0, 0x02, 0xf9, 0xea, 0x20, 0x00, 0xb0, 0x05, - 0xe7, 0xc5, 0x49, 0xe6, 0x20, 0x91, 0xf0, 0x1a, - 0xff, 0xb7, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x0b, 0xfb, 0x64, 0xe7, 0xf5, 0x98, 0x01, - 0x00, 0x80, 0x49, 0xe1, 0x58, 0x08, 0x99, 0x05, - 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, 0x49, 0xdd, - 0x60, 0x08, 0x20, 0xff, 0xb0, 0x05, 0xe7, 0xae, - 0x48, 0xd9, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, - 0x2d, 0x0b, 0xdb, 0x26, 0x2d, 0x12, 0xdc, 0x24, - 0x2d, 0x0b, 0xdb, 0x0b, 0x2d, 0x12, 0xdc, 0x09, - 0x48, 0xd6, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, - 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x06, 0xf0, 0x02, - 0xf9, 0xbb, 0xe0, 0x16, 0x6b, 0x38, 0xf7, 0xff, - 0xff, 0x7c, 0x90, 0x00, 0x6a, 0xb9, 0x9a, 0x00, - 0x48, 0xcf, 0xf0, 0x0c, 0xfb, 0x4b, 0x1d, 0xf8, - 0x30, 0x21, 0x99, 0x06, 0xf0, 0x02, 0xf9, 0xac, - 0x6b, 0x38, 0xf7, 0xff, 0xff, 0x6e, 0x90, 0x00, - 0x6a, 0xb9, 0x9a, 0x00, 0x48, 0xc8, 0xf0, 0x0c, - 0xfb, 0x6b, 0x48, 0xc8, 0x68, 0x00, 0x99, 0x05, - 0x42, 0x88, 0xd1, 0x30, 0x48, 0xc0, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x2c, 0x48, 0xc1, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x0a, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x28, 0x01, - 0xd1, 0x03, 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0xc8, 0x48, 0xba, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x0d, 0x6a, 0xb8, 0x30, 0x01, 0x05, 0x00, - 0x6a, 0xf9, 0x31, 0x01, 0x02, 0x89, 0x43, 0x08, - 0x6b, 0x79, 0x31, 0x02, 0x43, 0x08, 0x21, 0x0d, - 0x06, 0xc9, 0x61, 0x88, 0xe0, 0x0b, 0x6a, 0xb8, - 0x30, 0x01, 0x05, 0x00, 0x6a, 0xf9, 0x31, 0x01, - 0x02, 0x89, 0x43, 0x08, 0x6b, 0x79, 0x31, 0x02, - 0x43, 0x08, 0x49, 0xaf, 0x60, 0x08, 0x2d, 0x0b, - 0xdb, 0x15, 0x2d, 0x12, 0xdc, 0x13, 0x48, 0xa9, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0f, 0x48, 0xa4, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x0b, 0x20, 0x00, - 0x62, 0xb8, 0x20, 0x00, 0x62, 0xf8, 0x48, 0xa7, - 0x63, 0x38, 0x48, 0xa7, 0x63, 0x78, 0x6b, 0x38, - 0xf7, 0xff, 0xff, 0x1b, 0x90, 0x00, 0x48, 0x9c, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x16, 0x20, 0x0d, - 0x06, 0xc0, 0x68, 0x80, 0x90, 0x03, 0x20, 0x00, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0xf0, 0x01, - 0xfb, 0x07, 0x6b, 0x38, 0xf7, 0xff, 0xff, 0x09, - 0x90, 0x00, 0x9a, 0x00, 0x99, 0x01, 0x1c, 0x38, - 0xf0, 0x01, 0xfa, 0x8c, 0x98, 0x03, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0x48, 0x93, 0x68, 0x00, - 0x99, 0x05, 0x42, 0x88, 0xd1, 0x0b, 0x48, 0x8c, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x07, 0x48, 0x8d, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x03, 0x98, 0x02, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, 0x48, 0x86, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, 0x48, 0x87, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x6f, 0xb0, 0x84, - 0x98, 0x05, 0xf0, 0x0c, 0xf9, 0xe1, 0x28, 0x00, - 0xd1, 0x0e, 0x2d, 0x0b, 0xdb, 0x01, 0x2d, 0x12, - 0xdd, 0x0a, 0x1d, 0xf8, 0x30, 0x21, 0x99, 0x0a, - 0xf0, 0x02, 0xf9, 0x12, 0x20, 0x92, 0x49, 0x7b, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x09, 0xe6, 0xea, - 0x49, 0x80, 0x20, 0x91, 0xf0, 0x1a, 0xfe, 0xdc, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0c, - 0xfa, 0x22, 0x20, 0x92, 0x49, 0x7b, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x7b, 0x68, 0x09, 0x60, 0x08, - 0x2d, 0x0b, 0xdb, 0x39, 0x2d, 0x12, 0xdc, 0x37, - 0xb0, 0x81, 0x24, 0x00, 0x20, 0x00, 0x90, 0x03, - 0x20, 0x01, 0x49, 0x75, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x6a, 0xb8, - 0x30, 0x01, 0x05, 0x00, 0x6a, 0xf9, 0x31, 0x01, - 0x02, 0x89, 0x43, 0x08, 0x6b, 0x79, 0x31, 0x02, - 0x43, 0x08, 0x90, 0x00, 0x20, 0x00, 0x62, 0xb8, - 0x20, 0x00, 0x62, 0xf8, 0x48, 0x67, 0x63, 0x38, - 0x48, 0x67, 0x63, 0x78, 0x6b, 0x38, 0xf7, 0xff, - 0xfe, 0x9c, 0x90, 0x02, 0x48, 0x66, 0x68, 0x00, - 0x23, 0x77, 0x01, 0x1b, 0x18, 0xc0, 0x9a, 0x02, - 0x1c, 0x39, 0xf0, 0x0b, 0xfe, 0x05, 0x98, 0x00, - 0x49, 0x61, 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0xc8, 0x48, 0x5e, 0x68, 0x00, - 0xf0, 0x0c, 0xf9, 0xf8, 0xb0, 0x01, 0xe1, 0x2b, - 0x24, 0x00, 0x26, 0x00, 0x2e, 0x00, 0xd1, 0x16, - 0x2c, 0x07, 0xd2, 0x14, 0x6a, 0xf8, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, 0x00, 0x83, - 0x18, 0x18, 0x00, 0xc0, 0xe0, 0x00, 0xe1, 0x3c, - 0x4a, 0x53, 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, - 0xd1, 0x00, 0x26, 0x01, 0xe7, 0xe6, 0x2e, 0x00, - 0xd1, 0x13, 0x2c, 0x18, 0xd2, 0x11, 0x6a, 0xf8, - 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, 0x34, 0x01, - 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x48, 0x68, 0x12, - 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x40, 0x42, 0x81, 0xd1, 0x00, 0x26, 0x01, - 0xe7, 0xe9, 0x3c, 0x01, 0x6b, 0x38, 0xf7, 0xff, - 0xfe, 0x50, 0x90, 0x01, 0x2c, 0x07, 0xd2, 0x05, - 0x48, 0x3f, 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0b, - 0xfc, 0xcb, 0xe0, 0x06, 0x2c, 0x18, 0xd2, 0x04, - 0x1f, 0xe0, 0x49, 0x3b, 0x68, 0x09, 0xf0, 0x0b, - 0xfd, 0x01, 0x48, 0x3a, 0x49, 0x38, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x66, 0xc8, - 0x48, 0x36, 0x49, 0x35, 0x68, 0x09, 0x23, 0x09, - 0x01, 0xdb, 0x18, 0xc9, 0x67, 0x08, 0x48, 0x33, - 0x49, 0x31, 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, - 0x18, 0xc9, 0x66, 0x88, 0x48, 0x2f, 0x49, 0x2e, - 0x68, 0x09, 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, - 0x66, 0x48, 0x20, 0x00, 0x49, 0x2a, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x64, 0x88, - 0x6b, 0x79, 0x48, 0x27, 0x68, 0x00, 0xf0, 0x0b, - 0xfd, 0x4b, 0x94, 0x02, 0x1d, 0xf8, 0x30, 0x21, - 0x99, 0x0a, 0xf0, 0x02, 0xf8, 0x4d, 0x24, 0x00, - 0x26, 0x00, 0x2e, 0x00, 0xd1, 0x14, 0x2c, 0x07, - 0xd2, 0x12, 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x20, 0x34, 0x01, 0x00, 0x83, 0x18, 0x18, - 0x00, 0xc0, 0x4a, 0x1b, 0x68, 0x12, 0x18, 0x80, - 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, - 0x42, 0x81, 0xda, 0x00, 0x26, 0x01, 0xe7, 0xe8, - 0x2e, 0x00, 0xd1, 0x2f, 0x2c, 0x18, 0xd2, 0x2d, - 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, - 0x34, 0x01, 0x23, 0x4c, 0x43, 0x58, 0x4a, 0x10, - 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, 0xda, 0x1c, - 0xe0, 0x1a, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xbb, 0x00, 0x2e, 0x08, 0xba, 0x28, - 0x2e, 0x08, 0x9b, 0xb8, 0x00, 0x00, 0x02, 0xcf, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x20, 0x00, 0x00, 0xff, 0xff, - 0x26, 0x01, 0xe7, 0xcd, 0x3c, 0x01, 0x6b, 0x38, - 0xf7, 0xff, 0xfd, 0xc3, 0x90, 0x01, 0x2c, 0x07, - 0xd2, 0x12, 0x48, 0x48, 0x68, 0x01, 0x1c, 0x20, - 0xf0, 0x0b, 0xfb, 0xcc, 0x00, 0xa0, 0x19, 0x00, - 0x00, 0xc0, 0x49, 0x44, 0x68, 0x09, 0x18, 0x40, - 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc0, 0x9a, 0x01, - 0x1c, 0x39, 0xf0, 0x0b, 0xfd, 0x21, 0xe0, 0x4a, - 0x2c, 0x18, 0xd2, 0x48, 0x1f, 0xe0, 0x49, 0x3d, - 0x68, 0x09, 0xf0, 0x0b, 0xfc, 0x0b, 0x20, 0x4c, - 0x43, 0x60, 0x49, 0x3a, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x0a, 0x9a, 0x01, - 0x1c, 0x39, 0xf0, 0x0b, 0xfd, 0x0d, 0x20, 0x4c, - 0x43, 0x60, 0x49, 0x34, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x82, 0x6f, 0xc0, - 0x28, 0x00, 0xd0, 0x17, 0x20, 0x4c, 0x43, 0x60, - 0x49, 0x2e, 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, 0x04, 0x00, - 0x0c, 0x00, 0xd0, 0x0b, 0x20, 0x4c, 0x43, 0x60, - 0x49, 0x28, 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, 0x0c, 0x00, - 0x04, 0x00, 0xd1, 0x0a, 0x20, 0x02, 0x21, 0x4c, - 0x43, 0x61, 0x4a, 0x22, 0x68, 0x12, 0x18, 0x89, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, - 0xe0, 0x09, 0x20, 0x03, 0x21, 0x4c, 0x43, 0x61, - 0x4a, 0x1c, 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, - 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, 0x48, 0x19, - 0x68, 0x00, 0xf0, 0x0c, 0xf8, 0xcf, 0x6b, 0x79, - 0x48, 0x16, 0x68, 0x00, 0xf0, 0x0b, 0xfc, 0x36, - 0x98, 0x02, 0x42, 0x84, 0xda, 0x01, 0x1c, 0x21, - 0xe0, 0x00, 0x99, 0x02, 0x91, 0x00, 0x99, 0x00, - 0x48, 0x10, 0x68, 0x00, 0xf0, 0x0b, 0xfd, 0x46, - 0x49, 0x0f, 0x20, 0x91, 0xf0, 0x1a, 0xfd, 0x58, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x0b, - 0x68, 0x00, 0x90, 0x03, 0x48, 0x0b, 0x68, 0x00, - 0x49, 0x08, 0x60, 0x08, 0x98, 0x03, 0x49, 0x09, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x06, 0x60, 0x08, - 0xb0, 0x04, 0x20, 0x92, 0x49, 0x06, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x05, 0xe5, 0x4b, 0xb0, 0x05, - 0xe5, 0x49, 0x00, 0x00, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xba, 0x2c, 0xb5, 0xff, 0x1c, 0x07, - 0x9d, 0x09, 0xb0, 0x89, 0x26, 0x00, 0x20, 0x00, - 0x90, 0x03, 0x99, 0x0a, 0x68, 0x4c, 0x2d, 0x13, - 0xd1, 0x05, 0x20, 0x75, 0xb0, 0x09, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x15, - 0x60, 0x04, 0x20, 0x00, 0x60, 0xe0, 0x20, 0x00, - 0x61, 0x20, 0x69, 0x60, 0x4b, 0xf9, 0x40, 0x18, - 0x61, 0x60, 0x02, 0x00, 0x69, 0x60, 0x4b, 0xf8, - 0x40, 0x18, 0x61, 0x60, 0x04, 0x80, 0x69, 0x60, - 0x4b, 0xf6, 0x40, 0x18, 0x61, 0x60, 0x05, 0x80, - 0x69, 0x60, 0x23, 0xc0, 0x43, 0xdb, 0x40, 0x18, - 0x61, 0x60, 0x06, 0x00, 0x69, 0x60, 0x4b, 0xf2, - 0x40, 0x18, 0x61, 0x60, 0x04, 0x40, 0x69, 0x60, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0x61, 0x60, - 0x06, 0x80, 0x69, 0x60, 0x09, 0x40, 0x01, 0x40, - 0x61, 0x60, 0x06, 0xc0, 0x20, 0x00, 0x61, 0xa0, - 0x20, 0x00, 0x61, 0xe0, 0x20, 0x00, 0x62, 0x20, - 0x20, 0x00, 0x62, 0x60, 0x20, 0x00, 0x63, 0xa0, - 0x20, 0x00, 0x63, 0xe0, 0x20, 0x00, 0x64, 0x60, - 0x20, 0x00, 0x64, 0x20, 0x20, 0x00, 0x60, 0x20, - 0x20, 0x00, 0x71, 0x20, 0x99, 0x0a, 0x68, 0x48, - 0x64, 0xe0, 0x99, 0x0a, 0x68, 0x08, 0x64, 0xa0, - 0x1d, 0xe0, 0x30, 0x21, 0x99, 0x13, 0xf0, 0x01, - 0xff, 0x07, 0x2d, 0x0b, 0xdb, 0x06, 0x2d, 0x12, - 0xdc, 0x04, 0x1d, 0xe0, 0x30, 0x49, 0x99, 0x13, - 0xf0, 0x01, 0xfe, 0xfe, 0x6b, 0x20, 0x6a, 0xa1, - 0x1a, 0x40, 0x30, 0x01, 0x63, 0xa0, 0x00, 0xa8, - 0x49, 0xd4, 0x58, 0x08, 0x69, 0x61, 0x09, 0x49, - 0x01, 0x49, 0x06, 0xc0, 0x0e, 0xc0, 0x43, 0x08, - 0x61, 0x60, 0x06, 0xc0, 0x0e, 0xc0, 0x6b, 0x20, - 0x6a, 0xa1, 0x1a, 0x40, 0x1c, 0x41, 0x91, 0x04, - 0x69, 0x60, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, - 0x99, 0x04, 0x08, 0x49, 0x91, 0x04, 0x00, 0xa8, - 0x49, 0xc9, 0x58, 0x08, 0x99, 0x04, 0x43, 0x48, - 0x61, 0xe0, 0x2d, 0x13, 0xd1, 0x04, 0x20, 0x00, - 0x90, 0x14, 0x20, 0x00, 0x61, 0xa0, 0xe0, 0x13, - 0x9b, 0x0c, 0x68, 0x58, 0x90, 0x01, 0x98, 0x01, - 0x08, 0x80, 0x61, 0xa0, 0x98, 0x01, 0x64, 0x60, - 0x9b, 0x0c, 0x68, 0x18, 0x64, 0x20, 0x20, 0x00, - 0x62, 0x60, 0x9a, 0x0b, 0x63, 0xe2, 0x69, 0x60, - 0x4b, 0xb6, 0x40, 0x18, 0x61, 0x60, 0x02, 0x00, - 0x69, 0x60, 0x4b, 0xb6, 0x40, 0x18, 0x61, 0x60, - 0x05, 0x80, 0x69, 0x60, 0x23, 0x0f, 0x02, 0x9b, - 0x43, 0x18, 0x61, 0x60, 0x04, 0x80, 0x69, 0x60, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0x61, 0x60, - 0x06, 0x80, 0x69, 0x60, 0x23, 0xc0, 0x43, 0x18, - 0x61, 0x60, 0x06, 0x00, 0x69, 0x60, 0x23, 0x01, - 0x03, 0x9b, 0x43, 0x18, 0x61, 0x60, 0x04, 0x40, - 0x98, 0x14, 0x60, 0xe0, 0x61, 0x25, 0x48, 0xab, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, 0x98, 0x14, - 0x28, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xe0, 0x05, 0x98, 0x14, 0x28, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x09, - 0xe7, 0x35, 0x49, 0xa1, 0x20, 0x91, 0xf0, 0x1a, - 0xfc, 0x5b, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x0b, 0xf8, 0x08, 0xe7, 0xf5, 0x48, 0x9d, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x53, 0x68, 0x38, - 0x01, 0x80, 0x0f, 0xc0, 0x68, 0xa1, 0x4b, 0x9a, - 0x40, 0x19, 0x07, 0xc0, 0x09, 0x80, 0x43, 0x08, - 0x60, 0xa0, 0x01, 0x80, 0x0f, 0xc0, 0x68, 0x38, - 0x01, 0xc0, 0x0f, 0xc0, 0x68, 0xa1, 0x4b, 0x95, - 0x40, 0x19, 0x07, 0xc0, 0x09, 0xc0, 0x43, 0x08, - 0x60, 0xa0, 0x01, 0xc0, 0x0f, 0xc0, 0x68, 0x38, - 0x02, 0x00, 0x0e, 0x00, 0x68, 0xa1, 0x4b, 0x85, - 0x40, 0x19, 0x06, 0x00, 0x0e, 0x00, 0x04, 0x00, - 0x43, 0x08, 0x60, 0xa0, 0x02, 0x00, 0x0e, 0x00, - 0x48, 0x86, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x2a, - 0x2f, 0x00, 0xd0, 0x28, 0x20, 0x0d, 0x06, 0xc0, - 0x6a, 0x00, 0x1c, 0x06, 0x68, 0x38, 0x4b, 0x85, - 0x43, 0x98, 0xd0, 0x06, 0x68, 0x38, 0x02, 0x00, - 0x0e, 0x01, 0x20, 0x01, 0x40, 0x88, 0x43, 0x06, - 0xe0, 0x05, 0x68, 0x38, 0x02, 0x00, 0x0e, 0x00, - 0x21, 0x01, 0x40, 0x81, 0x43, 0x8e, 0x68, 0x38, - 0x4b, 0x7b, 0x43, 0x98, 0xd0, 0x08, 0x68, 0x38, - 0x02, 0x00, 0x0e, 0x00, 0x1d, 0xc1, 0x31, 0x01, - 0x20, 0x01, 0x40, 0x88, 0x43, 0x06, 0xe0, 0x06, - 0x68, 0x38, 0x02, 0x00, 0x0e, 0x00, 0x30, 0x08, - 0x21, 0x01, 0x40, 0x81, 0x43, 0x8e, 0x2d, 0x0b, - 0xdb, 0x0a, 0x2d, 0x12, 0xdc, 0x08, 0x48, 0x6f, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x04, 0x20, 0x51, - 0x01, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x08, - 0x98, 0x14, 0x00, 0x80, 0x49, 0x6c, 0x58, 0x08, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x83, 0x90, 0x03, - 0x2d, 0x0b, 0xdb, 0x08, 0x2d, 0x12, 0xdc, 0x06, - 0x48, 0x68, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x84, 0x90, 0x03, 0xe0, 0x06, 0x9a, 0x0b, - 0x2a, 0x01, 0xd1, 0x03, 0x2d, 0x13, 0xd0, 0x01, - 0x20, 0x82, 0x90, 0x03, 0x98, 0x03, 0x28, 0x00, - 0xd0, 0x07, 0x20, 0x92, 0x49, 0x5a, 0x60, 0x08, - 0x20, 0x08, 0x60, 0xe0, 0x98, 0x03, 0xb0, 0x09, - 0xe6, 0xa1, 0x98, 0x15, 0x68, 0x01, 0x98, 0x14, - 0x00, 0x80, 0x4a, 0x59, 0x50, 0x11, 0x6a, 0xa0, - 0x28, 0x00, 0xda, 0x01, 0x20, 0x00, 0x62, 0xa0, - 0x6b, 0x20, 0x28, 0x00, 0xdc, 0x01, 0x20, 0x01, - 0x63, 0x20, 0x6a, 0xe0, 0x28, 0x00, 0xda, 0x01, - 0x20, 0x00, 0x62, 0xe0, 0x6b, 0x60, 0x4b, 0x52, - 0x42, 0x98, 0xdd, 0x01, 0x48, 0x50, 0x63, 0x60, - 0x6b, 0x20, 0xf7, 0xff, 0xfb, 0x9e, 0x90, 0x00, - 0x2d, 0x13, 0xd1, 0x05, 0x6a, 0xa1, 0x9a, 0x00, - 0x48, 0x4c, 0xf0, 0x0b, 0xff, 0x99, 0xe0, 0x15, - 0x2d, 0x0b, 0xdb, 0x01, 0x2d, 0x12, 0xdd, 0x03, - 0x48, 0x40, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x0d, - 0x2d, 0x0b, 0xdb, 0x06, 0x2d, 0x12, 0xdc, 0x04, - 0x48, 0x3e, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x00, - 0xe0, 0x04, 0x6a, 0xa1, 0x9a, 0x00, 0x48, 0x41, - 0xf0, 0x0b, 0xff, 0x82, 0x2d, 0x0b, 0xdb, 0x5f, - 0x2d, 0x12, 0xdc, 0x5e, 0x98, 0x15, 0x68, 0x00, - 0x49, 0x3a, 0x60, 0x08, 0x99, 0x13, 0xa8, 0x05, - 0xf0, 0x01, 0xfd, 0xae, 0xa9, 0x05, 0x98, 0x15, - 0x68, 0x00, 0xf0, 0x05, 0xfc, 0x5f, 0x1d, 0xe0, - 0x30, 0x21, 0xa9, 0x05, 0xf0, 0x01, 0xfd, 0xa4, - 0x20, 0x01, 0x49, 0x35, 0x65, 0x08, 0x20, 0x02, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, 0x21, 0x00, - 0x20, 0x02, 0xf0, 0x04, 0xfa, 0xdd, 0x2d, 0x0b, - 0xd0, 0x05, 0x2d, 0x0f, 0xd0, 0x03, 0x2d, 0x10, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x12, 0xf0, 0x04, 0xfa, 0xd1, 0x2d, 0x0c, - 0xd0, 0x01, 0x2d, 0x0f, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x04, 0xf0, 0x04, 0xfa, 0xc9, 0x2d, 0x0d, - 0xd0, 0x01, 0x2d, 0x10, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x08, 0xf0, 0x04, 0xfa, 0xc1, 0x2d, 0x0e, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x03, 0x21, 0x00, - 0x20, 0x01, 0xf0, 0x04, 0xfa, 0xb9, 0x48, 0x15, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, 0xb0, 0x82, - 0x49, 0x1c, 0x20, 0x91, 0xf0, 0x1a, 0xfb, 0x40, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0b, - 0xfe, 0x86, 0x20, 0x92, 0x49, 0x17, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x17, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x15, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0xe0, 0x25, - 0xe0, 0xae, 0xe0, 0xad, 0xff, 0x00, 0xff, 0xff, - 0xff, 0xff, 0xc3, 0xff, 0xff, 0xff, 0xfc, 0xff, - 0xff, 0xff, 0xbf, 0xff, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x03, 0xa8, 0xc8, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0x9d, 0xf0, - 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0xba, 0x28, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0xbb, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x20, 0x6a, 0xa0, 0x30, 0x01, - 0x05, 0x00, 0x6a, 0xe1, 0x31, 0x01, 0x02, 0x89, - 0x43, 0x08, 0x6b, 0x61, 0x31, 0x02, 0x43, 0x08, - 0x90, 0x00, 0x20, 0x00, 0x62, 0xa0, 0x20, 0x00, - 0x62, 0xe0, 0x48, 0x5f, 0x63, 0x20, 0x48, 0x5f, - 0x63, 0x60, 0x6b, 0x20, 0xf7, 0xff, 0xfa, 0xe1, - 0x90, 0x02, 0x48, 0x5d, 0x68, 0x00, 0x23, 0x77, - 0x01, 0x1b, 0x18, 0xc0, 0x9a, 0x02, 0x1c, 0x21, - 0xf0, 0x0b, 0xfa, 0x4a, 0x98, 0x00, 0x49, 0x58, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0xc8, 0x48, 0x55, 0x68, 0x00, 0x21, 0x00, - 0xf0, 0x0b, 0xfa, 0xc4, 0x48, 0x52, 0x68, 0x00, - 0xf0, 0x0b, 0xfe, 0x38, 0x49, 0x51, 0x20, 0x91, - 0xf0, 0x1a, 0xfa, 0xd2, 0xe0, 0x00, 0xe0, 0x11, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf6, 0x48, 0x4c, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x4c, 0x68, 0x00, - 0x49, 0x49, 0x60, 0x08, 0x98, 0x01, 0x49, 0x4a, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x47, 0x60, 0x08, - 0xb0, 0x02, 0xe0, 0x40, 0x48, 0x47, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x0c, 0x6a, 0xa0, 0x30, 0x01, - 0x05, 0x00, 0x6a, 0xe1, 0x31, 0x01, 0x02, 0x89, - 0x43, 0x08, 0x6b, 0x61, 0x31, 0x02, 0x43, 0x08, - 0x49, 0x41, 0x60, 0x08, 0xe0, 0x0c, 0x6a, 0xa0, - 0x30, 0x01, 0x05, 0x00, 0x6a, 0xe1, 0x31, 0x01, - 0x02, 0x89, 0x43, 0x08, 0x6b, 0x61, 0x31, 0x02, - 0x43, 0x08, 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x88, - 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, - 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, - 0xf0, 0x00, 0xfe, 0x82, 0x48, 0x33, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x07, 0x20, 0x00, 0x62, 0xa0, - 0x20, 0x00, 0x62, 0xe0, 0x48, 0x2a, 0x63, 0x20, - 0x48, 0x2a, 0x63, 0x60, 0x6b, 0x20, 0xf7, 0xff, - 0xfa, 0x78, 0x90, 0x00, 0x9a, 0x00, 0x99, 0x14, - 0x1c, 0x20, 0xf0, 0x00, 0xfd, 0xfb, 0x98, 0x02, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0xe0, 0x05, - 0x2d, 0x13, 0xd1, 0x03, 0x20, 0x1f, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x08, 0x2d, 0x0b, 0xdb, 0x01, - 0x2d, 0x12, 0xdd, 0x1a, 0x48, 0x23, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x16, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0xf0, 0x00, 0xfe, 0x50, - 0x6b, 0x20, 0xf7, 0xff, 0xfa, 0x52, 0x90, 0x00, - 0x9a, 0x00, 0x99, 0x14, 0x1c, 0x20, 0xf0, 0x00, - 0xfd, 0xd5, 0x98, 0x02, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0x88, 0x48, 0x14, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x06, 0x48, 0x14, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0x0d, 0x06, 0xc0, 0x62, 0x06, - 0x48, 0x0e, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x07, - 0x48, 0x0e, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x03, - 0x98, 0x14, 0x21, 0x00, 0xf0, 0x0b, 0xfd, 0x0a, - 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x09, 0xe5, 0x10, 0xb0, 0x09, 0xe5, 0x0e, - 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0x3f, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x24, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0x9b, 0xb8, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0xb5, 0xf7, 0xb0, 0x83, - 0x9f, 0x03, 0x69, 0x38, 0x90, 0x00, 0x98, 0x00, - 0x28, 0x13, 0xd1, 0x05, 0x20, 0x75, 0xb0, 0x03, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x6c, 0x78, 0x99, 0x04, 0x60, 0x48, 0x6c, 0x38, - 0x99, 0x04, 0x60, 0x08, 0x6c, 0xf8, 0x9a, 0x05, - 0x60, 0x50, 0x6c, 0xb8, 0x9a, 0x05, 0x60, 0x10, - 0x68, 0xfd, 0x48, 0xf9, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x03, - 0xe7, 0xda, 0x49, 0xf0, 0x20, 0x91, 0xf0, 0x1a, - 0xf9, 0xf3, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x0a, 0xfd, 0xa0, 0xe7, 0xf5, 0x00, 0xa8, - 0x49, 0xeb, 0x58, 0x08, 0x99, 0x03, 0x42, 0x88, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0xe7, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x03, 0xe7, 0xc4, 0x21, 0x00, - 0x00, 0xa8, 0x4a, 0xe5, 0x50, 0x11, 0x48, 0xe2, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x69, 0x38, - 0x28, 0x0b, 0xdb, 0x16, 0x69, 0x38, 0x28, 0x12, - 0xdc, 0x13, 0x48, 0xe0, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x06, 0x69, 0x38, 0x28, 0x0b, 0xdb, 0x03, - 0x69, 0x38, 0x28, 0x12, 0xdc, 0x00, 0xe0, 0x08, - 0x6b, 0x38, 0xf7, 0xff, 0xf9, 0xb6, 0x90, 0x01, - 0x6a, 0xb9, 0x9a, 0x01, 0x48, 0xd8, 0xf0, 0x0b, - 0xfd, 0x85, 0x69, 0x38, 0x28, 0x0b, 0xdb, 0x2e, - 0x69, 0x38, 0x28, 0x12, 0xdc, 0x2b, 0x48, 0xd0, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x27, 0x20, 0x00, - 0x49, 0xd2, 0x65, 0x08, 0x20, 0x01, 0x03, 0x00, - 0x49, 0xd0, 0x65, 0x48, 0x20, 0x00, 0x49, 0xcf, - 0x65, 0x88, 0x20, 0x00, 0x49, 0xcd, 0x65, 0xc8, - 0x20, 0x00, 0x49, 0xcc, 0x66, 0x08, 0x20, 0x00, - 0x49, 0xcb, 0x60, 0x08, 0x20, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x21, 0x00, 0x20, 0x02, - 0xf0, 0x04, 0xf9, 0x0a, 0x48, 0xc3, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x04, 0x48, 0xc5, 0x21, 0x0d, - 0x06, 0xc9, 0x61, 0x88, 0xe0, 0x02, 0x48, 0xc3, - 0x49, 0xc3, 0x60, 0x08, 0xe0, 0x06, 0x69, 0x38, - 0x28, 0x13, 0xd1, 0x03, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x08, 0x48, 0xb6, 0x68, 0x00, - 0x28, 0x00, 0xd1, 0x2c, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0xf0, 0x00, 0xfd, 0x64, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0xb7, - 0x18, 0xc9, 0x60, 0x08, 0x20, 0x00, 0x43, 0xc0, - 0x00, 0xe9, 0x4b, 0xb4, 0x18, 0xc9, 0x60, 0x48, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0xb1, - 0x18, 0xc9, 0x64, 0x08, 0x20, 0x00, 0x43, 0xc0, - 0x00, 0xe9, 0x4b, 0xae, 0x18, 0xc9, 0x64, 0x48, - 0x20, 0x01, 0x40, 0xa8, 0x43, 0xc0, 0x99, 0x02, - 0x40, 0x08, 0x90, 0x02, 0x98, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0xe0, 0x9c, 0x69, 0x38, - 0x28, 0x0b, 0xdb, 0x74, 0x69, 0x38, 0x28, 0x12, - 0xdc, 0x72, 0x48, 0x9b, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x6f, 0x20, 0x00, 0x49, 0x9d, 0x65, 0x08, - 0x20, 0x01, 0x03, 0x00, 0x49, 0x9b, 0x65, 0x48, - 0x20, 0x00, 0x49, 0x9a, 0x65, 0x88, 0x20, 0x00, - 0x49, 0x98, 0x65, 0xc8, 0x20, 0x00, 0x49, 0x97, - 0x66, 0x08, 0x20, 0x00, 0x49, 0x96, 0x60, 0x08, - 0x20, 0x02, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0xc8, - 0x21, 0x00, 0x20, 0x02, 0xf0, 0x04, 0xf8, 0xa0, - 0x49, 0x95, 0x20, 0x91, 0xf0, 0x1a, 0xf9, 0x2c, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0b, - 0xfc, 0x72, 0x20, 0x92, 0x49, 0x90, 0x60, 0x08, - 0x48, 0x90, 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc0, 0x69, 0x80, 0x08, 0x40, 0x00, 0x40, - 0x49, 0x8c, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc9, 0x61, 0x88, 0x20, 0x01, 0x49, 0x89, - 0x68, 0x09, 0x60, 0x08, 0x20, 0x01, 0x49, 0x87, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0x88, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x83, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x61, 0x08, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x7f, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x61, 0x48, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x7b, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x60, 0xc8, 0x20, 0x00, 0x43, 0xc0, 0x49, 0x77, - 0x68, 0x09, 0x23, 0x0f, 0x01, 0xdb, 0x18, 0xc9, - 0x60, 0x88, 0x6b, 0x38, 0xf7, 0xff, 0xf8, 0xd9, - 0x90, 0x01, 0x48, 0x72, 0x68, 0x00, 0x23, 0x77, - 0x01, 0x1b, 0x18, 0xc0, 0x9a, 0x01, 0x1c, 0x39, - 0xf0, 0x0b, 0xf8, 0x42, 0xe0, 0x02, 0xe0, 0x23, - 0xe0, 0x22, 0xe0, 0x21, 0x48, 0x67, 0x49, 0x6b, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0xc8, 0x48, 0x68, 0x68, 0x00, 0x21, 0x00, - 0xf0, 0x0b, 0xf8, 0xb8, 0x48, 0x65, 0x68, 0x00, - 0xf0, 0x0b, 0xfc, 0x2c, 0x49, 0x62, 0x20, 0x91, - 0xf0, 0x1a, 0xf8, 0xc6, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x60, 0x68, 0x04, 0x48, 0x60, - 0x68, 0x00, 0x49, 0x5e, 0x60, 0x08, 0x48, 0x5e, - 0x60, 0x04, 0x20, 0x92, 0x49, 0x5a, 0x60, 0x08, - 0x48, 0x52, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, - 0x48, 0x4d, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x6f, - 0x1c, 0x28, 0xf0, 0x0b, 0xfb, 0x9d, 0x28, 0x01, - 0xd1, 0x6a, 0x98, 0x00, 0x28, 0x0b, 0xdb, 0x02, - 0x98, 0x00, 0x28, 0x12, 0xdd, 0x65, 0xb0, 0x84, - 0x49, 0x4f, 0x20, 0x91, 0xf0, 0x1a, 0xf8, 0xa0, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0b, - 0xfb, 0xe6, 0x48, 0x4c, 0x68, 0x00, 0x68, 0x40, - 0x28, 0x00, 0xd0, 0x06, 0x48, 0x49, 0x68, 0x00, - 0x68, 0x40, 0x38, 0x01, 0x49, 0x47, 0x68, 0x09, - 0x60, 0x48, 0x20, 0x92, 0x49, 0x44, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x44, 0x68, 0x09, 0x60, 0x08, - 0x24, 0x00, 0x20, 0x00, 0x90, 0x02, 0x98, 0x02, - 0x28, 0x00, 0xd1, 0x15, 0x2c, 0x07, 0xd2, 0x13, - 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x20, - 0x34, 0x01, 0x00, 0x83, 0x18, 0x18, 0x00, 0xc0, - 0x4a, 0x3a, 0x68, 0x12, 0x18, 0x80, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0x81, - 0xd1, 0x01, 0x20, 0x01, 0x90, 0x02, 0xe7, 0xe6, - 0x98, 0x02, 0x28, 0x00, 0xd1, 0x14, 0x2c, 0x18, - 0xd2, 0x12, 0x6a, 0xf8, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x20, 0x34, 0x01, 0x23, 0x4c, 0x43, 0x58, - 0x4a, 0x2e, 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, - 0xd1, 0x01, 0x20, 0x01, 0x90, 0x02, 0xe7, 0xe7, - 0x3c, 0x01, 0x6b, 0x38, 0xf7, 0xff, 0xf8, 0x41, - 0x90, 0x01, 0x2c, 0x07, 0xd2, 0x09, 0x48, 0x25, - 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0a, 0xfe, 0xbc, - 0x48, 0x22, 0x68, 0x00, 0xf0, 0x0b, 0xfb, 0xa6, - 0xe0, 0x09, 0x2c, 0x18, 0xd2, 0x07, 0xe0, 0x01, - 0xe0, 0x95, 0xe0, 0x94, 0x1f, 0xe0, 0x49, 0x1d, - 0x68, 0x09, 0xf0, 0x0a, 0xfe, 0xeb, 0x48, 0x1b, - 0x68, 0x00, 0x4b, 0x1c, 0x18, 0xc0, 0xf0, 0x0b, - 0xf8, 0x0b, 0x20, 0x00, 0x49, 0x17, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x64, 0x88, - 0x48, 0x14, 0x68, 0x00, 0x68, 0x40, 0x28, 0x07, - 0xd3, 0x2c, 0x48, 0x12, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x23, 0xfe, - 0x43, 0x18, 0x49, 0x0e, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0xe0, 0x1c, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xbb, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xba, 0x28, 0x3f, 0xff, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0xb8, 0x68, 0x00, 0x04, 0x00, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0x00, 0x00, 0x04, 0xcc, - 0x61, 0x88, 0xe0, 0x2d, 0x26, 0x01, 0x21, 0x00, - 0x91, 0x00, 0x48, 0x2b, 0x68, 0x00, 0x68, 0x40, - 0x99, 0x00, 0x42, 0x88, 0xd8, 0x04, 0xe0, 0x06, - 0x99, 0x00, 0x31, 0x01, 0x91, 0x00, 0xe7, 0xf4, - 0x00, 0x70, 0x1c, 0x46, 0xe7, 0xf8, 0x08, 0x76, - 0x00, 0x76, 0x48, 0x23, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0x49, 0x1f, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x48, 0x1c, - 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, - 0x69, 0x80, 0x43, 0x30, 0x49, 0x18, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, - 0x1c, 0x21, 0x48, 0x15, 0x68, 0x00, 0xf0, 0x0a, - 0xff, 0xb1, 0x6b, 0x79, 0x48, 0x12, 0x68, 0x00, - 0xf0, 0x0a, 0xfe, 0xe6, 0x1c, 0x28, 0x21, 0x00, - 0xf0, 0x0b, 0xfa, 0x88, 0x49, 0x0f, 0x20, 0x91, - 0xf0, 0x19, 0xff, 0xba, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x0b, 0x68, 0x00, 0x90, 0x03, - 0x48, 0x0b, 0x68, 0x00, 0x49, 0x08, 0x60, 0x08, - 0x98, 0x03, 0x49, 0x09, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x06, 0x60, 0x08, 0xb0, 0x04, 0x20, 0x92, - 0x49, 0x06, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, - 0xe5, 0x86, 0xb0, 0x03, 0xe5, 0x84, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x24, 0x2e, 0x08, 0xba, 0x2c, - 0xb5, 0xf3, 0xb0, 0x85, 0x20, 0x00, 0x90, 0x01, - 0x9d, 0x05, 0x9f, 0x06, 0x69, 0x28, 0x90, 0x04, - 0x69, 0x3c, 0x98, 0x04, 0x28, 0x13, 0xd0, 0x01, - 0x2c, 0x13, 0xd1, 0x05, 0x20, 0xff, 0xb0, 0x05, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0xee, 0x68, 0xf9, 0x91, 0x03, 0x48, 0xdf, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2e, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x04, 0x2e, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x20, - 0x48, 0xd6, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, - 0x99, 0x03, 0x29, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x05, 0x99, 0x03, - 0x29, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0x28, 0x00, 0xd0, 0x06, 0x99, 0x03, - 0x60, 0xe9, 0x60, 0xfe, 0x20, 0x00, 0xb0, 0x05, - 0xe7, 0xce, 0xe1, 0x92, 0x1c, 0x3d, 0x9f, 0x05, - 0x9e, 0x03, 0x68, 0xf9, 0x91, 0x03, 0x9c, 0x04, - 0xe0, 0xaa, 0x48, 0xc6, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x06, 0x99, 0x03, 0x29, 0x19, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x05, - 0x99, 0x03, 0x29, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd1, 0x73, - 0x49, 0xbd, 0x20, 0x91, 0xf0, 0x19, 0xff, 0x38, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0a, - 0xfa, 0xe5, 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0xb9, - 0x58, 0x08, 0x42, 0xa8, 0xd1, 0x05, 0x99, 0x03, - 0x00, 0x88, 0x49, 0xb6, 0x58, 0x08, 0x42, 0xb8, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0xb2, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x05, 0xe7, 0x98, 0x48, 0xb2, - 0x68, 0x00, 0x42, 0xa8, 0xd0, 0x03, 0x48, 0xb0, - 0x68, 0x00, 0x42, 0xb8, 0xd1, 0x0a, 0x20, 0x0d, - 0x06, 0xc0, 0x68, 0xc0, 0x90, 0x01, 0x98, 0x01, - 0x28, 0x01, 0xd1, 0x03, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x99, 0x03, 0x60, 0xe9, - 0x60, 0xfe, 0x00, 0xb0, 0x49, 0xa5, 0x50, 0x0f, - 0x99, 0x03, 0x00, 0x88, 0x49, 0xa3, 0x50, 0x0d, - 0x48, 0xa0, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x55, - 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, - 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, - 0x20, 0x01, 0x40, 0xb0, 0x99, 0x02, 0x40, 0x08, - 0xd1, 0x12, 0x99, 0x03, 0x20, 0x01, 0x40, 0x88, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x0b, 0x99, 0x03, - 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, 0x99, 0x02, - 0x40, 0x08, 0x90, 0x02, 0x20, 0x01, 0x40, 0xb0, - 0x99, 0x02, 0x43, 0x08, 0x90, 0x02, 0xe0, 0x11, - 0x99, 0x03, 0x20, 0x01, 0x40, 0x88, 0x99, 0x02, - 0x40, 0x08, 0xd1, 0x0b, 0x20, 0x01, 0x40, 0xb0, - 0x43, 0xc0, 0x99, 0x02, 0x40, 0x08, 0x90, 0x02, - 0x99, 0x03, 0x20, 0x01, 0x40, 0x88, 0x99, 0x02, - 0x43, 0x08, 0x90, 0x02, 0x6b, 0x28, 0xf7, 0xfe, - 0xfe, 0xbc, 0x90, 0x00, 0x9a, 0x00, 0xe0, 0x00, - 0xe0, 0x22, 0x99, 0x03, 0x1c, 0x28, 0xf0, 0x00, - 0xfa, 0x3d, 0x6b, 0x38, 0xf7, 0xfe, 0xfe, 0xb1, - 0x90, 0x00, 0x9a, 0x00, 0x1c, 0x31, 0x1c, 0x38, - 0xf0, 0x00, 0xfa, 0x34, 0x98, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0x48, 0x7c, 0x68, 0x00, - 0x42, 0xa8, 0xd0, 0x03, 0x48, 0x7a, 0x68, 0x00, - 0x42, 0xb8, 0xd1, 0x03, 0x98, 0x01, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x20, 0x92, 0x49, 0x74, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x05, 0xe7, 0x1b, - 0x49, 0x71, 0x20, 0x91, 0xf0, 0x19, 0xfe, 0xa0, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0a, - 0xfa, 0x4d, 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0x6d, - 0x58, 0x08, 0x42, 0xa8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x69, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x05, - 0xe7, 0x06, 0x2c, 0x0b, 0xdb, 0x12, 0x2c, 0x12, - 0xdc, 0x10, 0x48, 0x67, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x09, 0x48, 0x65, 0x68, 0x00, 0x42, 0xa8, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0x60, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x05, 0xe6, 0xf4, 0x48, 0x60, - 0x60, 0x07, 0xe0, 0x08, 0x6b, 0xf8, 0x28, 0x01, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0x5a, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x05, 0xe6, 0xe8, 0x48, 0x5a, - 0x68, 0x00, 0x42, 0xa8, 0xd1, 0x02, 0x20, 0x00, - 0x49, 0x57, 0x60, 0x08, 0x00, 0xb0, 0x49, 0x55, - 0x50, 0x0f, 0x99, 0x03, 0x60, 0xe9, 0x60, 0xfe, - 0x48, 0x50, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x73, - 0x6b, 0x28, 0xf7, 0xfe, 0xfe, 0x4e, 0x90, 0x00, - 0x6a, 0xa9, 0x9a, 0x00, 0x48, 0x4f, 0xf0, 0x0b, - 0xfa, 0x1d, 0x6b, 0x38, 0xf7, 0xfe, 0xfe, 0x45, - 0x90, 0x00, 0x6a, 0xb9, 0x9a, 0x00, 0x48, 0x4b, - 0xf0, 0x0b, 0xfa, 0x42, 0x48, 0x48, 0x68, 0x00, - 0x42, 0xa8, 0xd1, 0x0f, 0x20, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x2c, 0x0b, 0xdb, 0x01, - 0x2c, 0x12, 0xdd, 0x07, 0x21, 0x00, 0x20, 0x02, - 0xf0, 0x03, 0xfd, 0xae, 0x48, 0x42, 0x21, 0x0d, - 0x06, 0xc9, 0x61, 0x88, 0x2c, 0x0b, 0xdb, 0x42, - 0x2c, 0x12, 0xdc, 0x40, 0x98, 0x04, 0x42, 0xa0, - 0xd0, 0x2c, 0x20, 0x02, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0xc8, 0x21, 0x00, 0x20, 0x02, 0xf0, 0x03, - 0xfd, 0x9b, 0x2c, 0x0f, 0xd0, 0x05, 0x2c, 0x10, - 0xd0, 0x03, 0x2c, 0x11, 0xd0, 0x01, 0x2c, 0x0b, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x12, 0xf0, 0x03, - 0xfd, 0x8f, 0x2c, 0x0c, 0xd0, 0x01, 0x2c, 0x0f, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x04, 0xf0, 0x03, - 0xfd, 0x87, 0x2c, 0x0d, 0xd0, 0x01, 0x2c, 0x10, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x08, 0xf0, 0x03, - 0xfd, 0x7f, 0x2c, 0x0e, 0xd0, 0x01, 0x2c, 0x11, - 0xd1, 0x03, 0x21, 0x00, 0x20, 0x01, 0xf0, 0x03, - 0xfd, 0x77, 0xe0, 0x03, 0x20, 0x00, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0xc8, 0x6a, 0xb8, 0x30, 0x01, - 0x05, 0x00, 0x6a, 0xf9, 0x31, 0x01, 0x02, 0x89, - 0x43, 0x08, 0x6b, 0x79, 0x31, 0x02, 0x43, 0x08, - 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x88, 0x20, 0x0d, - 0x06, 0xc0, 0x68, 0x80, 0x90, 0x02, 0x20, 0x00, - 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, 0xe0, 0x00, - 0xe0, 0x1f, 0x20, 0x01, 0x40, 0xb0, 0x43, 0xc0, - 0x99, 0x02, 0x40, 0x08, 0x90, 0x02, 0xf0, 0x00, - 0xf9, 0xcf, 0x6b, 0x38, 0xf7, 0xfe, 0xfd, 0xd1, - 0x90, 0x00, 0x9a, 0x00, 0x1c, 0x31, 0x1c, 0x38, - 0xf0, 0x00, 0xf9, 0x54, 0x98, 0x02, 0x21, 0x0d, - 0x06, 0xc9, 0x60, 0x88, 0x2c, 0x0b, 0xdb, 0x08, - 0x2c, 0x12, 0xdc, 0x06, 0x98, 0x04, 0x42, 0xa0, - 0xd1, 0x03, 0x20, 0x01, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0xc8, 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x05, 0xe6, 0x3c, 0xb0, 0x05, - 0xe6, 0x3a, 0xe6, 0x39, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x2e, 0x08, 0xba, 0x28, 0x2e, 0x08, 0xbb, 0x00, - 0x3f, 0xff, 0xff, 0xff, 0xb5, 0xf0, 0x1c, 0x07, - 0x00, 0xb8, 0x49, 0x09, 0x58, 0x0c, 0x1c, 0x7d, - 0x60, 0xe5, 0x00, 0xa8, 0x49, 0x06, 0x50, 0x0c, - 0x6b, 0x20, 0xf7, 0xfe, 0xfd, 0x9a, 0x1c, 0x06, - 0x1c, 0x32, 0x1c, 0x29, 0x1c, 0x20, 0xf0, 0x00, - 0xf9, 0x1d, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xb9, 0xc4, 0xb5, 0xf0, 0x1c, 0x07, - 0x00, 0xb8, 0x49, 0x09, 0x58, 0x0c, 0x1e, 0x7d, - 0x60, 0xe5, 0x00, 0xa8, 0x49, 0x06, 0x50, 0x0c, - 0x6b, 0x20, 0xf7, 0xfe, 0xfd, 0x82, 0x1c, 0x06, - 0x1c, 0x32, 0x1c, 0x29, 0x1c, 0x20, 0xf0, 0x00, - 0xf9, 0x05, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xb9, 0xc4, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x86, 0x98, 0x06, 0x90, 0x05, 0x98, 0x05, - 0x68, 0xc5, 0x48, 0x77, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0xff, 0xb0, 0x06, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x05, 0x69, 0x00, 0x28, 0x13, 0xd1, 0x02, - 0x20, 0xff, 0xb0, 0x06, 0xe7, 0xf4, 0x49, 0x69, - 0x20, 0x91, 0xf0, 0x19, 0xfd, 0x5d, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x0a, 0xf9, 0x0a, - 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x64, 0x58, 0x08, - 0x99, 0x05, 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x60, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x06, - 0xe7, 0xde, 0x42, 0xbd, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x5c, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x06, - 0xe7, 0xd6, 0x20, 0x00, 0x00, 0xa9, 0x4a, 0x5a, - 0x50, 0x50, 0x98, 0x05, 0x60, 0xc7, 0x48, 0x59, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x0d, 0x48, 0x54, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x09, 0x99, 0x05, - 0x00, 0xb8, 0x4a, 0x53, 0x50, 0x11, 0x20, 0x92, - 0x49, 0x50, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x06, - 0xe7, 0xbe, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, - 0x1c, 0x04, 0x20, 0x00, 0x21, 0x0d, 0x06, 0xc9, - 0x60, 0x88, 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, - 0x4b, 0x4b, 0x18, 0xc9, 0x60, 0x08, 0x20, 0x00, - 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0x48, 0x18, 0xc9, - 0x60, 0x48, 0x20, 0x00, 0x43, 0xc0, 0x00, 0xe9, - 0x4b, 0x45, 0x18, 0xc9, 0x64, 0x08, 0x20, 0x00, - 0x43, 0xc0, 0x00, 0xe9, 0x4b, 0x42, 0x18, 0xc9, - 0x64, 0x48, 0x20, 0x01, 0x90, 0x01, 0x20, 0x01, - 0x40, 0xa8, 0x40, 0x20, 0xd1, 0x01, 0x20, 0x00, - 0x90, 0x01, 0x20, 0x01, 0x40, 0xa8, 0x43, 0xc0, - 0x40, 0x04, 0x1c, 0x3e, 0x42, 0xbd, 0xd9, 0x23, - 0x00, 0xb0, 0x49, 0x37, 0x58, 0x08, 0x28, 0x00, - 0xd0, 0x01, 0x36, 0x01, 0xe7, 0xf8, 0x1e, 0x70, - 0x90, 0x04, 0x98, 0x04, 0x42, 0xb8, 0xda, 0x04, - 0xe0, 0x07, 0x98, 0x04, 0x38, 0x01, 0x90, 0x04, - 0xe7, 0xf7, 0x98, 0x04, 0xf7, 0xff, 0xff, 0x32, - 0xe7, 0xf7, 0x20, 0xff, 0x40, 0xb8, 0x90, 0x03, - 0x20, 0xff, 0x40, 0xb0, 0x43, 0xc0, 0x99, 0x03, - 0x40, 0x08, 0x90, 0x03, 0x98, 0x03, 0x00, 0x40, - 0x90, 0x03, 0x00, 0x60, 0x90, 0x00, 0xe0, 0x1f, - 0x00, 0xb0, 0x49, 0x25, 0x58, 0x08, 0x28, 0x00, - 0xd0, 0x01, 0x3e, 0x01, 0xe7, 0xf8, 0x1c, 0x70, - 0x90, 0x04, 0x98, 0x04, 0x42, 0xb8, 0xd9, 0x04, - 0xe0, 0x07, 0x98, 0x04, 0x30, 0x01, 0x90, 0x04, - 0xe7, 0xf7, 0x98, 0x04, 0xf7, 0xff, 0xff, 0x26, - 0xe7, 0xf7, 0x20, 0xff, 0x40, 0xb0, 0x90, 0x03, - 0x20, 0xff, 0x40, 0xb8, 0x43, 0xc0, 0x99, 0x03, - 0x40, 0x08, 0x90, 0x03, 0x08, 0x60, 0x90, 0x00, - 0x98, 0x00, 0x99, 0x03, 0x40, 0x08, 0x90, 0x00, - 0x98, 0x03, 0x43, 0x84, 0x98, 0x00, 0x43, 0x04, - 0x20, 0x01, 0x40, 0xb8, 0x43, 0xc0, 0x40, 0x04, - 0x98, 0x01, 0x40, 0xb8, 0x43, 0x04, 0x99, 0x05, - 0x00, 0xb8, 0x4a, 0x0d, 0x50, 0x11, 0x98, 0x05, - 0x6b, 0x00, 0xf7, 0xfe, 0xfc, 0x92, 0x90, 0x02, - 0x9a, 0x02, 0x1c, 0x39, 0x98, 0x05, 0xf0, 0x00, - 0xf8, 0x15, 0x20, 0x0d, 0x06, 0xc0, 0x60, 0x84, - 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x06, 0xe7, 0x25, 0xb0, 0x06, 0xe7, 0x23, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x68, 0x00, 0x04, 0x00, 0xb5, 0xf7, 0x1c, 0x04, - 0x1c, 0x0f, 0x01, 0x3d, 0x4b, 0x2f, 0x18, 0xe9, - 0x1d, 0xe2, 0x32, 0x0d, 0x20, 0x00, 0x28, 0x03, - 0xd3, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xca, 0x20, 0xc1, 0x20, 0xe7, 0xfa, 0x6a, 0xe3, - 0x05, 0x9d, 0x0d, 0xad, 0x00, 0xfe, 0x4b, 0x28, - 0x18, 0xf3, 0x60, 0x1d, 0x6b, 0x63, 0x33, 0x01, - 0x05, 0x9d, 0x0d, 0xad, 0x00, 0xfe, 0x4b, 0x24, - 0x18, 0xf3, 0x60, 0x5d, 0x6a, 0xa5, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x1d, 0x00, 0xfe, 0x4b, 0x20, - 0x18, 0xf3, 0x64, 0x1d, 0x9d, 0x02, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x1d, 0x00, 0xfe, 0x4b, 0x1c, - 0x18, 0xf3, 0x64, 0x5d, 0x4b, 0x1b, 0x68, 0x1b, - 0x2b, 0x01, 0xd1, 0x2a, 0x2f, 0x00, 0xd1, 0x28, - 0x4b, 0x17, 0x68, 0x5d, 0x23, 0x8f, 0x00, 0x9b, - 0x42, 0x9d, 0xd3, 0x03, 0x23, 0x8f, 0x00, 0x9b, - 0x4d, 0x13, 0x60, 0x6b, 0x4b, 0x12, 0x68, 0x1d, - 0x4b, 0x13, 0x42, 0x9d, 0xd3, 0x02, 0x4b, 0x12, - 0x4d, 0x0f, 0x60, 0x2b, 0x4b, 0x0e, 0x6c, 0x5d, - 0x23, 0x01, 0x02, 0x9b, 0x1a, 0xed, 0x23, 0xb3, - 0x00, 0x9b, 0x42, 0x9d, 0xd3, 0x02, 0x4b, 0x0d, - 0x4d, 0x09, 0x64, 0x6b, 0x4b, 0x08, 0x6c, 0x1d, - 0x23, 0x01, 0x02, 0x9b, 0x1a, 0xed, 0x4b, 0x0a, - 0x42, 0x9d, 0xd3, 0x02, 0x4b, 0x09, 0x4d, 0x04, - 0x64, 0x2b, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x68, 0x00, 0x0c, 0x00, - 0x68, 0x00, 0x04, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x00, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x06, 0xcc, - 0x00, 0x00, 0x02, 0xca, 0x00, 0x00, 0x06, 0xca, - 0xb4, 0xf0, 0x4f, 0x15, 0x4c, 0x15, 0x20, 0x00, - 0x21, 0x00, 0x22, 0x00, 0x43, 0xd2, 0x4d, 0x14, - 0x68, 0x6d, 0x42, 0x85, 0xdd, 0x1b, 0x1c, 0x05, - 0x30, 0x01, 0x00, 0xad, 0x59, 0x7b, 0x42, 0x93, - 0xd0, 0xf9, 0x4d, 0x0f, 0x68, 0x6d, 0x42, 0x85, - 0xda, 0x00, 0xe0, 0x10, 0x31, 0x01, 0x1c, 0x05, - 0x30, 0x01, 0x00, 0xad, 0x59, 0x7a, 0x42, 0x93, - 0xd0, 0xf9, 0x02, 0x95, 0x43, 0x1d, 0x1c, 0x2e, - 0xc4, 0x40, 0x4d, 0x07, 0x68, 0x6d, 0x42, 0x85, - 0xdb, 0x00, 0x31, 0x01, 0xe7, 0xdf, 0x25, 0x0d, - 0x06, 0xed, 0x61, 0x29, 0xbc, 0xf0, 0x47, 0x70, - 0x2e, 0x08, 0xba, 0x38, 0x68, 0x00, 0x0d, 0x40, - 0x2e, 0x08, 0xbb, 0x00, 0xb5, 0xf3, 0xb0, 0x82, - 0x9d, 0x02, 0x69, 0x2c, 0x2c, 0x13, 0xd1, 0x05, - 0x20, 0x75, 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x68, 0xee, 0x48, 0xf8, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2e, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x04, 0x2e, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xe6, 0x49, 0xef, - 0x20, 0x91, 0xf0, 0x19, 0xfb, 0xbd, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, 0xff, 0x6a, - 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0xea, 0x58, 0x08, - 0x99, 0x02, 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0xe6, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x02, - 0xe7, 0xd0, 0x48, 0xe3, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x16, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, - 0x90, 0x01, 0x99, 0x03, 0x29, 0x01, 0xd1, 0x05, - 0x20, 0x01, 0x40, 0xb0, 0x99, 0x01, 0x43, 0x08, - 0x90, 0x01, 0xe0, 0x05, 0x20, 0x01, 0x40, 0xb0, - 0x43, 0xc0, 0x99, 0x01, 0x40, 0x08, 0x90, 0x01, - 0x98, 0x01, 0x21, 0x0d, 0x06, 0xc9, 0x60, 0x88, - 0x48, 0xd8, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x73, - 0x48, 0xd3, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x6f, - 0x99, 0x03, 0x29, 0x01, 0xd1, 0x6c, 0xb0, 0x83, - 0x1c, 0x30, 0xf0, 0x0a, 0xfe, 0x71, 0x28, 0x01, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0xcd, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x05, 0xe7, 0x9e, 0x49, 0xce, - 0x20, 0x91, 0xf0, 0x19, 0xfb, 0x75, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xfe, 0xbb, - 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, 0xdd, 0x06, - 0x48, 0xc8, 0x68, 0x00, 0x68, 0x40, 0x30, 0x01, - 0x49, 0xc6, 0x68, 0x09, 0x60, 0x48, 0x20, 0x92, - 0x49, 0xc3, 0x60, 0x08, 0x20, 0x01, 0x49, 0xc3, - 0x68, 0x09, 0x60, 0x08, 0x2c, 0x0b, 0xdb, 0x11, - 0x2c, 0x12, 0xdc, 0x0f, 0x48, 0xbf, 0x68, 0x00, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, - 0x23, 0x01, 0x43, 0x18, 0x49, 0xbb, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, - 0x27, 0x00, 0xe0, 0xbc, 0x27, 0x00, 0x20, 0x00, - 0x90, 0x01, 0x98, 0x01, 0x28, 0x00, 0xd1, 0x15, - 0x2f, 0x07, 0xd2, 0x13, 0x6a, 0xe8, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, - 0x18, 0x18, 0x00, 0xc0, 0x4a, 0xaf, 0x68, 0x12, - 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, - 0x6f, 0xc0, 0x42, 0x81, 0xda, 0x01, 0x20, 0x01, - 0x90, 0x01, 0xe7, 0xe6, 0x98, 0x01, 0x28, 0x00, - 0xd1, 0x16, 0x2f, 0x18, 0xd2, 0x14, 0x6a, 0xe8, - 0x05, 0x81, 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, - 0x23, 0x4c, 0x43, 0x58, 0x4a, 0xa3, 0x68, 0x12, - 0x18, 0x80, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x40, 0x42, 0x81, 0xda, 0x03, 0xe0, 0x00, - 0xe0, 0xb0, 0x20, 0x01, 0x90, 0x01, 0xe7, 0xe5, - 0x3f, 0x01, 0x6b, 0x28, 0xf7, 0xfe, 0xfb, 0x01, - 0x90, 0x00, 0x2f, 0x07, 0xd2, 0x16, 0x48, 0x99, - 0x68, 0x01, 0x1c, 0x38, 0xf0, 0x0a, 0xf9, 0x0a, - 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, 0x49, 0x95, - 0x68, 0x09, 0x18, 0x40, 0x23, 0x2b, 0x01, 0x5b, - 0x18, 0xc0, 0x9a, 0x00, 0x1c, 0x29, 0xf0, 0x0a, - 0xfa, 0x5f, 0x48, 0x90, 0x68, 0x00, 0xf0, 0x0a, - 0xfe, 0x59, 0xe0, 0x4a, 0x2f, 0x18, 0xd2, 0x48, - 0x1f, 0xf8, 0x49, 0x8c, 0x68, 0x09, 0xf0, 0x0a, - 0xf9, 0x45, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x89, - 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x0a, 0x9a, 0x00, 0x1c, 0x29, 0xf0, 0x0a, - 0xfa, 0x47, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x83, - 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x82, 0x6f, 0xc0, 0x28, 0x00, 0xd0, 0x17, - 0x20, 0x4c, 0x43, 0x78, 0x49, 0x7d, 0x68, 0x09, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x68, 0x00, 0x04, 0x00, 0x0c, 0x00, 0xd0, 0x0b, - 0x20, 0x4c, 0x43, 0x78, 0x49, 0x77, 0x68, 0x09, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x68, 0x00, 0x0c, 0x00, 0x04, 0x00, 0xd1, 0x0a, - 0x20, 0x02, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x71, - 0x68, 0x12, 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, - 0x39, 0x82, 0x67, 0x48, 0xe0, 0x09, 0x20, 0x03, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x6b, 0x68, 0x12, - 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, - 0x67, 0x48, 0x48, 0x68, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x00, 0x40, - 0x90, 0x03, 0x98, 0x03, 0x23, 0x02, 0x43, 0x18, - 0x90, 0x03, 0x48, 0x62, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0x99, 0x03, 0x18, 0x40, 0x90, 0x03, - 0x98, 0x03, 0x49, 0x5c, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x1c, 0x39, - 0x48, 0x58, 0x68, 0x00, 0xf0, 0x0a, 0xfa, 0x72, - 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, 0xdd, 0x04, - 0x6b, 0x69, 0x48, 0x54, 0x68, 0x00, 0xf0, 0x0a, - 0xf9, 0x4d, 0x1c, 0x30, 0x21, 0x01, 0xf0, 0x0a, - 0xfd, 0x45, 0x49, 0x4f, 0x20, 0x91, 0xf0, 0x19, - 0xfa, 0x77, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0x48, 0x4c, 0x68, 0x00, 0x90, 0x02, 0x48, 0x4c, - 0x68, 0x00, 0x49, 0x4a, 0x60, 0x08, 0x98, 0x02, - 0x49, 0x49, 0x60, 0x08, 0x20, 0x92, 0x49, 0x46, - 0x60, 0x08, 0xb0, 0x03, 0x48, 0x43, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x75, 0x48, 0x3e, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x71, 0x99, 0x03, 0x29, 0x00, - 0xd1, 0x6e, 0xb0, 0x85, 0x1c, 0x30, 0xf0, 0x0a, - 0xfd, 0x47, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x38, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x07, - 0xe6, 0x74, 0x49, 0x39, 0x20, 0x91, 0xf0, 0x19, - 0xfa, 0x4b, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x0a, 0xfd, 0x91, 0x2c, 0x0b, 0xdb, 0x01, - 0x2c, 0x12, 0xdd, 0x0b, 0x48, 0x33, 0x68, 0x00, - 0x68, 0x40, 0x28, 0x00, 0xd0, 0x06, 0x48, 0x31, - 0x68, 0x00, 0x68, 0x40, 0x38, 0x01, 0x49, 0x2f, - 0x68, 0x09, 0x60, 0x48, 0x20, 0x92, 0x49, 0x2c, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x2b, 0x68, 0x09, - 0x60, 0x08, 0x2c, 0x0b, 0xdb, 0x11, 0x2c, 0x12, - 0xdc, 0x0f, 0x48, 0x28, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x08, 0x40, - 0x00, 0x40, 0x49, 0x24, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x27, 0x00, - 0xe0, 0xb2, 0x27, 0x00, 0x20, 0x00, 0x90, 0x03, - 0x98, 0x03, 0x28, 0x00, 0xd1, 0x15, 0x2f, 0x07, - 0xd2, 0x13, 0x6a, 0xe8, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, 0x18, 0x18, - 0x00, 0xc0, 0x4a, 0x18, 0x68, 0x12, 0x18, 0x80, - 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, - 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, 0x90, 0x03, - 0xe7, 0xe6, 0x98, 0x03, 0x28, 0x00, 0xd1, 0x26, - 0x2f, 0x18, 0xd2, 0x24, 0x6a, 0xe8, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x23, 0x4c, - 0x43, 0x58, 0x4a, 0x0c, 0x68, 0x12, 0x18, 0x80, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0xe0, 0x00, - 0xe0, 0xa9, 0x69, 0x40, 0x42, 0x81, 0xd1, 0x11, - 0x20, 0x01, 0x90, 0x03, 0xe0, 0x0e, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xe7, 0xd5, 0x3f, 0x01, - 0x6b, 0x28, 0xf7, 0xfe, 0xf9, 0xc2, 0x90, 0x01, - 0x2f, 0x07, 0xd2, 0x09, 0x48, 0x4a, 0x68, 0x01, - 0x1c, 0x38, 0xf0, 0x0a, 0xf8, 0x3d, 0x48, 0x48, - 0x68, 0x00, 0xf0, 0x0a, 0xfd, 0x27, 0xe0, 0x06, - 0x2f, 0x18, 0xd2, 0x04, 0x1f, 0xf8, 0x49, 0x44, - 0x68, 0x09, 0xf0, 0x0a, 0xf8, 0x6f, 0x48, 0x42, - 0x68, 0x00, 0x4b, 0x42, 0x18, 0xc0, 0xf0, 0x0a, - 0xf9, 0x8f, 0x20, 0x00, 0x49, 0x3e, 0x68, 0x09, - 0x23, 0x09, 0x01, 0xdb, 0x18, 0xc9, 0x64, 0x88, - 0x48, 0x3b, 0x68, 0x00, 0x68, 0x40, 0x28, 0x07, - 0xd3, 0x0e, 0x48, 0x39, 0x68, 0x00, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, 0x23, 0xfe, - 0x43, 0x18, 0x49, 0x35, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0xe0, 0x33, - 0x20, 0x01, 0x90, 0x00, 0x21, 0x00, 0x91, 0x02, - 0x48, 0x2f, 0x68, 0x00, 0x68, 0x40, 0x99, 0x02, - 0x42, 0x88, 0xd8, 0x04, 0xe0, 0x08, 0x99, 0x02, - 0x31, 0x01, 0x91, 0x02, 0xe7, 0xf4, 0x98, 0x00, - 0x00, 0x40, 0x30, 0x01, 0x90, 0x00, 0xe7, 0xf6, - 0x98, 0x00, 0x08, 0x40, 0x00, 0x40, 0x90, 0x00, - 0x48, 0x25, 0x68, 0x00, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc0, 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, - 0x49, 0x21, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc9, 0x61, 0x88, 0x48, 0x1e, 0x68, 0x00, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc0, 0x69, 0x80, - 0x99, 0x00, 0x43, 0x08, 0x49, 0x1a, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, - 0x1c, 0x39, 0x48, 0x17, 0x68, 0x00, 0xf0, 0x0a, - 0xf9, 0x4d, 0x2c, 0x0b, 0xdb, 0x01, 0x2c, 0x12, - 0xdd, 0x04, 0x6b, 0x69, 0x48, 0x12, 0x68, 0x00, - 0xf0, 0x0a, 0xf8, 0x7e, 0x1c, 0x30, 0x21, 0x00, - 0xf0, 0x0a, 0xfc, 0x20, 0x49, 0x10, 0x20, 0x91, - 0xf0, 0x19, 0xf9, 0x52, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x0b, 0x68, 0x00, 0x90, 0x04, - 0x48, 0x0c, 0x68, 0x00, 0x49, 0x08, 0x60, 0x08, - 0x98, 0x04, 0x49, 0x0a, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x07, 0x60, 0x08, 0xb0, 0x05, 0x20, 0x92, - 0x49, 0x07, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x02, - 0xe5, 0x60, 0xb0, 0x02, 0xe5, 0x5e, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x20, 0x00, 0x00, 0x04, 0xcc, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xba, 0x2c, 0xb5, 0xf3, 0x1c, 0x07, - 0x1c, 0x3e, 0x69, 0x30, 0x28, 0x13, 0xd1, 0x04, - 0x20, 0x75, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xf4, 0x48, 0x1e, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x2c, 0x19, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, - 0x2c, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0x28, 0x00, 0xd0, 0x01, 0x20, 0xff, - 0xe7, 0xe7, 0x49, 0x16, 0x20, 0x91, 0xf0, 0x19, - 0xf9, 0x0b, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x09, 0xfc, 0xb8, 0xe7, 0xf5, 0x00, 0xa0, - 0x49, 0x11, 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x04, - 0x20, 0x92, 0x49, 0x0e, 0x60, 0x08, 0x20, 0xff, - 0xe7, 0xd3, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0x80, - 0x1c, 0x05, 0x20, 0x01, 0x40, 0xa0, 0x40, 0x05, - 0x2d, 0x00, 0xd1, 0x03, 0x20, 0x00, 0x99, 0x01, - 0x60, 0x08, 0xe0, 0x02, 0x20, 0x01, 0x99, 0x01, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x03, 0x60, 0x08, - 0x20, 0x00, 0xe7, 0xbe, 0xe7, 0xbd, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x1c, 0x3c, 0x68, 0xe5, 0x69, 0x60, - 0x4b, 0x49, 0x40, 0x18, 0x99, 0x02, 0x07, 0x89, - 0x0f, 0x89, 0x02, 0x09, 0x43, 0x08, 0x61, 0x60, - 0x05, 0x80, 0x48, 0x46, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, 0xb0, 0x01, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x49, 0x3b, 0x20, 0x91, 0xf0, 0x19, 0xf8, 0xb4, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, - 0xfc, 0x61, 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x37, - 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x33, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x01, - 0xe7, 0xe6, 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x69, 0x20, 0x28, 0x0b, 0xdb, 0x0c, - 0x69, 0x20, 0x28, 0x12, 0xdc, 0x09, 0x01, 0x28, - 0x4b, 0x2d, 0x18, 0xc1, 0x91, 0x00, 0x1d, 0xe6, - 0x36, 0x0d, 0x68, 0x30, 0x99, 0x00, 0x60, 0x08, - 0xe0, 0x41, 0x48, 0x26, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x3d, 0x48, 0x28, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x28, 0xf0, 0x0a, - 0xfb, 0x73, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x1f, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, - 0xe7, 0xbe, 0x49, 0x21, 0x20, 0x91, 0xf0, 0x19, - 0xf8, 0x77, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x0a, 0xfb, 0xbd, 0x20, 0x92, 0x49, 0x1c, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x1b, 0x68, 0x09, - 0x60, 0x08, 0x48, 0x1a, 0x68, 0x01, 0x1c, 0x20, - 0xf0, 0x0a, 0xfb, 0x6e, 0x90, 0x00, 0x69, 0x60, - 0x99, 0x00, 0x60, 0xc8, 0x49, 0x14, 0x20, 0x91, - 0xf0, 0x19, 0xf8, 0x5e, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x12, 0x68, 0x00, 0x90, 0x01, - 0x48, 0x11, 0x68, 0x00, 0x49, 0x0f, 0x60, 0x08, - 0x98, 0x01, 0x49, 0x0f, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x0b, 0x60, 0x08, 0xb0, 0x02, 0x20, 0x92, - 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x01, - 0xe7, 0x8a, 0xb0, 0x01, 0xe7, 0x88, 0x00, 0x00, - 0xff, 0xff, 0xfc, 0xff, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x1c, 0x3c, 0x68, 0xe5, 0x69, 0x60, - 0x4b, 0x49, 0x40, 0x18, 0x99, 0x02, 0x07, 0x09, - 0x0f, 0x09, 0x02, 0x89, 0x43, 0x08, 0x61, 0x60, - 0x04, 0x80, 0x48, 0x46, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x20, 0x00, 0xb0, 0x01, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x49, 0x3b, 0x20, 0x91, 0xf0, 0x19, 0xf8, 0x08, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, - 0xfb, 0xb5, 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x37, - 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x33, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x01, - 0xe7, 0xe6, 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x69, 0x20, 0x28, 0x0b, 0xdb, 0x0c, - 0x69, 0x20, 0x28, 0x12, 0xdc, 0x09, 0x01, 0x28, - 0x4b, 0x2d, 0x18, 0xc6, 0x1d, 0xe0, 0x30, 0x0d, - 0x90, 0x00, 0x98, 0x00, 0x68, 0x00, 0x60, 0x30, - 0xe0, 0x41, 0x48, 0x26, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x3d, 0x48, 0x28, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x28, 0xf0, 0x0a, - 0xfa, 0xc7, 0x28, 0x00, 0xd1, 0x05, 0x20, 0x92, - 0x49, 0x1f, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x03, - 0xe7, 0xbe, 0x49, 0x21, 0x20, 0x91, 0xf0, 0x18, - 0xff, 0xcb, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x0a, 0xfb, 0x11, 0x20, 0x92, 0x49, 0x1c, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x1b, 0x68, 0x09, - 0x60, 0x08, 0x48, 0x1a, 0x68, 0x01, 0x1c, 0x20, - 0xf0, 0x0a, 0xfa, 0xc2, 0x90, 0x00, 0x69, 0x60, - 0x99, 0x00, 0x60, 0xc8, 0x49, 0x14, 0x20, 0x91, - 0xf0, 0x18, 0xff, 0xb2, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0x48, 0x12, 0x68, 0x00, 0x90, 0x01, - 0x48, 0x11, 0x68, 0x00, 0x49, 0x0f, 0x60, 0x08, - 0x98, 0x01, 0x49, 0x0f, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x0b, 0x60, 0x08, 0xb0, 0x02, 0x20, 0x92, - 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x01, - 0xe7, 0x8a, 0xb0, 0x01, 0xe7, 0x88, 0x00, 0x00, - 0xff, 0xff, 0xc3, 0xff, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x82, 0x1c, 0x3c, 0x68, 0xe5, 0x26, 0x00, - 0x99, 0x03, 0x29, 0x01, 0xd1, 0x00, 0x26, 0x01, - 0x69, 0x60, 0x06, 0x80, 0x0f, 0xc0, 0x42, 0xb0, - 0xd1, 0x05, 0x20, 0x00, 0xb0, 0x02, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x69, 0x60, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, 0x07, 0xf1, - 0x0e, 0x89, 0x43, 0x08, 0x61, 0x60, 0x06, 0x80, - 0x48, 0x44, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, - 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xde, - 0x49, 0x3b, 0x20, 0x91, 0xf0, 0x18, 0xff, 0x50, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, - 0xfa, 0xfd, 0xe7, 0xf5, 0x00, 0xa8, 0x49, 0x37, - 0x58, 0x08, 0x42, 0xb8, 0xd0, 0x05, 0x20, 0x92, - 0x49, 0x33, 0x60, 0x08, 0x20, 0xff, 0xb0, 0x02, - 0xe7, 0xc9, 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x69, 0x20, 0x28, 0x0b, 0xdb, 0x0e, - 0x69, 0x20, 0x28, 0x12, 0xdc, 0x0b, 0x01, 0x28, - 0x4b, 0x2d, 0x18, 0xc1, 0x91, 0x01, 0x1d, 0xe0, - 0x30, 0x0d, 0x90, 0x00, 0x98, 0x00, 0x68, 0x00, - 0x99, 0x01, 0x60, 0x08, 0xe0, 0x41, 0x48, 0x25, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x27, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, - 0x1c, 0x28, 0xf0, 0x0a, 0xfa, 0x0d, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0x1e, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x04, 0xe7, 0x9f, 0x49, 0x20, - 0x20, 0x91, 0xf0, 0x18, 0xff, 0x11, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xfa, 0x57, - 0x20, 0x92, 0x49, 0x1b, 0x60, 0x08, 0x20, 0x01, - 0x49, 0x1a, 0x68, 0x09, 0x60, 0x08, 0x48, 0x19, - 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x0a, 0xfa, 0x08, - 0x90, 0x00, 0x69, 0x60, 0x99, 0x00, 0x60, 0xc8, - 0x49, 0x13, 0x20, 0x91, 0xf0, 0x18, 0xfe, 0xf8, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x11, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x10, 0x68, 0x00, - 0x49, 0x0e, 0x60, 0x08, 0x98, 0x01, 0x49, 0x0e, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x0a, 0x60, 0x08, - 0xb0, 0x02, 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x6b, 0xb0, 0x02, - 0xe7, 0x69, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0xb0, 0x83, 0x1c, 0x25, 0x69, 0x28, - 0x28, 0x13, 0xd1, 0x04, 0x20, 0x75, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xee, - 0x20, 0x04, 0x40, 0x38, 0x08, 0x81, 0x91, 0x02, - 0x69, 0x68, 0x23, 0xc0, 0x43, 0xdb, 0x40, 0x18, - 0x07, 0xb9, 0x0f, 0x89, 0x01, 0x89, 0x43, 0x08, - 0x61, 0x68, 0x06, 0x00, 0x69, 0x68, 0x4b, 0x48, - 0x40, 0x18, 0x99, 0x02, 0x07, 0xc9, 0x0c, 0x49, - 0x43, 0x08, 0x61, 0x68, 0x04, 0x40, 0x48, 0x45, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x2e, 0x19, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0xe0, 0x04, 0x2e, 0x08, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0x00, 0xb0, 0x03, 0xe7, 0xd0, 0x49, 0x3c, - 0x20, 0x91, 0xf0, 0x18, 0xfe, 0x91, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x09, 0xfa, 0x3e, - 0xe7, 0xf5, 0x00, 0xb0, 0x49, 0x37, 0x58, 0x08, - 0x42, 0xa0, 0xd0, 0x05, 0x20, 0x92, 0x49, 0x34, - 0x60, 0x08, 0x20, 0xff, 0xb0, 0x03, 0xe7, 0xbb, - 0x48, 0x30, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, - 0x69, 0x28, 0x28, 0x0b, 0xdb, 0x0e, 0x69, 0x28, - 0x28, 0x12, 0xdc, 0x0b, 0x01, 0x30, 0x4b, 0x2e, - 0x18, 0xc0, 0x90, 0x01, 0x1d, 0xe8, 0x30, 0x0d, - 0x90, 0x00, 0x98, 0x00, 0x68, 0x00, 0x99, 0x01, - 0x60, 0x08, 0xe0, 0x41, 0x48, 0x25, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x27, 0x68, 0x00, - 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, 0x1c, 0x30, - 0xf0, 0x0a, 0xf9, 0x4e, 0x28, 0x00, 0xd1, 0x05, - 0x20, 0x92, 0x49, 0x1f, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x05, 0xe7, 0x91, 0x49, 0x20, 0x20, 0x91, - 0xf0, 0x18, 0xfe, 0x52, 0x28, 0x92, 0xd0, 0x00, - 0xe7, 0xf8, 0xf0, 0x0a, 0xf9, 0x98, 0x20, 0x92, - 0x49, 0x1b, 0x60, 0x08, 0x20, 0x01, 0x49, 0x1b, - 0x68, 0x09, 0x60, 0x08, 0x48, 0x19, 0x68, 0x01, - 0x1c, 0x28, 0xf0, 0x0a, 0xf9, 0x49, 0x90, 0x00, - 0x69, 0x68, 0x99, 0x00, 0x60, 0xc8, 0x49, 0x14, - 0x20, 0x91, 0xf0, 0x18, 0xfe, 0x39, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x11, 0x68, 0x00, - 0x90, 0x01, 0x48, 0x11, 0x68, 0x00, 0x49, 0x0f, - 0x60, 0x08, 0x98, 0x01, 0x49, 0x0e, 0x60, 0x08, - 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, 0xb0, 0x02, - 0x20, 0x92, 0x49, 0x05, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x03, 0xe7, 0x5d, 0xb0, 0x03, 0xe7, 0x5b, - 0xff, 0xff, 0xbf, 0xff, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0x1c, 0x01, 0x20, 0x0d, - 0x06, 0xc0, 0x60, 0x41, 0x48, 0x02, 0x63, 0x81, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, - 0x68, 0x00, 0x0d, 0x00, 0x20, 0x0d, 0x06, 0xc0, - 0x68, 0x40, 0x02, 0x00, 0x0a, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0x1c, 0x01, 0x1c, 0x0a, 0x68, 0xd0, - 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x03, 0x1c, 0x0a, - 0x1c, 0x19, 0x69, 0x08, 0x28, 0x13, 0xd1, 0x01, - 0x20, 0x75, 0x47, 0x70, 0x69, 0x08, 0x28, 0x0b, - 0xdb, 0x0b, 0x69, 0x08, 0x28, 0x12, 0xdc, 0x08, - 0x6d, 0x08, 0x60, 0x10, 0x6d, 0x88, 0x60, 0x90, - 0x6d, 0x48, 0x60, 0x50, 0x6d, 0xc8, 0x60, 0xd0, - 0xe0, 0x07, 0x6a, 0x88, 0x60, 0x10, 0x6b, 0x08, - 0x60, 0x90, 0x6a, 0xc8, 0x60, 0x50, 0x6b, 0x48, - 0x60, 0xd0, 0x20, 0x00, 0xe7, 0xe5, 0xe7, 0xe4, - 0x1c, 0x03, 0x1c, 0x0a, 0x68, 0x10, 0x60, 0x18, - 0x68, 0x90, 0x60, 0x98, 0x68, 0x50, 0x60, 0x58, - 0x68, 0xd0, 0x60, 0xd8, 0x47, 0x70, 0xe7, 0xfd, - 0x1c, 0x01, 0x1c, 0x0a, 0x69, 0x50, 0x05, 0x80, - 0x0f, 0x80, 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, - 0x1c, 0x0a, 0x69, 0x50, 0x12, 0x80, 0x07, 0x00, - 0x0f, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0xb4, 0x80, - 0x1c, 0x01, 0x1c, 0x0f, 0x22, 0x01, 0x69, 0x78, - 0x23, 0x20, 0x40, 0x18, 0xd1, 0x00, 0x22, 0x00, - 0x1c, 0x10, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, - 0x1c, 0x01, 0x1c, 0x0b, 0x69, 0x18, 0x28, 0x13, - 0xd1, 0x01, 0x20, 0x75, 0x47, 0x70, 0x69, 0x58, - 0x06, 0x00, 0x0f, 0x82, 0x69, 0x58, 0x04, 0x40, - 0x0f, 0xc0, 0x00, 0x80, 0x43, 0x02, 0x1c, 0x10, - 0xe7, 0xf4, 0xe7, 0xf3, 0x1c, 0x01, 0x20, 0x0d, - 0x06, 0xc0, 0x61, 0x41, 0x20, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0x20, 0x0d, 0x06, 0xc0, 0x69, 0x40, - 0x1c, 0x01, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, - 0x1c, 0x01, 0x22, 0x00, 0x29, 0x01, 0xd1, 0x00, - 0x22, 0x01, 0x20, 0x0d, 0x06, 0xc0, 0x68, 0xc0, - 0x1c, 0x03, 0x2b, 0x02, 0xd1, 0x01, 0x29, 0x00, - 0xd1, 0x02, 0x20, 0x0d, 0x06, 0xc0, 0x60, 0xc2, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x21, 0x01, - 0x20, 0x0d, 0x06, 0xc0, 0x68, 0xc0, 0x1c, 0x02, - 0x2a, 0x00, 0xd1, 0x00, 0x21, 0x00, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, 0x1c, 0x0a, - 0x69, 0x10, 0x47, 0x70, 0xe7, 0xfd, 0xb4, 0x90, - 0x1c, 0x07, 0x1c, 0x0a, 0x1c, 0x39, 0x69, 0x08, - 0x28, 0x13, 0xd0, 0x05, 0x69, 0x08, 0x28, 0x0b, - 0xdb, 0x05, 0x69, 0x08, 0x28, 0x12, 0xdc, 0x02, - 0x20, 0x86, 0xbc, 0x90, 0x47, 0x70, 0x6b, 0x8c, - 0x69, 0x48, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x00, - 0x08, 0x64, 0x69, 0x08, 0x00, 0x80, 0x4b, 0x03, - 0x58, 0x18, 0x43, 0x60, 0x60, 0x10, 0x20, 0x00, - 0xe7, 0xef, 0xe7, 0xee, 0x2e, 0x03, 0xa8, 0xc8, - 0xb5, 0xf3, 0x1c, 0x07, 0xb0, 0x81, 0x9c, 0x02, - 0x69, 0x20, 0x28, 0x13, 0xd0, 0x05, 0x69, 0x20, - 0x28, 0x0b, 0xdb, 0x08, 0x69, 0x20, 0x28, 0x12, - 0xdc, 0x05, 0x20, 0x86, 0xb0, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x68, 0xe5, - 0x68, 0x38, 0x64, 0x20, 0x68, 0x7e, 0x64, 0x66, - 0x08, 0xb6, 0x61, 0xa6, 0x48, 0x3f, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, - 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, - 0x2d, 0x08, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, - 0xb0, 0x01, 0xe7, 0xe0, 0x49, 0x36, 0x20, 0x91, - 0xf0, 0x18, 0xfd, 0x16, 0x28, 0x92, 0xd0, 0x03, - 0x20, 0x01, 0xf0, 0x09, 0xf8, 0xc3, 0xe7, 0xf5, - 0x00, 0xa8, 0x49, 0x32, 0x58, 0x08, 0x99, 0x02, - 0x42, 0x88, 0xd0, 0x05, 0x20, 0x92, 0x49, 0x2e, - 0x60, 0x08, 0x20, 0x86, 0xb0, 0x01, 0xe7, 0xca, - 0x48, 0x2a, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x06, - 0x01, 0x28, 0x4b, 0x2b, 0x18, 0xc0, 0x90, 0x00, - 0x98, 0x00, 0x60, 0x06, 0xe0, 0x41, 0x48, 0x25, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x3d, 0x48, 0x27, - 0x68, 0x00, 0x28, 0x01, 0xd1, 0x39, 0xb0, 0x82, - 0x1c, 0x28, 0xf0, 0x09, 0xff, 0xdd, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0x92, 0x49, 0x1e, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x03, 0xe7, 0xab, 0x49, 0x20, - 0x20, 0x91, 0xf0, 0x18, 0xfc, 0xe1, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x0a, 0xf8, 0x27, - 0x20, 0x92, 0x49, 0x1b, 0x60, 0x08, 0x20, 0x01, - 0x49, 0x1a, 0x68, 0x09, 0x60, 0x08, 0x48, 0x19, - 0x68, 0x01, 0x1c, 0x20, 0xf0, 0x09, 0xff, 0xd8, - 0x90, 0x00, 0x69, 0xa0, 0x99, 0x00, 0x61, 0x08, - 0x49, 0x13, 0x20, 0x91, 0xf0, 0x18, 0xfc, 0xc8, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x11, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x10, 0x68, 0x00, - 0x49, 0x0e, 0x60, 0x08, 0x98, 0x01, 0x49, 0x0e, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x0a, 0x60, 0x08, - 0xb0, 0x02, 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0x77, 0xb0, 0x01, - 0xe7, 0x75, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x68, 0x00, 0x0c, 0x04, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xbb, 0x24, 0xb4, 0x80, 0x1c, 0x01, - 0x06, 0x0b, 0x0e, 0x1b, 0x22, 0x01, 0x2a, 0x19, - 0xd3, 0x02, 0xe0, 0x0f, 0x32, 0x01, 0xe7, 0xfa, - 0x00, 0x90, 0x4f, 0x08, 0x58, 0x38, 0x68, 0x80, - 0x02, 0x00, 0x0e, 0x00, 0x42, 0x98, 0xd1, 0x04, - 0x00, 0x90, 0x4f, 0x04, 0x58, 0x38, 0xbc, 0x80, - 0x47, 0x70, 0xe7, 0xef, 0x20, 0x00, 0xe7, 0xfa, - 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xc4, - 0xb4, 0x90, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x38, - 0x16, 0x01, 0x48, 0x20, 0x60, 0x02, 0x48, 0x20, - 0x68, 0x80, 0x23, 0x33, 0x06, 0x5b, 0x65, 0xd8, - 0x48, 0x1d, 0x68, 0xc0, 0x23, 0x33, 0x06, 0x5b, - 0x66, 0x18, 0x48, 0x1c, 0x4b, 0x1a, 0x60, 0x98, - 0x48, 0x1b, 0x4b, 0x19, 0x60, 0xd8, 0x20, 0x01, - 0x23, 0x33, 0x06, 0x5b, 0x66, 0xd8, 0x48, 0x19, - 0x68, 0x04, 0x23, 0x01, 0x04, 0xdb, 0x43, 0x23, - 0x60, 0x03, 0x48, 0x16, 0x68, 0x04, 0x23, 0x01, - 0x04, 0xdb, 0x43, 0x9c, 0x1c, 0x23, 0x60, 0x03, - 0x29, 0x00, 0xd1, 0x10, 0x20, 0xff, 0x30, 0x14, - 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, 0x48, 0x10, - 0x68, 0x04, 0x23, 0xff, 0x33, 0x01, 0x43, 0x9c, - 0x1c, 0x23, 0x60, 0x03, 0x48, 0x0d, 0x23, 0x1b, - 0x06, 0x9b, 0x64, 0x18, 0xe0, 0x08, 0x20, 0xff, - 0x30, 0x14, 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, - 0x48, 0x02, 0x68, 0x00, 0x4b, 0x08, 0x60, 0x18, - 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x08, 0x9b, 0xbc, - 0x2e, 0x08, 0xb9, 0x88, 0xcc, 0x1f, 0xe0, 0x00, - 0xcc, 0x1f, 0xfe, 0x00, 0x6c, 0x00, 0x00, 0x40, - 0x6c, 0x00, 0x00, 0x20, 0x00, 0x00, 0x82, 0x18, - 0x6c, 0x00, 0x00, 0x80, 0xb4, 0xf0, 0x1c, 0x01, - 0xb0, 0x82, 0x23, 0x1b, 0x06, 0x9b, 0x6a, 0x1b, - 0x1c, 0x18, 0x27, 0x00, 0x22, 0x00, 0x08, 0x40, - 0x00, 0x40, 0x4b, 0xaf, 0x68, 0x1c, 0x08, 0x64, - 0x00, 0x64, 0x60, 0x1c, 0x4b, 0xad, 0x68, 0x1b, - 0x1c, 0x1d, 0x23, 0x1b, 0x06, 0x9b, 0x6c, 0x1b, - 0x93, 0x01, 0x23, 0xff, 0x33, 0x01, 0x40, 0x03, - 0xd0, 0x00, 0x22, 0xff, 0x23, 0x01, 0x04, 0x9b, - 0x40, 0x03, 0xd0, 0x1b, 0x4c, 0xa4, 0x68, 0x26, - 0x23, 0x01, 0x04, 0x9b, 0x43, 0x9e, 0x1c, 0x33, - 0x60, 0x23, 0x4c, 0xa1, 0x68, 0x26, 0x23, 0x01, - 0x43, 0x33, 0x60, 0x23, 0x23, 0x00, 0x93, 0x00, - 0x9b, 0x00, 0x2b, 0x0a, 0xdb, 0x04, 0xe0, 0x04, - 0x9b, 0x00, 0x33, 0x01, 0x93, 0x00, 0xe7, 0xf7, - 0xe7, 0xfa, 0x4b, 0x99, 0x68, 0x1c, 0x08, 0x64, - 0x00, 0x64, 0x60, 0x1c, 0x23, 0x01, 0x02, 0x9b, - 0x40, 0x0b, 0xd0, 0x29, 0x23, 0x01, 0x02, 0xdb, - 0x40, 0x0b, 0xd0, 0x01, 0x4b, 0x94, 0x40, 0x18, - 0x23, 0x01, 0x03, 0x1b, 0x40, 0x0b, 0xd0, 0x02, - 0x23, 0x01, 0x05, 0x9b, 0x43, 0x18, 0x4b, 0x91, - 0x40, 0x18, 0x02, 0x4c, 0x23, 0x7f, 0x02, 0x5b, - 0x40, 0x23, 0x43, 0x18, 0x23, 0x40, 0x40, 0x0b, - 0xd0, 0x03, 0x23, 0x01, 0x04, 0x5b, 0x43, 0x18, - 0xe0, 0x0a, 0x4b, 0x8b, 0x40, 0x18, 0x23, 0x20, - 0x40, 0x0b, 0xd0, 0x03, 0x23, 0x01, 0x04, 0x1b, - 0x43, 0x18, 0xe0, 0x01, 0x4b, 0x87, 0x40, 0x18, - 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, 0xe0, 0xfc, - 0x23, 0x04, 0x40, 0x0b, 0xd0, 0x0f, 0x4c, 0x7e, - 0x68, 0x26, 0x23, 0x01, 0x43, 0x33, 0x60, 0x23, - 0x4b, 0x81, 0x68, 0x9b, 0x24, 0x33, 0x06, 0x64, - 0x65, 0xe3, 0x4b, 0x7f, 0x68, 0xdb, 0x24, 0x33, - 0x06, 0x64, 0x66, 0x23, 0xe0, 0xe9, 0x23, 0x01, - 0x03, 0x5b, 0x40, 0x0b, 0xd0, 0x13, 0x4b, 0x7a, - 0x68, 0x9b, 0x24, 0x33, 0x06, 0x64, 0x65, 0xe3, - 0x4b, 0x77, 0x68, 0xdb, 0x24, 0x33, 0x06, 0x64, - 0x66, 0x23, 0x23, 0x01, 0x24, 0x33, 0x06, 0x64, - 0x66, 0xe3, 0x4c, 0x6d, 0x68, 0x26, 0x23, 0x01, - 0x43, 0x33, 0x60, 0x23, 0xe0, 0xd1, 0x07, 0xcb, - 0x0f, 0xdb, 0xd0, 0x02, 0x23, 0x02, 0x43, 0x18, - 0xe0, 0x05, 0x23, 0x02, 0x40, 0x0b, 0xd0, 0x02, - 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, 0x23, 0x07, - 0x01, 0xdb, 0x40, 0x0b, 0xd0, 0x0f, 0x23, 0x0c, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0xff, 0x33, 0x01, - 0x40, 0x0b, 0xd0, 0x02, 0x23, 0x04, 0x43, 0x18, - 0xe0, 0x05, 0x23, 0x01, 0x02, 0x5b, 0x40, 0x0b, - 0xd0, 0x01, 0x23, 0x08, 0x43, 0x18, 0x23, 0x01, - 0x04, 0x1b, 0x40, 0x0b, 0xd0, 0x08, 0x23, 0x01, - 0x04, 0x9b, 0x43, 0x98, 0x1c, 0x04, 0x20, 0x01, - 0x04, 0xc0, 0x43, 0x20, 0x23, 0x01, 0x43, 0x18, - 0x23, 0x78, 0x40, 0x0b, 0xd0, 0x73, 0x23, 0x30, - 0x40, 0x03, 0xd0, 0x06, 0x2b, 0x10, 0xd0, 0x04, - 0x2b, 0x20, 0xd0, 0x42, 0x2b, 0x30, 0xd0, 0x40, - 0xe0, 0x81, 0x23, 0x10, 0x40, 0x0b, 0xd1, 0x02, - 0x23, 0x08, 0x40, 0x0b, 0xd0, 0x08, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0x10, 0x40, 0x0b, - 0xd0, 0x01, 0x23, 0x10, 0x43, 0x18, 0xe0, 0x2f, - 0x23, 0x30, 0x43, 0xdb, 0x40, 0x18, 0x23, 0x20, - 0x40, 0x0b, 0xd0, 0x02, 0x23, 0x20, 0x43, 0x18, - 0xe0, 0x01, 0x23, 0x30, 0x43, 0x18, 0x23, 0x01, - 0x43, 0x18, 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, - 0x27, 0xff, 0x2a, 0x00, 0xd0, 0x04, 0x4b, 0x43, - 0x68, 0x1b, 0x4c, 0x43, 0x60, 0x23, 0xe0, 0x17, - 0x07, 0xab, 0x0f, 0x9b, 0xd0, 0x09, 0x2b, 0x01, - 0xd0, 0x02, 0x2b, 0x02, 0xd0, 0x0a, 0xe0, 0x0e, - 0x4b, 0x3e, 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, - 0xe0, 0x0a, 0x4b, 0x3d, 0x24, 0x1b, 0x06, 0xa4, - 0x64, 0x23, 0xe0, 0x05, 0x4b, 0x3b, 0x24, 0x1b, - 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x00, 0xe7, 0xff, - 0xe0, 0x42, 0x23, 0x40, 0x40, 0x0b, 0xd1, 0x02, - 0x23, 0x20, 0x40, 0x0b, 0xd0, 0x0b, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0x20, 0x40, 0x0b, - 0xd0, 0x02, 0x23, 0x20, 0x43, 0x18, 0xe0, 0x01, - 0x23, 0x30, 0x43, 0x18, 0xe0, 0x2e, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x18, 0x23, 0x10, 0x40, 0x0b, - 0xd0, 0x01, 0x23, 0x10, 0x43, 0x18, 0x23, 0x01, - 0x43, 0x18, 0x23, 0x1b, 0x06, 0x9b, 0x62, 0x18, - 0x27, 0xff, 0x2a, 0x00, 0xd0, 0x04, 0x4b, 0x23, - 0x68, 0x1b, 0x4c, 0x23, 0x60, 0x23, 0xe0, 0x19, - 0x07, 0xab, 0x0f, 0x9b, 0xe0, 0x00, 0xe0, 0x17, - 0xd0, 0x09, 0x2b, 0x01, 0xd0, 0x02, 0x2b, 0x02, - 0xd0, 0x0a, 0xe0, 0x0e, 0x4b, 0x20, 0x24, 0x1b, - 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x0a, 0x4b, 0x1f, - 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, 0xe0, 0x05, - 0x4b, 0x1d, 0x24, 0x1b, 0x06, 0xa4, 0x64, 0x23, - 0xe0, 0x00, 0xe7, 0xff, 0xe0, 0x00, 0xe7, 0xff, - 0x2f, 0x00, 0xd1, 0x12, 0x23, 0x1b, 0x06, 0x9b, - 0x62, 0x18, 0x23, 0x00, 0x93, 0x00, 0x9b, 0x00, - 0x2b, 0x0a, 0xdb, 0x04, 0xe0, 0x04, 0x9b, 0x00, - 0x33, 0x01, 0x93, 0x00, 0xe7, 0xf7, 0xe7, 0xfa, - 0x4b, 0x03, 0x68, 0x1c, 0x08, 0x64, 0x00, 0x64, - 0x60, 0x1c, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x6c, 0x00, 0x00, 0x20, 0x6c, 0x00, 0x68, 0x00, - 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfe, 0x01, 0xff, - 0xff, 0xfd, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xff, - 0x2e, 0x08, 0xb9, 0x88, 0x2e, 0x08, 0x9b, 0xbc, - 0x6c, 0x00, 0x00, 0x80, 0x00, 0x00, 0x98, 0x60, - 0x00, 0x01, 0x58, 0x60, 0x00, 0x02, 0x54, 0x28, - 0x00, 0x00, 0x82, 0x18, 0x00, 0x01, 0x42, 0x18, - 0x00, 0x02, 0x42, 0x18, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x81, 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x00, 0x98, 0x00, 0x28, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x33, 0x06, 0x40, - 0x6e, 0x00, 0x21, 0x33, 0x06, 0x49, 0x6d, 0xc9, - 0x1a, 0x46, 0x48, 0x12, 0x6c, 0x80, 0x1c, 0x04, - 0x48, 0x10, 0x6c, 0xc0, 0x1c, 0x05, 0x42, 0xac, - 0xd9, 0x09, 0x1b, 0x60, 0x21, 0x64, 0x43, 0x41, - 0x1c, 0x30, 0xf0, 0x09, 0xff, 0xcb, 0x21, 0x64, - 0x1a, 0x08, 0x60, 0x38, 0xe0, 0x06, 0x1b, 0x28, - 0x21, 0x64, 0x43, 0x41, 0x1c, 0x30, 0xf0, 0x09, - 0xff, 0xc1, 0x60, 0x38, 0x42, 0xac, 0xd1, 0x03, - 0x20, 0x31, 0xb0, 0x01, 0xe7, 0xd6, 0xe0, 0x02, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xd2, 0xb0, 0x01, - 0xe7, 0xd0, 0x00, 0x00, 0x66, 0x00, 0x00, 0x80, - 0xb5, 0xff, 0x1c, 0x14, 0x1c, 0x1f, 0xb0, 0x82, - 0x98, 0x02, 0x06, 0x01, 0x0e, 0x09, 0x91, 0x00, - 0x98, 0x0b, 0x06, 0x03, 0x16, 0x1b, 0x93, 0x01, - 0xb0, 0x84, 0x99, 0x04, 0x29, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x9b, 0x05, 0x2b, 0x1f, - 0xdd, 0x02, 0x20, 0xaf, 0xb0, 0x06, 0xe7, 0xf5, - 0x98, 0x07, 0x90, 0x01, 0x2f, 0x00, 0xd0, 0x47, - 0xb0, 0x81, 0x98, 0x08, 0x22, 0x00, 0x92, 0x00, - 0x22, 0x1b, 0x06, 0x92, 0x6a, 0x12, 0x23, 0x01, - 0x05, 0x1b, 0x40, 0x1a, 0xd0, 0x01, 0x22, 0xff, - 0x92, 0x00, 0x25, 0x00, 0x08, 0x62, 0x42, 0xaa, - 0xd8, 0x02, 0xe0, 0x34, 0x35, 0x01, 0xe7, 0xf9, - 0x9a, 0x00, 0x2a, 0x00, 0xd0, 0x1e, 0x88, 0x02, - 0x23, 0xff, 0x02, 0x1b, 0x40, 0x1a, 0x12, 0x12, - 0x88, 0x03, 0x02, 0x1b, 0x43, 0x1a, 0x04, 0x11, - 0x0c, 0x09, 0x2f, 0x00, 0xda, 0x05, 0x42, 0x7a, - 0x41, 0x11, 0x1c, 0x0b, 0x04, 0x19, 0x0c, 0x09, - 0xe0, 0x03, 0x40, 0xb9, 0x1c, 0x0a, 0x04, 0x11, - 0x0c, 0x09, 0x22, 0xff, 0x02, 0x12, 0x40, 0x0a, - 0x12, 0x12, 0x02, 0x0b, 0x43, 0x13, 0x80, 0x03, - 0x30, 0x02, 0xe0, 0x0f, 0x2f, 0x00, 0xda, 0x07, - 0x88, 0x02, 0x42, 0x7e, 0x41, 0x32, 0x04, 0x12, - 0x0c, 0x12, 0x80, 0x02, 0x30, 0x02, 0xe0, 0x05, - 0x88, 0x02, 0x40, 0xba, 0x04, 0x12, 0x0c, 0x12, - 0x80, 0x02, 0x30, 0x02, 0xe7, 0xca, 0xb0, 0x01, - 0x49, 0x23, 0x91, 0x03, 0x20, 0x01, 0x06, 0x00, - 0x99, 0x03, 0x60, 0x08, 0x48, 0x21, 0x6c, 0x80, - 0x49, 0x20, 0x6c, 0xc9, 0x1a, 0x40, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x00, 0xdc, 0x09, 0x20, 0x33, - 0x06, 0x40, 0x6e, 0x00, 0x21, 0x33, 0x06, 0x49, - 0x6d, 0xc9, 0x1a, 0x40, 0x99, 0x00, 0x18, 0x40, - 0x90, 0x00, 0x98, 0x00, 0x23, 0x3b, 0x01, 0xdb, - 0x42, 0x98, 0xda, 0x02, 0x20, 0x06, 0xf0, 0x08, - 0xfd, 0x8d, 0x98, 0x00, 0x23, 0x3b, 0x01, 0xdb, - 0x42, 0x98, 0xdb, 0xdf, 0x98, 0x00, 0x42, 0x84, - 0xd9, 0x02, 0x98, 0x00, 0x90, 0x02, 0xe0, 0x00, - 0x94, 0x02, 0x22, 0x04, 0x99, 0x03, 0xb4, 0x06, - 0x9b, 0x07, 0x9a, 0x04, 0x99, 0x06, 0x98, 0x03, - 0xf0, 0x04, 0xfb, 0x8c, 0xb0, 0x02, 0x98, 0x02, - 0x1a, 0x24, 0x98, 0x01, 0x99, 0x02, 0x18, 0x40, - 0x90, 0x01, 0x20, 0x00, 0x90, 0x00, 0x2c, 0x00, - 0xd1, 0xc4, 0x20, 0x00, 0xb0, 0x06, 0xe7, 0x65, - 0xb0, 0x04, 0xb0, 0x02, 0xe7, 0x62, 0x00, 0x00, - 0x9e, 0x00, 0x08, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x20, 0x1b, 0x06, 0x80, 0x6a, 0x00, 0x07, 0xc0, - 0x0f, 0xc0, 0x4a, 0x03, 0x68, 0x12, 0x1c, 0x01, - 0x43, 0x11, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, - 0x6c, 0x00, 0x08, 0x00, 0xb4, 0x90, 0x1c, 0x01, - 0x20, 0x1b, 0x06, 0x80, 0x6a, 0x00, 0x1c, 0x04, - 0x48, 0x1b, 0x68, 0x00, 0x1c, 0x07, 0x20, 0x30, - 0x40, 0x20, 0xd0, 0x06, 0x28, 0x10, 0xd0, 0x06, - 0x28, 0x20, 0xd0, 0x06, 0x28, 0x30, 0xd0, 0x06, - 0xe0, 0x07, 0x22, 0x01, 0xe0, 0x08, 0x22, 0x02, - 0xe0, 0x06, 0x22, 0x04, 0xe0, 0x04, 0x22, 0x08, - 0xe0, 0x02, 0x20, 0x30, 0xbc, 0x90, 0x47, 0x70, - 0x20, 0x03, 0x07, 0x40, 0x40, 0x38, 0x0f, 0x40, - 0xd0, 0x04, 0x28, 0x01, 0xd0, 0x05, 0x28, 0x02, - 0xd0, 0x06, 0xe0, 0x08, 0x23, 0x10, 0x43, 0x1a, - 0xe0, 0x07, 0x23, 0x20, 0x43, 0x1a, 0xe0, 0x04, - 0x23, 0x40, 0x43, 0x1a, 0xe0, 0x01, 0x20, 0x30, - 0xe7, 0xe8, 0x20, 0x01, 0x05, 0xc0, 0x40, 0x38, - 0xd1, 0x01, 0x23, 0x80, 0x43, 0x1a, 0x60, 0x0a, - 0x20, 0x00, 0xe7, 0xdf, 0xe7, 0xde, 0x00, 0x00, - 0x6c, 0x00, 0x08, 0x00, 0x1c, 0x01, 0x48, 0x01, - 0x60, 0x01, 0x47, 0x70, 0x6c, 0x00, 0x00, 0x80, - 0x1c, 0x01, 0x29, 0x1f, 0xdd, 0x01, 0x20, 0xaf, - 0x47, 0x70, 0x20, 0x80, 0x6c, 0x00, 0x60, 0x01, - 0x20, 0x00, 0xe7, 0xf9, 0xe7, 0xf8, 0xb5, 0xf3, - 0x1c, 0x0a, 0xb0, 0x81, 0x98, 0x01, 0x06, 0x03, - 0x0e, 0x1b, 0x93, 0x00, 0xb0, 0x81, 0x20, 0x1b, - 0x06, 0x80, 0x6a, 0x00, 0x1c, 0x01, 0x25, 0x00, - 0x20, 0x00, 0x90, 0x00, 0x20, 0x1b, 0x06, 0x80, - 0x6c, 0x00, 0x1c, 0x04, 0x27, 0x00, 0x9b, 0x01, - 0x2b, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x02, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc0, 0x9b, 0x01, 0x00, 0xdb, - 0x4e, 0x5f, 0x68, 0x36, 0x19, 0x9b, 0x60, 0x58, - 0x20, 0xff, 0x30, 0x01, 0x40, 0x08, 0xd0, 0x01, - 0x20, 0xff, 0x90, 0x00, 0x23, 0x01, 0x04, 0xdb, - 0x43, 0x99, 0x1c, 0x08, 0x21, 0x01, 0x04, 0x89, - 0x43, 0x01, 0x20, 0x01, 0x03, 0x00, 0x40, 0x10, - 0xd0, 0x05, 0x06, 0x90, 0x0e, 0x80, 0xd0, 0x02, - 0x23, 0x01, 0x05, 0x1b, 0x43, 0x19, 0x23, 0x30, - 0x43, 0xdb, 0x40, 0x19, 0x05, 0x10, 0x0d, 0x00, - 0x28, 0x40, 0xd0, 0x48, 0xdc, 0x0e, 0x28, 0x08, - 0xd0, 0x32, 0xdc, 0x06, 0x28, 0x01, 0xd0, 0x1e, - 0x28, 0x02, 0xd0, 0x21, 0x28, 0x04, 0xd0, 0x26, - 0xe0, 0x67, 0x28, 0x10, 0xd0, 0x2f, 0x28, 0x20, - 0xd0, 0x32, 0xe0, 0x62, 0x23, 0x01, 0x02, 0x5b, - 0x42, 0x98, 0xd0, 0x49, 0xdc, 0x06, 0x28, 0x80, - 0xd0, 0x38, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x3b, 0xe0, 0x56, 0x23, 0x01, 0x02, 0x9b, - 0x42, 0x98, 0xd0, 0x44, 0x23, 0x01, 0x02, 0xdb, - 0x42, 0x98, 0xd0, 0x47, 0xe0, 0x4d, 0x4b, 0x3d, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x3b, 0xe0, 0x49, - 0x23, 0x10, 0x43, 0x19, 0x4b, 0x39, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x38, 0xe0, 0x42, 0x4b, 0x38, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x36, 0xe0, 0x3d, - 0x23, 0x10, 0x43, 0x19, 0x4b, 0x34, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x33, 0xe0, 0x36, 0x4b, 0x33, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x31, 0xe0, 0x31, - 0x23, 0x10, 0x43, 0x19, 0x4b, 0x2f, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x2e, 0xe0, 0x2a, 0x23, 0x20, - 0x43, 0x19, 0x4b, 0x2d, 0x42, 0x9c, 0xd0, 0x00, - 0x4f, 0x2b, 0xe0, 0x23, 0x23, 0x30, 0x43, 0x19, - 0x4b, 0x29, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x28, - 0xe0, 0x1c, 0x23, 0x20, 0x43, 0x19, 0x4b, 0x27, - 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x25, 0xe0, 0x15, - 0x23, 0x30, 0x43, 0x19, 0x4b, 0x23, 0x42, 0x9c, - 0xd0, 0x00, 0x4f, 0x22, 0xe0, 0x0e, 0x23, 0x20, - 0x43, 0x19, 0x4b, 0x21, 0x42, 0x9c, 0xd0, 0x00, - 0x4f, 0x1f, 0xe0, 0x07, 0x23, 0x30, 0x43, 0x19, - 0x4b, 0x1d, 0x42, 0x9c, 0xd0, 0x00, 0x4f, 0x1c, - 0xe0, 0x00, 0xe7, 0xff, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x0a, 0x23, 0x01, 0x43, 0x19, 0x20, 0x1b, - 0x06, 0x80, 0x62, 0x01, 0x48, 0x17, 0x68, 0x00, - 0x4b, 0x17, 0x60, 0x18, 0x25, 0xff, 0xe0, 0x0e, - 0x23, 0x01, 0x43, 0x19, 0x2f, 0x00, 0xd0, 0x07, - 0x20, 0x1b, 0x06, 0x80, 0x62, 0x01, 0x20, 0x1b, - 0x06, 0x80, 0x64, 0x07, 0x25, 0xff, 0xe0, 0x02, - 0x20, 0x1b, 0x06, 0x80, 0x62, 0x01, 0x2d, 0x00, - 0xd1, 0x04, 0x48, 0x0e, 0x68, 0x03, 0x08, 0x5b, - 0x00, 0x5b, 0x60, 0x03, 0x20, 0x00, 0xb0, 0x02, - 0xe7, 0x36, 0xb0, 0x01, 0xb0, 0x01, 0xe7, 0x33, - 0x2e, 0x08, 0x9b, 0x40, 0x00, 0x00, 0x82, 0x18, - 0x00, 0x01, 0x42, 0x18, 0x00, 0x02, 0x42, 0x18, - 0x00, 0x00, 0x98, 0x60, 0x00, 0x01, 0x58, 0x60, - 0x00, 0x02, 0x54, 0x28, 0x2e, 0x08, 0x9b, 0xbc, - 0x6c, 0x00, 0x00, 0x80, 0x6c, 0x00, 0x00, 0x20, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x82, 0x49, 0x2c, - 0x46, 0x68, 0x22, 0x08, 0xf0, 0x09, 0xfd, 0xca, - 0x20, 0x04, 0xf7, 0xff, 0xfc, 0x23, 0x48, 0x29, - 0x68, 0x80, 0x21, 0x33, 0x06, 0x49, 0x65, 0xc8, - 0x48, 0x26, 0x68, 0xc0, 0x21, 0x33, 0x06, 0x49, - 0x66, 0x08, 0x48, 0x25, 0x68, 0x01, 0x23, 0x02, - 0x43, 0x19, 0x60, 0x01, 0x20, 0x01, 0x21, 0x33, - 0x06, 0x49, 0x67, 0xc8, 0x48, 0x21, 0x68, 0x01, - 0x31, 0xff, 0x31, 0xff, 0x31, 0x02, 0x60, 0x01, - 0x1c, 0x78, 0x12, 0x00, 0xab, 0x01, 0x70, 0x18, - 0x1c, 0x78, 0xab, 0x01, 0x70, 0x58, 0x20, 0x33, - 0x06, 0x40, 0x6d, 0xc5, 0x4b, 0x1a, 0x43, 0x1d, - 0x26, 0x00, 0x2e, 0x10, 0xdb, 0x02, 0xe0, 0x18, - 0x36, 0x01, 0xe7, 0xfa, 0x24, 0x00, 0x2c, 0x07, - 0xd3, 0x02, 0xe0, 0x06, 0x34, 0x01, 0xe7, 0xfa, - 0x46, 0x68, 0x5d, 0x01, 0x70, 0x29, 0x35, 0x01, - 0xe7, 0xf8, 0x24, 0x00, 0x42, 0xbc, 0xdb, 0x02, - 0xe0, 0x06, 0x34, 0x01, 0xe7, 0xfa, 0x98, 0x02, - 0x5d, 0x01, 0x70, 0x29, 0x35, 0x01, 0xe7, 0xf8, - 0xe7, 0xe6, 0x20, 0x33, 0x06, 0x40, 0x66, 0x05, - 0x48, 0x0a, 0x68, 0x01, 0x23, 0x01, 0x05, 0x5b, - 0x43, 0x19, 0x60, 0x01, 0xb0, 0x02, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x03, 0xa8, 0x70, 0x2e, 0x08, 0xb9, 0x88, - 0x66, 0x00, 0x00, 0x70, 0x66, 0x00, 0x00, 0x5c, - 0xcc, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x20, - 0xb5, 0xf7, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x20, - 0x0e, 0x00, 0x06, 0x3d, 0x0e, 0x2d, 0x99, 0x02, - 0x06, 0x0a, 0x0e, 0x12, 0x21, 0x02, 0x40, 0x01, - 0xd0, 0x04, 0x21, 0xff, 0x4b, 0x2f, 0x68, 0x1b, - 0x72, 0x19, 0xe0, 0x0c, 0x49, 0x2d, 0x68, 0x09, - 0x7a, 0x09, 0x29, 0xff, 0xd1, 0x03, 0x21, 0x00, - 0x4b, 0x2a, 0x68, 0x1b, 0x60, 0x19, 0x21, 0x00, - 0x4b, 0x28, 0x68, 0x1b, 0x72, 0x19, 0x07, 0xc1, - 0x0f, 0xc9, 0xd0, 0x04, 0x21, 0xff, 0x4b, 0x25, - 0x68, 0x1b, 0x72, 0x59, 0xe0, 0x0c, 0x49, 0x23, - 0x68, 0x09, 0x7a, 0x49, 0x29, 0xff, 0xd1, 0x03, - 0x21, 0x00, 0x4b, 0x20, 0x68, 0x1b, 0x60, 0x59, - 0x21, 0x00, 0x4b, 0x1e, 0x68, 0x1b, 0x72, 0x59, - 0x2d, 0x01, 0xd1, 0x0f, 0x49, 0x1c, 0x68, 0x0e, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x9e, 0x1c, 0x33, - 0x60, 0x0b, 0x49, 0x1a, 0x68, 0x09, 0x78, 0x09, - 0x23, 0x02, 0x43, 0x19, 0x4b, 0x17, 0x68, 0x1b, - 0x70, 0x19, 0xe0, 0x0e, 0x49, 0x14, 0x68, 0x0e, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x33, 0x60, 0x0b, - 0x49, 0x12, 0x68, 0x09, 0x78, 0x09, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x19, 0x4b, 0x0f, 0x68, 0x1b, - 0x70, 0x19, 0x49, 0x0f, 0x62, 0x4a, 0x2a, 0x01, - 0xd1, 0x08, 0x49, 0x0c, 0x68, 0x09, 0x78, 0x09, - 0x23, 0x01, 0x43, 0x19, 0x4b, 0x09, 0x68, 0x1b, - 0x70, 0x19, 0xe0, 0x07, 0x49, 0x07, 0x68, 0x09, - 0x78, 0x09, 0x08, 0x49, 0x00, 0x49, 0x4b, 0x05, - 0x68, 0x1b, 0x70, 0x19, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x9b, 0xc0, - 0x6c, 0x00, 0x00, 0x20, 0x2e, 0x08, 0x9b, 0xc4, - 0xcc, 0x00, 0x0f, 0x80, 0xb4, 0x80, 0x1c, 0x07, - 0x1c, 0x0a, 0x68, 0x38, 0x49, 0x23, 0x68, 0x09, - 0x60, 0xc8, 0x68, 0x78, 0x49, 0x21, 0x68, 0x09, - 0x61, 0x08, 0x68, 0xb8, 0x49, 0x1f, 0x68, 0x09, - 0x61, 0x48, 0x68, 0xf8, 0x49, 0x1d, 0x68, 0x09, - 0x61, 0x88, 0x7d, 0x38, 0x49, 0x1b, 0x68, 0x09, - 0x31, 0x20, 0x70, 0x08, 0x7d, 0x78, 0x49, 0x19, - 0x68, 0x09, 0x31, 0x20, 0x70, 0x48, 0x69, 0x38, - 0x49, 0x16, 0x68, 0x09, 0x61, 0xc8, 0x7d, 0xb8, - 0x49, 0x14, 0x68, 0x09, 0x31, 0x20, 0x70, 0x88, - 0x68, 0x10, 0x49, 0x12, 0x68, 0x09, 0x62, 0x48, - 0x68, 0x50, 0x49, 0x10, 0x68, 0x09, 0x62, 0x88, - 0x68, 0x90, 0x49, 0x0e, 0x68, 0x09, 0x62, 0xc8, - 0x68, 0xd0, 0x49, 0x0c, 0x68, 0x09, 0x63, 0x08, - 0x7d, 0x10, 0x49, 0x0a, 0x68, 0x09, 0x31, 0x20, - 0x76, 0x08, 0x7d, 0x50, 0x49, 0x07, 0x68, 0x09, - 0x31, 0x20, 0x76, 0x48, 0x69, 0x10, 0x49, 0x05, - 0x68, 0x09, 0x63, 0x48, 0x7d, 0x90, 0x49, 0x03, - 0x68, 0x09, 0x31, 0x20, 0x76, 0x88, 0xbc, 0x80, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc0, - 0x1c, 0x02, 0x1c, 0x0b, 0x48, 0x03, 0x68, 0x00, - 0x60, 0x02, 0x48, 0x02, 0x68, 0x00, 0x60, 0x43, - 0x47, 0x70, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc0, - 0xb5, 0xf3, 0xb0, 0x88, 0x98, 0x08, 0x68, 0x04, - 0x20, 0x01, 0x90, 0x06, 0x20, 0x01, 0x90, 0x05, - 0x48, 0x8c, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x19, - 0x48, 0x8a, 0x68, 0x00, 0x38, 0x01, 0x49, 0x89, - 0x60, 0x08, 0x48, 0x88, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x10, 0x48, 0x87, 0x78, 0x80, 0x90, 0x00, - 0x98, 0x00, 0x00, 0xc0, 0x49, 0x85, 0x68, 0x09, - 0x58, 0x08, 0x23, 0xff, 0x33, 0x01, 0x43, 0x98, - 0x1c, 0x01, 0x98, 0x00, 0x00, 0xc0, 0x4a, 0x81, - 0x68, 0x12, 0x50, 0x11, 0x20, 0x33, 0x06, 0x40, - 0x6e, 0x00, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc1, - 0x91, 0x02, 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, 0x90, 0x01, - 0x48, 0x79, 0x68, 0x00, 0x42, 0x84, 0xd1, 0x73, - 0x98, 0x01, 0x1d, 0xc7, 0x37, 0x01, 0x78, 0x38, - 0x18, 0x38, 0x1c, 0x47, 0x48, 0x75, 0x6c, 0xc0, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, 0x42, 0xb8, - 0xd9, 0x19, 0x78, 0x38, 0x28, 0xff, 0xd1, 0x12, - 0x78, 0x78, 0x23, 0xf0, 0x40, 0x18, 0x28, 0xf0, - 0xd1, 0x0d, 0x78, 0xb8, 0x10, 0x80, 0x07, 0x80, - 0x0f, 0x80, 0x06, 0x00, 0x16, 0x00, 0x90, 0x06, - 0x78, 0x78, 0x10, 0xc0, 0x07, 0xc0, 0x09, 0xc0, - 0x16, 0x00, 0x90, 0x05, 0xe0, 0x03, 0x21, 0x01, - 0x70, 0x39, 0x18, 0x7f, 0xe7, 0xde, 0x21, 0x40, - 0x91, 0x03, 0x25, 0x20, 0x21, 0x14, 0x91, 0x07, - 0x98, 0x06, 0x28, 0x00, 0xd1, 0x02, 0x25, 0x23, - 0x21, 0x12, 0x91, 0x07, 0x98, 0x06, 0x28, 0x02, - 0xd1, 0x02, 0x25, 0x30, 0x21, 0x18, 0x91, 0x07, - 0x98, 0x05, 0x28, 0x00, 0xd1, 0x02, 0x00, 0x6d, - 0x21, 0x70, 0x91, 0x03, 0x99, 0x03, 0x00, 0x48, - 0x99, 0x02, 0x1a, 0x08, 0x90, 0x04, 0x98, 0x04, - 0x99, 0x02, 0x42, 0x88, 0xd3, 0x05, 0xe0, 0x4e, - 0x98, 0x04, 0x99, 0x03, 0x18, 0x40, 0x90, 0x04, - 0xe7, 0xf5, 0x9f, 0x04, 0x21, 0x00, 0x70, 0x39, - 0x37, 0x01, 0x21, 0x00, 0x70, 0x39, 0x37, 0x01, - 0x21, 0x01, 0x70, 0x39, 0x18, 0x7f, 0x21, 0xc0, - 0x70, 0x39, 0x37, 0x01, 0x21, 0x00, 0x70, 0x39, - 0x37, 0x01, 0x21, 0x3a, 0x70, 0x39, 0x37, 0x01, - 0x21, 0x80, 0x70, 0x39, 0x37, 0x01, 0x21, 0x00, - 0x70, 0x39, 0x37, 0x01, 0x99, 0x03, 0x1f, 0xc8, - 0x38, 0x02, 0x1b, 0x41, 0x70, 0x39, 0x37, 0x01, - 0x26, 0x00, 0x99, 0x03, 0x1f, 0xc8, 0x38, 0x02, - 0x1b, 0x40, 0x42, 0xb0, 0xdc, 0x04, 0xe0, 0x00, - 0xe0, 0x34, 0xe0, 0x05, 0x36, 0x01, 0xe7, 0xf4, - 0x21, 0xff, 0x70, 0x39, 0x37, 0x01, 0xe7, 0xf9, - 0x21, 0xff, 0x70, 0x39, 0x37, 0x01, 0x98, 0x05, - 0x00, 0xc0, 0x21, 0xf7, 0x43, 0x01, 0x70, 0x39, - 0x37, 0x01, 0x99, 0x07, 0x70, 0x39, 0x37, 0x01, - 0x21, 0xc0, 0x70, 0x39, 0x37, 0x01, 0x26, 0x00, - 0x1f, 0x28, 0x42, 0xb0, 0xdc, 0x02, 0xe0, 0x05, - 0x36, 0x01, 0xe7, 0xf9, 0x21, 0x00, 0x70, 0x39, - 0x37, 0x01, 0xe7, 0xf9, 0xe7, 0xb0, 0x99, 0x03, - 0x00, 0x48, 0x99, 0x02, 0x1a, 0x08, 0x23, 0x0d, - 0x06, 0x9b, 0x18, 0xc0, 0x49, 0x29, 0x64, 0x88, - 0x99, 0x09, 0x20, 0x78, 0x40, 0x08, 0x23, 0x02, - 0x43, 0x18, 0xf7, 0xff, 0xfa, 0x17, 0x20, 0x01, - 0xf7, 0xff, 0xfa, 0x14, 0x48, 0x22, 0x68, 0x00, - 0x38, 0x02, 0x42, 0xa0, 0xd1, 0x09, 0x48, 0x22, - 0x68, 0x01, 0x23, 0x01, 0x05, 0x5b, 0x43, 0x19, - 0x60, 0x01, 0x20, 0xff, 0x49, 0x1f, 0x68, 0x09, - 0x70, 0x08, 0x48, 0x1b, 0x68, 0x00, 0x38, 0x02, - 0x42, 0xa0, 0xd3, 0x0f, 0x48, 0x1c, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x05, 0x48, 0x1a, 0x68, 0x00, - 0x23, 0x01, 0x06, 0x9b, 0x40, 0x18, 0xd0, 0x05, - 0x20, 0x32, 0x49, 0x13, 0x60, 0x08, 0x48, 0x12, - 0x68, 0x00, 0x1e, 0x84, 0x2c, 0x01, 0xd1, 0x02, - 0x20, 0x02, 0xf7, 0xff, 0xf9, 0xeb, 0x2c, 0xff, - 0xd1, 0x08, 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, - 0x30, 0xbc, 0x49, 0x0c, 0x6c, 0xc9, 0x42, 0x88, - 0xd2, 0x00, 0x24, 0x18, 0x2c, 0x00, 0xd0, 0x02, - 0x2c, 0xff, 0xd0, 0x00, 0x3c, 0x01, 0x98, 0x08, - 0x60, 0x04, 0xb0, 0x08, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x9b, 0xb0, - 0x2e, 0x08, 0x9b, 0x9c, 0x2e, 0x08, 0x9b, 0x3c, - 0x2e, 0x08, 0x1f, 0x98, 0x66, 0x00, 0x00, 0x80, - 0x6c, 0x00, 0x00, 0x20, 0x2e, 0x08, 0x9b, 0x98, - 0x6c, 0x00, 0x08, 0x00, 0xb5, 0xff, 0x1c, 0x04, - 0x1c, 0x0f, 0x9a, 0x02, 0x06, 0x15, 0x0e, 0x2d, - 0x9b, 0x03, 0x06, 0x1e, 0x0e, 0x36, 0x2e, 0x20, - 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2d, 0x1f, 0xdb, 0x01, - 0x20, 0xaf, 0xe7, 0xf7, 0x20, 0x01, 0x03, 0x40, - 0xf7, 0xff, 0xf9, 0xac, 0x20, 0x14, 0x49, 0x09, - 0x60, 0x08, 0x20, 0xff, 0x60, 0x20, 0x1c, 0x33, - 0x1c, 0x29, 0x1c, 0x38, 0x22, 0x02, 0xf7, 0xfc, - 0xfa, 0x4b, 0x48, 0x05, 0x68, 0x01, 0x23, 0x01, - 0x05, 0x5b, 0x43, 0x19, 0x60, 0x01, 0x20, 0x00, - 0xe7, 0xe0, 0xe7, 0xdf, 0x2e, 0x08, 0x1f, 0x98, - 0x6c, 0x00, 0x00, 0x20, 0xb4, 0x0f, 0xb5, 0xf0, - 0x1c, 0x07, 0xb0, 0x82, 0x20, 0x00, 0x49, 0x16, - 0x60, 0x08, 0x48, 0x16, 0x6f, 0x80, 0x23, 0x09, - 0x01, 0x9b, 0x42, 0x98, 0xd1, 0x02, 0x20, 0xe1, - 0x00, 0xc0, 0xe0, 0x00, 0x48, 0x12, 0x1c, 0x05, - 0x68, 0x38, 0x28, 0xff, 0xd1, 0x17, 0x98, 0x0d, - 0x90, 0x00, 0x98, 0x0c, 0x90, 0x01, 0x98, 0x01, - 0x99, 0x00, 0x1a, 0x46, 0x08, 0x68, 0x19, 0x81, - 0x1c, 0x28, 0xf0, 0x09, 0xfa, 0xeb, 0x1c, 0x04, - 0x34, 0x01, 0x0f, 0xf0, 0x07, 0xc0, 0xd0, 0x00, - 0x24, 0x04, 0x2c, 0x32, 0xd9, 0x00, 0x24, 0x04, - 0x1d, 0xe0, 0x30, 0x0d, 0x60, 0x38, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0xb0, 0x04, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0xb0, 0xcc, 0x00, 0x0f, 0x80, - 0x00, 0x00, 0x05, 0xdd, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x99, 0x02, 0x06, 0x09, 0x0e, 0x09, - 0x91, 0x00, 0xb0, 0x82, 0x99, 0x02, 0x29, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x03, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x99, 0x02, - 0x00, 0x88, 0x49, 0x2f, 0x58, 0x08, 0x90, 0x01, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x03, - 0xe7, 0xf1, 0x20, 0x00, 0x70, 0x78, 0x78, 0xb8, - 0x07, 0x00, 0x0f, 0x00, 0x90, 0x00, 0x98, 0x00, - 0x28, 0x04, 0xd1, 0x1f, 0x6a, 0xfe, 0x24, 0x00, - 0x2c, 0x08, 0xdb, 0x04, 0xe0, 0x18, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf8, 0x00, 0xa0, - 0x19, 0x80, 0x68, 0x40, 0x00, 0xa1, 0x19, 0x89, - 0x64, 0x48, 0x21, 0x00, 0x00, 0xa0, 0x19, 0x80, - 0x62, 0x41, 0x00, 0xa0, 0x19, 0x80, 0x6c, 0x40, - 0x28, 0x00, 0xd0, 0x04, 0x20, 0x80, 0x41, 0x20, - 0x88, 0x31, 0x43, 0x08, 0x80, 0x30, 0xe7, 0xe6, - 0x88, 0x30, 0x80, 0x70, 0x78, 0xb8, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x1f, 0x6b, 0x3d, 0x20, 0x00, - 0x60, 0x28, 0x20, 0x00, 0x60, 0x68, 0x20, 0x00, - 0x60, 0xa8, 0x24, 0x00, 0x2c, 0x08, 0xdb, 0x04, - 0xe0, 0x0c, 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, - 0xe7, 0xf8, 0x20, 0x00, 0x00, 0xa1, 0x19, 0x49, - 0x60, 0xc8, 0x20, 0x00, 0x00, 0xa1, 0x19, 0x49, - 0x63, 0x88, 0xe7, 0xf2, 0x20, 0x00, 0x62, 0xe8, - 0x20, 0x00, 0x63, 0x28, 0x20, 0x00, 0x63, 0x68, - 0x20, 0x00, 0x65, 0xa8, 0x99, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x3e, 0xb0, 0x03, 0xe7, 0x9e, - 0xb0, 0x02, 0xb0, 0x01, 0xe7, 0x9b, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0xf3, 0x1c, 0x07, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0xb0, 0x82, - 0x2c, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x02, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xa0, 0x49, 0x12, 0x58, 0x08, 0x1c, 0x05, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x02, 0xe7, 0xf3, - 0x1c, 0x21, 0x1c, 0x38, 0xf0, 0x00, 0xf9, 0x84, - 0x1c, 0x06, 0xd0, 0x02, 0x1c, 0x30, 0xb0, 0x02, - 0xe7, 0xea, 0x78, 0x68, 0x21, 0x20, 0x40, 0x01, - 0x91, 0x00, 0x99, 0x00, 0x1c, 0x38, 0xf0, 0x00, - 0xff, 0x3f, 0x68, 0xe9, 0x91, 0x01, 0x29, 0x00, - 0xd0, 0x03, 0x99, 0x01, 0x1c, 0x38, 0xf0, 0x03, - 0xfe, 0x7a, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xd7, - 0xb0, 0x02, 0xe7, 0xd5, 0x2e, 0x08, 0x9b, 0xc8, - 0xb5, 0xf3, 0x1c, 0x02, 0x99, 0x01, 0x06, 0x0f, - 0x0e, 0x3f, 0xb0, 0x86, 0x00, 0xb8, 0x4b, 0xa1, - 0x68, 0x1b, 0x18, 0xc0, 0x90, 0x00, 0x2f, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0xb8, - 0x4b, 0x9b, 0x58, 0x18, 0x90, 0x05, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x06, 0xe7, 0xf2, - 0x78, 0x90, 0x90, 0x01, 0x71, 0xd7, 0x78, 0xd1, - 0x98, 0x01, 0x23, 0x80, 0x40, 0x18, 0xd1, 0x73, - 0x29, 0x20, 0xdd, 0x02, 0x20, 0xb1, 0xb0, 0x06, - 0xe7, 0xe5, 0x48, 0x92, 0x68, 0x00, 0x23, 0x01, - 0x42, 0xd8, 0xd1, 0x02, 0x20, 0xb2, 0xb0, 0x06, - 0xe7, 0xdd, 0x20, 0x01, 0x40, 0x88, 0x4b, 0x8d, - 0x68, 0x1b, 0x40, 0x18, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0xd4, 0x00, 0x88, 0x4b, 0x8a, - 0x50, 0x1a, 0x48, 0x8a, 0x54, 0x47, 0x01, 0x08, - 0x4b, 0x89, 0x18, 0xc5, 0x7f, 0x10, 0x06, 0x00, - 0x7f, 0x53, 0x04, 0x1b, 0x43, 0x18, 0x7f, 0x93, - 0x02, 0x1b, 0x43, 0x18, 0x7f, 0xd3, 0x43, 0x03, - 0xc5, 0x08, 0x1d, 0xd0, 0x30, 0x19, 0x78, 0x00, - 0x06, 0x00, 0x1d, 0xd3, 0x33, 0x19, 0x78, 0x5b, - 0x04, 0x1b, 0x43, 0x18, 0x1d, 0xd3, 0x33, 0x19, - 0x78, 0x9b, 0x02, 0x1b, 0x43, 0x18, 0x1d, 0xd3, - 0x33, 0x19, 0x78, 0xdb, 0x43, 0x03, 0xc5, 0x08, - 0x01, 0x08, 0x4b, 0x7a, 0x18, 0xc4, 0x7b, 0x10, - 0x06, 0x00, 0x7b, 0x53, 0x04, 0x1b, 0x43, 0x18, - 0x7b, 0x93, 0x02, 0x1b, 0x43, 0x18, 0x7b, 0xd3, - 0x43, 0x03, 0xc4, 0x08, 0x7c, 0x10, 0x06, 0x00, - 0x7c, 0x53, 0x04, 0x1b, 0x43, 0x18, 0x7c, 0x93, - 0x02, 0x1b, 0x43, 0x18, 0x7c, 0xd3, 0x43, 0x03, - 0xc4, 0x08, 0x98, 0x01, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x20, 0x1d, 0xd0, 0x30, 0x19, 0x79, 0x00, - 0x06, 0x00, 0x1d, 0xd3, 0x33, 0x19, 0x79, 0x5b, - 0x04, 0x1b, 0x43, 0x18, 0x1d, 0xd3, 0x33, 0x19, - 0x79, 0x9b, 0x02, 0x1b, 0x43, 0x18, 0x1d, 0xd3, - 0x33, 0x19, 0x79, 0xdb, 0x43, 0x03, 0xc5, 0x08, - 0x7d, 0x10, 0x06, 0x00, 0x7d, 0x53, 0x04, 0x1b, - 0x43, 0x18, 0x7d, 0x93, 0x02, 0x1b, 0xe0, 0x00, - 0xe0, 0x42, 0x43, 0x18, 0x7d, 0xd3, 0x43, 0x03, - 0xc4, 0x08, 0xe0, 0x03, 0x23, 0x00, 0xc5, 0x08, - 0x23, 0x00, 0xc4, 0x08, 0x23, 0xff, 0xc5, 0x08, - 0x20, 0x19, 0x06, 0x80, 0x6b, 0x00, 0x23, 0x08, - 0x40, 0x18, 0xd0, 0x06, 0x88, 0x90, 0x04, 0x00, - 0x19, 0xc3, 0x93, 0x02, 0x9b, 0x02, 0xc4, 0x08, - 0xe0, 0x00, 0xc4, 0x80, 0x98, 0x01, 0x23, 0x08, - 0x40, 0x18, 0xd0, 0x17, 0x48, 0x50, 0x5d, 0xc0, - 0x30, 0x01, 0x4b, 0x4f, 0x55, 0xd8, 0x7a, 0x10, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x04, 0x20, 0x01, - 0x40, 0x88, 0x23, 0x19, 0x06, 0x9b, 0x61, 0x18, - 0x7a, 0x10, 0x23, 0x02, 0x40, 0x18, 0xd0, 0x04, - 0x20, 0x01, 0x40, 0x88, 0x23, 0x19, 0x06, 0x9b, - 0x61, 0x58, 0xe0, 0x05, 0x4e, 0x45, 0x20, 0x01, - 0x40, 0x88, 0x68, 0x33, 0x43, 0x18, 0x60, 0x30, - 0x20, 0x01, 0x40, 0x88, 0x4b, 0x3b, 0x68, 0x1b, - 0x43, 0x18, 0x4b, 0x3a, 0x60, 0x18, 0xe0, 0x4f, - 0x98, 0x01, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x48, - 0x48, 0x3d, 0x88, 0x00, 0x4b, 0x3d, 0x42, 0x98, - 0xd1, 0x02, 0x20, 0xb2, 0xb0, 0x06, 0xe7, 0x26, - 0x00, 0x88, 0x4b, 0x3b, 0x58, 0x18, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x1e, - 0x29, 0x10, 0xdb, 0x02, 0x20, 0xb1, 0xb0, 0x06, - 0xe7, 0x19, 0x20, 0x01, 0x40, 0x88, 0x4b, 0x32, - 0x88, 0x1b, 0x40, 0x18, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0x10, 0x98, 0x05, 0x78, 0x80, - 0x28, 0x02, 0xdb, 0x02, 0x20, 0xb1, 0xb0, 0x06, - 0xe7, 0x09, 0x00, 0x88, 0x4b, 0x2c, 0x50, 0x1a, - 0x48, 0x2c, 0x54, 0x47, 0x00, 0xf8, 0x1b, 0xc0, - 0x00, 0x80, 0x4b, 0x2b, 0x68, 0x1b, 0x18, 0xc0, - 0x90, 0x04, 0x98, 0x04, 0x7e, 0x00, 0x28, 0xff, - 0xd1, 0x02, 0x98, 0x04, 0x76, 0x01, 0xe0, 0x01, - 0x98, 0x04, 0x76, 0x41, 0x4e, 0x25, 0x96, 0x03, - 0x1d, 0xd3, 0x33, 0x05, 0x00, 0x88, 0x9e, 0x03, - 0x50, 0x33, 0x20, 0x01, 0x40, 0x88, 0x4b, 0x1c, - 0x88, 0x1b, 0x43, 0x18, 0x4b, 0x1a, 0x80, 0x18, - 0xe0, 0x02, 0x20, 0xb1, 0xb0, 0x06, 0xe6, 0xe2, - 0x78, 0x50, 0x23, 0x80, 0x43, 0xdb, 0x40, 0x18, - 0x70, 0x50, 0x98, 0x05, 0x78, 0x80, 0x28, 0x00, - 0xd1, 0x09, 0x98, 0x00, 0x68, 0x00, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x18, 0x9b, 0x00, 0x60, 0x18, - 0x20, 0x02, 0x9b, 0x05, 0x70, 0xd8, 0x98, 0x05, - 0x78, 0x80, 0x30, 0x01, 0x9b, 0x05, 0x70, 0x98, - 0x20, 0x00, 0xb0, 0x06, 0xe6, 0xc7, 0xb0, 0x06, - 0xe6, 0xc5, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9c, 0x48, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9d, 0x10, - 0x64, 0x00, 0x10, 0x00, 0x64, 0x00, 0x08, 0x00, - 0x2e, 0x08, 0xb9, 0x60, 0x64, 0x00, 0x00, 0x18, - 0x2e, 0x08, 0x9c, 0x4c, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9b, 0x30, 0x9e, 0x00, 0x04, 0xb8, - 0xb5, 0xf3, 0x1c, 0x02, 0x99, 0x01, 0x06, 0x0f, - 0x0e, 0x3f, 0xb0, 0x86, 0x00, 0xb8, 0x4b, 0x65, - 0x68, 0x1b, 0x18, 0xc0, 0x90, 0x01, 0x2f, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0xb8, - 0x4b, 0x5f, 0x58, 0x18, 0x1c, 0x05, 0xd1, 0x02, - 0x20, 0xb0, 0xb0, 0x06, 0xe7, 0xf3, 0x78, 0x90, - 0x90, 0x03, 0x78, 0xd1, 0x00, 0x88, 0x4b, 0x5b, - 0x58, 0x18, 0x42, 0x90, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0xe8, 0x98, 0x03, 0x23, 0x80, - 0x40, 0x18, 0xd1, 0x49, 0x01, 0x08, 0x4b, 0x56, - 0x18, 0xc3, 0x93, 0x00, 0x20, 0x00, 0x9b, 0x00, - 0x60, 0x18, 0x23, 0x00, 0x00, 0x88, 0x4e, 0x51, - 0x50, 0x33, 0x23, 0xff, 0x48, 0x51, 0x54, 0x43, - 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, 0x4b, 0x50, - 0x68, 0x1b, 0x40, 0x18, 0x4b, 0x4e, 0x60, 0x18, - 0x98, 0x03, 0x23, 0x08, 0x40, 0x18, 0xd0, 0x27, - 0x20, 0x01, 0x40, 0x88, 0x90, 0x04, 0x7a, 0x10, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x0b, 0x98, 0x04, - 0x23, 0x19, 0x06, 0x9b, 0x69, 0x1b, 0x40, 0x18, - 0xd0, 0x04, 0x98, 0x04, 0x23, 0x19, 0x06, 0x9b, - 0x61, 0x18, 0xe7, 0xf4, 0xe0, 0x0e, 0x7a, 0x10, - 0x23, 0x02, 0x40, 0x18, 0xd0, 0x0a, 0x98, 0x04, - 0x23, 0x19, 0x06, 0x9b, 0x69, 0x5b, 0x40, 0x18, - 0xd0, 0x04, 0x98, 0x04, 0x23, 0x19, 0x06, 0x9b, - 0x61, 0x58, 0xe7, 0xf4, 0x48, 0x3b, 0x5d, 0xc0, - 0x38, 0x01, 0x4b, 0x3a, 0x55, 0xd8, 0xe0, 0x06, - 0x4e, 0x39, 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, - 0x68, 0x33, 0x40, 0x18, 0x60, 0x30, 0xe0, 0x36, - 0x98, 0x03, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x2f, - 0x00, 0xf8, 0x1b, 0xc0, 0x00, 0x80, 0x4b, 0x33, - 0x68, 0x1b, 0x18, 0xc3, 0x93, 0x02, 0x9b, 0x02, - 0x7e, 0x18, 0x42, 0x88, 0xd1, 0x03, 0x20, 0xff, - 0x9b, 0x02, 0x76, 0x18, 0xe0, 0x0a, 0x9b, 0x02, - 0x7e, 0x58, 0x42, 0x88, 0xd1, 0x03, 0x20, 0xff, - 0x9b, 0x02, 0x76, 0x58, 0xe0, 0x02, 0x20, 0xb1, - 0xb0, 0x06, 0xe7, 0x7c, 0x23, 0x00, 0x00, 0x88, - 0x4e, 0x27, 0x50, 0x33, 0x20, 0xff, 0x4b, 0x27, - 0x54, 0x58, 0x20, 0x01, 0x40, 0x88, 0x43, 0xc0, - 0x4b, 0x25, 0x88, 0x1b, 0x40, 0x18, 0x4b, 0x24, - 0x80, 0x18, 0x4e, 0x24, 0x96, 0x05, 0x23, 0x00, - 0x00, 0x88, 0x9e, 0x05, 0x50, 0x33, 0xe0, 0x02, - 0x20, 0xb1, 0xb0, 0x06, 0xe7, 0x63, 0x78, 0xa8, - 0x38, 0x01, 0x70, 0xa8, 0x78, 0x50, 0x23, 0x80, - 0x43, 0x18, 0x70, 0x50, 0x78, 0xa8, 0x28, 0x00, - 0xd1, 0x07, 0x98, 0x01, 0x68, 0x00, 0x4b, 0x1a, - 0x40, 0x18, 0x9b, 0x01, 0x60, 0x18, 0x20, 0x01, - 0x70, 0xe8, 0x24, 0x1f, 0x2c, 0x00, 0xd1, 0x02, - 0xe0, 0x0a, 0x3c, 0x01, 0xe7, 0xfa, 0x48, 0x0d, - 0x5d, 0x00, 0x28, 0x00, 0xd1, 0x03, 0x20, 0x19, - 0x06, 0x80, 0x64, 0xc4, 0xe0, 0x00, 0xe7, 0xf4, - 0x20, 0x00, 0xb0, 0x06, 0xe7, 0x3f, 0xb0, 0x06, - 0xe7, 0x3d, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9c, 0x50, - 0x64, 0x00, 0x08, 0x08, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x48, 0x2e, 0x08, 0xb9, 0x60, - 0x64, 0x00, 0x00, 0x18, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0x4c, 0x9e, 0x00, 0x04, 0xb8, - 0xff, 0xff, 0xdf, 0xff, 0x1c, 0x03, 0x1c, 0x0a, - 0x78, 0x58, 0x70, 0x10, 0x20, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0xb5, 0xf7, 0x1c, 0x07, 0xb0, 0x81, - 0x9a, 0x03, 0x06, 0x10, 0x0e, 0x00, 0x90, 0x00, - 0xb0, 0x87, 0x78, 0x78, 0x23, 0x80, 0x40, 0x18, - 0xd0, 0x4c, 0x78, 0x78, 0x23, 0x80, 0x40, 0x18, - 0xd0, 0x48, 0x78, 0xb8, 0x90, 0x06, 0x99, 0x09, - 0x78, 0x88, 0x90, 0x05, 0x98, 0x06, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x3f, 0x98, 0x05, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x3b, 0x6b, 0x38, 0x90, 0x01, - 0x99, 0x09, 0x6b, 0x08, 0x90, 0x00, 0x98, 0x01, - 0x28, 0x00, 0xd1, 0x02, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd1, 0x05, 0x20, 0xb6, 0xb0, 0x08, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x01, 0x68, 0x05, 0x98, 0x00, 0x68, 0x04, - 0x7a, 0x2e, 0x7a, 0x21, 0x91, 0x04, 0x7d, 0x6a, - 0x92, 0x03, 0x7d, 0x62, 0x92, 0x02, 0x98, 0x07, - 0x28, 0x00, 0xd0, 0x0a, 0x9a, 0x02, 0x99, 0x04, - 0x1c, 0x28, 0xf0, 0x00, 0xfc, 0xe5, 0x9a, 0x03, - 0x1c, 0x31, 0x1c, 0x20, 0xf0, 0x00, 0xfc, 0xe0, - 0xe0, 0x09, 0x99, 0x04, 0x1c, 0x28, 0x22, 0x00, - 0xf0, 0x00, 0xfc, 0xda, 0x1c, 0x31, 0x1c, 0x20, - 0x22, 0x00, 0xf0, 0x00, 0xfc, 0xd5, 0x20, 0x00, - 0xb0, 0x08, 0xe7, 0xd5, 0x20, 0xb1, 0xb0, 0x08, - 0xe7, 0xd2, 0xb0, 0x07, 0xb0, 0x01, 0xe7, 0xcf, - 0xb4, 0xf0, 0x1c, 0x02, 0x1c, 0x0b, 0x06, 0x1d, - 0x0e, 0x2d, 0xb0, 0x82, 0x2d, 0x00, 0xd1, 0x0a, - 0x48, 0x1a, 0x69, 0x00, 0x90, 0x01, 0x49, 0x1a, - 0x48, 0x18, 0x69, 0x40, 0x90, 0x00, 0x48, 0x17, - 0x6a, 0x00, 0x1e, 0x44, 0xe0, 0x10, 0x2d, 0x20, - 0xd1, 0x0a, 0x48, 0x14, 0x69, 0x80, 0x90, 0x01, - 0x49, 0x14, 0x48, 0x12, 0x69, 0xc0, 0x90, 0x00, - 0x48, 0x10, 0x6a, 0x40, 0x1e, 0x44, 0xe0, 0x03, - 0x20, 0xb3, 0xb0, 0x02, 0xbc, 0xf0, 0x47, 0x70, - 0x20, 0x00, 0x70, 0x10, 0x78, 0x50, 0x00, 0x80, - 0x4e, 0x0d, 0x58, 0x37, 0x69, 0x38, 0x61, 0x78, - 0x98, 0x01, 0x9e, 0x00, 0x42, 0xb0, 0xd0, 0x07, - 0x98, 0x01, 0x30, 0x01, 0x90, 0x01, 0x98, 0x01, - 0x40, 0x20, 0x90, 0x01, 0x98, 0x01, 0x60, 0x08, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xe6, 0xb0, 0x02, - 0xe7, 0xe4, 0x00, 0x00, 0x9e, 0x00, 0x04, 0x80, - 0x9e, 0x00, 0x04, 0x90, 0x9e, 0x00, 0x04, 0x98, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0xf3, 0x1c, 0x07, - 0xb0, 0x81, 0x99, 0x02, 0x06, 0x08, 0x0e, 0x00, - 0x90, 0x00, 0xb0, 0x88, 0x98, 0x08, 0x28, 0x00, - 0xd1, 0x0e, 0x49, 0x69, 0x91, 0x02, 0x48, 0x69, - 0x69, 0x00, 0x90, 0x07, 0x48, 0x68, 0x90, 0x06, - 0x48, 0x66, 0x69, 0x40, 0x90, 0x05, 0x48, 0x65, - 0x6a, 0x00, 0x1e, 0x41, 0x91, 0x04, 0xe0, 0x17, - 0x98, 0x08, 0x28, 0x20, 0xd1, 0x0e, 0x49, 0x63, - 0x91, 0x02, 0x48, 0x60, 0x69, 0x80, 0x90, 0x07, - 0x48, 0x61, 0x90, 0x06, 0x48, 0x5d, 0x69, 0xc0, - 0x90, 0x05, 0x48, 0x5c, 0x6a, 0x40, 0x1e, 0x41, - 0x91, 0x04, 0xe0, 0x05, 0x20, 0xb3, 0xb0, 0x09, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x25, 0x00, 0x98, 0x07, 0x99, 0x05, 0x42, 0x88, - 0xd0, 0x73, 0x2d, 0x00, 0xd1, 0x72, 0x98, 0x07, - 0x00, 0x80, 0x99, 0x02, 0x18, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xc0, 0x68, 0x01, 0x91, 0x03, - 0x98, 0x07, 0x00, 0x80, 0x99, 0x02, 0x58, 0x08, - 0x90, 0x01, 0x99, 0x02, 0x98, 0x07, 0x18, 0x08, - 0x23, 0x01, 0x02, 0xdb, 0x18, 0xc0, 0x78, 0x00, - 0x90, 0x00, 0x20, 0x00, 0x99, 0x02, 0x9a, 0x07, - 0x18, 0x89, 0x23, 0x01, 0x02, 0xdb, 0x18, 0xc9, - 0x70, 0x08, 0x98, 0x07, 0x30, 0x01, 0x90, 0x07, - 0x98, 0x07, 0x99, 0x04, 0x40, 0x08, 0x90, 0x07, - 0x99, 0x03, 0x29, 0x00, 0xd0, 0x71, 0xb0, 0x83, - 0x20, 0x00, 0x90, 0x00, 0x99, 0x06, 0x91, 0x02, - 0x20, 0x01, 0x90, 0x01, 0x98, 0x03, 0x28, 0x80, - 0xd1, 0x1f, 0x24, 0x00, 0x2c, 0x10, 0xd3, 0x02, - 0xe0, 0x1a, 0x34, 0x01, 0xe7, 0xfa, 0x98, 0x01, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x10, 0x48, 0x39, - 0x5d, 0x00, 0x28, 0xff, 0xd0, 0x0c, 0x48, 0x37, - 0x5d, 0x00, 0x90, 0x00, 0x00, 0xa0, 0x49, 0x36, - 0x58, 0x09, 0x00, 0xa8, 0x19, 0xc0, 0x61, 0x01, - 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0xe0, 0x03, - 0x98, 0x01, 0x00, 0x40, 0x90, 0x01, 0xe7, 0xe4, - 0xe0, 0x1d, 0x24, 0x00, 0x2c, 0x20, 0xd3, 0x02, - 0xe0, 0x19, 0x34, 0x01, 0xe7, 0xfa, 0x98, 0x01, - 0x99, 0x02, 0x40, 0x08, 0xd0, 0x0f, 0x48, 0x2b, - 0x5d, 0x00, 0x28, 0xff, 0xd0, 0x0b, 0x48, 0x29, - 0x5d, 0x00, 0x90, 0x00, 0x00, 0xa0, 0x49, 0x28, - 0x58, 0x09, 0x00, 0xa8, 0x19, 0xc0, 0x61, 0x01, - 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x01, - 0x00, 0x40, 0x90, 0x01, 0xe7, 0xe5, 0x2d, 0x00, - 0xe0, 0x01, 0xe0, 0x27, 0xe0, 0x26, 0xd0, 0x23, - 0xb0, 0x81, 0x98, 0x01, 0x70, 0x78, 0x98, 0x05, - 0x60, 0x78, 0x98, 0x01, 0x00, 0x80, 0x49, 0x1d, - 0x58, 0x08, 0x90, 0x00, 0x98, 0x00, 0x69, 0x46, - 0x98, 0x05, 0x42, 0xb0, 0xd3, 0x04, 0x1d, 0xf0, - 0x30, 0xb9, 0x99, 0x05, 0x42, 0x88, 0xd2, 0x08, - 0x68, 0x30, 0x28, 0x00, 0xd0, 0x01, 0x68, 0x36, - 0xe0, 0x02, 0x20, 0xba, 0xb0, 0x0d, 0xe7, 0x63, - 0xe7, 0xee, 0x60, 0xbe, 0x98, 0x00, 0x61, 0x46, - 0x1c, 0x38, 0xf0, 0x00, 0xfb, 0x02, 0xb0, 0x01, - 0xb0, 0x03, 0xe7, 0x5e, 0x70, 0x3d, 0x98, 0x07, - 0x99, 0x06, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x09, - 0xe7, 0x52, 0xb0, 0x08, 0xb0, 0x01, 0xe7, 0x4f, - 0x2e, 0x08, 0x9d, 0xfc, 0x9e, 0x00, 0x04, 0x80, - 0x9e, 0x00, 0x04, 0x90, 0x2e, 0x08, 0xa6, 0xfc, - 0x9e, 0x00, 0x04, 0x98, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9b, 0xc8, - 0xb4, 0x90, 0x1c, 0x01, 0x78, 0x48, 0x00, 0x80, - 0x4c, 0x0d, 0x58, 0x23, 0x69, 0x1a, 0x68, 0x8f, - 0x42, 0xba, 0xd0, 0x12, 0x68, 0x10, 0x42, 0xb8, - 0xd0, 0x08, 0x68, 0x10, 0x28, 0x00, 0xd0, 0x01, - 0x68, 0x12, 0xe0, 0x02, 0x20, 0xba, 0xbc, 0x90, - 0x47, 0x70, 0xe7, 0xf3, 0x20, 0x00, 0x60, 0x10, - 0x69, 0x9c, 0x69, 0x18, 0x60, 0x20, 0x61, 0x1f, - 0x61, 0x9a, 0x20, 0x00, 0xe7, 0xf3, 0xe7, 0xf2, - 0x2e, 0x08, 0x9b, 0xc8, 0xb4, 0xb0, 0x1c, 0x02, - 0x1c, 0x0f, 0x78, 0x90, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x1c, 0x78, 0x90, 0x23, 0x20, 0x40, 0x18, - 0xd0, 0x18, 0x6b, 0x14, 0x68, 0x20, 0x28, 0x00, - 0xd0, 0x02, 0x1d, 0xe5, 0x35, 0x05, 0xe0, 0x01, - 0x1d, 0xe5, 0x35, 0x31, 0x21, 0x00, 0x29, 0x08, - 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x48, 0x06, 0x01, - 0x0e, 0x09, 0xe7, 0xf8, 0x00, 0x88, 0x58, 0x2b, - 0x00, 0x88, 0x50, 0x3b, 0xe7, 0xf6, 0x20, 0x00, - 0xbc, 0xb0, 0x47, 0x70, 0x20, 0xb1, 0xe7, 0xfb, - 0xe7, 0xfa, 0xb5, 0xf3, 0x1c, 0x0a, 0xb0, 0x93, - 0x20, 0x00, 0x90, 0x06, 0x98, 0x13, 0x69, 0x00, - 0x90, 0x00, 0x98, 0x00, 0x6b, 0x00, 0x90, 0x12, - 0x98, 0x00, 0x78, 0x80, 0x90, 0x05, 0x98, 0x12, - 0x68, 0x00, 0x90, 0x01, 0x28, 0x00, 0xd0, 0x03, - 0x98, 0x12, 0x30, 0x0c, 0x90, 0x09, 0xe0, 0x0e, - 0x98, 0x12, 0x6a, 0xc0, 0x90, 0x01, 0x28, 0x00, - 0xd0, 0x03, 0x98, 0x12, 0x30, 0x38, 0x90, 0x09, - 0xe0, 0x05, 0x20, 0xb1, 0xb0, 0x13, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, - 0x90, 0x06, 0x98, 0x05, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x73, 0x21, 0x00, 0x29, 0x08, 0xdb, 0x04, - 0xe0, 0x0c, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x98, 0x13, 0x30, 0x80, 0x69, 0x00, - 0x00, 0x8b, 0x58, 0xc0, 0x00, 0x8e, 0xab, 0x0a, - 0x51, 0x98, 0xe7, 0xf2, 0x9d, 0x01, 0x21, 0x00, - 0x29, 0x08, 0xdb, 0x04, 0xe0, 0xa7, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x00, 0x88, - 0xab, 0x0a, 0x58, 0x18, 0x28, 0x00, 0xd0, 0x55, - 0x20, 0x00, 0x90, 0x08, 0x48, 0x73, 0x90, 0x07, - 0x20, 0x00, 0x90, 0x02, 0x98, 0x02, 0x28, 0x20, - 0xdb, 0x06, 0xe0, 0x8d, 0x98, 0x02, 0x30, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x02, 0xe7, 0xf5, - 0x00, 0x8b, 0xa8, 0x0a, 0x58, 0xc0, 0x9b, 0x07, - 0x40, 0x18, 0x90, 0x08, 0x28, 0x00, 0xd0, 0x73, - 0x00, 0x88, 0x9b, 0x09, 0x58, 0x18, 0x9b, 0x08, - 0x40, 0x18, 0xd0, 0x6e, 0x1d, 0xec, 0x34, 0x01, - 0x27, 0x00, 0x79, 0xa0, 0x9b, 0x06, 0x42, 0x98, - 0xd0, 0x08, 0x68, 0x68, 0x1c, 0x05, 0xd1, 0x02, - 0x20, 0xba, 0xb0, 0x13, 0xe7, 0xab, 0x1d, 0xec, - 0x34, 0x01, 0xe7, 0xf2, 0x78, 0x60, 0x07, 0x00, - 0x0f, 0x00, 0x02, 0x00, 0x04, 0x07, 0x0c, 0x3f, - 0x78, 0xa0, 0x19, 0xc0, 0x30, 0x03, 0x04, 0x07, - 0x0c, 0x3f, 0x2a, 0x00, 0xd0, 0x42, 0x98, 0x13, - 0x88, 0x40, 0x42, 0xb8, 0xdb, 0x3a, 0x98, 0x13, - 0x88, 0x40, 0x1b, 0xc0, 0x9b, 0x13, 0x80, 0x58, - 0x20, 0xbc, 0x90, 0x04, 0x2f, 0x00, 0xdd, 0x30, - 0x2f, 0xbc, 0xdd, 0x1b, 0x20, 0x00, 0x90, 0x03, - 0x98, 0x03, 0x28, 0xbc, 0xdb, 0x09, 0xe0, 0x0d, - 0x98, 0x03, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0xe0, 0x01, 0xe0, 0x4c, 0xe0, 0x41, 0x90, 0x03, - 0xe7, 0xf2, 0x78, 0x23, 0x34, 0x01, 0x70, 0x13, - 0x32, 0x01, 0xe7, 0xf1, 0x1f, 0xf8, 0x38, 0xb5, - 0x04, 0x07, 0x0c, 0x3f, 0x68, 0x2d, 0x1d, 0xec, - 0x34, 0x01, 0xe0, 0x11, 0x20, 0x00, 0x90, 0x03, - 0x98, 0x03, 0x42, 0xb8, 0xdb, 0x06, 0xe0, 0x0a, - 0x98, 0x03, 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x03, 0xe7, 0xf5, 0x78, 0x23, 0x34, 0x01, - 0x70, 0x13, 0x32, 0x01, 0xe7, 0xf4, 0x27, 0x00, - 0xe7, 0xcc, 0xe0, 0x02, 0x20, 0xb7, 0xb0, 0x13, - 0xe7, 0x59, 0xe0, 0x04, 0x98, 0x13, 0x88, 0x40, - 0x19, 0xc0, 0x9b, 0x13, 0x80, 0x58, 0x00, 0x88, - 0xab, 0x0a, 0x58, 0x18, 0x9b, 0x07, 0x43, 0x98, - 0x00, 0x8e, 0xab, 0x0a, 0x51, 0x98, 0xe0, 0x01, - 0xe0, 0x01, 0xe0, 0x00, 0x9d, 0x01, 0x98, 0x06, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x06, - 0x98, 0x07, 0x08, 0x40, 0x90, 0x07, 0xe7, 0x71, - 0xe0, 0x04, 0x98, 0x06, 0x30, 0x20, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x06, 0xe7, 0x57, 0x20, 0x00, - 0xb0, 0x13, 0xe7, 0x34, 0xe0, 0x44, 0x98, 0x05, - 0x23, 0x02, 0x40, 0x18, 0xd0, 0x3b, 0x98, 0x01, - 0x1d, 0xc4, 0x34, 0x01, 0x78, 0x60, 0x07, 0x00, - 0x0f, 0x00, 0x02, 0x00, 0x04, 0x07, 0x0c, 0x3f, - 0x78, 0xa0, 0x19, 0xc0, 0x30, 0x03, 0x04, 0x07, - 0x0c, 0x3f, 0x2f, 0x00, 0xdd, 0x28, 0x2f, 0xbc, - 0xdd, 0x17, 0x21, 0x00, 0x29, 0xbc, 0xdb, 0x04, - 0xe0, 0x08, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x78, 0x23, 0x34, 0x01, 0x70, 0x13, - 0x32, 0x01, 0xe7, 0xf6, 0x1f, 0xf8, 0x38, 0xb5, - 0x04, 0x07, 0x0c, 0x3f, 0x98, 0x01, 0x68, 0x00, - 0x90, 0x01, 0x98, 0x01, 0x1d, 0xc4, 0x34, 0x01, - 0xe0, 0x0d, 0x21, 0x00, 0x42, 0xb9, 0xdb, 0x04, - 0xe0, 0x08, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x78, 0x23, 0x34, 0x01, 0x70, 0x13, - 0x32, 0x01, 0xe7, 0xf6, 0x27, 0x00, 0xe7, 0xd4, - 0x20, 0x00, 0xb0, 0x13, 0xe6, 0xf3, 0x20, 0xb1, - 0xb0, 0x13, 0xe6, 0xf0, 0xb0, 0x13, 0xe6, 0xee, - 0xe6, 0xed, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, - 0xb5, 0xf3, 0xb0, 0x84, 0x98, 0x04, 0x78, 0x40, - 0x00, 0x80, 0x49, 0x4b, 0x58, 0x08, 0x90, 0x03, - 0x28, 0x00, 0xd1, 0x05, 0x20, 0xb0, 0xb0, 0x04, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x04, 0x68, 0x86, 0x98, 0x04, 0x88, 0x47, - 0x98, 0x04, 0x68, 0x44, 0x1d, 0xf0, 0x30, 0xb9, - 0x99, 0x04, 0x68, 0x49, 0x1a, 0x45, 0x42, 0xbd, - 0xdb, 0x0c, 0x2f, 0x00, 0xdb, 0x01, 0x2f, 0xbc, - 0xdd, 0x02, 0x20, 0xba, 0xb0, 0x04, 0xe7, 0xe7, - 0x1c, 0x3a, 0x99, 0x05, 0x1c, 0x20, 0xf0, 0x00, - 0xf9, 0x29, 0xe0, 0x6b, 0x20, 0x00, 0x90, 0x00, - 0x98, 0x04, 0x78, 0x40, 0x00, 0xc3, 0x1a, 0x18, - 0x00, 0x80, 0x49, 0x36, 0x68, 0x09, 0x18, 0x40, - 0x90, 0x01, 0x98, 0x01, 0x78, 0x80, 0x90, 0x02, - 0x98, 0x02, 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x28, 0x12, 0xd1, 0x03, 0x2d, 0x0e, - 0xda, 0x01, 0x20, 0x01, 0x90, 0x00, 0x2f, 0x00, - 0xdd, 0x50, 0xb0, 0x81, 0x42, 0xaf, 0xdd, 0x0d, - 0x2d, 0x00, 0xdb, 0x01, 0x2d, 0xbc, 0xdd, 0x02, - 0x20, 0xba, 0xb0, 0x05, 0xe7, 0xbc, 0x1c, 0x2a, - 0x99, 0x06, 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0xfe, - 0x68, 0x36, 0xe0, 0x0b, 0x2f, 0x00, 0xdb, 0x01, - 0x2f, 0xbc, 0xdd, 0x02, 0x20, 0xba, 0xb0, 0x05, - 0xe7, 0xae, 0x1c, 0x3a, 0x99, 0x06, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0xf0, 0x99, 0x06, 0x19, 0x49, - 0x91, 0x06, 0x1b, 0x7f, 0x1d, 0x31, 0x91, 0x00, - 0x99, 0x00, 0x78, 0x88, 0x19, 0x84, 0x98, 0x01, - 0x28, 0x00, 0xd0, 0x20, 0x99, 0x00, 0x78, 0xc8, - 0x23, 0x80, 0x40, 0x18, 0xd1, 0x1b, 0x1d, 0xf0, - 0x30, 0xb9, 0x1b, 0x05, 0x42, 0xbd, 0xdb, 0x01, - 0x3c, 0x01, 0xe0, 0x14, 0x1c, 0x68, 0x42, 0xb8, - 0xd1, 0x11, 0x99, 0x00, 0x78, 0x88, 0x28, 0x09, - 0xdd, 0x08, 0x99, 0x00, 0x79, 0x08, 0x30, 0x09, - 0x99, 0x00, 0x78, 0x89, 0x42, 0x88, 0xd0, 0x00, - 0x3c, 0x01, 0xe0, 0x04, 0x99, 0x00, 0x78, 0x88, - 0x28, 0x09, 0xd1, 0x00, 0x3c, 0x01, 0x20, 0x00, - 0x90, 0x01, 0x1d, 0xf0, 0x30, 0xb9, 0x1b, 0x05, - 0xb0, 0x01, 0xe7, 0xac, 0x20, 0x00, 0xb0, 0x04, - 0xe7, 0x72, 0xb0, 0x04, 0xe7, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x30, - 0xb5, 0xf1, 0x98, 0x00, 0x06, 0x04, 0x0e, 0x24, - 0xb0, 0x83, 0x00, 0xa0, 0x4b, 0x4c, 0x58, 0x1d, - 0x78, 0x28, 0x90, 0x02, 0x2c, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x03, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0xa0, 0x4b, 0x46, - 0x58, 0x18, 0x1c, 0x05, 0xd1, 0x02, 0x20, 0xb0, - 0xb0, 0x03, 0xe7, 0xf3, 0x00, 0xe0, 0x1b, 0x00, - 0x00, 0x80, 0x4b, 0x42, 0x68, 0x1b, 0x18, 0xc7, - 0x78, 0xa8, 0x28, 0x00, 0xd0, 0x63, 0x20, 0x00, - 0x42, 0x80, 0xd0, 0x20, 0x21, 0x00, 0x29, 0x20, - 0xdb, 0x04, 0xe0, 0x1b, 0x1c, 0x48, 0x06, 0x01, - 0x0e, 0x09, 0xe7, 0xf8, 0x00, 0x88, 0x4b, 0x3a, - 0x58, 0x18, 0x90, 0x01, 0x98, 0x01, 0x79, 0xc0, - 0x42, 0xa0, 0xd1, 0x0e, 0x20, 0x01, 0x40, 0x88, - 0x43, 0xc0, 0x4b, 0x36, 0x68, 0x1b, 0x40, 0x18, - 0x4b, 0x34, 0x60, 0x18, 0x23, 0x00, 0x00, 0x88, - 0x4e, 0x31, 0x50, 0x33, 0x23, 0xff, 0x48, 0x32, - 0x54, 0x43, 0xe7, 0xe3, 0xe0, 0x3f, 0x7e, 0x38, - 0x1c, 0x02, 0x28, 0xff, 0xd0, 0x10, 0x20, 0xff, - 0x4b, 0x2e, 0x54, 0x98, 0x23, 0x00, 0x00, 0x90, - 0x4e, 0x2d, 0x50, 0x33, 0x20, 0x01, 0x40, 0x90, - 0x43, 0xc0, 0x4b, 0x2c, 0x88, 0x1b, 0x40, 0x18, - 0x4b, 0x2a, 0x80, 0x18, 0x20, 0xff, 0x76, 0x38, - 0x7e, 0x78, 0x1c, 0x02, 0x28, 0xff, 0xd0, 0x11, - 0x20, 0xff, 0x4b, 0x24, 0x54, 0x98, 0x23, 0x00, - 0x00, 0x90, 0x4e, 0x23, 0x50, 0x33, 0x20, 0x01, - 0x40, 0x90, 0x43, 0xc0, 0x4b, 0x21, 0x88, 0x1b, - 0x40, 0x18, 0x4b, 0x20, 0x80, 0x18, 0x20, 0xff, - 0x76, 0x78, 0xe0, 0x02, 0x20, 0xb1, 0xb0, 0x03, - 0xe7, 0x98, 0x23, 0x00, 0x00, 0x90, 0x4e, 0x1a, - 0x50, 0x33, 0x20, 0x01, 0x40, 0x90, 0x43, 0xc0, - 0x4b, 0x18, 0x88, 0x1b, 0x40, 0x18, 0x4b, 0x17, - 0x80, 0x18, 0x4e, 0x17, 0x96, 0x00, 0x20, 0x00, - 0x00, 0x93, 0x9e, 0x00, 0x50, 0xf0, 0x98, 0x02, - 0x23, 0x20, 0x40, 0x18, 0xd0, 0xff, 0x21, 0x00, - 0x29, 0x0c, 0xdb, 0x04, 0xe0, 0x07, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x20, 0x00, - 0x18, 0x7b, 0x73, 0x18, 0xe7, 0xf7, 0x20, 0x00, - 0x83, 0x38, 0x20, 0x00, 0x70, 0xf8, 0x20, 0x00, - 0xb0, 0x03, 0xe7, 0x6f, 0xb0, 0x03, 0xe7, 0x6d, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x30, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9c, 0x48, - 0x2e, 0x08, 0x9d, 0x10, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0x2e, 0x08, 0x9c, 0x4c, - 0x9e, 0x00, 0x04, 0xb8, 0xb5, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x20, 0x1d, 0x02, 0x80, - 0x69, 0x86, 0x1c, 0x3a, 0x1c, 0x29, 0x1c, 0x20, - 0xf0, 0x08, 0xfb, 0x32, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb4, 0xf0, 0x1c, 0x01, 0xb0, 0x82, - 0x68, 0x48, 0x68, 0x8c, 0x1d, 0xe2, 0x32, 0xb7, - 0x42, 0x82, 0xd9, 0x09, 0x78, 0x42, 0x07, 0x12, - 0x0f, 0x12, 0x02, 0x12, 0x78, 0x83, 0x43, 0x1a, - 0x32, 0x03, 0x04, 0x17, 0x0c, 0x3f, 0xe0, 0x41, - 0xb0, 0x82, 0x68, 0x23, 0x93, 0x01, 0x9b, 0x01, - 0x33, 0x04, 0x93, 0x00, 0x9b, 0x00, 0x78, 0x9b, - 0x9e, 0x01, 0x19, 0x9a, 0x78, 0x4e, 0x00, 0xf3, - 0x1b, 0x9b, 0x00, 0x9b, 0x4e, 0x1b, 0x68, 0x36, - 0x19, 0x9b, 0x93, 0x02, 0x9b, 0x02, 0x78, 0x9d, - 0x06, 0xed, 0x0e, 0xed, 0x2d, 0x12, 0xd1, 0x0f, - 0x1d, 0xe3, 0x33, 0xb9, 0x68, 0x4e, 0x1b, 0x9b, - 0x06, 0x1b, 0x0e, 0x1b, 0x93, 0x03, 0x9b, 0x00, - 0x78, 0xde, 0x23, 0x80, 0x40, 0x33, 0xd1, 0x03, - 0x9b, 0x03, 0x2b, 0x0e, 0xda, 0x00, 0x3a, 0x01, - 0x1d, 0xe3, 0x33, 0xb8, 0x42, 0x83, 0xd9, 0x0b, - 0x78, 0x43, 0x07, 0x1b, 0x0f, 0x1b, 0x02, 0x1b, - 0x04, 0x1f, 0x0c, 0x3f, 0x78, 0x13, 0x18, 0xfb, - 0x33, 0x03, 0x04, 0x1f, 0x0c, 0x3f, 0xe0, 0x08, - 0x78, 0x13, 0x07, 0x1b, 0x0f, 0x1b, 0x02, 0x1b, - 0x78, 0x56, 0x43, 0x33, 0x33, 0x03, 0x04, 0x1f, - 0x0c, 0x3f, 0xb0, 0x02, 0x80, 0x4f, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x2e, 0x08, 0x9b, 0x30, - 0xb5, 0xf3, 0xb0, 0x81, 0x99, 0x02, 0x06, 0x0b, - 0x0e, 0x1b, 0x93, 0x00, 0x9b, 0x00, 0x2b, 0x00, - 0xd1, 0x0a, 0x49, 0x24, 0x4b, 0x24, 0x69, 0x1b, - 0x1c, 0x18, 0x4b, 0x23, 0x69, 0x5b, 0x1c, 0x1c, - 0x4b, 0x21, 0x6a, 0x1b, 0x1e, 0x5a, 0xe0, 0x09, - 0x49, 0x20, 0x4b, 0x1f, 0x69, 0x9b, 0x1c, 0x18, - 0x4b, 0x1d, 0x69, 0xdb, 0x1c, 0x1c, 0x4b, 0x1c, - 0x6a, 0x5b, 0x1e, 0x5a, 0x9b, 0x01, 0x78, 0xdd, - 0x26, 0x01, 0x40, 0xae, 0x1c, 0x37, 0x42, 0xa0, - 0xd0, 0x26, 0x00, 0x83, 0x18, 0x5d, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xeb, 0x68, 0x1b, 0x40, 0x3b, - 0xd0, 0x1b, 0x00, 0x83, 0x18, 0x5d, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xeb, 0x68, 0x1b, 0x43, 0xbb, - 0x1c, 0x1d, 0x00, 0x83, 0x18, 0x5e, 0x23, 0x01, - 0x02, 0x9b, 0x18, 0xf3, 0x60, 0x1d, 0x00, 0x83, - 0x18, 0x5d, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xeb, - 0x68, 0x1b, 0x2b, 0x00, 0xd1, 0x05, 0x25, 0x00, - 0x18, 0x0e, 0x23, 0x01, 0x02, 0xdb, 0x18, 0xf3, - 0x70, 0x1d, 0x30, 0x01, 0x40, 0x10, 0xe7, 0xd6, - 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x9d, 0xfc, - 0x9e, 0x00, 0x04, 0x80, 0x2e, 0x08, 0xa6, 0xfc, - 0xb4, 0x90, 0x1c, 0x03, 0x1c, 0x0c, 0x1c, 0x17, - 0x06, 0x21, 0x0e, 0x09, 0x06, 0x38, 0x0e, 0x00, - 0x72, 0x19, 0x28, 0x00, 0xd0, 0x00, 0x75, 0x58, - 0x68, 0x5b, 0x2b, 0x00, 0xd1, 0xf8, 0xbc, 0x90, - 0x47, 0x70, 0x00, 0x00, 0xb5, 0x80, 0x1c, 0x07, - 0x68, 0xf8, 0x28, 0x1f, 0xd9, 0x03, 0x20, 0xe1, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x1e, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x1d, 0x40, 0x18, - 0x49, 0x1b, 0x6d, 0x09, 0x60, 0x08, 0x05, 0x80, - 0x48, 0x19, 0x6d, 0x00, 0x68, 0x00, 0x49, 0x18, - 0x6e, 0xc9, 0x60, 0x08, 0x48, 0x16, 0x6d, 0x00, - 0x68, 0x00, 0x23, 0x01, 0x02, 0x5b, 0x43, 0x18, - 0x49, 0x13, 0x6d, 0x09, 0x60, 0x08, 0x05, 0x80, - 0x48, 0x11, 0x6d, 0x00, 0x68, 0x00, 0x49, 0x10, - 0x6e, 0xc9, 0x60, 0x08, 0x48, 0x0e, 0x6f, 0xc1, - 0xcf, 0x09, 0xc1, 0x09, 0xcf, 0x09, 0xc1, 0x09, - 0xcf, 0x08, 0xc1, 0x08, 0xf0, 0x00, 0xfc, 0x1e, - 0x20, 0x00, 0x49, 0x09, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x07, 0x60, 0x48, 0x20, 0x00, 0x49, 0x06, - 0x60, 0x88, 0x49, 0x07, 0x20, 0x0b, 0xf0, 0x0d, - 0xfd, 0xef, 0x20, 0xff, 0x30, 0x01, 0x49, 0x02, - 0x61, 0xc8, 0x20, 0x00, 0xe7, 0xc0, 0xe7, 0xbf, - 0x2e, 0x08, 0x1f, 0x9c, 0xff, 0xff, 0xfd, 0xff, - 0x2e, 0x01, 0x5f, 0x15, 0x1c, 0x01, 0x48, 0x0e, - 0x6f, 0x00, 0x68, 0x00, 0x60, 0x08, 0x48, 0x0c, - 0x6e, 0x80, 0x68, 0x00, 0x60, 0x48, 0x48, 0x0a, - 0x6e, 0xc0, 0x68, 0x00, 0x60, 0x88, 0x48, 0x08, - 0x6f, 0x40, 0x68, 0x00, 0x60, 0xc8, 0x48, 0x06, - 0x68, 0x00, 0x61, 0x08, 0x48, 0x04, 0x68, 0x40, - 0x61, 0x48, 0x48, 0x03, 0x68, 0x80, 0x61, 0x88, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, - 0x2e, 0x08, 0x1f, 0x9c, 0x48, 0x03, 0x6e, 0x80, - 0x68, 0x00, 0x07, 0x40, 0x0f, 0xc0, 0x47, 0x70, - 0xe7, 0xfd, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0x9c, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x48, 0x37, - 0x69, 0xc0, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x02, 0x20, 0xe0, 0xbc, 0x80, 0x47, 0x70, - 0x48, 0x32, 0x62, 0x07, 0x20, 0x00, 0x49, 0x31, - 0x62, 0x48, 0x48, 0x31, 0x60, 0x02, 0x48, 0x30, - 0x68, 0x00, 0x78, 0x00, 0x49, 0x2d, 0x61, 0x88, - 0x48, 0x2d, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x2b, - 0x61, 0x08, 0x48, 0x2b, 0x68, 0x00, 0x68, 0x40, - 0x49, 0x28, 0x60, 0xc8, 0x48, 0x27, 0x69, 0x80, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x48, 0x27, - 0xe0, 0x01, 0x20, 0x01, 0x02, 0x40, 0x49, 0x23, - 0x61, 0xc8, 0x48, 0x22, 0x68, 0x40, 0x30, 0x01, - 0x49, 0x20, 0x60, 0x48, 0x48, 0x1f, 0x6d, 0x40, - 0x68, 0x00, 0x0a, 0x00, 0x02, 0x00, 0x49, 0x1d, - 0x69, 0x89, 0x08, 0x49, 0x06, 0x09, 0x0e, 0x09, - 0x43, 0x08, 0x49, 0x1a, 0x6d, 0x49, 0x60, 0x08, - 0x06, 0x00, 0x48, 0x18, 0x6d, 0x00, 0x68, 0x00, - 0x4b, 0x19, 0x40, 0x18, 0x49, 0x15, 0x69, 0x89, - 0x07, 0xc9, 0x0c, 0x49, 0x43, 0x08, 0x49, 0x13, - 0x6d, 0x09, 0x60, 0x08, 0x04, 0x40, 0x48, 0x11, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x13, 0x40, 0x18, - 0x49, 0x0e, 0x6d, 0x09, 0x60, 0x08, 0x05, 0x40, - 0x48, 0x0c, 0x6d, 0x00, 0x68, 0x00, 0x23, 0x01, - 0x03, 0x1b, 0x43, 0x18, 0x49, 0x09, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0xc0, 0x48, 0x07, 0x6d, 0x40, - 0x68, 0x00, 0x49, 0x06, 0x6f, 0x09, 0x60, 0x08, - 0x48, 0x04, 0x6d, 0x00, 0x68, 0x00, 0x49, 0x03, - 0x6e, 0xc9, 0x60, 0x08, 0x20, 0x00, 0xe7, 0x99, - 0xe7, 0x98, 0x00, 0x00, 0x2e, 0x08, 0x1f, 0x9c, - 0x2e, 0x08, 0x9d, 0xc0, 0x00, 0x00, 0x02, 0x01, - 0xff, 0xff, 0xbf, 0xff, 0xff, 0xff, 0xfb, 0xff, - 0xb5, 0x00, 0x48, 0xf6, 0x6e, 0x80, 0x68, 0x00, - 0x23, 0x08, 0x40, 0x18, 0xd0, 0x74, 0x48, 0xf3, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0xf2, 0x40, 0x18, - 0x49, 0xf0, 0x6d, 0x09, 0x60, 0x08, 0x04, 0x80, - 0x48, 0xee, 0x6e, 0x40, 0x68, 0x00, 0x0a, 0x00, - 0x02, 0x00, 0x49, 0xec, 0x6e, 0x49, 0x60, 0x08, - 0x06, 0x00, 0x48, 0xea, 0x6e, 0xc0, 0x68, 0x00, - 0x23, 0x01, 0x02, 0xdb, 0x40, 0x18, 0xd0, 0x3e, - 0x20, 0xff, 0x30, 0x01, 0x49, 0xe5, 0x61, 0xc8, - 0x48, 0xe4, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0xe5, - 0x40, 0x18, 0x49, 0xe2, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0xc0, 0x48, 0xe0, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, 0x4a, 0xdd, - 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, - 0x48, 0xdd, 0x68, 0x00, 0x7a, 0x00, 0x49, 0xd9, - 0x69, 0x09, 0x1a, 0x41, 0x48, 0xd7, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x02, 0x4b, 0xd9, 0x40, 0x1a, - 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, - 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, 0x48, 0xd1, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x23, 0x04, - 0x43, 0x19, 0x60, 0x01, 0x07, 0x48, 0x48, 0xcd, - 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, - 0xf0, 0x0d, 0xfc, 0xd0, 0x48, 0xc9, 0x68, 0x00, - 0x30, 0x01, 0x49, 0xc8, 0x60, 0x08, 0x48, 0xc7, - 0x69, 0xc0, 0x4b, 0xcb, 0x42, 0x98, 0xd0, 0x73, - 0xdc, 0x08, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xd0, 0x6f, 0x23, 0x01, 0x02, 0x5b, 0x42, 0x98, - 0xd0, 0x07, 0xe2, 0xba, 0x4b, 0xc5, 0x42, 0x98, - 0xd0, 0x68, 0x4b, 0xc5, 0x42, 0x98, 0xd0, 0x66, - 0xe2, 0xb3, 0x48, 0xbc, 0x6e, 0x80, 0x68, 0x00, - 0x23, 0x01, 0x02, 0x5b, 0x40, 0x18, 0xe0, 0x00, - 0xe2, 0xcd, 0xd0, 0x3f, 0x48, 0xb7, 0x68, 0x00, - 0x30, 0x01, 0x49, 0xb6, 0x60, 0x08, 0x48, 0xb5, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0xb5, 0x40, 0x18, - 0x49, 0xb2, 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, - 0x20, 0xff, 0x30, 0x01, 0x49, 0xaf, 0x61, 0xc8, - 0x48, 0xae, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, - 0x02, 0x09, 0x0a, 0x09, 0x4a, 0xab, 0x6a, 0x52, - 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, 0x48, 0xac, - 0x68, 0x00, 0x7a, 0x00, 0x49, 0xa7, 0x69, 0x09, - 0x1a, 0x41, 0x48, 0xa6, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x02, 0x4b, 0xa8, 0x40, 0x1a, 0x04, 0x09, - 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, - 0x02, 0x08, 0x0c, 0x00, 0x48, 0x9f, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, - 0x60, 0x01, 0x07, 0x88, 0x48, 0x9b, 0x6f, 0xc0, - 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0d, - 0xfc, 0x6d, 0xe0, 0x5e, 0x48, 0x97, 0x69, 0x00, - 0x28, 0x00, 0xd0, 0x20, 0x48, 0x95, 0x69, 0x00, - 0x38, 0x01, 0x49, 0x94, 0x61, 0x08, 0x48, 0x93, - 0x68, 0xc0, 0x78, 0x00, 0x49, 0x91, 0x6c, 0x89, - 0x68, 0x09, 0x0a, 0x09, 0x02, 0x09, 0x43, 0x08, - 0x49, 0x8e, 0x6c, 0x89, 0x60, 0x08, 0x06, 0x00, - 0x0e, 0x00, 0x48, 0x8c, 0x68, 0xc0, 0xe0, 0x03, - 0xe1, 0x4b, 0xe2, 0x4d, 0xe0, 0x42, 0xe1, 0x93, - 0x30, 0x01, 0x49, 0x88, 0x60, 0xc8, 0x48, 0x8d, - 0x49, 0x86, 0x61, 0xc8, 0xe0, 0x39, 0x20, 0xff, - 0x30, 0x01, 0x49, 0x84, 0x61, 0xc8, 0x48, 0x83, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, - 0x0a, 0x09, 0x4a, 0x80, 0x6a, 0x52, 0x06, 0x12, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x80, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x7c, 0x69, 0x09, 0x1a, 0x41, - 0x48, 0x7a, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, - 0x4b, 0x7c, 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, - 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, - 0x0c, 0x00, 0x48, 0x74, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, - 0x07, 0xc8, 0x48, 0x70, 0x6f, 0xc0, 0x68, 0xc1, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0d, 0xfc, 0x16, - 0x48, 0x6c, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x6d, - 0x40, 0x18, 0x49, 0x6a, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0xc0, 0xe2, 0x08, 0x48, 0x67, 0x69, 0x00, - 0x28, 0x00, 0xd0, 0x5f, 0x48, 0x65, 0x6e, 0x80, - 0x68, 0x00, 0x23, 0xff, 0x33, 0x01, 0x40, 0x18, - 0xd0, 0x3f, 0x48, 0x62, 0x68, 0x00, 0x30, 0x01, - 0x49, 0x60, 0x60, 0x08, 0x48, 0x5f, 0x6d, 0x00, - 0x68, 0x00, 0x4b, 0x60, 0x40, 0x18, 0x49, 0x5d, - 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, 0x20, 0xff, - 0x30, 0x01, 0x49, 0x5a, 0x61, 0xc8, 0x48, 0x59, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, - 0x0a, 0x09, 0x4a, 0x56, 0x6a, 0x52, 0x06, 0x12, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x56, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x52, 0x69, 0x09, 0x1a, 0x41, - 0x48, 0x50, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, - 0x4b, 0x52, 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, - 0x02, 0x09, 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, - 0x0c, 0x00, 0x48, 0x4a, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, - 0x07, 0x88, 0x48, 0x46, 0x6f, 0xc0, 0x68, 0xc1, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x0d, 0xfb, 0xc2, - 0xe0, 0x17, 0x48, 0x42, 0x68, 0xc0, 0x78, 0x00, - 0x49, 0x40, 0x6c, 0x89, 0x68, 0x09, 0x0a, 0x09, - 0x02, 0x09, 0x43, 0x08, 0x49, 0x3d, 0x6c, 0x89, - 0x60, 0x08, 0x06, 0x00, 0x0e, 0x00, 0x48, 0x3b, - 0x68, 0xc0, 0x30, 0x01, 0x49, 0x39, 0x60, 0xc8, - 0x48, 0x38, 0x69, 0x00, 0x38, 0x01, 0x49, 0x37, - 0x61, 0x08, 0xe0, 0xa1, 0x48, 0x35, 0x6a, 0x00, - 0x38, 0x01, 0x49, 0x34, 0x62, 0x08, 0x48, 0x33, - 0x6a, 0x00, 0x28, 0x00, 0xd0, 0x4b, 0x48, 0x31, - 0x6a, 0x40, 0x30, 0x01, 0x49, 0x2f, 0x62, 0x48, - 0x48, 0x31, 0x68, 0x00, 0x30, 0x0c, 0x49, 0x30, - 0x60, 0x08, 0x48, 0x2f, 0x68, 0x00, 0x78, 0x00, - 0x49, 0x2a, 0x61, 0x88, 0x48, 0x2c, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x28, 0x61, 0x08, 0x48, 0x2a, - 0x68, 0x00, 0x68, 0x40, 0x49, 0x25, 0x60, 0xc8, - 0x48, 0x24, 0x69, 0x80, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x01, 0x48, 0x27, 0xe0, 0x01, 0x20, 0x01, - 0x02, 0x40, 0x49, 0x20, 0x61, 0xc8, 0x48, 0x1f, - 0x6d, 0x00, 0x68, 0x00, 0x23, 0x01, 0x03, 0x5b, - 0x43, 0x18, 0x49, 0x1c, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0x80, 0x48, 0x1a, 0x6d, 0x40, 0x68, 0x00, - 0x0a, 0x00, 0x02, 0x00, 0x49, 0x17, 0x69, 0x89, - 0x08, 0x49, 0x06, 0x09, 0x0e, 0x09, 0x43, 0x08, - 0x49, 0x14, 0x6d, 0x49, 0x60, 0x08, 0x06, 0x00, - 0x48, 0x12, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x19, - 0x40, 0x18, 0x49, 0x10, 0x69, 0x89, 0x07, 0xc9, - 0x0c, 0x49, 0x43, 0x08, 0x49, 0x0d, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0x40, 0xe0, 0x4c, 0x20, 0xff, - 0x30, 0x01, 0x49, 0x0a, 0x61, 0xc8, 0x48, 0x09, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, - 0x0a, 0x09, 0x4a, 0x06, 0x6a, 0x52, 0x06, 0x12, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x06, 0x68, 0x00, - 0x7a, 0x00, 0x49, 0x02, 0x69, 0x09, 0x1a, 0x41, - 0x48, 0x00, 0xe0, 0x11, 0x2e, 0x08, 0x1f, 0x9c, - 0xff, 0xff, 0xdf, 0xff, 0xff, 0xff, 0xef, 0xff, - 0x2e, 0x08, 0x9d, 0xc0, 0xff, 0x00, 0x00, 0xff, - 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x02, - 0x00, 0x00, 0x02, 0x03, 0xff, 0xff, 0xbf, 0xff, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, 0x4b, 0xa5, - 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, - 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, - 0x48, 0xa1, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, - 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, 0x07, 0xc8, - 0x48, 0x9d, 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x0d, 0xfb, 0x0f, 0x48, 0x9a, - 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x99, 0x40, 0x18, - 0x49, 0x97, 0x6d, 0x09, 0x60, 0x08, 0x04, 0xc0, - 0xe1, 0x01, 0x48, 0x95, 0x6e, 0x80, 0x68, 0x00, - 0x23, 0x01, 0x02, 0x5b, 0x40, 0x18, 0xd0, 0x3f, - 0x48, 0x91, 0x68, 0x00, 0x30, 0x01, 0x49, 0x90, - 0x60, 0x08, 0x48, 0x8f, 0x6d, 0x00, 0x68, 0x00, - 0x4b, 0x8e, 0x40, 0x18, 0x49, 0x8c, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0xc0, 0x20, 0xff, 0x30, 0x01, - 0x49, 0x89, 0x61, 0xc8, 0x48, 0x88, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, - 0x4a, 0x85, 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, - 0x60, 0x01, 0x48, 0x85, 0x68, 0x00, 0x7a, 0x00, - 0x49, 0x81, 0x69, 0x09, 0x1a, 0x41, 0x48, 0x80, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x02, 0x4b, 0x7d, - 0x40, 0x1a, 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, - 0x43, 0x11, 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, - 0x48, 0x79, 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, - 0x23, 0x02, 0x43, 0x19, 0x60, 0x01, 0x07, 0x88, - 0x48, 0x75, 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x0d, 0xfa, 0xbf, 0xe0, 0x02, - 0x48, 0x74, 0x49, 0x71, 0x61, 0xc8, 0xe0, 0xb6, - 0x48, 0x6f, 0x69, 0x00, 0x28, 0x00, 0xd0, 0x62, - 0x48, 0x6d, 0x6e, 0x00, 0x68, 0x00, 0x49, 0x6c, - 0x68, 0xc9, 0x70, 0x08, 0x48, 0x6a, 0x68, 0xc0, - 0x30, 0x01, 0x49, 0x69, 0x60, 0xc8, 0x48, 0x68, - 0x69, 0x00, 0x38, 0x01, 0x49, 0x66, 0x61, 0x08, - 0x48, 0x65, 0x69, 0x00, 0x28, 0x00, 0xd1, 0x4d, - 0x48, 0x63, 0x6a, 0x00, 0x28, 0x01, 0xd1, 0x49, - 0x48, 0x63, 0x68, 0x00, 0x7a, 0x40, 0x49, 0x60, - 0x6d, 0x09, 0x68, 0x09, 0x4b, 0x62, 0x40, 0x19, - 0x07, 0xc0, 0x0d, 0x40, 0x43, 0x08, 0x49, 0x5c, - 0x6d, 0x09, 0x60, 0x08, 0x05, 0x40, 0x0f, 0xc0, - 0x20, 0xff, 0x30, 0x01, 0x49, 0x58, 0x61, 0xc8, - 0x48, 0x57, 0x6d, 0x00, 0x68, 0x00, 0x4b, 0x57, - 0x40, 0x18, 0x49, 0x55, 0x6d, 0x09, 0x60, 0x08, - 0x04, 0xc0, 0x48, 0x53, 0x6f, 0xc0, 0x68, 0x80, - 0x68, 0x01, 0x02, 0x09, 0x0a, 0x09, 0x4a, 0x50, - 0x6a, 0x52, 0x06, 0x12, 0x43, 0x11, 0x60, 0x01, - 0x48, 0x4f, 0x68, 0x00, 0x7a, 0x00, 0x49, 0x4c, - 0x69, 0x09, 0x1a, 0x41, 0x48, 0x4a, 0x6f, 0xc0, - 0x68, 0x80, 0x68, 0x02, 0x4b, 0x47, 0x40, 0x1a, - 0x04, 0x09, 0x0c, 0x09, 0x02, 0x09, 0x43, 0x11, - 0x60, 0x01, 0x02, 0x08, 0x0c, 0x00, 0x48, 0x44, - 0x6f, 0xc0, 0x68, 0x80, 0x68, 0x01, 0x23, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x07, 0xc8, 0x48, 0x40, - 0x6f, 0xc0, 0x68, 0xc1, 0x20, 0x01, 0x40, 0x88, - 0xf0, 0x0d, 0xfa, 0x54, 0xe0, 0x4f, 0x48, 0x3c, - 0x6a, 0x00, 0x38, 0x01, 0x49, 0x3a, 0x62, 0x08, - 0x48, 0x39, 0x6a, 0x40, 0x30, 0x01, 0x49, 0x38, - 0x62, 0x48, 0x48, 0x39, 0x68, 0x00, 0x30, 0x0c, - 0x49, 0x37, 0x60, 0x08, 0x48, 0x36, 0x68, 0x00, - 0x78, 0x00, 0x49, 0x33, 0x61, 0x88, 0x48, 0x34, - 0x68, 0x00, 0x7a, 0x00, 0x49, 0x30, 0x61, 0x08, - 0x48, 0x31, 0x68, 0x00, 0x68, 0x40, 0x49, 0x2e, - 0x60, 0xc8, 0x48, 0x2d, 0x69, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0xd0, 0x01, 0x48, 0x2f, 0xe0, 0x01, - 0x20, 0x01, 0x02, 0x40, 0x49, 0x28, 0x61, 0xc8, - 0x48, 0x27, 0x6d, 0x00, 0x68, 0x00, 0x23, 0x01, - 0x03, 0x5b, 0x43, 0x18, 0x49, 0x24, 0x6d, 0x09, - 0x60, 0x08, 0x04, 0x80, 0x48, 0x22, 0x6d, 0x40, - 0x68, 0x00, 0x0a, 0x00, 0x02, 0x00, 0x49, 0x20, - 0x69, 0x89, 0x08, 0x49, 0x06, 0x09, 0x0e, 0x09, - 0x43, 0x08, 0x49, 0x1d, 0x6d, 0x49, 0x60, 0x08, - 0x06, 0x00, 0x48, 0x1b, 0x6d, 0x00, 0x68, 0x00, - 0x4b, 0x1f, 0x40, 0x18, 0x49, 0x18, 0x69, 0x89, - 0x07, 0xc9, 0x0c, 0x49, 0x43, 0x08, 0x49, 0x16, - 0x6d, 0x09, 0x60, 0x08, 0x04, 0x40, 0xe0, 0x01, - 0xe0, 0x00, 0xe7, 0xff, 0x48, 0x12, 0x6c, 0x80, - 0x68, 0x00, 0x49, 0x11, 0x6e, 0x49, 0x60, 0x08, - 0x48, 0x0f, 0x6d, 0x40, 0x68, 0x00, 0x49, 0x0e, - 0x6f, 0x09, 0x60, 0x08, 0x48, 0x0c, 0x6d, 0x00, - 0x68, 0x00, 0x49, 0x0b, 0x6e, 0xc9, 0x60, 0x08, - 0x48, 0x09, 0x6c, 0xc0, 0x68, 0x00, 0x23, 0x08, - 0x43, 0x18, 0x49, 0x07, 0x6c, 0xc9, 0x60, 0x08, - 0x07, 0x00, 0x48, 0x05, 0x6c, 0xc0, 0x68, 0x00, - 0x49, 0x03, 0x6e, 0x89, 0x60, 0x08, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xff, 0x00, 0x00, 0xff, - 0x2e, 0x08, 0x1f, 0x9c, 0xff, 0xff, 0xef, 0xff, - 0x2e, 0x08, 0x9d, 0xc0, 0x00, 0x00, 0x02, 0x03, - 0xff, 0xff, 0xfb, 0xff, 0x00, 0x00, 0x02, 0x01, - 0xff, 0xff, 0xbf, 0xff, 0xb4, 0x80, 0x49, 0x2e, - 0x20, 0x00, 0x28, 0x08, 0xd3, 0x04, 0xe0, 0x06, - 0x1c, 0x42, 0x06, 0x10, 0x0e, 0x00, 0xe7, 0xf8, - 0x23, 0x00, 0xc1, 0x08, 0xe7, 0xf8, 0x4a, 0x29, - 0x6f, 0xd2, 0x68, 0x12, 0x4b, 0x27, 0x6d, 0x9b, - 0x68, 0x1b, 0x0a, 0x1b, 0x02, 0x1b, 0x06, 0x12, - 0x0e, 0x12, 0x43, 0x1a, 0x4b, 0x23, 0x6d, 0x9b, - 0x60, 0x1a, 0x06, 0x12, 0x0e, 0x12, 0x4a, 0x21, - 0x6f, 0xd2, 0x68, 0x52, 0x4b, 0x1f, 0x6d, 0x1b, - 0x68, 0x1f, 0x23, 0x01, 0x03, 0xdb, 0x43, 0x9f, - 0x1c, 0x3b, 0x07, 0xd2, 0x0c, 0x12, 0x43, 0x1a, - 0x4b, 0x1a, 0x6d, 0x1b, 0x60, 0x1a, 0x04, 0x12, - 0x0f, 0xd2, 0x4a, 0x18, 0x6f, 0xd2, 0x69, 0x12, - 0x4b, 0x16, 0x6d, 0xdb, 0x68, 0x1b, 0x0c, 0x1b, - 0x04, 0x1b, 0x04, 0x12, 0x0c, 0x12, 0x43, 0x1a, - 0x4b, 0x12, 0x6d, 0xdb, 0x60, 0x1a, 0x04, 0x12, - 0x0c, 0x12, 0x4a, 0x10, 0x6d, 0x12, 0x68, 0x12, - 0x23, 0x01, 0x02, 0x5b, 0x43, 0x1a, 0x4b, 0x0d, - 0x6d, 0x1b, 0x60, 0x1a, 0x05, 0x92, 0x4a, 0x0b, - 0x6d, 0x12, 0x68, 0x12, 0x4b, 0x09, 0x6e, 0xdb, - 0x60, 0x1a, 0x4a, 0x08, 0x6d, 0x92, 0x68, 0x12, - 0x4b, 0x06, 0x6f, 0x5b, 0x60, 0x1a, 0x4a, 0x05, - 0x6d, 0xd2, 0x68, 0x12, 0x4b, 0x03, 0x6f, 0x9b, - 0x60, 0x1a, 0xbc, 0x80, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x1f, 0xc4, 0x2e, 0x08, 0x1f, 0x9c, - 0xb5, 0x90, 0x1c, 0x07, 0x1c, 0x0c, 0x2f, 0x22, - 0xd1, 0x07, 0x2c, 0x3f, 0xd8, 0x01, 0x2c, 0x01, - 0xd2, 0x03, 0x20, 0x38, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x01, 0x49, 0x13, 0x70, 0x08, - 0x23, 0x01, 0x03, 0xdb, 0x42, 0x9f, 0xd0, 0x02, - 0x4b, 0x11, 0x42, 0x9f, 0xd1, 0x04, 0x48, 0x11, - 0x60, 0x07, 0x20, 0x00, 0xe7, 0xee, 0xe0, 0x18, - 0x2f, 0xff, 0xd1, 0x0b, 0x21, 0x00, 0x43, 0xc9, - 0x20, 0x0d, 0xf0, 0x00, 0xf8, 0x1d, 0x48, 0x0c, - 0x68, 0x01, 0x48, 0x0c, 0x68, 0x00, 0xf0, 0x00, - 0xf8, 0x43, 0xe0, 0x07, 0x1c, 0x21, 0x1c, 0x38, - 0xf0, 0x00, 0xf8, 0x3e, 0x48, 0x07, 0x60, 0x07, - 0x48, 0x05, 0x60, 0x04, 0x20, 0x00, 0xe7, 0xd5, - 0xe7, 0xd4, 0xe7, 0xd3, 0x2e, 0x08, 0x9d, 0xe8, - 0x00, 0x00, 0x80, 0x0f, 0xcc, 0x00, 0x05, 0x00, - 0x2e, 0x08, 0x9d, 0xe4, 0x2e, 0x08, 0x20, 0x1c, - 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0a, 0x4b, 0x13, - 0x68, 0x5b, 0x1c, 0x18, 0x21, 0x00, 0x29, 0x02, - 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x4b, 0x06, 0x19, - 0x0e, 0x09, 0xe7, 0xf8, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc4, 0x29, 0x00, 0xd1, 0x01, 0x60, 0x27, - 0xe0, 0x05, 0x23, 0x01, 0x42, 0xda, 0xd0, 0x01, - 0x60, 0x22, 0xe0, 0x00, 0xe0, 0x09, 0x1d, 0x05, - 0x23, 0x05, 0x02, 0x1b, 0x42, 0x9d, 0xdb, 0x02, - 0x20, 0x01, 0x02, 0x80, 0xe0, 0x00, 0x30, 0x04, - 0xe7, 0xe4, 0x4b, 0x02, 0x60, 0x58, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0xcc, 0x00, 0x0f, 0x00, - 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x05, 0x20, - 0x0d, 0x00, 0x23, 0xff, 0x33, 0x04, 0x42, 0x98, - 0xd0, 0x50, 0xdc, 0x18, 0x28, 0x10, 0xd0, 0x2d, - 0xdc, 0x08, 0x28, 0x01, 0xd0, 0x23, 0x28, 0x02, - 0xd0, 0x1e, 0x28, 0x04, 0xd0, 0x1f, 0x28, 0x08, - 0xd0, 0x1d, 0xe0, 0x76, 0x28, 0x12, 0xd0, 0x1d, - 0x28, 0x22, 0xd0, 0x3a, 0x23, 0xff, 0x33, 0x02, - 0x42, 0x98, 0xd0, 0x24, 0x23, 0xff, 0x33, 0x03, - 0x42, 0x98, 0xd0, 0x29, 0xe0, 0x69, 0x38, 0xff, - 0x38, 0x05, 0x28, 0x08, 0xd2, 0x65, 0xa3, 0x02, - 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x35, 0x3c, 0x41, 0x4f, 0x56, 0x4b, 0x5d, 0x46, - 0x20, 0x00, 0x49, 0x32, 0x63, 0x48, 0x48, 0x31, - 0x62, 0x04, 0xe0, 0x5c, 0x20, 0x01, 0x49, 0x2f, - 0x63, 0x48, 0xe0, 0x58, 0x20, 0x00, 0x49, 0x2e, - 0x67, 0x08, 0x21, 0x00, 0x43, 0xc9, 0x20, 0x10, - 0xf7, 0xff, 0xff, 0x92, 0xe0, 0x4f, 0x20, 0x01, - 0x49, 0x29, 0x67, 0x08, 0x21, 0x00, 0x43, 0xc9, - 0x20, 0x10, 0xf7, 0xff, 0xff, 0x89, 0xe0, 0x46, - 0x20, 0x02, 0x49, 0x25, 0x67, 0x08, 0x21, 0x00, - 0x43, 0xc9, 0x20, 0x10, 0xf7, 0xff, 0xff, 0x80, - 0xe0, 0x3d, 0x1c, 0x39, 0x20, 0x22, 0xf7, 0xff, - 0xff, 0x7b, 0xe0, 0x38, 0x48, 0x1e, 0x65, 0xc7, - 0x21, 0x01, 0x20, 0x35, 0xf7, 0xff, 0xff, 0x74, - 0xe0, 0x31, 0x48, 0x1b, 0x65, 0xc7, 0x21, 0x02, - 0x20, 0x35, 0xf7, 0xff, 0xff, 0x6d, 0xe0, 0x2a, - 0x21, 0x00, 0x20, 0x35, 0xf7, 0xff, 0xff, 0x68, - 0xe0, 0x25, 0x21, 0x03, 0x20, 0x35, 0xf7, 0xff, - 0xff, 0x63, 0xe0, 0x20, 0x21, 0x04, 0x20, 0x35, - 0xf7, 0xff, 0xff, 0x5e, 0xe0, 0x1b, 0x20, 0x00, - 0x49, 0x0f, 0x65, 0xc8, 0xe0, 0x17, 0x48, 0x0e, - 0x66, 0x07, 0x21, 0x01, 0x20, 0x36, 0xf7, 0xff, - 0xff, 0x53, 0xe0, 0x10, 0x48, 0x0a, 0x66, 0x07, - 0x21, 0x02, 0x20, 0x36, 0xf7, 0xff, 0xff, 0x4c, - 0xe0, 0x09, 0x20, 0x00, 0x49, 0x06, 0x66, 0x08, - 0xe0, 0x05, 0x1c, 0x20, 0x21, 0x00, 0x43, 0xc9, - 0xf7, 0xff, 0xff, 0x42, 0xe7, 0xff, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xcc, 0x00, 0x0f, 0x80, - 0xcc, 0x00, 0x05, 0x00, 0xb4, 0xb0, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x13, 0x06, 0x38, 0x0e, 0x00, - 0x06, 0x19, 0x0e, 0x09, 0x29, 0x01, 0xd0, 0x08, - 0x22, 0x00, 0x4d, 0x09, 0x60, 0x2a, 0x22, 0x00, - 0x43, 0xd2, 0x4d, 0x08, 0x68, 0x2d, 0x60, 0x2a, - 0xe0, 0x08, 0x4a, 0x07, 0x68, 0x12, 0x60, 0x14, - 0x4a, 0x04, 0x68, 0x12, 0x60, 0x10, 0x22, 0x01, - 0x4d, 0x01, 0x60, 0x2a, 0xbc, 0xb0, 0x47, 0x70, - 0xcc, 0x00, 0x0d, 0x00, 0x2e, 0x08, 0x9d, 0xdc, - 0x2e, 0x08, 0x9d, 0xd8, 0xb5, 0xf3, 0xb0, 0x81, - 0x99, 0x02, 0x06, 0x08, 0x16, 0x00, 0x90, 0x00, - 0xb0, 0x85, 0x20, 0x00, 0x90, 0x01, 0x9c, 0x06, - 0x1d, 0xe6, 0x36, 0x05, 0xcc, 0x20, 0x07, 0xa8, - 0x0f, 0x80, 0x06, 0x00, 0x16, 0x00, 0x90, 0x00, - 0x08, 0xad, 0x3d, 0x03, 0xcc, 0x80, 0x08, 0xb8, - 0x00, 0x80, 0x19, 0x86, 0xcc, 0x02, 0x91, 0x04, - 0x99, 0x04, 0x08, 0x89, 0x91, 0x04, 0x20, 0x03, - 0x05, 0x80, 0x21, 0x35, 0x06, 0x49, 0x60, 0x08, - 0x48, 0x46, 0x68, 0x01, 0x08, 0x89, 0x00, 0x89, - 0x60, 0x01, 0x48, 0x45, 0x90, 0x03, 0x20, 0x00, - 0x90, 0x02, 0x98, 0x02, 0x42, 0xa8, 0xd3, 0x04, - 0xe0, 0x08, 0x98, 0x02, 0x30, 0x01, 0x90, 0x02, - 0xe7, 0xf7, 0xcc, 0x02, 0x98, 0x03, 0xc0, 0x02, - 0x90, 0x03, 0xe7, 0xf6, 0x98, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0xcc, 0x02, 0x98, 0x03, 0xc0, 0x02, - 0x90, 0x03, 0x20, 0x00, 0x49, 0x39, 0x65, 0x88, - 0x9f, 0x04, 0x2f, 0x00, 0xd8, 0x02, 0xe0, 0x05, - 0x3f, 0x01, 0xe7, 0xfa, 0xce, 0x02, 0x48, 0x35, - 0x64, 0x81, 0xe7, 0xf9, 0x20, 0x00, 0x49, 0x34, - 0x60, 0x48, 0x20, 0x00, 0x21, 0x35, 0x06, 0x49, - 0x60, 0x08, 0x20, 0x00, 0x49, 0x2f, 0x66, 0x88, - 0x20, 0x00, 0x21, 0x35, 0x06, 0x49, 0x61, 0x88, - 0x20, 0x01, 0x49, 0x2c, 0x64, 0xc8, 0x48, 0x2c, - 0x68, 0x40, 0x28, 0x00, 0xd1, 0x0e, 0x27, 0x00, - 0x2f, 0x64, 0xd3, 0x02, 0xe0, 0x02, 0x37, 0x01, - 0xe7, 0xfa, 0xe7, 0xfc, 0x98, 0x01, 0x1c, 0x41, - 0x91, 0x01, 0x4b, 0x26, 0x42, 0x98, 0xdb, 0x00, - 0xe0, 0x00, 0xe7, 0xec, 0x48, 0x24, 0x68, 0x01, - 0x23, 0x01, 0x43, 0x19, 0x60, 0x01, 0x48, 0x23, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x48, 0x21, - 0x68, 0x40, 0x28, 0x00, 0xd1, 0x0b, 0x48, 0x20, - 0x68, 0x40, 0x4b, 0x19, 0x18, 0xc0, 0x49, 0x1d, - 0x60, 0x08, 0x48, 0x1d, 0x68, 0x80, 0x4b, 0x16, - 0x18, 0xc0, 0x49, 0x1a, 0x60, 0x48, 0x48, 0x19, - 0x68, 0x00, 0x21, 0x33, 0x06, 0x49, 0x65, 0x48, - 0x48, 0x16, 0x68, 0x40, 0x21, 0x33, 0x06, 0x49, - 0x65, 0x88, 0x48, 0x14, 0x68, 0x40, 0x21, 0x33, - 0x06, 0x49, 0x66, 0x88, 0x48, 0x11, 0x68, 0x00, - 0x21, 0x33, 0x06, 0x49, 0x66, 0x48, 0x20, 0x03, - 0x21, 0x33, 0x06, 0x49, 0x67, 0x08, 0x20, 0x00, - 0x49, 0x0e, 0x68, 0x09, 0x70, 0x08, 0x21, 0x00, - 0x20, 0x0d, 0xf7, 0xff, 0xfe, 0x2d, 0xb0, 0x05, - 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x66, 0x00, 0x00, 0x70, - 0xcc, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x80, - 0xcc, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x27, 0x10, - 0x6a, 0x00, 0x00, 0x10, 0x2e, 0x08, 0xb9, 0x88, - 0xcc, 0x00, 0x0f, 0x80, 0x2e, 0x08, 0xd2, 0x10, - 0x1c, 0x01, 0xb0, 0x81, 0x48, 0x27, 0x22, 0x00, - 0x92, 0x00, 0x9a, 0x00, 0x2a, 0x16, 0xdb, 0x04, - 0xe0, 0x09, 0x9a, 0x00, 0x32, 0x01, 0x92, 0x00, - 0xe7, 0xf7, 0x68, 0x02, 0x9b, 0x00, 0x00, 0x9b, - 0x50, 0xca, 0x30, 0x04, 0xe7, 0xf5, 0x48, 0x20, - 0x22, 0x00, 0x92, 0x00, 0x9a, 0x00, 0x2a, 0x0b, - 0xdb, 0x04, 0xe0, 0x0a, 0x9a, 0x00, 0x32, 0x01, - 0x92, 0x00, 0xe7, 0xf7, 0x68, 0x03, 0x9a, 0x00, - 0x00, 0x92, 0x18, 0x52, 0x65, 0x93, 0x30, 0x04, - 0xe7, 0xf4, 0x48, 0x18, 0x22, 0x00, 0x92, 0x00, - 0x9a, 0x00, 0x2a, 0x11, 0xdb, 0x04, 0xe0, 0x0b, - 0x9a, 0x00, 0x32, 0x01, 0x92, 0x00, 0xe7, 0xf7, - 0x68, 0x03, 0x9a, 0x00, 0x00, 0x92, 0x18, 0x52, - 0x32, 0x80, 0x60, 0x53, 0x30, 0x04, 0xe7, 0xf3, - 0x48, 0x0f, 0x22, 0x02, 0x92, 0x00, 0x9a, 0x00, - 0x2a, 0x05, 0xdb, 0x04, 0xe0, 0x0b, 0x9a, 0x00, - 0x32, 0x01, 0x92, 0x00, 0xe7, 0xf7, 0x68, 0x02, - 0x9b, 0x00, 0x00, 0x9b, 0x18, 0x5b, 0x33, 0x80, - 0x60, 0x5a, 0x30, 0x04, 0xe7, 0xf3, 0x4a, 0x07, - 0x6c, 0x12, 0x1d, 0xcb, 0x33, 0x79, 0x61, 0xda, - 0xb0, 0x01, 0x47, 0x70, 0xcc, 0x00, 0x05, 0x20, - 0xcc, 0x00, 0x0c, 0x00, 0xcc, 0x00, 0x0c, 0x5c, - 0xcc, 0x00, 0x0c, 0xa0, 0xcc, 0x00, 0x0c, 0x80, - 0xb4, 0xf0, 0x1c, 0x06, 0x1c, 0x0f, 0x1c, 0x14, - 0x1c, 0x1d, 0x06, 0x29, 0x0e, 0x09, 0x2c, 0x1f, - 0xdb, 0x02, 0x20, 0xaf, 0xbc, 0xf0, 0x47, 0x70, - 0x4b, 0x0b, 0x40, 0x1f, 0x48, 0x0b, 0x68, 0x00, - 0x60, 0x06, 0x29, 0x01, 0xd1, 0x07, 0x48, 0x0a, - 0x68, 0x02, 0x43, 0x3a, 0x60, 0x02, 0x20, 0x80, - 0x6e, 0x00, 0x60, 0x04, 0xe0, 0x05, 0x29, 0x02, - 0xd1, 0x03, 0x48, 0x05, 0x68, 0x02, 0x43, 0xba, - 0x60, 0x02, 0x20, 0x00, 0xe7, 0xe6, 0xe7, 0xe5, - 0xff, 0xff, 0xf8, 0xff, 0x2e, 0x08, 0x9d, 0xe0, - 0xcc, 0x00, 0x02, 0x20, 0xb5, 0xf3, 0xb0, 0x81, - 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, - 0x99, 0x02, 0x06, 0x0e, 0x0e, 0x36, 0x48, 0x1a, - 0x6f, 0x00, 0x23, 0x02, 0x40, 0x18, 0xd0, 0x0d, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0x80, 0x21, 0x33, - 0x06, 0x49, 0x6d, 0x49, 0x1a, 0x41, 0x48, 0x14, - 0x6d, 0xc0, 0x4a, 0x13, 0x6d, 0x92, 0x1a, 0x80, - 0x18, 0x0d, 0xe0, 0x06, 0x20, 0x33, 0x06, 0x40, - 0x6d, 0x80, 0x21, 0x33, 0x06, 0x49, 0x6d, 0x49, - 0x1a, 0x45, 0x98, 0x00, 0x43, 0x68, 0x1c, 0x01, - 0x20, 0x64, 0xf0, 0x07, 0xfb, 0x43, 0x1c, 0x04, - 0x43, 0x6e, 0x1c, 0x31, 0x20, 0x64, 0xf0, 0x07, - 0xfb, 0x3d, 0x1c, 0x07, 0x08, 0xa4, 0x00, 0xa4, - 0x08, 0xbf, 0x00, 0xbf, 0x48, 0x05, 0x64, 0x84, - 0x48, 0x04, 0x64, 0xc7, 0xb0, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x0c, 0x80, - 0xb5, 0xf7, 0x9a, 0x02, 0x06, 0x15, 0x0e, 0x2d, - 0xb0, 0x82, 0x27, 0x00, 0x2d, 0x1f, 0xdb, 0x05, - 0x20, 0xaf, 0xb0, 0x02, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2f, 0x00, 0xd1, 0x0d, - 0x48, 0x19, 0x69, 0x80, 0x28, 0x00, 0xd0, 0x00, - 0xe7, 0xfa, 0x20, 0x02, 0x49, 0x16, 0x61, 0x88, - 0x48, 0x15, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x00, - 0x27, 0xff, 0xe7, 0xef, 0x4c, 0x13, 0x94, 0x00, - 0x20, 0x01, 0x02, 0x40, 0x90, 0x01, 0x22, 0x00, - 0x99, 0x03, 0xb4, 0x06, 0x06, 0x2b, 0x16, 0x1b, - 0x9a, 0x03, 0x99, 0x04, 0x1c, 0x20, 0xf0, 0x01, - 0xff, 0x75, 0xb0, 0x02, 0x1c, 0x06, 0x2e, 0xd2, - 0xd1, 0x06, 0x20, 0x00, 0x49, 0x08, 0x61, 0x88, - 0x20, 0xd2, 0xb0, 0x02, 0xe7, 0xd2, 0xe0, 0x08, - 0x20, 0x00, 0x99, 0x00, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x03, 0x61, 0x88, 0x20, 0x00, 0xb0, 0x02, - 0xe7, 0xc8, 0xb0, 0x02, 0xe7, 0xc6, 0x00, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0xcc, 0x00, 0x06, 0x00, - 0xb5, 0xff, 0x9f, 0x09, 0xb0, 0x81, 0x9b, 0x01, - 0x06, 0x18, 0x0e, 0x00, 0x9b, 0x02, 0x06, 0x19, - 0x0e, 0x09, 0x9b, 0x03, 0x06, 0x1b, 0x0e, 0x1b, - 0x93, 0x00, 0x9b, 0x04, 0x06, 0x1a, 0x0e, 0x12, - 0x06, 0x3d, 0x0e, 0x2d, 0x2d, 0x01, 0xd1, 0x07, - 0x4c, 0x1c, 0x68, 0x26, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x23, 0xe0, 0x07, - 0x2d, 0x02, 0xd1, 0x05, 0x4c, 0x17, 0x68, 0x26, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x33, 0x60, 0x23, - 0x28, 0x00, 0xd1, 0x03, 0x23, 0x00, 0x4c, 0x14, - 0x61, 0xe3, 0xe0, 0x04, 0x28, 0x01, 0xd1, 0x02, - 0x23, 0x01, 0x4c, 0x11, 0x61, 0xe3, 0x29, 0x00, - 0xd1, 0x03, 0x23, 0x00, 0x4c, 0x0e, 0x65, 0xa3, - 0xe0, 0x04, 0x29, 0x01, 0xd1, 0x02, 0x23, 0x01, - 0x4c, 0x0b, 0x65, 0xa3, 0x2a, 0x00, 0xd1, 0x03, - 0x23, 0x02, 0x4c, 0x09, 0x66, 0xe3, 0xe0, 0x04, - 0x2a, 0x01, 0xd1, 0x02, 0x23, 0x03, 0x4c, 0x06, - 0x66, 0xe3, 0x9b, 0x00, 0x4c, 0x04, 0x67, 0x23, - 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xcc, 0x00, 0x02, 0x20, - 0xcc, 0x00, 0x0f, 0x80, 0xb5, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x2e, 0x0e, 0x36, - 0xb0, 0x84, 0x48, 0x15, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x04, 0x20, 0x39, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x01, 0xd1, 0x0a, - 0x94, 0x00, 0x97, 0x01, 0x48, 0x0f, 0x90, 0x02, - 0x48, 0x0f, 0x90, 0x03, 0x46, 0x68, 0x21, 0x01, - 0xf0, 0x00, 0xfd, 0x1a, 0xe0, 0x0f, 0x20, 0x00, - 0x90, 0x00, 0x20, 0x00, 0x90, 0x01, 0x48, 0x09, - 0x90, 0x02, 0x48, 0x09, 0x90, 0x03, 0x46, 0x68, - 0x21, 0x01, 0xf0, 0x00, 0xfd, 0x0d, 0x21, 0x00, - 0x20, 0x02, 0xf7, 0xff, 0xfc, 0x85, 0x20, 0x00, - 0xb0, 0x04, 0xe7, 0xdc, 0xb0, 0x04, 0xe7, 0xda, - 0x2e, 0x08, 0xba, 0x28, 0x00, 0x00, 0x02, 0xcf, - 0x00, 0x00, 0x02, 0x3f, 0xb4, 0xb0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x48, 0x14, 0x6c, 0x00, - 0x1c, 0x01, 0x48, 0x13, 0x6f, 0x80, 0x23, 0x09, - 0x01, 0x9b, 0x42, 0x98, 0xd1, 0x12, 0x20, 0x02, - 0x40, 0x20, 0xd0, 0x0c, 0x2d, 0x02, 0xd1, 0x0a, - 0x2f, 0x03, 0xd1, 0x00, 0x31, 0x04, 0x2f, 0x03, - 0xd2, 0x05, 0x07, 0xe0, 0x0f, 0xc0, 0xd0, 0x01, - 0x31, 0x05, 0xe0, 0x00, 0x31, 0x08, 0x2d, 0x02, - 0xd9, 0x00, 0x21, 0x12, 0x00, 0x48, 0x18, 0x40, - 0x30, 0x01, 0x10, 0x40, 0x21, 0x2d, 0x02, 0x09, - 0x43, 0x41, 0x48, 0x03, 0x69, 0x40, 0x18, 0x09, - 0x1c, 0x08, 0xbc, 0xb0, 0x47, 0x70, 0xe7, 0xfc, - 0xcc, 0x00, 0x0f, 0x80, 0x48, 0x07, 0x6a, 0xc0, - 0x1c, 0x01, 0x00, 0x48, 0x18, 0x40, 0x30, 0x01, - 0x10, 0x40, 0x21, 0x2d, 0x02, 0x09, 0x43, 0x41, - 0x48, 0x03, 0x69, 0x40, 0x18, 0x09, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0xcc, 0x00, 0x00, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0x48, 0x07, 0x68, 0x80, - 0x28, 0x00, 0xd1, 0x03, 0x48, 0x06, 0x69, 0x00, - 0x1c, 0x01, 0xe0, 0x02, 0x48, 0x04, 0x68, 0xc0, - 0x1c, 0x01, 0x4b, 0x02, 0x18, 0xc9, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0xcc, 0x00, 0x00, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0xb5, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x48, 0x06, 0x6c, 0x40, 0x60, 0x20, - 0x48, 0x04, 0x6c, 0x80, 0x60, 0x38, 0xf7, 0xff, - 0xff, 0xe1, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xe7, 0xfb, 0x00, 0x00, 0xcc, 0x00, 0x02, 0x00, - 0xb5, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, - 0xf7, 0xff, 0xff, 0xd4, 0x1c, 0x06, 0x2d, 0x00, - 0xd0, 0x01, 0x2c, 0x00, 0xd1, 0x03, 0x20, 0x3a, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x08, 0x78, - 0x00, 0x40, 0xd0, 0x01, 0x20, 0x3a, 0xe7, 0xf7, - 0x20, 0x00, 0x49, 0x0d, 0x66, 0x88, 0x48, 0x0d, - 0x68, 0x01, 0x23, 0x12, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x0b, 0x63, 0x45, 0x48, 0x0a, 0x63, 0x84, - 0x20, 0x01, 0x49, 0x09, 0x62, 0x48, 0x48, 0x09, - 0x68, 0x01, 0x23, 0x01, 0x40, 0x59, 0x60, 0x01, - 0x48, 0x05, 0x63, 0xc7, 0x48, 0x02, 0x60, 0x46, - 0x20, 0x00, 0xe7, 0xdd, 0xe7, 0xdc, 0x00, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x0f, 0x48, - 0xcc, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x00, 0x08, - 0xb4, 0xf0, 0x1c, 0x07, 0x1c, 0x0c, 0x1c, 0x16, - 0x1c, 0x1d, 0x48, 0x10, 0x6a, 0x00, 0x28, 0x10, - 0xd0, 0x02, 0x20, 0x3b, 0xbc, 0xf0, 0x47, 0x70, - 0x48, 0x0d, 0x68, 0x00, 0x60, 0x38, 0x68, 0x38, - 0x4b, 0x0b, 0x18, 0xc0, 0x60, 0x38, 0x48, 0x0b, - 0x6b, 0x40, 0x60, 0x30, 0x48, 0x09, 0x6b, 0x80, - 0x60, 0x28, 0x48, 0x09, 0x6c, 0x80, 0x23, 0x10, - 0x40, 0x18, 0xd0, 0x02, 0x20, 0x02, 0x60, 0x20, - 0xe0, 0x01, 0x20, 0x01, 0x60, 0x20, 0x20, 0x00, - 0xe7, 0xe4, 0xe7, 0xe3, 0xcc, 0x00, 0x05, 0x00, - 0xcc, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x80, - 0xcc, 0x00, 0x0f, 0x00, 0xb4, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x2a, 0x0e, 0x12, - 0x06, 0x21, 0x0e, 0x09, 0x2f, 0x00, 0xd1, 0x30, - 0xb0, 0x81, 0x46, 0x6f, 0x2a, 0x00, 0xd0, 0x06, - 0x2a, 0x08, 0xd0, 0x0d, 0x2a, 0x10, 0xd0, 0x14, - 0x2a, 0x18, 0xd0, 0x1b, 0xe0, 0x23, 0x20, 0x00, - 0x70, 0x38, 0x20, 0x00, 0x70, 0x78, 0x20, 0x0c, - 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, 0xe0, 0x1b, - 0x20, 0x00, 0x70, 0x38, 0x20, 0x08, 0x70, 0x78, - 0x20, 0x1c, 0x70, 0xb8, 0x20, 0x00, 0x70, 0xf8, - 0xe0, 0x12, 0x20, 0x00, 0x70, 0x38, 0x20, 0x10, - 0x70, 0x78, 0x20, 0x0c, 0x70, 0xb8, 0x20, 0x00, - 0x70, 0xf8, 0xe0, 0x09, 0x20, 0x00, 0x70, 0x38, - 0x20, 0x18, 0x70, 0x78, 0x20, 0x1c, 0x70, 0xb8, - 0x20, 0x00, 0x70, 0xf8, 0xe0, 0x00, 0xe7, 0xff, - 0xb0, 0x01, 0x23, 0x00, 0x56, 0xf8, 0x23, 0x39, - 0x06, 0x5b, 0x60, 0x18, 0x23, 0x01, 0x56, 0xf8, - 0x23, 0x39, 0x06, 0x5b, 0x61, 0xd8, 0x29, 0x00, - 0xd1, 0x06, 0x48, 0x0e, 0x68, 0x06, 0x23, 0x20, - 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x03, 0xe0, 0x06, - 0x29, 0x20, 0xd1, 0x04, 0x48, 0x09, 0x68, 0x06, - 0x23, 0x20, 0x43, 0x33, 0x60, 0x03, 0x23, 0x02, - 0x56, 0xf8, 0x23, 0x39, 0x06, 0x5b, 0x60, 0x58, - 0x23, 0x03, 0x56, 0xf8, 0x4b, 0x04, 0x63, 0x18, - 0x20, 0x00, 0x23, 0x39, 0x06, 0x5b, 0x64, 0x98, - 0xbc, 0xf0, 0x47, 0x70, 0x72, 0x00, 0x00, 0x1c, - 0x72, 0x00, 0x01, 0x00, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0d, 0x1c, 0x14, 0x06, 0x29, 0x0e, 0x09, - 0x06, 0x22, 0x0e, 0x12, 0xb0, 0x84, 0x29, 0x33, - 0xdc, 0x01, 0x2a, 0x0f, 0xdd, 0x03, 0x20, 0xff, - 0xb0, 0x04, 0xbc, 0xb0, 0x47, 0x70, 0x20, 0x39, - 0x06, 0x40, 0x63, 0x41, 0x20, 0x10, 0x43, 0x10, - 0x23, 0x39, 0x06, 0x5b, 0x63, 0x98, 0x20, 0x39, - 0x06, 0x40, 0x68, 0x00, 0x90, 0x03, 0x98, 0x03, - 0x23, 0x9c, 0x43, 0xdb, 0x40, 0x18, 0x90, 0x03, - 0x20, 0x39, 0x06, 0x40, 0x68, 0x40, 0x90, 0x01, - 0x98, 0x01, 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, - 0x90, 0x01, 0x06, 0x38, 0x0e, 0x00, 0xd0, 0x29, - 0x20, 0x10, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x03, - 0x23, 0x80, 0x43, 0x18, 0x90, 0x03, 0x20, 0x08, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x03, 0x23, 0x10, - 0x43, 0x18, 0x90, 0x03, 0x20, 0x04, 0x40, 0x38, - 0xd0, 0x04, 0x98, 0x03, 0x23, 0x08, 0x43, 0x18, - 0x90, 0x03, 0xe0, 0x0c, 0x20, 0x02, 0x40, 0x38, - 0xd0, 0x04, 0x98, 0x03, 0x23, 0x0c, 0x43, 0x18, - 0x90, 0x03, 0xe0, 0x04, 0x98, 0x03, 0x23, 0x0c, - 0x43, 0xdb, 0x40, 0x18, 0x90, 0x03, 0x20, 0x20, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x01, 0x23, 0x20, - 0x43, 0x18, 0x90, 0x01, 0x98, 0x03, 0x23, 0x39, - 0x06, 0x5b, 0x60, 0x18, 0x98, 0x01, 0x23, 0x39, - 0x06, 0x5b, 0x60, 0x58, 0x20, 0x39, 0x06, 0x40, - 0x6a, 0x00, 0x90, 0x00, 0x98, 0x00, 0x23, 0xf0, - 0x43, 0xdb, 0x43, 0x18, 0x90, 0x00, 0x20, 0xff, - 0x02, 0x00, 0x40, 0x38, 0xd0, 0x27, 0x20, 0xff, - 0x30, 0x01, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xfe, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x02, 0x40, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xfd, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x02, 0x80, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xfb, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x02, 0xc0, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xf7, 0x40, 0x18, 0x90, 0x00, 0x20, 0x01, - 0x03, 0x00, 0x40, 0x38, 0xd0, 0x03, 0x98, 0x00, - 0x23, 0xf0, 0x40, 0x18, 0x90, 0x00, 0x98, 0x00, - 0x23, 0x39, 0x06, 0x5b, 0x62, 0x18, 0x20, 0x39, - 0x06, 0x40, 0x69, 0xc0, 0x90, 0x02, 0x98, 0x02, - 0x08, 0x40, 0x00, 0x40, 0x90, 0x02, 0x20, 0x39, - 0x06, 0x40, 0x6a, 0xc0, 0x90, 0x00, 0x98, 0x00, - 0x23, 0x1c, 0x43, 0xdb, 0x40, 0x18, 0x90, 0x00, - 0x20, 0x39, 0x06, 0x40, 0x6b, 0x80, 0x90, 0x03, - 0x98, 0x03, 0x23, 0x10, 0x43, 0xdb, 0x40, 0x18, - 0x90, 0x03, 0x20, 0x39, 0x06, 0x40, 0x6b, 0xc0, - 0x90, 0x01, 0x98, 0x01, 0x09, 0x00, 0x01, 0x00, - 0x90, 0x01, 0x48, 0x4a, 0x40, 0x38, 0xd0, 0x45, - 0x20, 0x01, 0x04, 0x00, 0x40, 0x38, 0xd0, 0x03, - 0x98, 0x02, 0x23, 0x01, 0x43, 0x18, 0x90, 0x02, - 0x20, 0x01, 0x05, 0xc0, 0x40, 0x38, 0xd0, 0x03, - 0x98, 0x00, 0x23, 0x10, 0x43, 0x18, 0x90, 0x00, - 0x20, 0x07, 0x04, 0x40, 0x40, 0x38, 0x23, 0x01, - 0x04, 0x5b, 0x42, 0x98, 0xd0, 0x08, 0x23, 0x01, - 0x04, 0x9b, 0x42, 0x98, 0xd0, 0x07, 0x23, 0x01, - 0x04, 0xdb, 0x42, 0x98, 0xd0, 0x08, 0xe0, 0x0c, - 0x98, 0x00, 0x90, 0x00, 0xe0, 0x0a, 0x98, 0x00, - 0x23, 0x04, 0x43, 0x18, 0x90, 0x00, 0xe0, 0x05, - 0x98, 0x00, 0x23, 0x0c, 0x43, 0x18, 0x90, 0x00, - 0xe0, 0x00, 0xe7, 0xff, 0x20, 0x01, 0x05, 0x80, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x03, 0x23, 0x10, - 0x43, 0x18, 0x90, 0x03, 0x20, 0x01, 0x05, 0x00, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x01, 0x23, 0x08, - 0x43, 0x18, 0x90, 0x01, 0x20, 0x01, 0x05, 0x40, - 0x40, 0x38, 0xd0, 0x03, 0x98, 0x01, 0x23, 0x07, - 0x43, 0x18, 0x90, 0x01, 0x98, 0x03, 0x23, 0x39, - 0x06, 0x5b, 0x63, 0x98, 0x98, 0x02, 0x23, 0x39, - 0x06, 0x5b, 0x61, 0xd8, 0x98, 0x01, 0x23, 0x39, - 0x06, 0x5b, 0x63, 0xd8, 0x98, 0x00, 0x23, 0x39, - 0x06, 0x5b, 0x62, 0xd8, 0x20, 0x39, 0x06, 0x40, - 0x68, 0x80, 0x90, 0x03, 0x98, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x90, 0x03, 0x0f, 0x38, 0x07, 0x00, - 0xd0, 0x26, 0x20, 0x01, 0x07, 0x00, 0x40, 0x38, - 0x23, 0x01, 0x07, 0x1b, 0x42, 0x98, 0xd1, 0x04, - 0x98, 0x03, 0x23, 0x02, 0x43, 0x18, 0x90, 0x03, - 0xe0, 0x07, 0x20, 0x00, 0x42, 0x80, 0xd1, 0x04, - 0x98, 0x03, 0x23, 0x02, 0x43, 0xdb, 0x40, 0x18, - 0x90, 0x03, 0x20, 0x01, 0x07, 0x40, 0x40, 0x38, - 0x23, 0x01, 0x07, 0x5b, 0x42, 0x98, 0xd1, 0x04, - 0x98, 0x03, 0x23, 0x01, 0x43, 0x18, 0x90, 0x03, - 0xe0, 0x06, 0x20, 0x00, 0x42, 0x80, 0xd1, 0x03, - 0x98, 0x03, 0x08, 0x40, 0x00, 0x40, 0x90, 0x03, - 0x98, 0x03, 0x23, 0x39, 0x06, 0x5b, 0x60, 0x98, - 0x20, 0x00, 0xb0, 0x04, 0xe6, 0xc1, 0xb0, 0x04, - 0xe6, 0xbf, 0x00, 0x00, 0x0f, 0xff, 0x00, 0x00, - 0x48, 0x02, 0x69, 0xc0, 0x06, 0x00, 0x16, 0x00, - 0x47, 0x70, 0xe7, 0xfd, 0x72, 0x00, 0x01, 0x00, - 0xb5, 0xf7, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x23, - 0x16, 0x18, 0x06, 0x3b, 0x16, 0x19, 0x9b, 0x02, - 0x06, 0x1a, 0x0e, 0x12, 0x2a, 0x00, 0xd1, 0x0b, - 0x23, 0x39, 0x06, 0x5b, 0x60, 0xd8, 0x23, 0x39, - 0x06, 0x5b, 0x61, 0x19, 0x4d, 0x0b, 0x68, 0x2e, - 0x23, 0x01, 0x43, 0x33, 0x60, 0x2b, 0xe0, 0x0c, - 0x2a, 0x01, 0xd1, 0x0a, 0x23, 0x39, 0x06, 0x5b, - 0x61, 0x58, 0x23, 0x39, 0x06, 0x5b, 0x61, 0x99, - 0x4d, 0x04, 0x68, 0x2e, 0x23, 0x02, 0x43, 0x33, - 0x60, 0x2b, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x72, 0x00, 0x00, 0x08, - 0xb4, 0x90, 0x1c, 0x01, 0x20, 0x92, 0x4b, 0x4b, - 0x60, 0x18, 0x20, 0x92, 0x4b, 0x4a, 0x60, 0x18, - 0x20, 0x10, 0x4b, 0x4a, 0x60, 0x18, 0x20, 0x00, - 0x4b, 0x48, 0x60, 0x58, 0x48, 0x48, 0x4b, 0x47, - 0x60, 0x98, 0x22, 0x00, 0x2a, 0x10, 0xdb, 0x02, - 0xe0, 0x07, 0x32, 0x01, 0xe7, 0xfa, 0x20, 0x00, - 0x43, 0xc0, 0x00, 0x93, 0x4c, 0x42, 0x50, 0xe0, - 0xe7, 0xf7, 0x20, 0x00, 0x43, 0xc0, 0x00, 0x93, - 0x4c, 0x3f, 0x50, 0xe0, 0x22, 0x00, 0x2a, 0x08, - 0xdb, 0x02, 0xe0, 0x08, 0x32, 0x01, 0xe7, 0xfa, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0x94, 0x4b, 0x3b, - 0x18, 0xe3, 0x64, 0x18, 0xe7, 0xf6, 0x22, 0x00, - 0x2a, 0x20, 0xdb, 0x02, 0xe0, 0x08, 0x32, 0x01, - 0xe7, 0xfa, 0x20, 0x00, 0x43, 0xc0, 0x00, 0x94, - 0x4b, 0x35, 0x18, 0xe3, 0x60, 0x18, 0xe7, 0xf6, - 0x22, 0x00, 0x2a, 0x19, 0xdb, 0x02, 0xe0, 0x06, - 0x32, 0x01, 0xe7, 0xfa, 0x20, 0x00, 0x00, 0x93, - 0x4c, 0x30, 0x50, 0xe0, 0xe7, 0xf8, 0x20, 0x00, - 0x4b, 0x2f, 0x60, 0x18, 0x20, 0x39, 0x06, 0x40, - 0x69, 0xc0, 0x27, 0x18, 0x40, 0x07, 0x2f, 0x00, - 0xd0, 0x03, 0x48, 0x2c, 0x4b, 0x2c, 0x60, 0x18, - 0xe0, 0x03, 0x20, 0xff, 0x30, 0xe0, 0x4b, 0x2a, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x29, 0x60, 0x18, - 0x20, 0x00, 0x4b, 0x28, 0x60, 0x58, 0x48, 0x28, - 0x4b, 0x26, 0x60, 0x98, 0x48, 0x24, 0x68, 0x00, - 0x4b, 0x24, 0x60, 0xd8, 0x48, 0x25, 0x60, 0x01, - 0x20, 0x0d, 0x06, 0xc0, 0x61, 0xc1, 0x20, 0x05, - 0x02, 0x00, 0x23, 0x0d, 0x06, 0xdb, 0x60, 0x18, - 0x48, 0x21, 0x23, 0x0d, 0x06, 0xdb, 0x60, 0x58, - 0x48, 0x1f, 0x4b, 0x16, 0x63, 0x98, 0x20, 0x00, - 0x23, 0x0d, 0x06, 0xdb, 0x60, 0x98, 0x20, 0x00, - 0x23, 0x0d, 0x06, 0xdb, 0x61, 0x18, 0x48, 0x1b, - 0x23, 0x0d, 0x06, 0xdb, 0x61, 0x98, 0x20, 0x01, - 0x23, 0x0d, 0x06, 0xdb, 0x60, 0xd8, 0x48, 0x18, - 0x23, 0x0d, 0x06, 0xdb, 0x63, 0x18, 0x48, 0x17, - 0x23, 0x0d, 0x06, 0xdb, 0x63, 0x58, 0x20, 0x00, - 0x4b, 0x15, 0x60, 0x18, 0x48, 0x11, 0x4b, 0x15, - 0x60, 0x18, 0x20, 0x00, 0xbc, 0x90, 0x47, 0x70, - 0xe7, 0xfc, 0x00, 0x00, 0x2e, 0x08, 0xba, 0x30, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xbb, 0x00, - 0x2e, 0x08, 0xba, 0x38, 0x68, 0x00, 0x0d, 0x00, - 0x68, 0x00, 0x04, 0x00, 0x2e, 0x08, 0xb9, 0xc4, - 0x2e, 0x08, 0xba, 0x28, 0x00, 0x00, 0x02, 0x3f, - 0x2e, 0x08, 0x9d, 0xec, 0x2e, 0x08, 0xbb, 0x0c, - 0x00, 0x00, 0x02, 0xcf, 0x2e, 0x08, 0x9d, 0xf0, - 0x00, 0xf0, 0x29, 0x6d, 0x3f, 0xff, 0xff, 0xff, - 0x00, 0x80, 0x10, 0x80, 0x00, 0x80, 0xeb, 0x80, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0x9b, 0xb8, - 0xb5, 0xff, 0xb0, 0x85, 0x20, 0x39, 0x06, 0x40, - 0x69, 0xc0, 0x23, 0x18, 0x40, 0x18, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x00, 0xd0, 0x03, 0x48, 0x5a, - 0x4b, 0x5a, 0x60, 0x18, 0xe0, 0x03, 0x20, 0xff, - 0x30, 0xe0, 0x4b, 0x58, 0x60, 0x18, 0x9c, 0x06, - 0x9f, 0x07, 0x22, 0x00, 0x21, 0x00, 0x98, 0x05, - 0x38, 0x0c, 0x28, 0x06, 0xd2, 0x0c, 0xa3, 0x02, - 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x04, 0x03, 0x06, 0x04, 0x03, 0x06, 0x32, 0x01, - 0x32, 0x01, 0xe0, 0x02, 0x3a, 0x01, 0xe0, 0x00, - 0xe7, 0xff, 0x98, 0x05, 0x38, 0x0b, 0x28, 0x08, - 0xd2, 0x15, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x0a, 0x04, 0x04, 0x04, - 0x0a, 0x0a, 0x0a, 0x04, 0x25, 0x2d, 0x01, 0x2d, - 0x48, 0x44, 0x68, 0x00, 0x1c, 0x46, 0xe0, 0x0e, - 0x48, 0x43, 0x6c, 0x40, 0x1c, 0x05, 0x48, 0x43, - 0x68, 0x40, 0x1c, 0x06, 0xe0, 0x07, 0x21, 0xff, - 0x1c, 0x08, 0xb0, 0x05, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xff, 0x2d, 0x00, - 0xd0, 0x01, 0x2e, 0x00, 0xd1, 0x04, 0x25, 0x2d, - 0x01, 0x2d, 0x48, 0x38, 0x68, 0x00, 0x1c, 0x46, - 0x29, 0xff, 0xd1, 0x02, 0x1c, 0x08, 0xb0, 0x05, - 0xe7, 0xec, 0x1e, 0x68, 0x90, 0x02, 0x1e, 0x70, - 0x90, 0x01, 0x23, 0x01, 0x42, 0xda, 0xd1, 0x08, - 0x42, 0x50, 0x40, 0x85, 0x1c, 0x2b, 0x1e, 0x5d, - 0x42, 0x50, 0x40, 0x86, 0x1c, 0x33, 0x1e, 0x5e, - 0xe0, 0x05, 0x41, 0x15, 0x1c, 0x28, 0x1e, 0x45, - 0x41, 0x16, 0x1c, 0x30, 0x1e, 0x46, 0x07, 0xe0, - 0x0f, 0xc0, 0xd0, 0x02, 0x21, 0x80, 0x08, 0x64, - 0x00, 0x64, 0x07, 0xf8, 0x0f, 0xc0, 0xd0, 0x02, - 0x21, 0x80, 0x08, 0x7f, 0x00, 0x7f, 0x19, 0x60, - 0x90, 0x04, 0x19, 0xb8, 0x90, 0x03, 0x2c, 0x00, - 0xda, 0x01, 0x21, 0x80, 0x24, 0x00, 0x98, 0x04, - 0x28, 0x01, 0xda, 0x02, 0x21, 0x80, 0x20, 0x01, - 0x90, 0x04, 0x4b, 0x1f, 0x42, 0x9c, 0xdb, 0x01, - 0x21, 0x80, 0x4c, 0x1e, 0x98, 0x04, 0x4b, 0x1c, - 0x42, 0x98, 0xdd, 0x02, 0x21, 0x80, 0x48, 0x1a, - 0x90, 0x04, 0x2f, 0x00, 0xda, 0x01, 0x21, 0x80, - 0x27, 0x00, 0x98, 0x03, 0x28, 0x01, 0xda, 0x02, - 0x21, 0x80, 0x20, 0x01, 0x90, 0x03, 0x48, 0x11, - 0x68, 0x00, 0x42, 0x87, 0xd3, 0x03, 0x21, 0x80, - 0x48, 0x0e, 0x68, 0x00, 0x1e, 0x47, 0x98, 0x03, - 0x4b, 0x0c, 0x68, 0x1b, 0x42, 0x98, 0xd9, 0x03, - 0x21, 0x80, 0x48, 0x0a, 0x68, 0x00, 0x90, 0x03, - 0x9b, 0x08, 0x60, 0x1c, 0x9b, 0x08, 0x60, 0x5f, - 0x98, 0x04, 0x9b, 0x08, 0x60, 0x98, 0x98, 0x03, - 0x9b, 0x08, 0x60, 0xd8, 0x1c, 0x08, 0xb0, 0x05, - 0xe7, 0x88, 0xb0, 0x05, 0xe7, 0x86, 0x00, 0x00, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0x9d, 0xec, - 0xcc, 0x00, 0x02, 0x00, 0xcc, 0x00, 0x0c, 0x00, - 0x00, 0x00, 0x02, 0xcf, 0x00, 0x00, 0x02, 0xce, - 0xb5, 0xf0, 0x1c, 0x07, 0x1c, 0x0c, 0xb0, 0x81, - 0x2c, 0x0b, 0xdb, 0x19, 0x2c, 0x12, 0xdc, 0x17, - 0x68, 0xbe, 0x68, 0xf9, 0x91, 0x00, 0x68, 0x7a, - 0x1c, 0x3b, 0x68, 0x39, 0x1c, 0x20, 0xf7, 0xff, - 0xff, 0x23, 0x1c, 0x05, 0x68, 0xb8, 0x42, 0xb0, - 0xd0, 0x00, 0x25, 0x80, 0x68, 0xf8, 0x99, 0x00, - 0x42, 0x88, 0xd0, 0x00, 0x25, 0x80, 0x1c, 0x28, - 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x25, 0x00, 0x68, 0x38, 0x28, 0x00, 0xda, 0x02, - 0x25, 0x80, 0x20, 0x00, 0x60, 0x38, 0x68, 0x78, - 0x28, 0x00, 0xda, 0x02, 0x25, 0x80, 0x20, 0x00, - 0x60, 0x78, 0x68, 0x38, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x04, 0x25, 0x80, 0x68, 0x38, 0x08, 0x40, - 0x00, 0x40, 0x60, 0x38, 0x68, 0xb8, 0x07, 0xc0, - 0x0f, 0xc0, 0xd1, 0x09, 0x25, 0x80, 0x68, 0xb8, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x68, 0xb8, - 0xe0, 0x01, 0x68, 0xb8, 0x38, 0x01, 0x60, 0xb8, - 0x68, 0xb8, 0x68, 0x39, 0x42, 0x88, 0xdc, 0x03, - 0x25, 0x80, 0x68, 0x38, 0x30, 0x01, 0x60, 0xb8, - 0x68, 0x78, 0x68, 0xf9, 0x42, 0x88, 0xdb, 0x03, - 0x25, 0x80, 0x68, 0x78, 0x30, 0x01, 0x60, 0xf8, - 0x1c, 0x28, 0xb0, 0x01, 0xe7, 0xc5, 0xb0, 0x01, - 0xe7, 0xc3, 0x1c, 0x02, 0x21, 0x18, 0xe0, 0x00, - 0x31, 0x01, 0x1c, 0x08, 0x47, 0x70, 0xe7, 0xfd, - 0xb4, 0xf0, 0x1c, 0x07, 0x1c, 0x0a, 0xb0, 0x81, - 0x68, 0xb8, 0x68, 0x3b, 0x1a, 0xc0, 0x1c, 0x46, - 0x68, 0xf8, 0x68, 0x7b, 0x1a, 0xc0, 0x30, 0x01, - 0x90, 0x00, 0x00, 0x90, 0x4b, 0x15, 0x58, 0x1c, - 0x98, 0x00, 0x43, 0x46, 0x1c, 0x35, 0x07, 0xa0, - 0x0f, 0x80, 0x1c, 0x29, 0x40, 0x81, 0x2a, 0x0b, - 0xdb, 0x01, 0x2a, 0x12, 0xdd, 0x01, 0x2a, 0x13, - 0xd1, 0x01, 0x21, 0x00, 0xe0, 0x0a, 0x2a, 0x09, - 0xd0, 0x01, 0x2a, 0x0a, 0xd1, 0x03, 0x00, 0x69, - 0x19, 0x49, 0x00, 0xc9, 0xe0, 0x02, 0x2a, 0x08, - 0xd1, 0x00, 0x01, 0x29, 0x20, 0x04, 0x40, 0x20, - 0xd0, 0x00, 0x08, 0x49, 0x09, 0x4c, 0x06, 0xc8, - 0x0e, 0xc0, 0xd0, 0x00, 0x34, 0x01, 0x1c, 0x20, - 0xb0, 0x01, 0xbc, 0xf0, 0x47, 0x70, 0xb0, 0x01, - 0xe7, 0xfb, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0x78, - 0xb4, 0x80, 0x23, 0x00, 0x22, 0x01, 0x21, 0x00, - 0x29, 0x08, 0xdb, 0x02, 0xe0, 0x09, 0x31, 0x01, - 0xe7, 0xfa, 0x00, 0x88, 0x4f, 0x05, 0x58, 0x38, - 0x28, 0x00, 0xd0, 0x00, 0x43, 0x13, 0x00, 0x52, - 0xe7, 0xf5, 0x1c, 0x18, 0xbc, 0x80, 0x47, 0x70, - 0xe7, 0xfc, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xc4, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x81, 0x20, 0x39, - 0x06, 0x40, 0x69, 0xc0, 0x23, 0x18, 0x40, 0x18, - 0x90, 0x00, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x03, - 0x48, 0x32, 0x49, 0x33, 0x60, 0x08, 0xe0, 0x03, - 0x20, 0xff, 0x30, 0xe0, 0x49, 0x30, 0x60, 0x08, - 0x24, 0x00, 0x99, 0x01, 0x48, 0x2f, 0xf7, 0xfc, - 0xfa, 0x1f, 0x48, 0x2e, 0x68, 0x00, 0x28, 0x00, - 0xda, 0x03, 0x20, 0x00, 0x49, 0x2b, 0x60, 0x08, - 0x24, 0x80, 0x48, 0x2a, 0x68, 0x40, 0x28, 0x00, - 0xda, 0x03, 0x20, 0x00, 0x49, 0x27, 0x60, 0x48, - 0x24, 0x80, 0x48, 0x26, 0x68, 0x80, 0x4b, 0x26, - 0x42, 0x98, 0xdd, 0x03, 0x48, 0x24, 0x49, 0x23, - 0x60, 0x88, 0x24, 0x80, 0x48, 0x21, 0x68, 0xc0, - 0x49, 0x1f, 0x68, 0x09, 0x42, 0x88, 0xd9, 0x04, - 0x48, 0x1d, 0x68, 0x00, 0x49, 0x1d, 0x60, 0xc8, - 0x24, 0x80, 0x48, 0x1e, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x27, 0x2f, 0x01, 0xd1, 0x25, 0x48, 0x19, - 0x68, 0x06, 0x48, 0x18, 0x68, 0x45, 0x23, 0xff, - 0x33, 0x68, 0x42, 0x9e, 0xdd, 0x01, 0x26, 0xff, - 0x36, 0x68, 0x48, 0x13, 0x68, 0x00, 0x08, 0x40, - 0x42, 0xa8, 0xd2, 0x02, 0x48, 0x10, 0x68, 0x00, - 0x08, 0x45, 0x48, 0x13, 0x49, 0x13, 0x65, 0x48, - 0x48, 0x13, 0x43, 0x70, 0x23, 0x01, 0x04, 0x1b, - 0x18, 0xc0, 0x14, 0x40, 0x49, 0x0f, 0x65, 0x88, - 0x20, 0x00, 0x49, 0x0e, 0x65, 0xc8, 0x48, 0x0d, - 0x66, 0x05, 0x1c, 0x38, 0x21, 0x00, 0xf7, 0xfe, - 0xff, 0x13, 0x1c, 0x20, 0xb0, 0x01, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, - 0xe7, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x02, 0x3f, - 0x2e, 0x08, 0x9d, 0xec, 0x2e, 0x08, 0xbb, 0x0c, - 0x00, 0x00, 0x02, 0xcf, 0x2e, 0x08, 0xba, 0x28, - 0x00, 0x00, 0x07, 0xfa, 0xcc, 0x00, 0x00, 0x00, - 0x00, 0x0b, 0x60, 0xb6, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0xb0, 0x81, 0x1c, 0x26, 0x69, 0x30, - 0x90, 0x00, 0x98, 0x00, 0x28, 0x13, 0xd1, 0x04, - 0x20, 0x75, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xf5, 0x68, 0x38, 0x08, 0x40, - 0x00, 0x40, 0x60, 0x38, 0x68, 0x78, 0x08, 0x40, - 0x00, 0x40, 0x60, 0x78, 0x68, 0xb8, 0x07, 0xc0, - 0x0f, 0xc0, 0xd1, 0x02, 0x68, 0xb8, 0x38, 0x01, - 0x60, 0xb8, 0x68, 0xf8, 0x07, 0xc0, 0x0f, 0xc0, - 0xd1, 0x02, 0x68, 0xf8, 0x38, 0x01, 0x60, 0xf8, - 0x1d, 0xf0, 0x30, 0x49, 0x1c, 0x39, 0xf7, 0xfc, - 0xf9, 0x8b, 0x48, 0x1c, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x2d, 0x19, 0xd3, 0x01, 0x20, 0x01, - 0xe0, 0x00, 0x20, 0x00, 0xe0, 0x04, 0x2d, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x01, - 0xe7, 0xcc, 0x49, 0x13, 0x20, 0x91, 0xf0, 0x14, - 0xff, 0x47, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x05, 0xfa, 0xf4, 0xe7, 0xf5, 0x00, 0xa8, - 0x49, 0x0e, 0x58, 0x08, 0x42, 0xa0, 0xd0, 0x05, - 0x20, 0x92, 0x49, 0x0b, 0x60, 0x08, 0x20, 0xff, - 0xb0, 0x01, 0xe7, 0xb7, 0x48, 0x0a, 0x68, 0x00, - 0x42, 0xa0, 0xd1, 0x03, 0x1c, 0x39, 0x1c, 0x20, - 0xf0, 0x00, 0xf8, 0x10, 0x20, 0x92, 0x49, 0x04, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xa9, - 0xb0, 0x01, 0xe7, 0xa7, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x2c, 0x2e, 0x08, 0xb9, 0xc4, - 0x2e, 0x08, 0xba, 0x28, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x9b, 0x20, 0x39, 0x06, 0x40, 0x69, 0xc0, - 0x23, 0x18, 0x40, 0x18, 0x90, 0x01, 0x98, 0x01, - 0x28, 0x00, 0xd0, 0x03, 0x48, 0xf8, 0x49, 0xf9, - 0x60, 0x08, 0xe0, 0x03, 0x20, 0xff, 0x30, 0xe0, - 0x49, 0xf6, 0x60, 0x08, 0x20, 0xff, 0x30, 0x01, - 0x90, 0x06, 0x98, 0x1b, 0x90, 0x1a, 0x98, 0x1a, - 0x69, 0x05, 0x98, 0x1a, 0x68, 0xc0, 0x90, 0x19, - 0x48, 0xf1, 0x68, 0x00, 0x99, 0x1b, 0x42, 0x88, - 0xd1, 0x73, 0x20, 0x02, 0x90, 0x08, 0x2d, 0x0c, - 0xd0, 0x01, 0x2d, 0x0f, 0xd1, 0x02, 0x20, 0x04, - 0x90, 0x08, 0xe0, 0x0c, 0x2d, 0x0d, 0xd0, 0x01, - 0x2d, 0x10, 0xd1, 0x02, 0x20, 0x08, 0x90, 0x08, - 0xe0, 0x05, 0x2d, 0x0e, 0xd0, 0x01, 0x2d, 0x11, - 0xd1, 0x01, 0x20, 0x01, 0x90, 0x08, 0x68, 0xf8, - 0x68, 0x79, 0x1a, 0x40, 0x1c, 0x44, 0x2d, 0x0b, - 0xd0, 0x05, 0x2d, 0x0f, 0xd0, 0x03, 0x2d, 0x10, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x11, 0x48, 0xdf, - 0x6c, 0x40, 0x1c, 0x06, 0x48, 0xdd, 0x6c, 0x81, - 0x91, 0x07, 0x2e, 0x00, 0xd0, 0x02, 0x99, 0x07, - 0x29, 0x00, 0xd1, 0x05, 0x26, 0x2d, 0x01, 0x36, - 0x48, 0xd6, 0x68, 0x00, 0x1c, 0x41, 0x91, 0x07, - 0xe0, 0x05, 0x26, 0x2d, 0x01, 0x36, 0x48, 0xd3, - 0x68, 0x00, 0x1c, 0x41, 0x91, 0x07, 0x49, 0xd4, - 0xa8, 0x15, 0xf7, 0xfc, 0xf8, 0xe9, 0x98, 0x17, - 0x1e, 0x71, 0x42, 0x88, 0xdd, 0x01, 0x1e, 0x70, - 0x90, 0x17, 0x98, 0x18, 0x99, 0x07, 0x39, 0x01, - 0x42, 0x88, 0xdd, 0x02, 0x99, 0x07, 0x1e, 0x48, - 0x90, 0x18, 0x98, 0x18, 0x99, 0x16, 0x1a, 0x40, - 0x00, 0x40, 0x1c, 0x81, 0x98, 0x08, 0xf0, 0x06, - 0xfb, 0xd3, 0x90, 0x0a, 0x98, 0x0a, 0x42, 0x84, - 0xdd, 0x00, 0x9c, 0x0a, 0x48, 0xc5, 0x6f, 0x00, - 0x90, 0x02, 0x20, 0x00, 0x90, 0x05, 0x98, 0x02, - 0x28, 0x02, 0xd0, 0x02, 0x98, 0x02, 0x28, 0x03, - 0xd1, 0x3a, 0x48, 0xc1, 0x6b, 0x00, 0x90, 0x04, - 0x48, 0xbe, 0x6e, 0xc1, 0x91, 0x03, 0x98, 0x04, - 0x99, 0x03, 0x42, 0x88, 0xdd, 0x21, 0x20, 0xc0, - 0x90, 0x06, 0x1d, 0x20, 0x28, 0x00, 0xda, 0x02, - 0xe0, 0x00, 0xe1, 0x8e, 0x30, 0x07, 0x10, 0xc0, - 0x90, 0x05, 0x98, 0x04, 0x28, 0x03, 0xd0, 0x14, - 0x99, 0x03, 0x29, 0x03, 0xd1, 0x07, 0x20, 0xcd, - 0x90, 0x06, 0x1d, 0x61, 0x20, 0x0a, 0xf0, 0x06, - 0xfb, 0xa3, 0x90, 0x05, 0xe0, 0x09, 0x98, 0x02, - 0x28, 0x02, 0xd1, 0x06, 0x20, 0x9a, 0x90, 0x06, - 0x1c, 0xa1, 0x20, 0x05, 0xf0, 0x06, 0xfb, 0x98, - 0x90, 0x05, 0x98, 0x06, 0x28, 0x9a, 0xd0, 0x02, - 0x98, 0x06, 0x28, 0xcd, 0xd1, 0x08, 0x2d, 0x0e, - 0xd0, 0x01, 0x2d, 0x11, 0xd1, 0x04, 0x20, 0x00, - 0x90, 0x05, 0x20, 0xff, 0x30, 0x01, 0x90, 0x06, - 0x2d, 0x12, 0xd1, 0x0b, 0x48, 0x9d, 0x68, 0x00, - 0x30, 0x01, 0x42, 0xa0, 0xd1, 0x06, 0x68, 0x78, - 0x28, 0x00, 0xd1, 0x03, 0x20, 0x01, 0x49, 0x9f, - 0x63, 0x48, 0xe0, 0x02, 0x20, 0x00, 0x49, 0x9d, - 0x63, 0x48, 0x98, 0x0a, 0x99, 0x06, 0x43, 0x48, - 0x28, 0x00, 0xda, 0x00, 0x30, 0xff, 0x12, 0x00, - 0x42, 0xa0, 0xdd, 0x04, 0x20, 0x00, 0x90, 0x05, - 0x20, 0xff, 0x30, 0x01, 0x90, 0x06, 0x68, 0x78, - 0x99, 0x05, 0x18, 0x40, 0x60, 0x78, 0x1c, 0x39, - 0xa8, 0x11, 0xf7, 0xfc, 0xf8, 0x61, 0x1c, 0x29, - 0xa8, 0x11, 0xf7, 0xff, 0xfd, 0x71, 0x98, 0x12, - 0x49, 0x88, 0x68, 0x09, 0x39, 0x01, 0x42, 0x88, - 0xd1, 0x00, 0x24, 0x00, 0x99, 0x15, 0x91, 0x0d, - 0x98, 0x16, 0x90, 0x0f, 0x21, 0x00, 0x91, 0x10, - 0x68, 0x38, 0x28, 0x00, 0xda, 0x08, 0x68, 0x38, - 0x99, 0x08, 0x43, 0x48, 0x42, 0x41, 0x29, 0x00, - 0xda, 0x00, 0x31, 0x01, 0x10, 0x49, 0x91, 0x10, - 0x68, 0x78, 0x28, 0x00, 0xda, 0x0d, 0x68, 0x78, - 0x99, 0x08, 0x43, 0x48, 0x28, 0x00, 0xda, 0x00, - 0x30, 0x01, 0x10, 0x40, 0x02, 0x01, 0x98, 0x06, - 0xf0, 0x06, 0xfb, 0x36, 0x99, 0x0f, 0x1a, 0x08, - 0x90, 0x0f, 0x98, 0x18, 0x99, 0x0f, 0x42, 0x88, - 0xdc, 0x02, 0x98, 0x18, 0x30, 0x01, 0x90, 0x0f, - 0x98, 0x17, 0x99, 0x0d, 0x1a, 0x40, 0x30, 0x01, - 0x90, 0x0e, 0x98, 0x18, 0x99, 0x0f, 0x1a, 0x40, - 0x30, 0x01, 0x90, 0x09, 0x98, 0x09, 0x00, 0x41, - 0x98, 0x08, 0xf0, 0x06, 0xfb, 0x1d, 0x99, 0x06, - 0x43, 0x48, 0x28, 0x00, 0xda, 0x00, 0x30, 0xff, - 0x12, 0x00, 0x90, 0x09, 0x68, 0xb8, 0x68, 0x39, - 0x1a, 0x40, 0x1c, 0x41, 0x91, 0x0c, 0x98, 0x17, - 0x99, 0x15, 0x1a, 0x40, 0x00, 0x40, 0x1c, 0x81, - 0x98, 0x08, 0xf0, 0x06, 0xfb, 0x09, 0x90, 0x0b, - 0x98, 0x0b, 0x4b, 0x65, 0x40, 0x18, 0x90, 0x0b, - 0x98, 0x0b, 0x99, 0x08, 0x43, 0x48, 0x28, 0x00, - 0xda, 0x00, 0x30, 0x01, 0x10, 0x40, 0x90, 0x0e, - 0x99, 0x0c, 0x98, 0x0b, 0x42, 0x81, 0xdd, 0x01, - 0x98, 0x0b, 0x90, 0x0c, 0x99, 0x0c, 0x4b, 0x5c, - 0x40, 0x19, 0x91, 0x0c, 0x98, 0x0c, 0x28, 0x00, - 0xdd, 0x05, 0x68, 0x38, 0x99, 0x0c, 0x18, 0x40, - 0x38, 0x01, 0x90, 0x13, 0xe0, 0x02, 0x68, 0x38, - 0x30, 0x01, 0x90, 0x13, 0x98, 0x13, 0x28, 0x01, - 0xda, 0x01, 0x20, 0x01, 0x90, 0x13, 0x98, 0x13, - 0x4b, 0x52, 0x42, 0x98, 0xdd, 0x01, 0x48, 0x51, - 0x90, 0x13, 0x99, 0x06, 0x43, 0x4c, 0x1c, 0x20, - 0x28, 0x00, 0xda, 0x00, 0x30, 0xff, 0x12, 0x04, - 0x98, 0x0a, 0x42, 0x84, 0xdd, 0x00, 0x9c, 0x0a, - 0x2c, 0x02, 0xda, 0x00, 0x24, 0x02, 0x68, 0x78, - 0x19, 0x00, 0x38, 0x01, 0x90, 0x14, 0x98, 0x14, - 0x28, 0x01, 0xda, 0x01, 0x20, 0x01, 0x90, 0x14, - 0x98, 0x14, 0x49, 0x3c, 0x68, 0x09, 0x42, 0x88, - 0xd9, 0x02, 0x48, 0x3a, 0x68, 0x00, 0x90, 0x14, - 0x98, 0x12, 0x49, 0x38, 0x68, 0x09, 0x39, 0x01, - 0x42, 0x88, 0xd9, 0x03, 0x48, 0x35, 0x68, 0x00, - 0x38, 0x01, 0x90, 0x12, 0x98, 0x09, 0x28, 0x04, - 0xdb, 0x01, 0x2c, 0x04, 0xda, 0x01, 0x20, 0x00, - 0x90, 0x0e, 0x98, 0x0e, 0x28, 0x03, 0xdb, 0x02, - 0x98, 0x0c, 0x28, 0x04, 0xda, 0x09, 0x20, 0x00, - 0x90, 0x0e, 0x48, 0x35, 0x90, 0x11, 0x48, 0x33, - 0x90, 0x13, 0x20, 0x00, 0x90, 0x12, 0x20, 0x01, - 0x90, 0x14, 0x21, 0x00, 0x91, 0x00, 0x98, 0x08, - 0x28, 0x01, 0xd1, 0x16, 0x98, 0x0e, 0x99, 0x10, - 0x1a, 0x40, 0x00, 0x40, 0x4b, 0x2b, 0x42, 0x98, - 0xdd, 0x0b, 0x98, 0x0e, 0x99, 0x10, 0x1a, 0x40, - 0x00, 0x40, 0x23, 0x2d, 0x01, 0x1b, 0x1a, 0xc1, - 0x29, 0x00, 0xda, 0x00, 0x31, 0x01, 0x10, 0x49, - 0x91, 0x00, 0x98, 0x0e, 0x42, 0xb0, 0xdd, 0x00, - 0x96, 0x0e, 0x99, 0x10, 0x42, 0xb1, 0xdd, 0x00, - 0x96, 0x10, 0x1c, 0x30, 0x21, 0x01, 0x07, 0x49, - 0xf0, 0x06, 0xfa, 0x76, 0x99, 0x0d, 0x43, 0x48, - 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc0, 0x14, 0x40, - 0x49, 0x1c, 0x65, 0x88, 0x1c, 0x30, 0x21, 0x01, - 0x07, 0x49, 0xf0, 0x06, 0xfa, 0x69, 0x99, 0x10, - 0x43, 0x48, 0x23, 0x01, 0x04, 0x1b, 0x18, 0xc0, - 0x14, 0x40, 0x49, 0x16, 0x65, 0xc8, 0x1c, 0x30, - 0x21, 0x01, 0x07, 0x49, 0xf0, 0x06, 0xfa, 0x5c, - 0x99, 0x0e, 0x43, 0x48, 0x23, 0x01, 0x04, 0x1b, - 0x18, 0xc0, 0x14, 0x40, 0x49, 0x0f, 0x65, 0x48, - 0x99, 0x07, 0x1f, 0x08, 0x99, 0x0f, 0x42, 0x88, - 0xdc, 0x1b, 0x99, 0x07, 0x1f, 0x08, 0xe0, 0x17, - 0x00, 0x00, 0x02, 0x3f, 0x2e, 0x08, 0x9d, 0xec, - 0x2e, 0x08, 0xba, 0x28, 0xcc, 0x00, 0x02, 0x00, - 0x2e, 0x08, 0xbb, 0x0c, 0xcc, 0x00, 0x0f, 0x80, - 0xcc, 0x00, 0x00, 0x80, 0xcc, 0x00, 0x01, 0x00, - 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x02, 0xcf, - 0x00, 0x00, 0x02, 0xce, 0xcc, 0x00, 0x00, 0x00, - 0x90, 0x0f, 0x98, 0x0f, 0x49, 0x0d, 0x66, 0x08, - 0x1c, 0x30, 0x21, 0x01, 0x07, 0x49, 0xf0, 0x06, - 0xfa, 0x2b, 0x99, 0x00, 0x43, 0x48, 0x23, 0x01, - 0x04, 0x1b, 0x18, 0xc0, 0x14, 0x40, 0x49, 0x07, - 0x66, 0x48, 0xa9, 0x11, 0x1c, 0x38, 0xf7, 0xfb, - 0xff, 0x1f, 0x20, 0x00, 0xb0, 0x1b, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x1b, - 0xe7, 0xf9, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, - 0xb4, 0xb0, 0x1c, 0x02, 0x1c, 0x0f, 0x2a, 0x00, - 0xd1, 0x02, 0x20, 0x01, 0xbc, 0xb0, 0x47, 0x70, - 0x2f, 0x01, 0xd1, 0x20, 0x20, 0x00, 0x23, 0x00, - 0x4d, 0x13, 0x62, 0x2b, 0x23, 0x00, 0x4d, 0x12, - 0x62, 0xab, 0x4b, 0x12, 0x68, 0x9b, 0x1c, 0x1c, - 0x4b, 0x11, 0x6e, 0xdb, 0x1c, 0x19, 0x2c, 0x02, - 0xd0, 0x01, 0x29, 0x02, 0xd1, 0x01, 0x20, 0x08, - 0xe0, 0x00, 0x20, 0x07, 0x79, 0x13, 0x2b, 0x00, - 0xd0, 0x01, 0x23, 0x10, 0x43, 0x18, 0x4b, 0x08, - 0x62, 0x58, 0x79, 0x55, 0x23, 0x80, 0x43, 0x2b, - 0x4d, 0x05, 0x62, 0xab, 0xe0, 0x05, 0x48, 0x07, - 0x68, 0x05, 0x23, 0x80, 0x43, 0x9d, 0x1c, 0x2b, - 0x60, 0x03, 0x20, 0x00, 0xe7, 0xd2, 0xe7, 0xd1, - 0x72, 0x00, 0x01, 0x00, 0xcc, 0x00, 0x0c, 0x00, - 0xcc, 0x00, 0x0f, 0x80, 0x72, 0x00, 0x01, 0x28, - 0xb5, 0xff, 0x9f, 0x09, 0xb0, 0x81, 0x98, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, 0x99, 0x02, - 0x06, 0x0c, 0x0e, 0x24, 0x98, 0x03, 0x06, 0x02, - 0x0e, 0x12, 0x9b, 0x04, 0x06, 0x1d, 0x0e, 0x2d, - 0x2f, 0x01, 0xd1, 0x1b, 0x20, 0x00, 0x4b, 0x14, - 0x62, 0x18, 0x20, 0x00, 0x4b, 0x12, 0x62, 0x98, - 0x98, 0x00, 0x07, 0x00, 0x0f, 0x00, 0x01, 0x23, - 0x43, 0x18, 0x06, 0x01, 0x0e, 0x09, 0x48, 0x0e, - 0x62, 0x41, 0x07, 0x50, 0x0f, 0x40, 0x07, 0x6b, - 0x0f, 0x5b, 0x00, 0xdb, 0x43, 0x18, 0x06, 0x01, - 0x0e, 0x09, 0x20, 0x80, 0x43, 0x08, 0x4b, 0x08, - 0x62, 0x98, 0xe0, 0x05, 0x48, 0x07, 0x68, 0x06, - 0x23, 0x80, 0x43, 0x9e, 0x1c, 0x33, 0x60, 0x03, - 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, - 0x72, 0x00, 0x01, 0x00, 0x72, 0x00, 0x01, 0x28, - 0xb5, 0xf1, 0x98, 0x00, 0x06, 0x07, 0x0e, 0x3f, - 0xb0, 0x81, 0x2f, 0x1f, 0xdb, 0x05, 0x20, 0xb3, - 0xb0, 0x01, 0xb0, 0x01, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x62, 0x23, 0x80, 0x68, 0x1b, - 0x60, 0x18, 0x48, 0x61, 0x23, 0x80, 0x6b, 0x1b, - 0x60, 0x18, 0x48, 0x60, 0x23, 0x80, 0x6b, 0x5b, - 0x60, 0x18, 0x48, 0x5f, 0x23, 0x80, 0x6b, 0x9b, - 0x60, 0x18, 0x20, 0x01, 0x40, 0xb8, 0x4b, 0x59, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x57, 0x71, 0x18, - 0x20, 0x00, 0x4b, 0x56, 0x71, 0x58, 0x48, 0x55, - 0x68, 0x00, 0x4b, 0x58, 0x60, 0x58, 0x48, 0x58, - 0x4b, 0x56, 0x60, 0x98, 0x48, 0x57, 0x4b, 0x55, - 0x60, 0xd8, 0x20, 0xff, 0x30, 0x01, 0x4b, 0x53, - 0x62, 0x18, 0x20, 0xff, 0x30, 0x01, 0x4b, 0x51, - 0x62, 0x58, 0x20, 0x03, 0x4b, 0x52, 0x75, 0x18, - 0x20, 0x0e, 0x4b, 0x51, 0x75, 0x58, 0x20, 0x04, - 0x4b, 0x4f, 0x75, 0x98, 0x20, 0x03, 0x4b, 0x4e, - 0x75, 0xd8, 0x20, 0x00, 0x4b, 0x4d, 0x60, 0x18, - 0x20, 0x00, 0x4b, 0x4d, 0x60, 0x18, 0x20, 0x0d, - 0x23, 0x19, 0x06, 0x9b, 0x63, 0x18, 0x22, 0x00, - 0x2a, 0x20, 0xdb, 0x04, 0xe0, 0x21, 0x1c, 0x50, - 0x06, 0x02, 0x0e, 0x12, 0xe7, 0xf8, 0x25, 0x00, - 0x00, 0x93, 0x4e, 0x46, 0x50, 0xf5, 0x25, 0xff, - 0x4b, 0x45, 0x54, 0x9d, 0x01, 0x15, 0x4b, 0x45, - 0x18, 0xec, 0x01, 0x15, 0x4b, 0x44, 0x18, 0xe8, - 0x25, 0x00, 0xc4, 0x20, 0x25, 0x00, 0xc4, 0x20, - 0x25, 0x00, 0xc4, 0x20, 0x25, 0x00, 0xc4, 0x20, - 0x25, 0x00, 0xc0, 0x20, 0x25, 0x00, 0xc0, 0x20, - 0x25, 0x00, 0xc0, 0x20, 0x25, 0x00, 0xc0, 0x20, - 0xe7, 0xdd, 0x21, 0x00, 0x29, 0x20, 0xdb, 0x04, - 0xe0, 0x0b, 0x1c, 0x48, 0x04, 0x01, 0x0c, 0x09, - 0xe7, 0xf8, 0x23, 0x00, 0x00, 0x88, 0x4c, 0x2a, - 0x50, 0x23, 0x23, 0x00, 0x48, 0x35, 0x54, 0x43, - 0xe7, 0xf3, 0x4c, 0x35, 0x94, 0x00, 0x22, 0x00, - 0x2a, 0x10, 0xdb, 0x04, 0xe0, 0x0f, 0x1c, 0x50, - 0x06, 0x02, 0x0e, 0x12, 0xe7, 0xf8, 0x20, 0x00, - 0x00, 0x93, 0x4c, 0x30, 0x50, 0xe0, 0x23, 0xff, - 0x48, 0x2f, 0x54, 0x83, 0x20, 0x00, 0x00, 0x93, - 0x9c, 0x00, 0x50, 0xe0, 0xe7, 0xef, 0x21, 0x00, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, 0xdb, 0x04, - 0xe0, 0x2a, 0x1c, 0x48, 0x04, 0x01, 0x0c, 0x09, - 0xe7, 0xf6, 0x23, 0x00, 0x00, 0x88, 0x4c, 0x1a, - 0x50, 0x23, 0x20, 0x00, 0x00, 0x8b, 0x4c, 0x18, - 0x19, 0x1c, 0x23, 0x01, 0x02, 0x9b, 0x18, 0xe3, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x14, 0x18, 0x5c, - 0x23, 0x01, 0x02, 0xdb, 0x18, 0xe3, 0x70, 0x18, - 0x20, 0x00, 0x00, 0x8b, 0x4c, 0x11, 0x50, 0xe0, - 0x20, 0x00, 0x00, 0x8b, 0x4c, 0x0f, 0x19, 0x1c, - 0x23, 0x01, 0x02, 0x9b, 0x18, 0xe3, 0x60, 0x18, - 0x20, 0x00, 0x4b, 0x0c, 0x18, 0x5c, 0x23, 0x01, - 0x02, 0xdb, 0x18, 0xe3, 0x70, 0x18, 0xe7, 0xd4, - 0x20, 0x00, 0xb0, 0x01, 0xe7, 0x39, 0xb0, 0x01, - 0xe7, 0x37, 0x00, 0x00, 0x2e, 0x08, 0xb0, 0x58, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0xaf, 0xfc, - 0x2e, 0x08, 0xb0, 0x08, 0x9e, 0x00, 0x04, 0x80, - 0x2e, 0x08, 0x9d, 0xfc, 0x2e, 0x08, 0xa6, 0xfc, - 0x9e, 0x00, 0x04, 0xa0, 0x2e, 0x08, 0x9c, 0x48, - 0x2e, 0x08, 0x9c, 0x4c, 0x2e, 0x08, 0x9c, 0x50, - 0x2e, 0x08, 0x9d, 0x10, 0x64, 0x00, 0x08, 0x00, - 0x64, 0x00, 0x10, 0x00, 0x2e, 0x08, 0xb9, 0x60, - 0x9e, 0x00, 0x04, 0xb8, 0x2e, 0x08, 0x9c, 0xd0, - 0x2e, 0x08, 0x9d, 0x30, 0xb4, 0xb0, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x11, 0x0e, 0x09, 0x29, 0x20, - 0xdb, 0x02, 0x20, 0xa2, 0xbc, 0xb0, 0x47, 0x70, - 0x00, 0x88, 0x4b, 0x0a, 0x58, 0x18, 0x1c, 0x05, - 0xd1, 0x01, 0x20, 0xb0, 0xe7, 0xf6, 0x68, 0xe8, - 0x1c, 0x04, 0xd1, 0x01, 0x20, 0xb6, 0xe7, 0xf1, - 0x68, 0x60, 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, - 0x08, 0x80, 0x60, 0x38, 0x20, 0x00, 0xe7, 0xe9, - 0xe7, 0xe8, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc8, - 0xb5, 0xff, 0xb0, 0x82, 0x9a, 0x04, 0x06, 0x11, - 0x0e, 0x09, 0x91, 0x00, 0x9b, 0x05, 0x06, 0x18, - 0x0e, 0x00, 0x90, 0x01, 0xb0, 0x83, 0x99, 0x03, - 0x29, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x05, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x98, 0x05, 0x28, 0x00, 0xd0, 0x64, 0x98, 0x05, - 0x23, 0x0d, 0x06, 0x9b, 0x42, 0xd8, 0xd3, 0x02, - 0x20, 0xb4, 0xb0, 0x05, 0xe7, 0xf0, 0x99, 0x06, - 0x23, 0xff, 0x33, 0x81, 0x42, 0x99, 0xd2, 0x02, - 0x20, 0xb5, 0xb0, 0x05, 0xe7, 0xe8, 0x99, 0x03, - 0x00, 0x88, 0x49, 0x2c, 0x58, 0x08, 0x90, 0x02, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x05, - 0xe7, 0xde, 0x99, 0x06, 0x00, 0x88, 0x1f, 0xc1, - 0x39, 0x05, 0x91, 0x00, 0x9e, 0x05, 0x98, 0x05, - 0x1d, 0xc5, 0x35, 0x05, 0x60, 0x35, 0x99, 0x06, - 0x60, 0x71, 0x20, 0x00, 0x60, 0xb0, 0x98, 0x04, - 0x28, 0x10, 0xd1, 0x0a, 0x98, 0x02, 0x68, 0x84, - 0x98, 0x02, 0x30, 0x18, 0x90, 0x01, 0x1c, 0x2a, - 0x99, 0x00, 0x98, 0x01, 0xf0, 0x00, 0xfc, 0x86, - 0xe0, 0x25, 0x98, 0x04, 0x28, 0x20, 0xd1, 0x1f, - 0x98, 0x02, 0x68, 0xc0, 0x1c, 0x07, 0xd1, 0x02, - 0x20, 0xb6, 0xb0, 0x05, 0xe7, 0xb8, 0x78, 0xb8, - 0x08, 0x40, 0x00, 0x40, 0x70, 0xb8, 0x69, 0x3c, - 0x1d, 0xf8, 0x30, 0x05, 0x90, 0x01, 0x68, 0xb8, - 0x28, 0x00, 0xd1, 0x00, 0x60, 0xbd, 0x1c, 0x2a, - 0x99, 0x00, 0x98, 0x01, 0xf0, 0x00, 0xfc, 0x6a, - 0x68, 0x79, 0x18, 0x40, 0x60, 0x78, 0x78, 0x78, - 0x99, 0x03, 0xf0, 0x00, 0xf8, 0xb9, 0xe0, 0x02, - 0x20, 0xbc, 0xb0, 0x05, 0xe7, 0x9c, 0x68, 0xa0, - 0x28, 0x00, 0xd0, 0x01, 0x68, 0xa4, 0xe7, 0xfa, - 0x60, 0xa6, 0x20, 0x00, 0xb0, 0x05, 0xe7, 0x93, - 0x20, 0xb4, 0xb0, 0x05, 0xe7, 0x90, 0xb0, 0x03, - 0xb0, 0x02, 0xe7, 0x8d, 0x2e, 0x08, 0x9b, 0xc8, - 0xb5, 0xff, 0xb0, 0x81, 0x9a, 0x03, 0x06, 0x16, - 0x0e, 0x36, 0x9b, 0x04, 0x06, 0x18, 0x0e, 0x00, - 0x90, 0x00, 0xb0, 0x83, 0x27, 0x00, 0x2e, 0x20, - 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x04, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0xb0, - 0x49, 0x45, 0x58, 0x08, 0x1c, 0x04, 0xd1, 0x02, - 0x20, 0xb0, 0xb0, 0x04, 0xe7, 0xf3, 0x78, 0xe0, - 0x28, 0x00, 0xd1, 0x73, 0x98, 0x03, 0x28, 0x20, - 0xd1, 0x19, 0x68, 0xe0, 0x1c, 0x07, 0xd1, 0x02, - 0x20, 0xb6, 0xb0, 0x04, 0xe7, 0xe7, 0x69, 0x38, - 0x49, 0x3c, 0x60, 0x48, 0x48, 0x3b, 0x68, 0x40, - 0x68, 0x00, 0x60, 0xb8, 0x1d, 0xf8, 0x30, 0x05, - 0x90, 0x02, 0x20, 0x01, 0x90, 0x00, 0x48, 0x37, - 0x68, 0x40, 0x68, 0x40, 0x00, 0x80, 0x1f, 0xc1, - 0x39, 0x19, 0x91, 0x01, 0xe0, 0x1d, 0x98, 0x03, - 0x28, 0x10, 0xd1, 0x17, 0x68, 0xa0, 0x49, 0x31, - 0x60, 0x48, 0x48, 0x30, 0x68, 0x40, 0x68, 0x00, - 0x61, 0x20, 0x48, 0x2e, 0x68, 0x40, 0x68, 0x00, - 0x61, 0x60, 0x1d, 0xe0, 0x30, 0x11, 0x90, 0x02, - 0x48, 0x2a, 0x68, 0x40, 0x68, 0x40, 0x00, 0x80, - 0x1f, 0xc1, 0x39, 0x21, 0x91, 0x01, 0x20, 0x00, - 0x90, 0x00, 0xe0, 0x02, 0x20, 0xbc, 0xb0, 0x04, - 0xe7, 0xb5, 0x48, 0x24, 0x68, 0x40, 0x68, 0x80, - 0x28, 0x00, 0xd0, 0x37, 0x25, 0x00, 0x48, 0x21, - 0x68, 0x40, 0x68, 0x02, 0x99, 0x01, 0x98, 0x02, - 0xf0, 0x00, 0xfb, 0xe8, 0x19, 0x45, 0x48, 0x1d, - 0x68, 0x40, 0x49, 0x1c, 0x60, 0x08, 0x48, 0x1b, - 0x68, 0x00, 0x68, 0x80, 0x49, 0x19, 0x60, 0x48, - 0x48, 0x18, 0x68, 0x40, 0x68, 0x40, 0x00, 0x80, - 0x1f, 0xc1, 0x39, 0x05, 0x91, 0x01, 0x48, 0x15, - 0x68, 0x40, 0x68, 0x80, 0x28, 0x00, 0xd1, 0xe2, - 0x20, 0x00, 0x49, 0x12, 0x68, 0x09, 0x60, 0x88, - 0x48, 0x10, 0x68, 0x40, 0x99, 0x04, 0x60, 0x08, - 0x48, 0x0e, 0x68, 0x40, 0x68, 0x40, 0x99, 0x05, - 0x60, 0x08, 0x98, 0x00, 0x28, 0x00, 0xd0, 0x06, - 0x60, 0x7d, 0x78, 0x78, 0x1c, 0x31, 0xf0, 0x00, - 0xf8, 0x13, 0xe0, 0x00, 0xe0, 0x05, 0x20, 0x00, - 0xb0, 0x04, 0xe7, 0x78, 0x20, 0xb4, 0xb0, 0x04, - 0xe7, 0x75, 0x20, 0xbc, 0xb0, 0x04, 0xe7, 0x72, - 0xb0, 0x03, 0xb0, 0x01, 0xe7, 0x6f, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9d, 0xf4, - 0xb5, 0xf3, 0x98, 0x00, 0x06, 0x02, 0x0e, 0x12, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0xb0, 0x81, - 0x2c, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x01, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0xa0, 0x4b, 0x14, 0x58, 0x18, 0x1c, 0x05, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x01, 0xe7, 0xf3, - 0x68, 0xe8, 0x1c, 0x01, 0xd1, 0x02, 0x20, 0xb6, - 0xb0, 0x01, 0xe7, 0xed, 0x11, 0x10, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x28, 0x00, 0xd1, 0x04, - 0x68, 0x48, 0x40, 0xd0, 0x06, 0x07, 0x0e, 0x3f, - 0xe0, 0x09, 0x68, 0x48, 0x07, 0x16, 0x0f, 0x36, - 0x40, 0xf0, 0x68, 0x4e, 0x40, 0xd6, 0x1c, 0x33, - 0x18, 0xc0, 0x06, 0x07, 0x0e, 0x3f, 0x70, 0x0f, - 0x70, 0x4a, 0x20, 0x00, 0xb0, 0x01, 0xe7, 0xd3, - 0xb0, 0x01, 0xe7, 0xd1, 0x2e, 0x08, 0x9b, 0xc8, - 0xb4, 0xb0, 0x1c, 0x03, 0x1c, 0x0a, 0x06, 0x11, - 0x0e, 0x09, 0x29, 0x20, 0xdb, 0x02, 0x20, 0xa2, - 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x88, 0x4d, 0x08, - 0x58, 0x28, 0x1c, 0x04, 0xd1, 0x01, 0x20, 0xb0, - 0xe7, 0xf6, 0x68, 0xe0, 0x1c, 0x07, 0xd1, 0x01, - 0x20, 0xb6, 0xe7, 0xf1, 0x78, 0x78, 0x70, 0x18, - 0x20, 0x00, 0xe7, 0xed, 0xe7, 0xec, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0xc8, 0xb5, 0xf3, 0xb0, 0x81, - 0x98, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, - 0x99, 0x02, 0x06, 0x0d, 0x0e, 0x2d, 0xb0, 0x86, - 0x20, 0x00, 0x90, 0x00, 0x2d, 0x20, 0xdd, 0x05, - 0x20, 0xa2, 0xb0, 0x07, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0xa8, 0x49, 0xa2, - 0x58, 0x08, 0x90, 0x04, 0x28, 0x00, 0xd1, 0x02, - 0x20, 0xb0, 0xb0, 0x07, 0xe7, 0xf2, 0x00, 0xa8, - 0x49, 0x9e, 0x68, 0x09, 0x18, 0x40, 0x90, 0x05, - 0x00, 0xe8, 0x1b, 0x40, 0x00, 0x80, 0x49, 0x9c, - 0x68, 0x09, 0x18, 0x46, 0x98, 0x06, 0x28, 0x00, - 0xd0, 0x73, 0x28, 0x01, 0xd0, 0x4f, 0x28, 0x02, - 0xd0, 0x00, 0xe1, 0x1d, 0x98, 0x04, 0x69, 0x00, - 0x60, 0x70, 0x98, 0x04, 0x78, 0x40, 0x06, 0xc0, - 0x0e, 0xc0, 0x90, 0x02, 0x98, 0x02, 0x28, 0x13, - 0xd0, 0x16, 0x27, 0x00, 0x2f, 0x20, 0xdb, 0x04, - 0xe0, 0x11, 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, - 0xe7, 0xf8, 0x48, 0x8e, 0x5d, 0xc0, 0x42, 0xa8, - 0xd1, 0x08, 0x00, 0xb8, 0x49, 0x8c, 0x58, 0x08, - 0x30, 0x01, 0x78, 0x01, 0x23, 0x80, 0x43, 0xdb, - 0x40, 0x19, 0x70, 0x01, 0xe7, 0xed, 0xe0, 0x1e, - 0x27, 0x00, 0x2f, 0x10, 0xdb, 0x04, 0xe0, 0x1a, - 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, - 0x48, 0x84, 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x11, - 0x00, 0xb8, 0x49, 0x83, 0x58, 0x08, 0x30, 0x01, - 0x78, 0x01, 0x23, 0x80, 0x43, 0xdb, 0x40, 0x19, - 0x70, 0x01, 0x98, 0x00, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x98, 0x00, 0x28, 0x02, - 0xd1, 0x00, 0xe0, 0x00, 0xe7, 0xe4, 0x88, 0x30, - 0x4b, 0x7a, 0x40, 0x18, 0x80, 0x30, 0x98, 0x05, - 0x68, 0x00, 0x23, 0x01, 0x03, 0x5b, 0x43, 0x18, - 0x99, 0x05, 0x60, 0x08, 0xe0, 0xd3, 0x98, 0x05, - 0x68, 0x00, 0x4b, 0x75, 0x40, 0x18, 0x99, 0x05, - 0x60, 0x08, 0x20, 0x00, 0x60, 0xb0, 0x20, 0x00, - 0x70, 0xf0, 0x20, 0x00, 0x60, 0xf0, 0x98, 0x04, - 0x78, 0x40, 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x28, 0x13, 0xd0, 0x16, 0x27, 0x00, - 0x2f, 0x20, 0xdb, 0x04, 0xe0, 0x11, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x63, - 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x08, 0x00, 0xb8, - 0xe0, 0x00, 0xe0, 0x27, 0x49, 0x60, 0x58, 0x0c, - 0x78, 0x60, 0x23, 0x80, 0x43, 0x18, 0x70, 0x60, - 0xe7, 0xed, 0xe0, 0x1e, 0x27, 0x00, 0x2f, 0x10, - 0xdb, 0x04, 0xe0, 0x1a, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x59, 0x5d, 0xc0, - 0x42, 0xa8, 0xd1, 0x11, 0x00, 0xb8, 0x49, 0x58, - 0x58, 0x08, 0x30, 0x01, 0x78, 0x01, 0x23, 0x80, - 0x43, 0xdb, 0x40, 0x19, 0x70, 0x01, 0x98, 0x00, - 0x30, 0x01, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x02, 0xd1, 0x00, 0xe0, 0x00, - 0xe7, 0xe4, 0xe0, 0x88, 0x98, 0x05, 0x68, 0x00, - 0x4b, 0x4f, 0x40, 0x18, 0x99, 0x05, 0x60, 0x08, - 0x20, 0x00, 0x60, 0xb0, 0x20, 0x00, 0x70, 0xf0, - 0x20, 0x00, 0x60, 0xf0, 0x98, 0x04, 0x78, 0x40, - 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x02, 0x98, 0x04, - 0x78, 0x40, 0x21, 0x20, 0x40, 0x01, 0x91, 0x03, - 0x98, 0x02, 0x28, 0x13, 0xd0, 0x4c, 0x27, 0x00, - 0x2f, 0x20, 0xdb, 0x04, 0xe0, 0x47, 0x1c, 0x78, - 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, 0x48, 0x3b, - 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x3e, 0x00, 0xb8, - 0x49, 0x39, 0x58, 0x0c, 0x20, 0x80, 0x70, 0x60, - 0x99, 0x03, 0x1c, 0x20, 0xf7, 0xfd, 0xfb, 0x30, - 0x78, 0xa0, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x28, - 0x6a, 0xe0, 0x22, 0x00, 0x92, 0x01, 0x99, 0x01, - 0x29, 0x08, 0xdb, 0x06, 0xe0, 0x1f, 0x99, 0x01, - 0x31, 0x01, 0x06, 0x09, 0x0e, 0x09, 0x91, 0x01, - 0xe7, 0xf5, 0x99, 0x01, 0x00, 0x89, 0x18, 0x09, - 0x68, 0x49, 0x9a, 0x01, 0x00, 0x92, 0x18, 0x12, - 0x64, 0x51, 0x22, 0x00, 0x99, 0x01, 0x00, 0x89, - 0x18, 0x09, 0x62, 0x4a, 0x99, 0x01, 0x00, 0x89, - 0x18, 0x09, 0x6c, 0x49, 0x29, 0x00, 0xd0, 0x05, - 0x9a, 0x01, 0x21, 0x80, 0x41, 0x11, 0x88, 0x02, - 0x43, 0x11, 0x80, 0x01, 0xe7, 0xdf, 0x88, 0x01, - 0x80, 0x41, 0x78, 0xa0, 0x23, 0x20, 0x40, 0x18, - 0xd0, 0x04, 0x98, 0x04, 0x68, 0xc1, 0x1c, 0x20, - 0xf0, 0x00, 0xfa, 0x3d, 0xe7, 0xb7, 0xe0, 0x1e, - 0x27, 0x00, 0x2f, 0x10, 0xdb, 0x04, 0xe0, 0x1a, - 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, - 0x48, 0x16, 0x5d, 0xc0, 0x42, 0xa8, 0xd1, 0x11, - 0x00, 0xb8, 0x49, 0x15, 0x58, 0x0c, 0x20, 0x80, - 0x70, 0x60, 0x99, 0x03, 0x1c, 0x20, 0xf7, 0xfd, - 0xfa, 0xe3, 0x98, 0x00, 0x30, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x98, 0x00, 0x28, 0x02, - 0xd1, 0x00, 0xe0, 0x00, 0xe7, 0xe4, 0xe0, 0x02, - 0x20, 0xbc, 0xb0, 0x07, 0xe6, 0xbe, 0x98, 0x06, - 0x99, 0x04, 0x70, 0xc8, 0x20, 0x00, 0xb0, 0x07, - 0xe6, 0xb8, 0xb0, 0x06, 0xb0, 0x01, 0xe6, 0xb5, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x50, 0x2e, 0x08, 0x9d, 0x30, - 0x2e, 0x08, 0x9c, 0xd0, 0xff, 0xff, 0xfb, 0xff, - 0xff, 0xff, 0xdf, 0xff, 0xb4, 0x90, 0x1c, 0x03, - 0x1c, 0x0a, 0x06, 0x11, 0x0e, 0x09, 0x29, 0x20, - 0xdd, 0x02, 0x20, 0xa2, 0xbc, 0x90, 0x47, 0x70, - 0x00, 0x88, 0x4c, 0x05, 0x58, 0x20, 0x1c, 0x07, - 0xd1, 0x01, 0x20, 0xb0, 0xe7, 0xf6, 0x78, 0xf8, - 0x70, 0x18, 0x20, 0x00, 0xe7, 0xf2, 0xe7, 0xf1, - 0x2e, 0x08, 0x9b, 0xc8, 0xb4, 0x90, 0x1c, 0x02, - 0x1c, 0x0f, 0x06, 0x38, 0x16, 0x04, 0x2a, 0x02, - 0xda, 0x02, 0x20, 0x00, 0xbc, 0x90, 0x47, 0x70, - 0x2c, 0x01, 0xd1, 0x01, 0x21, 0x28, 0xe0, 0x09, - 0x2c, 0x02, 0xd1, 0x01, 0x21, 0x20, 0xe0, 0x05, - 0x2c, 0x00, 0xd1, 0x01, 0x21, 0x0c, 0xe0, 0x01, - 0x20, 0x00, 0xe7, 0xef, 0x00, 0x50, 0x18, 0x80, - 0x01, 0x80, 0x18, 0x41, 0x1c, 0xc8, 0x08, 0x81, - 0x1c, 0x08, 0xe7, 0xe7, 0xe7, 0xe6, 0xb5, 0xf7, - 0x1c, 0x07, 0xb0, 0x81, 0x9a, 0x03, 0x06, 0x11, - 0x0e, 0x09, 0x91, 0x00, 0xb0, 0x84, 0x99, 0x04, - 0x29, 0x20, 0xdb, 0x05, 0x20, 0xa2, 0xb0, 0x05, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x99, 0x04, 0x00, 0x88, 0x49, 0x29, 0x58, 0x08, - 0x1c, 0x06, 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x05, - 0xe7, 0xf2, 0x2f, 0x00, 0xd1, 0x02, 0x20, 0xb4, - 0xb0, 0x05, 0xe7, 0xed, 0x4b, 0x24, 0x42, 0x9f, - 0xd1, 0x0a, 0x78, 0xf0, 0x28, 0x00, 0xd0, 0x02, - 0x20, 0xbc, 0xb0, 0x05, 0xe7, 0xe4, 0x20, 0x00, - 0x60, 0xf0, 0x20, 0x00, 0xb0, 0x05, 0xe7, 0xdf, - 0x68, 0xf0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0xb4, - 0xb0, 0x05, 0xe7, 0xd9, 0x99, 0x06, 0x00, 0x88, - 0x1f, 0xc1, 0x39, 0x19, 0x91, 0x02, 0x20, 0xff, - 0x30, 0x81, 0x90, 0x01, 0x99, 0x02, 0x98, 0x01, - 0x42, 0x81, 0xda, 0x02, 0x20, 0xb5, 0xb0, 0x05, - 0xe7, 0xca, 0x1c, 0x3c, 0x60, 0xf4, 0x37, 0x14, - 0x1c, 0x3d, 0x37, 0x0c, 0x60, 0x2f, 0x99, 0x06, - 0x60, 0x69, 0x20, 0x00, 0x60, 0xa8, 0x97, 0x03, - 0x20, 0x00, 0x60, 0xe0, 0x1d, 0xe0, 0x30, 0x05, - 0x9a, 0x03, 0x99, 0x02, 0xf0, 0x00, 0xf9, 0x56, - 0x90, 0x00, 0x20, 0x00, 0x70, 0xa0, 0x98, 0x00, - 0x60, 0x60, 0x9a, 0x03, 0x60, 0xa2, 0x61, 0x25, - 0x99, 0x04, 0x20, 0x54, 0xf7, 0xff, 0xfd, 0xa0, - 0xb0, 0x05, 0xe7, 0xa9, 0xb0, 0x04, 0xb0, 0x01, - 0xe7, 0xa6, 0x00, 0x00, 0x2e, 0x08, 0x9b, 0xc8, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0xff, 0xb0, 0x83, - 0x9a, 0x05, 0x06, 0x11, 0x0e, 0x09, 0x91, 0x00, - 0x9b, 0x06, 0x06, 0x18, 0x0e, 0x00, 0x90, 0x01, - 0x98, 0x0c, 0x06, 0x01, 0x0e, 0x09, 0x91, 0x02, - 0xb0, 0x85, 0x99, 0x05, 0x29, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x08, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x08, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0xb4, 0xb0, 0x08, 0xe7, 0xf5, - 0x99, 0x05, 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, - 0x49, 0x83, 0x68, 0x09, 0x18, 0x47, 0x98, 0x08, - 0x4b, 0x82, 0x42, 0x98, 0xd1, 0x73, 0x99, 0x05, - 0x00, 0x88, 0x49, 0x81, 0x58, 0x08, 0x1c, 0x05, - 0xd1, 0x02, 0x20, 0xb0, 0xb0, 0x08, 0xe7, 0xe1, - 0x68, 0xe8, 0x28, 0x00, 0xd1, 0x02, 0x78, 0xe8, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0xbc, 0xb0, 0x08, - 0xe7, 0xd8, 0x78, 0xa8, 0x28, 0x00, 0xd0, 0x54, - 0x20, 0x00, 0x42, 0x80, 0xd0, 0x1d, 0x24, 0x00, - 0x2c, 0x20, 0xdb, 0x04, 0xe0, 0x18, 0x1c, 0x60, - 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf8, 0x48, 0x73, - 0x5d, 0x00, 0x99, 0x05, 0x42, 0x88, 0xd1, 0x0e, - 0x20, 0x01, 0x40, 0xa0, 0x43, 0xc0, 0x49, 0x70, - 0x68, 0x09, 0x40, 0x08, 0x49, 0x6e, 0x60, 0x08, - 0x20, 0x00, 0x00, 0xa1, 0x4a, 0x6d, 0x50, 0x50, - 0x20, 0xff, 0x49, 0x6a, 0x55, 0x08, 0xe7, 0xe6, - 0xe0, 0x33, 0x4a, 0x6b, 0x92, 0x03, 0x7e, 0x38, - 0x1c, 0x06, 0x28, 0xff, 0xd0, 0x14, 0x20, 0x00, - 0x00, 0xb1, 0x4a, 0x68, 0x50, 0x50, 0x20, 0x01, - 0x40, 0xb0, 0x43, 0xc0, 0x49, 0x66, 0x68, 0x09, - 0x40, 0x08, 0x49, 0x65, 0x60, 0x08, 0x20, 0xff, - 0x76, 0x38, 0x21, 0xff, 0x48, 0x63, 0x55, 0x81, - 0x21, 0x00, 0x00, 0xb0, 0x9a, 0x03, 0x50, 0x11, - 0x7e, 0x78, 0x1c, 0x06, 0x28, 0xff, 0xd0, 0x14, - 0x21, 0x00, 0x00, 0xb0, 0x4a, 0x5b, 0x50, 0x11, - 0x20, 0x01, 0x40, 0xb0, 0x43, 0xc0, 0x49, 0x5a, - 0x68, 0x09, 0x40, 0x08, 0x49, 0x58, 0x60, 0x08, - 0x20, 0xff, 0x76, 0x78, 0x20, 0xff, 0x49, 0x51, - 0x55, 0x88, 0x21, 0x00, 0x00, 0xb0, 0x9a, 0x03, - 0x50, 0x11, 0x20, 0x00, 0x99, 0x05, 0x00, 0x89, - 0x4a, 0x4b, 0x50, 0x50, 0x24, 0x00, 0x2c, 0x0c, - 0xdb, 0x06, 0xe0, 0x09, 0xe0, 0x00, 0xe0, 0x0e, - 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, 0xe7, 0xf6, - 0x20, 0x00, 0x19, 0x39, 0x73, 0x08, 0xe7, 0xf7, - 0x20, 0x00, 0x83, 0x38, 0x20, 0x00, 0x70, 0xf8, - 0x20, 0x00, 0xb0, 0x08, 0xe7, 0x66, 0x99, 0x05, - 0x00, 0x88, 0x49, 0x3f, 0x58, 0x08, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0xb0, 0xb0, 0x08, 0xe7, 0x5d, - 0x99, 0x07, 0x29, 0x11, 0xdb, 0x02, 0x99, 0x07, - 0x29, 0x13, 0xdd, 0x02, 0x20, 0xb1, 0xb0, 0x08, - 0xe7, 0x54, 0x99, 0x09, 0x00, 0x88, 0x1f, 0xc1, - 0x39, 0x21, 0x91, 0x01, 0x20, 0xff, 0x30, 0x81, - 0x90, 0x00, 0x99, 0x01, 0x98, 0x00, 0x42, 0x81, - 0xda, 0x02, 0x20, 0xb5, 0xb0, 0x08, 0xe7, 0x45, - 0x9d, 0x08, 0x98, 0x08, 0x30, 0x1c, 0x90, 0x08, - 0x98, 0x08, 0x90, 0x04, 0x98, 0x08, 0x30, 0x0c, - 0x90, 0x08, 0x98, 0x08, 0x90, 0x02, 0x9a, 0x02, - 0x98, 0x04, 0x60, 0x02, 0x99, 0x09, 0x98, 0x04, - 0x60, 0x41, 0x20, 0x00, 0x99, 0x04, 0x60, 0x88, - 0x20, 0x00, 0x61, 0xa8, 0x1d, 0xe8, 0x30, 0x11, - 0x9a, 0x02, 0x99, 0x01, 0xf0, 0x00, 0xf8, 0x56, - 0x20, 0x00, 0x70, 0x28, 0x98, 0x06, 0x99, 0x07, - 0x43, 0x08, 0x70, 0x68, 0x20, 0x00, 0x70, 0xa8, - 0x20, 0x02, 0x70, 0xe8, 0x20, 0x00, 0x71, 0x28, - 0x98, 0x04, 0x60, 0xa8, 0x20, 0x00, 0x60, 0xe8, - 0x9a, 0x02, 0x61, 0x2a, 0x9a, 0x02, 0x61, 0x6a, - 0x99, 0x05, 0x00, 0x88, 0x49, 0x16, 0x50, 0x0d, - 0x20, 0x00, 0x60, 0xf8, 0x88, 0x38, 0x4b, 0x1c, - 0x40, 0x18, 0x80, 0x38, 0x20, 0x00, 0x60, 0xb8, - 0x9a, 0x02, 0x60, 0x7a, 0x98, 0x06, 0x99, 0x07, - 0x43, 0x08, 0x70, 0xb8, 0x24, 0x00, 0x2c, 0x0c, - 0xdb, 0x04, 0xe0, 0x07, 0x1c, 0x60, 0x06, 0x04, - 0x0e, 0x24, 0xe7, 0xf8, 0x20, 0x00, 0x19, 0x39, - 0x74, 0x08, 0xe7, 0xf7, 0x20, 0x00, 0x83, 0x38, - 0x20, 0x00, 0x70, 0xf8, 0x20, 0xff, 0x76, 0x38, - 0x20, 0xff, 0x76, 0x78, 0x20, 0x00, 0xb0, 0x08, - 0xe6, 0xec, 0xb0, 0x05, 0xb0, 0x03, 0xe6, 0xe9, - 0x2e, 0x08, 0x9b, 0x30, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0x9b, 0xc8, 0x2e, 0x08, 0x9d, 0x10, - 0x2e, 0x08, 0x9c, 0x48, 0x2e, 0x08, 0x9c, 0x50, - 0x9e, 0x00, 0x04, 0xb8, 0x2e, 0x08, 0x9c, 0xd0, - 0x2e, 0x08, 0x9c, 0x4c, 0x2e, 0x08, 0x9d, 0x30, - 0xff, 0xff, 0xfb, 0xff, 0xb4, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x13, 0x21, 0x00, 0x68, 0x22, - 0x2a, 0x00, 0xd0, 0x00, 0x60, 0x13, 0x1d, 0xd8, - 0x30, 0xb9, 0x60, 0x18, 0x33, 0xc0, 0x31, 0x01, - 0x3f, 0xc0, 0x2f, 0xc0, 0xd8, 0xf7, 0x20, 0x00, - 0x60, 0x18, 0x60, 0x23, 0x31, 0x01, 0x1c, 0x08, - 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xfc, 0xb4, 0x90, - 0x1c, 0x03, 0x1c, 0x0a, 0x6b, 0x18, 0x68, 0xd1, - 0x68, 0x07, 0x2f, 0x00, 0xd0, 0x0c, 0x68, 0x07, - 0x60, 0x0f, 0x68, 0x41, 0x68, 0x57, 0x68, 0x84, - 0x19, 0x3f, 0x60, 0x57, 0x27, 0x00, 0x60, 0x07, - 0x27, 0x00, 0x60, 0x47, 0x27, 0x00, 0x60, 0x87, - 0x6a, 0xc7, 0x2f, 0x00, 0xd0, 0x0c, 0x6a, 0xc7, - 0x60, 0x0f, 0x6b, 0x01, 0x68, 0x57, 0x6b, 0x44, - 0x19, 0x3f, 0x60, 0x57, 0x27, 0x00, 0x62, 0xc7, - 0x27, 0x00, 0x63, 0x07, 0x27, 0x00, 0x63, 0x47, - 0x60, 0xd1, 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xfc, - 0x20, 0x00, 0x49, 0x01, 0x70, 0x08, 0x47, 0x70, - 0x2e, 0x08, 0xb9, 0x80, 0xb5, 0xff, 0xb0, 0x82, - 0x9b, 0x05, 0x06, 0x18, 0x16, 0x00, 0x90, 0x00, - 0x98, 0x0c, 0x06, 0x01, 0x16, 0x09, 0x91, 0x01, - 0x98, 0x00, 0x28, 0x1f, 0xdd, 0x05, 0x20, 0xaf, - 0xb0, 0x02, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x37, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0x20, 0xd2, 0xb0, 0x02, 0xe7, 0xf4, - 0xe0, 0x64, 0x20, 0xff, 0x49, 0x32, 0x70, 0x08, - 0x49, 0x32, 0x98, 0x00, 0xf0, 0x0a, 0xff, 0x04, - 0x9a, 0x04, 0x2a, 0x00, 0xd9, 0x52, 0x20, 0xff, - 0x49, 0x2f, 0x70, 0x08, 0x9d, 0x02, 0x98, 0x0b, - 0x99, 0x01, 0x18, 0x44, 0x99, 0x01, 0x20, 0xc0, - 0x1a, 0x40, 0x9a, 0x04, 0x42, 0x90, 0xd9, 0x01, - 0x9f, 0x04, 0xe0, 0x02, 0x99, 0x01, 0x20, 0xc0, - 0x1a, 0x47, 0x1c, 0x3a, 0x1c, 0x21, 0x1c, 0x28, - 0x23, 0xfe, 0xf0, 0x05, 0xfa, 0xa5, 0x1c, 0x06, - 0x2e, 0xd0, 0xd1, 0x0a, 0x20, 0x03, 0xf0, 0x04, - 0xf9, 0xa9, 0x1c, 0x3a, 0x1c, 0x21, 0x1c, 0x28, - 0x23, 0xfe, 0xf0, 0x05, 0xfa, 0x99, 0x1c, 0x06, - 0xe7, 0xf2, 0x98, 0x02, 0x19, 0xc0, 0x90, 0x02, - 0x9a, 0x04, 0x1b, 0xd2, 0x92, 0x04, 0x9d, 0x0b, - 0x9c, 0x03, 0x9b, 0x00, 0x1c, 0x3a, 0x1c, 0x21, - 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0x89, 0x1c, 0x06, - 0x2e, 0xd0, 0xd1, 0x0a, 0x20, 0x03, 0xf0, 0x04, - 0xf9, 0x8d, 0x9b, 0x00, 0x1c, 0x3a, 0x1c, 0x21, - 0x1c, 0x28, 0xf0, 0x05, 0xfa, 0x7d, 0x1c, 0x06, - 0xe7, 0xf2, 0x99, 0x03, 0x29, 0x20, 0xd3, 0x04, - 0x99, 0x01, 0x18, 0x78, 0x99, 0x03, 0x18, 0x41, - 0x91, 0x03, 0x48, 0x0b, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x03, 0x20, 0x03, 0xf0, 0x04, 0xf9, 0x76, - 0xe7, 0xf7, 0xe7, 0xa9, 0x20, 0x00, 0x49, 0x04, - 0x70, 0x08, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x90, - 0xb0, 0x02, 0xe7, 0x8e, 0xe7, 0x8d, 0x00, 0x00, - 0x2e, 0x08, 0x20, 0x20, 0x2e, 0x01, 0x8b, 0x35, - 0x2e, 0x08, 0xb9, 0x80, 0xb5, 0xff, 0x1c, 0x0f, - 0x9a, 0x02, 0x06, 0x14, 0x0e, 0x24, 0x9b, 0x03, - 0x06, 0x1d, 0x0e, 0x2d, 0x2c, 0x1f, 0xdb, 0x04, - 0x20, 0xb3, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x04, 0x3a, 0x0c, 0x12, 0x2d, 0x01, - 0xd1, 0x73, 0x20, 0x01, 0x03, 0x40, 0x40, 0x10, - 0xd0, 0x0a, 0x4b, 0x6f, 0x40, 0x1a, 0x48, 0x6f, - 0x68, 0x00, 0x68, 0x00, 0x23, 0x02, 0x43, 0xdb, - 0x40, 0x18, 0x4b, 0x6c, 0x68, 0x1b, 0x60, 0x18, - 0x20, 0x01, 0x02, 0x40, 0x40, 0x10, 0xd0, 0x0a, - 0x4b, 0x69, 0x40, 0x1a, 0x48, 0x67, 0x68, 0x00, - 0x68, 0x00, 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, - 0x4b, 0x64, 0x68, 0x1b, 0x60, 0x18, 0x20, 0x01, - 0x05, 0x00, 0x40, 0x38, 0xd0, 0x08, 0x48, 0x63, - 0x68, 0x00, 0x69, 0x80, 0x23, 0x01, 0x05, 0x1b, - 0x43, 0x18, 0x4b, 0x60, 0x68, 0x1b, 0x61, 0x98, - 0x20, 0x01, 0x05, 0x40, 0x40, 0x38, 0xd0, 0x08, - 0x48, 0x5c, 0x68, 0x00, 0x69, 0x80, 0x23, 0x01, - 0x05, 0x5b, 0x43, 0x18, 0x4b, 0x59, 0x68, 0x1b, - 0x61, 0x98, 0x0a, 0x12, 0x48, 0x55, 0x68, 0x00, - 0x68, 0x00, 0x43, 0x90, 0x4b, 0x53, 0x68, 0x1b, - 0x60, 0x18, 0x48, 0x52, 0x68, 0x00, 0x68, 0x00, - 0x4b, 0x53, 0x65, 0x18, 0x48, 0x51, 0x68, 0x00, - 0x77, 0x04, 0x20, 0x09, 0x04, 0x80, 0x40, 0x38, - 0xd0, 0x35, 0x21, 0x00, 0x29, 0x20, 0xdb, 0x04, - 0xe0, 0x31, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x20, 0x01, 0x40, 0x88, 0x9b, 0x00, - 0x40, 0x18, 0xd0, 0x27, 0x20, 0x01, 0x05, 0x40, - 0x40, 0x38, 0xd0, 0x0e, 0x00, 0xc8, 0x1a, 0x40, - 0x00, 0x80, 0x4b, 0x46, 0x68, 0x1b, 0x5a, 0x18, - 0x23, 0xff, 0x33, 0x01, 0x43, 0x18, 0x00, 0xcb, - 0x1a, 0x5b, 0x00, 0x9b, 0x4e, 0x41, 0x68, 0x36, - 0x52, 0xf0, 0x20, 0x01, 0x04, 0x80, 0x40, 0x38, - 0xd0, 0x10, 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, - 0xe0, 0x00, 0xe0, 0x0d, 0x4b, 0x3b, 0x68, 0x1b, - 0x5a, 0x18, 0x23, 0x01, 0x02, 0x5b, 0x43, 0x18, - 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, 0x4e, 0x37, - 0x68, 0x36, 0x52, 0xf0, 0xe7, 0xcd, 0xe0, 0x5c, - 0x2d, 0x02, 0xd1, 0x5a, 0x0a, 0x12, 0x48, 0x2f, - 0x68, 0x00, 0x68, 0x00, 0x43, 0x10, 0x4b, 0x2d, - 0x68, 0x1b, 0x60, 0x18, 0x48, 0x2b, 0x68, 0x00, - 0x68, 0x00, 0x4b, 0x2d, 0x65, 0x18, 0x20, 0x01, - 0x05, 0x00, 0x40, 0x38, 0xd0, 0x07, 0x48, 0x29, - 0x68, 0x00, 0x69, 0x80, 0x4b, 0x2a, 0x40, 0x18, - 0x4b, 0x26, 0x68, 0x1b, 0x61, 0x98, 0x20, 0x01, - 0x05, 0x40, 0x40, 0x38, 0xd0, 0x07, 0x48, 0x23, - 0x68, 0x00, 0x69, 0x80, 0x4b, 0x25, 0x40, 0x18, - 0x4b, 0x20, 0x68, 0x1b, 0x61, 0x98, 0x21, 0x00, - 0x29, 0x20, 0xdb, 0x04, 0xe0, 0x31, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x20, 0x09, - 0x04, 0x80, 0x40, 0x38, 0xd0, 0x28, 0x20, 0x01, - 0x40, 0x88, 0x9b, 0x00, 0x40, 0x18, 0xd0, 0x23, - 0x20, 0x01, 0x05, 0x40, 0x40, 0x38, 0xd0, 0x0d, - 0x00, 0xc8, 0x1a, 0x40, 0x00, 0x80, 0x4b, 0x15, - 0x68, 0x1b, 0x5a, 0x18, 0x4b, 0x16, 0x40, 0x18, - 0x00, 0xcb, 0x1a, 0x5b, 0x00, 0x9b, 0x4e, 0x11, - 0x68, 0x36, 0x52, 0xf0, 0x20, 0x01, 0x04, 0x80, - 0x40, 0x38, 0xd0, 0x0d, 0x00, 0xc8, 0x1a, 0x40, - 0x00, 0x80, 0x4b, 0x0c, 0x68, 0x1b, 0x5a, 0x18, - 0x4b, 0x05, 0x40, 0x18, 0x00, 0xcb, 0x1a, 0x5b, - 0x00, 0x9b, 0x4e, 0x08, 0x68, 0x36, 0x52, 0xf0, - 0xe7, 0xcd, 0x20, 0x00, 0xe7, 0x15, 0xe7, 0x14, - 0xff, 0xff, 0xfd, 0xff, 0x2e, 0x08, 0xb9, 0x84, - 0xff, 0xff, 0xdf, 0xff, 0x2e, 0x08, 0x9b, 0x78, - 0x66, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x9b, 0x30, - 0xff, 0xef, 0xff, 0xff, 0xff, 0xdf, 0xff, 0xff, - 0xff, 0xff, 0xfe, 0xff, 0xb5, 0x80, 0x1c, 0x07, - 0x48, 0x17, 0x68, 0x01, 0x20, 0x00, 0xf0, 0x13, - 0xfc, 0xa3, 0x60, 0x38, 0x48, 0x14, 0x68, 0x00, - 0x1d, 0x01, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x9c, - 0x60, 0x78, 0x48, 0x11, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x05, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x94, - 0x60, 0xf8, 0x48, 0x0d, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x09, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x8c, - 0x61, 0x38, 0x48, 0x09, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x0d, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x84, - 0x61, 0x78, 0x48, 0x05, 0x68, 0x00, 0x1d, 0xc1, - 0x31, 0x01, 0x20, 0x00, 0xf0, 0x13, 0xfc, 0x7c, - 0x60, 0xb8, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x9b, 0x78, 0xb5, 0xf0, 0x1c, 0x07, - 0xb0, 0x82, 0x26, 0x00, 0x89, 0xb8, 0x23, 0x08, - 0x40, 0x18, 0xd0, 0x08, 0x48, 0x59, 0x6e, 0xc2, - 0x48, 0x58, 0x6f, 0x01, 0x48, 0x57, 0x6a, 0x00, - 0xf7, 0xfd, 0xff, 0x5c, 0x1c, 0x06, 0x89, 0xb8, - 0x23, 0x10, 0x40, 0x18, 0xd0, 0x02, 0x48, 0x53, - 0x69, 0x40, 0x1c, 0x06, 0x89, 0xb8, 0x07, 0xc0, - 0x0f, 0xc0, 0xd0, 0x21, 0x48, 0x50, 0x68, 0xc0, - 0x90, 0x00, 0x68, 0x78, 0x02, 0x40, 0x99, 0x00, - 0x1a, 0x08, 0x90, 0x01, 0x98, 0x01, 0x21, 0x33, - 0x06, 0x49, 0x65, 0xc8, 0x98, 0x00, 0x21, 0x33, - 0x06, 0x49, 0x66, 0x08, 0x98, 0x01, 0x49, 0x48, - 0x60, 0x88, 0x98, 0x00, 0x49, 0x46, 0x60, 0xc8, - 0x20, 0x01, 0x21, 0x33, 0x06, 0x49, 0x66, 0xc8, - 0x20, 0x00, 0x21, 0x33, 0x06, 0x49, 0x66, 0xc8, - 0x89, 0xb8, 0x23, 0x02, 0x43, 0x18, 0x81, 0xb8, - 0x89, 0xb8, 0x23, 0x02, 0x40, 0x18, 0xd0, 0x3e, - 0x48, 0x3d, 0x68, 0x80, 0x1f, 0xc4, 0x3c, 0xff, - 0x3c, 0xfa, 0x68, 0x38, 0x02, 0x40, 0x1a, 0x25, - 0x48, 0x38, 0x60, 0x45, 0x48, 0x37, 0x60, 0x84, - 0x20, 0x33, 0x06, 0x40, 0x65, 0x45, 0x20, 0x33, - 0x06, 0x40, 0x65, 0x84, 0x1b, 0x60, 0x38, 0xc0, - 0x21, 0x33, 0x06, 0x49, 0x66, 0x88, 0x21, 0x00, - 0x48, 0x32, 0xf7, 0xfd, 0xfb, 0x89, 0x48, 0x32, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x00, 0xe7, 0xfa, - 0x48, 0x30, 0x68, 0x01, 0x23, 0xff, 0x33, 0x01, - 0x43, 0x19, 0x60, 0x01, 0x48, 0x2e, 0x6d, 0x80, - 0x49, 0x2d, 0x65, 0x88, 0x48, 0x2c, 0x6b, 0xc0, - 0x23, 0x01, 0x07, 0x9b, 0x40, 0x18, 0xd0, 0x00, - 0xe7, 0xf8, 0x20, 0x33, 0x06, 0x40, 0x66, 0x45, - 0x20, 0x33, 0x06, 0x40, 0x66, 0x84, 0x21, 0x00, - 0x20, 0xff, 0xf7, 0xfd, 0xfb, 0x69, 0x48, 0x20, - 0x60, 0x05, 0x48, 0x1f, 0x60, 0x44, 0x89, 0xb8, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x21, 0x68, 0xb8, - 0x28, 0x00, 0xd1, 0x06, 0x48, 0x1f, 0x68, 0x01, - 0x23, 0x02, 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, - 0xe0, 0x17, 0x69, 0x38, 0x49, 0x1a, 0x65, 0x88, - 0x69, 0x38, 0x68, 0xb9, 0x02, 0x49, 0x18, 0x40, - 0x49, 0x17, 0x65, 0xc8, 0x20, 0x03, 0x02, 0x00, - 0x49, 0x15, 0x67, 0x48, 0x20, 0x02, 0x49, 0x14, - 0x67, 0x88, 0x20, 0x40, 0x49, 0x12, 0x66, 0x08, - 0x48, 0x12, 0x68, 0x01, 0x23, 0x02, 0x43, 0x19, - 0x60, 0x01, 0x20, 0x33, 0x06, 0x40, 0x6d, 0x40, - 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, 0x60, 0x38, - 0x20, 0x33, 0x06, 0x40, 0x6d, 0xc0, 0x23, 0x0d, - 0x06, 0x9b, 0x1a, 0xc0, 0x60, 0x78, 0x48, 0x0a, - 0x43, 0x30, 0x60, 0xb8, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xcc, 0x00, 0x0f, 0x80, - 0x2e, 0x08, 0xb9, 0x88, 0x00, 0x00, 0x80, 0x0f, - 0xcc, 0x00, 0x05, 0x00, 0x66, 0x00, 0x00, 0xe0, - 0x66, 0x00, 0x00, 0x80, 0x66, 0x00, 0x00, 0xf0, - 0xcc, 0x00, 0x00, 0x00, 0xb5, 0xf3, 0x1c, 0x02, - 0xb0, 0x81, 0x68, 0x93, 0x68, 0x54, 0x21, 0x00, - 0x1d, 0xd8, 0x30, 0xb9, 0x1b, 0x00, 0x06, 0x05, - 0x0e, 0x2d, 0x2d, 0x12, 0xda, 0x12, 0x21, 0x00, - 0x42, 0xa9, 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x48, - 0x06, 0x01, 0x0e, 0x09, 0xe7, 0xf8, 0x78, 0x26, - 0x34, 0x01, 0x98, 0x02, 0x54, 0x46, 0xe7, 0xf6, - 0x68, 0x1b, 0x1d, 0x18, 0x90, 0x00, 0x98, 0x00, - 0x78, 0x80, 0x18, 0xc4, 0x1c, 0x0f, 0x2f, 0x12, - 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x78, 0x06, 0x07, - 0x0e, 0x3f, 0xe7, 0xf8, 0x78, 0x26, 0x34, 0x01, - 0x98, 0x02, 0x55, 0xc6, 0xe7, 0xf6, 0x20, 0x00, - 0xb0, 0x01, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, 0xb4, 0xf0, - 0x1c, 0x07, 0x1c, 0x0d, 0x1c, 0x14, 0xb0, 0x82, - 0x20, 0x00, 0x70, 0x20, 0x78, 0x78, 0x23, 0x80, - 0x40, 0x18, 0xd0, 0x03, 0x20, 0xb1, 0xb0, 0x02, - 0xbc, 0xf0, 0x47, 0x70, 0x78, 0xba, 0x20, 0x40, - 0x40, 0x10, 0xd0, 0x2a, 0x07, 0x12, 0x0f, 0x12, - 0x07, 0xd0, 0x0f, 0xc0, 0xd0, 0x25, 0x20, 0x40, - 0x70, 0x20, 0x35, 0x0a, 0x21, 0x00, 0x1d, 0xf8, - 0x30, 0x0d, 0x90, 0x01, 0x1d, 0xf8, 0x30, 0x1d, - 0x90, 0x00, 0x21, 0x00, 0x29, 0x08, 0xdb, 0x04, - 0xe0, 0x14, 0x1c, 0x48, 0x06, 0x01, 0x0e, 0x09, - 0xe7, 0xf8, 0x78, 0x2e, 0x35, 0x01, 0x98, 0x00, - 0x78, 0x03, 0x30, 0x01, 0x90, 0x00, 0x40, 0x33, - 0x98, 0x01, 0x78, 0x06, 0x30, 0x01, 0x90, 0x01, - 0x42, 0xb3, 0xd0, 0x02, 0x20, 0x00, 0x70, 0x20, - 0xe0, 0x00, 0xe7, 0xea, 0x20, 0x00, 0xb0, 0x02, - 0xe7, 0xce, 0x20, 0xb1, 0xb0, 0x02, 0xe7, 0xcb, - 0xb0, 0x02, 0xe7, 0xc9, 0xb5, 0xf7, 0x1c, 0x07, - 0xb0, 0x8d, 0x20, 0x00, 0x9a, 0x0f, 0x70, 0x10, - 0x78, 0x78, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x05, - 0x20, 0xb1, 0xb0, 0x0d, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x78, 0xb8, 0x90, 0x05, - 0x98, 0x05, 0x23, 0x40, 0x40, 0x18, 0xd0, 0x73, - 0x98, 0x05, 0x07, 0x00, 0x0f, 0x00, 0x90, 0x05, - 0x98, 0x05, 0x23, 0x02, 0x40, 0x18, 0xd1, 0x03, - 0x98, 0x05, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x68, - 0x99, 0x0e, 0x79, 0x48, 0x23, 0x3e, 0x40, 0x18, - 0x90, 0x0c, 0x78, 0xf8, 0x90, 0x04, 0x98, 0x04, - 0x01, 0x00, 0x4b, 0x81, 0x18, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x68, 0x00, 0x90, 0x01, 0x78, 0x7c, - 0x23, 0xbf, 0x40, 0x1c, 0x23, 0xfe, 0x40, 0x1c, - 0x20, 0x00, 0x90, 0x03, 0x98, 0x01, 0x06, 0x00, - 0x0e, 0x00, 0x99, 0x0c, 0x42, 0x88, 0xd0, 0x08, - 0x06, 0x20, 0x0e, 0x00, 0x24, 0x01, 0x43, 0x04, - 0x20, 0x01, 0x90, 0x03, 0x23, 0xdf, 0x40, 0x1c, - 0xe0, 0x06, 0x20, 0x02, 0x40, 0x20, 0xd0, 0x03, - 0x70, 0x7c, 0x20, 0x00, 0xb0, 0x0d, 0xe7, 0xbd, - 0x23, 0xfd, 0x40, 0x1c, 0x98, 0x05, 0x23, 0x04, - 0x40, 0x18, 0xd0, 0x73, 0x6a, 0xfd, 0x98, 0x03, - 0x28, 0x00, 0xd0, 0x14, 0x26, 0x00, 0x2e, 0x08, - 0xdb, 0x04, 0xe0, 0x0e, 0x1c, 0x70, 0x06, 0x06, - 0x0e, 0x36, 0xe7, 0xf8, 0x00, 0xb0, 0x19, 0x40, - 0x68, 0x40, 0x00, 0xb1, 0x19, 0x49, 0x64, 0x48, - 0x20, 0x00, 0x00, 0xb1, 0x19, 0x49, 0x62, 0x48, - 0xe7, 0xf0, 0x88, 0x28, 0x80, 0x68, 0x20, 0x20, - 0x40, 0x20, 0xd1, 0x3e, 0x99, 0x0e, 0x79, 0xc8, - 0x09, 0x40, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x0a, - 0x99, 0x0e, 0x79, 0xc8, 0x06, 0xc0, 0x0e, 0xc0, - 0x90, 0x09, 0x98, 0x0a, 0x30, 0x01, 0x06, 0x06, - 0x0e, 0x36, 0x2e, 0x08, 0xdb, 0x04, 0xe0, 0x10, - 0x1c, 0x70, 0x06, 0x06, 0x0e, 0x36, 0xe7, 0xf8, - 0x20, 0x00, 0x00, 0xb1, 0x19, 0x49, 0xe0, 0x01, - 0xe0, 0x9d, 0xe0, 0x9c, 0x64, 0x48, 0x88, 0x68, - 0x21, 0x80, 0x41, 0x31, 0x43, 0x88, 0x80, 0x68, - 0xe7, 0xee, 0x98, 0x0a, 0x00, 0x80, 0x19, 0x40, - 0x6c, 0x41, 0x98, 0x09, 0x00, 0x80, 0x4a, 0x4b, - 0x58, 0x10, 0x40, 0x08, 0x99, 0x0a, 0x00, 0x89, - 0x19, 0x49, 0x64, 0x48, 0x06, 0x20, 0x0e, 0x00, - 0x24, 0x20, 0x43, 0x04, 0x98, 0x01, 0x0a, 0x00, - 0x02, 0x00, 0x90, 0x01, 0x98, 0x01, 0x99, 0x0c, - 0x43, 0x08, 0x90, 0x01, 0x98, 0x01, 0x99, 0x02, - 0x60, 0x08, 0x78, 0x38, 0x23, 0x80, 0x40, 0x18, - 0xd0, 0x19, 0x99, 0x0e, 0x7b, 0x08, 0x07, 0x42, - 0x0f, 0x52, 0x92, 0x07, 0x99, 0x0e, 0x7b, 0x08, - 0x08, 0xc0, 0x06, 0x02, 0x0e, 0x12, 0x92, 0x08, - 0x1d, 0xe9, 0x31, 0x3d, 0x91, 0x06, 0x99, 0x06, - 0x9a, 0x08, 0x5c, 0x88, 0x49, 0x36, 0x9a, 0x07, - 0x5c, 0x89, 0xe0, 0x00, 0xe0, 0x4e, 0x40, 0x08, - 0x99, 0x06, 0x9a, 0x08, 0x54, 0x88, 0x99, 0x0e, - 0x79, 0x88, 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x00, - 0x98, 0x00, 0x49, 0x30, 0x40, 0xc1, 0x91, 0x00, - 0x99, 0x0e, 0x79, 0x88, 0x09, 0x40, 0x06, 0x02, - 0x0e, 0x12, 0x92, 0x0b, 0x9a, 0x0b, 0x00, 0x90, - 0x19, 0x40, 0x6c, 0x40, 0x99, 0x00, 0x40, 0x08, - 0xd0, 0x33, 0x06, 0x20, 0x0e, 0x00, 0x24, 0x40, - 0x43, 0x04, 0x9a, 0x0b, 0x00, 0x90, 0x19, 0x40, - 0x6c, 0x40, 0x99, 0x00, 0x40, 0x41, 0x00, 0x90, - 0x19, 0x40, 0x64, 0x41, 0x9a, 0x0b, 0x00, 0x90, - 0x19, 0x40, 0x6a, 0x40, 0x99, 0x00, 0x43, 0x01, - 0x00, 0x90, 0x19, 0x40, 0x62, 0x41, 0x9a, 0x0b, - 0x00, 0x90, 0x19, 0x40, 0x6c, 0x40, 0x28, 0x00, - 0xd1, 0x17, 0x88, 0x68, 0x9a, 0x0b, 0x21, 0x80, - 0x41, 0x11, 0x43, 0x88, 0x80, 0x68, 0x88, 0x68, - 0x28, 0x00, 0xd1, 0x0e, 0x06, 0x20, 0x0e, 0x00, - 0x24, 0x02, 0x43, 0x04, 0x23, 0xfe, 0x40, 0x1c, - 0x98, 0x0c, 0x30, 0x02, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x0c, 0x98, 0x0c, 0x23, 0x3e, 0x40, 0x18, - 0x90, 0x0c, 0xe0, 0x0a, 0x06, 0x20, 0x0e, 0x00, - 0x24, 0x40, 0x43, 0x04, 0x23, 0xfe, 0x40, 0x1c, - 0x98, 0x0c, 0x1c, 0x41, 0x98, 0x04, 0xf0, 0x00, - 0xf8, 0x13, 0x9a, 0x0f, 0x70, 0x14, 0x70, 0x7c, - 0x20, 0x00, 0xb0, 0x0d, 0xe6, 0xe2, 0x20, 0xb1, - 0xb0, 0x0d, 0xe6, 0xdf, 0xb0, 0x0d, 0xe6, 0xdd, - 0x64, 0x00, 0x08, 0x00, 0x2e, 0x08, 0x20, 0x90, - 0x2e, 0x08, 0x21, 0x10, 0x80, 0x00, 0x00, 0x00, - 0xb5, 0xf3, 0x98, 0x00, 0x06, 0x07, 0x0e, 0x3f, - 0x99, 0x01, 0x06, 0x0e, 0x0e, 0x36, 0x00, 0xf8, - 0x4b, 0x13, 0x18, 0xc5, 0x01, 0x38, 0x4b, 0x13, - 0x18, 0xc4, 0x01, 0x38, 0x4b, 0x12, 0x18, 0xc2, - 0x68, 0x10, 0x23, 0x40, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0x10, 0x2e, 0x3e, 0xdc, 0x15, 0x68, 0x20, - 0x1c, 0x01, 0x0a, 0x09, 0x02, 0x09, 0x43, 0x31, - 0x60, 0x21, 0x68, 0x28, 0x1c, 0x01, 0x0a, 0x09, - 0x02, 0x09, 0x23, 0x3e, 0x43, 0x19, 0x60, 0x29, - 0x68, 0x10, 0x23, 0x40, 0x43, 0x18, 0x60, 0x10, - 0x20, 0x00, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0xbd, 0xe7, 0xf9, 0xe7, 0xf8, - 0x64, 0x00, 0x10, 0x00, 0x64, 0x00, 0x08, 0x00, - 0x64, 0x00, 0x08, 0x08, 0xb5, 0xf3, 0xb0, 0x93, - 0x98, 0x13, 0x69, 0x00, 0x90, 0x01, 0x98, 0x01, - 0x78, 0x40, 0x23, 0x80, 0x40, 0x18, 0xd0, 0x05, - 0x20, 0xbe, 0xb0, 0x13, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x98, 0x01, 0x78, 0x80, - 0x90, 0x08, 0x98, 0x08, 0x23, 0x40, 0x40, 0x18, - 0xd0, 0x73, 0x98, 0x08, 0x23, 0x20, 0x40, 0x18, - 0xd0, 0x6f, 0x98, 0x01, 0x6b, 0x07, 0x98, 0x01, - 0x79, 0xc0, 0x00, 0x80, 0x49, 0x76, 0x58, 0x08, - 0x90, 0x00, 0x98, 0x00, 0x68, 0xc0, 0x1c, 0x06, - 0xd1, 0x02, 0x20, 0xb6, 0xb0, 0x13, 0xe7, 0xe1, - 0x78, 0xb0, 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x02, - 0x20, 0xb6, 0xb0, 0x13, 0xe7, 0xda, 0xa9, 0x11, - 0x1c, 0x30, 0xf0, 0x00, 0xf9, 0x2b, 0x90, 0x02, - 0x98, 0x11, 0x28, 0x00, 0xd1, 0x02, 0x98, 0x02, - 0xb0, 0x13, 0xe7, 0xcf, 0x98, 0x11, 0x90, 0x0e, - 0x20, 0x01, 0x90, 0x0b, 0x98, 0x13, 0x88, 0x40, - 0x90, 0x0d, 0x98, 0x13, 0x68, 0x40, 0x90, 0x06, - 0x98, 0x13, 0x68, 0x81, 0x91, 0x10, 0x99, 0x10, - 0x1d, 0xc8, 0x30, 0xb9, 0x90, 0x05, 0x98, 0x05, - 0x99, 0x06, 0x1a, 0x40, 0x04, 0x04, 0x0c, 0x24, - 0x99, 0x14, 0x79, 0x88, 0x90, 0x03, 0x98, 0x03, - 0x06, 0xc0, 0x0e, 0xc0, 0x90, 0x0a, 0x98, 0x0a, - 0x49, 0x5a, 0x40, 0xc1, 0x91, 0x0a, 0x98, 0x03, - 0x09, 0x40, 0x06, 0x00, 0x0e, 0x00, 0x90, 0x09, - 0x98, 0x09, 0x00, 0x80, 0x19, 0xc0, 0x6b, 0x80, - 0x99, 0x0a, 0x40, 0x08, 0xd0, 0x02, 0x20, 0xb1, - 0xb0, 0x13, 0xe7, 0x9f, 0x20, 0xb8, 0x90, 0x0c, - 0x98, 0x11, 0x30, 0x08, 0x90, 0x04, 0x20, 0x00, - 0x90, 0x07, 0x98, 0x07, 0x28, 0x00, 0xd0, 0x10, - 0x99, 0x10, 0x68, 0x09, 0x91, 0x10, 0x99, 0x10, - 0x1d, 0x08, 0x90, 0x12, 0x98, 0x12, 0x78, 0x80, - 0x99, 0x10, 0x18, 0x40, 0x90, 0x06, 0x98, 0x12, - 0x78, 0x81, 0x20, 0xc0, 0x1a, 0x40, 0x04, 0x04, - 0x0c, 0x24, 0x98, 0x0d, 0x42, 0x84, 0xdb, 0x05, - 0xe0, 0x00, 0xe0, 0x7c, 0x9c, 0x0d, 0x20, 0x00, - 0x90, 0x0d, 0xe0, 0x06, 0x98, 0x0d, 0x1b, 0x00, - 0x04, 0x00, 0x0c, 0x00, 0x90, 0x0d, 0x20, 0x01, - 0x90, 0x07, 0x98, 0x0c, 0x42, 0xa0, 0xda, 0x2e, - 0x25, 0x00, 0x98, 0x0c, 0x42, 0x85, 0xdb, 0x04, - 0xe0, 0x0c, 0x1c, 0x68, 0x06, 0x05, 0x0e, 0x2d, - 0xe7, 0xf7, 0x98, 0x06, 0x78, 0x01, 0x30, 0x01, - 0x90, 0x06, 0x98, 0x04, 0x70, 0x01, 0x30, 0x01, - 0x90, 0x04, 0xe7, 0xf2, 0x98, 0x0c, 0x1a, 0x20, - 0x04, 0x04, 0x0c, 0x24, 0xa9, 0x11, 0x1c, 0x30, - 0xf0, 0x00, 0xf8, 0xac, 0x90, 0x02, 0x98, 0x11, - 0x28, 0x00, 0xd1, 0x08, 0x98, 0x0e, 0x60, 0xb0, - 0x68, 0x70, 0x99, 0x0b, 0x18, 0x40, 0x60, 0x70, - 0x98, 0x02, 0xb0, 0x13, 0xe7, 0x4a, 0x98, 0x0b, - 0x30, 0x01, 0x90, 0x0b, 0x20, 0xb8, 0x90, 0x0c, - 0x98, 0x11, 0x30, 0x08, 0x90, 0x04, 0x25, 0x00, - 0x42, 0xa5, 0xdb, 0x04, 0xe0, 0x0c, 0x1c, 0x68, - 0x06, 0x05, 0x0e, 0x2d, 0xe7, 0xf8, 0x98, 0x06, - 0x78, 0x01, 0x30, 0x01, 0x90, 0x06, 0x98, 0x04, - 0x70, 0x01, 0x30, 0x01, 0x90, 0x04, 0xe7, 0xf2, - 0x98, 0x0c, 0x1b, 0x00, 0x04, 0x00, 0x0c, 0x00, - 0x90, 0x0c, 0x98, 0x0d, 0x28, 0x00, 0xd1, 0x90, - 0x6b, 0x39, 0x91, 0x0f, 0x6a, 0xf8, 0x28, 0x00, - 0xd1, 0x02, 0x98, 0x0e, 0x62, 0xf8, 0xe0, 0x05, - 0x98, 0x0e, 0x99, 0x0f, 0x60, 0x08, 0x98, 0x0e, - 0x6d, 0xb9, 0x60, 0x08, 0x98, 0x09, 0x00, 0x80, - 0x19, 0xc0, 0x6b, 0x80, 0x99, 0x0a, 0x43, 0x01, - 0x98, 0x09, 0x00, 0x80, 0x19, 0xc0, 0x63, 0x81, - 0x6b, 0x78, 0x99, 0x0b, 0x18, 0x40, 0x63, 0x78, - 0x20, 0x00, 0x99, 0x11, 0x60, 0x08, 0x98, 0x11, - 0x63, 0x38, 0x98, 0x0e, 0x30, 0x04, 0x65, 0xb8, - 0x98, 0x02, 0xb0, 0x13, 0xe7, 0x02, 0x20, 0xb1, - 0xb0, 0x13, 0xe6, 0xff, 0xb0, 0x13, 0xe6, 0xfd, - 0x2e, 0x08, 0x9b, 0xc8, 0x80, 0x00, 0x00, 0x00, - 0xb4, 0xf0, 0x1c, 0x01, 0x78, 0x88, 0x23, 0x20, - 0x40, 0x18, 0xd0, 0x42, 0x79, 0xc8, 0x00, 0x80, - 0x4b, 0x21, 0x58, 0x1d, 0x6b, 0x0a, 0x68, 0xef, - 0x68, 0x10, 0x28, 0x00, 0xd0, 0x17, 0x68, 0xfe, - 0x68, 0x10, 0x60, 0x30, 0x68, 0x50, 0x60, 0xf8, - 0x68, 0x78, 0x68, 0x93, 0x18, 0xc0, 0x60, 0x78, - 0x20, 0x00, 0x60, 0x10, 0x20, 0x00, 0x60, 0x50, - 0x20, 0x00, 0x60, 0x90, 0x68, 0x78, 0x78, 0x3b, - 0x42, 0x98, 0xd9, 0x04, 0x78, 0xb8, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x18, 0x70, 0xb8, 0x6a, 0xd0, - 0x60, 0x10, 0x6b, 0x10, 0x60, 0x50, 0x6b, 0x50, - 0x60, 0x90, 0x24, 0x00, 0x2c, 0x08, 0xdb, 0x04, - 0xe0, 0x0e, 0x1c, 0x60, 0x06, 0x04, 0x0e, 0x24, - 0xe7, 0xf8, 0x00, 0xa0, 0x18, 0x80, 0x6b, 0x80, - 0x00, 0xa3, 0x18, 0x9b, 0x60, 0xd8, 0x23, 0x00, - 0x00, 0xa0, 0x18, 0x80, 0x63, 0x83, 0xe7, 0xf0, - 0x20, 0x00, 0x62, 0xd0, 0x20, 0x00, 0x63, 0x10, - 0x20, 0x00, 0x63, 0x50, 0x20, 0x00, 0xbc, 0xf0, - 0x47, 0x70, 0x20, 0xb1, 0xe7, 0xfb, 0xe7, 0xfa, - 0x2e, 0x08, 0x9b, 0xc8, 0xb4, 0x90, 0x1c, 0x02, - 0x1c, 0x0f, 0x78, 0x14, 0x68, 0x90, 0x1c, 0x01, - 0xd1, 0x08, 0x20, 0x00, 0x60, 0x38, 0x78, 0x90, - 0x23, 0x01, 0x43, 0x18, 0x70, 0x90, 0x20, 0xb7, - 0xbc, 0x90, 0x47, 0x70, 0x68, 0x08, 0x60, 0x90, - 0x20, 0x00, 0x60, 0x48, 0x60, 0x39, 0x68, 0x50, - 0x38, 0x01, 0x60, 0x50, 0x68, 0x50, 0x42, 0xa0, - 0xd1, 0x02, 0x20, 0xbf, 0xe7, 0xf0, 0xe0, 0x01, - 0x20, 0x00, 0xe7, 0xed, 0xe7, 0xec, 0x00, 0x00, - 0x1c, 0x01, 0x22, 0x00, 0x6a, 0x50, 0x68, 0x02, - 0x60, 0x0a, 0x4a, 0x05, 0x6f, 0xd2, 0x60, 0x8a, - 0x4a, 0x04, 0x68, 0x12, 0x60, 0x4a, 0x22, 0x1d, - 0x02, 0x92, 0x68, 0x12, 0x60, 0xca, 0x47, 0x70, - 0xcc, 0x00, 0x0f, 0x80, 0x2e, 0x08, 0x20, 0x24, - 0x1c, 0x01, 0x48, 0x02, 0x60, 0x01, 0x20, 0x00, - 0x47, 0x70, 0xe7, 0xfd, 0x66, 0x00, 0x01, 0x00, - 0x1c, 0x01, 0x20, 0x33, 0x06, 0x40, 0x62, 0x01, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, - 0x20, 0x33, 0x06, 0x40, 0x6a, 0xc0, 0x23, 0x7f, - 0x03, 0x9b, 0x40, 0x18, 0x03, 0x8a, 0x43, 0x10, - 0x22, 0x33, 0x06, 0x52, 0x62, 0xd0, 0x20, 0x00, - 0x47, 0x70, 0xe7, 0xfd, 0x1c, 0x01, 0x20, 0x33, - 0x06, 0x40, 0x6a, 0xc0, 0x23, 0x03, 0x03, 0x1b, - 0x40, 0x18, 0x43, 0x08, 0x22, 0x33, 0x06, 0x52, - 0x62, 0xd0, 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, - 0x1c, 0x01, 0x06, 0x0a, 0x0e, 0x12, 0x2a, 0x00, - 0xd0, 0x06, 0x20, 0x33, 0x06, 0x40, 0x6a, 0xc0, - 0x23, 0x01, 0x05, 0x5b, 0x43, 0x18, 0xe0, 0x04, - 0x20, 0x33, 0x06, 0x40, 0x6a, 0xc0, 0x4b, 0x04, - 0x40, 0x18, 0x23, 0x33, 0x06, 0x5b, 0x62, 0xd8, - 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, 0x00, 0x00, - 0xff, 0xdf, 0xff, 0xff, 0x48, 0x04, 0x69, 0x80, - 0x07, 0xc0, 0x0f, 0xc0, 0xd0, 0x01, 0x20, 0xff, - 0x47, 0x70, 0x20, 0x00, 0xe7, 0xfc, 0xe7, 0xfb, - 0x66, 0x00, 0x00, 0x80, 0xb4, 0x80, 0x1c, 0x01, - 0x06, 0x0f, 0x0e, 0x3f, 0x4a, 0x08, 0x2f, 0x00, - 0xd0, 0x03, 0x68, 0x10, 0x23, 0x01, 0x43, 0x18, - 0xe0, 0x02, 0x68, 0x10, 0x08, 0x40, 0x00, 0x40, - 0x68, 0x13, 0x43, 0x18, 0x60, 0x10, 0x20, 0x00, - 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x98, 0xb4, 0x80, 0x1c, 0x07, - 0x1c, 0x0a, 0x4b, 0x06, 0x40, 0x1a, 0x4b, 0x06, - 0x40, 0x1f, 0x0b, 0x10, 0x02, 0x39, 0x43, 0x08, - 0x49, 0x04, 0x61, 0xc8, 0x20, 0x00, 0xbc, 0x80, - 0x47, 0x70, 0xe7, 0xfc, 0x01, 0xff, 0xf0, 0x00, - 0x00, 0xff, 0xf0, 0x00, 0x66, 0x00, 0x00, 0x80, - 0x48, 0x01, 0x69, 0xc0, 0x47, 0x70, 0xe7, 0xfd, - 0x66, 0x00, 0x00, 0x80, 0x1c, 0x01, 0x48, 0x07, - 0x68, 0x02, 0x4b, 0x07, 0x40, 0x1a, 0x60, 0x02, - 0x23, 0x01, 0x05, 0x9b, 0x42, 0x99, 0xd1, 0x03, - 0x48, 0x02, 0x68, 0x02, 0x43, 0x0a, 0x60, 0x02, - 0x47, 0x70, 0x00, 0x00, 0x66, 0x00, 0x00, 0x2c, - 0xff, 0xbf, 0xff, 0xff, 0x1c, 0x01, 0x20, 0x33, - 0x06, 0x40, 0x67, 0x41, 0x47, 0x70, 0x1c, 0x01, - 0x20, 0x33, 0x06, 0x40, 0x67, 0x81, 0x47, 0x70, - 0xb5, 0x90, 0x4c, 0x21, 0x20, 0x01, 0x60, 0x20, - 0xf0, 0x12, 0xff, 0xa4, 0x48, 0x1f, 0x69, 0x84, - 0x27, 0x00, 0x2f, 0x04, 0xd3, 0x04, 0xe0, 0x06, - 0x1c, 0x78, 0x06, 0x07, 0x0e, 0x3f, 0xe7, 0xf8, - 0x21, 0x00, 0xc4, 0x02, 0xe7, 0xf8, 0x20, 0x00, - 0x49, 0x18, 0x69, 0x49, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x16, 0x69, 0x49, 0x60, 0x48, 0x20, 0x00, - 0x49, 0x14, 0x69, 0x49, 0x60, 0x88, 0x20, 0x00, - 0x49, 0x12, 0x69, 0x49, 0x60, 0xc8, 0x20, 0x00, - 0x49, 0x10, 0x69, 0x49, 0x61, 0x08, 0x20, 0x00, - 0x49, 0x0e, 0x69, 0x49, 0x61, 0x48, 0x20, 0x00, - 0x49, 0x0c, 0x69, 0x49, 0x61, 0x88, 0x20, 0x00, - 0x49, 0x0a, 0x69, 0x49, 0x61, 0xc8, 0x20, 0x00, - 0x49, 0x08, 0x69, 0x49, 0x62, 0x08, 0x20, 0x00, - 0x49, 0x06, 0x69, 0x49, 0x62, 0x48, 0x20, 0x18, - 0x49, 0x04, 0x69, 0x49, 0x62, 0x88, 0x20, 0x00, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xe7, 0xfb, - 0x70, 0x00, 0x00, 0x38, 0x2e, 0x08, 0x20, 0x28, - 0xb5, 0xff, 0x1c, 0x0f, 0xb0, 0x81, 0x9c, 0x01, - 0x69, 0x20, 0x28, 0x08, 0xd1, 0x01, 0x08, 0x7f, - 0x00, 0x7f, 0x6b, 0xa0, 0x9a, 0x03, 0x43, 0x50, - 0x19, 0xc6, 0x69, 0x20, 0x00, 0x80, 0x49, 0x34, - 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x00, - 0x08, 0x76, 0x69, 0x20, 0x00, 0x80, 0x49, 0x31, - 0x58, 0x08, 0x43, 0x70, 0x90, 0x00, 0x69, 0xa0, - 0x99, 0x00, 0x09, 0x49, 0x18, 0x45, 0x6b, 0xe0, - 0x28, 0x00, 0xd1, 0x02, 0x03, 0x28, 0x0b, 0x00, - 0xe0, 0x01, 0x02, 0x28, 0x0a, 0x00, 0x1c, 0x05, - 0xf0, 0x12, 0xff, 0x42, 0xf0, 0x12, 0xff, 0x1e, - 0x48, 0x27, 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, - 0x00, 0xc0, 0x49, 0x25, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x48, 0x23, 0x69, 0x80, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x49, 0x20, 0x69, 0x89, - 0x60, 0x08, 0x6b, 0xe0, 0x49, 0x1e, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x1e, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x1a, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x1c, 0x21, - 0x1c, 0x20, 0xf0, 0x00, 0xfe, 0x51, 0x48, 0x16, - 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x16, 0x40, 0x18, - 0x02, 0x29, 0x0a, 0x09, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x11, 0x69, 0xc9, 0x60, 0x08, 0x01, 0x80, - 0x48, 0x0f, 0x69, 0xc0, 0x68, 0x00, 0x01, 0x40, - 0x09, 0x40, 0x99, 0x00, 0x06, 0xc9, 0x43, 0x08, - 0x49, 0x0b, 0x69, 0xc9, 0x60, 0x08, 0x99, 0x04, - 0x1c, 0x20, 0x22, 0x00, 0xf0, 0x00, 0xfe, 0xbc, - 0xf0, 0x00, 0xff, 0x9d, 0xf0, 0x12, 0xff, 0x14, - 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xff, 0x1c, 0x0f, - 0xb0, 0x81, 0x9c, 0x01, 0x69, 0x20, 0x28, 0x08, - 0xd1, 0x01, 0x08, 0x7f, 0x00, 0x7f, 0x6b, 0xa0, - 0x9a, 0x03, 0x43, 0x50, 0x19, 0xc6, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x37, 0x58, 0x08, 0x23, 0x04, - 0x40, 0x18, 0xd0, 0x00, 0x08, 0x76, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x34, 0x58, 0x08, 0x43, 0x70, - 0x90, 0x00, 0x69, 0xa0, 0x99, 0x00, 0x09, 0x49, - 0x18, 0x45, 0x6b, 0xe0, 0x28, 0x00, 0xd1, 0x02, - 0x03, 0x28, 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x28, - 0x0a, 0x00, 0x1c, 0x05, 0xf0, 0x12, 0xfe, 0xc0, - 0xf0, 0x12, 0xfe, 0x9c, 0x48, 0x2a, 0x69, 0x80, - 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x01, - 0x43, 0x18, 0x49, 0x27, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x6b, 0xe0, 0x49, 0x24, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x24, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x20, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x48, 0x1e, - 0x69, 0x80, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, - 0x99, 0x00, 0x06, 0xc9, 0x43, 0x01, 0x48, 0x1a, - 0x69, 0x80, 0x60, 0x01, 0x1c, 0x21, 0x1c, 0x20, - 0xf0, 0x00, 0xfd, 0xca, 0x48, 0x16, 0x69, 0xc0, - 0x68, 0x00, 0x4b, 0x17, 0x40, 0x18, 0x02, 0x29, - 0x0a, 0x09, 0x00, 0x89, 0x43, 0x08, 0x49, 0x12, - 0x69, 0xc9, 0x60, 0x08, 0x01, 0x80, 0x48, 0x10, - 0x69, 0xc0, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, - 0x49, 0x0d, 0x69, 0xc9, 0x60, 0x08, 0xf0, 0x00, - 0xff, 0x1e, 0xf0, 0x12, 0xfe, 0x73, 0x48, 0x0a, - 0x6b, 0x81, 0x1c, 0x20, 0xf0, 0x00, 0xfe, 0xf0, - 0x9b, 0x04, 0x60, 0x18, 0xf0, 0x12, 0xfe, 0x8c, - 0x20, 0x00, 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xff, 0x1c, 0x0c, - 0x1c, 0x1f, 0xb0, 0x83, 0x9d, 0x03, 0x6b, 0x28, - 0x6a, 0xa9, 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, - 0x19, 0xe0, 0x99, 0x00, 0x42, 0x88, 0xd9, 0x01, - 0x98, 0x00, 0x1b, 0x07, 0x69, 0x28, 0x28, 0x08, - 0xd1, 0x02, 0x08, 0x7f, 0x08, 0x64, 0x00, 0x64, - 0x6b, 0xa8, 0x9a, 0x05, 0x43, 0x50, 0x19, 0x01, - 0x91, 0x01, 0x69, 0x28, 0x00, 0x80, 0x49, 0x38, - 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, - 0x99, 0x01, 0x08, 0x49, 0x91, 0x01, 0x69, 0x28, - 0x00, 0x80, 0x49, 0x34, 0x58, 0x08, 0x99, 0x01, - 0x43, 0x48, 0x90, 0x02, 0x69, 0xa8, 0x99, 0x02, - 0x09, 0x49, 0x18, 0x46, 0x6b, 0xe8, 0x28, 0x00, - 0xd1, 0x02, 0x03, 0x30, 0x0b, 0x00, 0xe0, 0x01, - 0x02, 0x30, 0x0a, 0x00, 0x1c, 0x06, 0xf0, 0x12, - 0xfe, 0x27, 0xf0, 0x12, 0xfe, 0x03, 0x48, 0x2a, - 0x69, 0x80, 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, - 0x49, 0x27, 0x69, 0x89, 0x60, 0x08, 0x48, 0x26, - 0x69, 0x80, 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, - 0x23, 0x02, 0x43, 0x18, 0x49, 0x22, 0x69, 0x89, - 0x60, 0x08, 0x07, 0x40, 0x6b, 0xe8, 0x49, 0x20, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x1f, 0x40, 0x19, - 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, 0x49, 0x1c, - 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, - 0x1c, 0x29, 0x1c, 0x28, 0xf0, 0x00, 0xfd, 0x34, - 0x48, 0x17, 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x18, - 0x40, 0x18, 0x02, 0x31, 0x0a, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x13, 0x69, 0xc9, 0x60, 0x08, - 0x01, 0x80, 0x48, 0x11, 0x69, 0xc0, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x99, 0x02, 0x06, 0xc9, - 0x43, 0x08, 0x49, 0x0d, 0x69, 0xc9, 0x60, 0x08, - 0x99, 0x0c, 0x1c, 0x28, 0x22, 0x02, 0xf0, 0x00, - 0xfd, 0x9f, 0x48, 0x09, 0x69, 0x40, 0x62, 0x07, - 0xf0, 0x00, 0xfe, 0x7d, 0xf0, 0x12, 0xfd, 0xf4, - 0x20, 0x00, 0xb0, 0x03, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x03, 0xe7, 0xf9, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xff, 0xb0, 0x81, - 0x9f, 0x01, 0x6b, 0x78, 0x6a, 0xf9, 0x1a, 0x40, - 0x30, 0x01, 0x90, 0x00, 0x9a, 0x03, 0x9b, 0x04, - 0x18, 0xd0, 0x99, 0x00, 0x42, 0x88, 0xd9, 0x03, - 0x98, 0x00, 0x9a, 0x03, 0x1a, 0x83, 0x93, 0x04, - 0x69, 0x38, 0x28, 0x08, 0xd1, 0x03, 0x99, 0x02, - 0x08, 0x49, 0x00, 0x49, 0x91, 0x02, 0x6b, 0xb8, - 0x9a, 0x03, 0x43, 0x50, 0x99, 0x02, 0x18, 0x45, - 0x69, 0x38, 0x00, 0x80, 0x49, 0x3c, 0x58, 0x08, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x00, 0x08, 0x6d, - 0x69, 0x38, 0x00, 0x80, 0x49, 0x39, 0x58, 0x08, - 0x1c, 0x06, 0x43, 0x6e, 0x69, 0xb8, 0x09, 0x71, - 0x18, 0x44, 0x6b, 0xf8, 0x28, 0x00, 0xd1, 0x02, - 0x03, 0x20, 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x20, - 0x0a, 0x00, 0x1c, 0x04, 0xf0, 0x12, 0xfd, 0x90, - 0xf0, 0x12, 0xfd, 0x6c, 0x48, 0x30, 0x69, 0x80, - 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, 0x49, 0x2e, - 0x69, 0x89, 0x60, 0x08, 0x48, 0x2c, 0x69, 0x80, - 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x03, - 0x43, 0x18, 0x49, 0x29, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x6b, 0xf8, 0x49, 0x26, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x26, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x22, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x1c, 0x39, - 0x1c, 0x38, 0xf0, 0x00, 0xfc, 0x9d, 0x99, 0x0a, - 0x1c, 0x38, 0x22, 0x03, 0xf0, 0x00, 0xfd, 0x20, - 0x69, 0xf8, 0x49, 0x1b, 0x69, 0x49, 0x61, 0x08, - 0x48, 0x19, 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x1a, - 0x40, 0x18, 0x02, 0x21, 0x0a, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x15, 0x69, 0xc9, 0x60, 0x08, - 0x01, 0x80, 0x48, 0x13, 0x69, 0xc0, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x06, 0xf1, 0x43, 0x08, - 0x49, 0x0f, 0x69, 0xc9, 0x60, 0x08, 0x48, 0x0e, - 0x69, 0x40, 0x61, 0x84, 0x06, 0xf0, 0x0e, 0xc0, - 0x49, 0x0b, 0x69, 0x49, 0x61, 0x48, 0x9b, 0x04, - 0x48, 0x09, 0x69, 0x40, 0x62, 0x43, 0xf0, 0x00, - 0xfd, 0xda, 0xf0, 0x12, 0xfd, 0x51, 0x20, 0x00, - 0xb0, 0x01, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0xb0, 0x01, 0xe7, 0xf9, 0x00, 0x00, - 0x2e, 0x03, 0xa8, 0x78, 0x2e, 0x03, 0xa8, 0xc8, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xdf, 0xff, - 0xfc, 0x00, 0x00, 0x03, 0xb5, 0xf3, 0xb0, 0x86, - 0x9f, 0x06, 0x99, 0x07, 0x68, 0x8c, 0x99, 0x07, - 0x68, 0xc8, 0x90, 0x03, 0x99, 0x07, 0x68, 0x0d, - 0x99, 0x07, 0x68, 0x49, 0x91, 0x02, 0x6b, 0x78, - 0x6a, 0xf9, 0x1a, 0x40, 0x30, 0x01, 0x90, 0x01, - 0x6b, 0x38, 0x6a, 0xb9, 0x1a, 0x40, 0x30, 0x01, - 0x90, 0x00, 0x99, 0x02, 0x98, 0x03, 0x18, 0x08, - 0x99, 0x01, 0x42, 0x88, 0xd9, 0x03, 0x98, 0x01, - 0x99, 0x02, 0x1a, 0x40, 0x90, 0x03, 0x19, 0x28, - 0x99, 0x00, 0x42, 0x88, 0xd9, 0x01, 0x98, 0x00, - 0x1b, 0x44, 0x69, 0x38, 0x28, 0x08, 0xd1, 0x02, - 0x08, 0x64, 0x08, 0x6d, 0x00, 0x6d, 0x6b, 0xb8, - 0x99, 0x02, 0x43, 0x48, 0x19, 0x41, 0x91, 0x04, - 0x69, 0x38, 0x00, 0x80, 0x49, 0x41, 0x58, 0x08, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x02, 0x99, 0x04, - 0x08, 0x49, 0x91, 0x04, 0x69, 0x38, 0x00, 0x80, - 0x49, 0x3d, 0x58, 0x08, 0x99, 0x04, 0x43, 0x48, - 0x90, 0x05, 0x69, 0xb8, 0x99, 0x05, 0x09, 0x49, - 0x18, 0x46, 0x6b, 0xf8, 0x28, 0x00, 0xd1, 0x02, - 0x03, 0x30, 0x0b, 0x00, 0xe0, 0x01, 0x02, 0x30, - 0x0a, 0x00, 0x1c, 0x06, 0xf0, 0x12, 0xfc, 0xd4, - 0xf0, 0x12, 0xfc, 0xb0, 0x48, 0x33, 0x69, 0x80, - 0x68, 0x00, 0x01, 0x40, 0x09, 0x40, 0x49, 0x31, - 0x69, 0x89, 0x60, 0x08, 0x48, 0x2f, 0x69, 0x80, - 0x68, 0x00, 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x04, - 0x43, 0x18, 0x49, 0x2c, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x40, 0x48, 0x2a, 0x69, 0xc0, 0x68, 0x00, - 0x01, 0x40, 0x09, 0x40, 0x99, 0x05, 0x06, 0xc9, - 0x43, 0x08, 0x49, 0x26, 0x69, 0xc9, 0x60, 0x08, - 0x48, 0x24, 0x69, 0xc0, 0x68, 0x00, 0x4b, 0x24, - 0x40, 0x18, 0x02, 0x31, 0x0a, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x20, 0x69, 0xc9, 0x60, 0x08, - 0x01, 0x80, 0x1c, 0x39, 0x1c, 0x38, 0xf0, 0x00, - 0xfb, 0xd7, 0x6b, 0xf8, 0x49, 0x1b, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x1c, 0x40, 0x19, 0x07, 0xc0, - 0x0c, 0x80, 0x43, 0x08, 0x49, 0x17, 0x69, 0x89, - 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, 0x99, 0x07, - 0x69, 0x09, 0x1c, 0x38, 0x22, 0x04, 0xf0, 0x00, - 0xfc, 0x4b, 0x69, 0xf8, 0x49, 0x11, 0x69, 0x49, - 0x61, 0x08, 0x98, 0x05, 0x06, 0xc0, 0x0e, 0xc0, - 0x49, 0x0e, 0x69, 0x49, 0x61, 0x48, 0x48, 0x0d, - 0x69, 0x40, 0x61, 0x86, 0x48, 0x0b, 0x69, 0x40, - 0x62, 0x04, 0x98, 0x03, 0x49, 0x09, 0x69, 0x49, - 0x62, 0x48, 0xf0, 0x00, 0xfd, 0x18, 0xf0, 0x12, - 0xfc, 0x8f, 0x20, 0x00, 0xb0, 0x06, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x06, - 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x03, 0xa8, 0xc8, 0x2e, 0x08, 0x20, 0x28, - 0xfc, 0x00, 0x00, 0x03, 0xff, 0xff, 0xdf, 0xff, - 0xb5, 0xff, 0x9d, 0x09, 0xb0, 0x81, 0x98, 0x0b, - 0x06, 0x02, 0x0e, 0x12, 0x92, 0x00, 0xb0, 0x93, - 0x98, 0x14, 0x90, 0x12, 0x99, 0x15, 0x91, 0x11, - 0xaf, 0x0c, 0x1c, 0x38, 0x9a, 0x16, 0xca, 0x5e, - 0xc0, 0x5e, 0x68, 0x39, 0x91, 0x04, 0x68, 0x79, - 0x91, 0x03, 0x98, 0x12, 0x99, 0x11, 0x42, 0x88, - 0xd1, 0x73, 0x99, 0x03, 0x42, 0x8d, 0xd9, 0x71, - 0x68, 0xb8, 0x90, 0x01, 0x68, 0xf8, 0x90, 0x02, - 0x99, 0x11, 0x6b, 0x48, 0x6a, 0xc9, 0x1a, 0x40, - 0x1c, 0x44, 0x99, 0x11, 0x6b, 0x08, 0x6a, 0x89, - 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, 0x98, 0x02, - 0x18, 0x28, 0x42, 0xa0, 0xd9, 0x01, 0x1b, 0x61, - 0x91, 0x02, 0x9b, 0x17, 0x98, 0x01, 0x18, 0x18, - 0x99, 0x00, 0x42, 0x88, 0xd9, 0x03, 0x98, 0x00, - 0x9b, 0x17, 0x1a, 0xc0, 0x90, 0x01, 0x98, 0x01, - 0x60, 0xb8, 0x98, 0x02, 0x60, 0xf8, 0x98, 0x12, - 0x69, 0xc0, 0x90, 0x0a, 0x98, 0x12, 0x6b, 0x80, - 0x99, 0x03, 0x43, 0x48, 0x99, 0x04, 0x18, 0x41, - 0x91, 0x05, 0x98, 0x12, 0x69, 0x00, 0x00, 0x80, - 0x49, 0x48, 0x58, 0x08, 0x99, 0x05, 0x43, 0x48, - 0x90, 0x0b, 0x98, 0x12, 0x69, 0x80, 0x99, 0x0b, - 0x09, 0x49, 0x18, 0x41, 0x91, 0x07, 0x98, 0x0a, - 0x99, 0x02, 0x43, 0x48, 0x90, 0x0b, 0x98, 0x0b, - 0x09, 0x40, 0x99, 0x07, 0x18, 0x40, 0x90, 0x06, - 0x98, 0x06, 0x0b, 0xc0, 0x99, 0x07, 0x0b, 0xc9, - 0x1a, 0x40, 0x90, 0x09, 0x98, 0x09, 0x28, 0x00, - 0xd0, 0x56, 0x9e, 0x02, 0x98, 0x06, 0x04, 0x40, - 0x0c, 0x40, 0x01, 0x41, 0x91, 0x08, 0x99, 0x08, - 0x98, 0x0a, 0xf0, 0x04, 0xf9, 0x17, 0x1c, 0x04, - 0x2c, 0x00, 0xd1, 0x00, 0x34, 0x01, 0x99, 0x03, - 0x98, 0x02, 0x18, 0x08, 0x1b, 0x00, 0x60, 0x78, - 0x60, 0xfc, 0x98, 0x02, 0x18, 0x28, 0x1b, 0x05, - 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, - 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, - 0xf8, 0x57, 0xb0, 0x02, 0x1b, 0x36, 0x98, 0x09, - 0xe0, 0x01, 0xe0, 0x3c, 0xe0, 0x3b, 0x38, 0x01, - 0x90, 0x09, 0x98, 0x09, 0x28, 0x00, 0xd0, 0x1a, - 0x98, 0x0a, 0x21, 0x01, 0x03, 0x09, 0xf0, 0x04, - 0xf8, 0xf1, 0x1c, 0x04, 0x68, 0x78, 0x1b, 0x80, - 0x60, 0x78, 0x60, 0xfc, 0x68, 0xf8, 0x1a, 0x2d, - 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, - 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, - 0xf8, 0x37, 0xb0, 0x02, 0x1b, 0x36, 0x98, 0x09, - 0x38, 0x01, 0x90, 0x09, 0xe7, 0xe1, 0x68, 0x78, - 0x1b, 0x80, 0x60, 0x78, 0x60, 0xfe, 0x68, 0xf8, - 0x1a, 0x2d, 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, - 0x9b, 0x19, 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, - 0xf0, 0x00, 0xf8, 0x22, 0xb0, 0x02, 0xe0, 0x09, - 0x9a, 0x13, 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, - 0x1c, 0x3a, 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, - 0xf8, 0x17, 0xb0, 0x02, 0xe0, 0x09, 0x9a, 0x13, - 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x19, 0x1c, 0x3a, - 0x99, 0x17, 0x98, 0x16, 0xf0, 0x00, 0xf8, 0xb8, - 0xb0, 0x02, 0x20, 0x00, 0xb0, 0x14, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x13, - 0xb0, 0x01, 0xe7, 0xf8, 0x2e, 0x03, 0xa8, 0xc8, - 0xb5, 0xff, 0x9d, 0x09, 0xb0, 0x81, 0x98, 0x0b, - 0x06, 0x02, 0x0e, 0x12, 0x92, 0x00, 0xb0, 0x92, - 0x98, 0x13, 0x90, 0x11, 0x99, 0x14, 0x91, 0x10, - 0xaf, 0x0b, 0x1c, 0x38, 0x9a, 0x15, 0xca, 0x5e, - 0xc0, 0x5e, 0x68, 0x38, 0x90, 0x03, 0x68, 0x78, - 0x90, 0x02, 0x68, 0xb8, 0x90, 0x00, 0x68, 0xf9, - 0x91, 0x01, 0x98, 0x11, 0x69, 0xc0, 0x90, 0x09, - 0x99, 0x10, 0x6b, 0x88, 0x43, 0x68, 0x9b, 0x16, - 0x18, 0xc1, 0x91, 0x04, 0x99, 0x10, 0x69, 0x08, - 0x00, 0x80, 0x49, 0x42, 0x58, 0x08, 0x99, 0x04, - 0x43, 0x48, 0x90, 0x0a, 0x99, 0x10, 0x69, 0x88, - 0x99, 0x0a, 0x09, 0x49, 0x18, 0x40, 0x90, 0x06, - 0x98, 0x09, 0x99, 0x01, 0x43, 0x48, 0x90, 0x0a, - 0x98, 0x0a, 0x09, 0x40, 0x99, 0x06, 0x18, 0x40, - 0x90, 0x05, 0x98, 0x05, 0x0b, 0xc0, 0x99, 0x06, - 0x0b, 0xc9, 0x1a, 0x40, 0x90, 0x08, 0x98, 0x08, - 0x28, 0x00, 0xd0, 0x53, 0x9e, 0x01, 0x98, 0x05, - 0x04, 0x40, 0x0c, 0x40, 0x01, 0x41, 0x91, 0x07, - 0x99, 0x07, 0x98, 0x09, 0xf0, 0x04, 0xf8, 0x5e, - 0x1c, 0x04, 0x2c, 0x00, 0xd1, 0x00, 0x34, 0x01, - 0x98, 0x02, 0x99, 0x01, 0x18, 0x40, 0x1b, 0x00, - 0x60, 0x78, 0x60, 0xfc, 0x99, 0x01, 0x18, 0x68, - 0x1b, 0x05, 0x9a, 0x12, 0x1c, 0x29, 0xb4, 0x06, - 0x9b, 0x18, 0x1c, 0x3a, 0x99, 0x16, 0x98, 0x15, - 0xf0, 0x00, 0xf8, 0x4a, 0xb0, 0x02, 0x1b, 0x36, - 0x98, 0x08, 0x38, 0x01, 0x90, 0x08, 0x98, 0x08, - 0x28, 0x00, 0xd0, 0x1a, 0x98, 0x09, 0x21, 0x01, - 0x03, 0x09, 0xf0, 0x04, 0xf8, 0x3b, 0x1c, 0x04, - 0x68, 0x78, 0x1b, 0x80, 0x60, 0x78, 0x60, 0xfc, - 0x68, 0xf8, 0x1a, 0x2d, 0x9a, 0x12, 0x1c, 0x29, - 0xb4, 0x06, 0x9b, 0x18, 0x1c, 0x3a, 0x99, 0x16, - 0x98, 0x15, 0xf0, 0x00, 0xf8, 0x2d, 0xb0, 0x02, - 0x1b, 0x36, 0x98, 0x08, 0x38, 0x01, 0x90, 0x08, - 0xe7, 0xe1, 0x68, 0x78, 0x1b, 0x80, 0x60, 0x78, - 0x60, 0xfe, 0x68, 0xf8, 0x1a, 0x2d, 0x9a, 0x12, - 0x1c, 0x29, 0xb4, 0x06, 0x9b, 0x18, 0x1c, 0x3a, - 0x99, 0x16, 0x98, 0x15, 0xf0, 0x00, 0xf8, 0x18, - 0xb0, 0x02, 0xe0, 0x09, 0x9a, 0x12, 0x1c, 0x29, - 0xb4, 0x06, 0x9b, 0x18, 0x1c, 0x3a, 0x99, 0x16, - 0x98, 0x15, 0xf0, 0x00, 0xf8, 0x0d, 0xb0, 0x02, - 0x20, 0x00, 0xb0, 0x13, 0xb0, 0x04, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x12, 0xb0, 0x01, - 0xe7, 0xf8, 0x00, 0x00, 0x2e, 0x03, 0xa8, 0xc8, - 0xb5, 0xff, 0xb0, 0x81, 0x98, 0x0b, 0x06, 0x02, - 0x0e, 0x12, 0x92, 0x00, 0xb0, 0x8e, 0x9f, 0x0f, - 0x9c, 0x10, 0x9a, 0x11, 0x68, 0x10, 0x90, 0x07, - 0x9a, 0x11, 0x68, 0x50, 0x90, 0x06, 0x9a, 0x11, - 0x68, 0x91, 0x91, 0x08, 0x9a, 0x11, 0x68, 0xd0, - 0x90, 0x09, 0x6b, 0x60, 0x6a, 0xe1, 0x1a, 0x40, - 0x30, 0x01, 0x90, 0x01, 0x6b, 0x20, 0x6a, 0xa1, - 0x1a, 0x40, 0x30, 0x01, 0x90, 0x00, 0x99, 0x18, - 0x98, 0x09, 0x18, 0x08, 0x99, 0x01, 0x42, 0x88, - 0xd9, 0x03, 0x98, 0x01, 0x99, 0x18, 0x1a, 0x41, - 0x91, 0x09, 0x9b, 0x12, 0x99, 0x08, 0x18, 0x58, - 0x99, 0x00, 0x42, 0x88, 0xd9, 0x03, 0x98, 0x00, - 0x9b, 0x12, 0x1a, 0xc1, 0x91, 0x08, 0x22, 0x00, - 0x92, 0x05, 0x42, 0xa7, 0xd1, 0x20, 0x99, 0x18, - 0x98, 0x06, 0x42, 0x81, 0xd9, 0x0c, 0x22, 0x02, - 0x92, 0x05, 0x99, 0x06, 0x98, 0x09, 0x18, 0x08, - 0x1e, 0x41, 0x91, 0x06, 0x99, 0x18, 0x98, 0x09, - 0x18, 0x08, 0x1e, 0x41, 0x91, 0x18, 0xe0, 0x0f, - 0x9b, 0x12, 0x98, 0x07, 0x42, 0x83, 0xd9, 0x0b, - 0x22, 0x01, 0x92, 0x05, 0x98, 0x07, 0x99, 0x08, - 0x18, 0x40, 0x38, 0x01, 0x90, 0x07, 0x9b, 0x12, - 0x99, 0x08, 0x18, 0x58, 0x1e, 0x43, 0x93, 0x12, - 0x69, 0x38, 0x28, 0x08, 0xd1, 0x0a, 0x99, 0x08, - 0x08, 0x49, 0x91, 0x08, 0x98, 0x07, 0x08, 0x40, - 0x00, 0x40, 0x90, 0x07, 0x9b, 0x12, 0x08, 0x5b, - 0x00, 0x5b, 0x93, 0x12, 0x69, 0x38, 0x00, 0x80, - 0x49, 0xc6, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, - 0x08, 0x80, 0x90, 0x03, 0x69, 0x20, 0x00, 0x80, - 0x49, 0xc2, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, - 0x08, 0x80, 0x90, 0x02, 0x6b, 0xb8, 0x99, 0x06, - 0x43, 0x48, 0x99, 0x07, 0x18, 0x41, 0x91, 0x04, - 0x98, 0x03, 0x28, 0x00, 0xd0, 0x02, 0x99, 0x04, - 0x08, 0x49, 0x91, 0x04, 0x69, 0x38, 0x00, 0x80, - 0x49, 0xb9, 0x58, 0x08, 0x99, 0x04, 0x1c, 0x06, - 0x43, 0x4e, 0x6b, 0xa0, 0x99, 0x18, 0x43, 0x48, - 0x9b, 0x12, 0x18, 0xc1, 0x91, 0x04, 0x98, 0x02, - 0x28, 0x00, 0xd0, 0x02, 0x99, 0x04, 0x08, 0x49, - 0x91, 0x04, 0x69, 0x20, 0x00, 0x80, 0x49, 0xb0, - 0x58, 0x08, 0x99, 0x04, 0x1c, 0x05, 0x43, 0x4d, - 0x9a, 0x05, 0x2a, 0x01, 0xd1, 0x3d, 0x69, 0x38, - 0x28, 0x08, 0xd0, 0x3a, 0x69, 0x38, 0x28, 0x09, - 0xd0, 0x02, 0x69, 0x38, 0x28, 0x0a, 0xd1, 0x0a, - 0x36, 0x10, 0x69, 0xb8, 0x09, 0x71, 0x18, 0x41, - 0x91, 0x0b, 0x06, 0xf0, 0x0e, 0xc0, 0x1d, 0xc1, - 0x31, 0x01, 0x91, 0x0a, 0xe0, 0x0b, 0x69, 0xb8, - 0x09, 0x71, 0x18, 0x41, 0x91, 0x0b, 0x69, 0x38, - 0x00, 0x80, 0x49, 0x9f, 0x58, 0x08, 0x19, 0x86, - 0x06, 0xf1, 0x0e, 0xc9, 0x91, 0x0a, 0x69, 0x20, - 0x28, 0x09, 0xd0, 0x02, 0x69, 0x20, 0x28, 0x0a, - 0xd1, 0x0a, 0x35, 0x10, 0x69, 0xa0, 0x09, 0x69, - 0x18, 0x41, 0x91, 0x0d, 0x06, 0xe8, 0x0e, 0xc0, - 0x1d, 0xc1, 0x31, 0x01, 0x91, 0x0c, 0xe0, 0x0b, - 0x69, 0xa0, 0x09, 0x69, 0x18, 0x41, 0x91, 0x0d, - 0x69, 0x20, 0x00, 0x80, 0x49, 0x90, 0x58, 0x08, - 0x19, 0x45, 0x06, 0xe9, 0x0e, 0xc9, 0x91, 0x0c, - 0xe0, 0x0d, 0x69, 0xb8, 0x09, 0x71, 0x18, 0x41, - 0x91, 0x0b, 0x69, 0xa0, 0x09, 0x69, 0x18, 0x41, - 0x91, 0x0d, 0x06, 0xf1, 0x0e, 0xc9, 0x91, 0x0a, - 0x06, 0xe9, 0x0e, 0xc9, 0x91, 0x0c, 0x6b, 0xf8, - 0x28, 0x00, 0xd1, 0x03, 0x99, 0x0b, 0x03, 0x09, - 0x0b, 0x09, 0xe0, 0x02, 0x99, 0x0b, 0x02, 0x09, - 0x0a, 0x09, 0x91, 0x0b, 0x6b, 0xe0, 0x28, 0x00, - 0xd1, 0x03, 0x99, 0x0d, 0x03, 0x09, 0x0b, 0x09, - 0xe0, 0x02, 0x99, 0x0d, 0x02, 0x09, 0x0a, 0x09, - 0x91, 0x0d, 0xf0, 0x12, 0xf9, 0xd5, 0xf0, 0x12, - 0xf9, 0xb1, 0x48, 0x7a, 0x69, 0x80, 0x68, 0x00, - 0x08, 0xc0, 0x00, 0xc0, 0x23, 0x05, 0x43, 0x18, - 0x49, 0x76, 0x69, 0x89, 0x60, 0x08, 0x07, 0x40, - 0x1c, 0x21, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0xf8, - 0x98, 0x03, 0x28, 0x00, 0xd0, 0x18, 0x98, 0x02, - 0x28, 0x00, 0xd0, 0x15, 0x48, 0x6f, 0x69, 0x80, - 0x68, 0x00, 0x23, 0x08, 0x43, 0xdb, 0x40, 0x18, - 0x49, 0x6c, 0x69, 0x89, 0x60, 0x08, 0x07, 0x00, - 0x48, 0x6a, 0x69, 0x80, 0x68, 0x00, 0x4b, 0x6a, - 0x40, 0x18, 0x49, 0x68, 0x69, 0x89, 0x60, 0x08, - 0x05, 0xc0, 0x99, 0x08, 0x08, 0x49, 0x91, 0x08, - 0x6b, 0xf8, 0x49, 0x64, 0x69, 0x89, 0x68, 0x09, - 0x4b, 0x64, 0x40, 0x19, 0x07, 0xc0, 0x0c, 0x40, - 0x43, 0x08, 0x49, 0x60, 0x69, 0x89, 0x60, 0x08, - 0x04, 0x40, 0x0f, 0xc0, 0x6b, 0xe0, 0x49, 0x5d, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x5e, 0x40, 0x19, - 0x07, 0xc0, 0x0c, 0x80, 0x43, 0x08, 0x49, 0x59, - 0x69, 0x89, 0x60, 0x08, 0x04, 0x80, 0x0f, 0xc0, - 0x68, 0x38, 0x28, 0x00, 0xd0, 0x0d, 0x79, 0x38, - 0x49, 0x54, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x57, - 0x40, 0x19, 0x03, 0xc0, 0x43, 0x08, 0x49, 0x51, - 0x69, 0x89, 0x60, 0x08, 0x02, 0x40, 0x0e, 0x00, - 0xe0, 0x0d, 0x6a, 0x78, 0x78, 0x00, 0x49, 0x4d, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x4f, 0x40, 0x19, - 0x03, 0xc0, 0x43, 0x08, 0x49, 0x49, 0x69, 0x89, - 0x60, 0x08, 0x02, 0x40, 0x0e, 0x00, 0x69, 0x20, - 0x00, 0x80, 0x49, 0x45, 0x58, 0x08, 0x99, 0x08, - 0x43, 0x48, 0x28, 0x40, 0xd9, 0x01, 0x21, 0x00, - 0xe0, 0x00, 0x21, 0x01, 0x1c, 0x08, 0x49, 0x41, - 0x69, 0x89, 0x68, 0x09, 0x4b, 0x44, 0x40, 0x19, - 0x07, 0xc2, 0x09, 0x52, 0x43, 0x11, 0x4a, 0x3d, - 0x69, 0x92, 0x60, 0x11, 0x01, 0x49, 0x0f, 0xc9, - 0x49, 0x3a, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x3f, - 0x40, 0x19, 0x9a, 0x05, 0x07, 0x92, 0x0f, 0x92, - 0x05, 0xd2, 0x43, 0x11, 0x4a, 0x35, 0x69, 0x92, - 0x60, 0x11, 0x01, 0xc9, 0x49, 0x33, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x39, 0x40, 0x19, 0x9a, 0x0e, - 0x07, 0xd2, 0x09, 0x92, 0x43, 0x11, 0x4a, 0x2f, - 0x69, 0x92, 0x60, 0x11, 0x01, 0x89, 0x69, 0xf9, - 0x4a, 0x2c, 0x69, 0x52, 0x60, 0x11, 0x49, 0x2b, - 0x69, 0x89, 0x68, 0x09, 0x01, 0x49, 0x09, 0x49, - 0x9a, 0x0a, 0x06, 0xd2, 0x43, 0x11, 0x4a, 0x27, - 0x69, 0x92, 0x60, 0x11, 0x99, 0x0a, 0x4a, 0x25, - 0x69, 0x52, 0x60, 0x51, 0x99, 0x0b, 0x4a, 0x23, - 0x69, 0x52, 0x60, 0x91, 0x99, 0x0b, 0x4a, 0x21, - 0x69, 0x52, 0x60, 0xd1, 0x69, 0xe1, 0x4a, 0x1f, - 0x69, 0x52, 0x61, 0x11, 0x49, 0x1d, 0x69, 0xc9, - 0x68, 0x09, 0x01, 0x49, 0x09, 0x49, 0x9a, 0x0c, - 0x06, 0xd2, 0x43, 0x11, 0x4a, 0x19, 0x69, 0xd2, - 0x60, 0x11, 0x99, 0x0c, 0x4a, 0x17, 0x69, 0x52, - 0x61, 0x51, 0x99, 0x0d, 0x4a, 0x15, 0x69, 0x52, - 0x61, 0x91, 0x99, 0x0d, 0x4a, 0x13, 0x69, 0x52, - 0x61, 0xd1, 0x99, 0x09, 0x4a, 0x11, 0x69, 0x52, - 0x62, 0x51, 0x99, 0x08, 0x4a, 0x0f, 0x69, 0x52, - 0x62, 0x11, 0x68, 0x38, 0x28, 0x00, 0xd0, 0x05, - 0x48, 0x14, 0x68, 0x01, 0x23, 0x01, 0x43, 0x19, - 0x60, 0x01, 0xe0, 0x02, 0x48, 0x11, 0x21, 0x00, - 0x60, 0x01, 0xf0, 0x00, 0xf9, 0x8c, 0xf0, 0x12, - 0xf9, 0x03, 0x20, 0x00, 0xb0, 0x0f, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x0e, - 0xb0, 0x01, 0xe7, 0xf8, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x03, 0xa8, 0xc8, 0x2e, 0x08, 0x20, 0x28, - 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xbf, 0xff, - 0xff, 0xff, 0xdf, 0xff, 0xff, 0x80, 0x7f, 0xff, - 0xfb, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xff, 0xff, - 0xfd, 0xff, 0xff, 0xff, 0x68, 0x00, 0x00, 0x40, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x69, 0x38, - 0x00, 0x80, 0x49, 0x3c, 0x58, 0x08, 0x23, 0x18, - 0x40, 0x18, 0x08, 0xc0, 0x49, 0x3a, 0x69, 0x89, - 0x68, 0x09, 0x23, 0xc0, 0x43, 0xdb, 0x40, 0x19, - 0x07, 0x80, 0x0f, 0x80, 0x01, 0x80, 0x43, 0x08, - 0x49, 0x35, 0x69, 0x89, 0x60, 0x08, 0x06, 0x00, - 0x0f, 0x80, 0x69, 0x38, 0x00, 0x80, 0x49, 0x31, - 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, 0x08, 0x80, - 0x49, 0x2f, 0x69, 0x89, 0x68, 0x09, 0x23, 0x08, - 0x43, 0xdb, 0x40, 0x19, 0x07, 0xc0, 0x0f, 0x00, - 0x43, 0x08, 0x49, 0x2b, 0x69, 0x89, 0x60, 0x08, - 0x07, 0x00, 0x0f, 0xc0, 0x69, 0x38, 0x00, 0x80, - 0x49, 0x26, 0x58, 0x08, 0x49, 0x26, 0x69, 0x89, - 0x68, 0x09, 0x23, 0x30, 0x43, 0xdb, 0x40, 0x19, - 0x07, 0x80, 0x0f, 0x80, 0x01, 0x00, 0x43, 0x08, - 0x49, 0x21, 0x69, 0x89, 0x60, 0x08, 0x06, 0x80, - 0x0f, 0x80, 0x69, 0x10, 0x00, 0x80, 0x49, 0x1d, - 0x58, 0x08, 0x23, 0x18, 0x40, 0x18, 0x08, 0xc0, - 0x49, 0x1b, 0x69, 0x89, 0x68, 0x09, 0x4b, 0x1b, - 0x40, 0x19, 0x07, 0x80, 0x0f, 0x80, 0x02, 0xc0, - 0x43, 0x08, 0x49, 0x17, 0x69, 0x89, 0x60, 0x08, - 0x04, 0xc0, 0x0f, 0x80, 0x69, 0x10, 0x00, 0x80, - 0x49, 0x12, 0x58, 0x08, 0x23, 0x04, 0x40, 0x18, - 0x08, 0x80, 0x49, 0x11, 0x69, 0x89, 0x68, 0x09, - 0x4b, 0x11, 0x40, 0x19, 0x07, 0xc0, 0x0d, 0xc0, - 0x43, 0x08, 0x49, 0x0d, 0x69, 0x89, 0x60, 0x08, - 0x05, 0xc0, 0x0f, 0xc0, 0x69, 0x10, 0x00, 0x80, - 0x49, 0x08, 0x58, 0x08, 0x49, 0x08, 0x69, 0x89, - 0x68, 0x09, 0x4b, 0x0a, 0x40, 0x19, 0x07, 0x80, - 0x0f, 0x80, 0x02, 0x40, 0x43, 0x08, 0x49, 0x04, - 0x69, 0x89, 0x60, 0x08, 0x05, 0x40, 0x0f, 0x80, - 0xbc, 0x80, 0x47, 0x70, 0x2e, 0x03, 0xa8, 0x78, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xe7, 0xff, - 0xff, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xf9, 0xff, - 0xb4, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x15, - 0x2d, 0x00, 0xd0, 0x06, 0x2d, 0x02, 0xd0, 0x21, - 0x2d, 0x03, 0xd0, 0x02, 0x2d, 0x04, 0xd0, 0x1d, - 0xe0, 0xa3, 0x69, 0x20, 0x28, 0x0b, 0xd2, 0x14, - 0xa3, 0x01, 0x5c, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x05, 0x07, 0x09, 0x0b, 0x05, 0x07, 0x09, 0x0b, - 0x0d, 0x0e, 0x0e, 0x00, 0x07, 0xff, 0xe0, 0x09, - 0x07, 0xbf, 0xe0, 0x07, 0x07, 0x3f, 0xe0, 0x05, - 0x06, 0x3f, 0xe0, 0x03, 0xe0, 0x02, 0x02, 0x3f, - 0xe0, 0x00, 0xe7, 0xff, 0x48, 0x46, 0x6a, 0x00, - 0x60, 0x07, 0xe0, 0x86, 0x69, 0x20, 0x28, 0x0b, - 0xd2, 0x73, 0xa3, 0x02, 0x5c, 0x1b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x06, 0x15, 0x24, 0x33, - 0x06, 0x15, 0x24, 0x33, 0x41, 0x45, 0x45, 0x00, - 0x01, 0xff, 0x48, 0x3d, 0x6a, 0x40, 0x68, 0x00, - 0x4b, 0x3c, 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, - 0x00, 0x89, 0x43, 0x08, 0x49, 0x38, 0x6a, 0x49, - 0x60, 0x08, 0x05, 0x80, 0xe0, 0x69, 0x01, 0xbf, - 0x48, 0x35, 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x35, - 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, - 0x43, 0x08, 0x49, 0x31, 0x6a, 0x49, 0x60, 0x08, - 0x05, 0x80, 0xe0, 0x5a, 0x01, 0x3f, 0x48, 0x2e, - 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x2d, 0x40, 0x18, - 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x29, 0x6a, 0x49, 0x60, 0x08, 0x05, 0x80, - 0xe0, 0x4b, 0x48, 0x27, 0x6a, 0x40, 0x68, 0x00, - 0x4b, 0x26, 0x40, 0x18, 0x06, 0x39, 0x0e, 0x09, - 0x00, 0x89, 0x43, 0x08, 0x49, 0x22, 0x6a, 0x49, - 0x60, 0x08, 0x05, 0x80, 0xe0, 0x3d, 0x48, 0x20, - 0x6a, 0x00, 0x60, 0x07, 0xe0, 0x39, 0x48, 0x1e, - 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x1d, 0x40, 0x18, - 0x06, 0x39, 0x0e, 0x09, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x19, 0x6a, 0x49, 0x60, 0x08, 0x05, 0x80, - 0x48, 0x17, 0x6a, 0x40, 0x68, 0x00, 0x4b, 0x18, - 0x40, 0x18, 0x21, 0xff, 0x02, 0x09, 0x40, 0x39, - 0x00, 0x89, 0x43, 0x08, 0x49, 0x12, 0x6a, 0x49, - 0x60, 0x08, 0x03, 0x80, 0x48, 0x10, 0x6a, 0x40, - 0x68, 0x00, 0x4b, 0x12, 0x40, 0x18, 0x21, 0xff, - 0x04, 0x09, 0x40, 0x39, 0x00, 0x89, 0x43, 0x01, - 0x48, 0x0b, 0x6a, 0x40, 0x60, 0x01, 0x01, 0x88, - 0xe0, 0x00, 0xe0, 0x0d, 0x48, 0x08, 0x6a, 0x40, - 0x68, 0x00, 0x01, 0x80, 0x09, 0x80, 0x21, 0x3f, - 0x06, 0x09, 0x40, 0x39, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x03, 0x6a, 0x49, 0x60, 0x08, 0xe0, 0x00, - 0xe7, 0xff, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x20, 0x28, 0xff, 0xff, 0xfc, 0x03, - 0xff, 0xfc, 0x03, 0xff, 0xfc, 0x03, 0xff, 0xff, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x69, 0x38, - 0x28, 0x0b, 0xd2, 0x1a, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x05, 0x08, 0x0b, 0x0e, - 0x05, 0x08, 0x0b, 0x0e, 0x11, 0x13, 0x13, 0x00, - 0x68, 0x10, 0x0f, 0xc1, 0xe0, 0x0f, 0x68, 0x10, - 0x0f, 0x81, 0xe0, 0x0c, 0x68, 0x10, 0x0f, 0x01, - 0xe0, 0x09, 0x68, 0x10, 0x0e, 0x01, 0xe0, 0x06, - 0x68, 0x11, 0xe0, 0x04, 0x68, 0x10, 0x0a, 0x01, - 0xe0, 0x01, 0x68, 0x11, 0xe7, 0xff, 0x1c, 0x08, - 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, 0x48, 0x14, - 0x69, 0x80, 0x68, 0x00, 0x49, 0x12, 0x6a, 0x89, - 0x60, 0x08, 0x48, 0x11, 0x69, 0xc0, 0x68, 0x00, - 0x49, 0x0f, 0x6a, 0xc9, 0x60, 0x08, 0x48, 0x0e, - 0x6a, 0x00, 0x68, 0x00, 0x49, 0x0c, 0x6b, 0x09, - 0x60, 0x08, 0x48, 0x0b, 0x6a, 0x40, 0x68, 0x00, - 0x49, 0x09, 0x6b, 0x49, 0x60, 0x08, 0x20, 0x01, - 0x49, 0x07, 0x6b, 0xc9, 0x60, 0x08, 0x20, 0x00, - 0x49, 0x06, 0x60, 0x08, 0x20, 0x00, 0x49, 0x05, - 0x60, 0x48, 0x20, 0x00, 0x49, 0x03, 0x60, 0x88, - 0x20, 0x00, 0x49, 0x02, 0x60, 0xc8, 0x47, 0x70, - 0x2e, 0x08, 0x20, 0x28, 0x2e, 0x08, 0x20, 0x2c, - 0xb4, 0x90, 0x1c, 0x01, 0x29, 0x00, 0xd1, 0x02, - 0x20, 0x8d, 0xbc, 0x90, 0x47, 0x70, 0x4c, 0x08, - 0x1c, 0x0f, 0x22, 0x00, 0x23, 0xff, 0x33, 0x01, - 0x42, 0x9a, 0xd3, 0x02, 0xe0, 0x04, 0x32, 0x01, - 0xe7, 0xf8, 0xcf, 0x08, 0xc4, 0x08, 0xe7, 0xfa, - 0x20, 0x00, 0xe7, 0xee, 0xe7, 0xed, 0x00, 0x00, - 0x68, 0x00, 0x18, 0x00, 0xb4, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x13, 0x06, 0x1a, 0x0e, 0x12, - 0x1c, 0x21, 0x60, 0x0f, 0x71, 0x0a, 0x20, 0x00, - 0xbc, 0x90, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, - 0xb5, 0x00, 0x48, 0x1d, 0x69, 0x00, 0x23, 0x04, - 0x40, 0x18, 0xd0, 0x19, 0x48, 0x1a, 0x69, 0x00, - 0x23, 0x02, 0x40, 0x18, 0xd0, 0x09, 0x48, 0x18, - 0x69, 0x40, 0x49, 0x18, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x17, 0x68, 0x09, 0x70, 0x08, - 0xe0, 0x03, 0x20, 0x00, 0x49, 0x14, 0x68, 0x09, - 0x70, 0x08, 0x48, 0x14, 0x78, 0x01, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x08, 0xff, 0x9f, 0xe0, 0x18, - 0x48, 0x11, 0x6a, 0x80, 0x23, 0x02, 0x40, 0x18, - 0xd0, 0x13, 0x48, 0x0f, 0x6a, 0x80, 0x07, 0xc0, - 0x0f, 0xc0, 0xd0, 0x04, 0x20, 0xfe, 0x49, 0x0d, - 0x68, 0x09, 0x70, 0x08, 0xe0, 0x03, 0x20, 0x0e, - 0x49, 0x0a, 0x68, 0x09, 0x70, 0x08, 0x48, 0x0a, - 0x78, 0x01, 0x20, 0x01, 0x40, 0x88, 0xf0, 0x08, - 0xff, 0x85, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x6e, 0x00, 0x0c, 0x00, 0x2e, 0x08, 0xb9, 0x98, - 0x2e, 0x08, 0xb9, 0x9c, 0x2e, 0x08, 0xb9, 0xa0, - 0x6e, 0x00, 0x0e, 0x00, 0x2e, 0x08, 0xb9, 0xa4, - 0x2e, 0x08, 0xb9, 0xa8, 0xb5, 0xf0, 0x1c, 0x05, - 0x1c, 0x0c, 0x1c, 0x17, 0x06, 0x2e, 0x0e, 0x36, - 0x2e, 0x1f, 0xdd, 0x03, 0x20, 0xaf, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x49, 0x08, 0x20, 0x0d, - 0xf0, 0x08, 0xff, 0x76, 0x48, 0x07, 0x60, 0x04, - 0x20, 0x00, 0x49, 0x06, 0x68, 0x09, 0x70, 0x08, - 0x48, 0x05, 0x60, 0x07, 0x48, 0x05, 0x70, 0x06, - 0x20, 0x00, 0xe7, 0xec, 0xe7, 0xeb, 0x00, 0x00, - 0x2e, 0x01, 0xa9, 0xed, 0x2e, 0x08, 0xb9, 0x9c, - 0x2e, 0x08, 0xb9, 0x98, 0x2e, 0x08, 0xb9, 0xa0, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x25, - 0x0e, 0x2d, 0x2d, 0x1f, 0xdd, 0x03, 0x20, 0xaf, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x49, 0x07, - 0x20, 0x0d, 0xf0, 0x08, 0xff, 0x51, 0x48, 0x06, - 0x60, 0x07, 0x20, 0x00, 0x49, 0x04, 0x68, 0x09, - 0x70, 0x08, 0x48, 0x04, 0x70, 0x05, 0x20, 0x00, - 0xe7, 0xee, 0xe7, 0xed, 0x2e, 0x01, 0xa9, 0xed, - 0x2e, 0x08, 0xb9, 0xa4, 0x2e, 0x08, 0xb9, 0xa8, - 0xb4, 0xb0, 0x1c, 0x01, 0x4a, 0x35, 0x23, 0x01, - 0x60, 0x13, 0x4a, 0x35, 0x1c, 0x0f, 0x68, 0x3d, - 0xc2, 0x20, 0x88, 0x8d, 0xc2, 0x20, 0x88, 0xcb, - 0x60, 0x13, 0x68, 0x8c, 0x2c, 0x00, 0xd0, 0x57, - 0x4a, 0x30, 0x1c, 0x27, 0x20, 0x00, 0x28, 0x13, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x2c, - 0x1d, 0xe7, 0x37, 0x45, 0x20, 0x00, 0x28, 0x0b, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x27, - 0x1d, 0xe7, 0x37, 0x71, 0x20, 0x00, 0x28, 0x07, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x22, - 0x1d, 0xe7, 0x37, 0x8d, 0x20, 0x00, 0x28, 0x09, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x4a, 0x1d, - 0x1d, 0xe7, 0x37, 0xb1, 0x20, 0x00, 0x28, 0x09, - 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, 0xe7, 0xfa, - 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, 0x68, 0x0d, - 0x23, 0x01, 0x02, 0x9b, 0x40, 0x2b, 0xd0, 0x17, - 0x4a, 0x15, 0x1d, 0xe7, 0x37, 0xd5, 0x20, 0x00, - 0x28, 0x09, 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, - 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, - 0x4a, 0x10, 0x1d, 0xe7, 0x37, 0xf9, 0x20, 0x00, - 0x28, 0x09, 0xdb, 0x02, 0xe0, 0x04, 0x30, 0x01, - 0xe7, 0xfa, 0xcf, 0x20, 0xc2, 0x20, 0xe7, 0xfa, - 0x4a, 0x02, 0x23, 0x00, 0x60, 0x13, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0x6e, 0x00, 0x0c, 0x0c, - 0x6e, 0x00, 0x0c, 0x00, 0x6e, 0x00, 0x08, 0x00, - 0x6e, 0x00, 0x08, 0x50, 0x6e, 0x00, 0x08, 0x80, - 0x6e, 0x00, 0x08, 0xa0, 0x6e, 0x00, 0x08, 0xd0, - 0x6e, 0x00, 0x09, 0x00, 0x6e, 0x00, 0x09, 0x30, - 0xb4, 0xf0, 0x1c, 0x01, 0x69, 0x08, 0x06, 0xc0, - 0x0e, 0xc0, 0x28, 0x01, 0xdb, 0x04, 0x69, 0x08, - 0x06, 0xc0, 0x0e, 0xc0, 0x28, 0x0a, 0xdd, 0x02, - 0x20, 0xc3, 0xbc, 0xf0, 0x47, 0x70, 0x69, 0x08, - 0x05, 0x80, 0x0e, 0xc0, 0x28, 0x01, 0xdb, 0x04, - 0x69, 0x08, 0x05, 0x80, 0x0e, 0xc0, 0x28, 0x0a, - 0xdd, 0x01, 0x20, 0xc4, 0xe7, 0xf1, 0x48, 0x4f, - 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd1, 0x01, - 0x20, 0xc0, 0xe7, 0xea, 0x68, 0x08, 0x07, 0x00, - 0x0f, 0xc0, 0x4b, 0x4b, 0x70, 0x18, 0x4f, 0x49, - 0x1c, 0x0c, 0x22, 0x00, 0x2a, 0x04, 0xd3, 0x02, - 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, - 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x45, 0x69, 0x08, - 0x06, 0xc0, 0x0e, 0xc0, 0x00, 0x43, 0x18, 0x18, - 0x38, 0x03, 0x69, 0x0b, 0x05, 0x9b, 0x0e, 0xde, - 0x00, 0x73, 0x19, 0x9b, 0x3b, 0x03, 0x01, 0x5b, - 0x43, 0x18, 0x60, 0x38, 0x4f, 0x3e, 0x69, 0x48, - 0x60, 0x38, 0x4f, 0x3e, 0x69, 0x88, 0x05, 0x40, - 0x0d, 0x40, 0x69, 0x8b, 0x02, 0x9b, 0x0d, 0x5b, - 0x02, 0xdb, 0x43, 0x18, 0x60, 0x38, 0x69, 0xcd, - 0x2d, 0x00, 0xd0, 0x63, 0x4f, 0x38, 0x1c, 0x2c, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x34, 0x1d, 0xec, 0x34, 0x1d, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x2f, 0x1d, 0xec, 0x34, 0x41, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x2a, 0x1d, 0xec, 0x34, 0x65, - 0x22, 0x00, 0x2a, 0x09, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x25, 0x1d, 0xec, 0x34, 0x89, - 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x4f, 0x20, 0x1d, 0xec, 0x34, 0x9d, - 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, 0xe0, 0x04, - 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, 0xc7, 0x08, - 0xe7, 0xfa, 0x68, 0x08, 0x23, 0x01, 0x02, 0x9b, - 0x40, 0x18, 0xd0, 0x17, 0x4f, 0x18, 0x1d, 0xec, - 0x34, 0xb1, 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, - 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, - 0xc7, 0x08, 0xe7, 0xfa, 0x4f, 0x13, 0x1d, 0xec, - 0x34, 0xc5, 0x22, 0x00, 0x2a, 0x05, 0xd3, 0x02, - 0xe0, 0x04, 0x32, 0x01, 0xe7, 0xfa, 0xcc, 0x08, - 0xc7, 0x08, 0xe7, 0xfa, 0x20, 0x00, 0xe7, 0x54, - 0xe7, 0x53, 0x00, 0x00, 0x6e, 0x00, 0x0e, 0x00, - 0x2e, 0x08, 0xb9, 0xa9, 0x6e, 0x00, 0x0e, 0x10, - 0x6e, 0x00, 0x0e, 0x14, 0x6e, 0x00, 0x0e, 0x18, - 0x6e, 0x00, 0x0a, 0x00, 0x6e, 0x00, 0x0a, 0x24, - 0x6e, 0x00, 0x0a, 0x48, 0x6e, 0x00, 0x0a, 0x90, - 0x6e, 0x00, 0x0a, 0xc0, 0x6e, 0x00, 0x0a, 0xe4, - 0x6e, 0x00, 0x09, 0xc0, 0x6e, 0x00, 0x09, 0xe4, - 0x1c, 0x01, 0x48, 0x0c, 0x78, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0xc1, 0x47, 0x70, 0x48, 0x0a, - 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0xd1, 0x01, - 0x20, 0xc0, 0xe7, 0xf7, 0x20, 0x00, 0x4b, 0x06, - 0x61, 0x58, 0x4a, 0x06, 0x68, 0x08, 0x60, 0x10, - 0x4a, 0x05, 0x68, 0x48, 0x60, 0x10, 0x20, 0x00, - 0xe7, 0xec, 0xe7, 0xeb, 0x2e, 0x08, 0xb9, 0xa9, - 0x6e, 0x00, 0x0e, 0x00, 0x6e, 0x00, 0x0e, 0x20, - 0x6e, 0x00, 0x0e, 0x24, 0x48, 0x09, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0xc1, 0x47, 0x70, - 0x48, 0x07, 0x6a, 0x80, 0x07, 0xc0, 0x0f, 0xc0, - 0xd0, 0x01, 0x20, 0xc2, 0xe7, 0xf7, 0x20, 0x01, - 0x49, 0x03, 0x61, 0x48, 0x20, 0x00, 0xe7, 0xf2, - 0xe7, 0xf1, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xa9, - 0x6e, 0x00, 0x0e, 0x00, 0xb5, 0xff, 0x1c, 0x04, - 0x1c, 0x0d, 0x1c, 0x17, 0x9e, 0x09, 0x20, 0x00, - 0x60, 0x30, 0x48, 0x13, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x07, 0x9b, 0x03, 0x2b, 0x00, 0xd1, 0x04, - 0x20, 0x8a, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x23, 0xff, 0x33, 0x01, 0x42, 0x9c, - 0xdd, 0x01, 0x20, 0x87, 0xe7, 0xf5, 0x19, 0x28, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, 0xd9, 0x01, - 0x20, 0x88, 0xe7, 0xee, 0x68, 0x79, 0x1c, 0x20, - 0x80, 0x48, 0x70, 0x0d, 0x9b, 0x03, 0x60, 0x4b, - 0x68, 0x78, 0x60, 0xc8, 0x68, 0x38, 0x60, 0x88, - 0x60, 0x31, 0x20, 0x00, 0xe7, 0xe1, 0xe7, 0xe0, - 0x2e, 0x08, 0x9d, 0xf0, 0x1c, 0x03, 0x1c, 0x0a, - 0x1c, 0x19, 0x68, 0xc8, 0x60, 0x50, 0x68, 0x88, - 0x60, 0x10, 0x20, 0x00, 0x47, 0x70, 0xe7, 0xfd, - 0xb5, 0xf3, 0xb0, 0x87, 0x21, 0x00, 0x91, 0x06, - 0x26, 0x00, 0x98, 0x07, 0xf0, 0x00, 0xfa, 0xcb, - 0x90, 0x03, 0x9c, 0x07, 0x9d, 0x08, 0x88, 0x69, - 0x91, 0x04, 0x98, 0x03, 0x99, 0x04, 0x42, 0x88, - 0xd0, 0x09, 0x48, 0xbb, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x05, 0x20, 0xff, 0xb0, 0x07, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x78, 0x28, - 0x90, 0x05, 0x99, 0x04, 0x23, 0xff, 0x33, 0x01, - 0x42, 0x99, 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x07, - 0xe7, 0xf1, 0x98, 0x05, 0x99, 0x04, 0x18, 0x40, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, 0xdd, 0x02, - 0x20, 0xff, 0xb0, 0x07, 0xe7, 0xe7, 0x48, 0xad, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0a, 0x68, 0xa0, - 0x23, 0x01, 0x06, 0x1b, 0x40, 0x18, 0xd0, 0x05, - 0x68, 0x68, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x8a, - 0xb0, 0x07, 0xe7, 0xd8, 0x62, 0x65, 0x69, 0x60, - 0x4b, 0xa5, 0x40, 0x18, 0x99, 0x05, 0x06, 0x09, - 0x0e, 0x09, 0x04, 0x09, 0x43, 0x08, 0x61, 0x60, - 0x02, 0x00, 0x68, 0xe0, 0x90, 0x00, 0x48, 0x9e, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x06, 0x98, 0x00, - 0x28, 0x19, 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, - 0x20, 0x00, 0xe0, 0x05, 0x98, 0x00, 0x28, 0x08, - 0xd3, 0x01, 0x20, 0x01, 0xe0, 0x00, 0x20, 0x00, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0xb0, 0x07, - 0xe7, 0xb5, 0x48, 0x94, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x1e, 0x48, 0x91, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x1a, 0x68, 0xa0, 0x02, 0x00, 0x0e, 0x00, - 0x06, 0x01, 0x0e, 0x09, 0x91, 0x06, 0x99, 0x04, - 0x29, 0x04, 0xd0, 0x06, 0x29, 0x10, 0xd0, 0x07, - 0x23, 0xff, 0x33, 0x01, 0x42, 0x99, 0xd0, 0x06, - 0xe0, 0x08, 0x26, 0xff, 0x36, 0x01, 0xe0, 0x07, - 0x26, 0x01, 0x02, 0x76, 0xe0, 0x04, 0x26, 0x03, - 0x02, 0x36, 0xe0, 0x01, 0x26, 0x00, 0xe7, 0xff, - 0x49, 0x84, 0x20, 0x91, 0xf0, 0x11, 0xfc, 0x04, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, - 0xff, 0xb1, 0xe7, 0xf5, 0x98, 0x00, 0x00, 0x80, - 0x49, 0x7f, 0x58, 0x08, 0x99, 0x07, 0x42, 0x88, - 0xd0, 0x05, 0x20, 0x92, 0x49, 0x7b, 0x60, 0x08, - 0x20, 0xff, 0xb0, 0x07, 0xe7, 0x7b, 0x48, 0x77, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x73, 0x48, 0x74, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x6f, 0x98, 0x00, - 0xf0, 0x02, 0xfe, 0xd6, 0x28, 0x00, 0xd0, 0x6a, - 0xb0, 0x82, 0x49, 0x74, 0x20, 0x91, 0xf0, 0x11, - 0xfb, 0xdf, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0xf0, 0x02, 0xff, 0x25, 0x20, 0x92, 0x49, 0x6f, - 0x60, 0x08, 0x20, 0x01, 0x49, 0x6e, 0x68, 0x09, - 0x60, 0x08, 0x27, 0x00, 0x20, 0x00, 0x90, 0x00, - 0x98, 0x00, 0x28, 0x00, 0xd1, 0x15, 0x2f, 0x07, - 0xd2, 0x13, 0x6a, 0xe0, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, 0x18, 0x18, - 0x00, 0xc0, 0x4a, 0x65, 0x68, 0x12, 0x18, 0x80, - 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, - 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, 0x90, 0x00, - 0xe7, 0xe6, 0x98, 0x00, 0x28, 0x00, 0xd1, 0x14, - 0x2f, 0x18, 0xd2, 0x12, 0x6a, 0xe0, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x23, 0x4c, - 0x43, 0x58, 0x4a, 0x59, 0x68, 0x12, 0x18, 0x80, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, - 0x42, 0x81, 0xd1, 0x01, 0x20, 0x01, 0x90, 0x00, - 0xe7, 0xe7, 0x3f, 0x01, 0x2f, 0x07, 0xd2, 0x10, - 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, 0x49, 0x50, - 0x68, 0x09, 0x18, 0x40, 0x23, 0x2b, 0x01, 0x5b, - 0x18, 0xc0, 0x1c, 0x21, 0xf0, 0x02, 0xfb, 0x38, - 0x48, 0x4b, 0x68, 0x00, 0xf0, 0x02, 0xfe, 0xee, - 0xe0, 0x46, 0x2f, 0x18, 0xd2, 0x44, 0x20, 0x4c, - 0x43, 0x78, 0x49, 0x47, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x0a, 0x1c, 0x21, - 0xf0, 0x02, 0xfb, 0x26, 0x20, 0x4c, 0x43, 0x78, - 0x49, 0x41, 0x68, 0x09, 0xe0, 0x00, 0xe0, 0x48, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x82, - 0x6f, 0xc0, 0x28, 0x00, 0xd0, 0x17, 0x20, 0x4c, - 0x43, 0x78, 0x49, 0x3b, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, - 0x04, 0x00, 0x0c, 0x00, 0xd0, 0x0b, 0x20, 0x4c, - 0x43, 0x78, 0x49, 0x35, 0x68, 0x09, 0x18, 0x40, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x68, 0x00, - 0x0c, 0x00, 0x04, 0x00, 0xd1, 0x0a, 0x20, 0x02, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x2e, 0x68, 0x12, - 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, - 0x67, 0x48, 0xe0, 0x09, 0x20, 0x03, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x29, 0x68, 0x12, 0x18, 0x89, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x82, 0x67, 0x48, - 0x49, 0x24, 0x20, 0x91, 0xf0, 0x11, 0xfb, 0x40, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0x48, 0x22, - 0x68, 0x00, 0x90, 0x01, 0x48, 0x21, 0x68, 0x00, - 0x49, 0x1f, 0x60, 0x08, 0x98, 0x01, 0x49, 0x1f, - 0x60, 0x08, 0x20, 0x92, 0x49, 0x1b, 0x60, 0x08, - 0xb0, 0x02, 0x48, 0x15, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x1d, 0x98, 0x00, 0x01, 0x00, 0x4b, 0x1a, - 0x18, 0xc1, 0x91, 0x01, 0x1d, 0xe0, 0x30, 0x0d, - 0x90, 0x02, 0x98, 0x02, 0x68, 0x00, 0x99, 0x01, - 0x60, 0x08, 0x48, 0x0e, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x0d, 0x68, 0x68, 0x08, 0x80, 0x99, 0x06, - 0x00, 0x89, 0x4b, 0x12, 0x18, 0xc9, 0x67, 0x08, - 0x98, 0x05, 0x43, 0x30, 0x99, 0x06, 0x00, 0x89, - 0x4b, 0x0f, 0x18, 0xc9, 0x61, 0x08, 0x20, 0x92, - 0x49, 0x06, 0x60, 0x08, 0x20, 0x00, 0xb0, 0x07, - 0xe6, 0x91, 0xb0, 0x07, 0xe6, 0x8f, 0x00, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0x9d, 0xf0, - 0xff, 0x00, 0xff, 0xff, 0x2e, 0x08, 0xba, 0x2c, - 0x2e, 0x08, 0xb9, 0xc4, 0x2e, 0x08, 0xd1, 0xf4, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xbb, 0x24, - 0x68, 0x00, 0x0c, 0x00, 0x68, 0x00, 0x0e, 0x00, - 0x68, 0x00, 0x0e, 0x80, 0x1c, 0x01, 0x1c, 0x0a, - 0x6a, 0x53, 0x1c, 0x18, 0x47, 0x70, 0xe7, 0xfd, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x82, 0x48, 0x2b, - 0x68, 0x00, 0x28, 0x00, 0xd0, 0x05, 0x20, 0x8a, - 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x98, 0x02, 0x90, 0x01, 0x98, 0x01, - 0x88, 0x44, 0x98, 0x01, 0x78, 0x06, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x9c, 0xdd, 0x02, 0x20, 0xff, - 0xb0, 0x02, 0xe7, 0xee, 0x19, 0x30, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x98, 0xdd, 0x02, 0x20, 0xff, - 0xb0, 0x02, 0xe7, 0xe6, 0x49, 0x1c, 0x20, 0x91, - 0xf0, 0x11, 0xfa, 0xc2, 0x28, 0x92, 0xd0, 0x03, - 0x20, 0x01, 0xf0, 0x01, 0xfe, 0x6f, 0xe7, 0xf5, - 0x2c, 0x10, 0xda, 0x0d, 0x25, 0x00, 0x42, 0xa5, - 0xdb, 0x02, 0xe0, 0x08, 0x35, 0x01, 0xe7, 0xfa, - 0xcf, 0x01, 0x19, 0x71, 0x00, 0x89, 0x4b, 0x13, - 0x18, 0xc9, 0x60, 0x08, 0xe7, 0xf6, 0xe0, 0x15, - 0x4a, 0x11, 0x43, 0x22, 0x92, 0x00, 0x20, 0x91, - 0x49, 0x10, 0x60, 0x08, 0x00, 0xb0, 0x4b, 0x0d, - 0x18, 0xc1, 0x9a, 0x00, 0x1c, 0x38, 0x23, 0x02, - 0xf0, 0x00, 0xfa, 0xfe, 0x28, 0x00, 0xd0, 0x00, - 0xe7, 0xf4, 0x48, 0x0a, 0x68, 0x00, 0x28, 0x92, - 0xd0, 0x00, 0xe7, 0xfa, 0x20, 0x92, 0x49, 0x04, - 0x60, 0x08, 0x20, 0x00, 0xb0, 0x02, 0xe7, 0xb0, - 0xb0, 0x02, 0xe7, 0xae, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xba, 0x30, 0x68, 0x00, 0x08, 0x00, - 0xf0, 0x00, 0x00, 0x00, 0x2e, 0x08, 0xba, 0x34, - 0x21, 0x04, 0xe0, 0x00, 0x31, 0x01, 0x1c, 0x08, - 0x47, 0x70, 0xe7, 0xfd, 0xb5, 0xf3, 0x1c, 0x0f, - 0xb0, 0x82, 0x48, 0x2b, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x05, 0x20, 0x8a, 0xb0, 0x02, 0xb0, 0x02, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x98, 0x02, - 0x90, 0x01, 0x98, 0x01, 0x88, 0x44, 0x98, 0x01, - 0x78, 0x06, 0x23, 0xff, 0x33, 0x01, 0x42, 0x9c, - 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xee, - 0x19, 0x30, 0x23, 0xff, 0x33, 0x01, 0x42, 0x98, - 0xdd, 0x02, 0x20, 0xff, 0xb0, 0x02, 0xe7, 0xe6, - 0x49, 0x1c, 0x20, 0x91, 0xf0, 0x11, 0xfa, 0x58, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, - 0xfe, 0x05, 0xe7, 0xf5, 0x2c, 0x10, 0xda, 0x0d, - 0x25, 0x00, 0x42, 0xa5, 0xdb, 0x02, 0xe0, 0x08, - 0x35, 0x01, 0xe7, 0xfa, 0x19, 0x70, 0x00, 0x80, - 0x4b, 0x13, 0x18, 0xc0, 0x68, 0x01, 0xc7, 0x02, - 0xe7, 0xf6, 0xe0, 0x15, 0x4a, 0x11, 0x43, 0x22, - 0x92, 0x00, 0x20, 0x91, 0x49, 0x10, 0x60, 0x08, - 0x00, 0xb0, 0x4b, 0x0d, 0x18, 0xc0, 0x9a, 0x00, - 0x1c, 0x39, 0x23, 0x02, 0xf0, 0x00, 0xfa, 0x94, - 0x28, 0x00, 0xd0, 0x00, 0xe7, 0xf4, 0x48, 0x0a, - 0x68, 0x00, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xfa, - 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0x00, - 0xb0, 0x02, 0xe7, 0xb0, 0xb0, 0x02, 0xe7, 0xae, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xba, 0x34, 0xb5, 0xf7, 0x9a, 0x02, - 0x06, 0x15, 0x0e, 0x2d, 0x9c, 0x00, 0x88, 0x66, - 0x42, 0xb5, 0xdd, 0x04, 0x20, 0xff, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x78, 0x20, - 0x19, 0x40, 0x06, 0x07, 0x0e, 0x3f, 0x23, 0xff, - 0x33, 0x01, 0x42, 0x9f, 0xdd, 0x01, 0x20, 0xff, - 0xe7, 0xf1, 0x49, 0x0a, 0x20, 0x91, 0xf0, 0x11, - 0xf9, 0xff, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x01, 0xfd, 0xac, 0xe7, 0xf5, 0x99, 0x01, - 0x00, 0xb8, 0x4b, 0x05, 0x18, 0xc0, 0x60, 0x01, - 0x20, 0x92, 0x49, 0x02, 0x60, 0x08, 0x20, 0x00, - 0xe7, 0xdd, 0xe7, 0xdc, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x08, 0x00, 0xb5, 0xf7, 0x9a, 0x02, - 0x06, 0x14, 0x0e, 0x24, 0x9f, 0x00, 0x88, 0x7d, - 0x78, 0x38, 0x19, 0x00, 0x06, 0x06, 0x0e, 0x36, - 0x42, 0xac, 0xdd, 0x04, 0x20, 0xff, 0xb0, 0x03, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x49, 0x0b, - 0x20, 0x91, 0xf0, 0x11, 0xf9, 0xd5, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, 0xfd, 0x82, - 0xe7, 0xf5, 0x00, 0xb0, 0x4b, 0x06, 0x18, 0xc0, - 0x68, 0x00, 0x99, 0x01, 0x60, 0x08, 0x20, 0x92, - 0x49, 0x02, 0x60, 0x08, 0x20, 0x00, 0xe7, 0xe6, - 0xe7, 0xe5, 0x00, 0x00, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x08, 0x00, 0x1c, 0x01, 0x1c, 0x0a, - 0x88, 0x50, 0x47, 0x70, 0xe7, 0xfd, 0xb4, 0x80, - 0x1c, 0x01, 0x1c, 0x0f, 0x69, 0x3a, 0x2a, 0x08, - 0xd2, 0x12, 0xa3, 0x02, 0x5c, 0x9b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x07, 0x09, 0x0b, - 0x04, 0x07, 0x09, 0x0b, 0x20, 0x02, 0xbc, 0x80, - 0x47, 0x70, 0x20, 0x04, 0xe7, 0xfb, 0x20, 0x10, - 0xe7, 0xf9, 0x20, 0xff, 0x30, 0x01, 0xe7, 0xf6, - 0x20, 0x00, 0xe7, 0xf4, 0xe7, 0xf3, 0xb5, 0xf3, - 0x98, 0x00, 0x06, 0x05, 0x0e, 0x2d, 0x48, 0x89, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x04, 0x20, 0x8b, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x48, 0x85, 0x68, 0x00, 0x28, 0x01, 0xd1, 0x04, - 0x2d, 0x17, 0xdd, 0x02, 0x20, 0x8c, 0xe7, 0xf3, - 0xe0, 0xfe, 0x2d, 0x07, 0xdd, 0x01, 0x20, 0x8c, - 0xe7, 0xee, 0x49, 0x80, 0x20, 0x91, 0xf0, 0x11, - 0xf9, 0x7f, 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, - 0xf0, 0x01, 0xfd, 0x2c, 0xe7, 0xf5, 0x1c, 0x28, - 0xf7, 0xf8, 0xfc, 0xd8, 0x1c, 0x04, 0x2c, 0x00, - 0xd0, 0x09, 0x68, 0xa0, 0x4b, 0x78, 0x40, 0x18, - 0x99, 0x01, 0x07, 0xc9, 0x09, 0xc9, 0x43, 0x08, - 0x60, 0xa0, 0x01, 0xc0, 0xe0, 0x04, 0x20, 0x92, - 0x49, 0x72, 0x60, 0x08, 0x20, 0xff, 0xe7, 0xcf, - 0x48, 0x6f, 0x68, 0x00, 0x28, 0x00, 0xd1, 0x11, - 0x99, 0x01, 0x29, 0x00, 0xd0, 0x06, 0x48, 0x6f, - 0x21, 0x01, 0x40, 0xa9, 0x68, 0x02, 0x43, 0x11, - 0x60, 0x01, 0xe0, 0x06, 0x48, 0x6b, 0x21, 0x01, - 0x40, 0xa9, 0x43, 0xc9, 0x68, 0x02, 0x40, 0x11, - 0x60, 0x01, 0xe0, 0xbf, 0x68, 0xe0, 0xf0, 0x02, - 0xfc, 0x3b, 0x28, 0x00, 0xd0, 0x73, 0xb0, 0x81, - 0x49, 0x65, 0x20, 0x91, 0xf0, 0x11, 0xf9, 0x44, - 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, 0xf0, 0x02, - 0xfc, 0x8a, 0x20, 0x92, 0x49, 0x60, 0x60, 0x08, - 0x20, 0x01, 0x49, 0x60, 0x68, 0x09, 0x60, 0x08, - 0x27, 0x00, 0x26, 0x00, 0x2e, 0x00, 0xd1, 0x14, - 0x2f, 0x07, 0xd2, 0x12, 0x6a, 0xe0, 0x05, 0x81, - 0x0d, 0x89, 0x1c, 0x38, 0x37, 0x01, 0x00, 0x83, - 0x18, 0x18, 0x00, 0xc0, 0x4a, 0x57, 0x68, 0x12, - 0x18, 0x80, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc0, - 0x6f, 0xc0, 0x42, 0x81, 0xd1, 0x00, 0x26, 0x01, - 0xe7, 0xe8, 0x2e, 0x00, 0xd1, 0x13, 0x2f, 0x18, - 0xd2, 0x11, 0x6a, 0xe0, 0x05, 0x81, 0x0d, 0x89, - 0x1c, 0x38, 0x37, 0x01, 0x23, 0x4c, 0x43, 0x58, - 0x4a, 0x4c, 0x68, 0x12, 0x18, 0x80, 0x38, 0xff, - 0x38, 0xff, 0x38, 0x02, 0x69, 0x40, 0x42, 0x81, - 0xd1, 0x00, 0x26, 0x01, 0xe7, 0xe9, 0x3f, 0x01, - 0x2f, 0x07, 0xd2, 0x32, 0x99, 0x02, 0x29, 0x00, - 0xd0, 0x16, 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, - 0x49, 0x42, 0x68, 0x09, 0x18, 0x40, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6e, 0x80, 0x4b, 0x40, - 0x43, 0x18, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x3c, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0xe0, 0x17, - 0x00, 0xb8, 0x19, 0xc0, 0x00, 0xc0, 0x49, 0x37, - 0x68, 0x09, 0x18, 0x40, 0x23, 0x05, 0x02, 0x1b, - 0x18, 0xc0, 0x6e, 0x80, 0x04, 0x00, 0x0c, 0x00, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x31, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0x88, 0xe0, 0x00, 0xe0, 0x45, - 0xe0, 0x2b, 0x99, 0x02, 0x29, 0x00, 0xd0, 0x14, - 0x20, 0x4c, 0x43, 0x78, 0x49, 0x29, 0x68, 0x09, - 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x68, 0x00, 0x4b, 0x27, 0x43, 0x18, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x24, 0x68, 0x12, 0x18, 0x89, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, 0x60, 0x08, - 0xe0, 0x13, 0x20, 0x4c, 0x43, 0x78, 0x49, 0x1f, - 0x68, 0x09, 0x18, 0x40, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x68, 0x00, 0x04, 0x00, 0x0c, 0x00, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x19, 0x68, 0x12, - 0x18, 0x89, 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, - 0x60, 0x08, 0x48, 0x16, 0x68, 0x00, 0xf0, 0x02, - 0xfc, 0x05, 0x49, 0x13, 0x20, 0x91, 0xf0, 0x11, - 0xf8, 0x9f, 0x28, 0x92, 0xd0, 0x00, 0xe7, 0xf8, - 0x48, 0x10, 0x68, 0x00, 0x90, 0x00, 0x48, 0x11, - 0x68, 0x00, 0x49, 0x0e, 0x60, 0x08, 0x98, 0x00, - 0x49, 0x0e, 0x60, 0x08, 0x20, 0x92, 0x49, 0x0a, - 0x60, 0x08, 0xb0, 0x01, 0x20, 0x92, 0x49, 0x05, - 0x60, 0x08, 0x20, 0x00, 0xe6, 0xf4, 0xe6, 0xf3, - 0xe6, 0xf2, 0x00, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0xfe, 0xff, 0xff, 0xff, 0x68, 0x00, 0x00, 0x20, - 0x2e, 0x08, 0xd1, 0xf4, 0x2e, 0x08, 0xbb, 0x20, - 0xff, 0xff, 0x00, 0x00, 0x2e, 0x08, 0xbb, 0x24, - 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x26, - 0x0e, 0x36, 0x48, 0x0f, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x20, 0x8b, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2e, 0x07, 0xdd, 0x01, 0x20, 0x8c, - 0xe7, 0xf8, 0x1c, 0x30, 0xf7, 0xf8, 0xfb, 0xc2, - 0x1c, 0x05, 0x2d, 0x00, 0xd0, 0x04, 0x68, 0xa8, - 0x01, 0xc0, 0x0f, 0xc0, 0x60, 0x38, 0xe0, 0x04, - 0x20, 0x92, 0x49, 0x04, 0x60, 0x08, 0x20, 0xff, - 0xe7, 0xe8, 0x20, 0x00, 0xe7, 0xe6, 0xe7, 0xe5, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x25, - 0x0e, 0x2d, 0x48, 0x20, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x20, 0x8b, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x48, 0x1d, 0x68, 0x00, 0x28, 0x01, - 0xd1, 0x04, 0x2d, 0x17, 0xdd, 0x02, 0x20, 0x8c, - 0xe7, 0xf4, 0xe0, 0x2d, 0x2d, 0x07, 0xdd, 0x01, - 0x20, 0x8c, 0xe7, 0xef, 0x48, 0x16, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0xff, 0xe7, 0xe9, - 0x49, 0x14, 0x20, 0x91, 0xf0, 0x11, 0xf8, 0x28, - 0x28, 0x92, 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, - 0xfb, 0xd5, 0xe7, 0xf5, 0x2f, 0x00, 0xd0, 0x08, - 0x48, 0x0f, 0x1d, 0xe9, 0x31, 0x01, 0x22, 0x01, - 0x40, 0x8a, 0x68, 0x01, 0x43, 0x11, 0x60, 0x01, - 0xe0, 0x08, 0x48, 0x0b, 0x1d, 0xea, 0x32, 0x01, - 0x21, 0x01, 0x40, 0x91, 0x43, 0xc9, 0x68, 0x02, - 0x40, 0x11, 0x60, 0x01, 0x20, 0x92, 0x49, 0x05, - 0x60, 0x08, 0x20, 0x00, 0xe7, 0xc6, 0xe7, 0xc5, - 0xe7, 0xc4, 0x00, 0x00, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xd1, 0xf0, 0x2e, 0x08, 0xba, 0x30, - 0x68, 0x00, 0x00, 0x20, 0xb4, 0x90, 0x1c, 0x07, - 0x1c, 0x0a, 0x06, 0x39, 0x0e, 0x09, 0x48, 0x10, - 0x68, 0x00, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x8b, - 0xbc, 0x90, 0x47, 0x70, 0x29, 0x07, 0xdd, 0x01, - 0x20, 0x8c, 0xe7, 0xf9, 0x48, 0x0b, 0x68, 0x00, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0xff, 0xe7, 0xf3, - 0x1d, 0xc8, 0x30, 0x01, 0x24, 0x01, 0x40, 0x84, - 0x1c, 0x23, 0x20, 0x0d, 0x06, 0xc0, 0x6a, 0x00, - 0x40, 0x18, 0x1d, 0xcc, 0x34, 0x01, 0x40, 0xe0, - 0x60, 0x10, 0x20, 0x00, 0xe7, 0xe4, 0xe7, 0xe3, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xd1, 0xf0, - 0xb5, 0xb0, 0x1c, 0x04, 0x1c, 0x0f, 0x06, 0x25, - 0x0e, 0x2d, 0x48, 0x13, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x03, 0x20, 0x8b, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x2d, 0x07, 0xdd, 0x01, 0x20, 0x8c, - 0xe7, 0xf8, 0x48, 0x0e, 0x68, 0x00, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0xff, 0xe7, 0xf2, 0x49, 0x0c, - 0x20, 0x91, 0xf0, 0x10, 0xff, 0xb9, 0x28, 0x92, - 0xd0, 0x03, 0x20, 0x01, 0xf0, 0x01, 0xfb, 0x66, - 0xe7, 0xf5, 0x08, 0xb8, 0x00, 0xa9, 0x4b, 0x07, - 0x18, 0xc9, 0x67, 0x08, 0x20, 0x92, 0x49, 0x04, - 0x60, 0x08, 0x20, 0x00, 0xe7, 0xde, 0xe7, 0xdd, - 0x2e, 0x08, 0x9d, 0xf0, 0x2e, 0x08, 0xd1, 0xf0, - 0x2e, 0x08, 0xba, 0x30, 0x68, 0x00, 0x0e, 0x00, - 0xb4, 0xf0, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, - 0x1c, 0x1e, 0x04, 0x3f, 0x0c, 0x3f, 0x1c, 0x39, - 0x29, 0x00, 0xd8, 0x02, 0xe0, 0x04, 0x39, 0x01, - 0xe7, 0xfa, 0xcd, 0x04, 0xc4, 0x04, 0xe7, 0xfa, - 0x20, 0x92, 0x4a, 0x03, 0x60, 0x10, 0x20, 0x00, - 0xbc, 0xf0, 0x47, 0x70, 0xe7, 0xfc, 0x00, 0x00, - 0x2e, 0x08, 0xba, 0x34, 0x20, 0x00, 0x6b, 0x00, - 0x49, 0x63, 0x60, 0x08, 0x20, 0x00, 0x6b, 0x40, - 0x49, 0x62, 0x60, 0x08, 0x48, 0x62, 0x49, 0x63, - 0x60, 0x08, 0x48, 0x63, 0x49, 0x63, 0x60, 0x08, - 0x20, 0x00, 0x6a, 0xc0, 0x49, 0x62, 0x60, 0x08, - 0x48, 0x62, 0x49, 0x63, 0x60, 0x08, 0x48, 0x63, - 0x49, 0x63, 0x60, 0x08, 0x48, 0x63, 0x49, 0x64, - 0x60, 0x08, 0x20, 0x00, 0x6b, 0x80, 0x49, 0x63, - 0x60, 0x08, 0x20, 0x00, 0x6b, 0xc0, 0x49, 0x62, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0x00, 0x49, 0x61, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0x40, 0x49, 0x60, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0x80, 0x49, 0x5f, - 0x60, 0x08, 0x20, 0x00, 0x6c, 0xc0, 0x49, 0x5e, - 0x60, 0x08, 0x20, 0x00, 0x6e, 0xc0, 0x49, 0x5d, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0x00, 0x49, 0x5c, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0x40, 0x49, 0x5b, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0x80, 0x49, 0x5a, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0x00, 0x49, 0x59, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0x40, 0x49, 0x58, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0x80, 0x49, 0x57, - 0x60, 0x08, 0x20, 0x00, 0x6d, 0xc0, 0x49, 0x56, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0xc0, 0x49, 0x55, - 0x60, 0x08, 0x20, 0x80, 0x6d, 0xc0, 0x49, 0x54, - 0x60, 0x08, 0x20, 0x80, 0x6c, 0xc0, 0x49, 0x53, - 0x60, 0x08, 0x20, 0x80, 0x68, 0x40, 0x49, 0x52, - 0x60, 0x08, 0x20, 0x80, 0x68, 0x80, 0x49, 0x51, - 0x60, 0x08, 0x20, 0x80, 0x68, 0xc0, 0x49, 0x50, - 0x60, 0x08, 0x20, 0x80, 0x69, 0x00, 0x49, 0x4f, - 0x60, 0x08, 0x20, 0x80, 0x69, 0x40, 0x49, 0x4e, - 0x60, 0x08, 0x20, 0x80, 0x69, 0x80, 0x49, 0x4d, - 0x60, 0x08, 0x20, 0x80, 0x69, 0xc0, 0x49, 0x4c, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x00, 0x49, 0x4b, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x40, 0x49, 0x4a, - 0x60, 0x08, 0x20, 0x80, 0x6a, 0x80, 0x49, 0x49, - 0x60, 0x08, 0x20, 0x00, 0x6f, 0x00, 0x49, 0x48, - 0x60, 0x08, 0x20, 0x00, 0x6f, 0x40, 0x49, 0x47, - 0x60, 0x08, 0x20, 0x80, 0x6c, 0x40, 0x49, 0x46, - 0x60, 0x08, 0x20, 0x80, 0x6c, 0x80, 0x49, 0x45, - 0x60, 0x08, 0x20, 0x80, 0x6e, 0x40, 0x49, 0x44, - 0x60, 0x08, 0x20, 0x80, 0x6e, 0x80, 0x49, 0x43, - 0x60, 0x08, 0x20, 0x00, 0x49, 0x42, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x41, 0x60, 0x48, 0x48, 0x41, - 0x49, 0x3f, 0x60, 0x88, 0x48, 0x40, 0x49, 0x3e, - 0x60, 0xc8, 0x20, 0xff, 0x30, 0x01, 0x68, 0x40, - 0x49, 0x3e, 0x60, 0x08, 0x20, 0x80, 0x6e, 0xc0, - 0x49, 0x3d, 0x60, 0x08, 0x20, 0x80, 0x6f, 0x00, - 0x49, 0x3c, 0x60, 0x08, 0x20, 0x80, 0x6f, 0x40, - 0x49, 0x3b, 0x60, 0x08, 0x20, 0x80, 0x6f, 0x80, - 0x49, 0x3a, 0x60, 0x08, 0x20, 0x80, 0x6f, 0xc0, - 0x49, 0x39, 0x60, 0x08, 0x20, 0xff, 0x30, 0x01, - 0x68, 0x80, 0x49, 0x38, 0x60, 0x08, 0x47, 0x70, - 0x2e, 0x08, 0x9b, 0x28, 0x2e, 0x08, 0x9b, 0x2c, - 0x64, 0x00, 0x05, 0x00, 0x2e, 0x08, 0x9b, 0x34, - 0x64, 0x00, 0x00, 0x80, 0x2e, 0x08, 0x9b, 0x38, - 0x2e, 0x08, 0x9b, 0x30, 0x64, 0x00, 0x04, 0x00, - 0x2e, 0x08, 0x9b, 0x3c, 0x9e, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x9b, 0x54, 0x9e, 0x00, 0x05, 0x00, - 0x2e, 0x08, 0x9b, 0x40, 0x2e, 0x08, 0xd2, 0x08, - 0x2e, 0x08, 0xd2, 0x0c, 0x2e, 0x08, 0xd2, 0x10, - 0x2e, 0x08, 0xd2, 0x14, 0x2e, 0x08, 0x9b, 0x44, - 0x2e, 0x08, 0x9b, 0x48, 0x2e, 0x08, 0x9b, 0x58, - 0x2e, 0x08, 0x9b, 0x5c, 0x2e, 0x08, 0x9b, 0x60, - 0x2e, 0x08, 0x9b, 0x64, 0x2e, 0x08, 0x9b, 0x4c, - 0x2e, 0x08, 0x9b, 0x50, 0x2e, 0x08, 0x9d, 0xd8, - 0x2e, 0x08, 0x9d, 0xdc, 0x2e, 0x08, 0x9b, 0x68, - 0x2e, 0x08, 0x9b, 0x6c, 0x2e, 0x08, 0x9b, 0x98, - 0x2e, 0x08, 0x9b, 0x70, 0x2e, 0x08, 0x9b, 0x74, - 0x2e, 0x08, 0x9b, 0x78, 0x2e, 0x08, 0x9b, 0x7c, - 0x2e, 0x08, 0x9b, 0x80, 0x2e, 0x08, 0x9b, 0x84, - 0x2e, 0x08, 0x9b, 0x88, 0x2e, 0x08, 0x9b, 0x8c, - 0x2e, 0x08, 0x9b, 0x90, 0x2e, 0x08, 0x9b, 0x94, - 0x2e, 0x08, 0x9b, 0x1c, 0x2e, 0x08, 0x9b, 0x20, - 0x2e, 0x08, 0xb9, 0xb0, 0x2e, 0x08, 0x9b, 0xc0, - 0x2e, 0x08, 0x9b, 0xa0, 0x2e, 0x08, 0x9d, 0xe0, - 0x2e, 0x08, 0xb9, 0x88, 0xcc, 0x1f, 0xe0, 0x00, - 0xcc, 0x1f, 0xfe, 0x00, 0x2e, 0x08, 0x9b, 0xac, - 0x2e, 0x08, 0x9b, 0xc4, 0x2e, 0x08, 0x9b, 0xa4, - 0x2e, 0x08, 0x9b, 0xa8, 0x2e, 0x08, 0xb9, 0xac, - 0x2e, 0x08, 0xb9, 0x84, 0x2e, 0x08, 0x9b, 0xb4, - 0x49, 0x4f, 0x68, 0x0a, 0x23, 0x04, 0x43, 0x1a, - 0x60, 0x0a, 0x21, 0xff, 0x4a, 0x4d, 0x68, 0x12, - 0x32, 0x40, 0x72, 0x11, 0x21, 0xff, 0x4a, 0x4b, - 0x68, 0x12, 0x32, 0x40, 0x76, 0x11, 0x21, 0xff, - 0x4a, 0x48, 0x68, 0x12, 0x32, 0x60, 0x72, 0x11, - 0x21, 0xff, 0x4a, 0x46, 0x68, 0x12, 0x32, 0x20, - 0x72, 0x11, 0x21, 0xff, 0x4a, 0x43, 0x68, 0x12, - 0x32, 0x20, 0x76, 0x11, 0x21, 0xff, 0x4a, 0x41, - 0x68, 0x12, 0x32, 0x60, 0x76, 0x11, 0x21, 0x00, - 0x4a, 0x3e, 0x68, 0x12, 0x32, 0x40, 0x72, 0x91, - 0x21, 0x00, 0x4a, 0x3c, 0x68, 0x12, 0x32, 0x40, - 0x76, 0x91, 0x21, 0x00, 0x4a, 0x39, 0x68, 0x12, - 0x32, 0x60, 0x72, 0x91, 0x21, 0x00, 0x4a, 0x37, - 0x68, 0x12, 0x32, 0x20, 0x72, 0x91, 0x21, 0x00, - 0x4a, 0x34, 0x68, 0x12, 0x32, 0x20, 0x76, 0x91, - 0x21, 0x00, 0x4a, 0x32, 0x68, 0x12, 0x32, 0x60, - 0x76, 0x91, 0x21, 0x00, 0x4a, 0x2f, 0x68, 0x12, - 0x32, 0x80, 0x70, 0xd1, 0x21, 0x00, 0x4a, 0x2d, - 0x68, 0x12, 0x32, 0x80, 0x70, 0x51, 0x21, 0x00, - 0x4a, 0x2a, 0x68, 0x12, 0x32, 0x80, 0x70, 0x91, - 0x21, 0x00, 0x4a, 0x29, 0x60, 0x11, 0x21, 0x00, - 0x4a, 0x28, 0x64, 0x11, 0x21, 0x03, 0x4a, 0x28, - 0x61, 0x11, 0x49, 0x28, 0x68, 0x0a, 0x4b, 0x28, - 0x43, 0x1a, 0x60, 0x0a, 0x49, 0x26, 0x22, 0x33, - 0x06, 0x52, 0x60, 0x51, 0x21, 0x00, 0x4a, 0x25, - 0x70, 0x11, 0x21, 0x00, 0x4a, 0x23, 0x70, 0x51, - 0x21, 0x00, 0x4a, 0x22, 0x70, 0x91, 0x21, 0x00, - 0x4a, 0x20, 0x70, 0xd1, 0x21, 0x00, 0x4a, 0x1f, - 0x71, 0x11, 0x21, 0x00, 0x4a, 0x1d, 0x71, 0x51, - 0x21, 0x00, 0x4a, 0x1c, 0x71, 0x91, 0x21, 0x00, - 0x4a, 0x1a, 0x71, 0xd1, 0x21, 0x00, 0x4a, 0x19, - 0x72, 0x11, 0x21, 0x00, 0x4a, 0x17, 0x72, 0x51, - 0x21, 0x00, 0x4a, 0x16, 0x72, 0x91, 0x21, 0x00, - 0x4a, 0x14, 0x72, 0xd1, 0x21, 0x00, 0x4a, 0x13, - 0x73, 0x11, 0x21, 0xff, 0x4a, 0x11, 0x70, 0x11, - 0x21, 0x00, 0x4a, 0x10, 0x70, 0x11, 0x21, 0x00, - 0x4a, 0x0e, 0x70, 0x51, 0x20, 0x00, 0x28, 0x20, - 0xdb, 0x04, 0xe0, 0x08, 0x1c, 0x41, 0x06, 0x08, - 0x0e, 0x00, 0xe7, 0xf8, 0x21, 0xff, 0x4a, 0x03, - 0x68, 0x12, 0x54, 0x11, 0xe7, 0xf6, 0x47, 0x70, - 0x66, 0x00, 0x01, 0x18, 0x2e, 0x08, 0xb9, 0xb0, - 0x9e, 0x00, 0x0a, 0x00, 0x9e, 0x00, 0x0a, 0x80, - 0x66, 0x00, 0x01, 0x00, 0x66, 0x00, 0x00, 0x08, - 0x23, 0x48, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb4, - 0xb4, 0x80, 0x1c, 0x07, 0x1c, 0x0a, 0x06, 0x39, - 0x0e, 0x09, 0x29, 0x05, 0xd2, 0x40, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x14, 0x07, 0x0d, 0x13, 0x00, 0x78, 0x10, - 0x4b, 0x1f, 0x70, 0x18, 0xe0, 0x38, 0x78, 0x50, - 0x4b, 0x1e, 0x68, 0x1b, 0x33, 0x80, 0x71, 0x58, - 0xe0, 0x32, 0x78, 0x10, 0x4b, 0x1b, 0x68, 0x1b, - 0x33, 0x80, 0x71, 0x18, 0xe0, 0x2c, 0xe0, 0x2b, - 0x78, 0x10, 0x4b, 0x17, 0x70, 0x18, 0x78, 0x50, - 0x4b, 0x15, 0x70, 0x58, 0x78, 0x90, 0x4b, 0x14, - 0x70, 0x98, 0x78, 0xd0, 0x4b, 0x12, 0x70, 0xd8, - 0x79, 0x10, 0x4b, 0x11, 0x71, 0x18, 0x79, 0x50, - 0x4b, 0x0f, 0x71, 0x58, 0x79, 0x90, 0x4b, 0x0e, - 0x71, 0x98, 0x79, 0xd0, 0x4b, 0x0c, 0x71, 0xd8, - 0x7a, 0x10, 0x4b, 0x0b, 0x72, 0x18, 0x7a, 0x50, - 0x4b, 0x09, 0x72, 0x58, 0x7a, 0x90, 0x4b, 0x08, - 0x72, 0x98, 0x7a, 0xd0, 0x4b, 0x06, 0x72, 0xd8, - 0x7b, 0x10, 0x4b, 0x05, 0x73, 0x18, 0xe0, 0x03, - 0x20, 0x4a, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xff, - 0x20, 0x00, 0xe7, 0xfa, 0xe7, 0xf9, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb4, 0x2e, 0x08, 0xb9, 0xb0, - 0xb5, 0xf3, 0x1c, 0x07, 0x06, 0x3e, 0x0e, 0x36, - 0x99, 0x01, 0x06, 0x0c, 0x0e, 0x24, 0x2e, 0x20, - 0xdb, 0x04, 0x20, 0xa2, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0x02, 0xd0, 0x03, - 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, 0xd1, 0x0b, - 0x48, 0xb8, 0x68, 0x00, 0x30, 0x20, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x39, 0x48, 0xb5, 0x68, 0x00, - 0x30, 0x20, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x33, - 0x2c, 0x00, 0xd1, 0x17, 0x48, 0xb1, 0x68, 0x00, - 0x30, 0x40, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x2b, - 0x48, 0xae, 0x68, 0x00, 0x30, 0x40, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x25, 0x48, 0xab, 0x68, 0x00, - 0x30, 0x60, 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x1f, - 0x48, 0xa8, 0x68, 0x00, 0x30, 0x20, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x19, 0x2c, 0x01, 0xd1, 0x19, - 0x48, 0xa4, 0x68, 0x00, 0x30, 0x40, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x11, 0x48, 0xa1, 0x68, 0x00, - 0x30, 0x40, 0x7e, 0x80, 0x28, 0x00, 0xd1, 0x0b, - 0x48, 0x9e, 0x68, 0x00, 0x30, 0x60, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x05, 0x48, 0x9b, 0x68, 0x00, - 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x49, 0xe7, 0xb3, 0x48, 0x97, 0x68, 0x00, - 0x55, 0x84, 0x2c, 0xff, 0xd0, 0x73, 0x20, 0x01, - 0x49, 0x95, 0x60, 0x48, 0x2c, 0x05, 0xd2, 0x6f, - 0xa3, 0x01, 0x5d, 0x1b, 0x00, 0x5b, 0x44, 0x9f, - 0x02, 0x34, 0x30, 0x30, 0x30, 0x00, 0x20, 0x02, - 0x49, 0x90, 0x61, 0x88, 0x48, 0x90, 0x6a, 0xc0, - 0x49, 0x90, 0x60, 0x08, 0x48, 0x90, 0x68, 0x01, - 0x23, 0x01, 0x07, 0x5b, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x8e, 0x49, 0x8b, 0x62, 0xc8, 0x48, 0x8c, - 0x68, 0x01, 0x4b, 0x8d, 0x40, 0x19, 0x60, 0x01, - 0x20, 0x01, 0x21, 0x31, 0x06, 0x49, 0x61, 0x88, - 0x20, 0x15, 0x21, 0x31, 0x06, 0x49, 0x61, 0x08, - 0x20, 0x0f, 0x21, 0x31, 0x06, 0x49, 0x61, 0xc8, - 0x20, 0x0c, 0x21, 0x31, 0x06, 0x49, 0x61, 0xc8, - 0x20, 0x54, 0x21, 0x31, 0x06, 0x49, 0x62, 0xc8, - 0x20, 0x37, 0x21, 0x31, 0x06, 0x49, 0x60, 0x88, - 0xe0, 0x56, 0x20, 0x00, 0x49, 0x79, 0x61, 0x88, - 0xe0, 0x52, 0x20, 0x01, 0x49, 0x77, 0x61, 0x88, - 0x20, 0x01, 0x49, 0x7c, 0x62, 0x88, 0x48, 0x7c, - 0x78, 0x00, 0x06, 0x80, 0x0e, 0x80, 0x02, 0x80, - 0x49, 0x79, 0x78, 0x49, 0x07, 0xc9, 0x0d, 0x89, - 0x43, 0x08, 0x49, 0x77, 0x78, 0x89, 0x07, 0xc9, - 0x0d, 0xc9, 0x43, 0x08, 0x49, 0x74, 0x78, 0xc9, - 0x07, 0x89, 0x0f, 0x89, 0x01, 0x89, 0x43, 0x08, - 0x49, 0x71, 0x79, 0x09, 0x07, 0x89, 0x0f, 0x89, - 0x01, 0x09, 0x43, 0x08, 0x49, 0x6e, 0x79, 0x49, - 0x07, 0x89, 0x0f, 0x89, 0x00, 0x89, 0x43, 0x08, - 0x49, 0x6b, 0x79, 0x89, 0x07, 0x89, 0x0f, 0x89, - 0x43, 0x08, 0x49, 0x68, 0x62, 0x08, 0x48, 0x68, - 0x79, 0xc0, 0x07, 0xc0, 0x0e, 0x40, 0x49, 0x66, - 0x7a, 0x09, 0x07, 0xc9, 0xe0, 0x01, 0xe0, 0x21, - 0xe0, 0x18, 0x0e, 0xc9, 0x43, 0x08, 0x49, 0x62, - 0x7a, 0x49, 0x07, 0xc9, 0x0f, 0x09, 0x43, 0x08, - 0x49, 0x5f, 0x7a, 0x89, 0x07, 0xc9, 0x0f, 0x49, - 0x43, 0x08, 0x49, 0x5d, 0x7a, 0xc9, 0x07, 0xc9, - 0x0f, 0x89, 0x43, 0x08, 0x49, 0x5a, 0x7b, 0x09, - 0x07, 0xc9, 0x0f, 0xc9, 0x43, 0x08, 0x49, 0x57, - 0x62, 0x48, 0xe0, 0x01, 0x20, 0x4a, 0xe7, 0x1d, - 0x48, 0x51, 0x68, 0x01, 0x4b, 0x55, 0x40, 0x19, - 0x60, 0x01, 0xe0, 0x8f, 0x48, 0x49, 0x68, 0x00, - 0x30, 0x80, 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x08, - 0x22, 0x00, 0xb4, 0x04, 0x1c, 0x30, 0x23, 0x00, - 0x22, 0x00, 0x49, 0x4f, 0xf7, 0xf4, 0xfc, 0x10, - 0xb0, 0x01, 0x20, 0x00, 0x49, 0x42, 0x60, 0x48, - 0x48, 0x45, 0x68, 0x01, 0x4b, 0x4b, 0x43, 0x19, - 0x60, 0x01, 0x48, 0x4a, 0x21, 0x33, 0x06, 0x49, - 0x60, 0x48, 0x48, 0x49, 0x68, 0x01, 0x23, 0x04, - 0x43, 0x19, 0x60, 0x01, 0x2c, 0x00, 0xd1, 0x0e, - 0x48, 0x3c, 0x68, 0x00, 0x28, 0x00, 0xd0, 0x0a, - 0x48, 0x3a, 0x68, 0x00, 0x49, 0x38, 0x62, 0xc8, - 0x20, 0x00, 0x49, 0x38, 0x60, 0x08, 0x20, 0x00, - 0x21, 0x31, 0x06, 0x49, 0x61, 0x88, 0x20, 0x00, - 0x49, 0x30, 0x68, 0x09, 0x31, 0x80, 0x70, 0x48, - 0x20, 0x00, 0x49, 0x2e, 0x68, 0x09, 0x31, 0x80, - 0x70, 0x88, 0x20, 0x00, 0x49, 0x39, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x39, 0x64, 0x08, 0x20, 0x03, - 0x49, 0x2a, 0x61, 0x08, 0x25, 0x00, 0x2d, 0x20, - 0xd3, 0x02, 0xe0, 0x06, 0x35, 0x01, 0xe7, 0xfa, - 0x20, 0xff, 0x49, 0x24, 0x68, 0x09, 0x55, 0x48, - 0xe7, 0xf8, 0x20, 0xff, 0x49, 0x21, 0x68, 0x09, - 0x31, 0x40, 0x72, 0x08, 0x20, 0xff, 0x49, 0x1f, - 0x68, 0x09, 0x31, 0x40, 0x76, 0x08, 0x20, 0xff, - 0x49, 0x1c, 0x68, 0x09, 0x31, 0x60, 0x72, 0x08, - 0x20, 0xff, 0x49, 0x1a, 0x68, 0x09, 0x31, 0x20, - 0x72, 0x08, 0x20, 0xff, 0x49, 0x17, 0x68, 0x09, - 0x31, 0x20, 0x76, 0x08, 0x20, 0xff, 0x49, 0x15, - 0x68, 0x09, 0x31, 0x60, 0x76, 0x08, 0x20, 0x00, - 0x49, 0x12, 0x68, 0x09, 0x31, 0x40, 0x72, 0x88, - 0x20, 0x00, 0x49, 0x10, 0x68, 0x09, 0x31, 0x40, - 0x76, 0x88, 0x20, 0x00, 0x49, 0x0d, 0x68, 0x09, - 0x31, 0x60, 0x72, 0x88, 0x20, 0x00, 0x49, 0x0b, - 0x68, 0x09, 0x31, 0x20, 0x72, 0x88, 0x20, 0x00, - 0x49, 0x08, 0x68, 0x09, 0x31, 0x20, 0x76, 0x88, - 0x20, 0x00, 0x49, 0x06, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x88, 0x20, 0x00, 0x49, 0x03, 0x68, 0x09, - 0x31, 0x80, 0x70, 0xc8, 0x20, 0x00, 0xe6, 0x85, - 0xe6, 0x84, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb0, - 0x62, 0x00, 0x03, 0x00, 0x66, 0x00, 0x01, 0x00, - 0xa0, 0x00, 0x0d, 0x80, 0x2e, 0x08, 0x20, 0x88, - 0x66, 0x00, 0x00, 0x08, 0x2e, 0x01, 0xe1, 0xa8, - 0xdf, 0xff, 0xff, 0xff, 0x62, 0x01, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb4, 0xfc, 0xb7, 0xff, 0xff, - 0x00, 0x00, 0xff, 0xff, 0x23, 0x48, 0x00, 0x00, - 0x66, 0x00, 0x01, 0x18, 0x9e, 0x00, 0x0a, 0x00, - 0x9e, 0x00, 0x0a, 0x80, 0xb5, 0xf7, 0x1c, 0x17, - 0x98, 0x00, 0x06, 0x02, 0x0e, 0x12, 0x99, 0x01, - 0x06, 0x0d, 0x0e, 0x2d, 0x48, 0x6a, 0x68, 0x00, - 0x5c, 0x81, 0x2a, 0x20, 0xdb, 0x04, 0x20, 0xa2, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x29, 0xff, 0xd1, 0x01, 0x20, 0x4b, 0xe7, 0xf7, - 0x48, 0x64, 0x69, 0x80, 0x28, 0x00, 0xd1, 0x03, - 0x29, 0x04, 0xd1, 0x01, 0x20, 0x58, 0xe7, 0xef, - 0x48, 0x60, 0x69, 0x80, 0x28, 0x00, 0xd1, 0x03, - 0x29, 0x02, 0xd0, 0x01, 0x29, 0x03, 0xd1, 0x0b, - 0x48, 0x5c, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, - 0x29, 0x00, 0xd1, 0x05, 0x48, 0x59, 0x69, 0x80, - 0x28, 0x01, 0xd1, 0x03, 0x29, 0x01, 0xd0, 0x01, - 0x20, 0x4d, 0xe7, 0xd9, 0x29, 0x02, 0xd1, 0x05, - 0x48, 0x53, 0x68, 0x00, 0x30, 0x40, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x17, 0x29, 0x03, 0xd1, 0x05, - 0x48, 0x4f, 0x68, 0x00, 0x30, 0x40, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x0f, 0x29, 0x00, 0xd1, 0x05, - 0x48, 0x4b, 0x68, 0x00, 0x30, 0x20, 0x7a, 0x80, - 0x28, 0x00, 0xd1, 0x07, 0x29, 0x01, 0xd1, 0x07, - 0x48, 0x47, 0x68, 0x00, 0x30, 0x20, 0x7e, 0x80, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x4e, 0xe7, 0xb7, - 0x68, 0x78, 0x28, 0x00, 0xd1, 0x01, 0x20, 0x4c, - 0xe7, 0xb2, 0x23, 0x01, 0x01, 0x08, 0x4e, 0x40, - 0x68, 0x36, 0x19, 0x80, 0x30, 0x20, 0x72, 0x83, - 0x2d, 0x01, 0xd1, 0x0b, 0x20, 0x33, 0x06, 0x40, - 0x6e, 0x40, 0x23, 0x0d, 0x06, 0x9b, 0x1a, 0xc0, - 0x00, 0xd3, 0x4e, 0x3b, 0x68, 0x36, 0x19, 0x9b, - 0x60, 0x58, 0xe0, 0x12, 0x2d, 0x02, 0xd1, 0x0a, - 0x48, 0x38, 0x6c, 0xc0, 0x23, 0x0d, 0x06, 0x9b, - 0x1a, 0xc3, 0x00, 0xd0, 0x4e, 0x34, 0x68, 0x36, - 0x19, 0x80, 0x60, 0x43, 0xe0, 0x05, 0x68, 0x3b, - 0x00, 0xd0, 0x4e, 0x31, 0x68, 0x36, 0x19, 0x80, - 0x60, 0x43, 0x68, 0x3b, 0x01, 0x08, 0x4e, 0x2c, - 0x68, 0x36, 0x19, 0x80, 0x62, 0x03, 0x68, 0x7b, - 0x01, 0x08, 0x4e, 0x29, 0x68, 0x36, 0x19, 0x80, - 0x62, 0x43, 0x01, 0x08, 0x4b, 0x26, 0x68, 0x1b, - 0x18, 0xc0, 0x62, 0xc7, 0x01, 0x08, 0x4b, 0x24, - 0x68, 0x1b, 0x18, 0xc0, 0x30, 0x20, 0x72, 0x45, - 0x01, 0x08, 0x4b, 0x21, 0x68, 0x1b, 0x18, 0xc0, - 0x30, 0x20, 0x72, 0x02, 0x20, 0x00, 0x60, 0x78, - 0x20, 0x00, 0x72, 0x78, 0x20, 0x00, 0x4b, 0x20, - 0x60, 0x18, 0x20, 0x00, 0x4b, 0x1f, 0x64, 0x18, - 0x01, 0x08, 0x4b, 0x19, 0x68, 0x1b, 0x18, 0xc0, - 0x6a, 0x40, 0x28, 0xbc, 0xdd, 0x01, 0x24, 0xbc, - 0xe0, 0x04, 0x01, 0x08, 0x4b, 0x14, 0x68, 0x1b, - 0x18, 0xc0, 0x6a, 0x44, 0x48, 0x18, 0x60, 0x04, - 0x29, 0x01, 0xd1, 0x14, 0x20, 0x01, 0x4b, 0x17, - 0x62, 0x98, 0x48, 0x17, 0x68, 0x03, 0x04, 0x1b, - 0x0c, 0x1b, 0x60, 0x03, 0x48, 0x14, 0x04, 0x23, - 0x68, 0x06, 0x43, 0x33, 0x60, 0x03, 0x48, 0x13, - 0x68, 0x06, 0x23, 0x20, 0x43, 0x33, 0x60, 0x03, - 0x20, 0x01, 0x4b, 0x0e, 0x63, 0x18, 0x48, 0x07, - 0x69, 0x80, 0x28, 0x00, 0xd1, 0x04, 0x48, 0x0e, - 0x68, 0x06, 0x23, 0x28, 0x43, 0x33, 0x60, 0x03, - 0x20, 0x00, 0xe7, 0x31, 0xe7, 0x30, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb0, 0x66, 0x00, 0x01, 0x00, - 0x2e, 0x08, 0x9b, 0x40, 0x66, 0x00, 0x00, 0x80, - 0x9e, 0x00, 0x0a, 0x00, 0x9e, 0x00, 0x0a, 0x80, - 0x62, 0x00, 0x03, 0x00, 0x62, 0x01, 0x00, 0x00, - 0x62, 0x01, 0x00, 0x20, 0x62, 0x01, 0x00, 0x24, - 0x64, 0x00, 0x00, 0x60, 0xb5, 0xf3, 0x1c, 0x0f, - 0x98, 0x00, 0x06, 0x06, 0x0e, 0x36, 0xb0, 0x82, - 0x4d, 0x68, 0x49, 0x69, 0x91, 0x01, 0x48, 0x69, - 0x68, 0x00, 0x5d, 0x84, 0x2e, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x02, 0xb0, 0x02, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0xff, 0xd1, 0x02, - 0x20, 0x4b, 0xb0, 0x02, 0xe7, 0xf6, 0x48, 0x62, - 0x69, 0x80, 0x28, 0x00, 0xd1, 0x05, 0x2c, 0x02, - 0xd0, 0x03, 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, - 0xd1, 0x0b, 0x48, 0x5d, 0x69, 0x80, 0x28, 0x02, - 0xd1, 0x01, 0x2c, 0x00, 0xd1, 0x05, 0x48, 0x5a, - 0x69, 0x80, 0x28, 0x01, 0xd1, 0x04, 0x2c, 0x01, - 0xd0, 0x02, 0x20, 0x4d, 0xb0, 0x02, 0xe7, 0xdd, - 0x48, 0x54, 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x4f, 0xb0, 0x02, - 0xe7, 0xd4, 0x48, 0x50, 0x68, 0x00, 0x30, 0x80, - 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x50, - 0xb0, 0x02, 0xe7, 0xcb, 0x68, 0x78, 0x28, 0x00, - 0xd1, 0x02, 0x20, 0x4c, 0xb0, 0x02, 0xe7, 0xc5, - 0x2c, 0x04, 0xd1, 0x08, 0x68, 0x79, 0x20, 0xbc, - 0xf0, 0x01, 0xff, 0xac, 0x29, 0x00, 0xd0, 0x02, - 0x20, 0x59, 0xb0, 0x02, 0xe7, 0xba, 0x48, 0x43, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x21, 0x01, - 0x40, 0x81, 0x48, 0x41, 0x68, 0x40, 0x40, 0x08, - 0x07, 0x80, 0x0f, 0x80, 0xd0, 0x02, 0x20, 0x51, - 0xb0, 0x02, 0xe7, 0xab, 0x20, 0x33, 0x06, 0x40, - 0x6b, 0x80, 0x90, 0x00, 0x23, 0x04, 0x40, 0x18, - 0xd0, 0x02, 0x20, 0x52, 0xb0, 0x02, 0xe7, 0xa1, - 0x2c, 0x00, 0xd1, 0x04, 0x48, 0x37, 0x68, 0x01, - 0x23, 0xfd, 0x40, 0x19, 0x60, 0x01, 0x20, 0x01, - 0x49, 0x32, 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, - 0x68, 0x38, 0x49, 0x30, 0x68, 0x09, 0x67, 0x08, - 0x68, 0x78, 0x49, 0x2e, 0x68, 0x09, 0x67, 0x48, - 0x48, 0x2c, 0x68, 0x00, 0x67, 0xc7, 0x20, 0x00, - 0x49, 0x2a, 0x68, 0x09, 0x31, 0x60, 0x76, 0x48, - 0x48, 0x28, 0x68, 0x00, 0x30, 0x60, 0x76, 0x06, - 0x20, 0x00, 0x60, 0x78, 0x20, 0x00, 0x72, 0x78, - 0x48, 0x24, 0x68, 0x00, 0x5d, 0x80, 0x28, 0x01, - 0xd1, 0x02, 0x20, 0x01, 0x49, 0x24, 0x62, 0x88, - 0x98, 0x00, 0x01, 0x00, 0x19, 0x45, 0x48, 0x1f, - 0x68, 0x00, 0x6f, 0x40, 0x28, 0xbc, 0xdd, 0x07, - 0x48, 0x20, 0x60, 0xa8, 0x20, 0xbc, 0x49, 0x1b, - 0x68, 0x09, 0x31, 0x80, 0x70, 0x08, 0xe0, 0x0d, - 0x48, 0x18, 0x68, 0x00, 0x6f, 0x40, 0x23, 0x01, - 0x07, 0x9b, 0x43, 0x18, 0x60, 0xa8, 0x48, 0x15, - 0x68, 0x00, 0x6f, 0x40, 0x49, 0x13, 0x68, 0x09, - 0x31, 0x80, 0x70, 0x08, 0x48, 0x11, 0x68, 0x00, - 0x30, 0x80, 0x78, 0x80, 0x00, 0x43, 0x18, 0x18, - 0x01, 0x80, 0x99, 0x01, 0x18, 0x41, 0x91, 0x01, - 0x48, 0x0c, 0x68, 0x00, 0x6f, 0x00, 0x60, 0x28, - 0x99, 0x01, 0x1d, 0x08, 0x60, 0x68, 0x20, 0x01, - 0x06, 0x00, 0x60, 0xe8, 0x99, 0x00, 0x20, 0x01, - 0x40, 0x88, 0x21, 0x33, 0x06, 0x49, 0x63, 0x48, - 0x20, 0x00, 0xb0, 0x02, 0xe7, 0x3a, 0xb0, 0x02, - 0xe7, 0x38, 0x00, 0x00, 0x9e, 0x00, 0x09, 0x80, - 0x9e, 0x00, 0x0b, 0x80, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0x00, 0x62, 0x00, 0x00, 0x1c, - 0x62, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0xbc, - 0xb5, 0xf3, 0x1c, 0x0f, 0xb0, 0x81, 0x98, 0x01, - 0x06, 0x00, 0x0e, 0x00, 0x90, 0x00, 0xb0, 0x82, - 0x48, 0xf9, 0x68, 0x00, 0x99, 0x02, 0x5c, 0x44, - 0x98, 0x02, 0x28, 0x20, 0xdb, 0x05, 0x20, 0xa2, - 0xb0, 0x03, 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x2c, 0xff, 0xd1, 0x02, 0x20, 0x4b, - 0xb0, 0x03, 0xe7, 0xf6, 0x48, 0xf1, 0x69, 0x80, - 0x28, 0x00, 0xd1, 0x05, 0x2c, 0x02, 0xd0, 0x03, - 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, 0xd1, 0x0b, - 0x48, 0xec, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, - 0x2c, 0x00, 0xd1, 0x05, 0x48, 0xe9, 0x69, 0x80, - 0x28, 0x01, 0xd1, 0x04, 0x2c, 0x01, 0xd0, 0x02, - 0x20, 0x4d, 0xb0, 0x03, 0xe7, 0xdd, 0x48, 0xe4, - 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x4f, 0xb0, 0x03, 0xe7, 0xd4, - 0x68, 0x78, 0x28, 0x00, 0xd1, 0x02, 0x20, 0x4c, - 0xb0, 0x03, 0xe7, 0xce, 0x2c, 0x04, 0xd1, 0x08, - 0x68, 0x79, 0x20, 0xbc, 0xf0, 0x01, 0xfe, 0xce, - 0x29, 0x00, 0xd0, 0x02, 0x20, 0x59, 0xb0, 0x03, - 0xe7, 0xc3, 0x48, 0xd7, 0x68, 0x00, 0x30, 0x80, - 0x78, 0xc0, 0x28, 0x00, 0xd0, 0x02, 0x20, 0x50, - 0xb0, 0x03, 0xe7, 0xba, 0x2c, 0x00, 0xd1, 0x04, - 0x48, 0xd3, 0x68, 0x01, 0x23, 0xfd, 0x40, 0x19, - 0x60, 0x01, 0x48, 0xd2, 0x68, 0x01, 0x23, 0x8d, - 0x05, 0x9b, 0x43, 0x19, 0x60, 0x01, 0x48, 0xd0, - 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, 0x20, 0x01, - 0x49, 0xc9, 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, - 0x68, 0x38, 0x49, 0xc7, 0x68, 0x09, 0x67, 0x08, - 0x68, 0x78, 0x49, 0xc5, 0x68, 0x09, 0x67, 0x48, - 0x48, 0xc3, 0x68, 0x00, 0x67, 0xc7, 0x20, 0x00, - 0x49, 0xc1, 0x68, 0x09, 0x31, 0x60, 0x76, 0x48, - 0x98, 0x02, 0x49, 0xbf, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x08, 0x20, 0x00, 0x49, 0xbc, 0x68, 0x09, - 0x6f, 0xc9, 0x60, 0x48, 0x20, 0x00, 0x49, 0xba, - 0x68, 0x09, 0x6f, 0xc9, 0x72, 0x48, 0x48, 0xb8, - 0x68, 0x00, 0x99, 0x02, 0x5c, 0x40, 0x28, 0x01, - 0xd1, 0x02, 0x20, 0x01, 0x49, 0xb9, 0x62, 0x88, - 0x48, 0xb3, 0x68, 0x00, 0x30, 0x80, 0x78, 0x81, - 0x20, 0x01, 0x40, 0x88, 0x49, 0xb1, 0x68, 0x49, - 0x40, 0x08, 0x07, 0x80, 0x0f, 0x80, 0xd0, 0x1b, - 0x20, 0x00, 0x49, 0xad, 0x68, 0x09, 0x31, 0x60, - 0x76, 0x88, 0x20, 0x51, 0x49, 0xaa, 0x68, 0x09, - 0x6f, 0xc9, 0x72, 0x48, 0x48, 0xa8, 0x68, 0x00, - 0x6f, 0xc0, 0x7a, 0x00, 0x28, 0xff, 0xd0, 0x07, - 0x48, 0xa5, 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x01, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x07, 0xf9, 0xea, - 0x20, 0x51, 0xb0, 0x03, 0xe7, 0x55, 0xe1, 0x6c, - 0x20, 0x33, 0x06, 0x40, 0x6b, 0x81, 0x91, 0x00, - 0x99, 0x00, 0x20, 0x04, 0x40, 0x08, 0xd0, 0x07, - 0x20, 0x04, 0xf0, 0x00, 0xfc, 0xb3, 0x20, 0x33, - 0x06, 0x40, 0x6b, 0x81, 0x91, 0x00, 0xe7, 0xf3, - 0x4d, 0x9d, 0x99, 0x00, 0x01, 0x08, 0x19, 0x45, - 0x48, 0x95, 0x68, 0x00, 0x6f, 0x40, 0x28, 0xbc, - 0xdd, 0x07, 0x48, 0x9a, 0x60, 0xa8, 0x20, 0xbc, - 0x49, 0x91, 0x68, 0x09, 0x31, 0x80, 0x70, 0x08, - 0xe0, 0x0d, 0x48, 0x8f, 0x68, 0x00, 0x6f, 0x40, - 0x23, 0x01, 0x07, 0x9b, 0x43, 0x18, 0x60, 0xa8, - 0x48, 0x8b, 0x68, 0x00, 0x6f, 0x40, 0x49, 0x8a, - 0x68, 0x09, 0x31, 0x80, 0x70, 0x08, 0x48, 0x90, - 0x90, 0x01, 0x48, 0x87, 0x68, 0x00, 0x30, 0x80, - 0x78, 0x80, 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, - 0x99, 0x01, 0x18, 0x40, 0x90, 0x01, 0x48, 0x82, - 0x68, 0x00, 0x6f, 0x00, 0x60, 0x28, 0x98, 0x01, - 0x30, 0x04, 0x60, 0x68, 0x20, 0x01, 0x06, 0x00, - 0x60, 0xe8, 0x99, 0x00, 0x20, 0x01, 0x40, 0x88, - 0x21, 0x33, 0x06, 0x49, 0x63, 0x48, 0x48, 0x83, - 0x6b, 0x00, 0x23, 0x01, 0x06, 0x1b, 0x40, 0x18, - 0xd1, 0x03, 0x20, 0x04, 0xf0, 0x00, 0xfc, 0x6a, - 0xe7, 0xf5, 0x20, 0x01, 0x06, 0x00, 0x21, 0x33, - 0x06, 0x49, 0x60, 0x48, 0x4e, 0x7c, 0x48, 0x72, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x01, 0x00, - 0x19, 0x86, 0x98, 0x01, 0x30, 0x04, 0x60, 0x30, - 0x48, 0x78, 0x60, 0x70, 0x48, 0x6c, 0x68, 0x00, - 0x30, 0x80, 0x78, 0x00, 0x23, 0x01, 0x07, 0x9b, - 0x43, 0x18, 0x60, 0xb0, 0x20, 0x01, 0x05, 0x80, - 0x60, 0xf0, 0x48, 0x67, 0x68, 0x00, 0x30, 0x80, - 0x78, 0x81, 0x20, 0x01, 0x40, 0x88, 0x49, 0x65, - 0x60, 0xc8, 0x48, 0x63, 0x68, 0x00, 0x30, 0x60, - 0x7e, 0x00, 0x49, 0x61, 0x68, 0x09, 0x5c, 0x08, - 0x28, 0x00, 0xd0, 0x48, 0x28, 0x01, 0xd0, 0x47, - 0x28, 0x02, 0xd0, 0x02, 0x28, 0x03, 0xd0, 0x21, - 0xe0, 0x5a, 0x48, 0x67, 0x68, 0x01, 0x23, 0x02, - 0x43, 0x19, 0x60, 0x01, 0x48, 0x58, 0x68, 0x00, - 0x6f, 0x40, 0x49, 0x57, 0x68, 0x09, 0x31, 0x80, - 0x78, 0x09, 0x1a, 0x40, 0x28, 0xbc, 0xd8, 0x05, - 0x48, 0x5f, 0x68, 0x01, 0x23, 0x10, 0x43, 0x19, - 0x60, 0x01, 0xe0, 0x05, 0x48, 0x5c, 0x68, 0x01, - 0x23, 0x10, 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, - 0x48, 0x59, 0x68, 0x01, 0x23, 0x08, 0x43, 0x19, - 0x60, 0x01, 0xe0, 0x39, 0x48, 0x56, 0x68, 0x01, - 0x23, 0x04, 0x43, 0x19, 0x60, 0x01, 0x48, 0x48, - 0x68, 0x00, 0x6f, 0x40, 0x49, 0x46, 0x68, 0x09, - 0x31, 0x80, 0x78, 0x09, 0x1a, 0x40, 0x28, 0xbc, - 0xd8, 0x05, 0x48, 0x4f, 0x68, 0x01, 0x23, 0x10, - 0x43, 0x19, 0x60, 0x01, 0xe0, 0x05, 0x48, 0x4c, - 0x68, 0x01, 0x23, 0x10, 0x43, 0xdb, 0x40, 0x19, - 0x60, 0x01, 0x48, 0x49, 0x68, 0x01, 0x23, 0x08, - 0x43, 0x19, 0x60, 0x01, 0xe0, 0x18, 0xe0, 0x17, - 0x48, 0x46, 0x68, 0x01, 0x04, 0x09, 0x0c, 0x09, - 0x60, 0x01, 0x48, 0x44, 0x49, 0x36, 0x68, 0x09, - 0x31, 0x80, 0x78, 0x09, 0x04, 0x09, 0x68, 0x02, - 0x43, 0x11, 0x60, 0x01, 0x48, 0x40, 0x68, 0x01, - 0x23, 0x20, 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, - 0x20, 0x01, 0x49, 0x34, 0x63, 0x08, 0xe7, 0xff, - 0x48, 0x36, 0x6b, 0x00, 0x23, 0x01, 0x05, 0x9b, - 0x40, 0x18, 0xd1, 0x03, 0x20, 0x04, 0xf0, 0x00, - 0xfb, 0xd1, 0xe7, 0xf5, 0x20, 0x01, 0x05, 0x80, - 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, 0x48, 0x26, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x80, 0x23, 0x01, - 0x40, 0x58, 0x49, 0x23, 0x68, 0x09, 0x31, 0x80, - 0x70, 0x88, 0x48, 0x21, 0x68, 0x00, 0x6f, 0x40, - 0x49, 0x1f, 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, - 0x1a, 0x40, 0x49, 0x1d, 0x68, 0x09, 0x67, 0x48, - 0x48, 0x1b, 0x68, 0x00, 0x6f, 0xc0, 0x30, 0x04, - 0x49, 0x19, 0x68, 0x09, 0x31, 0x80, 0x78, 0x09, - 0x68, 0x02, 0x18, 0x89, 0x60, 0x01, 0x48, 0x16, - 0x68, 0x00, 0x6f, 0x00, 0x49, 0x14, 0x68, 0x09, - 0x31, 0x80, 0x78, 0x09, 0x18, 0x40, 0x49, 0x12, - 0x68, 0x09, 0x67, 0x08, 0x48, 0x10, 0x68, 0x00, - 0x6f, 0x40, 0x28, 0x00, 0xd0, 0x00, 0xe6, 0xb3, - 0x48, 0x11, 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, - 0x48, 0x0e, 0x68, 0x01, 0x4b, 0x19, 0x40, 0x19, - 0x60, 0x01, 0x20, 0x48, 0x49, 0x08, 0x68, 0x09, - 0x6f, 0xc9, 0x72, 0x48, 0x20, 0x00, 0x49, 0x06, - 0x68, 0x09, 0x31, 0x60, 0x76, 0x88, 0x48, 0x04, - 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x00, 0x28, 0xff, - 0xd0, 0x29, 0x48, 0x01, 0xe0, 0x20, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xb0, 0x66, 0x00, 0x01, 0x00, - 0x62, 0x00, 0x00, 0x1c, 0x66, 0x00, 0x00, 0x08, - 0x23, 0x48, 0x00, 0x00, 0x62, 0x01, 0x00, 0x00, - 0x9e, 0x00, 0x09, 0x80, 0x40, 0x00, 0x00, 0xbc, - 0x9e, 0x00, 0x0b, 0x80, 0x66, 0x00, 0x00, 0x80, - 0x9e, 0x00, 0x09, 0xc0, 0x66, 0x00, 0x01, 0xf0, - 0x64, 0x00, 0x00, 0x60, 0x62, 0x01, 0x00, 0x20, - 0x62, 0x01, 0x00, 0x24, 0xfc, 0xb7, 0xff, 0xff, - 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x01, 0x20, 0x01, - 0x40, 0x88, 0xf0, 0x07, 0xf8, 0x7f, 0x20, 0x00, - 0xb0, 0x03, 0xe5, 0xea, 0xb0, 0x02, 0xb0, 0x01, - 0xe5, 0xe7, 0xe5, 0xe6, 0xb5, 0xb0, 0x1c, 0x07, - 0x06, 0x3d, 0x0e, 0x2d, 0x48, 0x5d, 0x68, 0x00, - 0x5d, 0x44, 0x2d, 0x20, 0xdb, 0x03, 0x20, 0xa2, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x48, 0x59, - 0x68, 0x00, 0x5d, 0x40, 0x28, 0xff, 0xd1, 0x01, - 0x20, 0x4b, 0xe7, 0xf5, 0x48, 0x56, 0x69, 0x80, - 0x28, 0x00, 0xd1, 0x05, 0x2c, 0x02, 0xd0, 0x03, - 0x2c, 0x03, 0xd0, 0x01, 0x2c, 0x04, 0xd1, 0x0b, - 0x48, 0x51, 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, - 0x2c, 0x00, 0xd1, 0x05, 0x48, 0x4e, 0x69, 0x80, - 0x28, 0x01, 0xd1, 0x04, 0x2c, 0x01, 0xd0, 0x02, - 0x20, 0x4d, 0xe7, 0xdd, 0xe0, 0x90, 0x48, 0x4b, - 0x68, 0x01, 0x4b, 0x4b, 0x43, 0x19, 0x60, 0x01, - 0x48, 0x49, 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, - 0x48, 0x48, 0x68, 0x01, 0x23, 0x04, 0x43, 0x19, - 0x60, 0x01, 0x20, 0x00, 0x49, 0x41, 0x68, 0x09, - 0x31, 0x80, 0x70, 0x88, 0x20, 0x00, 0x49, 0x3f, - 0x68, 0x09, 0x31, 0x80, 0x70, 0x48, 0x20, 0xff, - 0x49, 0x3c, 0x68, 0x09, 0x55, 0x48, 0x2c, 0x00, - 0xd1, 0x03, 0x20, 0x18, 0x21, 0x31, 0x06, 0x49, - 0x62, 0x48, 0x01, 0x20, 0x49, 0x37, 0x68, 0x09, - 0x18, 0x40, 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, - 0xd0, 0x28, 0x20, 0x00, 0x49, 0x38, 0x60, 0x08, - 0x20, 0x00, 0x49, 0x38, 0x64, 0x08, 0x20, 0x03, - 0x49, 0x31, 0x61, 0x08, 0x21, 0x55, 0x01, 0x20, - 0x4a, 0x2e, 0x68, 0x12, 0x18, 0x80, 0x6a, 0xc0, - 0x72, 0x41, 0x21, 0x00, 0x01, 0x20, 0x4a, 0x2b, - 0x68, 0x12, 0x18, 0x80, 0x30, 0x20, 0x72, 0x81, - 0x01, 0x20, 0x49, 0x28, 0x68, 0x09, 0x18, 0x40, - 0x6a, 0xc0, 0x7a, 0x00, 0x28, 0xff, 0xd0, 0x09, - 0x01, 0x20, 0x49, 0x24, 0x68, 0x09, 0x18, 0x40, - 0x6a, 0xc0, 0x7a, 0x01, 0x20, 0x01, 0x40, 0x88, - 0xf0, 0x06, 0xff, 0xf8, 0x48, 0x1f, 0x68, 0x00, - 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, 0xd0, 0x2b, - 0x48, 0x1c, 0x68, 0x00, 0x30, 0x80, 0x78, 0xc0, - 0x28, 0x00, 0xd0, 0x0d, 0x20, 0x00, 0x49, 0x19, - 0x68, 0x09, 0x31, 0x80, 0x70, 0xc8, 0x22, 0x00, - 0xb4, 0x04, 0x1c, 0x28, 0x23, 0x00, 0x22, 0x00, - 0x49, 0x1b, 0xf7, 0xf3, 0xfe, 0xcd, 0xb0, 0x01, - 0x20, 0x55, 0x49, 0x12, 0x68, 0x09, 0x6f, 0xc9, - 0x72, 0x48, 0x20, 0x00, 0x49, 0x0f, 0x68, 0x09, - 0x31, 0x60, 0x76, 0x88, 0x48, 0x0d, 0x68, 0x00, - 0x6f, 0xc0, 0x7a, 0x00, 0x28, 0xff, 0xd0, 0x07, - 0x48, 0x0a, 0x68, 0x00, 0x6f, 0xc0, 0x7a, 0x01, - 0x20, 0x01, 0x40, 0x88, 0xf0, 0x06, 0xff, 0xc6, - 0x48, 0x09, 0x21, 0x33, 0x06, 0x49, 0x60, 0x48, - 0x48, 0x06, 0x68, 0x01, 0x4b, 0x0b, 0x40, 0x19, - 0x60, 0x01, 0x20, 0x00, 0xe7, 0x4c, 0xe7, 0x4b, - 0xe7, 0x4a, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0x00, 0x66, 0x00, 0x00, 0x08, - 0x23, 0x48, 0x00, 0x00, 0x66, 0x00, 0x01, 0x18, - 0x9e, 0x00, 0x0a, 0x00, 0x9e, 0x00, 0x0a, 0x80, - 0x00, 0x00, 0xff, 0xff, 0xfc, 0xb7, 0xff, 0xff, - 0xb5, 0xff, 0x1c, 0x1f, 0x98, 0x00, 0x06, 0x02, - 0x0e, 0x12, 0x99, 0x01, 0x06, 0x0d, 0x0e, 0x2d, - 0x98, 0x02, 0x06, 0x04, 0x0e, 0x24, 0x48, 0x2d, - 0x68, 0x00, 0x5c, 0x81, 0x2a, 0x20, 0xdb, 0x04, - 0x20, 0xa2, 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x29, 0xff, 0xd1, 0x01, 0x20, 0x4b, - 0xe7, 0xf7, 0x48, 0x27, 0x69, 0x80, 0x28, 0x00, - 0xd1, 0x05, 0x29, 0x02, 0xd0, 0x03, 0x29, 0x03, - 0xd0, 0x01, 0x29, 0x04, 0xd1, 0x0b, 0x48, 0x22, - 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, 0x29, 0x00, - 0xd1, 0x05, 0x48, 0x1f, 0x69, 0x80, 0x28, 0x01, - 0xd1, 0x03, 0x29, 0x01, 0xd0, 0x01, 0x20, 0x4d, - 0xe7, 0xdf, 0x29, 0x05, 0xd2, 0x2a, 0xa3, 0x02, - 0x5c, 0x5b, 0x00, 0x5b, 0x44, 0x9f, 0x1c, 0x00, - 0x03, 0x07, 0x04, 0x05, 0x06, 0x00, 0xe0, 0x24, - 0xe0, 0x23, 0xe0, 0x22, 0xe0, 0x21, 0x01, 0x08, - 0x4b, 0x12, 0x68, 0x1b, 0x18, 0xc0, 0x30, 0x20, - 0x7a, 0x80, 0x28, 0x00, 0xd1, 0x05, 0x48, 0x0f, - 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x49, 0xe7, 0xc1, 0xe0, 0x13, - 0x2d, 0x00, 0xd1, 0x05, 0x00, 0xa0, 0x4b, 0x0b, - 0x18, 0xc0, 0x68, 0x00, 0x60, 0x38, 0xe0, 0x04, - 0x68, 0x38, 0x00, 0xa6, 0x4b, 0x07, 0x18, 0xf3, - 0x60, 0x18, 0xe0, 0x02, 0x20, 0x4a, 0xe7, 0xb0, - 0xe7, 0xff, 0x20, 0x00, 0xe7, 0xad, 0xe7, 0xac, - 0xe7, 0xab, 0x00, 0x00, 0x2e, 0x08, 0xb9, 0xb0, - 0x66, 0x00, 0x01, 0x00, 0x62, 0x01, 0x00, 0x80, - 0xb5, 0xf7, 0xb0, 0x82, 0x98, 0x02, 0x06, 0x03, - 0x0e, 0x1b, 0x93, 0x00, 0x99, 0x03, 0x06, 0x08, - 0x0e, 0x00, 0x90, 0x01, 0x9a, 0x04, 0x06, 0x15, - 0x0e, 0x2d, 0xb0, 0x84, 0x4a, 0xca, 0x4f, 0xcb, - 0x48, 0xcb, 0x68, 0x00, 0x9b, 0x04, 0x5c, 0xc4, - 0x48, 0xca, 0x90, 0x02, 0x21, 0x00, 0x23, 0x00, - 0x93, 0x01, 0x9b, 0x04, 0x2b, 0x20, 0xdb, 0x05, - 0x20, 0xa2, 0xb0, 0x06, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2c, 0xff, 0xd1, 0x02, - 0x20, 0x4b, 0xb0, 0x06, 0xe7, 0xf6, 0x48, 0xc2, - 0x69, 0x80, 0x28, 0x02, 0xd1, 0x01, 0x2c, 0x00, - 0xd1, 0x03, 0x48, 0xbf, 0x69, 0x80, 0x28, 0x02, - 0xd0, 0x02, 0x20, 0x4d, 0xb0, 0x06, 0xe7, 0xe9, - 0x98, 0x05, 0x28, 0x01, 0xd1, 0x08, 0x48, 0xb8, - 0x68, 0x00, 0x30, 0x80, 0x78, 0xc0, 0x28, 0x00, - 0xd0, 0x02, 0x20, 0x50, 0xb0, 0x06, 0xe7, 0xdd, - 0x98, 0x05, 0x28, 0x00, 0xd1, 0x05, 0x48, 0xb2, - 0x68, 0x00, 0x30, 0x20, 0x7a, 0x80, 0x28, 0x00, - 0xd0, 0x08, 0x98, 0x05, 0x28, 0x01, 0xd1, 0x08, - 0x48, 0xad, 0x68, 0x00, 0x30, 0x60, 0x7e, 0x80, - 0x28, 0x00, 0xd1, 0x02, 0x20, 0x5a, 0xb0, 0x06, - 0xe7, 0xc8, 0x20, 0x00, 0x4b, 0xa8, 0x68, 0x1b, - 0x6f, 0xdb, 0x72, 0x58, 0x98, 0x05, 0x28, 0x00, - 0xd1, 0x50, 0x2d, 0x01, 0xd0, 0x01, 0x2d, 0x02, - 0xd1, 0x32, 0x4e, 0xa6, 0x68, 0x30, 0x23, 0x01, - 0x04, 0xdb, 0x43, 0x18, 0x60, 0x30, 0x20, 0x00, - 0x4b, 0xa3, 0x60, 0x18, 0x48, 0x9e, 0x68, 0x00, - 0x30, 0x80, 0x78, 0x40, 0x00, 0x43, 0x18, 0x18, - 0x01, 0x80, 0x9b, 0x02, 0x18, 0xc0, 0x90, 0x02, - 0x98, 0x02, 0x68, 0x01, 0x48, 0x9a, 0x69, 0x80, - 0x07, 0x80, 0x0f, 0x80, 0x01, 0x80, 0x43, 0x01, - 0x23, 0x20, 0x43, 0x19, 0x4b, 0x99, 0x43, 0x19, - 0x98, 0x02, 0x60, 0x01, 0x4e, 0x98, 0x68, 0x30, - 0x23, 0x01, 0x04, 0xdb, 0x43, 0x18, 0x60, 0x30, - 0x4e, 0x92, 0x68, 0x30, 0x4b, 0x95, 0x40, 0x18, - 0x60, 0x30, 0x2c, 0x00, 0xd1, 0x04, 0x20, 0x00, - 0x4b, 0x8b, 0x68, 0x1b, 0x33, 0x20, 0x72, 0x98, - 0x2d, 0x02, 0xd0, 0x04, 0x20, 0x01, 0x04, 0xc0, - 0x23, 0x33, 0x06, 0x5b, 0x60, 0x18, 0x2c, 0x00, - 0xd1, 0x0f, 0x20, 0xff, 0x02, 0x00, 0x40, 0x08, - 0xd1, 0x0b, 0x2d, 0x02, 0xd0, 0x09, 0x48, 0x82, - 0x68, 0x00, 0x30, 0x80, 0x78, 0x40, 0x23, 0x01, - 0x40, 0x58, 0x4b, 0x7f, 0x68, 0x1b, 0x33, 0x80, - 0x70, 0x58, 0xe0, 0xed, 0x2d, 0x01, 0xd1, 0x73, - 0x2c, 0x00, 0xd1, 0x72, 0x20, 0x31, 0x06, 0x40, - 0x68, 0x80, 0x23, 0x08, 0x40, 0x18, 0xd1, 0x3a, - 0x48, 0x7a, 0x68, 0x06, 0x23, 0x05, 0x05, 0x9b, - 0x43, 0x33, 0x60, 0x03, 0x68, 0x10, 0x4b, 0x7c, - 0x40, 0x18, 0x60, 0x10, 0x32, 0xc0, 0x68, 0x10, - 0x4b, 0x79, 0x40, 0x18, 0x60, 0x10, 0x20, 0x00, - 0x4b, 0x6f, 0x68, 0x1b, 0x67, 0x58, 0x20, 0x00, - 0x4b, 0x6d, 0x68, 0x1b, 0x33, 0x80, 0x70, 0x18, - 0x48, 0x6d, 0x68, 0x80, 0x23, 0x02, 0x40, 0x18, - 0xd1, 0x04, 0x20, 0x00, 0x4b, 0x68, 0x68, 0x1b, - 0x33, 0x60, 0x76, 0x98, 0x20, 0x5b, 0x4b, 0x66, - 0x68, 0x1b, 0x6f, 0xdb, 0x72, 0x58, 0x4e, 0x6d, - 0x68, 0x30, 0x23, 0x02, 0x43, 0x18, 0x60, 0x30, - 0x4e, 0x67, 0x68, 0x30, 0x23, 0x05, 0x05, 0x9b, - 0x43, 0x18, 0x60, 0x30, 0x4e, 0x61, 0x68, 0x30, - 0x4b, 0x67, 0x40, 0x18, 0x60, 0x30, 0x20, 0x5b, - 0xb0, 0x06, 0xe7, 0x2b, 0xe0, 0xae, 0x48, 0x5d, - 0x68, 0x06, 0x23, 0x01, 0x05, 0x9b, 0x43, 0x33, - 0x60, 0x03, 0x20, 0x31, 0x06, 0x40, 0x6a, 0x00, - 0x23, 0x04, 0x40, 0x18, 0xd1, 0x27, 0x9b, 0x01, - 0x20, 0x31, 0x06, 0x40, 0x6b, 0x00, 0x18, 0x1b, - 0x93, 0x01, 0x4e, 0x5c, 0x68, 0x30, 0x23, 0x3b, - 0x40, 0x18, 0x60, 0x30, 0x4e, 0x57, 0x68, 0x30, - 0x23, 0x0e, 0x43, 0x18, 0x60, 0x30, 0x4e, 0x55, - 0x68, 0x30, 0x23, 0x0c, 0x40, 0x18, 0x60, 0x30, - 0x20, 0x37, 0x23, 0x31, 0x06, 0x5b, 0x60, 0x98, - 0x20, 0x01, 0x90, 0x00, 0x98, 0x00, 0x28, 0x64, - 0xd3, 0x04, 0xe0, 0x07, 0x98, 0x00, 0x30, 0x01, - 0x90, 0x00, 0xe7, 0xf7, 0xe7, 0xfa, 0xe0, 0x01, - 0xe0, 0x36, 0xe0, 0x34, 0xe7, 0xd1, 0x4e, 0x46, - 0x68, 0x30, 0x23, 0x01, 0x05, 0x9b, 0x43, 0x18, - 0x60, 0x30, 0x4e, 0x40, 0x68, 0x30, 0x4b, 0x48, - 0x40, 0x18, 0x60, 0x30, 0x48, 0x3c, 0x68, 0x40, - 0x28, 0x00, 0xd0, 0x0d, 0x20, 0x5b, 0x4b, 0x38, - 0x68, 0x1b, 0x6f, 0xdb, 0x72, 0x58, 0x20, 0x00, - 0x4b, 0x35, 0x68, 0x1b, 0x33, 0x60, 0x76, 0x98, - 0x20, 0x5b, 0xb0, 0x06, 0xe6, 0xda, 0xe0, 0x5d, - 0x48, 0x31, 0x68, 0x00, 0x6f, 0xc0, 0x1d, 0x06, - 0x48, 0x2f, 0x68, 0x00, 0x30, 0x80, 0x78, 0x00, - 0x9b, 0x01, 0x1a, 0xc0, 0x68, 0x33, 0x18, 0xc0, - 0x60, 0x30, 0x20, 0x5c, 0x4b, 0x2a, 0x68, 0x1b, - 0x6f, 0xdb, 0x72, 0x58, 0x20, 0x00, 0x4b, 0x28, - 0x68, 0x1b, 0x33, 0x60, 0x76, 0x98, 0xe0, 0x3f, - 0x20, 0x33, 0x06, 0x40, 0x6b, 0x80, 0x90, 0x03, - 0x23, 0x04, 0x40, 0x18, 0xd0, 0x03, 0x20, 0x52, - 0xb0, 0x06, 0xe6, 0xb7, 0xe0, 0x3a, 0x98, 0x03, - 0x01, 0x00, 0x19, 0xc7, 0x48, 0x1e, 0x68, 0x00, - 0x6f, 0x40, 0x28, 0xbc, 0xdd, 0x07, 0x48, 0x29, - 0x60, 0xb8, 0x20, 0xbc, 0x4b, 0x1a, 0x68, 0x1b, - 0x33, 0x80, 0x70, 0x18, 0xe0, 0x0d, 0x48, 0x18, - 0x68, 0x00, 0x6f, 0x40, 0x23, 0x01, 0x07, 0x9b, - 0x43, 0x18, 0x60, 0xb8, 0x48, 0x14, 0x68, 0x00, - 0x6f, 0x40, 0x4b, 0x13, 0x68, 0x1b, 0x33, 0x80, - 0x70, 0x18, 0x48, 0x11, 0x68, 0x00, 0x30, 0x80, - 0x78, 0x80, 0x00, 0x43, 0x18, 0x18, 0x01, 0x80, - 0x18, 0x82, 0x48, 0x0d, 0x68, 0x00, 0x6f, 0x00, - 0x60, 0x38, 0x1d, 0x10, 0x60, 0x78, 0x20, 0x01, - 0x06, 0x00, 0x60, 0xf8, 0x9e, 0x03, 0x20, 0x01, - 0x40, 0xb0, 0x23, 0x33, 0x06, 0x5b, 0x63, 0x58, - 0x20, 0x00, 0xb0, 0x06, 0xe6, 0x7e, 0xb0, 0x04, - 0xb0, 0x02, 0xe6, 0x7b, 0xe6, 0x7a, 0x00, 0x00, - 0x9e, 0x00, 0x0b, 0x80, 0x9e, 0x00, 0x09, 0x80, - 0x2e, 0x08, 0xb9, 0xb0, 0x9e, 0x00, 0x0a, 0x00, - 0x66, 0x00, 0x01, 0x00, 0x66, 0x00, 0x00, 0x08, - 0x62, 0x00, 0x03, 0x00, 0x80, 0x00, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x04, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xff, 0x00, 0xff, 0x62, 0x00, 0x00, 0x1c, - 0xfe, 0xbf, 0xff, 0xff, 0x62, 0x00, 0x00, 0x08, - 0xff, 0xbf, 0xff, 0xff, 0x40, 0x00, 0x00, 0xbc, - 0x48, 0x07, 0x69, 0x80, 0x28, 0x02, 0xd0, 0x03, - 0x48, 0x05, 0x69, 0x80, 0x28, 0x03, 0xd1, 0x04, - 0x20, 0x31, 0x06, 0x40, 0x6a, 0x80, 0x47, 0x70, - 0xe0, 0x01, 0x20, 0x00, 0xe7, 0xfb, 0xe7, 0xfa, - 0x66, 0x00, 0x01, 0x00, 0xb5, 0xb0, 0x27, 0x0f, - 0x20, 0x31, 0x06, 0x40, 0x68, 0xc0, 0x09, 0x05, - 0xf7, 0xff, 0xff, 0xe6, 0x43, 0xc4, 0x48, 0x18, - 0x69, 0x80, 0x28, 0x00, 0xd0, 0x03, 0x48, 0x16, - 0x69, 0x80, 0x28, 0x01, 0xd1, 0x03, 0x1c, 0x38, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x2d, 0x09, - 0xd2, 0x1e, 0xa3, 0x02, 0x5d, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x05, 0x05, 0x05, 0x05, - 0x05, 0x07, 0x07, 0x07, 0x0e, 0x00, 0x1c, 0x2f, - 0xe0, 0x13, 0x20, 0x08, 0x40, 0x20, 0xd0, 0x01, - 0x1c, 0x2f, 0xe0, 0x00, 0x27, 0x02, 0xe0, 0x0c, - 0x20, 0x08, 0x40, 0x20, 0xd0, 0x06, 0x20, 0x02, - 0x40, 0x20, 0xd0, 0x01, 0x27, 0x07, 0xe0, 0x00, - 0x27, 0x08, 0xe0, 0x00, 0x27, 0x02, 0xe0, 0x00, - 0xe7, 0xff, 0x1c, 0x38, 0xe7, 0xd8, 0xe7, 0xd7, - 0x66, 0x00, 0x01, 0x00, 0x1c, 0x01, 0x29, 0x07, - 0xd2, 0x0f, 0xa3, 0x02, 0x5c, 0x5b, 0x00, 0x5b, - 0x44, 0x9f, 0x1c, 0x00, 0x04, 0x05, 0x06, 0x09, - 0x08, 0x07, 0x0a, 0x00, 0xe0, 0x06, 0xe0, 0x05, - 0xe0, 0x04, 0xe0, 0x03, 0xe0, 0x02, 0xe0, 0x01, - 0xe0, 0x00, 0xe7, 0xff, 0x20, 0x00, 0x47, 0x70, - 0xe7, 0xfd, 0x00, 0x00, 0x20, 0x1d, 0x02, 0x80, - 0x69, 0x80, 0x49, 0x06, 0x60, 0x08, 0x20, 0x1d, - 0x02, 0x80, 0x69, 0x40, 0x49, 0x04, 0x60, 0x08, - 0x20, 0x1d, 0x02, 0x80, 0x69, 0xc0, 0x49, 0x03, - 0x60, 0x08, 0x47, 0x70, 0x2e, 0x08, 0xd1, 0xfc, - 0x2e, 0x08, 0xd2, 0x00, 0x2e, 0x08, 0xd2, 0x04, - 0xb5, 0xf1, 0xb0, 0x81, 0x20, 0x00, 0x4d, 0x21, - 0x95, 0x00, 0x21, 0x00, 0x22, 0x00, 0x23, 0x00, - 0x43, 0xdb, 0x4c, 0x1f, 0x68, 0x64, 0x42, 0x8c, - 0xdd, 0x21, 0x1c, 0x0c, 0x31, 0x01, 0x00, 0xa4, - 0x9d, 0x00, 0x59, 0x2f, 0x42, 0x9f, 0xd0, 0xf8, - 0x4c, 0x19, 0x68, 0x64, 0x42, 0x8c, 0xda, 0x00, - 0xe0, 0x15, 0x32, 0x01, 0x1c, 0x0c, 0x31, 0x01, - 0x00, 0xa4, 0x9d, 0x00, 0x59, 0x2b, 0x42, 0x9f, - 0xd0, 0xf8, 0x02, 0x9c, 0x43, 0x3c, 0x1c, 0x25, - 0x1c, 0x04, 0x30, 0x01, 0x00, 0xa4, 0x9e, 0x01, - 0x51, 0x35, 0x4c, 0x0f, 0x68, 0x64, 0x42, 0x8c, - 0xdb, 0x00, 0x32, 0x01, 0xe7, 0xd9, 0x28, 0x08, - 0xd3, 0x02, 0xe0, 0x07, 0x30, 0x01, 0xe7, 0xfa, - 0x25, 0x00, 0x43, 0xed, 0x00, 0x84, 0x9e, 0x01, - 0x51, 0x35, 0xe7, 0xf7, 0x4c, 0x07, 0x68, 0x24, - 0x2c, 0x00, 0xd1, 0x02, 0x24, 0x0d, 0x06, 0xe4, - 0x61, 0x22, 0xb0, 0x01, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xba, 0x38, - 0x2e, 0x08, 0xbb, 0x00, 0x2e, 0x08, 0xd1, 0xf0, - 0xb5, 0x80, 0x48, 0xdc, 0x68, 0x00, 0x28, 0x00, - 0xd1, 0x04, 0x48, 0xda, 0x68, 0x00, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, 0xff, 0x92, - 0x48, 0xd7, 0x49, 0xd8, 0x60, 0x08, 0x48, 0xd8, - 0x49, 0xd8, 0x60, 0x08, 0x48, 0xd8, 0x49, 0xd9, - 0x60, 0x08, 0x48, 0xd3, 0x49, 0xd8, 0x68, 0x0b, - 0x4a, 0xd8, 0x21, 0x00, 0xf0, 0x01, 0xf8, 0xda, - 0x20, 0x00, 0x49, 0xd0, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x00, 0x49, 0xd0, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x00, 0x49, 0xd0, 0x68, 0x09, 0x60, 0x08, - 0x20, 0x00, 0x49, 0xca, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x48, 0xce, - 0x49, 0xc6, 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0xc8, 0x20, 0x00, 0x49, 0xc5, - 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, - 0x66, 0x88, 0x48, 0xc7, 0x49, 0xc1, 0x68, 0x09, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x66, 0xc8, - 0x20, 0x00, 0x49, 0xc0, 0x68, 0x09, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xc9, 0x66, 0x88, 0x48, 0xc0, - 0x49, 0xbc, 0x68, 0x09, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x66, 0xc8, 0x27, 0x00, 0x2f, 0x19, - 0xd3, 0x02, 0xe0, 0x38, 0x37, 0x01, 0xe7, 0xfa, - 0x48, 0xba, 0x00, 0xb9, 0x4a, 0xb1, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, - 0x62, 0x08, 0x48, 0xb6, 0x00, 0xb9, 0x4a, 0xad, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0xb1, 0x00, 0xb9, - 0x4a, 0xaa, 0x68, 0x12, 0x18, 0x89, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x62, 0x08, 0x48, 0xad, - 0x00, 0xb9, 0x4a, 0xa6, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xc9, 0x60, 0x48, - 0x48, 0xa8, 0x00, 0xb9, 0x4a, 0xa3, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, - 0x62, 0x08, 0x48, 0xa4, 0x00, 0xb9, 0x4a, 0x9f, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xc9, 0x60, 0x48, 0xe7, 0xc6, 0x27, 0x00, - 0x2f, 0x07, 0xd3, 0x02, 0xe0, 0x86, 0x37, 0x01, - 0xe7, 0xfa, 0x48, 0x9c, 0x00, 0xb9, 0x19, 0xc9, - 0x00, 0xc9, 0x4a, 0x92, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x08, - 0x48, 0x96, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x8c, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x67, 0xc8, 0x48, 0x91, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x87, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0x8b, 0x00, 0xb9, - 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x81, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, - 0x67, 0x88, 0x48, 0x86, 0x00, 0xb9, 0x19, 0xc9, - 0x00, 0xc9, 0x4a, 0x7e, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x08, - 0x48, 0x80, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x78, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x67, 0xc8, 0x48, 0x7b, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x73, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0x75, 0x00, 0xb9, - 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x6d, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, - 0x67, 0x88, 0x48, 0x70, 0x00, 0xb9, 0x19, 0xc9, - 0x00, 0xc9, 0x4a, 0x6a, 0x68, 0x12, 0x18, 0x89, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, 0x60, 0x08, - 0x48, 0x6a, 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, - 0x4a, 0x64, 0x68, 0x12, 0x18, 0x89, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc9, 0x67, 0xc8, 0x48, 0x65, - 0x00, 0xb9, 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x5f, - 0x68, 0x12, 0x18, 0x89, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x60, 0x48, 0x48, 0x5f, 0x00, 0xb9, - 0x19, 0xc9, 0x00, 0xc9, 0x4a, 0x59, 0x68, 0x12, - 0x18, 0x89, 0x23, 0x05, 0x02, 0x1b, 0x18, 0xc9, - 0x67, 0x88, 0xe7, 0x78, 0x27, 0x00, 0x2f, 0x12, - 0xd3, 0x02, 0xe0, 0x56, 0x37, 0x01, 0xe7, 0xfa, - 0x48, 0x56, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x4d, - 0x68, 0x12, 0x18, 0x89, 0x62, 0xc8, 0x48, 0x53, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x49, 0x68, 0x12, - 0x18, 0x89, 0x62, 0x88, 0x48, 0x4f, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x46, 0x68, 0x12, 0x18, 0x89, - 0x63, 0x08, 0x48, 0x4c, 0x21, 0x4c, 0x43, 0x79, - 0x4a, 0x42, 0x68, 0x12, 0x18, 0x89, 0x62, 0x48, - 0x48, 0x48, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x41, - 0x68, 0x12, 0x18, 0x89, 0x62, 0xc8, 0x48, 0x45, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x3d, 0x68, 0x12, - 0x18, 0x89, 0x62, 0x88, 0x48, 0x41, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x3a, 0x68, 0x12, 0x18, 0x89, - 0x63, 0x08, 0x48, 0x3e, 0x21, 0x4c, 0x43, 0x79, - 0x4a, 0x36, 0x68, 0x12, 0x18, 0x89, 0x62, 0x48, - 0x48, 0x3a, 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x35, - 0x68, 0x12, 0x18, 0x89, 0x62, 0xc8, 0x48, 0x37, - 0x21, 0x4c, 0x43, 0x79, 0x4a, 0x31, 0x68, 0x12, - 0x18, 0x89, 0x62, 0x88, 0x48, 0x33, 0x21, 0x4c, - 0x43, 0x79, 0x4a, 0x2e, 0x68, 0x12, 0x18, 0x89, - 0x63, 0x08, 0x48, 0x30, 0x21, 0x4c, 0x43, 0x79, - 0x4a, 0x2a, 0x68, 0x12, 0x18, 0x89, 0x62, 0x48, - 0xe7, 0xa8, 0x20, 0x00, 0x49, 0x25, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0xc8, - 0x20, 0x00, 0x49, 0x22, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x20, 0x00, - 0x49, 0x1c, 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xc9, 0x61, 0xc8, 0x20, 0x00, 0x49, 0x19, - 0x68, 0x09, 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, - 0x61, 0x88, 0x20, 0x00, 0x49, 0x19, 0x68, 0x09, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xc9, 0x61, 0xc8, - 0x20, 0x00, 0x49, 0x16, 0x68, 0x09, 0x23, 0x0d, - 0x01, 0xdb, 0x18, 0xc9, 0x61, 0x88, 0x20, 0x92, - 0x49, 0x17, 0x60, 0x08, 0x27, 0x00, 0x2f, 0x08, - 0xd3, 0x02, 0xe0, 0x08, 0x37, 0x01, 0xe7, 0xfa, - 0x20, 0x00, 0x43, 0xc0, 0x00, 0xb9, 0x4b, 0x13, - 0x18, 0xc9, 0x64, 0x08, 0xe7, 0xf6, 0x20, 0x10, - 0x21, 0x0d, 0x06, 0xc9, 0x61, 0x08, 0x20, 0x01, - 0x49, 0x0f, 0x60, 0x08, 0x48, 0x0e, 0x68, 0x00, - 0xe6, 0x4d, 0xe6, 0x4c, 0x2e, 0x08, 0x9d, 0xf0, - 0x2e, 0x08, 0xbb, 0x28, 0x2e, 0x08, 0xbb, 0x1c, - 0x2e, 0x08, 0xc2, 0xc0, 0x2e, 0x08, 0xbb, 0x20, - 0x2e, 0x08, 0xca, 0x58, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xd2, 0x00, 0x00, 0x00, 0x16, 0xc8, - 0x3f, 0xff, 0xff, 0xff, 0x00, 0x00, 0xff, 0xff, - 0x2e, 0x08, 0xd1, 0xf4, 0x68, 0x00, 0x0d, 0x00, - 0x2e, 0x08, 0xd1, 0xf0, 0xb5, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0x1c, 0x39, 0x20, 0x00, 0xf0, 0x00, - 0xf8, 0x4d, 0x1c, 0x39, 0x1c, 0x20, 0xf0, 0x00, - 0xf8, 0x03, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0xf0, 0x1c, 0x04, 0x1c, 0x0f, 0x68, 0x78, - 0x28, 0x07, 0xd9, 0x1d, 0x23, 0x03, 0x02, 0x5b, - 0x18, 0xf8, 0x6d, 0x40, 0x28, 0x00, 0xd0, 0x06, - 0x23, 0x03, 0x02, 0x5b, 0x18, 0xf8, 0x6d, 0x80, - 0x04, 0x00, 0x0c, 0x00, 0xd1, 0x02, 0x20, 0x02, - 0x60, 0xb8, 0xe0, 0x01, 0x20, 0x03, 0x60, 0xb8, - 0x1d, 0xfd, 0x35, 0x05, 0x23, 0x65, 0x01, 0x1b, - 0x18, 0xfe, 0x1c, 0x31, 0x1c, 0x28, 0x4a, 0x11, - 0x68, 0x13, 0x22, 0x28, 0xf0, 0x00, 0xfe, 0xee, - 0x2c, 0x06, 0xd0, 0x18, 0x00, 0xa0, 0x19, 0x00, - 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x2b, 0x01, 0x5b, - 0x18, 0xc6, 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0xb1, 0x00, 0xdb, 0x18, 0xc5, - 0x20, 0x06, 0x1b, 0x00, 0x00, 0x82, 0x18, 0x12, - 0x00, 0xd2, 0x1c, 0x31, 0x1c, 0x28, 0x4b, 0x04, - 0x68, 0x1b, 0xf0, 0x00, 0xfe, 0xd3, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd1, 0xfc, - 0x2e, 0x08, 0xd2, 0x04, 0xb5, 0xf0, 0x1c, 0x07, - 0x1c, 0x0c, 0x2f, 0x10, 0xd0, 0x13, 0x20, 0x4c, - 0x43, 0x78, 0x19, 0x00, 0x1d, 0xc6, 0x36, 0x01, - 0x20, 0x4c, 0x43, 0x78, 0x19, 0x00, 0x1d, 0xc5, - 0x35, 0x4d, 0x20, 0x10, 0x1b, 0xc0, 0x22, 0x4c, - 0x43, 0x42, 0x1c, 0x31, 0x1c, 0x28, 0x4b, 0x03, - 0x68, 0x1b, 0xf0, 0x00, 0xfe, 0xb3, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd2, 0x04, - 0xb5, 0x90, 0x1c, 0x04, 0x1c, 0x0f, 0x1c, 0x39, - 0x1c, 0x20, 0xf0, 0x00, 0xf8, 0x07, 0x1c, 0x39, - 0x20, 0x00, 0xf0, 0x00, 0xf8, 0x33, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0xb1, 0x00, 0xdb, 0x18, 0xc6, - 0x00, 0xa0, 0x19, 0x00, 0x00, 0xc0, 0x19, 0xc0, - 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc5, 0x20, 0x06, - 0x1b, 0x00, 0x00, 0x82, 0x18, 0x12, 0x00, 0xd2, - 0x1c, 0x31, 0x1c, 0x28, 0x4b, 0x09, 0x68, 0x1b, - 0xf0, 0x00, 0xfe, 0x84, 0x1d, 0xfe, 0x36, 0x05, - 0x23, 0x65, 0x01, 0x1b, 0x18, 0xfd, 0x1c, 0x31, - 0x1c, 0x28, 0x4a, 0x05, 0x68, 0x13, 0x22, 0x28, - 0xf0, 0x00, 0xfe, 0x78, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0xd2, 0x04, - 0x2e, 0x08, 0xd1, 0xfc, 0xb5, 0xf0, 0x1c, 0x07, - 0x1c, 0x0c, 0x20, 0x4c, 0x43, 0x78, 0x19, 0x00, - 0x1d, 0xc6, 0x36, 0x4d, 0x20, 0x4c, 0x43, 0x78, - 0x19, 0x00, 0x1d, 0xc5, 0x35, 0x01, 0x20, 0x10, - 0x1b, 0xc0, 0x22, 0x4c, 0x43, 0x42, 0x1c, 0x31, - 0x1c, 0x28, 0x4b, 0x03, 0x68, 0x1b, 0xf0, 0x00, - 0xfe, 0x59, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd2, 0x04, 0xb4, 0xb0, 0x1c, 0x02, - 0x1c, 0x0f, 0x20, 0x00, 0x1c, 0x03, 0x30, 0x01, - 0x00, 0x9b, 0x18, 0x9c, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xe3, 0x68, 0x5b, 0x10, 0x7c, 0x34, 0x01, - 0x42, 0xa3, 0xd2, 0x00, 0xe7, 0xf2, 0x38, 0x01, - 0x21, 0x18, 0x42, 0x81, 0xd8, 0x02, 0xe0, 0x1a, - 0x39, 0x01, 0xe7, 0xfa, 0x00, 0x8b, 0x18, 0x9c, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xe3, 0x69, 0xdc, - 0x00, 0x8b, 0x18, 0x9d, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xeb, 0x62, 0x1c, 0x00, 0x8b, 0x18, 0x9c, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xe3, 0x68, 0x1c, - 0x00, 0x8b, 0x18, 0x9d, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xeb, 0x60, 0x5c, 0xe7, 0xe4, 0x23, 0x00, - 0x2b, 0x00, 0xd0, 0x10, 0x10, 0x7b, 0x1c, 0x5c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xeb, 0x62, 0x1c, 0x10, 0x7b, 0x1c, 0x5c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xeb, 0x60, 0x5c, 0xe0, 0x0e, 0x10, 0x7c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xeb, 0x62, 0x1c, 0x10, 0x7b, 0x1c, 0x5c, - 0x00, 0x83, 0x18, 0x9d, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xeb, 0x60, 0x5c, 0xbc, 0xb0, 0x47, 0x70, - 0xb4, 0xb0, 0x1c, 0x02, 0x1c, 0x0f, 0x21, 0x00, - 0x1c, 0x0b, 0x31, 0x01, 0x00, 0x9b, 0x18, 0x9c, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xe3, 0x68, 0x5b, - 0x10, 0x7c, 0x34, 0x01, 0x42, 0xa3, 0xd0, 0x00, - 0xe7, 0xf2, 0x39, 0x01, 0x1c, 0x08, 0x28, 0x18, - 0xd3, 0x02, 0xe0, 0x1a, 0x30, 0x01, 0xe7, 0xfa, - 0x00, 0x83, 0x18, 0x9c, 0x23, 0x0d, 0x01, 0xdb, - 0x18, 0xe3, 0x6a, 0x5c, 0x00, 0x83, 0x18, 0x9d, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xeb, 0x62, 0x1c, - 0x00, 0x83, 0x18, 0x9c, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xe3, 0x68, 0x9c, 0x00, 0x83, 0x18, 0x9d, - 0x23, 0x07, 0x02, 0x1b, 0x18, 0xeb, 0x60, 0x5c, - 0xe7, 0xe4, 0x4c, 0x06, 0x23, 0x07, 0x02, 0x1b, - 0x18, 0xd3, 0x60, 0x1c, 0x4c, 0x03, 0x23, 0x07, - 0x02, 0x1b, 0x18, 0xd3, 0x66, 0x5c, 0xbc, 0xb0, - 0x47, 0x70, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0xb4, 0xb0, 0x1c, 0x07, 0x1c, 0x0c, 0x1c, 0x15, - 0x6a, 0xa1, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x19, - 0x62, 0x39, 0x21, 0x01, 0x02, 0x89, 0x43, 0x29, - 0x62, 0x79, 0x6a, 0xe1, 0x05, 0x89, 0x0d, 0x89, - 0x61, 0xf9, 0x6b, 0x61, 0x31, 0x01, 0x05, 0x89, - 0x0d, 0x89, 0x61, 0xb9, 0x69, 0x61, 0x60, 0xf9, - 0x69, 0xa1, 0x61, 0x39, 0x69, 0xe1, 0x61, 0x79, - 0x68, 0xa1, 0x23, 0x01, 0x06, 0x1b, 0x40, 0x19, - 0xd0, 0x02, 0x49, 0x0f, 0x60, 0xb9, 0xe0, 0x01, - 0x21, 0x00, 0x60, 0xb9, 0x6a, 0x60, 0x28, 0x00, - 0xd0, 0x0b, 0x68, 0x41, 0x60, 0x39, 0x78, 0x01, - 0x00, 0x89, 0x4b, 0x0a, 0x18, 0xc9, 0x60, 0x79, - 0x68, 0xb9, 0x88, 0x42, 0x43, 0x11, 0x60, 0xb9, - 0xe0, 0x07, 0x21, 0x00, 0x60, 0x39, 0x21, 0x00, - 0x60, 0x79, 0x68, 0xb9, 0x0c, 0x09, 0x04, 0x09, - 0x60, 0xb9, 0xbc, 0xb0, 0x47, 0x70, 0x00, 0x00, - 0xff, 0xff, 0x00, 0x00, 0x68, 0x00, 0x08, 0x00, - 0xb4, 0x80, 0x1c, 0x02, 0x1c, 0x0f, 0x69, 0x79, - 0x60, 0xd1, 0x69, 0xb9, 0x61, 0x11, 0x69, 0xf9, - 0x61, 0x51, 0x68, 0xb9, 0x23, 0x01, 0x06, 0x1b, - 0x40, 0x19, 0xd0, 0x02, 0x49, 0x0e, 0x60, 0x91, - 0xe0, 0x01, 0x21, 0x00, 0x60, 0x91, 0x6a, 0x78, - 0x28, 0x00, 0xd0, 0x0b, 0x68, 0x41, 0x60, 0x11, - 0x78, 0x01, 0x00, 0x89, 0x4b, 0x09, 0x18, 0xc9, - 0x60, 0x51, 0x68, 0x91, 0x88, 0x43, 0x43, 0x19, - 0x60, 0x91, 0xe0, 0x07, 0x21, 0x00, 0x60, 0x11, - 0x21, 0x00, 0x60, 0x51, 0x68, 0x91, 0x0c, 0x09, - 0x04, 0x09, 0x60, 0x91, 0xbc, 0x80, 0x47, 0x70, - 0xff, 0xff, 0x00, 0x00, 0x68, 0x00, 0x08, 0x00, - 0x1c, 0x01, 0x48, 0x07, 0x62, 0x08, 0x48, 0x06, - 0x62, 0x48, 0x48, 0x05, 0x61, 0xc8, 0x48, 0x04, - 0x61, 0x88, 0x20, 0x00, 0x60, 0x08, 0x20, 0x00, - 0x60, 0x48, 0x20, 0x00, 0x60, 0x88, 0x47, 0x70, - 0x00, 0x00, 0xff, 0xff, 0xb5, 0xb0, 0x1c, 0x07, - 0x1c, 0x0c, 0x2c, 0x07, 0xd2, 0x73, 0x25, 0x00, - 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x2f, 0x35, 0x01, - 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, - 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, 0x00, 0xc9, - 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, - 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1a, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0xf8, - 0xf0, 0x00, 0xfb, 0xd2, 0xe7, 0xcf, 0x23, 0xcf, - 0x00, 0xdb, 0x18, 0xf8, 0xf7, 0xff, 0xfb, 0xb8, - 0x25, 0x00, 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x54, - 0x35, 0x01, 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, - 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc0, 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, - 0x00, 0xc9, 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc9, 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1a, - 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x40, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, - 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0xdb, 0xf0, 0x00, 0xfb, 0x6b, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, - 0x43, 0x69, 0x19, 0xc9, 0xe0, 0x00, 0xe0, 0x94, - 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0xcc, - 0xf0, 0x00, 0xfb, 0x7a, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, 0xfb, 0x60, - 0xe7, 0xaa, 0x25, 0x07, 0x2d, 0x11, 0xdb, 0x02, - 0xe0, 0x4e, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0x80, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, - 0x69, 0xc9, 0x42, 0x88, 0xd0, 0x18, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x80, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0xb1, 0xf0, 0x00, 0xfb, 0x16, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, - 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x01, 0x48, 0xa2, 0xf0, 0x00, - 0xfb, 0x27, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x30, 0x34, 0xf7, 0xff, 0xfb, 0x0d, 0xe7, 0xb0, - 0x25, 0x0a, 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x1f, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x8d, 0xf0, 0x00, 0xfa, 0xcf, 0xe7, 0xdf, - 0xe1, 0xca, 0x2c, 0x0e, 0xd3, 0x73, 0x3c, 0x07, - 0x1f, 0xe5, 0x42, 0xa5, 0xd3, 0x02, 0xe0, 0x1f, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x79, 0xf0, 0x00, 0xfa, 0xd5, 0xe7, 0xdf, - 0x1c, 0x25, 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x50, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x80, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, - 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, 0x69, 0xc9, - 0x42, 0x88, 0xd0, 0x18, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, 0x69, 0x80, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x61, 0xf0, 0x00, 0xfa, 0x77, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, - 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, - 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0x53, 0xf0, 0x00, 0xfa, 0x88, - 0x20, 0x4c, 0x43, 0x68, 0xe0, 0x00, 0xe0, 0x29, - 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, 0xfa, 0x6c, - 0xe7, 0xae, 0x25, 0x0a, 0x2d, 0x11, 0xdb, 0x02, - 0xe0, 0x1f, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, - 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, - 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0x3d, 0xf0, 0x00, 0xfa, 0x2e, - 0xe7, 0xdf, 0xe1, 0x29, 0x3c, 0x07, 0x1c, 0x25, - 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x2f, 0x35, 0x01, - 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, - 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, 0x00, 0xc9, - 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, - 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1a, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x40, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, - 0x01, 0xdb, 0x18, 0xc0, 0x68, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x22, - 0xf0, 0x00, 0xfa, 0x26, 0xe7, 0xcf, 0x25, 0x00, - 0x42, 0xa5, 0xd3, 0x02, 0xe0, 0x1f, 0x35, 0x01, - 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, - 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x10, - 0xf0, 0x00, 0xfa, 0x02, 0xe7, 0xdf, 0x1c, 0x25, - 0x2d, 0x07, 0xdb, 0x02, 0xe0, 0x55, 0x35, 0x01, - 0xe7, 0xfa, 0x00, 0xa8, 0x19, 0x40, 0x00, 0xc0, - 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc0, - 0x68, 0x00, 0x00, 0xa9, 0x19, 0x49, 0x00, 0xc9, - 0x19, 0xc9, 0x23, 0x0b, 0x01, 0xdb, 0x18, 0xc9, - 0x68, 0x49, 0x42, 0x88, 0xd0, 0x1d, 0x00, 0xa8, - 0x19, 0x40, 0x00, 0xc0, 0x19, 0xc0, 0xe0, 0x01, - 0x2e, 0x08, 0xbb, 0x00, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc0, 0x68, 0x40, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x00, 0xa8, 0x19, 0x40, - 0x00, 0xc0, 0x19, 0xc0, 0x23, 0x0b, 0x01, 0xdb, - 0x18, 0xc0, 0x68, 0x00, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x01, 0x48, 0x50, 0xf0, 0x00, - 0xf9, 0x9d, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, - 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, 0x48, 0x42, - 0xf0, 0x00, 0xf9, 0xae, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x30, 0x34, 0xf7, 0xff, 0xf9, 0x94, - 0xe7, 0xa9, 0x25, 0x07, 0x2d, 0x11, 0xdb, 0x02, - 0xe0, 0x4e, 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0x80, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x39, 0xff, 0x39, 0xff, 0x39, 0x02, - 0x69, 0xc9, 0x42, 0x88, 0xd0, 0x18, 0x20, 0x4c, - 0x43, 0x68, 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, - 0x38, 0x02, 0x69, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x38, 0xff, 0x38, 0xff, 0x38, 0x02, - 0x69, 0x80, 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, - 0x1c, 0x01, 0x48, 0x27, 0xf0, 0x00, 0xf9, 0x4a, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x21, 0x4c, 0x43, 0x69, 0x19, 0xc9, 0x6b, 0x09, - 0x42, 0x88, 0xd0, 0x12, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6b, 0x00, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x02, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x23, 0x01, 0x02, 0x9b, - 0x43, 0x98, 0x1c, 0x01, 0x48, 0x18, 0xf0, 0x00, - 0xf9, 0x5b, 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, - 0x30, 0x34, 0xf7, 0xff, 0xf9, 0x41, 0xe7, 0xb0, - 0x25, 0x0a, 0x2d, 0x11, 0xdb, 0x02, 0xe0, 0x1f, - 0x35, 0x01, 0xe7, 0xfa, 0x20, 0x4c, 0x43, 0x68, - 0x19, 0xc0, 0x6a, 0xc0, 0x21, 0x4c, 0x43, 0x69, - 0x19, 0xc9, 0x6b, 0x09, 0x42, 0x88, 0xd0, 0x12, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6b, 0x00, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x02, - 0x20, 0x4c, 0x43, 0x68, 0x19, 0xc0, 0x6a, 0xc0, - 0x23, 0x01, 0x02, 0x9b, 0x43, 0x98, 0x1c, 0x01, - 0x48, 0x03, 0xf0, 0x00, 0xf9, 0x03, 0xe7, 0xdf, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x00, 0xb4, 0x90, 0x1c, 0x02, - 0x1c, 0x0f, 0x3a, 0x01, 0x2f, 0x01, 0xd1, 0x0d, - 0x09, 0x50, 0x00, 0x80, 0x49, 0x0d, 0x58, 0x08, - 0x06, 0xd4, 0x0e, 0xe4, 0x21, 0x01, 0x40, 0xa1, - 0x43, 0x08, 0x09, 0x51, 0x00, 0x89, 0x4b, 0x09, - 0x50, 0x58, 0xe0, 0x0d, 0x09, 0x50, 0x00, 0x80, - 0x49, 0x06, 0x58, 0x08, 0x06, 0xd4, 0x0e, 0xe4, - 0x21, 0x01, 0x40, 0xa1, 0x43, 0xc9, 0x40, 0x01, - 0x09, 0x50, 0x00, 0x80, 0x4b, 0x01, 0x50, 0x19, - 0xbc, 0x90, 0x47, 0x70, 0x2e, 0x08, 0xd1, 0xf8, - 0xb4, 0x80, 0x1c, 0x01, 0x39, 0x01, 0x09, 0x48, - 0x00, 0x80, 0x4a, 0x08, 0x58, 0x10, 0x06, 0xca, - 0x0e, 0xd2, 0x27, 0x01, 0x40, 0x97, 0x1c, 0x3b, - 0x40, 0x18, 0xd0, 0x03, 0x20, 0x01, 0xbc, 0x80, - 0x47, 0x70, 0xe0, 0x01, 0x20, 0x00, 0xe7, 0xfa, - 0xe7, 0xf9, 0x00, 0x00, 0x2e, 0x08, 0xd1, 0xf8, - 0xb4, 0xf0, 0x1c, 0x07, 0x1c, 0x0a, 0x68, 0x54, - 0x6a, 0xf8, 0x05, 0x86, 0x0d, 0xb6, 0x2c, 0x07, - 0xda, 0x01, 0x1c, 0x20, 0xe0, 0x00, 0x20, 0x07, - 0x1c, 0x05, 0x21, 0x00, 0x42, 0xa9, 0xd3, 0x02, - 0xe0, 0x15, 0x31, 0x01, 0xe7, 0xfa, 0x00, 0x88, - 0x18, 0x40, 0x00, 0xc0, 0x18, 0x80, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xc0, 0x6f, 0xc0, 0x42, 0xb0, - 0xd1, 0x08, 0x00, 0x88, 0x18, 0x40, 0x00, 0xc0, - 0x18, 0x80, 0x23, 0x2b, 0x01, 0x5b, 0x18, 0xc0, - 0xbc, 0xf0, 0x47, 0x70, 0xe7, 0xe9, 0x1f, 0xe0, - 0x28, 0x11, 0xda, 0x01, 0x1f, 0xe0, 0xe0, 0x00, - 0x20, 0x11, 0x1c, 0x05, 0x21, 0x00, 0x42, 0xa9, - 0xd3, 0x02, 0xe0, 0x0d, 0x31, 0x01, 0xe7, 0xfa, - 0x20, 0x4c, 0x43, 0x48, 0x18, 0x80, 0x6a, 0x80, - 0x42, 0xb0, 0xd1, 0x04, 0x20, 0x4c, 0x43, 0x48, - 0x18, 0x80, 0x30, 0x0c, 0xe7, 0xe4, 0xe7, 0xf1, - 0x20, 0x00, 0xe7, 0xe1, 0xe7, 0xe0, 0xb5, 0x90, - 0x48, 0x07, 0x68, 0x04, 0x48, 0x07, 0x68, 0x07, - 0x1c, 0x39, 0x1c, 0x20, 0x4a, 0x06, 0x68, 0x13, - 0x22, 0xf3, 0x00, 0xd2, 0xf0, 0x00, 0xf9, 0xca, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xbb, 0x20, 0x2e, 0x08, 0xbb, 0x24, - 0x2e, 0x08, 0xd1, 0xfc, 0xb4, 0xf0, 0x1c, 0x01, - 0xb0, 0x83, 0x22, 0x00, 0x68, 0x4b, 0x2b, 0x07, - 0xdd, 0x01, 0x23, 0x07, 0xe0, 0x00, 0x68, 0x4b, - 0x1c, 0x1c, 0x23, 0x00, 0x43, 0xdb, 0x93, 0x02, - 0x23, 0x00, 0x43, 0xdb, 0x93, 0x01, 0x23, 0x00, - 0x93, 0x00, 0x4b, 0x17, 0x68, 0x1b, 0x2b, 0x00, - 0xd0, 0x07, 0x4b, 0x15, 0x68, 0x1b, 0x6a, 0xdb, - 0x93, 0x02, 0x4b, 0x13, 0x68, 0x1b, 0x6b, 0x5b, - 0x93, 0x01, 0x20, 0x00, 0x42, 0xa0, 0xd3, 0x02, - 0xe0, 0x16, 0x30, 0x01, 0xe7, 0xfa, 0x00, 0x83, - 0x18, 0x1b, 0x00, 0xdb, 0x18, 0x5d, 0x23, 0x05, - 0x02, 0x1b, 0x18, 0xeb, 0x6e, 0x9f, 0x04, 0x3b, - 0x0c, 0x1b, 0xd0, 0x08, 0x0c, 0x3b, 0x04, 0x1b, - 0xd0, 0x05, 0x9b, 0x00, 0x18, 0xc5, 0x26, 0x01, - 0x40, 0xae, 0x1c, 0x33, 0x43, 0x1a, 0xe7, 0xe8, - 0x23, 0x0d, 0x01, 0xdb, 0x18, 0xcb, 0x61, 0xda, - 0xb0, 0x03, 0xbc, 0xf0, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0xb9, 0xc4, 0xb4, 0x80, 0x1c, 0x01, - 0x20, 0x00, 0x68, 0x0a, 0x42, 0x90, 0xdb, 0x02, - 0xe0, 0x07, 0x30, 0x01, 0xe7, 0xf9, 0x23, 0x00, - 0x43, 0xdb, 0x68, 0x8a, 0x00, 0x87, 0x51, 0xd3, - 0xe7, 0xf7, 0x22, 0x00, 0x43, 0xd2, 0x68, 0x8b, - 0x68, 0x0f, 0x00, 0xbf, 0x51, 0xda, 0x23, 0x00, - 0x43, 0xdb, 0x68, 0x8a, 0x68, 0x0f, 0x00, 0xbf, - 0x19, 0xd2, 0x60, 0x53, 0x22, 0x00, 0x60, 0x4a, - 0xbc, 0x80, 0x47, 0x70, 0xb4, 0xf0, 0x1c, 0x03, - 0x1c, 0x0c, 0x1c, 0x17, 0x68, 0x9a, 0xca, 0x40, - 0x42, 0xa6, 0xd2, 0x00, 0xe7, 0xfb, 0x3a, 0x04, - 0x1c, 0x11, 0xc9, 0x40, 0x42, 0xbe, 0xd2, 0x00, - 0xe7, 0xfb, 0x39, 0x04, 0x68, 0x10, 0x42, 0xa0, - 0xd1, 0x02, 0x68, 0x08, 0x42, 0xb8, 0xd0, 0x02, - 0x20, 0xff, 0xbc, 0xf0, 0x47, 0x70, 0x39, 0x04, - 0x68, 0x98, 0x68, 0x5e, 0x00, 0xb6, 0x19, 0x85, - 0x68, 0x58, 0x38, 0x02, 0x60, 0x58, 0x68, 0x50, - 0x60, 0x10, 0x32, 0x04, 0x42, 0x8a, 0xd3, 0xfa, - 0x68, 0x88, 0x60, 0x08, 0x31, 0x04, 0x42, 0xa9, - 0xd3, 0xfa, 0x20, 0x00, 0xe7, 0xe9, 0xe7, 0xe8, - 0xb4, 0xf0, 0x1c, 0x03, 0x1c, 0x0c, 0x1c, 0x17, - 0x68, 0x58, 0x68, 0x1e, 0x3e, 0x01, 0x42, 0xb0, - 0xdb, 0x02, 0x20, 0xff, 0xbc, 0xf0, 0x47, 0x70, - 0x68, 0x9a, 0xca, 0x40, 0x42, 0xa6, 0xd2, 0x00, - 0xe7, 0xfb, 0x3a, 0x04, 0x1c, 0x15, 0xcd, 0x40, - 0x42, 0xbe, 0xd2, 0x00, 0xe7, 0xfb, 0x68, 0x58, - 0x30, 0x02, 0x60, 0x58, 0x68, 0x98, 0x68, 0x5e, - 0x00, 0xb6, 0x19, 0x80, 0x1f, 0xc1, 0x39, 0x01, - 0x68, 0x08, 0x60, 0x88, 0x39, 0x04, 0x1d, 0xc8, - 0x30, 0x01, 0x42, 0xa8, 0xd8, 0xf8, 0x60, 0x8f, - 0x68, 0x08, 0x60, 0x48, 0x39, 0x04, 0x1d, 0x08, - 0x42, 0x90, 0xd8, 0xf9, 0x60, 0x14, 0x20, 0x00, - 0xe7, 0xd8, 0xe7, 0xd7, 0xb5, 0xf0, 0x1c, 0x07, - 0x1c, 0x0c, 0xb0, 0x81, 0x1c, 0x38, 0x21, 0x00, - 0xf0, 0x0e, 0xfc, 0x1a, 0x1c, 0x06, 0x1c, 0x38, - 0x21, 0x01, 0xf0, 0x0e, 0xfc, 0x15, 0x90, 0x00, - 0x1c, 0x31, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x50, - 0x49, 0x20, 0x68, 0x09, 0x60, 0x08, 0x99, 0x00, - 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x49, 0x49, 0x1e, - 0x68, 0x09, 0x60, 0x08, 0x48, 0x1b, 0x68, 0x00, - 0x68, 0x05, 0x48, 0x1c, 0x68, 0x01, 0x23, 0x02, - 0x43, 0xdb, 0x40, 0x19, 0x60, 0x01, 0x2c, 0x00, - 0xd0, 0x0c, 0x48, 0x19, 0x68, 0x00, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x07, 0x48, 0x14, 0x68, 0x00, - 0x68, 0x05, 0x48, 0x14, 0x68, 0x01, 0x23, 0x02, - 0x43, 0x19, 0x60, 0x01, 0x1c, 0x20, 0x49, 0x13, - 0x68, 0x09, 0x70, 0x08, 0x48, 0x12, 0x63, 0xc5, - 0x20, 0x3f, 0x04, 0x00, 0x40, 0x28, 0x0c, 0x00, - 0x49, 0x10, 0x62, 0x08, 0x20, 0xff, 0x02, 0x00, - 0x40, 0x28, 0x0a, 0x00, 0x49, 0x0d, 0x62, 0x48, - 0x06, 0xa8, 0x0e, 0x80, 0x23, 0x80, 0x43, 0x18, - 0x49, 0x0a, 0x62, 0x88, 0x1c, 0x28, 0xb0, 0x01, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xb0, 0x01, - 0xe7, 0xfa, 0x00, 0x00, 0x2e, 0x08, 0xd2, 0x08, - 0x2e, 0x08, 0xd2, 0x0c, 0x6a, 0x00, 0x00, 0x18, - 0x2e, 0x08, 0xd2, 0x10, 0x2e, 0x08, 0xd2, 0x14, - 0x68, 0x00, 0x0d, 0x00, 0x72, 0x00, 0x01, 0x00, - 0xb4, 0x80, 0x1c, 0x02, 0x1c, 0x0f, 0x06, 0xb9, - 0x0e, 0x89, 0x20, 0x01, 0x03, 0x80, 0x40, 0x10, - 0x09, 0xc0, 0x43, 0x01, 0x20, 0xf0, 0x40, 0x10, - 0x01, 0x40, 0x43, 0x01, 0x07, 0x10, 0x0f, 0x00, - 0x03, 0x00, 0x43, 0x01, 0x20, 0x07, 0x02, 0xc0, - 0x40, 0x10, 0x01, 0x40, 0x43, 0x01, 0x20, 0x07, - 0x02, 0x00, 0x40, 0x10, 0x02, 0xc0, 0x43, 0x01, - 0x1c, 0x08, 0xbc, 0x80, 0x47, 0x70, 0xe7, 0xfc, - 0xb5, 0xff, 0x1c, 0x05, 0x1c, 0x0c, 0x1c, 0x17, - 0x9b, 0x03, 0x06, 0x18, 0x16, 0x06, 0x20, 0x33, - 0x06, 0x40, 0x6b, 0x80, 0x1c, 0x01, 0x20, 0x04, - 0x40, 0x08, 0xd0, 0x05, 0x20, 0xd0, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0xe0, 0x17, - 0x23, 0x04, 0x43, 0xdb, 0x40, 0x19, 0x01, 0x08, - 0x4b, 0x0a, 0x68, 0x1b, 0x18, 0xc2, 0x60, 0x15, - 0x60, 0x54, 0x2e, 0xfe, 0xd0, 0x04, 0x20, 0x01, - 0x40, 0xb0, 0x60, 0xd0, 0x4b, 0x06, 0x43, 0x1f, - 0x60, 0x97, 0x20, 0x01, 0x40, 0x88, 0x23, 0x33, - 0x06, 0x5b, 0x63, 0x58, 0x20, 0x00, 0xe7, 0xe2, - 0xe7, 0xe1, 0x00, 0x00, 0x2e, 0x08, 0x20, 0x8c, - 0x80, 0x00, 0x00, 0x00, 0xb4, 0xb0, 0x1c, 0x01, - 0x06, 0x08, 0x16, 0x04, 0x4f, 0x0c, 0x22, 0x00, - 0x20, 0x00, 0x28, 0x04, 0xd3, 0x02, 0xe0, 0x0b, - 0x30, 0x01, 0xe7, 0xfa, 0x01, 0x03, 0x19, 0xdb, - 0x68, 0x5b, 0x42, 0xa3, 0xd1, 0x03, 0x25, 0x01, - 0x40, 0x85, 0x1c, 0x2b, 0x43, 0x1a, 0xe7, 0xf3, - 0x23, 0x33, 0x06, 0x5b, 0x6c, 0x1b, 0x40, 0x13, - 0xd0, 0x00, 0xe7, 0xf9, 0xbc, 0xb0, 0x47, 0x70, - 0x9e, 0x00, 0x00, 0xc0, 0xe3, 0xa0, 0x14, 0x62, - 0xe5, 0x91, 0x10, 0x14, 0xe2, 0x01, 0x00, 0xff, - 0xe5, 0x9f, 0x10, 0x2c, 0xe5, 0xd1, 0x10, 0x00, - 0xe3, 0x51, 0x00, 0xff, 0x0a, 0x00, 0x00, 0x05, - 0xe5, 0x9f, 0x10, 0x1c, 0xe5, 0xd1, 0x10, 0x00, - 0xe3, 0xa0, 0x20, 0x01, 0xe1, 0xa0, 0x11, 0x12, - 0xe3, 0xa0, 0x24, 0x66, 0xe5, 0x82, 0x10, 0x10, - 0xe3, 0xa0, 0x14, 0x62, 0xe5, 0x81, 0x00, 0x14, - 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x08, 0xb9, 0xb4, - 0x47, 0x00, 0x00, 0x00, 0x47, 0x08, 0x00, 0x00, - 0x47, 0x10, 0x00, 0x00, 0x47, 0x18, 0x00, 0x00, - 0x47, 0x20, 0x00, 0x00, 0x47, 0x28, 0x00, 0x00, - 0x47, 0x30, 0x00, 0x00, 0x47, 0x38, 0x00, 0x00, - 0x17, 0xcb, 0x40, 0x59, 0x1a, 0xc9, 0x17, 0xc2, - 0x40, 0x50, 0x1a, 0x80, 0xd1, 0x01, 0xf0, 0x00, - 0xf9, 0xf1, 0xb4, 0x0c, 0x08, 0x4b, 0x1c, 0x02, - 0x42, 0x9a, 0xd8, 0x00, 0x00, 0x52, 0xd3, 0xfb, - 0x23, 0x00, 0xe0, 0x00, 0x08, 0x52, 0x42, 0x91, - 0x41, 0x5b, 0x42, 0x91, 0xd3, 0x00, 0x1a, 0x89, - 0x42, 0x82, 0xd1, 0xf7, 0x1c, 0x18, 0xbc, 0x0c, - 0x40, 0x5a, 0x40, 0x50, 0x1a, 0x80, 0x40, 0x59, - 0x1a, 0xc9, 0x47, 0x70, 0x08, 0x4b, 0x1c, 0x02, - 0xd1, 0x01, 0xf0, 0x00, 0xf9, 0xd3, 0x42, 0x9a, - 0xd8, 0x00, 0x00, 0x52, 0xd3, 0xfb, 0x23, 0x00, - 0xe0, 0x00, 0x08, 0x52, 0x42, 0x91, 0x41, 0x5b, - 0x42, 0x91, 0xd3, 0x00, 0x1a, 0x89, 0x42, 0x82, - 0xd1, 0xf7, 0x1c, 0x18, 0x47, 0x70, 0x00, 0x00, - 0x3a, 0x20, 0xd5, 0x09, 0x42, 0x53, 0x32, 0x20, - 0x40, 0xd0, 0x46, 0x94, 0x1c, 0x0a, 0x40, 0x9a, - 0x43, 0x10, 0x46, 0x62, 0x40, 0xd1, 0x47, 0x70, - 0x1c, 0x08, 0x40, 0xd0, 0x21, 0x00, 0x47, 0x70, - 0x40, 0x10, 0x40, 0x19, 0x47, 0x70, 0x00, 0x00, - 0x47, 0x70, 0x00, 0x00, 0x1a, 0x43, 0x42, 0x93, - 0xd3, 0x30, 0x46, 0x84, 0x07, 0x8b, 0xd0, 0x07, - 0x1e, 0x52, 0xd3, 0x29, 0x78, 0x0b, 0x70, 0x03, - 0x1c, 0x40, 0x1c, 0x49, 0x07, 0x8b, 0xd1, 0xf7, - 0x07, 0x83, 0xd1, 0x17, 0x3a, 0x10, 0xd3, 0x05, - 0xb4, 0xb0, 0xc9, 0xb8, 0xc0, 0xb8, 0x3a, 0x10, - 0xd2, 0xfb, 0xbc, 0xb0, 0x32, 0x0c, 0xd3, 0x0f, - 0xc9, 0x08, 0xc0, 0x08, 0x1f, 0x12, 0xd2, 0xfb, - 0xe0, 0x0a, 0xc9, 0x08, 0x70, 0xc3, 0x0a, 0x1b, - 0x70, 0x83, 0x0a, 0x1b, 0x70, 0x43, 0x0a, 0x1b, - 0x70, 0x03, 0x1d, 0x00, 0x1f, 0x12, 0xd2, 0xf4, - 0x1c, 0xd2, 0xd3, 0x05, 0x78, 0x0b, 0x70, 0x03, - 0x1c, 0x49, 0x1c, 0x40, 0x1e, 0x52, 0xd2, 0xf9, - 0x46, 0x60, 0x47, 0x70, 0x1c, 0x03, 0x43, 0x0b, - 0x43, 0x13, 0x07, 0x9b, 0xd1, 0x04, 0x1f, 0x12, - 0x58, 0x8b, 0x50, 0x83, 0xd1, 0xfb, 0x47, 0x70, - 0x1e, 0x52, 0x5c, 0x8b, 0x54, 0x83, 0xd1, 0xfb, - 0x47, 0x70, 0x00, 0x00, 0x1c, 0x02, 0x43, 0x0a, - 0x07, 0x92, 0xd1, 0x1a, 0x46, 0xbc, 0xb4, 0x30, - 0x4c, 0x11, 0x01, 0xe5, 0xc8, 0x04, 0xc9, 0x08, - 0x1a, 0xd7, 0xd1, 0x09, 0x1b, 0x17, 0x43, 0x97, - 0x40, 0x2f, 0xd0, 0xf7, 0x20, 0x00, 0xbc, 0x30, - 0x46, 0x67, 0x47, 0x70, 0x02, 0x12, 0x02, 0x1b, - 0x0e, 0x11, 0x0e, 0x18, 0x1a, 0x08, 0xd1, 0x01, - 0x29, 0x00, 0xd1, 0xf7, 0xbc, 0x30, 0x46, 0x67, - 0x47, 0x70, 0x78, 0x02, 0x78, 0x0b, 0x1a, 0xd2, - 0xd1, 0x03, 0x1c, 0x40, 0x1c, 0x49, 0x2b, 0x00, - 0xd1, 0xf7, 0x1c, 0x10, 0x47, 0x70, 0x00, 0x00, - 0x01, 0x01, 0x01, 0x01, 0x42, 0x41, 0x46, 0x8c, - 0x07, 0x83, 0xd0, 0x05, 0x78, 0x03, 0x2b, 0x00, - 0xd0, 0x16, 0x1c, 0x40, 0x07, 0x83, 0xd1, 0xf9, - 0x49, 0x0a, 0xc8, 0x04, 0x09, 0xc9, 0x1a, 0x53, - 0x43, 0x93, 0x01, 0xc9, 0x40, 0x0b, 0xd0, 0xf8, - 0x1f, 0x00, 0x0e, 0x13, 0xd0, 0x08, 0x1c, 0x40, - 0x02, 0x13, 0x0e, 0x1b, 0xd0, 0x04, 0x1c, 0x40, - 0x04, 0x13, 0x0e, 0x1b, 0xd0, 0x00, 0x1c, 0x40, - 0x44, 0x60, 0x47, 0x70, 0x80, 0x80, 0x80, 0x80, - 0x46, 0xbc, 0xb4, 0x60, 0x1c, 0x03, 0x43, 0x08, - 0x07, 0x80, 0xd1, 0x1b, 0x1f, 0x12, 0xd3, 0x0b, - 0x4e, 0x0f, 0xcb, 0x01, 0xc9, 0x80, 0x1b, 0xc0, - 0xd1, 0x09, 0x1b, 0xbd, 0x43, 0xbd, 0x01, 0xf7, - 0x40, 0x3d, 0xd1, 0x04, 0x1f, 0x12, 0xd2, 0xf4, - 0x1c, 0xd2, 0xd3, 0x0e, 0xe0, 0x02, 0x1f, 0x1b, - 0x1f, 0x09, 0x1c, 0xd2, 0x78, 0x18, 0x78, 0x0f, - 0x1b, 0xc0, 0xd1, 0x06, 0x2f, 0x00, 0xd0, 0x04, - 0x1c, 0x5b, 0x1c, 0x49, 0x1e, 0x52, 0xd2, 0xf5, - 0x20, 0x00, 0xbc, 0x60, 0x46, 0x67, 0x47, 0x70, - 0x01, 0x01, 0x01, 0x01, 0x46, 0xbc, 0x1c, 0x03, - 0x43, 0x08, 0x07, 0x80, 0xd1, 0x13, 0x1f, 0x12, - 0xd3, 0x05, 0xcb, 0x01, 0xc9, 0x80, 0x1b, 0xc0, - 0xd1, 0x04, 0x1f, 0x12, 0xd2, 0xf9, 0x1c, 0xd2, - 0xd3, 0x0c, 0xe0, 0x02, 0x1f, 0x1b, 0x1f, 0x09, - 0x1c, 0xd2, 0x78, 0x18, 0x78, 0x0f, 0x1b, 0xc0, - 0xd1, 0x04, 0x1c, 0x5b, 0x1c, 0x49, 0x1e, 0x52, - 0xd2, 0xf7, 0x20, 0x00, 0x46, 0x67, 0x47, 0x70, - 0xb5, 0x80, 0xb0, 0x8f, 0x4b, 0x0a, 0x93, 0x08, - 0x4b, 0x0a, 0x93, 0x09, 0x4b, 0x0a, 0x93, 0x07, - 0x90, 0x0e, 0x46, 0x6b, 0xa8, 0x0e, 0xf0, 0x00, - 0xff, 0x4d, 0x1c, 0x07, 0x20, 0x00, 0xa9, 0x0e, - 0xf0, 0x00, 0xf8, 0xdc, 0x1c, 0x38, 0xb0, 0x0f, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x01, 0xe6, 0x39, 0x2e, 0x01, 0xe6, 0x47, - 0x2e, 0x01, 0xeb, 0xe3, 0x46, 0x84, 0x07, 0x83, - 0xd0, 0x05, 0x1e, 0x52, 0xd3, 0x12, 0x70, 0x01, - 0x1c, 0x40, 0x07, 0x83, 0xd1, 0xf9, 0x3a, 0x08, - 0xd3, 0x07, 0x02, 0x0b, 0x43, 0x19, 0x04, 0x0b, - 0x43, 0x19, 0x1c, 0x0b, 0xc0, 0x0a, 0x3a, 0x08, - 0xd2, 0xfc, 0x1d, 0xd2, 0xd3, 0x02, 0x54, 0x81, - 0x1e, 0x52, 0xd2, 0xfc, 0x46, 0x60, 0x47, 0x70, - 0x47, 0x78, 0x00, 0x00, 0xe2, 0x10, 0xc1, 0x02, - 0x12, 0x60, 0x00, 0x00, 0x03, 0x30, 0x00, 0x00, - 0x03, 0xa0, 0x10, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0x8c, 0xc1, 0x01, 0xe3, 0x8c, 0xc6, 0x1e, - 0xe1, 0xb0, 0x28, 0x20, 0x01, 0xa0, 0x08, 0x00, - 0x02, 0x4c, 0xc4, 0x01, 0xe1, 0xb0, 0x2c, 0x20, - 0x01, 0xa0, 0x04, 0x00, 0x02, 0x4c, 0xc5, 0x02, - 0xe1, 0xb0, 0x2e, 0x20, 0x01, 0xa0, 0x02, 0x00, - 0x02, 0x4c, 0xc5, 0x01, 0xe1, 0xb0, 0x2f, 0x20, - 0x01, 0xa0, 0x01, 0x00, 0x02, 0x4c, 0xc6, 0x02, - 0xe1, 0xb0, 0x2f, 0xa0, 0x01, 0xa0, 0x00, 0x80, - 0x02, 0x4c, 0xc6, 0x01, 0xe1, 0xa0, 0x00, 0x80, - 0xe1, 0xa0, 0x1a, 0x00, 0xe1, 0x8c, 0x06, 0x20, - 0xe1, 0x2f, 0xff, 0x1e, 0x22, 0x01, 0x07, 0xd2, - 0x40, 0x50, 0x47, 0x70, 0xe2, 0x20, 0x01, 0x02, - 0xe1, 0x2f, 0xff, 0x1e, 0x00, 0x40, 0x08, 0x40, - 0x47, 0x70, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0xc4, 0xff, 0xe3, 0x8c, 0xc6, 0x0e, - 0xe1, 0x5c, 0x00, 0x82, 0x9a, 0x00, 0x00, 0x0a, - 0xe1, 0xb0, 0x00, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x3a, 0x00, 0x00, 0x12, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0x00, 0x04, 0xec, 0xe1, 0xb0, 0x20, 0x82, - 0x8a, 0x00, 0x00, 0x18, 0xe3, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x03, 0x53, 0x00, 0x00, - 0x0a, 0xff, 0xff, 0xf2, 0xea, 0x00, 0x04, 0xe9, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0x00, 0x04, 0xe2, 0xe1, 0xb0, 0x20, 0x82, - 0x33, 0xa0, 0x00, 0x01, 0x23, 0xa0, 0x00, 0x00, - 0x03, 0x33, 0x00, 0x00, 0x03, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0x00, 0x04, 0xd9, - 0xe1, 0xb0, 0x20, 0x82, 0x23, 0xa0, 0x00, 0x00, - 0x21, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, - 0x01, 0x51, 0x00, 0x03, 0x33, 0xa0, 0x00, 0x01, - 0x23, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, - 0x83, 0xa0, 0x00, 0x01, 0x93, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0xc0, 0x28, 0xe8, 0xac, 0x7f, 0xff, - 0xe2, 0x8f, 0x00, 0x0c, 0xe2, 0x4c, 0x10, 0x3c, - 0xe2, 0x4e, 0xe0, 0x04, 0xe5, 0x8c, 0xe0, 0x00, - 0xea, 0x00, 0x05, 0x71, 0x80, 0x00, 0x00, 0x20, - 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, 0x20, 0x62, - 0x79, 0x20, 0x7a, 0x65, 0x72, 0x6f, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0xd0, 0x06, 0x00, 0x0e, 0x00, - 0x68, 0x0a, 0x70, 0x10, 0x32, 0x01, 0x60, 0x0a, - 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, 0x00, 0x00, - 0xb4, 0x90, 0x18, 0x42, 0x78, 0x17, 0x23, 0x00, - 0x2f, 0x00, 0xd0, 0x22, 0x2f, 0x35, 0xdb, 0x20, - 0x2f, 0x35, 0xd0, 0x01, 0x24, 0x30, 0xe0, 0x07, - 0x1c, 0x17, 0x78, 0x7c, 0x37, 0x01, 0x2c, 0x30, - 0xd0, 0xfb, 0x2c, 0x00, 0xd1, 0xf6, 0xe0, 0x14, - 0x3a, 0x01, 0x78, 0x17, 0x2f, 0x39, 0xd1, 0x01, - 0x70, 0x14, 0xe7, 0xf9, 0x37, 0x01, 0x70, 0x17, - 0x78, 0x02, 0x2a, 0x30, 0xd0, 0x09, 0x29, 0x00, - 0xdb, 0x04, 0x5c, 0x42, 0x18, 0x43, 0x70, 0x5a, - 0x39, 0x01, 0xd5, 0xfa, 0x20, 0x01, 0xbc, 0x90, - 0x47, 0x70, 0x1c, 0x18, 0xbc, 0x90, 0x47, 0x70, - 0xb5, 0x90, 0x1c, 0x0c, 0x1e, 0x57, 0x2a, 0x00, - 0xdd, 0x08, 0xf0, 0x01, 0xfc, 0x81, 0x31, 0x30, - 0x70, 0x21, 0x1c, 0x39, 0x3c, 0x01, 0x3f, 0x01, - 0x29, 0x00, 0xdc, 0xf6, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0xf7, 0x1c, 0x14, 0x1c, 0x0f, - 0xb0, 0x85, 0xa3, 0xfb, 0x1c, 0x08, 0x1c, 0x11, - 0xcb, 0x0c, 0xf7, 0xff, 0xff, 0x3b, 0x28, 0x00, - 0xd0, 0x05, 0x1c, 0x38, 0x1c, 0x21, 0xf7, 0xff, - 0xff, 0x29, 0x1c, 0x0c, 0x1c, 0x07, 0xa3, 0xf4, - 0xcb, 0x0c, 0x1c, 0x38, 0x1c, 0x21, 0xf0, 0x01, - 0xfc, 0x7b, 0x28, 0x00, 0xd0, 0x05, 0x27, 0x00, - 0x97, 0x01, 0x1f, 0x78, 0x90, 0x00, 0x1c, 0x3e, - 0xe1, 0xc8, 0xb0, 0x8a, 0x46, 0x6a, 0x1c, 0x38, - 0x1c, 0x21, 0xf0, 0x01, 0xfc, 0x93, 0x90, 0x08, - 0x91, 0x09, 0x20, 0xff, 0x30, 0x2e, 0x9f, 0x00, - 0x43, 0x78, 0x4b, 0xe9, 0x18, 0xc1, 0x20, 0x7d, - 0x00, 0xc0, 0xf7, 0xff, 0xfd, 0x71, 0x90, 0x0a, - 0x1b, 0xc2, 0xa1, 0xe6, 0xc9, 0x03, 0xf0, 0x01, - 0xfc, 0xc7, 0x9e, 0x0a, 0xb0, 0x83, 0xf0, 0x01, - 0xfd, 0x55, 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, - 0x2e, 0x00, 0xda, 0x04, 0x42, 0x76, 0x4d, 0xe1, - 0x4c, 0xe1, 0x1c, 0x67, 0xe0, 0x02, 0x4d, 0xe1, - 0x4c, 0xe1, 0x27, 0x00, 0x2e, 0x00, 0xd0, 0x16, - 0x08, 0x70, 0xd3, 0x0a, 0x46, 0x6b, 0x1c, 0x28, - 0x1c, 0x21, 0x1c, 0x3a, 0xf0, 0x01, 0xfd, 0xba, - 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, 0x2e, 0x01, - 0xd0, 0x09, 0x1c, 0x28, 0x1c, 0x21, 0x1c, 0x3a, - 0xf0, 0x01, 0xfd, 0xca, 0x10, 0x76, 0x1c, 0x0c, - 0x1c, 0x05, 0x1c, 0x17, 0xe7, 0xe8, 0xaa, 0x00, - 0xca, 0x07, 0xf0, 0x01, 0xfd, 0xdd, 0x90, 0x04, - 0x91, 0x05, 0xb0, 0x03, 0x98, 0x08, 0x99, 0x09, - 0x9a, 0x01, 0x9b, 0x02, 0xf0, 0x01, 0xfe, 0xd6, - 0x1c, 0x04, 0x1c, 0x0f, 0xa3, 0xcd, 0xcb, 0x0c, - 0xf7, 0xff, 0xfe, 0xd0, 0x28, 0x00, 0xd0, 0x1d, - 0xa3, 0xcc, 0x68, 0x1a, 0x68, 0x5b, 0x1c, 0x20, - 0x1c, 0x39, 0x1c, 0x15, 0x1c, 0x1e, 0xf0, 0x01, - 0xff, 0x6f, 0x1c, 0x04, 0x98, 0x0a, 0x38, 0x01, - 0x90, 0x0a, 0x1c, 0x0f, 0x98, 0x01, 0x99, 0x02, - 0x1c, 0x2a, 0x1c, 0x33, 0xf0, 0x01, 0xfe, 0xba, - 0x90, 0x01, 0x91, 0x02, 0xa3, 0xbf, 0xcb, 0x0c, - 0x1c, 0x20, 0x1c, 0x39, 0xf7, 0xff, 0xfe, 0xb2, - 0x28, 0x00, 0xd1, 0xe1, 0xa3, 0xbf, 0xcb, 0x0c, - 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x01, 0xff, 0xc2, - 0x28, 0x00, 0xd0, 0x1d, 0xa3, 0xb9, 0x68, 0x1a, - 0x68, 0x5b, 0x1c, 0x20, 0x1c, 0x39, 0x1c, 0x15, - 0x1c, 0x1e, 0xf0, 0x01, 0xfe, 0x9f, 0x1c, 0x04, - 0x98, 0x0a, 0x30, 0x01, 0x90, 0x0a, 0x1c, 0x0f, - 0x98, 0x01, 0x99, 0x02, 0x1c, 0x2a, 0x1c, 0x33, - 0xf0, 0x01, 0xff, 0x3e, 0x90, 0x01, 0x91, 0x02, - 0xa3, 0xb0, 0xcb, 0x0c, 0x1c, 0x20, 0x1c, 0x39, - 0xf0, 0x01, 0xff, 0xa4, 0x28, 0x00, 0xd1, 0xe1, - 0x1c, 0x20, 0x1c, 0x39, 0xf0, 0x01, 0xff, 0xf6, - 0x90, 0x0b, 0x98, 0x0a, 0x42, 0x46, 0x96, 0x0e, - 0x98, 0x0b, 0xf7, 0xff, 0xfe, 0x3d, 0x9a, 0x00, - 0x9e, 0x0a, 0x1a, 0xb2, 0xf0, 0x01, 0xfc, 0x34, - 0x90, 0x06, 0x91, 0x07, 0xa0, 0x96, 0x68, 0x02, - 0x92, 0x04, 0x68, 0x41, 0x91, 0x05, 0x9e, 0x0a, - 0x2e, 0x00, 0xda, 0x25, 0x9e, 0x0e, 0xa1, 0xa1, - 0xc9, 0x03, 0xa2, 0x91, 0x68, 0x14, 0x68, 0x52, - 0x92, 0x03, 0x25, 0x00, 0x1c, 0x02, 0x1c, 0x2b, - 0x1c, 0x07, 0xf0, 0x02, 0xf8, 0x13, 0x1c, 0x02, - 0x1c, 0x0b, 0x99, 0x03, 0x1c, 0x20, 0xf0, 0x02, - 0xf8, 0x15, 0xa1, 0x9a, 0x68, 0x08, 0x68, 0x49, - 0x91, 0x0d, 0x1c, 0x3a, 0x1c, 0x2b, 0x1c, 0x04, - 0xf0, 0x01, 0xfe, 0xfe, 0xa3, 0x87, 0xcb, 0x0c, - 0xf0, 0x02, 0xf8, 0x76, 0x9b, 0x0d, 0x1c, 0x22, - 0xf0, 0x01, 0xfe, 0x4c, 0x1c, 0x04, 0xe0, 0x05, - 0xa0, 0x90, 0x68, 0x45, 0x68, 0x07, 0xa0, 0x7e, - 0x68, 0x41, 0x68, 0x04, 0x91, 0x03, 0x2e, 0x00, - 0xd0, 0x5d, 0x08, 0x70, 0xd3, 0x35, 0xb0, 0x82, - 0x98, 0x08, 0x99, 0x09, 0x9b, 0x05, 0x1c, 0x22, - 0xf0, 0x01, 0xfe, 0xe2, 0x90, 0x00, 0x91, 0x01, - 0x9b, 0x05, 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x22, - 0xf0, 0x01, 0xff, 0xe8, 0x9a, 0x06, 0x9b, 0x07, - 0xf0, 0x01, 0xfe, 0xd6, 0x9a, 0x00, 0x9b, 0x01, - 0xb0, 0x02, 0xf0, 0x01, 0xff, 0xdf, 0x90, 0x04, - 0x91, 0x05, 0x98, 0x06, 0x99, 0x07, 0x1c, 0x3a, - 0x1c, 0x2b, 0xf0, 0x01, 0xfe, 0xc9, 0xb0, 0x82, - 0x90, 0x00, 0x23, 0x00, 0x93, 0x01, 0x1c, 0x02, - 0xf0, 0x01, 0xff, 0xc8, 0x1c, 0x02, 0x1c, 0x0b, - 0x98, 0x06, 0x99, 0x07, 0xf0, 0x01, 0xff, 0xca, - 0x90, 0x06, 0x91, 0x07, 0x98, 0x00, 0x90, 0x08, - 0x99, 0x01, 0x91, 0x09, 0xb0, 0x02, 0x2e, 0x01, - 0xd0, 0x25, 0xa1, 0x72, 0xc9, 0x03, 0x1c, 0x3a, - 0x1c, 0x2b, 0xf0, 0x01, 0xfe, 0xad, 0x9b, 0x03, - 0x1c, 0x22, 0xf0, 0x01, 0xff, 0xb7, 0x9b, 0x03, - 0x1c, 0x22, 0xf0, 0x01, 0xfe, 0xa5, 0x91, 0x03, - 0x1c, 0x04, 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x3a, - 0x1c, 0x2b, 0xf0, 0x01, 0xfe, 0x9d, 0x25, 0x00, - 0x1c, 0x02, 0x1c, 0x2b, 0x1c, 0x07, 0xf0, 0x01, - 0xff, 0x9d, 0x1c, 0x02, 0x1c, 0x0b, 0x99, 0x03, - 0x1c, 0x20, 0xf0, 0x01, 0xff, 0x9f, 0x91, 0x03, - 0x10, 0x76, 0x1c, 0x04, 0xe7, 0xa1, 0xe7, 0xff, - 0xab, 0x06, 0xcb, 0x0f, 0xf0, 0x02, 0xf8, 0x0c, - 0x28, 0x00, 0xd1, 0x03, 0x98, 0x0b, 0x38, 0x01, - 0x90, 0x0b, 0xe7, 0x55, 0x98, 0x08, 0x99, 0x09, - 0x9a, 0x06, 0x9b, 0x07, 0xf0, 0x01, 0xff, 0x82, - 0x9a, 0x04, 0x9b, 0x05, 0xf0, 0x01, 0xff, 0x7e, - 0x9a, 0x01, 0x9b, 0x02, 0xf0, 0x01, 0xfd, 0xca, - 0xa3, 0x4c, 0x68, 0x1a, 0x68, 0x5b, 0x93, 0x0c, - 0x1c, 0x15, 0xf0, 0x01, 0xfe, 0x6d, 0x1c, 0x0c, - 0x1c, 0x07, 0xf0, 0x01, 0xff, 0x2f, 0x1c, 0x06, - 0xf7, 0xff, 0xfd, 0x7a, 0x1c, 0x3a, 0x1c, 0x23, - 0xf0, 0x01, 0xff, 0xde, 0x9b, 0x0c, 0x1c, 0x2a, - 0xf0, 0x01, 0xfe, 0x5e, 0xf0, 0x01, 0xff, 0x22, - 0x1c, 0x07, 0xd5, 0x04, 0x4b, 0x47, 0x18, 0xff, - 0x3e, 0x01, 0x2f, 0x00, 0xdb, 0xfa, 0x48, 0x45, - 0x42, 0x87, 0xdb, 0x04, 0x4b, 0x43, 0x1a, 0xff, - 0x36, 0x01, 0x42, 0x87, 0xda, 0xfa, 0x2e, 0x00, - 0xda, 0x06, 0x4b, 0x40, 0x18, 0xf6, 0x99, 0x0b, - 0x39, 0x01, 0x91, 0x0b, 0x2e, 0x00, 0xdb, 0xf8, - 0x42, 0x86, 0xdb, 0x06, 0x4b, 0x3b, 0x1a, 0xf6, - 0x99, 0x0b, 0x31, 0x01, 0x91, 0x0b, 0x42, 0x86, - 0xda, 0xf8, 0x99, 0x0b, 0x4b, 0x38, 0x42, 0x99, - 0xda, 0x17, 0x98, 0x0b, 0x00, 0x84, 0x18, 0x24, - 0x00, 0x64, 0x1c, 0x18, 0x1c, 0x31, 0xf7, 0xff, - 0xfb, 0xe3, 0x18, 0x20, 0x90, 0x0b, 0x00, 0x8c, - 0x18, 0x64, 0x00, 0x64, 0x1c, 0x39, 0x48, 0x30, - 0xf7, 0xff, 0xfb, 0xda, 0x18, 0x26, 0x00, 0x8f, - 0x18, 0x7f, 0x00, 0x7f, 0x98, 0x0a, 0x38, 0x01, - 0xe0, 0x16, 0x99, 0x0b, 0x42, 0x81, 0xdb, 0x14, - 0x98, 0x0b, 0xf0, 0x01, 0xfa, 0xa1, 0x4b, 0x27, - 0x43, 0x59, 0x19, 0x89, 0x90, 0x0b, 0x1c, 0x08, - 0xf0, 0x01, 0xfa, 0x9a, 0x4b, 0x23, 0x43, 0x59, - 0x19, 0xc9, 0x1c, 0x06, 0x1d, 0x48, 0xf0, 0x01, - 0xfa, 0x93, 0x1c, 0x07, 0x98, 0x0a, 0x30, 0x01, - 0x90, 0x0a, 0xb0, 0x0a, 0x24, 0x30, 0x98, 0x05, - 0x70, 0x04, 0x98, 0x05, 0x1d, 0x81, 0x22, 0x06, - 0x98, 0x01, 0xf7, 0xff, 0xfd, 0xfd, 0x98, 0x05, - 0x1d, 0xc1, 0x31, 0x05, 0x22, 0x06, 0x1c, 0x30, - 0xf7, 0xff, 0xfd, 0xf6, 0xe0, 0x2e, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xff, 0xff, 0xea, 0x84, 0x3f, 0xf0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0xfc, - 0xcc, 0xcc, 0xcc, 0xcc, 0x00, 0x00, 0x40, 0x01, - 0xa0, 0x00, 0x00, 0x00, 0x40, 0xf8, 0x6a, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x24, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x41, 0x2e, 0x84, 0x80, - 0x00, 0x00, 0x00, 0x00, 0x3f, 0xc9, 0x99, 0x99, - 0x99, 0x99, 0x99, 0x9a, 0x40, 0x14, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x42, 0x40, - 0x00, 0x01, 0x86, 0xa0, 0x98, 0x05, 0x1d, 0xc1, - 0x31, 0x0b, 0x22, 0x06, 0x1c, 0x38, 0xf7, 0xff, - 0xfd, 0xbf, 0x98, 0x05, 0x74, 0xc4, 0x27, 0x00, - 0x98, 0x05, 0x75, 0x07, 0x98, 0x00, 0x30, 0x05, - 0xb0, 0x05, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0x02, 0x08, 0x12, 0xd3, 0x01, - 0x22, 0x01, 0xe0, 0x00, 0x22, 0x00, 0x60, 0x0a, - 0x68, 0x01, 0x4a, 0x08, 0x40, 0x0a, 0x4b, 0x07, - 0x42, 0x9a, 0xd0, 0x01, 0x20, 0x00, 0x47, 0x70, - 0x03, 0x09, 0xd1, 0x02, 0x68, 0x40, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0x01, 0x47, 0x70, 0x20, 0x02, - 0x47, 0x70, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, - 0xb5, 0x90, 0x1c, 0x04, 0x54, 0x63, 0x1c, 0x4f, - 0x2a, 0x00, 0xda, 0x02, 0x42, 0x52, 0x21, 0x2d, - 0xe0, 0x00, 0x21, 0x2b, 0x1c, 0x38, 0x54, 0x21, - 0x23, 0x7d, 0x00, 0xdb, 0x37, 0x01, 0x42, 0x9a, - 0xdb, 0x09, 0x1c, 0x18, 0x1c, 0x11, 0xf7, 0xff, - 0xfb, 0x37, 0x1d, 0xc2, 0x32, 0x29, 0x1c, 0x38, - 0x54, 0x22, 0x1c, 0x0a, 0x37, 0x01, 0x2a, 0x64, - 0xdb, 0x09, 0x20, 0x64, 0x1c, 0x11, 0xf7, 0xff, - 0xfb, 0x2b, 0x1d, 0xc2, 0x32, 0x29, 0x1c, 0x38, - 0x54, 0x22, 0x1c, 0x0a, 0x37, 0x01, 0x1c, 0x10, - 0xf0, 0x01, 0xf9, 0xf6, 0x1d, 0xc2, 0x32, 0x29, - 0x1c, 0x38, 0x54, 0x22, 0x37, 0x01, 0x1c, 0x38, - 0x31, 0x30, 0x54, 0x21, 0x37, 0x01, 0x1c, 0x38, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf0, - 0x1c, 0x06, 0xb0, 0x82, 0x68, 0x10, 0x90, 0x00, - 0x1d, 0xd0, 0x30, 0x0d, 0xb0, 0x81, 0x1c, 0x0f, - 0x46, 0x69, 0x1c, 0x14, 0x1c, 0x05, 0xf7, 0xff, - 0xff, 0xa0, 0x99, 0x00, 0x29, 0x00, 0xd0, 0x01, - 0xa1, 0xc9, 0xe0, 0x0a, 0x99, 0x01, 0x08, 0x89, - 0xd3, 0x01, 0xa1, 0xc8, 0xe0, 0x05, 0x99, 0x01, - 0x08, 0xc9, 0xd3, 0x01, 0xa1, 0xc6, 0xe0, 0x00, - 0xa1, 0xc6, 0x60, 0x61, 0x28, 0x00, 0xd0, 0x15, - 0x28, 0x01, 0xd1, 0x01, 0xa0, 0xc4, 0xe0, 0x00, - 0xa0, 0xc4, 0x78, 0x01, 0x70, 0x39, 0x78, 0x41, - 0x70, 0x79, 0x78, 0x80, 0x70, 0xb8, 0x20, 0x00, - 0x70, 0xf8, 0x98, 0x01, 0x4b, 0xc0, 0x40, 0x18, - 0x60, 0x20, 0x20, 0x03, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xcd, 0x06, 0xb0, 0x01, - 0x48, 0xbc, 0x90, 0x01, 0x2e, 0x45, 0xd0, 0x74, - 0x2e, 0x65, 0xd0, 0x72, 0x2e, 0x66, 0xd1, 0x71, - 0x1c, 0x38, 0xf7, 0xff, 0xfd, 0x2e, 0x1c, 0x06, - 0xd5, 0x4e, 0x42, 0x76, 0x68, 0xa0, 0x1c, 0x41, - 0x42, 0xb1, 0xda, 0x09, 0x21, 0x30, 0x70, 0x39, - 0x98, 0x01, 0x68, 0x00, 0x78, 0x00, 0x25, 0x02, - 0x70, 0x78, 0x68, 0xa0, 0x61, 0x20, 0xe0, 0x3b, - 0x1b, 0x80, 0x1c, 0x85, 0x2d, 0x12, 0xdd, 0x03, - 0x1f, 0xe8, 0x38, 0x0c, 0x25, 0x13, 0x61, 0x20, - 0x1c, 0x38, 0x1c, 0x29, 0xf7, 0xff, 0xfc, 0xd4, - 0x28, 0x00, 0xd0, 0x01, 0x35, 0x01, 0x3e, 0x01, - 0x2e, 0x00, 0xd1, 0x02, 0x78, 0x78, 0x70, 0x38, - 0xe0, 0x0d, 0x2e, 0x01, 0xd1, 0x10, 0x1c, 0x28, - 0x2d, 0x00, 0xdd, 0x05, 0x5c, 0x39, 0x18, 0x3a, - 0x70, 0x51, 0x38, 0x01, 0x28, 0x00, 0xdc, 0xf9, - 0x21, 0x30, 0x70, 0x39, 0x35, 0x01, 0x98, 0x01, - 0x68, 0x00, 0x78, 0x00, 0x70, 0x78, 0xe0, 0x13, - 0x1c, 0x28, 0x2d, 0x00, 0xdd, 0x05, 0x5c, 0x39, - 0x18, 0x3a, 0x70, 0x91, 0x38, 0x01, 0x28, 0x00, - 0xdc, 0xf9, 0x21, 0x30, 0x70, 0x39, 0x98, 0x01, - 0x68, 0x00, 0x78, 0x00, 0x70, 0x78, 0x20, 0x3c, - 0x70, 0xb8, 0x1e, 0x70, 0x60, 0xe0, 0x35, 0x02, - 0x69, 0x20, 0x28, 0x00, 0xdd, 0x5d, 0xe0, 0x26, - 0x68, 0xa0, 0x19, 0x80, 0x1c, 0x85, 0x2d, 0x12, - 0xdd, 0x41, 0x25, 0x13, 0x1c, 0x38, 0x1c, 0x29, - 0xf7, 0xff, 0xfc, 0x96, 0x28, 0x00, 0xd0, 0x01, - 0x25, 0x14, 0x36, 0x01, 0x1e, 0x69, 0x42, 0xb1, - 0xdd, 0x1a, 0x20, 0x00, 0x2e, 0x00, 0xdb, 0x05, - 0x18, 0x39, 0x78, 0x49, 0x54, 0x39, 0x30, 0x01, - 0x42, 0xb0, 0xdd, 0xf9, 0x98, 0x01, 0x68, 0x00, - 0xe0, 0x01, 0xe0, 0xc1, 0xe0, 0x45, 0x78, 0x00, - 0x19, 0xb9, 0x70, 0x48, 0x68, 0xa0, 0x19, 0x80, - 0x38, 0x11, 0x61, 0x20, 0xd0, 0x35, 0x21, 0x3e, - 0x1c, 0x28, 0x54, 0x39, 0x35, 0x01, 0xe0, 0x30, - 0x20, 0x00, 0x29, 0x00, 0xdd, 0x05, 0x18, 0x3a, - 0x78, 0x52, 0x54, 0x3a, 0x30, 0x01, 0x42, 0x81, - 0xdc, 0xf9, 0x20, 0x3c, 0x19, 0x79, 0x39, 0x20, - 0x77, 0xc8, 0x1b, 0x70, 0x30, 0x02, 0x60, 0xe0, - 0x98, 0x01, 0x68, 0x00, 0x78, 0x01, 0x1c, 0x28, - 0x54, 0x39, 0x68, 0xa0, 0x35, 0x01, 0x28, 0x00, - 0xd0, 0x17, 0x61, 0x20, 0xe7, 0xdf, 0x1c, 0x38, - 0x1c, 0x29, 0xf7, 0xff, 0xfc, 0x55, 0x28, 0x00, - 0xd0, 0x01, 0x35, 0x01, 0x36, 0x01, 0x20, 0x00, - 0x2e, 0x00, 0xdb, 0x05, 0x18, 0x39, 0x78, 0x49, - 0x54, 0x39, 0x30, 0x01, 0x42, 0xb0, 0xdd, 0xf9, - 0x98, 0x01, 0x68, 0x00, 0x78, 0x00, 0x19, 0xb9, - 0x70, 0x48, 0x68, 0xa0, 0x28, 0x00, 0xd1, 0x68, - 0x98, 0x00, 0x09, 0x00, 0xd2, 0x66, 0x3d, 0x01, - 0xe0, 0x75, 0x1c, 0x38, 0xb0, 0x81, 0xf7, 0xff, - 0xfc, 0x74, 0x90, 0x00, 0x68, 0xa0, 0x28, 0x01, - 0xda, 0x01, 0x20, 0x01, 0x60, 0xa0, 0x68, 0xa0, - 0x28, 0x11, 0xdd, 0x01, 0x25, 0x12, 0xe0, 0x00, - 0x1c, 0x45, 0x1c, 0x38, 0x1c, 0x29, 0xf7, 0xff, - 0xfc, 0x27, 0x99, 0x00, 0x18, 0x42, 0x68, 0xa0, - 0x42, 0x90, 0xdd, 0x02, 0x23, 0x04, 0x42, 0xda, - 0xda, 0x02, 0x78, 0x78, 0x70, 0x38, 0xe0, 0x22, - 0x26, 0x66, 0x2a, 0x00, 0xdb, 0x0e, 0x20, 0x00, - 0x2a, 0x00, 0xdb, 0x05, 0x18, 0x39, 0x78, 0x49, - 0x54, 0x39, 0x30, 0x01, 0x42, 0x90, 0xdd, 0xf9, - 0x98, 0x02, 0x68, 0x00, 0x78, 0x00, 0x18, 0xb9, - 0x70, 0x48, 0xe0, 0x14, 0x42, 0x52, 0x1c, 0x28, - 0xd4, 0x04, 0x5c, 0x3b, 0x18, 0x81, 0x54, 0x7b, - 0x38, 0x01, 0xd5, 0xfa, 0x18, 0xad, 0x20, 0x00, - 0x2a, 0x00, 0xdb, 0x04, 0x21, 0x30, 0x54, 0x39, - 0x30, 0x01, 0x42, 0x90, 0xdd, 0xfb, 0x98, 0x02, - 0x68, 0x00, 0x78, 0x00, 0x70, 0x78, 0x98, 0x01, - 0x09, 0x00, 0xd2, 0x1c, 0x20, 0x00, 0x43, 0xc0, - 0x61, 0x20, 0x5d, 0x78, 0x99, 0x02, 0x68, 0x09, - 0x78, 0x09, 0x42, 0x88, 0xd0, 0x0a, 0x19, 0x78, - 0x38, 0x20, 0x7f, 0xc0, 0x28, 0x30, 0xd1, 0x05, - 0x3d, 0x01, 0x19, 0x78, 0x38, 0x20, 0x7f, 0xc0, - 0x28, 0x30, 0xd0, 0xf9, 0x19, 0x78, 0x38, 0x20, - 0x7f, 0xc0, 0x42, 0x88, 0xd1, 0x0c, 0x3d, 0x01, - 0xe0, 0x0a, 0xe0, 0x10, 0xe0, 0x0f, 0x68, 0xa0, - 0x28, 0x11, 0xdd, 0x05, 0x38, 0x11, 0x21, 0x3e, - 0x61, 0x20, 0x1c, 0x28, 0x54, 0x39, 0x35, 0x01, - 0x2e, 0x66, 0xd0, 0x03, 0x1c, 0x38, 0x1c, 0x29, - 0x1e, 0xb3, 0xe0, 0x31, 0xb0, 0x01, 0x1c, 0x28, - 0xb0, 0x02, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x1c, 0x38, 0xb0, 0x81, 0xf7, 0xff, 0xfb, 0xf9, - 0x90, 0x00, 0x68, 0xa0, 0x28, 0x11, 0xdd, 0x03, - 0x38, 0x11, 0x61, 0x20, 0x20, 0x11, 0x60, 0xa0, - 0x68, 0xa0, 0x1c, 0x85, 0x1c, 0x38, 0x1c, 0x29, - 0xf7, 0xff, 0xfb, 0xae, 0x99, 0x00, 0x18, 0x42, - 0x78, 0x78, 0x70, 0x38, 0x68, 0xa0, 0x28, 0x00, - 0xd1, 0x04, 0x98, 0x01, 0x09, 0x00, 0xd2, 0x01, - 0x25, 0x01, 0xe0, 0x03, 0x98, 0x02, 0x68, 0x00, - 0x78, 0x00, 0x70, 0x78, 0x69, 0x20, 0x28, 0x00, - 0xdd, 0x03, 0x21, 0x3e, 0x1c, 0x28, 0x54, 0x39, - 0x35, 0x01, 0x1c, 0x38, 0x1c, 0x29, 0x1c, 0x33, - 0xf7, 0xff, 0xfe, 0x26, 0x1c, 0x05, 0xe7, 0xc9, - 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x4e, 0x61, 0x4e, 0x00, 0x49, 0x6e, 0x66, 0x00, - 0xff, 0xff, 0xfe, 0xff, 0x2e, 0x08, 0x22, 0x10, - 0xb5, 0xf0, 0x1c, 0x04, 0x25, 0x00, 0x26, 0x00, - 0x1c, 0x18, 0xb0, 0x92, 0x68, 0x13, 0x93, 0x00, - 0x1c, 0x17, 0x43, 0xea, 0x60, 0xfa, 0x61, 0x3a, - 0x1c, 0x1a, 0x23, 0x21, 0x01, 0x1b, 0x40, 0x1a, - 0xd1, 0x01, 0x22, 0x01, 0x60, 0xba, 0x1d, 0xfa, - 0x32, 0x29, 0x29, 0x67, 0xd0, 0x0e, 0xdc, 0x2c, - 0x29, 0x64, 0xd0, 0x5b, 0xdc, 0x06, 0x29, 0x45, - 0xd0, 0x08, 0x29, 0x47, 0xd0, 0x06, 0x29, 0x58, - 0xd1, 0x0c, 0xe0, 0x58, 0x29, 0x65, 0xd0, 0x01, - 0x29, 0x66, 0xd1, 0x07, 0xab, 0x01, 0x1c, 0x08, - 0x1c, 0x19, 0x69, 0xfb, 0x1c, 0x3a, 0xf7, 0xff, - 0xf9, 0x29, 0x1c, 0x05, 0xb0, 0x82, 0x6a, 0xf9, - 0x91, 0x00, 0x23, 0x01, 0x02, 0x5b, 0x98, 0x02, - 0x40, 0x18, 0x90, 0x0d, 0xd0, 0x6c, 0x21, 0x00, - 0x91, 0x01, 0x68, 0xf8, 0x28, 0x00, 0xdd, 0x01, - 0x1e, 0x41, 0x91, 0x01, 0x69, 0x38, 0x28, 0x00, - 0xdd, 0x63, 0x99, 0x01, 0x18, 0x40, 0x1e, 0x41, - 0xe0, 0xca, 0x29, 0x70, 0xd0, 0x33, 0xdc, 0x2e, - 0x29, 0x69, 0xd0, 0x2b, 0x29, 0x6f, 0xd1, 0xe1, - 0x99, 0x00, 0x09, 0xc9, 0xd3, 0x63, 0xb0, 0x82, - 0x68, 0x10, 0x90, 0x00, 0x68, 0x51, 0x91, 0x01, - 0xa3, 0xc0, 0x93, 0x12, 0xcb, 0x0c, 0xf0, 0x01, - 0xfd, 0x2d, 0x28, 0x00, 0xd0, 0x18, 0x98, 0x00, - 0x99, 0x01, 0xf7, 0xff, 0xf9, 0x4d, 0x07, 0x40, - 0x0f, 0x40, 0x6a, 0xb9, 0x5c, 0x09, 0x1c, 0x28, - 0xaa, 0x03, 0x54, 0x11, 0x22, 0x03, 0x98, 0x00, - 0x99, 0x01, 0x35, 0x01, 0xf7, 0xff, 0xf9, 0x2c, - 0x90, 0x00, 0x91, 0x01, 0x9b, 0x12, 0xcb, 0x0c, - 0xf0, 0x01, 0xfd, 0x14, 0x28, 0x00, 0xd1, 0xe6, - 0xb0, 0x02, 0xe0, 0x49, 0xe0, 0x4f, 0x29, 0x75, - 0xd0, 0x4d, 0x29, 0x78, 0xd1, 0xb2, 0x99, 0x00, - 0x09, 0xc9, 0xd3, 0x27, 0xb0, 0x82, 0x68, 0x10, - 0x90, 0x00, 0x68, 0x51, 0x91, 0x01, 0xa3, 0xa9, - 0x93, 0x13, 0xcb, 0x0c, 0xf0, 0x01, 0xfc, 0xfe, - 0x28, 0x00, 0xd0, 0x71, 0x98, 0x00, 0x99, 0x01, - 0xf7, 0xff, 0xf9, 0x1e, 0x07, 0x00, 0x0f, 0x00, - 0x6a, 0xb9, 0x5c, 0x09, 0x1c, 0x28, 0xaa, 0x03, - 0x54, 0x11, 0x22, 0x04, 0x98, 0x00, 0x99, 0x01, - 0x35, 0x01, 0xf7, 0xff, 0xf8, 0xfd, 0x90, 0x00, - 0x91, 0x01, 0x9b, 0x13, 0xcb, 0x0c, 0xf0, 0x01, - 0xfc, 0xe5, 0x28, 0x00, 0xd1, 0xe6, 0xe0, 0x57, - 0xe0, 0x65, 0xe0, 0x6a, 0x28, 0x00, 0xd0, 0x85, - 0x07, 0x02, 0x0f, 0x12, 0x6a, 0xb9, 0x5c, 0x8a, - 0x1c, 0x29, 0xab, 0x01, 0x54, 0x5a, 0x35, 0x01, - 0x09, 0x00, 0xd1, 0xf5, 0xe7, 0x7a, 0xe7, 0xff, - 0x28, 0x00, 0xd0, 0x09, 0x07, 0x41, 0x0f, 0x49, - 0x1d, 0xca, 0x32, 0x29, 0x1c, 0x29, 0xab, 0x01, - 0x54, 0x5a, 0x35, 0x01, 0x08, 0xc0, 0xd1, 0xf5, - 0x98, 0x00, 0x09, 0x00, 0xd3, 0xee, 0x68, 0xb8, - 0x38, 0x01, 0x60, 0xb8, 0xe7, 0x66, 0x99, 0x00, - 0x09, 0xc9, 0xd3, 0x33, 0xb0, 0x82, 0x68, 0x10, - 0x90, 0x00, 0x68, 0x51, 0x91, 0x01, 0xa3, 0x83, - 0x93, 0x11, 0xcb, 0x0c, 0xf0, 0x01, 0xfc, 0xb2, - 0x28, 0x00, 0xd0, 0x25, 0xa3, 0x81, 0x93, 0x10, - 0xa3, 0x82, 0x93, 0x0f, 0xa3, 0x7f, 0x93, 0x0e, - 0x98, 0x00, 0x99, 0x01, 0x9b, 0x10, 0xcb, 0x0c, - 0xf0, 0x01, 0xfc, 0xac, 0x1c, 0x19, 0x1c, 0x10, - 0x9b, 0x0f, 0xcb, 0x0c, 0xf0, 0x01, 0xfc, 0xe8, - 0xf7, 0xff, 0xf8, 0xc2, 0x1c, 0x29, 0xaa, 0x03, - 0x54, 0x50, 0x98, 0x00, 0x99, 0x01, 0x9b, 0x0e, - 0xcb, 0x0c, 0x35, 0x01, 0xf0, 0x01, 0xfc, 0x9a, - 0x90, 0x00, 0x91, 0x01, 0x9b, 0x11, 0xcb, 0x0c, - 0xf0, 0x01, 0xfc, 0x8c, 0x28, 0x00, 0xd1, 0xdf, - 0xb0, 0x02, 0xe7, 0x2f, 0x28, 0x00, 0xd0, 0xb1, - 0xf0, 0x01, 0xfc, 0xd2, 0x1d, 0xca, 0x32, 0x29, - 0x1c, 0x29, 0xab, 0x01, 0x54, 0x5a, 0x35, 0x01, - 0x28, 0x00, 0xd1, 0xf5, 0xe7, 0x22, 0x68, 0xb8, - 0x1b, 0x41, 0x91, 0x01, 0xd5, 0x01, 0x21, 0x00, - 0x91, 0x01, 0x68, 0x78, 0xf7, 0xff, 0xf9, 0x0a, - 0x99, 0x01, 0x19, 0x49, 0x18, 0x40, 0x99, 0x00, - 0x1a, 0x08, 0x90, 0x00, 0x23, 0xff, 0x33, 0x01, - 0x98, 0x02, 0x40, 0x18, 0x90, 0x0c, 0xd1, 0x1b, - 0x98, 0x02, 0x08, 0x40, 0xd2, 0x18, 0xb0, 0x81, - 0x98, 0x0d, 0x28, 0x00, 0xd0, 0x01, 0x20, 0x30, - 0xe0, 0x00, 0x20, 0x20, 0x06, 0x00, 0x0e, 0x00, - 0x90, 0x00, 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, - 0xd4, 0x09, 0x98, 0x00, 0x6a, 0x3a, 0x1c, 0x21, - 0x36, 0x01, 0xf7, 0xff, 0xf8, 0x1d, 0x98, 0x01, - 0x38, 0x01, 0x90, 0x01, 0xd5, 0xf5, 0xb0, 0x01, - 0x68, 0x79, 0x78, 0x08, 0x31, 0x01, 0xb0, 0x81, - 0x91, 0x00, 0x28, 0x00, 0xd0, 0x0a, 0x6a, 0x3a, - 0x1c, 0x21, 0xf7, 0xff, 0xf8, 0x0d, 0x99, 0x00, - 0x78, 0x08, 0x31, 0x01, 0x91, 0x00, 0x36, 0x01, - 0x28, 0x00, 0xd1, 0xf4, 0xb0, 0x01, 0x98, 0x02, - 0x07, 0xc0, 0x0f, 0xc0, 0x90, 0x0b, 0xd1, 0x18, - 0xb0, 0x81, 0x98, 0x0d, 0x28, 0x00, 0xd0, 0x01, - 0x20, 0x30, 0xe0, 0x00, 0x20, 0x20, 0x06, 0x00, - 0x0e, 0x00, 0x90, 0x00, 0x98, 0x01, 0x38, 0x01, - 0x90, 0x01, 0xd4, 0x09, 0x98, 0x00, 0x6a, 0x3a, - 0x1c, 0x21, 0x36, 0x01, 0xf7, 0xfe, 0xff, 0xec, - 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, 0xd5, 0xf5, - 0xb0, 0x01, 0x98, 0x0d, 0x28, 0x00, 0xd0, 0x35, - 0x21, 0x00, 0xb0, 0x81, 0x91, 0x00, 0x2d, 0x00, - 0xdd, 0x2e, 0xa8, 0x04, 0x99, 0x00, 0x5c, 0x40, - 0x28, 0x3c, 0xd0, 0x10, 0x28, 0x3e, 0xd1, 0x1d, - 0x69, 0x38, 0x38, 0x01, 0x61, 0x38, 0xd4, 0x1e, - 0x20, 0x30, 0x6a, 0x3a, 0x1c, 0x21, 0x36, 0x01, - 0xf7, 0xfe, 0xff, 0xce, 0x69, 0x38, 0x38, 0x01, - 0x61, 0x38, 0xd5, 0xf5, 0xe0, 0x13, 0x68, 0xf8, - 0x38, 0x01, 0x60, 0xf8, 0xd4, 0x0f, 0x20, 0x30, - 0x6a, 0x3a, 0x1c, 0x21, 0x36, 0x01, 0xf7, 0xfe, - 0xff, 0xbf, 0x68, 0xf8, 0x38, 0x01, 0x60, 0xf8, - 0xd5, 0xf5, 0xe0, 0x04, 0x6a, 0x3a, 0x1c, 0x21, - 0xf7, 0xfe, 0xff, 0xb6, 0x36, 0x01, 0x99, 0x00, - 0x31, 0x01, 0x91, 0x00, 0x42, 0xa9, 0xdb, 0xd0, - 0xb0, 0x01, 0xe0, 0x1c, 0x99, 0x01, 0x1e, 0x48, - 0x90, 0x01, 0xd4, 0x09, 0x20, 0x30, 0x6a, 0x3a, - 0x1c, 0x21, 0x36, 0x01, 0xf7, 0xfe, 0xff, 0xa4, - 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, 0xd5, 0xf5, - 0x19, 0x76, 0x1c, 0x28, 0x3d, 0x01, 0x28, 0x00, - 0xdd, 0x09, 0xa8, 0x03, 0x5d, 0x40, 0x6a, 0x3a, - 0x1c, 0x21, 0xf7, 0xfe, 0xff, 0x95, 0x1c, 0x28, - 0x3d, 0x01, 0x28, 0x00, 0xdc, 0xf5, 0x98, 0x0b, - 0x28, 0x00, 0xd0, 0x0a, 0x98, 0x00, 0x1e, 0x45, - 0xd4, 0x07, 0x20, 0x20, 0x6a, 0x3a, 0x1c, 0x21, - 0x36, 0x01, 0xf7, 0xfe, 0xff, 0x85, 0x3d, 0x01, - 0xd5, 0xf7, 0x1c, 0x30, 0xb0, 0x14, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0a, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, - 0x00, 0x00, 0x00, 0x00, 0xb5, 0xff, 0x20, 0x00, - 0xb0, 0x88, 0x90, 0x00, 0x99, 0x09, 0x78, 0x08, - 0x31, 0x01, 0x91, 0x09, 0x1c, 0x1c, 0x1c, 0x17, - 0x28, 0x00, 0xd0, 0x74, 0xa3, 0xf4, 0x93, 0x07, - 0x1d, 0xe2, 0x32, 0x0d, 0x92, 0x06, 0x1d, 0xe1, - 0x31, 0x29, 0x91, 0x05, 0x28, 0x25, 0xd0, 0x07, - 0x99, 0x08, 0x6a, 0x22, 0xf7, 0xfe, 0xff, 0x58, - 0x98, 0x00, 0x30, 0x01, 0x90, 0x00, 0xe2, 0xc4, - 0x25, 0x00, 0x23, 0x00, 0xb0, 0x82, 0x93, 0x00, - 0x20, 0x00, 0x60, 0xa0, 0x99, 0x0b, 0x78, 0x0e, - 0x31, 0x01, 0x91, 0x0b, 0x2e, 0x2b, 0xd0, 0x16, - 0xdc, 0x06, 0x2e, 0x20, 0xd0, 0x16, 0x2e, 0x23, - 0xd1, 0x17, 0x23, 0x08, 0x43, 0x1d, 0xe7, 0xf1, - 0x2e, 0x2d, 0xd0, 0x05, 0x2e, 0x30, 0xd1, 0x10, - 0x23, 0xff, 0x33, 0x01, 0x43, 0x1d, 0xe7, 0xe9, - 0x23, 0xff, 0x33, 0x01, 0x43, 0x9d, 0x1c, 0x28, - 0x25, 0x01, 0x43, 0x05, 0xe7, 0xe2, 0x23, 0x02, - 0x43, 0x1d, 0xe7, 0xdf, 0x23, 0x04, 0x43, 0x1d, - 0xe7, 0xdc, 0x20, 0x00, 0x2e, 0x2a, 0xd1, 0x11, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc0, - 0x28, 0x00, 0xda, 0x02, 0x42, 0x40, 0x23, 0x01, - 0x40, 0x5d, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0xe0, 0x0f, 0x49, 0xce, 0x5d, 0x8a, - 0x09, 0x92, 0xd3, 0x0b, 0x00, 0x83, 0x18, 0x18, - 0x00, 0x40, 0x19, 0x80, 0x9a, 0x0b, 0x78, 0x16, - 0x32, 0x01, 0x92, 0x0b, 0x5d, 0x8a, 0x38, 0x30, - 0x09, 0x92, 0xd2, 0xf3, 0x28, 0x00, 0xda, 0x00, - 0x20, 0x00, 0x90, 0x01, 0x2e, 0x2e, 0xd1, 0x2a, - 0x20, 0x00, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0x2e, 0x2a, 0xd1, 0x0e, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0xe0, 0x00, 0xe2, 0x67, - 0x6f, 0xc0, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0xe0, 0x0f, 0x49, 0xb8, 0x5d, 0x8a, - 0x09, 0x92, 0xd3, 0x0b, 0x00, 0x83, 0x18, 0x18, - 0x00, 0x40, 0x19, 0x80, 0x9a, 0x0b, 0x78, 0x16, - 0x32, 0x01, 0x92, 0x0b, 0x5d, 0x8a, 0x38, 0x30, - 0x09, 0x92, 0xd2, 0xf3, 0x28, 0x00, 0xdb, 0x02, - 0x23, 0x10, 0x43, 0x1d, 0x60, 0xa0, 0x2e, 0x6c, - 0xd0, 0x01, 0x2e, 0x4c, 0xd1, 0x0d, 0x99, 0x0b, - 0x78, 0x0e, 0x31, 0x01, 0x91, 0x0b, 0x2e, 0x6c, - 0xd0, 0x01, 0x2e, 0x4c, 0xd1, 0x02, 0x23, 0x40, - 0x43, 0x1d, 0xe0, 0x06, 0x23, 0x20, 0x43, 0x1d, - 0xe0, 0x07, 0x2e, 0x68, 0xd1, 0x05, 0x23, 0x80, - 0x43, 0x1d, 0x99, 0x0b, 0x78, 0x0e, 0x31, 0x01, - 0x91, 0x0b, 0x2e, 0x67, 0xd0, 0x63, 0xdc, 0x12, - 0x2e, 0x63, 0xd0, 0x21, 0xdc, 0x08, 0x2e, 0x00, - 0xd0, 0x5e, 0x2e, 0x45, 0xd0, 0x5b, 0x2e, 0x47, - 0xd0, 0x59, 0x2e, 0x58, 0xd0, 0x59, 0xe0, 0x1f, - 0x2e, 0x64, 0xd0, 0x57, 0x2e, 0x65, 0xd0, 0x52, - 0x2e, 0x66, 0xd0, 0x50, 0xe0, 0x18, 0x2e, 0x70, - 0xd0, 0x55, 0xdc, 0x06, 0x2e, 0x69, 0xd0, 0x4d, - 0x2e, 0x6e, 0xd0, 0x51, 0x2e, 0x6f, 0xd0, 0x5c, - 0xe0, 0x0e, 0x2e, 0x73, 0xd0, 0x5a, 0x2e, 0x75, - 0xd0, 0x59, 0x2e, 0x78, 0xd0, 0x58, 0xe0, 0x07, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc6, - 0x98, 0x01, 0x38, 0x01, 0x90, 0x01, 0x07, 0xe8, - 0x0f, 0xc0, 0x90, 0x06, 0xd1, 0x16, 0x0a, 0x68, - 0xd3, 0x01, 0x20, 0x30, 0xe0, 0x00, 0x20, 0x20, - 0x06, 0x05, 0x0e, 0x2d, 0x98, 0x01, 0x38, 0x01, - 0x90, 0x01, 0xd4, 0x0b, 0x98, 0x02, 0x30, 0x01, - 0x90, 0x02, 0x99, 0x0a, 0x6a, 0x22, 0x1c, 0x28, - 0xf7, 0xfe, 0xfe, 0x72, 0x98, 0x01, 0x38, 0x01, - 0x90, 0x01, 0xd5, 0xf3, 0x99, 0x0a, 0x6a, 0x22, - 0x1c, 0x30, 0xf7, 0xfe, 0xfe, 0x69, 0x98, 0x02, - 0x30, 0x01, 0x90, 0x02, 0x98, 0x06, 0x28, 0x00, - 0xd0, 0x52, 0x98, 0x01, 0x1e, 0x45, 0xd4, 0x58, - 0x98, 0x02, 0x30, 0x01, 0x90, 0x02, 0x20, 0x20, - 0x99, 0x0a, 0x6a, 0x22, 0xf7, 0xfe, 0xfe, 0x58, - 0x3d, 0x01, 0xd5, 0xf5, 0xe1, 0xc4, 0xe1, 0xa0, - 0xe0, 0x01, 0xe0, 0x8e, 0xe1, 0x53, 0x99, 0x0b, - 0x39, 0x01, 0x91, 0x0b, 0xe1, 0xbc, 0xe0, 0xed, - 0x0a, 0x28, 0xd3, 0x0e, 0x98, 0x02, 0x68, 0x39, - 0x31, 0x03, 0x08, 0x89, 0x00, 0x89, 0x31, 0x04, - 0x60, 0x39, 0x39, 0x80, 0x6f, 0xc9, 0x80, 0x08, - 0xe1, 0xae, 0xe0, 0xf5, 0xe0, 0x1d, 0xe1, 0x1b, - 0xe0, 0xa0, 0x09, 0xe8, 0xd3, 0x0c, 0x98, 0x02, - 0x68, 0x39, 0x31, 0x03, 0x08, 0x89, 0x00, 0x89, - 0x31, 0x04, 0x60, 0x39, 0x39, 0x80, 0x6f, 0xcd, - 0xf0, 0x01, 0xfa, 0xda, 0xc5, 0x03, 0xe1, 0x9b, - 0x20, 0x20, 0x40, 0x28, 0x99, 0x02, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc0, 0x60, 0x01, - 0xe1, 0x8e, 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, - 0x6f, 0xc0, 0xb0, 0x81, 0x90, 0x00, 0x09, 0x68, - 0xd3, 0x0c, 0x26, 0x00, 0x68, 0xa0, 0xe0, 0x01, - 0xe1, 0x7e, 0x36, 0x01, 0x42, 0x86, 0xda, 0x09, - 0x99, 0x00, 0x5d, 0x89, 0x29, 0x00, 0xd1, 0xf8, - 0xe0, 0x04, 0xe1, 0x75, 0x98, 0x00, 0xf7, 0xfe, - 0xfe, 0xcd, 0x1c, 0x06, 0x98, 0x02, 0x1b, 0x80, - 0x90, 0x02, 0x07, 0xe8, 0x0f, 0xc0, 0x90, 0x06, - 0xd1, 0x16, 0x0a, 0x68, 0xd3, 0x01, 0x20, 0x30, - 0xe0, 0x00, 0x20, 0x20, 0x06, 0x05, 0x0e, 0x2d, - 0x98, 0x02, 0x38, 0x01, 0x90, 0x02, 0xd4, 0x0b, - 0x98, 0x03, 0x30, 0x01, 0x90, 0x03, 0x99, 0x0b, - 0x6a, 0x22, 0x1c, 0x28, 0xf7, 0xfe, 0xfd, 0xe8, - 0x98, 0x02, 0x38, 0x01, 0x90, 0x02, 0xd5, 0xf3, - 0x25, 0x00, 0x2e, 0x00, 0xdd, 0x08, 0x99, 0x00, - 0x5d, 0x48, 0x99, 0x0b, 0x6a, 0x22, 0xf7, 0xfe, - 0xfd, 0xdb, 0x35, 0x01, 0x42, 0xb5, 0xdb, 0xf6, - 0x98, 0x03, 0x19, 0x80, 0x90, 0x03, 0x98, 0x06, - 0x28, 0x00, 0xd0, 0x0c, 0x98, 0x02, 0x1e, 0x45, - 0xd4, 0x09, 0x98, 0x03, 0x30, 0x01, 0x90, 0x03, - 0x20, 0x20, 0x99, 0x0b, 0x6a, 0x22, 0xf7, 0xfe, - 0xfd, 0xc7, 0x3d, 0x01, 0xd5, 0xf5, 0xb0, 0x01, - 0xe1, 0x32, 0x09, 0xe8, 0xd3, 0x0c, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x08, - 0x1f, 0xc1, 0x39, 0x01, 0x60, 0x38, 0x22, 0x08, - 0x98, 0x07, 0xf7, 0xfe, 0xfe, 0x0f, 0xe0, 0x08, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc3, - 0x93, 0x00, 0x0a, 0x28, 0xd3, 0x03, 0x9b, 0x00, - 0x04, 0x1b, 0x0c, 0x1b, 0x93, 0x00, 0xa0, 0x17, - 0x62, 0xa0, 0x09, 0x28, 0xd3, 0x01, 0xa0, 0x1a, - 0xe0, 0x00, 0xa0, 0x18, 0x60, 0x60, 0x09, 0x68, - 0xd3, 0x61, 0xe0, 0xe3, 0x09, 0xe8, 0xd3, 0x0c, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x08, 0x1f, 0xc1, 0x39, 0x01, 0x60, 0x38, - 0x22, 0x08, 0x98, 0x07, 0xf7, 0xfe, 0xfd, 0xe6, - 0xe0, 0x08, 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, - 0x6f, 0xc3, 0x93, 0x00, 0x0a, 0x28, 0xd3, 0x16, - 0x9b, 0x00, 0x04, 0x1b, 0x0c, 0x1b, 0xe0, 0x11, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0x22, 0x44, 0x30, 0x31, 0x32, 0x33, - 0x34, 0x35, 0x36, 0x37, 0x38, 0x39, 0x41, 0x42, - 0x43, 0x44, 0x45, 0x46, 0x00, 0x00, 0x00, 0x00, - 0x30, 0x58, 0x00, 0x00, 0x93, 0x00, 0xa0, 0x78, - 0x62, 0xa0, 0x09, 0x28, 0xd3, 0x01, 0xa0, 0x7b, - 0xe0, 0x00, 0xa0, 0x79, 0x60, 0x60, 0x09, 0x68, - 0xd3, 0x25, 0xe0, 0xa7, 0x68, 0x38, 0x30, 0x03, - 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, 0x60, 0x38, - 0x38, 0x80, 0x6f, 0xc3, 0x93, 0x00, 0xa0, 0x6e, - 0x62, 0xa0, 0x09, 0x28, 0xd3, 0x01, 0xa0, 0x72, - 0xe0, 0x00, 0xa0, 0x6f, 0x60, 0x60, 0x20, 0x08, - 0x23, 0x10, 0x43, 0x1d, 0x60, 0xa0, 0xe0, 0x7e, - 0x09, 0xe8, 0xd3, 0x0d, 0x68, 0x38, 0x30, 0x03, - 0x08, 0x80, 0x00, 0x80, 0x30, 0x08, 0x1f, 0xc1, - 0x39, 0x01, 0x60, 0x38, 0x22, 0x08, 0x98, 0x07, - 0xf7, 0xfe, 0xfd, 0x94, 0xe0, 0x09, 0xe0, 0x9b, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x04, 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc3, - 0x93, 0x00, 0x0a, 0x28, 0xd3, 0x03, 0x9b, 0x00, - 0x04, 0x1b, 0x0c, 0x1b, 0x93, 0x00, 0x09, 0x28, - 0xd3, 0x01, 0xa0, 0x5e, 0xe0, 0x00, 0xa0, 0x5a, - 0x60, 0x60, 0x09, 0x68, 0xd3, 0x57, 0xe0, 0x69, - 0x09, 0xe8, 0xd3, 0x0c, 0x68, 0x38, 0x30, 0x03, - 0x08, 0x80, 0x00, 0x80, 0x30, 0x08, 0x1f, 0xc1, - 0x39, 0x01, 0x60, 0x38, 0x22, 0x08, 0x98, 0x07, - 0xf7, 0xfe, 0xfd, 0x6c, 0xe0, 0x08, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc3, 0x93, 0x00, - 0x0a, 0x28, 0xd3, 0x03, 0x9b, 0x00, 0x04, 0x1b, - 0x0c, 0x1b, 0x93, 0x00, 0xa0, 0x48, 0x60, 0x60, - 0x09, 0x68, 0xd3, 0x34, 0xe0, 0x46, 0x09, 0xe8, - 0xd3, 0x21, 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, - 0x00, 0x80, 0x30, 0x08, 0x1f, 0xc1, 0x39, 0x01, - 0x60, 0x38, 0x22, 0x08, 0x98, 0x07, 0xf7, 0xfe, - 0xfd, 0x49, 0x99, 0x07, 0x9b, 0x09, 0x68, 0x08, - 0x90, 0x04, 0x68, 0x49, 0x91, 0x03, 0xcb, 0x0c, - 0xf0, 0x01, 0xf9, 0x94, 0x28, 0x00, 0xd0, 0x08, - 0x98, 0x04, 0x99, 0x03, 0xf0, 0x01, 0xf9, 0x98, - 0x9a, 0x07, 0xc2, 0x03, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x14, 0x20, 0x00, 0xe0, 0x12, 0x68, 0x38, - 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, 0x30, 0x04, - 0x60, 0x38, 0x38, 0x80, 0x6f, 0xc0, 0x0a, 0x29, - 0xd3, 0x01, 0x04, 0x00, 0x14, 0x00, 0x28, 0x00, - 0xda, 0x02, 0x42, 0x43, 0xe0, 0x01, 0xe0, 0x2b, - 0x1c, 0x03, 0x93, 0x00, 0x28, 0x00, 0xda, 0x01, - 0xa0, 0x2d, 0xe0, 0x08, 0x08, 0xa8, 0xd3, 0x01, - 0xa0, 0x2c, 0xe0, 0x04, 0x08, 0xe8, 0xd3, 0x01, - 0xa0, 0x2b, 0xe0, 0x00, 0xa0, 0x24, 0x60, 0x60, - 0x09, 0x68, 0xd3, 0x19, 0x4b, 0x29, 0x40, 0x1d, - 0xe0, 0x16, 0x23, 0x01, 0x02, 0x5b, 0x43, 0x1d, - 0x09, 0x68, 0xd2, 0x01, 0x20, 0x06, 0x60, 0xa0, - 0x68, 0x38, 0x30, 0x03, 0x08, 0x80, 0x00, 0x80, - 0x30, 0x08, 0x1f, 0xc1, 0x39, 0x01, 0x60, 0x38, - 0x22, 0x08, 0x98, 0x08, 0xf7, 0xfe, 0xfc, 0xfa, - 0x20, 0x00, 0x23, 0x00, 0x60, 0x60, 0x93, 0x00, - 0x98, 0x01, 0x62, 0xe0, 0x60, 0x25, 0x98, 0x0a, - 0x9b, 0x00, 0x1c, 0x31, 0x1c, 0x22, 0xf7, 0xff, - 0xfb, 0x3f, 0x99, 0x02, 0x18, 0x40, 0x90, 0x02, - 0xb0, 0x02, 0x99, 0x09, 0x78, 0x08, 0x31, 0x01, - 0x91, 0x09, 0x28, 0x00, 0xd0, 0x00, 0xe5, 0x29, - 0x98, 0x08, 0x6a, 0x61, 0xf7, 0xfe, 0xfc, 0x82, - 0x28, 0x00, 0xd0, 0x02, 0x20, 0x00, 0x43, 0xc0, - 0xe0, 0x00, 0x98, 0x00, 0xb0, 0x08, 0xb0, 0x04, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, - 0x38, 0x39, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, - 0x00, 0x00, 0x00, 0x00, 0x30, 0x78, 0x00, 0x00, - 0x40, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, - 0x2d, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, - 0x20, 0x00, 0x00, 0x00, 0xff, 0xff, 0xfe, 0xff, - 0xe3, 0x10, 0x06, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0x11, 0x2f, 0xff, 0x1e, 0xea, 0x00, 0x00, 0x0a, - 0xe3, 0x12, 0x07, 0x02, 0x0a, 0x00, 0x00, 0x08, - 0xe1, 0x5c, 0x00, 0x80, 0x83, 0xa0, 0x00, 0x00, - 0x81, 0x2f, 0xff, 0x1e, 0x03, 0x51, 0x00, 0x00, - 0x03, 0xa0, 0x00, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0x10, 0x07, 0x02, 0x13, 0xa0, 0x00, 0x00, - 0x11, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x35, 0x06, - 0xea, 0x00, 0x07, 0x2e, 0xe1, 0x2f, 0xff, 0x1f, - 0xea, 0x00, 0x00, 0x3e, 0xe5, 0x9f, 0x04, 0x5c, - 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x02, - 0xe3, 0xa0, 0x00, 0x20, 0xe3, 0xa0, 0x10, 0x01, - 0xef, 0x12, 0x34, 0x56, 0xe5, 0x9f, 0x04, 0x48, - 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x05, - 0xe5, 0x90, 0x10, 0x00, 0xe5, 0x9f, 0x04, 0x3c, - 0xe5, 0x90, 0x30, 0x00, 0xe5, 0x9f, 0x04, 0x38, - 0xe5, 0x90, 0xd0, 0x00, 0xea, 0x00, 0x00, 0x0b, - 0xe3, 0xa0, 0x00, 0x16, 0xe5, 0x9f, 0x44, 0x18, - 0xe2, 0x84, 0x20, 0xa8, 0xe2, 0x84, 0x10, 0xa4, - 0xe5, 0x81, 0x20, 0x00, 0xef, 0x12, 0x34, 0x56, - 0xe2, 0x84, 0x00, 0xa8, 0xe5, 0x90, 0xd0, 0x08, - 0xe5, 0x90, 0x30, 0x04, 0xe5, 0x90, 0x10, 0x00, - 0xe3, 0x51, 0x00, 0x00, 0x05, 0x9f, 0x14, 0x04, - 0xe2, 0x8f, 0x00, 0x10, 0xeb, 0x00, 0x00, 0x36, - 0xe5, 0x9f, 0x03, 0xfc, 0xe5, 0x9f, 0x33, 0xfc, - 0xeb, 0x00, 0x00, 0x12, 0xea, 0x00, 0x00, 0x4e, - 0x2e, 0x00, 0x04, 0x04, 0x2e, 0x03, 0xa9, 0xd0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x00, 0xe3, 0x1c, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xe1, 0xa0, 0xe0, 0x0f, - 0xe1, 0x2f, 0xff, 0x1c, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x8f, 0xe0, 0x01, - 0xe1, 0x2f, 0xff, 0x1c, 0x47, 0x78, 0x00, 0x00, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x1c, 0x02, 0x1c, 0x13, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x00, 0xe3, 0x13, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xe1, 0xa0, 0xe0, 0x0f, - 0xe1, 0x2f, 0xff, 0x13, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x8f, 0xe0, 0x01, - 0xe1, 0x2f, 0xff, 0x13, 0x47, 0x78, 0x00, 0x00, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe5, 0x9f, 0xc0, 0x44, 0xe8, 0x8c, 0xff, 0xff, - 0xe2, 0x8f, 0x00, 0x00, 0xea, 0x00, 0x0e, 0xf4, - 0x00, 0x80, 0x0e, 0x09, 0x54, 0x68, 0x69, 0x73, - 0x20, 0x63, 0x6f, 0x64, 0x65, 0x20, 0x63, 0x61, - 0x6e, 0x20, 0x6f, 0x6e, 0x6c, 0x79, 0x20, 0x72, - 0x75, 0x6e, 0x20, 0x6f, 0x6e, 0x20, 0x61, 0x20, - 0x54, 0x68, 0x75, 0x6d, 0x62, 0x20, 0x63, 0x6f, - 0x6d, 0x70, 0x61, 0x74, 0x69, 0x62, 0x6c, 0x65, - 0x20, 0x70, 0x72, 0x6f, 0x63, 0x65, 0x73, 0x73, - 0x6f, 0x72, 0x00, 0x00, 0x2e, 0x08, 0x21, 0xd0, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0x73, 0x08, - 0xe5, 0x87, 0x00, 0x00, 0xe2, 0x8f, 0x50, 0xc9, - 0xe2, 0x85, 0x5c, 0x02, 0xe5, 0x87, 0x50, 0x10, - 0xe2, 0x8f, 0x50, 0xe9, 0xe2, 0x85, 0x5c, 0x02, - 0xe5, 0x87, 0x50, 0x14, 0xe1, 0xa0, 0x80, 0x0e, - 0xe2, 0x87, 0x00, 0x04, 0xeb, 0x00, 0x04, 0x1d, - 0xe9, 0x2d, 0x01, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe5, 0xc7, 0x00, 0x2c, 0xe2, 0x87, 0x00, 0x04, - 0xeb, 0x00, 0x00, 0xce, 0xe3, 0xa0, 0x40, 0x00, - 0xe2, 0x8d, 0x00, 0x04, 0xe5, 0x97, 0x10, 0x00, - 0xe3, 0xa0, 0x30, 0x00, 0xe5, 0xc7, 0x30, 0x2e, - 0xe2, 0x81, 0x30, 0x08, 0xe8, 0x91, 0x00, 0x06, - 0xe5, 0x9f, 0xc2, 0xcc, 0xeb, 0xff, 0xff, 0xb7, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x80, 0x01, - 0xea, 0x00, 0x00, 0x01, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xa0, 0x70, 0x00, - 0xeb, 0x00, 0x04, 0x15, 0xe1, 0xa0, 0x00, 0x08, - 0xeb, 0x00, 0x00, 0x0d, 0xe1, 0xa0, 0x20, 0x07, - 0xe3, 0x52, 0x00, 0x00, 0x12, 0x8f, 0x00, 0x08, - 0x15, 0x9f, 0x10, 0x00, 0xeb, 0x00, 0x0e, 0xb5, - 0x41, 0x42, 0x45, 0x58, 0x00, 0x80, 0x0e, 0x06, - 0x52, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x63, - 0x6f, 0x64, 0x65, 0x20, 0x74, 0x6f, 0x6f, 0x20, - 0x6c, 0x61, 0x72, 0x67, 0x65, 0x00, 0x00, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, - 0xe5, 0x9f, 0x32, 0x60, 0xeb, 0xff, 0xff, 0xa9, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc2, 0x28, - 0xe5, 0xdc, 0x00, 0x2c, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x30, 0x00, 0xe5, 0x9f, 0x12, 0x14, - 0xe4, 0x81, 0xf0, 0x04, 0xe8, 0xb3, 0x00, 0x04, - 0xe8, 0xa1, 0x00, 0x04, 0xe4, 0xd3, 0x20, 0x01, - 0xe4, 0xc1, 0x20, 0x01, 0xe3, 0x52, 0x00, 0x00, - 0x1a, 0xff, 0xff, 0xfb, 0xe1, 0xa0, 0xf0, 0x0e, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0xa0, 0x80, 0x01, - 0xeb, 0xff, 0xff, 0xf2, 0xe5, 0x9f, 0x71, 0xe8, - 0xe5, 0xd7, 0x20, 0x2f, 0xe3, 0x52, 0x00, 0x00, - 0x1a, 0x00, 0x00, 0x2c, 0xe3, 0xa0, 0x20, 0x01, - 0xe5, 0xc7, 0x20, 0x2f, 0xeb, 0x00, 0x00, 0x3b, - 0xe1, 0xa0, 0x10, 0x08, 0xeb, 0x00, 0x03, 0xde, - 0xe3, 0x50, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x1b, - 0xe2, 0x88, 0xb0, 0x40, 0xe9, 0x3b, 0x01, 0xef, - 0xe9, 0x2c, 0x01, 0xef, 0xe9, 0x3b, 0x01, 0xef, - 0xe9, 0x2c, 0x01, 0xef, 0xe5, 0x9f, 0x71, 0xa8, - 0xe5, 0x97, 0x40, 0xa0, 0xe3, 0x84, 0x40, 0x80, - 0xe1, 0x21, 0xf0, 0x04, 0xe1, 0xa0, 0xd0, 0x0c, - 0xe1, 0xa0, 0xb0, 0x04, 0xe5, 0x9f, 0x01, 0x8c, - 0xe5, 0x90, 0x00, 0x04, 0xe1, 0xa0, 0x10, 0x0d, - 0xeb, 0x00, 0x03, 0xfe, 0xe3, 0xa0, 0x10, 0x00, - 0xe5, 0xc7, 0x10, 0x2f, 0xe1, 0xa0, 0x10, 0x0d, - 0xe3, 0x54, 0x00, 0x10, 0x1a, 0x00, 0x00, 0x02, - 0xe3, 0xa0, 0x00, 0x17, 0xef, 0x12, 0x34, 0x56, - 0xe3, 0x21, 0xf0, 0x93, 0xe1, 0xa0, 0x00, 0x00, - 0xe2, 0x81, 0xe0, 0x3c, 0xe9, 0x5e, 0x7f, 0xff, - 0xe1, 0xa0, 0x00, 0x00, 0xe8, 0xde, 0x80, 0x00, - 0xe2, 0x8f, 0x00, 0x00, 0xea, 0x00, 0x0e, 0x72, - 0x00, 0x80, 0x0e, 0x07, 0x4e, 0x6f, 0x20, 0x53, - 0x74, 0x61, 0x63, 0x6b, 0x20, 0x66, 0x6f, 0x72, - 0x20, 0x54, 0x72, 0x61, 0x70, 0x20, 0x48, 0x61, - 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00, 0x00, 0x00, - 0xe2, 0x8f, 0x00, 0x00, 0xea, 0x00, 0x0e, 0x68, - 0x00, 0x80, 0x0e, 0x00, 0x52, 0x65, 0x63, 0x75, - 0x72, 0x73, 0x69, 0x76, 0x65, 0x20, 0x54, 0x72, - 0x61, 0x70, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0xc1, 0x04, 0xe3, 0xa0, 0x00, 0x00, - 0xe5, 0xcc, 0x00, 0x2f, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0x00, 0xf0, - 0xe5, 0x90, 0x00, 0x00, 0xe5, 0x90, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0x00, 0xdc, 0xe2, 0x80, 0x00, 0x04, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe5, 0x9f, 0xc0, 0xcc, 0xe3, 0x50, 0x0b, 0x02, - 0x33, 0xa0, 0x0b, 0x02, 0xe2, 0x8c, 0xc0, 0x04, - 0xe9, 0x9c, 0x00, 0x0c, 0xe0, 0x53, 0x31, 0x00, - 0x21, 0x53, 0x00, 0x02, 0x3a, 0x00, 0x00, 0x03, - 0xe5, 0x81, 0x20, 0x00, 0xe0, 0x82, 0x21, 0x00, - 0xe5, 0x8c, 0x20, 0x04, 0xe1, 0x2f, 0xff, 0x1e, - 0xe9, 0x2d, 0x50, 0x03, 0xe1, 0xa0, 0x10, 0x0c, - 0xeb, 0x00, 0x00, 0x44, 0xe3, 0x50, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0d, 0xe5, 0x9d, 0xc0, 0x08, - 0xe9, 0x9c, 0x40, 0x04, 0xe1, 0x5e, 0x00, 0x01, - 0x10, 0x4e, 0x30, 0x02, 0xe0, 0x81, 0xe0, 0x00, - 0x11, 0xa0, 0x00, 0x02, 0x11, 0xa0, 0x20, 0x01, - 0xe9, 0x8c, 0x40, 0x04, 0x13, 0x53, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x03, 0xe8, 0xbd, 0x50, 0x03, - 0xe5, 0x81, 0x00, 0x00, 0xe1, 0xa0, 0x01, 0x43, - 0xe1, 0x2f, 0xff, 0x1e, 0xe8, 0xbd, 0x50, 0x03, - 0xe9, 0x9c, 0x00, 0x0c, 0xe0, 0x43, 0x00, 0x02, - 0xe1, 0xb0, 0x01, 0x40, 0x03, 0xa0, 0x20, 0x00, - 0x15, 0x8c, 0x30, 0x04, 0xe5, 0x81, 0x20, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe2, 0x80, 0x20, 0x03, 0xe3, 0xc2, 0x20, 0x03, - 0xe5, 0x9f, 0xc0, 0x24, 0xe2, 0x8c, 0xc0, 0x08, - 0xe8, 0x9c, 0x00, 0x03, 0xe0, 0x90, 0x20, 0x02, - 0x31, 0x52, 0x00, 0x01, 0x35, 0x8c, 0x20, 0x00, - 0x23, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x2e, 0x08, 0x21, 0x4c, 0x2e, 0x08, 0x21, 0x18, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x02, 0xcc, 0x18, - 0x2e, 0x02, 0xcc, 0x14, 0x2e, 0x02, 0xcc, 0x10, - 0x2e, 0x08, 0xd7, 0x68, 0x2e, 0x00, 0x1a, 0xf9, - 0x2e, 0x02, 0x0e, 0x19, 0x2e, 0x02, 0x0c, 0xcd, - 0x2e, 0x02, 0x0d, 0x8d, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x00, 0x04, 0xe5, 0x90, 0x00, 0x00, - 0xe2, 0x00, 0x04, 0xff, 0xe3, 0x50, 0x04, 0xea, - 0x03, 0xa0, 0x00, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe2, 0x40, 0x0b, 0x05, 0xe3, 0x50, 0x0b, 0x1b, - 0x33, 0xa0, 0x00, 0x01, 0x23, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe2, 0x8f, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x55, 0x6e, 0x6b, 0x6e, - 0x6f, 0x77, 0x6e, 0x20, 0x45, 0x72, 0x72, 0x6f, - 0x72, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x42, 0x72, 0x61, 0x6e, 0x63, 0x68, 0x20, 0x54, - 0x68, 0x72, 0x6f, 0x75, 0x67, 0x68, 0x20, 0x5a, - 0x65, 0x72, 0x6f, 0x00, 0x00, 0x02, 0x00, 0x01, - 0x55, 0x6e, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, - 0x64, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x02, 0x55, 0x6e, 0x64, 0x65, - 0x66, 0x69, 0x6e, 0x65, 0x64, 0x20, 0x53, 0x57, - 0x49, 0x20, 0x49, 0x6e, 0x73, 0x74, 0x72, 0x75, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x00, 0x00, 0x00, - 0x00, 0x02, 0x00, 0x03, 0x50, 0x72, 0x65, 0x66, - 0x65, 0x74, 0x63, 0x68, 0x20, 0x41, 0x62, 0x6f, - 0x72, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x04, - 0x44, 0x61, 0x74, 0x61, 0x20, 0x41, 0x62, 0x6f, - 0x72, 0x74, 0x00, 0x00, 0x00, 0x02, 0x00, 0x05, - 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, - 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x06, - 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x64, 0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x72, - 0x75, 0x70, 0x74, 0x00, 0x00, 0x02, 0x00, 0x07, - 0x55, 0x6e, 0x68, 0x61, 0x6e, 0x64, 0x6c, 0x65, - 0x64, 0x20, 0x46, 0x61, 0x73, 0x74, 0x20, 0x49, - 0x6e, 0x74, 0x65, 0x72, 0x72, 0x75, 0x70, 0x74, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x01, 0xfe, 0x80, - 0x2e, 0x01, 0xfe, 0x98, 0x2e, 0x01, 0xfe, 0xb4, - 0x2e, 0x01, 0xfe, 0xd4, 0x2e, 0x01, 0xfe, 0xe8, - 0x2e, 0x01, 0xfe, 0xf8, 0x2e, 0x01, 0xff, 0x10, - 0x2e, 0x01, 0xff, 0x28, 0xe2, 0x4f, 0x20, 0x28, - 0xe7, 0x92, 0x01, 0x00, 0xea, 0xff, 0xff, 0x1c, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x17, 0xc3, 0x40, 0x58, 0x1a, 0xc0, 0x1c, 0x01, - 0x08, 0x40, 0x08, 0x42, 0x18, 0x80, 0x09, 0x02, - 0x18, 0x80, 0x0a, 0x02, 0x18, 0x80, 0x0c, 0x02, - 0x18, 0x80, 0x08, 0xc0, 0x00, 0x82, 0x18, 0x12, - 0x00, 0x52, 0x1a, 0x89, 0x29, 0x0a, 0xdb, 0x01, - 0x1c, 0x40, 0x39, 0x0a, 0x40, 0x58, 0x1a, 0xc0, - 0x40, 0x59, 0x1a, 0xc9, 0x47, 0x70, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x30, 0x00, 0x02, - 0x01, 0x31, 0x00, 0x03, 0x0a, 0x00, 0x00, 0x05, - 0xe1, 0x80, 0xc0, 0x02, 0xe3, 0x3c, 0x01, 0x02, - 0x01, 0x91, 0xc0, 0x03, 0x03, 0xa0, 0x00, 0x01, - 0x13, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0xc4, 0xff, 0xe3, 0x8c, 0xc6, 0x0e, - 0xe1, 0x5c, 0x00, 0x80, 0x83, 0xa0, 0x00, 0x01, - 0x81, 0x2f, 0xff, 0x1e, 0x03, 0x51, 0x00, 0x00, - 0x03, 0xa0, 0x00, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xb5, 0x04, 0xf0, 0x00, - 0xf8, 0x04, 0xbc, 0x08, 0x60, 0x1a, 0xbc, 0x08, - 0x47, 0x18, 0x47, 0x78, 0xe1, 0xb0, 0x00, 0x80, - 0x03, 0x31, 0x00, 0x00, 0x01, 0xa0, 0x00, 0x60, - 0x03, 0xa0, 0x20, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x2a, 0xa0, 0xe1, 0xc0, 0x0a, 0x82, - 0xe1, 0xa0, 0x00, 0x60, 0xe3, 0x32, 0x00, 0x00, - 0xe2, 0x42, 0x2c, 0x03, 0xe2, 0x42, 0x20, 0xfe, - 0x0a, 0x00, 0x00, 0x06, 0xe3, 0x80, 0x04, 0x3f, - 0xe3, 0x80, 0x06, 0x0e, 0xe2, 0x22, 0x3b, 0x01, - 0xe3, 0x33, 0x00, 0x01, 0x11, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x10, 0x01, 0xea, 0x00, 0x04, 0x70, - 0xe2, 0x00, 0xc1, 0x02, 0xe1, 0xa0, 0x06, 0x00, - 0xe2, 0x42, 0x20, 0x01, 0xe1, 0xb0, 0x00, 0x80, - 0x4a, 0x00, 0x00, 0x02, 0xe1, 0xb0, 0x10, 0x81, - 0x23, 0x80, 0x0a, 0x01, 0xea, 0xff, 0xff, 0xf9, - 0xe1, 0xa0, 0x04, 0xc0, 0xe3, 0xc0, 0x05, 0x01, - 0xe1, 0x8c, 0x01, 0x20, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, - 0xe2, 0x00, 0xc1, 0x02, 0xe1, 0xb0, 0x30, 0x80, - 0xe1, 0xb0, 0x3a, 0xa3, 0x0a, 0x00, 0x00, 0x0b, - 0xe2, 0x83, 0xe0, 0x01, 0xe3, 0x5e, 0x0b, 0x02, - 0xaa, 0x00, 0x00, 0x39, 0xe0, 0x93, 0x30, 0x02, - 0xda, 0x00, 0x00, 0x11, 0xe2, 0x83, 0xe0, 0x01, - 0xe3, 0x5e, 0x0b, 0x02, 0xaa, 0x00, 0x00, 0x37, - 0xe1, 0x83, 0x06, 0x00, 0xe1, 0x8c, 0x06, 0x60, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x91, 0x30, 0x80, 0x01, 0xa0, 0x00, 0x0c, - 0x08, 0xbd, 0x40, 0x00, 0x01, 0x2f, 0xff, 0x1e, - 0xe1, 0xb0, 0x10, 0x81, 0xe0, 0xa0, 0x00, 0x00, - 0xe2, 0x42, 0x20, 0x01, 0xe3, 0x10, 0x06, 0x01, - 0x0a, 0xff, 0xff, 0xfa, 0xe3, 0xa0, 0x30, 0x01, - 0xea, 0xff, 0xff, 0xeb, 0xe1, 0xa0, 0x05, 0x80, - 0xe3, 0x80, 0x01, 0x02, 0xe3, 0x73, 0x00, 0x14, - 0xca, 0x00, 0x00, 0x05, 0xe3, 0x73, 0x00, 0x34, - 0xaa, 0x00, 0x00, 0x0d, 0xe1, 0xa0, 0x00, 0x0c, - 0xe3, 0xa0, 0x10, 0x00, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xa0, 0x05, 0xa0, - 0xe2, 0x63, 0x30, 0x01, 0xe2, 0x63, 0x20, 0x20, - 0xe1, 0xa0, 0xe2, 0x11, 0xe1, 0xb0, 0xe0, 0x8e, - 0xe1, 0xa0, 0xe2, 0x10, 0xe1, 0x8e, 0x13, 0x31, - 0xe1, 0xa0, 0x03, 0x30, 0xe1, 0x80, 0x00, 0x0c, - 0xea, 0x00, 0x00, 0x0a, 0xe2, 0x93, 0x30, 0x20, - 0xda, 0x00, 0x00, 0x03, 0xe1, 0x80, 0x0a, 0xa1, - 0xe1, 0xb0, 0xe3, 0x11, 0xe2, 0x63, 0x30, 0x0c, - 0xea, 0x00, 0x00, 0x02, 0xe2, 0x83, 0x30, 0x15, - 0xe1, 0x91, 0xe3, 0x10, 0xe2, 0x63, 0x30, 0x21, - 0xe1, 0xa0, 0x13, 0x30, 0xe1, 0xa0, 0x00, 0x0c, - 0x03, 0x11, 0x00, 0x01, 0x98, 0xbd, 0x40, 0x00, - 0x91, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, - 0x22, 0x80, 0x00, 0x01, 0xe8, 0xbd, 0x40, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe8, 0xbd, 0x40, 0x00, - 0xe3, 0xa0, 0x10, 0x01, 0xea, 0x00, 0x04, 0x1e, - 0xe8, 0xbd, 0x40, 0x00, 0xe3, 0xa0, 0x10, 0x01, - 0xea, 0x00, 0x04, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0xe1, 0xa0, 0x35, 0x0c, 0xe1, 0xa0, 0x0a, 0x2c, - 0xe1, 0xa0, 0x25, 0x81, 0xe1, 0x83, 0x1a, 0xa1, - 0x12, 0x80, 0x0b, 0x1e, 0xe1, 0xa0, 0x00, 0x60, - 0x13, 0x81, 0x11, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x0a, 0x00, 0x00, 0x02, 0xe3, 0x7c, 0x00, 0x01, - 0x03, 0x80, 0x01, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x11, 0x01, 0x02, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0xd1, 0x11, 0x02, 0x0a, 0x00, 0x00, 0x15, - 0xe1, 0xb0, 0x38, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x21, 0x01, 0xa0, 0x14, 0x01, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x21, - 0x01, 0xa0, 0x12, 0x01, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x21, 0x01, 0xa0, 0x11, 0x01, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa1, - 0x01, 0xa0, 0x10, 0x81, 0x02, 0x8c, 0xc0, 0x01, - 0xe2, 0x6c, 0x30, 0x20, 0xe1, 0x81, 0x13, 0x32, - 0xe1, 0xa0, 0x2c, 0x12, 0xe0, 0x40, 0x00, 0x0c, - 0xe2, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xb0, 0x38, 0x22, 0x01, 0xa0, 0x28, 0x02, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x22, 0x01, 0xa0, 0x24, 0x02, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x22, - 0x01, 0xa0, 0x22, 0x02, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x22, 0x01, 0xa0, 0x21, 0x02, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa2, - 0x01, 0xa0, 0x20, 0x82, 0x02, 0x8c, 0xc0, 0x01, - 0xe1, 0xa0, 0x10, 0x02, 0xe3, 0xa0, 0x20, 0x00, - 0xe2, 0x40, 0x00, 0x1f, 0xe0, 0x40, 0x00, 0x0c, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe8, 0x93, 0x00, 0x38, - 0xe3, 0x10, 0x01, 0x01, 0x03, 0x13, 0x01, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x03, 0xe5, - 0xeb, 0x00, 0x05, 0x39, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe1, 0x2f, 0xff, 0x1e, 0xe2, 0x4f, 0xe0, 0x14, - 0xe3, 0xa0, 0xb0, 0x00, 0xea, 0x00, 0x04, 0x7f, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, - 0xe1, 0xa0, 0x30, 0x00, 0xe1, 0xa0, 0x40, 0x01, - 0xe1, 0xa0, 0x50, 0x02, 0xe3, 0x10, 0x01, 0x01, - 0x1a, 0x00, 0x00, 0x03, 0xeb, 0x00, 0x03, 0xd7, - 0xeb, 0x00, 0x05, 0x2b, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe1, 0x2f, 0xff, 0x1e, 0xe2, 0x4f, 0xe0, 0x14, - 0xe3, 0xa0, 0xb0, 0x00, 0xea, 0x00, 0x04, 0x71, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0xa0, 0x38, 0x80, - 0xe1, 0xa0, 0x38, 0xa3, 0xe1, 0xc0, 0x00, 0x03, - 0xe1, 0xd1, 0xc0, 0x80, 0x5a, 0x00, 0x00, 0x0c, - 0xe2, 0x53, 0x3b, 0x0f, 0x4a, 0x00, 0x00, 0x13, - 0x12, 0x83, 0xc0, 0x01, 0x13, 0x5c, 0x0b, 0x02, - 0xaa, 0x00, 0x00, 0x0d, 0xe1, 0xb0, 0xc5, 0xa2, - 0x2a, 0x00, 0x00, 0x58, 0xe1, 0x80, 0x0a, 0x03, - 0xe3, 0xc1, 0x11, 0x02, 0xe1, 0x80, 0x05, 0xa1, - 0xe1, 0x8c, 0x1a, 0x81, 0xe3, 0xa0, 0x30, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x10, 0x01, 0x01, - 0x1a, 0x00, 0x00, 0x40, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x30, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe3, 0x33, 0x00, 0x00, - 0x13, 0xa0, 0x33, 0x19, 0x11, 0x2f, 0xff, 0x1e, - 0xe2, 0x93, 0x30, 0x34, 0x0a, 0x00, 0x00, 0x31, - 0x42, 0x00, 0x01, 0x02, 0x43, 0xa0, 0x10, 0x00, - 0x43, 0xa0, 0x30, 0x00, 0x41, 0x2f, 0xff, 0x1e, - 0xe2, 0x53, 0x30, 0x20, 0x0a, 0x00, 0x00, 0x13, - 0xba, 0x00, 0x00, 0x1a, 0xe1, 0xb0, 0xc3, 0x12, - 0x4a, 0x00, 0x00, 0x05, 0xe2, 0x63, 0xc0, 0x20, - 0xe1, 0x80, 0x0c, 0x31, 0xe1, 0xa0, 0x2c, 0x32, - 0xe1, 0x82, 0x13, 0x11, 0xe3, 0xa0, 0x30, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x96, 0xc0, 0x8c, - 0xe2, 0x63, 0xc0, 0x20, 0xe1, 0x80, 0x0c, 0x31, - 0xe1, 0xa0, 0x2c, 0x32, 0xe1, 0x82, 0x13, 0x11, - 0xe3, 0xa0, 0x30, 0x00, 0x03, 0x11, 0x00, 0x01, - 0x01, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, - 0x22, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0x32, 0x01, 0x02, - 0x41, 0x2f, 0xff, 0x1e, 0x03, 0x11, 0x00, 0x01, - 0x01, 0x2f, 0xff, 0x1e, 0xe2, 0x91, 0x10, 0x01, - 0x22, 0x80, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe2, 0x83, 0x30, 0x20, 0xe1, 0xb0, 0xc3, 0x11, - 0x4a, 0x00, 0x00, 0x04, 0xe2, 0x63, 0xc0, 0x20, - 0xe1, 0xa0, 0x1c, 0x31, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x3c, 0x01, 0x02, 0x01, 0x92, 0xc0, 0x06, - 0xe2, 0x63, 0xc0, 0x20, 0xe1, 0xa0, 0x1c, 0x31, - 0x03, 0x11, 0x00, 0x01, 0x12, 0x81, 0x10, 0x01, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x31, 0x01, 0x02, 0x03, 0x32, 0x00, 0x00, - 0x03, 0xa0, 0x10, 0x00, 0x13, 0xa0, 0x10, 0x01, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0x10, 0x02, 0x02, 0x1a, 0x00, 0x00, 0x0b, - 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0x31, 0x00, 0x00, - 0x11, 0xb0, 0x10, 0x81, 0x43, 0xe0, 0x00, 0x00, - 0x41, 0x2f, 0xff, 0x1e, 0x03, 0x32, 0x00, 0x00, - 0x13, 0xa0, 0x34, 0x61, 0x11, 0x2f, 0xff, 0x1e, - 0xe2, 0x00, 0x01, 0x02, 0xe3, 0x80, 0x02, 0x07, - 0xe3, 0x80, 0x06, 0xff, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x30, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe3, 0xc1, 0x11, 0x02, 0xe1, 0xa0, 0xcb, 0x02, - 0xe1, 0x9c, 0xc0, 0x06, 0xe2, 0x00, 0xc1, 0x02, - 0xe1, 0xa0, 0x0a, 0x03, 0xe1, 0x80, 0x05, 0xa1, - 0xe1, 0xa0, 0x1a, 0x81, 0xe1, 0x81, 0x15, 0xa2, - 0xe3, 0xa0, 0x30, 0x00, 0x0a, 0x00, 0x00, 0x06, - 0xe2, 0x91, 0x10, 0x01, 0x22, 0x80, 0x00, 0x01, - 0xe2, 0x90, 0x26, 0x01, 0xe1, 0x80, 0x00, 0x0c, - 0x51, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x33, 0x19, - 0xe1, 0x2f, 0xff, 0x1e, 0x03, 0x11, 0x00, 0x01, - 0x01, 0x80, 0x00, 0x0c, 0x01, 0x2f, 0xff, 0x1e, - 0xe2, 0x91, 0x10, 0x01, 0x22, 0x80, 0x00, 0x01, - 0xe2, 0x90, 0x26, 0x01, 0xe1, 0x80, 0x00, 0x0c, - 0x51, 0x2f, 0xff, 0x1e, 0xe3, 0xa0, 0x33, 0x19, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe1, 0xb0, 0xc0, 0x82, - 0x03, 0x33, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x3c, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x2a, 0x2c, - 0xe1, 0xa0, 0x55, 0x83, 0xe1, 0x88, 0x4a, 0xa3, - 0x12, 0x82, 0x2b, 0x1e, 0xe1, 0xa0, 0x30, 0x62, - 0x13, 0x84, 0x41, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0xf8, - 0xe3, 0x7c, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x16, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x3c, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x04, 0xb9, 0xe3, 0x7c, 0x00, 0x01, - 0x0a, 0x00, 0x00, 0x16, 0xe3, 0xa0, 0xb0, 0x02, - 0xeb, 0x00, 0x05, 0x15, 0xeb, 0xff, 0xff, 0x5f, - 0xe3, 0x13, 0x02, 0x02, 0x08, 0xbd, 0x4b, 0xf0, - 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x83, 0x35, 0x02, - 0xea, 0x00, 0x04, 0x0f, 0xe3, 0x83, 0x31, 0x01, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0e, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x04, 0xa1, 0xe3, 0x7c, 0x00, 0x01, - 0x03, 0x80, 0x01, 0x01, 0xe2, 0x4f, 0xe0, 0x60, - 0xe3, 0xa0, 0xb0, 0x02, 0xea, 0x00, 0x06, 0x2b, - 0xe1, 0x95, 0xc0, 0x84, 0x0a, 0x00, 0x00, 0x13, - 0xe1, 0xb0, 0x40, 0x84, 0x5a, 0x00, 0x00, 0x0d, - 0xe3, 0xe0, 0x00, 0x00, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0xb0, 0xc0, 0x80, - 0x03, 0x31, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x07, - 0xe1, 0xf0, 0xca, 0x4c, 0x08, 0xbd, 0x4b, 0xf0, - 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x3c, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x04, 0xe1, 0x91, 0xc6, 0x00, - 0x08, 0xbd, 0x4b, 0xf0, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x35, 0x06, 0xea, 0x00, 0x03, 0xe8, - 0xe3, 0xa0, 0x35, 0x0a, 0xea, 0x00, 0x03, 0xe6, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe8, 0xbd, 0x4b, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, - 0xe1, 0xb0, 0xc0, 0x82, 0x03, 0x33, 0x00, 0x00, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x2a, 0x2c, - 0xe1, 0xa0, 0x55, 0x83, 0xe1, 0x88, 0x4a, 0xa3, - 0x12, 0x82, 0x2b, 0x1e, 0xe1, 0xa0, 0x30, 0x62, - 0x13, 0x84, 0x41, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0xa4, - 0xe3, 0x7c, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x14, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x0a, 0x2c, - 0xe1, 0xa0, 0x25, 0x81, 0xe1, 0x88, 0x1a, 0xa1, - 0x12, 0x80, 0x0b, 0x1e, 0xe1, 0xa0, 0x00, 0x60, - 0x13, 0x81, 0x11, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0x66, - 0xe3, 0x7c, 0x00, 0x01, 0x0a, 0x00, 0x00, 0x14, - 0xeb, 0x00, 0x02, 0xdc, 0xeb, 0xff, 0xff, 0x0d, - 0xe3, 0x13, 0x02, 0x02, 0x08, 0xbd, 0x4b, 0xf0, - 0x01, 0x2f, 0xff, 0x1e, 0xe3, 0x83, 0x35, 0x02, - 0xea, 0x00, 0x03, 0xbd, 0xe3, 0x83, 0x31, 0x01, - 0xe1, 0xb0, 0xc0, 0x80, 0x03, 0x31, 0x00, 0x00, - 0xe1, 0xa0, 0x85, 0x0c, 0xe1, 0xa0, 0x0a, 0x2c, - 0xe1, 0xa0, 0x25, 0x81, 0xe1, 0x88, 0x1a, 0xa1, - 0x12, 0x80, 0x0b, 0x1e, 0xe1, 0xa0, 0x00, 0x60, - 0x13, 0x81, 0x11, 0x02, 0xe1, 0xb0, 0xca, 0xcc, - 0x02, 0x8f, 0xe0, 0x08, 0x0a, 0x00, 0x04, 0x50, - 0xe3, 0x7c, 0x00, 0x01, 0x03, 0x80, 0x01, 0x01, - 0xe2, 0x4f, 0xe0, 0x5c, 0xe3, 0xa0, 0xb0, 0x02, - 0xea, 0x00, 0x03, 0x64, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0xc4, 0xff, 0xe3, 0x8c, 0xc6, 0x0e, - 0xe1, 0x5c, 0x00, 0x82, 0x9a, 0x00, 0x00, 0x0a, - 0xe1, 0xb0, 0x00, 0x80, 0x03, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x0a, 0x3a, 0x00, 0x00, 0x12, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0xff, 0xfc, 0x60, 0xe1, 0xb0, 0x20, 0x82, - 0x8a, 0x00, 0x00, 0x18, 0xe3, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x03, 0x53, 0x00, 0x00, - 0x0a, 0xff, 0xff, 0xf2, 0xea, 0xff, 0xfc, 0x5d, - 0xe1, 0x50, 0x00, 0x0c, 0x03, 0x51, 0x00, 0x00, - 0x8a, 0xff, 0xfc, 0x56, 0xe1, 0xb0, 0x20, 0x82, - 0x33, 0xa0, 0x00, 0x00, 0x23, 0xa0, 0x00, 0x01, - 0x03, 0x33, 0x00, 0x00, 0x03, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfc, 0x4d, - 0xe1, 0xb0, 0x20, 0x82, 0x23, 0xa0, 0x00, 0x01, - 0x21, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, - 0x01, 0x51, 0x00, 0x03, 0x33, 0xa0, 0x00, 0x00, - 0x23, 0xa0, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, - 0x83, 0xa0, 0x00, 0x00, 0x93, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0xb0, 0x20, 0x80, 0xe1, 0xa0, 0x2a, 0xa2, - 0xe1, 0xa0, 0x05, 0x80, 0xe1, 0x80, 0x0a, 0xa1, - 0xe3, 0x80, 0x01, 0x02, 0xe2, 0x42, 0x2c, 0x03, - 0x2a, 0x00, 0x00, 0x08, 0xe2, 0x52, 0x20, 0xff, - 0x4a, 0x00, 0x00, 0x04, 0xe2, 0x72, 0x20, 0x1f, - 0xc1, 0xa0, 0x02, 0x30, 0xc1, 0x2f, 0xff, 0x1e, - 0xe3, 0xc0, 0x01, 0x02, 0xea, 0x00, 0x00, 0x09, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe2, 0x52, 0x20, 0xff, 0x4a, 0xff, 0xff, 0xfb, - 0xe2, 0x72, 0x20, 0x1f, 0xc1, 0xa0, 0x02, 0x30, - 0xc2, 0x60, 0x00, 0x00, 0xc1, 0x2f, 0xff, 0x1e, - 0x01, 0x91, 0xc0, 0x80, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0xa0, 0x36, 0x12, 0xe2, 0x82, 0x2e, 0x3e, - 0xe3, 0x72, 0x00, 0x01, 0x1a, 0x00, 0x03, 0x63, - 0xe1, 0x91, 0xc0, 0x80, 0x13, 0xa0, 0x37, 0x42, - 0xea, 0x00, 0x03, 0x60, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe2, 0x22, 0x21, 0x02, - 0xea, 0x00, 0x00, 0x01, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x4b, 0xf0, 0xe1, 0xb0, 0xc0, 0x82, - 0x03, 0x33, 0x00, 0x00, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x2a, 0x2c, 0xe1, 0xa0, 0x55, 0x83, - 0xe1, 0x88, 0x4a, 0xa3, 0x12, 0x82, 0x2b, 0x1e, - 0xe1, 0xa0, 0x30, 0x62, 0x13, 0x84, 0x41, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x04, 0x1d, 0xe3, 0x7c, 0x00, 0x01, - 0x0a, 0x00, 0x00, 0x14, 0xe1, 0xb0, 0xc0, 0x80, - 0x03, 0x31, 0x00, 0x00, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x03, 0xdf, 0xe3, 0x7c, 0x00, 0x01, - 0x0a, 0x00, 0x00, 0x14, 0xeb, 0x00, 0x05, 0xbb, - 0xeb, 0xff, 0xfe, 0x86, 0xe3, 0x13, 0x02, 0x02, - 0x08, 0xbd, 0x4b, 0xf0, 0x01, 0x2f, 0xff, 0x1e, - 0xe3, 0x83, 0x35, 0x02, 0xea, 0x00, 0x03, 0x36, - 0xe3, 0x83, 0x31, 0x01, 0xe1, 0xb0, 0xc0, 0x80, - 0x03, 0x31, 0x00, 0x00, 0xe1, 0xa0, 0x85, 0x0c, - 0xe1, 0xa0, 0x0a, 0x2c, 0xe1, 0xa0, 0x25, 0x81, - 0xe1, 0x88, 0x1a, 0xa1, 0x12, 0x80, 0x0b, 0x1e, - 0xe1, 0xa0, 0x00, 0x60, 0x13, 0x81, 0x11, 0x02, - 0xe1, 0xb0, 0xca, 0xcc, 0x02, 0x8f, 0xe0, 0x08, - 0x0a, 0x00, 0x03, 0xc9, 0xe3, 0x7c, 0x00, 0x01, - 0x03, 0x80, 0x01, 0x01, 0xe2, 0x4f, 0xe0, 0x5c, - 0xe3, 0xa0, 0xb0, 0x02, 0xea, 0x00, 0x05, 0xff, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x4b, 0xf0, - 0xe2, 0x20, 0x01, 0x02, 0xea, 0xff, 0xff, 0xc6, - 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0xc4, 0xff, - 0xe3, 0x8c, 0xc6, 0x0e, 0xe1, 0x5c, 0x00, 0x82, - 0x9a, 0x00, 0x00, 0x0a, 0xe1, 0xb0, 0x00, 0x80, - 0x03, 0x31, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x0a, - 0x3a, 0x00, 0x00, 0x11, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfb, 0xd5, - 0xe1, 0xb0, 0x20, 0x82, 0x8a, 0x00, 0x00, 0x17, - 0xe3, 0xa0, 0x00, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0x03, 0x53, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xf2, - 0xea, 0xff, 0xfb, 0xd2, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfb, 0xcb, - 0xe1, 0xb0, 0x20, 0x82, 0x03, 0x33, 0x00, 0x00, - 0x83, 0xa0, 0x00, 0x00, 0x93, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x0c, - 0x03, 0x51, 0x00, 0x00, 0x8a, 0xff, 0xfb, 0xc3, - 0xe1, 0xb0, 0x20, 0x82, 0x23, 0xa0, 0x00, 0x00, - 0x21, 0x2f, 0xff, 0x1e, 0xe1, 0x50, 0x00, 0x02, - 0x01, 0x51, 0x00, 0x03, 0x93, 0xa0, 0x00, 0x01, - 0x83, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0x50, 0x00, 0x02, 0x01, 0x51, 0x00, 0x03, - 0x33, 0xa0, 0x00, 0x00, 0x23, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x42, 0x99, 0xd1, 0x03, - 0x42, 0x90, 0xd1, 0x01, 0x20, 0x00, 0x47, 0x70, - 0x20, 0x01, 0x47, 0x70, 0xb5, 0x70, 0x1c, 0x04, - 0x1c, 0x0d, 0x1c, 0x16, 0x46, 0x9e, 0x47, 0x78, - 0xe3, 0xa0, 0x00, 0x00, 0xe3, 0xa0, 0x10, 0x00, - 0xe1, 0xa0, 0x30, 0x05, 0xe1, 0xa0, 0x20, 0x04, - 0xe3, 0x3e, 0x00, 0x00, 0x03, 0x36, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x14, 0xe3, 0xb0, 0xc0, 0x00, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xbe, 0xe0, 0x0e, - 0x2a, 0x00, 0x00, 0x04, 0xe1, 0x5e, 0x00, 0x03, - 0x01, 0x56, 0x00, 0x02, 0x92, 0x8c, 0xc0, 0x01, - 0x9a, 0xff, 0xff, 0xf8, 0xe2, 0x9c, 0xc0, 0x00, - 0xe1, 0xb0, 0xe0, 0x6e, 0xe1, 0xa0, 0x60, 0x66, - 0xe0, 0x52, 0x40, 0x06, 0xe0, 0xd3, 0x50, 0x0e, - 0x21, 0xa0, 0x30, 0x05, 0x21, 0xa0, 0x20, 0x04, - 0xe0, 0xb0, 0x00, 0x00, 0xe0, 0xa1, 0x10, 0x01, - 0xe1, 0xb0, 0xe0, 0xae, 0xe1, 0xa0, 0x60, 0x66, - 0xe2, 0x5c, 0xc0, 0x01, 0xaa, 0xff, 0xff, 0xf5, - 0xe8, 0xbd, 0x40, 0x70, 0xe1, 0x2f, 0xff, 0x1e, - 0x18, 0x80, 0x41, 0x59, 0x47, 0x70, 0x00, 0x00, - 0x1c, 0x01, 0x08, 0x40, 0x08, 0x42, 0x18, 0x80, - 0x09, 0x02, 0x18, 0x80, 0x0a, 0x02, 0x18, 0x80, - 0x0c, 0x02, 0x18, 0x80, 0x08, 0xc0, 0x00, 0x82, - 0x18, 0x12, 0x00, 0x52, 0x1a, 0x89, 0x29, 0x0a, - 0xdb, 0x01, 0x1c, 0x40, 0x39, 0x0a, 0x47, 0x70, - 0xb4, 0x80, 0x20, 0x03, 0x43, 0xc0, 0x23, 0x00, - 0x49, 0x07, 0x54, 0x0b, 0x30, 0x01, 0xd4, 0xfc, - 0x20, 0x00, 0x4a, 0x06, 0x5c, 0x17, 0x54, 0x0f, - 0x18, 0x0f, 0x37, 0x80, 0x70, 0x3b, 0x30, 0x01, - 0x28, 0x80, 0xd3, 0xf7, 0xbc, 0x80, 0x47, 0x70, - 0x2e, 0x08, 0x22, 0x44, 0x2e, 0x03, 0xa9, 0x2c, - 0x17, 0xc1, 0x47, 0x70, 0x42, 0x99, 0xdb, 0x04, - 0xdc, 0x01, 0x42, 0x90, 0xd3, 0x01, 0x20, 0x00, - 0x47, 0x70, 0x20, 0x01, 0x47, 0x70, 0x00, 0x00, - 0x1c, 0x0b, 0x21, 0x00, 0x42, 0x40, 0x41, 0x99, - 0x47, 0x70, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0xb0, 0x00, 0xe1, 0xa0, 0x20, 0x01, - 0xe8, 0x80, 0x00, 0x0e, 0xe5, 0x9f, 0xc0, 0x38, - 0xe5, 0x8c, 0xd0, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0x20, 0x28, - 0xe5, 0x92, 0x20, 0x00, 0xe5, 0x91, 0x40, 0x2c, - 0xe5, 0x91, 0xc0, 0x34, 0xe1, 0x5c, 0x00, 0x02, - 0x23, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc0, 0x08, - 0xe5, 0x9c, 0xd0, 0x00, 0xe3, 0xa0, 0xb0, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x2e, 0x08, 0x23, 0x44, - 0x47, 0x78, 0x00, 0x00, 0xe9, 0x2d, 0x40, 0x00, - 0xe5, 0x9f, 0xc0, 0xe4, 0xe5, 0x9c, 0x00, 0x00, - 0xe3, 0x50, 0x00, 0x00, 0xe3, 0xa0, 0x00, 0x04, - 0x15, 0x8c, 0x00, 0x04, 0x0b, 0x00, 0x00, 0x01, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe5, 0x9f, 0xc0, 0xcc, 0xea, 0xff, 0xfb, 0x87, - 0xe3, 0xa0, 0x10, 0x0a, 0xe3, 0x50, 0x01, 0x02, - 0x13, 0x50, 0x01, 0x06, 0x13, 0x50, 0x01, 0x16, - 0x03, 0xa0, 0x10, 0x03, 0xe3, 0x50, 0x01, 0x0a, - 0x13, 0x50, 0x01, 0x0e, 0x03, 0xa0, 0x10, 0x05, - 0xe5, 0x9f, 0x20, 0xa8, 0xe1, 0x50, 0x00, 0x02, - 0xe2, 0x82, 0x20, 0xff, 0x21, 0x52, 0x00, 0x00, - 0x23, 0xa0, 0x10, 0x02, 0xe3, 0x50, 0x01, 0x82, - 0x03, 0xa0, 0x10, 0x02, 0xe3, 0x50, 0x01, 0x86, - 0x03, 0xa0, 0x10, 0x07, 0xe5, 0x9f, 0x20, 0x88, - 0xe0, 0x50, 0x20, 0x02, 0x13, 0x52, 0x00, 0x01, - 0x03, 0xa0, 0x10, 0x05, 0xe1, 0xa0, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x1e, 0x47, 0x78, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x02, 0xe1, 0xa0, 0x30, 0x00, - 0xeb, 0xff, 0xff, 0xe4, 0xe8, 0xbd, 0x40, 0x02, - 0xe5, 0x9f, 0xc0, 0x50, 0xe3, 0xa0, 0x20, 0x01, - 0xe5, 0xcc, 0x20, 0x00, 0xe9, 0x2d, 0x00, 0x0a, - 0xeb, 0xff, 0xff, 0xdc, 0xea, 0x00, 0x00, 0x09, - 0x47, 0x78, 0x00, 0x00, 0xe5, 0x9f, 0xc0, 0x30, - 0xe3, 0xa0, 0x10, 0x00, 0xe5, 0x8c, 0x10, 0x00, - 0xe5, 0x9c, 0x00, 0x04, 0xe3, 0x50, 0x00, 0x00, - 0x01, 0x2f, 0xff, 0x1e, 0xe5, 0x8c, 0x10, 0x04, - 0xea, 0xff, 0xff, 0xd2, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0xa0, 0xc0, 0x0d, 0xe9, 0x2d, 0xd9, 0xf0, - 0xe2, 0x4c, 0xb0, 0x04, 0xe3, 0xa0, 0x10, 0x01, - 0xea, 0xff, 0xfb, 0xa4, 0x2e, 0x08, 0x21, 0x34, - 0x2e, 0x08, 0x21, 0x46, 0x2e, 0x02, 0x24, 0x85, - 0x80, 0x00, 0x02, 0x00, 0x80, 0x80, 0x0e, 0xa0, - 0xb5, 0xff, 0xa6, 0x23, 0xa5, 0x22, 0xa4, 0x22, - 0x68, 0x5a, 0x68, 0x1f, 0x4b, 0x21, 0x60, 0x5a, - 0x23, 0x00, 0x4a, 0x21, 0x70, 0x13, 0x70, 0x53, - 0x70, 0x93, 0x4a, 0x20, 0x2a, 0x00, 0xd0, 0x02, - 0x9a, 0x02, 0xf7, 0xff, 0xff, 0xfe, 0x48, 0x1e, - 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, - 0x48, 0x1c, 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, - 0xff, 0xfe, 0x48, 0x1b, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xff, 0x06, 0x48, 0x19, 0x28, 0x00, - 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, 0x48, 0x18, - 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x01, 0xfb, 0xf8, - 0x48, 0x16, 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x01, - 0xfd, 0x69, 0x48, 0x15, 0x28, 0x00, 0xd0, 0x01, - 0xf7, 0xff, 0xff, 0xfe, 0xf7, 0xff, 0xff, 0xa0, - 0x48, 0x12, 0x28, 0x00, 0xd0, 0x04, 0x1c, 0x30, - 0x1c, 0x29, 0x1c, 0x22, 0xf0, 0x01, 0xff, 0x6e, - 0x2f, 0x00, 0xd0, 0x01, 0xf7, 0xfd, 0xfa, 0x5a, - 0xb0, 0x04, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x3a, 0x74, 0x74, 0x00, 0x2e, 0x08, 0x23, 0x48, - 0x2e, 0x08, 0x23, 0x48, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x0b, 0x1d, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x25, 0x15, 0x2e, 0x02, 0x28, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x02, 0x2c, 0x29, - 0xb5, 0x90, 0x28, 0x00, 0xd0, 0x04, 0x48, 0x12, - 0x28, 0x00, 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, - 0x4f, 0x10, 0x68, 0x78, 0x28, 0x00, 0xd0, 0x03, - 0xf7, 0xfd, 0xfa, 0x22, 0x20, 0x00, 0x60, 0x78, - 0x4f, 0x0d, 0x78, 0x78, 0x24, 0x01, 0x28, 0x00, - 0xd1, 0x05, 0x70, 0x7c, 0x48, 0x0b, 0x28, 0x00, - 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, 0x78, 0xb8, - 0x28, 0x00, 0xd1, 0x05, 0x70, 0xbc, 0x48, 0x08, - 0x28, 0x00, 0xd0, 0x01, 0xf0, 0x01, 0xff, 0x7a, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x08, 0x23, 0x48, - 0x2e, 0x08, 0x23, 0x48, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x02, 0x2c, 0xc9, 0xb5, 0x90, 0x1c, 0x0c, - 0x21, 0x01, 0x1c, 0x17, 0xf0, 0x01, 0xfb, 0x9c, - 0x21, 0x00, 0x1c, 0x20, 0xf0, 0x01, 0xfb, 0x98, - 0x21, 0x02, 0x1c, 0x38, 0xf0, 0x01, 0xfb, 0x94, - 0x20, 0x01, 0xf7, 0xfe, 0xfe, 0x95, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0xf1, 0x20, 0x00, - 0xb0, 0x89, 0x90, 0x06, 0x26, 0x00, 0x90, 0x05, - 0x20, 0x01, 0x90, 0x04, 0x27, 0x00, 0x20, 0x00, - 0x90, 0x03, 0x90, 0x02, 0x25, 0x00, 0x90, 0x01, - 0xf0, 0x01, 0xfc, 0xc2, 0x1c, 0x04, 0x78, 0x00, - 0x28, 0x00, 0xd0, 0x17, 0x49, 0xe3, 0x5d, 0xe0, - 0x5c, 0x08, 0x08, 0x40, 0xd3, 0x06, 0x37, 0x01, - 0x5d, 0xe0, 0x5c, 0x08, 0x08, 0x40, 0xd2, 0xfa, - 0xe0, 0x00, 0x37, 0x01, 0x5d, 0xe0, 0x5c, 0x0a, - 0x08, 0x52, 0xd2, 0x01, 0x28, 0x00, 0xd1, 0xf8, - 0x98, 0x04, 0x30, 0x01, 0x90, 0x04, 0x5d, 0xe0, - 0x28, 0x00, 0xd1, 0xe8, 0x98, 0x04, 0x00, 0x80, - 0xf0, 0x01, 0xfc, 0xde, 0x4b, 0xd6, 0x93, 0x08, - 0x60, 0x18, 0x1c, 0x78, 0xf0, 0x01, 0xfc, 0xd8, - 0x9b, 0x08, 0x60, 0x58, 0x48, 0xd3, 0x28, 0x00, - 0xd0, 0x01, 0xf7, 0xff, 0xff, 0xfe, 0x21, 0x00, - 0x20, 0x00, 0x90, 0x04, 0x48, 0xd0, 0x90, 0x07, - 0x78, 0x27, 0x34, 0x01, 0x2e, 0x00, 0xd1, 0x58, - 0x2f, 0x22, 0xd0, 0x01, 0x2f, 0x27, 0xd1, 0x02, - 0x97, 0x05, 0x1c, 0x3e, 0xe0, 0x93, 0x98, 0x06, - 0x42, 0x81, 0xd1, 0x4e, 0x98, 0x03, 0x28, 0x00, - 0xd1, 0x4b, 0x25, 0x00, 0x43, 0xed, 0x1c, 0x2a, - 0x95, 0x01, 0x22, 0x00, 0xab, 0x00, 0x70, 0x1a, - 0x70, 0x5a, 0x1e, 0x60, 0x78, 0x02, 0x2a, 0x30, - 0xdb, 0x04, 0x2a, 0x39, 0xdc, 0x02, 0x30, 0x01, - 0x1f, 0xd5, 0x3d, 0x29, 0x78, 0x02, 0x2a, 0x3e, - 0xd0, 0x01, 0x2a, 0x3c, 0xd1, 0x35, 0x2a, 0x3e, - 0xd1, 0x0e, 0x22, 0x77, 0xab, 0x00, 0x70, 0x1a, - 0x2d, 0x00, 0xd0, 0x63, 0x2d, 0x02, 0xdc, 0x62, - 0x78, 0x42, 0x30, 0x01, 0x2a, 0x3e, 0xd1, 0x13, - 0x22, 0x61, 0x70, 0x1a, 0x30, 0x01, 0xe0, 0x0f, - 0x30, 0x01, 0x1c, 0x02, 0xe0, 0x02, 0x2b, 0x3e, - 0xd0, 0x56, 0x32, 0x01, 0x78, 0x13, 0x2b, 0x00, - 0xd0, 0x01, 0x2b, 0x20, 0xd1, 0xf7, 0x2d, 0x00, - 0xdc, 0x4d, 0x22, 0x72, 0xab, 0x00, 0x70, 0x1a, - 0x78, 0x02, 0x2a, 0x26, 0xd1, 0x24, 0x23, 0x01, - 0x42, 0xdd, 0xd0, 0x19, 0x2d, 0x00, 0xdd, 0x5e, - 0x78, 0x42, 0x30, 0x01, 0x2a, 0x30, 0xdb, 0x5b, - 0x2a, 0x32, 0xdc, 0x3c, 0x30, 0x01, 0x1c, 0x2b, - 0xd5, 0x04, 0x07, 0xdb, 0x0f, 0xdb, 0x42, 0x5b, - 0xe0, 0x02, 0xe0, 0x42, 0x07, 0xdb, 0x0f, 0xdb, - 0x33, 0x31, 0x42, 0x9a, 0xd1, 0x63, 0x22, 0x00, - 0xab, 0x00, 0x70, 0x1a, 0x95, 0x01, 0xe0, 0x11, - 0x22, 0x02, 0x92, 0x01, 0xaa, 0x00, 0x78, 0x12, - 0x30, 0x01, 0x2a, 0x72, 0xd0, 0x09, 0xe0, 0x06, - 0x23, 0x01, 0x42, 0xdd, 0xd1, 0x06, 0xaa, 0x00, - 0x78, 0x12, 0x2a, 0x72, 0xd0, 0x01, 0x25, 0x01, - 0xe0, 0x00, 0x25, 0x00, 0xaa, 0x00, 0x78, 0x12, - 0x2a, 0x00, 0xd0, 0x16, 0x22, 0x01, 0x92, 0x03, - 0x4a, 0x8c, 0x78, 0x03, 0x5c, 0xd3, 0x08, 0x5b, - 0xd3, 0x04, 0x78, 0x43, 0x5c, 0xd3, 0x30, 0x01, - 0x08, 0x5b, 0xd2, 0xfa, 0x78, 0x02, 0x2a, 0x22, - 0xd0, 0x01, 0x2a, 0x27, 0xd1, 0x0c, 0x30, 0x01, - 0x1c, 0x16, 0xe0, 0x09, 0xe0, 0x6a, 0xe0, 0xfb, - 0xe0, 0x23, 0x78, 0x02, 0x2a, 0x00, 0xd0, 0x03, - 0x4b, 0x80, 0x5c, 0x9a, 0x08, 0x52, 0xd3, 0x61, - 0x22, 0x01, 0x92, 0x02, 0x1c, 0x04, 0x78, 0x27, - 0x34, 0x01, 0x2e, 0x00, 0xd0, 0x15, 0x2f, 0x5c, - 0xd1, 0x0b, 0x78, 0x20, 0x28, 0x22, 0xd0, 0x03, - 0x28, 0x5c, 0xd0, 0x01, 0x28, 0x27, 0xd1, 0x04, - 0x34, 0x01, 0x1c, 0x07, 0xe0, 0x09, 0xe0, 0xdf, - 0xe0, 0xde, 0x1c, 0x30, 0x42, 0xb7, 0xd1, 0x04, - 0x40, 0x7e, 0x78, 0x27, 0x34, 0x01, 0x42, 0x87, - 0xd0, 0xfa, 0x2f, 0x00, 0xd0, 0x0c, 0x2e, 0x00, - 0xd1, 0x03, 0x48, 0x6e, 0x5d, 0xc0, 0x08, 0x40, - 0xd2, 0x06, 0x1c, 0x08, 0x9b, 0x08, 0x68, 0x5a, - 0x54, 0x17, 0x31, 0x01, 0xe0, 0x97, 0xe0, 0xc7, - 0x98, 0x06, 0x42, 0x81, 0xd1, 0x08, 0x98, 0x05, - 0x28, 0x00, 0xd1, 0x05, 0x98, 0x02, 0x28, 0x00, - 0xd0, 0x74, 0x98, 0x03, 0x28, 0x00, 0xd1, 0x72, - 0x22, 0x00, 0x1c, 0x08, 0x9b, 0x08, 0x68, 0x5b, - 0x54, 0x1a, 0x98, 0x02, 0x31, 0x01, 0x28, 0x00, - 0xd0, 0x6a, 0x98, 0x03, 0x28, 0x00, 0xd0, 0x13, - 0x01, 0xa8, 0x99, 0x07, 0x18, 0x42, 0x9b, 0x08, - 0x68, 0x58, 0x99, 0x06, 0x18, 0x40, 0x46, 0x69, - 0xf0, 0x01, 0xfd, 0x3a, 0x28, 0x00, 0xd1, 0x07, - 0x9b, 0x08, 0x68, 0x58, 0x99, 0x06, 0x18, 0x41, - 0xa2, 0x58, 0xa0, 0x5e, 0xf7, 0xff, 0xfe, 0xb6, - 0x23, 0x01, 0x98, 0x01, 0x42, 0xd8, 0xdd, 0x51, - 0x98, 0x01, 0x28, 0x00, 0xda, 0x03, 0x40, 0x18, - 0x42, 0x40, 0xe0, 0x02, 0xe0, 0x90, 0x07, 0xc0, - 0x0f, 0xc0, 0x1c, 0x41, 0x98, 0x01, 0xf0, 0x01, - 0xfe, 0x29, 0x01, 0x80, 0x99, 0x07, 0x18, 0x40, - 0xf0, 0x01, 0xfa, 0xdc, 0x28, 0x00, 0xd1, 0x3d, - 0xb0, 0x82, 0x98, 0x03, 0x01, 0x80, 0x99, 0x09, - 0x18, 0x40, 0x90, 0x01, 0x9a, 0x03, 0x2a, 0x00, - 0xda, 0x03, 0x07, 0xd2, 0x0f, 0xd2, 0x42, 0x52, - 0xe0, 0x01, 0x07, 0xd2, 0x0f, 0xd2, 0x01, 0x90, - 0x99, 0x09, 0x18, 0x40, 0x30, 0x40, 0x90, 0x00, - 0x20, 0xff, 0x30, 0x01, 0xf0, 0x01, 0xfb, 0xa8, - 0x1c, 0x01, 0x23, 0xff, 0x22, 0x01, 0x02, 0x52, - 0x98, 0x01, 0x33, 0x01, 0xf0, 0x01, 0xfe, 0x1e, - 0x98, 0x01, 0x68, 0xc0, 0x23, 0x01, 0x02, 0xdb, - 0x43, 0x18, 0x99, 0x01, 0x60, 0xc8, 0x08, 0xd8, - 0xf0, 0x01, 0xfb, 0x96, 0x1c, 0x01, 0x23, 0xff, - 0x22, 0x01, 0x02, 0x52, 0x98, 0x00, 0x33, 0x01, - 0xf0, 0x01, 0xfe, 0x0c, 0x98, 0x00, 0x68, 0xc0, - 0x23, 0x01, 0x02, 0xdb, 0x43, 0x18, 0x99, 0x00, - 0x60, 0xc8, 0xe0, 0x02, 0xe0, 0x13, 0xe0, 0x12, - 0xe0, 0x05, 0xb0, 0x02, 0x20, 0x00, 0x90, 0x02, - 0x90, 0x03, 0x99, 0x06, 0xe0, 0x0b, 0x9b, 0x08, - 0x68, 0x58, 0x9a, 0x06, 0x18, 0x82, 0x98, 0x04, - 0x1c, 0x43, 0x93, 0x04, 0x00, 0x80, 0x9b, 0x08, - 0x68, 0x1b, 0x50, 0x1a, 0x91, 0x06, 0x2f, 0x00, - 0xd0, 0x01, 0x26, 0x00, 0x96, 0x05, 0x2f, 0x00, - 0xd0, 0x00, 0xe6, 0x9d, 0x2e, 0x00, 0xd0, 0x0a, - 0xb0, 0x81, 0xab, 0x00, 0x70, 0x1e, 0x22, 0x00, - 0x70, 0x5a, 0x46, 0x69, 0xa2, 0x24, 0xa0, 0x25, - 0xf7, 0xff, 0xfe, 0x3c, 0xb0, 0x01, 0x22, 0x00, - 0x98, 0x04, 0x00, 0x80, 0x9b, 0x08, 0x68, 0x19, - 0x50, 0x0a, 0x98, 0x04, 0x28, 0x00, 0xdd, 0x0f, - 0x9b, 0x08, 0x68, 0x18, 0x68, 0x01, 0x68, 0x09, - 0x4b, 0x21, 0x40, 0x19, 0xa2, 0x21, 0x68, 0x12, - 0x42, 0x91, 0xd1, 0x05, 0x9b, 0x04, 0x3b, 0x01, - 0x93, 0x04, 0x30, 0x04, 0x9b, 0x08, 0x60, 0x18, - 0x9a, 0x09, 0x9b, 0x08, 0x68, 0x19, 0x98, 0x04, - 0xf7, 0xfe, 0xfc, 0x47, 0xf7, 0xfe, 0xfc, 0xc0, - 0x1e, 0x61, 0xa2, 0x19, 0xa0, 0x19, 0xf7, 0xff, - 0xfe, 0x15, 0xb0, 0x09, 0xb0, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x22, 0x44, - 0x2e, 0x08, 0x23, 0x50, 0x00, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x48, 0x27, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x49, 0x2f, 0x4f, 0x20, 0x72, 0x65, - 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x0a, 0x00, 0x00, 0x63, 0x61, 0x6e, 0x27, - 0x74, 0x20, 0x6f, 0x70, 0x65, 0x6e, 0x20, 0x27, - 0x00, 0x00, 0x00, 0x00, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x63, 0x6c, 0x6f, 0x73, - 0x69, 0x6e, 0x67, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xdf, 0xdf, 0xdf, 0xdf, 0x52, 0x55, 0x4e, 0x00, - 0x27, 0x0a, 0x00, 0x00, 0x75, 0x6e, 0x73, 0x75, - 0x70, 0x70, 0x6f, 0x72, 0x74, 0x65, 0x64, 0x20, - 0x6f, 0x72, 0x20, 0x69, 0x6c, 0x6c, 0x65, 0x67, - 0x61, 0x6c, 0x20, 0x49, 0x2f, 0x4f, 0x20, 0x72, - 0x65, 0x64, 0x69, 0x72, 0x65, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x20, 0x27, 0x00, 0x00, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe3, 0xa0, 0x20, 0x01, - 0xea, 0x00, 0x00, 0x01, 0x47, 0x78, 0x00, 0x00, - 0xe3, 0xa0, 0x20, 0x02, 0xe2, 0x00, 0x31, 0x02, - 0xe5, 0x9f, 0x00, 0x18, 0xe5, 0x80, 0x20, 0x00, - 0xe3, 0x31, 0x00, 0x00, 0x03, 0xa0, 0x00, 0x00, - 0x15, 0x9f, 0x00, 0x0c, 0x18, 0x90, 0x00, 0x03, - 0xe1, 0x80, 0x00, 0x03, 0xe1, 0x2f, 0xff, 0x1e, - 0x2e, 0x08, 0x21, 0x30, 0x2e, 0x08, 0x21, 0x3c, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x88, 0x30, 0x09, 0xe2, 0x43, 0x3c, 0x3f, - 0xe2, 0x43, 0x30, 0xfe, 0xe3, 0x32, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x5d, 0xe3, 0x35, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x3d, 0xe9, 0x2d, 0x48, 0x81, - 0xe1, 0xa0, 0x08, 0x21, 0xe1, 0xc1, 0x78, 0x00, - 0xe1, 0xa0, 0x68, 0x24, 0xe1, 0xc4, 0x88, 0x06, - 0xe0, 0x09, 0x06, 0x90, 0xe0, 0x06, 0x06, 0x97, - 0xe0, 0x07, 0x07, 0x98, 0xe0, 0x97, 0x78, 0x06, - 0xe0, 0xa9, 0x98, 0x26, 0xe0, 0x08, 0x08, 0x90, - 0xe0, 0x97, 0x78, 0x08, 0xe0, 0xa9, 0x08, 0x28, - 0xe1, 0xa0, 0xb8, 0x22, 0xe1, 0xc2, 0xe8, 0x0b, - 0xe1, 0xa0, 0x68, 0x25, 0xe1, 0xc5, 0x88, 0x06, - 0xe0, 0x09, 0x06, 0x9b, 0xe0, 0x06, 0x06, 0x9e, - 0xe0, 0x0e, 0x0e, 0x98, 0xe0, 0x9e, 0xe8, 0x06, - 0xe0, 0xa9, 0x98, 0x26, 0xe0, 0x08, 0x08, 0x9b, - 0xe0, 0x9e, 0xe8, 0x08, 0xe0, 0xa9, 0xb8, 0x28, - 0xe0, 0x97, 0x70, 0x0b, 0xe2, 0xa0, 0x00, 0x00, - 0xe0, 0x97, 0xb0, 0x0e, 0xe0, 0xb7, 0x70, 0x00, - 0xe2, 0xa0, 0x00, 0x00, 0xe0, 0x51, 0x80, 0x02, - 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x60, 0x00, - 0x31, 0xe0, 0x10, 0x01, 0x30, 0x44, 0x60, 0x05, - 0x10, 0x55, 0x90, 0x04, 0x03, 0xa0, 0x10, 0x00, - 0x31, 0xe0, 0x10, 0x01, 0x30, 0x46, 0x60, 0x08, - 0xe1, 0xa0, 0x48, 0x28, 0xe1, 0xc8, 0x58, 0x04, - 0xe1, 0xa0, 0x88, 0x29, 0xe1, 0xc9, 0x98, 0x08, - 0xe0, 0x22, 0x68, 0x94, 0xe0, 0x08, 0x08, 0x95, - 0xe0, 0x06, 0x05, 0x99, 0xe0, 0x96, 0x68, 0x08, - 0xe0, 0xa2, 0x28, 0x28, 0xe0, 0x09, 0x09, 0x94, - 0xe0, 0x96, 0x68, 0x09, 0xe0, 0xa2, 0x28, 0x29, - 0xe0, 0x9b, 0x60, 0x06, 0xe0, 0xb7, 0x20, 0x02, - 0xe0, 0xb0, 0x10, 0x01, 0xe1, 0x8e, 0xe1, 0x0e, - 0xe1, 0x86, 0x61, 0x2e, 0x48, 0xbd, 0x88, 0x81, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe8, 0xbd, 0x88, 0x81, 0xe1, 0xa0, 0x58, 0x24, - 0xe1, 0xc4, 0x68, 0x05, 0xe1, 0xa0, 0x88, 0x21, - 0xe1, 0xc1, 0x98, 0x08, 0xe0, 0x04, 0x08, 0x95, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x01, 0x06, 0x99, - 0xe0, 0x91, 0x18, 0x08, 0xe0, 0xa4, 0x48, 0x28, - 0xe0, 0x09, 0x09, 0x95, 0xe0, 0x91, 0x18, 0x09, - 0xe0, 0xa4, 0x48, 0x29, 0xe1, 0xa0, 0x88, 0x22, - 0xe1, 0xc2, 0x98, 0x08, 0xe0, 0x02, 0x08, 0x95, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x06, 0x06, 0x99, - 0xe0, 0x96, 0x68, 0x08, 0xe0, 0xa2, 0x28, 0x28, - 0xe0, 0x09, 0x09, 0x95, 0xe0, 0x96, 0x68, 0x09, - 0xe0, 0xa2, 0x58, 0x29, 0xe0, 0x95, 0x20, 0x01, - 0xe2, 0xb4, 0x10, 0x00, 0x41, 0xa0, 0xf0, 0x0e, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x35, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x24, 0xe1, 0xa0, 0x28, 0x21, - 0xe1, 0xc1, 0x68, 0x02, 0xe1, 0xa0, 0x88, 0x24, - 0xe1, 0xc4, 0x98, 0x08, 0xe0, 0x01, 0x08, 0x92, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x04, 0x06, 0x99, - 0xe0, 0x94, 0x48, 0x08, 0xe0, 0xa1, 0x18, 0x28, - 0xe0, 0x09, 0x09, 0x92, 0xe0, 0x94, 0x48, 0x09, - 0xe0, 0xa1, 0x18, 0x29, 0xe1, 0xa0, 0x88, 0x25, - 0xe1, 0xc5, 0x98, 0x08, 0xe0, 0x05, 0x08, 0x92, - 0xe0, 0x08, 0x08, 0x96, 0xe0, 0x06, 0x06, 0x99, - 0xe0, 0x96, 0x68, 0x08, 0xe0, 0xa5, 0x58, 0x28, - 0xe0, 0x09, 0x09, 0x92, 0xe0, 0x96, 0x68, 0x09, - 0xe0, 0xa5, 0x28, 0x29, 0xe0, 0x92, 0x20, 0x04, - 0xe2, 0xb1, 0x10, 0x00, 0x41, 0xa0, 0xf0, 0x0e, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0xc0, 0x81, 0x03, - 0xe3, 0xc3, 0x91, 0x03, 0xe0, 0x20, 0x00, 0x03, - 0xe2, 0x00, 0x01, 0x02, 0xe0, 0x88, 0x30, 0x09, - 0xe2, 0x43, 0x3c, 0x3f, 0xe2, 0x43, 0x30, 0xfe, - 0xe1, 0xa0, 0x58, 0x24, 0xe1, 0xc4, 0x68, 0x05, - 0xe1, 0xa0, 0x88, 0x21, 0xe1, 0xc1, 0x98, 0x08, - 0xe0, 0x01, 0x08, 0x95, 0xe0, 0x08, 0x08, 0x96, - 0xe0, 0x02, 0x06, 0x99, 0xe0, 0x92, 0x28, 0x08, - 0xe0, 0xa1, 0x18, 0x28, 0xe0, 0x09, 0x09, 0x95, - 0xe0, 0x92, 0x28, 0x09, 0xe0, 0xb1, 0x18, 0x29, - 0xe3, 0xa0, 0x60, 0x00, 0x41, 0xa0, 0xf0, 0x0e, - 0xe0, 0x92, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, - 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, - 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, - 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, - 0x4a, 0x00, 0x00, 0x1f, 0xe3, 0x19, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x2f, 0xe1, 0x91, 0x80, 0x02, - 0x11, 0x94, 0x80, 0x05, 0x0a, 0x00, 0x00, 0x13, - 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, - 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, - 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x88, 0x30, 0x09, 0xe2, 0x43, 0x3c, 0x3f, - 0xe2, 0x43, 0x30, 0xfe, 0xe9, 0x2d, 0x40, 0x00, - 0xe3, 0x11, 0x01, 0x02, 0x0b, 0x00, 0x06, 0x7c, - 0xe3, 0x14, 0x01, 0x02, 0x0b, 0x00, 0x06, 0x93, - 0xe8, 0xbd, 0x40, 0x00, 0xea, 0xff, 0xff, 0x44, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0xa0, 0x30, 0x00, 0xe3, 0xa0, 0x60, 0x00, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x19, 0x01, 0x02, - 0x0a, 0x00, 0x00, 0x09, 0xe1, 0x82, 0x80, 0x81, - 0xe1, 0x88, 0x80, 0x05, 0xe1, 0x98, 0x80, 0x84, - 0x1a, 0x00, 0x06, 0xbc, 0xe0, 0x20, 0x80, 0x03, - 0xe2, 0x08, 0x81, 0x02, 0xe2, 0x8f, 0x00, 0x44, - 0xe8, 0x90, 0x00, 0x07, 0xe1, 0x80, 0x00, 0x08, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0x92, 0x80, 0x81, - 0x1a, 0x00, 0x06, 0xc5, 0xe1, 0x94, 0x80, 0x05, - 0x1a, 0xff, 0xff, 0xf5, 0xe3, 0x80, 0x04, 0x61, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0x95, 0x80, 0x84, - 0x1a, 0x00, 0x06, 0xb6, 0xe1, 0x91, 0x80, 0x02, - 0x1a, 0xff, 0xff, 0xef, 0xe3, 0x80, 0x04, 0x61, - 0xe1, 0xa0, 0xf0, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xe8, 0xbd, 0x4b, 0xf0, - 0xe5, 0x9f, 0x20, 0x6c, 0xe5, 0x92, 0x10, 0x00, - 0xe1, 0xa0, 0xc1, 0x83, 0xe1, 0xa0, 0xcd, 0xac, - 0xe1, 0x81, 0x10, 0x0c, 0xe5, 0x82, 0x10, 0x00, - 0xe3, 0x13, 0x03, 0x01, 0x1a, 0x00, 0x00, 0x05, - 0xe3, 0x13, 0x04, 0x02, 0x1a, 0x00, 0x00, 0x07, - 0xe3, 0x11, 0x08, 0x01, 0x0a, 0x00, 0x00, 0x44, - 0xe2, 0x8f, 0x00, 0x54, 0xea, 0x00, 0x00, 0x06, - 0xe3, 0x11, 0x07, 0x01, 0x0a, 0x00, 0x00, 0x34, - 0xe2, 0x8f, 0x00, 0x74, 0xea, 0x00, 0x00, 0x02, - 0xe3, 0x11, 0x08, 0x02, 0x0a, 0x00, 0x00, 0x30, - 0xe2, 0x8f, 0x00, 0x8c, 0xe5, 0x9f, 0x10, 0x1c, - 0xe2, 0x4e, 0xe0, 0x04, 0xe5, 0x81, 0xe0, 0x3c, - 0xe3, 0xa0, 0xec, 0xde, 0xe3, 0x8e, 0xe0, 0xad, - 0xe1, 0x8e, 0xe8, 0x0e, 0xe8, 0x81, 0x7f, 0xff, - 0xea, 0x00, 0x00, 0x01, 0x2e, 0x08, 0x23, 0x5c, - 0x2e, 0x08, 0x23, 0x60, 0xe5, 0x9f, 0xc1, 0x2c, - 0xe3, 0x5c, 0x00, 0x00, 0x11, 0x2f, 0xff, 0x1c, - 0xe6, 0x00, 0x00, 0x10, 0x80, 0x00, 0x02, 0x00, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x45, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x20, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, - 0x64, 0x20, 0x4f, 0x70, 0x65, 0x72, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x00, 0x80, 0x00, 0x02, 0x01, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x45, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x20, 0x4f, 0x76, 0x65, 0x72, 0x66, 0x6c, - 0x6f, 0x77, 0x00, 0x00, 0x80, 0x00, 0x02, 0x02, - 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, - 0x20, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x45, - 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x3a, 0x20, 0x44, 0x69, 0x76, 0x69, 0x64, 0x65, - 0x20, 0x42, 0x79, 0x20, 0x5a, 0x65, 0x72, 0x6f, - 0x00, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x21, 0x02, - 0xe3, 0x13, 0x07, 0x0f, 0x1a, 0x00, 0x00, 0x13, - 0xe3, 0x13, 0x05, 0x02, 0x12, 0x8f, 0x00, 0x0c, - 0x18, 0x90, 0x00, 0x03, 0x05, 0x9f, 0x00, 0x0c, - 0xe1, 0x80, 0x00, 0x02, 0xe1, 0x2f, 0xff, 0x1e, - 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x7f, 0x80, 0x00, 0x00, 0xe3, 0x13, 0x07, 0x0f, - 0x12, 0x00, 0x21, 0x02, 0x1a, 0x00, 0x00, 0x07, - 0xe3, 0x13, 0x05, 0x02, 0x12, 0x8f, 0x00, 0x08, - 0x18, 0x90, 0x00, 0x03, 0x05, 0x9f, 0x00, 0x08, - 0xe1, 0x2f, 0xff, 0x1e, 0x7f, 0xf8, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x7f, 0xc0, 0x00, 0x00, - 0xe3, 0x13, 0x07, 0x02, 0x13, 0xa0, 0x00, 0x00, - 0x13, 0xa0, 0x10, 0x00, 0x11, 0x2f, 0xff, 0x1e, - 0xe3, 0x13, 0x07, 0x01, 0x13, 0xe0, 0x00, 0x00, - 0x13, 0xe0, 0x10, 0x00, 0x11, 0x2f, 0xff, 0x1e, - 0xe3, 0x13, 0x06, 0x01, 0x13, 0xa0, 0x00, 0x00, - 0x13, 0xa0, 0x11, 0x02, 0x03, 0xa0, 0x01, 0x02, - 0xe3, 0x32, 0x01, 0x02, 0x11, 0xe0, 0x00, 0x00, - 0x11, 0xe0, 0x10, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0x2e, 0x01, 0xfb, 0xe5, 0xe3, 0x10, 0x02, 0x06, - 0x1a, 0x00, 0x00, 0x0d, 0xe1, 0xb0, 0x80, 0x86, - 0x0a, 0x00, 0x00, 0x0d, 0x22, 0x92, 0x20, 0x01, - 0x22, 0x91, 0x10, 0x01, 0x23, 0xa0, 0x11, 0x02, - 0xe2, 0xb3, 0x30, 0x00, 0x4a, 0x00, 0x00, 0x0a, - 0xe2, 0x83, 0xc0, 0x01, 0xe3, 0xcc, 0xc1, 0x01, - 0xe3, 0x5c, 0x09, 0x02, 0xc3, 0xa0, 0x33, 0x19, - 0xe2, 0x00, 0x01, 0x02, 0xe1, 0x83, 0x00, 0x00, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe1, 0xa0, 0x30, 0x00, - 0xe1, 0xa0, 0xf0, 0x0e, 0x21, 0xb0, 0x80, 0xa2, - 0xea, 0xff, 0xff, 0xef, 0xe3, 0x11, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x04, 0xe3, 0xa0, 0x10, 0x00, - 0xe3, 0xa0, 0x20, 0x00, 0xe2, 0x00, 0x01, 0x02, - 0xe3, 0xa0, 0x30, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xb0, 0xc8, 0x21, 0x01, 0xa0, 0xc8, 0x22, - 0x01, 0x8c, 0x18, 0x01, 0x02, 0x83, 0x30, 0x10, - 0xe1, 0xb0, 0xcc, 0x21, 0x01, 0xa0, 0xcc, 0x22, - 0x01, 0x8c, 0x14, 0x01, 0x02, 0x83, 0x30, 0x08, - 0xe1, 0xb0, 0xce, 0x21, 0x01, 0xa0, 0xce, 0x22, - 0x01, 0x8c, 0x12, 0x01, 0x02, 0x83, 0x30, 0x04, - 0xe1, 0xb0, 0xcf, 0x21, 0x01, 0xa0, 0xcf, 0x22, - 0x01, 0x8c, 0x11, 0x01, 0x02, 0x83, 0x30, 0x02, - 0xe1, 0xb0, 0xcf, 0xa1, 0x01, 0xa0, 0xcf, 0xa2, - 0x01, 0x8c, 0x10, 0x81, 0x02, 0x83, 0x30, 0x01, - 0xe1, 0xb0, 0x30, 0x03, 0x4a, 0xff, 0xff, 0xe4, - 0x5a, 0xff, 0xff, 0xda, 0xe3, 0x11, 0x01, 0x02, - 0x01, 0xa0, 0xf0, 0x0e, 0xe9, 0x2d, 0x40, 0x08, - 0xe3, 0xd1, 0x11, 0x02, 0x0a, 0x00, 0x00, 0x15, - 0xe1, 0xb0, 0x38, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x21, 0x01, 0xa0, 0x14, 0x01, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x21, - 0x01, 0xa0, 0x12, 0x01, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x21, 0x01, 0xa0, 0x11, 0x01, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa1, - 0x01, 0xa0, 0x10, 0x81, 0x02, 0x8c, 0xc0, 0x01, - 0xe2, 0x6c, 0x30, 0x20, 0xe1, 0x81, 0x13, 0x32, - 0xe1, 0xa0, 0x2c, 0x12, 0xe0, 0x40, 0x00, 0x0c, - 0xe2, 0x80, 0x00, 0x01, 0xe8, 0xbd, 0x80, 0x08, - 0xe1, 0xb0, 0x38, 0x22, 0x01, 0xa0, 0x28, 0x02, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x3c, 0x22, 0x01, 0xa0, 0x24, 0x02, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x3e, 0x22, - 0x01, 0xa0, 0x22, 0x02, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x3f, 0x22, 0x01, 0xa0, 0x21, 0x02, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x3f, 0xa2, - 0x01, 0xa0, 0x20, 0x82, 0x02, 0x8c, 0xc0, 0x01, - 0xe1, 0xa0, 0x10, 0x02, 0xe3, 0xa0, 0x20, 0x00, - 0xe2, 0x40, 0x00, 0x1f, 0xe0, 0x40, 0x00, 0x0c, - 0xe8, 0xbd, 0x80, 0x08, 0xe3, 0x14, 0x01, 0x02, - 0x01, 0xa0, 0xf0, 0x0e, 0xe9, 0x2d, 0x40, 0x01, - 0xe3, 0xd4, 0x41, 0x02, 0x0a, 0x00, 0x00, 0x15, - 0xe1, 0xb0, 0x08, 0x24, 0x01, 0xa0, 0x48, 0x04, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x0c, 0x24, 0x01, 0xa0, 0x44, 0x04, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x0e, 0x24, - 0x01, 0xa0, 0x42, 0x04, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x0f, 0x24, 0x01, 0xa0, 0x41, 0x04, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x0f, 0xa4, - 0x01, 0xa0, 0x40, 0x84, 0x02, 0x8c, 0xc0, 0x01, - 0xe2, 0x6c, 0x00, 0x20, 0xe1, 0x84, 0x40, 0x35, - 0xe1, 0xa0, 0x5c, 0x15, 0xe0, 0x43, 0x30, 0x0c, - 0xe2, 0x83, 0x30, 0x01, 0xe8, 0xbd, 0x80, 0x01, - 0xe1, 0xb0, 0x08, 0x25, 0x01, 0xa0, 0x58, 0x05, - 0x03, 0xa0, 0xc0, 0x10, 0x13, 0xa0, 0xc0, 0x00, - 0xe1, 0xb0, 0x0c, 0x25, 0x01, 0xa0, 0x54, 0x05, - 0x02, 0x8c, 0xc0, 0x08, 0xe1, 0xb0, 0x0e, 0x25, - 0x01, 0xa0, 0x52, 0x05, 0x02, 0x8c, 0xc0, 0x04, - 0xe1, 0xb0, 0x0f, 0x25, 0x01, 0xa0, 0x51, 0x05, - 0x02, 0x8c, 0xc0, 0x02, 0xe1, 0xb0, 0x0f, 0xa5, - 0x01, 0xa0, 0x50, 0x85, 0x02, 0x8c, 0xc0, 0x01, - 0xe1, 0xa0, 0x40, 0x05, 0xe3, 0xa0, 0x50, 0x00, - 0xe2, 0x43, 0x30, 0x1f, 0xe0, 0x43, 0x30, 0x0c, - 0xe8, 0xbd, 0x80, 0x01, 0xe1, 0xa0, 0x80, 0x00, - 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x30, 0x08, - 0xe1, 0xa0, 0x80, 0x01, 0xe1, 0xa0, 0x10, 0x04, - 0xe1, 0xa0, 0x40, 0x08, 0xe1, 0xa0, 0x80, 0x02, - 0xe1, 0xa0, 0x20, 0x05, 0xe1, 0xa0, 0x50, 0x08, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x49, 0x30, 0x08, 0xe2, 0x83, 0x3c, 0x3f, - 0xe2, 0x83, 0x30, 0xff, 0xe9, 0x2d, 0x48, 0x89, - 0xe1, 0xa0, 0x08, 0x21, 0xe1, 0xc1, 0x78, 0x00, - 0xe1, 0xa0, 0xb8, 0x22, 0xe1, 0xc2, 0xe8, 0x0b, - 0xe2, 0x8f, 0x6e, 0x36, 0xe7, 0xd6, 0x64, 0x20, - 0xe0, 0x28, 0x66, 0x90, 0xe2, 0x68, 0x85, 0x02, - 0xe0, 0x06, 0x06, 0x98, 0xe1, 0xa0, 0x69, 0xa6, - 0xe2, 0x86, 0x60, 0x02, 0xe1, 0xa0, 0x86, 0xa1, - 0xe0, 0x29, 0x66, 0x98, 0xe2, 0x69, 0x92, 0x02, - 0xe1, 0xa0, 0x88, 0x29, 0xe1, 0xc9, 0x98, 0x08, - 0xe0, 0x02, 0x06, 0x99, 0xe0, 0x01, 0x06, 0x98, - 0xe0, 0x81, 0x68, 0x22, 0xe1, 0xa0, 0x63, 0x26, - 0xe1, 0xb0, 0x40, 0xa4, 0xe1, 0xb0, 0x50, 0x65, - 0x33, 0xa0, 0x30, 0x00, 0x23, 0xa0, 0x31, 0x02, - 0xe1, 0xa0, 0x87, 0xa4, 0xe0, 0x09, 0x08, 0x96, - 0xe1, 0xa0, 0x98, 0x29, 0xe0, 0x08, 0x0b, 0x99, - 0xe0, 0x55, 0x50, 0x08, 0xe0, 0x08, 0x09, 0x90, - 0xe0, 0xc4, 0x40, 0x08, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x38, 0x08, 0xe0, 0xd5, 0x58, 0x28, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x58, 0x08, - 0x20, 0x55, 0x58, 0x08, 0xe0, 0xc4, 0x48, 0x28, - 0xe1, 0xa0, 0x18, 0x09, 0xe1, 0xa0, 0x81, 0x24, - 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, - 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x53, 0x39, 0x88, - 0xe0, 0xd5, 0x56, 0xa8, 0xe0, 0x08, 0x09, 0x90, - 0x30, 0x45, 0x59, 0x88, 0x20, 0x55, 0x59, 0x88, - 0xe0, 0xc4, 0x46, 0xa8, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x31, 0x88, 0xe0, 0xd5, 0x5e, 0xa8, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x51, 0x88, - 0x20, 0x55, 0x51, 0x88, 0xe0, 0xc4, 0x4e, 0xa8, - 0xe1, 0xa0, 0x4d, 0x04, 0xe1, 0x84, 0x43, 0x25, - 0xe1, 0xa0, 0x5d, 0x05, 0xe1, 0x85, 0x53, 0x23, - 0xe1, 0xa0, 0x3d, 0x03, 0xe0, 0x81, 0x11, 0x89, - 0xe5, 0x9d, 0x80, 0x0c, 0xe3, 0x18, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x94, 0xe1, 0xa0, 0x87, 0xa4, - 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, - 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x55, 0x50, 0x08, - 0xe0, 0x08, 0x09, 0x90, 0xe0, 0xc4, 0x40, 0x08, - 0xe0, 0x08, 0x0e, 0x99, 0xe0, 0x53, 0x38, 0x08, - 0xe0, 0xd5, 0x58, 0x28, 0xe0, 0x08, 0x07, 0x99, - 0x30, 0x45, 0x58, 0x08, 0x20, 0x55, 0x58, 0x08, - 0xe0, 0xc4, 0x48, 0x28, 0xe1, 0xa0, 0x2b, 0x09, - 0xe0, 0x81, 0x15, 0x29, 0xe1, 0xa0, 0x81, 0x24, - 0xe0, 0x09, 0x08, 0x96, 0xe1, 0xa0, 0x98, 0x29, - 0xe0, 0x08, 0x0b, 0x99, 0xe0, 0x53, 0x39, 0x88, - 0xe0, 0xd5, 0x56, 0xa8, 0xe0, 0x08, 0x09, 0x90, - 0x30, 0x45, 0x59, 0x88, 0x20, 0x55, 0x59, 0x88, - 0xe0, 0xc4, 0x46, 0xa8, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x31, 0x88, 0xe0, 0xd5, 0x5e, 0xa8, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x51, 0x88, - 0x20, 0x55, 0x51, 0x88, 0xe0, 0xc4, 0x4e, 0xa8, - 0xe1, 0xa0, 0x4d, 0x04, 0xe1, 0x84, 0x43, 0x25, - 0xe1, 0xa0, 0x5d, 0x05, 0xe1, 0x85, 0x53, 0x23, - 0xe1, 0xa0, 0x3d, 0x03, 0xe0, 0x92, 0x24, 0x89, - 0xe2, 0xa1, 0x10, 0x00, 0xe5, 0x9d, 0x80, 0x0c, - 0xe3, 0x18, 0x00, 0x02, 0x1a, 0x00, 0x00, 0x3f, - 0xe1, 0xa0, 0x87, 0xa4, 0xe0, 0x09, 0x08, 0x96, - 0xe1, 0xa0, 0x98, 0x29, 0xe0, 0x08, 0x0b, 0x99, - 0xe0, 0x55, 0x50, 0x08, 0xe0, 0x08, 0x09, 0x90, - 0xe0, 0xc4, 0x40, 0x08, 0xe0, 0x08, 0x0e, 0x99, - 0xe0, 0x53, 0x38, 0x08, 0xe0, 0xd5, 0x58, 0x28, - 0xe0, 0x08, 0x07, 0x99, 0x30, 0x45, 0x58, 0x08, - 0x20, 0x55, 0x58, 0x08, 0xe0, 0xc4, 0x48, 0x28, - 0xe1, 0xa0, 0x47, 0x04, 0xe1, 0x84, 0x49, 0x25, - 0xe1, 0xa0, 0x57, 0x05, 0xe1, 0x85, 0x59, 0x23, - 0xe1, 0xa0, 0x37, 0x03, 0xe1, 0xa0, 0x6e, 0x09, - 0xe0, 0x92, 0x22, 0x29, 0xe2, 0xa1, 0x10, 0x00, - 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, - 0xe3, 0xa0, 0xe0, 0x00, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, - 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, - 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0xe0, 0xae, 0xe0, 0x0e, 0xe3, 0xa0, 0xb0, 0x00, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, - 0xe1, 0x94, 0x80, 0x05, 0x13, 0x86, 0x60, 0x01, - 0xe0, 0x96, 0x6e, 0x0e, 0xe2, 0xb2, 0x20, 0x00, - 0xe2, 0xb1, 0x10, 0x00, 0x48, 0xbd, 0x88, 0x89, - 0xe8, 0xbd, 0x48, 0x89, 0xe0, 0x96, 0x60, 0x06, - 0xe0, 0xb2, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, - 0xe3, 0xa0, 0xe0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xa4, 0x40, 0x04, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0xe0, 0xae, 0xe0, 0x0e, 0xe3, 0xa0, 0xb0, 0x00, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0xe0, 0xae, 0xe0, 0x0e, - 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, - 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0xe0, 0xae, 0xe0, 0x0e, 0xe1, 0x84, 0x60, 0x05, - 0xe0, 0x92, 0x24, 0x8e, 0xe2, 0xb1, 0x10, 0x00, - 0x48, 0xbd, 0x88, 0x89, 0xe8, 0xbd, 0x48, 0x89, - 0xe0, 0x92, 0x20, 0x02, 0xe0, 0xa1, 0x10, 0x01, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x87, 0x08, 0x00, 0xe1, 0x8e, 0x78, 0x0b, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xa4, 0x40, 0x04, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0x22, 0x81, 0x10, 0x20, - 0xe3, 0xa0, 0xb0, 0x00, 0xe0, 0x93, 0x30, 0x03, - 0xe0, 0xb5, 0x50, 0x05, 0xe0, 0xb4, 0x40, 0x04, - 0xe0, 0xab, 0xb0, 0x0b, 0xe0, 0x55, 0x90, 0x07, - 0xe0, 0xd4, 0x80, 0x00, 0xe2, 0xdb, 0xb0, 0x00, - 0x21, 0xa0, 0x50, 0x09, 0x21, 0xa0, 0x40, 0x08, - 0x22, 0x81, 0x10, 0x10, 0xe3, 0xa0, 0xb0, 0x00, - 0xe0, 0x93, 0x30, 0x03, 0xe0, 0xb5, 0x50, 0x05, - 0xe0, 0xb4, 0x40, 0x04, 0xe0, 0xab, 0xb0, 0x0b, - 0xe0, 0x55, 0x90, 0x07, 0xe0, 0xd4, 0x80, 0x00, - 0xe2, 0xdb, 0xb0, 0x00, 0x21, 0xa0, 0x50, 0x09, - 0x21, 0xa0, 0x40, 0x08, 0x22, 0x81, 0x10, 0x08, - 0xe1, 0x84, 0x60, 0x05, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0x31, 0x00, 0x00, 0x48, 0xbd, 0x88, 0x89, - 0xe8, 0xbd, 0x48, 0x89, 0xe1, 0xa0, 0x10, 0x81, - 0xe2, 0x43, 0x30, 0x01, 0xe1, 0xa0, 0xf0, 0x0e, - 0x80, 0x80, 0x7f, 0x7e, 0x7d, 0x7c, 0x7b, 0x7a, - 0x79, 0x78, 0x77, 0x76, 0x76, 0x75, 0x74, 0x73, - 0x72, 0x71, 0x71, 0x70, 0x6f, 0x6e, 0x6e, 0x6d, - 0x6c, 0x6c, 0x6b, 0x6a, 0x6a, 0x69, 0x68, 0x68, - 0x67, 0x66, 0x66, 0x65, 0x64, 0x64, 0x63, 0x63, - 0x62, 0x61, 0x61, 0x60, 0x60, 0x5f, 0x5f, 0x5e, - 0x5e, 0x5d, 0x5d, 0x5c, 0x5c, 0x5b, 0x5b, 0x5a, - 0x5a, 0x59, 0x59, 0x58, 0x58, 0x57, 0x57, 0x56, - 0x56, 0x55, 0x55, 0x55, 0x54, 0x54, 0x53, 0x53, - 0x52, 0x52, 0x52, 0x51, 0x51, 0x50, 0x50, 0x50, - 0x4f, 0x4f, 0x4f, 0x4e, 0x4e, 0x4d, 0x4d, 0x4d, - 0x4c, 0x4c, 0x4c, 0x4b, 0x4b, 0x4b, 0x4a, 0x4a, - 0x4a, 0x49, 0x49, 0x49, 0x48, 0x48, 0x48, 0x47, - 0x47, 0x47, 0x47, 0x46, 0x46, 0x46, 0x45, 0x45, - 0x45, 0x44, 0x44, 0x44, 0x44, 0x43, 0x43, 0x43, - 0x43, 0x42, 0x42, 0x42, 0x42, 0x41, 0x41, 0x41, - 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, - 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, - 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, - 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, - 0x4a, 0x00, 0x00, 0x20, 0xe3, 0x19, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x32, 0xe3, 0x1b, 0x00, 0x04, - 0x1a, 0x00, 0x00, 0x08, 0xe1, 0xa0, 0x80, 0x00, - 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x30, 0x08, - 0xe1, 0xa0, 0x80, 0x01, 0xe1, 0xa0, 0x10, 0x04, - 0xe1, 0xa0, 0x40, 0x08, 0xe1, 0xa0, 0x80, 0x02, - 0xe1, 0xa0, 0x20, 0x05, 0xe1, 0xa0, 0x50, 0x08, - 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, - 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, - 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, - 0xe3, 0xc0, 0x81, 0x03, 0xe3, 0xc3, 0x91, 0x03, - 0xe0, 0x20, 0x00, 0x03, 0xe2, 0x00, 0x01, 0x02, - 0xe0, 0x49, 0x30, 0x08, 0xe2, 0x83, 0x3c, 0x3f, - 0xe2, 0x83, 0x30, 0xff, 0xe9, 0x2d, 0x40, 0x00, - 0xe3, 0x11, 0x01, 0x02, 0x0b, 0x00, 0x04, 0x30, - 0xe3, 0x14, 0x01, 0x02, 0x0b, 0x00, 0x04, 0x15, - 0xe8, 0xbd, 0x40, 0x00, 0xea, 0xff, 0xfe, 0xb6, - 0xe3, 0x19, 0x01, 0x02, 0x0a, 0x00, 0x00, 0x05, - 0xe1, 0x82, 0x80, 0x81, 0xe1, 0x88, 0x80, 0x05, - 0xe1, 0x98, 0x80, 0x84, 0x1a, 0x00, 0x04, 0x45, - 0xe3, 0x80, 0x04, 0x61, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x92, 0x80, 0x81, 0x1a, 0x00, 0x04, 0x52, - 0xe0, 0x20, 0x80, 0x03, 0xe2, 0x08, 0x81, 0x02, - 0xe3, 0x1b, 0x00, 0x04, 0x02, 0x8f, 0x00, 0x50, - 0x12, 0x8f, 0x00, 0x40, 0xe8, 0x90, 0x00, 0x07, - 0xe1, 0x80, 0x00, 0x08, 0xe3, 0xa0, 0x30, 0x00, - 0xe3, 0xa0, 0x60, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x95, 0x80, 0x84, 0x1a, 0x00, 0x04, 0x3d, - 0xe0, 0x20, 0x80, 0x03, 0xe2, 0x08, 0x81, 0x02, - 0xe3, 0x1b, 0x00, 0x04, 0x12, 0x8f, 0x00, 0x20, - 0x02, 0x8f, 0x00, 0x10, 0xe8, 0x90, 0x00, 0x07, - 0xe1, 0x80, 0x00, 0x08, 0xe3, 0xa0, 0x30, 0x00, - 0xe3, 0xa0, 0x60, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x7f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe9, 0x2d, 0x40, 0x00, 0xe1, 0xa0, 0x68, 0x80, - 0xe0, 0x56, 0x88, 0x83, 0xe0, 0x20, 0xe0, 0x03, - 0xe2, 0x00, 0x01, 0x02, 0xe1, 0xa0, 0x38, 0xa6, - 0x8a, 0x00, 0x00, 0x1a, 0x01, 0xa0, 0x90, 0x08, - 0x0a, 0x00, 0x00, 0x2e, 0xe2, 0x68, 0x60, 0x00, - 0xe1, 0xa0, 0x68, 0xa6, 0xe0, 0x83, 0x30, 0x06, - 0xe1, 0xa0, 0x92, 0xa6, 0xe1, 0xc6, 0x62, 0x89, - 0xe3, 0x59, 0x00, 0x02, 0x33, 0x39, 0x00, 0x00, - 0xe2, 0x66, 0x90, 0x20, 0xe1, 0xa0, 0x89, 0x12, - 0xe1, 0xa0, 0x26, 0x32, 0xe1, 0x82, 0x29, 0x11, - 0xe1, 0xa0, 0x16, 0x31, 0x0a, 0x00, 0x00, 0x03, - 0x11, 0x88, 0x81, 0x08, 0x11, 0x82, 0x81, 0x28, - 0x11, 0xa0, 0x20, 0x01, 0x13, 0xa0, 0x10, 0x00, - 0x3a, 0x00, 0x00, 0x04, 0x21, 0x88, 0x80, 0x02, - 0x21, 0x88, 0x81, 0x08, 0x21, 0x81, 0x81, 0x28, - 0x23, 0xa0, 0x20, 0x00, 0x23, 0xa0, 0x10, 0x00, - 0xe3, 0xa0, 0x90, 0x00, 0xea, 0x00, 0x00, 0x15, - 0xe1, 0xa0, 0x68, 0xa8, 0xe1, 0xa0, 0x82, 0xa6, - 0xe1, 0xc6, 0x62, 0x88, 0xe3, 0x58, 0x00, 0x02, - 0x33, 0x38, 0x00, 0x00, 0xe2, 0x66, 0x80, 0x20, - 0xe1, 0xa0, 0x98, 0x15, 0xe1, 0xa0, 0x56, 0x35, - 0xe1, 0x85, 0x58, 0x14, 0xe1, 0xa0, 0x46, 0x34, - 0x0a, 0x00, 0x00, 0x03, 0x11, 0x89, 0x91, 0x09, - 0x11, 0x85, 0x91, 0x29, 0x11, 0xa0, 0x50, 0x04, - 0x13, 0xa0, 0x40, 0x00, 0x3a, 0x00, 0x00, 0x04, - 0x21, 0x89, 0x90, 0x05, 0x21, 0x89, 0x91, 0x09, - 0x21, 0x84, 0x91, 0x29, 0x23, 0xa0, 0x50, 0x00, - 0x23, 0xa0, 0x40, 0x00, 0xe3, 0xa0, 0x80, 0x00, - 0xe3, 0x1e, 0x01, 0x02, 0x1a, 0x00, 0x00, 0x09, - 0xe0, 0x98, 0x60, 0x09, 0xe0, 0xb2, 0x20, 0x05, - 0xe0, 0xb1, 0x10, 0x04, 0x38, 0xbd, 0x80, 0x00, - 0xe2, 0x83, 0x30, 0x01, 0xe1, 0xb0, 0x10, 0x61, - 0xe1, 0xb0, 0x20, 0x62, 0xe1, 0x86, 0x60, 0x86, - 0xe1, 0xa0, 0x60, 0x66, 0xe8, 0xbd, 0x80, 0x00, - 0xe0, 0x58, 0x60, 0x09, 0xe0, 0xd2, 0x20, 0x05, - 0xe0, 0xd1, 0x10, 0x04, 0x2a, 0x00, 0x00, 0x03, - 0xe2, 0x20, 0x01, 0x02, 0xe2, 0x76, 0x60, 0x00, - 0xe2, 0xf2, 0x20, 0x00, 0xe2, 0xe1, 0x10, 0x00, - 0xe3, 0x11, 0x01, 0x02, 0x18, 0xbd, 0x80, 0x00, - 0xe0, 0x96, 0x60, 0x06, 0xe0, 0xb2, 0x20, 0x02, - 0xe0, 0xa1, 0x10, 0x01, 0xe2, 0x43, 0x30, 0x01, - 0xe3, 0x11, 0x01, 0x02, 0x18, 0xbd, 0x80, 0x00, - 0xe1, 0x91, 0xe0, 0x02, 0x1b, 0x00, 0x03, 0x7e, - 0x18, 0xbd, 0x80, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe3, 0xa0, 0x10, 0x00, 0xe2, 0x8d, 0xd0, 0x04, - 0xe8, 0xbd, 0x4b, 0xf0, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x98, 0x83, 0xe3, 0x79, 0x08, 0x02, - 0x30, 0x09, 0x90, 0x04, 0xe0, 0x19, 0x90, 0x83, - 0xe1, 0xa0, 0x88, 0x80, 0xe3, 0x78, 0x08, 0x02, - 0x30, 0x08, 0x80, 0x01, 0xe0, 0x18, 0x80, 0x80, - 0x4a, 0x00, 0x00, 0x14, 0xe3, 0x19, 0x01, 0x02, - 0x1a, 0x00, 0x00, 0x22, 0xe9, 0x2d, 0x40, 0x00, - 0xe0, 0x11, 0x60, 0x80, 0x43, 0xc1, 0x11, 0x02, - 0x42, 0x80, 0x00, 0x01, 0xe0, 0x14, 0x60, 0x83, - 0x43, 0xc4, 0x41, 0x02, 0x42, 0x83, 0x30, 0x01, - 0xe3, 0x10, 0x01, 0x01, 0x11, 0xb0, 0x68, 0x80, - 0x1b, 0x00, 0x02, 0xe6, 0xe3, 0x13, 0x01, 0x01, - 0x11, 0xb0, 0x68, 0x83, 0x1b, 0x00, 0x03, 0x1d, - 0xeb, 0xff, 0xff, 0x8a, 0xe3, 0x11, 0x01, 0x02, - 0x18, 0xbd, 0x80, 0x00, 0xe1, 0x91, 0xe0, 0x02, - 0x1b, 0x00, 0x03, 0x5b, 0xe8, 0xbd, 0x80, 0x00, - 0xe3, 0x19, 0x01, 0x02, 0x0a, 0x00, 0x00, 0x09, - 0xe1, 0x82, 0x80, 0x81, 0xe1, 0x88, 0x80, 0x05, - 0xe1, 0x98, 0x80, 0x84, 0x1a, 0x00, 0x03, 0xa5, - 0xe0, 0x23, 0x85, 0x0b, 0xe0, 0x38, 0x80, 0x00, - 0x52, 0x00, 0x81, 0x02, 0x5a, 0x00, 0x00, 0x0a, - 0xe3, 0x80, 0x04, 0x61, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0x92, 0x80, 0x81, 0x1a, 0x00, 0x03, 0xae, - 0xe2, 0x00, 0x81, 0x02, 0xea, 0x00, 0x00, 0x04, - 0xe1, 0x95, 0x80, 0x84, 0x1a, 0x00, 0x03, 0xa1, - 0xe2, 0x03, 0x81, 0x02, 0xe3, 0x1b, 0x06, 0x02, - 0x12, 0x28, 0x81, 0x02, 0xe3, 0x1b, 0x06, 0x01, - 0x12, 0x28, 0x81, 0x02, 0xe2, 0x8f, 0x00, 0x14, - 0xe8, 0x90, 0x00, 0x07, 0xe1, 0x80, 0x00, 0x08, - 0xe1, 0xa0, 0xf0, 0x0e, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x40, 0x00, 0x7f, 0xff, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xb5, 0x00, 0x49, 0x02, - 0xf0, 0x00, 0xf9, 0x2a, 0xbc, 0x08, 0x47, 0x18, - 0xff, 0xff, 0xff, 0xfd, 0xb5, 0x80, 0x1c, 0x07, - 0x28, 0x0a, 0xd2, 0x14, 0xa3, 0x01, 0x5c, 0x1b, - 0x00, 0x5b, 0x44, 0x9f, 0x10, 0x04, 0x10, 0x06, - 0x08, 0x0a, 0x0c, 0x10, 0x0e, 0x0e, 0xa0, 0x0f, - 0xe0, 0x0c, 0xa0, 0x1a, 0xe0, 0x0a, 0xa0, 0x33, - 0xe0, 0x08, 0xa0, 0x3f, 0xe0, 0x06, 0xa0, 0x4b, - 0xe0, 0x04, 0xa0, 0x52, 0xe0, 0x02, 0x1c, 0x38, - 0xf0, 0x00, 0xff, 0x71, 0x21, 0x03, 0xf0, 0x00, - 0xf9, 0x27, 0x2f, 0x04, 0xd1, 0x05, 0x20, 0x01, - 0xf7, 0xfd, 0xfc, 0x2c, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0xf7, 0xfe, 0xfc, 0xd3, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x41, 0x62, 0x6e, 0x6f, - 0x72, 0x6d, 0x61, 0x6c, 0x20, 0x74, 0x65, 0x72, - 0x6d, 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x20, 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x61, - 0x62, 0x6f, 0x72, 0x74, 0x28, 0x29, 0x20, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x29, - 0x00, 0x00, 0x00, 0x00, 0x49, 0x6c, 0x6c, 0x65, - 0x67, 0x61, 0x6c, 0x20, 0x69, 0x6e, 0x73, 0x74, - 0x72, 0x75, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x20, 0x74, 0x6f, - 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x66, 0x75, 0x6e, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x63, 0x6f, - 0x64, 0x65, 0x20, 0x63, 0x6f, 0x72, 0x72, 0x75, - 0x70, 0x74, 0x65, 0x64, 0x29, 0x0a, 0x5b, 0x69, - 0x73, 0x20, 0x74, 0x68, 0x65, 0x20, 0x66, 0x6c, - 0x6f, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x70, - 0x6f, 0x69, 0x6e, 0x74, 0x20, 0x65, 0x6d, 0x75, - 0x6c, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x69, 0x6e, - 0x73, 0x74, 0x61, 0x6c, 0x6c, 0x65, 0x64, 0x3f, - 0x5d, 0x00, 0x00, 0x00, 0x49, 0x6e, 0x74, 0x65, - 0x72, 0x72, 0x75, 0x70, 0x74, 0x20, 0x72, 0x65, - 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x66, - 0x72, 0x6f, 0x6d, 0x20, 0x75, 0x73, 0x65, 0x72, - 0x20, 0x2d, 0x20, 0x70, 0x72, 0x6f, 0x67, 0x72, - 0x61, 0x6d, 0x20, 0x74, 0x65, 0x72, 0x6d, 0x69, - 0x6e, 0x61, 0x74, 0x65, 0x64, 0x00, 0x00, 0x00, - 0x49, 0x6c, 0x6c, 0x65, 0x67, 0x61, 0x6c, 0x20, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x20, - 0x28, 0x65, 0x2e, 0x67, 0x2e, 0x20, 0x77, 0x69, - 0x6c, 0x64, 0x6c, 0x79, 0x20, 0x6f, 0x75, 0x74, - 0x73, 0x69, 0x64, 0x65, 0x20, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x20, 0x62, 0x6f, 0x75, 0x6e, 0x64, - 0x73, 0x29, 0x00, 0x00, 0x54, 0x65, 0x72, 0x6d, - 0x69, 0x6e, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, - 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x20, - 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, - 0x00, 0x00, 0x00, 0x00, 0x55, 0x73, 0x65, 0x72, - 0x2d, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, - 0x20, 0x73, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x00, - 0xb5, 0x00, 0x20, 0x01, 0x49, 0x05, 0x70, 0x08, - 0xa0, 0x05, 0x21, 0x03, 0xf0, 0x00, 0xf8, 0x78, - 0x20, 0x64, 0xf7, 0xfd, 0xfb, 0x7f, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x23, 0x48, - 0x53, 0x74, 0x61, 0x63, 0x6b, 0x20, 0x6f, 0x76, - 0x65, 0x72, 0x66, 0x6c, 0x6f, 0x77, 0x0a, 0x00, - 0xb5, 0x00, 0x28, 0x07, 0xd1, 0x03, 0xf7, 0xff, - 0xff, 0xe3, 0xbc, 0x08, 0x47, 0x18, 0xf7, 0xff, - 0xff, 0x19, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, - 0xf7, 0xff, 0xff, 0xf2, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x90, 0x28, 0x00, 0xdd, 0x01, 0x28, 0x0b, - 0xdb, 0x05, 0x20, 0x03, 0x49, 0x0b, 0x60, 0x08, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x87, - 0x4b, 0x09, 0x59, 0xd9, 0x4a, 0x09, 0x42, 0x91, - 0xd1, 0x02, 0xf7, 0xff, 0xff, 0xdd, 0xe0, 0x05, - 0x4c, 0x07, 0x42, 0xa1, 0xd0, 0x02, 0x51, 0xda, - 0xf7, 0xfb, 0xfe, 0x9c, 0x20, 0x00, 0xbc, 0x90, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x21, 0x30, - 0x2e, 0x08, 0xd2, 0x18, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xfd, 0x28, 0x00, 0xdd, 0x09, - 0x28, 0x0b, 0xda, 0x07, 0x00, 0x80, 0x49, 0x04, - 0x58, 0x08, 0x49, 0x04, 0x42, 0x88, 0xd0, 0x01, - 0x20, 0x01, 0x47, 0x70, 0x20, 0x00, 0x47, 0x70, - 0x2e, 0x08, 0xd2, 0x18, 0xff, 0xff, 0xff, 0xff, - 0x28, 0x00, 0xdd, 0x01, 0x28, 0x0b, 0xdb, 0x01, - 0x48, 0x03, 0x47, 0x70, 0x00, 0x83, 0x4a, 0x03, - 0x58, 0xd0, 0x50, 0xd1, 0x47, 0x70, 0x00, 0x00, - 0xff, 0xff, 0xff, 0xfe, 0x2e, 0x08, 0xd2, 0x18, - 0xb5, 0x90, 0x27, 0x01, 0x4c, 0x05, 0x1c, 0x38, - 0x1c, 0x21, 0xf7, 0xff, 0xff, 0xe9, 0x37, 0x01, - 0x2f, 0x0b, 0xdb, 0xf8, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, - 0xb5, 0x90, 0x1c, 0x0c, 0x1c, 0x07, 0x48, 0x12, - 0x28, 0x00, 0xd0, 0x09, 0x48, 0x11, 0x78, 0x00, - 0x28, 0x00, 0xd1, 0x05, 0x1c, 0x38, 0x1c, 0x21, - 0xf0, 0x00, 0xfb, 0x2c, 0x28, 0x00, 0xd1, 0x13, - 0x08, 0x60, 0xd3, 0x02, 0x20, 0x0a, 0xf0, 0x00, - 0xf8, 0xd3, 0x78, 0x38, 0x28, 0x00, 0xd0, 0x06, - 0x78, 0x38, 0x37, 0x01, 0xf0, 0x00, 0xf8, 0xcc, - 0x78, 0x38, 0x28, 0x00, 0xd1, 0xf8, 0x08, 0xa0, - 0xd3, 0x02, 0x20, 0x0a, 0xf0, 0x00, 0xf8, 0xc4, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x02, 0x2b, 0xa9, 0x2e, 0x08, 0x23, 0x48, - 0xb5, 0x80, 0xb0, 0x83, 0x90, 0x00, 0x91, 0x01, - 0xf7, 0xfb, 0xfe, 0xf8, 0x90, 0x02, 0x46, 0x69, - 0x20, 0x01, 0xf0, 0x01, 0xf8, 0x49, 0x23, 0x01, - 0x1c, 0x07, 0x42, 0xd8, 0xd1, 0x05, 0x21, 0x00, - 0x20, 0x13, 0xf0, 0x01, 0xf8, 0x41, 0x49, 0x03, - 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x03, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, - 0x20, 0x02, 0xf0, 0x01, 0xf8, 0x31, 0x1c, 0x07, - 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x01, - 0xf8, 0x2b, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, - 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x80, 0xb0, 0x84, - 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, 0x46, 0x69, - 0x20, 0x05, 0xf0, 0x01, 0xf8, 0x19, 0x1c, 0x07, - 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x01, - 0xf8, 0x13, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, - 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x80, 0xb0, 0x84, - 0x90, 0x00, 0x91, 0x01, 0x92, 0x02, 0x93, 0x03, - 0x46, 0x69, 0x20, 0x06, 0xf0, 0x01, 0xf8, 0x00, - 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, - 0xf0, 0x00, 0xff, 0xfa, 0x49, 0x03, 0x60, 0x08, - 0x1c, 0x38, 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x00, 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, - 0x20, 0x08, 0xf0, 0x00, 0xff, 0xe9, 0xb0, 0x01, - 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x00, 0x69, 0x40, - 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, 0x20, 0x09, - 0xf0, 0x00, 0xff, 0xde, 0xb0, 0x01, 0xbc, 0x08, - 0x47, 0x18, 0xb5, 0x80, 0xb0, 0x82, 0x90, 0x00, - 0x91, 0x01, 0x46, 0x69, 0x20, 0x0a, 0xf0, 0x00, - 0xff, 0xd3, 0x1c, 0x07, 0xd5, 0x05, 0x21, 0x00, - 0x20, 0x13, 0xf0, 0x00, 0xff, 0xcd, 0x49, 0x03, - 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x02, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x81, 0x90, 0x00, 0x46, 0x69, - 0x20, 0x0b, 0xf0, 0x00, 0xff, 0xbd, 0x1c, 0x07, - 0xd5, 0x05, 0x21, 0x00, 0x20, 0x13, 0xf0, 0x00, - 0xff, 0xb7, 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, - 0xb0, 0x01, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x00, 0xb0, 0x81, - 0x90, 0x00, 0x46, 0x69, 0x20, 0x0c, 0xf0, 0x00, - 0xff, 0xa7, 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x00, 0xb0, 0x83, 0x90, 0x00, 0x91, 0x01, - 0x92, 0x02, 0x46, 0x69, 0x20, 0x0d, 0xf0, 0x00, - 0xff, 0x9b, 0xb0, 0x03, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x01, 0x46, 0x69, 0x20, 0x03, 0xf0, 0x00, - 0xff, 0x93, 0xb0, 0x01, 0xbc, 0x08, 0x47, 0x18, - 0xb5, 0x80, 0xb0, 0x82, 0x90, 0x00, 0xf7, 0xfb, - 0xfe, 0x35, 0x90, 0x01, 0x46, 0x69, 0x20, 0x12, - 0xf0, 0x00, 0xff, 0x86, 0x1c, 0x07, 0xd0, 0x05, - 0x21, 0x00, 0x20, 0x13, 0xf0, 0x00, 0xff, 0x80, - 0x49, 0x03, 0x60, 0x08, 0x1c, 0x38, 0xb0, 0x02, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0x80, 0xb0, 0x82, - 0x90, 0x00, 0xf7, 0xfb, 0xfe, 0x1b, 0x90, 0x01, - 0x46, 0x69, 0x20, 0x0e, 0xf0, 0x00, 0xff, 0x6c, - 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, - 0xf0, 0x00, 0xff, 0x66, 0x49, 0x03, 0x60, 0x08, - 0x1c, 0x38, 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x84, 0x90, 0x00, 0x1c, 0x0f, - 0xf7, 0xfb, 0xfe, 0x00, 0x90, 0x01, 0x97, 0x02, - 0x1c, 0x38, 0xf7, 0xfb, 0xfd, 0xfb, 0x90, 0x03, - 0x46, 0x69, 0x20, 0x0f, 0xf0, 0x00, 0xff, 0x4c, - 0x1c, 0x07, 0xd0, 0x05, 0x21, 0x00, 0x20, 0x13, - 0xf0, 0x00, 0xff, 0x46, 0x49, 0x03, 0x60, 0x08, - 0x1c, 0x38, 0xb0, 0x04, 0xbc, 0x80, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0x21, 0x30, - 0xb5, 0x80, 0xb0, 0x82, 0x4f, 0x08, 0x97, 0x00, - 0x20, 0xff, 0x30, 0x01, 0x90, 0x01, 0x46, 0x69, - 0x20, 0x15, 0xf0, 0x00, 0xff, 0x31, 0x28, 0x00, - 0xd0, 0x01, 0x20, 0x00, 0xe0, 0x00, 0x1c, 0x38, - 0xb0, 0x02, 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd2, 0x48, 0xb5, 0x00, 0x21, 0x00, - 0x20, 0x10, 0xf0, 0x00, 0xff, 0x21, 0x49, 0x02, - 0x68, 0x09, 0x1a, 0x40, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x23, 0x58, 0xb5, 0x00, 0x21, 0x00, - 0x20, 0x10, 0xf0, 0x00, 0xff, 0x15, 0x49, 0x02, - 0x60, 0x08, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x23, 0x58, 0xb5, 0x80, 0x21, 0x00, - 0x1c, 0x07, 0x20, 0x11, 0xf0, 0x00, 0xff, 0x08, - 0x2f, 0x00, 0xd0, 0x00, 0x60, 0x38, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0x47, 0x70, - 0xb5, 0x80, 0x49, 0x07, 0x68, 0x09, 0xf7, 0xfb, - 0xfc, 0xd9, 0x1c, 0x07, 0xd1, 0x03, 0xa1, 0x05, - 0xa0, 0x05, 0xf0, 0x00, 0xfc, 0xe7, 0x1c, 0x38, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0x28, 0x00, 0x00, 0x00, 0x00, - 0x4e, 0x6f, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x65, - 0x20, 0x6c, 0x65, 0x66, 0x74, 0x20, 0x66, 0x6f, - 0x72, 0x20, 0x49, 0x2f, 0x4f, 0x20, 0x62, 0x75, - 0x66, 0x66, 0x65, 0x72, 0x20, 0x6f, 0x72, 0x20, - 0x74, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6b, 0x65, - 0x00, 0x00, 0x00, 0x00, 0x23, 0x80, 0x68, 0xc1, - 0x43, 0x19, 0x60, 0xc1, 0x21, 0x00, 0x60, 0x01, - 0x60, 0x81, 0x47, 0x70, 0xb5, 0xf7, 0x68, 0xd5, - 0x69, 0x56, 0x1c, 0x0c, 0x1c, 0x17, 0x0d, 0x68, - 0xd3, 0x05, 0x23, 0x10, 0x43, 0x1d, 0x1c, 0x30, - 0xf7, 0xff, 0xff, 0x14, 0x61, 0xb8, 0x48, 0x12, - 0x40, 0x28, 0xd0, 0x08, 0x69, 0xb9, 0x1c, 0x30, - 0xf7, 0xff, 0xfe, 0xdf, 0x28, 0x00, 0xdb, 0x10, - 0x4b, 0x0e, 0x40, 0x1d, 0x60, 0xfd, 0x99, 0x00, - 0x1c, 0x30, 0x1c, 0x22, 0x1c, 0x2b, 0xf7, 0xff, - 0xfe, 0x8d, 0x00, 0x41, 0x08, 0x49, 0x1a, 0x61, - 0x69, 0xba, 0x18, 0x51, 0x61, 0xb9, 0x28, 0x00, - 0xd0, 0x08, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xce, - 0x20, 0x00, 0x43, 0xc0, 0xb0, 0x03, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xe7, 0xf9, - 0x00, 0x02, 0x00, 0x10, 0xff, 0xfd, 0xff, 0xef, - 0xb5, 0xb0, 0x48, 0x15, 0x68, 0xc1, 0x4b, 0x15, - 0x40, 0x19, 0x1c, 0x1d, 0x42, 0x99, 0xd1, 0x01, - 0xf0, 0x00, 0xfc, 0xd6, 0x48, 0x12, 0x68, 0xc1, - 0x4b, 0x10, 0x40, 0x19, 0x42, 0xa9, 0xd1, 0x01, - 0xf0, 0x00, 0xfc, 0xce, 0x48, 0x0f, 0x68, 0xc1, - 0x4b, 0x0c, 0x40, 0x19, 0x42, 0xa9, 0xd1, 0x01, - 0xf0, 0x00, 0xfc, 0xc6, 0x27, 0x00, 0x4c, 0x0c, - 0x01, 0xb8, 0x19, 0x00, 0x68, 0xc1, 0x4b, 0x07, - 0x40, 0x19, 0x42, 0xa9, 0xd1, 0x01, 0xf0, 0x00, - 0xfc, 0xbb, 0x37, 0x01, 0x2f, 0x0d, 0xdb, 0xf3, - 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x48, 0x00, 0x00, 0x02, 0x02, - 0x2e, 0x08, 0xd3, 0x88, 0x2e, 0x08, 0xd3, 0xc8, - 0x2e, 0x08, 0xd4, 0x08, 0xb5, 0xf0, 0x1c, 0x07, - 0x69, 0x04, 0x6a, 0xc0, 0x68, 0x79, 0x42, 0x88, - 0xd9, 0x00, 0x1c, 0x01, 0x68, 0xf8, 0x4b, 0x13, - 0x40, 0x18, 0x07, 0x82, 0x0f, 0x92, 0x25, 0x00, - 0x60, 0xf8, 0x2a, 0x01, 0xd0, 0x1a, 0x22, 0x82, - 0x40, 0x02, 0x15, 0x1e, 0x2a, 0x02, 0xd1, 0x0a, - 0x0c, 0x40, 0xd3, 0x13, 0x42, 0xa1, 0xd0, 0x0a, - 0x1b, 0x09, 0x1c, 0x20, 0x1c, 0x3a, 0xf7, 0xff, - 0xff, 0x75, 0x28, 0x00, 0xd0, 0x03, 0x1c, 0x30, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x62, 0xfc, - 0x60, 0x7c, 0x60, 0xbd, 0x68, 0xf8, 0x4b, 0x04, - 0x40, 0x18, 0x60, 0xf8, 0x1c, 0x28, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0xff, 0xf7, 0xff, 0xff, - 0xff, 0xfe, 0xff, 0xff, 0xb5, 0x80, 0x1c, 0x07, - 0x68, 0xc0, 0x23, 0x20, 0x43, 0xdb, 0x40, 0x18, - 0x60, 0xf8, 0x69, 0xb8, 0x6a, 0xb9, 0x42, 0x88, - 0xd0, 0x0d, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xbe, - 0x68, 0xf8, 0x4b, 0x08, 0x40, 0x18, 0x23, 0x10, - 0x43, 0x18, 0x60, 0xf8, 0x6a, 0xb8, 0x61, 0xb8, - 0x69, 0x38, 0x62, 0xf8, 0x60, 0x78, 0x68, 0xf8, - 0x4b, 0x03, 0x40, 0x18, 0x60, 0xf8, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0xff, 0xff, 0xcf, 0xff, - 0xff, 0xff, 0xbf, 0xbf, 0xb5, 0xf0, 0x1c, 0x07, - 0x69, 0x40, 0xb0, 0x83, 0x90, 0x01, 0x69, 0x38, - 0x90, 0x00, 0x25, 0x00, 0x68, 0xfe, 0x07, 0xb0, - 0xd1, 0x01, 0x43, 0xc0, 0xe0, 0x48, 0x09, 0x30, - 0xd2, 0x40, 0x24, 0x10, 0x1c, 0x38, 0xf0, 0x00, - 0xfc, 0x3f, 0x1c, 0x05, 0x0d, 0x70, 0xd3, 0x1b, - 0x24, 0x00, 0x49, 0x21, 0x91, 0x02, 0x01, 0xa0, - 0x99, 0x02, 0x18, 0x40, 0x42, 0xb8, 0xd0, 0x10, - 0x68, 0xc1, 0x07, 0x8a, 0xd0, 0x0d, 0x69, 0x42, - 0x9b, 0x01, 0x42, 0x9a, 0xd1, 0x09, 0x0d, 0x49, - 0xd3, 0x07, 0x68, 0xc1, 0x4b, 0x19, 0x40, 0x19, - 0x60, 0xc1, 0x68, 0xf8, 0x40, 0x18, 0x60, 0xf8, - 0xe0, 0x02, 0x34, 0x01, 0x2c, 0x10, 0xdb, 0xe6, - 0x2c, 0x10, 0xd1, 0x06, 0x98, 0x01, 0xf7, 0xff, - 0xfd, 0x9b, 0x28, 0x00, 0xda, 0x01, 0x25, 0x00, - 0x43, 0xed, 0x0b, 0x30, 0xd3, 0x04, 0x98, 0x00, - 0x49, 0x0f, 0x68, 0x09, 0xf7, 0xfb, 0xfb, 0xa6, - 0x0d, 0xf0, 0x05, 0xc0, 0x23, 0xa5, 0x05, 0xdb, - 0x42, 0xd8, 0xd1, 0x07, 0x48, 0x0b, 0x28, 0x00, - 0xd0, 0x04, 0x1c, 0x38, 0x1c, 0x29, 0xf7, 0xff, - 0xff, 0xfe, 0x1c, 0x05, 0x22, 0x40, 0x21, 0x00, - 0x1c, 0x38, 0xf7, 0xfb, 0xfc, 0xe7, 0x1c, 0x28, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd3, 0x48, 0xff, 0xef, 0xff, 0xff, - 0x2e, 0x08, 0x21, 0x2c, 0x00, 0x00, 0x00, 0x00, - 0xb5, 0xf7, 0x1c, 0x10, 0x1c, 0x0c, 0x1c, 0x17, - 0xf7, 0xff, 0xff, 0x98, 0x78, 0x20, 0x34, 0x01, - 0x28, 0x61, 0xd0, 0x09, 0x28, 0x72, 0xd0, 0x04, - 0x28, 0x77, 0xd1, 0x25, 0x26, 0x02, 0x25, 0x04, - 0xe0, 0x04, 0x26, 0x01, 0x25, 0x00, 0xe0, 0x01, - 0x4e, 0x1a, 0x25, 0x08, 0x78, 0x20, 0x34, 0x01, - 0x28, 0x2b, 0xd0, 0x06, 0x28, 0x62, 0xd1, 0x09, - 0x23, 0x04, 0x43, 0x1e, 0x23, 0x01, 0x43, 0x1d, - 0xe7, 0xf4, 0x23, 0x03, 0x43, 0x1e, 0x23, 0x02, - 0x43, 0x1d, 0xe7, 0xef, 0x1f, 0xe0, 0x38, 0x19, - 0x7f, 0xc0, 0x28, 0x74, 0xd1, 0x01, 0x23, 0x10, - 0x43, 0x1d, 0x98, 0x00, 0x1c, 0x29, 0xf7, 0xff, - 0xfd, 0x23, 0x23, 0x01, 0x42, 0xd8, 0xd1, 0x04, - 0x20, 0x00, 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x21, 0x00, 0x60, 0x79, 0x61, 0x39, - 0x21, 0x01, 0x03, 0x09, 0x61, 0x78, 0x61, 0xf9, - 0x60, 0xfe, 0x09, 0x28, 0xd3, 0x04, 0x22, 0x02, - 0x21, 0x00, 0x1c, 0x38, 0xf0, 0x00, 0xfb, 0xc4, - 0x1c, 0x38, 0xe7, 0xea, 0x00, 0x00, 0x80, 0x02, - 0xb5, 0x90, 0x23, 0x03, 0x4f, 0x08, 0x01, 0x9a, - 0x19, 0xd2, 0x68, 0xd4, 0x07, 0xa4, 0xd1, 0x04, - 0xf7, 0xff, 0xff, 0xaa, 0xbc, 0x90, 0xbc, 0x08, - 0x47, 0x18, 0x33, 0x01, 0x2b, 0x10, 0xdb, 0xf2, - 0x20, 0x00, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd3, 0x48, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x0f, 0x4d, 0x10, 0x68, 0xe8, 0x08, 0x80, - 0xd3, 0x18, 0x20, 0x01, 0x4e, 0x0e, 0x70, 0x30, - 0x40, 0x38, 0xd0, 0x03, 0x20, 0x0a, 0x1c, 0x29, - 0xf0, 0x00, 0xfc, 0x1e, 0x1c, 0x20, 0x1c, 0x29, - 0xf0, 0x00, 0xfc, 0x2c, 0x08, 0xb8, 0xd3, 0x03, - 0x20, 0x0a, 0x1c, 0x29, 0xf0, 0x00, 0xfc, 0x14, - 0x20, 0x00, 0x70, 0x30, 0x20, 0x01, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x20, 0x00, 0xbc, 0xf0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd3, 0xc8, - 0x2e, 0x08, 0x23, 0x48, 0xb5, 0x80, 0x1c, 0x07, - 0xa0, 0x06, 0x21, 0x01, 0xf7, 0xff, 0xfc, 0x98, - 0x21, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xfc, 0x94, - 0x20, 0x01, 0xf7, 0xfc, 0xff, 0x95, 0xbc, 0x80, - 0xbc, 0x08, 0x47, 0x18, 0x43, 0x6f, 0x75, 0x6c, - 0x64, 0x6e, 0x27, 0x74, 0x20, 0x77, 0x72, 0x69, - 0x74, 0x65, 0x20, 0x00, 0xb5, 0xf0, 0x1c, 0x04, - 0x1c, 0x15, 0x1c, 0x0f, 0x48, 0x20, 0x22, 0x01, - 0x02, 0x92, 0x21, 0x00, 0x1c, 0x06, 0xf7, 0xfb, - 0xfc, 0x2d, 0x4a, 0x1e, 0x1c, 0x28, 0xa1, 0x1e, - 0xf7, 0xff, 0xff, 0x4e, 0x28, 0x00, 0xd1, 0x02, - 0x1c, 0x28, 0xf7, 0xff, 0xff, 0xd3, 0x1c, 0x20, - 0x1c, 0x32, 0xa1, 0x1a, 0xf7, 0xff, 0xff, 0x44, - 0x28, 0x00, 0xd1, 0x02, 0x1c, 0x20, 0xf7, 0xff, - 0xff, 0xc9, 0x4a, 0x17, 0x1c, 0x38, 0x1c, 0x15, - 0xa1, 0x13, 0xf7, 0xff, 0xff, 0x39, 0x28, 0x00, - 0xd1, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xff, 0xbe, - 0x1c, 0x30, 0x26, 0x01, 0x03, 0x36, 0x08, 0xf2, - 0x21, 0x00, 0x1c, 0x33, 0xf0, 0x00, 0xf8, 0x52, - 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x20, 0xf7, 0xff, - 0xff, 0xb1, 0x22, 0x01, 0x02, 0x52, 0x21, 0x00, - 0x1c, 0x28, 0x1c, 0x33, 0xf0, 0x00, 0xf8, 0x46, - 0x28, 0x00, 0xd0, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xff, 0xa5, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0xd3, 0x48, 0x2e, 0x08, 0xd3, 0xc8, - 0x77, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x88, 0xb5, 0x90, 0x27, 0x03, - 0x4c, 0x09, 0x01, 0xb8, 0x19, 0x00, 0xf7, 0xff, - 0xfe, 0xa5, 0x37, 0x01, 0x2f, 0x10, 0xdb, 0xf8, - 0x27, 0x00, 0x01, 0xb8, 0x19, 0x00, 0xf7, 0xff, - 0xfe, 0x9d, 0x37, 0x01, 0x2f, 0x03, 0xdb, 0xf8, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0xd3, 0x48, 0xb5, 0xb0, 0x01, 0x80, - 0x1c, 0x0f, 0x4c, 0x0a, 0x19, 0x00, 0x1c, 0x05, - 0xf7, 0xff, 0xfe, 0x8c, 0x01, 0xb8, 0x19, 0x00, - 0x23, 0x01, 0x05, 0x1b, 0x68, 0xc1, 0x43, 0x19, - 0x60, 0xc1, 0x4b, 0x05, 0x40, 0x19, 0x60, 0xe9, - 0x69, 0x40, 0x61, 0x68, 0x1c, 0x38, 0xbc, 0xb0, - 0xbc, 0x08, 0x47, 0x18, 0x2e, 0x08, 0xd3, 0x48, - 0x00, 0x10, 0x8f, 0x03, 0xb4, 0xf0, 0x1c, 0x1f, - 0x68, 0xc3, 0x07, 0x9e, 0x0f, 0xb6, 0x25, 0x01, - 0x1c, 0x1c, 0x2e, 0x00, 0xd0, 0x13, 0x1c, 0x1e, - 0x0d, 0xf3, 0xd2, 0x10, 0x02, 0x2b, 0x42, 0x9a, - 0xd0, 0x09, 0x00, 0x5b, 0x42, 0x9a, 0xd0, 0x06, - 0x00, 0x5b, 0x42, 0x9a, 0xd1, 0x07, 0x27, 0x01, - 0x1d, 0xc1, 0x31, 0x1d, 0xe0, 0x06, 0x1e, 0x7e, - 0x4b, 0x08, 0x42, 0x9e, 0xd3, 0x02, 0x1c, 0x28, - 0xbc, 0xf0, 0x47, 0x70, 0x61, 0x01, 0x23, 0x0f, - 0x02, 0x1b, 0x43, 0x9c, 0x60, 0x41, 0x61, 0xc7, - 0x1c, 0x21, 0x43, 0x11, 0x60, 0xc1, 0x20, 0x00, - 0xbc, 0xf0, 0x47, 0x70, 0x00, 0xff, 0xff, 0xff, - 0xe2, 0x00, 0x01, 0x02, 0xe3, 0x31, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x17, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x21, - 0x01, 0xa0, 0x14, 0x01, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x21, 0x01, 0xa0, 0x12, 0x01, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x21, - 0x01, 0xa0, 0x11, 0x01, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa1, 0x01, 0xa0, 0x10, 0x81, - 0x02, 0x88, 0x80, 0x01, 0xe0, 0x58, 0x98, 0xa6, - 0x81, 0xa0, 0x19, 0x31, 0x81, 0xa0, 0x88, 0xa6, - 0xe2, 0x68, 0x60, 0x20, 0xe1, 0x81, 0x16, 0x32, - 0xe1, 0xa0, 0x28, 0x12, 0x30, 0x40, 0x00, 0x09, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x56, 0x05, 0x01, - 0x3a, 0x00, 0x00, 0x16, 0xe1, 0xb0, 0x10, 0x02, - 0x01, 0xa0, 0xf0, 0x0e, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0xa0, 0x80, 0x20, 0xe1, 0xb0, 0x98, 0x21, - 0x01, 0xa0, 0x18, 0x01, 0x02, 0x88, 0x80, 0x10, - 0xe1, 0xb0, 0x9c, 0x21, 0x01, 0xa0, 0x14, 0x01, - 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x21, - 0x01, 0xa0, 0x12, 0x01, 0x02, 0x88, 0x80, 0x04, - 0xe1, 0xb0, 0x9f, 0x21, 0x01, 0xa0, 0x11, 0x01, - 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa1, - 0x01, 0xa0, 0x10, 0x81, 0x02, 0x88, 0x80, 0x01, - 0xe0, 0x58, 0x98, 0xa6, 0x81, 0xa0, 0x19, 0x31, - 0x30, 0x40, 0x00, 0x09, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xa0, 0x88, 0xa6, 0xe2, 0x68, 0x90, 0x20, - 0xe1, 0xa0, 0x18, 0x11, 0xe1, 0x81, 0x19, 0x32, - 0xe1, 0xa0, 0x28, 0x12, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe2, 0x03, 0x31, 0x02, 0xe3, 0x34, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x17, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x24, 0x01, 0xa0, 0x48, 0x04, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x24, - 0x01, 0xa0, 0x44, 0x04, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x24, 0x01, 0xa0, 0x42, 0x04, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x24, - 0x01, 0xa0, 0x41, 0x04, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa4, 0x01, 0xa0, 0x40, 0x84, - 0x02, 0x88, 0x80, 0x01, 0xe0, 0x58, 0x98, 0xa6, - 0x81, 0xa0, 0x49, 0x34, 0x81, 0xa0, 0x88, 0xa6, - 0xe2, 0x68, 0x60, 0x20, 0xe1, 0x84, 0x46, 0x35, - 0xe1, 0xa0, 0x58, 0x15, 0x30, 0x43, 0x30, 0x09, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x56, 0x05, 0x01, - 0x3a, 0x00, 0x00, 0x16, 0xe1, 0xb0, 0x40, 0x05, - 0x01, 0xa0, 0xf0, 0x0e, 0xe3, 0xa0, 0x50, 0x00, - 0xe3, 0xa0, 0x80, 0x20, 0xe1, 0xb0, 0x98, 0x24, - 0x01, 0xa0, 0x48, 0x04, 0x02, 0x88, 0x80, 0x10, - 0xe1, 0xb0, 0x9c, 0x24, 0x01, 0xa0, 0x44, 0x04, - 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x24, - 0x01, 0xa0, 0x42, 0x04, 0x02, 0x88, 0x80, 0x04, - 0xe1, 0xb0, 0x9f, 0x24, 0x01, 0xa0, 0x41, 0x04, - 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa4, - 0x01, 0xa0, 0x40, 0x84, 0x02, 0x88, 0x80, 0x01, - 0xe0, 0x58, 0x98, 0xa6, 0x81, 0xa0, 0x49, 0x34, - 0x30, 0x43, 0x30, 0x09, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe1, 0xa0, 0x88, 0xa6, 0xe2, 0x68, 0x90, 0x20, - 0xe1, 0xa0, 0x48, 0x14, 0xe1, 0x84, 0x49, 0x35, - 0xe1, 0xa0, 0x58, 0x15, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe3, 0xa0, 0x20, 0x00, 0xe2, 0x16, 0x01, 0x02, - 0x12, 0x66, 0x10, 0x00, 0x01, 0xb0, 0x10, 0x06, - 0x03, 0xa0, 0x30, 0x00, 0x01, 0xa0, 0xf0, 0x0e, - 0xe3, 0xa0, 0x39, 0x01, 0xe3, 0x83, 0x30, 0x1e, - 0xe3, 0xa0, 0x60, 0x00, 0xe3, 0x31, 0x00, 0x00, - 0x01, 0xa0, 0x10, 0x02, 0x03, 0xa0, 0x20, 0x00, - 0x02, 0x43, 0x30, 0x20, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x21, - 0x01, 0xa0, 0x14, 0x01, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x21, 0x01, 0xa0, 0x12, 0x01, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x21, - 0x01, 0xa0, 0x11, 0x01, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa1, 0x01, 0xa0, 0x10, 0x81, - 0x02, 0x88, 0x80, 0x01, 0xe2, 0x78, 0x90, 0x20, - 0xe1, 0x81, 0x19, 0x32, 0xe1, 0xa0, 0x28, 0x12, - 0xe0, 0x43, 0x30, 0x08, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe3, 0x34, 0x00, 0x00, 0x01, 0xa0, 0x40, 0x05, - 0x03, 0xa0, 0x50, 0x00, 0x02, 0x43, 0x30, 0x20, - 0xe3, 0xa0, 0x80, 0x00, 0xe1, 0xb0, 0x98, 0x24, - 0x01, 0xa0, 0x48, 0x04, 0x02, 0x88, 0x80, 0x10, - 0xe1, 0xb0, 0x9c, 0x24, 0x01, 0xa0, 0x44, 0x04, - 0x02, 0x88, 0x80, 0x08, 0xe1, 0xb0, 0x9e, 0x24, - 0x01, 0xa0, 0x42, 0x04, 0x02, 0x88, 0x80, 0x04, - 0xe1, 0xb0, 0x9f, 0x24, 0x01, 0xa0, 0x41, 0x04, - 0x02, 0x88, 0x80, 0x02, 0xe1, 0xb0, 0x9f, 0xa4, - 0x01, 0xa0, 0x40, 0x84, 0x02, 0x88, 0x80, 0x01, - 0xe2, 0x78, 0x90, 0x20, 0xe1, 0x84, 0x49, 0x35, - 0xe1, 0xa0, 0x58, 0x15, 0xe0, 0x43, 0x30, 0x08, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x31, 0x00, 0x00, - 0x01, 0xa0, 0x10, 0x02, 0x03, 0xa0, 0x20, 0x00, - 0x02, 0x83, 0x30, 0x20, 0xe3, 0xa0, 0x80, 0x00, - 0xe1, 0xb0, 0x98, 0x21, 0x01, 0xa0, 0x18, 0x01, - 0x02, 0x88, 0x80, 0x10, 0xe1, 0xb0, 0x9c, 0x21, - 0x01, 0xa0, 0x14, 0x01, 0x02, 0x88, 0x80, 0x08, - 0xe1, 0xb0, 0x9e, 0x21, 0x01, 0xa0, 0x12, 0x01, - 0x02, 0x88, 0x80, 0x04, 0xe1, 0xb0, 0x9f, 0x21, - 0x01, 0xa0, 0x11, 0x01, 0x02, 0x88, 0x80, 0x02, - 0xe1, 0xb0, 0x9f, 0xa1, 0x01, 0xa0, 0x10, 0x81, - 0x02, 0x88, 0x80, 0x01, 0xe2, 0x78, 0x90, 0x20, - 0xe1, 0x81, 0x19, 0x32, 0xe1, 0xa0, 0x28, 0x12, - 0xe0, 0x83, 0x30, 0x08, 0xe1, 0xa0, 0xf0, 0x0e, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x7f, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0xe1, 0x92, 0x80, 0x81, 0x0a, 0x00, 0x00, 0x05, - 0xe3, 0x11, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x0c, - 0xe1, 0x95, 0x80, 0x84, 0x0a, 0x00, 0x00, 0x0a, - 0xe3, 0x14, 0x01, 0x01, 0x1a, 0x00, 0x00, 0x08, - 0xe3, 0x14, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x28, - 0xe1, 0xa0, 0x00, 0x03, 0xe1, 0xa0, 0x10, 0x04, - 0xe1, 0xa0, 0x20, 0x05, 0xea, 0x00, 0x00, 0x04, - 0xe3, 0x11, 0x01, 0x01, 0x0a, 0x00, 0x00, 0x22, - 0xea, 0x00, 0x00, 0x01, 0xe3, 0x11, 0x01, 0x01, - 0x0a, 0x00, 0x00, 0x1f, 0xe3, 0x1b, 0x00, 0x01, - 0x1a, 0x00, 0x00, 0x16, 0xe3, 0x1b, 0x00, 0x02, - 0x1a, 0x00, 0x00, 0x0c, 0xe3, 0x1b, 0x0c, 0x02, - 0x1a, 0x00, 0x00, 0x05, 0xe3, 0xc0, 0x81, 0x03, - 0xe3, 0xa0, 0x90, 0xff, 0xe3, 0x89, 0x9c, 0x43, - 0xe1, 0x58, 0x00, 0x09, 0x33, 0xc2, 0x20, 0x01, - 0x03, 0x82, 0x20, 0x01, 0xe2, 0x00, 0x01, 0x03, - 0xe3, 0x80, 0x00, 0xff, 0xe3, 0x80, 0x0c, 0x7f, - 0xe1, 0x30, 0x00, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe2, 0x00, 0x01, 0x03, 0xe3, 0x80, 0x00, 0xff, - 0xe3, 0x80, 0x0c, 0x43, 0xe1, 0xa0, 0x25, 0xa2, - 0xe1, 0xa0, 0x25, 0x82, 0xe3, 0x81, 0x11, 0x02, - 0xe1, 0x30, 0x00, 0x00, 0xe1, 0xa0, 0xf0, 0x0e, - 0xe2, 0x00, 0x01, 0x03, 0xe3, 0x80, 0x00, 0x7f, - 0xe3, 0x80, 0x09, 0x01, 0xe3, 0xa0, 0x20, 0x00, - 0xe3, 0xc1, 0x10, 0xff, 0xe3, 0x81, 0x11, 0x02, - 0xe1, 0xa0, 0xf0, 0x0e, 0xe3, 0x80, 0x04, 0x61, - 0xe1, 0xa0, 0xf0, 0x0e, 0xb5, 0x80, 0x1c, 0x0f, - 0x29, 0x0f, 0xdd, 0x04, 0x11, 0x39, 0xf7, 0xff, - 0xff, 0xf9, 0x07, 0x3f, 0x0f, 0x3f, 0x2f, 0x09, - 0xdd, 0x02, 0x1d, 0xf9, 0x31, 0x29, 0xe0, 0x01, - 0x1d, 0xf9, 0x31, 0x50, 0x70, 0x01, 0x30, 0x01, - 0xbc, 0x80, 0xbc, 0x08, 0x47, 0x18, 0xb5, 0x90, - 0x1c, 0x07, 0x48, 0x0d, 0x68, 0x01, 0x29, 0x00, - 0xd1, 0x12, 0x4c, 0x0c, 0x1c, 0x20, 0xa1, 0x0c, - 0x22, 0x14, 0xf7, 0xfb, 0xf8, 0x67, 0x1d, 0xe0, - 0x30, 0x0b, 0x1c, 0x39, 0xf7, 0xff, 0xff, 0xda, - 0x21, 0x29, 0x70, 0x01, 0x21, 0x00, 0x70, 0x41, - 0x1c, 0x20, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x30, 0x08, 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, - 0x2e, 0x08, 0x21, 0x4c, 0x2e, 0x08, 0xd7, 0x48, - 0x55, 0x6e, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x20, - 0x53, 0x69, 0x67, 0x6e, 0x61, 0x6c, 0x20, 0x28, - 0x30, 0x78, 0x00, 0x00, 0xb5, 0x90, 0x1c, 0x04, - 0x1c, 0x0f, 0xa0, 0x09, 0x21, 0x01, 0xf7, 0xff, - 0xf9, 0x87, 0x21, 0x00, 0x1c, 0x20, 0xf7, 0xff, - 0xf9, 0x83, 0x21, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xf9, 0x7f, 0x20, 0x01, 0xf7, 0xfc, 0xfc, 0x80, - 0xbc, 0x90, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x2a, 0x2a, 0x2a, 0x20, 0x66, 0x61, 0x74, 0x61, - 0x6c, 0x20, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x20, - 0x69, 0x6e, 0x20, 0x72, 0x75, 0x6e, 0x20, 0x74, - 0x69, 0x6d, 0x65, 0x20, 0x73, 0x79, 0x73, 0x74, - 0x65, 0x6d, 0x3a, 0x20, 0x00, 0x00, 0x00, 0x00, - 0xb5, 0xb0, 0x1c, 0x07, 0x68, 0xc0, 0x07, 0x81, - 0xd0, 0x1f, 0x23, 0x20, 0x40, 0x18, 0xd0, 0x01, - 0x6a, 0xbd, 0xe0, 0x04, 0x68, 0x79, 0x69, 0xba, - 0x18, 0x89, 0x69, 0x3a, 0x1a, 0x8d, 0x28, 0x00, - 0xd0, 0x02, 0x1c, 0x38, 0xf7, 0xff, 0xfb, 0xa2, - 0x68, 0xf8, 0x4b, 0x0a, 0x40, 0x18, 0x60, 0xf8, - 0x1c, 0x38, 0xf7, 0xff, 0xfb, 0x67, 0x1c, 0x04, - 0x22, 0x00, 0x1c, 0x38, 0x1c, 0x29, 0xf0, 0x00, - 0xf8, 0x27, 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xff, 0xff, 0xcf, 0xff, - 0xb5, 0xb0, 0x24, 0x00, 0x28, 0x00, 0xd0, 0x03, - 0xf7, 0xff, 0xff, 0xce, 0x1c, 0x04, 0xe0, 0x0c, - 0x27, 0x00, 0x4d, 0x08, 0x01, 0xb8, 0x19, 0x40, - 0xf7, 0xff, 0xff, 0xc6, 0x28, 0x00, 0xd0, 0x01, - 0x24, 0x00, 0x43, 0xe4, 0x37, 0x01, 0x2f, 0x10, - 0xdb, 0xf4, 0x1c, 0x20, 0xbc, 0xb0, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0x2e, 0x08, 0xd3, 0x48, - 0xb5, 0xf7, 0x68, 0xc5, 0x69, 0x46, 0x1c, 0x0c, - 0x1c, 0x07, 0xb0, 0x81, 0x48, 0x3c, 0x40, 0x28, - 0xd0, 0x04, 0x1c, 0x38, 0xf7, 0xff, 0xf9, 0xaa, - 0x28, 0x00, 0xd0, 0x01, 0x20, 0x02, 0xe0, 0x6a, - 0x9a, 0x03, 0x2a, 0x00, 0xd0, 0x26, 0x2a, 0x01, - 0xd0, 0x0b, 0x2a, 0x02, 0xd1, 0x24, 0x1c, 0x30, - 0xf7, 0xff, 0xf9, 0xd4, 0x28, 0x00, 0xda, 0x09, - 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0xa7, 0x20, 0x01, - 0xe0, 0x59, 0x1c, 0x38, 0xf0, 0x00, 0xf8, 0x8c, - 0x19, 0x04, 0xe0, 0x13, 0x68, 0x79, 0x6a, 0xfa, - 0x42, 0x8a, 0xd9, 0x00, 0x1c, 0x11, 0x69, 0xba, - 0x18, 0x89, 0x69, 0x3a, 0x1a, 0x89, 0x68, 0xfa, - 0x09, 0x92, 0xd3, 0x03, 0x6a, 0xba, 0x42, 0x8a, - 0xdd, 0x00, 0x1c, 0x11, 0x42, 0x81, 0xdd, 0x00, - 0x1c, 0x08, 0x18, 0x24, 0x2c, 0x00, 0xda, 0x03, - 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0x87, 0xe7, 0xcd, - 0x0b, 0xa8, 0xd3, 0x04, 0x68, 0x78, 0x6a, 0xf9, - 0x42, 0x81, 0xd2, 0x00, 0x62, 0xf8, 0x69, 0xb8, - 0x42, 0xa0, 0xdc, 0x10, 0x68, 0x79, 0x6a, 0xfa, - 0x42, 0x8a, 0xd9, 0x01, 0x1c, 0x13, 0xe0, 0x00, - 0x1c, 0x0b, 0x18, 0x1b, 0x69, 0x3e, 0x1b, 0x9b, - 0x42, 0xa3, 0xdb, 0x04, 0x6b, 0x3b, 0x93, 0x00, - 0x18, 0xc3, 0x42, 0xa3, 0xdc, 0x06, 0x20, 0x20, - 0x43, 0x28, 0x21, 0x00, 0x60, 0x39, 0x60, 0xb9, - 0x62, 0xbc, 0xe0, 0x14, 0x1a, 0x24, 0x08, 0xa8, - 0xd3, 0x03, 0x9b, 0x00, 0x1b, 0x18, 0x42, 0x40, - 0x60, 0xb8, 0x08, 0x68, 0xd3, 0x06, 0x42, 0x8a, - 0xd9, 0x00, 0x1c, 0x11, 0x1b, 0x88, 0x1b, 0x00, - 0x42, 0x40, 0x60, 0x38, 0x19, 0x30, 0x23, 0x20, - 0x43, 0x9d, 0x60, 0x78, 0x1c, 0x28, 0x4b, 0x05, - 0x40, 0x18, 0x60, 0xf8, 0x20, 0x00, 0xb0, 0x01, - 0xb0, 0x03, 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, - 0x00, 0x10, 0x00, 0x03, 0xff, 0xf7, 0xcf, 0xbf, - 0xb5, 0x00, 0x68, 0x8a, 0x68, 0x4b, 0x3a, 0x01, - 0xd5, 0x03, 0xf0, 0x00, 0xf8, 0x3f, 0xbc, 0x08, - 0x47, 0x18, 0x06, 0x00, 0x0e, 0x00, 0x70, 0x18, - 0x33, 0x01, 0x60, 0x8a, 0x60, 0x4b, 0xbc, 0x08, - 0x47, 0x18, 0x00, 0x00, 0xb5, 0xb0, 0x1c, 0x07, - 0x78, 0x00, 0x1c, 0x0c, 0x37, 0x01, 0x28, 0x00, - 0xd0, 0x0e, 0x25, 0x00, 0x43, 0xed, 0x1c, 0x21, - 0xf0, 0x00, 0xf8, 0xe8, 0x42, 0xa8, 0xd1, 0x03, - 0x1c, 0x28, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x78, 0x38, 0x37, 0x01, 0x28, 0x00, 0xd1, 0xf2, - 0x20, 0x00, 0xbc, 0xb0, 0xbc, 0x08, 0x47, 0x18, - 0x68, 0xc1, 0x07, 0x8a, 0xd1, 0x04, 0x20, 0x01, - 0x49, 0x09, 0x60, 0x08, 0x42, 0x40, 0x47, 0x70, - 0x09, 0x8a, 0xd3, 0x01, 0x6a, 0x80, 0xe0, 0x04, - 0x68, 0x42, 0x69, 0x83, 0x18, 0xd2, 0x69, 0x00, - 0x1a, 0x10, 0x0d, 0x09, 0xd3, 0xf3, 0x28, 0x00, - 0xdd, 0xf1, 0x38, 0x01, 0x47, 0x70, 0x00, 0x00, - 0x2e, 0x08, 0x21, 0x30, 0xb5, 0xf0, 0x1c, 0x04, - 0x68, 0xc8, 0x1c, 0x0f, 0x4b, 0x5a, 0x40, 0x18, - 0x23, 0x01, 0x05, 0x9b, 0x43, 0x18, 0x60, 0xc8, - 0x09, 0x80, 0xd3, 0x02, 0x1c, 0x38, 0xf7, 0xff, - 0xfa, 0x95, 0x06, 0x26, 0x0e, 0x36, 0x68, 0xb9, - 0x29, 0x00, 0xda, 0x12, 0x68, 0xf8, 0x0a, 0x82, - 0xd2, 0x0f, 0x22, 0x00, 0x43, 0xd2, 0x1a, 0x51, - 0x23, 0x09, 0x03, 0x5b, 0x43, 0x18, 0x60, 0xf8, - 0x60, 0xb9, 0x68, 0x79, 0x70, 0x0e, 0x31, 0x01, - 0x60, 0x79, 0x1c, 0x30, 0xbc, 0xf0, 0xbc, 0x08, - 0x47, 0x18, 0x68, 0xf8, 0x49, 0x49, 0x40, 0x01, - 0x29, 0x02, 0xd0, 0x03, 0x1c, 0x38, 0xf7, 0xff, - 0xf9, 0xcd, 0xe0, 0x7f, 0x49, 0x46, 0x40, 0x01, - 0x23, 0x01, 0x03, 0xdb, 0x42, 0x99, 0xd1, 0x0b, - 0x22, 0x02, 0x21, 0x00, 0x1c, 0x38, 0xf7, 0xff, - 0xfe, 0xfb, 0x68, 0xf8, 0x09, 0x80, 0xd3, 0x02, - 0x1c, 0x38, 0xf7, 0xff, 0xfa, 0x63, 0x68, 0xf8, - 0x25, 0x09, 0x03, 0x6d, 0x43, 0x05, 0x60, 0xfd, - 0x69, 0x38, 0x28, 0x00, 0xd1, 0x2f, 0x1c, 0x38, - 0xf7, 0xff, 0xf8, 0xa0, 0x28, 0x00, 0xd0, 0x18, - 0x68, 0xf8, 0x0a, 0x00, 0x07, 0x80, 0xd0, 0x09, - 0x69, 0xf8, 0xf7, 0xff, 0xf9, 0x7d, 0x61, 0x38, - 0x60, 0x78, 0x23, 0x01, 0x02, 0xdb, 0x43, 0x1d, - 0x68, 0xf8, 0xe0, 0x1a, 0x1d, 0xf8, 0x30, 0x1d, - 0x61, 0x38, 0x60, 0x78, 0x20, 0x01, 0x23, 0x01, - 0x02, 0x9b, 0x43, 0x1d, 0x61, 0xf8, 0x60, 0xfd, - 0xe0, 0x11, 0x69, 0xf8, 0xf7, 0xff, 0xf9, 0x68, - 0x61, 0x38, 0x60, 0x78, 0x23, 0x01, 0x02, 0xdb, - 0x43, 0x1d, 0x68, 0xf8, 0x43, 0x28, 0x60, 0xf8, - 0x0a, 0x29, 0x07, 0x89, 0xd1, 0x03, 0x08, 0xdb, - 0x43, 0x1d, 0x43, 0x28, 0x60, 0xf8, 0x0a, 0x68, - 0xd3, 0x19, 0x68, 0x78, 0x6a, 0xf9, 0x69, 0x3c, - 0x42, 0x81, 0xd9, 0x00, 0x1c, 0x08, 0x1b, 0x01, - 0xd0, 0x05, 0x1c, 0x20, 0x1c, 0x3a, 0xf7, 0xff, - 0xf9, 0x7d, 0x28, 0x00, 0xd1, 0x26, 0x1c, 0x60, - 0x62, 0xf8, 0x60, 0x78, 0x69, 0xf8, 0x1e, 0x41, - 0x63, 0x38, 0x60, 0xb9, 0x70, 0x26, 0x1c, 0x30, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x69, 0x38, - 0x68, 0x7a, 0x70, 0x14, 0x32, 0x01, 0x60, 0x7a, - 0x6a, 0xf9, 0x42, 0x91, 0xd8, 0x00, 0x1c, 0x11, - 0x1a, 0x09, 0x69, 0xfa, 0x63, 0x3a, 0x0a, 0xeb, - 0xd2, 0x03, 0x2e, 0x0a, 0xd0, 0x01, 0x42, 0x8a, - 0xdc, 0x0d, 0x62, 0xf8, 0x22, 0x00, 0x60, 0x78, - 0x60, 0xba, 0x1c, 0x3a, 0xf7, 0xff, 0xf9, 0x56, - 0x28, 0x00, 0xd0, 0x04, 0x20, 0x00, 0x43, 0xc0, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x1c, 0x30, - 0xbc, 0xf0, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0xff, 0xf7, 0xff, 0xff, 0x00, 0x00, 0x10, 0x8a, - 0x00, 0x00, 0xa0, 0x10, 0xb5, 0x00, 0x68, 0x8a, - 0x68, 0x4b, 0x3a, 0x01, 0xd5, 0x03, 0xf7, 0xff, - 0xff, 0x39, 0xbc, 0x08, 0x47, 0x18, 0x06, 0x00, - 0x0e, 0x00, 0x70, 0x18, 0x33, 0x01, 0x60, 0x8a, - 0x60, 0x4b, 0xbc, 0x08, 0x47, 0x18, 0x00, 0x00, - 0x47, 0x78, 0x46, 0xc0, 0xe9, 0x2d, 0x40, 0x00, - 0xe2, 0x8f, 0xe0, 0x00, 0xef, 0x12, 0x34, 0x56, - 0xe8, 0xbd, 0x40, 0x00, 0xe1, 0x2f, 0xff, 0x1e, - 0xe1, 0xa0, 0x10, 0x00, 0xe3, 0xa0, 0x00, 0x18, - 0xe5, 0x9f, 0x10, 0x18, 0xef, 0x12, 0x34, 0x56, - 0xea, 0xff, 0xff, 0xfe, 0xe1, 0xa0, 0x10, 0x00, - 0xe3, 0xa0, 0x00, 0x18, 0xe5, 0x9f, 0x10, 0x08, - 0xef, 0x12, 0x34, 0x56, 0xea, 0xff, 0xff, 0xfe, - 0x00, 0x02, 0x00, 0x26, 0x00, 0x02, 0x00, 0x23, - 0xe8, 0xb0, 0x01, 0xf0, 0xe8, 0xa1, 0x01, 0xf0, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe8, 0xb0, 0x01, 0xf8, 0xe8, 0xa1, 0x01, 0xf8, - 0xe2, 0x52, 0x20, 0xbc, 0x1a, 0xff, 0xff, 0xed, - 0xe8, 0xbd, 0x01, 0xf8, 0xe1, 0x2f, 0xff, 0x1e, - 0xe4, 0x90, 0x40, 0x04, 0xe1, 0x85, 0x54, 0x24, - 0xe4, 0x81, 0x50, 0x04, 0xe1, 0xa0, 0x5c, 0x04, - 0xe2, 0x53, 0x30, 0x04, 0x1a, 0xff, 0xff, 0xf9, - 0xe5, 0x9f, 0xf0, 0x88, 0xe4, 0x90, 0x40, 0x04, - 0xe1, 0x85, 0x5c, 0x24, 0xe4, 0x81, 0x50, 0x04, - 0xe1, 0xa0, 0x54, 0x04, 0xe2, 0x53, 0x30, 0x04, - 0x1a, 0xff, 0xff, 0xf9, 0xe5, 0x9f, 0xf0, 0x70, - 0xe4, 0x90, 0x40, 0x04, 0xe1, 0xa0, 0x58, 0x24, - 0xe0, 0xc1, 0x50, 0xb2, 0xe0, 0xc1, 0x40, 0xb2, - 0xe2, 0x53, 0x30, 0x04, 0x1a, 0xff, 0xff, 0xf9, - 0xe5, 0x9f, 0xf0, 0x4c, 0xe2, 0x03, 0x40, 0x0f, - 0xe0, 0x53, 0x40, 0x04, 0x0a, 0x00, 0x00, 0x0a, - 0xe9, 0x2d, 0x00, 0xc4, 0xe1, 0xa0, 0x20, 0x03, - 0xe1, 0xa0, 0x30, 0x04, 0xe8, 0xb0, 0x00, 0xf0, - 0xe8, 0xa1, 0x00, 0xf0, 0xe2, 0x53, 0x30, 0x10, - 0x1a, 0xff, 0xff, 0xfb, 0xe1, 0xa0, 0x30, 0x02, - 0xe8, 0xbd, 0x00, 0xc4, 0xe2, 0x13, 0x30, 0x0f, - 0x0a, 0x00, 0x00, 0x03, 0xe4, 0x90, 0x40, 0x04, - 0xe4, 0x81, 0x40, 0x04, 0xe2, 0x53, 0x30, 0x04, - 0x1a, 0xff, 0xff, 0xfb, 0xe5, 0x9f, 0xf0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x2e, 0x02, 0x38, 0x58, - 0x2e, 0x02, 0x37, 0xfc, 0x2e, 0x02, 0x38, 0x2c, - 0xe9, 0x2d, 0x00, 0x38, 0xe3, 0x52, 0x00, 0x00, - 0x0a, 0x00, 0x00, 0x3f, 0xe3, 0xe0, 0x30, 0x03, - 0xe0, 0x12, 0x30, 0x03, 0x0a, 0x00, 0x00, 0x30, - 0xe2, 0x10, 0x30, 0x01, 0x0a, 0x00, 0x00, 0x03, - 0xe4, 0xd0, 0x30, 0x01, 0xe4, 0xc1, 0x30, 0x01, - 0xe2, 0x52, 0x20, 0x01, 0x0a, 0x00, 0x00, 0x36, - 0xe2, 0x10, 0x30, 0x02, 0x0a, 0x00, 0x00, 0x05, - 0xe0, 0xd0, 0x30, 0xb2, 0xe1, 0xa0, 0x44, 0x23, - 0xe4, 0xc1, 0x40, 0x01, 0xe4, 0xc1, 0x30, 0x01, - 0xe2, 0x52, 0x20, 0x02, 0x0a, 0x00, 0x00, 0x2e, - 0xe3, 0xe0, 0x30, 0x03, 0xe0, 0x12, 0x30, 0x03, - 0x0a, 0x00, 0x00, 0x1f, 0xe2, 0x11, 0x40, 0x01, - 0x0a, 0x00, 0x00, 0x19, 0xe2, 0x11, 0x40, 0x02, - 0x1a, 0x00, 0x00, 0x0b, 0xe2, 0x41, 0x10, 0x01, - 0xe5, 0x91, 0x50, 0x00, 0xe1, 0xa0, 0x5c, 0x25, - 0xe1, 0xa0, 0x5c, 0x05, 0xe5, 0x9f, 0xf0, 0xa8, - 0xe5, 0x91, 0x40, 0x00, 0xe1, 0xa0, 0x44, 0x04, - 0xe1, 0xa0, 0x44, 0x24, 0xe1, 0x85, 0x50, 0x04, - 0xe5, 0x81, 0x50, 0x00, 0xe2, 0x81, 0x10, 0x01, - 0xea, 0x00, 0x00, 0x0f, 0xe2, 0x41, 0x10, 0x03, - 0xe5, 0x91, 0x50, 0x00, 0xe1, 0xa0, 0x54, 0x25, - 0xe1, 0xa0, 0x54, 0x05, 0xe5, 0x9f, 0xf0, 0x7c, - 0xe5, 0x91, 0x40, 0x00, 0xe1, 0xa0, 0x4c, 0x04, - 0xe1, 0xa0, 0x4c, 0x24, 0xe1, 0x85, 0x50, 0x04, - 0xe5, 0x81, 0x50, 0x00, 0xe2, 0x81, 0x10, 0x03, - 0xea, 0x00, 0x00, 0x03, 0xe2, 0x11, 0x40, 0x02, - 0x0a, 0x00, 0x00, 0x00, 0xe5, 0x9f, 0xf0, 0x5c, - 0xe5, 0x9f, 0xf0, 0x48, 0xe2, 0x12, 0x20, 0x03, - 0x0a, 0x00, 0x00, 0x09, 0xe4, 0xd0, 0x40, 0x01, - 0xe4, 0xc1, 0x40, 0x01, 0xe2, 0x52, 0x20, 0x01, - 0x0a, 0x00, 0x00, 0x05, 0xe4, 0xd0, 0x40, 0x01, - 0xe4, 0xc1, 0x40, 0x01, 0xe2, 0x52, 0x20, 0x01, - 0x0a, 0x00, 0x00, 0x01, 0xe4, 0xd0, 0x40, 0x01, - 0xe4, 0xc1, 0x40, 0x01, 0xe8, 0xbd, 0x00, 0x38, - 0xe3, 0x8e, 0xe0, 0x01, 0xe1, 0x2f, 0xff, 0x1e, - 0xe9, 0x2d, 0x01, 0xf8, 0xe5, 0x9f, 0xf0, 0x18, - 0x2e, 0x02, 0x36, 0xcc, 0x2e, 0x02, 0x37, 0x04, - 0x2e, 0x02, 0x37, 0x20, 0x2e, 0x02, 0x36, 0xcc, - 0x2e, 0x02, 0x36, 0xe8, 0x2e, 0x02, 0x37, 0x20, - 0x2e, 0x02, 0x37, 0x04, 0x2e, 0x02, 0x36, 0x7c, - 0xe9, 0x2d, 0x5f, 0xff, 0xe1, 0x4f, 0x00, 0x00, - 0xe9, 0x2d, 0x00, 0x01, 0xe2, 0x8f, 0x00, 0x01, - 0xe1, 0x2f, 0xff, 0x10, 0x21, 0xff, 0x48, 0x37, - 0x68, 0x00, 0x40, 0x52, 0x42, 0x08, 0xd1, 0x0b, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x07, - 0x32, 0x20, 0x0a, 0x00, 0x42, 0x08, 0xd1, 0x03, - 0x0a, 0x00, 0x42, 0x08, 0xd0, 0x23, 0x32, 0x20, - 0x21, 0x0f, 0x42, 0x08, 0xd1, 0x01, 0x32, 0x10, - 0x09, 0x00, 0x21, 0x01, 0x42, 0x08, 0xd1, 0x08, - 0x1d, 0x12, 0x21, 0x02, 0x42, 0x08, 0xd1, 0x04, - 0x1d, 0x12, 0x21, 0x04, 0x42, 0x08, 0xd1, 0x00, - 0x1d, 0x12, 0x48, 0x25, 0x68, 0x00, 0xb4, 0x01, - 0x08, 0x90, 0x21, 0x01, 0x40, 0x81, 0x48, 0x21, - 0x60, 0x01, 0x48, 0x1d, 0x58, 0x82, 0x48, 0x01, - 0x46, 0x86, 0x47, 0x10, 0x2e, 0x02, 0x39, 0x35, - 0xbc, 0x02, 0x48, 0x1d, 0x60, 0x01, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe8, 0xbd, 0x00, 0x01, - 0xe1, 0x69, 0xf0, 0x00, 0xe8, 0xbd, 0x5f, 0xff, - 0xe2, 0x5e, 0xf0, 0x04, 0x48, 0x12, 0x21, 0x20, - 0x4a, 0x12, 0x60, 0x02, 0x1d, 0x00, 0x1e, 0x49, - 0xd1, 0xfb, 0x20, 0x00, 0x47, 0x70, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x1e, 0x46, 0x73, 0x49, 0x0e, - 0x60, 0x08, 0x20, 0x00, 0x47, 0x18, 0x46, 0x73, - 0x49, 0x0c, 0x60, 0x08, 0x20, 0x00, 0x47, 0x18, - 0x46, 0x73, 0x48, 0x0b, 0x68, 0x00, 0x47, 0x18, - 0x46, 0x73, 0x49, 0x09, 0x60, 0x08, 0x47, 0x18, - 0x46, 0x73, 0x4a, 0x03, 0x00, 0x80, 0x18, 0x12, - 0x68, 0x10, 0x60, 0x11, 0x47, 0x18, 0x00, 0x00, - 0x2e, 0x08, 0x3b, 0xa4, 0x2e, 0x02, 0x39, 0x64, - 0x66, 0x00, 0x00, 0x10, 0x66, 0x00, 0x00, 0x14, - 0x66, 0x00, 0x00, 0x18, 0x66, 0x00, 0x00, 0x1c, - 0xe9, 0x2d, 0x5f, 0xf0, 0xe1, 0x4f, 0x40, 0x00, - 0xe3, 0x14, 0x00, 0x20, 0x11, 0x5e, 0x40, 0xb2, - 0x13, 0xc4, 0x4c, 0xff, 0x05, 0x1e, 0x40, 0x04, - 0x03, 0xc4, 0x44, 0xff, 0xe5, 0x9f, 0x50, 0x14, - 0xe7, 0x95, 0x51, 0x04, 0xe5, 0x9f, 0xe0, 0x00, - 0xe1, 0x2f, 0xff, 0x15, 0x2e, 0x02, 0x39, 0xe4, - 0xe8, 0xbd, 0x5f, 0xf0, 0xe1, 0xb0, 0xf0, 0x0e, - 0x2e, 0x08, 0x20, 0x68, 0x00, 0x00, 0x00, 0xc0, - 0x46, 0x73, 0x47, 0x78, 0xe1, 0x0f, 0x10, 0x00, - 0xe3, 0x81, 0x00, 0x80, 0xe1, 0x29, 0xf0, 0x00, - 0xe2, 0x01, 0x00, 0x80, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x10, 0x00, 0xe3, 0x81, 0x00, 0x80, - 0xe1, 0x69, 0xf0, 0x00, 0xe2, 0x01, 0x00, 0x80, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x0f, 0x10, 0x00, - 0xe3, 0x81, 0x00, 0x40, 0xe1, 0x29, 0xf0, 0x00, - 0xe2, 0x01, 0x00, 0x40, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x10, 0x00, 0xe3, 0x81, 0x00, 0x40, - 0xe1, 0x69, 0xf0, 0x00, 0xe2, 0x01, 0x00, 0x40, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x0f, 0x00, 0x00, - 0xe3, 0xc0, 0x00, 0x80, 0xe1, 0x29, 0xf0, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x80, - 0xe1, 0x69, 0xf0, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x00, 0x00, - 0x47, 0x78, 0x00, 0x00, 0xe1, 0x0f, 0x00, 0x00, - 0xe3, 0xc0, 0x00, 0x40, 0xe1, 0x29, 0xf0, 0x00, - 0xe3, 0xa0, 0x00, 0x00, 0xe1, 0x2f, 0xff, 0x13, - 0x46, 0x73, 0x00, 0x00, 0x47, 0x78, 0x00, 0x00, - 0xe1, 0x4f, 0x00, 0x00, 0xe3, 0xc0, 0x00, 0x40, - 0xe1, 0x69, 0xf0, 0x00, 0xe3, 0xa0, 0x00, 0x00, - 0xe1, 0x2f, 0xff, 0x13, 0x46, 0x73, 0x49, 0x02, - 0x60, 0x08, 0x20, 0x00, 0x46, 0x9f, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x00, 0x46, 0x73, 0x49, 0x02, - 0x60, 0x08, 0x20, 0x00, 0x46, 0x9f, 0x00, 0x00, - 0x66, 0x00, 0x00, 0x04, 0x46, 0x73, 0x48, 0x03, - 0x68, 0x00, 0x47, 0x18, 0x46, 0x73, 0x49, 0x01, - 0x60, 0x08, 0x47, 0x18, 0x66, 0x00, 0x00, 0x08, - 0x00, 0x00, 0x46, 0x6c, 0x00, 0x00, 0x10, 0x00, - 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x50, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, - 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x02, 0xd0, - 0x00, 0x00, 0x00, 0x15, 0x00, 0x03, 0xb1, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 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, 0x07, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x90, 0x85, - 0x00, 0x00, 0xa6, 0xee, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x02, 0xd0, 0x00, 0x00, 0x02, 0x40, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x08, 0xa0, - 0x00, 0x08, 0x08, 0x28, 0x00, 0x08, 0x88, 0x68, - 0x00, 0x08, 0xa0, 0x98, 0x00, 0x08, 0x88, 0x68, - 0x00, 0x08, 0x28, 0x98, 0x00, 0x08, 0xac, 0xf4, - 0x00, 0x08, 0xb8, 0x7c, 0x00, 0x02, 0x02, 0x88, - 0x00, 0x02, 0x08, 0x22, 0x00, 0x02, 0x88, 0xaa, - 0x00, 0x02, 0x22, 0xaa, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x24, - 0x00, 0x04, 0x04, 0x24, 0x00, 0x04, 0x28, 0x6c, - 0x00, 0x04, 0x28, 0x6c, 0x00, 0x01, 0x10, 0x44, - 0x00, 0x01, 0x20, 0x44, 0x00, 0x01, 0x11, 0xaa, - 0x00, 0x01, 0x88, 0x55, 0x00, 0x01, 0x44, 0xaa, - 0x00, 0x01, 0x44, 0x55, 0x00, 0x20, 0x80, 0xa0, - 0x00, 0x20, 0x80, 0xc0, 0x00, 0x20, 0x20, 0xa0, - 0x00, 0x20, 0x40, 0xc0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x40, - 0x00, 0x00, 0x02, 0x40, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x13, 0x16, - 0x1a, 0x1b, 0x1d, 0x22, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x08, 0x10, 0x13, 0x16, - 0x1a, 0x1b, 0x1d, 0x22, 0x10, 0x10, 0x16, 0x18, - 0x1b, 0x1d, 0x22, 0x25, 0x13, 0x16, 0x1a, 0x1b, - 0x1d, 0x22, 0x22, 0x26, 0x16, 0x16, 0x1a, 0x1b, - 0x1d, 0x22, 0x25, 0x28, 0x16, 0x1a, 0x1b, 0x1d, - 0x20, 0x23, 0x28, 0x30, 0x1a, 0x1b, 0x1d, 0x20, - 0x23, 0x28, 0x30, 0x3a, 0x1a, 0x1b, 0x1d, 0x22, - 0x26, 0x2e, 0x38, 0x45, 0x1b, 0x1d, 0x23, 0x26, - 0x2e, 0x38, 0x45, 0x53, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, - 0x10, 0x10, 0x10, 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, 0x04, 0xd6, 0x00, - 0x00, 0x1b, 0x08, 0x00, 0x00, 0x1f, 0xde, 0x00, - 0x00, 0x00, 0x50, 0x00, 0x00, 0x09, 0xce, 0x00, - 0x00, 0x13, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, - 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x15, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, - 0x05, 0x28, 0x20, 0x01, 0x00, 0x00, 0x02, 0x40, - 0x71, 0x01, 0x00, 0x68, 0xe0, 0x7f, 0xb0, 0x7f, - 0x60, 0x40, 0xe0, 0x1d, 0x90, 0x10, 0xb4, 0x81, - 0xe8, 0xc0, 0xe0, 0xc2, 0x90, 0x18, 0x00, 0x8a, - 0x70, 0xc0, 0x0f, 0x87, 0xe3, 0xe8, 0xc0, 0x00, - 0x70, 0x40, 0xe0, 0x01, 0xe0, 0x86, 0x00, 0x26, - 0xd0, 0x28, 0xe0, 0x0e, 0xd0, 0x0e, 0x0f, 0x0b, - 0x70, 0x1d, 0xe0, 0x67, 0x0f, 0x87, 0x0f, 0x87, - 0x0f, 0x87, 0x0f, 0x87, 0x0f, 0x87, 0x02, 0x20, - 0xd0, 0x01, 0xe0, 0x25, 0x0f, 0x45, 0x6f, 0x81, - 0xdf, 0xa6, 0xe0, 0x36, 0xe1, 0x30, 0xa0, 0x37, - 0xc0, 0x00, 0xe0, 0x26, 0x00, 0x33, 0xdf, 0x00, - 0xe0, 0x32, 0x0f, 0xc5, 0x0f, 0x87, 0x00, 0x27, - 0xd0, 0x4c, 0xe0, 0x21, 0x00, 0x33, 0xdf, 0x60, - 0x00, 0x27, 0xd0, 0x56, 0x60, 0x01, 0xe0, 0x2d, - 0x03, 0xa0, 0xd0, 0x41, 0xa0, 0x78, 0x00, 0x60, - 0xd0, 0x41, 0xa0, 0x77, 0x00, 0x22, 0xd0, 0x58, - 0xa0, 0x76, 0x00, 0x21, 0xd0, 0x7c, 0x00, 0x4a, - 0xd0, 0x72, 0x70, 0x40, 0x00, 0x06, 0x0f, 0x87, - 0x00, 0x22, 0xdc, 0xf8, 0xf0, 0x4a, 0xe1, 0x70, - 0x07, 0xef, 0xdd, 0xbf, 0x4f, 0x36, 0x1d, 0x99, - 0x4d, 0x80, 0x10, 0x18, 0xdd, 0x50, 0x60, 0x35, - 0xdd, 0x72, 0xdd, 0x10, 0x3d, 0xb4, 0xec, 0x57, - 0x2d, 0x36, 0x1d, 0x03, 0xbd, 0x04, 0xe4, 0x2b, - 0x01, 0x46, 0x00, 0x06, 0xac, 0xf6, 0x80, 0x3f, - 0x0d, 0x0a, 0x10, 0x02, 0x7d, 0x40, 0x10, 0x1e, - 0xb0, 0x20, 0xbc, 0xe0, 0x00, 0x06, 0x00, 0xc6, - 0xe0, 0x52, 0xb7, 0x60, 0xb7, 0x60, 0xc0, 0x5d, - 0x30, 0x5f, 0xe4, 0x72, 0xc7, 0x5e, 0x00, 0xed, - 0xd0, 0x28, 0x70, 0x40, 0xb0, 0x7f, 0x60, 0x40, - 0xc0, 0x1d, 0x30, 0x1c, 0xf8, 0x7e, 0x00, 0x21, - 0xd0, 0x01, 0x00, 0x26, 0xd0, 0x78, 0xa0, 0x38, - 0x80, 0x3f, 0x70, 0x01, 0xb0, 0x3f, 0x60, 0x01, - 0x0f, 0x87, 0x80, 0x34, 0x03, 0xef, 0xd8, 0x3f, - 0xa8, 0x38, 0x01, 0x35, 0xdc, 0x33, 0xe0, 0x46, - 0xc0, 0x1c, 0xe4, 0xa5, 0x97, 0x2e, 0x30, 0x1c, - 0xe8, 0x8e, 0x00, 0x21, 0xd0, 0x00, 0xa0, 0x38, - 0xc0, 0x5d, 0x00, 0x23, 0xd0, 0x00, 0x30, 0x40, - 0x30, 0x5e, 0xe4, 0x99, 0x20, 0x5e, 0xc0, 0x01, - 0x30, 0x1c, 0xec, 0xa4, 0xe0, 0x9d, 0x20, 0x5f, - 0xc0, 0x1c, 0x30, 0x01, 0xf4, 0xa5, 0xc0, 0x1c, - 0x30, 0x1d, 0xec, 0xa4, 0xe4, 0xa5, 0x90, 0x38, - 0x00, 0x1b, 0xe8, 0xa5, 0xa0, 0x66, 0xb1, 0x3f, - 0xe4, 0xb3, 0xe8, 0xb1, 0xc0, 0x4b, 0x30, 0x44, - 0xf8, 0xb3, 0x60, 0x45, 0xb1, 0x7c, 0x01, 0x20, - 0xd0, 0x00, 0xa0, 0x05, 0x80, 0x40, 0x72, 0xc5, - 0x00, 0x06, 0x90, 0x55, 0xd0, 0x01, 0x00, 0x40, - 0xa0, 0x55, 0x0f, 0x87, 0x01, 0x46, 0x00, 0x06, - 0x03, 0xef, 0xd0, 0x3f, 0xa0, 0x38, 0xb0, 0x01, - 0xa0, 0x37, 0x80, 0x3f, 0x82, 0x34, 0x80, 0x3f, - 0xf2, 0x1a, 0x80, 0x34, 0x80, 0x3f, 0xf2, 0x1a, - 0xd8, 0x00, 0xd8, 0x40, 0xd8, 0x80, 0xd8, 0xc0, - 0xd9, 0x00, 0xd9, 0x40, 0xd9, 0x80, 0xd9, 0xc0, - 0xda, 0x00, 0xda, 0x40, 0xda, 0x80, 0xda, 0xc0, - 0xdb, 0x00, 0xdb, 0x40, 0xdb, 0x80, 0xdb, 0xc0, - 0xdc, 0x00, 0xdc, 0x40, 0xdc, 0x80, 0xdc, 0xc0, - 0xdd, 0x00, 0xdd, 0x40, 0xdd, 0x80, 0xdd, 0xc0, - 0xde, 0x00, 0xde, 0x40, 0xde, 0x80, 0xde, 0xc0, - 0xdf, 0x00, 0xdf, 0x40, 0xdf, 0x80, 0xdf, 0xc0, - 0xde, 0x80, 0xde, 0xc1, 0x00, 0x28, 0xd0, 0x60, - 0x6e, 0x81, 0x80, 0x00, 0x80, 0x05, 0x00, 0xe3, - 0xd1, 0x88, 0x00, 0x73, 0xd5, 0x80, 0x60, 0x06, - 0xb1, 0xbc, 0x00, 0xfa, 0xd0, 0x80, 0x60, 0x06, - 0x00, 0x26, 0xd0, 0x6c, 0x6e, 0x81, 0x04, 0xf4, - 0xdc, 0x00, 0x00, 0xee, 0xd1, 0x94, 0x60, 0x06, - 0x00, 0xed, 0xd0, 0x50, 0x6e, 0x81, 0x00, 0x22, - 0xd0, 0x70, 0x6e, 0x81, 0x00, 0xee, 0xd0, 0x74, - 0x6e, 0x81, 0xd0, 0x4c, 0x6e, 0x81, 0xd0, 0x02, - 0x00, 0xef, 0xd0, 0x6c, 0x60, 0x01, 0xd0, 0x03, - 0x00, 0xef, 0xd0, 0x70, 0x60, 0x01, 0x00, 0xe0, - 0xd0, 0x48, 0xd0, 0x02, 0x60, 0x01, 0x00, 0x32, - 0xdf, 0x20, 0xa0, 0x1c, 0x00, 0x21, 0xd0, 0x60, - 0xa0, 0x76, 0x00, 0x34, 0xd5, 0x70, 0x80, 0x3f, - 0x00, 0x23, 0xd0, 0x5c, 0x00, 0x4a, 0xd0, 0x72, - 0x70, 0x40, 0x00, 0x06, 0x00, 0x22, 0xd1, 0xa4, - 0x6e, 0xc6, 0xd0, 0x58, 0x6e, 0xc1, 0xd0, 0xc9, - 0x00, 0xed, 0xd0, 0x54, 0x60, 0xc1, 0x00, 0x22, - 0xd0, 0x40, 0x60, 0xc1, 0x00, 0x22, 0xd0, 0x60, - 0x60, 0xc1, 0x82, 0x34, 0x80, 0x3f, 0xd6, 0xd9, - 0x01, 0x2d, 0xd6, 0x0c, 0x16, 0x08, 0xd0, 0x55, - 0xd0, 0x2c, 0x60, 0x40, 0xd0, 0x70, 0x00, 0xfb, - 0xd1, 0x00, 0x60, 0x01, 0x00, 0x2b, 0xd4, 0x10, - 0x00, 0x29, 0xd4, 0x40, 0x00, 0x2b, 0xd0, 0x90, - 0xc0, 0xc2, 0xd1, 0x18, 0xd1, 0x44, 0xa1, 0x50, - 0x00, 0x21, 0xd0, 0xb6, 0xd0, 0xd7, 0x00, 0x29, - 0xd0, 0x04, 0x64, 0x00, 0xb0, 0x3c, 0x64, 0x40, - 0x80, 0x34, 0x80, 0x3f, 0xd0, 0x40, 0x00, 0x35, - 0xd0, 0x00, 0x60, 0x01, 0xd0, 0x48, 0x6e, 0x81, - 0xd0, 0x44, 0x6e, 0x81, 0x00, 0x64, 0xd1, 0x80, - 0x6e, 0x86, 0x01, 0x3c, 0xd2, 0x39, 0xe0, 0x46, - 0xd0, 0x00, 0xd0, 0x40, 0xd0, 0x80, 0xd0, 0xc0, - 0xd1, 0x00, 0xd1, 0x40, 0xd1, 0x80, 0xd1, 0xc0, - 0xd2, 0x00, 0xd2, 0x40, 0xd2, 0x80, 0xd2, 0xc0, - 0xd3, 0x00, 0xd3, 0x40, 0xd3, 0x80, 0xd3, 0xc0, - 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, - 0xd5, 0x00, 0xd5, 0x40, 0xd5, 0x80, 0xd5, 0xc0, - 0xd6, 0x00, 0xd6, 0x40, 0xd6, 0x80, 0xd6, 0xc0, - 0xd7, 0x00, 0xd7, 0x40, 0xd7, 0x80, 0xd7, 0xc0, - 0x0f, 0xc5, 0x50, 0x00, 0x01, 0x46, 0x00, 0x06, - 0xde, 0x80, 0xde, 0xc1, 0x03, 0x2f, 0xd0, 0x33, - 0xa0, 0x38, 0xb0, 0x01, 0xa0, 0x37, 0x80, 0x3f, - 0x08, 0x20, 0xdf, 0x00, 0x82, 0x34, 0x80, 0x3f, - 0x00, 0xee, 0xd0, 0x08, 0x77, 0xc0, 0xb0, 0x04, - 0x77, 0x80, 0xb0, 0x04, 0xc0, 0x5f, 0x30, 0x5e, - 0x60, 0x40, 0xd7, 0x00, 0xb7, 0x01, 0x80, 0x34, - 0x80, 0x3f, 0x00, 0x60, 0xd0, 0x80, 0x00, 0xec, - 0xd0, 0x40, 0x60, 0x81, 0xb0, 0x7c, 0x60, 0x81, - 0x00, 0xa0, 0xd0, 0x80, 0xb0, 0x74, 0x60, 0x81, - 0xb0, 0x7c, 0x60, 0x81, 0x00, 0x68, 0xd0, 0x80, - 0x6e, 0x82, 0x00, 0xef, 0xd0, 0x8c, 0x6e, 0x82, - 0x00, 0x06, 0xd0, 0x11, 0xa0, 0x38, 0x80, 0x3f, - 0x08, 0x20, 0xd0, 0x40, 0x10, 0x48, 0xa0, 0x4a, - 0xa0, 0x5b, 0x0c, 0x20, 0xd0, 0x00, 0x10, 0x08, - 0xa0, 0x27, 0xa0, 0x0a, 0x90, 0x4d, 0x0f, 0xff, - 0xd8, 0x1f, 0x40, 0x40, 0xa0, 0x4d, 0x80, 0x0a, - 0x80, 0x07, 0x80, 0x1b, 0x80, 0x27, 0x00, 0x60, - 0xd0, 0x00, 0xa0, 0x09, 0x80, 0x28, 0x01, 0x20, - 0xd0, 0x67, 0xa0, 0x69, 0x80, 0x2a, 0x82, 0x29, - 0x80, 0x6a, 0x84, 0x29, 0xd0, 0x54, 0x10, 0x4f, - 0xa0, 0x6a, 0x01, 0x20, 0xd0, 0x00, 0xa0, 0x29, - 0x80, 0x2b, 0x02, 0x30, 0xd0, 0x00, 0xa0, 0x38, - 0x80, 0x3f, 0x01, 0xb0, 0xd0, 0x10, 0xa0, 0x37, - 0x80, 0x3f, 0x02, 0x30, 0xd0, 0x01, 0xa0, 0x38, - 0x00, 0xea, 0xd0, 0x00, 0xd0, 0x4e, 0x0f, 0x0b, - 0x70, 0x40, 0x00, 0x06, 0x00, 0x21, 0xd0, 0x88, - 0x00, 0xe1, 0xd0, 0x60, 0x60, 0x81, 0x00, 0x2b, - 0xd0, 0x80, 0x00, 0xe0, 0xd0, 0x6c, 0x60, 0x81, - 0xb0, 0x7c, 0x00, 0x29, 0xd0, 0x80, 0x60, 0x81, - 0xb0, 0x7c, 0xd0, 0x82, 0x60, 0x81, 0xb0, 0x7c, - 0xd0, 0x85, 0x60, 0x81, 0xb0, 0x7c, 0x03, 0xaa, - 0xd0, 0x98, 0x60, 0x81, 0xb0, 0x7c, 0x6e, 0x81, - 0x00, 0x27, 0xd0, 0x40, 0x6e, 0x81, 0xb0, 0x7c, - 0x6e, 0x81, 0xb0, 0x7c, 0x6e, 0x81, 0x00, 0x27, - 0xd1, 0x90, 0x6e, 0x86, 0x00, 0x21, 0xd1, 0xb8, - 0x6e, 0x86, 0x00, 0x66, 0xd1, 0xa0, 0xd0, 0x00, - 0x01, 0x64, 0xd0, 0x58, 0x30, 0x01, 0x60, 0x06, - 0x00, 0xed, 0xd1, 0xbc, 0x6e, 0x86, 0x00, 0xec, - 0xd1, 0xb8, 0x6e, 0x86, 0xb1, 0x84, 0x6e, 0x86, - 0x00, 0xee, 0xd1, 0x84, 0x70, 0x46, 0x00, 0x65, - 0xd1, 0x94, 0x60, 0x46, 0x00, 0x64, 0xd1, 0xbc, - 0x6e, 0x86, 0x00, 0x65, 0xd1, 0x80, 0x6e, 0x86, - 0xb1, 0xbc, 0x6e, 0x86, 0xb1, 0xbc, 0x6e, 0x86, - 0x00, 0xed, 0xd1, 0xa8, 0x6e, 0x86, 0xd0, 0x0e, - 0xb1, 0xbc, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, - 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x06, 0x00, 0x28, - 0xd1, 0xa4, 0x6e, 0x86, 0x00, 0x27, 0xd1, 0x98, - 0x6e, 0x86, 0x00, 0x64, 0xd1, 0xa4, 0x6e, 0x86, - 0xd2, 0x01, 0x00, 0x64, 0xd0, 0x60, 0x62, 0x01, - 0x00, 0x64, 0xd1, 0x80, 0x70, 0x46, 0x6e, 0x86, - 0x00, 0xef, 0xd1, 0x98, 0x70, 0x86, 0x08, 0x20, - 0xd0, 0xcf, 0x30, 0xc1, 0xea, 0x42, 0xd0, 0x81, - 0x00, 0x21, 0xd1, 0xa8, 0x60, 0x86, 0x00, 0xed, - 0xd1, 0xa0, 0x6e, 0xc6, 0x00, 0x65, 0xd1, 0x98, - 0x6e, 0xc6, 0x00, 0x22, 0xd0, 0x00, 0xa0, 0x05, - 0x80, 0x40, 0x00, 0xc6, 0x01, 0x73, 0xd4, 0x3d, - 0xe0, 0x46, 0x50, 0x00, 0x08, 0x20, 0xd0, 0x00, - 0x5f, 0x00, 0x00, 0x64, 0xd0, 0x60, 0x70, 0xc1, - 0x00, 0xec, 0xd0, 0x40, 0x71, 0x81, 0xb0, 0x7c, - 0x71, 0xc1, 0xc0, 0x87, 0x30, 0x86, 0xf9, 0x83, - 0x10, 0xee, 0xe9, 0x76, 0x10, 0xe1, 0xe9, 0x76, - 0xe2, 0x57, 0x00, 0x63, 0xd0, 0xbf, 0x72, 0x06, - 0xb1, 0xbc, 0x41, 0x82, 0x02, 0x1b, 0xe9, 0x8d, - 0x72, 0x86, 0xb1, 0xbc, 0x41, 0x82, 0xd0, 0x75, - 0x30, 0x48, 0xe9, 0xfe, 0xb0, 0x7f, 0xea, 0x00, - 0x02, 0x1c, 0xe9, 0x96, 0x15, 0xa3, 0xea, 0x57, - 0x10, 0xf0, 0xe9, 0x9a, 0x10, 0xfa, 0xf9, 0xa1, - 0x15, 0xa3, 0xea, 0x57, 0x00, 0x21, 0xd0, 0x4c, - 0x70, 0x41, 0x10, 0x61, 0xfa, 0x57, 0x00, 0xed, - 0xd0, 0x08, 0x70, 0x40, 0xd0, 0x85, 0x40, 0x42, - 0x60, 0x40, 0x00, 0x64, 0xd0, 0x64, 0x62, 0x01, - 0x12, 0x2b, 0xe9, 0xeb, 0x12, 0x3b, 0xe9, 0xd5, - 0x00, 0xec, 0xd0, 0x40, 0x61, 0x81, 0x12, 0x2d, - 0xe9, 0xbf, 0x12, 0x30, 0xe9, 0xd4, 0x12, 0x36, - 0xe9, 0xd4, 0x12, 0x3a, 0xe9, 0xd4, 0xd0, 0x62, - 0x30, 0x48, 0xe9, 0xf2, 0x12, 0x2e, 0xe9, 0xf9, - 0xe1, 0x76, 0x00, 0xed, 0xd0, 0x08, 0x70, 0x40, - 0xd0, 0x85, 0x40, 0x42, 0x60, 0x40, 0xb0, 0x08, - 0x00, 0x21, 0xd0, 0x41, 0x60, 0x40, 0x00, 0x64, - 0xd0, 0x60, 0x62, 0x01, 0xf2, 0x5a, 0x00, 0xed, - 0xd0, 0x20, 0xd0, 0x41, 0x60, 0x40, 0x10, 0xe1, - 0xea, 0x3a, 0xe2, 0x57, 0xe2, 0x53, 0x10, 0xee, - 0xf9, 0xe9, 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, - 0x97, 0x2e, 0xc7, 0x5c, 0xa7, 0x66, 0x81, 0x34, - 0x80, 0x3f, 0x00, 0x21, 0xd0, 0x01, 0xa0, 0x38, - 0x00, 0xc6, 0x00, 0x21, 0xd0, 0x15, 0x0b, 0x09, - 0x00, 0x4d, 0xb0, 0x01, 0xed, 0xe5, 0xd2, 0x1a, - 0xe1, 0xec, 0xf1, 0x18, 0x00, 0xec, 0xd0, 0x40, - 0x71, 0x81, 0xd0, 0x4e, 0x60, 0x46, 0xe2, 0x54, - 0xc0, 0x0a, 0x10, 0x06, 0x52, 0x80, 0x00, 0xed, - 0xd0, 0x40, 0x62, 0x81, 0xe2, 0x53, 0x00, 0x64, - 0xd0, 0x60, 0x62, 0x01, 0xf2, 0x5a, 0xe1, 0x70, - 0x12, 0xa3, 0xf6, 0x57, 0x15, 0xa1, 0xfa, 0x57, - 0x12, 0xa0, 0xea, 0x23, 0x00, 0x65, 0xd1, 0x1c, - 0xd0, 0x75, 0x30, 0x48, 0xea, 0x0a, 0xb1, 0x3c, - 0x71, 0x04, 0x11, 0x20, 0xfa, 0x11, 0x00, 0xec, - 0xd0, 0x40, 0x61, 0x81, 0xe2, 0x57, 0x12, 0xa1, - 0xea, 0x33, 0x00, 0xe2, 0xd0, 0x60, 0x70, 0x01, - 0xb0, 0x7c, 0x70, 0x41, 0x10, 0x0c, 0x50, 0x40, - 0x0c, 0x30, 0xd0, 0x00, 0x31, 0x01, 0xee, 0x21, - 0x21, 0x00, 0xe6, 0x57, 0xe2, 0x23, 0x31, 0x00, - 0xfe, 0x57, 0xd0, 0x75, 0x30, 0x48, 0xea, 0x28, - 0xf2, 0x5a, 0xe2, 0x0d, 0x00, 0xec, 0xd0, 0x40, - 0x71, 0x81, 0x00, 0x63, 0xd1, 0x3f, 0xb1, 0xbc, - 0x41, 0x84, 0x61, 0x81, 0xd0, 0x50, 0x60, 0x46, - 0xe2, 0x57, 0x00, 0xed, 0xd0, 0x7c, 0x70, 0x41, - 0x08, 0x20, 0xd0, 0x00, 0x10, 0x08, 0xe2, 0x1c, - 0xd2, 0x84, 0x00, 0xed, 0xd1, 0xa4, 0x62, 0x86, - 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x46, 0x82, 0x34, - 0x80, 0x3f, 0xc7, 0x5e, 0x97, 0x2e, 0x81, 0x34, - 0x80, 0x3f, 0x02, 0xe8, 0xd0, 0x30, 0xa0, 0x37, - 0xa0, 0x38, 0x08, 0x20, 0xdf, 0x00, 0x80, 0x73, - 0x80, 0x3f, 0x00, 0xc6, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0xf2, 0x5a, 0x00, 0x64, 0xd0, 0x60, - 0x62, 0x01, 0x02, 0x3c, 0xdc, 0x89, 0xe0, 0x46, - 0x00, 0x28, 0xd0, 0x64, 0x70, 0x81, 0x00, 0x22, - 0xd0, 0x00, 0x50, 0x80, 0x60, 0x81, 0x0f, 0xc5, - 0x50, 0x00, 0x50, 0x00, 0x00, 0xed, 0xd1, 0xa4, - 0x72, 0x86, 0x00, 0xef, 0xd1, 0x90, 0x70, 0x46, - 0x10, 0x5c, 0x10, 0x65, 0xed, 0x7d, 0xd0, 0x46, - 0xc0, 0x0a, 0x10, 0x40, 0x60, 0x46, 0x00, 0x22, - 0xd0, 0x73, 0x30, 0x54, 0xe9, 0x8e, 0x12, 0xa4, - 0xe9, 0xb5, 0x15, 0x20, 0xe9, 0xc0, 0xb0, 0x7b, - 0xe9, 0xc3, 0xb0, 0x41, 0xe9, 0xc9, 0xc0, 0x54, - 0x10, 0x5c, 0x10, 0x6e, 0xe9, 0xc6, 0xe1, 0xb5, - 0x00, 0x28, 0xd1, 0xb0, 0xd0, 0x00, 0x60, 0x06, - 0x12, 0xa4, 0xf9, 0xb2, 0x00, 0xed, 0xd1, 0x9c, - 0x62, 0x86, 0xd2, 0x80, 0x00, 0xed, 0xd1, 0xa4, - 0x62, 0x86, 0xd0, 0x02, 0x00, 0xec, 0xd1, 0xbc, - 0x60, 0x06, 0x00, 0x64, 0xd1, 0xa0, 0x72, 0x06, - 0x12, 0x21, 0xf9, 0xa6, 0xd2, 0x0d, 0x62, 0x06, - 0x00, 0xed, 0xd1, 0xa0, 0x61, 0x86, 0xd0, 0x0e, - 0x00, 0xed, 0xd1, 0xac, 0x60, 0x06, 0xb1, 0xbc, - 0x60, 0x06, 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x06, - 0x01, 0x7e, 0xd2, 0x32, 0xe1, 0xcb, 0x01, 0x46, - 0x90, 0x49, 0x00, 0x60, 0xd0, 0x00, 0x50, 0x40, - 0xa0, 0x49, 0x80, 0x3f, 0x00, 0xc6, 0x0c, 0x09, - 0x05, 0x0d, 0xe1, 0x70, 0x01, 0xbf, 0xd0, 0x41, - 0xe1, 0xcb, 0x01, 0xbb, 0xda, 0x10, 0xe1, 0xcb, - 0x01, 0xbd, 0xda, 0x0b, 0xe1, 0xcb, 0x03, 0xb9, - 0xd8, 0x10, 0x01, 0x46, 0x90, 0x49, 0x00, 0x60, - 0xd1, 0x00, 0x50, 0x44, 0x30, 0x44, 0xa0, 0x49, - 0x80, 0x3f, 0x00, 0xc6, 0xe0, 0x46, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x01, 0xfa, 0xd4, 0x3d, - 0x00, 0x25, 0xdc, 0xd8, 0xf0, 0x4a, 0x00, 0x26, - 0xd0, 0x18, 0xd0, 0x40, 0x60, 0x40, 0x00, 0x28, - 0xd0, 0x24, 0x70, 0x40, 0xd0, 0x82, 0x50, 0x42, - 0x60, 0x40, 0x00, 0xec, 0xd0, 0xa4, 0x70, 0xc2, - 0x10, 0xe0, 0xf9, 0x81, 0x00, 0xec, 0xd1, 0x98, - 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, 0x10, 0xe0, - 0xe9, 0x8e, 0xd0, 0x40, 0x60, 0x46, 0xe1, 0x81, - 0xd0, 0x40, 0x00, 0xe6, 0xd0, 0x10, 0x60, 0x40, - 0xb0, 0x3c, 0x60, 0x40, 0xb0, 0x3c, 0x60, 0x40, - 0xd0, 0xe0, 0x00, 0xea, 0xd0, 0x40, 0x00, 0xe8, - 0xd0, 0x82, 0x01, 0x46, 0x70, 0x01, 0xb0, 0x7c, - 0x60, 0x02, 0xb0, 0xbc, 0x00, 0x06, 0x00, 0xc6, - 0xb0, 0xc1, 0xed, 0x9b, 0x80, 0x49, 0xd6, 0x44, - 0xd5, 0x43, 0x00, 0xe0, 0xd1, 0x80, 0x00, 0x06, - 0x0b, 0x09, 0x01, 0x0d, 0x0b, 0x09, 0x61, 0x06, - 0xb1, 0xbc, 0x01, 0x4d, 0x09, 0x09, 0x61, 0x46, - 0xb1, 0xbc, 0x00, 0xcd, 0x09, 0x09, 0x10, 0xe4, - 0xed, 0xb8, 0x60, 0xc6, 0xb1, 0xbc, 0x00, 0xcd, - 0x60, 0xc6, 0x00, 0xed, 0xd0, 0x04, 0x70, 0x00, - 0x10, 0x20, 0xf9, 0xd8, 0xd0, 0x0a, 0x40, 0x03, - 0xe9, 0xc9, 0x10, 0xe2, 0xe9, 0xc9, 0x10, 0xe7, - 0xe9, 0xc9, 0x10, 0xe8, 0xf9, 0xd8, 0x01, 0x46, - 0x90, 0x10, 0x00, 0x20, 0xd0, 0x44, 0x50, 0x40, - 0x00, 0xc6, 0xa0, 0x50, 0x00, 0xa0, 0xd0, 0x00, - 0xa0, 0x05, 0x80, 0x40, 0x00, 0xed, 0xd1, 0xa4, - 0xd0, 0x04, 0x60, 0x06, 0x00, 0xee, 0xd1, 0xac, - 0x73, 0x86, 0x10, 0xe3, 0xe5, 0xe3, 0xe9, 0xe8, - 0x00, 0xe7, 0xd0, 0x40, 0x00, 0xae, 0xd0, 0xbb, - 0xe1, 0xec, 0x01, 0x24, 0xd0, 0x6b, 0x00, 0xea, - 0xd0, 0xa6, 0xe1, 0xec, 0x01, 0x21, 0xd0, 0x7b, - 0x00, 0xe8, 0xd0, 0x90, 0x13, 0xa0, 0xf9, 0xef, - 0xc0, 0x42, 0x00, 0xe0, 0xd1, 0xa8, 0x60, 0x46, - 0xb1, 0x98, 0x0b, 0xc9, 0x00, 0x4d, 0x09, 0x09, - 0x10, 0x44, 0x00, 0x8d, 0x20, 0x42, 0x10, 0x5f, - 0x60, 0x46, 0xb1, 0xb8, 0x00, 0x90, 0xea, 0x1c, - 0x0a, 0x89, 0x00, 0x8d, 0x60, 0x86, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, - 0xea, 0x10, 0x00, 0xe8, 0xd1, 0x80, 0xf2, 0xb0, - 0x10, 0x60, 0xfa, 0x1c, 0x08, 0x49, 0x00, 0xe0, - 0xd1, 0xa4, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x60, - 0xea, 0x20, 0x00, 0xe9, 0xd1, 0x80, 0xf2, 0xb0, - 0x10, 0x60, 0xea, 0x20, 0x00, 0xe0, 0xd1, 0x88, - 0xd0, 0x40, 0x60, 0x46, 0xd0, 0x00, 0x00, 0xe0, - 0xd1, 0xa8, 0x70, 0x46, 0x00, 0xef, 0xd1, 0x9c, - 0x70, 0x86, 0xb0, 0xb0, 0xee, 0x2a, 0xd0, 0x81, - 0x00, 0x90, 0xea, 0x2d, 0x20, 0x01, 0x10, 0x41, - 0x10, 0x9f, 0x10, 0xa0, 0xee, 0x2a, 0x10, 0x1c, - 0x00, 0x65, 0xd1, 0xa8, 0x60, 0x06, 0x01, 0xb4, - 0xd6, 0x3a, 0xe0, 0x46, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x0c, 0x09, - 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, - 0x30, 0x54, 0xe9, 0xea, 0xb0, 0x7d, 0xfa, 0x05, - 0x09, 0x09, 0x01, 0xcd, 0x11, 0xe1, 0xf9, 0xc7, - 0x80, 0x09, 0x80, 0x27, 0x0a, 0x09, 0xd6, 0x45, - 0x00, 0xe1, 0xd1, 0xa0, 0x00, 0x4d, 0x60, 0x46, - 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, - 0x00, 0x50, 0xe9, 0x91, 0xd4, 0x01, 0xb1, 0xbc, - 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0x00, 0xe0, - 0xd1, 0x80, 0x08, 0x89, 0x00, 0x4d, 0x08, 0x89, - 0x10, 0x4c, 0x71, 0x06, 0x21, 0x01, 0x61, 0x06, - 0xb1, 0xbc, 0x00, 0x4d, 0x0b, 0x49, 0x10, 0x4c, - 0x71, 0x46, 0x21, 0x41, 0x61, 0x46, 0xb1, 0xb0, - 0x00, 0x4d, 0x10, 0x5f, 0x60, 0x46, 0xb1, 0xbc, - 0x0a, 0x09, 0x00, 0x4d, 0x10, 0x4a, 0x70, 0x86, - 0x20, 0x81, 0x60, 0x86, 0x00, 0xe1, 0xd1, 0xac, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x09, 0x49, 0x00, 0x8d, 0x60, 0x86, 0xc0, 0x02, - 0x00, 0xe0, 0xd1, 0xa8, 0x70, 0xc6, 0x10, 0xc0, - 0xd0, 0x20, 0x30, 0x01, 0x10, 0xc0, 0x60, 0xc6, - 0xe1, 0x75, 0x11, 0xe2, 0xf9, 0x75, 0x00, 0xe2, - 0xd1, 0x80, 0x08, 0xc9, 0x00, 0x4d, 0x60, 0x46, - 0xb1, 0xbc, 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, - 0xb1, 0xbc, 0x10, 0x60, 0xf9, 0xd7, 0xb1, 0xb4, - 0xe1, 0xde, 0xd2, 0x03, 0x0a, 0x09, 0x00, 0x4d, - 0x60, 0x46, 0xb1, 0xbc, 0xb2, 0x01, 0xf9, 0xd8, - 0x0b, 0xc9, 0x00, 0x4d, 0x10, 0x49, 0x10, 0x56, - 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x89, 0x00, 0x4d, - 0x10, 0x4a, 0x10, 0x56, 0x60, 0x46, 0xe1, 0x75, - 0x0b, 0x2c, 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0x77, - 0x00, 0xe0, 0xd0, 0x6c, 0x00, 0xe0, 0xd1, 0x80, - 0xd0, 0x0a, 0xf1, 0xfe, 0x00, 0xe1, 0xd1, 0xb0, - 0xd0, 0x02, 0xf1, 0xfe, 0x00, 0xe0, 0xd1, 0x80, - 0x76, 0x86, 0xb1, 0xbc, 0x73, 0x46, 0xe2, 0x3c, - 0x70, 0x81, 0x60, 0x86, 0xb1, 0xbc, 0xb0, 0x7c, - 0xb0, 0x01, 0xed, 0xfe, 0x0f, 0xc5, 0x00, 0xe1, - 0xd1, 0xa0, 0x70, 0x46, 0xd0, 0x8f, 0x40, 0x42, - 0x00, 0x25, 0xd0, 0xe0, 0x00, 0x24, 0xd1, 0x20, - 0x10, 0x6a, 0xea, 0x1e, 0x00, 0x66, 0xd0, 0xe0, - 0x00, 0x62, 0xd1, 0x00, 0x10, 0x66, 0xea, 0x1e, - 0x00, 0x6e, 0xd0, 0xc0, 0x10, 0x64, 0xea, 0x1e, - 0x00, 0x2b, 0xd0, 0xd0, 0x00, 0x29, 0xd1, 0x00, - 0x00, 0xe0, 0xd1, 0x80, 0x76, 0x86, 0x16, 0xa0, - 0xe9, 0xee, 0x30, 0xda, 0xe5, 0xee, 0xb1, 0xbc, - 0x73, 0x46, 0x13, 0x60, 0xe9, 0xee, 0x31, 0x0d, - 0xe5, 0xee, 0xd0, 0x82, 0xb1, 0xbc, 0x70, 0x46, - 0x10, 0x60, 0xe9, 0xee, 0xb0, 0x81, 0xee, 0x2c, - 0x00, 0xe0, 0xd0, 0x40, 0x00, 0xe0, 0xd1, 0xac, - 0xd0, 0x0a, 0xf1, 0xfe, 0x00, 0xe1, 0xd0, 0x70, - 0xd0, 0x02, 0xf1, 0xfe, 0x00, 0xec, 0xd1, 0x98, - 0xd0, 0x40, 0x60, 0x46, 0x00, 0xe0, 0xd0, 0x8c, - 0x70, 0x82, 0x00, 0x21, 0xd0, 0x70, 0x60, 0x81, - 0xd0, 0x40, 0x00, 0x25, 0xd0, 0x20, 0x30, 0x1a, - 0xfa, 0x50, 0x00, 0x24, 0xd0, 0x20, 0x30, 0x0d, - 0xfa, 0x50, 0xd0, 0x41, 0x00, 0x21, 0xd1, 0x84, - 0x60, 0x46, 0xb6, 0xb1, 0x16, 0x9c, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x00, 0xec, - 0xd0, 0xa8, 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x77, - 0x00, 0xec, 0xd1, 0x9c, 0xd0, 0x41, 0x60, 0x46, - 0x70, 0xc2, 0x10, 0xe0, 0xe9, 0x84, 0xd0, 0x40, - 0x60, 0x46, 0xe1, 0x77, 0x0b, 0x49, 0x00, 0xe2, - 0xd1, 0xa0, 0x00, 0x4d, 0x10, 0x5f, 0x00, 0x6f, - 0xd0, 0xff, 0x40, 0x43, 0x60, 0x46, 0xb1, 0xbc, - 0x0b, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x89, 0x00, 0x4d, 0x60, 0x46, 0x10, 0x61, - 0xf9, 0x9b, 0xd3, 0xc2, 0x00, 0xec, 0xd1, 0xbc, - 0x63, 0xc6, 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, - 0xe5, 0x9c, 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, - 0xd0, 0x72, 0x30, 0x54, 0xf9, 0xa9, 0x0b, 0xa0, - 0xd4, 0x40, 0xf3, 0xb0, 0xe1, 0xa0, 0x00, 0xec, - 0xd1, 0x9c, 0xd0, 0x40, 0x60, 0x46, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x0b, 0x09, 0x00, 0x4d, - 0x0b, 0x09, 0x00, 0x4d, 0x0a, 0x09, 0x01, 0x4d, - 0x0a, 0x09, 0x00, 0x4d, 0x01, 0x59, 0xe9, 0x96, - 0x09, 0x09, 0x00, 0x4d, 0x10, 0x5f, 0x10, 0x61, - 0xf9, 0x96, 0x09, 0x09, 0x01, 0x4d, 0x11, 0x5f, - 0x0b, 0xc9, 0x00, 0x4d, 0xc0, 0x01, 0x10, 0x5f, - 0x11, 0x4e, 0x51, 0x41, 0x08, 0x49, 0x00, 0x4d, - 0x0b, 0xc9, 0x10, 0x0f, 0x00, 0x4d, 0x50, 0x01, - 0x00, 0xed, 0xd1, 0xb6, 0x01, 0x46, 0x00, 0x06, - 0xa0, 0x3c, 0xa1, 0x7d, 0x60, 0x06, 0x00, 0xc6, - 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x50, 0x00, 0x00, 0xec, 0xd0, 0xac, - 0x70, 0xc2, 0x10, 0xe0, 0xf9, 0x70, 0x00, 0xec, - 0xd1, 0xa0, 0xd0, 0x41, 0x60, 0x46, 0x70, 0xc2, - 0x10, 0xe0, 0xe9, 0x7f, 0xd0, 0x40, 0x60, 0x46, - 0xe1, 0x70, 0x0a, 0x89, 0x0b, 0xcd, 0x00, 0xe3, - 0xd1, 0x80, 0x6b, 0xc6, 0x08, 0xc9, 0x05, 0x8d, - 0x15, 0xa3, 0xee, 0x6e, 0x15, 0xa0, 0xea, 0x6e, - 0x90, 0x4d, 0xd0, 0x9f, 0xd0, 0xdf, 0x40, 0x81, - 0x10, 0x55, 0x40, 0xc1, 0x01, 0x46, 0x82, 0x34, - 0x80, 0x3f, 0xc8, 0x1d, 0x81, 0x34, 0x80, 0x3f, - 0x00, 0xc6, 0xd1, 0x23, 0x31, 0x03, 0x11, 0x02, - 0x38, 0x04, 0xb0, 0x8d, 0x10, 0x9d, 0x28, 0x02, - 0xc0, 0x60, 0x00, 0x65, 0xd1, 0x94, 0x71, 0x06, - 0x68, 0x06, 0x30, 0x44, 0x00, 0xed, 0xd1, 0xa8, - 0x70, 0x06, 0x10, 0x20, 0xe9, 0xb0, 0x00, 0xee, - 0xd0, 0xc0, 0x70, 0xc3, 0x20, 0x43, 0xb0, 0x01, - 0xf9, 0xac, 0x60, 0x06, 0x00, 0x64, 0xd1, 0xbc, - 0x71, 0x06, 0xc0, 0x04, 0x21, 0x01, 0x61, 0x06, - 0x10, 0x20, 0xf5, 0xbb, 0x11, 0x20, 0xe5, 0xbb, - 0xb0, 0x41, 0x00, 0x65, 0xd1, 0x80, 0x71, 0x06, - 0x21, 0x01, 0x61, 0x06, 0x00, 0xed, 0xd1, 0xac, - 0x71, 0x06, 0x15, 0xa1, 0xe9, 0xcb, 0xb1, 0x3f, - 0x61, 0x06, 0x15, 0xa3, 0xf9, 0xd6, 0xd0, 0xbf, - 0xe1, 0xd3, 0xd0, 0x40, 0x60, 0x46, 0xb1, 0xbc, - 0x70, 0x86, 0x61, 0x06, 0x31, 0x02, 0xe5, 0xd3, - 0x20, 0x84, 0x00, 0x65, 0xd1, 0xa4, 0x60, 0x86, - 0xd9, 0x40, 0x00, 0xec, 0xd1, 0x94, 0x79, 0x06, - 0xb1, 0x84, 0x78, 0xc6, 0xc0, 0x63, 0x30, 0x64, - 0xe9, 0xf8, 0x00, 0xa7, 0xd0, 0xff, 0x7a, 0x63, - 0x00, 0x65, 0xd0, 0x00, 0x71, 0x00, 0x31, 0x29, - 0xe5, 0xf8, 0xc0, 0x63, 0xc8, 0xc1, 0xb0, 0x78, - 0x40, 0x43, 0xc0, 0xa4, 0x30, 0x81, 0xe9, 0xf2, - 0x7a, 0x41, 0x31, 0x29, 0xf5, 0xe8, 0x21, 0x29, - 0x61, 0x00, 0xb8, 0xfc, 0x79, 0x63, 0xb8, 0xfc, - 0x48, 0xc3, 0x68, 0xc6, 0x00, 0xed, 0xd1, 0xb8, - 0x69, 0x46, 0x80, 0x28, 0x0b, 0xc9, 0x00, 0x4d, - 0x08, 0x49, 0x10, 0x41, 0x00, 0xe3, 0xd1, 0x84, - 0x00, 0x8d, 0x20, 0x42, 0x60, 0x46, 0x00, 0xee, - 0xd1, 0xa4, 0x70, 0x86, 0x10, 0xa1, 0xee, 0x18, - 0xe6, 0x6b, 0x90, 0x86, 0x00, 0x90, 0xea, 0x18, - 0x00, 0xed, 0xd0, 0x1c, 0x70, 0x80, 0xb0, 0x81, - 0xe6, 0x6b, 0x60, 0x80, 0xb1, 0xa8, 0x70, 0x86, - 0x10, 0xa0, 0xfa, 0x6b, 0x00, 0x21, 0xd0, 0x38, - 0x70, 0x80, 0x10, 0xa0, 0xfa, 0x6b, 0x0f, 0xef, - 0xd0, 0xbf, 0x30, 0x81, 0xfa, 0x22, 0x60, 0x00, - 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, 0x15, 0xa3, - 0xea, 0x6b, 0x00, 0xee, 0xd1, 0x80, 0x79, 0x46, - 0x00, 0xf8, 0xd0, 0x00, 0xc4, 0x40, 0x00, 0xe3, - 0xd1, 0x84, 0x78, 0x46, 0x0f, 0xef, 0xd0, 0x3f, - 0x30, 0x21, 0xea, 0x48, 0x00, 0xe0, 0xd1, 0x90, - 0x78, 0x06, 0xc0, 0xa1, 0x18, 0x43, 0x28, 0x42, - 0x18, 0x43, 0x28, 0x42, 0x18, 0x1e, 0xd8, 0x80, - 0x08, 0x11, 0xea, 0x41, 0x28, 0xa1, 0x18, 0x01, - 0x18, 0x5f, 0x18, 0x60, 0xee, 0x3e, 0xc0, 0x51, - 0x30, 0x62, 0xee, 0x4e, 0xc8, 0x91, 0x18, 0x9f, - 0x00, 0x21, 0xd1, 0xb8, 0xd0, 0x01, 0x60, 0x06, - 0x00, 0xef, 0xd0, 0x10, 0xd0, 0x72, 0x60, 0x40, - 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0xc8, 0xdc, - 0xc9, 0x1d, 0x81, 0x34, 0x80, 0x3f, 0x00, 0xc6, - 0x38, 0xe4, 0xee, 0x5e, 0xea, 0x52, 0x28, 0xe5, - 0x01, 0x46, 0x90, 0x6d, 0x28, 0xc1, 0x00, 0xc6, - 0x38, 0xe2, 0xf6, 0x6b, 0xdb, 0x08, 0xf1, 0x16, - 0xf1, 0x18, 0x00, 0x21, 0xd1, 0xb4, 0x61, 0x86, - 0xe2, 0x52, 0x01, 0xf7, 0xd2, 0x19, 0xe0, 0x46, - 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x50, 0x00, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0xdb, 0x09, - 0x00, 0xe3, 0xd0, 0x1c, 0x6b, 0x00, 0xda, 0xc1, - 0x00, 0xe6, 0xd1, 0x98, 0x70, 0x06, 0xb1, 0x84, - 0x60, 0x06, 0xb1, 0x84, 0x60, 0x06, 0x05, 0x9f, - 0xe9, 0x9f, 0x08, 0x49, 0xd1, 0x17, 0x46, 0x44, - 0x00, 0x4d, 0x10, 0x43, 0x26, 0x41, 0x08, 0xc9, - 0x05, 0xcd, 0xb5, 0xc1, 0xe5, 0xcc, 0xc0, 0x57, - 0x15, 0xc6, 0x25, 0xc1, 0x15, 0xa3, 0xf9, 0x9f, - 0x08, 0x49, 0xd1, 0x0f, 0x46, 0x44, 0x00, 0x4d, - 0x10, 0x44, 0x26, 0x41, 0x08, 0xc9, 0x06, 0x0d, - 0xb6, 0x01, 0xe5, 0xcc, 0xc0, 0x58, 0x16, 0x06, - 0x26, 0x01, 0x08, 0x49, 0x00, 0x4d, 0x10, 0x60, - 0xe9, 0xa6, 0x0a, 0x09, 0x00, 0x4d, 0xe1, 0x9f, - 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, 0xe5, 0xa7, - 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, - 0x30, 0x54, 0xf9, 0xb3, 0xd4, 0x40, 0xf3, 0xb0, - 0xe1, 0xab, 0xb0, 0x7d, 0xf9, 0xb8, 0x02, 0x34, - 0xd4, 0x44, 0xe0, 0x46, 0x00, 0xec, 0xd1, 0xa0, - 0xd0, 0x40, 0x60, 0x46, 0x02, 0x3c, 0xdc, 0x89, - 0x00, 0xec, 0xd1, 0x80, 0x70, 0x46, 0xb1, 0xbc, - 0x70, 0x86, 0x30, 0x81, 0xe8, 0x46, 0x15, 0x63, - 0xe9, 0xc9, 0x05, 0x5e, 0xe8, 0x46, 0x01, 0x73, - 0xd4, 0x3d, 0xe0, 0x46, 0xd5, 0x00, 0xb5, 0x01, - 0x01, 0x7a, 0xde, 0x1a, 0xe0, 0x46, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0xcc, 0xc0, 0xcd, 0x01, - 0xcd, 0x42, 0xcd, 0x83, 0x00, 0xa0, 0xd0, 0x01, - 0xa0, 0x38, 0xc8, 0x7f, 0xc8, 0x06, 0xb1, 0xbe, - 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x58, 0x80, - 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, 0xc9, 0x40, - 0xf3, 0x92, 0x59, 0x40, 0xc0, 0x22, 0xc0, 0x65, - 0xc0, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0x80, - 0xf3, 0x92, 0x59, 0x00, 0xf3, 0x96, 0xc9, 0x40, - 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x59, 0x40, - 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x92, 0x58, 0x80, - 0xc0, 0x23, 0xc0, 0x62, 0xd0, 0x88, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, - 0x58, 0xc0, 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, - 0x59, 0xc0, 0xc0, 0x24, 0xc0, 0x67, 0xd0, 0x90, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x59, 0x80, 0xf3, 0x96, 0xc9, 0xc0, - 0xf3, 0x96, 0xca, 0x00, 0xf3, 0x92, 0x59, 0xc0, - 0xf3, 0x96, 0xca, 0x40, 0xf3, 0x92, 0x59, 0x00, - 0xc0, 0x25, 0xc0, 0x64, 0xd0, 0x98, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, - 0x58, 0x80, 0xf3, 0x96, 0xc9, 0x00, 0xf3, 0x92, - 0x59, 0x00, 0xc0, 0x23, 0xc0, 0x64, 0xd0, 0x84, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc8, 0xc0, - 0xf3, 0x92, 0x59, 0x40, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x5a, 0x40, 0xc0, 0x26, 0xc0, 0x69, - 0xd0, 0xa0, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, - 0xc9, 0x80, 0xf3, 0x92, 0x5a, 0x00, 0xf3, 0x96, - 0xca, 0x40, 0xf3, 0x92, 0x5a, 0x40, 0xf3, 0x96, - 0xca, 0x80, 0xf3, 0x92, 0x59, 0x80, 0xc0, 0x27, - 0xc0, 0x66, 0xd0, 0xa8, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc9, 0xc0, 0xf3, 0x92, 0x59, 0x00, - 0xf3, 0x96, 0xc9, 0x80, 0xf3, 0x92, 0x58, 0xc0, - 0xc0, 0x22, 0xc0, 0x63, 0xd0, 0x8c, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x92, 0x59, 0x80, 0xc0, 0x25, - 0xc0, 0x66, 0xd0, 0x94, 0x20, 0x86, 0xf3, 0x9a, - 0xf3, 0x96, 0xc8, 0x80, 0xf3, 0x92, 0x59, 0xc0, - 0xf3, 0x96, 0xc8, 0xc0, 0xf3, 0x92, 0x5a, 0x80, - 0xc0, 0x28, 0xc0, 0x6a, 0xd0, 0xb0, 0x20, 0x86, - 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x40, 0xf3, 0x92, - 0x59, 0x40, 0xc0, 0x29, 0xc0, 0x65, 0xd0, 0xb8, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x80, - 0xf3, 0x92, 0x58, 0xc0, 0xf3, 0x96, 0xca, 0x00, - 0xf3, 0x92, 0x58, 0x80, 0xc0, 0x24, 0xc0, 0x62, - 0xd0, 0x9c, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, - 0x5a, 0x00, 0xc0, 0x27, 0xc0, 0x68, 0xd0, 0xa4, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xca, 0x80, - 0xf3, 0x92, 0x59, 0x80, 0xf3, 0x96, 0xca, 0x40, - 0xf3, 0x92, 0x5a, 0x40, 0xf3, 0x96, 0xc9, 0x40, - 0xf3, 0x92, 0x5a, 0x80, 0xc0, 0x23, 0xc0, 0x6a, - 0xd0, 0xac, 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x92, - 0x59, 0x40, 0xc0, 0x26, 0xc0, 0x65, 0xd0, 0xb4, - 0x20, 0x86, 0xf3, 0x9a, 0xf3, 0x96, 0xc9, 0x00, - 0xf3, 0x92, 0x59, 0x00, 0xc0, 0x29, 0xc0, 0x64, - 0xd0, 0xbc, 0x20, 0x86, 0xf3, 0x9a, 0xc0, 0x33, - 0xc0, 0x74, 0xc0, 0xb5, 0xc0, 0xf6, 0xd0, 0x40, - 0x00, 0xa0, 0xd8, 0x00, 0xa8, 0x38, 0x08, 0x45, - 0x0a, 0x09, 0x00, 0x0d, 0x0f, 0xc5, 0x50, 0x00, - 0x0a, 0x09, 0x00, 0x0d, 0x10, 0x08, 0x0f, 0xc5, - 0x01, 0x46, 0x00, 0x06, 0xa0, 0x7c, 0xa0, 0x3d, - 0x60, 0x42, 0x00, 0xc6, 0x0f, 0xc5, 0x50, 0x00, - 0x50, 0x00, 0x50, 0x00, 0x14, 0x48, 0xd0, 0x81, - 0x00, 0xef, 0xd1, 0x8c, 0x71, 0x46, 0x11, 0x60, - 0xfb, 0xb1, 0x60, 0x86, 0x71, 0x46, 0x31, 0x42, - 0xfb, 0xb1, 0x00, 0xec, 0xd1, 0x0c, 0x74, 0x84, - 0x00, 0x68, 0xd0, 0x80, 0x70, 0x02, 0x10, 0x20, - 0xfb, 0xc4, 0xc4, 0x82, 0xc4, 0xd2, 0xb4, 0xfc, - 0xda, 0x00, 0xda, 0x4f, 0x0a, 0x09, 0x0f, 0xef, - 0xd0, 0x3f, 0xb4, 0x7f, 0xca, 0x29, 0x1a, 0x18, - 0x4a, 0x00, 0x1a, 0x48, 0x00, 0x8d, 0x2a, 0x42, - 0xd0, 0x03, 0x40, 0x11, 0xfb, 0xe3, 0xb4, 0x44, - 0x00, 0xa0, 0xd0, 0xc0, 0x30, 0xd3, 0xff, 0xe3, - 0xb4, 0xfe, 0x01, 0x46, 0x00, 0x06, 0xaa, 0x3d, - 0xaa, 0x7c, 0x6a, 0x53, 0x00, 0xc6, 0xb4, 0xfe, - 0xb4, 0x7c, 0x1a, 0x61, 0xfb, 0xc8, 0xb4, 0x43, - 0x00, 0xef, 0xd0, 0x3f, 0x40, 0x11, 0xeb, 0xf7, - 0xb0, 0xc4, 0xe7, 0xf7, 0xeb, 0xee, 0x61, 0x53, - 0x64, 0x52, 0x64, 0xc4, 0x00, 0x28, 0xd1, 0x24, - 0x70, 0x04, 0x00, 0x21, 0xd0, 0x80, 0x50, 0x02, - 0x60, 0x04, 0x61, 0x46, 0x0a, 0x09, 0x0f, 0xc5, - 0x50, 0x00, 0x50, 0x00, 0x02, 0x31, 0xde, 0x13, - 0x00, 0x27, 0xdc, 0xd8, 0xf0, 0x4a, 0x01, 0xfa, - 0xd4, 0x3d, 0x00, 0x25, 0xdc, 0xd8, 0xf0, 0x4a, - 0x09, 0x09, 0x01, 0xcd, 0x11, 0xe8, 0xf9, 0xe2, - 0x00, 0xe3, 0xd1, 0x9c, 0x09, 0x09, 0x05, 0xcd, - 0xb5, 0xc1, 0x09, 0x09, 0x00, 0x4d, 0xb0, 0x41, - 0x10, 0x46, 0x25, 0xc1, 0x09, 0x09, 0x06, 0x0d, - 0xb6, 0x01, 0x09, 0x09, 0x00, 0x4d, 0x08, 0x89, - 0xb0, 0x41, 0x10, 0x46, 0x26, 0x01, 0x00, 0x8d, - 0x08, 0x89, 0x10, 0x82, 0xd0, 0x04, 0xc0, 0x55, - 0x00, 0x40, 0x40, 0x40, 0x05, 0x4d, 0x08, 0x49, - 0x0b, 0x0d, 0xd1, 0x00, 0x15, 0x63, 0xe9, 0xa2, - 0xd1, 0x01, 0x55, 0x41, 0xdb, 0x01, 0x4b, 0x15, - 0xa1, 0x1b, 0x08, 0x89, 0x00, 0x4d, 0x08, 0x49, - 0x10, 0x41, 0xd1, 0x19, 0x46, 0x44, 0x26, 0x41, - 0x00, 0xcd, 0x08, 0x49, 0x10, 0xc4, 0x00, 0x4d, - 0x08, 0x49, 0x10, 0x41, 0x20, 0x81, 0xa0, 0x89, - 0x00, 0x4d, 0x10, 0x43, 0x20, 0xc1, 0xa0, 0xe8, - 0x08, 0x49, 0x00, 0x4d, 0x1b, 0x03, 0x5b, 0x01, - 0xbb, 0x3f, 0x6b, 0x06, 0x08, 0x49, 0xb1, 0xbc, - 0x00, 0x4d, 0x60, 0x46, 0x08, 0x49, 0xb1, 0xbc, - 0x0a, 0xcd, 0x1a, 0xc2, 0x4a, 0xd9, 0x1a, 0xde, - 0x6a, 0xc6, 0x08, 0x49, 0xb1, 0xbc, 0x00, 0x4d, - 0x60, 0x46, 0x10, 0x60, 0xea, 0x3e, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0xc9, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x08, 0x49, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x09, 0xc9, 0x00, 0x4d, 0x60, 0x46, 0xb1, 0xbc, - 0x0a, 0x09, 0x00, 0x4d, 0x60, 0x46, 0xe2, 0x3e, - 0x11, 0xe3, 0xfa, 0x00, 0x00, 0xe7, 0xd0, 0xc0, - 0xd0, 0x84, 0xb0, 0x81, 0xe6, 0x3e, 0x08, 0x49, - 0x00, 0x4d, 0x60, 0x43, 0xb0, 0xfc, 0x10, 0x60, - 0xe9, 0xe7, 0x10, 0xa3, 0xf9, 0xf4, 0x00, 0xe8, - 0xd1, 0x80, 0xe1, 0xf8, 0x10, 0xa2, 0xf9, 0xfa, - 0x00, 0xe9, 0xd1, 0x80, 0xf2, 0xb0, 0xe1, 0xe7, - 0xd2, 0x3f, 0x0a, 0x09, 0x00, 0x4d, 0xb2, 0x01, - 0xf5, 0xfb, 0xe1, 0xe7, 0x11, 0xe7, 0xfa, 0x3e, - 0xd4, 0x01, 0x00, 0xe1, 0xd0, 0x24, 0x70, 0x00, - 0x10, 0x21, 0xea, 0x0d, 0x15, 0x63, 0xfa, 0x0d, - 0xd4, 0x03, 0x44, 0x2c, 0xb4, 0x3f, 0x00, 0xe6, - 0xd1, 0x90, 0x0b, 0x09, 0x00, 0x4d, 0x09, 0x49, - 0x10, 0x45, 0x00, 0x8d, 0x50, 0x81, 0xd0, 0x40, - 0x10, 0x87, 0x10, 0x98, 0x30, 0x42, 0xf2, 0x61, - 0x60, 0x46, 0xb1, 0xbc, 0x0b, 0x09, 0x00, 0x0d, - 0x09, 0x49, 0x00, 0x0d, 0xb4, 0x01, 0xfa, 0x0f, - 0x00, 0xe6, 0xd0, 0x18, 0x30, 0x06, 0xe6, 0x29, - 0x60, 0x46, 0xb1, 0xbc, 0xe2, 0x22, 0x00, 0xe0, - 0xd1, 0x88, 0x70, 0x46, 0x10, 0x63, 0xea, 0x39, - 0x10, 0x64, 0xea, 0x39, 0x00, 0xe6, 0xd1, 0x90, - 0xd0, 0x00, 0x60, 0x06, 0xb1, 0xbc, 0x60, 0x06, - 0xb1, 0xbc, 0x60, 0x06, 0xe2, 0x3e, 0x00, 0xef, - 0xd1, 0x84, 0x70, 0x46, 0x10, 0x60, 0xfa, 0x30, - 0x0c, 0x09, 0x90, 0x4d, 0x10, 0x60, 0xe6, 0x3f, - 0x00, 0x06, 0x05, 0x0d, 0x00, 0x22, 0xd0, 0x72, - 0x30, 0x54, 0xfa, 0x4b, 0xd4, 0x40, 0xf3, 0xb0, - 0xe2, 0x43, 0xb0, 0x7d, 0xe9, 0x7a, 0x00, 0xec, - 0xd1, 0xa0, 0xd0, 0x40, 0x60, 0x46, 0x02, 0x3c, - 0xdc, 0x89, 0x00, 0xec, 0xd1, 0x80, 0x70, 0x46, - 0xb1, 0xbc, 0x70, 0x86, 0x30, 0x81, 0xe8, 0x46, - 0x15, 0x63, 0xea, 0x5e, 0x05, 0x5e, 0xe8, 0x46, - 0x01, 0x73, 0xd4, 0x3d, 0xe0, 0x46, 0x00, 0xe0, - 0xd0, 0x00, 0x70, 0xc0, 0x10, 0xc1, 0x00, 0xe0, - 0xd0, 0x08, 0x70, 0x00, 0x10, 0x23, 0xea, 0x75, - 0xc0, 0x83, 0x10, 0x9d, 0x30, 0xc2, 0x10, 0x9f, - 0x30, 0xc2, 0x00, 0xef, 0xd0, 0xac, 0x70, 0x82, - 0x10, 0xa3, 0xea, 0x75, 0x10, 0xc1, 0xc0, 0x83, - 0x30, 0x81, 0xe6, 0x7e, 0xc0, 0x83, 0x20, 0x81, - 0xf6, 0x7f, 0xd0, 0x40, 0x30, 0x43, 0x0f, 0xc5, - 0xc0, 0x43, 0x0f, 0xc5, 0x00, 0xed, 0xd1, 0xa4, - 0x72, 0x86, 0x15, 0xa3, 0xee, 0x23, 0x15, 0xa1, - 0xe6, 0x23, 0x08, 0x20, 0xd0, 0x00, 0x5f, 0x00, - 0xd8, 0xc4, 0x15, 0x63, 0xe9, 0x7e, 0x48, 0xd5, - 0x18, 0xde, 0x18, 0xe0, 0xe9, 0xc2, 0x00, 0xed, - 0xd1, 0xb4, 0x79, 0xc6, 0x19, 0xe0, 0xe9, 0x8c, - 0x00, 0xed, 0xd0, 0x3a, 0x79, 0xc6, 0x69, 0xc0, - 0xd9, 0xc0, 0x69, 0xc6, 0x00, 0xed, 0xd0, 0x38, - 0x79, 0x40, 0x19, 0x60, 0xe9, 0x98, 0x00, 0x28, - 0xd0, 0x24, 0x70, 0x40, 0x02, 0x20, 0xd0, 0x80, - 0x50, 0x42, 0x60, 0x40, 0x15, 0xa3, 0xe9, 0x9f, - 0x00, 0xec, 0xd1, 0xb8, 0x79, 0xc6, 0x69, 0x46, - 0xc9, 0x67, 0x00, 0xec, 0xd9, 0xb4, 0x70, 0x66, - 0x00, 0xec, 0xd1, 0xbc, 0x70, 0x06, 0x10, 0x20, - 0xed, 0xbe, 0x10, 0x60, 0xe9, 0xc1, 0x00, 0xe0, - 0xda, 0xa8, 0x7a, 0xaa, 0xc0, 0x2a, 0x10, 0x1f, - 0x00, 0x22, 0xd0, 0xa0, 0x70, 0x82, 0x20, 0x6a, - 0x00, 0x9f, 0xe9, 0xb5, 0x20, 0x40, 0x19, 0x60, - 0xf9, 0xb8, 0xc9, 0x41, 0xb0, 0x48, 0x30, 0x65, - 0xf5, 0xbd, 0xb0, 0x70, 0xed, 0xbe, 0xd9, 0x40, - 0x00, 0xed, 0xd1, 0xbc, 0x69, 0x46, 0x69, 0x66, - 0x12, 0xa4, 0xea, 0x21, 0x00, 0xec, 0xd1, 0xbc, - 0x73, 0xc6, 0x15, 0xa3, 0xe9, 0xdf, 0x33, 0xe3, - 0xe5, 0xd3, 0xed, 0xd2, 0x63, 0xc6, 0x00, 0x21, - 0xd1, 0xa8, 0x63, 0xc6, 0x00, 0xed, 0xd1, 0xa0, - 0x63, 0xc6, 0x15, 0xa1, 0xf9, 0xdc, 0x12, 0xa3, - 0xe5, 0xe3, 0xd3, 0xc2, 0x00, 0xec, 0xd1, 0xbc, - 0x63, 0xc6, 0xe1, 0xe3, 0x12, 0xa3, 0xea, 0x21, - 0xe1, 0xe3, 0x12, 0xa2, 0xf6, 0x21, 0x13, 0xe0, - 0xfa, 0x21, 0x00, 0xee, 0xd1, 0x8c, 0x78, 0x06, - 0xb1, 0xbc, 0x78, 0x46, 0xb1, 0xbc, 0x78, 0x86, - 0xd1, 0x88, 0x72, 0x46, 0xd1, 0x84, 0x73, 0x06, - 0x13, 0x20, 0xf9, 0xe3, 0x00, 0x64, 0xd1, 0xa0, - 0x70, 0x46, 0xd0, 0xa2, 0x30, 0x81, 0xe9, 0xff, - 0x10, 0x70, 0xea, 0x11, 0x10, 0x6d, 0xea, 0x14, - 0x10, 0x76, 0xea, 0x19, 0x10, 0x7a, 0xea, 0x28, - 0xe2, 0x3b, 0x18, 0xe0, 0xea, 0x3b, 0x00, 0xed, - 0xd1, 0x80, 0x70, 0x86, 0xb0, 0x81, 0xd0, 0x3f, - 0x40, 0x02, 0x10, 0x20, 0xea, 0x0c, 0x60, 0x86, - 0xf3, 0x8a, 0xe1, 0xe3, 0xc0, 0x02, 0x10, 0x1a, - 0x50, 0x80, 0x60, 0x86, 0xe2, 0x3b, 0x15, 0xa3, - 0xea, 0x21, 0xe2, 0xe9, 0xd2, 0x80, 0x00, 0xed, - 0xd1, 0xa4, 0x62, 0x86, 0xe3, 0x0c, 0x00, 0xed, - 0xd1, 0x88, 0xd0, 0x60, 0x70, 0x06, 0x50, 0x40, - 0x60, 0x46, 0x15, 0xa3, 0xfb, 0x0c, 0xd5, 0x84, - 0xe3, 0x0c, 0xd5, 0x00, 0xb5, 0x01, 0x01, 0x7a, - 0xde, 0x1a, 0xe0, 0x46, 0x00, 0xed, 0xd1, 0x88, - 0xd0, 0x60, 0x70, 0x06, 0x50, 0x40, 0x60, 0x46, - 0x15, 0xa2, 0xe7, 0x0c, 0xee, 0x21, 0x00, 0x21, - 0xd1, 0x8c, 0x18, 0xe0, 0xfa, 0x39, 0x70, 0x46, - 0x10, 0x61, 0xea, 0x70, 0xe2, 0x21, 0x65, 0x86, - 0xe2, 0x21, 0x18, 0xe0, 0xea, 0x70, 0xd1, 0x80, - 0x73, 0x06, 0x15, 0xa2, 0xee, 0x68, 0x00, 0x22, - 0xd1, 0x80, 0x70, 0x46, 0x6b, 0x06, 0xcb, 0x01, - 0xb1, 0xb4, 0x70, 0x46, 0x6a, 0xc6, 0xca, 0xc1, - 0x00, 0x65, 0xd1, 0x98, 0x70, 0x46, 0x10, 0x61, - 0xfa, 0x50, 0x02, 0x41, 0xc3, 0x21, 0xc7, 0xe0, - 0x02, 0x50, 0xea, 0x56, 0xc3, 0x20, 0xc7, 0xe1, - 0xd1, 0x88, 0xd0, 0x01, 0x02, 0x40, 0x62, 0x46, - 0x0f, 0xef, 0xd0, 0x7f, 0x30, 0x6f, 0xfa, 0x5f, - 0xc3, 0x20, 0xc7, 0x4c, 0xd0, 0x00, 0x00, 0x65, - 0xd1, 0x98, 0x70, 0x46, 0x60, 0x06, 0xb0, 0x41, - 0x43, 0x01, 0xe2, 0x70, 0xc3, 0x22, 0xc7, 0xcc, - 0xc7, 0x60, 0xc7, 0xa1, 0x02, 0x50, 0xea, 0x70, - 0xc7, 0x61, 0xc7, 0xa0, 0xdb, 0x80, 0xd1, 0x00, - 0x00, 0xef, 0xd1, 0xa8, 0x70, 0x46, 0x10, 0x60, - 0xfa, 0x7a, 0x00, 0xe0, 0xd1, 0x88, 0x70, 0x46, - 0x00, 0x22, 0xd1, 0xb0, 0x70, 0x86, 0x30, 0x81, - 0xea, 0x82, 0x60, 0x46, 0xd0, 0x20, 0xf3, 0x06, - 0x10, 0x63, 0xea, 0x87, 0x10, 0x64, 0xea, 0x87, - 0xe2, 0x95, 0x00, 0xef, 0xd1, 0x6c, 0x71, 0x45, - 0xc0, 0x05, 0x30, 0x01, 0xf6, 0x95, 0xdb, 0x82, - 0xd1, 0x01, 0x10, 0x63, 0xea, 0x95, 0xd1, 0x02, - 0x11, 0x62, 0xea, 0x95, 0xd1, 0x03, 0xd1, 0x8c, - 0x61, 0x06, 0xdb, 0x40, 0x00, 0xe0, 0xd0, 0x00, - 0x71, 0x00, 0xc0, 0x84, 0x10, 0x9c, 0xb0, 0x96, - 0xfa, 0xa0, 0xb1, 0x38, 0xb0, 0x96, 0xfa, 0xa3, - 0xb1, 0x30, 0x00, 0x29, 0xd1, 0x84, 0x00, 0x22, - 0xd0, 0x74, 0x70, 0x86, 0x70, 0xc1, 0x61, 0x06, - 0x30, 0xc2, 0xea, 0xae, 0x60, 0x81, 0xdb, 0x41, - 0xb0, 0x3c, 0xb1, 0xbc, 0xb0, 0x7c, 0x71, 0x00, - 0x70, 0x86, 0x70, 0xc1, 0x61, 0x06, 0x30, 0xc2, - 0xea, 0xb9, 0x60, 0x81, 0xdb, 0x41, 0x00, 0xee, - 0xd1, 0xb4, 0x70, 0x06, 0xb1, 0xbc, 0x70, 0x46, - 0x30, 0x40, 0xea, 0xc2, 0x60, 0x06, 0xdb, 0x41, - 0x00, 0x24, 0xd0, 0x60, 0x30, 0x81, 0xea, 0xc7, - 0x30, 0x81, 0x50, 0x02, 0xea, 0xca, 0xd0, 0x01, - 0x00, 0x22, 0xd1, 0xbc, 0x70, 0x86, 0x30, 0x80, - 0xea, 0xd2, 0x60, 0x06, 0xd0, 0x10, 0xf3, 0x06, - 0x00, 0x22, 0xd1, 0xa4, 0x71, 0x06, 0xd0, 0x01, - 0x41, 0x00, 0x5b, 0x44, 0x5b, 0x6e, 0x6b, 0x46, - 0x00, 0x28, 0xd0, 0x70, 0x70, 0x41, 0x10, 0x62, - 0xfa, 0xe6, 0xd1, 0x84, 0x70, 0x06, 0x10, 0x20, - 0xfa, 0xdf, 0x00, 0x22, 0xd0, 0x00, 0xf3, 0x06, - 0x02, 0x7d, 0xde, 0x68, 0xe0, 0x46, 0x00, 0xed, - 0xd1, 0x88, 0x71, 0x06, 0x01, 0x1f, 0xfa, 0xfd, - 0xd0, 0x41, 0x41, 0x01, 0xd0, 0x62, 0x00, 0x65, - 0xd0, 0x30, 0x70, 0x00, 0x10, 0x21, 0xea, 0xfa, - 0xee, 0xf9, 0x1a, 0xe1, 0xfa, 0xfa, 0xd0, 0x52, - 0x51, 0x01, 0x61, 0x06, 0xe3, 0x0c, 0x18, 0xe0, - 0xea, 0x70, 0xc7, 0x60, 0xc7, 0xe1, 0x02, 0x50, - 0xea, 0x70, 0xc7, 0x61, 0xc7, 0xe0, 0xe2, 0x70, - 0x00, 0x28, 0xdc, 0xa4, 0x7c, 0x72, 0x5c, 0x40, - 0x6c, 0x72, 0x0f, 0xc5, 0x18, 0xe0, 0xeb, 0x82, - 0xd9, 0x0d, 0x00, 0xee, 0xd1, 0xa4, 0x70, 0x06, - 0x10, 0x21, 0xfb, 0x7f, 0xd9, 0x0c, 0x90, 0x06, - 0x00, 0x10, 0xeb, 0x7f, 0x00, 0x21, 0xd1, 0x88, - 0x7a, 0x06, 0x1a, 0x20, 0xeb, 0x7f, 0xd9, 0x00, - 0x00, 0xed, 0xd1, 0xbc, 0x79, 0x46, 0x19, 0x60, - 0xeb, 0x7f, 0x39, 0x68, 0xc0, 0xe5, 0xc0, 0x25, - 0x10, 0x13, 0xb0, 0x0f, 0xef, 0x7f, 0xb0, 0x22, - 0xe7, 0x7f, 0x00, 0xe0, 0xd1, 0xa8, 0x71, 0x46, - 0x11, 0x5f, 0x29, 0x45, 0x00, 0x22, 0xd0, 0x18, - 0x00, 0x22, 0xd4, 0x54, 0x00, 0x22, 0xd0, 0x9c, - 0x70, 0x00, 0x74, 0x51, 0x70, 0x42, 0x34, 0x40, - 0xe7, 0x3c, 0xd0, 0x40, 0x00, 0x22, 0xd4, 0x50, - 0x74, 0x51, 0x34, 0x40, 0xef, 0x42, 0x20, 0x45, - 0x60, 0x42, 0x39, 0x41, 0x19, 0x60, 0xf7, 0x5e, - 0x00, 0x65, 0xd1, 0xa8, 0x7a, 0x86, 0x29, 0x6a, - 0x19, 0x59, 0xb9, 0x7e, 0xf7, 0x75, 0x15, 0xa3, - 0xf7, 0x57, 0x00, 0xed, 0xd1, 0xac, 0x70, 0x06, - 0x00, 0xed, 0xd1, 0xb0, 0x70, 0x46, 0x30, 0x01, - 0xfb, 0x7f, 0x00, 0x65, 0xd1, 0x84, 0x70, 0x46, - 0xb0, 0x7f, 0x60, 0x46, 0xd5, 0x84, 0xe3, 0x7f, - 0x11, 0x41, 0xd0, 0x4a, 0x00, 0xed, 0xd1, 0xa0, - 0x74, 0x46, 0xd0, 0x00, 0x60, 0x06, 0x30, 0xc5, - 0x39, 0x45, 0xe7, 0x6e, 0x14, 0x60, 0xeb, 0x6b, - 0xf3, 0x85, 0xb0, 0x41, 0xef, 0x65, 0xe3, 0x71, - 0x00, 0x66, 0xd1, 0xa0, 0x60, 0xc6, 0x15, 0xa3, - 0xeb, 0x7f, 0xf3, 0x85, 0xe3, 0x7f, 0xd9, 0x01, - 0x00, 0x66, 0xd1, 0xa0, 0x70, 0x06, 0x30, 0x03, - 0xe7, 0x7e, 0x10, 0x1d, 0x10, 0x3b, 0xe7, 0x7f, - 0x60, 0xc6, 0x00, 0x66, 0xd1, 0xa4, 0x69, 0x06, - 0x15, 0xa4, 0xea, 0x23, 0xe2, 0x3b, 0x00, 0x65, - 0xdd, 0x08, 0x7c, 0xf4, 0xbc, 0xff, 0x6c, 0xf4, - 0x00, 0xef, 0xdd, 0x10, 0x7c, 0xf4, 0xbc, 0xfe, - 0x6c, 0xf4, 0xc0, 0x3f, 0xf1, 0x18, 0xf1, 0x16, - 0xf1, 0x18, 0x00, 0x05, 0x08, 0x20, 0xd0, 0x40, - 0x5f, 0x01, 0x15, 0x63, 0xe9, 0x77, 0x05, 0x5e, - 0xeb, 0x08, 0x00, 0x22, 0xd1, 0xa0, 0x6b, 0x06, - 0x00, 0x22, 0xd1, 0xa8, 0x6b, 0xc6, 0x00, 0x22, - 0xd1, 0xac, 0x6a, 0xc6, 0x00, 0xee, 0xd0, 0x0c, - 0x00, 0xe6, 0xd1, 0x9c, 0x70, 0x40, 0x30, 0x5f, - 0xe9, 0x8d, 0xb0, 0x3c, 0xb1, 0xb4, 0x70, 0x40, - 0x30, 0x5f, 0xe9, 0x8d, 0xb1, 0xb4, 0x00, 0xe6, - 0xd0, 0x10, 0xd0, 0x83, 0x70, 0x40, 0x60, 0x46, - 0xb0, 0x3c, 0xb1, 0xbc, 0xb0, 0x81, 0xed, 0x90, - 0x00, 0xee, 0xd0, 0x0c, 0x00, 0xe6, 0xd1, 0x9c, - 0x70, 0x40, 0x30, 0x4c, 0xe9, 0xa3, 0xb0, 0x3c, - 0xb1, 0xb4, 0x70, 0x40, 0x30, 0x4c, 0xe9, 0xa3, - 0xb1, 0xb4, 0x00, 0xe6, 0xd0, 0x00, 0x61, 0x80, - 0x00, 0x21, 0xd1, 0xb4, 0x70, 0x06, 0x10, 0x20, - 0xe9, 0xae, 0xd0, 0x00, 0x60, 0x06, 0xf1, 0x18, - 0x00, 0x21, 0xd1, 0x8c, 0x70, 0x46, 0x65, 0x86, - 0xde, 0xc0, 0x00, 0xee, 0xd0, 0x20, 0x70, 0x00, - 0x10, 0x22, 0xfd, 0xb9, 0xde, 0xc2, 0x00, 0x21, - 0xd0, 0x04, 0x70, 0x00, 0x10, 0x21, 0xe9, 0xc0, - 0x15, 0xa3, 0xe9, 0xdc, 0xd0, 0x02, 0x4c, 0x00, - 0x10, 0x63, 0xe9, 0xc5, 0xcc, 0x3b, 0xd0, 0x04, - 0x63, 0x00, 0xd0, 0x00, 0x70, 0x00, 0x30, 0x1f, - 0xfb, 0x08, 0xd0, 0x18, 0x70, 0x00, 0x10, 0x20, - 0xed, 0xc7, 0xd0, 0x04, 0x70, 0x80, 0x10, 0xa0, - 0xeb, 0x08, 0xf1, 0x16, 0x00, 0x21, 0xd0, 0x9a, - 0xc0, 0x39, 0x30, 0x1f, 0x10, 0x18, 0x30, 0x02, - 0xfd, 0xcf, 0xe3, 0x08, 0x00, 0xe0, 0xd9, 0x04, - 0x79, 0x24, 0xb9, 0x38, 0x19, 0x1c, 0xdc, 0x88, - 0x4c, 0xac, 0xd0, 0x02, 0x40, 0x2c, 0x10, 0x02, - 0x0c, 0x80, 0x10, 0x63, 0xea, 0x70, 0x15, 0x63, - 0xf9, 0xec, 0xf1, 0x18, 0x00, 0xef, 0xdc, 0x00, - 0x7c, 0x30, 0x00, 0x24, 0xd0, 0x30, 0x70, 0x00, - 0x10, 0x21, 0xf9, 0xf6, 0xbc, 0x3b, 0xe1, 0xfd, - 0x10, 0x22, 0xf9, 0xfa, 0xbc, 0x38, 0xe1, 0xfd, - 0x10, 0x23, 0xf9, 0xfd, 0xbc, 0x3c, 0x1e, 0xe0, - 0xea, 0x03, 0x15, 0x63, 0xfa, 0x02, 0xbe, 0xfc, - 0xdc, 0x12, 0x0e, 0xde, 0xfa, 0x09, 0xc0, 0x24, - 0x30, 0x30, 0xf6, 0x09, 0x2c, 0x00, 0xd0, 0x2c, - 0x6c, 0x00, 0x1e, 0xe0, 0xea, 0x0f, 0xcc, 0x24, - 0x1c, 0x1f, 0xd9, 0x40, 0x06, 0x50, 0xea, 0x22, - 0xc0, 0x24, 0xb0, 0x12, 0xfe, 0x22, 0xd9, 0x74, - 0x79, 0x65, 0x19, 0x5f, 0x30, 0x25, 0xee, 0x1b, - 0x29, 0x40, 0x19, 0x5f, 0x19, 0x41, 0xc0, 0x25, - 0x20, 0x30, 0x30, 0x24, 0xe6, 0x22, 0x3c, 0x00, - 0xd0, 0x38, 0x69, 0x40, 0x1c, 0x05, 0xbc, 0x38, - 0x3c, 0x32, 0x5c, 0x3b, 0xbc, 0x3f, 0xd8, 0xec, - 0x78, 0xe3, 0xc0, 0xa3, 0x10, 0xb2, 0xf6, 0x2f, - 0xd0, 0x92, 0x02, 0xe4, 0xd8, 0x00, 0xd0, 0xc0, - 0x20, 0xe0, 0xb0, 0x81, 0xee, 0x32, 0xd0, 0x30, - 0x60, 0xc0, 0x00, 0xac, 0xd0, 0x20, 0xc0, 0xc0, - 0xd8, 0x40, 0xc1, 0x23, 0xd4, 0x64, 0x34, 0x63, - 0xdc, 0x40, 0x0c, 0x1f, 0xfa, 0x5b, 0xc0, 0x65, - 0xb0, 0x41, 0xe6, 0x47, 0x68, 0x40, 0xb0, 0x3c, - 0xe2, 0x42, 0xc0, 0xc0, 0x34, 0x65, 0xdc, 0x48, - 0x4c, 0x70, 0x1c, 0x5f, 0x20, 0xf1, 0x15, 0x63, - 0xfa, 0x5c, 0xf2, 0x54, 0xc1, 0x11, 0xc0, 0x83, - 0xf2, 0xa5, 0xe2, 0x6f, 0xb1, 0x01, 0xe6, 0x5a, - 0x68, 0x40, 0x28, 0x60, 0xb0, 0x3c, 0xe2, 0x54, - 0x0f, 0xc5, 0xd9, 0x40, 0xb1, 0x12, 0x11, 0x01, - 0x21, 0x25, 0xf2, 0x54, 0xc1, 0x11, 0xb1, 0x01, - 0xe6, 0x6f, 0x20, 0x31, 0x68, 0x40, 0x30, 0x31, - 0xb0, 0x3c, 0x28, 0x60, 0x70, 0x43, 0x30, 0x31, - 0x60, 0x40, 0x20, 0x31, 0xb0, 0x3c, 0xb0, 0xf8, - 0xe2, 0x61, 0xe2, 0xf7, 0xd8, 0xec, 0x78, 0xe3, - 0x00, 0xa8, 0xd0, 0x80, 0x00, 0xa8, 0xd1, 0x44, - 0x00, 0xac, 0xd0, 0x20, 0xc0, 0xc0, 0x0c, 0x1f, - 0xfa, 0xb3, 0xd9, 0x78, 0x79, 0x65, 0x39, 0x25, - 0x19, 0x5f, 0xc9, 0xa5, 0x19, 0x83, 0x20, 0x26, - 0x20, 0xe6, 0x20, 0xa6, 0x21, 0x66, 0xc1, 0x23, - 0xc0, 0x64, 0x10, 0x5f, 0x10, 0x9d, 0x20, 0x81, - 0x31, 0x01, 0x30, 0x44, 0xf6, 0x8e, 0x21, 0x01, - 0x30, 0x84, 0x10, 0x83, 0xc4, 0x64, 0x34, 0x63, - 0xdc, 0x48, 0x4c, 0x70, 0x1c, 0x5f, 0x15, 0x63, - 0xfa, 0xc3, 0x20, 0xb1, 0xf2, 0xa5, 0xc1, 0x24, - 0x11, 0x1f, 0xc0, 0x85, 0x30, 0xb1, 0xf2, 0xa5, - 0xc1, 0x11, 0xc0, 0x83, 0x0c, 0x9d, 0xfa, 0xa3, - 0xb0, 0xbc, 0xf2, 0xa5, 0xe2, 0xec, 0xb1, 0x01, - 0xe6, 0x5a, 0x70, 0x42, 0xb0, 0xb8, 0x60, 0x40, - 0xb0, 0x3c, 0xe2, 0xa5, 0xb1, 0x01, 0xe6, 0x5a, - 0x70, 0x42, 0xb0, 0xb8, 0x60, 0x40, 0xb0, 0x38, - 0xe2, 0xac, 0x00, 0xac, 0xd0, 0x24, 0xc1, 0x23, - 0xb1, 0x12, 0xf2, 0xac, 0xd1, 0x24, 0x31, 0x23, - 0x00, 0xa8, 0xd0, 0x84, 0xf2, 0xac, 0xd1, 0x12, - 0x00, 0xa8, 0xd0, 0x84, 0xc0, 0x03, 0xf2, 0xac, - 0xe2, 0xec, 0xd8, 0x82, 0x48, 0x95, 0x18, 0x81, - 0xb1, 0x01, 0xe6, 0xd9, 0x20, 0xb1, 0x70, 0x42, - 0x30, 0xb1, 0x20, 0x22, 0x60, 0x40, 0x30, 0x22, - 0xb0, 0xbc, 0xb0, 0x3c, 0x30, 0xb1, 0x70, 0x42, - 0x20, 0xb1, 0x30, 0x22, 0x60, 0x40, 0x20, 0x22, - 0xb0, 0xbc, 0xb0, 0x3c, 0xe2, 0xc6, 0xc1, 0x11, - 0xc0, 0x85, 0x30, 0xb1, 0x20, 0xe2, 0xb1, 0x01, - 0xe6, 0xec, 0x70, 0x42, 0xb0, 0xb8, 0x20, 0x22, - 0x60, 0x40, 0x30, 0x22, 0xb0, 0x3c, 0x70, 0x43, - 0xb0, 0xf8, 0x30, 0x22, 0x60, 0x40, 0x20, 0x22, - 0xb0, 0x3c, 0xe2, 0xdd, 0xd0, 0x08, 0x5c, 0x00, - 0x3c, 0x32, 0xd0, 0x04, 0x40, 0x30, 0x3c, 0x00, - 0x15, 0x63, 0xfa, 0xf7, 0x1e, 0xe0, 0xea, 0xf7, - 0xbc, 0x3c, 0x00, 0xac, 0xd0, 0xa0, 0x00, 0xa8, - 0xd0, 0x00, 0x00, 0x20, 0xd1, 0x24, 0x70, 0x42, - 0xb0, 0xbc, 0x60, 0x40, 0xb0, 0x3c, 0xb1, 0x01, - 0xee, 0xfd, 0xd0, 0x30, 0x30, 0x30, 0xef, 0x03, - 0xd0, 0x04, 0x63, 0x00, 0x08, 0x20, 0xd0, 0x40, - 0x3f, 0x01, 0x02, 0xba, 0xde, 0x3c, 0xe0, 0x46, - 0x50, 0x00, 0x50, 0x00, 0x01, 0x46, 0xd0, 0x08, - 0x94, 0x89, 0xd0, 0x8c, 0x44, 0x82, 0x14, 0x9e, - 0x30, 0x12, 0xd0, 0x88, 0x10, 0x80, 0x00, 0xe8, - 0xd1, 0x80, 0x70, 0xc6, 0x00, 0x06, 0xa0, 0xbd, - 0xa0, 0xfc, 0x80, 0x3f, 0xb1, 0xbe, 0x60, 0xc6, - 0x00, 0x06, 0x80, 0xa9, 0x80, 0x3f, 0x80, 0x2a, - 0x80, 0x3f, 0x00, 0x21, 0xd0, 0x3c, 0x00, 0x0a, - 0xb1, 0x82, 0xd0, 0x6b, 0x70, 0x46, 0x00, 0x06, - 0x80, 0x07, 0x01, 0x20, 0xd0, 0x67, 0xa0, 0x69, - 0x80, 0x2a, 0x82, 0x29, 0x80, 0x6a, 0x84, 0x29, - 0xd0, 0x54, 0x10, 0x4f, 0xa0, 0x6a, 0x01, 0x20, - 0xd0, 0x00, 0xa0, 0x29, 0x80, 0x2b, 0x0c, 0x20, - 0xd0, 0x00, 0x10, 0x08, 0xa0, 0x27, 0x90, 0x09, - 0xd0, 0x41, 0x40, 0x01, 0xd0, 0x44, 0x40, 0x70, - 0x20, 0x01, 0xa0, 0x27, 0x80, 0x3f, 0x00, 0xc6, - 0x15, 0x63, 0xe9, 0xae, 0x05, 0x5e, 0xe9, 0xbe, - 0x00, 0xe0, 0xd0, 0x40, 0x70, 0x81, 0x10, 0x9c, - 0xb0, 0x96, 0xf9, 0xb7, 0x00, 0x21, 0xd0, 0x40, - 0xe1, 0xbb, 0xb0, 0x96, 0xf9, 0xbe, 0x00, 0x22, - 0xd0, 0x40, 0x27, 0xc1, 0x27, 0x41, 0x27, 0x81, - 0x90, 0x83, 0x00, 0x64, 0xd0, 0x10, 0x60, 0x80, - 0x01, 0x46, 0x82, 0x34, 0x80, 0x3f, 0x00, 0x64, - 0xd0, 0x14, 0x67, 0x40, 0x80, 0x34, 0x80, 0x3f, - 0x00, 0xc6, 0x90, 0xae, 0x00, 0x64, 0xd0, 0x18, - 0x60, 0x80, 0x90, 0xa6, 0x00, 0x64, 0xd0, 0x1c, - 0x60, 0x80, 0x15, 0x63, 0xe9, 0xe3, 0x0c, 0x1f, - 0xe9, 0xe3, 0x05, 0x50, 0xf9, 0xe3, 0x15, 0xa3, - 0xf9, 0xe3, 0x90, 0x4d, 0x10, 0x60, 0xe5, 0xdb, - 0x00, 0x06, 0x05, 0x0d, 0x01, 0x7a, 0xde, 0x1a, - 0xe0, 0x46, 0x15, 0xa3, 0xf9, 0xfb, 0x00, 0x21, - 0xd0, 0x04, 0x70, 0x00, 0x10, 0x21, 0xe9, 0xfb, - 0xd0, 0x38, 0x70, 0x00, 0x15, 0x63, 0xe9, 0xef, - 0x10, 0x1f, 0x15, 0x21, 0xe5, 0xe0, 0xd0, 0x64, - 0x30, 0x54, 0xe5, 0xe0, 0xc0, 0x40, 0xb0, 0x7f, - 0x30, 0x54, 0xe9, 0xfb, 0x0c, 0x09, 0x05, 0x0d, - 0xe1, 0xef, 0xc0, 0x5f, 0x10, 0x58, 0x10, 0x48, - 0x00, 0xee, 0xd0, 0x8c, 0xd0, 0xc3, 0x70, 0x02, - 0x30, 0x01, 0xea, 0x10, 0xb0, 0xbc, 0xb0, 0xc1, - 0xee, 0x01, 0x00, 0x26, 0xd0, 0x20, 0x70, 0x40, - 0xb0, 0x7f, 0x60, 0x40, 0x15, 0xa3, 0xea, 0x0f, - 0xb0, 0x88, 0x77, 0xc2, 0x80, 0x07, 0x09, 0x49, - 0xd4, 0x00, 0xd4, 0x40, 0xd4, 0x80, 0xd4, 0xc0, - 0x00, 0x4d, 0xa0, 0x6c, 0xd3, 0x80, 0xd0, 0xa1, - 0x00, 0x88, 0xd0, 0xa9, 0x00, 0x4d, 0x00, 0x50, - 0xfa, 0x1a, 0x0c, 0x49, 0x00, 0x8d, 0xc0, 0x42, - 0x10, 0x60, 0xea, 0x2a, 0xb0, 0x5e, 0xb0, 0x43, - 0xfe, 0x34, 0xd0, 0x61, 0x23, 0x81, 0xe2, 0x1f, - 0x0c, 0x09, 0x05, 0x0d, 0x15, 0x20, 0xfe, 0x31, - 0xd0, 0x65, 0x30, 0x54, 0xee, 0x10, 0x03, 0xb4, - 0xd6, 0x29, 0xe0, 0x46, 0xc6, 0xd4, 0xb6, 0xc1, - 0xe6, 0x31, 0xd0, 0x64, 0x30, 0x5b, 0xfe, 0x31, - 0xd7, 0x00, 0xb7, 0x01, 0xd3, 0x81, 0x00, 0x27, - 0xd0, 0x10, 0xd0, 0x81, 0x60, 0x80, 0x15, 0x63, - 0xfa, 0x54, 0x00, 0x22, 0xdc, 0xd8, 0x03, 0xf8, - 0xd0, 0x10, 0xf0,