diff --git a/arch/arm64/configs/vendor/k24-perf_defconfig b/arch/arm64/configs/vendor/k24-perf_defconfig new file mode 100644 index 000000000000..b367b10d5852 --- /dev/null +++ b/arch/arm64/configs/vendor/k24-perf_defconfig @@ -0,0 +1,687 @@ +CONFIG_LOCALVERSION="-perf" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_AUDIT=y +# CONFIG_AUDITSYSCALL is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_SCHED_WALT=y +CONFIG_TASKSTATS=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +CONFIG_PSI_FTRACE=y +CONFIG_RCU_EXPERT=y +CONFIG_RCU_FAST_NO_HZ=y +CONFIG_RCU_NOCB_CPU=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_IKHEADERS=y +CONFIG_LOG_CPU_MAX_BUF_SHIFT=17 +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_BLK_CGROUP=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_BPF=y +CONFIG_SCHED_CORE_CTL=y +CONFIG_NAMESPACES=y +# CONFIG_PID_NS is not set +CONFIG_SCHED_AUTOGROUP=y +CONFIG_SCHED_TUNE=y +CONFIG_BLK_DEV_INITRD=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_XZ is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +# CONFIG_FHANDLE is not set +CONFIG_KALLSYMS_ALL=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB_FREELIST_RANDOM=y +CONFIG_SLAB_FREELIST_HARDENED=y +CONFIG_PROFILING=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_HOTPLUG_SIZE_BITS=29 +CONFIG_ARCH_QCOM=y +CONFIG_ARCH_BENGAL=y +# CONFIG_ARCH_KHAJE is not set +CONFIG_ARCH_SCUBA=y +CONFIG_SCHED_MC=y +CONFIG_NR_CPUS=8 +CONFIG_SECCOMP=y +# CONFIG_UNMAP_KERNEL_AT_EL0 is not set +CONFIG_HARDEN_BRANCH_PREDICTOR=y +CONFIG_ARMV8_DEPRECATED=y +CONFIG_SWP_EMULATION=y +CONFIG_CP15_BARRIER_EMULATION=y +CONFIG_SETEND_EMULATION=y +CONFIG_ARM64_SW_TTBR0_PAN=y +# CONFIG_ARM64_VHE is not set +CONFIG_RANDOMIZE_BASE=y +CONFIG_CMDLINE="cgroup_disable=pressure" +CONFIG_CMDLINE_EXTEND=y +CONFIG_COMPAT=y +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=0 +# CONFIG_PM_WAKELOCKS_GC is not set +CONFIG_ENERGY_MODEL=y +CONFIG_CPU_IDLE=y +CONFIG_ARM_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TIMES=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_BOOST=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_ARM_QCOM_CPUFREQ_HW=y +CONFIG_MSM_TZ_LOG=y +CONFIG_ARM64_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y +CONFIG_PANIC_ON_REFCOUNT_ERROR=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SIG=y +CONFIG_MODULE_SIG_FORCE=y +CONFIG_MODULE_SIG_SHA512=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_BLK_INLINE_ENCRYPTION=y +CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y +CONFIG_PARTITION_ADVANCED=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_IOSCHED_BFQ=y +CONFIG_BFQ_GROUP_IOSCHED=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +CONFIG_MEMORY_HOTPLUG_MOVABLE_NODE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_CMA=y +CONFIG_ZSMALLOC=y +CONFIG_BALANCE_ANON_FILE_RECLAIM=y +CONFIG_HAVE_USERSPACE_LOW_MEMORY_KILLER=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_INTERFACE=y +CONFIG_XFRM_STATISTICS=y +CONFIG_NET_KEY=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_NET_IPGRE_DEMUX=y +CONFIG_SYN_COOKIES=y +CONFIG_NET_IPVTI=y +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +CONFIG_INET_UDP_DIAG=y +CONFIG_INET_DIAG_DESTROY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +CONFIG_IPV6_MIP6=y +CONFIG_IPV6_VTI=y +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_NETFILTER=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_AMANDA=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y +CONFIG_NETFILTER_XT_TARGET_DSCP=y +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y +CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y +CONFIG_NETFILTER_XT_TARGET_LOG=y +CONFIG_NETFILTER_XT_TARGET_MARK=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +CONFIG_NETFILTER_XT_TARGET_NOTRACK=y +CONFIG_NETFILTER_XT_TARGET_TEE=y +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y +CONFIG_NETFILTER_XT_TARGET_SECMARK=y +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +CONFIG_NETFILTER_XT_MATCH_BPF=y +CONFIG_NETFILTER_XT_MATCH_COMMENT=y +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y +CONFIG_NETFILTER_XT_MATCH_CONNMARK=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +CONFIG_NETFILTER_XT_MATCH_DSCP=y +CONFIG_NETFILTER_XT_MATCH_ESP=y +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y +CONFIG_NETFILTER_XT_MATCH_HELPER=y +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y +# CONFIG_NETFILTER_XT_MATCH_L2TP is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=y +CONFIG_NETFILTER_XT_MATCH_LIMIT=y +CONFIG_NETFILTER_XT_MATCH_MAC=y +CONFIG_NETFILTER_XT_MATCH_MARK=y +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y +CONFIG_NETFILTER_XT_MATCH_OWNER=y +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y +CONFIG_NETFILTER_XT_MATCH_QUOTA=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_SOCKET=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_STATISTIC=y +CONFIG_NETFILTER_XT_MATCH_STRING=y +CONFIG_NETFILTER_XT_MATCH_TIME=y +CONFIG_NETFILTER_XT_MATCH_U32=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_AH=y +CONFIG_IP_NF_MATCH_ECN=y +CONFIG_IP_NF_MATCH_RPFILTER=y +CONFIG_IP_NF_MATCH_TTL=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_IP_NF_MANGLE=y +CONFIG_IP_NF_RAW=y +CONFIG_IP_NF_SECURITY=y +CONFIG_IP_NF_ARPTABLES=y +CONFIG_IP_NF_ARPFILTER=y +CONFIG_IP_NF_ARP_MANGLE=y +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_RPFILTER=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +CONFIG_BRIDGE_NF_EBTABLES=y +CONFIG_BRIDGE_EBT_BROUTE=y +CONFIG_IP_SCTP=y +CONFIG_L2TP=y +CONFIG_L2TP_V3=y +CONFIG_L2TP_IP=y +CONFIG_L2TP_ETH=y +CONFIG_BRIDGE=y +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_HTB=y +CONFIG_NET_SCH_PRIO=y +CONFIG_NET_SCH_MULTIQ=y +CONFIG_NET_SCH_NETEM=y +CONFIG_NET_SCH_INGRESS=y +CONFIG_NET_CLS_FW=y +CONFIG_NET_CLS_U32=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_FLOW=y +CONFIG_NET_CLS_BPF=y +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_CMP=y +CONFIG_NET_EMATCH_NBYTE=y +CONFIG_NET_EMATCH_U32=y +CONFIG_NET_EMATCH_META=y +CONFIG_NET_EMATCH_TEXT=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_GACT=y +CONFIG_NET_ACT_MIRRED=y +CONFIG_NET_ACT_SKBEDIT=y +CONFIG_DNS_RESOLVER=y +CONFIG_QRTR=y +CONFIG_QRTR_SMD=y +CONFIG_BPF_JIT=y +CONFIG_SOCKEV_NLMCAST=y +CONFIG_BT=y +CONFIG_MSM_BT_POWER=y +CONFIG_BTFM_SLIM_WCN3990=y +CONFIG_CFG80211=y +CONFIG_CFG80211_INTERNAL_REGDB=y +CONFIG_RFKILL=y +# CONFIG_NFC_NQ is not set +CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +# CONFIG_FW_CACHE is not set +CONFIG_REGMAP_WCD_IRQ=y +# CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS is not set +CONFIG_DMA_CMA=y +CONFIG_ZRAM=y +CONFIG_ZRAM_DEDUP=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=16 +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_QSEECOM=y +CONFIG_UID_SYS_STATS=y +# CONFIG_FPR_FPC is not set +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +CONFIG_CHR_DEV_SCH=y +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_SCAN_ASYNC=y +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_SCSI_UFSHCD_PLATFORM is not set +# CONFIG_SCSI_UFS_QCOM is not set +# CONFIG_SCSI_UFS_CRYPTO is not set +# CONFIG_SCSI_UFS_CRYPTO_QTI is not set +CONFIG_MD=y +CONFIG_BLK_DEV_DM=y +CONFIG_DM_CRYPT=y +CONFIG_DM_DEFAULT_KEY=y +CONFIG_DM_SNAPSHOT=y +CONFIG_DM_UEVENT=y +CONFIG_DM_VERITY=y +CONFIG_DM_VERITY_FEC=y +CONFIG_NETDEVICES=y +CONFIG_BONDING=y +CONFIG_DUMMY=y +CONFIG_TUN=y +CONFIG_VETH=y +# CONFIG_NET_VENDOR_AMAZON is not set +# CONFIG_NET_VENDOR_AURORA is not set +# CONFIG_NET_VENDOR_EZCHIP is not set +# CONFIG_NET_VENDOR_HISILICON is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_NETRONOME is not set +CONFIG_RMNET=y +# CONFIG_NET_VENDOR_ROCKER is not set +# CONFIG_NET_VENDOR_SYNOPSYS is not set +CONFIG_PHYLIB=y +CONFIG_PPP=y +CONFIG_PPP_BSDCOMP=y +CONFIG_PPP_DEFLATE=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=y +CONFIG_PPP_MULTILINK=y +CONFIG_PPPOE=y +CONFIG_PPTP=y +CONFIG_PPPOL2TP=y +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=y +CONFIG_USB_RTL8152=y +CONFIG_WCNSS_MEM_PRE_ALLOC=y +CONFIG_CLD_LL_CORE=y +CONFIG_CNSS_GENL=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_GPIO=y +# CONFIG_INPUT_MOUSE is not set +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_XPAD=y +# CONFIG_JOYSTICK_XPAD_LEDS is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_REFLASH is not set +# CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_RECOVERY is not set +# CONFIG_TOUCHSCREEN_FTS is not set +# CONFIG_TOUCHSCREEN_NT36XXX is not set +CONFIG_TOUCHSCREEN_SITRONIX_TS=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_QPNP_POWER_ON=y +CONFIG_INPUT_UINPUT=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_VT is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_DEVMEM is not set +CONFIG_SERIAL_MSM_GENI=y +CONFIG_SERIAL_MSM_GENI_HALF_SAMPLING=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_MSM_LEGACY=y +CONFIG_DIAG_CHAR=y +CONFIG_MSM_ADSPRPC=y +CONFIG_MSM_RDBG=m +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_QCOM_GENI=y +CONFIG_SPI=y +CONFIG_SPI_QCOM_GENI=y +CONFIG_SPI_SPIDEV=y +CONFIG_SPMI=y +CONFIG_PINCTRL_QCOM_SPMI_PMIC=y +CONFIG_PINCTRL_BENGAL=y +# CONFIG_PINCTRL_KHAJE is not set +CONFIG_PINCTRL_SCUBA=y +CONFIG_GPIO_SYSFS=y +CONFIG_POWER_RESET_QCOM=y +CONFIG_POWER_RESET_XGENE=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_QPNP_SMB5=y +CONFIG_QPNP_SMBLITE=y +# CONFIG_SMB1355_SLAVE_CHARGER is not set +CONFIG_QPNP_QG=y +# CONFIG_SMB1398_CHARGER is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_STATISTICS=y +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000 +CONFIG_THERMAL_WRITABLE_TRIPS=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_THERMAL_GOV_LOW_LIMITS=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_THERMAL_TSENS=y +CONFIG_QTI_ADC_TM=y +CONFIG_QTI_VIRTUAL_SENSOR=y +CONFIG_QTI_QMI_SENSOR=y +CONFIG_QTI_BCL_PMIC5=y +CONFIG_QTI_BCL_SOC_DRIVER=y +CONFIG_QTI_QMI_COOLING_DEVICE=y +CONFIG_QTI_THERMAL_LIMITS_DCVS=y +CONFIG_REGULATOR_COOLING_DEVICE=y +CONFIG_QTI_RPM_SMD_COOLING_DEVICE=y +CONFIG_QTI_CPU_ISOLATE_COOLING_DEVICE=y +CONFIG_QTI_LMH_CPU_VDD_COOLING_DEVICE=y +CONFIG_QTI_CX_IPEAK_COOLING_DEVICE=y +# CONFIG_MFD_I2C_PMIC is not set +CONFIG_MFD_SPMI_PMIC=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_PROXY_CONSUMER=y +CONFIG_REGULATOR_QCOM_SMD_RPM=y +CONFIG_REGULATOR_QPNP_LCDB=y +CONFIG_REGULATOR_REFGEN=y +CONFIG_REGULATOR_RPM_SMD=y +CONFIG_REGULATOR_STUB=y +# CONFIG_REGULATOR_PM8008 is not set +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +# CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set +CONFIG_MEDIA_CONTROLLER=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +CONFIG_VIDEO_FIXED_MINOR_RANGES=y +CONFIG_V4L_PLATFORM_DRIVERS=y +# CONFIG_DVB_MPQ is not set +# CONFIG_DVB_MPQ_DEMUX is not set +# CONFIG_DVB_MPQ_SW is not set +CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y +CONFIG_DRM=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_USB_AUDIO=y +CONFIG_SND_USB_AUDIO_QMI=y +CONFIG_SND_SOC=y +CONFIG_UHID=y +# CONFIG_HID_APPLE is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_MAGICMOUSE is not set +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MULTITOUCH=y +# CONFIG_HID_NINTENDO is not set +# CONFIG_HID_PLANTRONICS is not set +CONFIG_HID_SONY=y +CONFIG_USB_HIDDEV=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_OF_SIMPLE is not set +CONFIG_USB_DWC3_MSM=y +CONFIG_USB_EHSET_TEST_FIXTURE=y +CONFIG_USB_LINK_LAYER_TEST=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_MSM_SSPHY_QMP=y +CONFIG_MSM_QUSB_PHY=y +CONFIG_MSM_HSUSB_PHY=y +CONFIG_USB_QCOM_EMU_PHY=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_VBUS_DRAW=900 +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_UEVENT=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_ACC=y +CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y +CONFIG_USB_CONFIGFS_F_MIDI=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_DIAG=y +CONFIG_USB_CONFIGFS_F_CDEV=y +CONFIG_USB_CONFIGFS_F_CCID=y +CONFIG_USB_CONFIGFS_F_QDSS=y +CONFIG_USB_CONFIGFS_F_GSI=y +CONFIG_USB_CONFIGFS_F_MTP=y +CONFIG_USB_CONFIGFS_F_PTP=y +CONFIG_TYPEC=y +CONFIG_USB_PD_POLICY=y +CONFIG_QPNP_USB_PDPHY=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_BLOCK_DEFERRED_RESUME=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_MSM=y +CONFIG_MMC_CQHCI_CRYPTO=y +CONFIG_MMC_CQHCI_CRYPTO_QTI=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=y +#CONFIG_LEDS_AW2016 is not set +CONFIG_LEDS_AW91XXX=y +# CONFIG_LEDS_QTI_FLASH is not set +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_LEDS_QTI_TRI_LED=y +# CONFIG_LEDS_QPNP_FLASH_V2 is not set +# CONFIG_LEDS_QPNP_VIBRATOR_LDO is not set +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_PM8XXX=y +CONFIG_DMADEVICES=y +CONFIG_QCOM_GPI_DMA=y +CONFIG_UIO=y +CONFIG_UIO_MSM_SHAREDMEM=y +CONFIG_STAGING=y +CONFIG_ASHMEM=y +CONFIG_ION=y +CONFIG_ION_SYSTEM_HEAP=y +CONFIG_ION_POOL_AUTO_REFILL=y +CONFIG_QPNP_REVID=y +CONFIG_SPS=y +CONFIG_SPS_SUPPORT_NDP_BAM=y +CONFIG_IPA3=y +CONFIG_IPA_WDI_UNIFIED_API=y +CONFIG_RMNET_IPA3=y +CONFIG_RNDIS_IPA=y +CONFIG_IPA_UT=y +CONFIG_USB_BAM=y +CONFIG_QCOM_GENI_SE=y +CONFIG_QCOM_CLK_SMD_RPM=y +CONFIG_SPMI_PMIC_CLKDIV=y +CONFIG_SM_GPUCC_BENGAL=y +CONFIG_SM_DISPCC_BENGAL=y +# CONFIG_SM_DEBUGCC_BENGAL is not set +CONFIG_QM_DISPCC_SCUBA=y +CONFIG_QM_GPUCC_SCUBA=y +# CONFIG_QM_DEBUGCC_SCUBA is not set +# CONFIG_SM_GPUCC_KHAJE is not set +# CONFIG_SM_DISPCC_KHAJE is not set +# CONFIG_SM_DEBUGCC_KHAJE is not set +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_QCOM=y +CONFIG_MAILBOX=y +CONFIG_QCOM_APCS_IPC=y +CONFIG_IOMMU_IO_PGTABLE_FAST=y +CONFIG_ARM_SMMU=y +CONFIG_QCOM_LAZY_MAPPING=y +# CONFIG_IOMMU_DEBUG is not set +CONFIG_IOMMU_TESTS=y +CONFIG_RPMSG_CHAR=y +CONFIG_RPMSG_QCOM_GLINK_RPM=y +CONFIG_RPMSG_QCOM_GLINK_SMEM=y +CONFIG_MSM_RPM_SMD=y +CONFIG_QCOM_COMMAND_DB=y +CONFIG_QCOM_MEM_OFFLINE=y +CONFIG_OVERRIDE_MEMORY_LIMIT=y +CONFIG_QCOM_RUN_QUEUE_STATS=y +CONFIG_QCOM_MDT_LOADER=y +CONFIG_QPNP_PBS=y +CONFIG_QCOM_QMI_HELPERS=y +CONFIG_QCOM_SMEM=y +CONFIG_QCOM_SMD_RPM=y +CONFIG_QCOM_EARLY_RANDOM=y +CONFIG_QCOM_MEMORY_DUMP_V2=y +CONFIG_QCOM_SMP2P=y +CONFIG_SETUP_SSR_NOTIF_TIMEOUTS=y +CONFIG_SSR_SYSMON_NOTIF_TIMEOUT=20000 +CONFIG_SSR_SUBSYS_NOTIF_TIMEOUT=20000 +CONFIG_PANIC_ON_SSR_NOTIF_TIMEOUT=y +CONFIG_QCOM_SECURE_BUFFER=y +CONFIG_MSM_SERVICE_LOCATOR=y +CONFIG_MSM_SERVICE_NOTIFIER=y +CONFIG_MSM_SUBSYSTEM_RESTART=y +CONFIG_MSM_PIL=y +CONFIG_MSM_SYSMON_QMI_COMM=y +CONFIG_MSM_PIL_SSR_GENERIC=y +CONFIG_MSM_BOOT_STATS=y +CONFIG_QCOM_DCC_V2=y +CONFIG_QCOM_EUD=y +CONFIG_QCOM_MINIDUMP=y +# CONFIG_QCOM_FSA4480_I2C is not set +CONFIG_QCOM_WATCHDOG_V2=y +CONFIG_QCOM_INITIAL_LOGBUF=y +CONFIG_QCOM_FORCE_WDOG_BITE_ON_PANIC=y +CONFIG_QCOM_BUS_SCALING=y +CONFIG_QCOM_GLINK=y +CONFIG_QCOM_GLINK_PKT=y +CONFIG_QCOM_SMP2P_SLEEPSTATE=y +CONFIG_MSM_CDSP_LOADER=y +CONFIG_QCOM_SMCINVOKE=y +CONFIG_MSM_EVENT_TIMER=y +CONFIG_MSM_PM=y +CONFIG_QTI_L2_REUSE=y +CONFIG_QTI_RPM_STATS_LOG=y +CONFIG_QTEE_SHM_BRIDGE=y +CONFIG_MEM_SHARE_QMI_SERVICE=y +CONFIG_MSM_PERFORMANCE=y +CONFIG_QCOM_CDSP_RM=y +CONFIG_QCOM_QHEE_ENABLE_MEM_PROTECTION=y +CONFIG_QCOM_CX_IPEAK=y +CONFIG_QTI_CRYPTO_COMMON=y +CONFIG_QTI_CRYPTO_TZ=y +CONFIG_QTI_HW_KEY_MANAGER=y +CONFIG_ICNSS=y +CONFIG_ICNSS_QMI=y +CONFIG_DEVFREQ_GOV_PASSIVE=y +CONFIG_QCOM_BIMC_BWMON=y +CONFIG_ARM_MEMLAT_MON=y +CONFIG_DEVFREQ_GOV_QCOM_BW_HWMON=y +CONFIG_DEVFREQ_GOV_MEMLAT=y +CONFIG_ARM_QCOM_DEVFREQ_FW=y +CONFIG_DEVFREQ_SIMPLE_DEV=y +CONFIG_QCOM_DEVFREQ_DEVBW=y +CONFIG_IIO=y +CONFIG_QCOM_SPMI_ADC5=y +CONFIG_PWM=y +CONFIG_PWM_QTI_LPG=y +CONFIG_ARM_GIC_V3_ACL=y +CONFIG_QCOM_MPM=y +# CONFIG_PHY_XGENE is not set +CONFIG_QCOM_L2_COUNTERS=y +CONFIG_RAS=y +CONFIG_ANDROID=y +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_BINDERFS=y +# CONFIG_NVMEM_SYSFS is not set +CONFIG_QCOM_QFPROM=y +CONFIG_NVMEM_SPMI_SDAM=y +CONFIG_SLIMBUS_MSM_NGD=y +CONFIG_QCOM_KGSL=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_F2FS_FS=y +CONFIG_F2FS_FS_SECURITY=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y +CONFIG_FS_VERITY=y +CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_QFMT_V2=y +CONFIG_FUSE_FS=y +CONFIG_OVERLAY_FS=y +CONFIG_INCREMENTAL_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_EFIVAR_FS=y +CONFIG_SDCARD_FS=y +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_SECURITY=y +CONFIG_HARDENED_USERCOPY=y +CONFIG_HARDENED_USERCOPY_PAGESPAN=y +CONFIG_FORTIFY_SOURCE=y +CONFIG_STATIC_USERMODEHELPER=y +CONFIG_STATIC_USERMODEHELPER_PATH="" +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SMACK=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_XCBC=y +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_DEV_QCE=y +CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y +CONFIG_CRYPTO_DEV_QCRYPTO=y +CONFIG_CRYPTO_DEV_QCEDEV=y +CONFIG_STACK_HASH_ORDER_SHIFT=12 +CONFIG_PRINTK_TIME=y +# CONFIG_DEBUG_INFO is not set +CONFIG_PAGE_OWNER=y +# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_PANIC_TIMEOUT=5 +CONFIG_SCHEDSTATS=y +# CONFIG_DEBUG_PREEMPT is not set +CONFIG_DEBUG_LIST=y +CONFIG_IPC_LOGGING=y +# CONFIG_CORESIGHT is not set +# CONFIG_CORESIGHT_LINK_AND_SINK_TMC is not set +# CONFIG_CORESIGHT_DYNAMIC_REPLICATOR is not set +# CONFIG_CORESIGHT_STM is not set +# CONFIG_CORESIGHT_CTI is not saet +# CONFIG_CORESIGHT_CTI_SAVE_DISABLE is not set +# CONFIG_CORESIGHT_TPDA is not set +# CONFIG_CORESIGHT_TPDM is not set +# CONFIG_CORESIGHT_HWEVENT is not set +# CONFIG_CORESIGHT_DUMMY is not set +# CONFIG_CORESIGHT_REMOTE_ETM is not set +# CONFIG_CORESIGHT_TGU is not set +CONFIG_SONY_CXD5610=y +CONFIG_NORDIC_NRF52833=y diff --git a/arch/arm64/configs/vendor/k24_defconfig b/arch/arm64/configs/vendor/k24_defconfig new file mode 100644 index 000000000000..9b753bca8e0f --- /dev/null +++ b/arch/arm64/configs/vendor/k24_defconfig @@ -0,0 +1,761 @@ +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_AUDIT=y +# CONFIG_AUDITSYSCALL is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +CONFIG_PREEMPT=y +CONFIG_IRQ_TIME_ACCOUNTING=y +CONFIG_SCHED_WALT=y +CONFIG_TASKSTATS=y +CONFIG_TASK_XACCT=y +CONFIG_TASK_IO_ACCOUNTING=y +CONFIG_PSI=y +CONFIG_PSI_FTRACE=y +CONFIG_RCU_EXPERT=y +CONFIG_RCU_FAST_NO_HZ=y +CONFIG_RCU_NOCB_CPU=y +CONFIG_IKCONFIG=y +CONFIG_IKCONFIG_PROC=y +CONFIG_IKHEADERS=y +CONFIG_LOG_CPU_MAX_BUF_SHIFT=17 +CONFIG_MEMCG=y +CONFIG_MEMCG_SWAP=y +CONFIG_BLK_CGROUP=y +CONFIG_DEBUG_BLK_CGROUP=y +CONFIG_CGROUP_FREEZER=y +CONFIG_CPUSETS=y +CONFIG_CGROUP_CPUACCT=y +CONFIG_CGROUP_BPF=y +CONFIG_CGROUP_DEBUG=y +CONFIG_SCHED_CORE_CTL=y +CONFIG_NAMESPACES=y +# CONFIG_PID_NS is not set +CONFIG_SCHED_AUTOGROUP=y +CONFIG_SCHED_TUNE=y +CONFIG_BLK_DEV_INITRD=y +# CONFIG_RD_BZIP2 is not set +# CONFIG_RD_LZMA is not set +# CONFIG_RD_XZ is not set +# CONFIG_RD_LZO is not set +# CONFIG_RD_LZ4 is not set +# CONFIG_FHANDLE is not set +CONFIG_KALLSYMS_ALL=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_JIT_ALWAYS_ON=y +CONFIG_EMBEDDED=y +# CONFIG_COMPAT_BRK is not set +CONFIG_SLAB_FREELIST_RANDOM=y +CONFIG_SLAB_FREELIST_HARDENED=y +CONFIG_PROFILING=y +# CONFIG_ZONE_DMA32 is not set +CONFIG_HOTPLUG_SIZE_BITS=29 +CONFIG_ARCH_QCOM=y +CONFIG_ARCH_BENGAL=y +# CONFIG_ARCH_KHAJE is not set +CONFIG_ARCH_SCUBA=y +CONFIG_SCHED_MC=y +CONFIG_NR_CPUS=8 +CONFIG_SECCOMP=y +# CONFIG_UNMAP_KERNEL_AT_EL0 is not set +CONFIG_HARDEN_BRANCH_PREDICTOR=y +CONFIG_PRINT_VMEMLAYOUT=y +CONFIG_ARMV8_DEPRECATED=y +CONFIG_SWP_EMULATION=y +CONFIG_CP15_BARRIER_EMULATION=y +CONFIG_SETEND_EMULATION=y +CONFIG_ARM64_SW_TTBR0_PAN=y +# CONFIG_ARM64_VHE is not set +CONFIG_RANDOMIZE_BASE=y +CONFIG_CMDLINE="cgroup_disable=pressure" +CONFIG_CMDLINE_EXTEND=y +CONFIG_COMPAT=y +CONFIG_PM_WAKELOCKS=y +CONFIG_PM_WAKELOCKS_LIMIT=0 +# CONFIG_PM_WAKELOCKS_GC is not set +CONFIG_PM_DEBUG=y +CONFIG_ENERGY_MODEL=y +CONFIG_CPU_IDLE=y +CONFIG_ARM_CPUIDLE=y +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_TIMES=y +CONFIG_CPU_FREQ_GOV_POWERSAVE=y +CONFIG_CPU_FREQ_GOV_USERSPACE=y +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y +CONFIG_CPU_BOOST=y +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y +CONFIG_ARM_QCOM_CPUFREQ_HW=y +CONFIG_ARM_QCOM_CPUFREQ_HW_DEBUG=y +CONFIG_MSM_TZ_LOG=y +CONFIG_ARM64_CRYPTO=y +CONFIG_CRYPTO_SHA1_ARM64_CE=y +CONFIG_CRYPTO_SHA2_ARM64_CE=y +CONFIG_CRYPTO_GHASH_ARM64_CE=y +CONFIG_CRYPTO_AES_ARM64_CE_CCM=y +CONFIG_CRYPTO_AES_ARM64_CE_BLK=y +CONFIG_CRYPTO_AES_ARM64_NEON_BLK=y +CONFIG_KPROBES=y +CONFIG_PANIC_ON_REFCOUNT_ERROR=y +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODVERSIONS=y +CONFIG_MODULE_SIG=y +CONFIG_MODULE_SIG_FORCE=y +CONFIG_MODULE_SIG_SHA512=y +# CONFIG_BLK_DEV_BSG is not set +CONFIG_BLK_INLINE_ENCRYPTION=y +CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y +CONFIG_PARTITION_ADVANCED=y +# CONFIG_IOSCHED_DEADLINE is not set +CONFIG_CFQ_GROUP_IOSCHED=y +CONFIG_IOSCHED_BFQ=y +CONFIG_BFQ_GROUP_IOSCHED=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_MEMORY_HOTPLUG=y +CONFIG_MEMORY_HOTPLUG_DEFAULT_ONLINE=y +CONFIG_MEMORY_HOTPLUG_MOVABLE_NODE=y +CONFIG_MEMORY_HOTREMOVE=y +CONFIG_CLEANCACHE=y +CONFIG_CMA=y +CONFIG_CMA_DEBUG=y +CONFIG_CMA_DEBUGFS=y +CONFIG_CMA_ALLOW_WRITE_DEBUGFS=y +CONFIG_ZSMALLOC=y +CONFIG_BALANCE_ANON_FILE_RECLAIM=y +CONFIG_HAVE_USERSPACE_LOW_MEMORY_KILLER=y +CONFIG_NET=y +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM_USER=y +CONFIG_XFRM_INTERFACE=y +CONFIG_XFRM_STATISTICS=y +CONFIG_NET_KEY=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_ADVANCED_ROUTER=y +CONFIG_IP_MULTIPLE_TABLES=y +CONFIG_IP_ROUTE_VERBOSE=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_NET_IPGRE_DEMUX=y +CONFIG_SYN_COOKIES=y +CONFIG_NET_IPVTI=y +CONFIG_INET_AH=y +CONFIG_INET_ESP=y +CONFIG_INET_IPCOMP=y +CONFIG_INET_UDP_DIAG=y +CONFIG_INET_DIAG_DESTROY=y +CONFIG_IPV6_ROUTER_PREF=y +CONFIG_IPV6_ROUTE_INFO=y +CONFIG_IPV6_OPTIMISTIC_DAD=y +CONFIG_INET6_AH=y +CONFIG_INET6_ESP=y +CONFIG_INET6_IPCOMP=y +CONFIG_IPV6_MIP6=y +CONFIG_IPV6_VTI=y +CONFIG_IPV6_MULTIPLE_TABLES=y +CONFIG_IPV6_SUBTREES=y +CONFIG_NETFILTER=y +CONFIG_NF_CONNTRACK=y +CONFIG_NF_CONNTRACK_SECMARK=y +CONFIG_NF_CONNTRACK_EVENTS=y +CONFIG_NF_CONNTRACK_AMANDA=y +CONFIG_NF_CONNTRACK_FTP=y +CONFIG_NF_CONNTRACK_H323=y +CONFIG_NF_CONNTRACK_IRC=y +CONFIG_NF_CONNTRACK_NETBIOS_NS=y +CONFIG_NF_CONNTRACK_PPTP=y +CONFIG_NF_CONNTRACK_SANE=y +CONFIG_NF_CONNTRACK_TFTP=y +CONFIG_NF_CT_NETLINK=y +CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y +CONFIG_NETFILTER_XT_TARGET_CONNMARK=y +CONFIG_NETFILTER_XT_TARGET_CONNSECMARK=y +CONFIG_NETFILTER_XT_TARGET_DSCP=y +CONFIG_NETFILTER_XT_TARGET_IDLETIMER=y +CONFIG_NETFILTER_XT_TARGET_HARDIDLETIMER=y +CONFIG_NETFILTER_XT_TARGET_LOG=y +CONFIG_NETFILTER_XT_TARGET_MARK=y +CONFIG_NETFILTER_XT_TARGET_NFLOG=y +CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y +CONFIG_NETFILTER_XT_TARGET_NOTRACK=y +CONFIG_NETFILTER_XT_TARGET_TEE=y +CONFIG_NETFILTER_XT_TARGET_TPROXY=y +CONFIG_NETFILTER_XT_TARGET_TRACE=y +CONFIG_NETFILTER_XT_TARGET_SECMARK=y +CONFIG_NETFILTER_XT_TARGET_TCPMSS=y +CONFIG_NETFILTER_XT_MATCH_BPF=y +CONFIG_NETFILTER_XT_MATCH_COMMENT=y +CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y +CONFIG_NETFILTER_XT_MATCH_CONNMARK=y +CONFIG_NETFILTER_XT_MATCH_CONNTRACK=y +CONFIG_NETFILTER_XT_MATCH_DSCP=y +CONFIG_NETFILTER_XT_MATCH_ESP=y +CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y +CONFIG_NETFILTER_XT_MATCH_HELPER=y +CONFIG_NETFILTER_XT_MATCH_IPRANGE=y +# CONFIG_NETFILTER_XT_MATCH_L2TP is not set +CONFIG_NETFILTER_XT_MATCH_LENGTH=y +CONFIG_NETFILTER_XT_MATCH_LIMIT=y +CONFIG_NETFILTER_XT_MATCH_MAC=y +CONFIG_NETFILTER_XT_MATCH_MARK=y +CONFIG_NETFILTER_XT_MATCH_MULTIPORT=y +CONFIG_NETFILTER_XT_MATCH_OWNER=y +CONFIG_NETFILTER_XT_MATCH_POLICY=y +CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y +CONFIG_NETFILTER_XT_MATCH_QUOTA=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2=y +CONFIG_NETFILTER_XT_MATCH_QUOTA2_LOG=y +# CONFIG_NETFILTER_XT_MATCH_SCTP is not set +CONFIG_NETFILTER_XT_MATCH_SOCKET=y +CONFIG_NETFILTER_XT_MATCH_STATE=y +CONFIG_NETFILTER_XT_MATCH_STATISTIC=y +CONFIG_NETFILTER_XT_MATCH_STRING=y +CONFIG_NETFILTER_XT_MATCH_TIME=y +CONFIG_NETFILTER_XT_MATCH_U32=y +CONFIG_IP_NF_IPTABLES=y +CONFIG_IP_NF_MATCH_AH=y +CONFIG_IP_NF_MATCH_ECN=y +CONFIG_IP_NF_MATCH_RPFILTER=y +CONFIG_IP_NF_MATCH_TTL=y +CONFIG_IP_NF_FILTER=y +CONFIG_IP_NF_TARGET_REJECT=y +CONFIG_IP_NF_NAT=y +CONFIG_IP_NF_TARGET_MASQUERADE=y +CONFIG_IP_NF_TARGET_NETMAP=y +CONFIG_IP_NF_TARGET_REDIRECT=y +CONFIG_IP_NF_MANGLE=y +CONFIG_IP_NF_RAW=y +CONFIG_IP_NF_SECURITY=y +CONFIG_IP_NF_ARPTABLES=y +CONFIG_IP_NF_ARPFILTER=y +CONFIG_IP_NF_ARP_MANGLE=y +CONFIG_IP6_NF_IPTABLES=y +CONFIG_IP6_NF_MATCH_RPFILTER=y +CONFIG_IP6_NF_FILTER=y +CONFIG_IP6_NF_TARGET_REJECT=y +CONFIG_IP6_NF_MANGLE=y +CONFIG_IP6_NF_RAW=y +CONFIG_BRIDGE_NF_EBTABLES=y +CONFIG_BRIDGE_EBT_BROUTE=y +CONFIG_IP_SCTP=y +CONFIG_L2TP=y +CONFIG_L2TP_DEBUGFS=y +CONFIG_L2TP_V3=y +CONFIG_L2TP_IP=y +CONFIG_L2TP_ETH=y +CONFIG_BRIDGE=y +CONFIG_NET_SCHED=y +CONFIG_NET_SCH_HTB=y +CONFIG_NET_SCH_PRIO=y +CONFIG_NET_SCH_MULTIQ=y +CONFIG_NET_SCH_NETEM=y +CONFIG_NET_SCH_INGRESS=y +CONFIG_NET_CLS_FW=y +CONFIG_NET_CLS_U32=y +CONFIG_CLS_U32_MARK=y +CONFIG_NET_CLS_FLOW=y +CONFIG_NET_CLS_BPF=y +CONFIG_NET_EMATCH=y +CONFIG_NET_EMATCH_CMP=y +CONFIG_NET_EMATCH_NBYTE=y +CONFIG_NET_EMATCH_U32=y +CONFIG_NET_EMATCH_META=y +CONFIG_NET_EMATCH_TEXT=y +CONFIG_NET_CLS_ACT=y +CONFIG_NET_ACT_GACT=y +CONFIG_NET_ACT_MIRRED=y +CONFIG_NET_ACT_SKBEDIT=y +CONFIG_DNS_RESOLVER=y +CONFIG_QRTR=y +CONFIG_QRTR_SMD=y +CONFIG_BPF_JIT=y +CONFIG_SOCKEV_NLMCAST=y +CONFIG_BT=y +CONFIG_MSM_BT_POWER=y +CONFIG_BTFM_SLIM_WCN3990=y +CONFIG_CFG80211=y +CONFIG_CFG80211_INTERNAL_REGDB=y +CONFIG_RFKILL=y +# CONFIG_NFC_NQ is not set +CONFIG_FW_LOADER_USER_HELPER=y +CONFIG_FW_LOADER_USER_HELPER_FALLBACK=y +# CONFIG_FW_CACHE is not set +CONFIG_REGMAP_WCD_IRQ=y +CONFIG_REGMAP_ALLOW_WRITE_DEBUGFS=y +CONFIG_DMA_CMA=y +CONFIG_ZRAM=y +CONFIG_ZRAM_DEDUP=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=16 +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_SIZE=8192 +CONFIG_QSEECOM=y +CONFIG_UID_SYS_STATS=y +# CONFIG_FPR_FPC is not set +CONFIG_SCSI=y +CONFIG_BLK_DEV_SD=y +CONFIG_CHR_DEV_SG=y +CONFIG_CHR_DEV_SCH=y +CONFIG_SCSI_CONSTANTS=y +CONFIG_SCSI_LOGGING=y +CONFIG_SCSI_SCAN_ASYNC=y +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_SCSI_UFSHCD_PLATFORM is not set +# CONFIG_SCSI_UFS_QCOM is not set +# CONFIG_SCSI_UFSHCD_CMD_LOGGING is not set +# CONFIG_SCSI_UFS_CRYPTO is not set +# CONFIG_SCSI_UFS_CRYPTO_QTI is not set +CONFIG_MD=y +CONFIG_BLK_DEV_DM=y +CONFIG_DM_CRYPT=y +CONFIG_DM_DEFAULT_KEY=y +CONFIG_DM_SNAPSHOT=y +CONFIG_DM_UEVENT=y +CONFIG_DM_VERITY=y +CONFIG_DM_VERITY_FEC=y +CONFIG_NETDEVICES=y +CONFIG_BONDING=y +CONFIG_DUMMY=y +CONFIG_TUN=y +CONFIG_VETH=y +# CONFIG_NET_VENDOR_AURORA is not set +# CONFIG_NET_VENDOR_EZCHIP is not set +# CONFIG_NET_VENDOR_HISILICON is not set +# CONFIG_NET_VENDOR_MARVELL is not set +# CONFIG_NET_VENDOR_MELLANOX is not set +# CONFIG_NET_VENDOR_NETRONOME is not set +CONFIG_RMNET=y +# CONFIG_NET_VENDOR_ROCKER is not set +# CONFIG_NET_VENDOR_SYNOPSYS is not set +CONFIG_PHYLIB=y +CONFIG_PPP=y +CONFIG_PPP_BSDCOMP=y +CONFIG_PPP_DEFLATE=y +CONFIG_PPP_FILTER=y +CONFIG_PPP_MPPE=y +CONFIG_PPP_MULTILINK=y +CONFIG_PPPOE=y +CONFIG_PPTP=y +CONFIG_PPPOL2TP=y +CONFIG_PPP_ASYNC=y +CONFIG_PPP_SYNC_TTY=y +CONFIG_USB_RTL8152=y +CONFIG_WCNSS_MEM_PRE_ALLOC=y +CONFIG_CLD_LL_CORE=y +CONFIG_CNSS_GENL=y +CONFIG_INPUT_EVDEV=y +CONFIG_KEYBOARD_GPIO=y +# CONFIG_INPUT_MOUSE is not set +CONFIG_INPUT_JOYSTICK=y +CONFIG_JOYSTICK_XPAD=y +# CONFIG_JOYSTICK_XPAD_LEDS is not set +CONFIG_INPUT_TOUCHSCREEN=y +# CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_REFLASH is not set +# CONFIG_TOUCHSCREEN_SYNAPTICS_TCM_RECOVERY is not set +# CONFIG_TOUCHSCREEN_FTS is not set +# CONFIG_TOUCHSCREEN_NT36XXX is not set +CONFIG_TOUCHSCREEN_SITRONIX_TS=y +CONFIG_INPUT_MISC=y +CONFIG_INPUT_QPNP_POWER_ON=y +CONFIG_INPUT_UINPUT=y +# CONFIG_SERIO_SERPORT is not set +# CONFIG_VT is not set +# CONFIG_LEGACY_PTYS is not set +# CONFIG_DEVMEM is not set +CONFIG_SERIAL_MSM_GENI=y +CONFIG_SERIAL_MSM_GENI_HALF_SAMPLING=y +CONFIG_SERIAL_MSM_GENI_CONSOLE=y +CONFIG_TTY_PRINTK=y +CONFIG_HW_RANDOM=y +CONFIG_HW_RANDOM_MSM_LEGACY=y +CONFIG_DIAG_CHAR=y +CONFIG_MSM_ADSPRPC=y +CONFIG_MSM_RDBG=m +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_QCOM_GENI=y +CONFIG_SPI=y +CONFIG_SPI_QCOM_GENI=y +CONFIG_SPI_SPIDEV=y +CONFIG_SPMI=y +CONFIG_PINCTRL_QCOM_SPMI_PMIC=y +CONFIG_PINCTRL_BENGAL=y +# CONFIG_PINCTRL_KHAJE is not set +CONFIG_PINCTRL_SCUBA=y +CONFIG_GPIO_SYSFS=y +CONFIG_POWER_RESET_QCOM=y +CONFIG_POWER_RESET_XGENE=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_QPNP_SMB5=y +CONFIG_QPNP_SMBLITE=y +# CONFIG_SMB1355_SLAVE_CHARGER is not set +CONFIG_QPNP_QG=y +# CONFIG_SMB1398_CHARGER is not set +CONFIG_THERMAL=y +CONFIG_THERMAL_STATISTICS=y +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=10000 +CONFIG_THERMAL_WRITABLE_TRIPS=y +CONFIG_THERMAL_GOV_USER_SPACE=y +CONFIG_THERMAL_GOV_LOW_LIMITS=y +CONFIG_CPU_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +CONFIG_QCOM_SPMI_TEMP_ALARM=y +CONFIG_THERMAL_TSENS=y +CONFIG_QTI_ADC_TM=y +CONFIG_QTI_VIRTUAL_SENSOR=y +CONFIG_QTI_QMI_SENSOR=y +CONFIG_QTI_BCL_PMIC5=y +CONFIG_QTI_BCL_SOC_DRIVER=y +CONFIG_QTI_QMI_COOLING_DEVICE=y +CONFIG_QTI_THERMAL_LIMITS_DCVS=y +CONFIG_REGULATOR_COOLING_DEVICE=y +CONFIG_QTI_RPM_SMD_COOLING_DEVICE=y +CONFIG_QTI_CPU_ISOLATE_COOLING_DEVICE=y +CONFIG_QTI_LMH_CPU_VDD_COOLING_DEVICE=y +CONFIG_QTI_CX_IPEAK_COOLING_DEVICE=y +# CONFIG_MFD_I2C_PMIC is not set +CONFIG_MFD_SPMI_PMIC=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y +CONFIG_REGULATOR_PROXY_CONSUMER=y +CONFIG_REGULATOR_QCOM_SMD_RPM=y +CONFIG_REGULATOR_QPNP_LCDB=y +CONFIG_REGULATOR_REFGEN=y +CONFIG_REGULATOR_RPM_SMD=y +CONFIG_REGULATOR_STUB=y +# CONFIG_REGULATOR_PM8008 is not set +CONFIG_MEDIA_SUPPORT=y +CONFIG_MEDIA_CAMERA_SUPPORT=y +# CONFIG_MEDIA_DIGITAL_TV_SUPPORT is not set +CONFIG_MEDIA_CONTROLLER=y +CONFIG_VIDEO_V4L2_SUBDEV_API=y +CONFIG_VIDEO_ADV_DEBUG=y +CONFIG_VIDEO_FIXED_MINOR_RANGES=y +CONFIG_V4L_PLATFORM_DRIVERS=y +# CONFIG_DVB_MPQ is not set +# CONFIG_DVB_MPQ_DEMUX is not set +# CONFIG_DVB_MPQ_SW is not set +CONFIG_VIDEO_V4L2_VIDEOBUF2_CORE=y +CONFIG_DRM=y +CONFIG_BACKLIGHT_LCD_SUPPORT=y +CONFIG_BACKLIGHT_CLASS_DEVICE=y +CONFIG_LOGO=y +# CONFIG_LOGO_LINUX_MONO is not set +# CONFIG_LOGO_LINUX_VGA16 is not set +CONFIG_SOUND=y +CONFIG_SND=y +CONFIG_SND_DYNAMIC_MINORS=y +CONFIG_SND_USB_AUDIO=y +CONFIG_SND_USB_AUDIO_QMI=y +CONFIG_SND_SOC=y +CONFIG_UHID=y +# CONFIG_HID_APPLE is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_MAGICMOUSE is not set +CONFIG_HID_MICROSOFT=y +CONFIG_HID_MULTITOUCH=y +# CONFIG_HID_NINTENDO is not set +# CONFIG_HID_PLANTRONICS is not set +CONFIG_HID_SONY=y +CONFIG_USB_HIDDEV=y +CONFIG_USB_ANNOUNCE_NEW_DEVICES=y +CONFIG_USB_XHCI_HCD=y +CONFIG_USB_STORAGE=y +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_OF_SIMPLE is not set +CONFIG_USB_DWC3_MSM=y +CONFIG_USB_EHSET_TEST_FIXTURE=y +CONFIG_USB_LINK_LAYER_TEST=y +CONFIG_NOP_USB_XCEIV=y +CONFIG_USB_MSM_SSPHY_QMP=y +CONFIG_MSM_QUSB_PHY=y +CONFIG_MSM_HSUSB_PHY=y +CONFIG_USB_QCOM_EMU_PHY=y +CONFIG_USB_GADGET=y +CONFIG_USB_GADGET_VBUS_DRAW=900 +CONFIG_USB_CONFIGFS=y +CONFIG_USB_CONFIGFS_UEVENT=y +CONFIG_USB_CONFIGFS_NCM=y +CONFIG_USB_CONFIGFS_MASS_STORAGE=y +CONFIG_USB_CONFIGFS_F_FS=y +CONFIG_USB_CONFIGFS_F_ACC=y +CONFIG_USB_CONFIGFS_F_AUDIO_SRC=y +CONFIG_USB_CONFIGFS_F_MIDI=y +CONFIG_USB_CONFIGFS_F_HID=y +CONFIG_USB_CONFIGFS_F_DIAG=y +CONFIG_USB_CONFIGFS_F_CDEV=y +CONFIG_USB_CONFIGFS_F_CCID=y +CONFIG_USB_CONFIGFS_F_QDSS=y +CONFIG_USB_CONFIGFS_F_GSI=y +CONFIG_USB_CONFIGFS_F_MTP=y +CONFIG_USB_CONFIGFS_F_PTP=y +CONFIG_TYPEC=y +CONFIG_USB_PD_POLICY=y +CONFIG_QPNP_USB_PDPHY=y +CONFIG_MMC=y +CONFIG_MMC_BLOCK_MINORS=32 +CONFIG_MMC_BLOCK_DEFERRED_RESUME=y +CONFIG_MMC_IPC_LOGGING=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_MSM=y +CONFIG_MMC_CQHCI_CRYPTO=y +CONFIG_MMC_CQHCI_CRYPTO_QTI=y +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +CONFIG_LEDS_CLASS_FLASH=y +#CONFIG_LEDS_AW2016 is not set +CONFIG_LEDS_AW91XXX=y +# CONFIG_LEDS_QTI_FLASH is not set +CONFIG_LEDS_GPIO=y +CONFIG_LEDS_PWM=y +CONFIG_LEDS_QTI_TRI_LED=y +# CONFIG_LEDS_QPNP_FLASH_V2 is not set +# CONFIG_LEDS_QPNP_VIBRATOR_LDO is not set +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_EDAC=y +CONFIG_EDAC_CORTEX_ARM64=y +CONFIG_EDAC_CORTEX_ARM64_DBE_IRQ_ONLY=y +CONFIG_EDAC_CORTEX_ARM64_PANIC_ON_UE=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_DRV_PM8XXX=y +CONFIG_DMADEVICES=y +CONFIG_QCOM_GPI_DMA=y +CONFIG_QCOM_GPI_DMA_DEBUG=y +CONFIG_UIO=y +CONFIG_UIO_MSM_SHAREDMEM=y +CONFIG_STAGING=y +CONFIG_ASHMEM=y +CONFIG_ION=y +CONFIG_ION_SYSTEM_HEAP=y +CONFIG_ION_POOL_AUTO_REFILL=y +CONFIG_QPNP_REVID=y +CONFIG_SPS=y +CONFIG_SPS_SUPPORT_NDP_BAM=y +CONFIG_IPA3=y +CONFIG_IPA_WDI_UNIFIED_API=y +CONFIG_RMNET_IPA3=y +CONFIG_RNDIS_IPA=y +CONFIG_IPA_UT=y +CONFIG_USB_BAM=y +CONFIG_QCOM_GENI_SE=y +CONFIG_QCOM_CLK_SMD_RPM=y +CONFIG_SPMI_PMIC_CLKDIV=y +CONFIG_SM_GPUCC_BENGAL=y +CONFIG_SM_DISPCC_BENGAL=y +CONFIG_SM_DEBUGCC_BENGAL=y +CONFIG_QM_DISPCC_SCUBA=y +CONFIG_QM_GPUCC_SCUBA=y +CONFIG_QM_DEBUGCC_SCUBA=y +# CONFIG_SM_GPUCC_KHAJE is not set +# CONFIG_SM_DISPCC_KHAJE is not set +# CONFIG_SM_DEBUGCC_KHAJE is not set +CONFIG_HWSPINLOCK=y +CONFIG_HWSPINLOCK_QCOM=y +CONFIG_MAILBOX=y +CONFIG_QCOM_APCS_IPC=y +CONFIG_IOMMU_IO_PGTABLE_FAST=y +CONFIG_ARM_SMMU=y +CONFIG_IOMMU_TLBSYNC_DEBUG=y +CONFIG_ARM_SMMU_TESTBUS_DUMP=y +CONFIG_QCOM_LAZY_MAPPING=y +CONFIG_IOMMU_DEBUG=y +CONFIG_IOMMU_TESTS=y +CONFIG_RPMSG_CHAR=y +CONFIG_RPMSG_QCOM_GLINK_RPM=y +CONFIG_RPMSG_QCOM_GLINK_SMEM=y +CONFIG_MSM_RPM_SMD=y +CONFIG_QCOM_COMMAND_DB=y +CONFIG_QCOM_MEM_OFFLINE=y +CONFIG_OVERRIDE_MEMORY_LIMIT=y +CONFIG_QCOM_RUN_QUEUE_STATS=y +CONFIG_QCOM_MDT_LOADER=y +CONFIG_QPNP_PBS=y +CONFIG_QCOM_QMI_HELPERS=y +CONFIG_QCOM_SMEM=y +CONFIG_QCOM_SMD_RPM=y +CONFIG_QCOM_EARLY_RANDOM=y +CONFIG_QCOM_MEMORY_DUMP_V2=y +CONFIG_QCOM_SMP2P=y +CONFIG_SETUP_SSR_NOTIF_TIMEOUTS=y +CONFIG_SSR_SYSMON_NOTIF_TIMEOUT=20000 +CONFIG_SSR_SUBSYS_NOTIF_TIMEOUT=40000 +CONFIG_PANIC_ON_SSR_NOTIF_TIMEOUT=y +CONFIG_QCOM_SECURE_BUFFER=y +CONFIG_MSM_SERVICE_LOCATOR=y +CONFIG_MSM_SERVICE_NOTIFIER=y +CONFIG_MSM_SUBSYSTEM_RESTART=y +CONFIG_MSM_PIL=y +CONFIG_MSM_SYSMON_QMI_COMM=y +CONFIG_MSM_PIL_SSR_GENERIC=y +CONFIG_MSM_BOOT_STATS=y +CONFIG_QCOM_DCC_V2=y +CONFIG_QCOM_EUD=y +CONFIG_QCOM_MINIDUMP=y +CONFIG_MSM_CORE_HANG_DETECT=y +CONFIG_MSM_GLADIATOR_HANG_DETECT=y +CONFIG_MSM_GLADIATOR_ERP=y +CONFIG_PANIC_ON_GLADIATOR_ERROR=y +# CONFIG_QCOM_FSA4480_I2C is not set +CONFIG_QCOM_WATCHDOG_V2=y +CONFIG_QCOM_INITIAL_LOGBUF=y +CONFIG_QCOM_FORCE_WDOG_BITE_ON_PANIC=y +CONFIG_QCOM_BUS_SCALING=y +CONFIG_QCOM_GLINK=y +CONFIG_QCOM_GLINK_PKT=y +CONFIG_QCOM_SMP2P_SLEEPSTATE=y +CONFIG_MSM_CDSP_LOADER=y +CONFIG_QCOM_SMCINVOKE=y +CONFIG_MSM_EVENT_TIMER=y +CONFIG_MSM_PM=y +CONFIG_QTI_L2_REUSE=y +CONFIG_QTI_RPM_STATS_LOG=y +CONFIG_QTEE_SHM_BRIDGE=y +CONFIG_MEM_SHARE_QMI_SERVICE=y +CONFIG_MSM_PERFORMANCE=y +CONFIG_QMP_DEBUGFS_CLIENT=y +CONFIG_QCOM_CDSP_RM=y +CONFIG_QCOM_QHEE_ENABLE_MEM_PROTECTION=y +CONFIG_QCOM_CX_IPEAK=y +CONFIG_QTI_CRYPTO_COMMON=y +CONFIG_QTI_CRYPTO_TZ=y +CONFIG_QTI_HW_KEY_MANAGER=y +CONFIG_ICNSS=y +CONFIG_ICNSS_DEBUG=y +CONFIG_ICNSS_QMI=y +CONFIG_DEVFREQ_GOV_PASSIVE=y +CONFIG_QCOM_BIMC_BWMON=y +CONFIG_ARM_MEMLAT_MON=y +CONFIG_DEVFREQ_GOV_QCOM_BW_HWMON=y +CONFIG_DEVFREQ_GOV_MEMLAT=y +CONFIG_ARM_QCOM_DEVFREQ_FW=y +CONFIG_DEVFREQ_SIMPLE_DEV=y +CONFIG_QCOM_DEVFREQ_DEVBW=y +CONFIG_IIO=y +CONFIG_QCOM_SPMI_ADC5=y +CONFIG_PWM=y +CONFIG_PWM_QTI_LPG=y +CONFIG_ARM_GIC_V3_ACL=y +CONFIG_QCOM_MPM=y +# CONFIG_PHY_XGENE is not set +CONFIG_QCOM_L2_COUNTERS=y +CONFIG_RAS=y +CONFIG_ANDROID=y +CONFIG_ANDROID_BINDER_IPC=y +CONFIG_ANDROID_BINDERFS=y +# CONFIG_NVMEM_SYSFS is not set +CONFIG_QCOM_QFPROM=y +CONFIG_NVMEM_SPMI_SDAM=y +CONFIG_SLIMBUS_MSM_NGD=y +CONFIG_QCOM_KGSL=y +CONFIG_EXT4_FS=y +CONFIG_EXT4_FS_POSIX_ACL=y +CONFIG_EXT4_FS_SECURITY=y +CONFIG_F2FS_FS=y +CONFIG_F2FS_FS_SECURITY=y +CONFIG_F2FS_CHECK_FS=y +CONFIG_FS_ENCRYPTION=y +CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y +CONFIG_FS_VERITY=y +CONFIG_FS_VERITY_BUILTIN_SIGNATURES=y +CONFIG_QUOTA=y +CONFIG_QUOTA_NETLINK_INTERFACE=y +CONFIG_QFMT_V2=y +CONFIG_FUSE_FS=y +CONFIG_OVERLAY_FS=y +CONFIG_INCREMENTAL_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_EFIVAR_FS=y +CONFIG_SDCARD_FS=y +# CONFIG_NETWORK_FILESYSTEMS is not set +CONFIG_NLS_CODEPAGE_437=y +CONFIG_NLS_ISO8859_1=y +CONFIG_SECURITY=y +CONFIG_HARDENED_USERCOPY=y +CONFIG_HARDENED_USERCOPY_PAGESPAN=y +CONFIG_FORTIFY_SOURCE=y +CONFIG_STATIC_USERMODEHELPER=y +CONFIG_STATIC_USERMODEHELPER_PATH="" +CONFIG_SECURITY_SELINUX=y +CONFIG_SECURITY_SMACK=y +CONFIG_CRYPTO_GCM=y +CONFIG_CRYPTO_XCBC=y +CONFIG_CRYPTO_TWOFISH=y +CONFIG_CRYPTO_ANSI_CPRNG=y +CONFIG_CRYPTO_DEV_QCE=y +CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y +CONFIG_CRYPTO_DEV_QCRYPTO=y +CONFIG_CRYPTO_DEV_QCEDEV=y +CONFIG_PRINTK_TIME=y +CONFIG_DYNAMIC_DEBUG=y +CONFIG_DEBUG_CONSOLE_UNHASHED_POINTERS=y +CONFIG_DEBUG_MODULE_LOAD_INFO=y +CONFIG_DEBUG_INFO=y +CONFIG_PAGE_OWNER=y +CONFIG_PAGE_OWNER_ENABLE_DEFAULT=y +CONFIG_DEBUG_SECTION_MISMATCH=y +# CONFIG_SECTION_MISMATCH_WARN_ONLY is not set +CONFIG_MAGIC_SYSRQ=y +CONFIG_DEBUG_PAGEALLOC=y +CONFIG_SLUB_DEBUG_PANIC_ON=y +CONFIG_DEBUG_PANIC_ON_OOM=y +CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y +CONFIG_PAGE_POISONING=y +CONFIG_PAGE_POISONING_ENABLE_DEFAULT=y +CONFIG_SLUB_DEBUG_ON=y +CONFIG_DEBUG_KMEMLEAK=y +CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE=4000 +CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y +CONFIG_DEBUG_STACK_USAGE=y +CONFIG_DEBUG_MEMORY_INIT=y +CONFIG_SOFTLOCKUP_DETECTOR=y +CONFIG_WQ_WATCHDOG=y +CONFIG_PANIC_TIMEOUT=5 +CONFIG_PANIC_ON_SCHED_BUG=y +CONFIG_PANIC_ON_RT_THROTTLING=y +CONFIG_SCHEDSTATS=y +CONFIG_SCHED_STACK_END_CHECK=y +CONFIG_DEBUG_SPINLOCK=y +CONFIG_DEBUG_MUTEXES=y +CONFIG_DEBUG_ATOMIC_SLEEP=y +CONFIG_LOCK_TORTURE_TEST=m +CONFIG_DEBUG_SG=y +CONFIG_DEBUG_NOTIFIERS=y +CONFIG_DEBUG_CREDENTIALS=y +CONFIG_RCU_TORTURE_TEST=m +CONFIG_FAULT_INJECTION=y +CONFIG_FAIL_PAGE_ALLOC=y +CONFIG_FAULT_INJECTION_DEBUG_FS=y +CONFIG_FAULT_INJECTION_STACKTRACE_FILTER=y +CONFIG_IPC_LOGGING=y +CONFIG_QCOM_RTB=y +CONFIG_QCOM_RTB_SEPARATE_CPUS=y +CONFIG_FUNCTION_TRACER=y +CONFIG_PREEMPTIRQ_EVENTS=y +CONFIG_IRQSOFF_TRACER=y +CONFIG_PREEMPT_TRACER=y +CONFIG_BLK_DEV_IO_TRACE=y +CONFIG_LKDTM=m +CONFIG_ATOMIC64_SELFTEST=m +CONFIG_TEST_USER_COPY=m +CONFIG_MEMTEST=y +CONFIG_BUG_ON_DATA_CORRUPTION=y +CONFIG_PANIC_ON_DATA_CORRUPTION=y +CONFIG_ARM64_STRICT_BREAK_BEFORE_MAKE=y +CONFIG_CORESIGHT=y +CONFIG_CORESIGHT_LINK_AND_SINK_TMC=y +CONFIG_CORESIGHT_SOURCE_ETM4X=y +CONFIG_CORESIGHT_DYNAMIC_REPLICATOR=y +CONFIG_CORESIGHT_STM=y +CONFIG_CORESIGHT_CTI=y +CONFIG_CORESIGHT_TPDA=y +CONFIG_CORESIGHT_TPDM=y +CONFIG_CORESIGHT_HWEVENT=y +CONFIG_CORESIGHT_DUMMY=y +CONFIG_CORESIGHT_REMOTE_ETM=y +CONFIG_CORESIGHT_TGU=y +CONFIG_SONY_CXD5610=y +CONFIG_NORDIC_NRF52833=y diff --git a/drivers/bluetooth/Kconfig b/drivers/bluetooth/Kconfig index 3e5f9c86f433..8695b4f78f7c 100644 --- a/drivers/bluetooth/Kconfig +++ b/drivers/bluetooth/Kconfig @@ -451,3 +451,10 @@ config BT_SLIM_QCA6390 chip initialization process and control. endmenu + +config NORDIC_NRF52833 + bool "NORDIC_NRF52833" + default n + help + Nordic nrf52833 + diff --git a/drivers/bluetooth/Makefile b/drivers/bluetooth/Makefile index 6354ccdb6504..3e2f8901c5db 100644 --- a/drivers/bluetooth/Makefile +++ b/drivers/bluetooth/Makefile @@ -51,3 +51,5 @@ hci_uart-$(CONFIG_BT_HCIUART_QCA) += hci_qca.o hci_uart-$(CONFIG_BT_HCIUART_AG6XX) += hci_ag6xx.o hci_uart-$(CONFIG_BT_HCIUART_MRVL) += hci_mrvl.o hci_uart-objs := $(hci_uart-y) + +obj-$(CONFIG_NORDIC_NRF52833) += nrf52833.o \ No newline at end of file diff --git a/drivers/bluetooth/nrf52833.c b/drivers/bluetooth/nrf52833.c new file mode 100644 index 000000000000..d6800630579a --- /dev/null +++ b/drivers/bluetooth/nrf52833.c @@ -0,0 +1,823 @@ +/* + * power control for Nordic NRF52833 drivers + * + * Copyright (C) 2023, Thundercomm Enterprise Inc. + */ + + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* S_IRUSR, S_IWUSR */ +#include + +#define DEVNAME "nordic_nrf52833" + + +struct nordic_ctl_data { + struct device *dev; + struct pinctrl *pctrl; + struct pinctrl_state *pins_antplus_power_on; + struct pinctrl_state *pins_antplus_power_off; + struct pinctrl_state *pins_antplus_enable_hard_reset; + struct pinctrl_state *pins_antplus_disable_hard_reset; + struct pinctrl_state *pins_antplus_enable_dtm; + struct pinctrl_state *pins_antplus_disable_dtm; + struct pinctrl_state *pins_sramlink_power_on; + struct pinctrl_state *pins_sramlink_power_off; + struct pinctrl_state *pins_sramlink_enable_hard_reset; + struct pinctrl_state *pins_sramlink_disable_hard_reset; + struct pinctrl_state *pins_sramlink_enable_dtm; + struct pinctrl_state *pins_sramlink_disable_dtm; + + int rf_en_ant; + int rf_reset_ant; + int dtm_pud_ant; + int rf_en_sram; + int rf_reset_sram; + int dtm_pud_sram; + + struct regulator_bulk_data regulator[1]; +}; + +static struct nordic_ctl_data *nor; + + +static ssize_t pwrctl_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + char *all_cmd = "\n\r [[[ SUPPORTED COMMANDS ]]] \ + \n\r antplus_power_on, \ + \n\r antplus_power_off, \ + \n\r antplus_hard_reset, \ + \n\r antplus_enable_dfu, \ + \n\r sramlink_power_on, \ + \n\r sramlink_power_off, \ + \n\r sramlink_hard_reset, \ + \n\r sramlink_enable_dfu, \ + \n\r regulator_l16_on, \ + \n\r regulator_l16_off, \ + \n\r antplus_en_pin_high, \ + \n\r antplus_en_pin_low, \ + \n\r antplus_reset_pin_high, \ + \n\r antplus_reset_pin_low, \ + \n\r antplus_dtm_pin_high, \ + \n\r antplus_dtm_pin_low, \ + \n\r sramlink_en_pin_high, \ + \n\r sramlink_en_pin_low, \ + \n\r sramlink_reset_pin_high, \ + \n\r sramlink_reset_pin_low, \ + \n\r sramlink_dtm_pin_high, \ + \n\r sramlink_dtm_pin_low"; + + return snprintf(buf, PAGE_SIZE, + "%s \ + \n\r\n\r\n\r %s \ + \n\r regulator_l16 : %x \ + \n\r regulator_l16_mode : %x \ + \n\r rf_en_ant : %x \ + \n\r rf_reset_ant : %x \ + \n\r dtm_pud_ant : %x \ + \n\r rf_en_sram : %x \ + \n\r rf_reset_sram : %x \ + \n\r dtm_pud_sram : %x \ + \n\r \ + \n\r \ + \n\r ", + all_cmd, + "[[[ SHOW ALL PINS STATE ]]]", + regulator_is_enabled(nor->regulator->consumer), + regulator_get_mode(nor->regulator->consumer), + gpio_get_value(nor->rf_en_ant), + gpio_get_value(nor->rf_reset_ant), + gpio_get_value(nor->dtm_pud_ant), + gpio_get_value(nor->rf_en_sram), + gpio_get_value(nor->rf_reset_sram), + gpio_get_value(nor->dtm_pud_sram)); +} + +#define PWR_CMD_MAX 50 +static ssize_t pwrctl_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t size) +{ + char pwr_cmd[PWR_CMD_MAX]; + ssize_t ret = 0; + + + strlcpy(pwr_cmd, buf, sizeof(pwr_cmd)); + if (!strncmp(pwr_cmd, "antplus_power_on", strlen("antplus_power_on"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_power_on); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + mdelay(50); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_disable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_disable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_power_off", strlen("antplus_power_off"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_enable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_enable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + mdelay(50); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_power_off); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_hard_reset", strlen("antplus_hard_reset"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_enable_hard_reset); + if (ret < 0) { + pr_err("antplus_enable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + + mdelay(1); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_disable_hard_reset); + if (ret < 0) { + pr_err("antplus_disable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_enable_dfu", strlen("antplus_enable_dfu"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_enable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + mdelay(200); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_enable_hard_reset); + if (ret < 0) { + pr_err("antplus_enable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + + mdelay(500); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_disable_hard_reset); + if (ret < 0) { + pr_err("antplus_disable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + + mdelay(500); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_disable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_power_on", strlen("sramlink_power_on"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_power_on); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + mdelay(50); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_disable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_disable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_power_off", strlen("sramlink_power_off"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_enable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_enable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + mdelay(50); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_power_off); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_hard_reset", strlen("sramlink_hard_reset"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_enable_hard_reset); + if (ret < 0) { + pr_err("sramlink_enable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + + mdelay(1); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_disable_hard_reset); + if (ret < 0) { + pr_err("sramlink_disable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_enable_dfu", strlen("sramlink_enable_dfu"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_enable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + + mdelay(200); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_enable_hard_reset); + if (ret < 0) { + pr_err("antplus_enable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + + mdelay(500); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_disable_hard_reset); + if (ret < 0) { + pr_err("sramlink_disable_hard_reset state for pinctrl failed with %d\n", ret); + goto error_rt; + } + + mdelay(500); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_disable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "regulator_l16_on", strlen("regulator_l16_on"))) { + ret = regulator_bulk_enable(ARRAY_SIZE(nor->regulator), nor->regulator); + if (ret) { + pr_err("Failed to enable regulators\n"); + goto error_rt; + } + + ret = regulator_set_mode(nor->regulator->consumer, REGULATOR_MODE_NORMAL); + if (ret) { + pr_err("Failed to regulator mode\n"); + goto error_rt; + } + + mdelay(1000); + + } else if (!strncmp(pwr_cmd, "regulator_l16_off", strlen("regulator_l16_off"))) { + ret = regulator_bulk_disable(ARRAY_SIZE(nor->regulator), nor->regulator); + if (ret) { + pr_err("Failed to disable regulators\n"); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_en_pin_high", strlen("antplus_en_pin_high"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_power_on); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_en_pin_low", strlen("antplus_en_pin_low"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_power_off); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_reset_pin_high", strlen("antplus_reset_pin_high"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_disable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_reset_pin_low", strlen("antplus_reset_pin_low"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_enable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_dtm_pin_high", strlen("antplus_dtm_pin_high"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_disable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "antplus_dtm_pin_low", strlen("antplus_dtm_pin_low"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_enable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_en_pin_high", strlen("sramlink_en_pin_high"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_power_on); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_en_pin_low", strlen("sramlink_en_pin_low"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_power_off); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_reset_pin_high", strlen("sramlink_reset_pin_high"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_disable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_reset_pin_low", strlen("sramlink_reset_pin_low"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_enable_hard_reset); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_dtm_pin_high", strlen("sramlink_dtm_pin_high"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_disable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "sramlink_dtm_pin_low", strlen("sramlink_dtm_pin_low"))) { + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_enable_dtm); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else { + pr_err("%s: ERR: incorrect cmd: %s\n", __func__, pwr_cmd); + goto error_rt; + } + return strlen(buf); +error_rt: + return -EINVAL; +} +static DEVICE_ATTR_RW(pwrctl); + +static struct device_attribute *nordic_ctl_attrs[] = { + &dev_attr_pwrctl, + NULL +}; + +int nordic_ctl_create_sysfs(struct device *dev) +{ + int r, t; + + for (t = 0; nordic_ctl_attrs[t]; t++) { + r = device_create_file(dev, nordic_ctl_attrs[t]); + if (r) { + return r; + } + } + + return 0; +} +int nordic_ctl_remove_sysfs(struct device *dev) +{ + int t; + pr_info("%s(#%d)\n", __func__, __LINE__); + for (t = 0; nordic_ctl_attrs[t]; t++) { + device_remove_file(dev, nordic_ctl_attrs[t]); + } + + return 0; +} +static int nrf52833_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct device_node *np = pdev->dev.of_node; + int ret; + + + pr_info("nrf52833_probe\n"); + + nor = devm_kzalloc(dev, sizeof(struct nordic_ctl_data), GFP_KERNEL); + if (!nor) { + ret = -ENOMEM; + pr_err("not enough memory for driver data\n"); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto out; + } + nor->dev = dev; + + nor->regulator[0].supply = "nordic,vdd_l16"; + ret = devm_regulator_bulk_get(&pdev->dev, ARRAY_SIZE(nor->regulator), nor->regulator); + if (ret) { + pr_err("Failed to get regulators, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_bulk_get; + } + + ret = regulator_bulk_enable(ARRAY_SIZE(nor->regulator), nor->regulator); + if (ret) { + pr_err("Failed to enable regulators, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_enable_regulator_l16; + } + + ret = regulator_set_mode(nor->regulator->consumer, REGULATOR_MODE_NORMAL); + if (ret) { + pr_err("Failed to regulator mode, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_set_regulator_l16; + } + + nor->pctrl = devm_pinctrl_get(dev); + if (IS_ERR_OR_NULL(nor->pctrl)) { + ret = PTR_ERR(nor->pctrl); + pr_err("can not get pinctrl, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_get; + } + + + nor->pins_antplus_power_on = pinctrl_lookup_state( + nor->pctrl, "antplus_power_on"); + if (IS_ERR_OR_NULL(nor->pins_antplus_power_on)) { + ret = PTR_ERR(nor->pins_antplus_power_on); + pr_err("Could not get antplus_power_on pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->pins_sramlink_power_on = pinctrl_lookup_state( + nor->pctrl, "sramlink_power_on"); + if (IS_ERR_OR_NULL(nor->pins_sramlink_power_on)) { + ret = PTR_ERR(nor->pins_sramlink_power_on); + pr_err("Could not get sramlink_power_on pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->pins_antplus_power_off = pinctrl_lookup_state( + nor->pctrl, "antplus_power_off"); + if (IS_ERR_OR_NULL(nor->pins_antplus_power_off)) { + ret = PTR_ERR(nor->pins_antplus_power_off); + pr_err("Could not get antplus_power_off pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->pins_sramlink_power_off = pinctrl_lookup_state( + nor->pctrl, "sramlink_power_off"); + if (IS_ERR_OR_NULL(nor->pins_sramlink_power_off)) { + ret = PTR_ERR(nor->pins_sramlink_power_off); + pr_err("Could not get sramlink_power_off pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->pins_antplus_enable_hard_reset = pinctrl_lookup_state( + nor->pctrl, "antplus_enable_hard_reset"); + if (IS_ERR_OR_NULL(nor->pins_antplus_enable_hard_reset)) { + ret = PTR_ERR(nor->pins_antplus_enable_hard_reset); + pr_err("Could not get antplus_enable_hard_reset pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->pins_sramlink_enable_hard_reset = pinctrl_lookup_state( + nor->pctrl, "sramlink_enable_hard_reset"); + if (IS_ERR_OR_NULL(nor->pins_sramlink_enable_hard_reset)) { + ret = PTR_ERR(nor->pins_sramlink_enable_hard_reset); + pr_err("Could not get sramlink_enable_hard_reset pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->pins_antplus_disable_hard_reset = pinctrl_lookup_state( + nor->pctrl, "antplus_disable_hard_reset"); + if (IS_ERR_OR_NULL(nor->pins_antplus_disable_hard_reset)) { + ret = PTR_ERR(nor->pins_antplus_disable_hard_reset); + pr_err("Could not get antplus_disable_hard_reset pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->pins_sramlink_disable_hard_reset = pinctrl_lookup_state( + nor->pctrl, "sramlink_disable_hard_reset"); + if (IS_ERR_OR_NULL(nor->pins_sramlink_disable_hard_reset)) { + ret = PTR_ERR(nor->pins_sramlink_disable_hard_reset); + pr_err("Could not get sramlink_disable_hard_reset pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->pins_antplus_disable_dtm = pinctrl_lookup_state( + nor->pctrl, "antplus_disable_dtm"); + if (IS_ERR_OR_NULL(nor->pins_antplus_disable_dtm)) { + ret = PTR_ERR(nor->pins_antplus_disable_dtm); + pr_err("Could not get antplus_disable_dtm pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->pins_antplus_enable_dtm = pinctrl_lookup_state( + nor->pctrl, "antplus_enable_dtm"); + if (IS_ERR_OR_NULL(nor->pins_antplus_enable_dtm)) { + ret = PTR_ERR(nor->pins_antplus_enable_dtm); + pr_err("Could not get antplus_enable_dtm pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->pins_sramlink_disable_dtm = pinctrl_lookup_state( + nor->pctrl, "sramlink_disable_dtm"); + if (IS_ERR_OR_NULL(nor->pins_sramlink_disable_dtm)) { + ret = PTR_ERR(nor->pins_sramlink_disable_dtm); + pr_err("Could not get sramlink_disable_dtm pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->pins_sramlink_enable_dtm = pinctrl_lookup_state( + nor->pctrl, "sramlink_enable_dtm"); + if (IS_ERR_OR_NULL(nor->pins_sramlink_enable_dtm)) { + ret = PTR_ERR(nor->pins_sramlink_enable_dtm); + pr_err("Could not get sramlink_enable_dtm pinstates, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + nor->rf_en_ant = of_get_named_gpio(np, "nrf52833_nRF_EN_ANT,gpio", 0); + if (nor->rf_en_ant == -EPROBE_DEFER || !gpio_is_valid(nor->rf_en_ant)) { + pr_err("Could not probe nrf52833_nRF_EN_ANT,gpio\n"); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->rf_reset_ant = of_get_named_gpio(np, "nrf52833_nRF_RESET_ANT,gpio", 0); + if (nor->rf_reset_ant == -EPROBE_DEFER || !gpio_is_valid(nor->rf_reset_ant)) { + pr_err("Could not probe nrf52833_nRF_RESET_ANT,gpio\n"); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->dtm_pud_ant = of_get_named_gpio(np, "nrf52833_DTM_PUD_ANT,gpio", 0); + if (nor->dtm_pud_ant == -EPROBE_DEFER || !gpio_is_valid(nor->dtm_pud_ant)) { + pr_err("Could not probe nrf52833_DTM_PUD_ANT,gpio\n"); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->rf_en_sram = of_get_named_gpio(np, "nrf52833_nRF_EN_SRAM,gpio", 0); + if (nor->rf_en_sram == -EPROBE_DEFER || !gpio_is_valid(nor->rf_en_sram)) { + pr_err("Could not probe nrf52833_nRF_EN_SRAM,gpio\n"); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->rf_reset_sram = of_get_named_gpio(np, "nrf52833_nRF_RESET_SRAM,gpio", 0); + if (nor->rf_reset_sram == -EPROBE_DEFER || !gpio_is_valid(nor->rf_reset_sram)) { + pr_err("Could not probe nrf52833_nRF_RESET_SRAM,gpio\n"); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + nor->dtm_pud_sram = of_get_named_gpio(np, "nrf52833_DTM_PUD_SRAM,gpio", 0); + if (nor->dtm_pud_sram == -EPROBE_DEFER || !gpio_is_valid(nor->dtm_pud_sram)) { + pr_err("Could not probe nrf52833_DTM_PUD_SRAM,gpio\n"); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_pinctrl_lookup; + } + + + ret = nordic_ctl_create_sysfs(dev); + if (ret) { + pr_err("%s : register failed, ret:%x\n", ret); + pr_err("%s(#%d)\n", __func__, __LINE__); + goto err_remove_sysfs; + } + + pr_info("nrf52833_probe exit \n"); + return 0; + +err_remove_sysfs: + nordic_ctl_remove_sysfs(dev); +err_pinctrl_lookup: + if (nor->pctrl) + devm_pinctrl_put(nor->pctrl); +err_pinctrl_get: + nor->pins_antplus_power_on = NULL; + nor->pins_antplus_power_off = NULL; + nor->pins_antplus_enable_hard_reset = NULL; + nor->pins_antplus_disable_hard_reset = NULL; + nor->pins_antplus_enable_dtm = NULL; + nor->pins_antplus_disable_dtm = NULL; + nor->pins_sramlink_power_on = NULL; + nor->pins_sramlink_power_off = NULL; + nor->pins_sramlink_enable_hard_reset = NULL; + nor->pins_sramlink_disable_hard_reset = NULL; + nor->pins_sramlink_enable_dtm = NULL; + nor->pins_sramlink_disable_dtm = NULL; + nor->rf_en_ant = 0; + nor->rf_reset_ant = 0; + nor->dtm_pud_ant = 0; + nor->rf_en_sram = 0; + nor->rf_reset_sram = 0; + nor->dtm_pud_sram = 0; +err_set_regulator_l16: + regulator_bulk_disable(ARRAY_SIZE(nor->regulator), nor->regulator); + regulator_put(nor->regulator->consumer); +err_enable_regulator_l16: + regulator_bulk_free(ARRAY_SIZE(nor->regulator), nor->regulator); +err_bulk_get: + devm_kfree(dev, nor); +out: + return ret; +} + +#ifdef CONFIG_PM + +static int nrf52833_suspend(struct platform_device *pdev, pm_message_t state) +{ + int ret = 0; + + pr_info("nrf52833 receive suspend notify\n"); + + return ret; +} + + +static int nrf52833_resume(struct platform_device *pdev) +{ + int ret = 0; + + pr_info("nrf52833 receive resume notify\n"); + + return ret; +} + +void nrf52833_shutdown(struct platform_device *pdev) +{ + int ret = 0; + + pr_info("nrf52833 receive shutdown notify\n"); + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_antplus_power_off); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", "pins_antplus_power_off", ret); + } + + ret = pinctrl_select_state(nor->pctrl, + nor->pins_sramlink_power_off); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", "pins_sramlink_power_off", ret); + } +} +#endif + +static const struct of_device_id nrf52833_match_ids[] = { + { .compatible = "nordic,nrf52833", }, + { } +}; +MODULE_DEVICE_TABLE(of, nrf52833_match_ids); + + +static struct platform_driver nrf52833_driver = { + .probe = nrf52833_probe, + .driver = { + .name = DEVNAME, + .owner = THIS_MODULE, + .of_match_table = nrf52833_match_ids + }, +#ifdef CONFIG_PM + .suspend = nrf52833_suspend, + .resume = nrf52833_resume, + .shutdown = nrf52833_shutdown, +#endif +}; + + +static int __init nrf52833_init(void) +{ + int ret; + + pr_info("---nrf52833_init--\n"); + ret = platform_driver_register(&nrf52833_driver); + if (ret) { + pr_err("%s(#%d): platform_driver_register fail(%d)\n", __func__, + __LINE__, ret); + } + + return ret; +} + + +static void __exit nrf52833_exit(void) +{ + pr_info("%s(#%d)\n", __func__, __LINE__); + if (nor) { + struct device *dev = nor->dev; + nordic_ctl_remove_sysfs(dev); + nor->pins_antplus_power_on = NULL; + nor->pins_antplus_power_off = NULL; + nor->pins_antplus_enable_hard_reset = NULL; + nor->pins_antplus_disable_hard_reset = NULL; + nor->pins_antplus_enable_dtm = NULL; + nor->pins_antplus_disable_dtm = NULL; + nor->pins_sramlink_power_on = NULL; + nor->pins_sramlink_power_off = NULL; + nor->pins_sramlink_enable_hard_reset = NULL; + nor->pins_sramlink_disable_hard_reset = NULL; + nor->pins_sramlink_enable_dtm = NULL; + nor->pins_sramlink_disable_dtm = NULL; + nor->rf_en_ant = 0; + nor->rf_reset_ant = 0; + nor->dtm_pud_ant = 0; + nor->rf_en_sram = 0; + nor->rf_reset_sram = 0; + nor->dtm_pud_sram = 0; + regulator_bulk_disable(ARRAY_SIZE(nor->regulator), nor->regulator); + regulator_put(nor->regulator->consumer); + regulator_bulk_free(ARRAY_SIZE(nor->regulator), nor->regulator); + devm_pinctrl_put(nor->pctrl); + devm_kfree(dev, nor); + } + platform_driver_unregister(&nrf52833_driver); +} + + +module_init(nrf52833_init); +module_exit(nrf52833_exit); +MODULE_AUTHOR("Hammerhead"); +MODULE_DESCRIPTION("Nordic nrf52833"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 20466ee72b4c..7f69235455d3 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -1389,3 +1389,10 @@ config GPIO_VIPERBOARD endmenu endif +config SONY_CXD5610 + bool "SONY_CXD5610" + default n + help + Say Y here if you want to enable sony cxd5610 gps + This dirver will pull GPIO 41 high to enable cxd5610 gps + diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index c256aff66a65..3d7a9c92a21e 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -159,3 +159,4 @@ obj-$(CONFIG_GPIO_ZEVIO) += gpio-zevio.o obj-$(CONFIG_GPIO_ZYNQ) += gpio-zynq.o obj-$(CONFIG_GPIO_ZX) += gpio-zx.o obj-$(CONFIG_GPIO_LOONGSON1) += gpio-loongson1.o +obj-$(CONFIG_SONY_CXD5610) += gpio-cxd5610.o diff --git a/drivers/gpio/gpio-cxd5610.c b/drivers/gpio/gpio-cxd5610.c new file mode 100644 index 000000000000..36a7338ece15 --- /dev/null +++ b/drivers/gpio/gpio-cxd5610.c @@ -0,0 +1,344 @@ +// # SPDX-License-Identifier : GPL-2.0 +/* + * power control for Sony CXD5610 drivers + * + * Copyright (C) 2023, Thundercomm Enterprise Inc. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include /* S_IRUSR, S_IWUSR */ +#include +#include + + +#define DEVNAME "sony_cxd5610" + +struct cxd5610_ctl_data { + struct device *dev; + struct pinctrl *pctrl; + struct pinctrl_state *pins_cxd5610_power_on; + struct pinctrl_state *pins_cxd5610_power_off; + struct pinctrl_state *pins_cxd5610_reset_high; + struct pinctrl_state *pins_cxd5610_reset_low; + int enable; + int reset; + struct regulator *vdd_l18; +}; + +static struct cxd5610_ctl_data *cxd; + +static ssize_t pwrctl_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + char *all_cmd = "\n\r on, \ + \n\r off, \ + \n\r reset"; + + return snprintf(buf, PAGE_SIZE, + "%s \ + \n\r\n\r\n\r %s \ + \n\r regulator_l18 : %x \ + \n\r cxd5610_enable : %x \ + \n\r cxd5610_reset : %x\n\n", + all_cmd, + "show_all_pins_state", + regulator_is_enabled(cxd->vdd_l18), + gpio_get_value(cxd->enable), + gpio_get_value(cxd->reset)); +}; +#define PWR_CMD_MAX 20 +static ssize_t pwrctl_store(struct device *dev, + struct device_attribute *attr, const char *buf, size_t size) +{ + char pwr_cmd[PWR_CMD_MAX]; + ssize_t ret = 0; + + strlcpy(pwr_cmd, buf, sizeof(pwr_cmd)); + if (!strncmp(pwr_cmd, "on", strlen("on"))) { + + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_power_on); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + mdelay(50); + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_reset_high); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "off", strlen("off"))) { + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_power_off); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + mdelay(50); + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_reset_low); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else if (!strncmp(pwr_cmd, "reset", strlen("reset"))) { + + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_reset_low); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + mdelay(50); + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_reset_high); + if (ret < 0) { + pr_err("%s state for pinctrl failed with %d\n", pwr_cmd, ret); + goto error_rt; + } + } else { + pr_err("%s unknown command\n", pwr_cmd); + goto error_rt; + } + return strlen(buf); +error_rt: + return -EINVAL; +} + +static DEVICE_ATTR_RW(pwrctl); + +static struct device_attribute *cxd_ctl_attrs[] = { + &dev_attr_pwrctl, + NULL +}; + +int cxd5610_ctl_create_sysfs(struct device *dev) +{ + int r, t; + pr_info("%s(#%d)\n", __func__, __LINE__); + for (t = 0; cxd_ctl_attrs[t]; t++) { + r = device_create_file(dev, cxd_ctl_attrs[t]); + if (r) { + return r; + } + } + return 0; +} + + +int cxd5610_ctl_remove_sysfs(struct device *dev) +{ + int t; + pr_info("%s(#%d)\n", __func__, __LINE__); + for (t = 0; cxd_ctl_attrs[t]; t++) { + device_remove_file(dev, cxd_ctl_attrs[t]); + } + + return 0; +} +static int cxd5610_probe(struct platform_device *pdev) +{ + struct device *dev = &pdev->dev; + struct device_node *np = pdev->dev.of_node; + int ret = 0; + cxd = NULL; + + cxd = devm_kzalloc(dev, sizeof(struct cxd5610_ctl_data), GFP_KERNEL); + if (!cxd) { + ret = -ENOMEM; + pr_err("not enough memory for driver data\n"); + goto err_cxd; + } + + cxd->dev = dev; + + cxd->vdd_l18 = regulator_get(&pdev->dev, "cxd5610,vdd_l18"); + if (IS_ERR(cxd->vdd_l18)) { + pr_err("Failed to get regulators\n"); + goto err_get_regulator_l18; + } + ret = regulator_set_voltage(cxd->vdd_l18, 1950000, 1950000); + if (ret) { + pr_err("(%s) Failed to regulator set voltage\n", __func__); + goto err_set_regulator_l18; + } + ret = regulator_set_mode(cxd->vdd_l18, REGULATOR_MODE_NORMAL); + if (ret) { + pr_err("(%s) Failed to regulator mode\n", __func__); + goto err_set_regulator_l18; + } + ret = regulator_set_load(cxd->vdd_l18, 30000); + if (ret) { + pr_err("(%s) Failed to regulator set load\n", __func__); + goto err_set_regulator_l18; + } + ret = regulator_enable(cxd->vdd_l18); + if (ret) { + pr_err("(%s) Failed to regulator enable\n", __func__); + goto err_set_regulator_l18; + } + cxd->pctrl = devm_pinctrl_get(dev); + if (IS_ERR_OR_NULL(cxd->pctrl)) { + ret = PTR_ERR(cxd->pctrl); + pr_err("can not get pinctrl \n"); + goto err_pinctrl_get; + } + cxd->pins_cxd5610_power_on = pinctrl_lookup_state( + cxd->pctrl, "cxd5610_power_on"); + if (IS_ERR_OR_NULL(cxd->pins_cxd5610_power_on)) { + ret = PTR_ERR(cxd->pins_cxd5610_power_on); + pr_err("Could not get cxd5610_power_on pinstates, err:%d\n", ret); + goto err_pinctrl_lookup; + } + + cxd->pins_cxd5610_power_off = pinctrl_lookup_state( + cxd->pctrl, "cxd5610_power_off"); + if (IS_ERR_OR_NULL(cxd->pins_cxd5610_power_off)) { + ret = PTR_ERR(cxd->pins_cxd5610_power_off); + pr_err("Could not get cxd5610_power_on pinstates, err:%d\n", ret); + goto err_pinctrl_lookup; + } + cxd->pins_cxd5610_reset_high = pinctrl_lookup_state( + cxd->pctrl, "cxd5610_reset_high"); + if (IS_ERR_OR_NULL(cxd->pins_cxd5610_reset_high)) { + ret = PTR_ERR(cxd->pins_cxd5610_reset_high); + pr_err("Could not get cxd5610_reset_high pinstates, err:%d\n", ret); + goto err_pinctrl_lookup; + } + cxd->pins_cxd5610_reset_low = pinctrl_lookup_state( + cxd->pctrl, "cxd5610_reset_low"); + if (IS_ERR_OR_NULL(cxd->pins_cxd5610_reset_low)) { + ret = PTR_ERR(cxd->pins_cxd5610_reset_low); + pr_err("Could not get cxd5610_reset_low pinstates, err:%d\n", ret); + goto err_pinctrl_lookup; + } + cxd->enable = of_get_named_gpio(np, "CXD5610_ENABLE,gpio", 0); + if (!gpio_is_valid(cxd->enable)) { + pr_err("Could not probe CXD5610_ENABLE,gpio\n"); + ret = -EINVAL; + goto err_pinctrl_lookup; + } + + cxd->reset = of_get_named_gpio(np, "CXD5610_RESET,gpio", 0); + if (!gpio_is_valid(cxd->reset)) { + pr_err("Could not probe CXD5610_RESET,gpio\n"); + ret = -EINVAL; + goto err_pinctrl_lookup; + } + ret = cxd5610_ctl_create_sysfs(dev); + if (ret) { + pr_err("%s : register failed\n", __FILE__); + goto err_set_gps_power_up; + } + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_power_on); + if (ret) { + pr_err("%s : pinctrl select state power on fail\n", __FILE__); + goto err_set_gps_power_up; + } + mdelay(50); + ret = pinctrl_select_state(cxd->pctrl, + cxd->pins_cxd5610_reset_high); + if (ret) { + pr_err("%s : pinctrl select state reset high fail\n", __FILE__); + goto err_set_gps_power_up; + } + pr_info("cxd5610_probe exit\n"); + + return 0; + +err_set_gps_power_up: + cxd5610_ctl_remove_sysfs(dev); +err_pinctrl_lookup: + if (cxd->pctrl) { + devm_pinctrl_put(cxd->pctrl); + } +err_pinctrl_get: + cxd->pctrl = NULL; + cxd->pins_cxd5610_power_on = NULL; + cxd->pins_cxd5610_power_off = NULL; + cxd->pins_cxd5610_reset_high = NULL; + cxd->pins_cxd5610_reset_low = NULL; + cxd->enable = 0; + cxd->reset = 0; + regulator_disable(cxd->vdd_l18); +err_set_regulator_l18: + regulator_put(cxd->vdd_l18); +err_get_regulator_l18: + cxd->vdd_l18 = NULL; + devm_kfree(dev, cxd); +err_cxd: + return ret; +} + +static const struct of_device_id cxd5610_match_ids[] = { + { .compatible = "sony,cxd5610", }, + { } +}; +MODULE_DEVICE_TABLE(of, cxd5610_match_ids); + + +static struct platform_driver cxd5610_driver = { + .probe = cxd5610_probe, + .driver = { + .name = DEVNAME, + .owner = THIS_MODULE, + .of_match_table = cxd5610_match_ids + }, +}; + + +static int __init cxd5610_init(void) +{ + int ret; + + pr_info("%s(#%d)\n", __func__, __LINE__); + ret = platform_driver_register(&cxd5610_driver); + if (ret) { + pr_err("%s(#%d): platform_driver_register fail(%d)\n", __func__, + __LINE__, ret); + } + return ret; +} + + +static void __exit cxd5610_exit(void) +{ + pr_info("%s(#%d)\n", __func__, __LINE__); + if (cxd) { + struct device *dev = cxd->dev; + cxd5610_ctl_remove_sysfs(dev); + cxd->pins_cxd5610_power_on = NULL; + cxd->pins_cxd5610_power_off = NULL; + cxd->pins_cxd5610_reset_high = NULL; + cxd->pins_cxd5610_reset_low = NULL; + cxd->enable = 0; + cxd->reset = 0; + regulator_disable(cxd->vdd_l18); + devm_pinctrl_put(cxd->pctrl); + regulator_put(cxd->vdd_l18); + devm_kfree(dev, cxd); + } + platform_driver_unregister(&cxd5610_driver); +} + + +module_init(cxd5610_init); +module_exit(cxd5610_exit); +MODULE_AUTHOR("HAMMERHEAD"); + diff --git a/drivers/input/misc/qpnp-power-on.c b/drivers/input/misc/qpnp-power-on.c index 56918e9ef768..300f77221573 100644 --- a/drivers/input/misc/qpnp-power-on.c +++ b/drivers/input/misc/qpnp-power-on.c @@ -152,6 +152,12 @@ #define QPNP_POFF_REASON_UVLO 13 +#if defined(CONFIG_LOCALVERSION) +char *version = CONFIG_LOCALVERSION; +#else +char *version = ""; +#endif + enum qpnp_pon_version { QPNP_PON_GEN1_V1, QPNP_PON_GEN1_V2, @@ -1383,6 +1389,9 @@ static int qpnp_pon_config_kpdpwr_init(struct qpnp_pon *pon, cfg->config_reset = true; } + if (0 != strcmp(version, "-perf")) + cfg->config_reset = false; + cfg->use_bark = of_property_read_bool(node, "qcom,use-bark"); if (cfg->use_bark) { cfg->bark_irq = platform_get_irq_byname(pdev, "kpdpwr-bark"); diff --git a/drivers/input/touchscreen/Kconfig b/drivers/input/touchscreen/Kconfig index d3c215d7b4eb..5619f60fdf24 100644 --- a/drivers/input/touchscreen/Kconfig +++ b/drivers/input/touchscreen/Kconfig @@ -1166,6 +1166,14 @@ config TOUCHSCREEN_SIS_I2C To compile this driver as a module, choose M here: the module will be called sis_i2c. +config TOUCHSCREEN_SITRONIX_TS + bool "Sitronix Touchscreen" + depends on I2C + default n + help + Say Y here if you have Sitronix touch panel. + If unsure, say N. + config TOUCHSCREEN_ST1232 tristate "Sitronix ST1232 touchscreen controllers" depends on I2C diff --git a/drivers/input/touchscreen/Makefile b/drivers/input/touchscreen/Makefile index 8b766e754948..448d815169e6 100644 --- a/drivers/input/touchscreen/Makefile +++ b/drivers/input/touchscreen/Makefile @@ -114,3 +114,4 @@ obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_DSX) += synaptics_dsx/ obj-$(CONFIG_TOUCHSCREEN_SYNAPTICS_TCM) += synaptics_tcm/ obj-$(CONFIG_TOUCHSCREEN_FTS) += focaltech_touch/ obj-$(CONFIG_TOUCHSCREEN_NT36XXX) += nt36xxx/ +obj-$(CONFIG_TOUCHSCREEN_SITRONIX_TS) += sitronix/ diff --git a/drivers/input/touchscreen/sitronix/Makefile b/drivers/input/touchscreen/sitronix/Makefile new file mode 100644 index 000000000000..60deadbf2e74 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/Makefile @@ -0,0 +1,7 @@ +# +# Makefile for the input core drivers. +# + +# Each configuration option enables a list of files. +obj-$(CONFIG_TOUCHSCREEN_SITRONIX_TS) += sitronix_touch.o +sitronix_touch-objs := sitronix_ts.o sitronix_ts_monitor.o sitronix_ts_swu_gesture.o sitronix_ts_upgrade_fw.o sitronix_ts_i2c.o sitronix_ts_rawtest.o sitronix_ts_sysfs.o sitronix_ts_utility.o diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts.c b/drivers/input/touchscreen/sitronix/sitronix_ts.c new file mode 100644 index 000000000000..bbe970b313cd --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts.c @@ -0,0 +1,1046 @@ +/* + * drivers/input/touchscreen/sitronix_i2c_touch.c + * + * Touchscreen driver for Sitronix (I2C bus) + * + * Copyright (C) 2011 Sitronix Technology Co., Ltd. + * Rudy Huang + */ +/* + * 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. + */ +#include +#include +#include + +#include +#include +#include +#include // to be compatible with linux kernel 3.2.15 +#include +#include +#include +#include +#include +#include + +#include "sitronix_ts_custom_func.h" +#include "sitronix_ts.h" + +//#define SITRONIX_SWAP_XY + +#ifdef ST_DEBUG_EN +#define DEBUG +#endif + +#define DRIVER_AUTHOR "Sitronix, Inc." +#define DRIVER_NAME "sitronix" +#define DRIVER_DESC "Sitronix I2C touch" +#define DRIVER_DATE "20181115" +#define DRIVER_MAJOR 2 +#define DRIVER_MINOR 11 +#define DRIVER_PATCHLEVEL 1 + +#define MAX_BUTTONS 4 +MODULE_AUTHOR("Petitk Kao"); +MODULE_DESCRIPTION("Sitronix I2C multitouch panels"); +MODULE_LICENSE("GPL"); + +#define SITRONIX_TOUCH_DRIVER_VERSION 0x03 +#define SITRONIX_I2C_TOUCH_DRV_NAME "sitronix" +#define SITRONIX_I2C_TOUCH_MT_INPUT_DEV_NAME "SITRONIX" +#define SITRONIX_I2C_TOUCH_KEY_INPUT_DEV_NAME "sitronix-i2c-touch-key" + +#ifdef ST_SENSOR_KEY +char sitronix_sensor_key_status; +struct sitronix_sensor_key_t sitronix_sensor_key_array[] = { + {KEY_MENU}, // bit 2 + {KEY_HOMEPAGE}, // bit 1 + {KEY_BACK}, // bit 0 +}; +#endif + +struct sitronix_ts_data stx_gpts = {0}; + +static int g_i2cErrorCount; +static u16 pre_index; +#define I2C_CONTINUE_ERROR_CNT 30 +#define VDD_VOLT 2960000 + +static inline void sitronix_ts_pen_down(struct input_dev *input_dev, int id, u16 x, u16 y) +{ +#ifdef SITRONIX_SUPPORT_MT_SLOT + input_mt_slot(input_dev, id); + input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 1); + input_report_abs(input_dev, ABS_MT_POSITION_X, x); + input_report_abs(input_dev, ABS_MT_POSITION_Y, y); +#else + input_report_abs(input_dev, ABS_MT_TRACKING_ID, id + 1); + input_report_abs(input_dev, ABS_MT_POSITION_X, x); + input_report_abs(input_dev, ABS_MT_POSITION_Y, y); + input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, 255); + input_report_abs(input_dev, ABS_MT_WIDTH_MAJOR, 255); + input_report_abs(input_dev, ABS_MT_PRESSURE, 255); + + input_mt_sync(input_dev); +#endif + STX_DEBUG("sitronix: [%d](%d, %d)+", id, x, y); +} + +static inline void sitronix_ts_pen_up(struct input_dev *input_dev, int id) +{ +#ifdef SITRONIX_SUPPORT_MT_SLOT + input_mt_slot(input_dev, id); + input_mt_report_slot_state(input_dev, MT_TOOL_FINGER, 0); +#else + input_report_abs(input_dev, ABS_MT_TRACKING_ID, id); + input_report_abs(input_dev, ABS_MT_TOUCH_MAJOR, 0); + input_report_abs(input_dev, ABS_MT_WIDTH_MAJOR, 0); + input_report_abs(input_dev, ABS_MT_PRESSURE, 0); +#endif + STX_DEBUG("[%d]-", id); +} + +static inline void sitronix_ts_pen_allup(struct sitronix_ts_data *ts_data) +{ + int i; + for (i = 0; i < ts_data->ts_dev_info.max_touches; i++) + sitronix_ts_pen_up(ts_data->input_dev, i); + + input_report_key(ts_data->input_dev, BTN_TOUCH, 0); + input_sync(ts_data->input_dev); +} + +static inline void sitronix_ts_handle_sensor_key(struct input_dev *input_dev, struct sitronix_sensor_key_t *key_array, char *pre_key_status, char cur_key_status, int key_count) +{ + int i = 0; + for (i = 0; i < key_count; i++) { + if (cur_key_status & (1 << i)) { + STX_DEBUG("sitronix down now key %d i=%d", cur_key_status, i); + input_report_key(input_dev, key_array[i].code, 1); + input_sync(input_dev); + } else { + if (*pre_key_status & (1 << i)) { + STX_DEBUG("sitronix sensor key i=[%d] up", i); + input_report_key(input_dev, key_array[i].code, 0); + input_sync(input_dev); + } + } + } + *pre_key_status = cur_key_status; +} + +void stx_irq_enable(void) +{ + unsigned long flags; + + if (stx_gpts.irq_registered == 0) { + STX_ERROR("INT have not been registered yet"); + return; + } + + spin_lock_irqsave(&stx_gpts.irq_lock, flags); + + if (stx_gpts.irq_is_enable == 0) { + stx_gpts.irq_is_enable = 1; + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + enable_irq(stx_gpts.client->irq); + STX_DEBUG("stx_irq_enable, stx_gpts.irq_is_enable=%d", stx_gpts.irq_is_enable); + } else if (stx_gpts.irq_is_enable == 1) { + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + STX_INFO("Touch Eint already enabled!"); + } else { + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + STX_ERROR("Invalid stx_gpts.irq_is_enable %d!", stx_gpts.irq_is_enable); + } +} + +void stx_irq_disable(void) +{ + unsigned long flags; + + if (stx_gpts.irq_registered == 0) { + STX_ERROR("INT have not been registered yet"); + return; + } + + spin_lock_irqsave(&stx_gpts.irq_lock, flags); + + if (stx_gpts.irq_is_enable == 1) { + stx_gpts.irq_is_enable = 0; + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + disable_irq_nosync(stx_gpts.client->irq); + STX_DEBUG("stx_irq_disable, stx_gpts.irq_is_enable=%d", stx_gpts.irq_is_enable); + } else if (stx_gpts.irq_is_enable == 0) { + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + STX_INFO("Touch Eint already disabled!"); + } else { + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + STX_ERROR("Invalid stx_gpts.irq_is_enable %d!", stx_gpts.irq_is_enable); + } +} + +static void sitronix_ts_work_func(struct work_struct *work) +{ + int i; + int ret; + struct sitronix_ts_data *ts = container_of(work, struct sitronix_ts_data, work); + u16 x, y; + uint8_t buf[1 + ST_MAX_TOUCHES * PIXEL_DATA_LENGTH_A] = {0}; + uint8_t PixelCount = 0; + + STX_DEBUG("%s", __FUNCTION__); + +#ifdef SITRONIX_GESTURE + if (!ts->suspend_state) { + ret = stx_i2c_read_bytes(FINGERS, buf, 1); + STX_DEBUG("SITRONIX_GESTURE ret:%d ,value:0x%X", ret, buf[0]); + buf[0] &= 0xF; + if ((ret == 1 && buf[0] == G_PALM)) { + sitronix_gesture_func(ts->input_dev, buf[0]); + goto exit_data_handled; + } + } +#endif + +#ifdef ST_SMART_WAKE_UP + if (stx_gpts.fsmart_wakeup == 1) { + if (ts->suspend_state) { + if (sitronix_swk_func(ts->input_dev) == 0) + goto exit_data_handled; + } + } +#endif + ret = stx_i2c_read(stx_gpts.client, buf, ts->ts_dev_info.max_touches * 4, 0x11); + if (ret < 0) { + STX_ERROR("read finger error (%d)", ret); + g_i2cErrorCount++; + goto exit_invalid_data; + } else { + g_i2cErrorCount = 0; + } + + for (i = 0; i < ts->ts_dev_info.max_touches; i++) { + if (buf[1 + 4 * i] & 0x80) { + x = (int)(buf[1 + i * 4] & 0x70) << 4 | buf[1 + i * 4 + 1]; + y = (int)(buf[1 + i * 4] & 0x0F) << 8 | buf[1 + i * 4 + 2]; + if (sitronix_cases_mode_check(x, y)) { + PixelCount++; + STX_DEBUG("SITRONIX touch point: %d (%d,%d)", i, x, y); + sitronix_ts_pen_down(ts->input_dev, i, x, y); + + pre_index |= 0x01 << i; + } + } else if (pre_index & (0x01 << i)) { + pre_index &= ~(0x01 << i); +#ifdef SITRONIX_SUPPORT_MT_SLOT + sitronix_ts_pen_up(ts->input_dev, i); +#endif + } + } +#ifndef SITRONIX_SUPPORT_MT_SLOT + if (PixelCount == 0) + sitronix_ts_pen_up(ts->input_dev, 0); +#endif + input_report_key(ts->input_dev, BTN_TOUCH, PixelCount > 0); + input_sync(ts->input_dev); + +#ifdef ST_SENSOR_KEY + sitronix_ts_handle_sensor_key(ts->input_dev, sitronix_sensor_key_array, &sitronix_sensor_key_status, buf[0], (sizeof(sitronix_sensor_key_array) / sizeof(struct sitronix_sensor_key_t))); +#endif + +exit_invalid_data: + if (g_i2cErrorCount >= I2C_CONTINUE_ERROR_CNT) { + STX_ERROR("I2C abnormal in work_func(), reset it! "); + st_reset_ic(); + g_i2cErrorCount = 0; +#ifdef ST_GLOVE_SWITCH_MODE + if (stx_gpts.glove_mode) + st_enter_glove_mode(&stx_gpts); +#endif + } +#if (defined(SITRONIX_GESTURE) || defined(ST_SMART_WAKE_UP)) + exit_data_handled: +#endif + stx_irq_enable(); +} + +static irqreturn_t sitronix_ts_irq_handler(int irq, void *dev_id) +{ + unsigned long flags; + struct sitronix_ts_data *ts = dev_id; + STX_FUNC_ENTER(); + + spin_lock_irqsave(&stx_gpts.irq_lock, flags); + + if ((stx_gpts.irq_is_enable == 0) || (stx_gpts.irq_registered == 0)) { + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + STX_ERROR("%s irq_is_enable is %d", __FUNCTION__, stx_gpts.irq_is_enable); + return IRQ_HANDLED; + } + stx_gpts.irq_is_enable = 0; + + spin_unlock_irqrestore(&stx_gpts.irq_lock, flags); + /* enter EINT handler disable INT, make sure INT is disable when handle touch event including top/bottom half */ + /* use _nosync to avoid deadlock */ + disable_irq_nosync(ts->client->irq); +#ifdef ST_MONITOR_THREAD + sitronix_monitor_delay(); +#endif + schedule_work(&ts->work); + return IRQ_HANDLED; +} + +void st_reset_ic(void) +{ + STX_DEBUG("%s", __func__); + gpio_direction_output(stx_gpts.host_if->reset_gpio, 1); + msleep(10); + gpio_direction_output(stx_gpts.host_if->reset_gpio, 0); + msleep(10); + gpio_direction_output(stx_gpts.host_if->reset_gpio, 1); + msleep(150); +} + +static int sitronix_parse_dt(struct device *dev, + struct sitronix_ts_platform_data *pdata) +{ + int rc; + struct device_node *np = dev->of_node; + struct property *prop; + + STX_DEBUG("%s,%d", __FUNCTION__, __LINE__); + + pdata->name = "sitronix"; + + /* reset, irq gpio info */ + pdata->reset_gpio = of_get_named_gpio_flags(np, "sitronix,reset-gpios", 0, &pdata->reset_gpio_flags); + STX_INFO("%s,pdata->reset_gpio=%d", __FUNCTION__, pdata->reset_gpio); + + if (pdata->reset_gpio < 0) + return pdata->reset_gpio; + + pdata->irq_gpio = of_get_named_gpio_flags(np, "sitronix,interrupt-gpios", 0, &pdata->irq_gpio_flags); + STX_INFO("%s,pdata->irq_gpio=%d", __FUNCTION__, pdata->irq_gpio); + + if (pdata->irq_gpio < 0) + return pdata->irq_gpio; + + prop = of_find_property(np, "sitronix,button-map", NULL); + if (prop) { + pdata->num_button = prop->length / sizeof(u32); + if (pdata->num_button > MAX_BUTTONS) + return -EINVAL; + + rc = of_property_read_u32_array(np, "sitronix,button-map", pdata->button_map, pdata->num_button); + if (rc) { + STX_ERROR("Unable to read key codes"); + return rc; + } + } + return 0; +} + +static int sitronix_pinctrl_init_check(struct sitronix_ts_data *ts) +{ + int ret = 0; + + ts->pinctrl = devm_pinctrl_get(&ts->client->dev); + if (IS_ERR_OR_NULL(ts->pinctrl)) { + STX_ERROR("Failed to get pinctrl, please check dts"); + ret = PTR_ERR(ts->pinctrl); + return ret; + } + + return ret; +} + +static int sitronix_pinctrl_init(struct sitronix_ts_data *ts) +{ + int ret = 0; + + ts->pins_int_active = pinctrl_lookup_state(ts->pinctrl, "pmx_ts_int_active"); + if (IS_ERR_OR_NULL(ts->pins_int_active)) { + STX_ERROR("Int Pin state[active] not found"); + ret = PTR_ERR(ts->pins_int_active); + return ret; + } + + ts->pins_reset_active = pinctrl_lookup_state(ts->pinctrl, "pmx_ts_reset_active"); + if (IS_ERR_OR_NULL(ts->pins_reset_active)) { + STX_ERROR("Int Pin state[active] not found"); + ret = PTR_ERR(ts->pins_reset_active); + return ret; + } + + + ts->pins_reset_suspend = pinctrl_lookup_state(ts->pinctrl, "pmx_ts_reset_suspend"); + if (IS_ERR_OR_NULL(ts->pins_reset_suspend)) { + STX_ERROR("Int Pin state[suspend] not found"); + ret = PTR_ERR(ts->pins_reset_suspend); + return ret; + } + + ts->pins_release = pinctrl_lookup_state(ts->pinctrl, "pmx_ts_release"); + if (IS_ERR_OR_NULL(ts->pins_release)) { + STX_ERROR("Pin state[release] not found"); + ret = PTR_ERR(ts->pins_release); + return ret; + } + + return ret; + +} + +static int sitronix_pinctrl_select_int_active(struct sitronix_ts_data *ts) +{ + int ret = 0; + + if (ts->pinctrl && ts->pins_int_active) { + STX_INFO("Set int active state "); + ret = pinctrl_select_state(ts->pinctrl, ts->pins_int_active); + if (ret < 0) { + STX_ERROR("Set int active state error:%d", ret); + } + } + + return ret; +} + +static int sitronix_pinctrl_select_reset_active(struct sitronix_ts_data *ts) +{ + int ret = 0; + + if (ts->pinctrl && ts->pins_reset_active) { + STX_INFO("Set reset active state "); + ret = pinctrl_select_state(ts->pinctrl, ts->pins_reset_active); + if (ret < 0) { + STX_ERROR("Set reset active state error:%d", ret); + } + } + + return ret; +} + +static int sitronix_pinctrl_select_reset_suspend(struct sitronix_ts_data *ts) +{ + int ret = 0; + + if (ts->pinctrl && ts->pins_reset_suspend) { + STX_INFO("Set reset suspend state "); + ret = pinctrl_select_state(ts->pinctrl, ts->pins_reset_suspend); + if (ret < 0) { + STX_ERROR("Set reset suspend state error:%d", ret); + } + } + + return ret; +} + +static int sitronix_pinctrl_select_release(struct sitronix_ts_data *ts) +{ + int ret = 0; + + if (ts->pinctrl && ts->pins_release) { + ret = pinctrl_select_state(ts->pinctrl, ts->pins_release); + if (ret < 0) { + STX_ERROR("Set release state error:%d", ret); + } + } + + return ret; +} + +#ifdef STX_POWER_SUPPLY_EN +static int sitronix_power_on(struct sitronix_ts_data *ts) +{ + int ret = 0; + if (ts->vdd_ana) { + regulator_set_voltage(ts->vdd_ana, VDD_VOLT,VDD_VOLT); + ret = regulator_enable(ts->vdd_ana); + if (ret) { + STX_ERROR("Regulator vdd enable failed ret =%d", ret); + } + } + return ret; +} + +static int sitronix_power_off(struct sitronix_ts_data *ts) +{ + int ret = 0; + if (ts->vdd_ana) { + ret = regulator_disable(ts->vdd_ana); + if (ret) { + STX_ERROR("Regulator vdd_ana disable failed ret =%d", ret); + } + } + return ret; +} + +static int sitronix_power_init(struct sitronix_ts_data *ts) +{ + int ret = 0; + + ts->vdd_ana = regulator_get(&ts->client->dev, "vdd_ana"); + STX_INFO("vdd init start"); + if (IS_ERR(ts->vdd_ana)) { + ts->vdd_ana = NULL; + ret = PTR_ERR(ts->vdd_ana); + STX_ERROR("get vdd_ana regulator failed,ret=%d", ret); + return ret; + } + STX_FUNC_EXIT(); + + return ret; +} + +static int sitronix_power_deinit(struct sitronix_ts_data *ts) +{ + if (ts->vdd_ana) + regulator_put(ts->vdd_ana); + + return 0; +} +#endif + +static void sitronix_ts_input_set_params(struct sitronix_ts_data *ts_data) +{ + +#ifdef SITRONIX_SUPPORT_MT_SLOT + input_mt_init_slots(ts_data->input_dev, ts_data->ts_dev_info.max_touches, INPUT_MT_DIRECT); +#else + set_bit(ABS_MT_TOUCH_MAJOR, ts_data->input_dev->absbit); + set_bit(ABS_MT_TOUCH_MINOR, ts_data->input_dev->absbit); + set_bit(ABS_MT_POSITION_X, ts_data->input_dev->absbit); + set_bit(ABS_MT_POSITION_Y, ts_data->input_dev->absbit); + set_bit(ABS_MT_BLOB_ID, ts_data->input_dev->absbit); + set_bit(ABS_MT_TRACKING_ID, ts_data->input_dev->absbit); + set_bit(INPUT_PROP_DIRECT, ts_data->input_dev->propbit); + input_set_abs_params(ts_data->input_dev, ABS_MT_TRACKING_ID, 0, ts_data->ts_dev_info.max_touches, 0, 0); + input_set_abs_params(ts_data->input_dev, ABS_MT_TOUCH_MAJOR, 0, 255, 0, 0); + input_set_abs_params(ts_data->input_dev, ABS_MT_TOUCH_MINOR, 0, 255, 0, 0); + input_set_abs_params(ts_data->input_dev, ABS_MT_PRESSURE, 0, 255, 0, 0); +#endif + +#ifndef SITRONIX_SWAP_XY + input_set_abs_params(ts_data->input_dev, ABS_MT_POSITION_X, 0, (ts_data->ts_dev_info.x_res - 1), 0, 0); + input_set_abs_params(ts_data->input_dev, ABS_MT_POSITION_Y, 0, (ts_data->ts_dev_info.y_res - 1), 0, 0); +#else + input_set_abs_params(ts_data->input_dev, ABS_MT_POSITION_X, 0, (ts_data->ts_dev_info.y_res - 1), 0, 0); + input_set_abs_params(ts_data->input_dev, ABS_MT_POSITION_Y, 0, (ts_data->ts_dev_info.x_res - 1), 0, 0); +#endif + + return; +} + +static int sitronix_ts_input_dev_init(struct sitronix_ts_data *ts_data) +{ + int ret = 0; + #ifdef ST_SENSOR_KEY + int i; + #endif + + ts_data->input_dev = input_allocate_device(); + if (ts_data->input_dev == NULL) { + STX_ERROR("%s: Can not allocate input device!", __func__); + return -ENOMEM; + } + + ts_data->input_dev->name = SITRONIX_I2C_TOUCH_MT_INPUT_DEV_NAME; //ts_data->name; + ts_data->input_dev->id.bustype = BUS_I2C; + ts_data->input_dev->id.product = 0; + ts_data->input_dev->id.version = 0; + ts_data->input_dev->dev.parent = &ts_data->client->dev; + input_set_drvdata(ts_data->input_dev, ts_data); + + set_bit(EV_KEY, ts_data->input_dev->evbit); + set_bit(EV_ABS, ts_data->input_dev->evbit); + set_bit(BTN_TOUCH, ts_data->input_dev->keybit); + +#ifdef ST_SMART_WAKE_UP + st_gesture_init(); +#endif + +#ifdef ST_SENSOR_KEY + for (i = 0; i < 3; i++) { + set_bit(sitronix_sensor_key_array[i].code, ts_data->input_dev->keybit); + } +#endif + + sitronix_ts_input_set_params(ts_data); + + ret = input_register_device(ts_data->input_dev); + if (ret) { + STX_ERROR("%s: Failed to register input device", __func__); + goto err_register_input; + } + + return 0; + +err_register_input: + input_free_device(ts_data->input_dev); + ts_data->input_dev = NULL; + + return ret; +} + +/***************************************************************************** +* Name: stx_gpio_configure +* Brief: IRQ & RESET GPIO INIT +* Input: +* Output: +* Return: return 0 if succuss +*****************************************************************************/ +static int stx_gpio_configure(struct sitronix_ts_data *data) +{ + int ret = 0; + + STX_FUNC_ENTER(); + /* request irq gpio */ + if (gpio_is_valid(data->host_if->irq_gpio)) { + ret = gpio_request(data->host_if->irq_gpio, "stx_irq_gpio"); + if (ret) { + STX_ERROR("[GPIO]irq gpio request failed"); + goto err_irq_gpio_req; + } + + ret = gpio_direction_input(data->host_if->irq_gpio); + if (ret) { + STX_ERROR("[GPIO]set_direction for irq gpio failed"); + goto err_irq_gpio_dir; + } + } + + /* request reset gpio */ + if (gpio_is_valid(data->host_if->reset_gpio)) { + ret = gpio_request(data->host_if->reset_gpio, "stx_reset_gpio"); + if (ret) { + STX_ERROR("[GPIO]reset gpio request failed"); + goto err_irq_gpio_dir; + } + + ret = gpio_direction_output(data->host_if->reset_gpio, 1); + if (ret) { + STX_ERROR("[GPIO]set_direction for reset gpio failed"); + goto err_reset_gpio_dir; + } + } + + STX_FUNC_EXIT(); + return 0; + +err_reset_gpio_dir: + if (gpio_is_valid(data->host_if->reset_gpio)) + gpio_free(data->host_if->reset_gpio); +err_irq_gpio_dir: + if (gpio_is_valid(data->host_if->irq_gpio)) + gpio_free(data->host_if->irq_gpio); +err_irq_gpio_req: + STX_FUNC_EXIT(); + return ret; +} + +static int sitronix_ts_probe(struct i2c_client *client, const struct i2c_device_id *id) +{ + int ret = 0; + uint8_t err_code = 0; + uint8_t dev_status = 0; + struct sitronix_ts_platform_data *pdata; +#ifdef ST_UPGRADE_FIRMWARE + int fw_version = 0; +#endif + + STX_FUNC_ENTER(); + if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) { + STX_ERROR("sitronix Failed check I2C functionality"); + return -ENODEV; + } + + if (client->dev.of_node) { + pdata = devm_kzalloc(&client->dev, sizeof(struct sitronix_ts_platform_data), GFP_KERNEL); + if (!pdata) { + STX_ERROR("Failed to allocate memory for platform data"); + return -ENOMEM; + } + ret = sitronix_parse_dt(&client->dev, pdata); + if (ret) + STX_ERROR("[DTS]DT parsing failed"); + } else { + pdata = client->dev.platform_data; + } + + if (!pdata) { + STX_ERROR("no ts platform data found"); + return -EINVAL; + } + + stx_gpts.host_if = pdata; + stx_gpts.client = client; + i2c_set_clientdata(client, &stx_gpts); + + stx_gpts.is_upgrading = false; + stx_gpts.is_testing = false; + stx_gpts.suspend_state = 0; + stx_gpts.irq_is_enable = 1; + stx_gpts.fsmart_wakeup = 1; + stx_gpts.rawTestResult = 1; + stx_gpts.irq_registered = 0; + stx_gpts.fapp_in = 0; + stx_gpts.glove_mode = false; + stx_gpts.cases_mode = false; + stx_gpts.host_if->default_i2c_flag = 0; + stx_gpts.max_raw_limit = 7800; + stx_gpts.min_raw_limit = 3700; + + stx_gpio_configure(&stx_gpts); + + ret = sitronix_pinctrl_init_check(&stx_gpts); + if (ret) { + STX_ERROR("sitronix failed to init pinctrl check"); + ret = -EINVAL; + goto err_pinctrl_get; + } + + ret = sitronix_pinctrl_init(&stx_gpts); + if (ret) { + STX_ERROR("sitronix failed to init pinctrl"); + ret = -EINVAL; + goto err_pinctrl_lookup; + } + sitronix_pinctrl_select_int_active(&stx_gpts); + sitronix_pinctrl_select_reset_suspend(&stx_gpts); + +#ifdef STX_POWER_SUPPLY_EN + ret = sitronix_power_init(&stx_gpts); + if (ret) { + STX_ERROR("sitronix failed get regulator"); + ret = -EINVAL; + return ret; + } + + ret = sitronix_power_on(&stx_gpts); + if (ret) { + STX_ERROR("regulator failed power on device"); + ret = -EINVAL; + goto exit_deinit_power; + } +#endif + msleep(10); + sitronix_pinctrl_select_reset_active(&stx_gpts); + msleep(150); + +#ifdef ST_UPGRADE_BY_ISPID + st_check_ispid(); + STX_INFO("isp_idL:0x%x, isp_idH:0x%x", stx_gpts.ts_dev_info.isp_idL, stx_gpts.ts_dev_info.isp_idH); +#endif + +#ifdef ST_UPGRADE_FIRMWARE + st_print_version(&stx_gpts); + fw_version = stx_gpts.ts_dev_info.fw_version[0]; +#ifdef ST_UPGRADE_BY_ISPID + if ((stx_gpts.ts_dev_info.isp_idL == 0xac) && (stx_gpts.ts_dev_info.isp_idH == 0x39)) { + STX_INFO("main touch"); + if (MAIN_FW_VERSION > fw_version) + st_upgrade_fw(); + } else if ((stx_gpts.ts_dev_info.isp_idL == 0xad) && (stx_gpts.ts_dev_info.isp_idH == 0x3a)) { + STX_INFO("second touch"); + if (SECOND_FW_VERSION > fw_version) + st_upgrade_fw(); + } else { + STX_INFO("No ISP ID"); + } +#else + if (MAIN_FW_VERSION > fw_version) { + STX_INFO("main touch FW upgrade"); + st_upgrade_fw(); + } +#endif +#endif + + ret = st_get_dev_status(client, &err_code, &dev_status); + if ((ret < 0) || (dev_status == 0x6) || ((err_code == 0x8) && (dev_status == 0x0))) { + ret = -EPERM; + goto err_device_info_error; + } + + ret = st_get_touch_info(&stx_gpts); + if (ret < 0) + goto err_device_info_error; + + mutex_init(&stx_gpts.dev_mutex); + spin_lock_init(&stx_gpts.irq_lock); + + INIT_WORK(&(stx_gpts.work), sitronix_ts_work_func); + +#ifdef ST_MONITOR_THREAD + sitronix_monitor_delay(); + sitronix_monitor_start(); +#endif + + ret = sitronix_ts_input_dev_init(&stx_gpts); + + if (ret) { + STX_ERROR("%s: Failed to set up input device", __func__); + ret = -EINVAL; + goto err_input_register_device_failed; + } + + stx_gpts.client->irq = gpio_to_irq(stx_gpts.host_if->irq_gpio); + STX_INFO("irq num:%d", stx_gpts.client->irq); + + if (stx_gpts.client->irq) { + STX_INFO("irq = %d", stx_gpts.client->irq); + stx_gpts.irq_flags = IRQF_TRIGGER_FALLING | IRQF_ONESHOT; // IRQF_NO_SUSPEND; + ret = request_threaded_irq(stx_gpts.client->irq, NULL, sitronix_ts_irq_handler, stx_gpts.irq_flags, client->name, &stx_gpts); + //ret = request_irq(stx_gpts.client->irq, sitronix_ts_irq_handler, stx_gpts.irq_flags, client->name, &stx_gpts); + if (ret < 0) { + STX_ERROR("request_irq failed"); + goto err_request_irq_failed; + } + stx_gpts.irq_registered = 1; + } + + ret = st_create_sysfs(client); + if (ret < 0) { + STX_ERROR("create sysfs node fail"); + } + +#ifdef ST_DEVICE_NODE + ret = st_dev_node_init(); + if (ret < 0) + STX_ERROR("create sitronix node fail"); +#endif + + STX_DEBUG("%s,line=%d", __FUNCTION__, __LINE__); + + return 0; + +err_request_irq_failed: + if (stx_gpts.input_dev) { + input_free_device(stx_gpts.input_dev); + stx_gpts.input_dev = NULL; + } + +err_input_register_device_failed: + +#ifdef ST_MONITOR_THREAD + sitronix_monitor_stop(); +#endif +err_device_info_error: + if (gpio_is_valid(stx_gpts.host_if->reset_gpio)) + gpio_free(stx_gpts.host_if->reset_gpio); + if (gpio_is_valid(stx_gpts.host_if->irq_gpio)) + gpio_free(stx_gpts.host_if->irq_gpio); + sitronix_pinctrl_select_release(&stx_gpts); +err_pinctrl_lookup: + if (stx_gpts.pinctrl) + devm_pinctrl_put(stx_gpts.pinctrl); +err_pinctrl_get: + stx_gpts.pinctrl = NULL; + stx_gpts.pins_release = NULL; + stx_gpts.pins_reset_suspend = NULL; + stx_gpts.pins_reset_active = NULL; + stx_gpts.pins_int_active = NULL; +#ifdef STX_POWER_SUPPLY_EN + sitronix_power_off(&stx_gpts); +exit_deinit_power: + sitronix_power_deinit(&stx_gpts); +#endif + return ret; +} + +static int sitronix_ts_remove(struct i2c_client *client) +{ + struct sitronix_ts_data *ts = i2c_get_clientdata(client); + +#ifdef ST_DEVICE_NODE + st_dev_node_exit(); +#endif + +#ifdef ST_MONITOR_THREAD + sitronix_monitor_stop(); +#endif + sitronix_pinctrl_select_release(&stx_gpts); + if(stx_gpts.pinctrl) { + devm_pinctrl_put(stx_gpts.pinctrl); + stx_gpts.pinctrl = NULL; + stx_gpts.pins_release = NULL; + stx_gpts.pins_reset_suspend = NULL; + stx_gpts.pins_reset_active = NULL; + stx_gpts.pins_int_active = NULL; + } +#ifdef STX_POWER_SUPPLY_EN + usleep_range(100, 200); + sitronix_power_off(&stx_gpts); + sitronix_power_deinit(&stx_gpts); +#endif + i2c_set_clientdata(client, NULL); + free_irq(client->irq, ts); + if (ts->input_dev) + input_unregister_device(ts->input_dev); + + mutex_destroy(&stx_gpts.dev_mutex); + return 0; +} + +static int sitronix_ts_suspend(struct i2c_client *client) +{ + struct sitronix_ts_data *ts = i2c_get_clientdata(client); + STX_FUNC_ENTER(); + STX_INFO("%s", __FUNCTION__); + if (ts->fapp_in) { + STX_INFO("%s fapp_in = %d", __func__, ts->fapp_in); + return 0; + } + + if (ts->suspend_state) { + STX_ERROR("Already in suspend state"); + return 0; + } + +#ifdef ST_MONITOR_THREAD //hfst1 + sitronix_monitor_stop(); +#endif + +#ifdef ST_SMART_WAKE_UP + if (stx_gpts.fsmart_wakeup == 1) { + sitronix_swk_enable(); //hfst001 + st_power_down(ts); + enable_irq_wake(stx_gpts.client->irq);//hfst + sitronix_ts_pen_allup(ts); + ts->suspend_state = 1; + return 0; + } +#endif + stx_irq_disable(); + st_power_down(ts); + sitronix_ts_pen_allup(ts); + ts->suspend_state = 1; + + STX_FUNC_EXIT(); + return 0; +} + +static int sitronix_ts_resume(struct i2c_client *client) +{ + struct sitronix_ts_data *ts = i2c_get_clientdata(client); + STX_FUNC_ENTER(); + + if (ts->fapp_in) { + STX_INFO("%s fapp_in = %d", __func__, ts->fapp_in); + return 0; + } + + if (!ts->suspend_state) { + STX_ERROR("Already in resume state"); + return 0; + } + + sitronix_pinctrl_select_reset_suspend(ts); + msleep(10); + sitronix_pinctrl_select_reset_active(ts); + +#ifdef ST_GLOVE_SWITCH_MODE + if (stx_gpts.glove_mode) { + msleep(150); + st_enter_glove_mode(&stx_gpts); + } +#endif + +#ifdef ST_MONITOR_THREAD + sitronix_monitor_start(); +#endif + +#ifdef ST_SMART_WAKE_UP + if (stx_gpts.fsmart_wakeup == 1) { + sitronix_swk_disable(); + disable_irq_wake(stx_gpts.client->irq);//hfst + ts->suspend_state = 0; + return 0; + } +#endif + + ts->suspend_state = 0; + stx_irq_enable(); + + STX_FUNC_EXIT(); + return 0; +} + +static const struct i2c_device_id sitronix_ts_id[] = { + {SITRONIX_I2C_TOUCH_DRV_NAME, 0}, + {} +}; + +static struct of_device_id sitronix_match_table[] = { + { + .compatible = "sitronix,st1633i", + }, + { + .compatible = "sitronix,cf1216", + }, + { + .compatible = "sitronix,cf1133", + }, + {}, +}; + +static int sitronix_pm_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + sitronix_ts_suspend(client); + return 0; +} +static int sitronix_pm_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + sitronix_ts_resume(client); + return 0; +} + +static const struct dev_pm_ops sitronix_ts_dev_pm_ops = { + .suspend = sitronix_pm_suspend, + .resume = sitronix_pm_resume, +}; + +static struct i2c_driver sitronix_ts_driver = { + .probe = sitronix_ts_probe, + .remove = sitronix_ts_remove, + .id_table = sitronix_ts_id, + .driver = { + .name = SITRONIX_I2C_TOUCH_DRV_NAME, + .owner = THIS_MODULE, + .of_match_table = sitronix_match_table, + .pm = &sitronix_ts_dev_pm_ops, +#if CONFIG_PM + .suspend = NULL, + .resume = NULL, +#endif + }, +}; + +static int __init sitronix_ts_init(void) +{ + s32 ret_iic = -2; + + STX_DEBUG("Sitronix touch driver %d.%d.%d", DRIVER_MAJOR, DRIVER_MINOR, DRIVER_PATCHLEVEL); + + ret_iic = i2c_add_driver(&sitronix_ts_driver); + STX_INFO("IIC ADD DRIVER %s,ret_iic=%d", __FUNCTION__, ret_iic); + + return ret_iic; +} + +static void __exit sitronix_ts_exit(void) +{ + i2c_del_driver(&sitronix_ts_driver); +} + +module_init(sitronix_ts_init); +module_exit(sitronix_ts_exit); + +MODULE_DESCRIPTION("Sitronix Multi-Touch Driver"); +MODULE_LICENSE("GPL"); diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts.h b/drivers/input/touchscreen/sitronix/sitronix_ts.h new file mode 100644 index 000000000000..e0059f658cef --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts.h @@ -0,0 +1,272 @@ +/* + * drivers/input/touchscreen/sitronix_i2c_touch.h + * + * Touchscreen driver for Sitronix + * + * Copyright (C) 2011 Sitronix Technology Co., Ltd. + * Rudy Huang + */ +/* + * 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. + */ + +#ifndef __SITRONIX_I2C_TOUCH_h +#define __SITRONIX_I2C_TOUCH_h + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#ifdef CONFIG_HAS_EARLYSUSPEND +#include +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include /* needed for the _IOW etc stuff used later */ +#include +#include + +#include "sitronix_ts_custom_func.h" +#include "sitronix_ts_upgrade_fw_bin.h" + +#define ST_DEVICE_NODE + +/******************************************************************************* +* MT SLOT feature is implmented in linux kernel 2.6.38 and later.\ + Make sure that version of your linux kernel before using this feature. +*******************************************************************************/ +#define SITRONIX_SUPPORT_MT_SLOT + +#ifdef SITRONIX_SUPPORT_MT_SLOT +#include +#endif // SITRONIX_SUPPORT_MT_SLOT + +//#define SITRONIX_I2C_COMBINED_MESSAGE +#ifndef SITRONIX_I2C_COMBINED_MESSAGE +#define SITRONIX_I2C_SINGLE_MESSAGE +#endif + +#define st_u8 u8 +#define st_char char +#define st_msleep msleep +#define st_usleep udelay +#define st_int int +#define st_u16 u16 +#define st_u32 u32 + +#ifdef ST_DEBUG_EN +#define STX_DEBUG(fmt, args...) \ + pr_debug("[SITRONIX][DEBUG]" fmt "\n", ##args) +#define STX_FUNC_ENTER() \ + pr_debug("[SITRONIX]%s: ENTER \n", __func__) +#define STX_FUNC_EXIT() \ + pr_debug("[SITRONIX]%s: EXIT(%d) \n", __func__, __LINE__) +#else +#define STX_DEBUG(fmt, args...) +#define STX_FUNC_ENTER() +#define STX_FUNC_EXIT() +#endif + +#define STX_INFO(fmt, args...) \ + pr_info("[SITRONIX][Info]" fmt "\n", ##args) +#define STX_ERROR(fmt, args...) \ + pr_err("[SITRONIX][Error]" fmt "\n", ##args) + +struct sitronix_ts_device_info { + uint8_t chip_id; + uint8_t fw_version[2]; + uint8_t fw_revision[32]; + uint8_t max_touches; + uint16_t x_res; + uint16_t y_res; + uint8_t rx_chs; + uint8_t tx_chs; + uint8_t Num_X; + uint8_t Num_Y; +#ifdef ST_UPGRADE_BY_ISPID + uint8_t isp_idL; + uint8_t isp_idH; +#endif +}; //hfst 1 + +struct sitronix_ts_platform_data { + int irq_gpio; + u32 irq_gpio_flags; + int reset_gpio; + u32 reset_gpio_flags; + char *name; + u32 button_map[4]; + u8 num_button; + u8 default_i2c; + u8 default_i2c_flag; +}; + +struct sitronix_ts_data { + struct i2c_client *client; + struct input_dev *input_dev; + struct input_dev *keyevent_input; + struct sitronix_ts_device_info ts_dev_info; + struct sitronix_ts_platform_data *host_if; + struct work_struct work; + int suspend_state; + spinlock_t irq_lock; + int irq_is_enable; + int irq_flags; + struct regulator *vdd_ana; + struct regulator *vcc_i2c; + struct mutex dev_mutex; + struct pinctrl *pinctrl; + struct pinctrl_state *pins_int_active; + struct pinctrl_state *pins_reset_active; + struct pinctrl_state *pins_reset_suspend; + struct pinctrl_state *pins_release; + int rawTestResult; + bool glove_mode; + bool cases_mode; + bool is_upgrading; + bool is_testing; + int fsmart_wakeup; + int irq_registered; + int fapp_in; + int max_raw_limit; + int min_raw_limit; + bool inputvalid; +}; + +typedef enum { + FIRMWARE_VERSION, + STATUS_REG, + DEVICE_CONTROL_REG, + TIMEOUT_TO_IDLE_REG, + XY_RESOLUTION_HIGH, + X_RESOLUTION_LOW, + Y_RESOLUTION_LOW, + DEVICE_CONTROL_REG2 = 0x09, + FIRMWARE_REVISION_3 = 0x0C, + FIRMWARE_REVISION_2, + FIRMWARE_REVISION_1, + FIRMWARE_REVISION_0, + FINGERS, + KEYS_REG, + XY0_COORD_H, + X0_COORD_L, + Y0_COORD_L, + I2C_PROTOCOL = 0x3E, + MAX_NUM_TOUCHES, + DATA_0_HIGH, + DATA_0_LOW, + MISC_Info = 0xF0, + MISC_CONTROL = 0xF1, + SMART_WAKE_UP_REG = 0xF2, + CHIP_ID = 0xF4, + XY_CHS = 0xF5, + PAGE_REG = 0xff, +} RegisterOffset; + +typedef enum { + XY_COORD_H, + X_COORD_L, + Y_COORD_L, + PIXEL_DATA_LENGTH_B, + PIXEL_DATA_LENGTH_A, +} PIXEL_DATA_FORMAT; + +#define X_RES_H_SHFT 4 +#define X_RES_H_BMSK 0xf +#define Y_RES_H_SHFT 0 +#define Y_RES_H_BMSK 0xf +//#define FINGERS_SHFT 0 +//#define FINGERS_BMSK 0xf +//#define X_COORD_VALID_SHFT 7 +//#define X_COORD_VALID_BMSK 0x1 +//#define X_COORD_H_SHFT 4 +//#define X_COORD_H_BMSK 0x7 +//#define Y_COORD_H_SHFT 0 +//#define Y_COORD_H_BMSK 0x7 + +struct sitronix_sensor_key_t { + unsigned int code; +}; + +extern struct sitronix_ts_data stx_gpts; + +/*st_rawtest*/ +extern int st_testraw_invoke(void); + +/*st_gesture*/ +extern int sitronix_swk_disable(void); +extern int sitronix_swk_enable(void); +extern int sitronix_swk_func(struct input_dev *dev); +extern bool sitronix_cases_mode_check(int x, int y); +extern int st_gesture_init(void); + +/*st_monitor*/ +extern int sitronix_monitor_start(void); +extern int sitronix_monitor_stop(void); +extern int sitronix_monitor_delay(void); + +/*st_sysfs*/ +extern int st_create_sysfs(struct i2c_client *client); +extern int st_remove_sysfs(struct i2c_client *client); +extern int st_dev_node_init(void); +extern void st_dev_node_exit(void); + +/*st_upgrade_fw*/ +extern int st_upgrade_fw(void); +extern int st_upgrade_fw_handler(void *unused); +extern int stx_force_upgrade_fw(char *path); ///////hfst +extern int stx_clr_crash_msg(void); +#ifdef ST_UPGRADE_BY_ISPID +extern int st_check_ispid(void); +#endif +/*sitronix_ts*/ +extern void st_reset_ic(void); +extern void stx_irq_enable(void); +extern void stx_irq_disable(void); + +/*st_utility*/ +extern void st_power_down(struct sitronix_ts_data *ts); +extern void st_power_up(struct sitronix_ts_data *ts); +extern int st_get_status(struct sitronix_ts_data *ts); +extern int st_print_version(struct sitronix_ts_data *ts); +extern int st_enter_glove_mode(struct sitronix_ts_data *ts); +extern int st_leave_glove_mode(struct sitronix_ts_data *ts); +extern int st_get_dev_status(struct i2c_client *client, uint8_t *err_code, uint8_t *dev_status); +extern int st_get_touch_info(struct sitronix_ts_data *ts); +extern int st_irq_off(void); +extern int st_irq_on(void); + +/*st_i2c*/ +extern s32 stx_i2c_write(struct i2c_client *client, u8 *buf, int len); +extern int stx_i2c_read(struct i2c_client *client, u8 *buffer, int len, u8 addr); +extern int stx_i2c_read_direct(st_u8 *rxbuf, int len); +extern int stx_i2c_read_bytes(st_u8 addr, st_u8 *rxbuf, int len); +extern int stx_i2c_write_bytes(st_u8 *txbuf, int len); +extern int stx_cmdio_read(int type, int address, unsigned char *buf, int len); +extern int stx_cmdio_write(int type, int address, unsigned char *buf, int len); + +#endif // __SITRONIX_I2C_TOUCH_h diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_custom_func.h b/drivers/input/touchscreen/sitronix/sitronix_ts_custom_func.h new file mode 100644 index 000000000000..b72d29cb9012 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_custom_func.h @@ -0,0 +1,25 @@ +#ifndef CUSTOM_FUNC_H__ +#define CUSTOM_FUNC_H__ + +#define ST_UPGRADE_FIRMWARE + +//#define ST_MONITOR_THREAD + +//#define ST_SMART_WAKE_UP + +//#define ST_TEST_RAW + +//#define ST_GLOVE_SWITCH_MODE + +//#define ST_CASES_SWITCH_MODE + +//#define ST_SENSOR_KEY + +//#define ST_DEBUG_EN + +#define ST_MAX_TOUCHES 5 + +#define STX_POWER_SUPPLY_EN + +#endif /* CUSTOM_FUNC_H__ */ + diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_i2c.c b/drivers/input/touchscreen/sitronix/sitronix_ts_i2c.c new file mode 100644 index 000000000000..cb265d324ba3 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_i2c.c @@ -0,0 +1,460 @@ +#include "sitronix_ts_custom_func.h" +#include "sitronix_ts.h" + +//#define CONFIG_MTK_I2C_EXTENSION +static DEFINE_MUTEX(i2c_rw_mutex); + +#ifdef CONFIG_MTK_I2C_EXTENSION + +#define IIC_MAX_TRANSFER_SIZE (8) +#define STX_ADDR_LENGTH (1) + +static s32 _do_i2c_read(struct i2c_client *client, struct i2c_msg *msgs, u16 addr, u8 *buffer, s32 len) +{ + s32 ret = -1; + s32 pos = 0; + s32 data_length = len; + s32 transfer_length = 0; + u8 *data = NULL; + u16 address = addr; + + data = (u8 *) kmalloc(IIC_MAX_TRANSFER_SIZE < (len + STX_ADDR_LENGTH) ? IIC_MAX_TRANSFER_SIZE : (len + STX_ADDR_LENGTH), GFP_KERNEL); + if (data == NULL) { + return -ENOENT; + } + msgs[1].buf = data; + msgs[0].len = STX_ADDR_LENGTH; + + while (pos != data_length) { + if ((data_length - pos) > IIC_MAX_TRANSFER_SIZE) { + transfer_length = IIC_MAX_TRANSFER_SIZE; + } else { + transfer_length = data_length - pos; + } + msgs[0].buf[0] = address & 0xFF; + msgs[1].len = transfer_length; + + ret = i2c_transfer(client->adapter, msgs, 2); + if (ret != 2) { + STX_ERROR("I2c Transfer error! (%d)", ret); + kfree(data); + return -EIO; + } + memcpy (&buffer[pos], msgs[1].buf, transfer_length); + pos += transfer_length; + address += transfer_length; + } + + kfree(data); + return ret; +} + +static s32 _do_i2c_write(struct i2c_client *client, struct i2c_msg *msg, u16 addr, u8 *buffer, s32 len) +{ + s32 ret = -1; + s32 pos = 0; + s32 data_length = len - STX_ADDR_LENGTH; + s32 transfer_length = 0; + u8 *data = NULL; + u16 address = addr; + + data = (u8 *) kmalloc(IIC_MAX_TRANSFER_SIZE < (len + STX_ADDR_LENGTH) ? IIC_MAX_TRANSFER_SIZE : (len + STX_ADDR_LENGTH), GFP_KERNEL); + if (data == NULL) + return -ENOENT; + + msg->buf = data; + + while (pos != data_length) { + if ((data_length - pos) > (IIC_MAX_TRANSFER_SIZE - STX_ADDR_LENGTH)) { + transfer_length = IIC_MAX_TRANSFER_SIZE - STX_ADDR_LENGTH; + } else { + transfer_length = data_length - pos; + } + msg->buf[0] = address & 0xFF; + msg->len = transfer_length + STX_ADDR_LENGTH; + memcpy(&msg->buf[STX_ADDR_LENGTH], &buffer[pos], transfer_length); + + ret = i2c_transfer(client->adapter, msg, 1); + if (ret != 1) { + STX_ERROR("I2c transfer error! (%d)", ret); + kfree(data); + return -EIO; + } + pos += transfer_length; + address += transfer_length; + } + + kfree(data); + return ret; +} +#endif + +s32 stx_i2c_write(struct i2c_client *client, u8 *buf, int len) +{ + s32 ret; + + struct i2c_msg msg = { + .flags = 0, +#ifdef CONFIG_MTK_I2C_EXTENSION + .addr = (client->addr & I2C_MASK_FLAG) | (I2C_ENEXT_FLAG), /*remain*/ + .timing = I2C_MASTER_CLOCK, +#else + .addr = client->addr, /*remain*/ + .len = len, + .buf = buf, +#endif + }; + + mutex_lock(&i2c_rw_mutex); + +#ifdef CONFIG_MTK_I2C_EXTENSION + ret = _do_i2c_write(client, &msg, buf[0], &buf[1], len); +#else + ret = i2c_transfer(client->adapter, &msg, 1); +#endif + if (ret < 0) { + STX_ERROR("Sitronix I2C error in tpd_i2c_write, ret = %d", ret); + mutex_unlock(&i2c_rw_mutex); + return ret; + } + mutex_unlock(&i2c_rw_mutex); + + return ret; +} + +int stx_i2c_read(struct i2c_client *client, u8 *buffer, int len, u8 addr) +{ + int ret; + u8 txbuf = addr; + + struct i2c_msg msgs[2] = { + { +#ifdef CONFIG_MTK_I2C_EXTENSION + .addr = ((client->addr & I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)), + .timing = I2C_MASTER_CLOCK, +#else + .addr = client->addr, +#endif + .flags = 0, + .buf = &txbuf, + .len = 1, + }, + { +#ifdef CONFIG_MTK_I2C_EXTENSION + .addr = ((client->addr & I2C_MASK_FLAG) | (I2C_ENEXT_FLAG)), + .timing = I2C_MASTER_CLOCK, +#else + .addr = client->addr, + .len = len, + .buf = buffer, +#endif + .flags = I2C_M_RD, + + }, + }; + + mutex_lock(&i2c_rw_mutex); +#ifdef CONFIG_MTK_I2C_EXTENSION + ret = _do_i2c_read(client, msgs, addr, buffer, len); +#else + ret = i2c_transfer(client->adapter, msgs, 2); +#endif + if (ret < 0) { + STX_ERROR("Sitronix I2C error in tpd_i2c_read, ret = %d", ret); + mutex_unlock(&i2c_rw_mutex); + return ret; + } + mutex_unlock(&i2c_rw_mutex); + + return len; +} + +int stx_i2c_read_direct(st_u8 *rxbuf, int len) +{ + int ret = 0; + + mutex_lock(&i2c_rw_mutex); + ret = i2c_master_recv(stx_gpts.client, rxbuf, len); + if (ret < 0) { + STX_ERROR("read direct error (%d)", ret); + mutex_unlock(&i2c_rw_mutex); + return ret; + } + mutex_unlock(&i2c_rw_mutex); + udelay(50); + return len; +} + +int stx_i2c_read_bytes(st_u8 addr, st_u8 *rxbuf, int len) +{ +#ifdef CONFIG_MTK_I2C_EXTENSION + stx_i2c_read(stx_gpts.client, rxbuf, len, addr); + return 0; +#else + int ret = 0; + st_u8 txbuf = addr; + + mutex_lock(&i2c_rw_mutex); + ret = i2c_master_send(stx_gpts.client, &txbuf, 1); + if (ret < 0) { + STX_ERROR("stx_i2c_read_bytes write 0x%x error (%d)", addr, ret); + goto unlock; + } + udelay(50); + ret = i2c_master_recv(stx_gpts.client, rxbuf, len); + if (ret < 0) { + STX_ERROR("stx_i2c_read_bytes read 0x%x error (%d)", addr, ret); + goto unlock; + } + mutex_unlock(&i2c_rw_mutex); + udelay(50); + return len; +unlock: + mutex_unlock(&i2c_rw_mutex); + return ret; +#endif +} + +int stx_i2c_write_bytes(st_u8 *txbuf, int len) +{ +#ifdef CONFIG_MTK_I2C_EXTENSION + stx_i2c_write(stx_gpts.client, txbuf, len); + return 0; +#else + int ret = 0; + if (txbuf == NULL) + return -EPERM; + + mutex_lock(&i2c_rw_mutex); + ret = i2c_master_send(stx_gpts.client, txbuf, len); + if (ret < 0) { + STX_ERROR("stx_i2c_write_bytes write 0x%x error (%d)", *txbuf, ret); + mutex_unlock(&i2c_rw_mutex); + return ret; + } + mutex_unlock(&i2c_rw_mutex); + udelay(50); + return len; +#endif +} + +struct CommandIoPacket { + unsigned char CmdID; + unsigned char ValidDataSize; + unsigned char CmdData[30]; +}; + +static void STChecksumCalculation(unsigned short *pChecksum, unsigned char *pInData, unsigned long Len) +{ + unsigned long i; + unsigned char LowByteChecksum; + + for (i = 0; i < Len; i++) { + *pChecksum += (unsigned short)pInData[i]; + LowByteChecksum = (unsigned char)(*pChecksum & 0xFF); + LowByteChecksum = (LowByteChecksum) >> 7 | (LowByteChecksum) << 1; + *pChecksum = (*pChecksum & 0xFF00) | LowByteChecksum; + } +} + +static bool stx_SetH2DReady(void) +{ + int ret; + bool bRet = false; + unsigned char buf[2]; + + buf[0] = 0xF8; + buf[1] = 0x01; + ret = stx_i2c_write_bytes(buf, 2); + if (ret <= 0) { + STX_ERROR("stx_SetH2DReady: write ready error."); + bRet = false; + } else { + bRet = true; + } + return bRet; +} + +static bool stx_GetH2DReady(void) +{ + bool bRet = false; + unsigned char tmp = 0xff; + int ret, retry = 0; + + do { + msleep(1); + ret = stx_i2c_read_bytes(0xF8, &tmp, 1); + if (ret <= 0) { + STX_ERROR("stx_GetH2DReady: retry(%d) read ready.", retry++); + } else { + if (tmp == 0x01) { + STX_ERROR("retry ............"); + retry = 0; + continue; + } + } + if (retry > 1000) { + STX_ERROR("stx_GetH2DReady: time out"); + bRet = false; + return bRet; + } + } while (ret <= 0); + + if (tmp == 0x00) { /* OK */ + bRet = true; + } else if (tmp == 0x80) { + STX_ERROR("stx_ReadIOCommand: Unknown Command ID."); + bRet = false; + } else if (tmp == 0x81) { + STX_ERROR("stx_ReadIOCommand: Host to device command checksum error."); + bRet = false; + } else { + STX_ERROR("Unknown Error(0x%02X).", tmp); + bRet = false; + } + return bRet; +} + +static bool stx_ReadIOCommand(struct CommandIoPacket *packet) +{ + bool bRet = false; + int ret; + unsigned char tmp[32]; + /* process commmand */ + memset(tmp, 0, 32); + ret = stx_i2c_read_bytes(0xD0, tmp, 32); + if (ret <= 0) { + STX_ERROR("stx_ReadIOCommand: read packet error."); + bRet = false; + } else { + memcpy((void *)packet, (const void *)tmp, 32); + bRet = true; + } + return bRet; +} + +static bool stx_WriteIOCommand(struct CommandIoPacket *packet) +{ + bool bRet = false; + int ret; + unsigned char tmp[33]; + + memset(tmp, 0x00, 33); + memcpy((void *)tmp + 1, (const void *)packet, 32); + tmp[0] = 0xD0; + ret = stx_i2c_write_bytes(tmp, 33); + if (ret <= 0) { + STX_ERROR("stx_WriteIOCommand: write packet error."); + bRet = false; + } else { + bRet = true; + } + return bRet; +} + +int stx_cmdio_read(int type, int address, unsigned char *buf, int len) +{ + int getLen = 0, offset = 0; + struct CommandIoPacket outPacket; + struct CommandIoPacket inPacket; + int remain = len; + int pktDataSize = 0; + unsigned short chksum, vchksum; + int retry = 0; + + do { + pktDataSize = (remain > 24) ? 24 : remain; + outPacket.CmdID = 0x02; /* read RAM/ROM */ + outPacket.ValidDataSize = 5; + outPacket.CmdData[0] = type; /* RAM */ + outPacket.CmdData[1] = (((address + offset) >> 8) & 0xFF); /* high byte */ + outPacket.CmdData[2] = (((address + offset)) & 0xFF); /* low byte */ + outPacket.CmdData[3] = pktDataSize; + chksum = 0; + STChecksumCalculation(&chksum, (unsigned char *)&outPacket, 6); + outPacket.CmdData[4] = (chksum & 0xFF); + + if (!stx_WriteIOCommand(&outPacket)) { + STX_ERROR("stx_cmdio_read: (E)stx_WriteIOCommand."); + return getLen; + } + if (!stx_SetH2DReady()) { + STX_ERROR("stx_cmdio_read: (E)stx_SetH2DReady."); + return getLen; + } + if (!stx_GetH2DReady()) { + STX_ERROR("stx_cmdio_read: (E)stx_GetH2DReady."); + return getLen; + } + if (!stx_ReadIOCommand(&inPacket)) { + STX_ERROR("stx_cmdio_read: (E)stx_ReadIOCommand."); + return getLen; + } + if (inPacket.CmdID == 0x82 && inPacket.CmdData[0] == type) { + vchksum = 0; + STChecksumCalculation(&vchksum, (unsigned char *)&inPacket, inPacket.ValidDataSize + 1); + vchksum = (vchksum & 0xFF); + if (vchksum == inPacket.CmdData[inPacket.ValidDataSize - 1]) { + memcpy(buf + offset, &(inPacket.CmdData[2]), inPacket.CmdData[1]); + remain -= inPacket.CmdData[1]; /* data size */ + offset += inPacket.CmdData[1]; + getLen += inPacket.CmdData[1]; + } else { + /* drop packet */ + STX_ERROR("Invalid Cheksum Expect(0x%02x) Get(0x%02X)", vchksum, inPacket.CmdData[inPacket.ValidDataSize - 1]); + } + retry = 0; + } else { + /* drop packet */ + STX_ERROR("Unexpect CmdID (0x%02x) or Type (0x%02X)", inPacket.CmdID, inPacket.CmdData[0]); + retry++; + if (retry > 10) + return -EPERM; + } + } while (remain > 0); + return getLen; +} + +int stx_cmdio_write(int type, int address, unsigned char *buf, int len) +{ + int setLen = 0, offset = 0; + struct CommandIoPacket outPacket; + int remain = len; + int pktDataSize = 0; + unsigned short chksum; /* , vchksum; */ + + do { + pktDataSize = (remain > 24) ? 24 : remain; + outPacket.CmdID = 0x01; /* write RAM/ROM */ + outPacket.ValidDataSize = pktDataSize + 5; + outPacket.CmdData[0] = type; + outPacket.CmdData[1] = (((address + offset) >> 8) & 0xFF); /* high byte */ + outPacket.CmdData[2] = (((address + offset)) & 0xFF); /* low byte */ + outPacket.CmdData[3] = pktDataSize; + memcpy((void *)&(outPacket.CmdData[4]), (const void *)(buf + offset), pktDataSize); + chksum = 0; + STChecksumCalculation(&chksum, (unsigned char *)&outPacket, outPacket.ValidDataSize + 1); + outPacket.CmdData[outPacket.ValidDataSize - 1] = (chksum & 0xFF); + if (!stx_WriteIOCommand(&outPacket)) { + STX_ERROR("TDU_SetDeviceRam: (E)stx_WriteIOCommand."); + return setLen; + } + if (!stx_SetH2DReady()) { + STX_ERROR("TDU_SetDeviceRam: (E)stx_SetH2DReady."); + return setLen; + } + /* check processing result */ + if (!stx_GetH2DReady()) { + STX_ERROR("TDU_SetDeviceRam: (E)stx_GetH2DReady."); + return setLen; + } else { + /* processing write command OK */ + remain -= pktDataSize; + offset += pktDataSize; + setLen += pktDataSize; + } + + } while (remain > 0); + + return setLen; +} diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_monitor.c b/drivers/input/touchscreen/sitronix/sitronix_ts_monitor.c new file mode 100644 index 000000000000..cf5ba3001983 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_monitor.c @@ -0,0 +1,159 @@ +#include +#include "sitronix_ts.h" + +#define SITRONIX_MT_DIS_LIMIT 2000 +#define DELAY_MONITOR_THREAD_START_PROBE 300 + +static int i2cErrorCount; +static struct task_struct *SitronixMonitorThread; +static int gMonitorThreadSleepInterval = 300; // 0.3 sec +static atomic_t iMonitorThreadPostpone = ATOMIC_INIT(0); +static int sitronix_ts_delay_monitor_thread_start = DELAY_MONITOR_THREAD_START_PROBE; +static uint8_t PreCheckData[4]; +static int StatusCheckCount; +static int DisCheckCount; + +static int sitronix_ts_monitor_thread(void *data) +{ + int ret = 0; + int i; + uint8_t buf[8] = {0}; + uint8_t disbuf[40 * 2 + 4] = {0}; + int result = 0; + signed short disv; + bool disOK; + + STX_INFO("%s start and delay %d ms", __func__, sitronix_ts_delay_monitor_thread_start); + msleep(DELAY_MONITOR_THREAD_START_PROBE); + while (!kthread_should_stop()) { + if (atomic_read(&iMonitorThreadPostpone)) { + atomic_set(&iMonitorThreadPostpone, 0); + } else if (stx_gpts.suspend_state || stx_gpts.is_upgrading || stx_gpts.is_testing || stx_gpts.fapp_in) { + STX_ERROR("%s suspend state = %d ,is_upgrading = %d ,is_testing = %d,fapp_in=%d ", __func__, stx_gpts.suspend_state, stx_gpts.is_upgrading, stx_gpts.is_testing, stx_gpts.fapp_in); + } else { + mutex_lock(&stx_gpts.dev_mutex); + ret = stx_i2c_read_bytes(0x1, buf, 8); + ret = stx_i2c_read_bytes(0x40, disbuf, 4 + (stx_gpts.ts_dev_info.tx_chs * 2)); + mutex_unlock(&stx_gpts.dev_mutex); + if (ret < 0) { + STX_ERROR("read I2C fail (%d)", ret); + result = 0; + goto exit_i2c_invalid; + } + STX_DEBUG("monitor sensing counter: %02x %02x", buf[6], buf[7]); + + if ((buf[0] & 0x0F) == 0x6) { + result = 0; + STX_ERROR("read Status: bootcode"); + goto exit_i2c_invalid; + } else { + result = 1; + if (PreCheckData[0] == buf[6] && PreCheckData[1] == buf[7]) + StatusCheckCount++; + else + StatusCheckCount = 0; + PreCheckData[0] = buf[6]; + PreCheckData[1] = buf[7]; + + if (3 <= StatusCheckCount) { + STX_ERROR("IC Status doesn't update! "); + result = -1; + StatusCheckCount = 0; + } + } + + if (disbuf[0] == 0x86) { + disOK = true; + for (i = 0; i < stx_gpts.ts_dev_info.tx_chs; i++) { + disv = (signed short)((disbuf[4 + 2 * i]) * 0x100 + disbuf[5 + 2 * i]); + + if (disv > SITRONIX_MT_DIS_LIMIT || disv < -SITRONIX_MT_DIS_LIMIT) { + STX_ERROR("MT get error Distance for (%d,%d) , distance value = %d", disbuf[2], i, disv); + disOK = false; + break; + } + } + + if (!disOK) + DisCheckCount++; + else + DisCheckCount = 0; + + if (3 <= DisCheckCount) { + STX_ERROR("Distance error for 3 times! "); + result = -1; + DisCheckCount = 0; + } + } + if (-1 == result) { + STX_ERROR("Chip abnormal, reset it!"); + st_reset_ic(); +#ifdef ST_GLOVE_SWITCH_MODE + if (stx_gpts.glove_mode) + st_enter_glove_mode(&stx_gpts); +#endif + i2cErrorCount = 0; + StatusCheckCount = 0; + } + exit_i2c_invalid: + if (0 == result) { + i2cErrorCount++; + if ((2 <= i2cErrorCount)) { + STX_ERROR("I2C abnormal or status bootcode, reset it!"); + st_reset_ic(); +#ifdef ST_GLOVE_SWITCH_MODE + if (stx_gpts.glove_mode) + st_enter_glove_mode(&stx_gpts); +#endif + i2cErrorCount = 0; + StatusCheckCount = 0; + } + } else { + i2cErrorCount = 0; + } + } + msleep(gMonitorThreadSleepInterval); + } + STX_DEBUG("%s exit", __FUNCTION__); + return 0; +} + +int sitronix_monitor_start(void) +{ + STX_INFO("%s ENTER ", __func__); +//== Add thread to monitor chip + atomic_set(&iMonitorThreadPostpone, 1); + + if (!SitronixMonitorThread) { + SitronixMonitorThread = kthread_run(sitronix_ts_monitor_thread, "Sitronix", "Monitorthread"); + if (IS_ERR(SitronixMonitorThread)) { + SitronixMonitorThread = NULL; + STX_ERROR("sitronix_monitor_start err"); + return 1; + } + STX_INFO("%s success ", __func__); + } else { + STX_ERROR("%s already start ", __func__); + } + return 0; +} + +int sitronix_monitor_stop(void) +{ + STX_INFO("%s ENTER ", __func__); + if (SitronixMonitorThread) { + kthread_stop(SitronixMonitorThread); + SitronixMonitorThread = NULL; + STX_INFO("%s success ", __func__); + } else { + STX_ERROR("sitronix_monitor_stop already stop"); + } + return 0; +} + +int sitronix_monitor_delay(void) +{ + atomic_set(&iMonitorThreadPostpone, 1); + + return 0; +} diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_rawtest.c b/drivers/input/touchscreen/sitronix/sitronix_ts_rawtest.c new file mode 100644 index 000000000000..94155f773d7d --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_rawtest.c @@ -0,0 +1,243 @@ +#include "sitronix_ts.h" + +#define MAX_RX_COUNT 12 +#define MAX_TX_COUNT 21 +#define MAX_KEY_COUNT 4 +#define MAX_SENSOR_COUNT 37 // MAX_RX_COUNT + MAX_TX_COUNT + MAX_KEY_COUNT + +#define ST_RAW_LOG_PATH "/sdcard/ST_RAW_LOG.txt" +#define ST_LOGFILE_MAX_LENGTH 80 + +//#define ST_RAWTEST_LOGFILE + +static st_int st_drv_Get_2D_Length(st_int tMode[]) +{ + if (tMode[0] == 0) + return tMode[1]; + else + return tMode[2]; +} + +static st_int st_drv_Get_2D_Count(st_int tMode[]) +{ + if (tMode[0] == 0) + return tMode[2]; + else + return tMode[1]; +} + +static st_int st_drv_Get_2D_RAW(st_int tMode[], st_int rawJ[], st_int gsMode, st_u8 *rtbuf) +{ + st_int count = st_drv_Get_2D_Count(tMode); + st_int length = st_drv_Get_2D_Length(tMode); + st_int maxTimes = 40; + st_int dataCount = 0; + st_int times = maxTimes; + st_int readLength = 8 + 2 * length; + + st_u8 raw[0x40]; + st_int i = 0; + // st_int j=0; + st_int index; + st_int keyAddCount = (tMode[3] > 0) ? 1 : 0; + st_int rawI; + st_int errorCount = 0; + st_u8 isFillData[MAX_SENSOR_COUNT]; + +#ifdef ST_RAWTEST_LOGFILE + struct file *filp; + char data_buf[ST_LOGFILE_MAX_LENGTH]; + mm_segment_t fs; + loff_t pos; + filp = filp_open(ST_RAW_LOG_PATH, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (IS_ERR(filp)) { + STX_ERROR("ST open %s error...", ST_RAW_LOG_PATH); + return -EPERM; + } + + fs = get_fs(); + set_fs(KERNEL_DS); + pos = 0; +#endif + + memset(raw, 0, 0x40); + memset(isFillData, 0, count + keyAddCount); + + while (dataCount != (count + keyAddCount) && times-- > 0) { + stx_i2c_read_bytes(0x40, raw, readLength); + if (raw[0] == 6) { + index = raw[2]; + if (isFillData[index] == 0) { + isFillData[index] = 1; + dataCount++; +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "index%d :", index); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + for (i = 0; i < length; i++) { + rawI = raw[4 + 2 * i] * 0x100 + raw[5 + 2 * i]; +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "%d,", rawI); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + + STX_INFO("Sensor RAW %d,%d = %d", index, i, rawI); + if (rawI > stx_gpts.max_raw_limit || rawI < stx_gpts.min_raw_limit) { +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "Error: Sensor RAW %d,%d = %d out of limity (%d,%d)\n", index, i, rawI, stx_gpts.min_raw_limit, stx_gpts.max_raw_limit); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + STX_ERROR("Error: Sensor RAW %d,%d = %d out of limity (%d,%d)", index, i, rawI, stx_gpts.min_raw_limit, stx_gpts.max_raw_limit); + rtbuf[index * length + i] = 1; + errorCount++; + } + } +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "\n"); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + } + } else if (raw[0] == 7) { //key + if (isFillData[count] == 0) { + isFillData[count] = 1; + dataCount++; +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "key :"); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + for (i = 0; i < tMode[3]; i++) { + rawI = raw[4 + 2 * i] * 0x100 + raw[5 + 2 * i]; +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "%d,", rawI); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + if (rawI > stx_gpts.max_raw_limit || rawI < stx_gpts.min_raw_limit) { +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "Error: Key RAW %d = %d out of limity (%d,%d)\n", i, rawI, stx_gpts.min_raw_limit, stx_gpts.max_raw_limit); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + STX_ERROR("Error: Key RAW %d = %d out of limity ", i, rawI); + rtbuf[count * length + i] = 1; + errorCount++; + } + } +#ifdef ST_RAWTEST_LOGFILE + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "\n"); + vfs_write(filp, data_buf, strlen(data_buf), &pos); +#endif + } + } + } +#ifdef ST_RAWTEST_LOGFILE + if ((times > 0) && (errorCount == 0)) { + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "RAW TEST PASS"); + vfs_write(filp, data_buf, strlen(data_buf), &pos); + } else { + snprintf(data_buf, ST_LOGFILE_MAX_LENGTH, "RAW TEST FAILED"); + vfs_write(filp, data_buf, strlen(data_buf), &pos); + } + + set_fs(fs); + filp_close(filp, NULL); + STX_INFO("Test result file : %s", ST_RAW_LOG_PATH); +#endif + + if (times <= 0) { + STX_ERROR("Get 2D RAW fail!"); + return -EPERM; + } + return errorCount; +} +/* + rtbuf is a u8 buf[X * Y + K] + X:sensor count of X + Y:sensor count of Y + K:sensor count of K + buf[?] = 0 means pass + buf[?] = 1 means fail + bug[20] means TX: 20/RX_count , RX: 20%RX_count + RX_count : maybe X or Y , according layout.. +*/ +static int st_drv_test_raw(st_u8 *rtbuf) +{ + st_int result = 0; + st_u8 buf[8]; + st_int sensorCount = 0; + st_int raw_J[MAX_SENSOR_COUNT]; + st_int tMode[4]; + STX_INFO("start of st_drv_test_raw"); + //check status + memset(buf, 0, 8); + if (stx_i2c_read_bytes(1, buf, 8) < 0) { + STX_ERROR("get status fail"); + return -EPERM; + } + + STX_INFO("status :0x%X", buf[0]); + if (buf[0] != 0 && buf[0] != 4) { + STX_ERROR("can't test in this status"); + result = -1; + goto st_drv_notest; + } + //go develop page + memset(buf, 0, 8); + stx_i2c_read_bytes(0xFF, buf, 8); + if (buf[1] != 0x53 || buf[2] != 0x54 || buf[3] != 0x50 || buf[4] != 0x41) { + STX_ERROR("ic check fail , not sitronix protocol type"); + result = -EPERM; + goto st_drv_notest; + } + + buf[0] = buf[6]; + buf[1] = buf[7]; + stx_i2c_write_bytes(buf, 2); + + st_msleep(5); + stx_i2c_read_bytes(0xFF, buf, 2); + STX_INFO("page 0x%X", buf[0]); + if (buf[0] != 0xEF) { + STX_ERROR("change page fail"); + result = -EPERM; + goto st_drv_notest; + } + + stx_i2c_read_bytes(0xF0, buf, 8); + tMode[0] = ((buf[0] & 0x04) >> 2); //tx flag + + tMode[1] = buf[5]; //x + tMode[2] = buf[6]; //y + tMode[3] = buf[7] & 0xf; // key + + sensorCount = tMode[1] + tMode[2] + tMode[3]; + + STX_INFO("sensor count:%d %d %d", tMode[1], tMode[2], tMode[3]); + + memset(rtbuf, 0, tMode[1] * tMode[2] + tMode[3]); + //get raw and judge + result = st_drv_Get_2D_RAW(tMode, raw_J, 0, rtbuf); + if (result != 0) { + STX_ERROR("Error: Test fail with %d sensor", result); + result = -EPERM; + } else { + STX_INFO("Test successed!"); + } + //reset + buf[0] = 2; + buf[1] = 1; + stx_i2c_write_bytes(buf, 2); + + st_msleep(100); +st_drv_notest: + return result; +} + +int st_testraw_invoke(void) +{ + st_u8 fstatus; + st_u8 fraw[MAX_RX_COUNT * MAX_TX_COUNT]; + + stx_gpts.is_testing = true; + fstatus = st_drv_test_raw(fraw); + stx_gpts.is_testing = false; + return fstatus; +} diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_swu_gesture.c b/drivers/input/touchscreen/sitronix/sitronix_ts_swu_gesture.c new file mode 100644 index 000000000000..8edb234f5e24 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_swu_gesture.c @@ -0,0 +1,251 @@ +#include "sitronix_ts_custom_func.h" +#include "sitronix_ts.h" + +#define SWK_NO 0x0 +#define GESTURE_LEFT 0xB4 +#define GESTURE_RIGHT 0xB0 +#define GESTURE_UP 0xBC +#define GESTURE_DOWN 0xB8 +#define GESTURE_DOUBLECLICK 0xC0 +#define GESTURE_SINGLECLICK 0xC8 +#define GESTURE_O 0x6F +#define GESTURE_W 0x77 +#define GESTURE_M 0x6D +#define GESTURE_E 0x65 +#define GESTURE_S 0x73 +#define GESTURE_V 0x76 +#define GESTURE_Z 0x7A +#define GESTURE_C 0x63 + +#define WINDOW_L 200 +#define WINDOW_R 600 +#define WINDOW_T 200 +#define WINDOW_B 600 + +#define KEY_GESTURE_U KEY_U +#define KEY_GESTURE_UP KEY_UP +#define KEY_GESTURE_DOWN KEY_DOWN +#define KEY_GESTURE_LEFT KEY_LEFT +#define KEY_GESTURE_RIGHT KEY_RIGHT +#define KEY_GESTURE_O KEY_O +#define KEY_GESTURE_E KEY_E +#define KEY_GESTURE_M KEY_M +#define KEY_GESTURE_L KEY_L +#define KEY_GESTURE_W KEY_W +#define KEY_GESTURE_S KEY_S +#define KEY_GESTURE_V KEY_V +#define KEY_GESTURE_C KEY_C +#define KEY_GESTURE_Z KEY_Z + +#ifdef SITRONIX_GESTURE +typedef enum { + G_NO = 0x0, + G_ZOOM_IN = 0x2, + G_ZOOM_OUT = 0x3, + G_L_2_R = 0x4, + G_R_2_L = 0x5, + G_T_2_D = 0x6, + G_D_2_T = 0x7, + G_PALM = 0x8, + G_SINGLE_TAB = 0x9, +} GESTURE_ID; +#endif + +static atomic_t swk_flag = ATOMIC_INIT(0); + +static void sitronix_swk_flag_set(int flag) +{ + atomic_set(&swk_flag, flag); +} + +static void st_swk_enable(struct sitronix_ts_data *ts) +{ + int ret = 0; + unsigned char buffer[2] = {0}; + ret = stx_i2c_read(ts->client, buffer, 1, MISC_CONTROL); + if (ret == 1) { + buffer[1] = buffer[0] | 0x80; + buffer[0] = MISC_CONTROL; + stx_i2c_write(ts->client, buffer, 2); + + msleep(50); + } +} + +static int sitronix_swk_flag_get(void) +{ + int flag = 0; + flag = atomic_read(&swk_flag); + return flag; +} + +int sitronix_swk_enable(void) +{ + sitronix_swk_flag_set(1); + st_swk_enable(&stx_gpts); + + return 0; +} + +int sitronix_swk_disable(void) +{ + sitronix_swk_flag_set(0); + + return 0; +} + +static int st_get_wakeup_status(struct sitronix_ts_data *ts, char *buffer) +{ + int ret = -1; + + ret = stx_i2c_read(ts->client, buffer, 1, SMART_WAKE_UP_REG); + + return ret; +} + +int sitronix_swk_func(struct input_dev *dev) +{ + int gesture = 0; + int gesture_id = 0; + int ret = 0; + char buf[2] = {0}; + + if (sitronix_swk_flag_get() == 1) { + ret = st_get_wakeup_status(&stx_gpts, buf); + if (ret != 1) { + STX_ERROR("sitronix_swk_func 1"); + return 1; + } + + if (buf[0] == SWK_NO) { + STX_ERROR("sitronix_swk_func 2"); + return 2; + } + gesture_id = buf[0]; + + switch (gesture_id) { + case GESTURE_LEFT: + gesture = KEY_GESTURE_LEFT; + break; + case GESTURE_RIGHT: + gesture = KEY_GESTURE_RIGHT; + break; + case GESTURE_UP: + gesture = KEY_GESTURE_UP; + break; + case GESTURE_DOWN: + gesture = KEY_GESTURE_DOWN; + break; + case GESTURE_DOUBLECLICK: + gesture = KEY_POWER; //KEY_GESTURE_U; + break; + case GESTURE_SINGLECLICK: + gesture = KEY_POWER; + break; + case GESTURE_O: + gesture = KEY_GESTURE_O; + break; + case GESTURE_W: + gesture = KEY_GESTURE_W; + break; + case GESTURE_M: + gesture = KEY_GESTURE_M; + break; + case GESTURE_E: + gesture = KEY_GESTURE_E; + break; + case GESTURE_S: + gesture = KEY_GESTURE_S; + break; + case GESTURE_V: + gesture = KEY_GESTURE_V; + break; + case GESTURE_Z: + gesture = KEY_GESTURE_Z; + break; + case GESTURE_C: + gesture = KEY_GESTURE_C; + break; + default: + gesture = -1; + break; + } + + STX_INFO("sitronix_swk_func , gesture_id:0x%X, gesture = 0x%x", gesture_id, gesture); + if (gesture != -1) { + input_report_key(dev, gesture, 1); + input_sync(dev); + input_report_key(dev, gesture, 0); + input_sync(dev); + } + return 0; + } else { + return 3; + } +} + +int st_gesture_init(void) +{ + struct input_dev *input_dev = stx_gpts.input_dev; //tpd->dev; + + input_set_capability(input_dev, EV_KEY, KEY_F13); + input_set_capability(input_dev, EV_KEY, KEY_F14); + input_set_capability(input_dev, EV_KEY, KEY_POWER); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_U); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_UP); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_DOWN); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_LEFT); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_RIGHT); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_O); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_E); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_M); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_L); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_W); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_S); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_V); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_Z); + input_set_capability(input_dev, EV_KEY, KEY_GESTURE_C); + + __set_bit(KEY_GESTURE_RIGHT, input_dev->keybit); + __set_bit(KEY_GESTURE_LEFT, input_dev->keybit); + __set_bit(KEY_GESTURE_UP, input_dev->keybit); + __set_bit(KEY_GESTURE_DOWN, input_dev->keybit); + __set_bit(KEY_GESTURE_U, input_dev->keybit); + __set_bit(KEY_GESTURE_O, input_dev->keybit); + __set_bit(KEY_GESTURE_E, input_dev->keybit); + __set_bit(KEY_GESTURE_M, input_dev->keybit); + __set_bit(KEY_GESTURE_W, input_dev->keybit); + __set_bit(KEY_GESTURE_L, input_dev->keybit); + __set_bit(KEY_GESTURE_S, input_dev->keybit); + __set_bit(KEY_GESTURE_V, input_dev->keybit); + __set_bit(KEY_GESTURE_C, input_dev->keybit); + __set_bit(KEY_GESTURE_Z, input_dev->keybit); + + __set_bit(KEY_POWER, input_dev->keybit); + + return 0; +} + +#ifdef SITRONIX_GESTURE +void sitronix_gesture_func(struct input_dev *input_dev, int id) +{ + if (id == G_PALM) { + STX_INFO("Gesture for Palm to suspend "); + input_report_key(input_dev, KEY_POWER, 1); // KEY_LEFT, 1); + input_sync(input_dev); + input_report_key(input_dev, KEY_POWER, 0); + input_sync(input_dev); + } +} +#endif + +bool sitronix_cases_mode_check(int x, int y) +{ + bool rt = true; +#ifdef ST_CASES_SWITCH_MODE + if (stx_gpts.cases_mode) + if (x < WINDOW_L || x > WINDOW_R || y < WINDOW_T || y > WINDOW_B) + rt = false; +#endif + return rt; +} diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_sysfs.c b/drivers/input/touchscreen/sitronix/sitronix_ts_sysfs.c new file mode 100644 index 000000000000..7d4406fbcbaa --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_sysfs.c @@ -0,0 +1,588 @@ +#include +#include "sitronix_ts_custom_func.h" +#include "sitronix_ts.h" + +char stinfbuf[16]; + +static ssize_t st_inform_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + ssize_t sret; + mutex_lock(&stx_gpts.dev_mutex); + st_get_touch_info(&stx_gpts); + mutex_unlock(&stx_gpts.dev_mutex); +#ifdef ST_UPGRADE_BY_ISPID + sret = snprintf(buf, 1000, + "Sitronix touch\n" + "FW Version = %d\n" + "FW Revision = %s\n" + "Channels = %d x %d\n" + "Max touches = %d\n" + "res = %d x %d\n" + "chip = 0x%x\n" + "ispidL = 0x%x\n" + "ispidH = 0x%x\n", + stx_gpts.ts_dev_info.fw_version[0], + stx_gpts.ts_dev_info.fw_revision, + stx_gpts.ts_dev_info.rx_chs, stx_gpts.ts_dev_info.tx_chs, + stx_gpts.ts_dev_info.max_touches, + stx_gpts.ts_dev_info.x_res, stx_gpts.ts_dev_info.y_res, + stx_gpts.ts_dev_info.chip_id, + stx_gpts.ts_dev_info.isp_idL, + stx_gpts.ts_dev_info.isp_idH); +#else + sret = snprintf(buf, 1000, + "Sitronix touch\n" + "FW Version = %d\n" + "FW Revision = %s\n" + "Channels = %d x %d\n" + "Max touches = %d\n" + "res = %d x %d\n" + "chip = 0x%x\n", + stx_gpts.ts_dev_info.fw_version[0], + stx_gpts.ts_dev_info.fw_revision, + stx_gpts.ts_dev_info.rx_chs, stx_gpts.ts_dev_info.tx_chs, + stx_gpts.ts_dev_info.max_touches, + stx_gpts.ts_dev_info.x_res, stx_gpts.ts_dev_info.y_res, + stx_gpts.ts_dev_info.chip_id); +#endif + return sret; +} + +static ssize_t st_inform_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + + memset(stinfbuf, 0, 16); + memcpy(stinfbuf, buf, count); + STX_INFO("%s inbuffer:%s buf:%s ", __func__, stinfbuf, buf); + mutex_unlock(&stx_gpts.dev_mutex); + return count; +} + +static ssize_t st_glove_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + ssize_t sret; + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + + /*add function*/ +#ifdef ST_GLOVE_SWITCH_MODE + sret = snprintf(buf, 100, + "Sitronix glove_mode = %s\n", stx_gpts.glove_mode ? "on" : "off"); +#else + sret = snprintf(buf, 100, + "Don't support ST_GLOVE_SWITCH_MODE mode\n"); +#endif + + mutex_unlock(&stx_gpts.dev_mutex); + return sret; +} + +static ssize_t st_glove_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); +#ifdef ST_GLOVE_SWITCH_MODE + if (buf[0] == '1') + st_enter_glove_mode(&stx_gpts); + if (buf[0] == '0') + st_leave_glove_mode(&stx_gpts); +#endif + /*add function*/ + mutex_unlock(&stx_gpts.dev_mutex); + + return count; +} + +static ssize_t st_cases_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + ssize_t sret; + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + + /*add function*/ +#ifdef ST_CASES_SWITCH_MODE + sret = snprintf(buf, 100, + "Sitronix cases_mode = %s\n", stx_gpts.cases_mode ? "on":"off"); +#else + sret = snprintf(buf, 100, + "Don't support ST_CASES_SWITCH_MODE mode\n"); +#endif + + mutex_unlock(&stx_gpts.dev_mutex); + return sret; +} + +static ssize_t st_cases_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); +#ifdef ST_CASES_SWITCH_MODE + if (buf[0] == '1') + stx_gpts.cases_mode = true; + if (buf[0] == '0') + stx_gpts.cases_mode = false; +#endif + /*add function*/ + mutex_unlock(&stx_gpts.dev_mutex); + + return count; +} + +static ssize_t st_rawtest_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + ssize_t sret; + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + /*add function*/ +#ifdef ST_TEST_RAW + if (stx_gpts.inputvalid) { + sret = snprintf(buf, 200, + "Sitronix Raw Test Result = %d ( 0 == success, >0 failed sensor number, < 0 err) \n limit(%d > raw > %d)\n", + stx_gpts.rawTestResult, + stx_gpts.max_raw_limit, + stx_gpts.min_raw_limit); + } else { + sret = snprintf(buf, 200, + "!! Please confirm the input value !!\n limit(%d > raw > %d)\n", + stx_gpts.max_raw_limit, + stx_gpts.min_raw_limit); + } + +#else + sret = snprintf(buf, 100, + "Don't support ST_TEST_RAW mode\n"); +#endif + + mutex_unlock(&stx_gpts.dev_mutex); + return sret; +} + +static ssize_t st_rawtest_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ +#ifdef ST_TEST_RAW + int i = 0; + char tempnum = 0; + int max = 0; + int min = 0; + int status = 0; + stx_gpts.inputvalid = 1; + if (0 != count) { + for (i = 0; i < count - 1; i++) { + tempnum = *(buf + i); + if (((tempnum < '0') || (tempnum > '9')) && (tempnum != ' ')) + stx_gpts.inputvalid = 0; + } + sscanf(buf, "%d%d", &max, &min); + stx_gpts.max_raw_limit = max > min ? max : min; + stx_gpts.min_raw_limit = max > min ? min : max; + } +#endif + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); +#ifdef ST_TEST_RAW + status = st_testraw_invoke(); + stx_gpts.rawTestResult = status; +#endif + mutex_unlock(&stx_gpts.dev_mutex); + return count; +} + +static int st_char2hex(char data) +{ + int num = 0; + + if ((data >= '0') && (data <= '9')) { + num = data - '0'; + } + if ((data >= 'a') && (data <= 'f')) { + num = data - 'a' + 10; + } + if ((data >= 'A') && (data <= 'F')) { + num = data - 'A' + 10; + } + return num; +} + +static u8 st_reg_data; + +static ssize_t st_rwreg_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + ssize_t num_read_chars; + STX_DEBUG("%s", __func__); + + mutex_lock(&stx_gpts.dev_mutex); + + num_read_chars = snprintf(buf, 128, "0x%x\n", st_reg_data); + + mutex_unlock(&stx_gpts.dev_mutex); + + STX_INFO("%s num_read_chars:%zu buf:%s", __func__, num_read_chars, buf); + + return num_read_chars; +} + +static ssize_t st_rwreg_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + ssize_t num_chars = 0; + int reg_addr; + int reg_data; + char buffer[2] = {0}; + + STX_INFO("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + + STX_INFO("%s count:%zu buf:%s ", __func__, count, buf); + num_chars = count - 1; + if (num_chars == 2) { + reg_addr = st_char2hex(buf[0]) * 0x10 + st_char2hex(buf[1]); + STX_INFO("%s reg_addr:0x%x", __func__, reg_addr); + /*read register and save data to reg_data*/ + stx_i2c_read(stx_gpts.client, &st_reg_data, 1, reg_addr); + } + if (num_chars == 4) { + reg_addr = st_char2hex(buf[0]) * 0x10 + st_char2hex(buf[1]); + reg_data = st_char2hex(buf[2]) * 0x10 + st_char2hex(buf[3]); + STX_INFO("%s reg_addr:0x%x reg_data:0x%x", __func__, reg_addr, reg_data); + /*write register*/ + buffer[0] = reg_addr; + buffer[1] = reg_data; + stx_i2c_write(stx_gpts.client, buffer, 2); + } + mutex_unlock(&stx_gpts.dev_mutex); + + return count; +} + +static ssize_t st_mt_show(struct device *dev, struct device_attribute *attr, char *buf) +{ + ssize_t sret = 0; + STX_DEBUG("%s", __func__); + + mutex_lock(&stx_gpts.dev_mutex); + + /*add function*/ + + mutex_unlock(&stx_gpts.dev_mutex); + + return sret; +} + +static ssize_t st_mt_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + + /*add function*/ +#ifdef ST_MONITOR_THREAD + if (buf[0] == '1') + sitronix_monitor_start(); + if (buf[0] == '0') + sitronix_monitor_stop(); +#endif + + mutex_unlock(&stx_gpts.dev_mutex); + return count; +} + +static ssize_t st_forceUpg_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + char spath[40] = {0}; + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + + snprintf(spath, sizeof(spath), "%s", buf); + stx_force_upgrade_fw(spath); + + st_print_version(&stx_gpts); + + mutex_unlock(&stx_gpts.dev_mutex); + return count; +} + +static ssize_t st_manual_rst_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + STX_DEBUG("%s", __func__); + + mutex_lock(&stx_gpts.dev_mutex); + if (buf[0] == '1') { + st_reset_ic(); + STX_INFO("TP has manual reset"); + } + mutex_unlock(&stx_gpts.dev_mutex); + + return count; +} + +static ssize_t st_smart_wakeup_switch_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + STX_DEBUG("%s", __func__); + mutex_lock(&stx_gpts.dev_mutex); + + if (buf[0] == '1') + stx_gpts.fsmart_wakeup = 1; + else if (buf[0] == '0') + stx_gpts.fsmart_wakeup = 0; + STX_INFO("fsmart_wakeup = %d", stx_gpts.fsmart_wakeup); + + mutex_unlock(&stx_gpts.dev_mutex); + + return count; +} + +static void StrToHex(char *pbDest, const char *pbSrc, int nLen) +{ + char h1, h2; + char s1, s2; + int i; + + for (i = 0; i < nLen/2; i++) { + h1 = pbSrc[2*i]; + h2 = pbSrc[2*i+1]; + + s1 = toupper(h1) - 0x30; + if (s1 > 9) + s1 -= 7; + s2 = toupper(h2) - 0x30; + if (s2 > 9) + s2 -= 7; + + pbDest[i] = s1*16 + s2; + } +} + +static ssize_t st_temporary_set_i2caddr_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) +{ + char addr; + STX_DEBUG("%s", __func__); + + mutex_lock(&stx_gpts.dev_mutex); + + StrToHex(&addr, buf, 2); + stx_gpts.client->addr = addr; + STX_INFO("i2caddr = 0x%x ", addr); + + mutex_unlock(&stx_gpts.dev_mutex); + + return count; +} + +/****************************************/ +/* sysfs */ +/** Get TP INFO **/ +static DEVICE_ATTR(stinform, S_IRUGO | S_IWUSR, st_inform_show, st_inform_store); + +/** Glove mode on:1 ,Glove mode off:0 **/ +static DEVICE_ATTR(stglove, S_IRUGO | S_IWUSR, st_glove_show, st_glove_store); + +/** Case mode on:1 ,Case mode off:0**/ +static DEVICE_ATTR(stcases, S_IRUGO | S_IWUSR, st_cases_show, st_cases_store); + +static DEVICE_ATTR(strawtest, S_IRUGO | S_IWUSR, st_rawtest_show, st_rawtest_store); + +/*read and write register +*read example: echo 88 > strwreg ---read register 0x88 +*write example:echo 8807 > strwreg ---write 0x07 into register 0x88 +*note:the number of input must be 2 or 4.if it not enough,please fill in the 0. +*/ +static DEVICE_ATTR(strwreg, S_IRUGO | S_IWUSR, st_rwreg_show, st_rwreg_store); + +static DEVICE_ATTR(stmt, S_IRUGO | S_IWUSR, st_mt_show, st_mt_store); + +/** Updated touch FW , FW default path at request_fw **/ +static DEVICE_ATTR(stupgrade, S_IRUGO | S_IWUSR, NULL, st_forceUpg_store); + +/** Reset TouchIC: 1 **/ +static DEVICE_ATTR(streset, S_IRUGO | S_IWUSR, NULL, st_manual_rst_store); + +/** smart wakeup on: 1 , smart wakeup off: 0 **/ +static DEVICE_ATTR(st_smtwakeup, S_IRUGO | S_IWUSR, NULL, st_smart_wakeup_switch_store); + +static DEVICE_ATTR(st_i2caddr_set, S_IRUGO | S_IWUSR, NULL, st_temporary_set_i2caddr_store); +static struct attribute *st_attributes[] = { + &dev_attr_stinform.attr, + &dev_attr_stglove.attr, + &dev_attr_stcases.attr, + &dev_attr_strawtest.attr, + &dev_attr_strwreg.attr, + &dev_attr_stmt.attr, + &dev_attr_stupgrade.attr, + &dev_attr_streset.attr, + &dev_attr_st_smtwakeup.attr, + &dev_attr_st_i2caddr_set.attr, + NULL}; + +static struct attribute_group st_attribute_group = { + .attrs = st_attributes + +}; + +int st_create_sysfs(struct i2c_client *client) +{ + int err; + //kobject_creat_and_add + err = sysfs_create_group(&client->dev.kobj, &st_attribute_group); + if (0 != err) { + STX_ERROR("%s() - ERROR: sysfs_create_group() failed.", __func__); + sysfs_remove_group(&client->dev.kobj, &st_attribute_group); + return -EIO; + } else { + STX_INFO("sysfs_create_group() ok."); + } + return err; +} + +int st_remove_sysfs(struct i2c_client *client) +{ + sysfs_remove_group(&client->dev.kobj, &st_attribute_group); + return 0; +} + +#ifdef ST_DEVICE_NODE + +#define SITRONIX_I2C_TOUCH_DEV_NAME "sitronixDev" +static struct cdev sitronix_cdev; +static struct class *sitronix_class; +static int sitronix_major; + +int sitronix_open(struct inode *inode, struct file *filp) +{ + STX_INFO("Enter stx OPEN"); + stx_gpts.fapp_in = 1; +#ifdef ST_MONITOR_THREAD + sitronix_monitor_stop(); +#endif + return 0; +} +EXPORT_SYMBOL(sitronix_open); + +int sitronix_release(struct inode *inode, struct file *filp) +{ + STX_INFO("Enter stx RELEASE"); + stx_gpts.fapp_in = 0; +#ifdef ST_MONITOR_THREAD + sitronix_monitor_start(); +#endif + return 0; +} +EXPORT_SYMBOL(sitronix_release); + +ssize_t sitronix_write(struct file *file, const char *buf, size_t count, loff_t *ppos) +{ + int ret; + char *tmp; + + if (!(stx_gpts.client)) + return -EIO; + + if (count > 8192) + count = 8192; + + tmp = (char *)kmalloc(count, GFP_KERNEL); + if (tmp == NULL) + return -ENOMEM; + if (copy_from_user(tmp, buf, count)) { + kfree(tmp); + return -EFAULT; + } + STX_INFO("writing %zu bytes.", count); + + ret = i2c_master_send(stx_gpts.client, tmp, count); + kfree(tmp); + return ret; +} +EXPORT_SYMBOL(sitronix_write); + +ssize_t sitronix_read(struct file *file, char *buf, size_t count, loff_t *ppos) +{ + char *tmp; + int ret; + + if (!(stx_gpts.client)) + return -EIO; + + if (count > 8192) + count = 8192; + + tmp = (char *)kmalloc(count, GFP_KERNEL); + if (tmp == NULL) + return -ENOMEM; + + STX_INFO("reading %zu bytes.", count); + + ret = i2c_master_recv(stx_gpts.client, tmp, count); + if (ret >= 0) + ret = copy_to_user(buf, tmp, count) ? -EFAULT : ret; + kfree(tmp); + return ret; +} +EXPORT_SYMBOL(sitronix_read); + +long sitronix_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) +{ + //int err = 0; + int retval = 0; + //uint8_t temp[4]; + + if (!(stx_gpts.client)) + return -EIO; + + return retval; +} +EXPORT_SYMBOL(sitronix_ioctl); + +static struct file_operations nc_fops = { + .owner = THIS_MODULE, + .write = sitronix_write, + .read = sitronix_read, + .open = sitronix_open, + .unlocked_ioctl = sitronix_ioctl, + .release = sitronix_release, +}; + +int st_dev_node_init(void) +{ + int result; + int err = 0; + dev_t devno = MKDEV(sitronix_major, 0); + + result = alloc_chrdev_region(&devno, 0, 1, SITRONIX_I2C_TOUCH_DEV_NAME); + if (result < 0) { + STX_ERROR("fail to allocate chrdev (%d) ", result); + return result; + } + sitronix_major = MAJOR(devno); + cdev_init(&sitronix_cdev, &nc_fops); + sitronix_cdev.owner = THIS_MODULE; + sitronix_cdev.ops = &nc_fops; + + err = cdev_add(&sitronix_cdev, devno, 1); + if (err) { + STX_ERROR("fail to add cdev (%d)", err); + return err; + } + STX_INFO("%s,%d", __FUNCTION__, __LINE__); + + sitronix_class = class_create(THIS_MODULE, SITRONIX_I2C_TOUCH_DEV_NAME); + if (IS_ERR(sitronix_class)) { + result = PTR_ERR(sitronix_class); + unregister_chrdev(sitronix_major, SITRONIX_I2C_TOUCH_DEV_NAME); + STX_ERROR("fail to create class (%d)", result); + return result; + } + STX_DEBUG("%s,%d", __FUNCTION__, __LINE__); + device_create(sitronix_class, NULL, MKDEV(sitronix_major, 0), NULL, SITRONIX_I2C_TOUCH_DEV_NAME); + + return 0; +} + +void st_dev_node_exit(void) +{ + dev_t dev_id = MKDEV(sitronix_major, 0); + cdev_del(&sitronix_cdev); + device_destroy(sitronix_class, dev_id); //delete device node under /dev + class_destroy(sitronix_class); //delete class created by us + unregister_chrdev_region(dev_id, 1); +} +#endif diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_upgrade_fw.c b/drivers/input/touchscreen/sitronix/sitronix_ts_upgrade_fw.c new file mode 100644 index 000000000000..bf2a2f0923d3 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_upgrade_fw.c @@ -0,0 +1,959 @@ +#include "sitronix_ts.h" +#include "sitronix_ts_upgrade_fw_bin.h" + +unsigned char fw_check[ST_FLASH_PAGE_SIZE * 2]; +unsigned char dump_buf[ST_FLASH_SIZE] = SITRONIX_DUMP; + +int st_check_cfg(const char *data, int *cfgSize) +{ + if (data[0x00] != 'S' || data[0x01] != 'T' || data[0x02] != 'F' || data[0x03] != 'W') { + STX_ERROR("check STFW fail"); + return -EINVAL; + } + +#ifdef ST_IC_A8008 + *cfgSize = data[0x08] + 2; +#endif + +#ifdef ST_IC_A8010 + *cfgSize = data[0x08] * 0x100 + data[0x09] + 2; +#endif + +#ifdef ST_IC_A8015 + *cfgSize = data[0x09] * 0x100 + data[0x0A] + 2; +#endif + + STX_INFO("cfgSize = 0x%X", *cfgSize); + + return 0; +} +int st_check_fw(const char *data, int *fwOff, int *fwSize, int *fwInfoOff, int *cfgOff) +{ + int off = 0; + int devParamTabSize; + int progSizeH; + int progSizeL; + + off += 131 + 2 + 4; + devParamTabSize = data[off]; + off += 1 + devParamTabSize + 4; //4:TFW1 + + progSizeH = data[off]; + progSizeL = data[off + 1]; + + off += 2 + ((progSizeH)*0x100) + progSizeL; + + *fwOff = 0; + *cfgOff = CT_CFG_OFF; + + if (data[off] == 0x54 && + data[off + 1] == 0x46 && + data[off + 2] == 0x49 && + data[off + 3] == 0x32) { + *fwInfoOff = off + 4; + *fwSize = 4 + data[off + 4] + off + 1 + 4; //tag(4) + TableSize + off + TableSizeOff + CksLen + STX_INFO("fwOff = 0x%X", *fwOff); + STX_INFO("fwSize = 0x%X", *fwSize); + STX_INFO("fwInfoOff = 0x%X", *fwInfoOff); + STX_INFO("cfgOff = 0x%X", *cfgOff); + return 0; + } + + STX_ERROR("can't find TOUCH_FW_INFO offset"); + return -EINVAL; +} + +void st_set_cfg(const char *data, int cfgOff, int cfgSize) +{ + int size; + size = cfgOff + cfgSize; + + if (size <= ST_FLASH_SIZE) + memcpy(dump_buf + cfgOff, data, cfgSize); + else + STX_ERROR("%s size=0x%x", __func__, size); +} + +void st_set_fw(const char *data, int fwOff, int fwSize) +{ + int size; + size = fwOff + fwSize; + + if (size <= ST_FLASH_SIZE) + memcpy(dump_buf + fwOff, data, fwSize); + else + STX_ERROR("%s size=0x%x", __func__, size); +} + +///I2C +int st_i2c_upg_read_direct(st_u8 *rxbuf, int len) +{ + int ret = 0; + ret = stx_i2c_read_direct(rxbuf, len); + if (ret < 0) { + STX_ERROR("read direct error (%d)", ret); + return ret; + } + return len; +} + +int st_i2c_upg_read_bytes(st_u8 addr, st_u8 *rxbuf, int len) +{ + + int ret = 0; + ret = stx_i2c_read_bytes(addr, rxbuf, len); + if (ret < 0) { + STX_ERROR("read 0x%x error (%d)", addr, ret); + return ret; + } + return len; +} + +int st_i2c_upg_write_bytes(st_u8 *txbuf, int len) +{ + int ret = 0; + if (txbuf == NULL) + return -EINVAL; + + ret = stx_i2c_write_bytes(txbuf, len); + if (ret < 0) { + STX_ERROR("write 0x%x error (%d)", *txbuf, ret); + return ret; + } + return len; +} +////////// +int st_get_device_status(void) +{ + int ret = 0; + unsigned char buffer[8]; + + ret = st_i2c_upg_read_bytes(1, buffer, 8); + if (ret < 0) { + STX_ERROR("read status reg error (%d)", ret); + return ret; + } else { + STX_INFO("status reg = %d", buffer[0]); + } + + return buffer[0] & 0xF; +} + +int st_check_device_status(int ck1, int ck2, int delay) +{ + int maxTimes = 10; + int isInStauts = 0; + int status = -1; + while (maxTimes-- > 0 && isInStauts == 0) { + status = st_get_device_status(); + STX_INFO("status : %d", status); + if (status == ck1 || status == ck2) + isInStauts = 1; + st_msleep(delay); + } + if (isInStauts == 0) + return -EINVAL; + else + return 0; +} + +int st_isp_off(void) +{ + unsigned char data[8]; + int rt = 0; + + memset(data, 0, sizeof(data)); + data[0] = ISP_CMD_RESET; + + rt += st_i2c_upg_write_bytes(data, sizeof(data)); + + if (rt < 0) { + STX_ERROR("ISP off error"); + return -EINVAL; + } + st_msleep(300); + + return st_check_device_status(0, 4, 10); +} +int st_isp_on(void) +{ + unsigned char IspKey[] = {0, 'S', 0, 'T', 0, 'X', 0, '_', 0, 'F', 0, 'W', 0, 'U', 0, 'P'}; + unsigned char i; + int icStatus = st_get_device_status(); + + STX_INFO("ISP on"); + + if (icStatus < 0) + return -EINVAL; + if (icStatus == 0x6) + return 0; + else if (icStatus == 0x5) + st_power_up(&stx_gpts); + + for (i = 0; i < sizeof(IspKey); i += 2) { + if (st_i2c_upg_write_bytes(&IspKey[i], 2) < 0) { + STX_ERROR("Entering ISP fail."); + return -EINVAL; + } + } + st_msleep(300); //This delay is very important for ISP mode changing. + //Do not remove this delay arbitrarily. + return st_check_device_status(6, 99, 10); +} + +int st_check_chipid(void) +{ + int ret = 0; + st_u8 buffer[8]; + + ret = st_i2c_upg_read_bytes(0x1, buffer, 8); + if (ret < 0) { + STX_ERROR("read status reg error (%d)", ret); + return ret; + } else { + STX_INFO("ChipID = %d", buffer[1]); + } + +#ifdef ST_IC_A8008 + if (buffer[1] != 0x6) { + STX_ERROR("This IC is not A8008 , cancel upgrade"); + return -ENODEV; + } +#endif +#ifdef ST_IC_A8010 + if (buffer[1] != 0xA) { + STX_ERROR("This IC is not A8010 , cancel upgrade"); + return -ENODEV; + } +#endif +#ifdef ST_IC_A8015 + if (buffer[1] != 0xF) { + STX_ERROR("This IC is not A8015 , cancel upgrade"); + return -ENODEV; + } +#endif + return 0; +} + +int st_compare_array(unsigned char *b1, unsigned char *b2, int len) +{ + int i = 0; + for (i = 0; i < len; i++) { + if (b1[i] != b2[i]) + return -EPERM; + } + return 0; +} + +#ifdef ST_IC_A8010 +#define CRC8_POLY 0xD5 +#define CRC16_POLY 0x1021 +u32 RemainderCal(u32 poly, u32 dat, u8 polysize, u8 datasize) +{ + const u8 SHIFT_MAX = datasize - (polysize + 1); + u8 ind; + u32 MSBOFDATA = (u32)1 << (datasize - 1); + u32 tmp; + + poly |= (1 << polysize); + for (ind = 0; ind <= SHIFT_MAX; ind++) { + if ((dat << ind) & MSBOFDATA) { //if MSB == 1 + tmp = poly << (SHIFT_MAX - ind); + dat ^= tmp; //poly dosen't include the MSB of the divider. + } + } + return dat; // remainder is the lowest N bits +} + +u16 Crc16Cal(u16 poly, u8 *dat, u32 dat_len) +{ + const u8 POLYSIZE = 16, DATASIZE = 8; + u32 crc, ind; + + crc = dat[0]; + for (ind = 1; ind < dat_len; ind++) { + crc = (crc << DATASIZE) | dat[ind]; + crc = RemainderCal(poly, crc, POLYSIZE, (u8)(POLYSIZE + DATASIZE)); // 16 bit CRC + } + crc = crc << DATASIZE; // CRC16, the data should be shifted left 16bits. Shift 8 bit first + crc = RemainderCal(poly, crc, POLYSIZE, (u8)(POLYSIZE + DATASIZE)); + crc = crc << (POLYSIZE - DATASIZE); // Shift the rest 8bits + crc = RemainderCal(poly, crc, POLYSIZE, (u8)(POLYSIZE + DATASIZE)); + return crc; +} +#endif //ST_IC_A8010 + +void ChecksumCalculation(unsigned short *pChecksum, unsigned char *pInData, unsigned long Len) +{ +#ifdef ST_IC_A8010 + *pChecksum = Crc16Cal(CRC16_POLY, pInData, Len); +#else + unsigned long i; + unsigned char LowByteChecksum; + for (i = 0; i < Len; i++) { + *pChecksum += (unsigned short)pInData[i]; + LowByteChecksum = (unsigned char)(*pChecksum & 0xFF); + LowByteChecksum = (LowByteChecksum) >> 7 | (LowByteChecksum) << 1; + *pChecksum = (*pChecksum & 0xFF00) | LowByteChecksum; + } +#endif //ST_IC_A8010 +} + +int st_flash_unlock(void) +{ + unsigned char PacketData[ISP_PACKET_SIZE]; + + int retryCount = 0; + int isSuccess = 0; + while (isSuccess == 0 && retryCount++ < ST_ISP_RETRY_MAX) { + memset(PacketData, 0, ISP_PACKET_SIZE); + PacketData[0] = ISP_CMD_UNLOCK; + if (st_i2c_upg_write_bytes(PacketData, ISP_PACKET_SIZE) == ISP_PACKET_SIZE) { + if (retryCount > 1) + st_msleep(150); + + if (st_i2c_upg_read_direct(PacketData, ISP_PACKET_SIZE) == ISP_PACKET_SIZE) { + if (PacketData[0] == ISP_CMD_READY) + isSuccess = 1; + } else { + st_msleep(50); + } + } + + if (isSuccess == 0) { + STX_ERROR("Read ISP_Unlock_Ready packet fail retry : %d", retryCount); + //MSLEEP(30); + } + } + + if (isSuccess == 0) { + STX_ERROR("Read ISP_Unlock_Ready packet fail."); + return -EINVAL; + } + + return 0; +} + +int st_flash_erase_page(unsigned short PageNumber) +{ + unsigned char PacketData[ISP_PACKET_SIZE]; + + int retryCount = 0; + int isSuccess = 0; + while (isSuccess == 0 && retryCount++ < ST_ISP_RETRY_MAX) { + memset(PacketData, 0, ISP_PACKET_SIZE); + PacketData[0] = ISP_CMD_ERASE; + PacketData[2] = (unsigned char)PageNumber; + if (st_i2c_upg_write_bytes(PacketData, ISP_PACKET_SIZE) == ISP_PACKET_SIZE) { + //if(retryCount > 1) + st_msleep(150); + + if (st_i2c_upg_read_direct(PacketData, ISP_PACKET_SIZE) == ISP_PACKET_SIZE) { + if (PacketData[0] == ISP_CMD_READY) + isSuccess = 1; + } else { + st_msleep(50); //time out + } + } + + if (isSuccess == 0) { + STX_ERROR("Read ISP_Erase_Ready packet fail with page %d retry : %d", PageNumber, retryCount); + //MSLEEP(30); + } + } + + if (isSuccess == 0) { + STX_ERROR("Read ISP_Erase_Ready packet fail."); + return -EINVAL; + } + + return 0; +} + +int st_flash_read_page(unsigned char *Buf, unsigned short PageNumber) +{ + unsigned char PacketData[ISP_PACKET_SIZE]; + short ReadNumByte; + short ReadLength; + +#ifdef ST_IC_A8015 + if (st_flash_unlock() < 0) + return -EINVAL; +#endif + + ReadNumByte = 0; + memset(PacketData, 0, ISP_PACKET_SIZE); + PacketData[0] = ISP_CMD_READ_FLASH; + PacketData[2] = (unsigned char)PageNumber; + if (st_i2c_upg_write_bytes(PacketData, ISP_PACKET_SIZE) != ISP_PACKET_SIZE) { + STX_ERROR("Send ISP_Read_Flash packet fail."); + return -EINVAL; + } + msleep(5); + while (ReadNumByte < ST_FLASH_PAGE_SIZE) { + ReadLength = st_i2c_upg_read_direct(Buf + ReadNumByte, ISP_PACKET_SIZE); + if (ReadLength != ISP_PACKET_SIZE) { + STX_ERROR("ISP read page data fail."); + return -EINVAL; + } + if (ReadLength == 0) + break; + ReadNumByte += ReadLength; + } + return ReadNumByte; +} + +int st_flash_write_page(unsigned char *Buf, unsigned short PageNumber) +{ + unsigned char PacketData[ISP_PACKET_SIZE]; + short WriteNumByte; + short WriteLength; + unsigned short Checksum = 0; + unsigned char RetryCount; + + RetryCount = 0; + while (RetryCount++ < 1) { + WriteNumByte = 0; + memset(PacketData, 0, ISP_PACKET_SIZE); + ChecksumCalculation(&Checksum, Buf, ST_FLASH_PAGE_SIZE); + + //Checksum = st_flash_get_checksum(Buf,ST_FLASH_PAGE_SIZE); + + PacketData[0] = ISP_CMD_WRITE_FLASH; + PacketData[2] = (unsigned char)PageNumber; + //PacketData[4] = (unsigned char)(Checksum & 0xFF); + //PacketData[5] = (unsigned char)(Checksum >> 8); + if (st_i2c_upg_write_bytes(PacketData, ISP_PACKET_SIZE) != ISP_PACKET_SIZE) { + STX_ERROR("Send ISP_Write_Flash packet fail."); + return -EINVAL; + } + PacketData[0] = ISP_CMD_SEND_DATA; + while (WriteNumByte < ST_FLASH_PAGE_SIZE) { + WriteLength = ST_FLASH_PAGE_SIZE - WriteNumByte; + if (WriteLength > 7) + WriteLength = 7; + memcpy(&PacketData[1], &Buf[WriteNumByte], WriteLength); + if (st_i2c_upg_write_bytes(PacketData, ISP_PACKET_SIZE) != ISP_PACKET_SIZE) { + STX_ERROR("Send ISP_Write_Flash_Data packet error."); + return -EINVAL; + } + WriteNumByte += WriteLength; + } + + st_msleep(150); + if (st_i2c_upg_read_direct(PacketData, ISP_PACKET_SIZE) != ISP_PACKET_SIZE) { + STX_ERROR("ISP get \"Write Data Ready Packet\" fail."); + return -EIO; + } + if (PacketData[0] != ISP_CMD_READY) { + STX_ERROR("Command ID of \"Write Data Ready Packet\" error."); + return -EINVAL; + } + + if ((PacketData[4] != (Checksum >> 8)) || (PacketData[5] != (Checksum & 0xFF))) { + STX_ERROR("Checksum error , ISP output = 0x%02X%02X , driver = 0x%04X", PacketData[4], PacketData[5], Checksum); + return -EINVAL; + } + + break; + } + return WriteNumByte; +} + +int st_flash_write(unsigned char *Buf, int Offset, int NumByte) +{ + + unsigned short StartPage; + unsigned short PageOffset; + int WriteNumByte; + short WriteLength; + //unsigned char TempBuf[ST_FLASH_PAGE_SIZE]; + unsigned char *TempBuf; + int retry = 0; + int isSuccess = 0; + + TempBuf = kzalloc(ST_FLASH_PAGE_SIZE, GFP_KERNEL); + STX_INFO("Write flash offset:0x%X , length:0x%X", Offset, NumByte); + + WriteNumByte = 0; + if (NumByte == 0) + return WriteNumByte; + + if ((Offset + NumByte) > ST_FLASH_SIZE) + NumByte = ST_FLASH_SIZE - Offset; + + StartPage = Offset / ST_FLASH_PAGE_SIZE; + PageOffset = Offset % ST_FLASH_PAGE_SIZE; + while (NumByte > 0) { + if ((PageOffset != 0) || (NumByte < ST_FLASH_PAGE_SIZE)) { + if (st_flash_read_page(TempBuf, StartPage) < 0) + return -EINVAL; + } + + WriteLength = ST_FLASH_PAGE_SIZE - PageOffset; + if (NumByte < WriteLength) + WriteLength = NumByte; + memcpy(&TempBuf[PageOffset], Buf, WriteLength); + + retry = 0; + isSuccess = 0; + while (retry++ < ST_ISP_RETRY_MAX && isSuccess == 0) { + if (st_flash_unlock() >= 0 && st_flash_erase_page(StartPage) >= 0) { + STX_INFO("write page:%d", StartPage); + if (st_flash_unlock() >= 0 && st_flash_write_page(TempBuf, StartPage) >= 0) + isSuccess = 1; + } + //isSuccess =1; + + if (isSuccess == 0) + STX_INFO("FIOCTL_IspPageWrite write page %d retry: %d", StartPage, retry); + } + if (isSuccess == 0) { + STX_ERROR("FIOCTL_IspPageWrite write page %d error", StartPage); + return -EINVAL; + } else { + StartPage++; + } + + NumByte -= WriteLength; + Buf += WriteLength; + WriteNumByte += WriteLength; + PageOffset = 0; + } + kfree(TempBuf); + return WriteNumByte; +} + +int stx_clr_crash_msg(void) +{ + return 0; +} + +static int stx_try_i2c_addr(void) +{ + int ret = 0; + int i = 0; + int length; + unsigned char buffer[8]; + unsigned char ADDR_LIST[] = {0x55, 0x38, 0x70, 0x60}; + stx_gpts.host_if->default_i2c_flag = 0; + + ret = stx_i2c_read_bytes(0x1, buffer, 2); + if (ret < 0) { + STX_ERROR("i2c read status reg error (%d),client->addr = 0x%x\n", ret, stx_gpts.client->addr); + stx_gpts.host_if->default_i2c_flag = 1; + stx_gpts.host_if->default_i2c = stx_gpts.client->addr; + + length = sizeof(ADDR_LIST)/sizeof(ADDR_LIST[0]); +// printk("length = %d \n",length); + for (i = 0; i < length; i++) { + stx_gpts.client->addr = ADDR_LIST[i]; + ret = stx_i2c_read_bytes(0x1, buffer, 2); + if (ret < 0) { + STX_ERROR("i2c read status reg error (%d),client->addr = 0x%x\n", ret, stx_gpts.client->addr); + } else if (((buffer[0]&0x0F) == 0x06) && (st_check_chipid() == 0)) { + STX_INFO("Check BT ChipId Success,it's sitronix"); + break; + } + } + if (i == length) { + stx_gpts.host_if->default_i2c_flag = 0; + stx_gpts.client->addr = stx_gpts.host_if->default_i2c; + STX_INFO("i2c transfer error"); + ret = -EIO; + } + + } else { + STX_INFO("status reg = 0x%x\n", buffer[0]); + } + + return ret; +} + +static int stx_restore_i2c_addr(void) +{ + if (stx_gpts.host_if->default_i2c_flag == 1) { + stx_gpts.host_if->default_i2c_flag = 0; + stx_gpts.client->addr = stx_gpts.host_if->default_i2c; + } + return 0; +} + + +#ifdef ST_UPGRADE_BY_ISPID +unsigned char g_isp_id[] = SITRONIX_ISP_ID; + +//unsigned char dump_buf[] = SITRONIX_DUMP; +const unsigned char dump_buf1[] = SITRONIX_DUMP1; +const unsigned char dump_buf2[] = SITRONIX_DUMP2; + +static void st_replace_fw_by_id(int id) +{ + int size; + if (id == 0) { + STX_INFO("Found id by SITRONIX_DUMP 0\n"); +// memcpy(dump_buf,dump_buf,sizeof(dump_buf)); + } else if (id == 1) { + STX_INFO("Found id by SITRONIX_DUMP 1\n"); + size = sizeof(dump_buf1); + if (size > ST_FLASH_SIZE) + size = ST_FLASH_SIZE; + + memcpy(dump_buf, dump_buf1, size); + } else if (id == 2) { + STX_INFO("Found id by SITRONIX_DUMP 2\n"); + size = sizeof(dump_buf2); + if (size > ST_FLASH_SIZE) + size = ST_FLASH_SIZE; + memcpy(dump_buf, dump_buf2, size); + } +} + +static int st_select_fw_by_id(int isp_idL, int isp_idH) +{ + int i = 0; + int idlen = sizeof(g_isp_id) / 2; + int isFindID = 0; + int status = st_get_device_status(); + + STX_INFO("isp_idL= %d, isp_idH= %d,\n", isp_idL, isp_idH); + if (status < 0) { + return -EINVAL; + } else if (status == 0x6) { + for (i = 0; i < idlen; i++) { + STX_INFO("panel id = %d, \n", i); + if ((isp_idL == g_isp_id[i*2]) && (isp_idH == g_isp_id[i*2+1])) { + isFindID = 1; + st_replace_fw_by_id(i); + break; + } + } + if (0 == isFindID) { + STX_ERROR("can not find ISPID"); + return -ENXIO; + } + } + return 0; +} + +int st_check_ispid(void) +{ + int checkOff = 0; + int rt = 0; + + STX_INFO("st_check_ISPID"); + + st_irq_off(); + + rt = st_isp_on(); + + if (rt != 0) { + STX_ERROR("ISP on fail"); + goto ST_IRQ_ON; + } + + if (st_flash_read_page(fw_check, ISP_ID_OFFSET/ST_FLASH_PAGE_SIZE) < 0) { + STX_ERROR("read flash fail , cancel upgrade\n"); + rt = -1; + goto ST_ISP_OFF; + } + checkOff = ISP_ID_OFFSET - (ISP_ID_OFFSET/ST_FLASH_PAGE_SIZE)*ST_FLASH_PAGE_SIZE; + + stx_gpts.ts_dev_info.isp_idL = fw_check[checkOff]; + stx_gpts.ts_dev_info.isp_idH = fw_check[checkOff+1]; + STX_INFO("ISP ID 0x%x , 0x%x", stx_gpts.ts_dev_info.isp_idL, stx_gpts.ts_dev_info.isp_idH); + +ST_ISP_OFF: + rt = st_isp_off(); +ST_IRQ_ON: + st_irq_on(); + + return rt; + +} +#endif + +static void sitronix_copystring_without_line(const char *buf, char *path) +{ + int len = strlen(buf); + + strlcpy(path, buf, sizeof(path)); + if (buf[len - 1] == 10) + path[len - 1] = 0; +} + +static int sitronix_request_fw_table(const char *buf) +{ + int ret = 0; + const struct firmware *fw = NULL; + char path[200]; + int fwOff; + int fwSize; + int fwInfoOff; + int cfgOff; + int cfgSize; + + sitronix_copystring_without_line(buf, path); + + STX_FUNC_ENTER(); + STX_INFO("input: %s", buf); + ret = request_firmware(&fw, path, NULL); + STX_INFO("request_firmware ret = %d", ret); + if (ret) + return -ENOENT; + + STX_INFO("fw size 0x%X", (unsigned int)fw->size); + + ret = st_check_fw(fw->data, &fwOff, &fwSize, &fwInfoOff, &cfgOff); + STX_INFO("sitronix_set_fw_buf ret = %d", ret); + if (ret == 0) { + st_set_fw(fw->data + fwOff, fwOff, fwSize); + if (fw->size > cfgOff) { + ret = st_check_cfg(fw->data + cfgOff, &cfgSize); + STX_INFO("sitronix_set_cfg_buf ret = %d", ret); + if (ret == 0) { + st_set_cfg(fw->data + cfgOff, cfgOff, cfgSize); + } + } + } else { + ret = st_check_cfg(fw->data, &cfgSize); + STX_INFO("sitronix_set_cfg_buf ret = %d", ret); + if (ret == 0) { + st_set_cfg(fw->data, cfgOff, cfgSize); + } + } + + release_firmware(fw); + if (ret != 0) + return ret; + return 0; +} + +static int sitronix_do_upgrade(void) +{ + int rt = 0; + int fwOff = 0; + int cfgOff = 0; + int fwSize = 0; + int cfgSize = 0; + int fwInfoOff = 0; + int fwInfoLen = 0; + int powerfulWrite = 0; + int checkOff = 0; + + rt = st_check_fw(dump_buf, &fwOff, &fwSize, &fwInfoOff, &cfgOff); + if (rt < 0) + return -EINVAL; + + rt = st_check_cfg(dump_buf + cfgOff, &cfgSize); + if (rt < 0) + return -EINVAL; + + fwInfoLen = dump_buf[fwInfoOff] + 1 + 4; + + STX_INFO("fwInfoLen 0x%x", fwInfoLen); + + stx_try_i2c_addr(); + + if (st_get_device_status() == 0x6) + powerfulWrite = 1; + + st_irq_off(); + + rt = st_isp_on(); + + if (rt != 0) { + STX_ERROR("ISP on fail"); + goto ST_IRQ_ON; + } + + if (st_check_chipid() < 0) { + STX_ERROR("Check ChipId fail"); + rt = -1; + goto ST_ISP_OFF; + } + + if (powerfulWrite == 0) { + checkOff = (fwInfoOff / ST_FLASH_PAGE_SIZE) * ST_FLASH_PAGE_SIZE; + + if (st_flash_read_page(fw_check, fwInfoOff / ST_FLASH_PAGE_SIZE) < 0) { + STX_ERROR("read flash fail , cancel upgrade"); + rt = -1; + goto ST_ISP_OFF; + } + + if (((fwInfoOff - checkOff) + fwInfoLen) > ST_FLASH_PAGE_SIZE) { + st_flash_read_page(&fw_check[ST_FLASH_PAGE_SIZE], ((fwInfoOff / ST_FLASH_PAGE_SIZE) + 1)); + STX_INFO("read fwInfo"); + } + + if (0 == st_compare_array(fw_check + (fwInfoOff - checkOff), dump_buf + fwInfoOff, fwInfoLen)) { + STX_INFO("fw compare :same"); + fwSize = 0; + } else { + STX_INFO("fw compare :different"); + } + + //////////// + checkOff = (cfgOff / ST_FLASH_PAGE_SIZE) * ST_FLASH_PAGE_SIZE; + st_flash_read_page(fw_check, cfgOff / ST_FLASH_PAGE_SIZE); + + if (0 == st_compare_array(fw_check + (cfgOff - checkOff), dump_buf + cfgOff, cfgSize)) { + STX_INFO("cfg compare :same"); + cfgSize = 0; + } else { + STX_INFO("cfg compare : different"); + } + } + + if (cfgSize != 0) + st_flash_write(dump_buf + cfgOff, cfgOff, cfgSize); + + if (fwSize != 0) + st_flash_write(dump_buf + fwOff, fwOff, fwSize); + +ST_ISP_OFF: + rt = st_isp_off(); +ST_IRQ_ON: + st_irq_on(); + + stx_restore_i2c_addr(); + + if (cfgSize != 0 || fwSize != 0) + return 1; + else + return rt; + + return rt; +} + +int st_upgrade_fw(void) +{ + int rt = 0; + int fwOff = 0; + int cfgOff = 0; + int fwSize = 0; + int cfgSize = 0; + int fwInfoOff = 0; + int fwInfoLen = 0; + int powerfulWrite = 0; + int checkOff = 0; + + STX_INFO("st_upgrade_fw"); + + stx_try_i2c_addr(); + + if (st_get_device_status() == 0x6) + powerfulWrite = 1; + + st_irq_off(); + + rt = st_isp_on(); + + if (rt != 0) { + STX_ERROR("ISP on fail"); + goto ST_IRQ_ON; + } + + if (st_check_chipid() < 0) { + STX_ERROR("Check ChipId fail"); + rt = -1; + goto ST_ISP_OFF; + } + +#ifdef ST_UPGRADE_BY_ISPID + if (st_flash_read_page(fw_check, ISP_ID_OFFSET/ST_FLASH_PAGE_SIZE) < 0) { + STX_ERROR("read flash fail , cancel upgrade\n"); + rt = -1; + goto ST_ISP_OFF; + } + checkOff = ISP_ID_OFFSET - (ISP_ID_OFFSET/ST_FLASH_PAGE_SIZE)*ST_FLASH_PAGE_SIZE; + STX_INFO("ISP ID checkoff 0x%x , 0x%x \n", fw_check[checkOff], fw_check[checkOff + 1]); + st_select_fw_by_id(fw_check[checkOff], fw_check[checkOff + 1]); + checkOff = 0; +#endif + + rt = st_check_fw(dump_buf, &fwOff, &fwSize, &fwInfoOff, &cfgOff); + if (rt < 0) + goto ST_ISP_OFF; + //return -1; + + rt = st_check_cfg(dump_buf + cfgOff, &cfgSize); + if (rt < 0) + goto ST_ISP_OFF; + //return -1; + + fwInfoLen = dump_buf[fwInfoOff] + 1 + 4; + + STX_INFO("fwInfoLen 0x%x", fwInfoLen); + + if (powerfulWrite == 0) { + checkOff = (fwInfoOff / ST_FLASH_PAGE_SIZE) * ST_FLASH_PAGE_SIZE; + + if (st_flash_read_page(fw_check, fwInfoOff / ST_FLASH_PAGE_SIZE) < 0) { + STX_ERROR("read flash fail , cancel upgrade"); + rt = -1; + goto ST_ISP_OFF; + } + + if (((fwInfoOff - checkOff) + fwInfoLen) > ST_FLASH_PAGE_SIZE) { + st_flash_read_page(&fw_check[ST_FLASH_PAGE_SIZE], ((fwInfoOff / ST_FLASH_PAGE_SIZE) + 1)); + STX_INFO("read fwInfo"); + } + + if (0 == st_compare_array(fw_check + (fwInfoOff - checkOff), dump_buf + fwInfoOff, fwInfoLen)) { + STX_INFO("fw compare :same"); + fwSize = 0; + } else { + STX_INFO("fw compare :different"); + } + + //////////// + checkOff = (cfgOff / ST_FLASH_PAGE_SIZE) * ST_FLASH_PAGE_SIZE; + st_flash_read_page(fw_check, cfgOff / ST_FLASH_PAGE_SIZE); + + if (0 == st_compare_array(fw_check + (cfgOff - checkOff), dump_buf + cfgOff, cfgSize)) { + STX_INFO("cfg compare :same"); + cfgSize = 0; + } else { + STX_INFO("cfg compare : different"); + } + } + + if (cfgSize != 0) + st_flash_write(dump_buf + cfgOff, cfgOff, cfgSize); + + if (fwSize != 0) + st_flash_write(dump_buf + fwOff, fwOff, fwSize); + +ST_ISP_OFF: + rt = st_isp_off(); +ST_IRQ_ON: + st_irq_on(); + + stx_restore_i2c_addr(); + + if (cfgSize != 0 || fwSize != 0) + return 1; + else + return rt; + + return rt; +} + +int st_upgrade_fw_handler(void *unused) +{ + int ret = 0; + + ret = st_upgrade_fw(); + st_get_touch_info(&stx_gpts); + return ret; +} + +int stx_force_upgrade_fw(char *path) +{ + int ret = 0; + sitronix_request_fw_table(path); + ret = sitronix_do_upgrade(); + return ret; +} diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_upgrade_fw_bin.h b/drivers/input/touchscreen/sitronix/sitronix_ts_upgrade_fw_bin.h new file mode 100644 index 000000000000..c042749d7b34 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_upgrade_fw_bin.h @@ -0,0 +1,3137 @@ +#include + +#define ST_UPGRADE_BY_ISPID + +#define ST_IC_A8008 +//#define ST_IC_A8010 +//#define ST_IC_A8015 + +#ifdef ST_IC_A8008 +#define ST_DUMP_MAX_LEN 0x4000 +#define ST_FLASH_SIZE 0x4000 +#define CT_CFG_OFF 0x3F00 +#endif + +#ifdef ST_IC_A8010 +#define ST_DUMP_MAX_LEN 0xC000 +#define ST_FLASH_SIZE 0xC000 +#define CT_CFG_OFF 0xBC00 +#endif + +#ifdef ST_IC_A8015 +#define ST_DUMP_MAX_LEN 0x7FF0 +#define ST_FLASH_SIZE 0x7FF0 +#define CT_CFG_OFF 0x7E80 +#endif + +#define ISP_CMD_ERASE 0x80 +#define ISP_CMD_SEND_DATA 0x81 +#define ISP_CMD_WRITE_FLASH 0x82 +#define ISP_CMD_READ_FLASH 0x83 +#define ISP_CMD_RESET 0x84 +#define ISP_CMD_UNLOCK 0x87 +#define ISP_CMD_READY 0x8F + +#define ISP_PACKET_SIZE 8 + +#define ST_FLASH_PAGE_SIZE 1024 +#define ST_ISP_RETRY_MAX 2 + +#define MAIN_FW_VERSION 0x34 +#define SECOND_FW_VERSION 0x01 + + +//store upgrade dump array +#define SITRONIX_DUMP {\ +0x02,0x00,0x9C,0x32,0x00,0xF5,0x35,0x22,0xC2,0x2B,0x22,0x11,0x42,0x12,0x3C,0x42,\ +0x01,0x12,0xDA,0xA8,0xDA,0x1B,0x7F,0xE1,0xA5,0xEC,0x32,0x19,0x64,0x47,0x32,0x23,\ +0x21,0x14,0x10,0x0D,0x0B,0x0B,0x0A,0x08,0x07,0x07,0x06,0x11,0x42,0x12,0x0F,0xCB,\ +0x01,0x12,0x32,0x11,0x42,0x12,0x31,0x57,0x01,0x12,0x32,0x11,0x42,0x12,0x3D,0xCD,\ +0x01,0x12,0x43,0xD0,0x18,0xDA,0x28,0xDA,0x38,0x7F,0x1E,0xA5,0xFC,0xCA,0x1B,0xCA,\ +0xA8,0x89,0x14,0x11,0x42,0x12,0x26,0x57,0x01,0x12,0x2C,0xBA,0x20,0xF7,0x0A,0x50,\ +0x03,0xA5,0xEF,0x22,0xBC,0xB7,0x38,0xF9,0x22,0x40,0x01,0xE4,0x22,0x6D,0x55,0x1B,\ +0x38,0x50,0x0B,0x35,0xA5,0xDB,0xF8,0x22,0xE5,0x47,0x7E,0xA0,0xFA,0xA4,0x7A,0x57,\ +0x02,0x0B,0x22,0x3E,0xFC,0x54,0x44,0x50,0x30,0x0C,0x07,0x01,0x02,0x00,0x00,0xFE,\ +0x06,0x06,0xFF,0xFF,0x08,0xA6,0x54,0x46,0x57,0x31,0x3E,0x44,0xE4,0xF5,0xA8,0x75,\ +0xBB,0x01,0x75,0xEA,0x07,0x75,0x46,0x55,0x7E,0xF8,0x0F,0x9B,0x75,0x84,0xFF,0x75,\ +0xB9,0x20,0x74,0xFF,0xF5,0xA2,0xF5,0xA4,0xF5,0xA3,0xF5,0xA5,0xE4,0xF5,0x87,0xF5,\ +0xA7,0xF5,0xA6,0xF5,0xAA,0xF5,0xA9,0xF5,0xC4,0xF5,0xD1,0xF5,0x89,0xF5,0xC3,0xF5,\ +0xC0,0xF5,0xE8,0xF5,0xC2,0xF5,0xB7,0xF5,0xB8,0xF5,0xF7,0xF5,0xF8,0xF5,0x8B,0xF5,\ +0x8D,0xF5,0x91,0xF5,0xC8,0xF5,0xC9,0xF5,0xE2,0x02,0x0A,0x31,0x7A,0x21,0x6F,0x7A,\ +0x41,0x71,0x7A,0x61,0x73,0x7A,0x71,0x74,0x7A,0xB1,0x75,0x7A,0x31,0x76,0x7E,0xB3,\ +0x08,0xCB,0xA5,0xDE,0x04,0x2E,0xB3,0x08,0xDB,0x7A,0xB1,0x78,0x9C,0x32,0xA5,0x0B,\ +0x7A,0x31,0x70,0x9C,0x54,0xA5,0x0D,0x7A,0x51,0x72,0x9F,0x44,0x9F,0x55,0x75,0x77,\ +0x01,0x7E,0xB1,0x77,0xBE,0xB1,0x70,0x28,0x03,0x02,0x01,0xA2,0x7D,0x14,0x9F,0x66,\ +0xE5,0x72,0x60,0x1A,0xA5,0xF9,0x0B,0x18,0x30,0xA5,0xEE,0x30,0xE7,0x02,0x6D,0x33,\ +0x6D,0x22,0x2F,0x61,0xE5,0x74,0x23,0x0A,0x5B,0x2D,0x15,0xA5,0xD9,0xE8,0x7F,0x06,\ +0x7E,0xB1,0x77,0x0A,0x5B,0x12,0x43,0x75,0x2F,0x40,0x2F,0x56,0xE5,0x73,0x23,0x0A,\ +0x5B,0x2D,0x45,0x7E,0xB1,0x78,0x0A,0x5B,0x7F,0x06,0x12,0x43,0x75,0x75,0xF0,0x08,\ +0x12,0x42,0x7B,0x7F,0x60,0xE5,0x6F,0x70,0x07,0xE5,0x77,0xB4,0x01,0x02,0x2F,0x56,\ +0xE5,0x76,0xBE,0xB1,0x75,0x78,0x16,0xE5,0x77,0xBE,0xB1,0x70,0x78,0x0F,0x7E,0xB1,\ +0x77,0x04,0x0A,0x5B,0x7F,0x06,0x12,0x43,0x75,0x2F,0x40,0x2F,0x56,0x05,0x77,0x02,\ +0x01,0x21,0x7F,0x04,0x7E,0x54,0x01,0x00,0x12,0x43,0x75,0x7F,0x10,0x7F,0x05,0x12,\ +0x3E,0x17,0x6D,0x00,0x7E,0x21,0x6F,0x9C,0x33,0x2F,0x10,0x9E,0x18,0x01,0x00,0x7D,\ +0x53,0x7A,0xB7,0x03,0xB8,0x22,0x7E,0x43,0x08,0x66,0xAC,0x42,0x0A,0x40,0x2D,0x42,\ +0x3E,0x44,0x2E,0x44,0x06,0x12,0xA5,0x09,0x9C,0x10,0xA5,0x0B,0x9C,0x32,0x22,0x7E,\ +0xB3,0x08,0x6B,0x14,0x60,0x07,0xA5,0xE8,0x04,0xBC,0xB1,0x40,0x0F,0xA5,0xE8,0x60,\ +0x02,0xA5,0x18,0xA5,0xE9,0x04,0xBC,0xB2,0x50,0x02,0xA5,0x09,0x22,0x49,0x10,0x00,\ +0x02,0x49,0x00,0x00,0x00,0x7A,0x0D,0x6B,0x7E,0xB3,0x08,0x6B,0xBE,0xB0,0x01,0x28,\ +0x58,0xA5,0xE9,0x9C,0xB0,0xB4,0x01,0x22,0x12,0x01,0xC6,0x7C,0xC1,0x7C,0xD3,0x7E,\ +0xE0,0x01,0x7E,0xF3,0x08,0x66,0x12,0x07,0xA3,0x7E,0x39,0xB0,0x60,0x0C,0x09,0x03,\ +0x00,0x01,0x2E,0x01,0x6B,0x7C,0x10,0x7A,0x05,0x6B,0x7E,0x0D,0x6B,0xA5,0xEB,0x9C,\ +0xB2,0xB4,0x01,0x22,0x12,0x01,0xC6,0x7C,0xC3,0x7C,0xD1,0x7E,0xE3,0x08,0x66,0x7E,\ +0xF0,0x01,0x12,0x07,0xA3,0x7E,0x39,0xB0,0x60,0x0C,0x09,0x23,0x00,0x01,0x2E,0x21,\ +0x6D,0x7C,0x32,0x7A,0x15,0x6D,0x7E,0x0D,0x6B,0x7E,0x23,0x08,0x66,0x12,0x01,0xDF,\ +0x7A,0x05,0x6B,0x7E,0x05,0x6D,0x7E,0x23,0x08,0x67,0x12,0x01,0xDF,0x7A,0x05,0x6D,\ +0x7E,0x01,0x6D,0x7E,0x13,0x08,0x66,0xAC,0x01,0x2E,0x11,0x6B,0x3E,0x04,0x2E,0x04,\ +0x06,0x12,0x7A,0x05,0x69,0x7E,0x15,0x6B,0x7E,0x25,0x6D,0x7E,0x60,0x01,0x7E,0x73,\ +0x08,0x66,0x7E,0x45,0x69,0x7E,0xB3,0x08,0x66,0x14,0x12,0x00,0xEC,0x7A,0x55,0x14,\ +0x7E,0x15,0x6D,0x7E,0x25,0x6B,0x7E,0x63,0x08,0x66,0x7E,0x70,0x01,0x7E,0x45,0x69,\ +0x7E,0xB3,0x08,0x67,0x14,0x12,0x00,0xEC,0x7A,0x55,0x16,0x22,0xF5,0x60,0x7E,0x04,\ +0x08,0x22,0x7A,0x05,0x67,0xE4,0xF5,0x65,0xF5,0x66,0x7E,0x04,0x0B,0x8A,0x7A,0x05,\ +0x61,0x7E,0x00,0x01,0x7E,0xB3,0x08,0x7D,0x60,0x03,0x7E,0x00,0x03,0x7E,0x57,0x08,\ +0x5E,0x45,0xF0,0x60,0x0C,0x7E,0xB3,0x08,0xE1,0x5E,0xB0,0x80,0x60,0x03,0x7E,0x00,\ +0x04,0x7E,0xB3,0x08,0x76,0x60,0x02,0xA5,0x08,0x7A,0x01,0x63,0xE5,0x60,0x70,0x03,\ +0x02,0x03,0xB4,0xF5,0x64,0x7E,0x00,0x05,0xBE,0x01,0x65,0x38,0x03,0x02,0x03,0xB4,\ +0x7E,0x05,0x61,0x09,0xA0,0x00,0x04,0x09,0xB0,0x00,0x09,0x70,0x73,0xBE,0xA1,0x63,\ +0x40,0x6E,0x05,0x66,0xBE,0xA3,0x08,0x7C,0x28,0x04,0x7A,0xA3,0x08,0x7C,0xBE,0xA3,\ +0x08,0xCC,0x40,0x07,0x7E,0xB3,0x08,0xA6,0x30,0xE3,0x55,0x7E,0x05,0x61,0x12,0x01,\ +0xFD,0x7E,0x05,0x61,0x09,0x70,0x00,0x04,0x0A,0x37,0x7E,0x15,0x14,0x7E,0x25,0x16,\ +0x7E,0xB3,0x08,0x62,0x60,0x06,0x7E,0x15,0x16,0x7E,0x25,0x14,0xE5,0x65,0xC4,0x7E,\ +0x61,0x60,0x9E,0x61,0x64,0x4C,0x6B,0x0A,0x36,0x7E,0x05,0x67,0x59,0x10,0x00,0x00,\ +0x59,0x20,0x00,0x02,0x59,0x30,0x00,0x04,0x2E,0x04,0x00,0x06,0x7A,0x05,0x67,0x7E,\ +0x07,0x03,0xB8,0x7E,0x31,0x65,0x0A,0x13,0x2D,0x11,0x59,0x01,0x03,0xAE,0x05,0x65,\ +0x7E,0x05,0x61,0x2E,0x04,0x00,0x0A,0x7A,0x05,0x61,0x15,0x64,0x7E,0xB1,0x64,0x60,\ +0x03,0x02,0x03,0x15,0x7E,0xB1,0x66,0x60,0x0C,0x7E,0xB3,0x08,0x82,0x7E,0xA0,0xFF,\ +0x12,0x3E,0x23,0x80,0x06,0x7E,0xB3,0x08,0x82,0x1E,0xB0,0x7A,0xB3,0x08,0x82,0xE5,\ +0x65,0x0A,0x3B,0x22,0x7E,0x11,0x09,0xA5,0x09,0x9E,0x11,0x08,0x7E,0xB3,0x08,0x74,\ +0xBE,0xB0,0x80,0x50,0x05,0xE4,0xF5,0x0C,0xF5,0x0D,0x7E,0x84,0x0B,0x8A,0x6C,0x22,\ +0x7E,0x01,0x0B,0xA5,0x08,0xA5,0x18,0xA5,0xB8,0x00,0x03,0x02,0x04,0x7A,0x49,0x48,\ +0x00,0x00,0x49,0x68,0x00,0x02,0x49,0x78,0x00,0x05,0x7E,0x35,0x08,0x7C,0xBC,0x04,\ +0xBC,0xDB,0x50,0x06,0x9E,0x61,0x0C,0x2E,0x71,0x0D,0x7C,0xBD,0x04,0xBE,0xB1,0x0A,\ +0x40,0x51,0xBC,0x6F,0x38,0x4D,0xBC,0x7E,0x40,0x49,0x09,0x38,0x00,0x04,0x49,0x28,\ +0x00,0x07,0xA5,0xBA,0x00,0x2A,0xA5,0xEB,0xA5,0x29,0x50,0x02,0x74,0xFF,0xA5,0xFB,\ +0xBE,0x81,0x08,0x28,0x03,0x7E,0x81,0x08,0xBE,0x91,0x09,0x50,0x03,0x7E,0x91,0x09,\ +0xBE,0x41,0x08,0x28,0x03,0x7E,0x41,0x08,0xBE,0x51,0x09,0x50,0x03,0x7E,0x51,0x09,\ +0x59,0x48,0x00,0x00,0x59,0x28,0x00,0x07,0x19,0x38,0x00,0x04,0x19,0x28,0x00,0x09,\ +0x7E,0x20,0x01,0x2E,0x84,0x00,0x0A,0x02,0x03,0xF5,0xA5,0xBA,0x00,0x31,0x7E,0xA1,\ +0x0B,0xBE,0xA0,0x0A,0x50,0x29,0x7E,0x55,0x08,0x59,0x58,0x00,0x00,0x59,0x58,0x00,\ +0x05,0xE5,0x0A,0x19,0xB8,0x00,0x02,0x19,0xB8,0x00,0x03,0x19,0x18,0x00,0x04,0xE4,\ +0x19,0xB8,0x00,0x08,0x19,0xB8,0x00,0x09,0x14,0x19,0xB8,0x00,0x07,0x05,0x0B,0x22,\ +0x60,0x2A,0x7E,0x04,0x0B,0x8A,0x49,0x10,0x00,0x07,0xBE,0x20,0xFF,0x68,0x0E,0x59,\ +0x10,0x00,0x05,0x09,0x20,0x00,0x03,0xA5,0x0A,0x19,0x20,0x00,0x03,0x7E,0x14,0xFF,\ +0x00,0x59,0x10,0x00,0x07,0x2E,0x04,0x00,0x0A,0xD5,0xE0,0xDA,0x22,0x6D,0x00,0x49,\ +0x5D,0x00,0x06,0x2D,0x05,0x49,0x5D,0x00,0x08,0x2D,0x05,0xBE,0x05,0x12,0x28,0x15,\ +0x6D,0x00,0x49,0x5D,0x00,0x02,0x2D,0x05,0x49,0x5D,0x00,0x00,0x2D,0x05,0xBE,0x05,\ +0x12,0x28,0x02,0xD3,0x22,0xC3,0x22,0x7E,0xD4,0x00,0x80,0x7E,0xA3,0x08,0x66,0x7A,\ +0xA1,0x10,0x7E,0xB3,0x08,0x67,0x7A,0xB1,0x11,0x7E,0x24,0x06,0x12,0xAC,0xAB,0x9D,\ +0x33,0x0B,0x28,0x00,0x7D,0x13,0x12,0x43,0x60,0x7D,0x30,0x0B,0x25,0x1B,0x54,0xBE,\ +0x54,0x00,0x00,0x78,0xEC,0x7E,0x07,0x08,0x84,0x7E,0x53,0x08,0xE1,0x5E,0x50,0x7F,\ +0x7E,0xB3,0x08,0x78,0x60,0x09,0x7E,0xB3,0x08,0xA6,0x30,0xE1,0x02,0x6D,0x00,0xBE,\ +0x04,0x00,0x00,0x68,0x23,0x7C,0xB5,0x60,0x1F,0x7E,0x33,0x08,0x90,0x7E,0xA0,0x06,\ +0x12,0x43,0x84,0x7C,0x35,0x7E,0xA0,0x05,0x12,0x43,0x84,0x7E,0x13,0x08,0xA7,0x0A,\ +0x01,0x9D,0x01,0x7A,0x05,0x12,0x80,0x31,0x7D,0x03,0x1E,0x04,0x7E,0x33,0x08,0xA7,\ +0x0A,0x13,0x12,0x43,0x60,0x7E,0x53,0x08,0xA8,0x0A,0x25,0x12,0x43,0x67,0x7A,0x05,\ +0x12,0x7E,0xB3,0x08,0x93,0x54,0x09,0x60,0x10,0x7E,0x13,0x08,0xA7,0x30,0xE3,0x04,\ +0x7E,0x13,0x08,0xE3,0x0A,0x01,0x7A,0x05,0x12,0x1E,0x04,0x7A,0x05,0x14,0x7E,0x83,\ +0x08,0x7D,0xBE,0x35,0x12,0x38,0x0A,0x7E,0x57,0x08,0x5C,0xBE,0x54,0x00,0x00,0x68,\ +0x08,0x74,0x0A,0x7A,0xB3,0x08,0x7E,0x80,0x14,0x7E,0xB3,0x08,0xA6,0x20,0xE0,0x0D,\ +0x7E,0xB3,0x08,0xE3,0x0A,0x5B,0xBD,0x35,0x28,0x03,0x7E,0x80,0x14,0x7E,0xB3,0x08,\ +0x7E,0x60,0x02,0x9C,0x88,0x7E,0xB3,0x08,0x78,0x60,0x22,0x9C,0x88,0x7E,0xB3,0x08,\ +0xA6,0x20,0xE4,0x19,0x7E,0xB3,0x08,0x77,0x60,0x13,0x7E,0x05,0x12,0x7E,0x14,0x00,\ +0x03,0xAD,0x01,0x1E,0x14,0x7A,0x15,0x12,0x1E,0x14,0x7A,0x15,0x14,0xBE,0x80,0x00,\ +0x68,0x10,0x1B,0x80,0x7E,0x13,0x08,0xE3,0x0A,0x01,0x7A,0x05,0x12,0x1E,0x04,0x7A,\ +0x05,0x14,0x7A,0x83,0x08,0x7D,0x75,0x0B,0x00,0x7E,0xC4,0x06,0x12,0x90,0x0B,0x36,\ +0x7E,0x31,0x10,0x3E,0x30,0x12,0x43,0x92,0x7D,0x3C,0x7E,0x24,0x0B,0x60,0x7E,0x31,\ +0x10,0x3E,0x30,0x12,0x43,0x99,0x7D,0xC3,0x75,0x0A,0x00,0x7E,0xB4,0x0B,0x36,0x75,\ +0x08,0xFF,0x6D,0x55,0x59,0x5D,0x00,0x06,0x59,0x5D,0x00,0x08,0x75,0x0E,0x00,0x75,\ +0x17,0x00,0x6D,0x00,0x7E,0xB1,0x0A,0x04,0xBE,0xB1,0x11,0x68,0x0A,0x0B,0xC8,0x00,\ +0x0B,0xC5,0x6D,0x11,0x12,0x43,0x60,0x59,0x0D,0x00,0x04,0x7D,0x20,0x49,0x0B,0x00,\ +0x2A,0x6D,0x11,0x12,0x43,0x60,0x59,0x0D,0x00,0x00,0x7D,0x30,0x0B,0xB8,0x00,0x6D,\ +0x11,0x12,0x43,0x60,0x59,0x0D,0x00,0x02,0x7D,0x40,0x2D,0x23,0x2D,0x24,0xBE,0x25,\ +0x12,0x28,0x1A,0xBE,0x35,0x14,0x28,0x15,0x85,0x17,0x09,0xE5,0x08,0x04,0x70,0x2C,\ +0x85,0x17,0x08,0x12,0x04,0xDD,0x50,0x24,0x75,0x0E,0x01,0x80,0x1F,0xE5,0x08,0x04,\ +0x60,0x1A,0x75,0x0F,0x00,0x12,0x04,0xDD,0x50,0x03,0x75,0x0F,0x01,0x85,0x0E,0x0C,\ +0x85,0x0F,0x0D,0x12,0x03,0xD4,0x75,0x0E,0x00,0x75,0x08,0xFF,0x49,0x5D,0x00,0x02,\ +0x59,0x5D,0x00,0x06,0x49,0x5D,0x00,0x00,0x59,0x5D,0x00,0x08,0x1B,0xB8,0x50,0x49,\ +0x5D,0x00,0x04,0x59,0x5B,0x00,0x2A,0x0B,0xB5,0x05,0x17,0x7E,0x01,0x17,0xBE,0x01,\ +0x10,0x68,0x03,0x02,0x06,0x62,0xE5,0x08,0x04,0x60,0x09,0x85,0x0E,0x0C,0x75,0x0D,\ +0x00,0x12,0x03,0xD4,0xE5,0x0B,0x12,0x04,0xB0,0x05,0x0A,0x7E,0x01,0x0A,0xBE,0x01,\ +0x11,0x68,0x03,0x02,0x06,0x4B,0xE5,0x0B,0x70,0x0D,0x7E,0xB3,0x08,0x7E,0x60,0x05,\ +0x14,0x7A,0xB3,0x08,0x7E,0x80,0x09,0x7E,0xB3,0x08,0xE2,0x60,0x03,0x12,0x08,0xE7,\ +0xE5,0x0B,0x7A,0xB3,0x08,0x6B,0x12,0x30,0x10,0x7E,0xB3,0x08,0x6B,0x12,0x02,0xCC,\ +0x7A,0xB3,0x08,0x60,0x7E,0xB3,0x08,0xA6,0x5E,0xB0,0x40,0x60,0x12,0x7E,0xB3,0x08,\ +0x6F,0xBE,0xB0,0x02,0x40,0x09,0xE4,0x7A,0xB3,0x08,0x60,0x7A,0xB3,0x08,0x82,0x22,\ +0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,0x05,0x07,0xD0,0xD0,0xDA,0x3B,0x22,0x49,\ +0x03,0x00,0x00,0x49,0x13,0x00,0x02,0x7E,0xB0,0x01,0x4C,0x88,0x68,0x14,0x19,0xB2,\ +0x00,0x09,0x59,0x02,0x00,0x00,0x59,0x12,0x00,0x02,0x2E,0x24,0x00,0x0A,0x1B,0x80,\ +0x80,0xE8,0x22,0x3E,0xE0,0x3E,0xF0,0x7E,0x84,0x0B,0x36,0x7E,0x94,0x0B,0xEE,0x6D,\ +0xCC,0x7C,0x7C,0x7D,0x24,0x6D,0x00,0x6D,0x11,0x7E,0x54,0xFF,0xFF,0x6C,0x66,0x0B,\ +0x28,0xB0,0x6D,0xAA,0xBD,0xBA,0x58,0x02,0x6D,0xBB,0xBD,0xB5,0x08,0x05,0x7D,0x5B,\ +0x7A,0x99,0x60,0x2F,0x05,0x0A,0xAF,0x2D,0x2A,0xA5,0x0E,0xBC,0x6D,0x40,0xE0,0xA5,\ +0xEA,0x54,0x80,0xA5,0x48,0xA5,0x49,0x60,0x04,0x7E,0x14,0x7F,0xFF,0xBD,0xC1,0x38,\ +0x02,0x7D,0xC1,0x1B,0x88,0x10,0x0B,0x85,0x0A,0x0E,0x2D,0x40,0x0B,0x94,0xA5,0xDF,\ +0xB2,0x7E,0x54,0x80,0x01,0x1B,0x88,0x50,0x7E,0x94,0x0B,0xEE,0x7E,0xA4,0x0C,0x04,\ +0x7E,0x84,0x0B,0x36,0x7D,0x0C,0x7E,0x33,0x08,0xE2,0x7E,0xA0,0x08,0x12,0x43,0x84,\ +0x7E,0x14,0x00,0x1E,0x12,0x43,0x60,0x7D,0xC0,0x6D,0xBB,0x6D,0x77,0x6D,0x44,0x0B,\ +0xC0,0x6C,0x77,0x0B,0x88,0x20,0x0B,0x85,0x4C,0x99,0x78,0x2F,0xBD,0xB2,0x18,0x04,\ +0x7D,0xB2,0x7C,0x67,0x7D,0x5B,0x9D,0x5C,0xBD,0x25,0x58,0x32,0x7E,0x90,0x01,0x7D,\ +0x72,0xBE,0x80,0x04,0x50,0x28,0x0B,0x80,0x19,0x6A,0x00,0x00,0x0A,0x56,0x2D,0x59,\ +0x7E,0x59,0xB0,0x19,0xBA,0x00,0x01,0x0B,0xA5,0x80,0x13,0x7D,0x07,0x12,0x43,0x67,\ +0x7D,0x70,0x2D,0x0C,0xBD,0x20,0x28,0x06,0x6C,0x99,0x7D,0xB2,0x7C,0x67,0xA5,0x0F,\ +0xBC,0x7C,0x40,0xAF,0x7E,0x34,0x0C,0x03,0x7A,0x39,0x80,0x22,0x7E,0xB1,0x0B,0x7E,\ +0xA0,0x0A,0xAC,0xAB,0x7D,0xE5,0x2E,0xE4,0x0B,0x8A,0x09,0xBF,0x00,0x04,0x7E,0xA1,\ +0x0E,0x8C,0xBA,0x7C,0x5B,0x7E,0x41,0x0E,0x0B,0x38,0x50,0x0B,0x35,0x4C,0x22,0x78,\ +0x02,0xC5,0xF0,0x09,0x3F,0x00,0x00,0x2C,0x3A,0x19,0x3E,0x00,0x00,0x19,0x3E,0x00,\ +0x01,0x09,0x3F,0x00,0x02,0x2C,0x3B,0x19,0x3E,0x00,0x02,0x19,0x3E,0x00,0x03,0x19,\ +0x5E,0x00,0x04,0x6C,0x33,0x19,0x3E,0x00,0x09,0xA5,0x0B,0x19,0x3E,0x00,0x08,0x2E,\ +0xE4,0x00,0x0A,0xA5,0xDC,0xC2,0x22,0x7E,0xB1,0x0B,0x60,0x05,0xBE,0xB0,0x06,0x28,\ +0x01,0x22,0x7E,0xE4,0x0B,0x8A,0x6D,0xFF,0x7D,0xDE,0x7E,0x71,0x0B,0x09,0xBE,0x00,\ +0x09,0x70,0x2E,0x49,0x5E,0x00,0x00,0x9C,0xBA,0xBE,0xB0,0x03,0x50,0x0B,0x49,0x5E,\ +0x00,0x02,0x9C,0xBA,0xBE,0xB0,0x03,0x40,0x18,0x09,0xBE,0x00,0x04,0xBE,0xB3,0x08,\ +0xCC,0x50,0x0E,0x4D,0xFF,0x68,0x08,0x09,0xAF,0x00,0x04,0xBC,0xAB,0x50,0x02,0x7D,\ +0xFE,0x2E,0xE4,0x00,0x0A,0xA5,0xDF,0xC5,0x4D,0xFF,0x78,0x01,0x22,0x75,0x0A,0x00,\ +0x7E,0x71,0x0B,0x09,0xBD,0x00,0x09,0x70,0x2A,0xBD,0xDF,0x68,0x26,0x49,0x0D,0x00,\ +0x00,0x49,0x1F,0x00,0x00,0xBC,0x03,0x38,0x07,0xBC,0x12,0x40,0x03,0x43,0x0A,0x01,\ +0x49,0x0D,0x00,0x02,0x49,0x1F,0x00,0x02,0xBC,0x03,0x38,0x07,0xBC,0x12,0x40,0x03,\ +0x43,0x0A,0x02,0x2E,0xD4,0x00,0x0A,0xA5,0xDF,0xC9,0x49,0x0F,0x00,0x00,0x49,0x1F,\ +0x00,0x02,0x9C,0x10,0xA5,0x09,0x9C,0x32,0xA5,0x0B,0x7A,0x11,0x0C,0x7A,0x31,0x0D,\ +0x0A,0xD0,0x7E,0xB3,0x08,0x66,0xAC,0x2B,0x2D,0xD1,0x3E,0xD4,0x2E,0xD4,0x06,0x12,\ +0x7D,0x3F,0x7D,0x2E,0x7E,0x80,0x04,0x12,0x07,0x7F,0x75,0x0E,0x01,0x7E,0xB1,0x0D,\ +0xBE,0xB0,0x04,0x40,0x2D,0x7E,0xB1,0x0A,0x5E,0xB0,0x02,0x70,0x25,0x7D,0x4D,0x7E,\ +0xC1,0x0D,0x7E,0xD1,0x0C,0x7E,0xE3,0x08,0x66,0x7E,0xF0,0x01,0x12,0x07,0xA3,0x7E,\ +0x39,0xB0,0x7A,0xB1,0x0E,0x0B,0x34,0xBE,0xB0,0x01,0x28,0x06,0x7E,0x20,0x00,0x12,\ +0x08,0x8C,0x7E,0xB1,0x0C,0xBE,0xB0,0x04,0x40,0x2D,0x7E,0xB1,0x0A,0x5E,0xB0,0x01,\ +0x70,0x25,0x7D,0x4D,0x7E,0x65,0x0C,0x7E,0xE0,0x01,0x7E,0xF3,0x08,0x66,0x12,0x07,\ +0xA3,0x7E,0x39,0xB0,0x7A,0xB1,0x0F,0x0B,0x34,0xBE,0xB1,0x0E,0x28,0x09,0x85,0x0F,\ +0x0E,0x7E,0x20,0x01,0x12,0x08,0x8C,0x7E,0xB1,0x0E,0xBE,0xB0,0x01,0x28,0x11,0x7E,\ +0xA0,0x01,0x19,0xAF,0x00,0x08,0x19,0xAF,0x00,0x09,0x2E,0xB1,0x0B,0x7A,0xB1,0x0B,\ +0x22,0x12,0x0C,0xF3,0x12,0x0A,0xF4,0x7D,0x56,0xA2,0xF1,0x92,0x18,0x30,0xF0,0x02,\ +0xF5,0xF1,0x43,0xF1,0x80,0x12,0x0C,0xFD,0x7E,0x34,0x0E,0x5E,0x7E,0x30,0x1F,0x12,\ +0x00,0x6D,0x12,0x24,0x1C,0xD2,0xAF,0x12,0x0C,0xCD,0x75,0xBB,0x11,0x12,0x27,0x2D,\ +0x40,0xE6,0x20,0x13,0xF5,0xA2,0x09,0x12,0x12,0x44,0xB4,0x02,0x21,0x30,0x11,0x07,\ +0x12,0x37,0x87,0x50,0x16,0x80,0x17,0x12,0x0D,0x4A,0x60,0x0F,0x54,0x02,0x44,0xC8,\ +0xC2,0xE5,0xA2,0x09,0x92,0xE4,0x12,0x34,0x4A,0xD2,0x29,0x12,0x0F,0xE3,0x12,0x0F,\ +0xD5,0x20,0x11,0x4B,0x12,0x38,0x22,0x12,0x31,0xD1,0x7E,0x01,0xA8,0xC2,0xAF,0x20,\ +0x2B,0x3A,0xA2,0x09,0x12,0x12,0x44,0xBE,0xB0,0x01,0x68,0x15,0xBE,0xB0,0x02,0x68,\ +0x2B,0x20,0x19,0x28,0x85,0x5B,0x9C,0x7A,0x01,0xA8,0x43,0x87,0x02,0x00,0x00,0x80,\ +0x1E,0xB4,0x01,0x18,0x20,0x1A,0x15,0x80,0x03,0x20,0x1B,0x10,0x53,0x9C,0xFD,0x43,\ +0x9C,0x01,0x7A,0x01,0xA8,0x43,0x87,0x01,0x00,0x00,0x80,0x03,0x7A,0x01,0xA8,0x02,\ +0x0A,0x5A,0x74,0x62,0xF5,0x45,0x12,0x22,0xE0,0xD2,0x13,0x22,0x74,0x72,0x80,0xF4,\ +0x74,0x32,0x80,0xF0,0x75,0xC1,0x24,0xC2,0x13,0x7E,0x18,0x0E,0x9C,0x7A,0x1F,0x02,\ +0x01,0xC2,0x16,0x12,0x37,0x7F,0x12,0x26,0x11,0x12,0x00,0x08,0x12,0x23,0x76,0xF5,\ +0x4D,0x6D,0x66,0x90,0x43,0xED,0xE4,0x93,0xBE,0xB0,0x00,0x68,0x07,0x12,0x27,0xB0,\ +0xD2,0x2B,0x80,0xC5,0x7E,0x1C,0x42,0x50,0x29,0xB1,0x00,0x04,0xB4,0x01,0xBD,0x7E,\ +0x14,0x01,0x8E,0x12,0x3C,0x61,0x0B,0x1A,0x10,0xBD,0x51,0x78,0xAF,0x12,0x0C,0x0C,\ +0x40,0xA0,0xE5,0xE1,0xB4,0x03,0xA9,0x75,0xD0,0x00,0x7E,0x73,0x0E,0xA5,0x0A,0x37,\ +0x2E,0x34,0x0E,0xA1,0x09,0xB3,0xFF,0xFF,0xB4,0x00,0x87,0x7E,0x24,0x00,0x08,0x7E,\ +0x30,0x08,0x12,0x3C,0x52,0x75,0xD0,0x08,0xA5,0xEF,0xA2,0xE4,0xE5,0xB9,0x92,0xE4,\ +0xF5,0xB9,0x7A,0x11,0x99,0x12,0x0B,0xD7,0x7A,0x41,0x9E,0x7A,0x51,0x9F,0x7C,0xA6,\ +0x7C,0xB0,0x75,0xD0,0x00,0x20,0xE0,0x3D,0x7E,0x34,0x43,0xF0,0x7E,0x24,0x00,0xFF,\ +0x0B,0x1A,0x00,0xBE,0x04,0x54,0x52,0x78,0x39,0x69,0x11,0x00,0x02,0xBE,0x14,0x49,\ +0x4D,0x78,0x2F,0x69,0x01,0x00,0x05,0x69,0x11,0x00,0x07,0xE5,0x9E,0x54,0xC0,0x5E,\ +0x00,0x3F,0xA5,0x48,0xF5,0x9E,0xA5,0xEB,0x7E,0x70,0x1F,0x12,0x00,0x5A,0xF5,0x9F,\ +0x7C,0x31,0x12,0x0B,0xD7,0x12,0x0C,0x7B,0x12,0x23,0x9A,0x12,0x0B,0xE4,0x75,0xEB,\ +0x0A,0x22,0x74,0x22,0x02,0x0A,0xE4,0x43,0xEA,0x80,0x7A,0x21,0xEC,0x7A,0x31,0xED,\ +0x53,0xEA,0x7F,0x22,0x75,0x8B,0x3A,0x75,0x8A,0x23,0x75,0xC3,0xFD,0x75,0x8E,0x40,\ +0x75,0x9A,0x03,0x7E,0x01,0x9B,0x43,0x8B,0x80,0xA9,0x31,0xC3,0xFC,0xE5,0x9B,0x9C,\ +0xB0,0x75,0xF0,0x08,0x84,0xF4,0x04,0x7A,0xB3,0x02,0x07,0x22,0x7E,0x1C,0x3F,0x00,\ +0x29,0x31,0x00,0x08,0xBE,0x30,0x00,0x68,0x60,0xBE,0x30,0xFE,0x38,0x5B,0x12,0x3C,\ +0x5F,0x0B,0x1A,0x10,0xBD,0x51,0x78,0x51,0x7E,0x30,0x00,0x7E,0x24,0x0E,0x9C,0x90,\ +0x3F,0x00,0x12,0x3C,0x4C,0x7E,0x57,0x0E,0xA0,0xBE,0xA0,0x66,0x40,0x3B,0xBE,0xB0,\ +0x66,0x38,0x36,0x12,0x0C,0xC2,0x09,0xB3,0x00,0x07,0x60,0x08,0x09,0xB3,0x00,0x09,\ +0xA2,0xE5,0x40,0x25,0x7E,0x73,0x0E,0xAB,0x0A,0x37,0x2E,0x34,0x0E,0x9C,0x0B,0x38,\ +0x60,0x09,0xB3,0x00,0x02,0xB4,0x01,0x11,0x09,0xB3,0x00,0x03,0xB4,0x01,0x0A,0x09,\ +0xB3,0x00,0x0B,0x7A,0xB3,0x02,0x40,0xC3,0x22,0xD3,0x22,0x12,0x0C,0xC2,0x49,0x03,\ +0x00,0x01,0x49,0x13,0x00,0x03,0x7A,0x0D,0x48,0x09,0xB3,0x00,0x09,0xA2,0xE3,0x92,\ +0x17,0x33,0x92,0x0A,0x49,0x03,0x00,0x05,0x49,0x13,0x00,0x07,0x6C,0x22,0x7A,0x0D,\ +0x3E,0x85,0x3E,0x42,0x85,0x3F,0x43,0x20,0x0A,0x06,0x85,0x3F,0x42,0x85,0x3E,0x43,\ +0x85,0x43,0x44,0x7E,0x73,0x0E,0xAB,0x0A,0x37,0x09,0xB3,0x0E,0xA9,0x7A,0xB3,0x02,\ +0x09,0x22,0x7E,0x73,0x0E,0xA7,0x0A,0x37,0x2E,0x34,0x0E,0x9C,0x22,0x12,0x38,0x0F,\ +0x20,0x13,0x1F,0x12,0x3C,0x23,0x12,0x0E,0xD9,0x12,0x27,0xD9,0x12,0x29,0x80,0x20,\ +0x11,0x06,0x12,0x3B,0x28,0x75,0x35,0xFF,0x12,0x31,0x1A,0x74,0x00,0xF5,0x45,0x12,\ +0x22,0xE0,0x22,0x85,0x80,0xA4,0x85,0x90,0xA5,0x12,0x0D,0x1C,0x22,0x74,0x01,0x30,\ +0x83,0x0B,0x30,0x91,0x12,0x04,0xC2,0x90,0x30,0x91,0x0C,0x80,0x09,0x30,0x92,0x07,\ +0x04,0xC2,0x91,0x30,0x92,0x01,0x04,0x7A,0xB3,0x02,0x08,0x22,0x74,0x01,0x20,0x83,\ +0x02,0x74,0x02,0x42,0xA5,0xF4,0x52,0xA3,0x22,0x7E,0x54,0x5B,0x8D,0x22,0x7E,0x13,\ +0x02,0x1E,0x0A,0x01,0x7E,0x70,0x00,0x7E,0x57,0x02,0x1C,0xBD,0x50,0x40,0x0A,0xA5,\ +0x0F,0x3E,0x04,0xBD,0x50,0x40,0x02,0xA5,0x0F,0x22,0x05,0x4E,0xC2,0x26,0x20,0x09,\ +0x00,0x6D,0x00,0x7A,0x07,0x02,0x1C,0x12,0x12,0x5B,0xF5,0x55,0x7E,0x34,0x02,0x4C,\ +0x7E,0x30,0x06,0x12,0x00,0x6D,0x75,0x3D,0x03,0x74,0x48,0xC2,0xE5,0xA2,0x09,0x92,\ +0xE4,0x12,0x2C,0x7A,0xC2,0x1F,0x6D,0x55,0xBE,0x57,0x02,0x49,0x68,0x14,0xBE,0x37,\ +0x02,0x49,0x40,0x0E,0xD2,0x1F,0xE5,0x55,0x23,0x0A,0x5B,0x2E,0x54,0x02,0x4C,0x1B,\ +0x58,0x30,0x30,0x23,0x0E,0xC2,0x23,0x6D,0x55,0x7A,0x57,0x02,0x1C,0x74,0x02,0x7A,\ +0xB3,0x02,0x4B,0x12,0x12,0x74,0x12,0x0D,0xC9,0x50,0x03,0x12,0x0E,0x99,0x20,0x1F,\ +0x16,0x30,0x18,0x05,0xE5,0x55,0xB5,0x53,0x0E,0x12,0x0D,0x2E,0x7C,0xB7,0x60,0x04,\ +0x14,0x74,0x02,0x22,0x74,0x01,0x22,0xE4,0x22,0x12,0x0E,0x17,0x12,0x0E,0x75,0x7E,\ +0xB3,0x02,0x4B,0x60,0x07,0x14,0x7A,0xB3,0x02,0x4B,0xC3,0x22,0xC2,0x1E,0xC2,0x1D,\ +0x7E,0x13,0x02,0x1E,0x0A,0x01,0x7E,0x30,0x06,0x7E,0x34,0x02,0x4C,0x7E,0x20,0x00,\ +0x0B,0x38,0x50,0xBD,0x50,0x28,0x17,0xD2,0x1D,0xBE,0x21,0x55,0x78,0x10,0xD2,0x1E,\ +0x7E,0x51,0x55,0x0A,0x25,0x2E,0x24,0x03,0xA8,0x74,0x06,0x7A,0x29,0xB0,0x0B,0x35,\ +0xA5,0x0A,0xA5,0xDB,0xDB,0xD3,0x22,0x7E,0xA4,0x02,0xA0,0x20,0x09,0x04,0x7E,0xA4,\ +0x02,0x58,0x7E,0x40,0x00,0x7E,0x44,0x02,0x4C,0x7E,0xF1,0x44,0x3E,0xF0,0x0A,0x8F,\ +0x2E,0x84,0x0B,0x36,0x2E,0xF0,0x0C,0x0A,0x7F,0x7D,0x9A,0x0A,0x54,0x2D,0x85,0x2D,\ +0x95,0x0B,0x48,0x50,0x7E,0x53,0x0A,0x8B,0x0B,0x88,0x00,0x0B,0x98,0x10,0x2D,0x87,\ +0x2E,0x94,0x00,0x0C,0x9D,0x01,0xA9,0x35,0xD1,0x06,0x6E,0x04,0xFF,0xFF,0x0B,0x04,\ +0xBD,0x05,0x28,0x02,0x7D,0x50,0xA5,0xDD,0xDF,0x1B,0x48,0x50,0x0B,0x45,0x0B,0x41,\ +0xA5,0xBC,0x0C,0xB5,0x22,0x7E,0x24,0x02,0xA0,0x20,0x09,0x04,0x7E,0x24,0x02,0x58,\ +0x7E,0x34,0x0B,0x36,0xE5,0x44,0x23,0x0A,0x0B,0x7E,0x23,0x0A,0x8B,0x7E,0x30,0x06,\ +0x2D,0x30,0x12,0x3C,0x58,0xA5,0xDA,0xF5,0x22,0x7E,0x00,0x00,0x7E,0x11,0x55,0xCA,\ +0x09,0xC2,0x2D,0xA5,0xE8,0xF5,0x55,0xB4,0x05,0x02,0xD2,0x2D,0x23,0x0A,0x5B,0x2E,\ +0x54,0x02,0x4C,0x0B,0x58,0x50,0x7A,0x57,0x02,0x1C,0x12,0x28,0x44,0xDA,0x09,0xA5,\ +0x08,0xA5,0xB8,0x06,0xDA,0x7A,0x11,0x55,0xE5,0x55,0x23,0x0A,0x5B,0x2E,0x54,0x02,\ +0x4C,0x0B,0x58,0x50,0x7A,0x57,0x02,0x1C,0x22,0x74,0x03,0x7E,0x73,0x0E,0xA5,0x0A,\ +0x37,0x2E,0x34,0x0E,0xA1,0x7E,0x39,0xA0,0x30,0xF1,0x02,0x44,0x08,0xF5,0x9D,0xF5,\ +0x9C,0x6D,0x55,0x7A,0x57,0xFF,0x50,0xF5,0xD0,0x7A,0x57,0x02,0x05,0x7A,0x55,0x36,\ +0xF5,0x39,0xF5,0x38,0xF5,0x35,0xD2,0x07,0xC2,0x08,0xC2,0x09,0xC2,0x10,0x74,0x02,\ +0x7A,0xB3,0x02,0x4B,0x12,0x0F,0xC0,0xE4,0xF5,0x33,0xF5,0x34,0x7E,0x11,0x42,0x6C,\ +0x00,0x7E,0x19,0xB0,0x0B,0x14,0x13,0x40,0x04,0x05,0x33,0x80,0x02,0x05,0x34,0xA5,\ +0x08,0xBC,0x01,0x78,0xEC,0x85,0x33,0x3C,0x43,0xB9,0x01,0x53,0xB9,0xFE,0xC0,0xA8,\ +0xC2,0xAF,0x12,0x0C,0xC2,0x2E,0x34,0x00,0x09,0x7E,0x24,0x00,0x08,0x7E,0x30,0x16,\ +0x12,0x3C,0x52,0x75,0xD0,0x08,0x7A,0x27,0xFF,0x40,0xA5,0xE8,0xA2,0xE4,0x92,0x25,\ +0xE5,0x9C,0xA2,0xE3,0xA5,0xE9,0x03,0xF4,0x54,0x03,0x92,0xE3,0xF5,0x5B,0xF5,0x9C,\ +0xA5,0xE9,0x13,0x92,0x19,0xA5,0xE9,0x33,0x92,0x1B,0x33,0x92,0x1A,0x75,0xD0,0x10,\ +0x7A,0x27,0xFF,0x48,0x75,0xD0,0x18,0x7A,0x07,0xFF,0x4C,0x4E,0x40,0x90,0x5E,0x50,\ +0x77,0x7A,0x27,0xFF,0x50,0xD0,0xA8,0x75,0xD0,0x00,0x7E,0x73,0x0E,0xA9,0x0A,0x37,\ +0x2E,0x34,0x0E,0x9C,0x7E,0x24,0x20,0x18,0x7E,0x31,0x43,0x12,0x43,0xA6,0x7E,0x54,\ +0x00,0x00,0x0B,0x54,0xBE,0x54,0x9F,0xFF,0x78,0xF8,0x75,0xC3,0xDF,0xD2,0xAD,0x22,\ +0x7E,0x33,0x0E,0xA8,0x0A,0x13,0x2E,0x14,0x0E,0x9C,0x22,0x75,0xC3,0xDF,0x7E,0x20,\ +0x01,0x12,0x0F,0xFF,0x22,0xC0,0xA8,0x53,0xA8,0x9F,0x7E,0x20,0x00,0x12,0x0F,0xFF,\ +0xD0,0xA8,0x22,0xC0,0xA8,0xC2,0xAF,0xA2,0x09,0x74,0x00,0x12,0x12,0x4F,0x75,0x39,\ +0x00,0xB2,0x09,0x85,0x34,0x3C,0x20,0x09,0x03,0x85,0x33,0x3C,0xD0,0xA8,0x22,0xA2,\ +0x08,0x12,0x12,0x44,0x60,0x10,0xB4,0x01,0x0C,0xBE,0x20,0x01,0x78,0x07,0x12,0x10,\ +0x56,0x50,0xEC,0x80,0x36,0x22,0x20,0x08,0x2F,0xE5,0x38,0x70,0x2E,0xE5,0x35,0x60,\ +0x1F,0xB4,0x01,0x18,0x7E,0xB3,0x02,0x0D,0xF5,0x50,0x7E,0xB3,0x02,0x07,0x75,0xBC,\ +0x00,0xF5,0xBD,0x75,0xBC,0x80,0xA9,0x36,0xC3,0x02,0x05,0x50,0x15,0x35,0x80,0x03,\ +0x30,0x07,0xD2,0xC2,0x07,0x12,0x22,0xE5,0x85,0x53,0x54,0x12,0x10,0xAE,0xA2,0x08,\ +0x74,0x01,0x12,0x12,0x4F,0x22,0xE5,0x38,0xBE,0xB0,0x02,0x40,0x01,0x14,0x7E,0xA0,\ +0x0C,0xA4,0x7E,0x34,0x24,0x00,0x7E,0x24,0x03,0x48,0x20,0x08,0x08,0x7E,0x34,0x22,\ +0x00,0x7E,0x24,0x02,0xE8,0x2D,0x25,0x7E,0x30,0x06,0x12,0x3C,0x58,0xE5,0x38,0xB4,\ +0x08,0x02,0x80,0x0B,0x05,0x38,0xE5,0x38,0xBE,0xB0,0x02,0x68,0xF7,0xD3,0x22,0xE5,\ +0x34,0x20,0x08,0x02,0xE5,0x33,0xA2,0x08,0x12,0x12,0x3C,0x74,0x02,0xA2,0x08,0x12,\ +0x12,0x4F,0xE5,0x54,0x12,0x12,0x67,0x75,0x38,0x00,0xB2,0x08,0xC3,0x22,0x12,0x0C,\ +0xC2,0x7D,0x03,0xE5,0x38,0x70,0x33,0x2E,0x34,0x00,0x35,0x7E,0x24,0x20,0x00,0x7E,\ +0x30,0x0C,0x12,0x43,0xA6,0x49,0x20,0x00,0x33,0x49,0x30,0x00,0x31,0x4E,0x60,0x01,\ +0x09,0x30,0x00,0x41,0x49,0x50,0x00,0x42,0x7E,0x10,0x73,0x5C,0x1B,0xA2,0xE3,0x54,\ +0x04,0xC4,0x92,0xE0,0xA5,0xF8,0x7C,0xBA,0x80,0x40,0x2E,0x34,0x00,0x1F,0x7E,0x24,\ +0x20,0x00,0x7E,0x30,0x0C,0x12,0x43,0xA6,0x49,0x20,0x00,0x17,0x49,0x30,0x00,0x0F,\ +0x5E,0x60,0xFE,0x49,0x50,0x00,0x1B,0x7E,0x31,0x38,0xBE,0x30,0x03,0x50,0x05,0x7E,\ +0x31,0x54,0x80,0x0A,0x9E,0x30,0x03,0x09,0x60,0x00,0x11,0x5E,0x60,0xFE,0x0A,0x13,\ +0x2D,0x10,0x09,0x31,0x00,0x2B,0x49,0x00,0x00,0x1D,0x7A,0x27,0xFF,0x4A,0x7A,0x57,\ +0xFF,0x4E,0x7A,0x37,0xFF,0x42,0x7A,0x17,0xFF,0x54,0x7E,0x50,0x01,0x7E,0x70,0x15,\ +0xE5,0x38,0xB4,0x01,0x0D,0x7E,0x73,0x0E,0xA9,0x0A,0x37,0x09,0x73,0x0E,0x9C,0x7E,\ +0x51,0x43,0x7A,0x37,0x20,0x18,0x7A,0x27,0xFF,0x52,0x7D,0x50,0xC2,0xF7,0xD2,0xF4,\ +0xA2,0x08,0x92,0xE3,0xD2,0xE7,0x7A,0x57,0xFF,0x50,0x22,0xE4,0xA2,0x09,0x12,0x12,\ +0x3C,0x75,0x39,0x00,0xC3,0x22,0xA5,0x0D,0x6C,0x44,0x80,0x0C,0xE5,0x3C,0x60,0xEB,\ +0x15,0x3C,0xE5,0x39,0x0A,0x2B,0x7D,0x43,0x12,0x0F,0xC0,0x2D,0x12,0x7E,0x19,0x40,\ +0x1E,0x40,0x20,0x09,0x01,0xB3,0x50,0xDE,0xA5,0xED,0x04,0xF5,0x39,0x0A,0x04,0x3E,\ +0x04,0xE5,0x3D,0x30,0xE0,0x35,0x49,0x50,0x03,0x54,0x20,0x09,0x04,0x49,0x50,0x02,\ +0xF4,0x1B,0x38,0x50,0x0B,0x35,0x7E,0x14,0x24,0x0C,0x20,0x09,0x04,0x7E,0x14,0x22,\ +0x0C,0x7E,0x41,0x43,0xA5,0x1C,0xA5,0xEC,0x60,0x11,0x2D,0x10,0x0B,0x18,0x50,0x1B,\ +0x38,0x50,0x0B,0x35,0x2E,0x14,0x00,0x0C,0xA5,0xDC,0xF1,0xE5,0x3D,0x30,0xE1,0x1F,\ +0x7E,0x14,0x03,0x60,0x20,0x09,0x04,0x7E,0x14,0x03,0x00,0x2D,0x10,0x7E,0x40,0x06,\ +0x0B,0x18,0x50,0x1B,0x38,0x50,0x0B,0x35,0x2E,0x14,0x00,0x0C,0xA5,0xDC,0xF1,0x7E,\ +0x14,0x03,0x48,0x20,0x09,0x04,0x7E,0x14,0x02,0xE8,0x2D,0x10,0x0B,0x18,0x00,0xCA,\ +0x58,0xCA,0x09,0xE5,0x3D,0x30,0xE0,0x0F,0x7D,0x34,0x6D,0x22,0x7E,0x31,0x43,0x3E,\ +0x30,0x12,0x3C,0x5F,0x12,0x23,0x6C,0xDA,0x39,0xDA,0x08,0xE5,0x3C,0xA2,0x09,0x12,\ +0x12,0x3C,0xD3,0x22,0xE5,0x36,0x30,0x09,0x02,0xE5,0x37,0x22,0x40,0x03,0xF5,0x36,\ +0x22,0xF5,0x37,0x22,0x7E,0xB3,0x02,0x05,0x50,0x04,0x7E,0xB3,0x02,0x06,0x22,0x40,\ +0x05,0x7A,0xB3,0x02,0x05,0x22,0x7A,0xB3,0x02,0x06,0x22,0x7E,0xB3,0x02,0x47,0x30,\ +0x09,0x04,0x7E,0xB3,0x02,0x48,0x22,0x20,0x08,0x05,0x7A,0xB3,0x02,0x47,0x22,0x7A,\ +0xB3,0x02,0x48,0x22,0x22,0xD2,0xD3,0x7C,0x0C,0xA5,0xB8,0xFF,0x18,0x9D,0x11,0x09,\ +0x11,0x09,0xF3,0xBE,0x10,0x00,0x68,0x0B,0x0B,0x14,0xA5,0xBB,0x05,0xF1,0x74,0xFF,\ +0xC2,0xD3,0x22,0x7C,0x03,0x0A,0x20,0x3E,0x24,0x3E,0x24,0x6D,0x55,0x59,0x52,0x09,\ +0x44,0x0B,0x25,0x7E,0xB3,0x08,0x74,0xBE,0xB0,0x80,0x38,0x0C,0x7E,0xB3,0x08,0x76,\ +0x60,0x0A,0x7E,0xB3,0x08,0x61,0x60,0x04,0x6D,0x55,0x80,0x04,0x7E,0x54,0x64,0x96,\ +0x59,0x52,0x09,0x44,0x0A,0x20,0x0A,0x10,0x3E,0x14,0x6D,0x55,0x59,0x51,0x09,0xE4,\ +0x7E,0xB0,0x01,0x19,0xB2,0x09,0xF3,0xE4,0x19,0xB2,0x09,0xEE,0x04,0x19,0xB2,0x09,\ +0xF8,0x7D,0x5D,0x19,0xB2,0x0A,0x02,0x59,0xE1,0x09,0xA8,0x59,0xF1,0x09,0xB2,0x7C,\ +0xB5,0x12,0x2F,0x00,0x7C,0xB5,0x12,0x2F,0x68,0x0A,0x15,0x7E,0xB0,0x02,0x19,0xB1,\ +0x0A,0x1F,0x7E,0xB0,0xFF,0x19,0xB1,0x0A,0x24,0x3E,0x14,0x59,0xE1,0x0A,0x0B,0x59,\ +0xF1,0x0A,0x15,0x7E,0xB0,0x01,0x7A,0xB3,0x08,0x8C,0xE4,0xC2,0xD3,0x22,0x0A,0x0C,\ +0x7D,0x5D,0x19,0xB0,0x0A,0x02,0x6C,0x66,0x09,0xB0,0x09,0xF3,0xB4,0x01,0x15,0xA5,\ +0x0E,0x09,0xB0,0x09,0xEE,0xBE,0xB0,0x02,0x38,0x0A,0x7C,0xBC,0x12,0x2F,0x00,0x7C,\ +0xBC,0x12,0x2F,0x68,0xD2,0xD3,0x7C,0xBC,0x12,0x2F,0xFC,0x7F,0x17,0x12,0x43,0x4A,\ +0x1E,0x14,0x1E,0x14,0x7D,0xD1,0x7E,0x54,0x00,0x10,0xBD,0x5D,0x40,0x02,0x7D,0x5D,\ +0x7E,0x50,0x10,0x9C,0x5B,0x7E,0xA3,0x08,0xC1,0xAC,0xAB,0x7E,0x43,0x08,0xAE,0xAC,\ +0x45,0x2D,0x25,0x7E,0x54,0x00,0x10,0x8D,0x25,0xBE,0x70,0x01,0x50,0x03,0x7E,0x70,\ +0x01,0xA5,0xEF,0xC2,0xD3,0x7C,0x5D,0xA5,0xFF,0x7E,0x00,0x06,0x7C,0xE7,0xD2,0xD3,\ +0x7C,0xBC,0x12,0x2F,0x15,0x7C,0xBC,0x12,0x2F,0x5C,0x7F,0x50,0x7F,0x17,0x12,0x43,\ +0x4A,0x7E,0xB3,0x08,0xC2,0x0A,0x0B,0xBD,0x10,0x40,0x0A,0x60,0x08,0xC2,0xD3,0xA5,\ +0x18,0xA5,0xB8,0x00,0xD7,0xC2,0xD3,0x0A,0x7C,0x7E,0x73,0x08,0x7C,0x0A,0x07,0x7E,\ +0x33,0x08,0xE6,0x1A,0x13,0xAD,0x10,0x0E,0x14,0x0E,0x14,0x0E,0x14,0x9D,0xD1,0xA5,\ +0xBE,0x01,0x15,0x7D,0x07,0x3E,0x04,0x59,0xA0,0x0A,0x0B,0x59,0xB0,0x0A,0x15,0x74,\ +0x02,0x19,0xB7,0x0A,0x1F,0x02,0x14,0x97,0x7E,0xB3,0x08,0xAF,0x60,0xF7,0x7C,0x4B,\ +0x09,0x57,0x0A,0x1F,0xBE,0x50,0x01,0x28,0x32,0x7E,0xB3,0x08,0xD8,0xA5,0xF8,0x0A,\ +0x17,0x5E,0x00,0x0F,0x0A,0x00,0x9D,0x10,0xC4,0x54,0x0F,0x0A,0x5B,0xAD,0x15,0xBE,\ +0x14,0x00,0x00,0x08,0x16,0x7E,0x13,0x08,0x61,0xBE,0x10,0x01,0x38,0x0D,0x0A,0x54,\ +0x2D,0x51,0xBE,0xA0,0x00,0x68,0x02,0x74,0xFF,0x7C,0x4B,0x7D,0xC2,0x7D,0x07,0x3E,\ +0x04,0x49,0x80,0x0A,0x0B,0x49,0x90,0x0A,0x15,0x7F,0x05,0x7F,0x14,0x12,0x42,0xF8,\ +0x7D,0x5C,0xA4,0xBD,0x35,0x08,0x4C,0x7D,0x1C,0x0A,0x22,0x3E,0x24,0xBD,0x32,0x08,\ +0x08,0xA5,0xBB,0x01,0x04,0x7F,0x45,0x80,0x26,0x7D,0x08,0x7E,0x30,0x03,0x7D,0x2A,\ +0x7E,0x70,0x01,0x7E,0xA0,0x02,0x12,0x42,0x55,0x7D,0x81,0x7D,0x09,0x7E,0x30,0x03,\ +0x7D,0x2B,0x7E,0x70,0x01,0x7E,0xA0,0x02,0x12,0x42,0x55,0x7D,0x91,0x0E,0xD4,0x7D,\ +0x07,0x3E,0x04,0x59,0x80,0x0A,0x0B,0x59,0x90,0x0A,0x15,0x74,0x01,0x19,0xB7,0x0A,\ +0x1F,0x80,0x02,0x6D,0xDD,0x7F,0x54,0xD2,0xD3,0x7C,0xBF,0x7C,0xCF,0x7F,0x47,0x7F,\ +0x75,0x12,0x2F,0x7D,0x7C,0xBC,0x12,0x2F,0xD4,0x7F,0x71,0xC2,0xD3,0x7C,0xD5,0x7D,\ +0x4D,0xBE,0x44,0x00,0x00,0x58,0x02,0x6D,0x44,0xBE,0x44,0x00,0x10,0x40,0x04,0x7E,\ +0x44,0x00,0x10,0x7E,0x80,0x10,0x9C,0x89,0x7D,0x0E,0x7C,0x38,0x7D,0x28,0x7C,0x79,\ +0x7E,0xA0,0x04,0x12,0x42,0x55,0x0A,0x5C,0x3E,0x54,0x59,0x15,0x09,0xA8,0x7D,0x0F,\ +0x7C,0x38,0x7D,0x29,0x7C,0x79,0x7E,0xA0,0x04,0x12,0x42,0x55,0x0A,0x5C,0x3E,0x54,\ +0x59,0x15,0x09,0xB2,0x22,0x7E,0x64,0x0A,0x29,0x7E,0xA0,0x05,0x7E,0x69,0xB0,0x70,\ +0x0C,0x7E,0xB0,0x01,0x7A,0x69,0xB0,0x7E,0xB0,0x05,0x9C,0xBA,0x22,0x0B,0x64,0xD5,\ +0xF0,0xEA,0xE4,0x14,0x22,0x7E,0x53,0x08,0xBF,0x7E,0x63,0x08,0xC0,0x7E,0xB3,0x08,\ +0x77,0x70,0x19,0x7E,0xB3,0x08,0x6E,0xB4,0xFF,0x12,0x7E,0xB3,0x08,0x74,0xBE,0xB0,\ +0x80,0x28,0x0C,0x7E,0xB3,0x08,0x7B,0xBE,0xB0,0x01,0x28,0x03,0x2E,0x50,0x03,0x6D,\ +0x44,0x09,0x24,0x09,0xF3,0x09,0x34,0x09,0xEE,0x09,0x44,0x09,0xF8,0xA5,0xBA,0x00,\ +0x0B,0xA5,0xBC,0x01,0x51,0x9C,0x33,0x7E,0x20,0x01,0x80,0x4A,0xA5,0xBA,0x01,0x1B,\ +0xA5,0xBC,0x01,0x12,0xA5,0x0B,0xBC,0x35,0x40,0x3C,0x7E,0x20,0x02,0x12,0x14,0xF5,\ +0x19,0xB4,0x0A,0x24,0x80,0x30,0x7E,0x20,0x00,0x80,0x2B,0xA5,0xBA,0x02,0x0B,0xA5,\ +0xBC,0x00,0x23,0x9C,0x33,0x7E,0x20,0x03,0x80,0x1C,0xBE,0x20,0x03,0x68,0x05,0xBE,\ +0x20,0x04,0x78,0x12,0xA5,0xBC,0x01,0x05,0x7E,0x20,0x02,0x80,0x09,0xA5,0x0B,0xBC,\ +0x36,0x40,0x03,0x7E,0x20,0x05,0x19,0x24,0x09,0xF3,0x19,0x34,0x09,0xEE,0x0B,0x44,\ +0xBE,0x44,0x00,0x05,0x68,0x03,0x02,0x15,0x41,0x22,0x12,0x15,0x15,0x22,0xCA,0x3B,\ +0xC0,0xD0,0x75,0xD0,0x00,0x12,0x15,0xBA,0xD0,0xD0,0xDA,0x3B,0x22,0x7E,0xB0,0x01,\ +0xBE,0x14,0x00,0x02,0x58,0x01,0xE4,0x6C,0x99,0xBE,0x14,0x00,0x08,0x58,0x03,0x7E,\ +0x90,0x01,0x02,0x38,0x9D,0x7D,0x32,0x9D,0x30,0x7E,0xB3,0x08,0x7A,0x60,0x3D,0x7E,\ +0x23,0x08,0x74,0x1E,0x20,0xBE,0x34,0x00,0x00,0x58,0x08,0xBE,0x04,0x00,0x00,0x08,\ +0x02,0x80,0x0F,0xBE,0x20,0x01,0x50,0x05,0x7E,0x20,0x01,0x80,0x08,0xBE,0x20,0x05,\ +0x28,0x03,0x7E,0x20,0x05,0x0A,0x32,0x7E,0x14,0x00,0x10,0x9D,0x13,0xAD,0x01,0xAD,\ +0x23,0x2D,0x13,0x0E,0x14,0x0E,0x14,0x0E,0x14,0x0E,0x14,0x22,0xBE,0x34,0x00,0x00,\ +0x58,0x06,0x6E,0x34,0xFF,0xFF,0x0B,0x34,0x0B,0x34,0xBE,0x34,0x00,0x20,0x28,0x03,\ +0x7E,0x70,0x20,0x7E,0x30,0x20,0x9C,0x37,0x7E,0xA0,0x05,0x02,0x42,0x55,0x7C,0xCB,\ +0x7E,0xB3,0x08,0xDD,0x70,0x01,0x22,0x7C,0x8B,0x7E,0xB3,0x08,0xA7,0x1E,0xB0,0x0A,\ +0x9B,0x7E,0xA4,0x00,0x02,0x7E,0xB3,0x08,0xDC,0x7C,0xAB,0x54,0x7F,0x7D,0xB3,0x9C,\ +0xCB,0x30,0xF7,0x0A,0x7E,0xA4,0xFF,0xFE,0x1A,0x5C,0x1B,0x54,0x80,0x02,0x1A,0x5B,\ +0x3E,0x54,0x2D,0xB5,0x6D,0x88,0x7D,0xC8,0x6C,0xDD,0xBC,0xDC,0x58,0xC8,0x0B,0xB8,\ +0x10,0x7D,0x01,0x9D,0x08,0x1B,0xB8,0x00,0xBD,0x19,0x08,0x11,0x0A,0x38,0x12,0x42,\ +0xAB,0x7C,0x32,0x7C,0x21,0x2D,0xC1,0x0E,0xC4,0x2D,0x8C,0x7D,0xC1,0x2D,0xBA,0x0B,\ +0xD0,0x80,0xD7,0x7E,0xF3,0x08,0x90,0x0A,0x7F,0x60,0x0A,0x7E,0x03,0x08,0x67,0xA5,\ +0x18,0xA5,0x68,0x70,0x0E,0x7E,0xF3,0x08,0xAC,0x7E,0xB3,0x08,0x91,0x60,0x04,0xAC,\ +0xFB,0x0A,0x7E,0x7E,0xA4,0x08,0xCD,0x7E,0xA9,0xC0,0x0B,0xA4,0x6C,0xDD,0xBE,0xD3,\ +0x08,0x66,0x50,0x55,0x7D,0x1B,0x7C,0xBC,0x54,0x0F,0x0A,0x3B,0x12,0x42,0xAB,0x74,\ +0x03,0x1E,0x14,0x0E,0x04,0x50,0x03,0x4E,0x20,0x80,0x14,0x78,0xF4,0x7C,0xBC,0xC4,\ +0x54,0x0F,0x7C,0xCB,0x7C,0xBD,0x30,0xE0,0x05,0x7E,0xA9,0xC0,0x0B,0xA4,0x0B,0xE8,\ +0x30,0x0B,0xF8,0x20,0x9D,0x32,0x9D,0x3C,0xBD,0x31,0x08,0x04,0x9D,0x31,0x80,0x08,\ +0xBE,0x34,0x00,0x00,0x08,0x02,0x6D,0x33,0x0A,0x5D,0x3E,0x54,0x59,0x35,0x03,0xAE,\ +0x0B,0xE5,0x0B,0xF5,0x0B,0xD0,0x02,0x16,0xDE,0x7E,0xB3,0x08,0x66,0x7E,0x34,0x03,\ +0xAE,0x12,0x16,0x4E,0x6D,0x88,0x7E,0xB3,0x08,0x92,0x0A,0xEB,0x6C,0xDD,0x7E,0xB3,\ +0x08,0xE8,0x1A,0x9B,0x6D,0xAA,0xBE,0xD3,0x08,0x66,0x50,0x57,0x0A,0x3D,0x3E,0x34,\ +0x49,0x33,0x03,0xAE,0x9D,0x3E,0xBD,0x38,0x08,0x02,0x7D,0x83,0x7D,0x17,0x7C,0xBD,\ +0x60,0x07,0x9E,0xB3,0x08,0x66,0x04,0x70,0x02,0x2D,0x19,0x7D,0x0A,0x74,0x04,0x60,\ +0x05,0x0E,0x04,0xD5,0xE0,0xFB,0x2D,0x10,0x7E,0xB3,0x08,0xAB,0x1A,0x0B,0x2D,0xA0,\ +0x12,0x42,0xAB,0x74,0x06,0x1E,0x14,0x0E,0x04,0x50,0x03,0x4E,0x20,0x80,0x14,0x78,\ +0xF4,0x0B,0xD8,0x00,0x7D,0x21,0x12,0x15,0xE5,0x1B,0xD8,0x10,0x0B,0xD5,0x0B,0xD0,\ +0x02,0x17,0x56,0xBE,0x87,0x08,0x8E,0x08,0x04,0x7A,0x87,0x08,0x8E,0x22,0x7A,0xB1,\ +0x08,0x7D,0x0F,0x7D,0x4E,0x7E,0x23,0x08,0x66,0xBE,0x20,0x0A,0x40,0x00,0x7E,0xA0,\ +0x01,0x7E,0xB0,0x01,0x12,0x1E,0x3F,0x7F,0x30,0x7F,0x41,0x2D,0x68,0x0E,0x64,0xBE,\ +0x77,0x08,0x86,0x08,0x04,0x7A,0x77,0x08,0x86,0xBE,0x87,0x08,0x96,0x58,0x04,0x7A,\ +0x87,0x08,0x96,0x7E,0xB1,0x08,0x60,0x39,0x04,0xBE,0xB3,0x08,0x67,0x50,0x32,0x14,\ +0x0A,0x0B,0x09,0xA0,0x08,0x16,0x7E,0xB3,0x08,0xC7,0x0A,0x1B,0x6E,0x14,0xFF,0xFF,\ +0x0B,0x14,0xBD,0x81,0x58,0x15,0xBE,0xA0,0x02,0x50,0x04,0x0B,0xA0,0x80,0x0E,0xBE,\ +0x87,0x08,0x88,0x58,0x08,0x7A,0x87,0x08,0x88,0x80,0x02,0x6C,0xAA,0x19,0xA0,0x08,\ +0x16,0x2D,0x96,0x0E,0x94,0x7D,0xB9,0xBE,0xB4,0x00,0x1E,0x58,0x04,0x6D,0xBB,0x80,\ +0x14,0x7D,0x0B,0x7E,0x33,0x08,0xDF,0x7E,0xA0,0x06,0x12,0x43,0x84,0x7E,0xB3,0x08,\ +0xE0,0x1A,0xBB,0x2D,0xB0,0x7D,0x46,0xBE,0x44,0x00,0x00,0x58,0x04,0x6D,0x44,0x9D,\ +0x46,0x7E,0x13,0x08,0x81,0x0A,0x01,0xBD,0x40,0x50,0x04,0x2D,0x40,0x1E,0x44,0x7E,\ +0xB1,0x08,0x0A,0x0B,0x2E,0x04,0x08,0x0A,0x7E,0x09,0xB0,0x0A,0x1B,0xBD,0x41,0x50,\ +0x0D,0x7E,0x20,0x07,0xAC,0x2B,0x2D,0x41,0x1E,0x44,0x1E,0x44,0x1E,0x44,0xBE,0x44,\ +0x00,0x80,0x28,0x0F,0x7E,0x44,0x00,0x80,0xE4,0xBE,0x64,0x00,0x00,0x08,0x04,0x7A,\ +0xB3,0x08,0x6C,0x7A,0x09,0x90,0x7E,0x30,0x80,0x9C,0x39,0x7D,0x06,0x7D,0x29,0x7C,\ +0x79,0x7E,0xA0,0x07,0x12,0x42,0x55,0x6D,0x00,0x12,0x43,0x60,0x7D,0xC0,0x7E,0xB3,\ +0x08,0xB0,0x30,0xE4,0x04,0x6D,0xCC,0x7D,0xBC,0x7E,0xB1,0x08,0x02,0x16,0xB3,0xCA,\ +0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7D,0xF3,0x7D,0xE2,0x7D,0xD1,0x12,0x17,0xBE,0xD0,\ +0xD0,0xDA,0x3B,0x22,0x7E,0xB3,0x08,0x75,0x70,0x18,0x7E,0x73,0x08,0xAD,0x0A,0x37,\ +0x3E,0x34,0x3E,0x34,0x3E,0x34,0x3E,0x34,0x7A,0x37,0x08,0x8A,0x74,0x01,0x7A,0xB3,\ +0x08,0x75,0x7E,0xB3,0x08,0x83,0x60,0x03,0x02,0x1A,0xCF,0xE4,0x7A,0xB3,0x08,0x9B,\ +0x7E,0xB3,0x08,0x76,0x12,0x3E,0xAA,0x7A,0xB3,0x08,0x76,0x7E,0xB3,0x08,0x77,0x12,\ +0x3E,0xAA,0x7A,0xB3,0x08,0x77,0x7E,0xB3,0x08,0x78,0x12,0x3E,0xAA,0x7A,0xB3,0x08,\ +0x78,0x7E,0x37,0x08,0x98,0x1A,0x26,0x1A,0x24,0x7E,0x14,0x00,0x03,0x12,0x32,0xDC,\ +0x7E,0x17,0x08,0x96,0x1A,0x02,0x1A,0x00,0x2F,0x10,0x74,0x02,0x1E,0x34,0x0E,0x24,\ +0x50,0x03,0x4E,0x60,0x80,0x14,0x78,0xF4,0x7A,0x37,0x08,0x98,0x7E,0x37,0x08,0x88,\ +0x7A,0x37,0x08,0x84,0x7E,0x17,0x08,0x88,0x7E,0x73,0x08,0xC7,0x0A,0x37,0x6D,0x22,\ +0x9D,0x23,0xBD,0x21,0x08,0x24,0x74,0x01,0x7A,0xB3,0x08,0x72,0x7E,0x27,0x08,0x86,\ +0xBE,0x24,0x00,0x00,0x58,0x02,0x6D,0x22,0x2D,0x12,0x6D,0x22,0x9D,0x23,0xBD,0x21,\ +0x08,0x0D,0x74,0x02,0x7A,0xB3,0x08,0x72,0x80,0x05,0xE4,0x7A,0xB3,0x08,0x72,0x4D,\ +0x33,0x68,0x12,0x6D,0x22,0x9D,0x23,0xBE,0x27,0x08,0x98,0x08,0x08,0x74,0x01,0x7A,\ +0xB3,0x08,0x9A,0x80,0x05,0xE4,0x7A,0xB3,0x08,0x9A,0x7E,0x27,0x08,0x8A,0xBE,0x24,\ +0x00,0x00,0x08,0x27,0xBE,0x24,0x0F,0xF0,0x68,0x06,0x1B,0x24,0x7A,0x27,0x08,0x8A,\ +0x7E,0xB3,0x08,0x9A,0x60,0x15,0xE4,0x7A,0xB3,0x09,0x3E,0xE4,0x7A,0xB3,0x09,0x3C,\ +0xE4,0x7A,0xB3,0x09,0x42,0x74,0x01,0x7A,0xB3,0x09,0x3F,0x4D,0x33,0x68,0x61,0x7E,\ +0x27,0x08,0x86,0xBE,0x24,0x80,0x01,0x68,0x57,0x7E,0xB3,0x08,0xB0,0x30,0xE2,0x50,\ +0x6E,0x34,0xFF,0xFF,0x0B,0x34,0xBE,0x37,0x08,0x86,0x08,0x1A,0x7E,0xB3,0x08,0xA4,\ +0x04,0x7A,0xB3,0x08,0xA4,0x7E,0x73,0x08,0xA4,0xBE,0x70,0x08,0x40,0x0D,0x74,0x01,\ +0x7A,0xB3,0x08,0xA5,0x80,0x05,0xE4,0x7A,0xB3,0x08,0xA4,0x7E,0xB3,0x08,0xA5,0x60,\ +0x1F,0xE4,0x7A,0xB3,0x08,0xA5,0xE4,0x7A,0xB3,0x08,0xA4,0xE4,0x7A,0xB3,0x09,0x3E,\ +0xE4,0x7A,0xB3,0x09,0x3C,0xE4,0x7A,0xB3,0x09,0x42,0x74,0x01,0x7A,0xB3,0x09,0x3F,\ +0x7E,0xB3,0x08,0x72,0x60,0x2D,0x7E,0x34,0x00,0x50,0x7A,0x37,0x08,0x5C,0x7E,0x73,\ +0x08,0x72,0xBE,0x70,0x01,0x28,0x15,0x7E,0x34,0x00,0x14,0x7A,0x37,0x08,0x5E,0x7E,\ +0xB3,0x08,0x73,0x12,0x3E,0xB1,0x7A,0xB3,0x08,0x73,0x80,0x0C,0xE4,0x7A,0xB3,0x08,\ +0x73,0x80,0x05,0xE4,0x7A,0xB3,0x08,0x73,0x7E,0x37,0x08,0x5C,0xBE,0x34,0x00,0x00,\ +0x08,0x2D,0x7E,0xB3,0x09,0x3F,0x60,0x0E,0xBE,0x34,0x00,0x10,0x08,0x08,0x7E,0x34,\ +0x00,0x10,0x7A,0x37,0x08,0x5C,0x7E,0x37,0x08,0x5C,0x1B,0x34,0x7A,0x37,0x08,0x5C,\ +0x7E,0x37,0x08,0x5C,0xBE,0x34,0x00,0x00,0x08,0x05,0xE4,0x7A,0xB3,0x08,0x6C,0x7E,\ +0x37,0x08,0x5E,0xBE,0x34,0x00,0x00,0x08,0x06,0x1B,0x34,0x7A,0x37,0x08,0x5E,0x7E,\ +0xB3,0x08,0x61,0x70,0x07,0xE4,0x7A,0xB3,0x08,0x7B,0x80,0x0B,0x7E,0xB3,0x08,0x7B,\ +0x12,0x3E,0xB1,0x7A,0xB3,0x08,0x7B,0x12,0x3E,0x3A,0x12,0x07,0x70,0x7E,0xB3,0x08,\ +0x6B,0x70,0x23,0x7E,0xB3,0x08,0x83,0x70,0x0B,0x7E,0xB3,0x08,0x6C,0x12,0x3E,0xB1,\ +0x7A,0xB3,0x08,0x6C,0x7E,0xB3,0x08,0x68,0x12,0x3E,0xB1,0x7A,0xB3,0x08,0x68,0xE4,\ +0x7A,0xB3,0x08,0x7C,0x80,0x0A,0xE4,0x7A,0xB3,0x08,0x6C,0xE4,0x7A,0xB3,0x08,0x68,\ +0x7E,0xB3,0x08,0xA6,0x30,0xE5,0x0F,0x7E,0x73,0x08,0xCC,0xBE,0x73,0x08,0x7C,0x38,\ +0x05,0xE4,0x7A,0xB3,0x08,0x60,0xE4,0x7A,0xB3,0x08,0x8C,0xE4,0x7A,0xB3,0x08,0x8D,\ +0x7E,0x73,0x08,0x60,0xBE,0x70,0x00,0x28,0x05,0x12,0x1E,0x30,0x80,0x06,0x74,0x06,\ +0x7A,0xB3,0x08,0x74,0x12,0x32,0x05,0x12,0x29,0x8B,0x12,0x15,0xBE,0x12,0x3B,0xF9,\ +0x7A,0xB3,0x08,0x61,0xE4,0x7A,0xB3,0x08,0x6A,0x7E,0x73,0x08,0x6C,0xBE,0x70,0x0A,\ +0x28,0x34,0x7E,0xB3,0x08,0x83,0x70,0x22,0x7E,0xB3,0x08,0x69,0xBE,0xB0,0x00,0x28,\ +0x07,0x14,0x7A,0xB3,0x08,0x69,0x80,0x12,0x7E,0x37,0x08,0x58,0xBE,0x34,0x00,0x0C,\ +0x08,0x08,0x7E,0x73,0x08,0xE5,0x7A,0x73,0x08,0x69,0x7E,0xB3,0x08,0x69,0x70,0x06,\ +0x74,0x01,0x7A,0xB3,0x08,0x6A,0x22,0x7E,0x74,0x0B,0x36,0xE4,0xA5,0xFF,0xA5,0xF8,\ +0x7E,0x10,0xFF,0xA5,0x09,0xBE,0x10,0x05,0x68,0x0F,0x09,0xB0,0x09,0xF3,0x60,0xF3,\ +0xBE,0xB0,0x05,0x68,0xEE,0x7C,0x71,0x80,0xEA,0xA5,0x0F,0xBE,0x73,0x08,0x60,0x50,\ +0x04,0x7E,0x73,0x08,0x60,0x6C,0x11,0xBC,0x17,0x50,0x75,0x09,0xB0,0x09,0xF3,0x60,\ +0x5B,0xBE,0xB0,0x05,0x68,0x56,0xA5,0xE9,0xD2,0xD3,0x12,0x2F,0xA8,0x7F,0x40,0xC2,\ +0xD3,0x7E,0xA4,0x08,0x22,0x6C,0x22,0xBE,0x23,0x08,0x60,0x50,0x1F,0xD2,0xD3,0x0B,\ +0xA8,0x00,0x49,0x1A,0x00,0x02,0x2E,0xA4,0x00,0x06,0x7F,0x14,0x12,0x42,0xF8,0x7D,\ +0x53,0xC2,0xD3,0x1B,0x78,0x50,0x0B,0x75,0xA5,0x0A,0x80,0xDB,0xBC,0x27,0x50,0x2C,\ +0x09,0x30,0x09,0xF3,0xBE,0x30,0x01,0x78,0x06,0x7E,0x94,0x1F,0x40,0x80,0x04,0x7E,\ +0x94,0x20,0x00,0x1B,0x78,0x90,0x0B,0x75,0xA5,0x0A,0x80,0xE0,0xA5,0xEF,0x60,0x0C,\ +0x7E,0x94,0x20,0x00,0x1B,0x78,0x90,0x0B,0x75,0x14,0x80,0xF2,0xA5,0x09,0x80,0x87,\ +0x22,0x7E,0xB3,0x08,0xC3,0x0A,0x1B,0x0A,0x0C,0xBD,0x41,0x08,0x10,0x09,0xB0,0x09,\ +0xF3,0xBE,0xB0,0x01,0x78,0x05,0x12,0x12,0x75,0x80,0x0C,0xD3,0x22,0x7E,0xB0,0x01,\ +0x19,0xB0,0x09,0xF8,0x12,0x13,0x1E,0xC3,0x22,0x90,0x0B,0x8A,0x7E,0x30,0x05,0x12,\ +0x43,0x92,0x6D,0x55,0x7A,0x55,0x61,0x6C,0xCC,0x7A,0xC1,0x63,0x0A,0x0C,0x2E,0x04,\ +0x09,0xF3,0x7E,0x09,0xB0,0xBE,0xB0,0x00,0x7E,0xA1,0xD1,0xBE,0xB0,0x05,0x4E,0xA1,\ +0xD1,0x30,0xF1,0x03,0x02,0x1D,0x7C,0x7C,0x3C,0x3E,0x30,0x3E,0x30,0x0A,0x0C,0x2E,\ +0x04,0x0B,0xEE,0x7E,0x09,0x20,0xBE,0x23,0x08,0x60,0x40,0x03,0x02,0x1D,0x7C,0x7A,\ +0x21,0x60,0x0A,0x93,0x7A,0x95,0x64,0x0A,0x02,0x2E,0x04,0x0B,0x8A,0x7E,0xB0,0x02,\ +0x7A,0x09,0xB0,0x7E,0xB0,0x03,0xAC,0xB2,0x7D,0x85,0x3E,0x84,0x49,0xE8,0x08,0x22,\ +0x49,0xF8,0x08,0x24,0x49,0xD8,0x08,0x26,0x1E,0x84,0x49,0x09,0x09,0x44,0x49,0x19,\ +0x09,0x46,0x7A,0x0D,0x08,0x7C,0xBC,0x12,0x2F,0xA8,0x7D,0x2E,0x7D,0x3F,0x12,0x42,\ +0xF8,0x7D,0x03,0x7D,0x40,0x7E,0x1D,0x08,0x0A,0x54,0x9D,0x45,0x0A,0x55,0x9D,0x45,\ +0x0A,0x56,0x9D,0x45,0x0A,0x57,0x9D,0x45,0x7E,0xC1,0x63,0x7E,0x24,0x00,0xFA,0x12,\ +0x43,0x67,0xBE,0x05,0x61,0x28,0x03,0x7A,0x05,0x61,0x0A,0x1C,0x3E,0x14,0x2E,0x14,\ +0x09,0xE4,0x0B,0x18,0x20,0xBE,0x04,0x00,0x04,0x50,0x0A,0xBE,0x24,0x7D,0x00,0x50,\ +0x06,0x0B,0x24,0x80,0x02,0x6D,0x22,0x1B,0x18,0x20,0x7E,0x1D,0x08,0x19,0x69,0x09,\ +0x47,0x19,0x59,0x09,0x46,0x19,0x49,0x09,0x45,0x19,0x19,0x09,0x44,0x12,0x1C,0x51,\ +0x7E,0xC1,0x63,0x7E,0xB1,0x60,0x7E,0x95,0x64,0x50,0x11,0x7E,0x00,0x00,0x19,0x09,\ +0x09,0x44,0x0A,0x8B,0x2E,0x84,0x0B,0x8A,0xE4,0x7A,0x89,0xB0,0x0B,0xC0,0xBE,0xC0,\ +0x05,0x68,0x03,0x02,0x1C,0x89,0x7E,0x05,0x61,0x7E,0x30,0x07,0x75,0xF0,0x82,0x12,\ +0x43,0x84,0x7E,0x24,0x00,0xFA,0x12,0x43,0x67,0xBE,0x13,0x08,0x74,0x28,0x06,0x7A,\ +0x13,0x08,0x74,0x80,0x13,0x7E,0x43,0x08,0x74,0x7E,0x50,0x03,0xAC,0x45,0x2D,0x02,\ +0x1E,0x04,0x1E,0x04,0x7A,0x13,0x08,0x74,0x7E,0x03,0x08,0x74,0xBE,0x00,0x0A,0x28,\ +0x09,0x90,0x09,0xE4,0x7E,0x30,0x0A,0x12,0x43,0x92,0x22,0x7E,0x24,0x0B,0x8A,0x7E,\ +0x34,0x08,0x22,0x7E,0xB3,0x08,0x60,0x60,0x25,0xA5,0xFB,0x49,0xE3,0x00,0x00,0x49,\ +0xF3,0x00,0x02,0x49,0xD3,0x00,0x04,0x0B,0x36,0x0B,0x35,0x7E,0x29,0xB0,0x0B,0x24,\ +0xBE,0xB0,0x02,0x68,0x06,0x7E,0xC0,0xFF,0x12,0x12,0x75,0xA5,0xDB,0xDD,0x22,0x75,\ +0xD0,0x00,0x12,0x1B,0xA7,0x90,0x0B,0xEE,0x7E,0x30,0x05,0x7E,0xB0,0xFF,0x12,0x43,\ +0x93,0x7C,0xB7,0x7E,0x34,0x0B,0x36,0x7E,0x24,0x0B,0xEE,0xCA,0x3B,0xC0,0xD0,0x75,\ +0xD0,0x00,0x12,0x36,0xE7,0xD0,0xD0,0xDA,0x3B,0x12,0x1C,0x79,0x12,0x1D,0xCB,0x22,\ +0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,0x1D,0xFF,0xD0,0xD0,0xDA,0x3B,0x22,0x0A,\ +0x8A,0x0A,0x9B,0x3E,0x84,0x3E,0x94,0x7E,0xC4,0x20,0x00,0x7E,0xA4,0x20,0x00,0x7E,\ +0xB4,0xE0,0x00,0x9F,0x11,0x7C,0x32,0xA5,0xEB,0x60,0x2A,0x0B,0x48,0x50,0x0B,0x08,\ +0x60,0x9D,0x56,0x2D,0x49,0x2D,0x08,0xBD,0x5C,0x58,0x06,0x7D,0xAC,0x7D,0xC5,0x80,\ +0x06,0xBD,0x5A,0x58,0x02,0x7D,0xA5,0xBD,0x5B,0x08,0x02,0x7D,0xB5,0x7D,0x75,0x1A,\ +0x6E,0x1A,0x6C,0x2F,0x13,0xA5,0xDB,0xD3,0x0A,0x12,0x6D,0x00,0x12,0x3E,0x17,0x7D,\ +0x2C,0x7F,0x05,0x22,0x7E,0x03,0x08,0xA7,0x7E,0x10,0x03,0xAC,0x01,0x1E,0x04,0x1E,\ +0x04,0x7E,0xB3,0x08,0xB0,0x30,0xE7,0x02,0x6D,0x00,0x7A,0x05,0x0C,0x75,0x0B,0x00,\ +0x02,0x1F,0x44,0x7E,0x71,0x08,0x7E,0x14,0x03,0xAE,0x7D,0x2D,0x7E,0x29,0xB0,0x23,\ +0x7E,0xA1,0x0A,0xA4,0x2D,0x5E,0x0B,0x58,0x00,0x1B,0x18,0x00,0x0B,0x15,0x0B,0x24,\ +0xA5,0xDF,0xE9,0x7D,0x0F,0x7E,0x44,0x03,0xAE,0x7E,0x21,0x08,0x7E,0xA3,0x08,0x95,\ +0x7E,0xB0,0x01,0x12,0x1E,0x3F,0xBE,0x34,0xFF,0xE2,0x58,0x06,0x2D,0x13,0x0E,0x14,\ +0x80,0x10,0xBE,0x34,0x00,0x1E,0x58,0x04,0x7D,0x13,0x80,0x06,0x7D,0x13,0x2D,0x12,\ +0x0E,0x14,0x7E,0x05,0x0C,0xBE,0x04,0x00,0x00,0x68,0x17,0x6D,0x00,0x9E,0x05,0x0C,\ +0xBD,0x10,0x58,0x04,0x7D,0x10,0x80,0x0C,0xBE,0x15,0x0C,0x08,0x07,0x7E,0x15,0x0C,\ +0x80,0x02,0x7D,0x13,0x7D,0x2F,0xE5,0x08,0x0B,0x28,0x40,0x2D,0x41,0x1B,0x28,0x40,\ +0x2E,0x25,0x16,0x14,0x70,0xF2,0x0B,0xF5,0xE5,0x0B,0x04,0xBE,0xB1,0x0A,0x50,0x02,\ +0x0B,0xE5,0x05,0x0B,0xE5,0x0B,0xBE,0xB1,0x09,0x68,0x03,0x02,0x1E,0xB3,0x22,0x0A,\ +0xCB,0xE5,0x08,0xF5,0x0B,0x80,0x1D,0x7E,0xE9,0xB0,0x23,0x7E,0xA1,0x0A,0xA4,0x7D,\ +0x95,0x2D,0x9D,0x0B,0xE4,0x7D,0x8F,0x7E,0x81,0x0A,0x7D,0x1C,0x12,0x15,0xCD,0x2E,\ +0xF5,0x16,0x15,0x0B,0xE5,0x0B,0x70,0xDF,0x22,0x7A,0xB1,0x0F,0x7A,0x35,0x12,0x7A,\ +0x25,0x14,0x7A,0x31,0x08,0x7A,0x21,0x09,0x7A,0x13,0x08,0x95,0x0A,0x91,0x3E,0x94,\ +0x7A,0x95,0x16,0x60,0x03,0x02,0x20,0x00,0x7E,0x54,0x04,0x1A,0x7A,0x55,0x10,0x7E,\ +0xB3,0x08,0x66,0xF5,0x0A,0x7E,0xB3,0x09,0x3F,0x60,0x2C,0x7E,0xB3,0x09,0x42,0x70,\ +0x26,0x7E,0xB3,0x09,0x3B,0x70,0x20,0x7D,0xF3,0x7D,0xE2,0x7E,0xD5,0x10,0x7E,0xB3,\ +0x09,0x3F,0x14,0x12,0x1F,0x4F,0x7E,0xB3,0x08,0x83,0x70,0x0B,0x7E,0xB3,0x09,0x3F,\ +0x04,0x60,0x04,0x7A,0xB3,0x09,0x3F,0x7E,0xB3,0x08,0x6A,0x60,0x21,0x7E,0xF5,0x12,\ +0x7E,0xE5,0x14,0x7E,0xD5,0x10,0x7E,0x57,0x08,0x58,0x12,0x1F,0x4F,0x7E,0xB3,0x08,\ +0x83,0x70,0x0B,0x7E,0x57,0x08,0x58,0x04,0x60,0x04,0x7A,0x57,0x08,0x58,0x80,0x2A,\ +0x7E,0x84,0x03,0xDA,0xB4,0x02,0x09,0x7E,0xB3,0x08,0x67,0x23,0x0A,0x5B,0x2D,0x85,\ +0x7A,0x85,0x10,0x75,0x0A,0x01,0x7E,0x57,0x08,0x58,0xBE,0x54,0x00,0x0C,0x18,0x0A,\ +0x7D,0xF3,0x7D,0xE2,0x7E,0xD5,0x10,0x12,0x1F,0x4F,0x7E,0x57,0x08,0x58,0xBE,0x54,\ +0x00,0x0C,0x18,0x02,0xE4,0x22,0x7E,0xB3,0x08,0xA6,0x30,0xE7,0x0C,0x7E,0xF5,0x12,\ +0x7E,0xE5,0x10,0x7E,0xD5,0x14,0x12,0x1E,0x94,0x7E,0xB0,0x01,0x22,0x7A,0x55,0x60,\ +0x7A,0x0D,0x62,0x7A,0x1D,0x66,0x15,0x62,0xE5,0x62,0x70,0x05,0xC2,0xD5,0x6D,0x44,\ +0x22,0x7D,0x04,0x7E,0x15,0x66,0x12,0x42,0xBE,0x75,0xF0,0x88,0x12,0x42,0x7B,0x7F,\ +0x10,0x7E,0x31,0x62,0x0A,0x13,0x6D,0x00,0x2F,0x10,0x12,0x3E,0x17,0x7E,0x15,0x66,\ +0x1E,0x14,0x7A,0x15,0x6A,0x6D,0x00,0x9F,0x10,0x7D,0x63,0x7E,0x31,0x64,0x1A,0x13,\ +0x2E,0x14,0x01,0x00,0x7D,0x03,0x12,0x42,0xBE,0x75,0xF0,0x88,0x12,0x42,0x7B,0x7D,\ +0x71,0x7E,0xB1,0x65,0x60,0x48,0x6C,0xAA,0x7E,0x05,0x6A,0x9D,0x05,0x6D,0x22,0x9D,\ +0x20,0xBD,0x60,0x18,0x06,0xBD,0x62,0x48,0x09,0x80,0x33,0x7E,0x15,0x6A,0x9D,0x16,\ +0x80,0x05,0x7E,0x15,0x6A,0x2D,0x16,0x9D,0x00,0x12,0x43,0x60,0x7C,0x21,0x7E,0x61,\ +0x65,0x9C,0x62,0x7D,0x07,0x7D,0x26,0x7C,0x32,0x7C,0x76,0x9C,0xAA,0x12,0x42,0x55,\ +0x7F,0x10,0x7E,0x31,0x65,0x0A,0x13,0x6D,0x00,0x12,0x3E,0x17,0x7D,0x73,0xC2,0xD5,\ +0x2E,0x75,0x6A,0x7E,0xB1,0x68,0x60,0x08,0x0A,0x5B,0xBD,0x75,0x58,0x02,0xD2,0xD5,\ +0x7E,0xB1,0x69,0x60,0x0D,0x0A,0x5B,0x7E,0x05,0x66,0x9D,0x05,0xBD,0x70,0x08,0x02,\ +0xD2,0xD5,0x7E,0x11,0x63,0x1A,0x01,0x2D,0x07,0x9D,0x11,0x12,0x43,0x60,0x7E,0x25,\ +0x60,0x1B,0x24,0x12,0x43,0x67,0x7D,0x40,0x22,0x7F,0x40,0x7F,0x51,0x7D,0x13,0x6D,\ +0x00,0x7F,0xE0,0x7E,0x30,0x05,0x12,0x43,0x92,0x9C,0x77,0x9D,0x22,0x09,0x62,0x09,\ +0xF3,0xBE,0x60,0x02,0x50,0x03,0x02,0x22,0x42,0x09,0xB2,0x0A,0x24,0x30,0xE7,0x03,\ +0x02,0x22,0x42,0x0A,0xCB,0x7D,0xDC,0x2D,0xDB,0xA5,0xBE,0x05,0x09,0x7E,0x60,0x00,\ +0xE4,0x7A,0xD9,0xB0,0x80,0x34,0x74,0x01,0x7A,0xD9,0xB0,0xA5,0xBE,0x03,0x22,0x7E,\ +0x03,0x08,0xC0,0xA5,0x18,0xBE,0x00,0x02,0x28,0x03,0x7E,0x00,0x02,0x09,0x12,0x09,\ +0xEE,0xBC,0x10,0x50,0x07,0x74,0x03,0x7A,0xD9,0xB0,0x80,0x0E,0x7E,0x60,0x04,0x80,\ +0x09,0xA5,0xBE,0x04,0x05,0x74,0x03,0x7A,0xD9,0xB0,0xBE,0x60,0x04,0x50,0x0C,0xBE,\ +0x60,0x02,0x40,0x07,0x7C,0xB5,0x12,0x2F,0xFC,0x80,0x0C,0x3E,0x24,0x49,0x02,0x09,\ +0xA8,0x49,0x12,0x09,0xB2,0x1E,0x24,0x7D,0x40,0x7E,0x57,0x0A,0x07,0xD2,0xD3,0x7E,\ +0x03,0x08,0x63,0x7E,0x13,0x08,0xB1,0x7E,0x23,0x08,0xB3,0x7E,0x33,0x08,0xB5,0x7E,\ +0x27,0x08,0xB7,0x7E,0x63,0x08,0xBB,0x7E,0x73,0x08,0xBC,0x12,0x20,0x4D,0xC2,0xD3,\ +0x7D,0x0C,0x3E,0x04,0x2D,0x0A,0x1B,0x08,0x40,0x30,0xD5,0x07,0x7E,0x60,0x00,0xE4,\ +0x7A,0xD9,0xB0,0x7D,0x41,0x7E,0x57,0x0A,0x09,0xD2,0xD3,0x7E,0x03,0x08,0x64,0x7E,\ +0x13,0x08,0xB2,0x7E,0x23,0x08,0xB4,0x7E,0x33,0x08,0xB6,0x7E,0x27,0x08,0xB9,0x7E,\ +0x63,0x08,0xBD,0x7E,0x73,0x08,0xBE,0x12,0x20,0x4D,0xC2,0xD3,0x7D,0x0C,0x3E,0x04,\ +0x2D,0x09,0x1B,0x08,0x40,0x30,0xD5,0x07,0x7E,0x60,0x00,0xE4,0x7A,0xD9,0xB0,0x7E,\ +0xD9,0xB0,0x60,0x04,0xA5,0x0F,0x80,0x0A,0xE4,0x19,0xBC,0x0A,0x29,0x14,0x19,0xB2,\ +0x0A,0x24,0x19,0x62,0x09,0xF3,0x0B,0x24,0xBE,0x24,0x00,0x05,0x68,0x03,0x02,0x21,\ +0x3D,0x6C,0x66,0x22,0xE5,0x31,0x25,0x32,0xBE,0xB0,0xF8,0x68,0x39,0xBE,0xB0,0xF9,\ +0x68,0x3D,0xBE,0xB0,0xFC,0x68,0x15,0xBE,0xB0,0xF1,0x68,0x1E,0x60,0x36,0x04,0x60,\ +0x02,0xC3,0x22,0xA5,0xE8,0xB4,0xEF,0x02,0xF5,0x4D,0xD3,0x22,0xA5,0xB8,0x80,0x08,\ +0x7E,0xB3,0x02,0x08,0x7A,0xB3,0x01,0xFC,0xD3,0x22,0xA5,0xE8,0x30,0xE3,0x02,0xD2,\ +0x12,0x12,0x22,0xF0,0xD3,0x22,0x12,0x2D,0xB8,0x7A,0xB3,0x01,0xF8,0xD3,0x22,0x12,\ +0x38,0x09,0xD3,0x22,0x90,0x22,0xC5,0x7E,0xB3,0x02,0x0A,0x04,0x7A,0xB3,0x02,0x0A,\ +0x93,0x7C,0xA0,0xB5,0xF0,0x09,0x7E,0xB3,0x02,0x0A,0xB4,0x08,0x07,0xD2,0x2B,0xE4,\ +0x7A,0xB3,0x02,0x0A,0xD3,0x22,0x53,0x54,0x58,0x5F,0x46,0x57,0x55,0x50,0x7E,0xB3,\ +0x0E,0xA5,0x0A,0x5B,0x2E,0x54,0x0E,0xAA,0x7E,0x59,0xB0,0x7A,0xB3,0x01,0x00,0x22,\ +0x7A,0xB3,0x01,0x01,0x22,0x7E,0x57,0x01,0x07,0x0B,0x54,0x7A,0x57,0x01,0x07,0x22,\ +0x7E,0x73,0x0E,0xAB,0x0A,0x37,0x6D,0x22,0x7A,0xB3,0x01,0xF1,0xF5,0x4C,0x20,0xE3,\ +0x05,0x12,0x0D,0x1C,0xE5,0x4C,0x54,0x03,0xB4,0x01,0x0D,0x2E,0x34,0x0E,0xA3,0x0B,\ +0x38,0x20,0x49,0x33,0x00,0x02,0x80,0x1C,0xB4,0x02,0x0B,0x2E,0x34,0x0E,0xA2,0x7E,\ +0x39,0x70,0x0A,0x37,0x80,0x0E,0x7E,0x10,0xFF,0x7E,0x14,0x3E,0xE8,0x0B,0x0A,0x20,\ +0x69,0x30,0x00,0x02,0x7A,0x1F,0x01,0x0C,0x22,0x7E,0x54,0x01,0x04,0x0B,0x58,0x20,\ +0x09,0x75,0x00,0x02,0xA5,0xEC,0xA5,0xFE,0x5E,0x60,0x0F,0xC4,0x54,0x0F,0xA5,0xFC,\ +0x22,0x7E,0xB3,0x01,0x02,0x13,0x22,0x7E,0xB3,0x01,0x02,0xA2,0xE1,0x22,0x7E,0xB3,\ +0x02,0x09,0x7A,0xB3,0x01,0x03,0x22,0x7E,0xB3,0x01,0x03,0x22,0x7A,0xB3,0x01,0x0A,\ +0x22,0x7A,0xB3,0x01,0xF2,0x22,0x7E,0xB3,0x01,0xFF,0x22,0x7E,0x34,0x01,0x00,0x7E,\ +0x30,0x80,0x12,0x00,0x6D,0xE5,0x45,0x12,0x22,0xE0,0x12,0x23,0x26,0x74,0x06,0x7A,\ +0xB3,0x01,0xF4,0x74,0x00,0x7A,0xB3,0x01,0xFE,0x22,0x12,0x22,0xCE,0x12,0x23,0x5E,\ +0x75,0x4C,0x08,0x7E,0x55,0x48,0x7E,0x15,0x4A,0xA5,0xCA,0x7A,0x17,0x01,0x05,0xC4,\ +0x4C,0xBA,0xC4,0x7A,0xB3,0x01,0x04,0x74,0x04,0x7A,0xB3,0x01,0x0B,0x7E,0xB3,0x02,\ +0x40,0x7A,0xB3,0x01,0x3F,0x74,0x02,0x30,0x0A,0x02,0x74,0x05,0x7A,0xB3,0x01,0xF0,\ +0xE5,0x4C,0x7A,0xB3,0x01,0xF1,0x7E,0x55,0x3E,0x7A,0x57,0x01,0xF5,0xE5,0x40,0x24,\ +0x60,0x7A,0xB3,0x01,0xF7,0x74,0x01,0x7A,0xB3,0x01,0xFC,0x30,0x11,0x06,0x74,0xEF,\ +0x7A,0xB3,0x01,0xFF,0x22,0xE5,0x31,0xC3,0x94,0x10,0x40,0x1F,0x94,0x03,0x50,0x1B,\ +0x7E,0x34,0x0E,0x5E,0x7E,0x24,0x01,0x10,0x7E,0x20,0x04,0x7E,0x33,0x02,0x40,0xAC,\ +0x23,0x0B,0x31,0x12,0x3C,0x52,0xC2,0x24,0x12,0x24,0x1C,0x22,0xD3,0x30,0x17,0x01,\ +0xB3,0x20,0x83,0x04,0x92,0x91,0x80,0x02,0x92,0x90,0x22,0xC3,0x30,0x17,0x01,0xB3,\ +0x20,0x83,0x04,0x92,0x91,0x80,0x02,0x92,0x90,0x22,0x7E,0x33,0x08,0xDA,0x0A,0x13,\ +0x7E,0x80,0x0C,0xAC,0x8B,0x2E,0x44,0x09,0x23,0x0B,0x48,0x60,0x0B,0x38,0x70,0x7D,\ +0x06,0x9D,0x07,0x6C,0x44,0x0B,0x48,0x60,0x0B,0x38,0x70,0x1B,0x48,0x70,0x9D,0x67,\ +0x9D,0x60,0xBE,0x64,0x00,0x00,0x58,0x06,0x6D,0x55,0x9D,0x56,0x7D,0x65,0xBD,0x61,\ +0x08,0x03,0x7E,0x40,0x01,0x0B,0x45,0x0B,0x35,0xA5,0xDD,0xD9,0x7E,0x07,0x08,0xF3,\ +0xBE,0x04,0x00,0x00,0x68,0x1D,0x7E,0xB3,0x09,0x3C,0x70,0x04,0x7A,0xB3,0x09,0x3B,\ +0x4C,0x44,0x68,0x0F,0x7E,0xB0,0x01,0x7A,0xB3,0x09,0x43,0x2E,0xB3,0x09,0x3B,0x7A,\ +0xB3,0x09,0x3B,0x7C,0xB4,0x22,0x7C,0xEB,0x7E,0x47,0x08,0xF3,0x4D,0x44,0x68,0x15,\ +0x7E,0xB3,0x09,0x3E,0x70,0x0F,0x7E,0xB3,0x08,0x6C,0xBE,0xB0,0x05,0x50,0x06,0x74,\ +0x01,0x7A,0xB3,0x09,0x43,0x7E,0xB3,0x09,0x43,0x60,0x0A,0xE4,0x7A,0xB3,0x09,0x43,\ +0x7A,0xB3,0x09,0x3C,0x22,0x7E,0xB3,0x09,0x3C,0x70,0x09,0x90,0x09,0x0B,0x7E,0x30,\ +0x18,0x12,0x43,0x92,0x7E,0x14,0x09,0x0B,0x7D,0x23,0x7C,0x1E,0x0B,0x28,0x40,0x0E,\ +0x44,0x0B,0x18,0x50,0x2D,0x54,0x1B,0x18,0x50,0x0B,0x15,0x0B,0x25,0xA5,0xD9,0xEC,\ +0x7E,0xB3,0x09,0x3C,0x04,0x7A,0xB3,0x09,0x3C,0xBE,0xB0,0x10,0x78,0x54,0xE4,0x7A,\ +0xB3,0x09,0x3C,0x7E,0xC0,0x01,0x7E,0xB3,0x09,0x3B,0x70,0x20,0x7E,0xC3,0x09,0x3E,\ +0x7E,0xB3,0x08,0x6C,0xBE,0xB0,0x10,0x40,0x0C,0x7E,0xB3,0x08,0x9A,0x70,0x06,0x6C,\ +0xCC,0x7A,0xC3,0x09,0x3F,0x7E,0xB0,0x01,0x7A,0xB3,0x09,0x3E,0x7E,0x14,0x09,0x0B,\ +0x7E,0x24,0x08,0xF3,0x7C,0x1E,0x0B,0x18,0x40,0x1E,0x44,0x1E,0x44,0x1E,0x44,0x1B,\ +0x18,0x40,0x0B,0x15,0x7C,0xBC,0x70,0x05,0x1B,0x28,0x40,0x0B,0x25,0xA5,0xD9,0xE6,\ +0x80,0x0D,0x7E,0xB3,0x09,0x3E,0x60,0x06,0x7E,0xB3,0x09,0x3D,0x60,0x01,0x22,0x7E,\ +0x03,0x08,0xD9,0x0A,0x90,0x6C,0xDD,0xBE,0x00,0x00,0x68,0x43,0x7E,0xC3,0x09,0x3D,\ +0x7E,0x14,0x09,0x0B,0xBE,0xC0,0x00,0x78,0x02,0x7D,0x13,0x7E,0x24,0x08,0xF3,0x7C,\ +0x1E,0x0B,0x18,0x40,0x0B,0x28,0x50,0x9D,0x45,0xBD,0x49,0x08,0x05,0x7E,0xD0,0x01,\ +0x80,0x16,0x6D,0x55,0x9D,0x59,0xBD,0x45,0x58,0x0E,0xE4,0x7A,0xB3,0x09,0x3E,0x7A,\ +0xB3,0x09,0x3C,0x04,0x7A,0xB3,0x09,0x3F,0x0B,0x25,0x0B,0x15,0xA5,0xD9,0xD2,0x7C,\ +0xBD,0x60,0x1B,0x7E,0xB3,0x09,0x3F,0x70,0x15,0xE4,0x7A,0xB3,0x09,0x41,0x7E,0xB3,\ +0x09,0x42,0x7E,0xA0,0xFF,0x12,0x3E,0x23,0x7A,0xB3,0x09,0x42,0x80,0x32,0xE4,0x7A,\ +0xB3,0x09,0x42,0x7E,0xB3,0x09,0x41,0x7E,0xA0,0xFF,0x12,0x3E,0x23,0x7A,0xB3,0x09,\ +0x41,0xBE,0xB0,0x0A,0x28,0x1A,0x7E,0xB3,0x09,0x40,0x60,0x14,0xE4,0x7A,0xB3,0x09,\ +0x41,0x7D,0x83,0x7E,0x94,0x08,0xF3,0x7C,0x8E,0x7E,0x14,0x00,0x64,0x12,0x15,0xCD,\ +0x22,0xA2,0x93,0xB3,0xE4,0x34,0x00,0x30,0x83,0x06,0xE5,0x80,0x54,0xC0,0x23,0x23,\ +0x90,0x43,0xE9,0x93,0x54,0x7F,0xF5,0xF1,0x75,0xF4,0x04,0x74,0xCF,0x43,0xA6,0x30,\ +0x52,0xA7,0x52,0xA2,0x52,0xA4,0xE4,0xF5,0x32,0x7A,0xB3,0x02,0x0A,0x7A,0xB3,0x02,\ +0x45,0x75,0x31,0x10,0xC2,0x02,0xF5,0xF3,0xF5,0xF2,0x74,0x01,0xF5,0x45,0x12,0x23,\ +0x7B,0x75,0xC0,0xFB,0xD2,0xEA,0x22,0x85,0xF2,0x59,0xE5,0x59,0x30,0xE5,0x03,0x12,\ +0x26,0xEE,0xE5,0x59,0x30,0xE4,0x06,0x12,0x26,0xC3,0xA9,0xD0,0xF3,0xE5,0x59,0x30,\ +0xE3,0x14,0x20,0x00,0x0C,0x20,0x01,0x02,0x80,0x0C,0xC2,0x01,0xA9,0xD2,0xF4,0x80,\ +0x05,0xC2,0x00,0x12,0x26,0xC3,0xE5,0x59,0x30,0xE6,0x1E,0x75,0x32,0x00,0x30,0x00,\ +0x03,0x12,0x26,0xC3,0x20,0x11,0x03,0x12,0x23,0xF5,0xE5,0x31,0xB4,0x40,0x03,0x12,\ +0x27,0x78,0x12,0x26,0xEE,0xD2,0x01,0xC2,0x00,0xE5,0x59,0x30,0xE7,0x0C,0x75,0x32,\ +0x00,0xD2,0x00,0xC2,0x01,0xD2,0x02,0xA9,0xD0,0xF3,0xE5,0x59,0xF4,0xF5,0xF2,0x75,\ +0xC0,0xFB,0x22,0x30,0x02,0x05,0xC2,0x02,0x85,0xF5,0x31,0xE5,0xF4,0xC4,0x54,0x0F,\ +0x60,0x1B,0xF5,0x5A,0x7E,0x01,0xF5,0x12,0x22,0x54,0x40,0x0C,0x7E,0x60,0x01,0x7E,\ +0x71,0x31,0x2E,0x71,0x32,0x7A,0x39,0x00,0x05,0x32,0xD5,0x5A,0xE7,0x22,0x7E,0x00,\ +0x01,0xE5,0x31,0xBE,0xB0,0xFF,0x68,0x17,0x25,0x32,0xA5,0xF9,0x7E,0x20,0x08,0x7E,\ +0x09,0xB0,0xF5,0xF5,0x0B,0x04,0x05,0x32,0xA5,0xDA,0xF4,0xA9,0xD1,0xF3,0x22,0x7E,\ +0xB3,0x01,0xFF,0x7A,0xB1,0xF5,0x75,0xF5,0x53,0x75,0xF5,0x54,0x75,0xF5,0x50,0x75,\ +0xF5,0x41,0x75,0xF5,0x35,0x75,0xF5,0xFF,0x75,0xF5,0xEF,0x80,0xDE,0x12,0x38,0x4E,\ +0x12,0x38,0x59,0x40,0xF8,0xE5,0x45,0xBE,0xB0,0x05,0x68,0x34,0x12,0x23,0x76,0xBE,\ +0xB1,0x4D,0x68,0x1B,0xC2,0xAF,0xC2,0xAE,0xC2,0xAD,0xD2,0x11,0xD2,0x12,0x12,0x24,\ +0x1C,0x12,0x23,0x7B,0x12,0x23,0x9A,0x12,0x0D,0x1C,0xF4,0x42,0xA3,0x80,0x17,0x12,\ +0x3C,0x74,0x12,0x23,0x39,0x7A,0x1D,0x48,0x20,0x11,0x03,0x12,0x31,0xA9,0xC3,0x22,\ +0xC2,0xAE,0xC2,0xAD,0xC2,0x16,0xD3,0x22,0x30,0x11,0x05,0x12,0x37,0xBD,0x80,0x03,\ +0x12,0x2E,0xC0,0x40,0x1D,0x7A,0xA3,0x01,0x40,0x7A,0x07,0x01,0x42,0x23,0x24,0x03,\ +0x7A,0xB3,0x01,0x41,0x04,0xA5,0xFB,0x7E,0x18,0x01,0x40,0x12,0x3C,0x5F,0x7A,0x39,\ +0xB0,0x22,0xE4,0x7C,0xAB,0x04,0x7A,0x57,0x01,0x40,0x04,0x7A,0xB3,0x01,0x42,0x22,\ +0xE4,0x53,0xCA,0xEF,0xF5,0xCC,0x43,0xC8,0x10,0x43,0xA7,0xE0,0x53,0xA7,0xEF,0x53,\ +0xA6,0xF0,0x53,0xA2,0x7F,0x43,0xA2,0x70,0x53,0xA4,0x8F,0x43,0xA4,0x80,0x75,0x92,\ +0x07,0xF5,0x93,0x75,0x91,0xC6,0xF5,0x94,0x22,0xC2,0x1C,0x6D,0x55,0x7A,0x57,0x02,\ +0x1C,0x7A,0x57,0x02,0x47,0x7A,0x57,0x02,0x3D,0xF5,0x57,0xF5,0x56,0xF5,0x53,0xF5,\ +0x54,0xF5,0x55,0xF5,0x58,0xD2,0x22,0xD2,0x23,0x7E,0xB3,0x0E,0xAB,0x0A,0x5B,0x2E,\ +0x54,0x0E,0xA0,0x0B,0x58,0x50,0x7C,0x0A,0x7E,0xA0,0x10,0xA4,0x7A,0x57,0x02,0x49,\ +0xA5,0xE8,0x7A,0xB3,0x02,0x1E,0x14,0x0A,0x5B,0x7E,0x34,0x02,0x25,0x7E,0x30,0x0C,\ +0x12,0x00,0x6F,0x74,0x04,0x90,0x02,0x1F,0x7E,0x30,0x06,0x12,0x43,0xA0,0x90,0x03,\ +0xA8,0x7E,0x30,0x06,0x12,0x43,0x9F,0xE4,0x7E,0xA3,0x02,0x00,0x30,0xF2,0x02,0x74,\ +0x05,0xF5,0x52,0x22,0x20,0x1D,0x05,0x30,0x27,0x0F,0xD2,0x1C,0x12,0x0D,0x2E,0x85,\ +0x55,0x5C,0x12,0x28,0x89,0x12,0x29,0x80,0x22,0x12,0x0D,0x2E,0xBE,0x70,0x00,0x78,\ +0xEE,0xE5,0x52,0x70,0x04,0xC2,0x1C,0x80,0xEF,0x30,0x1C,0xEC,0x7E,0x57,0x02,0x3D,\ +0xBE,0x54,0x00,0x00,0x78,0xE2,0x85,0x56,0x52,0x05,0x56,0xC2,0x1C,0xE5,0x56,0xBE,\ +0xB1,0x57,0x40,0x03,0x75,0x56,0x00,0x80,0xCC,0x7D,0x45,0x7E,0x34,0x02,0x1F,0x7E,\ +0x51,0x5C,0x0A,0x15,0x2E,0x14,0x03,0xA8,0x0A,0x25,0x2D,0x32,0x7E,0x39,0x00,0x7E,\ +0x53,0x02,0x1E,0x0A,0x25,0xBD,0x52,0x50,0x16,0xA5,0x08,0x7E,0x19,0x40,0xBE,0x40,\ +0x00,0x68,0x0A,0xBE,0x00,0x04,0x40,0x05,0xA5,0x1C,0x7A,0x19,0x40,0x80,0x02,0xA5,\ +0x18,0xBE,0x00,0x08,0x40,0x05,0x7E,0x00,0x07,0x80,0x08,0xBE,0x00,0x01,0x50,0x03,\ +0x7E,0x00,0x01,0x7A,0x39,0x00,0x0A,0x70,0x7E,0x34,0x02,0x25,0x7E,0x51,0x5C,0x7E,\ +0x40,0x04,0xAC,0x45,0x2D,0x32,0x0B,0x38,0x10,0xBD,0x15,0x28,0x07,0x7E,0x10,0x08,\ +0x9C,0x10,0x0A,0x71,0xAD,0x17,0x7E,0xE0,0x08,0x9C,0xEF,0x0A,0x7E,0xAD,0x75,0x2D,\ +0x17,0x1E,0x14,0x1E,0x14,0x1E,0x14,0x1B,0x38,0x10,0x0B,0x35,0x0B,0x38,0x00,0xBD,\ +0x05,0x38,0x05,0x1B,0x38,0x50,0x80,0x11,0x7E,0x14,0x00,0x07,0xAD,0x01,0x2D,0x15,\ +0x1E,0x14,0x1E,0x14,0x1E,0x14,0x1B,0x38,0x10,0x20,0x2D,0x01,0x22,0xD2,0x21,0x20,\ +0x1E,0x02,0x80,0x4B,0x7E,0x24,0xFF,0xFF,0x75,0x57,0x00,0x7E,0x34,0x02,0x25,0x7E,\ +0xB3,0x02,0x1E,0x0A,0x5B,0x7E,0xD0,0x00,0x0B,0x38,0x70,0x20,0x21,0x02,0x80,0x25,\ +0x0A,0x1D,0x09,0xC1,0x03,0xA8,0xBE,0xC0,0x00,0x78,0x0B,0xBD,0x75,0x50,0x07,0x7A,\ +0xD1,0x57,0xC2,0x21,0x80,0x0F,0x7D,0x17,0x0B,0x35,0x0B,0x35,0xBD,0x12,0x50,0x05,\ +0x7A,0xD1,0x57,0x7D,0x21,0x0B,0xD0,0xBE,0xD0,0x06,0x78,0xCC,0x85,0x57,0x52,0x22,\ +0xC0,0xA8,0x53,0xA8,0x9F,0x85,0x52,0x53,0xD0,0xA8,0x22,0xCA,0xF8,0x7E,0x10,0x03,\ +0x7E,0x44,0x0A,0x47,0x6C,0x00,0x0A,0x10,0x09,0xB1,0x09,0xF8,0x70,0x03,0x02,0x2B,\ +0x04,0x74,0x02,0xAC,0xB1,0x49,0xF5,0x09,0x58,0x49,0xE5,0x09,0x80,0x74,0x02,0xAC,\ +0xB0,0x49,0xD5,0x09,0xA8,0x49,0xC5,0x09,0xB2,0x7E,0x34,0x0B,0x8A,0x7D,0x24,0x74,\ +0x0B,0x12,0x3D,0xB9,0x0A,0x10,0x09,0xB1,0x09,0xF3,0xB4,0x01,0x1B,0xE4,0x7A,0xB3,\ +0x0B,0x8A,0x6D,0x11,0x7A,0x17,0x0B,0x8B,0x7A,0xF7,0x0B,0x8D,0x7A,0xF7,0x0B,0x91,\ +0x7A,0xE7,0x0B,0x8F,0x7A,0xE7,0x0B,0x93,0x7E,0x37,0x0B,0x8F,0x7E,0x27,0x0B,0x93,\ +0x12,0x3E,0x29,0x7D,0xB3,0x7E,0x37,0x0B,0x8D,0x7E,0x27,0x0B,0x91,0x12,0x3E,0x29,\ +0x2D,0xB3,0x7E,0x37,0x0B,0x8F,0x7D,0x2E,0x12,0x3E,0x29,0x7D,0xA3,0x7E,0x37,0x0B,\ +0x8D,0x7D,0x2F,0x12,0x3E,0x29,0x2D,0xA3,0x0A,0x10,0x09,0xB1,0x0A,0x02,0xC4,0x54,\ +0x0F,0x7C,0xFB,0x74,0x02,0xAC,0xBF,0x49,0x95,0x03,0xAE,0x7E,0xA3,0x0B,0x8A,0xBE,\ +0xA0,0x02,0x68,0x0A,0x7E,0xB3,0x08,0xC9,0x0A,0x1B,0xBD,0x19,0x58,0x46,0x74,0x02,\ +0x7A,0xB3,0x0B,0x8A,0x7E,0x17,0x0B,0x8B,0xBD,0x19,0x58,0x12,0x7A,0xD7,0x0B,0x91,\ +0x7A,0xC7,0x0B,0x93,0x7A,0xF7,0x0B,0x8D,0x7A,0xE7,0x0B,0x8F,0x80,0x59,0xBE,0xA4,\ +0x00,0xC0,0x28,0x0A,0x7A,0xD7,0x0B,0x91,0x7A,0xC7,0x0B,0x93,0x80,0x49,0xBD,0xAB,\ +0x28,0x45,0x7A,0xF7,0x0B,0x8D,0x7A,0xF7,0x0B,0x91,0x7A,0xE7,0x0B,0x8F,0x7A,0xE7,\ +0x0B,0x93,0x80,0x33,0xBE,0xA0,0x01,0x68,0x06,0xBE,0xA4,0x00,0x80,0x28,0x20,0x74,\ +0x01,0x7A,0xB3,0x0B,0x8A,0x74,0x06,0xAC,0xBF,0x49,0x15,0x08,0x22,0x7A,0x17,0x0B,\ +0x91,0x74,0x06,0xAC,0xBF,0x49,0x15,0x08,0x24,0x7A,0x17,0x0B,0x93,0x80,0x08,0x7A,\ +0xD7,0x0B,0x91,0x7A,0xC7,0x0B,0x93,0x7E,0x17,0x0B,0x91,0x74,0x02,0xAC,0xB0,0x59,\ +0x15,0x09,0xA8,0x7E,0x17,0x0B,0x93,0x74,0x02,0xAC,0xB0,0x59,0x15,0x09,0xB2,0x0E,\ +0x94,0xBE,0x97,0x0B,0x8B,0x08,0x06,0x7A,0x97,0x0B,0x8B,0x80,0x1C,0xBE,0x94,0x00,\ +0x00,0x08,0x16,0x7E,0x27,0x0B,0x8B,0x7E,0x34,0x00,0x03,0xAD,0x32,0x7D,0x13,0x2D,\ +0x19,0x0E,0x14,0x0E,0x14,0x7A,0x17,0x0B,0x8B,0x7D,0x34,0x7E,0x24,0x0B,0x8A,0x74,\ +0x0B,0x12,0x3D,0xB9,0x0B,0x12,0x2E,0x44,0x00,0x0B,0x0B,0x00,0xBE,0x00,0x02,0x50,\ +0x03,0x02,0x29,0x96,0xDA,0xF8,0x22,0xCA,0x3B,0x7D,0x63,0x7C,0xFB,0x7E,0xE3,0x08,\ +0x67,0x7E,0xB3,0x08,0x9B,0x60,0x03,0x02,0x2C,0x4D,0x74,0x01,0x7A,0xB3,0x08,0x9B,\ +0x7E,0x34,0x80,0x01,0x7A,0x37,0x08,0x86,0x6D,0x33,0x7A,0x37,0x08,0x88,0x6D,0x33,\ +0x7A,0x37,0x08,0x96,0xE4,0x7A,0xB3,0x08,0x81,0x6C,0x77,0x80,0x12,0x1A,0x27,0x09,\ +0x62,0x08,0x0A,0xBE,0x63,0x08,0x81,0x28,0x04,0x7A,0x63,0x08,0x81,0x0B,0x70,0xBC,\ +0xE7,0x18,0xEA,0x7E,0x73,0x08,0xDE,0x0A,0x37,0x7E,0xB3,0x08,0x93,0x30,0xE2,0x02,\ +0x6D,0x33,0x7D,0x23,0x3E,0x24,0x7E,0x33,0x08,0xA7,0x0A,0x13,0x2D,0x12,0x7E,0x27,\ +0x08,0x8E,0x9D,0x21,0x7E,0x33,0x08,0xA9,0x0A,0x43,0x7E,0xA3,0x08,0x92,0x7E,0xB3,\ +0x08,0x74,0xBE,0xB0,0x50,0x50,0x1B,0x7E,0xB3,0x08,0x60,0xB4,0x01,0x14,0xBE,0x24,\ +0x00,0x00,0x08,0x0E,0x2D,0x43,0xBE,0x44,0x00,0xFF,0x08,0x14,0x7E,0x44,0x00,0xFF,\ +0x80,0x0E,0x4C,0xAA,0x68,0x02,0x1B,0xA0,0x0A,0x3A,0xBD,0x34,0x58,0x02,0x7C,0xA9,\ +0x74,0x07,0xA4,0x2D,0x54,0x0B,0x56,0x0E,0x54,0x0E,0x54,0x0E,0x54,0x7C,0xAB,0x7A,\ +0xA3,0x08,0x92,0x7E,0x73,0x08,0xA8,0x0A,0x37,0x3E,0x34,0x7E,0x33,0x08,0xAA,0x7C,\ +0xA3,0xBE,0x37,0x08,0x8E,0x50,0x20,0x7E,0xB3,0x08,0xB0,0x30,0xE0,0x19,0x7E,0xB3,\ +0x08,0x93,0x20,0xE1,0x12,0x6D,0x22,0x0A,0x13,0x6D,0x00,0x12,0x32,0xCB,0x7E,0x17,\ +0x08,0x8E,0x12,0x32,0xE5,0x7C,0xA7,0x7E,0x43,0x08,0x90,0xA5,0xBC,0x00,0x04,0x7E,\ +0x43,0x08,0xAA,0x7E,0x50,0x03,0xAC,0x45,0x0A,0x3A,0x2D,0x23,0x2E,0x24,0x00,0x03,\ +0x1E,0x24,0x1E,0x24,0x7C,0x45,0x7A,0x43,0x08,0x90,0x7E,0x53,0x08,0xAA,0x4C,0x55,\ +0x68,0x10,0x0A,0x34,0x7C,0x67,0x6C,0x77,0x0A,0x25,0x8D,0x32,0x7A,0x73,0x08,0x91,\ +0x80,0x05,0xE4,0x7A,0xB3,0x08,0x91,0x6D,0x33,0x7A,0x37,0x08,0x8E,0x7C,0xBF,0x7E,\ +0x34,0x0A,0x8E,0x7E,0x24,0x0A,0x8C,0x12,0x3C,0xBD,0x7E,0x37,0x08,0x58,0xBE,0x34,\ +0x00,0x0C,0x08,0x13,0xBC,0xEF,0x08,0x0F,0x7D,0x36,0x7E,0x27,0x0A,0x8E,0x7E,0x17,\ +0x0A,0x8C,0x7C,0xBF,0x12,0x18,0xCF,0xDA,0x3B,0x22,0xCA,0x3B,0x7A,0xB1,0x2F,0xE4,\ +0x7A,0xB3,0x0A,0x8B,0xE5,0x43,0x0A,0x3B,0x2E,0x34,0x00,0x06,0x7A,0x73,0x0A,0x8A,\ +0xE5,0x40,0x60,0x09,0x7E,0xB3,0x0A,0x8A,0x04,0x7A,0xB3,0x0A,0x8A,0x7E,0x34,0x0A,\ +0x72,0x30,0x7C,0x04,0x7E,0x34,0x0A,0x7E,0x7A,0x37,0x0A,0x5F,0xE4,0x7E,0x24,0x00,\ +0x0C,0x12,0x3E,0x77,0x7E,0x34,0x0B,0x36,0x7A,0x37,0x0A,0x5D,0x7E,0x37,0x0A,0x5D,\ +0x12,0x11,0x7C,0x50,0x2C,0x7E,0xB3,0x0A,0x8B,0x0A,0x2B,0x7E,0x17,0x0A,0x5F,0x2D,\ +0x12,0x2D,0x12,0x1B,0x18,0x30,0x19,0x02,0x0C,0x92,0x04,0x7A,0xB3,0x0A,0x8B,0x7E,\ +0x73,0x0A,0x8A,0x0A,0x37,0x3E,0x34,0x2E,0x37,0x0A,0x5D,0x7A,0x37,0x0A,0x5D,0x80,\ +0xCB,0x7E,0x73,0x0A,0x63,0xBE,0x70,0x08,0x50,0x05,0x6D,0x33,0x02,0x2D,0xB5,0x30,\ +0x7B,0x4D,0x7E,0x73,0x0A,0x71,0xBE,0x71,0x55,0x68,0x0C,0xE5,0x55,0x7A,0xB3,0x0A,\ +0x71,0x74,0x01,0x7A,0xB3,0x0A,0x70,0x7E,0xB3,0x0A,0x70,0x60,0x03,0x12,0x3E,0xBE,\ +0x20,0x7C,0x13,0xE4,0x7A,0xB3,0x0A,0x70,0xE4,0x7E,0x37,0x0A,0x5F,0x7E,0x53,0x0A,\ +0x8B,0x12,0x3E,0x68,0x80,0x16,0x74,0x01,0x7E,0x37,0x0A,0x5F,0x7E,0x53,0x0A,0x8B,\ +0x12,0x3E,0x68,0x7E,0x34,0x0A,0x72,0x74,0x0C,0x12,0x3E,0x05,0x12,0x3E,0x9F,0x6D,\ +0x66,0x30,0x7E,0x3B,0x7E,0xB3,0x0A,0x8A,0x7E,0x73,0x0A,0x8B,0x7E,0x24,0x0C,0x92,\ +0x7E,0x14,0x0B,0x36,0x12,0x3A,0xDD,0x7D,0x63,0x7E,0xF1,0x43,0x74,0x02,0xAC,0xFB,\ +0x2E,0x74,0x0B,0x36,0x30,0x7D,0x02,0x0B,0x75,0x74,0x02,0x7D,0x37,0x7E,0x24,0x0C,\ +0x92,0x7E,0x33,0x0A,0x8B,0x7E,0x20,0x06,0x7E,0x13,0x0A,0x8A,0x12,0x3E,0x59,0x7E,\ +0xF1,0x43,0x74,0x02,0xAC,0xFB,0x2E,0x74,0x0B,0x36,0x30,0x7D,0x16,0x74,0x01,0x7D,\ +0x37,0x7E,0x24,0x0C,0x92,0x7E,0x33,0x0A,0x8B,0x7E,0x20,0x01,0x7E,0x13,0x0A,0x8A,\ +0x12,0x3E,0x59,0x7D,0x36,0xDA,0x3B,0x22,0x7E,0x33,0x01,0xD1,0xA5,0x0B,0x7E,0x18,\ +0x01,0xD0,0x12,0x3C,0x5F,0xBE,0x39,0xB0,0x78,0x1E,0x7E,0xB3,0x01,0xD0,0xB4,0x01,\ +0x02,0x80,0x18,0xB4,0x02,0x02,0x80,0x5B,0xB4,0x04,0x0A,0x7E,0xB3,0x01,0xD2,0xB4,\ +0x01,0x03,0x02,0x2E,0x87,0x74,0x80,0x22,0x74,0x81,0x22,0x7E,0x34,0x01,0xD6,0x7E,\ +0x27,0x01,0xD3,0x7E,0x33,0x01,0xD5,0x7E,0xB3,0x01,0xD2,0x54,0x1F,0xB4,0x00,0x15,\ +0xBE,0x40,0x10,0x50,0x05,0x12,0x3C,0x52,0x80,0x27,0x1E,0x30,0xA9,0x21,0xD1,0x21,\ +0x12,0x3C,0x58,0x80,0x1C,0xB4,0x01,0x17,0x43,0xB9,0x80,0x7E,0x39,0xB0,0x7C,0xAB,\ +0x1B,0x28,0x50,0x0B,0x34,0x0B,0x24,0xA5,0xDB,0xF1,0x53,0xB9,0x7F,0x80,0x02,0x80,\ +0xB4,0xE4,0x22,0x7E,0x37,0x01,0xD3,0x7E,0x24,0x01,0xD4,0x7E,0x33,0x01,0xD5,0x7C,\ +0x23,0x7E,0xB3,0x01,0xD2,0x54,0x1F,0xB4,0x00,0x05,0x12,0x3C,0x52,0x80,0x29,0xB4,\ +0x01,0x15,0x43,0xB9,0x80,0x0B,0x38,0x50,0x7A,0x29,0xB0,0x0B,0x34,0x0B,0x24,0xA5,\ +0xDB,0xF3,0x53,0xB9,0x7F,0x80,0x11,0xB4,0x02,0x0B,0x7A,0x61,0x83,0x7A,0x71,0x82,\ +0x12,0x3C,0x4C,0x80,0x03,0x02,0x2D,0xE5,0x74,0x82,0x7A,0xB3,0x01,0xD0,0x7A,0x23,\ +0x01,0xD3,0x2E,0x20,0x03,0x80,0x25,0x7E,0x20,0x06,0x74,0x84,0x7A,0xB3,0x01,0xD0,\ +0x74,0x01,0x7A,0xB3,0x01,0xD2,0x74,0x01,0x7A,0xB3,0x01,0xD3,0x7E,0x54,0x00,0x00,\ +0x7A,0x57,0x01,0xD4,0x74,0x01,0x7A,0xB3,0x01,0xD6,0x80,0x00,0x7A,0x23,0x01,0xD1,\ +0x7C,0x32,0xA5,0x0B,0x7E,0x18,0x01,0xD0,0x12,0x3C,0x5F,0x7A,0x39,0xB0,0xE4,0x22,\ +0x7E,0xB3,0x02,0x45,0xB5,0x42,0x07,0xE4,0x7A,0xB3,0x02,0x45,0x80,0xF2,0xA5,0xFC,\ +0x04,0x7A,0xB3,0x02,0x45,0xA5,0xEC,0x7E,0x34,0x01,0x44,0x12,0x3D,0x48,0x7E,0xA0,\ +0x86,0x7C,0x04,0x6C,0x11,0xE5,0x43,0xC3,0x22,0x75,0xF0,0x04,0xA4,0x0A,0x00,0x3E,\ +0x04,0x2D,0x50,0x7E,0x04,0x09,0xBC,0x7E,0x14,0x09,0xD0,0x2D,0x05,0x2D,0x15,0x22,\ +0x9C,0x00,0x12,0x2E,0xE9,0x74,0x02,0x1B,0x08,0xE0,0x1B,0x18,0xF0,0x0B,0x05,0x0B,\ +0x15,0xD5,0xE0,0xF3,0x22,0x7E,0x00,0x01,0x12,0x2E,0xE9,0x7F,0x40,0x7F,0x57,0x7E,\ +0xF0,0x80,0x9C,0xFE,0x9C,0x88,0xBE,0x80,0x02,0x50,0x30,0x0B,0x88,0x00,0x7C,0x3F,\ +0x7D,0x2A,0x7C,0x7E,0x7E,0xA0,0x07,0x12,0x42,0x55,0x7D,0xA1,0x1B,0x88,0xA0,0x1B,\ +0x85,0x0B,0x98,0x00,0x7C,0x3F,0x7D,0x2B,0x7C,0x7E,0x7E,0xA0,0x07,0x12,0x42,0x55,\ +0x7D,0xB1,0x1B,0x98,0xB0,0x1B,0x95,0x0B,0x80,0x80,0xCB,0x22,0x6C,0x00,0x12,0x2E,\ +0xE9,0x0B,0x08,0x00,0x0B,0x18,0x10,0x22,0x7E,0xA0,0x08,0xA4,0x7E,0x00,0x04,0x59,\ +0xE5,0x09,0x58,0x59,0xF5,0x09,0x80,0x0B,0x55,0xA5,0xD8,0xF3,0x22,0x7E,0xA0,0x08,\ +0xA4,0x7F,0x17,0x7E,0x00,0x03,0x49,0x15,0x09,0x58,0x2D,0x21,0x49,0x15,0x09,0x80,\ +0x2D,0x31,0x0B,0x55,0xA5,0xD8,0xEF,0x0E,0x24,0x0E,0x24,0x0E,0x34,0x0E,0x34,0x59,\ +0x25,0x09,0x58,0x59,0x35,0x09,0x80,0x22,0xA5,0xFC,0x7E,0x00,0x01,0x12,0x2E,0xE9,\ +0x0B,0x08,0x00,0x0B,0x18,0x10,0x7E,0x50,0x08,0xAC,0x45,0x49,0x52,0x09,0x5C,0x2D,\ +0x05,0x49,0x52,0x09,0x5A,0x9D,0x05,0x49,0x52,0x09,0x84,0x2D,0x15,0x49,0x52,0x09,\ +0x82,0x9D,0x15,0x22,0x7C,0x0B,0x7E,0x10,0x08,0xAC,0x01,0x75,0xF0,0x02,0x49,0x10,\ +0x09,0x5A,0x59,0x10,0x09,0x58,0x49,0x10,0x09,0x82,0x59,0x10,0x09,0x80,0x0B,0x05,\ +0xD5,0xF0,0xEB,0x59,0xE0,0x09,0x58,0x59,0xF0,0x09,0x80,0x22,0x7E,0xA0,0x04,0xAC,\ +0xAB,0x2E,0x54,0x00,0x03,0x3E,0x54,0x49,0x05,0x09,0x58,0x49,0x15,0x09,0x80,0x22,\ +0xCA,0x3B,0x7C,0xAB,0x6C,0x33,0xE4,0x1A,0x43,0x19,0xB4,0x0A,0x33,0xE4,0x1A,0x43,\ +0x19,0xB4,0x0A,0x3D,0x0B,0x30,0xA5,0xBB,0x0A,0xEC,0x4C,0xAA,0x78,0x03,0x02,0x31,\ +0x17,0x7E,0xB3,0x08,0x66,0x0A,0x1B,0x1B,0x14,0x7C,0x23,0x7E,0x33,0x08,0x67,0x0A,\ +0x03,0x1B,0x04,0x7E,0x44,0x0B,0x8A,0x6C,0x33,0x02,0x31,0x10,0x09,0xB4,0x00,0x09,\ +0x60,0x03,0x02,0x31,0x0A,0x7E,0x49,0x00,0x09,0xF4,0x00,0x01,0x6D,0xFF,0x7D,0x3F,\ +0x4C,0x00,0x68,0x04,0xBC,0x2F,0x78,0x04,0x7E,0x34,0x00,0x02,0xBE,0x00,0x00,0x08,\ +0x02,0x1B,0x00,0xBC,0x2F,0x08,0x02,0x0B,0xF0,0x09,0xE4,0x00,0x02,0x09,0xD4,0x00,\ +0x03,0x4C,0xEE,0x68,0x04,0xBC,0x1D,0x78,0x04,0x7E,0x34,0x00,0x02,0xBE,0xE0,0x00,\ +0x08,0x02,0x1B,0xE0,0xBC,0x1D,0x08,0x02,0x0B,0xD0,0x7D,0x2F,0x7A,0xE3,0x0A,0x94,\ +0x80,0x3E,0x7E,0xB3,0x08,0x66,0x0A,0xEB,0x7E,0xB3,0x0A,0x94,0x1A,0xFB,0xAD,0xFE,\ +0x3E,0xF4,0x2E,0xF4,0x06,0x12,0x7C,0xC0,0x80,0x19,0x1A,0xEC,0x3E,0xE4,0x2D,0xEF,\ +0x0B,0xE8,0xE0,0xBE,0xE4,0x00,0x00,0x08,0x02,0x0B,0x34,0xBD,0x2E,0x58,0x02,0x7D,\ +0x2E,0x0B,0xC0,0xBC,0xFC,0x58,0xE3,0x7E,0xB3,0x0A,0x94,0x04,0x7A,0xB3,0x0A,0x94,\ +0xBE,0xD3,0x0A,0x94,0x58,0xBC,0xBE,0x24,0x00,0xFF,0x08,0x04,0x7E,0x24,0x00,0xFF,\ +0x7C,0xB5,0x1A,0xF3,0x19,0xBF,0x0A,0x33,0xBE,0x34,0x00,0xFF,0x08,0x04,0x7E,0x34,\ +0x00,0xFF,0x7C,0xB7,0x1A,0xF3,0x19,0xBF,0x0A,0x3D,0x2E,0x44,0x00,0x0A,0x0B,0x30,\ +0xBC,0xA3,0x08,0x03,0x02,0x30,0x4C,0xDA,0x3B,0x22,0xC2,0x06,0x12,0x23,0x67,0xF5,\ +0x47,0x12,0x0C,0xC2,0x7E,0x39,0xB0,0xA5,0xF8,0x54,0x0F,0x70,0x01,0x04,0xF5,0x50,\ +0x7A,0xB3,0x02,0x0D,0xA5,0xE8,0xC4,0x54,0x0F,0x90,0x00,0x1B,0x93,0x7A,0xB3,0x02,\ +0x0E,0x12,0x00,0x78,0xC2,0x14,0x75,0xC3,0xBF,0x7E,0xB3,0x02,0x07,0xF5,0xBD,0x75,\ +0xBC,0x80,0xD2,0xAE,0x22,0x80,0x4E,0x20,0x16,0xFB,0xD5,0x50,0x18,0x7E,0xB3,0x02,\ +0x0D,0x20,0x11,0x07,0x30,0x14,0x04,0x7E,0xB3,0x02,0x0E,0xF5,0x50,0xD2,0x07,0x7E,\ +0x20,0x00,0x12,0x0F,0xFF,0xB2,0x06,0x20,0x14,0x1B,0x30,0x06,0x18,0x7E,0x57,0x02,\ +0x0B,0x1B,0x54,0xA9,0x21,0xD1,0x06,0x7A,0x57,0x02,0x0B,0x80,0x08,0x7E,0xB3,0x02,\ +0x0E,0xF5,0x50,0xD2,0x14,0x7E,0x57,0x02,0x3D,0xBE,0x54,0x00,0x00,0x68,0x06,0x1B,\ +0x54,0x7A,0x57,0x02,0x3D,0x75,0xC3,0xBF,0x22,0xC0,0xE8,0xC2,0xEA,0x12,0x23,0x67,\ +0xBE,0xB1,0x47,0x68,0x19,0xF5,0x47,0x12,0x00,0x78,0x74,0xFF,0xB5,0x47,0x04,0xC2,\ +0x14,0x80,0x0B,0x30,0x14,0x08,0x7E,0xB3,0x02,0x0D,0xF5,0x50,0xC2,0x14,0xD0,0xE8,\ +0x22,0x30,0x28,0x1D,0x7E,0x54,0x03,0xE8,0x7A,0x57,0x02,0x3D,0x12,0x00,0x78,0x74,\ +0x00,0xF5,0x45,0x12,0x22,0xE0,0x10,0x14,0x01,0x22,0x7E,0xB3,0x02,0x0D,0xF5,0x50,\ +0x22,0xE5,0x47,0x60,0x06,0x04,0x60,0xE4,0x30,0x14,0x09,0xD2,0x14,0x74,0x04,0xF5,\ +0x45,0x12,0x22,0xE0,0x22,0x7E,0xA0,0x05,0x7E,0x73,0x08,0xC8,0x5E,0x70,0x0F,0x7E,\ +0x63,0x08,0xC9,0x4C,0x66,0x78,0x03,0x02,0x32,0xCA,0xA5,0xBF,0x00,0x02,0x1B,0x70,\ +0x6C,0x55,0x02,0x32,0xC3,0x1A,0x15,0x09,0xB1,0x09,0xF3,0xB4,0x01,0x02,0x80,0x03,\ +0x02,0x32,0xBA,0x1A,0x15,0x09,0x41,0x0A,0x2E,0x1A,0x15,0x09,0xB1,0x09,0xEE,0xBE,\ +0xB3,0x08,0xBF,0x50,0x6D,0x1A,0x15,0x09,0x31,0x0A,0x02,0x5E,0x30,0x0F,0x1A,0x03,\ +0x09,0x20,0x0A,0x33,0x0A,0x42,0x1A,0x03,0x09,0x20,0x0A,0x3D,0x0A,0x02,0x0A,0xF6,\ +0xBD,0xF4,0x08,0x4E,0x4D,0x44,0x68,0x4A,0x7E,0x23,0x08,0xA7,0x7E,0xB3,0x08,0x93,\ +0x30,0xE3,0x04,0x7E,0x23,0x08,0xE3,0x0A,0xF2,0xBD,0xF4,0x08,0x02,0x0B,0x04,0x0A,\ +0xF7,0xBD,0xF0,0x48,0x05,0xBE,0x40,0x00,0x28,0x28,0xE4,0x1A,0xF5,0x19,0xBF,0x09,\ +0xEE,0x0A,0xF7,0xBD,0xF0,0x48,0x09,0xBE,0x40,0x00,0x28,0x16,0x1B,0x40,0x80,0x12,\ +0x7E,0xB3,0x08,0xBF,0x0A,0xEB,0x2E,0xE4,0x00,0x0A,0x0A,0xF4,0xBD,0xFE,0x58,0x02,\ +0x0B,0x40,0x1A,0xF5,0x19,0x4F,0x0A,0x2E,0x80,0x07,0xE4,0x1A,0xF5,0x19,0xBF,0x0A,\ +0x2E,0x0B,0x50,0xBC,0xA5,0x08,0x03,0x02,0x32,0x25,0x22,0x7D,0x51,0xAD,0x03,0x7D,\ +0x02,0x7D,0x21,0xAD,0x05,0x2D,0x12,0xAD,0x35,0x2D,0x21,0x22,0x7D,0x02,0xAD,0x31,\ +0xAD,0x10,0x2D,0x21,0x22,0x6D,0x00,0x74,0x10,0x4D,0x00,0x78,0x0B,0x4D,0x22,0x78,\ +0x27,0x8D,0x31,0x7D,0x12,0x6D,0x22,0x22,0x7D,0x43,0x7D,0x32,0x6D,0x22,0x2F,0x11,\ +0x2D,0x44,0x50,0x02,0xA5,0x0F,0xBF,0x10,0x40,0x04,0x9F,0x10,0x0B,0x90,0x14,0x78,\ +0xED,0x7F,0x01,0x6D,0x22,0x7D,0x34,0x22,0x7D,0x41,0x7D,0x13,0x8D,0x24,0x7D,0x02,\ +0x2F,0x00,0x40,0x04,0xBD,0x04,0x40,0x04,0x9D,0x04,0x0B,0x14,0x14,0x78,0xF1,0x7D,\ +0x23,0x7D,0x31,0x7D,0x10,0x6D,0x00,0x22,0xC2,0xD5,0x7C,0xB0,0x30,0xE7,0x08,0xB2,\ +0xD5,0x9F,0x22,0x9F,0x20,0x7F,0x02,0x7C,0xB4,0x30,0xE7,0x13,0xB2,0xD5,0x9F,0x22,\ +0x9F,0x21,0x7F,0x12,0x12,0x32,0xE7,0x9F,0x22,0x9F,0x20,0x7F,0x02,0x80,0x03,0x12,\ +0x32,0xE7,0x30,0xD5,0x06,0x9F,0x22,0x9F,0x21,0x7F,0x12,0x22,0x6C,0xAA,0x4D,0x11,\ +0x68,0x1A,0x1E,0x54,0x68,0x0E,0x0B,0x38,0x20,0x1B,0x18,0x20,0x0B,0x35,0x0B,0x15,\ +0x1B,0x54,0x78,0xF2,0x50,0x06,0x7E,0x39,0x40,0x7A,0x19,0x40,0x22,0xCA,0x3B,0x7E,\ +0xA4,0x0B,0x8A,0x7D,0xC3,0x7D,0xBA,0x2E,0xA4,0x00,0x05,0x7E,0x94,0xFF,0xFF,0x6C,\ +0xFF,0x0A,0xDF,0x0B,0xD4,0x7D,0x3D,0x7C,0xE7,0x02,0x34,0x35,0x7A,0xB9,0xF0,0x19,\ +0xEB,0x00,0x01,0x7D,0x3B,0xE4,0x12,0x3A,0x8F,0x7A,0x37,0x0A,0x92,0xBE,0x97,0x0A,\ +0x92,0x28,0x70,0x6C,0xDD,0x6C,0xCC,0xBC,0xFC,0x68,0x0D,0xBC,0xEC,0x68,0x09,0x0A,\ +0xDD,0x2D,0xDA,0x7A,0xD9,0xC0,0x0B,0xD0,0x0B,0xC0,0xBE,0xC0,0x05,0x78,0xE8,0x7D,\ +0x3A,0x2E,0x34,0x00,0x03,0x7D,0x2A,0x7E,0x14,0x00,0x02,0x12,0x3D,0x77,0x6C,0xCC,\ +0x7D,0x3B,0x0B,0x35,0x0A,0x2C,0x2D,0x2A,0x7E,0x14,0x00,0x03,0x12,0x3D,0x77,0x09,\ +0xAB,0x00,0x02,0x74,0x02,0xA4,0x49,0x85,0x0B,0x4A,0x2E,0x87,0x0A,0x92,0xBD,0x98,\ +0x28,0x1A,0x7D,0x3B,0x74,0x03,0x12,0x3A,0x8F,0x2D,0x83,0xBD,0x98,0x28,0x0D,0x7D,\ +0x98,0x7D,0x3C,0x7D,0x2B,0x7E,0x14,0x00,0x05,0x12,0x3D,0x77,0x0B,0xC0,0xBE,0xC0,\ +0x03,0x78,0xBD,0x0B,0xE0,0xBE,0xE0,0x05,0x50,0x03,0x02,0x33,0xAC,0x0B,0xF0,0xBE,\ +0xF0,0x04,0x50,0x03,0x02,0x33,0xA1,0xDA,0x3B,0x22,0xCA,0xD8,0xCA,0x79,0x7A,0xB1,\ +0x2F,0xC2,0x15,0x7E,0xB3,0x0A,0x63,0xBE,0xB0,0x08,0x50,0x08,0x04,0x7A,0xB3,0x0A,\ +0x63,0x02,0x34,0xE8,0xA2,0x79,0xE4,0x33,0x12,0x3A,0x39,0x12,0x38,0x4C,0x12,0x3E,\ +0xC4,0x30,0x7E,0x53,0xA2,0x7C,0xE4,0x33,0x12,0x3C,0x9C,0xE4,0x7E,0x34,0x0B,0x36,\ +0x7E,0x24,0x0C,0x92,0x7E,0x33,0x0A,0x8B,0x7E,0x21,0x43,0x7E,0x13,0x0A,0x8A,0x12,\ +0x3E,0x59,0x7E,0x34,0x0B,0x36,0x7A,0x37,0x0A,0x5D,0x7E,0x74,0x0C,0x92,0x7E,0xD3,\ +0x0A,0x8B,0x80,0x1E,0x7E,0x79,0xB0,0x7E,0x37,0x0A,0x5D,0x12,0x2B,0x17,0x7E,0x73,\ +0x0A,0x8A,0x0A,0x37,0x3E,0x34,0x2E,0x37,0x0A,0x5D,0x7A,0x37,0x0A,0x5D,0x0B,0x74,\ +0x1B,0xD0,0xBE,0xD0,0x00,0x38,0xDD,0x30,0x7F,0x0A,0xD2,0x15,0x12,0x18,0xE4,0x74,\ +0x01,0x12,0x39,0x6F,0x30,0x7D,0x11,0xD2,0x15,0x7E,0x34,0x02,0x13,0x12,0x3E,0xDD,\ +0x7A,0xB3,0x0A,0x6F,0xE4,0x12,0x39,0x6F,0x12,0x3D,0x16,0x24,0xFF,0x92,0x28,0x12,\ +0x3E,0xCE,0x24,0xFF,0x92,0x27,0xDA,0x79,0xDA,0xD8,0x22,0xCA,0xF8,0x7A,0xB1,0x2F,\ +0x7E,0xF1,0x40,0x7E,0x34,0x0B,0x4F,0x7E,0x24,0x0B,0x36,0x7E,0x14,0x0B,0x40,0x7E,\ +0x04,0x0B,0x4A,0x12,0x3E,0x4A,0x6C,0x77,0x6C,0xAA,0x0A,0x2A,0x09,0xB2,0x0B,0x4F,\ +0x60,0x02,0x0B,0x70,0x0B,0xA0,0xBE,0xA0,0x05,0x78,0xEF,0x7E,0xB3,0x02,0x40,0xB4,\ +0x01,0x22,0xA5,0xBF,0x00,0x04,0xC2,0x2A,0x80,0x07,0xBE,0x70,0x01,0x28,0x02,0xD2,\ +0x2A,0x30,0x2A,0x10,0x6C,0xAA,0xE4,0x0A,0x4A,0x19,0xB4,0x0B,0x4F,0x0B,0xA0,0xBE,\ +0xA0,0x05,0x78,0xF2,0x7E,0x73,0x02,0x40,0x0A,0x47,0x2E,0x44,0x0B,0x4F,0x6C,0xAA,\ +0x80,0x12,0x6C,0x77,0xBE,0xA3,0x0A,0x6F,0x78,0x03,0x7E,0x70,0x01,0x7A,0x49,0x70,\ +0x0B,0x44,0x0B,0xA0,0xBC,0xFA,0x38,0xEA,0x7E,0x34,0x0B,0x4F,0x0A,0x2F,0x7E,0x33,\ +0x02,0x40,0x0A,0x53,0x2D,0x52,0x12,0x39,0xD8,0x7E,0xB3,0x02,0x40,0x7C,0x7F,0x7E,\ +0x24,0x0A,0x66,0x7E,0x14,0x0B,0x36,0x7E,0x04,0x0B,0x40,0x12,0x35,0xA9,0x12,0x3C,\ +0xDE,0x60,0x02,0xD2,0x24,0xE4,0xDA,0xF8,0x22,0xCA,0x79,0x7C,0x6B,0x6C,0xAA,0x7E,\ +0x44,0x0E,0x60,0x7E,0x29,0xF0,0xBE,0xF0,0x20,0x68,0x04,0x4C,0xFF,0x78,0x0A,0x7E,\ +0x49,0xB0,0x54,0x7F,0x7A,0x49,0xB0,0x80,0x4B,0xBE,0xF0,0x08,0x68,0x46,0xBE,0xF0,\ +0x01,0x78,0x06,0x7E,0x49,0xB0,0x20,0xE7,0x3B,0x0B,0x18,0xF0,0x0B,0x08,0xE0,0x7D,\ +0xDF,0x5E,0xD4,0x07,0x00,0x0E,0xD4,0x0E,0xD4,0x0E,0xD4,0x0E,0xD4,0x4E,0xD4,0x00,\ +0x80,0x7D,0xCE,0x5E,0xC4,0x07,0x00,0x7D,0x7C,0x1A,0x7E,0x4D,0xD7,0x7D,0x7D,0x7C,\ +0xBF,0x7A,0x49,0xB0,0x7D,0x7F,0x7C,0xBF,0x19,0xB4,0x00,0x01,0x7D,0x7E,0x7C,0xBF,\ +0x19,0xB4,0x00,0x02,0x7E,0x49,0xB0,0x30,0xE7,0x02,0x0B,0xA0,0x0B,0x24,0x0B,0x46,\ +0x0B,0x15,0x0B,0x05,0x1B,0x60,0xA5,0xBE,0x00,0x89,0x6C,0xAA,0x7E,0x60,0x01,0xE4,\ +0x80,0x12,0x7E,0x29,0x30,0x0A,0x43,0x5E,0x44,0x00,0x13,0x68,0x02,0x4C,0xA6,0x3E,\ +0x60,0x0B,0x24,0x04,0xBC,0x7B,0x38,0xEA,0x7A,0xA3,0x0E,0x5F,0xDA,0x79,0x22,0xE4,\ +0x7A,0xB3,0x08,0x72,0x7E,0x34,0x80,0x01,0x7A,0x37,0x08,0x86,0x6D,0x33,0x7A,0x37,\ +0x08,0x84,0x6D,0x33,0x7A,0x37,0x08,0x88,0x6D,0x33,0x7A,0x37,0x08,0x98,0x6D,0x33,\ +0x7A,0x37,0x08,0x96,0xE4,0x7A,0xB3,0x08,0x73,0x6D,0x33,0x7A,0x37,0x08,0x5C,0x6D,\ +0x33,0x7A,0x37,0x08,0x5E,0x6D,0x33,0x7A,0x37,0x08,0x58,0x74,0xC8,0x7A,0xB3,0x08,\ +0x6C,0x74,0x01,0x7A,0xB3,0x08,0x6A,0xE4,0x7A,0xB3,0x08,0x69,0xE4,0x7A,0xB3,0x08,\ +0x9B,0xE4,0x7A,0xB3,0x08,0x9A,0xE4,0x7A,0xB3,0x08,0x90,0xE4,0x7A,0xB3,0x08,0x92,\ +0xE4,0x7A,0xB3,0x08,0xA4,0xE4,0x7A,0xB3,0x08,0xA5,0x7E,0x34,0x06,0x12,0x7E,0x24,\ +0x01,0xF8,0x12,0x3D,0xE0,0x7E,0x34,0x04,0x1A,0x7E,0x24,0x01,0xF8,0x12,0x3D,0xE0,\ +0x7E,0x34,0x08,0x0A,0x7E,0x24,0x00,0x0C,0x12,0x3D,0xE0,0x7E,0x34,0x08,0x16,0x7E,\ +0x24,0x00,0x0C,0x12,0x3D,0xE0,0x22,0xCA,0xF8,0x7D,0x42,0x7C,0xAB,0x7D,0xF3,0xBE,\ +0xA0,0x05,0x50,0x59,0x7E,0xF0,0x04,0x7E,0x70,0x04,0x0A,0xDA,0x1A,0x0F,0xBD,0x0D,\ +0x58,0x26,0x1A,0x17,0xBD,0x1D,0x58,0x20,0xAD,0xD0,0x1A,0x17,0x2D,0x1D,0x3E,0x14,\ +0x2D,0x1F,0x0B,0x18,0xE0,0x7E,0xD4,0x00,0x05,0xAD,0xD0,0x1A,0x17,0x2D,0x1D,0x3E,\ +0x14,0x2D,0x1F,0x1B,0x18,0xE0,0x80,0x15,0x7E,0x24,0x30,0x00,0x7E,0x14,0x00,0x05,\ +0xAD,0x10,0x1A,0xE7,0x2D,0xE1,0x3E,0xE4,0x2D,0xEF,0x1B,0xE8,0x20,0x1B,0x70,0xBE,\ +0x70,0x00,0x58,0xB6,0x1B,0xF0,0xBE,0xF0,0x00,0x58,0xAC,0x80,0x2A,0xBE,0xA0,0x05,\ +0x28,0x25,0x7E,0xF0,0x01,0x1A,0x0F,0x7E,0x34,0x00,0x0A,0xAD,0x30,0x2D,0x3F,0x0A,\ +0x1A,0xAD,0x10,0x7D,0x21,0x3E,0x24,0x2D,0x2F,0x7E,0x14,0x00,0x0A,0x12,0x3D,0x77,\ +0x0B,0xF0,0xBE,0xF0,0x05,0x78,0xDE,0x7D,0x34,0x12,0x33,0x8D,0xDA,0xF8,0x22,0xC2,\ +0x11,0xE4,0x7A,0xB3,0x02,0x00,0x22,0x7E,0xB3,0x02,0x00,0x30,0xE1,0x03,0x75,0x35,\ +0xFF,0xC0,0xE8,0xC2,0xEA,0x30,0x12,0x03,0x12,0x37,0xAB,0xD0,0xE8,0x12,0x12,0x34,\ +0x70,0x07,0x30,0x09,0x02,0xD2,0x10,0xC3,0x22,0xD3,0x22,0x12,0x12,0x34,0x60,0x0A,\ +0xE5,0x4C,0x20,0xE3,0x05,0x12,0x24,0x2B,0xC2,0x12,0x22,0xD3,0x22,0x12,0x24,0x1C,\ +0x10,0x10,0x29,0x20,0x09,0x00,0x12,0x12,0x34,0xF5,0x3C,0x7E,0x34,0x01,0x44,0x75,\ +0x3D,0x03,0x12,0x11,0x7C,0x50,0xE4,0x0A,0x50,0x23,0x2E,0x54,0x06,0x00,0x1B,0x58,\ +0x30,0x7E,0xA0,0x06,0x6C,0x11,0xE5,0x43,0x24,0x06,0xC3,0x22,0x7E,0x34,0x06,0x00,\ +0x7E,0x24,0x01,0x44,0x7E,0x31,0x42,0x12,0x3C,0x58,0x7E,0xA0,0x04,0x6D,0x00,0x20,\ +0x0A,0x03,0x7E,0x11,0x43,0xE5,0x42,0x80,0xE1,0xD2,0x12,0x12,0x37,0xAB,0x22,0xC2,\ +0x15,0xC2,0x24,0xC2,0x26,0xC2,0x27,0xC2,0x28,0xC2,0x29,0x75,0x4E,0x00,0x75,0x4F,\ +0xFF,0x22,0xC0,0xA8,0xC2,0xAF,0x30,0x15,0x06,0xC2,0x15,0xE4,0x12,0x34,0xFB,0x30,\ +0x29,0x17,0xC2,0x29,0x30,0x24,0x12,0xE5,0x4C,0x20,0xE2,0x0D,0x12,0x24,0x2B,0x30,\ +0x25,0x07,0x7E,0xA3,0x02,0x3F,0x7A,0xA1,0x8B,0xD0,0xA8,0x22,0xE4,0x22,0x12,0x23,\ +0x51,0x50,0x05,0x90,0xAA,0x55,0xE4,0x73,0x22,0xC0,0xA8,0xC2,0xAF,0x12,0x23,0x57,\ +0x50,0x2A,0x74,0x05,0xF5,0x45,0x12,0x22,0xE0,0xE5,0x46,0xB4,0x55,0xE5,0xD2,0x16,\ +0x75,0xBC,0x83,0x75,0xBD,0x01,0x75,0xBB,0x01,0x6D,0x55,0x7A,0x57,0xFF,0x50,0x43,\ +0xB9,0x01,0x53,0xB9,0xFE,0x12,0x24,0x1C,0x12,0x3D,0xD5,0xD3,0xD0,0xA8,0x22,0x0A,\ +0x33,0x0B,0x34,0x1E,0x34,0x2D,0x23,0x7E,0x70,0x01,0x02,0x42,0x55,0xBE,0x80,0x00,\ +0x68,0x5D,0x70,0x1C,0x7E,0x33,0x08,0xC7,0x1E,0x30,0x0A,0x13,0x0B,0x88,0x00,0x9D,\ +0x01,0x1B,0x98,0x00,0x0B,0x85,0x0B,0x95,0x1B,0x80,0x7C,0xB8,0x70,0xEE,0x80,0x3F,\ +0x0B,0x88,0x20,0x0B,0x98,0x00,0x7D,0x30,0x9D,0x32,0x7E,0x30,0x3F,0x7E,0xA0,0x06,\ +0x7C,0xB9,0x30,0xE0,0x08,0x7E,0x30,0x03,0x7E,0xA0,0x02,0x80,0x12,0xBE,0x34,0x00,\ +0x20,0x58,0x0C,0xBE,0x34,0xFF,0xE0,0x08,0x06,0x7E,0x30,0x0F,0x7E,0xA0,0x04,0x12,\ +0x38,0x8F,0x1B,0x98,0x10,0x0B,0x85,0x0B,0x95,0x1B,0x80,0x7C,0xB8,0x70,0xC1,0x22,\ +0xCA,0x3B,0x7C,0xC5,0x7C,0xF6,0x7C,0xE7,0x7C,0xDB,0x7E,0x34,0x03,0xDA,0x7E,0x24,\ +0x00,0x30,0x12,0x3D,0xE0,0x7E,0x34,0x04,0x0A,0x7E,0x24,0x04,0x9C,0x12,0x3D,0xE0,\ +0x7A,0xC3,0x08,0x62,0x7A,0xD3,0x08,0x63,0x7A,0xE3,0x08,0x64,0x7A,0xF3,0x08,0x65,\ +0x7E,0xB3,0x08,0x62,0x60,0x12,0x7E,0x73,0x08,0x64,0x7A,0x73,0x08,0x66,0x7E,0x73,\ +0x08,0x63,0x7A,0x73,0x08,0x67,0x80,0x10,0x7E,0x73,0x08,0x63,0x7A,0x73,0x08,0x66,\ +0x7E,0x73,0x08,0x64,0x7A,0x73,0x08,0x67,0x7E,0x34,0x09,0x44,0x7E,0x24,0x01,0x19,\ +0x12,0x3D,0xE0,0x12,0x36,0x4F,0x12,0x3D,0xF3,0x12,0x3B,0x6D,0xDA,0x3B,0x22,0xCA,\ +0xD8,0xCA,0x79,0x7C,0xDB,0x7E,0xF0,0xFF,0x12,0x3E,0xC9,0x70,0x09,0x7E,0xB3,0x0A,\ +0x6F,0xBE,0xB0,0xFF,0x68,0x05,0x7E,0xE0,0x01,0x80,0x02,0x6C,0xEE,0x7E,0xB3,0x0A,\ +0x62,0x70,0x08,0x4C,0xEE,0x68,0x04,0x6C,0xFF,0x80,0x23,0x4C,0xEE,0x78,0x1F,0x12,\ +0x3B,0xCD,0x7C,0xAB,0x4C,0xDD,0x78,0x0A,0x7C,0xBA,0x30,0xE7,0x05,0x7E,0xF0,0x01,\ +0x80,0x0C,0x4C,0xDD,0x68,0x08,0x7C,0xBA,0x30,0xE3,0x03,0x7E,0xF0,0x01,0x7A,0xE3,\ +0x0A,0x62,0xBE,0xF0,0x00,0x48,0x0C,0x30,0x24,0x04,0x4C,0xFF,0x78,0x05,0x7C,0xBF,\ +0x12,0x00,0x05,0xDA,0x79,0xDA,0xD8,0x22,0x7C,0xAB,0x7E,0x24,0x0A,0x66,0x4C,0xAA,\ +0x68,0x56,0x20,0x24,0x0A,0x7E,0x29,0xB0,0xB4,0x20,0x04,0xE4,0x7A,0x29,0xB0,0x7E,\ +0x29,0x30,0x7C,0xB3,0x54,0xF0,0x78,0x38,0x7E,0x39,0x20,0x4C,0x22,0x68,0x24,0xA5,\ +0xBB,0x00,0x07,0x74,0x01,0x7A,0x29,0xB0,0x80,0x26,0xA5,0xBB,0x01,0x03,0x20,0x24,\ +0x1F,0xA5,0xBA,0x03,0x07,0x74,0x08,0x7A,0x29,0xB0,0x80,0x14,0x74,0x02,0x7A,0x29,\ +0xB0,0x80,0x0D,0x0A,0x13,0x5E,0x14,0x00,0x0B,0x68,0x05,0x74,0x20,0x7A,0x29,0xB0,\ +0x0B,0x24,0x0B,0x34,0x1B,0xA0,0x78,0xAA,0x22,0x60,0x40,0x74,0x0A,0x7A,0xB3,0x08,\ +0x76,0x7E,0x73,0x08,0x7B,0xBE,0x70,0x19,0x28,0x06,0x74,0x0A,0x7A,0xB3,0x08,0x77,\ +0x74,0xC8,0x7A,0xB3,0x08,0x78,0x7E,0xB3,0x08,0x79,0xBE,0xB0,0xFF,0x50,0x05,0x04,\ +0x7A,0xB3,0x08,0x79,0x7E,0xB3,0x08,0x7A,0x70,0x09,0x7E,0x73,0x08,0x79,0xBE,0x70,\ +0x04,0x40,0x1B,0x74,0xA0,0x7A,0xB3,0x08,0x7A,0x80,0x13,0x7E,0xB3,0x08,0x7A,0xBE,\ +0xB0,0x00,0x28,0x05,0x14,0x7A,0xB3,0x08,0x7A,0xE4,0x7A,0xB3,0x08,0x79,0x22,0xCA,\ +0x79,0x7C,0x0B,0x7D,0x13,0x0A,0x40,0x7D,0xF4,0x2D,0xF1,0x7E,0xF9,0xA0,0x09,0x1F,\ +0x00,0x01,0x7E,0xF0,0x05,0xAC,0xF0,0x0A,0x2A,0x2D,0x27,0x3E,0x24,0x49,0x32,0x0B,\ +0x36,0x49,0x22,0x0B,0x40,0x0A,0xE1,0x2D,0xE7,0x3E,0xE4,0x49,0xDE,0x0B,0x36,0x2D,\ +0x2D,0x49,0xEE,0x0B,0x40,0x2D,0x3E,0xBD,0x23,0x50,0x0F,0x7A,0xF9,0x10,0x7D,0x34,\ +0x2D,0x31,0x19,0xA3,0x00,0x01,0x7D,0x32,0x80,0x00,0xDA,0x79,0x22,0x7C,0x17,0x6D,\ +0x33,0x7E,0xF7,0x08,0x58,0xBE,0xF4,0x00,0x0C,0x08,0x3C,0x23,0x0A,0x5B,0x7E,0x83,\ +0x08,0x66,0x7C,0x08,0x7E,0x29,0x90,0xAC,0x89,0x3E,0x44,0x2E,0x44,0x04,0x1A,0x7D,\ +0xF1,0x0B,0x48,0xE0,0x0B,0xF8,0xD0,0x9D,0xED,0xA9,0x35,0xD1,0x06,0x6E,0xE4,0xFF,\ +0xFF,0x0B,0xE4,0xBD,0xE3,0x28,0x02,0x7D,0x3E,0x0B,0x45,0x0B,0xF5,0xA5,0xD8,0xE1,\ +0x2D,0x15,0x0B,0x24,0xA5,0xD9,0xC7,0x22,0x7E,0x34,0x0A,0x61,0xE4,0x7E,0x24,0x00,\ +0x11,0x12,0x3E,0x77,0x74,0xFF,0x7A,0xB3,0x0A,0x6F,0x74,0xFF,0x7A,0xB3,0x0A,0x71,\ +0x7E,0x41,0x3E,0x7E,0x71,0x3F,0x7E,0x61,0x40,0xA2,0x0A,0xE4,0x33,0x7C,0x5B,0x7C,\ +0xB4,0x7E,0x40,0x01,0x12,0x39,0x00,0x7E,0x73,0x0E,0xA6,0x0A,0x17,0x2E,0x14,0x0E,\ +0x9C,0x7E,0x35,0x48,0x7E,0x25,0x4A,0x12,0x3D,0x8E,0xC2,0x2A,0x22,0x74,0xFF,0x7A,\ +0xB3,0x08,0x6E,0xE4,0x7A,0xB3,0x08,0x80,0xE4,0x7A,0xB3,0x08,0x6F,0xE4,0x7A,0xB3,\ +0x08,0x70,0x74,0xC8,0x7A,0xB3,0x08,0x6D,0x7E,0x34,0x04,0x0A,0x7E,0x24,0x00,0x08,\ +0x12,0x3D,0xE0,0x7E,0x34,0x04,0x12,0x7E,0x24,0x00,0x08,0x12,0x3D,0xE0,0x22,0x7E,\ +0xB3,0x08,0xA6,0x30,0xE2,0x26,0x7E,0x37,0x08,0xF3,0x4D,0x33,0x68,0x1E,0x7E,0xB3,\ +0x08,0x9A,0x60,0x06,0x7E,0xB3,0x08,0x78,0x60,0x12,0x7E,0xB3,0x09,0x3F,0xB4,0x01,\ +0x0B,0xE4,0x7A,0xB3,0x09,0x3F,0x74,0x01,0x7A,0xB3,0x09,0x3E,0x22,0x6C,0xAA,0x7E,\ +0xB3,0x08,0x6F,0xB4,0x01,0x0E,0x4E,0xA0,0x80,0x7E,0x37,0x08,0x5A,0x4D,0x33,0x78,\ +0x03,0x4E,0xA0,0x01,0x7E,0xB3,0x08,0x8C,0x60,0x03,0x4E,0xA0,0x02,0x7E,0xB3,0x08,\ +0x8D,0x60,0x03,0x4E,0xA0,0x08,0x7C,0xBA,0x22,0x6C,0xAA,0x6C,0x77,0x1A,0x27,0x09,\ +0x62,0x09,0xF3,0xA5,0xBE,0x01,0x06,0x74,0x01,0x7A,0xB3,0x08,0x8D,0xBE,0x60,0x01,\ +0x28,0x07,0xBE,0x60,0x05,0x50,0x02,0x0B,0xA0,0x0B,0x70,0xBE,0x70,0x05,0x48,0xDD,\ +0x7C,0xBA,0x22,0x12,0x0D,0x29,0x0A,0x0A,0x7E,0x54,0xBF,0xFF,0x9D,0x50,0x7A,0xA3,\ +0x02,0x3F,0xC2,0xF7,0x75,0x8E,0x40,0x7A,0xA1,0x8B,0xF5,0x8A,0x75,0xC3,0xFD,0xD2,\ +0xA9,0x22,0x75,0xC3,0xFD,0x75,0x8B,0x00,0x12,0x24,0x1C,0x22,0x20,0x13,0x0F,0x02,\ +0x43,0xB6,0x20,0x13,0x09,0x02,0x43,0xC2,0x20,0x13,0x03,0x02,0x43,0xD0,0x22,0x6C,\ +0x22,0x6C,0x00,0x6D,0x55,0x7E,0x1B,0x10,0x2D,0x50,0x0B,0x1C,0x23,0x1B,0x14,0xA9,\ +0x31,0xD1,0xF2,0x22,0x30,0x2B,0x24,0xC2,0xAF,0x12,0x24,0x1C,0x53,0xBC,0x7F,0x6D,\ +0x55,0x7A,0x57,0xFF,0x50,0x43,0xB9,0x01,0x53,0xB9,0xFE,0x75,0xBB,0x01,0xF5,0xD1,\ +0x7E,0xF8,0x0F,0x9B,0x7E,0xC4,0x46,0x57,0x02,0x40,0x02,0x22,0x60,0x0C,0x7E,0xB3,\ +0x08,0x83,0x44,0x02,0x7A,0xB3,0x08,0x83,0x80,0x06,0x74,0x01,0x7A,0xB3,0x08,0x83,\ +0x7E,0xB3,0x08,0x83,0xB4,0x03,0x05,0xE4,0x7A,0xB3,0x08,0x83,0x22,0x7D,0x13,0x7E,\ +0x73,0x08,0x66,0x1A,0x4B,0x1A,0x57,0xAD,0x54,0x7D,0x35,0x3E,0x34,0x7D,0x03,0x2E,\ +0x04,0x04,0x1A,0x1B,0x18,0x00,0x2E,0x34,0x06,0x12,0x1B,0x28,0x30,0x22,0x6C,0xAA,\ +0x7E,0x44,0x0A,0x66,0x74,0x09,0x7E,0x49,0x70,0x4C,0xA7,0x0B,0x44,0x14,0x78,0xF6,\ +0xBE,0xA0,0x08,0x78,0x03,0xE4,0x80,0x02,0x7C,0xBA,0x22,0xBE,0xB3,0x09,0x40,0x68,\ +0x14,0x7A,0xB3,0x09,0x40,0x64,0x01,0x7A,0xB3,0x09,0x3D,0xE4,0x7A,0xB3,0x09,0x3C,\ +0xE4,0x7A,0xB3,0x09,0x3B,0x22,0x7E,0xB3,0x08,0x9A,0x60,0x04,0x74,0x01,0x80,0x0E,\ +0x7E,0x73,0x08,0x6C,0xBE,0x70,0x0A,0x38,0x04,0x74,0x01,0x80,0x01,0xE4,0x22,0xCA,\ +0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7D,0x83,0x7D,0x92,0x7C,0x8B,0x7C,0xB3,0x7C,0x92,\ +0x12,0x38,0x9D,0xD0,0xD0,0xDA,0x3B,0x22,0x7C,0x04,0x7D,0x23,0x7E,0x61,0x43,0xAC,\ +0x6B,0x3E,0x34,0x2E,0x34,0x06,0x12,0x7E,0x31,0x43,0x12,0x3C,0x58,0x7C,0x40,0x22,\ +0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7F,0x60,0x7F,0x71,0x7E,0xB7,0x0A,0x90,0x12,\ +0x16,0xB3,0xD0,0xD0,0xDA,0x3B,0x22,0x80,0x10,0x1B,0x14,0x7D,0x02,0x7D,0x20,0x0B,\ +0x24,0x7E,0x09,0x10,0x7A,0x39,0x10,0x0B,0x34,0x4D,0x11,0x78,0xEC,0x22,0x7D,0x01,\ +0x7A,0x37,0x0A,0x07,0x7A,0x27,0x0A,0x09,0x7E,0x14,0x08,0xA6,0x7D,0x30,0x74,0x4D,\ +0x12,0x33,0x6C,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7D,0x83,0x7D,0x92,0x7C,\ +0x8B,0x12,0x15,0xCD,0xD0,0xD0,0xDA,0x3B,0x22,0x80,0x0F,0x14,0x7D,0x12,0x7D,0x21,\ +0x0B,0x24,0x7E,0x19,0xA0,0x7A,0x39,0xA0,0x0B,0x34,0x70,0xEF,0x22,0xE5,0xC2,0xF4,\ +0xF5,0xC2,0x00,0x00,0x22,0x75,0x9C,0x0B,0xD2,0xEA,0x43,0x87,0x02,0x00,0x00,0x22,\ +0x6D,0x11,0x80,0x0A,0xE4,0x7D,0x01,0x2D,0x03,0x7A,0x09,0xB0,0x0B,0x14,0xBD,0x21,\ +0x18,0xF2,0x22,0x7E,0x34,0x08,0xF3,0x7E,0x24,0x00,0x51,0x12,0x3D,0xE0,0x74,0x01,\ +0x7A,0xB3,0x09,0x3D,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,0x24,0xA6,0xD0,\ +0xD0,0xDA,0x3B,0x12,0x3B,0x9F,0x22,0xC0,0xD0,0xCA,0x2B,0x12,0x33,0x38,0xDA,0x2B,\ +0xD0,0xD0,0x22,0xBC,0xBA,0x50,0x01,0x04,0x22,0x9D,0x32,0xBE,0x34,0x00,0x00,0x08,\ +0x02,0x80,0x06,0x6E,0x34,0xFF,0xFF,0x0B,0x34,0x22,0xE4,0x6C,0xAA,0x1A,0x4B,0x19,\ +0xA4,0x09,0xF8,0x04,0xBE,0xB0,0x05,0x48,0xF4,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,\ +0x00,0x12,0x21,0x29,0xD0,0xD0,0xDA,0x3B,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,\ +0x12,0x1F,0x79,0xD0,0xD0,0xDA,0x3B,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,\ +0x24,0x3A,0xD0,0xD0,0xDA,0x3B,0x22,0x4D,0x22,0x68,0x09,0x7A,0x39,0xB0,0x0B,0x34,\ +0x1B,0x24,0x78,0xF7,0x22,0x7D,0x23,0x7E,0x34,0x04,0x12,0x7E,0x31,0x40,0x12,0x3C,\ +0x58,0x22,0x7E,0xB3,0x09,0x42,0xB4,0x01,0x04,0x74,0x01,0x80,0x01,0xE4,0x22,0x12,\ +0x3E,0xD8,0x60,0x05,0x74,0x05,0x12,0x00,0x05,0x22,0xBE,0xB0,0x00,0x28,0x01,0x14,\ +0x22,0xBE,0xB0,0xFF,0x50,0x01,0x04,0x22,0xE4,0x7A,0xB3,0x08,0x82,0x22,0xE4,0x7A,\ +0xB3,0x09,0x3C,0x22,0x7A,0xB3,0x08,0x93,0x22,0x7E,0xB3,0x08,0x61,0x22,0x7E,0xB3,\ +0x08,0x6B,0x22,0x7E,0xB3,0x09,0x42,0x22,0x7E,0xB3,0x09,0x3F,0x22,0x74,0xFF,0x22,\ +0x54,0x46,0x49,0x32,0x17,0x24,0x06,0x00,0x05,0x31,0x03,0x30,0x04,0x01,0x03,0x66,\ +0x00,0x00,0x00,0x00,0x00,0x06,0x7A,0x00,0x00,0x01,0x00,0x29,0xA3,0x39,0x5C,0xC6,\ +0x53,0x54,0x46,0x57,0x66,0x66,0x06,0x00,0xFC,0x12,0x21,0x79,0xBD,0xC9,0xDE,0xE3,\ +0x00,0x00,0x01,0x6E,0x36,0x00,0x00,0x00,0x00,0x00,0x82,0x14,0x11,0x00,0x00,0x00,\ +0x34,0xF2,0x50,0xF0,0x06,0x36,0xF9,0x3A,0x00,0x24,0x01,0x11,0x00,0xFE,0xF6,0xF5,\ +0x0C,0x1B,0x01,0xE0,0x03,0x20,0x00,0x00,0x00,0x00,0x04,0x03,0x58,0x00,0x64,0x50,\ +0x40,0xFF,0x37,0x00,0x00,0x40,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x1E,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x07,0x14,0x28,\ +0x04,0x00,0x02,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x08,0x32,0x64,0x50,0xA0,0x14,0x0A,0x14,0x00,0x05,0x01,0xE0,0x03,0x20,0x0A,0x10,\ +0x00,0x00,0x90,0xD6,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x02,\ +0x10,0x10,0x00,0x04,0x00,0x61,0x80,0x40,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,\ +0x0F,0x0F,0x0F,0x0F,0x1F,0x24,0x29,0x2E,0x3D,0x42,0x0E,0x00,0x28,0x28,0x0F,0x0F,\ +0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x24,0x61,0x40,0x09,0x08,0x07,\ +0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x00,0x01,0x02,0x03,0x04,0x05,0x06,\ +0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,0x13,0x14,0x00,0x00,\ +0x00,0x00,0x00,0x03,0x55,0x01,0x01,0x30,0x28,0x00,0x00,0x00,0x00,0x00,0x05,0xA0,\ +0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x1B,0xBD\ +} + + + +#ifdef ST_UPGRADE_BY_ISPID + +#define ISP_ID_OFFSET 0x43E7 +#define SITRONIX_ISP_ID {\ +0xAC, 0x39,\ +0xAD, 0x3A\ +} + +#define SITRONIX_DUMP1 {\ +0x02,0x00,0x9C,0x32,0x00,0xF5,0x35,0x22,0xC2,0x2B,0x22,0x11,0x42,0x12,0x3C,0x42,\ +0x01,0x12,0xDA,0xA8,0xDA,0x1B,0x7F,0xE1,0xA5,0xEC,0x32,0x19,0x64,0x47,0x32,0x23,\ +0x21,0x14,0x10,0x0D,0x0B,0x0B,0x0A,0x08,0x07,0x07,0x06,0x11,0x42,0x12,0x0F,0xCB,\ +0x01,0x12,0x32,0x11,0x42,0x12,0x31,0x57,0x01,0x12,0x32,0x11,0x42,0x12,0x3D,0xCD,\ +0x01,0x12,0x43,0xD0,0x18,0xDA,0x28,0xDA,0x38,0x7F,0x1E,0xA5,0xFC,0xCA,0x1B,0xCA,\ +0xA8,0x89,0x14,0x11,0x42,0x12,0x26,0x57,0x01,0x12,0x2C,0xBA,0x20,0xF7,0x0A,0x50,\ +0x03,0xA5,0xEF,0x22,0xBC,0xB7,0x38,0xF9,0x22,0x40,0x01,0xE4,0x22,0x6D,0x55,0x1B,\ +0x38,0x50,0x0B,0x35,0xA5,0xDB,0xF8,0x22,0xE5,0x47,0x7E,0xA0,0xFA,0xA4,0x7A,0x57,\ +0x02,0x0B,0x22,0x3E,0xFC,0x54,0x44,0x50,0x30,0x0C,0x07,0x01,0x02,0x00,0x00,0xFE,\ +0x06,0x06,0xFF,0xFF,0x08,0xA6,0x54,0x46,0x57,0x31,0x3E,0x44,0xE4,0xF5,0xA8,0x75,\ +0xBB,0x01,0x75,0xEA,0x07,0x75,0x46,0x55,0x7E,0xF8,0x0F,0x9B,0x75,0x84,0xFF,0x75,\ +0xB9,0x20,0x74,0xFF,0xF5,0xA2,0xF5,0xA4,0xF5,0xA3,0xF5,0xA5,0xE4,0xF5,0x87,0xF5,\ +0xA7,0xF5,0xA6,0xF5,0xAA,0xF5,0xA9,0xF5,0xC4,0xF5,0xD1,0xF5,0x89,0xF5,0xC3,0xF5,\ +0xC0,0xF5,0xE8,0xF5,0xC2,0xF5,0xB7,0xF5,0xB8,0xF5,0xF7,0xF5,0xF8,0xF5,0x8B,0xF5,\ +0x8D,0xF5,0x91,0xF5,0xC8,0xF5,0xC9,0xF5,0xE2,0x02,0x0A,0x31,0x7A,0x21,0x6F,0x7A,\ +0x41,0x71,0x7A,0x61,0x73,0x7A,0x71,0x74,0x7A,0xB1,0x75,0x7A,0x31,0x76,0x7E,0xB3,\ +0x08,0xCB,0xA5,0xDE,0x04,0x2E,0xB3,0x08,0xDB,0x7A,0xB1,0x78,0x9C,0x32,0xA5,0x0B,\ +0x7A,0x31,0x70,0x9C,0x54,0xA5,0x0D,0x7A,0x51,0x72,0x9F,0x44,0x9F,0x55,0x75,0x77,\ +0x01,0x7E,0xB1,0x77,0xBE,0xB1,0x70,0x28,0x03,0x02,0x01,0xA2,0x7D,0x14,0x9F,0x66,\ +0xE5,0x72,0x60,0x1A,0xA5,0xF9,0x0B,0x18,0x30,0xA5,0xEE,0x30,0xE7,0x02,0x6D,0x33,\ +0x6D,0x22,0x2F,0x61,0xE5,0x74,0x23,0x0A,0x5B,0x2D,0x15,0xA5,0xD9,0xE8,0x7F,0x06,\ +0x7E,0xB1,0x77,0x0A,0x5B,0x12,0x43,0x75,0x2F,0x40,0x2F,0x56,0xE5,0x73,0x23,0x0A,\ +0x5B,0x2D,0x45,0x7E,0xB1,0x78,0x0A,0x5B,0x7F,0x06,0x12,0x43,0x75,0x75,0xF0,0x08,\ +0x12,0x42,0x7B,0x7F,0x60,0xE5,0x6F,0x70,0x07,0xE5,0x77,0xB4,0x01,0x02,0x2F,0x56,\ +0xE5,0x76,0xBE,0xB1,0x75,0x78,0x16,0xE5,0x77,0xBE,0xB1,0x70,0x78,0x0F,0x7E,0xB1,\ +0x77,0x04,0x0A,0x5B,0x7F,0x06,0x12,0x43,0x75,0x2F,0x40,0x2F,0x56,0x05,0x77,0x02,\ +0x01,0x21,0x7F,0x04,0x7E,0x54,0x01,0x00,0x12,0x43,0x75,0x7F,0x10,0x7F,0x05,0x12,\ +0x3E,0x17,0x6D,0x00,0x7E,0x21,0x6F,0x9C,0x33,0x2F,0x10,0x9E,0x18,0x01,0x00,0x7D,\ +0x53,0x7A,0xB7,0x03,0xB8,0x22,0x7E,0x43,0x08,0x66,0xAC,0x42,0x0A,0x40,0x2D,0x42,\ +0x3E,0x44,0x2E,0x44,0x06,0x12,0xA5,0x09,0x9C,0x10,0xA5,0x0B,0x9C,0x32,0x22,0x7E,\ +0xB3,0x08,0x6B,0x14,0x60,0x07,0xA5,0xE8,0x04,0xBC,0xB1,0x40,0x0F,0xA5,0xE8,0x60,\ +0x02,0xA5,0x18,0xA5,0xE9,0x04,0xBC,0xB2,0x50,0x02,0xA5,0x09,0x22,0x49,0x10,0x00,\ +0x02,0x49,0x00,0x00,0x00,0x7A,0x0D,0x6B,0x7E,0xB3,0x08,0x6B,0xBE,0xB0,0x01,0x28,\ +0x58,0xA5,0xE9,0x9C,0xB0,0xB4,0x01,0x22,0x12,0x01,0xC6,0x7C,0xC1,0x7C,0xD3,0x7E,\ +0xE0,0x01,0x7E,0xF3,0x08,0x66,0x12,0x07,0xA3,0x7E,0x39,0xB0,0x60,0x0C,0x09,0x03,\ +0x00,0x01,0x2E,0x01,0x6B,0x7C,0x10,0x7A,0x05,0x6B,0x7E,0x0D,0x6B,0xA5,0xEB,0x9C,\ +0xB2,0xB4,0x01,0x22,0x12,0x01,0xC6,0x7C,0xC3,0x7C,0xD1,0x7E,0xE3,0x08,0x66,0x7E,\ +0xF0,0x01,0x12,0x07,0xA3,0x7E,0x39,0xB0,0x60,0x0C,0x09,0x23,0x00,0x01,0x2E,0x21,\ +0x6D,0x7C,0x32,0x7A,0x15,0x6D,0x7E,0x0D,0x6B,0x7E,0x23,0x08,0x66,0x12,0x01,0xDF,\ +0x7A,0x05,0x6B,0x7E,0x05,0x6D,0x7E,0x23,0x08,0x67,0x12,0x01,0xDF,0x7A,0x05,0x6D,\ +0x7E,0x01,0x6D,0x7E,0x13,0x08,0x66,0xAC,0x01,0x2E,0x11,0x6B,0x3E,0x04,0x2E,0x04,\ +0x06,0x12,0x7A,0x05,0x69,0x7E,0x15,0x6B,0x7E,0x25,0x6D,0x7E,0x60,0x01,0x7E,0x73,\ +0x08,0x66,0x7E,0x45,0x69,0x7E,0xB3,0x08,0x66,0x14,0x12,0x00,0xEC,0x7A,0x55,0x14,\ +0x7E,0x15,0x6D,0x7E,0x25,0x6B,0x7E,0x63,0x08,0x66,0x7E,0x70,0x01,0x7E,0x45,0x69,\ +0x7E,0xB3,0x08,0x67,0x14,0x12,0x00,0xEC,0x7A,0x55,0x16,0x22,0xF5,0x60,0x7E,0x04,\ +0x08,0x22,0x7A,0x05,0x67,0xE4,0xF5,0x65,0xF5,0x66,0x7E,0x04,0x0B,0x8A,0x7A,0x05,\ +0x61,0x7E,0x00,0x01,0x7E,0xB3,0x08,0x7D,0x60,0x03,0x7E,0x00,0x03,0x7E,0x57,0x08,\ +0x5E,0x45,0xF0,0x60,0x0C,0x7E,0xB3,0x08,0xE1,0x5E,0xB0,0x80,0x60,0x03,0x7E,0x00,\ +0x04,0x7E,0xB3,0x08,0x76,0x60,0x02,0xA5,0x08,0x7A,0x01,0x63,0xE5,0x60,0x70,0x03,\ +0x02,0x03,0xB4,0xF5,0x64,0x7E,0x00,0x05,0xBE,0x01,0x65,0x38,0x03,0x02,0x03,0xB4,\ +0x7E,0x05,0x61,0x09,0xA0,0x00,0x04,0x09,0xB0,0x00,0x09,0x70,0x73,0xBE,0xA1,0x63,\ +0x40,0x6E,0x05,0x66,0xBE,0xA3,0x08,0x7C,0x28,0x04,0x7A,0xA3,0x08,0x7C,0xBE,0xA3,\ +0x08,0xCC,0x40,0x07,0x7E,0xB3,0x08,0xA6,0x30,0xE3,0x55,0x7E,0x05,0x61,0x12,0x01,\ +0xFD,0x7E,0x05,0x61,0x09,0x70,0x00,0x04,0x0A,0x37,0x7E,0x15,0x14,0x7E,0x25,0x16,\ +0x7E,0xB3,0x08,0x62,0x60,0x06,0x7E,0x15,0x16,0x7E,0x25,0x14,0xE5,0x65,0xC4,0x7E,\ +0x61,0x60,0x9E,0x61,0x64,0x4C,0x6B,0x0A,0x36,0x7E,0x05,0x67,0x59,0x10,0x00,0x00,\ +0x59,0x20,0x00,0x02,0x59,0x30,0x00,0x04,0x2E,0x04,0x00,0x06,0x7A,0x05,0x67,0x7E,\ +0x07,0x03,0xB8,0x7E,0x31,0x65,0x0A,0x13,0x2D,0x11,0x59,0x01,0x03,0xAE,0x05,0x65,\ +0x7E,0x05,0x61,0x2E,0x04,0x00,0x0A,0x7A,0x05,0x61,0x15,0x64,0x7E,0xB1,0x64,0x60,\ +0x03,0x02,0x03,0x15,0x7E,0xB1,0x66,0x60,0x0C,0x7E,0xB3,0x08,0x82,0x7E,0xA0,0xFF,\ +0x12,0x3E,0x23,0x80,0x06,0x7E,0xB3,0x08,0x82,0x1E,0xB0,0x7A,0xB3,0x08,0x82,0xE5,\ +0x65,0x0A,0x3B,0x22,0x7E,0x11,0x09,0xA5,0x09,0x9E,0x11,0x08,0x7E,0xB3,0x08,0x74,\ +0xBE,0xB0,0x80,0x50,0x05,0xE4,0xF5,0x0C,0xF5,0x0D,0x7E,0x84,0x0B,0x8A,0x6C,0x22,\ +0x7E,0x01,0x0B,0xA5,0x08,0xA5,0x18,0xA5,0xB8,0x00,0x03,0x02,0x04,0x7A,0x49,0x48,\ +0x00,0x00,0x49,0x68,0x00,0x02,0x49,0x78,0x00,0x05,0x7E,0x35,0x08,0x7C,0xBC,0x04,\ +0xBC,0xDB,0x50,0x06,0x9E,0x61,0x0C,0x2E,0x71,0x0D,0x7C,0xBD,0x04,0xBE,0xB1,0x0A,\ +0x40,0x51,0xBC,0x6F,0x38,0x4D,0xBC,0x7E,0x40,0x49,0x09,0x38,0x00,0x04,0x49,0x28,\ +0x00,0x07,0xA5,0xBA,0x00,0x2A,0xA5,0xEB,0xA5,0x29,0x50,0x02,0x74,0xFF,0xA5,0xFB,\ +0xBE,0x81,0x08,0x28,0x03,0x7E,0x81,0x08,0xBE,0x91,0x09,0x50,0x03,0x7E,0x91,0x09,\ +0xBE,0x41,0x08,0x28,0x03,0x7E,0x41,0x08,0xBE,0x51,0x09,0x50,0x03,0x7E,0x51,0x09,\ +0x59,0x48,0x00,0x00,0x59,0x28,0x00,0x07,0x19,0x38,0x00,0x04,0x19,0x28,0x00,0x09,\ +0x7E,0x20,0x01,0x2E,0x84,0x00,0x0A,0x02,0x03,0xF5,0xA5,0xBA,0x00,0x31,0x7E,0xA1,\ +0x0B,0xBE,0xA0,0x0A,0x50,0x29,0x7E,0x55,0x08,0x59,0x58,0x00,0x00,0x59,0x58,0x00,\ +0x05,0xE5,0x0A,0x19,0xB8,0x00,0x02,0x19,0xB8,0x00,0x03,0x19,0x18,0x00,0x04,0xE4,\ +0x19,0xB8,0x00,0x08,0x19,0xB8,0x00,0x09,0x14,0x19,0xB8,0x00,0x07,0x05,0x0B,0x22,\ +0x60,0x2A,0x7E,0x04,0x0B,0x8A,0x49,0x10,0x00,0x07,0xBE,0x20,0xFF,0x68,0x0E,0x59,\ +0x10,0x00,0x05,0x09,0x20,0x00,0x03,0xA5,0x0A,0x19,0x20,0x00,0x03,0x7E,0x14,0xFF,\ +0x00,0x59,0x10,0x00,0x07,0x2E,0x04,0x00,0x0A,0xD5,0xE0,0xDA,0x22,0x6D,0x00,0x49,\ +0x5D,0x00,0x06,0x2D,0x05,0x49,0x5D,0x00,0x08,0x2D,0x05,0xBE,0x05,0x12,0x28,0x15,\ +0x6D,0x00,0x49,0x5D,0x00,0x02,0x2D,0x05,0x49,0x5D,0x00,0x00,0x2D,0x05,0xBE,0x05,\ +0x12,0x28,0x02,0xD3,0x22,0xC3,0x22,0x7E,0xD4,0x00,0x80,0x7E,0xA3,0x08,0x66,0x7A,\ +0xA1,0x10,0x7E,0xB3,0x08,0x67,0x7A,0xB1,0x11,0x7E,0x24,0x06,0x12,0xAC,0xAB,0x9D,\ +0x33,0x0B,0x28,0x00,0x7D,0x13,0x12,0x43,0x60,0x7D,0x30,0x0B,0x25,0x1B,0x54,0xBE,\ +0x54,0x00,0x00,0x78,0xEC,0x7E,0x07,0x08,0x84,0x7E,0x53,0x08,0xE1,0x5E,0x50,0x7F,\ +0x7E,0xB3,0x08,0x78,0x60,0x09,0x7E,0xB3,0x08,0xA6,0x30,0xE1,0x02,0x6D,0x00,0xBE,\ +0x04,0x00,0x00,0x68,0x23,0x7C,0xB5,0x60,0x1F,0x7E,0x33,0x08,0x90,0x7E,0xA0,0x06,\ +0x12,0x43,0x84,0x7C,0x35,0x7E,0xA0,0x05,0x12,0x43,0x84,0x7E,0x13,0x08,0xA7,0x0A,\ +0x01,0x9D,0x01,0x7A,0x05,0x12,0x80,0x31,0x7D,0x03,0x1E,0x04,0x7E,0x33,0x08,0xA7,\ +0x0A,0x13,0x12,0x43,0x60,0x7E,0x53,0x08,0xA8,0x0A,0x25,0x12,0x43,0x67,0x7A,0x05,\ +0x12,0x7E,0xB3,0x08,0x93,0x54,0x09,0x60,0x10,0x7E,0x13,0x08,0xA7,0x30,0xE3,0x04,\ +0x7E,0x13,0x08,0xE3,0x0A,0x01,0x7A,0x05,0x12,0x1E,0x04,0x7A,0x05,0x14,0x7E,0x83,\ +0x08,0x7D,0xBE,0x35,0x12,0x38,0x0A,0x7E,0x57,0x08,0x5C,0xBE,0x54,0x00,0x00,0x68,\ +0x08,0x74,0x0A,0x7A,0xB3,0x08,0x7E,0x80,0x14,0x7E,0xB3,0x08,0xA6,0x20,0xE0,0x0D,\ +0x7E,0xB3,0x08,0xE3,0x0A,0x5B,0xBD,0x35,0x28,0x03,0x7E,0x80,0x14,0x7E,0xB3,0x08,\ +0x7E,0x60,0x02,0x9C,0x88,0x7E,0xB3,0x08,0x78,0x60,0x22,0x9C,0x88,0x7E,0xB3,0x08,\ +0xA6,0x20,0xE4,0x19,0x7E,0xB3,0x08,0x77,0x60,0x13,0x7E,0x05,0x12,0x7E,0x14,0x00,\ +0x03,0xAD,0x01,0x1E,0x14,0x7A,0x15,0x12,0x1E,0x14,0x7A,0x15,0x14,0xBE,0x80,0x00,\ +0x68,0x10,0x1B,0x80,0x7E,0x13,0x08,0xE3,0x0A,0x01,0x7A,0x05,0x12,0x1E,0x04,0x7A,\ +0x05,0x14,0x7A,0x83,0x08,0x7D,0x75,0x0B,0x00,0x7E,0xC4,0x06,0x12,0x90,0x0B,0x36,\ +0x7E,0x31,0x10,0x3E,0x30,0x12,0x43,0x92,0x7D,0x3C,0x7E,0x24,0x0B,0x60,0x7E,0x31,\ +0x10,0x3E,0x30,0x12,0x43,0x99,0x7D,0xC3,0x75,0x0A,0x00,0x7E,0xB4,0x0B,0x36,0x75,\ +0x08,0xFF,0x6D,0x55,0x59,0x5D,0x00,0x06,0x59,0x5D,0x00,0x08,0x75,0x0E,0x00,0x75,\ +0x17,0x00,0x6D,0x00,0x7E,0xB1,0x0A,0x04,0xBE,0xB1,0x11,0x68,0x0A,0x0B,0xC8,0x00,\ +0x0B,0xC5,0x6D,0x11,0x12,0x43,0x60,0x59,0x0D,0x00,0x04,0x7D,0x20,0x49,0x0B,0x00,\ +0x2A,0x6D,0x11,0x12,0x43,0x60,0x59,0x0D,0x00,0x00,0x7D,0x30,0x0B,0xB8,0x00,0x6D,\ +0x11,0x12,0x43,0x60,0x59,0x0D,0x00,0x02,0x7D,0x40,0x2D,0x23,0x2D,0x24,0xBE,0x25,\ +0x12,0x28,0x1A,0xBE,0x35,0x14,0x28,0x15,0x85,0x17,0x09,0xE5,0x08,0x04,0x70,0x2C,\ +0x85,0x17,0x08,0x12,0x04,0xDD,0x50,0x24,0x75,0x0E,0x01,0x80,0x1F,0xE5,0x08,0x04,\ +0x60,0x1A,0x75,0x0F,0x00,0x12,0x04,0xDD,0x50,0x03,0x75,0x0F,0x01,0x85,0x0E,0x0C,\ +0x85,0x0F,0x0D,0x12,0x03,0xD4,0x75,0x0E,0x00,0x75,0x08,0xFF,0x49,0x5D,0x00,0x02,\ +0x59,0x5D,0x00,0x06,0x49,0x5D,0x00,0x00,0x59,0x5D,0x00,0x08,0x1B,0xB8,0x50,0x49,\ +0x5D,0x00,0x04,0x59,0x5B,0x00,0x2A,0x0B,0xB5,0x05,0x17,0x7E,0x01,0x17,0xBE,0x01,\ +0x10,0x68,0x03,0x02,0x06,0x62,0xE5,0x08,0x04,0x60,0x09,0x85,0x0E,0x0C,0x75,0x0D,\ +0x00,0x12,0x03,0xD4,0xE5,0x0B,0x12,0x04,0xB0,0x05,0x0A,0x7E,0x01,0x0A,0xBE,0x01,\ +0x11,0x68,0x03,0x02,0x06,0x4B,0xE5,0x0B,0x70,0x0D,0x7E,0xB3,0x08,0x7E,0x60,0x05,\ +0x14,0x7A,0xB3,0x08,0x7E,0x80,0x09,0x7E,0xB3,0x08,0xE2,0x60,0x03,0x12,0x08,0xE7,\ +0xE5,0x0B,0x7A,0xB3,0x08,0x6B,0x12,0x30,0x10,0x7E,0xB3,0x08,0x6B,0x12,0x02,0xCC,\ +0x7A,0xB3,0x08,0x60,0x7E,0xB3,0x08,0xA6,0x5E,0xB0,0x40,0x60,0x12,0x7E,0xB3,0x08,\ +0x6F,0xBE,0xB0,0x02,0x40,0x09,0xE4,0x7A,0xB3,0x08,0x60,0x7A,0xB3,0x08,0x82,0x22,\ +0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,0x05,0x07,0xD0,0xD0,0xDA,0x3B,0x22,0x49,\ +0x03,0x00,0x00,0x49,0x13,0x00,0x02,0x7E,0xB0,0x01,0x4C,0x88,0x68,0x14,0x19,0xB2,\ +0x00,0x09,0x59,0x02,0x00,0x00,0x59,0x12,0x00,0x02,0x2E,0x24,0x00,0x0A,0x1B,0x80,\ +0x80,0xE8,0x22,0x3E,0xE0,0x3E,0xF0,0x7E,0x84,0x0B,0x36,0x7E,0x94,0x0B,0xEE,0x6D,\ +0xCC,0x7C,0x7C,0x7D,0x24,0x6D,0x00,0x6D,0x11,0x7E,0x54,0xFF,0xFF,0x6C,0x66,0x0B,\ +0x28,0xB0,0x6D,0xAA,0xBD,0xBA,0x58,0x02,0x6D,0xBB,0xBD,0xB5,0x08,0x05,0x7D,0x5B,\ +0x7A,0x99,0x60,0x2F,0x05,0x0A,0xAF,0x2D,0x2A,0xA5,0x0E,0xBC,0x6D,0x40,0xE0,0xA5,\ +0xEA,0x54,0x80,0xA5,0x48,0xA5,0x49,0x60,0x04,0x7E,0x14,0x7F,0xFF,0xBD,0xC1,0x38,\ +0x02,0x7D,0xC1,0x1B,0x88,0x10,0x0B,0x85,0x0A,0x0E,0x2D,0x40,0x0B,0x94,0xA5,0xDF,\ +0xB2,0x7E,0x54,0x80,0x01,0x1B,0x88,0x50,0x7E,0x94,0x0B,0xEE,0x7E,0xA4,0x0C,0x04,\ +0x7E,0x84,0x0B,0x36,0x7D,0x0C,0x7E,0x33,0x08,0xE2,0x7E,0xA0,0x08,0x12,0x43,0x84,\ +0x7E,0x14,0x00,0x1E,0x12,0x43,0x60,0x7D,0xC0,0x6D,0xBB,0x6D,0x77,0x6D,0x44,0x0B,\ +0xC0,0x6C,0x77,0x0B,0x88,0x20,0x0B,0x85,0x4C,0x99,0x78,0x2F,0xBD,0xB2,0x18,0x04,\ +0x7D,0xB2,0x7C,0x67,0x7D,0x5B,0x9D,0x5C,0xBD,0x25,0x58,0x32,0x7E,0x90,0x01,0x7D,\ +0x72,0xBE,0x80,0x04,0x50,0x28,0x0B,0x80,0x19,0x6A,0x00,0x00,0x0A,0x56,0x2D,0x59,\ +0x7E,0x59,0xB0,0x19,0xBA,0x00,0x01,0x0B,0xA5,0x80,0x13,0x7D,0x07,0x12,0x43,0x67,\ +0x7D,0x70,0x2D,0x0C,0xBD,0x20,0x28,0x06,0x6C,0x99,0x7D,0xB2,0x7C,0x67,0xA5,0x0F,\ +0xBC,0x7C,0x40,0xAF,0x7E,0x34,0x0C,0x03,0x7A,0x39,0x80,0x22,0x7E,0xB1,0x0B,0x7E,\ +0xA0,0x0A,0xAC,0xAB,0x7D,0xE5,0x2E,0xE4,0x0B,0x8A,0x09,0xBF,0x00,0x04,0x7E,0xA1,\ +0x0E,0x8C,0xBA,0x7C,0x5B,0x7E,0x41,0x0E,0x0B,0x38,0x50,0x0B,0x35,0x4C,0x22,0x78,\ +0x02,0xC5,0xF0,0x09,0x3F,0x00,0x00,0x2C,0x3A,0x19,0x3E,0x00,0x00,0x19,0x3E,0x00,\ +0x01,0x09,0x3F,0x00,0x02,0x2C,0x3B,0x19,0x3E,0x00,0x02,0x19,0x3E,0x00,0x03,0x19,\ +0x5E,0x00,0x04,0x6C,0x33,0x19,0x3E,0x00,0x09,0xA5,0x0B,0x19,0x3E,0x00,0x08,0x2E,\ +0xE4,0x00,0x0A,0xA5,0xDC,0xC2,0x22,0x7E,0xB1,0x0B,0x60,0x05,0xBE,0xB0,0x06,0x28,\ +0x01,0x22,0x7E,0xE4,0x0B,0x8A,0x6D,0xFF,0x7D,0xDE,0x7E,0x71,0x0B,0x09,0xBE,0x00,\ +0x09,0x70,0x2E,0x49,0x5E,0x00,0x00,0x9C,0xBA,0xBE,0xB0,0x03,0x50,0x0B,0x49,0x5E,\ +0x00,0x02,0x9C,0xBA,0xBE,0xB0,0x03,0x40,0x18,0x09,0xBE,0x00,0x04,0xBE,0xB3,0x08,\ +0xCC,0x50,0x0E,0x4D,0xFF,0x68,0x08,0x09,0xAF,0x00,0x04,0xBC,0xAB,0x50,0x02,0x7D,\ +0xFE,0x2E,0xE4,0x00,0x0A,0xA5,0xDF,0xC5,0x4D,0xFF,0x78,0x01,0x22,0x75,0x0A,0x00,\ +0x7E,0x71,0x0B,0x09,0xBD,0x00,0x09,0x70,0x2A,0xBD,0xDF,0x68,0x26,0x49,0x0D,0x00,\ +0x00,0x49,0x1F,0x00,0x00,0xBC,0x03,0x38,0x07,0xBC,0x12,0x40,0x03,0x43,0x0A,0x01,\ +0x49,0x0D,0x00,0x02,0x49,0x1F,0x00,0x02,0xBC,0x03,0x38,0x07,0xBC,0x12,0x40,0x03,\ +0x43,0x0A,0x02,0x2E,0xD4,0x00,0x0A,0xA5,0xDF,0xC9,0x49,0x0F,0x00,0x00,0x49,0x1F,\ +0x00,0x02,0x9C,0x10,0xA5,0x09,0x9C,0x32,0xA5,0x0B,0x7A,0x11,0x0C,0x7A,0x31,0x0D,\ +0x0A,0xD0,0x7E,0xB3,0x08,0x66,0xAC,0x2B,0x2D,0xD1,0x3E,0xD4,0x2E,0xD4,0x06,0x12,\ +0x7D,0x3F,0x7D,0x2E,0x7E,0x80,0x04,0x12,0x07,0x7F,0x75,0x0E,0x01,0x7E,0xB1,0x0D,\ +0xBE,0xB0,0x04,0x40,0x2D,0x7E,0xB1,0x0A,0x5E,0xB0,0x02,0x70,0x25,0x7D,0x4D,0x7E,\ +0xC1,0x0D,0x7E,0xD1,0x0C,0x7E,0xE3,0x08,0x66,0x7E,0xF0,0x01,0x12,0x07,0xA3,0x7E,\ +0x39,0xB0,0x7A,0xB1,0x0E,0x0B,0x34,0xBE,0xB0,0x01,0x28,0x06,0x7E,0x20,0x00,0x12,\ +0x08,0x8C,0x7E,0xB1,0x0C,0xBE,0xB0,0x04,0x40,0x2D,0x7E,0xB1,0x0A,0x5E,0xB0,0x01,\ +0x70,0x25,0x7D,0x4D,0x7E,0x65,0x0C,0x7E,0xE0,0x01,0x7E,0xF3,0x08,0x66,0x12,0x07,\ +0xA3,0x7E,0x39,0xB0,0x7A,0xB1,0x0F,0x0B,0x34,0xBE,0xB1,0x0E,0x28,0x09,0x85,0x0F,\ +0x0E,0x7E,0x20,0x01,0x12,0x08,0x8C,0x7E,0xB1,0x0E,0xBE,0xB0,0x01,0x28,0x11,0x7E,\ +0xA0,0x01,0x19,0xAF,0x00,0x08,0x19,0xAF,0x00,0x09,0x2E,0xB1,0x0B,0x7A,0xB1,0x0B,\ +0x22,0x12,0x0C,0xF3,0x12,0x0A,0xF4,0x7D,0x56,0xA2,0xF1,0x92,0x18,0x30,0xF0,0x02,\ +0xF5,0xF1,0x43,0xF1,0x80,0x12,0x0C,0xFD,0x7E,0x34,0x0E,0x5E,0x7E,0x30,0x1F,0x12,\ +0x00,0x6D,0x12,0x24,0x1C,0xD2,0xAF,0x12,0x0C,0xCD,0x75,0xBB,0x11,0x12,0x27,0x2D,\ +0x40,0xE6,0x20,0x13,0xF5,0xA2,0x09,0x12,0x12,0x44,0xB4,0x02,0x21,0x30,0x11,0x07,\ +0x12,0x37,0x87,0x50,0x16,0x80,0x17,0x12,0x0D,0x4A,0x60,0x0F,0x54,0x02,0x44,0xC8,\ +0xC2,0xE5,0xA2,0x09,0x92,0xE4,0x12,0x34,0x4A,0xD2,0x29,0x12,0x0F,0xE3,0x12,0x0F,\ +0xD5,0x20,0x11,0x4B,0x12,0x38,0x22,0x12,0x31,0xD1,0x7E,0x01,0xA8,0xC2,0xAF,0x20,\ +0x2B,0x3A,0xA2,0x09,0x12,0x12,0x44,0xBE,0xB0,0x01,0x68,0x15,0xBE,0xB0,0x02,0x68,\ +0x2B,0x20,0x19,0x28,0x85,0x5B,0x9C,0x7A,0x01,0xA8,0x43,0x87,0x02,0x00,0x00,0x80,\ +0x1E,0xB4,0x01,0x18,0x20,0x1A,0x15,0x80,0x03,0x20,0x1B,0x10,0x53,0x9C,0xFD,0x43,\ +0x9C,0x01,0x7A,0x01,0xA8,0x43,0x87,0x01,0x00,0x00,0x80,0x03,0x7A,0x01,0xA8,0x02,\ +0x0A,0x5A,0x74,0x62,0xF5,0x45,0x12,0x22,0xE0,0xD2,0x13,0x22,0x74,0x72,0x80,0xF4,\ +0x74,0x32,0x80,0xF0,0x75,0xC1,0x24,0xC2,0x13,0x7E,0x18,0x0E,0x9C,0x7A,0x1F,0x02,\ +0x01,0xC2,0x16,0x12,0x37,0x7F,0x12,0x26,0x11,0x12,0x00,0x08,0x12,0x23,0x76,0xF5,\ +0x4D,0x6D,0x66,0x90,0x43,0xED,0xE4,0x93,0xBE,0xB0,0x00,0x68,0x07,0x12,0x27,0xB0,\ +0xD2,0x2B,0x80,0xC5,0x7E,0x1C,0x42,0x50,0x29,0xB1,0x00,0x04,0xB4,0x01,0xBD,0x7E,\ +0x14,0x01,0x8E,0x12,0x3C,0x61,0x0B,0x1A,0x10,0xBD,0x51,0x78,0xAF,0x12,0x0C,0x0C,\ +0x40,0xA0,0xE5,0xE1,0xB4,0x03,0xA9,0x75,0xD0,0x00,0x7E,0x73,0x0E,0xA5,0x0A,0x37,\ +0x2E,0x34,0x0E,0xA1,0x09,0xB3,0xFF,0xFF,0xB4,0x00,0x87,0x7E,0x24,0x00,0x08,0x7E,\ +0x30,0x08,0x12,0x3C,0x52,0x75,0xD0,0x08,0xA5,0xEF,0xA2,0xE4,0xE5,0xB9,0x92,0xE4,\ +0xF5,0xB9,0x7A,0x11,0x99,0x12,0x0B,0xD7,0x7A,0x41,0x9E,0x7A,0x51,0x9F,0x7C,0xA6,\ +0x7C,0xB0,0x75,0xD0,0x00,0x20,0xE0,0x3D,0x7E,0x34,0x43,0xF0,0x7E,0x24,0x00,0xFF,\ +0x0B,0x1A,0x00,0xBE,0x04,0x54,0x52,0x78,0x39,0x69,0x11,0x00,0x02,0xBE,0x14,0x49,\ +0x4D,0x78,0x2F,0x69,0x01,0x00,0x05,0x69,0x11,0x00,0x07,0xE5,0x9E,0x54,0xC0,0x5E,\ +0x00,0x3F,0xA5,0x48,0xF5,0x9E,0xA5,0xEB,0x7E,0x70,0x1F,0x12,0x00,0x5A,0xF5,0x9F,\ +0x7C,0x31,0x12,0x0B,0xD7,0x12,0x0C,0x7B,0x12,0x23,0x9A,0x12,0x0B,0xE4,0x75,0xEB,\ +0x0A,0x22,0x74,0x22,0x02,0x0A,0xE4,0x43,0xEA,0x80,0x7A,0x21,0xEC,0x7A,0x31,0xED,\ +0x53,0xEA,0x7F,0x22,0x75,0x8B,0x3A,0x75,0x8A,0x23,0x75,0xC3,0xFD,0x75,0x8E,0x40,\ +0x75,0x9A,0x03,0x7E,0x01,0x9B,0x43,0x8B,0x80,0xA9,0x31,0xC3,0xFC,0xE5,0x9B,0x9C,\ +0xB0,0x75,0xF0,0x08,0x84,0xF4,0x04,0x7A,0xB3,0x02,0x07,0x22,0x7E,0x1C,0x3F,0x00,\ +0x29,0x31,0x00,0x08,0xBE,0x30,0x00,0x68,0x60,0xBE,0x30,0xFE,0x38,0x5B,0x12,0x3C,\ +0x5F,0x0B,0x1A,0x10,0xBD,0x51,0x78,0x51,0x7E,0x30,0x00,0x7E,0x24,0x0E,0x9C,0x90,\ +0x3F,0x00,0x12,0x3C,0x4C,0x7E,0x57,0x0E,0xA0,0xBE,0xA0,0x66,0x40,0x3B,0xBE,0xB0,\ +0x66,0x38,0x36,0x12,0x0C,0xC2,0x09,0xB3,0x00,0x07,0x60,0x08,0x09,0xB3,0x00,0x09,\ +0xA2,0xE5,0x40,0x25,0x7E,0x73,0x0E,0xAB,0x0A,0x37,0x2E,0x34,0x0E,0x9C,0x0B,0x38,\ +0x60,0x09,0xB3,0x00,0x02,0xB4,0x01,0x11,0x09,0xB3,0x00,0x03,0xB4,0x01,0x0A,0x09,\ +0xB3,0x00,0x0B,0x7A,0xB3,0x02,0x40,0xC3,0x22,0xD3,0x22,0x12,0x0C,0xC2,0x49,0x03,\ +0x00,0x01,0x49,0x13,0x00,0x03,0x7A,0x0D,0x48,0x09,0xB3,0x00,0x09,0xA2,0xE3,0x92,\ +0x17,0x33,0x92,0x0A,0x49,0x03,0x00,0x05,0x49,0x13,0x00,0x07,0x6C,0x22,0x7A,0x0D,\ +0x3E,0x85,0x3E,0x42,0x85,0x3F,0x43,0x20,0x0A,0x06,0x85,0x3F,0x42,0x85,0x3E,0x43,\ +0x85,0x43,0x44,0x7E,0x73,0x0E,0xAB,0x0A,0x37,0x09,0xB3,0x0E,0xA9,0x7A,0xB3,0x02,\ +0x09,0x22,0x7E,0x73,0x0E,0xA7,0x0A,0x37,0x2E,0x34,0x0E,0x9C,0x22,0x12,0x38,0x0F,\ +0x20,0x13,0x1F,0x12,0x3C,0x23,0x12,0x0E,0xD9,0x12,0x27,0xD9,0x12,0x29,0x80,0x20,\ +0x11,0x06,0x12,0x3B,0x28,0x75,0x35,0xFF,0x12,0x31,0x1A,0x74,0x00,0xF5,0x45,0x12,\ +0x22,0xE0,0x22,0x85,0x80,0xA4,0x85,0x90,0xA5,0x12,0x0D,0x1C,0x22,0x74,0x01,0x30,\ +0x83,0x0B,0x30,0x91,0x12,0x04,0xC2,0x90,0x30,0x91,0x0C,0x80,0x09,0x30,0x92,0x07,\ +0x04,0xC2,0x91,0x30,0x92,0x01,0x04,0x7A,0xB3,0x02,0x08,0x22,0x74,0x01,0x20,0x83,\ +0x02,0x74,0x02,0x42,0xA5,0xF4,0x52,0xA3,0x22,0x7E,0x54,0x5B,0x8D,0x22,0x7E,0x13,\ +0x02,0x1E,0x0A,0x01,0x7E,0x70,0x00,0x7E,0x57,0x02,0x1C,0xBD,0x50,0x40,0x0A,0xA5,\ +0x0F,0x3E,0x04,0xBD,0x50,0x40,0x02,0xA5,0x0F,0x22,0x05,0x4E,0xC2,0x26,0x20,0x09,\ +0x00,0x6D,0x00,0x7A,0x07,0x02,0x1C,0x12,0x12,0x5B,0xF5,0x55,0x7E,0x34,0x02,0x4C,\ +0x7E,0x30,0x06,0x12,0x00,0x6D,0x75,0x3D,0x03,0x74,0x48,0xC2,0xE5,0xA2,0x09,0x92,\ +0xE4,0x12,0x2C,0x7A,0xC2,0x1F,0x6D,0x55,0xBE,0x57,0x02,0x49,0x68,0x14,0xBE,0x37,\ +0x02,0x49,0x40,0x0E,0xD2,0x1F,0xE5,0x55,0x23,0x0A,0x5B,0x2E,0x54,0x02,0x4C,0x1B,\ +0x58,0x30,0x30,0x23,0x0E,0xC2,0x23,0x6D,0x55,0x7A,0x57,0x02,0x1C,0x74,0x02,0x7A,\ +0xB3,0x02,0x4B,0x12,0x12,0x74,0x12,0x0D,0xC9,0x50,0x03,0x12,0x0E,0x99,0x20,0x1F,\ +0x16,0x30,0x18,0x05,0xE5,0x55,0xB5,0x53,0x0E,0x12,0x0D,0x2E,0x7C,0xB7,0x60,0x04,\ +0x14,0x74,0x02,0x22,0x74,0x01,0x22,0xE4,0x22,0x12,0x0E,0x17,0x12,0x0E,0x75,0x7E,\ +0xB3,0x02,0x4B,0x60,0x07,0x14,0x7A,0xB3,0x02,0x4B,0xC3,0x22,0xC2,0x1E,0xC2,0x1D,\ +0x7E,0x13,0x02,0x1E,0x0A,0x01,0x7E,0x30,0x06,0x7E,0x34,0x02,0x4C,0x7E,0x20,0x00,\ +0x0B,0x38,0x50,0xBD,0x50,0x28,0x17,0xD2,0x1D,0xBE,0x21,0x55,0x78,0x10,0xD2,0x1E,\ +0x7E,0x51,0x55,0x0A,0x25,0x2E,0x24,0x03,0xA8,0x74,0x06,0x7A,0x29,0xB0,0x0B,0x35,\ +0xA5,0x0A,0xA5,0xDB,0xDB,0xD3,0x22,0x7E,0xA4,0x02,0xA0,0x20,0x09,0x04,0x7E,0xA4,\ +0x02,0x58,0x7E,0x40,0x00,0x7E,0x44,0x02,0x4C,0x7E,0xF1,0x44,0x3E,0xF0,0x0A,0x8F,\ +0x2E,0x84,0x0B,0x36,0x2E,0xF0,0x0C,0x0A,0x7F,0x7D,0x9A,0x0A,0x54,0x2D,0x85,0x2D,\ +0x95,0x0B,0x48,0x50,0x7E,0x53,0x0A,0x8B,0x0B,0x88,0x00,0x0B,0x98,0x10,0x2D,0x87,\ +0x2E,0x94,0x00,0x0C,0x9D,0x01,0xA9,0x35,0xD1,0x06,0x6E,0x04,0xFF,0xFF,0x0B,0x04,\ +0xBD,0x05,0x28,0x02,0x7D,0x50,0xA5,0xDD,0xDF,0x1B,0x48,0x50,0x0B,0x45,0x0B,0x41,\ +0xA5,0xBC,0x0C,0xB5,0x22,0x7E,0x24,0x02,0xA0,0x20,0x09,0x04,0x7E,0x24,0x02,0x58,\ +0x7E,0x34,0x0B,0x36,0xE5,0x44,0x23,0x0A,0x0B,0x7E,0x23,0x0A,0x8B,0x7E,0x30,0x06,\ +0x2D,0x30,0x12,0x3C,0x58,0xA5,0xDA,0xF5,0x22,0x7E,0x00,0x00,0x7E,0x11,0x55,0xCA,\ +0x09,0xC2,0x2D,0xA5,0xE8,0xF5,0x55,0xB4,0x05,0x02,0xD2,0x2D,0x23,0x0A,0x5B,0x2E,\ +0x54,0x02,0x4C,0x0B,0x58,0x50,0x7A,0x57,0x02,0x1C,0x12,0x28,0x44,0xDA,0x09,0xA5,\ +0x08,0xA5,0xB8,0x06,0xDA,0x7A,0x11,0x55,0xE5,0x55,0x23,0x0A,0x5B,0x2E,0x54,0x02,\ +0x4C,0x0B,0x58,0x50,0x7A,0x57,0x02,0x1C,0x22,0x74,0x03,0x7E,0x73,0x0E,0xA5,0x0A,\ +0x37,0x2E,0x34,0x0E,0xA1,0x7E,0x39,0xA0,0x30,0xF1,0x02,0x44,0x08,0xF5,0x9D,0xF5,\ +0x9C,0x6D,0x55,0x7A,0x57,0xFF,0x50,0xF5,0xD0,0x7A,0x57,0x02,0x05,0x7A,0x55,0x36,\ +0xF5,0x39,0xF5,0x38,0xF5,0x35,0xD2,0x07,0xC2,0x08,0xC2,0x09,0xC2,0x10,0x74,0x02,\ +0x7A,0xB3,0x02,0x4B,0x12,0x0F,0xC0,0xE4,0xF5,0x33,0xF5,0x34,0x7E,0x11,0x42,0x6C,\ +0x00,0x7E,0x19,0xB0,0x0B,0x14,0x13,0x40,0x04,0x05,0x33,0x80,0x02,0x05,0x34,0xA5,\ +0x08,0xBC,0x01,0x78,0xEC,0x85,0x33,0x3C,0x43,0xB9,0x01,0x53,0xB9,0xFE,0xC0,0xA8,\ +0xC2,0xAF,0x12,0x0C,0xC2,0x2E,0x34,0x00,0x09,0x7E,0x24,0x00,0x08,0x7E,0x30,0x16,\ +0x12,0x3C,0x52,0x75,0xD0,0x08,0x7A,0x27,0xFF,0x40,0xA5,0xE8,0xA2,0xE4,0x92,0x25,\ +0xE5,0x9C,0xA2,0xE3,0xA5,0xE9,0x03,0xF4,0x54,0x03,0x92,0xE3,0xF5,0x5B,0xF5,0x9C,\ +0xA5,0xE9,0x13,0x92,0x19,0xA5,0xE9,0x33,0x92,0x1B,0x33,0x92,0x1A,0x75,0xD0,0x10,\ +0x7A,0x27,0xFF,0x48,0x75,0xD0,0x18,0x7A,0x07,0xFF,0x4C,0x4E,0x40,0x90,0x5E,0x50,\ +0x77,0x7A,0x27,0xFF,0x50,0xD0,0xA8,0x75,0xD0,0x00,0x7E,0x73,0x0E,0xA9,0x0A,0x37,\ +0x2E,0x34,0x0E,0x9C,0x7E,0x24,0x20,0x18,0x7E,0x31,0x43,0x12,0x43,0xA6,0x7E,0x54,\ +0x00,0x00,0x0B,0x54,0xBE,0x54,0x9F,0xFF,0x78,0xF8,0x75,0xC3,0xDF,0xD2,0xAD,0x22,\ +0x7E,0x33,0x0E,0xA8,0x0A,0x13,0x2E,0x14,0x0E,0x9C,0x22,0x75,0xC3,0xDF,0x7E,0x20,\ +0x01,0x12,0x0F,0xFF,0x22,0xC0,0xA8,0x53,0xA8,0x9F,0x7E,0x20,0x00,0x12,0x0F,0xFF,\ +0xD0,0xA8,0x22,0xC0,0xA8,0xC2,0xAF,0xA2,0x09,0x74,0x00,0x12,0x12,0x4F,0x75,0x39,\ +0x00,0xB2,0x09,0x85,0x34,0x3C,0x20,0x09,0x03,0x85,0x33,0x3C,0xD0,0xA8,0x22,0xA2,\ +0x08,0x12,0x12,0x44,0x60,0x10,0xB4,0x01,0x0C,0xBE,0x20,0x01,0x78,0x07,0x12,0x10,\ +0x56,0x50,0xEC,0x80,0x36,0x22,0x20,0x08,0x2F,0xE5,0x38,0x70,0x2E,0xE5,0x35,0x60,\ +0x1F,0xB4,0x01,0x18,0x7E,0xB3,0x02,0x0D,0xF5,0x50,0x7E,0xB3,0x02,0x07,0x75,0xBC,\ +0x00,0xF5,0xBD,0x75,0xBC,0x80,0xA9,0x36,0xC3,0x02,0x05,0x50,0x15,0x35,0x80,0x03,\ +0x30,0x07,0xD2,0xC2,0x07,0x12,0x22,0xE5,0x85,0x53,0x54,0x12,0x10,0xAE,0xA2,0x08,\ +0x74,0x01,0x12,0x12,0x4F,0x22,0xE5,0x38,0xBE,0xB0,0x02,0x40,0x01,0x14,0x7E,0xA0,\ +0x0C,0xA4,0x7E,0x34,0x24,0x00,0x7E,0x24,0x03,0x48,0x20,0x08,0x08,0x7E,0x34,0x22,\ +0x00,0x7E,0x24,0x02,0xE8,0x2D,0x25,0x7E,0x30,0x06,0x12,0x3C,0x58,0xE5,0x38,0xB4,\ +0x08,0x02,0x80,0x0B,0x05,0x38,0xE5,0x38,0xBE,0xB0,0x02,0x68,0xF7,0xD3,0x22,0xE5,\ +0x34,0x20,0x08,0x02,0xE5,0x33,0xA2,0x08,0x12,0x12,0x3C,0x74,0x02,0xA2,0x08,0x12,\ +0x12,0x4F,0xE5,0x54,0x12,0x12,0x67,0x75,0x38,0x00,0xB2,0x08,0xC3,0x22,0x12,0x0C,\ +0xC2,0x7D,0x03,0xE5,0x38,0x70,0x33,0x2E,0x34,0x00,0x35,0x7E,0x24,0x20,0x00,0x7E,\ +0x30,0x0C,0x12,0x43,0xA6,0x49,0x20,0x00,0x33,0x49,0x30,0x00,0x31,0x4E,0x60,0x01,\ +0x09,0x30,0x00,0x41,0x49,0x50,0x00,0x42,0x7E,0x10,0x73,0x5C,0x1B,0xA2,0xE3,0x54,\ +0x04,0xC4,0x92,0xE0,0xA5,0xF8,0x7C,0xBA,0x80,0x40,0x2E,0x34,0x00,0x1F,0x7E,0x24,\ +0x20,0x00,0x7E,0x30,0x0C,0x12,0x43,0xA6,0x49,0x20,0x00,0x17,0x49,0x30,0x00,0x0F,\ +0x5E,0x60,0xFE,0x49,0x50,0x00,0x1B,0x7E,0x31,0x38,0xBE,0x30,0x03,0x50,0x05,0x7E,\ +0x31,0x54,0x80,0x0A,0x9E,0x30,0x03,0x09,0x60,0x00,0x11,0x5E,0x60,0xFE,0x0A,0x13,\ +0x2D,0x10,0x09,0x31,0x00,0x2B,0x49,0x00,0x00,0x1D,0x7A,0x27,0xFF,0x4A,0x7A,0x57,\ +0xFF,0x4E,0x7A,0x37,0xFF,0x42,0x7A,0x17,0xFF,0x54,0x7E,0x50,0x01,0x7E,0x70,0x15,\ +0xE5,0x38,0xB4,0x01,0x0D,0x7E,0x73,0x0E,0xA9,0x0A,0x37,0x09,0x73,0x0E,0x9C,0x7E,\ +0x51,0x43,0x7A,0x37,0x20,0x18,0x7A,0x27,0xFF,0x52,0x7D,0x50,0xC2,0xF7,0xD2,0xF4,\ +0xA2,0x08,0x92,0xE3,0xD2,0xE7,0x7A,0x57,0xFF,0x50,0x22,0xE4,0xA2,0x09,0x12,0x12,\ +0x3C,0x75,0x39,0x00,0xC3,0x22,0xA5,0x0D,0x6C,0x44,0x80,0x0C,0xE5,0x3C,0x60,0xEB,\ +0x15,0x3C,0xE5,0x39,0x0A,0x2B,0x7D,0x43,0x12,0x0F,0xC0,0x2D,0x12,0x7E,0x19,0x40,\ +0x1E,0x40,0x20,0x09,0x01,0xB3,0x50,0xDE,0xA5,0xED,0x04,0xF5,0x39,0x0A,0x04,0x3E,\ +0x04,0xE5,0x3D,0x30,0xE0,0x35,0x49,0x50,0x03,0x54,0x20,0x09,0x04,0x49,0x50,0x02,\ +0xF4,0x1B,0x38,0x50,0x0B,0x35,0x7E,0x14,0x24,0x0C,0x20,0x09,0x04,0x7E,0x14,0x22,\ +0x0C,0x7E,0x41,0x43,0xA5,0x1C,0xA5,0xEC,0x60,0x11,0x2D,0x10,0x0B,0x18,0x50,0x1B,\ +0x38,0x50,0x0B,0x35,0x2E,0x14,0x00,0x0C,0xA5,0xDC,0xF1,0xE5,0x3D,0x30,0xE1,0x1F,\ +0x7E,0x14,0x03,0x60,0x20,0x09,0x04,0x7E,0x14,0x03,0x00,0x2D,0x10,0x7E,0x40,0x06,\ +0x0B,0x18,0x50,0x1B,0x38,0x50,0x0B,0x35,0x2E,0x14,0x00,0x0C,0xA5,0xDC,0xF1,0x7E,\ +0x14,0x03,0x48,0x20,0x09,0x04,0x7E,0x14,0x02,0xE8,0x2D,0x10,0x0B,0x18,0x00,0xCA,\ +0x58,0xCA,0x09,0xE5,0x3D,0x30,0xE0,0x0F,0x7D,0x34,0x6D,0x22,0x7E,0x31,0x43,0x3E,\ +0x30,0x12,0x3C,0x5F,0x12,0x23,0x6C,0xDA,0x39,0xDA,0x08,0xE5,0x3C,0xA2,0x09,0x12,\ +0x12,0x3C,0xD3,0x22,0xE5,0x36,0x30,0x09,0x02,0xE5,0x37,0x22,0x40,0x03,0xF5,0x36,\ +0x22,0xF5,0x37,0x22,0x7E,0xB3,0x02,0x05,0x50,0x04,0x7E,0xB3,0x02,0x06,0x22,0x40,\ +0x05,0x7A,0xB3,0x02,0x05,0x22,0x7A,0xB3,0x02,0x06,0x22,0x7E,0xB3,0x02,0x47,0x30,\ +0x09,0x04,0x7E,0xB3,0x02,0x48,0x22,0x20,0x08,0x05,0x7A,0xB3,0x02,0x47,0x22,0x7A,\ +0xB3,0x02,0x48,0x22,0x22,0xD2,0xD3,0x7C,0x0C,0xA5,0xB8,0xFF,0x18,0x9D,0x11,0x09,\ +0x11,0x09,0xF3,0xBE,0x10,0x00,0x68,0x0B,0x0B,0x14,0xA5,0xBB,0x05,0xF1,0x74,0xFF,\ +0xC2,0xD3,0x22,0x7C,0x03,0x0A,0x20,0x3E,0x24,0x3E,0x24,0x6D,0x55,0x59,0x52,0x09,\ +0x44,0x0B,0x25,0x7E,0xB3,0x08,0x74,0xBE,0xB0,0x80,0x38,0x0C,0x7E,0xB3,0x08,0x76,\ +0x60,0x0A,0x7E,0xB3,0x08,0x61,0x60,0x04,0x6D,0x55,0x80,0x04,0x7E,0x54,0x64,0x96,\ +0x59,0x52,0x09,0x44,0x0A,0x20,0x0A,0x10,0x3E,0x14,0x6D,0x55,0x59,0x51,0x09,0xE4,\ +0x7E,0xB0,0x01,0x19,0xB2,0x09,0xF3,0xE4,0x19,0xB2,0x09,0xEE,0x04,0x19,0xB2,0x09,\ +0xF8,0x7D,0x5D,0x19,0xB2,0x0A,0x02,0x59,0xE1,0x09,0xA8,0x59,0xF1,0x09,0xB2,0x7C,\ +0xB5,0x12,0x2F,0x00,0x7C,0xB5,0x12,0x2F,0x68,0x0A,0x15,0x7E,0xB0,0x02,0x19,0xB1,\ +0x0A,0x1F,0x7E,0xB0,0xFF,0x19,0xB1,0x0A,0x24,0x3E,0x14,0x59,0xE1,0x0A,0x0B,0x59,\ +0xF1,0x0A,0x15,0x7E,0xB0,0x01,0x7A,0xB3,0x08,0x8C,0xE4,0xC2,0xD3,0x22,0x0A,0x0C,\ +0x7D,0x5D,0x19,0xB0,0x0A,0x02,0x6C,0x66,0x09,0xB0,0x09,0xF3,0xB4,0x01,0x15,0xA5,\ +0x0E,0x09,0xB0,0x09,0xEE,0xBE,0xB0,0x02,0x38,0x0A,0x7C,0xBC,0x12,0x2F,0x00,0x7C,\ +0xBC,0x12,0x2F,0x68,0xD2,0xD3,0x7C,0xBC,0x12,0x2F,0xFC,0x7F,0x17,0x12,0x43,0x4A,\ +0x1E,0x14,0x1E,0x14,0x7D,0xD1,0x7E,0x54,0x00,0x10,0xBD,0x5D,0x40,0x02,0x7D,0x5D,\ +0x7E,0x50,0x10,0x9C,0x5B,0x7E,0xA3,0x08,0xC1,0xAC,0xAB,0x7E,0x43,0x08,0xAE,0xAC,\ +0x45,0x2D,0x25,0x7E,0x54,0x00,0x10,0x8D,0x25,0xBE,0x70,0x01,0x50,0x03,0x7E,0x70,\ +0x01,0xA5,0xEF,0xC2,0xD3,0x7C,0x5D,0xA5,0xFF,0x7E,0x00,0x06,0x7C,0xE7,0xD2,0xD3,\ +0x7C,0xBC,0x12,0x2F,0x15,0x7C,0xBC,0x12,0x2F,0x5C,0x7F,0x50,0x7F,0x17,0x12,0x43,\ +0x4A,0x7E,0xB3,0x08,0xC2,0x0A,0x0B,0xBD,0x10,0x40,0x0A,0x60,0x08,0xC2,0xD3,0xA5,\ +0x18,0xA5,0xB8,0x00,0xD7,0xC2,0xD3,0x0A,0x7C,0x7E,0x73,0x08,0x7C,0x0A,0x07,0x7E,\ +0x33,0x08,0xE6,0x1A,0x13,0xAD,0x10,0x0E,0x14,0x0E,0x14,0x0E,0x14,0x9D,0xD1,0xA5,\ +0xBE,0x01,0x15,0x7D,0x07,0x3E,0x04,0x59,0xA0,0x0A,0x0B,0x59,0xB0,0x0A,0x15,0x74,\ +0x02,0x19,0xB7,0x0A,0x1F,0x02,0x14,0x97,0x7E,0xB3,0x08,0xAF,0x60,0xF7,0x7C,0x4B,\ +0x09,0x57,0x0A,0x1F,0xBE,0x50,0x01,0x28,0x32,0x7E,0xB3,0x08,0xD8,0xA5,0xF8,0x0A,\ +0x17,0x5E,0x00,0x0F,0x0A,0x00,0x9D,0x10,0xC4,0x54,0x0F,0x0A,0x5B,0xAD,0x15,0xBE,\ +0x14,0x00,0x00,0x08,0x16,0x7E,0x13,0x08,0x61,0xBE,0x10,0x01,0x38,0x0D,0x0A,0x54,\ +0x2D,0x51,0xBE,0xA0,0x00,0x68,0x02,0x74,0xFF,0x7C,0x4B,0x7D,0xC2,0x7D,0x07,0x3E,\ +0x04,0x49,0x80,0x0A,0x0B,0x49,0x90,0x0A,0x15,0x7F,0x05,0x7F,0x14,0x12,0x42,0xF8,\ +0x7D,0x5C,0xA4,0xBD,0x35,0x08,0x4C,0x7D,0x1C,0x0A,0x22,0x3E,0x24,0xBD,0x32,0x08,\ +0x08,0xA5,0xBB,0x01,0x04,0x7F,0x45,0x80,0x26,0x7D,0x08,0x7E,0x30,0x03,0x7D,0x2A,\ +0x7E,0x70,0x01,0x7E,0xA0,0x02,0x12,0x42,0x55,0x7D,0x81,0x7D,0x09,0x7E,0x30,0x03,\ +0x7D,0x2B,0x7E,0x70,0x01,0x7E,0xA0,0x02,0x12,0x42,0x55,0x7D,0x91,0x0E,0xD4,0x7D,\ +0x07,0x3E,0x04,0x59,0x80,0x0A,0x0B,0x59,0x90,0x0A,0x15,0x74,0x01,0x19,0xB7,0x0A,\ +0x1F,0x80,0x02,0x6D,0xDD,0x7F,0x54,0xD2,0xD3,0x7C,0xBF,0x7C,0xCF,0x7F,0x47,0x7F,\ +0x75,0x12,0x2F,0x7D,0x7C,0xBC,0x12,0x2F,0xD4,0x7F,0x71,0xC2,0xD3,0x7C,0xD5,0x7D,\ +0x4D,0xBE,0x44,0x00,0x00,0x58,0x02,0x6D,0x44,0xBE,0x44,0x00,0x10,0x40,0x04,0x7E,\ +0x44,0x00,0x10,0x7E,0x80,0x10,0x9C,0x89,0x7D,0x0E,0x7C,0x38,0x7D,0x28,0x7C,0x79,\ +0x7E,0xA0,0x04,0x12,0x42,0x55,0x0A,0x5C,0x3E,0x54,0x59,0x15,0x09,0xA8,0x7D,0x0F,\ +0x7C,0x38,0x7D,0x29,0x7C,0x79,0x7E,0xA0,0x04,0x12,0x42,0x55,0x0A,0x5C,0x3E,0x54,\ +0x59,0x15,0x09,0xB2,0x22,0x7E,0x64,0x0A,0x29,0x7E,0xA0,0x05,0x7E,0x69,0xB0,0x70,\ +0x0C,0x7E,0xB0,0x01,0x7A,0x69,0xB0,0x7E,0xB0,0x05,0x9C,0xBA,0x22,0x0B,0x64,0xD5,\ +0xF0,0xEA,0xE4,0x14,0x22,0x7E,0x53,0x08,0xBF,0x7E,0x63,0x08,0xC0,0x7E,0xB3,0x08,\ +0x77,0x70,0x19,0x7E,0xB3,0x08,0x6E,0xB4,0xFF,0x12,0x7E,0xB3,0x08,0x74,0xBE,0xB0,\ +0x80,0x28,0x0C,0x7E,0xB3,0x08,0x7B,0xBE,0xB0,0x01,0x28,0x03,0x2E,0x50,0x03,0x6D,\ +0x44,0x09,0x24,0x09,0xF3,0x09,0x34,0x09,0xEE,0x09,0x44,0x09,0xF8,0xA5,0xBA,0x00,\ +0x0B,0xA5,0xBC,0x01,0x51,0x9C,0x33,0x7E,0x20,0x01,0x80,0x4A,0xA5,0xBA,0x01,0x1B,\ +0xA5,0xBC,0x01,0x12,0xA5,0x0B,0xBC,0x35,0x40,0x3C,0x7E,0x20,0x02,0x12,0x14,0xF5,\ +0x19,0xB4,0x0A,0x24,0x80,0x30,0x7E,0x20,0x00,0x80,0x2B,0xA5,0xBA,0x02,0x0B,0xA5,\ +0xBC,0x00,0x23,0x9C,0x33,0x7E,0x20,0x03,0x80,0x1C,0xBE,0x20,0x03,0x68,0x05,0xBE,\ +0x20,0x04,0x78,0x12,0xA5,0xBC,0x01,0x05,0x7E,0x20,0x02,0x80,0x09,0xA5,0x0B,0xBC,\ +0x36,0x40,0x03,0x7E,0x20,0x05,0x19,0x24,0x09,0xF3,0x19,0x34,0x09,0xEE,0x0B,0x44,\ +0xBE,0x44,0x00,0x05,0x68,0x03,0x02,0x15,0x41,0x22,0x12,0x15,0x15,0x22,0xCA,0x3B,\ +0xC0,0xD0,0x75,0xD0,0x00,0x12,0x15,0xBA,0xD0,0xD0,0xDA,0x3B,0x22,0x7E,0xB0,0x01,\ +0xBE,0x14,0x00,0x02,0x58,0x01,0xE4,0x6C,0x99,0xBE,0x14,0x00,0x08,0x58,0x03,0x7E,\ +0x90,0x01,0x02,0x38,0x9D,0x7D,0x32,0x9D,0x30,0x7E,0xB3,0x08,0x7A,0x60,0x3D,0x7E,\ +0x23,0x08,0x74,0x1E,0x20,0xBE,0x34,0x00,0x00,0x58,0x08,0xBE,0x04,0x00,0x00,0x08,\ +0x02,0x80,0x0F,0xBE,0x20,0x01,0x50,0x05,0x7E,0x20,0x01,0x80,0x08,0xBE,0x20,0x05,\ +0x28,0x03,0x7E,0x20,0x05,0x0A,0x32,0x7E,0x14,0x00,0x10,0x9D,0x13,0xAD,0x01,0xAD,\ +0x23,0x2D,0x13,0x0E,0x14,0x0E,0x14,0x0E,0x14,0x0E,0x14,0x22,0xBE,0x34,0x00,0x00,\ +0x58,0x06,0x6E,0x34,0xFF,0xFF,0x0B,0x34,0x0B,0x34,0xBE,0x34,0x00,0x20,0x28,0x03,\ +0x7E,0x70,0x20,0x7E,0x30,0x20,0x9C,0x37,0x7E,0xA0,0x05,0x02,0x42,0x55,0x7C,0xCB,\ +0x7E,0xB3,0x08,0xDD,0x70,0x01,0x22,0x7C,0x8B,0x7E,0xB3,0x08,0xA7,0x1E,0xB0,0x0A,\ +0x9B,0x7E,0xA4,0x00,0x02,0x7E,0xB3,0x08,0xDC,0x7C,0xAB,0x54,0x7F,0x7D,0xB3,0x9C,\ +0xCB,0x30,0xF7,0x0A,0x7E,0xA4,0xFF,0xFE,0x1A,0x5C,0x1B,0x54,0x80,0x02,0x1A,0x5B,\ +0x3E,0x54,0x2D,0xB5,0x6D,0x88,0x7D,0xC8,0x6C,0xDD,0xBC,0xDC,0x58,0xC8,0x0B,0xB8,\ +0x10,0x7D,0x01,0x9D,0x08,0x1B,0xB8,0x00,0xBD,0x19,0x08,0x11,0x0A,0x38,0x12,0x42,\ +0xAB,0x7C,0x32,0x7C,0x21,0x2D,0xC1,0x0E,0xC4,0x2D,0x8C,0x7D,0xC1,0x2D,0xBA,0x0B,\ +0xD0,0x80,0xD7,0x7E,0xF3,0x08,0x90,0x0A,0x7F,0x60,0x0A,0x7E,0x03,0x08,0x67,0xA5,\ +0x18,0xA5,0x68,0x70,0x0E,0x7E,0xF3,0x08,0xAC,0x7E,0xB3,0x08,0x91,0x60,0x04,0xAC,\ +0xFB,0x0A,0x7E,0x7E,0xA4,0x08,0xCD,0x7E,0xA9,0xC0,0x0B,0xA4,0x6C,0xDD,0xBE,0xD3,\ +0x08,0x66,0x50,0x55,0x7D,0x1B,0x7C,0xBC,0x54,0x0F,0x0A,0x3B,0x12,0x42,0xAB,0x74,\ +0x03,0x1E,0x14,0x0E,0x04,0x50,0x03,0x4E,0x20,0x80,0x14,0x78,0xF4,0x7C,0xBC,0xC4,\ +0x54,0x0F,0x7C,0xCB,0x7C,0xBD,0x30,0xE0,0x05,0x7E,0xA9,0xC0,0x0B,0xA4,0x0B,0xE8,\ +0x30,0x0B,0xF8,0x20,0x9D,0x32,0x9D,0x3C,0xBD,0x31,0x08,0x04,0x9D,0x31,0x80,0x08,\ +0xBE,0x34,0x00,0x00,0x08,0x02,0x6D,0x33,0x0A,0x5D,0x3E,0x54,0x59,0x35,0x03,0xAE,\ +0x0B,0xE5,0x0B,0xF5,0x0B,0xD0,0x02,0x16,0xDE,0x7E,0xB3,0x08,0x66,0x7E,0x34,0x03,\ +0xAE,0x12,0x16,0x4E,0x6D,0x88,0x7E,0xB3,0x08,0x92,0x0A,0xEB,0x6C,0xDD,0x7E,0xB3,\ +0x08,0xE8,0x1A,0x9B,0x6D,0xAA,0xBE,0xD3,0x08,0x66,0x50,0x57,0x0A,0x3D,0x3E,0x34,\ +0x49,0x33,0x03,0xAE,0x9D,0x3E,0xBD,0x38,0x08,0x02,0x7D,0x83,0x7D,0x17,0x7C,0xBD,\ +0x60,0x07,0x9E,0xB3,0x08,0x66,0x04,0x70,0x02,0x2D,0x19,0x7D,0x0A,0x74,0x04,0x60,\ +0x05,0x0E,0x04,0xD5,0xE0,0xFB,0x2D,0x10,0x7E,0xB3,0x08,0xAB,0x1A,0x0B,0x2D,0xA0,\ +0x12,0x42,0xAB,0x74,0x06,0x1E,0x14,0x0E,0x04,0x50,0x03,0x4E,0x20,0x80,0x14,0x78,\ +0xF4,0x0B,0xD8,0x00,0x7D,0x21,0x12,0x15,0xE5,0x1B,0xD8,0x10,0x0B,0xD5,0x0B,0xD0,\ +0x02,0x17,0x56,0xBE,0x87,0x08,0x8E,0x08,0x04,0x7A,0x87,0x08,0x8E,0x22,0x7A,0xB1,\ +0x08,0x7D,0x0F,0x7D,0x4E,0x7E,0x23,0x08,0x66,0xBE,0x20,0x0A,0x40,0x00,0x7E,0xA0,\ +0x01,0x7E,0xB0,0x01,0x12,0x1E,0x3F,0x7F,0x30,0x7F,0x41,0x2D,0x68,0x0E,0x64,0xBE,\ +0x77,0x08,0x86,0x08,0x04,0x7A,0x77,0x08,0x86,0xBE,0x87,0x08,0x96,0x58,0x04,0x7A,\ +0x87,0x08,0x96,0x7E,0xB1,0x08,0x60,0x39,0x04,0xBE,0xB3,0x08,0x67,0x50,0x32,0x14,\ +0x0A,0x0B,0x09,0xA0,0x08,0x16,0x7E,0xB3,0x08,0xC7,0x0A,0x1B,0x6E,0x14,0xFF,0xFF,\ +0x0B,0x14,0xBD,0x81,0x58,0x15,0xBE,0xA0,0x02,0x50,0x04,0x0B,0xA0,0x80,0x0E,0xBE,\ +0x87,0x08,0x88,0x58,0x08,0x7A,0x87,0x08,0x88,0x80,0x02,0x6C,0xAA,0x19,0xA0,0x08,\ +0x16,0x2D,0x96,0x0E,0x94,0x7D,0xB9,0xBE,0xB4,0x00,0x1E,0x58,0x04,0x6D,0xBB,0x80,\ +0x14,0x7D,0x0B,0x7E,0x33,0x08,0xDF,0x7E,0xA0,0x06,0x12,0x43,0x84,0x7E,0xB3,0x08,\ +0xE0,0x1A,0xBB,0x2D,0xB0,0x7D,0x46,0xBE,0x44,0x00,0x00,0x58,0x04,0x6D,0x44,0x9D,\ +0x46,0x7E,0x13,0x08,0x81,0x0A,0x01,0xBD,0x40,0x50,0x04,0x2D,0x40,0x1E,0x44,0x7E,\ +0xB1,0x08,0x0A,0x0B,0x2E,0x04,0x08,0x0A,0x7E,0x09,0xB0,0x0A,0x1B,0xBD,0x41,0x50,\ +0x0D,0x7E,0x20,0x07,0xAC,0x2B,0x2D,0x41,0x1E,0x44,0x1E,0x44,0x1E,0x44,0xBE,0x44,\ +0x00,0x80,0x28,0x0F,0x7E,0x44,0x00,0x80,0xE4,0xBE,0x64,0x00,0x00,0x08,0x04,0x7A,\ +0xB3,0x08,0x6C,0x7A,0x09,0x90,0x7E,0x30,0x80,0x9C,0x39,0x7D,0x06,0x7D,0x29,0x7C,\ +0x79,0x7E,0xA0,0x07,0x12,0x42,0x55,0x6D,0x00,0x12,0x43,0x60,0x7D,0xC0,0x7E,0xB3,\ +0x08,0xB0,0x30,0xE4,0x04,0x6D,0xCC,0x7D,0xBC,0x7E,0xB1,0x08,0x02,0x16,0xB3,0xCA,\ +0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7D,0xF3,0x7D,0xE2,0x7D,0xD1,0x12,0x17,0xBE,0xD0,\ +0xD0,0xDA,0x3B,0x22,0x7E,0xB3,0x08,0x75,0x70,0x18,0x7E,0x73,0x08,0xAD,0x0A,0x37,\ +0x3E,0x34,0x3E,0x34,0x3E,0x34,0x3E,0x34,0x7A,0x37,0x08,0x8A,0x74,0x01,0x7A,0xB3,\ +0x08,0x75,0x7E,0xB3,0x08,0x83,0x60,0x03,0x02,0x1A,0xCF,0xE4,0x7A,0xB3,0x08,0x9B,\ +0x7E,0xB3,0x08,0x76,0x12,0x3E,0xAA,0x7A,0xB3,0x08,0x76,0x7E,0xB3,0x08,0x77,0x12,\ +0x3E,0xAA,0x7A,0xB3,0x08,0x77,0x7E,0xB3,0x08,0x78,0x12,0x3E,0xAA,0x7A,0xB3,0x08,\ +0x78,0x7E,0x37,0x08,0x98,0x1A,0x26,0x1A,0x24,0x7E,0x14,0x00,0x03,0x12,0x32,0xDC,\ +0x7E,0x17,0x08,0x96,0x1A,0x02,0x1A,0x00,0x2F,0x10,0x74,0x02,0x1E,0x34,0x0E,0x24,\ +0x50,0x03,0x4E,0x60,0x80,0x14,0x78,0xF4,0x7A,0x37,0x08,0x98,0x7E,0x37,0x08,0x88,\ +0x7A,0x37,0x08,0x84,0x7E,0x17,0x08,0x88,0x7E,0x73,0x08,0xC7,0x0A,0x37,0x6D,0x22,\ +0x9D,0x23,0xBD,0x21,0x08,0x24,0x74,0x01,0x7A,0xB3,0x08,0x72,0x7E,0x27,0x08,0x86,\ +0xBE,0x24,0x00,0x00,0x58,0x02,0x6D,0x22,0x2D,0x12,0x6D,0x22,0x9D,0x23,0xBD,0x21,\ +0x08,0x0D,0x74,0x02,0x7A,0xB3,0x08,0x72,0x80,0x05,0xE4,0x7A,0xB3,0x08,0x72,0x4D,\ +0x33,0x68,0x12,0x6D,0x22,0x9D,0x23,0xBE,0x27,0x08,0x98,0x08,0x08,0x74,0x01,0x7A,\ +0xB3,0x08,0x9A,0x80,0x05,0xE4,0x7A,0xB3,0x08,0x9A,0x7E,0x27,0x08,0x8A,0xBE,0x24,\ +0x00,0x00,0x08,0x27,0xBE,0x24,0x0F,0xF0,0x68,0x06,0x1B,0x24,0x7A,0x27,0x08,0x8A,\ +0x7E,0xB3,0x08,0x9A,0x60,0x15,0xE4,0x7A,0xB3,0x09,0x3E,0xE4,0x7A,0xB3,0x09,0x3C,\ +0xE4,0x7A,0xB3,0x09,0x42,0x74,0x01,0x7A,0xB3,0x09,0x3F,0x4D,0x33,0x68,0x61,0x7E,\ +0x27,0x08,0x86,0xBE,0x24,0x80,0x01,0x68,0x57,0x7E,0xB3,0x08,0xB0,0x30,0xE2,0x50,\ +0x6E,0x34,0xFF,0xFF,0x0B,0x34,0xBE,0x37,0x08,0x86,0x08,0x1A,0x7E,0xB3,0x08,0xA4,\ +0x04,0x7A,0xB3,0x08,0xA4,0x7E,0x73,0x08,0xA4,0xBE,0x70,0x08,0x40,0x0D,0x74,0x01,\ +0x7A,0xB3,0x08,0xA5,0x80,0x05,0xE4,0x7A,0xB3,0x08,0xA4,0x7E,0xB3,0x08,0xA5,0x60,\ +0x1F,0xE4,0x7A,0xB3,0x08,0xA5,0xE4,0x7A,0xB3,0x08,0xA4,0xE4,0x7A,0xB3,0x09,0x3E,\ +0xE4,0x7A,0xB3,0x09,0x3C,0xE4,0x7A,0xB3,0x09,0x42,0x74,0x01,0x7A,0xB3,0x09,0x3F,\ +0x7E,0xB3,0x08,0x72,0x60,0x2D,0x7E,0x34,0x00,0x50,0x7A,0x37,0x08,0x5C,0x7E,0x73,\ +0x08,0x72,0xBE,0x70,0x01,0x28,0x15,0x7E,0x34,0x00,0x14,0x7A,0x37,0x08,0x5E,0x7E,\ +0xB3,0x08,0x73,0x12,0x3E,0xB1,0x7A,0xB3,0x08,0x73,0x80,0x0C,0xE4,0x7A,0xB3,0x08,\ +0x73,0x80,0x05,0xE4,0x7A,0xB3,0x08,0x73,0x7E,0x37,0x08,0x5C,0xBE,0x34,0x00,0x00,\ +0x08,0x2D,0x7E,0xB3,0x09,0x3F,0x60,0x0E,0xBE,0x34,0x00,0x10,0x08,0x08,0x7E,0x34,\ +0x00,0x10,0x7A,0x37,0x08,0x5C,0x7E,0x37,0x08,0x5C,0x1B,0x34,0x7A,0x37,0x08,0x5C,\ +0x7E,0x37,0x08,0x5C,0xBE,0x34,0x00,0x00,0x08,0x05,0xE4,0x7A,0xB3,0x08,0x6C,0x7E,\ +0x37,0x08,0x5E,0xBE,0x34,0x00,0x00,0x08,0x06,0x1B,0x34,0x7A,0x37,0x08,0x5E,0x7E,\ +0xB3,0x08,0x61,0x70,0x07,0xE4,0x7A,0xB3,0x08,0x7B,0x80,0x0B,0x7E,0xB3,0x08,0x7B,\ +0x12,0x3E,0xB1,0x7A,0xB3,0x08,0x7B,0x12,0x3E,0x3A,0x12,0x07,0x70,0x7E,0xB3,0x08,\ +0x6B,0x70,0x23,0x7E,0xB3,0x08,0x83,0x70,0x0B,0x7E,0xB3,0x08,0x6C,0x12,0x3E,0xB1,\ +0x7A,0xB3,0x08,0x6C,0x7E,0xB3,0x08,0x68,0x12,0x3E,0xB1,0x7A,0xB3,0x08,0x68,0xE4,\ +0x7A,0xB3,0x08,0x7C,0x80,0x0A,0xE4,0x7A,0xB3,0x08,0x6C,0xE4,0x7A,0xB3,0x08,0x68,\ +0x7E,0xB3,0x08,0xA6,0x30,0xE5,0x0F,0x7E,0x73,0x08,0xCC,0xBE,0x73,0x08,0x7C,0x38,\ +0x05,0xE4,0x7A,0xB3,0x08,0x60,0xE4,0x7A,0xB3,0x08,0x8C,0xE4,0x7A,0xB3,0x08,0x8D,\ +0x7E,0x73,0x08,0x60,0xBE,0x70,0x00,0x28,0x05,0x12,0x1E,0x30,0x80,0x06,0x74,0x06,\ +0x7A,0xB3,0x08,0x74,0x12,0x32,0x05,0x12,0x29,0x8B,0x12,0x15,0xBE,0x12,0x3B,0xF9,\ +0x7A,0xB3,0x08,0x61,0xE4,0x7A,0xB3,0x08,0x6A,0x7E,0x73,0x08,0x6C,0xBE,0x70,0x0A,\ +0x28,0x34,0x7E,0xB3,0x08,0x83,0x70,0x22,0x7E,0xB3,0x08,0x69,0xBE,0xB0,0x00,0x28,\ +0x07,0x14,0x7A,0xB3,0x08,0x69,0x80,0x12,0x7E,0x37,0x08,0x58,0xBE,0x34,0x00,0x0C,\ +0x08,0x08,0x7E,0x73,0x08,0xE5,0x7A,0x73,0x08,0x69,0x7E,0xB3,0x08,0x69,0x70,0x06,\ +0x74,0x01,0x7A,0xB3,0x08,0x6A,0x22,0x7E,0x74,0x0B,0x36,0xE4,0xA5,0xFF,0xA5,0xF8,\ +0x7E,0x10,0xFF,0xA5,0x09,0xBE,0x10,0x05,0x68,0x0F,0x09,0xB0,0x09,0xF3,0x60,0xF3,\ +0xBE,0xB0,0x05,0x68,0xEE,0x7C,0x71,0x80,0xEA,0xA5,0x0F,0xBE,0x73,0x08,0x60,0x50,\ +0x04,0x7E,0x73,0x08,0x60,0x6C,0x11,0xBC,0x17,0x50,0x75,0x09,0xB0,0x09,0xF3,0x60,\ +0x5B,0xBE,0xB0,0x05,0x68,0x56,0xA5,0xE9,0xD2,0xD3,0x12,0x2F,0xA8,0x7F,0x40,0xC2,\ +0xD3,0x7E,0xA4,0x08,0x22,0x6C,0x22,0xBE,0x23,0x08,0x60,0x50,0x1F,0xD2,0xD3,0x0B,\ +0xA8,0x00,0x49,0x1A,0x00,0x02,0x2E,0xA4,0x00,0x06,0x7F,0x14,0x12,0x42,0xF8,0x7D,\ +0x53,0xC2,0xD3,0x1B,0x78,0x50,0x0B,0x75,0xA5,0x0A,0x80,0xDB,0xBC,0x27,0x50,0x2C,\ +0x09,0x30,0x09,0xF3,0xBE,0x30,0x01,0x78,0x06,0x7E,0x94,0x1F,0x40,0x80,0x04,0x7E,\ +0x94,0x20,0x00,0x1B,0x78,0x90,0x0B,0x75,0xA5,0x0A,0x80,0xE0,0xA5,0xEF,0x60,0x0C,\ +0x7E,0x94,0x20,0x00,0x1B,0x78,0x90,0x0B,0x75,0x14,0x80,0xF2,0xA5,0x09,0x80,0x87,\ +0x22,0x7E,0xB3,0x08,0xC3,0x0A,0x1B,0x0A,0x0C,0xBD,0x41,0x08,0x10,0x09,0xB0,0x09,\ +0xF3,0xBE,0xB0,0x01,0x78,0x05,0x12,0x12,0x75,0x80,0x0C,0xD3,0x22,0x7E,0xB0,0x01,\ +0x19,0xB0,0x09,0xF8,0x12,0x13,0x1E,0xC3,0x22,0x90,0x0B,0x8A,0x7E,0x30,0x05,0x12,\ +0x43,0x92,0x6D,0x55,0x7A,0x55,0x61,0x6C,0xCC,0x7A,0xC1,0x63,0x0A,0x0C,0x2E,0x04,\ +0x09,0xF3,0x7E,0x09,0xB0,0xBE,0xB0,0x00,0x7E,0xA1,0xD1,0xBE,0xB0,0x05,0x4E,0xA1,\ +0xD1,0x30,0xF1,0x03,0x02,0x1D,0x7C,0x7C,0x3C,0x3E,0x30,0x3E,0x30,0x0A,0x0C,0x2E,\ +0x04,0x0B,0xEE,0x7E,0x09,0x20,0xBE,0x23,0x08,0x60,0x40,0x03,0x02,0x1D,0x7C,0x7A,\ +0x21,0x60,0x0A,0x93,0x7A,0x95,0x64,0x0A,0x02,0x2E,0x04,0x0B,0x8A,0x7E,0xB0,0x02,\ +0x7A,0x09,0xB0,0x7E,0xB0,0x03,0xAC,0xB2,0x7D,0x85,0x3E,0x84,0x49,0xE8,0x08,0x22,\ +0x49,0xF8,0x08,0x24,0x49,0xD8,0x08,0x26,0x1E,0x84,0x49,0x09,0x09,0x44,0x49,0x19,\ +0x09,0x46,0x7A,0x0D,0x08,0x7C,0xBC,0x12,0x2F,0xA8,0x7D,0x2E,0x7D,0x3F,0x12,0x42,\ +0xF8,0x7D,0x03,0x7D,0x40,0x7E,0x1D,0x08,0x0A,0x54,0x9D,0x45,0x0A,0x55,0x9D,0x45,\ +0x0A,0x56,0x9D,0x45,0x0A,0x57,0x9D,0x45,0x7E,0xC1,0x63,0x7E,0x24,0x00,0xFA,0x12,\ +0x43,0x67,0xBE,0x05,0x61,0x28,0x03,0x7A,0x05,0x61,0x0A,0x1C,0x3E,0x14,0x2E,0x14,\ +0x09,0xE4,0x0B,0x18,0x20,0xBE,0x04,0x00,0x04,0x50,0x0A,0xBE,0x24,0x7D,0x00,0x50,\ +0x06,0x0B,0x24,0x80,0x02,0x6D,0x22,0x1B,0x18,0x20,0x7E,0x1D,0x08,0x19,0x69,0x09,\ +0x47,0x19,0x59,0x09,0x46,0x19,0x49,0x09,0x45,0x19,0x19,0x09,0x44,0x12,0x1C,0x51,\ +0x7E,0xC1,0x63,0x7E,0xB1,0x60,0x7E,0x95,0x64,0x50,0x11,0x7E,0x00,0x00,0x19,0x09,\ +0x09,0x44,0x0A,0x8B,0x2E,0x84,0x0B,0x8A,0xE4,0x7A,0x89,0xB0,0x0B,0xC0,0xBE,0xC0,\ +0x05,0x68,0x03,0x02,0x1C,0x89,0x7E,0x05,0x61,0x7E,0x30,0x07,0x75,0xF0,0x82,0x12,\ +0x43,0x84,0x7E,0x24,0x00,0xFA,0x12,0x43,0x67,0xBE,0x13,0x08,0x74,0x28,0x06,0x7A,\ +0x13,0x08,0x74,0x80,0x13,0x7E,0x43,0x08,0x74,0x7E,0x50,0x03,0xAC,0x45,0x2D,0x02,\ +0x1E,0x04,0x1E,0x04,0x7A,0x13,0x08,0x74,0x7E,0x03,0x08,0x74,0xBE,0x00,0x0A,0x28,\ +0x09,0x90,0x09,0xE4,0x7E,0x30,0x0A,0x12,0x43,0x92,0x22,0x7E,0x24,0x0B,0x8A,0x7E,\ +0x34,0x08,0x22,0x7E,0xB3,0x08,0x60,0x60,0x25,0xA5,0xFB,0x49,0xE3,0x00,0x00,0x49,\ +0xF3,0x00,0x02,0x49,0xD3,0x00,0x04,0x0B,0x36,0x0B,0x35,0x7E,0x29,0xB0,0x0B,0x24,\ +0xBE,0xB0,0x02,0x68,0x06,0x7E,0xC0,0xFF,0x12,0x12,0x75,0xA5,0xDB,0xDD,0x22,0x75,\ +0xD0,0x00,0x12,0x1B,0xA7,0x90,0x0B,0xEE,0x7E,0x30,0x05,0x7E,0xB0,0xFF,0x12,0x43,\ +0x93,0x7C,0xB7,0x7E,0x34,0x0B,0x36,0x7E,0x24,0x0B,0xEE,0xCA,0x3B,0xC0,0xD0,0x75,\ +0xD0,0x00,0x12,0x36,0xE7,0xD0,0xD0,0xDA,0x3B,0x12,0x1C,0x79,0x12,0x1D,0xCB,0x22,\ +0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,0x1D,0xFF,0xD0,0xD0,0xDA,0x3B,0x22,0x0A,\ +0x8A,0x0A,0x9B,0x3E,0x84,0x3E,0x94,0x7E,0xC4,0x20,0x00,0x7E,0xA4,0x20,0x00,0x7E,\ +0xB4,0xE0,0x00,0x9F,0x11,0x7C,0x32,0xA5,0xEB,0x60,0x2A,0x0B,0x48,0x50,0x0B,0x08,\ +0x60,0x9D,0x56,0x2D,0x49,0x2D,0x08,0xBD,0x5C,0x58,0x06,0x7D,0xAC,0x7D,0xC5,0x80,\ +0x06,0xBD,0x5A,0x58,0x02,0x7D,0xA5,0xBD,0x5B,0x08,0x02,0x7D,0xB5,0x7D,0x75,0x1A,\ +0x6E,0x1A,0x6C,0x2F,0x13,0xA5,0xDB,0xD3,0x0A,0x12,0x6D,0x00,0x12,0x3E,0x17,0x7D,\ +0x2C,0x7F,0x05,0x22,0x7E,0x03,0x08,0xA7,0x7E,0x10,0x03,0xAC,0x01,0x1E,0x04,0x1E,\ +0x04,0x7E,0xB3,0x08,0xB0,0x30,0xE7,0x02,0x6D,0x00,0x7A,0x05,0x0C,0x75,0x0B,0x00,\ +0x02,0x1F,0x44,0x7E,0x71,0x08,0x7E,0x14,0x03,0xAE,0x7D,0x2D,0x7E,0x29,0xB0,0x23,\ +0x7E,0xA1,0x0A,0xA4,0x2D,0x5E,0x0B,0x58,0x00,0x1B,0x18,0x00,0x0B,0x15,0x0B,0x24,\ +0xA5,0xDF,0xE9,0x7D,0x0F,0x7E,0x44,0x03,0xAE,0x7E,0x21,0x08,0x7E,0xA3,0x08,0x95,\ +0x7E,0xB0,0x01,0x12,0x1E,0x3F,0xBE,0x34,0xFF,0xE2,0x58,0x06,0x2D,0x13,0x0E,0x14,\ +0x80,0x10,0xBE,0x34,0x00,0x1E,0x58,0x04,0x7D,0x13,0x80,0x06,0x7D,0x13,0x2D,0x12,\ +0x0E,0x14,0x7E,0x05,0x0C,0xBE,0x04,0x00,0x00,0x68,0x17,0x6D,0x00,0x9E,0x05,0x0C,\ +0xBD,0x10,0x58,0x04,0x7D,0x10,0x80,0x0C,0xBE,0x15,0x0C,0x08,0x07,0x7E,0x15,0x0C,\ +0x80,0x02,0x7D,0x13,0x7D,0x2F,0xE5,0x08,0x0B,0x28,0x40,0x2D,0x41,0x1B,0x28,0x40,\ +0x2E,0x25,0x16,0x14,0x70,0xF2,0x0B,0xF5,0xE5,0x0B,0x04,0xBE,0xB1,0x0A,0x50,0x02,\ +0x0B,0xE5,0x05,0x0B,0xE5,0x0B,0xBE,0xB1,0x09,0x68,0x03,0x02,0x1E,0xB3,0x22,0x0A,\ +0xCB,0xE5,0x08,0xF5,0x0B,0x80,0x1D,0x7E,0xE9,0xB0,0x23,0x7E,0xA1,0x0A,0xA4,0x7D,\ +0x95,0x2D,0x9D,0x0B,0xE4,0x7D,0x8F,0x7E,0x81,0x0A,0x7D,0x1C,0x12,0x15,0xCD,0x2E,\ +0xF5,0x16,0x15,0x0B,0xE5,0x0B,0x70,0xDF,0x22,0x7A,0xB1,0x0F,0x7A,0x35,0x12,0x7A,\ +0x25,0x14,0x7A,0x31,0x08,0x7A,0x21,0x09,0x7A,0x13,0x08,0x95,0x0A,0x91,0x3E,0x94,\ +0x7A,0x95,0x16,0x60,0x03,0x02,0x20,0x00,0x7E,0x54,0x04,0x1A,0x7A,0x55,0x10,0x7E,\ +0xB3,0x08,0x66,0xF5,0x0A,0x7E,0xB3,0x09,0x3F,0x60,0x2C,0x7E,0xB3,0x09,0x42,0x70,\ +0x26,0x7E,0xB3,0x09,0x3B,0x70,0x20,0x7D,0xF3,0x7D,0xE2,0x7E,0xD5,0x10,0x7E,0xB3,\ +0x09,0x3F,0x14,0x12,0x1F,0x4F,0x7E,0xB3,0x08,0x83,0x70,0x0B,0x7E,0xB3,0x09,0x3F,\ +0x04,0x60,0x04,0x7A,0xB3,0x09,0x3F,0x7E,0xB3,0x08,0x6A,0x60,0x21,0x7E,0xF5,0x12,\ +0x7E,0xE5,0x14,0x7E,0xD5,0x10,0x7E,0x57,0x08,0x58,0x12,0x1F,0x4F,0x7E,0xB3,0x08,\ +0x83,0x70,0x0B,0x7E,0x57,0x08,0x58,0x04,0x60,0x04,0x7A,0x57,0x08,0x58,0x80,0x2A,\ +0x7E,0x84,0x03,0xDA,0xB4,0x02,0x09,0x7E,0xB3,0x08,0x67,0x23,0x0A,0x5B,0x2D,0x85,\ +0x7A,0x85,0x10,0x75,0x0A,0x01,0x7E,0x57,0x08,0x58,0xBE,0x54,0x00,0x0C,0x18,0x0A,\ +0x7D,0xF3,0x7D,0xE2,0x7E,0xD5,0x10,0x12,0x1F,0x4F,0x7E,0x57,0x08,0x58,0xBE,0x54,\ +0x00,0x0C,0x18,0x02,0xE4,0x22,0x7E,0xB3,0x08,0xA6,0x30,0xE7,0x0C,0x7E,0xF5,0x12,\ +0x7E,0xE5,0x10,0x7E,0xD5,0x14,0x12,0x1E,0x94,0x7E,0xB0,0x01,0x22,0x7A,0x55,0x60,\ +0x7A,0x0D,0x62,0x7A,0x1D,0x66,0x15,0x62,0xE5,0x62,0x70,0x05,0xC2,0xD5,0x6D,0x44,\ +0x22,0x7D,0x04,0x7E,0x15,0x66,0x12,0x42,0xBE,0x75,0xF0,0x88,0x12,0x42,0x7B,0x7F,\ +0x10,0x7E,0x31,0x62,0x0A,0x13,0x6D,0x00,0x2F,0x10,0x12,0x3E,0x17,0x7E,0x15,0x66,\ +0x1E,0x14,0x7A,0x15,0x6A,0x6D,0x00,0x9F,0x10,0x7D,0x63,0x7E,0x31,0x64,0x1A,0x13,\ +0x2E,0x14,0x01,0x00,0x7D,0x03,0x12,0x42,0xBE,0x75,0xF0,0x88,0x12,0x42,0x7B,0x7D,\ +0x71,0x7E,0xB1,0x65,0x60,0x48,0x6C,0xAA,0x7E,0x05,0x6A,0x9D,0x05,0x6D,0x22,0x9D,\ +0x20,0xBD,0x60,0x18,0x06,0xBD,0x62,0x48,0x09,0x80,0x33,0x7E,0x15,0x6A,0x9D,0x16,\ +0x80,0x05,0x7E,0x15,0x6A,0x2D,0x16,0x9D,0x00,0x12,0x43,0x60,0x7C,0x21,0x7E,0x61,\ +0x65,0x9C,0x62,0x7D,0x07,0x7D,0x26,0x7C,0x32,0x7C,0x76,0x9C,0xAA,0x12,0x42,0x55,\ +0x7F,0x10,0x7E,0x31,0x65,0x0A,0x13,0x6D,0x00,0x12,0x3E,0x17,0x7D,0x73,0xC2,0xD5,\ +0x2E,0x75,0x6A,0x7E,0xB1,0x68,0x60,0x08,0x0A,0x5B,0xBD,0x75,0x58,0x02,0xD2,0xD5,\ +0x7E,0xB1,0x69,0x60,0x0D,0x0A,0x5B,0x7E,0x05,0x66,0x9D,0x05,0xBD,0x70,0x08,0x02,\ +0xD2,0xD5,0x7E,0x11,0x63,0x1A,0x01,0x2D,0x07,0x9D,0x11,0x12,0x43,0x60,0x7E,0x25,\ +0x60,0x1B,0x24,0x12,0x43,0x67,0x7D,0x40,0x22,0x7F,0x40,0x7F,0x51,0x7D,0x13,0x6D,\ +0x00,0x7F,0xE0,0x7E,0x30,0x05,0x12,0x43,0x92,0x9C,0x77,0x9D,0x22,0x09,0x62,0x09,\ +0xF3,0xBE,0x60,0x02,0x50,0x03,0x02,0x22,0x42,0x09,0xB2,0x0A,0x24,0x30,0xE7,0x03,\ +0x02,0x22,0x42,0x0A,0xCB,0x7D,0xDC,0x2D,0xDB,0xA5,0xBE,0x05,0x09,0x7E,0x60,0x00,\ +0xE4,0x7A,0xD9,0xB0,0x80,0x34,0x74,0x01,0x7A,0xD9,0xB0,0xA5,0xBE,0x03,0x22,0x7E,\ +0x03,0x08,0xC0,0xA5,0x18,0xBE,0x00,0x02,0x28,0x03,0x7E,0x00,0x02,0x09,0x12,0x09,\ +0xEE,0xBC,0x10,0x50,0x07,0x74,0x03,0x7A,0xD9,0xB0,0x80,0x0E,0x7E,0x60,0x04,0x80,\ +0x09,0xA5,0xBE,0x04,0x05,0x74,0x03,0x7A,0xD9,0xB0,0xBE,0x60,0x04,0x50,0x0C,0xBE,\ +0x60,0x02,0x40,0x07,0x7C,0xB5,0x12,0x2F,0xFC,0x80,0x0C,0x3E,0x24,0x49,0x02,0x09,\ +0xA8,0x49,0x12,0x09,0xB2,0x1E,0x24,0x7D,0x40,0x7E,0x57,0x0A,0x07,0xD2,0xD3,0x7E,\ +0x03,0x08,0x63,0x7E,0x13,0x08,0xB1,0x7E,0x23,0x08,0xB3,0x7E,0x33,0x08,0xB5,0x7E,\ +0x27,0x08,0xB7,0x7E,0x63,0x08,0xBB,0x7E,0x73,0x08,0xBC,0x12,0x20,0x4D,0xC2,0xD3,\ +0x7D,0x0C,0x3E,0x04,0x2D,0x0A,0x1B,0x08,0x40,0x30,0xD5,0x07,0x7E,0x60,0x00,0xE4,\ +0x7A,0xD9,0xB0,0x7D,0x41,0x7E,0x57,0x0A,0x09,0xD2,0xD3,0x7E,0x03,0x08,0x64,0x7E,\ +0x13,0x08,0xB2,0x7E,0x23,0x08,0xB4,0x7E,0x33,0x08,0xB6,0x7E,0x27,0x08,0xB9,0x7E,\ +0x63,0x08,0xBD,0x7E,0x73,0x08,0xBE,0x12,0x20,0x4D,0xC2,0xD3,0x7D,0x0C,0x3E,0x04,\ +0x2D,0x09,0x1B,0x08,0x40,0x30,0xD5,0x07,0x7E,0x60,0x00,0xE4,0x7A,0xD9,0xB0,0x7E,\ +0xD9,0xB0,0x60,0x04,0xA5,0x0F,0x80,0x0A,0xE4,0x19,0xBC,0x0A,0x29,0x14,0x19,0xB2,\ +0x0A,0x24,0x19,0x62,0x09,0xF3,0x0B,0x24,0xBE,0x24,0x00,0x05,0x68,0x03,0x02,0x21,\ +0x3D,0x6C,0x66,0x22,0xE5,0x31,0x25,0x32,0xBE,0xB0,0xF8,0x68,0x39,0xBE,0xB0,0xF9,\ +0x68,0x3D,0xBE,0xB0,0xFC,0x68,0x15,0xBE,0xB0,0xF1,0x68,0x1E,0x60,0x36,0x04,0x60,\ +0x02,0xC3,0x22,0xA5,0xE8,0xB4,0xEF,0x02,0xF5,0x4D,0xD3,0x22,0xA5,0xB8,0x80,0x08,\ +0x7E,0xB3,0x02,0x08,0x7A,0xB3,0x01,0xFC,0xD3,0x22,0xA5,0xE8,0x30,0xE3,0x02,0xD2,\ +0x12,0x12,0x22,0xF0,0xD3,0x22,0x12,0x2D,0xB8,0x7A,0xB3,0x01,0xF8,0xD3,0x22,0x12,\ +0x38,0x09,0xD3,0x22,0x90,0x22,0xC5,0x7E,0xB3,0x02,0x0A,0x04,0x7A,0xB3,0x02,0x0A,\ +0x93,0x7C,0xA0,0xB5,0xF0,0x09,0x7E,0xB3,0x02,0x0A,0xB4,0x08,0x07,0xD2,0x2B,0xE4,\ +0x7A,0xB3,0x02,0x0A,0xD3,0x22,0x53,0x54,0x58,0x5F,0x46,0x57,0x55,0x50,0x7E,0xB3,\ +0x0E,0xA5,0x0A,0x5B,0x2E,0x54,0x0E,0xAA,0x7E,0x59,0xB0,0x7A,0xB3,0x01,0x00,0x22,\ +0x7A,0xB3,0x01,0x01,0x22,0x7E,0x57,0x01,0x07,0x0B,0x54,0x7A,0x57,0x01,0x07,0x22,\ +0x7E,0x73,0x0E,0xAB,0x0A,0x37,0x6D,0x22,0x7A,0xB3,0x01,0xF1,0xF5,0x4C,0x20,0xE3,\ +0x05,0x12,0x0D,0x1C,0xE5,0x4C,0x54,0x03,0xB4,0x01,0x0D,0x2E,0x34,0x0E,0xA3,0x0B,\ +0x38,0x20,0x49,0x33,0x00,0x02,0x80,0x1C,0xB4,0x02,0x0B,0x2E,0x34,0x0E,0xA2,0x7E,\ +0x39,0x70,0x0A,0x37,0x80,0x0E,0x7E,0x10,0xFF,0x7E,0x14,0x3E,0xE8,0x0B,0x0A,0x20,\ +0x69,0x30,0x00,0x02,0x7A,0x1F,0x01,0x0C,0x22,0x7E,0x54,0x01,0x04,0x0B,0x58,0x20,\ +0x09,0x75,0x00,0x02,0xA5,0xEC,0xA5,0xFE,0x5E,0x60,0x0F,0xC4,0x54,0x0F,0xA5,0xFC,\ +0x22,0x7E,0xB3,0x01,0x02,0x13,0x22,0x7E,0xB3,0x01,0x02,0xA2,0xE1,0x22,0x7E,0xB3,\ +0x02,0x09,0x7A,0xB3,0x01,0x03,0x22,0x7E,0xB3,0x01,0x03,0x22,0x7A,0xB3,0x01,0x0A,\ +0x22,0x7A,0xB3,0x01,0xF2,0x22,0x7E,0xB3,0x01,0xFF,0x22,0x7E,0x34,0x01,0x00,0x7E,\ +0x30,0x80,0x12,0x00,0x6D,0xE5,0x45,0x12,0x22,0xE0,0x12,0x23,0x26,0x74,0x06,0x7A,\ +0xB3,0x01,0xF4,0x74,0x00,0x7A,0xB3,0x01,0xFE,0x22,0x12,0x22,0xCE,0x12,0x23,0x5E,\ +0x75,0x4C,0x08,0x7E,0x55,0x48,0x7E,0x15,0x4A,0xA5,0xCA,0x7A,0x17,0x01,0x05,0xC4,\ +0x4C,0xBA,0xC4,0x7A,0xB3,0x01,0x04,0x74,0x04,0x7A,0xB3,0x01,0x0B,0x7E,0xB3,0x02,\ +0x40,0x7A,0xB3,0x01,0x3F,0x74,0x02,0x30,0x0A,0x02,0x74,0x05,0x7A,0xB3,0x01,0xF0,\ +0xE5,0x4C,0x7A,0xB3,0x01,0xF1,0x7E,0x55,0x3E,0x7A,0x57,0x01,0xF5,0xE5,0x40,0x24,\ +0x60,0x7A,0xB3,0x01,0xF7,0x74,0x01,0x7A,0xB3,0x01,0xFC,0x30,0x11,0x06,0x74,0xEF,\ +0x7A,0xB3,0x01,0xFF,0x22,0xE5,0x31,0xC3,0x94,0x10,0x40,0x1F,0x94,0x03,0x50,0x1B,\ +0x7E,0x34,0x0E,0x5E,0x7E,0x24,0x01,0x10,0x7E,0x20,0x04,0x7E,0x33,0x02,0x40,0xAC,\ +0x23,0x0B,0x31,0x12,0x3C,0x52,0xC2,0x24,0x12,0x24,0x1C,0x22,0xD3,0x30,0x17,0x01,\ +0xB3,0x20,0x83,0x04,0x92,0x91,0x80,0x02,0x92,0x90,0x22,0xC3,0x30,0x17,0x01,0xB3,\ +0x20,0x83,0x04,0x92,0x91,0x80,0x02,0x92,0x90,0x22,0x7E,0x33,0x08,0xDA,0x0A,0x13,\ +0x7E,0x80,0x0C,0xAC,0x8B,0x2E,0x44,0x09,0x23,0x0B,0x48,0x60,0x0B,0x38,0x70,0x7D,\ +0x06,0x9D,0x07,0x6C,0x44,0x0B,0x48,0x60,0x0B,0x38,0x70,0x1B,0x48,0x70,0x9D,0x67,\ +0x9D,0x60,0xBE,0x64,0x00,0x00,0x58,0x06,0x6D,0x55,0x9D,0x56,0x7D,0x65,0xBD,0x61,\ +0x08,0x03,0x7E,0x40,0x01,0x0B,0x45,0x0B,0x35,0xA5,0xDD,0xD9,0x7E,0x07,0x08,0xF3,\ +0xBE,0x04,0x00,0x00,0x68,0x1D,0x7E,0xB3,0x09,0x3C,0x70,0x04,0x7A,0xB3,0x09,0x3B,\ +0x4C,0x44,0x68,0x0F,0x7E,0xB0,0x01,0x7A,0xB3,0x09,0x43,0x2E,0xB3,0x09,0x3B,0x7A,\ +0xB3,0x09,0x3B,0x7C,0xB4,0x22,0x7C,0xEB,0x7E,0x47,0x08,0xF3,0x4D,0x44,0x68,0x15,\ +0x7E,0xB3,0x09,0x3E,0x70,0x0F,0x7E,0xB3,0x08,0x6C,0xBE,0xB0,0x05,0x50,0x06,0x74,\ +0x01,0x7A,0xB3,0x09,0x43,0x7E,0xB3,0x09,0x43,0x60,0x0A,0xE4,0x7A,0xB3,0x09,0x43,\ +0x7A,0xB3,0x09,0x3C,0x22,0x7E,0xB3,0x09,0x3C,0x70,0x09,0x90,0x09,0x0B,0x7E,0x30,\ +0x18,0x12,0x43,0x92,0x7E,0x14,0x09,0x0B,0x7D,0x23,0x7C,0x1E,0x0B,0x28,0x40,0x0E,\ +0x44,0x0B,0x18,0x50,0x2D,0x54,0x1B,0x18,0x50,0x0B,0x15,0x0B,0x25,0xA5,0xD9,0xEC,\ +0x7E,0xB3,0x09,0x3C,0x04,0x7A,0xB3,0x09,0x3C,0xBE,0xB0,0x10,0x78,0x54,0xE4,0x7A,\ +0xB3,0x09,0x3C,0x7E,0xC0,0x01,0x7E,0xB3,0x09,0x3B,0x70,0x20,0x7E,0xC3,0x09,0x3E,\ +0x7E,0xB3,0x08,0x6C,0xBE,0xB0,0x10,0x40,0x0C,0x7E,0xB3,0x08,0x9A,0x70,0x06,0x6C,\ +0xCC,0x7A,0xC3,0x09,0x3F,0x7E,0xB0,0x01,0x7A,0xB3,0x09,0x3E,0x7E,0x14,0x09,0x0B,\ +0x7E,0x24,0x08,0xF3,0x7C,0x1E,0x0B,0x18,0x40,0x1E,0x44,0x1E,0x44,0x1E,0x44,0x1B,\ +0x18,0x40,0x0B,0x15,0x7C,0xBC,0x70,0x05,0x1B,0x28,0x40,0x0B,0x25,0xA5,0xD9,0xE6,\ +0x80,0x0D,0x7E,0xB3,0x09,0x3E,0x60,0x06,0x7E,0xB3,0x09,0x3D,0x60,0x01,0x22,0x7E,\ +0x03,0x08,0xD9,0x0A,0x90,0x6C,0xDD,0xBE,0x00,0x00,0x68,0x43,0x7E,0xC3,0x09,0x3D,\ +0x7E,0x14,0x09,0x0B,0xBE,0xC0,0x00,0x78,0x02,0x7D,0x13,0x7E,0x24,0x08,0xF3,0x7C,\ +0x1E,0x0B,0x18,0x40,0x0B,0x28,0x50,0x9D,0x45,0xBD,0x49,0x08,0x05,0x7E,0xD0,0x01,\ +0x80,0x16,0x6D,0x55,0x9D,0x59,0xBD,0x45,0x58,0x0E,0xE4,0x7A,0xB3,0x09,0x3E,0x7A,\ +0xB3,0x09,0x3C,0x04,0x7A,0xB3,0x09,0x3F,0x0B,0x25,0x0B,0x15,0xA5,0xD9,0xD2,0x7C,\ +0xBD,0x60,0x1B,0x7E,0xB3,0x09,0x3F,0x70,0x15,0xE4,0x7A,0xB3,0x09,0x41,0x7E,0xB3,\ +0x09,0x42,0x7E,0xA0,0xFF,0x12,0x3E,0x23,0x7A,0xB3,0x09,0x42,0x80,0x32,0xE4,0x7A,\ +0xB3,0x09,0x42,0x7E,0xB3,0x09,0x41,0x7E,0xA0,0xFF,0x12,0x3E,0x23,0x7A,0xB3,0x09,\ +0x41,0xBE,0xB0,0x0A,0x28,0x1A,0x7E,0xB3,0x09,0x40,0x60,0x14,0xE4,0x7A,0xB3,0x09,\ +0x41,0x7D,0x83,0x7E,0x94,0x08,0xF3,0x7C,0x8E,0x7E,0x14,0x00,0x64,0x12,0x15,0xCD,\ +0x22,0xA2,0x93,0xB3,0xE4,0x34,0x00,0x30,0x83,0x06,0xE5,0x80,0x54,0xC0,0x23,0x23,\ +0x90,0x43,0xE9,0x93,0x54,0x7F,0xF5,0xF1,0x75,0xF4,0x04,0x74,0xCF,0x43,0xA6,0x30,\ +0x52,0xA7,0x52,0xA2,0x52,0xA4,0xE4,0xF5,0x32,0x7A,0xB3,0x02,0x0A,0x7A,0xB3,0x02,\ +0x45,0x75,0x31,0x10,0xC2,0x02,0xF5,0xF3,0xF5,0xF2,0x74,0x01,0xF5,0x45,0x12,0x23,\ +0x7B,0x75,0xC0,0xFB,0xD2,0xEA,0x22,0x85,0xF2,0x59,0xE5,0x59,0x30,0xE5,0x03,0x12,\ +0x26,0xEE,0xE5,0x59,0x30,0xE4,0x06,0x12,0x26,0xC3,0xA9,0xD0,0xF3,0xE5,0x59,0x30,\ +0xE3,0x14,0x20,0x00,0x0C,0x20,0x01,0x02,0x80,0x0C,0xC2,0x01,0xA9,0xD2,0xF4,0x80,\ +0x05,0xC2,0x00,0x12,0x26,0xC3,0xE5,0x59,0x30,0xE6,0x1E,0x75,0x32,0x00,0x30,0x00,\ +0x03,0x12,0x26,0xC3,0x20,0x11,0x03,0x12,0x23,0xF5,0xE5,0x31,0xB4,0x40,0x03,0x12,\ +0x27,0x78,0x12,0x26,0xEE,0xD2,0x01,0xC2,0x00,0xE5,0x59,0x30,0xE7,0x0C,0x75,0x32,\ +0x00,0xD2,0x00,0xC2,0x01,0xD2,0x02,0xA9,0xD0,0xF3,0xE5,0x59,0xF4,0xF5,0xF2,0x75,\ +0xC0,0xFB,0x22,0x30,0x02,0x05,0xC2,0x02,0x85,0xF5,0x31,0xE5,0xF4,0xC4,0x54,0x0F,\ +0x60,0x1B,0xF5,0x5A,0x7E,0x01,0xF5,0x12,0x22,0x54,0x40,0x0C,0x7E,0x60,0x01,0x7E,\ +0x71,0x31,0x2E,0x71,0x32,0x7A,0x39,0x00,0x05,0x32,0xD5,0x5A,0xE7,0x22,0x7E,0x00,\ +0x01,0xE5,0x31,0xBE,0xB0,0xFF,0x68,0x17,0x25,0x32,0xA5,0xF9,0x7E,0x20,0x08,0x7E,\ +0x09,0xB0,0xF5,0xF5,0x0B,0x04,0x05,0x32,0xA5,0xDA,0xF4,0xA9,0xD1,0xF3,0x22,0x7E,\ +0xB3,0x01,0xFF,0x7A,0xB1,0xF5,0x75,0xF5,0x53,0x75,0xF5,0x54,0x75,0xF5,0x50,0x75,\ +0xF5,0x41,0x75,0xF5,0x35,0x75,0xF5,0xFF,0x75,0xF5,0xEF,0x80,0xDE,0x12,0x38,0x4E,\ +0x12,0x38,0x59,0x40,0xF8,0xE5,0x45,0xBE,0xB0,0x05,0x68,0x34,0x12,0x23,0x76,0xBE,\ +0xB1,0x4D,0x68,0x1B,0xC2,0xAF,0xC2,0xAE,0xC2,0xAD,0xD2,0x11,0xD2,0x12,0x12,0x24,\ +0x1C,0x12,0x23,0x7B,0x12,0x23,0x9A,0x12,0x0D,0x1C,0xF4,0x42,0xA3,0x80,0x17,0x12,\ +0x3C,0x74,0x12,0x23,0x39,0x7A,0x1D,0x48,0x20,0x11,0x03,0x12,0x31,0xA9,0xC3,0x22,\ +0xC2,0xAE,0xC2,0xAD,0xC2,0x16,0xD3,0x22,0x30,0x11,0x05,0x12,0x37,0xBD,0x80,0x03,\ +0x12,0x2E,0xC0,0x40,0x1D,0x7A,0xA3,0x01,0x40,0x7A,0x07,0x01,0x42,0x23,0x24,0x03,\ +0x7A,0xB3,0x01,0x41,0x04,0xA5,0xFB,0x7E,0x18,0x01,0x40,0x12,0x3C,0x5F,0x7A,0x39,\ +0xB0,0x22,0xE4,0x7C,0xAB,0x04,0x7A,0x57,0x01,0x40,0x04,0x7A,0xB3,0x01,0x42,0x22,\ +0xE4,0x53,0xCA,0xEF,0xF5,0xCC,0x43,0xC8,0x10,0x43,0xA7,0xE0,0x53,0xA7,0xEF,0x53,\ +0xA6,0xF0,0x53,0xA2,0x7F,0x43,0xA2,0x70,0x53,0xA4,0x8F,0x43,0xA4,0x80,0x75,0x92,\ +0x07,0xF5,0x93,0x75,0x91,0xC6,0xF5,0x94,0x22,0xC2,0x1C,0x6D,0x55,0x7A,0x57,0x02,\ +0x1C,0x7A,0x57,0x02,0x47,0x7A,0x57,0x02,0x3D,0xF5,0x57,0xF5,0x56,0xF5,0x53,0xF5,\ +0x54,0xF5,0x55,0xF5,0x58,0xD2,0x22,0xD2,0x23,0x7E,0xB3,0x0E,0xAB,0x0A,0x5B,0x2E,\ +0x54,0x0E,0xA0,0x0B,0x58,0x50,0x7C,0x0A,0x7E,0xA0,0x10,0xA4,0x7A,0x57,0x02,0x49,\ +0xA5,0xE8,0x7A,0xB3,0x02,0x1E,0x14,0x0A,0x5B,0x7E,0x34,0x02,0x25,0x7E,0x30,0x0C,\ +0x12,0x00,0x6F,0x74,0x04,0x90,0x02,0x1F,0x7E,0x30,0x06,0x12,0x43,0xA0,0x90,0x03,\ +0xA8,0x7E,0x30,0x06,0x12,0x43,0x9F,0xE4,0x7E,0xA3,0x02,0x00,0x30,0xF2,0x02,0x74,\ +0x05,0xF5,0x52,0x22,0x20,0x1D,0x05,0x30,0x27,0x0F,0xD2,0x1C,0x12,0x0D,0x2E,0x85,\ +0x55,0x5C,0x12,0x28,0x89,0x12,0x29,0x80,0x22,0x12,0x0D,0x2E,0xBE,0x70,0x00,0x78,\ +0xEE,0xE5,0x52,0x70,0x04,0xC2,0x1C,0x80,0xEF,0x30,0x1C,0xEC,0x7E,0x57,0x02,0x3D,\ +0xBE,0x54,0x00,0x00,0x78,0xE2,0x85,0x56,0x52,0x05,0x56,0xC2,0x1C,0xE5,0x56,0xBE,\ +0xB1,0x57,0x40,0x03,0x75,0x56,0x00,0x80,0xCC,0x7D,0x45,0x7E,0x34,0x02,0x1F,0x7E,\ +0x51,0x5C,0x0A,0x15,0x2E,0x14,0x03,0xA8,0x0A,0x25,0x2D,0x32,0x7E,0x39,0x00,0x7E,\ +0x53,0x02,0x1E,0x0A,0x25,0xBD,0x52,0x50,0x16,0xA5,0x08,0x7E,0x19,0x40,0xBE,0x40,\ +0x00,0x68,0x0A,0xBE,0x00,0x04,0x40,0x05,0xA5,0x1C,0x7A,0x19,0x40,0x80,0x02,0xA5,\ +0x18,0xBE,0x00,0x08,0x40,0x05,0x7E,0x00,0x07,0x80,0x08,0xBE,0x00,0x01,0x50,0x03,\ +0x7E,0x00,0x01,0x7A,0x39,0x00,0x0A,0x70,0x7E,0x34,0x02,0x25,0x7E,0x51,0x5C,0x7E,\ +0x40,0x04,0xAC,0x45,0x2D,0x32,0x0B,0x38,0x10,0xBD,0x15,0x28,0x07,0x7E,0x10,0x08,\ +0x9C,0x10,0x0A,0x71,0xAD,0x17,0x7E,0xE0,0x08,0x9C,0xEF,0x0A,0x7E,0xAD,0x75,0x2D,\ +0x17,0x1E,0x14,0x1E,0x14,0x1E,0x14,0x1B,0x38,0x10,0x0B,0x35,0x0B,0x38,0x00,0xBD,\ +0x05,0x38,0x05,0x1B,0x38,0x50,0x80,0x11,0x7E,0x14,0x00,0x07,0xAD,0x01,0x2D,0x15,\ +0x1E,0x14,0x1E,0x14,0x1E,0x14,0x1B,0x38,0x10,0x20,0x2D,0x01,0x22,0xD2,0x21,0x20,\ +0x1E,0x02,0x80,0x4B,0x7E,0x24,0xFF,0xFF,0x75,0x57,0x00,0x7E,0x34,0x02,0x25,0x7E,\ +0xB3,0x02,0x1E,0x0A,0x5B,0x7E,0xD0,0x00,0x0B,0x38,0x70,0x20,0x21,0x02,0x80,0x25,\ +0x0A,0x1D,0x09,0xC1,0x03,0xA8,0xBE,0xC0,0x00,0x78,0x0B,0xBD,0x75,0x50,0x07,0x7A,\ +0xD1,0x57,0xC2,0x21,0x80,0x0F,0x7D,0x17,0x0B,0x35,0x0B,0x35,0xBD,0x12,0x50,0x05,\ +0x7A,0xD1,0x57,0x7D,0x21,0x0B,0xD0,0xBE,0xD0,0x06,0x78,0xCC,0x85,0x57,0x52,0x22,\ +0xC0,0xA8,0x53,0xA8,0x9F,0x85,0x52,0x53,0xD0,0xA8,0x22,0xCA,0xF8,0x7E,0x10,0x03,\ +0x7E,0x44,0x0A,0x47,0x6C,0x00,0x0A,0x10,0x09,0xB1,0x09,0xF8,0x70,0x03,0x02,0x2B,\ +0x04,0x74,0x02,0xAC,0xB1,0x49,0xF5,0x09,0x58,0x49,0xE5,0x09,0x80,0x74,0x02,0xAC,\ +0xB0,0x49,0xD5,0x09,0xA8,0x49,0xC5,0x09,0xB2,0x7E,0x34,0x0B,0x8A,0x7D,0x24,0x74,\ +0x0B,0x12,0x3D,0xB9,0x0A,0x10,0x09,0xB1,0x09,0xF3,0xB4,0x01,0x1B,0xE4,0x7A,0xB3,\ +0x0B,0x8A,0x6D,0x11,0x7A,0x17,0x0B,0x8B,0x7A,0xF7,0x0B,0x8D,0x7A,0xF7,0x0B,0x91,\ +0x7A,0xE7,0x0B,0x8F,0x7A,0xE7,0x0B,0x93,0x7E,0x37,0x0B,0x8F,0x7E,0x27,0x0B,0x93,\ +0x12,0x3E,0x29,0x7D,0xB3,0x7E,0x37,0x0B,0x8D,0x7E,0x27,0x0B,0x91,0x12,0x3E,0x29,\ +0x2D,0xB3,0x7E,0x37,0x0B,0x8F,0x7D,0x2E,0x12,0x3E,0x29,0x7D,0xA3,0x7E,0x37,0x0B,\ +0x8D,0x7D,0x2F,0x12,0x3E,0x29,0x2D,0xA3,0x0A,0x10,0x09,0xB1,0x0A,0x02,0xC4,0x54,\ +0x0F,0x7C,0xFB,0x74,0x02,0xAC,0xBF,0x49,0x95,0x03,0xAE,0x7E,0xA3,0x0B,0x8A,0xBE,\ +0xA0,0x02,0x68,0x0A,0x7E,0xB3,0x08,0xC9,0x0A,0x1B,0xBD,0x19,0x58,0x46,0x74,0x02,\ +0x7A,0xB3,0x0B,0x8A,0x7E,0x17,0x0B,0x8B,0xBD,0x19,0x58,0x12,0x7A,0xD7,0x0B,0x91,\ +0x7A,0xC7,0x0B,0x93,0x7A,0xF7,0x0B,0x8D,0x7A,0xE7,0x0B,0x8F,0x80,0x59,0xBE,0xA4,\ +0x00,0xC0,0x28,0x0A,0x7A,0xD7,0x0B,0x91,0x7A,0xC7,0x0B,0x93,0x80,0x49,0xBD,0xAB,\ +0x28,0x45,0x7A,0xF7,0x0B,0x8D,0x7A,0xF7,0x0B,0x91,0x7A,0xE7,0x0B,0x8F,0x7A,0xE7,\ +0x0B,0x93,0x80,0x33,0xBE,0xA0,0x01,0x68,0x06,0xBE,0xA4,0x00,0x80,0x28,0x20,0x74,\ +0x01,0x7A,0xB3,0x0B,0x8A,0x74,0x06,0xAC,0xBF,0x49,0x15,0x08,0x22,0x7A,0x17,0x0B,\ +0x91,0x74,0x06,0xAC,0xBF,0x49,0x15,0x08,0x24,0x7A,0x17,0x0B,0x93,0x80,0x08,0x7A,\ +0xD7,0x0B,0x91,0x7A,0xC7,0x0B,0x93,0x7E,0x17,0x0B,0x91,0x74,0x02,0xAC,0xB0,0x59,\ +0x15,0x09,0xA8,0x7E,0x17,0x0B,0x93,0x74,0x02,0xAC,0xB0,0x59,0x15,0x09,0xB2,0x0E,\ +0x94,0xBE,0x97,0x0B,0x8B,0x08,0x06,0x7A,0x97,0x0B,0x8B,0x80,0x1C,0xBE,0x94,0x00,\ +0x00,0x08,0x16,0x7E,0x27,0x0B,0x8B,0x7E,0x34,0x00,0x03,0xAD,0x32,0x7D,0x13,0x2D,\ +0x19,0x0E,0x14,0x0E,0x14,0x7A,0x17,0x0B,0x8B,0x7D,0x34,0x7E,0x24,0x0B,0x8A,0x74,\ +0x0B,0x12,0x3D,0xB9,0x0B,0x12,0x2E,0x44,0x00,0x0B,0x0B,0x00,0xBE,0x00,0x02,0x50,\ +0x03,0x02,0x29,0x96,0xDA,0xF8,0x22,0xCA,0x3B,0x7D,0x63,0x7C,0xFB,0x7E,0xE3,0x08,\ +0x67,0x7E,0xB3,0x08,0x9B,0x60,0x03,0x02,0x2C,0x4D,0x74,0x01,0x7A,0xB3,0x08,0x9B,\ +0x7E,0x34,0x80,0x01,0x7A,0x37,0x08,0x86,0x6D,0x33,0x7A,0x37,0x08,0x88,0x6D,0x33,\ +0x7A,0x37,0x08,0x96,0xE4,0x7A,0xB3,0x08,0x81,0x6C,0x77,0x80,0x12,0x1A,0x27,0x09,\ +0x62,0x08,0x0A,0xBE,0x63,0x08,0x81,0x28,0x04,0x7A,0x63,0x08,0x81,0x0B,0x70,0xBC,\ +0xE7,0x18,0xEA,0x7E,0x73,0x08,0xDE,0x0A,0x37,0x7E,0xB3,0x08,0x93,0x30,0xE2,0x02,\ +0x6D,0x33,0x7D,0x23,0x3E,0x24,0x7E,0x33,0x08,0xA7,0x0A,0x13,0x2D,0x12,0x7E,0x27,\ +0x08,0x8E,0x9D,0x21,0x7E,0x33,0x08,0xA9,0x0A,0x43,0x7E,0xA3,0x08,0x92,0x7E,0xB3,\ +0x08,0x74,0xBE,0xB0,0x50,0x50,0x1B,0x7E,0xB3,0x08,0x60,0xB4,0x01,0x14,0xBE,0x24,\ +0x00,0x00,0x08,0x0E,0x2D,0x43,0xBE,0x44,0x00,0xFF,0x08,0x14,0x7E,0x44,0x00,0xFF,\ +0x80,0x0E,0x4C,0xAA,0x68,0x02,0x1B,0xA0,0x0A,0x3A,0xBD,0x34,0x58,0x02,0x7C,0xA9,\ +0x74,0x07,0xA4,0x2D,0x54,0x0B,0x56,0x0E,0x54,0x0E,0x54,0x0E,0x54,0x7C,0xAB,0x7A,\ +0xA3,0x08,0x92,0x7E,0x73,0x08,0xA8,0x0A,0x37,0x3E,0x34,0x7E,0x33,0x08,0xAA,0x7C,\ +0xA3,0xBE,0x37,0x08,0x8E,0x50,0x20,0x7E,0xB3,0x08,0xB0,0x30,0xE0,0x19,0x7E,0xB3,\ +0x08,0x93,0x20,0xE1,0x12,0x6D,0x22,0x0A,0x13,0x6D,0x00,0x12,0x32,0xCB,0x7E,0x17,\ +0x08,0x8E,0x12,0x32,0xE5,0x7C,0xA7,0x7E,0x43,0x08,0x90,0xA5,0xBC,0x00,0x04,0x7E,\ +0x43,0x08,0xAA,0x7E,0x50,0x03,0xAC,0x45,0x0A,0x3A,0x2D,0x23,0x2E,0x24,0x00,0x03,\ +0x1E,0x24,0x1E,0x24,0x7C,0x45,0x7A,0x43,0x08,0x90,0x7E,0x53,0x08,0xAA,0x4C,0x55,\ +0x68,0x10,0x0A,0x34,0x7C,0x67,0x6C,0x77,0x0A,0x25,0x8D,0x32,0x7A,0x73,0x08,0x91,\ +0x80,0x05,0xE4,0x7A,0xB3,0x08,0x91,0x6D,0x33,0x7A,0x37,0x08,0x8E,0x7C,0xBF,0x7E,\ +0x34,0x0A,0x8E,0x7E,0x24,0x0A,0x8C,0x12,0x3C,0xBD,0x7E,0x37,0x08,0x58,0xBE,0x34,\ +0x00,0x0C,0x08,0x13,0xBC,0xEF,0x08,0x0F,0x7D,0x36,0x7E,0x27,0x0A,0x8E,0x7E,0x17,\ +0x0A,0x8C,0x7C,0xBF,0x12,0x18,0xCF,0xDA,0x3B,0x22,0xCA,0x3B,0x7A,0xB1,0x2F,0xE4,\ +0x7A,0xB3,0x0A,0x8B,0xE5,0x43,0x0A,0x3B,0x2E,0x34,0x00,0x06,0x7A,0x73,0x0A,0x8A,\ +0xE5,0x40,0x60,0x09,0x7E,0xB3,0x0A,0x8A,0x04,0x7A,0xB3,0x0A,0x8A,0x7E,0x34,0x0A,\ +0x72,0x30,0x7C,0x04,0x7E,0x34,0x0A,0x7E,0x7A,0x37,0x0A,0x5F,0xE4,0x7E,0x24,0x00,\ +0x0C,0x12,0x3E,0x77,0x7E,0x34,0x0B,0x36,0x7A,0x37,0x0A,0x5D,0x7E,0x37,0x0A,0x5D,\ +0x12,0x11,0x7C,0x50,0x2C,0x7E,0xB3,0x0A,0x8B,0x0A,0x2B,0x7E,0x17,0x0A,0x5F,0x2D,\ +0x12,0x2D,0x12,0x1B,0x18,0x30,0x19,0x02,0x0C,0x92,0x04,0x7A,0xB3,0x0A,0x8B,0x7E,\ +0x73,0x0A,0x8A,0x0A,0x37,0x3E,0x34,0x2E,0x37,0x0A,0x5D,0x7A,0x37,0x0A,0x5D,0x80,\ +0xCB,0x7E,0x73,0x0A,0x63,0xBE,0x70,0x08,0x50,0x05,0x6D,0x33,0x02,0x2D,0xB5,0x30,\ +0x7B,0x4D,0x7E,0x73,0x0A,0x71,0xBE,0x71,0x55,0x68,0x0C,0xE5,0x55,0x7A,0xB3,0x0A,\ +0x71,0x74,0x01,0x7A,0xB3,0x0A,0x70,0x7E,0xB3,0x0A,0x70,0x60,0x03,0x12,0x3E,0xBE,\ +0x20,0x7C,0x13,0xE4,0x7A,0xB3,0x0A,0x70,0xE4,0x7E,0x37,0x0A,0x5F,0x7E,0x53,0x0A,\ +0x8B,0x12,0x3E,0x68,0x80,0x16,0x74,0x01,0x7E,0x37,0x0A,0x5F,0x7E,0x53,0x0A,0x8B,\ +0x12,0x3E,0x68,0x7E,0x34,0x0A,0x72,0x74,0x0C,0x12,0x3E,0x05,0x12,0x3E,0x9F,0x6D,\ +0x66,0x30,0x7E,0x3B,0x7E,0xB3,0x0A,0x8A,0x7E,0x73,0x0A,0x8B,0x7E,0x24,0x0C,0x92,\ +0x7E,0x14,0x0B,0x36,0x12,0x3A,0xDD,0x7D,0x63,0x7E,0xF1,0x43,0x74,0x02,0xAC,0xFB,\ +0x2E,0x74,0x0B,0x36,0x30,0x7D,0x02,0x0B,0x75,0x74,0x02,0x7D,0x37,0x7E,0x24,0x0C,\ +0x92,0x7E,0x33,0x0A,0x8B,0x7E,0x20,0x06,0x7E,0x13,0x0A,0x8A,0x12,0x3E,0x59,0x7E,\ +0xF1,0x43,0x74,0x02,0xAC,0xFB,0x2E,0x74,0x0B,0x36,0x30,0x7D,0x16,0x74,0x01,0x7D,\ +0x37,0x7E,0x24,0x0C,0x92,0x7E,0x33,0x0A,0x8B,0x7E,0x20,0x01,0x7E,0x13,0x0A,0x8A,\ +0x12,0x3E,0x59,0x7D,0x36,0xDA,0x3B,0x22,0x7E,0x33,0x01,0xD1,0xA5,0x0B,0x7E,0x18,\ +0x01,0xD0,0x12,0x3C,0x5F,0xBE,0x39,0xB0,0x78,0x1E,0x7E,0xB3,0x01,0xD0,0xB4,0x01,\ +0x02,0x80,0x18,0xB4,0x02,0x02,0x80,0x5B,0xB4,0x04,0x0A,0x7E,0xB3,0x01,0xD2,0xB4,\ +0x01,0x03,0x02,0x2E,0x87,0x74,0x80,0x22,0x74,0x81,0x22,0x7E,0x34,0x01,0xD6,0x7E,\ +0x27,0x01,0xD3,0x7E,0x33,0x01,0xD5,0x7E,0xB3,0x01,0xD2,0x54,0x1F,0xB4,0x00,0x15,\ +0xBE,0x40,0x10,0x50,0x05,0x12,0x3C,0x52,0x80,0x27,0x1E,0x30,0xA9,0x21,0xD1,0x21,\ +0x12,0x3C,0x58,0x80,0x1C,0xB4,0x01,0x17,0x43,0xB9,0x80,0x7E,0x39,0xB0,0x7C,0xAB,\ +0x1B,0x28,0x50,0x0B,0x34,0x0B,0x24,0xA5,0xDB,0xF1,0x53,0xB9,0x7F,0x80,0x02,0x80,\ +0xB4,0xE4,0x22,0x7E,0x37,0x01,0xD3,0x7E,0x24,0x01,0xD4,0x7E,0x33,0x01,0xD5,0x7C,\ +0x23,0x7E,0xB3,0x01,0xD2,0x54,0x1F,0xB4,0x00,0x05,0x12,0x3C,0x52,0x80,0x29,0xB4,\ +0x01,0x15,0x43,0xB9,0x80,0x0B,0x38,0x50,0x7A,0x29,0xB0,0x0B,0x34,0x0B,0x24,0xA5,\ +0xDB,0xF3,0x53,0xB9,0x7F,0x80,0x11,0xB4,0x02,0x0B,0x7A,0x61,0x83,0x7A,0x71,0x82,\ +0x12,0x3C,0x4C,0x80,0x03,0x02,0x2D,0xE5,0x74,0x82,0x7A,0xB3,0x01,0xD0,0x7A,0x23,\ +0x01,0xD3,0x2E,0x20,0x03,0x80,0x25,0x7E,0x20,0x06,0x74,0x84,0x7A,0xB3,0x01,0xD0,\ +0x74,0x01,0x7A,0xB3,0x01,0xD2,0x74,0x01,0x7A,0xB3,0x01,0xD3,0x7E,0x54,0x00,0x00,\ +0x7A,0x57,0x01,0xD4,0x74,0x01,0x7A,0xB3,0x01,0xD6,0x80,0x00,0x7A,0x23,0x01,0xD1,\ +0x7C,0x32,0xA5,0x0B,0x7E,0x18,0x01,0xD0,0x12,0x3C,0x5F,0x7A,0x39,0xB0,0xE4,0x22,\ +0x7E,0xB3,0x02,0x45,0xB5,0x42,0x07,0xE4,0x7A,0xB3,0x02,0x45,0x80,0xF2,0xA5,0xFC,\ +0x04,0x7A,0xB3,0x02,0x45,0xA5,0xEC,0x7E,0x34,0x01,0x44,0x12,0x3D,0x48,0x7E,0xA0,\ +0x86,0x7C,0x04,0x6C,0x11,0xE5,0x43,0xC3,0x22,0x75,0xF0,0x04,0xA4,0x0A,0x00,0x3E,\ +0x04,0x2D,0x50,0x7E,0x04,0x09,0xBC,0x7E,0x14,0x09,0xD0,0x2D,0x05,0x2D,0x15,0x22,\ +0x9C,0x00,0x12,0x2E,0xE9,0x74,0x02,0x1B,0x08,0xE0,0x1B,0x18,0xF0,0x0B,0x05,0x0B,\ +0x15,0xD5,0xE0,0xF3,0x22,0x7E,0x00,0x01,0x12,0x2E,0xE9,0x7F,0x40,0x7F,0x57,0x7E,\ +0xF0,0x80,0x9C,0xFE,0x9C,0x88,0xBE,0x80,0x02,0x50,0x30,0x0B,0x88,0x00,0x7C,0x3F,\ +0x7D,0x2A,0x7C,0x7E,0x7E,0xA0,0x07,0x12,0x42,0x55,0x7D,0xA1,0x1B,0x88,0xA0,0x1B,\ +0x85,0x0B,0x98,0x00,0x7C,0x3F,0x7D,0x2B,0x7C,0x7E,0x7E,0xA0,0x07,0x12,0x42,0x55,\ +0x7D,0xB1,0x1B,0x98,0xB0,0x1B,0x95,0x0B,0x80,0x80,0xCB,0x22,0x6C,0x00,0x12,0x2E,\ +0xE9,0x0B,0x08,0x00,0x0B,0x18,0x10,0x22,0x7E,0xA0,0x08,0xA4,0x7E,0x00,0x04,0x59,\ +0xE5,0x09,0x58,0x59,0xF5,0x09,0x80,0x0B,0x55,0xA5,0xD8,0xF3,0x22,0x7E,0xA0,0x08,\ +0xA4,0x7F,0x17,0x7E,0x00,0x03,0x49,0x15,0x09,0x58,0x2D,0x21,0x49,0x15,0x09,0x80,\ +0x2D,0x31,0x0B,0x55,0xA5,0xD8,0xEF,0x0E,0x24,0x0E,0x24,0x0E,0x34,0x0E,0x34,0x59,\ +0x25,0x09,0x58,0x59,0x35,0x09,0x80,0x22,0xA5,0xFC,0x7E,0x00,0x01,0x12,0x2E,0xE9,\ +0x0B,0x08,0x00,0x0B,0x18,0x10,0x7E,0x50,0x08,0xAC,0x45,0x49,0x52,0x09,0x5C,0x2D,\ +0x05,0x49,0x52,0x09,0x5A,0x9D,0x05,0x49,0x52,0x09,0x84,0x2D,0x15,0x49,0x52,0x09,\ +0x82,0x9D,0x15,0x22,0x7C,0x0B,0x7E,0x10,0x08,0xAC,0x01,0x75,0xF0,0x02,0x49,0x10,\ +0x09,0x5A,0x59,0x10,0x09,0x58,0x49,0x10,0x09,0x82,0x59,0x10,0x09,0x80,0x0B,0x05,\ +0xD5,0xF0,0xEB,0x59,0xE0,0x09,0x58,0x59,0xF0,0x09,0x80,0x22,0x7E,0xA0,0x04,0xAC,\ +0xAB,0x2E,0x54,0x00,0x03,0x3E,0x54,0x49,0x05,0x09,0x58,0x49,0x15,0x09,0x80,0x22,\ +0xCA,0x3B,0x7C,0xAB,0x6C,0x33,0xE4,0x1A,0x43,0x19,0xB4,0x0A,0x33,0xE4,0x1A,0x43,\ +0x19,0xB4,0x0A,0x3D,0x0B,0x30,0xA5,0xBB,0x0A,0xEC,0x4C,0xAA,0x78,0x03,0x02,0x31,\ +0x17,0x7E,0xB3,0x08,0x66,0x0A,0x1B,0x1B,0x14,0x7C,0x23,0x7E,0x33,0x08,0x67,0x0A,\ +0x03,0x1B,0x04,0x7E,0x44,0x0B,0x8A,0x6C,0x33,0x02,0x31,0x10,0x09,0xB4,0x00,0x09,\ +0x60,0x03,0x02,0x31,0x0A,0x7E,0x49,0x00,0x09,0xF4,0x00,0x01,0x6D,0xFF,0x7D,0x3F,\ +0x4C,0x00,0x68,0x04,0xBC,0x2F,0x78,0x04,0x7E,0x34,0x00,0x02,0xBE,0x00,0x00,0x08,\ +0x02,0x1B,0x00,0xBC,0x2F,0x08,0x02,0x0B,0xF0,0x09,0xE4,0x00,0x02,0x09,0xD4,0x00,\ +0x03,0x4C,0xEE,0x68,0x04,0xBC,0x1D,0x78,0x04,0x7E,0x34,0x00,0x02,0xBE,0xE0,0x00,\ +0x08,0x02,0x1B,0xE0,0xBC,0x1D,0x08,0x02,0x0B,0xD0,0x7D,0x2F,0x7A,0xE3,0x0A,0x94,\ +0x80,0x3E,0x7E,0xB3,0x08,0x66,0x0A,0xEB,0x7E,0xB3,0x0A,0x94,0x1A,0xFB,0xAD,0xFE,\ +0x3E,0xF4,0x2E,0xF4,0x06,0x12,0x7C,0xC0,0x80,0x19,0x1A,0xEC,0x3E,0xE4,0x2D,0xEF,\ +0x0B,0xE8,0xE0,0xBE,0xE4,0x00,0x00,0x08,0x02,0x0B,0x34,0xBD,0x2E,0x58,0x02,0x7D,\ +0x2E,0x0B,0xC0,0xBC,0xFC,0x58,0xE3,0x7E,0xB3,0x0A,0x94,0x04,0x7A,0xB3,0x0A,0x94,\ +0xBE,0xD3,0x0A,0x94,0x58,0xBC,0xBE,0x24,0x00,0xFF,0x08,0x04,0x7E,0x24,0x00,0xFF,\ +0x7C,0xB5,0x1A,0xF3,0x19,0xBF,0x0A,0x33,0xBE,0x34,0x00,0xFF,0x08,0x04,0x7E,0x34,\ +0x00,0xFF,0x7C,0xB7,0x1A,0xF3,0x19,0xBF,0x0A,0x3D,0x2E,0x44,0x00,0x0A,0x0B,0x30,\ +0xBC,0xA3,0x08,0x03,0x02,0x30,0x4C,0xDA,0x3B,0x22,0xC2,0x06,0x12,0x23,0x67,0xF5,\ +0x47,0x12,0x0C,0xC2,0x7E,0x39,0xB0,0xA5,0xF8,0x54,0x0F,0x70,0x01,0x04,0xF5,0x50,\ +0x7A,0xB3,0x02,0x0D,0xA5,0xE8,0xC4,0x54,0x0F,0x90,0x00,0x1B,0x93,0x7A,0xB3,0x02,\ +0x0E,0x12,0x00,0x78,0xC2,0x14,0x75,0xC3,0xBF,0x7E,0xB3,0x02,0x07,0xF5,0xBD,0x75,\ +0xBC,0x80,0xD2,0xAE,0x22,0x80,0x4E,0x20,0x16,0xFB,0xD5,0x50,0x18,0x7E,0xB3,0x02,\ +0x0D,0x20,0x11,0x07,0x30,0x14,0x04,0x7E,0xB3,0x02,0x0E,0xF5,0x50,0xD2,0x07,0x7E,\ +0x20,0x00,0x12,0x0F,0xFF,0xB2,0x06,0x20,0x14,0x1B,0x30,0x06,0x18,0x7E,0x57,0x02,\ +0x0B,0x1B,0x54,0xA9,0x21,0xD1,0x06,0x7A,0x57,0x02,0x0B,0x80,0x08,0x7E,0xB3,0x02,\ +0x0E,0xF5,0x50,0xD2,0x14,0x7E,0x57,0x02,0x3D,0xBE,0x54,0x00,0x00,0x68,0x06,0x1B,\ +0x54,0x7A,0x57,0x02,0x3D,0x75,0xC3,0xBF,0x22,0xC0,0xE8,0xC2,0xEA,0x12,0x23,0x67,\ +0xBE,0xB1,0x47,0x68,0x19,0xF5,0x47,0x12,0x00,0x78,0x74,0xFF,0xB5,0x47,0x04,0xC2,\ +0x14,0x80,0x0B,0x30,0x14,0x08,0x7E,0xB3,0x02,0x0D,0xF5,0x50,0xC2,0x14,0xD0,0xE8,\ +0x22,0x30,0x28,0x1D,0x7E,0x54,0x03,0xE8,0x7A,0x57,0x02,0x3D,0x12,0x00,0x78,0x74,\ +0x00,0xF5,0x45,0x12,0x22,0xE0,0x10,0x14,0x01,0x22,0x7E,0xB3,0x02,0x0D,0xF5,0x50,\ +0x22,0xE5,0x47,0x60,0x06,0x04,0x60,0xE4,0x30,0x14,0x09,0xD2,0x14,0x74,0x04,0xF5,\ +0x45,0x12,0x22,0xE0,0x22,0x7E,0xA0,0x05,0x7E,0x73,0x08,0xC8,0x5E,0x70,0x0F,0x7E,\ +0x63,0x08,0xC9,0x4C,0x66,0x78,0x03,0x02,0x32,0xCA,0xA5,0xBF,0x00,0x02,0x1B,0x70,\ +0x6C,0x55,0x02,0x32,0xC3,0x1A,0x15,0x09,0xB1,0x09,0xF3,0xB4,0x01,0x02,0x80,0x03,\ +0x02,0x32,0xBA,0x1A,0x15,0x09,0x41,0x0A,0x2E,0x1A,0x15,0x09,0xB1,0x09,0xEE,0xBE,\ +0xB3,0x08,0xBF,0x50,0x6D,0x1A,0x15,0x09,0x31,0x0A,0x02,0x5E,0x30,0x0F,0x1A,0x03,\ +0x09,0x20,0x0A,0x33,0x0A,0x42,0x1A,0x03,0x09,0x20,0x0A,0x3D,0x0A,0x02,0x0A,0xF6,\ +0xBD,0xF4,0x08,0x4E,0x4D,0x44,0x68,0x4A,0x7E,0x23,0x08,0xA7,0x7E,0xB3,0x08,0x93,\ +0x30,0xE3,0x04,0x7E,0x23,0x08,0xE3,0x0A,0xF2,0xBD,0xF4,0x08,0x02,0x0B,0x04,0x0A,\ +0xF7,0xBD,0xF0,0x48,0x05,0xBE,0x40,0x00,0x28,0x28,0xE4,0x1A,0xF5,0x19,0xBF,0x09,\ +0xEE,0x0A,0xF7,0xBD,0xF0,0x48,0x09,0xBE,0x40,0x00,0x28,0x16,0x1B,0x40,0x80,0x12,\ +0x7E,0xB3,0x08,0xBF,0x0A,0xEB,0x2E,0xE4,0x00,0x0A,0x0A,0xF4,0xBD,0xFE,0x58,0x02,\ +0x0B,0x40,0x1A,0xF5,0x19,0x4F,0x0A,0x2E,0x80,0x07,0xE4,0x1A,0xF5,0x19,0xBF,0x0A,\ +0x2E,0x0B,0x50,0xBC,0xA5,0x08,0x03,0x02,0x32,0x25,0x22,0x7D,0x51,0xAD,0x03,0x7D,\ +0x02,0x7D,0x21,0xAD,0x05,0x2D,0x12,0xAD,0x35,0x2D,0x21,0x22,0x7D,0x02,0xAD,0x31,\ +0xAD,0x10,0x2D,0x21,0x22,0x6D,0x00,0x74,0x10,0x4D,0x00,0x78,0x0B,0x4D,0x22,0x78,\ +0x27,0x8D,0x31,0x7D,0x12,0x6D,0x22,0x22,0x7D,0x43,0x7D,0x32,0x6D,0x22,0x2F,0x11,\ +0x2D,0x44,0x50,0x02,0xA5,0x0F,0xBF,0x10,0x40,0x04,0x9F,0x10,0x0B,0x90,0x14,0x78,\ +0xED,0x7F,0x01,0x6D,0x22,0x7D,0x34,0x22,0x7D,0x41,0x7D,0x13,0x8D,0x24,0x7D,0x02,\ +0x2F,0x00,0x40,0x04,0xBD,0x04,0x40,0x04,0x9D,0x04,0x0B,0x14,0x14,0x78,0xF1,0x7D,\ +0x23,0x7D,0x31,0x7D,0x10,0x6D,0x00,0x22,0xC2,0xD5,0x7C,0xB0,0x30,0xE7,0x08,0xB2,\ +0xD5,0x9F,0x22,0x9F,0x20,0x7F,0x02,0x7C,0xB4,0x30,0xE7,0x13,0xB2,0xD5,0x9F,0x22,\ +0x9F,0x21,0x7F,0x12,0x12,0x32,0xE7,0x9F,0x22,0x9F,0x20,0x7F,0x02,0x80,0x03,0x12,\ +0x32,0xE7,0x30,0xD5,0x06,0x9F,0x22,0x9F,0x21,0x7F,0x12,0x22,0x6C,0xAA,0x4D,0x11,\ +0x68,0x1A,0x1E,0x54,0x68,0x0E,0x0B,0x38,0x20,0x1B,0x18,0x20,0x0B,0x35,0x0B,0x15,\ +0x1B,0x54,0x78,0xF2,0x50,0x06,0x7E,0x39,0x40,0x7A,0x19,0x40,0x22,0xCA,0x3B,0x7E,\ +0xA4,0x0B,0x8A,0x7D,0xC3,0x7D,0xBA,0x2E,0xA4,0x00,0x05,0x7E,0x94,0xFF,0xFF,0x6C,\ +0xFF,0x0A,0xDF,0x0B,0xD4,0x7D,0x3D,0x7C,0xE7,0x02,0x34,0x35,0x7A,0xB9,0xF0,0x19,\ +0xEB,0x00,0x01,0x7D,0x3B,0xE4,0x12,0x3A,0x8F,0x7A,0x37,0x0A,0x92,0xBE,0x97,0x0A,\ +0x92,0x28,0x70,0x6C,0xDD,0x6C,0xCC,0xBC,0xFC,0x68,0x0D,0xBC,0xEC,0x68,0x09,0x0A,\ +0xDD,0x2D,0xDA,0x7A,0xD9,0xC0,0x0B,0xD0,0x0B,0xC0,0xBE,0xC0,0x05,0x78,0xE8,0x7D,\ +0x3A,0x2E,0x34,0x00,0x03,0x7D,0x2A,0x7E,0x14,0x00,0x02,0x12,0x3D,0x77,0x6C,0xCC,\ +0x7D,0x3B,0x0B,0x35,0x0A,0x2C,0x2D,0x2A,0x7E,0x14,0x00,0x03,0x12,0x3D,0x77,0x09,\ +0xAB,0x00,0x02,0x74,0x02,0xA4,0x49,0x85,0x0B,0x4A,0x2E,0x87,0x0A,0x92,0xBD,0x98,\ +0x28,0x1A,0x7D,0x3B,0x74,0x03,0x12,0x3A,0x8F,0x2D,0x83,0xBD,0x98,0x28,0x0D,0x7D,\ +0x98,0x7D,0x3C,0x7D,0x2B,0x7E,0x14,0x00,0x05,0x12,0x3D,0x77,0x0B,0xC0,0xBE,0xC0,\ +0x03,0x78,0xBD,0x0B,0xE0,0xBE,0xE0,0x05,0x50,0x03,0x02,0x33,0xAC,0x0B,0xF0,0xBE,\ +0xF0,0x04,0x50,0x03,0x02,0x33,0xA1,0xDA,0x3B,0x22,0xCA,0xD8,0xCA,0x79,0x7A,0xB1,\ +0x2F,0xC2,0x15,0x7E,0xB3,0x0A,0x63,0xBE,0xB0,0x08,0x50,0x08,0x04,0x7A,0xB3,0x0A,\ +0x63,0x02,0x34,0xE8,0xA2,0x79,0xE4,0x33,0x12,0x3A,0x39,0x12,0x38,0x4C,0x12,0x3E,\ +0xC4,0x30,0x7E,0x53,0xA2,0x7C,0xE4,0x33,0x12,0x3C,0x9C,0xE4,0x7E,0x34,0x0B,0x36,\ +0x7E,0x24,0x0C,0x92,0x7E,0x33,0x0A,0x8B,0x7E,0x21,0x43,0x7E,0x13,0x0A,0x8A,0x12,\ +0x3E,0x59,0x7E,0x34,0x0B,0x36,0x7A,0x37,0x0A,0x5D,0x7E,0x74,0x0C,0x92,0x7E,0xD3,\ +0x0A,0x8B,0x80,0x1E,0x7E,0x79,0xB0,0x7E,0x37,0x0A,0x5D,0x12,0x2B,0x17,0x7E,0x73,\ +0x0A,0x8A,0x0A,0x37,0x3E,0x34,0x2E,0x37,0x0A,0x5D,0x7A,0x37,0x0A,0x5D,0x0B,0x74,\ +0x1B,0xD0,0xBE,0xD0,0x00,0x38,0xDD,0x30,0x7F,0x0A,0xD2,0x15,0x12,0x18,0xE4,0x74,\ +0x01,0x12,0x39,0x6F,0x30,0x7D,0x11,0xD2,0x15,0x7E,0x34,0x02,0x13,0x12,0x3E,0xDD,\ +0x7A,0xB3,0x0A,0x6F,0xE4,0x12,0x39,0x6F,0x12,0x3D,0x16,0x24,0xFF,0x92,0x28,0x12,\ +0x3E,0xCE,0x24,0xFF,0x92,0x27,0xDA,0x79,0xDA,0xD8,0x22,0xCA,0xF8,0x7A,0xB1,0x2F,\ +0x7E,0xF1,0x40,0x7E,0x34,0x0B,0x4F,0x7E,0x24,0x0B,0x36,0x7E,0x14,0x0B,0x40,0x7E,\ +0x04,0x0B,0x4A,0x12,0x3E,0x4A,0x6C,0x77,0x6C,0xAA,0x0A,0x2A,0x09,0xB2,0x0B,0x4F,\ +0x60,0x02,0x0B,0x70,0x0B,0xA0,0xBE,0xA0,0x05,0x78,0xEF,0x7E,0xB3,0x02,0x40,0xB4,\ +0x01,0x22,0xA5,0xBF,0x00,0x04,0xC2,0x2A,0x80,0x07,0xBE,0x70,0x01,0x28,0x02,0xD2,\ +0x2A,0x30,0x2A,0x10,0x6C,0xAA,0xE4,0x0A,0x4A,0x19,0xB4,0x0B,0x4F,0x0B,0xA0,0xBE,\ +0xA0,0x05,0x78,0xF2,0x7E,0x73,0x02,0x40,0x0A,0x47,0x2E,0x44,0x0B,0x4F,0x6C,0xAA,\ +0x80,0x12,0x6C,0x77,0xBE,0xA3,0x0A,0x6F,0x78,0x03,0x7E,0x70,0x01,0x7A,0x49,0x70,\ +0x0B,0x44,0x0B,0xA0,0xBC,0xFA,0x38,0xEA,0x7E,0x34,0x0B,0x4F,0x0A,0x2F,0x7E,0x33,\ +0x02,0x40,0x0A,0x53,0x2D,0x52,0x12,0x39,0xD8,0x7E,0xB3,0x02,0x40,0x7C,0x7F,0x7E,\ +0x24,0x0A,0x66,0x7E,0x14,0x0B,0x36,0x7E,0x04,0x0B,0x40,0x12,0x35,0xA9,0x12,0x3C,\ +0xDE,0x60,0x02,0xD2,0x24,0xE4,0xDA,0xF8,0x22,0xCA,0x79,0x7C,0x6B,0x6C,0xAA,0x7E,\ +0x44,0x0E,0x60,0x7E,0x29,0xF0,0xBE,0xF0,0x20,0x68,0x04,0x4C,0xFF,0x78,0x0A,0x7E,\ +0x49,0xB0,0x54,0x7F,0x7A,0x49,0xB0,0x80,0x4B,0xBE,0xF0,0x08,0x68,0x46,0xBE,0xF0,\ +0x01,0x78,0x06,0x7E,0x49,0xB0,0x20,0xE7,0x3B,0x0B,0x18,0xF0,0x0B,0x08,0xE0,0x7D,\ +0xDF,0x5E,0xD4,0x07,0x00,0x0E,0xD4,0x0E,0xD4,0x0E,0xD4,0x0E,0xD4,0x4E,0xD4,0x00,\ +0x80,0x7D,0xCE,0x5E,0xC4,0x07,0x00,0x7D,0x7C,0x1A,0x7E,0x4D,0xD7,0x7D,0x7D,0x7C,\ +0xBF,0x7A,0x49,0xB0,0x7D,0x7F,0x7C,0xBF,0x19,0xB4,0x00,0x01,0x7D,0x7E,0x7C,0xBF,\ +0x19,0xB4,0x00,0x02,0x7E,0x49,0xB0,0x30,0xE7,0x02,0x0B,0xA0,0x0B,0x24,0x0B,0x46,\ +0x0B,0x15,0x0B,0x05,0x1B,0x60,0xA5,0xBE,0x00,0x89,0x6C,0xAA,0x7E,0x60,0x01,0xE4,\ +0x80,0x12,0x7E,0x29,0x30,0x0A,0x43,0x5E,0x44,0x00,0x13,0x68,0x02,0x4C,0xA6,0x3E,\ +0x60,0x0B,0x24,0x04,0xBC,0x7B,0x38,0xEA,0x7A,0xA3,0x0E,0x5F,0xDA,0x79,0x22,0xE4,\ +0x7A,0xB3,0x08,0x72,0x7E,0x34,0x80,0x01,0x7A,0x37,0x08,0x86,0x6D,0x33,0x7A,0x37,\ +0x08,0x84,0x6D,0x33,0x7A,0x37,0x08,0x88,0x6D,0x33,0x7A,0x37,0x08,0x98,0x6D,0x33,\ +0x7A,0x37,0x08,0x96,0xE4,0x7A,0xB3,0x08,0x73,0x6D,0x33,0x7A,0x37,0x08,0x5C,0x6D,\ +0x33,0x7A,0x37,0x08,0x5E,0x6D,0x33,0x7A,0x37,0x08,0x58,0x74,0xC8,0x7A,0xB3,0x08,\ +0x6C,0x74,0x01,0x7A,0xB3,0x08,0x6A,0xE4,0x7A,0xB3,0x08,0x69,0xE4,0x7A,0xB3,0x08,\ +0x9B,0xE4,0x7A,0xB3,0x08,0x9A,0xE4,0x7A,0xB3,0x08,0x90,0xE4,0x7A,0xB3,0x08,0x92,\ +0xE4,0x7A,0xB3,0x08,0xA4,0xE4,0x7A,0xB3,0x08,0xA5,0x7E,0x34,0x06,0x12,0x7E,0x24,\ +0x01,0xF8,0x12,0x3D,0xE0,0x7E,0x34,0x04,0x1A,0x7E,0x24,0x01,0xF8,0x12,0x3D,0xE0,\ +0x7E,0x34,0x08,0x0A,0x7E,0x24,0x00,0x0C,0x12,0x3D,0xE0,0x7E,0x34,0x08,0x16,0x7E,\ +0x24,0x00,0x0C,0x12,0x3D,0xE0,0x22,0xCA,0xF8,0x7D,0x42,0x7C,0xAB,0x7D,0xF3,0xBE,\ +0xA0,0x05,0x50,0x59,0x7E,0xF0,0x04,0x7E,0x70,0x04,0x0A,0xDA,0x1A,0x0F,0xBD,0x0D,\ +0x58,0x26,0x1A,0x17,0xBD,0x1D,0x58,0x20,0xAD,0xD0,0x1A,0x17,0x2D,0x1D,0x3E,0x14,\ +0x2D,0x1F,0x0B,0x18,0xE0,0x7E,0xD4,0x00,0x05,0xAD,0xD0,0x1A,0x17,0x2D,0x1D,0x3E,\ +0x14,0x2D,0x1F,0x1B,0x18,0xE0,0x80,0x15,0x7E,0x24,0x30,0x00,0x7E,0x14,0x00,0x05,\ +0xAD,0x10,0x1A,0xE7,0x2D,0xE1,0x3E,0xE4,0x2D,0xEF,0x1B,0xE8,0x20,0x1B,0x70,0xBE,\ +0x70,0x00,0x58,0xB6,0x1B,0xF0,0xBE,0xF0,0x00,0x58,0xAC,0x80,0x2A,0xBE,0xA0,0x05,\ +0x28,0x25,0x7E,0xF0,0x01,0x1A,0x0F,0x7E,0x34,0x00,0x0A,0xAD,0x30,0x2D,0x3F,0x0A,\ +0x1A,0xAD,0x10,0x7D,0x21,0x3E,0x24,0x2D,0x2F,0x7E,0x14,0x00,0x0A,0x12,0x3D,0x77,\ +0x0B,0xF0,0xBE,0xF0,0x05,0x78,0xDE,0x7D,0x34,0x12,0x33,0x8D,0xDA,0xF8,0x22,0xC2,\ +0x11,0xE4,0x7A,0xB3,0x02,0x00,0x22,0x7E,0xB3,0x02,0x00,0x30,0xE1,0x03,0x75,0x35,\ +0xFF,0xC0,0xE8,0xC2,0xEA,0x30,0x12,0x03,0x12,0x37,0xAB,0xD0,0xE8,0x12,0x12,0x34,\ +0x70,0x07,0x30,0x09,0x02,0xD2,0x10,0xC3,0x22,0xD3,0x22,0x12,0x12,0x34,0x60,0x0A,\ +0xE5,0x4C,0x20,0xE3,0x05,0x12,0x24,0x2B,0xC2,0x12,0x22,0xD3,0x22,0x12,0x24,0x1C,\ +0x10,0x10,0x29,0x20,0x09,0x00,0x12,0x12,0x34,0xF5,0x3C,0x7E,0x34,0x01,0x44,0x75,\ +0x3D,0x03,0x12,0x11,0x7C,0x50,0xE4,0x0A,0x50,0x23,0x2E,0x54,0x06,0x00,0x1B,0x58,\ +0x30,0x7E,0xA0,0x06,0x6C,0x11,0xE5,0x43,0x24,0x06,0xC3,0x22,0x7E,0x34,0x06,0x00,\ +0x7E,0x24,0x01,0x44,0x7E,0x31,0x42,0x12,0x3C,0x58,0x7E,0xA0,0x04,0x6D,0x00,0x20,\ +0x0A,0x03,0x7E,0x11,0x43,0xE5,0x42,0x80,0xE1,0xD2,0x12,0x12,0x37,0xAB,0x22,0xC2,\ +0x15,0xC2,0x24,0xC2,0x26,0xC2,0x27,0xC2,0x28,0xC2,0x29,0x75,0x4E,0x00,0x75,0x4F,\ +0xFF,0x22,0xC0,0xA8,0xC2,0xAF,0x30,0x15,0x06,0xC2,0x15,0xE4,0x12,0x34,0xFB,0x30,\ +0x29,0x17,0xC2,0x29,0x30,0x24,0x12,0xE5,0x4C,0x20,0xE2,0x0D,0x12,0x24,0x2B,0x30,\ +0x25,0x07,0x7E,0xA3,0x02,0x3F,0x7A,0xA1,0x8B,0xD0,0xA8,0x22,0xE4,0x22,0x12,0x23,\ +0x51,0x50,0x05,0x90,0xAA,0x55,0xE4,0x73,0x22,0xC0,0xA8,0xC2,0xAF,0x12,0x23,0x57,\ +0x50,0x2A,0x74,0x05,0xF5,0x45,0x12,0x22,0xE0,0xE5,0x46,0xB4,0x55,0xE5,0xD2,0x16,\ +0x75,0xBC,0x83,0x75,0xBD,0x01,0x75,0xBB,0x01,0x6D,0x55,0x7A,0x57,0xFF,0x50,0x43,\ +0xB9,0x01,0x53,0xB9,0xFE,0x12,0x24,0x1C,0x12,0x3D,0xD5,0xD3,0xD0,0xA8,0x22,0x0A,\ +0x33,0x0B,0x34,0x1E,0x34,0x2D,0x23,0x7E,0x70,0x01,0x02,0x42,0x55,0xBE,0x80,0x00,\ +0x68,0x5D,0x70,0x1C,0x7E,0x33,0x08,0xC7,0x1E,0x30,0x0A,0x13,0x0B,0x88,0x00,0x9D,\ +0x01,0x1B,0x98,0x00,0x0B,0x85,0x0B,0x95,0x1B,0x80,0x7C,0xB8,0x70,0xEE,0x80,0x3F,\ +0x0B,0x88,0x20,0x0B,0x98,0x00,0x7D,0x30,0x9D,0x32,0x7E,0x30,0x3F,0x7E,0xA0,0x06,\ +0x7C,0xB9,0x30,0xE0,0x08,0x7E,0x30,0x03,0x7E,0xA0,0x02,0x80,0x12,0xBE,0x34,0x00,\ +0x20,0x58,0x0C,0xBE,0x34,0xFF,0xE0,0x08,0x06,0x7E,0x30,0x0F,0x7E,0xA0,0x04,0x12,\ +0x38,0x8F,0x1B,0x98,0x10,0x0B,0x85,0x0B,0x95,0x1B,0x80,0x7C,0xB8,0x70,0xC1,0x22,\ +0xCA,0x3B,0x7C,0xC5,0x7C,0xF6,0x7C,0xE7,0x7C,0xDB,0x7E,0x34,0x03,0xDA,0x7E,0x24,\ +0x00,0x30,0x12,0x3D,0xE0,0x7E,0x34,0x04,0x0A,0x7E,0x24,0x04,0x9C,0x12,0x3D,0xE0,\ +0x7A,0xC3,0x08,0x62,0x7A,0xD3,0x08,0x63,0x7A,0xE3,0x08,0x64,0x7A,0xF3,0x08,0x65,\ +0x7E,0xB3,0x08,0x62,0x60,0x12,0x7E,0x73,0x08,0x64,0x7A,0x73,0x08,0x66,0x7E,0x73,\ +0x08,0x63,0x7A,0x73,0x08,0x67,0x80,0x10,0x7E,0x73,0x08,0x63,0x7A,0x73,0x08,0x66,\ +0x7E,0x73,0x08,0x64,0x7A,0x73,0x08,0x67,0x7E,0x34,0x09,0x44,0x7E,0x24,0x01,0x19,\ +0x12,0x3D,0xE0,0x12,0x36,0x4F,0x12,0x3D,0xF3,0x12,0x3B,0x6D,0xDA,0x3B,0x22,0xCA,\ +0xD8,0xCA,0x79,0x7C,0xDB,0x7E,0xF0,0xFF,0x12,0x3E,0xC9,0x70,0x09,0x7E,0xB3,0x0A,\ +0x6F,0xBE,0xB0,0xFF,0x68,0x05,0x7E,0xE0,0x01,0x80,0x02,0x6C,0xEE,0x7E,0xB3,0x0A,\ +0x62,0x70,0x08,0x4C,0xEE,0x68,0x04,0x6C,0xFF,0x80,0x23,0x4C,0xEE,0x78,0x1F,0x12,\ +0x3B,0xCD,0x7C,0xAB,0x4C,0xDD,0x78,0x0A,0x7C,0xBA,0x30,0xE7,0x05,0x7E,0xF0,0x01,\ +0x80,0x0C,0x4C,0xDD,0x68,0x08,0x7C,0xBA,0x30,0xE3,0x03,0x7E,0xF0,0x01,0x7A,0xE3,\ +0x0A,0x62,0xBE,0xF0,0x00,0x48,0x0C,0x30,0x24,0x04,0x4C,0xFF,0x78,0x05,0x7C,0xBF,\ +0x12,0x00,0x05,0xDA,0x79,0xDA,0xD8,0x22,0x7C,0xAB,0x7E,0x24,0x0A,0x66,0x4C,0xAA,\ +0x68,0x56,0x20,0x24,0x0A,0x7E,0x29,0xB0,0xB4,0x20,0x04,0xE4,0x7A,0x29,0xB0,0x7E,\ +0x29,0x30,0x7C,0xB3,0x54,0xF0,0x78,0x38,0x7E,0x39,0x20,0x4C,0x22,0x68,0x24,0xA5,\ +0xBB,0x00,0x07,0x74,0x01,0x7A,0x29,0xB0,0x80,0x26,0xA5,0xBB,0x01,0x03,0x20,0x24,\ +0x1F,0xA5,0xBA,0x03,0x07,0x74,0x08,0x7A,0x29,0xB0,0x80,0x14,0x74,0x02,0x7A,0x29,\ +0xB0,0x80,0x0D,0x0A,0x13,0x5E,0x14,0x00,0x0B,0x68,0x05,0x74,0x20,0x7A,0x29,0xB0,\ +0x0B,0x24,0x0B,0x34,0x1B,0xA0,0x78,0xAA,0x22,0x60,0x40,0x74,0x0A,0x7A,0xB3,0x08,\ +0x76,0x7E,0x73,0x08,0x7B,0xBE,0x70,0x19,0x28,0x06,0x74,0x0A,0x7A,0xB3,0x08,0x77,\ +0x74,0xC8,0x7A,0xB3,0x08,0x78,0x7E,0xB3,0x08,0x79,0xBE,0xB0,0xFF,0x50,0x05,0x04,\ +0x7A,0xB3,0x08,0x79,0x7E,0xB3,0x08,0x7A,0x70,0x09,0x7E,0x73,0x08,0x79,0xBE,0x70,\ +0x04,0x40,0x1B,0x74,0xA0,0x7A,0xB3,0x08,0x7A,0x80,0x13,0x7E,0xB3,0x08,0x7A,0xBE,\ +0xB0,0x00,0x28,0x05,0x14,0x7A,0xB3,0x08,0x7A,0xE4,0x7A,0xB3,0x08,0x79,0x22,0xCA,\ +0x79,0x7C,0x0B,0x7D,0x13,0x0A,0x40,0x7D,0xF4,0x2D,0xF1,0x7E,0xF9,0xA0,0x09,0x1F,\ +0x00,0x01,0x7E,0xF0,0x05,0xAC,0xF0,0x0A,0x2A,0x2D,0x27,0x3E,0x24,0x49,0x32,0x0B,\ +0x36,0x49,0x22,0x0B,0x40,0x0A,0xE1,0x2D,0xE7,0x3E,0xE4,0x49,0xDE,0x0B,0x36,0x2D,\ +0x2D,0x49,0xEE,0x0B,0x40,0x2D,0x3E,0xBD,0x23,0x50,0x0F,0x7A,0xF9,0x10,0x7D,0x34,\ +0x2D,0x31,0x19,0xA3,0x00,0x01,0x7D,0x32,0x80,0x00,0xDA,0x79,0x22,0x7C,0x17,0x6D,\ +0x33,0x7E,0xF7,0x08,0x58,0xBE,0xF4,0x00,0x0C,0x08,0x3C,0x23,0x0A,0x5B,0x7E,0x83,\ +0x08,0x66,0x7C,0x08,0x7E,0x29,0x90,0xAC,0x89,0x3E,0x44,0x2E,0x44,0x04,0x1A,0x7D,\ +0xF1,0x0B,0x48,0xE0,0x0B,0xF8,0xD0,0x9D,0xED,0xA9,0x35,0xD1,0x06,0x6E,0xE4,0xFF,\ +0xFF,0x0B,0xE4,0xBD,0xE3,0x28,0x02,0x7D,0x3E,0x0B,0x45,0x0B,0xF5,0xA5,0xD8,0xE1,\ +0x2D,0x15,0x0B,0x24,0xA5,0xD9,0xC7,0x22,0x7E,0x34,0x0A,0x61,0xE4,0x7E,0x24,0x00,\ +0x11,0x12,0x3E,0x77,0x74,0xFF,0x7A,0xB3,0x0A,0x6F,0x74,0xFF,0x7A,0xB3,0x0A,0x71,\ +0x7E,0x41,0x3E,0x7E,0x71,0x3F,0x7E,0x61,0x40,0xA2,0x0A,0xE4,0x33,0x7C,0x5B,0x7C,\ +0xB4,0x7E,0x40,0x01,0x12,0x39,0x00,0x7E,0x73,0x0E,0xA6,0x0A,0x17,0x2E,0x14,0x0E,\ +0x9C,0x7E,0x35,0x48,0x7E,0x25,0x4A,0x12,0x3D,0x8E,0xC2,0x2A,0x22,0x74,0xFF,0x7A,\ +0xB3,0x08,0x6E,0xE4,0x7A,0xB3,0x08,0x80,0xE4,0x7A,0xB3,0x08,0x6F,0xE4,0x7A,0xB3,\ +0x08,0x70,0x74,0xC8,0x7A,0xB3,0x08,0x6D,0x7E,0x34,0x04,0x0A,0x7E,0x24,0x00,0x08,\ +0x12,0x3D,0xE0,0x7E,0x34,0x04,0x12,0x7E,0x24,0x00,0x08,0x12,0x3D,0xE0,0x22,0x7E,\ +0xB3,0x08,0xA6,0x30,0xE2,0x26,0x7E,0x37,0x08,0xF3,0x4D,0x33,0x68,0x1E,0x7E,0xB3,\ +0x08,0x9A,0x60,0x06,0x7E,0xB3,0x08,0x78,0x60,0x12,0x7E,0xB3,0x09,0x3F,0xB4,0x01,\ +0x0B,0xE4,0x7A,0xB3,0x09,0x3F,0x74,0x01,0x7A,0xB3,0x09,0x3E,0x22,0x6C,0xAA,0x7E,\ +0xB3,0x08,0x6F,0xB4,0x01,0x0E,0x4E,0xA0,0x80,0x7E,0x37,0x08,0x5A,0x4D,0x33,0x78,\ +0x03,0x4E,0xA0,0x01,0x7E,0xB3,0x08,0x8C,0x60,0x03,0x4E,0xA0,0x02,0x7E,0xB3,0x08,\ +0x8D,0x60,0x03,0x4E,0xA0,0x08,0x7C,0xBA,0x22,0x6C,0xAA,0x6C,0x77,0x1A,0x27,0x09,\ +0x62,0x09,0xF3,0xA5,0xBE,0x01,0x06,0x74,0x01,0x7A,0xB3,0x08,0x8D,0xBE,0x60,0x01,\ +0x28,0x07,0xBE,0x60,0x05,0x50,0x02,0x0B,0xA0,0x0B,0x70,0xBE,0x70,0x05,0x48,0xDD,\ +0x7C,0xBA,0x22,0x12,0x0D,0x29,0x0A,0x0A,0x7E,0x54,0xBF,0xFF,0x9D,0x50,0x7A,0xA3,\ +0x02,0x3F,0xC2,0xF7,0x75,0x8E,0x40,0x7A,0xA1,0x8B,0xF5,0x8A,0x75,0xC3,0xFD,0xD2,\ +0xA9,0x22,0x75,0xC3,0xFD,0x75,0x8B,0x00,0x12,0x24,0x1C,0x22,0x20,0x13,0x0F,0x02,\ +0x43,0xB6,0x20,0x13,0x09,0x02,0x43,0xC2,0x20,0x13,0x03,0x02,0x43,0xD0,0x22,0x6C,\ +0x22,0x6C,0x00,0x6D,0x55,0x7E,0x1B,0x10,0x2D,0x50,0x0B,0x1C,0x23,0x1B,0x14,0xA9,\ +0x31,0xD1,0xF2,0x22,0x30,0x2B,0x24,0xC2,0xAF,0x12,0x24,0x1C,0x53,0xBC,0x7F,0x6D,\ +0x55,0x7A,0x57,0xFF,0x50,0x43,0xB9,0x01,0x53,0xB9,0xFE,0x75,0xBB,0x01,0xF5,0xD1,\ +0x7E,0xF8,0x0F,0x9B,0x7E,0xC4,0x46,0x57,0x02,0x40,0x02,0x22,0x60,0x0C,0x7E,0xB3,\ +0x08,0x83,0x44,0x02,0x7A,0xB3,0x08,0x83,0x80,0x06,0x74,0x01,0x7A,0xB3,0x08,0x83,\ +0x7E,0xB3,0x08,0x83,0xB4,0x03,0x05,0xE4,0x7A,0xB3,0x08,0x83,0x22,0x7D,0x13,0x7E,\ +0x73,0x08,0x66,0x1A,0x4B,0x1A,0x57,0xAD,0x54,0x7D,0x35,0x3E,0x34,0x7D,0x03,0x2E,\ +0x04,0x04,0x1A,0x1B,0x18,0x00,0x2E,0x34,0x06,0x12,0x1B,0x28,0x30,0x22,0x6C,0xAA,\ +0x7E,0x44,0x0A,0x66,0x74,0x09,0x7E,0x49,0x70,0x4C,0xA7,0x0B,0x44,0x14,0x78,0xF6,\ +0xBE,0xA0,0x08,0x78,0x03,0xE4,0x80,0x02,0x7C,0xBA,0x22,0xBE,0xB3,0x09,0x40,0x68,\ +0x14,0x7A,0xB3,0x09,0x40,0x64,0x01,0x7A,0xB3,0x09,0x3D,0xE4,0x7A,0xB3,0x09,0x3C,\ +0xE4,0x7A,0xB3,0x09,0x3B,0x22,0x7E,0xB3,0x08,0x9A,0x60,0x04,0x74,0x01,0x80,0x0E,\ +0x7E,0x73,0x08,0x6C,0xBE,0x70,0x0A,0x38,0x04,0x74,0x01,0x80,0x01,0xE4,0x22,0xCA,\ +0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7D,0x83,0x7D,0x92,0x7C,0x8B,0x7C,0xB3,0x7C,0x92,\ +0x12,0x38,0x9D,0xD0,0xD0,0xDA,0x3B,0x22,0x7C,0x04,0x7D,0x23,0x7E,0x61,0x43,0xAC,\ +0x6B,0x3E,0x34,0x2E,0x34,0x06,0x12,0x7E,0x31,0x43,0x12,0x3C,0x58,0x7C,0x40,0x22,\ +0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7F,0x60,0x7F,0x71,0x7E,0xB7,0x0A,0x90,0x12,\ +0x16,0xB3,0xD0,0xD0,0xDA,0x3B,0x22,0x80,0x10,0x1B,0x14,0x7D,0x02,0x7D,0x20,0x0B,\ +0x24,0x7E,0x09,0x10,0x7A,0x39,0x10,0x0B,0x34,0x4D,0x11,0x78,0xEC,0x22,0x7D,0x01,\ +0x7A,0x37,0x0A,0x07,0x7A,0x27,0x0A,0x09,0x7E,0x14,0x08,0xA6,0x7D,0x30,0x74,0x4D,\ +0x12,0x33,0x6C,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x7D,0x83,0x7D,0x92,0x7C,\ +0x8B,0x12,0x15,0xCD,0xD0,0xD0,0xDA,0x3B,0x22,0x80,0x0F,0x14,0x7D,0x12,0x7D,0x21,\ +0x0B,0x24,0x7E,0x19,0xA0,0x7A,0x39,0xA0,0x0B,0x34,0x70,0xEF,0x22,0xE5,0xC2,0xF4,\ +0xF5,0xC2,0x00,0x00,0x22,0x75,0x9C,0x0B,0xD2,0xEA,0x43,0x87,0x02,0x00,0x00,0x22,\ +0x6D,0x11,0x80,0x0A,0xE4,0x7D,0x01,0x2D,0x03,0x7A,0x09,0xB0,0x0B,0x14,0xBD,0x21,\ +0x18,0xF2,0x22,0x7E,0x34,0x08,0xF3,0x7E,0x24,0x00,0x51,0x12,0x3D,0xE0,0x74,0x01,\ +0x7A,0xB3,0x09,0x3D,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,0x24,0xA6,0xD0,\ +0xD0,0xDA,0x3B,0x12,0x3B,0x9F,0x22,0xC0,0xD0,0xCA,0x2B,0x12,0x33,0x38,0xDA,0x2B,\ +0xD0,0xD0,0x22,0xBC,0xBA,0x50,0x01,0x04,0x22,0x9D,0x32,0xBE,0x34,0x00,0x00,0x08,\ +0x02,0x80,0x06,0x6E,0x34,0xFF,0xFF,0x0B,0x34,0x22,0xE4,0x6C,0xAA,0x1A,0x4B,0x19,\ +0xA4,0x09,0xF8,0x04,0xBE,0xB0,0x05,0x48,0xF4,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,\ +0x00,0x12,0x21,0x29,0xD0,0xD0,0xDA,0x3B,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,\ +0x12,0x1F,0x79,0xD0,0xD0,0xDA,0x3B,0x22,0xCA,0x3B,0xC0,0xD0,0x75,0xD0,0x00,0x12,\ +0x24,0x3A,0xD0,0xD0,0xDA,0x3B,0x22,0x4D,0x22,0x68,0x09,0x7A,0x39,0xB0,0x0B,0x34,\ +0x1B,0x24,0x78,0xF7,0x22,0x7D,0x23,0x7E,0x34,0x04,0x12,0x7E,0x31,0x40,0x12,0x3C,\ +0x58,0x22,0x7E,0xB3,0x09,0x42,0xB4,0x01,0x04,0x74,0x01,0x80,0x01,0xE4,0x22,0x12,\ +0x3E,0xD8,0x60,0x05,0x74,0x05,0x12,0x00,0x05,0x22,0xBE,0xB0,0x00,0x28,0x01,0x14,\ +0x22,0xBE,0xB0,0xFF,0x50,0x01,0x04,0x22,0xE4,0x7A,0xB3,0x08,0x82,0x22,0xE4,0x7A,\ +0xB3,0x09,0x3C,0x22,0x7A,0xB3,0x08,0x93,0x22,0x7E,0xB3,0x08,0x61,0x22,0x7E,0xB3,\ +0x08,0x6B,0x22,0x7E,0xB3,0x09,0x42,0x22,0x7E,0xB3,0x09,0x3F,0x22,0x74,0xFF,0x22,\ +0x54,0x46,0x49,0x32,0x17,0x24,0x06,0x00,0x05,0x31,0x03,0x30,0x04,0x01,0x03,0x66,\ +0x00,0x00,0x00,0x00,0x00,0x06,0x7A,0x00,0x00,0x01,0x00,0x29,0xA3,0x39,0x5C,0xC6,\ +0x53,0x54,0x46,0x57,0x66,0x66,0x06,0x00,0xFC,0x12,0x21,0x79,0xBD,0xC9,0xDE,0xE3,\ +0x00,0x00,0x01,0x6E,0x36,0x00,0x00,0x00,0x00,0x00,0x82,0x14,0x11,0x00,0x00,0x00,\ +0x01,0xF2,0x50,0xF0,0x06,0x36,0xF9,0x3A,0x00,0x24,0x01,0x11,0x00,0xFE,0xF6,0xF5,\ +0x0C,0x1B,0x01,0xE0,0x03,0x20,0x00,0x00,0x00,0x00,0x04,0x03,0x58,0x00,0x64,0x50,\ +0x40,0xFF,0x37,0x00,0x00,0x40,0x00,0x1E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x00,0x00,0x00,0x00,0x1E,0x2E,0x00,0x00,0x00,0x00,0x00,0x00,0x14,0x07,0x14,0x28,\ +0x04,0x00,0x02,0x00,0x00,0x00,0x00,0x45,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,\ +0x08,0x32,0x64,0x50,0xA0,0x14,0x0A,0x14,0x00,0x05,0x01,0xE0,0x03,0x20,0x0A,0x10,\ +0x00,0x00,0x90,0xD6,0x00,0x00,0x00,0x00,0x04,0x00,0x00,0x00,0x00,0x00,0x00,0x02,\ +0x10,0x10,0x00,0x04,0x00,0x61,0x80,0x40,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,\ +0x0F,0x0F,0x0F,0x0F,0x1F,0x24,0x29,0x2E,0x3D,0x42,0x0E,0x00,0x28,0x28,0x0F,0x0F,\ +0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x0F,0x24,0x61,0x40,0x09,0x08,0x07,\ +0x06,0x05,0x04,0x03,0x02,0x01,0x00,0x00,0x00,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,\ +0x0F,0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x06,0x07,0x12,0x13,0x14,0x00,0x00,\ +0x00,0x00,0x00,0x03,0x55,0x01,0x01,0x30,0x28,0x00,0x00,0x00,0x00,0x00,0x05,0xA0,\ +0x08,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x21,0xB6,0x00,0x00,\ +0x01,0x0F,0x75,0xA8,0x00,0x31,0x57,0xBE,0xC4,0x46,0x57,0x68,0x35,0x01,0x00,0x31,\ +0x57,0x7E,0x04,0x00,0xFF,0x7E,0x14,0x00,0x83,0x0B,0x0A,0xE0,0xBE,0xE4,0x3F,0xFC,\ +0x38,0x1E,0x0B,0x0A,0x10,0x0B,0x0A,0xF0,0x0B,0x15,0x0B,0x0A,0xD0,0x6E,0xD4,0xFF,\ +0xFF,0xBD,0xDF,0x78,0x0B,0x6D,0x11,0x31,0x3E,0xBD,0x3F,0x78,0x03,0x02,0x00,0x00,\ +0x31,0x77,0x7E,0xF8,0x00,0xBF,0x75,0xBC,0x00,0x7E,0x84,0x8F,0x00,0x6D,0x99,0x6D,\ +0xAA,0x6D,0xBB,0x31,0xAC,0xE5,0x09,0xB4,0x80,0x05,0x7E,0x60,0x84,0x01,0x65,0xB4,\ +0x86,0x19,0x7E,0x60,0x8C,0x85,0x0B,0x08,0xC3,0xE5,0x08,0x94,0x10,0x50,0x04,0x51,\ +0x2A,0x01,0x77,0x7E,0x84,0xFF,0x00,0x31,0x2F,0x01,0x49,0xB4,0x82,0x02,0x80,0x02,\ +0x01,0xC6,0x85,0x0B,0x08,0x90,0x0C,0x00,0x7E,0x20,0x92,0x31,0xAC,0x7E,0x00,0x0A,\ +0x7E,0x30,0x07,0xA5,0xE6,0xF0,0xA5,0x08,0xA3,0xA5,0xDB,0xF7,0xA5,0xDA,0xEC,0x31,\ +0xAC,0xE5,0x0A,0xF0,0xA3,0xE5,0x0B,0xF0,0x7E,0x60,0x82,0x51,0x2A,0x7E,0x04,0x00,\ +0xFF,0xE5,0x08,0x23,0x23,0xA5,0xFA,0x7E,0x30,0x00,0x7E,0xE4,0x04,0x00,0x31,0x3E,\ +0x7D,0xA3,0x31,0x2F,0x01,0x49,0xB4,0x83,0x23,0xE5,0x0B,0x23,0x23,0xF5,0x83,0x75,\ +0x82,0x00,0x7E,0x20,0x80,0x7E,0x00,0x09,0x7E,0x30,0x08,0xE4,0x93,0xA3,0xA5,0xF6,\ +0xA5,0x08,0xA5,0xDB,0xF6,0x31,0xF2,0xA5,0xDA,0xEB,0x01,0x49,0xB4,0x84,0x02,0x01,\ +0x00,0xB4,0x8E,0x03,0x02,0x00,0x00,0xB4,0x87,0x06,0x51,0x35,0x31,0x2F,0x01,0x49,\ +0xB4,0x88,0x1B,0x43,0xB9,0x80,0x7E,0x60,0x00,0x7E,0x71,0x0A,0x0B,0x38,0x80,0x5E,\ +0x84,0x00,0xFF,0x4E,0x84,0x8F,0x00,0x53,0xB9,0x7F,0x31,0x2F,0x01,0x49,0xB4,0x01,\ +0x0C,0x7E,0x84,0x06,0x06,0x7E,0xA4,0x06,0x00,0x31,0x2F,0x01,0x49,0x01,0x49,0x7A,\ +0x85,0x09,0x7A,0x95,0x0B,0x7A,0xA5,0x0D,0x7A,0xB5,0x0F,0x31,0xF2,0x22,0x6D,0x33,\ +0x6D,0x44,0x6D,0x55,0x0B,0x44,0x7E,0x0B,0xB0,0x0B,0x0C,0x2D,0x35,0xA5,0xEF,0x23,\ +0xA5,0xFF,0xBD,0x4E,0x40,0xEE,0x22,0xA9,0xD7,0xEA,0xE4,0x90,0x43,0xF7,0x93,0xF5,\ +0xEC,0x15,0x82,0xE4,0x93,0xF5,0xED,0x15,0x82,0xE4,0x93,0xF5,0x9E,0xA9,0xC7,0xEA,\ +0x75,0xEA,0x07,0x75,0xC5,0x17,0x22,0x75,0xA6,0x30,0x75,0xA7,0x00,0x90,0x43,0xE9,\ +0x20,0x83,0x13,0xA9,0xC3,0xA3,0xD2,0x93,0x20,0x93,0x02,0x21,0xA1,0xC2,0x93,0x30,\ +0x93,0x10,0xA3,0xA3,0x21,0xA1,0x20,0x87,0x02,0x21,0x9E,0x90,0x43,0xEB,0x30,0x86,\ +0x01,0xA3,0xE4,0x93,0x44,0x80,0xF5,0xF1,0xA9,0xD3,0xA3,0x22,0x7E,0x00,0x09,0x75,\ +0xBB,0x00,0xA9,0x26,0xF2,0x2C,0xA9,0x37,0xF2,0xF5,0x75,0xF2,0x7F,0x75,0xF3,0x41,\ +0x75,0xBB,0x00,0xA9,0x27,0xF2,0x0B,0xA9,0x26,0xF2,0x07,0xA9,0x33,0xF2,0xF1,0x63,\ +0xF2,0xFF,0xE5,0xF4,0x54,0xF0,0xC4,0xA5,0xFE,0xA5,0xA6,0xF5,0xA5,0x08,0xA5,0xDE,\ +0xF8,0x22,0x75,0xF2,0xBF,0x7E,0x60,0x08,0x75,0xF5,0xFF,0xA5,0xDE,0xFA,0x51,0x11,\ +0x21,0xAF,0x7E,0x00,0x09,0x75,0xBB,0x00,0xA9,0x27,0xF2,0x14,0xA9,0x36,0xF2,0xF5,\ +0x75,0xF2,0xBF,0x7E,0x60,0x08,0xA5,0x86,0xF5,0xA5,0x08,0xA5,0xDE,0xF8,0x51,0x11,\ +0x22,0x75,0xF3,0x82,0x75,0xBB,0x00,0xA9,0x27,0xF2,0x0B,0xA9,0x26,0xF2,0x07,0xA9,\ +0x33,0xF2,0xF1,0x63,0xF2,0xFF,0x75,0xF4,0x04,0x22,0x85,0x08,0xC6,0x7A,0x61,0xC4,\ +0x00,0x00,0x00,0x00,0x22,0x75,0xC7,0xAA,0x75,0xC7,0x55,0x75,0xC7,0x5A,0x22,0xFF,\ +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x46,0x36,0x31,0x01,0xE4,0xA5,0xFA,0xA5,0xFE,0xA5,0xE8,0x30,0xE7,0x02,0x7C,\ +0x63,0xAD,0x01,0x9C,0x16,0xE4,0xA5,0xFE,0xA5,0xF8,0xA5,0xEC,0x30,0xE7,0x02,0x7C,\ +0x07,0xAD,0x23,0x9C,0x50,0x1A,0x25,0x1A,0x01,0x2F,0x01,0x7C,0xBA,0x5E,0xB0,0x1F,\ +0x5E,0xA0,0x80,0x5C,0xA0,0xBE,0xB0,0x08,0x60,0x20,0x40,0x10,0x9E,0xB0,0x08,0x7C,\ +0x32,0x7C,0x21,0x0A,0x00,0x30,0xF7,0xED,0x1A,0x01,0x80,0xE9,0x1E,0x14,0x1E,0x04,\ +0x4C,0x0A,0x50,0x03,0x4E,0x20,0x80,0xD5,0xE0,0xF2,0x22,0x1A,0x02,0x1A,0x00,0x1A,\ +0x26,0x1A,0x24,0x5D,0x03,0x5D,0x21,0x2D,0x20,0xAD,0x13,0x9D,0x02,0x22,0xCA,0x1B,\ +0x7D,0x30,0x12,0x42,0xAB,0xDA,0x1B,0x22,0xE4,0x9D,0x02,0xBE,0x04,0x00,0x00,0x58,\ +0x08,0xD2,0xE0,0x6E,0x04,0xFF,0xFF,0x0B,0x04,0x9D,0x13,0xBE,0x14,0x00,0x00,0x58,\ +0x08,0xD2,0xE1,0x6E,0x14,0xFF,0xFF,0x0B,0x14,0x22,0x12,0x42,0xC8,0x7D,0x20,0xAD,\ +0x20,0x7D,0x01,0xAD,0x01,0x2F,0x10,0x22,0x12,0x42,0xEA,0x7F,0x01,0x7E,0xA0,0x04,\ +0x12,0x42,0x7B,0x7F,0x10,0xBE,0x18,0x00,0x00,0x68,0x3E,0x7E,0x64,0x01,0x00,0xBE,\ +0x50,0x00,0x68,0x1A,0x3E,0x64,0xBE,0x50,0x04,0x40,0x13,0x3E,0x64,0xBE,0x50,0x10,\ +0x40,0x0C,0x3E,0x64,0xBE,0x50,0x40,0x40,0x05,0x7E,0x34,0x08,0x34,0x22,0x7D,0x46,\ +0x74,0x0A,0x1E,0x44,0x7D,0x06,0xAD,0x06,0xBF,0x01,0x68,0x0B,0x40,0x04,0x9D,0x64,\ +0x80,0x02,0x2D,0x64,0x14,0x70,0xEB,0x7D,0x36,0x22,0x12,0x42,0xEA,0x7F,0x01,0x75,\ +0xF0,0x0B,0x12,0x42,0x7B,0xBE,0x08,0x7D,0x00,0x28,0x04,0x7E,0x14,0x7D,0x00,0x22,\ +0xBD,0x01,0x58,0x02,0x7D,0x01,0x22,0xBD,0x02,0x08,0x02,0x7D,0x02,0x22,0xBD,0x01,\ +0x58,0x02,0x0B,0x04,0x22,0xCA,0x19,0xAD,0x05,0xDA,0x09,0xCA,0x19,0xAD,0x05,0xDA,\ +0x59,0x2D,0x05,0x22,0x0A,0x13,0x12,0x42,0xBE,0x43,0xF0,0x80,0x12,0x42,0x7B,0x7D,\ +0x01,0x22,0xE4,0xBE,0x30,0x00,0x78,0x08,0x22,0xBE,0x30,0x00,0x78,0x24,0x22,0xE4,\ +0xF0,0xA3,0xA5,0xDB,0xFB,0x22,0x6C,0xAA,0x7E,0x39,0xB0,0x0B,0x34,0x1B,0x28,0x50,\ +0x0B,0x25,0xA5,0xDB,0xF3,0x22,0xE4,0x93,0xA3,0x7A,0x29,0xB0,0x0B,0x24,0xA5,0xDB,\ +0xF5,0x22,0x7E,0x39,0xB0,0x0B,0x34,0x7A,0x29,0xB0,0x0B,0x24,0xA5,0xDB,0xF3,0x22,\ +0x0B,0x38,0x50,0x0B,0x35,0x1B,0x28,0x50,0x0B,0x25,0xA5,0xDB,0xF3,0x22,0x8E,0xDB,\ +0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x55,0x38,0x60,0x70,0x00,0x06,0x06,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,\ +0x54,0x52,0x49,0x4D,0x01,0x17,0x71,0x00,0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF\ +} + +#define SITRONIX_DUMP2 {\ +0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00\ +} + +#endif //ST_UPGRADE_BY_ISPID + diff --git a/drivers/input/touchscreen/sitronix/sitronix_ts_utility.c b/drivers/input/touchscreen/sitronix/sitronix_ts_utility.c new file mode 100644 index 000000000000..1893b06f0ba6 --- /dev/null +++ b/drivers/input/touchscreen/sitronix/sitronix_ts_utility.c @@ -0,0 +1,263 @@ +#include "sitronix_ts_custom_func.h" +#include "sitronix_ts.h" +//hf + +/* Function st_power_up is work for the platform without reset pin */ +void st_power_up(struct sitronix_ts_data *ts) +{ + unsigned char buffer[2]; + + buffer[0] = DEVICE_CONTROL_REG; + buffer[1] = 0x00; + stx_i2c_write(ts->client, buffer, 2); + + msleep(50); +} + +void st_power_down(struct sitronix_ts_data *ts) +{ + unsigned char buffer[2]; + + buffer[0] = DEVICE_CONTROL_REG; + buffer[1] = 0x02; + stx_i2c_write(ts->client, buffer, 2); + + msleep(50); +} + +int st_get_status(struct sitronix_ts_data *ts) +{ + char buffer[8]; + int ret = -1; + ret = stx_i2c_read(ts->client, buffer, 8, STATUS_REG); + if (ret != 8) { + STX_ERROR(" i2c communcate error in getting status : 0x%x", ret); + return -EIO; + } + STX_INFO(" Touch Panel status %x", buffer[0]); + return buffer[0]; +} + +int st_get_dev_status(struct i2c_client *client, uint8_t *err_code, uint8_t *dev_status) +{ + int ret = 0; + uint8_t buffer[8]; + STX_DEBUG("%s,line=%d", __FUNCTION__, __LINE__); + + ret = stx_i2c_read_bytes(STATUS_REG, buffer, 8); + if (ret < 0) { + STX_ERROR("sitronix read status reg error (%d)", ret); + return ret; + } else { + STX_INFO("sitronix status reg = %d", buffer[0]); + } + + *err_code = (buffer[0] & 0xf0) >> 4; + *dev_status = buffer[0] & 0xf; + + return 0; +} + +int st_print_version(struct sitronix_ts_data *ts) +{ + char buffer[8]; + int ret = -1; + + ret = stx_i2c_read(ts->client, buffer, 4, FIRMWARE_REVISION_3); + if (ret != 4) { + STX_ERROR(" i2c communcate error in getting FW reversion : 0x%x", ret); + return -EIO; + } + STX_INFO("Touch Panel Firmware Revision %x %x %x %x", buffer[0], buffer[1], buffer[2], buffer[3]); + snprintf(ts->ts_dev_info.fw_revision, 32, "%x.%x.%x.%x", buffer[0], buffer[1], buffer[2], buffer[3]); + + ret = stx_i2c_read(ts->client, buffer, 1, FIRMWARE_VERSION); + if (ret != 1) { + STX_ERROR(" i2c communcate error in getting FW version : 0x%x", ret); + return -EIO; + } + STX_INFO("Touch Panel Firmware version %x", buffer[0]); + + ts->ts_dev_info.fw_version[0] = buffer[0]; + // snprintf(ts->ts_dev_info.fw_version, 2,"%x", buffer[0]); + return 0; +} + +static int sitronix_get_xy_chs(struct sitronix_ts_data *ts) +{ + int ret = 0; + uint8_t txflag = 0; + uint8_t buf[2]; + + ret = stx_i2c_read_bytes(MISC_Info, &txflag, 1); + if (ret < 0) { + STX_ERROR("%s: Read MISC_Info error!(%d)", __func__, ret); + return ret; + } + + ret = stx_i2c_read_bytes(XY_CHS, buf, 2); + if (ret < 0) { + STX_ERROR("%s: Read XY channels error!(%d)", __func__, ret); + return ret; + } + + txflag = (txflag & 0x4) >> 2; + + if (txflag) { + ts->ts_dev_info.rx_chs = buf[0]; + ts->ts_dev_info.tx_chs = buf[1]; + } else { + ts->ts_dev_info.rx_chs = buf[1]; + ts->ts_dev_info.tx_chs = buf[0]; + } + STX_INFO("RX_chs = %d.", ts->ts_dev_info.rx_chs); + STX_INFO("TX_chs = %d.", ts->ts_dev_info.tx_chs); + + return 0; +} + +static int sitronix_get_max_touches(struct sitronix_ts_data *ts) +{ + int ret = 0; + uint8_t buffer[1]; + STX_DEBUG("%s,line=%d", __FUNCTION__, __LINE__); + + ret = stx_i2c_read(ts->client, buffer, 1, MAX_NUM_TOUCHES); + if (ret < 0) { + STX_ERROR("read max touches error (%d)", ret); + return ret; + } else { + ts->ts_dev_info.max_touches = buffer[0]; + if (ts->ts_dev_info.max_touches > ST_MAX_TOUCHES) + ts->ts_dev_info.max_touches = ST_MAX_TOUCHES; + STX_INFO("max touches = %d ", ts->ts_dev_info.max_touches); + } + return 0; +} + +static int sitronix_get_resolution(struct sitronix_ts_data *ts) +{ + int ret = 0; + uint8_t buffer[4]; + STX_DEBUG("%s,line=%d", __FUNCTION__, __LINE__); + ret = stx_i2c_read_bytes(XY_RESOLUTION_HIGH, buffer, 3); + if (ret < 0) { + STX_ERROR("read resolution error (%d)", ret); + return ret; + } else { + ts->ts_dev_info.x_res = ((buffer[0] & (X_RES_H_BMSK << X_RES_H_SHFT)) << 4) | buffer[1]; + ts->ts_dev_info.y_res = ((buffer[0] & Y_RES_H_BMSK) << 8) | buffer[2]; + STX_INFO("resolution = %d x %d", ts->ts_dev_info.x_res, ts->ts_dev_info.y_res); + } + return 0; +} + +static int sitronix_ts_get_CHIP_ID(struct sitronix_ts_data *ts) +{ + int ret = 0; + uint8_t buffer[3]; + STX_DEBUG("%s,line=%d", __FUNCTION__, __LINE__); + + ret = stx_i2c_read_bytes(CHIP_ID, buffer, 3); + if (ret < 0) { + STX_ERROR("read Chip ID error (%d)", ret); + return ret; + } else { + if (buffer[0] == 0) { + if (buffer[1] + buffer[2] > 32) + ts->ts_dev_info.chip_id = 2; + else + ts->ts_dev_info.chip_id = 0; + } else { + ts->ts_dev_info.chip_id = buffer[0]; + } + ts->ts_dev_info.Num_X = buffer[1]; + ts->ts_dev_info.Num_Y = buffer[2]; + STX_INFO("Chip ID = %d", ts->ts_dev_info.chip_id); + STX_INFO("Num_X = %d", ts->ts_dev_info.Num_X); + STX_INFO("Num_Y = %d", ts->ts_dev_info.Num_Y); + } + return 0; +} + +int st_get_touch_info(struct sitronix_ts_data *ts) +{ + int ret = 0; + + STX_DEBUG("%s,line=%d", __FUNCTION__, __LINE__); + ret = sitronix_get_resolution(ts); + if (ret < 0) + return ret; + ret = sitronix_ts_get_CHIP_ID(ts); + if (ret < 0) + return ret; + ret = st_print_version(ts); + if (ret < 0) + return ret; + ret = sitronix_get_max_touches(ts); + if (ret < 0) + return ret; + ret = sitronix_get_xy_chs(ts); + if (ret < 0) + return ret; + + return 0; +} + +int st_enter_glove_mode(struct sitronix_ts_data *ts) +{ + char buffer[2]; + int ret = 0; + if (1) { //!ts->glove_mode) + ret = stx_i2c_read(ts->client, buffer, 1, DEVICE_CONTROL_REG); + if (ret < 0) { + STX_ERROR(" i2c communcate error in getting DeviceControl : 0x%x", ret); + return ret; + } + buffer[1] = buffer[0] | 0x20; //set bit5 to 1 + buffer[0] = DEVICE_CONTROL_REG; + ret = stx_i2c_write(ts->client, buffer, 2); + if (ret < 0) { + STX_ERROR(" i2c communcate error in setting DeviceControl : 0x%x", ret); + return ret; + } + ts->glove_mode = true; + } + return ret; +} + +int st_leave_glove_mode(struct sitronix_ts_data *ts) +{ + char buffer[2]; + int ret = 0; + if (ts->glove_mode) { + ret = stx_i2c_read(ts->client, buffer, 1, DEVICE_CONTROL_REG); + if (ret < 0) { + STX_ERROR(" i2c communcate error in getting DeviceControl : 0x%x", ret); + return ret; + } + buffer[1] = buffer[0] & 0xDF; //set bit5 to 0 + buffer[0] = DEVICE_CONTROL_REG; + stx_i2c_write(ts->client, buffer, 2); + if (ret < 0) { + STX_ERROR(" i2c communcate error in setting DeviceControl : 0x%x", ret); + return ret; + } + ts->glove_mode = false; + } + return ret; +} + +int st_irq_off(void) +{ + stx_irq_disable(); + stx_gpts.is_upgrading = true; + return 0; +} + +int st_irq_on(void) +{ + stx_irq_enable(); + stx_gpts.is_upgrading = false; + return 0; +} diff --git a/drivers/input/touchscreen/synaptics_tcm/Kconfig b/drivers/input/touchscreen/synaptics_tcm/Kconfig index b217f5b6580f..ad6dbb188ef1 100644 --- a/drivers/input/touchscreen/synaptics_tcm/Kconfig +++ b/drivers/input/touchscreen/synaptics_tcm/Kconfig @@ -3,7 +3,7 @@ # menuconfig TOUCHSCREEN_SYNAPTICS_TCM bool "Synaptics TCM touchscreen" - default y + default n help Say Y here if you have a Synaptics TCM touchscreen connected to your system. @@ -42,7 +42,7 @@ endchoice config TOUCHSCREEN_SYNAPTICS_TCM_CORE tristate "Synaptics TCM core module" depends on I2C || SPI_MASTER - default y + default n help Say Y here to enable core functionality. @@ -54,7 +54,7 @@ config TOUCHSCREEN_SYNAPTICS_TCM_CORE config TOUCHSCREEN_SYNAPTICS_TCM_TOUCH tristate "Synaptics TCM touch module" depends on TOUCHSCREEN_SYNAPTICS_TCM_CORE - default y + default n help Say Y here to enable support for touch reporting. @@ -66,7 +66,7 @@ config TOUCHSCREEN_SYNAPTICS_TCM_TOUCH config TOUCHSCREEN_SYNAPTICS_TCM_DEVICE tristate "Synaptics TCM device module" depends on TOUCHSCREEN_SYNAPTICS_TCM_CORE - default y + default n help Say Y here to enable support for TCM device functionality. @@ -89,7 +89,7 @@ config TOUCHSCREEN_SYNAPTICS_TCM_TESTING config TOUCHSCREEN_SYNAPTICS_TCM_REFLASH tristate "Synaptics TCM reflash module" depends on TOUCHSCREEN_SYNAPTICS_TCM_CORE - default N + default n help Say Y here to enable support for reflash functionality. @@ -101,7 +101,7 @@ config TOUCHSCREEN_SYNAPTICS_TCM_REFLASH config TOUCHSCREEN_SYNAPTICS_TCM_RECOVERY tristate "Synaptics TCM recovery module" depends on TOUCHSCREEN_SYNAPTICS_TCM_CORE - default N + default n help Say Y here to enable support for recovery functionality. @@ -124,7 +124,7 @@ config TOUCHSCREEN_SYNAPTICS_TCM_ZEROFLASH config TOUCHSCREEN_SYNAPTICS_TCM_DIAGNOSTICS tristate "Synaptics TCM diagnostics module" depends on TOUCHSCREEN_SYNAPTICS_TCM_CORE - default y + default n help Say Y here to enable support for diagnostics functionality. diff --git a/drivers/leds/AW91XXX/Kconfig b/drivers/leds/AW91XXX/Kconfig new file mode 100644 index 000000000000..a9724ce2b756 --- /dev/null +++ b/drivers/leds/AW91XXX/Kconfig @@ -0,0 +1,7 @@ +config LEDS_AW91XXX + tristate "LED Support for AW91XXX" + depends on LEDS_CLASS && I2C + default n + help + this option enables support for the AW 91XXX RGB LED connected + through I2C. Say Y to enable support for the AW 91XXX LED diff --git a/drivers/leds/AW91XXX/Makefile b/drivers/leds/AW91XXX/Makefile new file mode 100644 index 000000000000..e25130a858cb --- /dev/null +++ b/drivers/leds/AW91XXX/Makefile @@ -0,0 +1,7 @@ +#for AW91XXX LED Driver +obj-$(CONFIG_LEDS_AW91XXX)+=leds-aw91xxx.o + +ifeq ($(TARGET_PRODUCT),k24) +LINUXINCLUDE += -include $(srctree)/techpack/display/config/k24dispconf.h +LINUXINCLUDE += -include $(srctree)/include/linux/extra_led.h +endif diff --git a/drivers/leds/AW91XXX/leds-aw91xxx.c b/drivers/leds/AW91XXX/leds-aw91xxx.c new file mode 100644 index 000000000000..2b943591e9ed --- /dev/null +++ b/drivers/leds/AW91XXX/leds-aw91xxx.c @@ -0,0 +1,2393 @@ +/* + * leds-aw91xxx.c aw91xxx led module + * + * Copyright (c) 2021 AWINIC Technology CO., LTD + * + * Author: lujiazhuo + * + * 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. + */ +#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 "leds-aw91xxx.h" + +/****************************************************** + * + * Marco + * + ******************************************************/ +#define AW91XXX_I2C_NAME "aw91xxx_led" +#define HRTIMER_FRAME 20 + +#define AW91XXX_DRIVER_VERSION "v0.9.0" + +#define AW_I2C_RETRIES 5 +#define AW_I2C_RETRY_DELAY 5 +#define AW_READ_CHIPID_RETRIES 5 +#define AW_READ_CHIPID_RETRY_DELAY 5 + +#define REG_INPUT_P0 0x00 +#define REG_INPUT_P1 0x01 +#define REG_OUTPUT_P0 0x02 +#define REG_OUTPUT_P1 0x03 +#define REG_CONFIG_P0 0x04 +#define REG_CONFIG_P1 0x05 +#define REG_INT_P0 0x06 +#define REG_INT_P1 0x07 +#define REG_ID 0x10 +#define REG_CTRL 0x11 +#define REG_WORK_MODE_P0 0x12 +#define REG_WORK_MODE_P1 0x13 +#define REG_EN_BREATH 0x14 +#define REG_FADE_TIME 0x15 +#define REG_FULL_TIME 0x16 +#define REG_DLY0_BREATH 0x17 +#define REG_DLY1_BREATH 0x18 +#define REG_DLY2_BREATH 0x19 +#define REG_DLY3_BREATH 0x1a +#define REG_DLY4_BREATH 0x1b +#define REG_DLY5_BREATH 0x1c +#define REG_DIM00 0x20 +#define REG_DIM01 0x21 +#define REG_DIM02 0x22 +#define REG_DIM03 0x23 +#define REG_DIM04 0x24 +#define REG_DIM05 0x25 +#define REG_DIM06 0x26 +#define REG_DIM07 0x27 +#define REG_DIM08 0x28 +#define REG_DIM09 0x29 +#define REG_SWRST 0x7F +#define REG_81H 0x81 + +/* aw91xxx register read/write access */ +#define REG_NONE_ACCESS 0 +#define REG_RD_ACCESS (1 << 0) +#define REG_WR_ACCESS (1 << 1) +#define AW91XXX_REG_MAX 0xFF +#define AW91XXX_DIM_MAX 0x0A +#define AW91XXX_PORT_NUM (0x10) /* 16 */ +#define AW91XXX_WORK_LED_NUM 5 + +const unsigned char aw91xxx_reg_access[AW91XXX_REG_MAX] = { + [REG_INPUT_P0] = REG_RD_ACCESS, + [REG_INPUT_P1] = REG_RD_ACCESS, + [REG_OUTPUT_P0] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_OUTPUT_P1] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_CONFIG_P0] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_CONFIG_P1] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_INT_P0] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_INT_P1] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_ID] = REG_RD_ACCESS, + [REG_CTRL] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_WORK_MODE_P0] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_WORK_MODE_P1] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_EN_BREATH] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_FADE_TIME] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_FULL_TIME] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_DLY0_BREATH] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_DLY1_BREATH] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_DLY2_BREATH] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_DLY3_BREATH] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_DLY4_BREATH] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_DLY5_BREATH] = REG_RD_ACCESS | REG_WR_ACCESS, + [REG_DIM00] = REG_WR_ACCESS, + [REG_DIM01] = REG_WR_ACCESS, + [REG_DIM02] = REG_WR_ACCESS, + [REG_DIM03] = REG_WR_ACCESS, + [REG_DIM04] = REG_WR_ACCESS, + [REG_DIM05] = REG_WR_ACCESS, + [REG_DIM06] = REG_WR_ACCESS, + [REG_DIM07] = REG_WR_ACCESS, + [REG_DIM08] = REG_WR_ACCESS, + [REG_DIM09] = REG_WR_ACCESS, + [REG_SWRST] = REG_WR_ACCESS, +}; + +static KEY_STATE key_map[] = { + /* name code val */ + { "DEL", KEY_BACK, 0 }, + { "BACK", KEY_BACK, 0 }, + { "HOME", KEY_HOME, 0 }, + { "HOME", KEY_HOME, 0 }, + { "BACK", KEY_BACK, 0 }, + { "Q", KEY_Q, 0 }, + { "F1", KEY_F1, 0 }, + { "F2", KEY_F2, 0 }, + + { "W", KEY_W, 0 }, + { "E", KEY_E, 0 }, + { "R", KEY_R, 0 }, + { "T", KEY_T, 0 }, + { "Y", KEY_Y, 0 }, + { "U", KEY_U, 0 }, + { "F3", KEY_F3, 0 }, + { "F4", KEY_F4, 0 }, + + { "I", KEY_I, 0 }, + { "O", KEY_O, 0 }, + { "P", KEY_P, 0 }, + { "J", KEY_J, 0 }, + { "K", KEY_K, 0 }, + { "L", KEY_L, 0 }, + { "F5", KEY_F5, 0 }, + { "F6", KEY_F6, 0 }, + + { "A", KEY_A, 0 }, + { "S", KEY_S, 0 }, + { "D", KEY_D, 0 }, + { "F", KEY_F, 0 }, + { "G", KEY_G, 0 }, + { "H", KEY_H, 0 }, + { "F7", KEY_F7, 0 }, + { "F8", KEY_F8, 0 }, + + { "Caps Lock", KEY_CAPSLOCK, 0 }, + { "Z", KEY_Z, 0 }, + { "X", KEY_X, 0 }, + { "C", KEY_C, 0 }, + { "V", KEY_V, 0 }, + { "B", KEY_B, 0 }, + { "F9", KEY_F9, 0 }, + { "F10", KEY_F10, 0 }, + + { "N", KEY_N, 0 }, + { "M", KEY_M, 0 }, + { "Backspace", KEY_BACKSPACE, 0 }, + { "Down", KEY_DOWN, 0 }, + { "Up", KEY_UP, 0 }, + { "ENTER", KEY_ENTER, 0 }, + { "F11", KEY_F11, 0 }, + { "F12", KEY_F12, 0 }, + + { "ALT", KEY_ALTERASE, 0 }, + { ".", KEY_DOT, 0 }, + { "Left", KEY_LEFT, 0 }, + { "Right", KEY_RIGHT, 0 }, + { "Space", KEY_SPACE, 0 }, + { "Volup", KEY_VOLUMEUP, 0 }, + { "KEY_STOP", KEY_STOP, 0 }, + { "KEY_AGAIN", KEY_AGAIN, 0 }, + + { "PROPS", KEY_PROPS, 0 }, + { "UNDO", KEY_UNDO, 0 }, + { "FRONT", KEY_FRONT, 0 }, + { "COPY", KEY_COPY, 0 }, + { "OPEN", KEY_OPEN, 0 }, + { "PASTE", KEY_PASTE, 0 }, + { "FIND", KEY_FIND, 0 }, + { "CUT", KEY_CUT, 0 }, + +}; + +/****************************************************** + * + * aw91xxx i2c write/read + * + ******************************************************/ +static int aw91xxx_i2c_write(struct aw91xxx *aw91xxx, unsigned char reg_addr, + unsigned char reg_data) +{ + int ret = -1; + unsigned char cnt = 0; + + while (cnt < AW_I2C_RETRIES) { + ret = i2c_smbus_write_byte_data(aw91xxx->i2c, reg_addr, + reg_data); + if (ret < 0) { + pr_err("%s: i2c_write cnt=%d error=%d\n", __func__, cnt, + ret); + } else { + break; + } + cnt++; + msleep(AW_I2C_RETRY_DELAY); + } + + return ret; +} + +static int aw91xxx_i2c_read(struct aw91xxx *aw91xxx, unsigned char reg_addr, + unsigned char *reg_data) +{ + int ret = -1; + unsigned char cnt = 0; + + while (cnt < AW_I2C_RETRIES) { + ret = i2c_smbus_read_byte_data(aw91xxx->i2c, reg_addr); + if (ret < 0) { + pr_err("%s: i2c_read cnt=%d error=%d\n", __func__, cnt, + ret); + } else { + *reg_data = ret; + break; + } + cnt++; + msleep(AW_I2C_RETRY_DELAY); + } + + return ret; +} + +static int aw91xxx_i2c_write_bits(struct aw91xxx *aw91xxx, + unsigned char reg_addr, unsigned char *buf, + unsigned int len) +{ + int ret = -1; + unsigned char *data; + unsigned char cnt = 0; + + data = kmalloc(len + 1, GFP_KERNEL); + if (data == NULL) { + pr_err("%s: can not allocate memory\n", __func__); + return -ENOMEM; + } + + data[0] = reg_addr; + memcpy(&data[1], buf, len); + + while (cnt < AW_I2C_RETRIES) { + ret = i2c_master_send(aw91xxx->i2c, data, len + 1); + if (ret < 0) + pr_err("%s: i2c master send [0x%x] error\n", __func__, + aw91xxx->i2c->addr); + else + break; + cnt++; + msleep(AW_I2C_RETRY_DELAY); + } + + kfree(data); + + return ret; +} + +static int aw91xxx_i2c_read_bits(struct aw91xxx *aw91xxx, + unsigned char reg_addr, unsigned char *buf, + unsigned int len) +{ + int ret = 0; + unsigned char *rdbuf = NULL; + unsigned char cnt = 0; + + struct i2c_msg msgs[] = { + { + .addr = aw91xxx->i2c->addr, + .flags = 0, + .len = 1, + .buf = ®_addr, + }, + { + .addr = aw91xxx->i2c->addr, + .flags = I2C_M_RD, + .len = len, + }, + }; + + if (aw91xxx->i2c == NULL) { + pr_err("msg %s i2c client is NULL\n", __func__); + return -ENODEV; + } + + rdbuf = kmalloc(len, GFP_KERNEL); + if (rdbuf == NULL) { + pr_err("%s: can not allocate memory\n", __func__); + return -ENOMEM; + } + + msgs[1].buf = rdbuf; + + while (cnt < AW_I2C_RETRIES) { + ret = i2c_transfer(aw91xxx->i2c->adapter, msgs, + sizeof(msgs) / sizeof(msgs[0])); + if (ret < 0) + pr_err("msg %s i2c read error: %d\n", __func__, ret); + else + break; + cnt++; + msleep(AW_I2C_RETRY_DELAY); + } + + if (buf != NULL) + memcpy(buf, rdbuf, len); + + kfree(rdbuf); + + return ret; +} + +/****************************************************** + * + * aw91xxx led + * + ******************************************************/ +static void aw91xxx_brightness_work(struct work_struct *work) +{ + struct aw91xxx *aw91xxx = + container_of(work, struct aw91xxx, brightness_work); + + unsigned char i; + + if (aw91xxx->cdev.brightness > aw91xxx->cdev.max_brightness) + aw91xxx->cdev.brightness = aw91xxx->cdev.max_brightness; + + aw91xxx_i2c_write(aw91xxx, REG_EN_BREATH, 0x00); + + aw91xxx_i2c_write(aw91xxx, REG_CTRL, aw91xxx->imax); + + for (i = 0; i < AW91XXX_WORK_LED_NUM; i++) { + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + i, + aw91xxx->cdev.brightness); + } +} + +static void aw91xxx_set_brightness(struct led_classdev *cdev, enum led_brightness brightness) +{ + struct aw91xxx *aw91xxx = container_of(cdev, struct aw91xxx, cdev); + + aw91xxx->cdev.brightness = brightness; + + schedule_work(&aw91xxx->brightness_work); +} +#if CONFIG_EXTRA_BACKLIGHT_NOTIFER +static int dsi_extra_led_notifier_callback(struct notifier_block *self, + unsigned long event, void *data) +{ + struct aw91xxx *aw91xxx = container_of(self, struct aw91xxx, aw_notifier); + + unsigned char i; + + aw91xxx->cdev.brightness = event; + + for (i = 0; i < AW91XXX_WORK_LED_NUM; i++) { + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + i, + aw91xxx->cdev.brightness); + } + + return 0; +} +#endif + +static void aw91xxx_led_brightness_init(struct aw91xxx *aw91xxx) +{ + unsigned char i; + + aw91xxx_i2c_write(aw91xxx, REG_CTRL, aw91xxx->imax); + + for (i = 0; i < AW91XXX_WORK_LED_NUM; i++) { + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + i, aw91xxx->cdev.brightness); + } +} + +static void aw91xxc_led_blink(struct work_struct *work) +{ + struct aw91xxx *aw91xxx = + container_of(work, struct aw91xxx, int_work.work); + + unsigned char i; + + aw91xxx_i2c_write(aw91xxx, REG_CONFIG_P0, 0x03); + aw91xxx_i2c_write(aw91xxx, REG_CONFIG_P1, 0x0f); + + aw91xxx_i2c_write(aw91xxx, REG_FADE_TIME, + (aw91xxx->fall_time << 3) | (aw91xxx->rise_time)); + aw91xxx_i2c_write(aw91xxx, REG_FULL_TIME, + (aw91xxx->off_time << 3) | (aw91xxx->on_time)); + + for (i = 0; i < 6; i++) { + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + i, + aw91xxx->cdev.brightness); + } + + aw91xxx_i2c_write(aw91xxx, REG_CTRL, 0x80 | aw91xxx->imax); +} + +static void aw91xxx_led_blink(struct aw91xxx *aw91xxx, unsigned char blink, + unsigned char delay) +{ + unsigned char i; + + if (aw91xxx->cdev.brightness > aw91xxx->cdev.max_brightness) + aw91xxx->cdev.brightness = aw91xxx->cdev.max_brightness; + aw91xxx_i2c_write(aw91xxx, REG_EN_BREATH, 0x3f); + + if (blink) { + if (aw91xxx->vendor_id == 0xB) { + aw91xxx_i2c_write(aw91xxx, REG_CONFIG_P0, 0x03); + aw91xxx_i2c_write(aw91xxx, REG_CONFIG_P1, 0x0f); + + aw91xxx_i2c_write(aw91xxx, REG_FADE_TIME, + (aw91xxx->fall_time << 3) | + (aw91xxx->rise_time)); + aw91xxx_i2c_write(aw91xxx, REG_FULL_TIME, + (aw91xxx->off_time << 3) | + (aw91xxx->on_time)); + + for (i = 0; i < 6; i++) { + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + i, + aw91xxx->cdev.brightness); + aw91xxx_i2c_write(aw91xxx, REG_DLY0_BREATH + i, + delay); + } + + aw91xxx_i2c_write(aw91xxx, REG_CTRL, + 0x80 | aw91xxx->imax); + } else { + schedule_delayed_work(&aw91xxx->int_work, + msecs_to_jiffies(delay * 315)); + } + } else { + aw91xxx_i2c_write(aw91xxx, REG_EN_BREATH, 0x00); + + aw91xxx_i2c_write(aw91xxx, REG_CTRL, aw91xxx->imax); + + for (i = 0; i < 10; i++) { + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + i, 0x00); + aw91xxx_i2c_write(aw91xxx, REG_DLY0_BREATH + i, 0); + } + } +} + +/***************************************************** + * + * device tree + * + *****************************************************/ +static int aw91xxx_parse_dt(struct device *dev, struct aw91xxx *aw91xxx, + struct device_node *np) +{ + int ret = 0; + unsigned int val = 0; + + aw91xxx->reset_gpio = of_get_named_gpio(np, "reset-gpio", 0); + if (aw91xxx->reset_gpio < 0) { + dev_err(dev, + "%s: no reset gpio provided, will not HW reset device\n", + __func__); + return (-1); + } else { + dev_info(dev, "%s: reset gpio provided ok\n", __func__); + } + + aw91xxx->vcc_gpio = of_get_named_gpio(np, "vcc-gpio", 0); + if (aw91xxx->vcc_gpio < 0) { + dev_err(dev, "%s: no vcc gpio provided. \n", __func__); + return (-1); + } else { + dev_info(dev, "%s: vcc gpio provided ok\n", __func__); + } + + aw91xxx->single_key_enable = false; + ret = of_property_read_u32(np, "aw91xxx,single_key_enable", &val); + if (ret) { + dev_err(aw91xxx->dev, + "%s: no aw91xxx,single_key_enable provided,The default function is not key\n", + __func__); + } else { + AW_DEBUG("%s:aw91xxx,single_key_enable provided ok, val = %d\n", + __func__, val); + if (val == 1) + aw91xxx->single_key_enable = true; + } + + aw91xxx->matrix_key_enable = false; + ret = of_property_read_u32(np, "aw91xxx,matrix_key_enable", &val); + if (ret) { + dev_err(aw91xxx->dev, + "%s: no aw91xxx,key_enable provided, The default function is not key\n", + __func__); + } else { + AW_DEBUG("%s:aw91xxx,key_enable provided ok, val = %d\n", + __func__, val); + if (val == 1) + aw91xxx->matrix_key_enable = true; + } + + aw91xxx->led_feature_enable = false; + ret = of_property_read_u32(np, "aw91xxx,led_enable", &val); + if (ret < 0) { + dev_err(aw91xxx->dev, + "%s: no aw91xxx,led_enable provided, The default function is not LED\n", + __func__); + } else { + AW_DEBUG("%s:aw91xxx,led_enable provided ok, val = %d\n", + __func__, val); + if (val == 1) + aw91xxx->led_feature_enable = true; + } + + aw91xxx->gpio_feature_enable = false; + ret = of_property_read_u32(np, "aw91xxx,gpio_enable", &val); + if (ret < 0) { + dev_err(aw91xxx->dev, + "%s: aw91xxx,gpio_enable provided, The default function is not GPIO\n", + __func__); + } else { + AW_DEBUG("%s:aw91xxx,gpio_enable provided ok, val = %d\n", + __func__, val); + if (val == 1) + aw91xxx->gpio_feature_enable = true; + } + + return 0; +} + +static int aw91xxx_pinctrl_init(struct aw91xxx *aw91xxx) +{ + int ret = 0; + + pr_info("%s enter\n", __func__); + + aw91xxx->pinctrl = devm_pinctrl_get(aw91xxx->dev); + if (IS_ERR_OR_NULL(aw91xxx->pinctrl)) { + dev_err(aw91xxx->dev, + "Failed to get pinctrl, please check dts"); + ret = PTR_ERR(aw91xxx->pinctrl); + goto err_pinctrl_get; + } + + aw91xxx->pins_shdn_active = + pinctrl_lookup_state(aw91xxx->pinctrl, "aw91xxx_shdn_active"); + if (IS_ERR_OR_NULL(aw91xxx->pins_shdn_active)) { + dev_err(aw91xxx->dev, "SHDN Pin state[active] not found"); + ret = PTR_ERR(aw91xxx->pins_shdn_active); + goto err_pinctrl_lookup; + } + + aw91xxx->pins_shdn_suspend = + pinctrl_lookup_state(aw91xxx->pinctrl, "aw91xxx_shdn_suspend"); + if (IS_ERR_OR_NULL(aw91xxx->pins_shdn_suspend)) { + dev_err(aw91xxx->dev, "SHDN Pin state[suspend] not found"); + ret = PTR_ERR(aw91xxx->pins_shdn_suspend); + goto err_pinctrl_lookup; + } + + aw91xxx->pins_power_active = + pinctrl_lookup_state(aw91xxx->pinctrl, "aw91xxx_power_active"); + if (IS_ERR_OR_NULL(aw91xxx->pins_power_active)) { + dev_err(aw91xxx->dev, "POWER Pin state[active] not found"); + ret = PTR_ERR(aw91xxx->pins_power_active); + goto err_pinctrl_lookup; + } + + aw91xxx->pins_power_suspend = + pinctrl_lookup_state(aw91xxx->pinctrl, "aw91xxx_power_suspend"); + if (IS_ERR_OR_NULL(aw91xxx->pins_power_suspend)) { + dev_err(aw91xxx->dev, "POWER Pin state[suspend] not found"); + ret = PTR_ERR(aw91xxx->pins_power_suspend); + goto err_pinctrl_lookup; + } + + return 0; + +err_pinctrl_lookup: + if (aw91xxx->pinctrl) { + devm_pinctrl_put(aw91xxx->pinctrl); + } +err_pinctrl_get: + aw91xxx->pinctrl = NULL; + aw91xxx->pins_shdn_active = NULL; + aw91xxx->pins_shdn_suspend = NULL; + aw91xxx->pins_power_active = NULL; + aw91xxx->pins_power_suspend = NULL; + return ret; +} + +static int aw91xxx_pinctrl_select_shdn_active(struct aw91xxx *aw91xxx) +{ + int ret = 0; + + if (aw91xxx->pinctrl && aw91xxx->pins_shdn_active) { + ret = pinctrl_select_state(aw91xxx->pinctrl, + aw91xxx->pins_shdn_active); + if (ret < 0) { + pr_err("Set shdn pin active state error:%d", ret); + } + } + + return ret; +} + +static int aw91xxx_pinctrl_select_shdn_suspend(struct aw91xxx *aw91xxx) +{ + int ret = 0; + + if (aw91xxx->pinctrl && aw91xxx->pins_shdn_suspend) { + ret = pinctrl_select_state(aw91xxx->pinctrl, + aw91xxx->pins_shdn_suspend); + if (ret < 0) { + pr_err("Set shdn pin suspend state error:%d", ret); + } + } + + return ret; +} + +static int aw91xxx_pinctrl_select_power_active(struct aw91xxx *aw91xxx) +{ + int ret = 0; + + if (aw91xxx->pinctrl && aw91xxx->pins_power_active) { + ret = pinctrl_select_state(aw91xxx->pinctrl, + aw91xxx->pins_power_active); + if (ret < 0) { + pr_err("Set power pin active state error:%d", ret); + } + } + + return ret; +} + +static int aw91xxx_pinctrl_select_power_suspend(struct aw91xxx *aw91xxx) +{ + int ret = 0; + + if (aw91xxx->pinctrl && aw91xxx->pins_power_suspend) { + ret = pinctrl_select_state(aw91xxx->pinctrl, + aw91xxx->pins_power_suspend); + if (ret < 0) { + pr_err("Set power pin suspend state error:%d", ret); + } + } + + return ret; +} + +static int aw91xxx_hw_reset(struct aw91xxx *aw91xxx) +{ + pr_info("%s enter\n", __func__); + +#if 0 + if (aw91xxx && gpio_is_valid(aw91xxx->reset_gpio)) { + gpio_set_value_cansleep(aw91xxx->reset_gpio, 0); + msleep(1); + gpio_set_value_cansleep(aw91xxx->reset_gpio, 1); + msleep(6); + } else { + dev_err(aw91xxx->dev, "%s: failed\n", __func__); + } +#else + aw91xxx_pinctrl_select_shdn_suspend(aw91xxx); + usleep_range(100, 200); + aw91xxx_pinctrl_select_shdn_active(aw91xxx); + msleep(5); +#endif + return 0; +} + +static int aw91xxx_hw_off(struct aw91xxx *aw91xxx) +{ + pr_info("%s enter\n", __func__); +#if 0 + if (aw91xxx && gpio_is_valid(aw91xxx->reset_gpio)) { + gpio_set_value_cansleep(aw91xxx->reset_gpio, 0); + msleep(1); + } else { + dev_err(aw91xxx->dev, "%s: failed\n", __func__); + } +#endif + aw91xxx_pinctrl_select_shdn_suspend(aw91xxx); + usleep_range(100, 200); + return 0; +} + +/***************************************************** + * + * check chip id + * + *****************************************************/ +static int aw91xxx_read_chipid(struct aw91xxx *aw91xxx) +{ + int ret = -1; + unsigned char cnt = 0; + unsigned char reg_val = 0; + + while (cnt < AW_READ_CHIPID_RETRIES) { + ret = aw91xxx_i2c_read(aw91xxx, REG_ID, ®_val); + if (ret < 0) { + dev_err(aw91xxx->dev, + "%s: failed to read register AW91XXX_REG_ID: %d\n", + __func__, ret); + } + switch (reg_val) { + case AW91XXX_ID: + pr_info("%s aw91xxx detected,chip_id=0x%02x\n", + __func__, reg_val); + aw91xxx->chipid = AW91XXX_ID; + return 0; + default: + pr_info("%s unsupported device revision (0x%x)\n", + __func__, reg_val); + break; + } + cnt++; + + msleep(AW_READ_CHIPID_RETRY_DELAY); + } + + return -EINVAL; +} + +static void aw91xxx_identify_vendorid(struct aw91xxx *aw91xxx) +{ + unsigned char reg_val = 0; + + aw91xxx_i2c_read(aw91xxx, REG_81H, ®_val); + if ((reg_val != 0x01) && (reg_val != 0x03)) { + pr_err("devices is 91xxB\n"); + aw91xxx->vendor_id = 0xB; + } else { + pr_err("devices is 91xxC\n"); + aw91xxx->vendor_id = 0xC; + } +} + +/****************************************************** + * + * sys group attribute: reg + * + ******************************************************/ +static ssize_t aw91xxx_reg_store(struct device *dev, + struct device_attribute *attr, const char *buf, + size_t count) +{ + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + + unsigned int databuf[2] = { 0, 0 }; + + if (sscanf(buf, "%x %x", &databuf[0], &databuf[1]) == 2) + aw91xxx_i2c_write(aw91xxx, (unsigned char)databuf[0], + (unsigned char)databuf[1]); + + return count; +} + +static ssize_t aw91xxx_reg_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + ssize_t len = 0; + unsigned char i = 0; + unsigned char reg_val = 0; + + for (i = 0; i < AW91XXX_REG_MAX; i++) { + if (!(aw91xxx_reg_access[i] & REG_RD_ACCESS)) + continue; + aw91xxx_i2c_read(aw91xxx, i, ®_val); + len += snprintf(buf + len, PAGE_SIZE - len, + "reg:0x%02x=0x%02x \n", i, reg_val); + } + + reg_val = 0x12; + aw91xxx_i2c_read(aw91xxx, REG_81H, ®_val); + pr_info("REG_81H = 0x%x\n", reg_val); + + return len; +} + +/* 081H = 01->aw9106c,081H = 03->aw9110c */ + +static void aw91xxx_led_chip_init(struct aw91xxx *aw91xxx) +{ + aw91xxx_i2c_write(aw91xxx, REG_WORK_MODE_P0, 0x00); + aw91xxx_i2c_write(aw91xxx, REG_WORK_MODE_P1, 0x00); +} + +static ssize_t aw91xxx_hwen_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t count) +{ + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + + unsigned int databuf[1] = { 0 }; + + if (sscanf(buf, "%x", &databuf[0]) == 1) { + if (databuf[0] == 1) + aw91xxx_hw_reset(aw91xxx); + else + aw91xxx_hw_off(aw91xxx); + } + + return count; +} + +static ssize_t aw91xxx_hwen_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + ssize_t len = 0; + + len += snprintf(buf + len, PAGE_SIZE - len, "hwen=%d\n", + gpio_get_value(aw91xxx->reset_gpio)); + + return len; +} + +static ssize_t aw91xxx_blink_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + unsigned int databuf[2]; + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + + sscanf(buf, "%d %d", &databuf[0], &databuf[1]); + aw91xxx_led_blink(aw91xxx, databuf[0], databuf[1]); + + return len; +} + +static ssize_t aw91xxx_blink_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + ssize_t len = 0; + + len += snprintf(buf + len, PAGE_SIZE - len, "aw91xx_blink()\n"); + len += snprintf(buf + len, PAGE_SIZE - len, "echo 0 -- > blink\n"); + len += snprintf(buf + len, PAGE_SIZE - len, "echo 1 255> blink\n"); + + return len; +} + +static ssize_t aw91xxx_dim_store(struct device *dev, + struct device_attribute *attr, const char *buf, + size_t len) +{ + unsigned int databuf[2]; + + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + + /* input led_idx dim_level */ + sscanf(buf, "%d %d", &databuf[0], &databuf[1]); + aw91xxx_i2c_write(aw91xxx, REG_EN_BREATH, 0x0); + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + databuf[0], databuf[1]); + + return len; +} + +static ssize_t aw91xxx_all_dim_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + unsigned int databuf[1]; + int led_num = 0; + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + + /* input dim_level */ + sscanf(buf, "%d", &databuf[0]); + aw91xxx_i2c_write(aw91xxx, REG_EN_BREATH, 0x0); + for (led_num = 0; led_num < AW91XXX_DIM_MAX; led_num++) + aw91xxx_i2c_write(aw91xxx, REG_DIM00 + led_num, databuf[0]); + + return len; +} + +static ssize_t aw91xxx_fade_mode_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + unsigned int databuf[1]; + unsigned char reg_val = 0; + struct led_classdev *led_cdev = dev_get_drvdata(dev); + struct aw91xxx *aw91xxx = container_of(led_cdev, struct aw91xxx, cdev); + + sscanf(buf, "%d", &databuf[0]); + + /* 1. set breath mode */ + aw91xxx_i2c_write(aw91xxx, REG_EN_BREATH, 0x3F); + + /* 2. set fade mode */ + aw91xxx_i2c_write(aw91xxx, REG_CONFIG_P0, 0x00); + aw91xxx_i2c_write(aw91xxx, REG_CONFIG_P1, 0x00); + + /* 3. set fade time (fade away << 3) | (fade in) */ + aw91xxx_i2c_write(aw91xxx, REG_FADE_TIME, + (AW91XXX_FADE_TIME_2520MS << 3) | + AW91XXX_FADE_TIME_1260MS); + + /* 4. fade mode on or off */ + if (databuf[0] == 0) { + aw91xxx_i2c_read(aw91xxx, REG_OUTPUT_P0, ®_val); + aw91xxx_i2c_write(aw91xxx, REG_OUTPUT_P0, 0xFC & reg_val); + aw91xxx_i2c_read(aw91xxx, REG_OUTPUT_P1, ®_val); + aw91xxx_i2c_write(aw91xxx, REG_OUTPUT_P1, 0xF0 & reg_val); + } else { + aw91xxx_i2c_read(aw91xxx, REG_OUTPUT_P0, ®_val); + aw91xxx_i2c_write(aw91xxx, REG_OUTPUT_P0, 0x03 | reg_val); + aw91xxx_i2c_read(aw91xxx, REG_OUTPUT_P1, ®_val); + aw91xxx_i2c_write(aw91xxx, REG_OUTPUT_P1, 0x0F | reg_val); + } + + return len; +} + +static DEVICE_ATTR(reg, S_IWUSR | S_IRUGO, aw91xxx_reg_show, aw91xxx_reg_store); +static DEVICE_ATTR(hwen, S_IWUSR | S_IRUGO, aw91xxx_hwen_show, + aw91xxx_hwen_store); +static DEVICE_ATTR(blink, S_IWUSR | S_IRUGO, aw91xxx_blink_show, + aw91xxx_blink_store); +static DEVICE_ATTR(dim, S_IWUSR | S_IRUGO, NULL, aw91xxx_dim_store); +static DEVICE_ATTR(all_dim, S_IWUSR | S_IRUGO, NULL, aw91xxx_all_dim_store); +static DEVICE_ATTR(fade_mode, S_IWUSR | S_IRUGO, NULL, aw91xxx_fade_mode_store); + +static struct attribute *aw91xxx_attributes[] = { &dev_attr_reg.attr, + &dev_attr_hwen.attr, + &dev_attr_blink.attr, + &dev_attr_dim.attr, + &dev_attr_all_dim.attr, + &dev_attr_fade_mode.attr, + NULL }; + +static struct attribute_group aw91xxx_attribute_group = { + .attrs = aw91xxx_attributes +}; + +/****************************************************** + * + * led class dev + * + ******************************************************/ +static int aw91xxx_parse_led_cdev(struct aw91xxx *aw91xxx, + struct device_node *np) +{ + struct device_node *temp; + int ret = -1; + + temp = of_find_node_by_name(aw91xxx->dev->of_node, "aw91xxx,led"); + + ret = of_property_read_string(temp, "aw91xxx,name", + &aw91xxx->cdev.name); + if (ret < 0) { + dev_err(aw91xxx->dev, "Failure reading led name, ret = %d\n", + ret); + goto free_pdata; + } + ret = of_property_read_u32(temp, "aw91xxx,imax", &aw91xxx->imax); + if (ret < 0) { + dev_err(aw91xxx->dev, "Failure reading imax, ret = %d\n", ret); + goto free_pdata; + } + ret = of_property_read_u32(temp, "aw91xxx,brightness", + &aw91xxx->cdev.brightness); + if (ret < 0) { + dev_err(aw91xxx->dev, "Failure reading brightness, ret = %d\n", + ret); + goto free_pdata; + } + ret = of_property_read_u32(temp, "aw91xxx,max_brightness", + &aw91xxx->cdev.max_brightness); + if (ret < 0) { + dev_err(aw91xxx->dev, + "Failure reading max brightness, ret = %d\n", ret); + goto free_pdata; + } + ret = of_property_read_u32(temp, "aw91xxx,rise_time", + &aw91xxx->rise_time); + if (ret < 0) { + dev_err(aw91xxx->dev, "Failure reading rise_time, ret = %d\n", + ret); + goto free_pdata; + } + ret = of_property_read_u32(temp, "aw91xxx,on_time", &aw91xxx->on_time); + if (ret < 0) { + dev_err(aw91xxx->dev, "Failure reading on_time, ret = %d\n", + ret); + goto free_pdata; + } + ret = of_property_read_u32(temp, "aw91xxx,fall_time", + &aw91xxx->fall_time); + if (ret < 0) { + dev_err(aw91xxx->dev, "Failure reading fall_time, ret = %d\n", + ret); + goto free_pdata; + } + ret = of_property_read_u32(temp, "aw91xxx,off_time", + &aw91xxx->off_time); + if (ret < 0) { + dev_err(aw91xxx->dev, "Failure reading off_time, ret = %d\n", + ret); + goto free_pdata; + } + + INIT_DELAYED_WORK(&aw91xxx->int_work, aw91xxc_led_blink); + INIT_WORK(&aw91xxx->brightness_work, aw91xxx_brightness_work); + aw91xxx->cdev.brightness_set = aw91xxx_set_brightness; + ret = led_classdev_register(aw91xxx->dev, &aw91xxx->cdev); + if (ret) { + dev_err(aw91xxx->dev, "unable to register led ret=%d\n", ret); + goto free_pdata; + } + + ret = sysfs_create_group(&aw91xxx->cdev.dev->kobj, + &aw91xxx_attribute_group); + if (ret) { + dev_err(aw91xxx->dev, "led sysfs ret: %d\n", ret); + goto free_class; + } + + aw91xxx_led_chip_init(aw91xxx); + aw91xxx_led_brightness_init(aw91xxx); + + return 0; + +free_class: + led_classdev_unregister(&aw91xxx->cdev); +free_pdata: + return ret; +} + +/****************************************************** + * + * aw91xxx gpio + * + ******************************************************/ +static int aw91xxx_parse_for_single_gpio(struct device_node *gpio_node, + struct aw91xxx *aw91xxx, + struct aw91xxx_gpio *p_gpio_data) +{ + int ret = 0; + struct device_node *temp = NULL; + int i = 0; + struct aw91xxx_singel_gpio *p_single_gpio_data = + p_gpio_data->single_gpio_data; + + if ((p_gpio_data == NULL) || (p_gpio_data->single_gpio_data == NULL)) + return -EINVAL; + for_each_child_of_node (gpio_node, temp) { + ret = of_property_read_u32(temp, "aw91xxx,gpio_idx", + &p_single_gpio_data[i].gpio_idx); + if (ret < 0) { + dev_err(aw91xxx->dev, + "%s: no aw91xxx,gpio_idx, abort\n", __func__); + goto err_id; + } + ret = of_property_read_u32( + temp, "aw91xxx,gpio_dir", + &p_single_gpio_data[i].gpio_direction); + if (ret < 0) { + dev_err(aw91xxx->dev, "%s, no aw91xxx,gpio_dir\n", + __func__); + goto err_id; + } + ret = of_property_read_u32(temp, "aw91xxx,gpio_default_val", + &p_single_gpio_data[i].state); + if (ret < 0) { + dev_err(aw91xxx->dev, + "%s, no aw91xxx,gpio_default_val, abort\n", + __func__); + goto err_id; + } + + p_gpio_data->gpio_mask |= 0x01 + << p_single_gpio_data[i].gpio_idx; + AW_DEBUG("idx = %d, aw91xxx,gpio_idx = %d\n", i, + p_single_gpio_data[i].gpio_idx); + i++; + } + + AW_DEBUG("%s gpio_mask = 0x%x\r\n", __func__, p_gpio_data->gpio_mask); + + return 0; + +err_id: + return ret; +} + +/* val 0 -> led, gpio -> 1 */ +static void aw91xxx_set_port_mode_by_mask(struct aw91xxx *aw91xxx, + unsigned int mask, unsigned int val) +{ + unsigned char reg_val[2] = { 0 }; + int i = 0; + + /* p0_0 - P1_7 */ + aw91xxx_i2c_read_bits(aw91xxx, REG_WORK_MODE_P0, ®_val[0], + sizeof(reg_val) / sizeof(reg_val[0])); + if (aw91xxx->gpio_feature_enable) { + for (i = 0; i < AW91XXX_PORT_NUM; i++) { + if (mask & (0x01 << i)) { + if (val) { + if (i < 4) + reg_val[1] |= 0x1 << i; + else + reg_val[0] |= 0x1 << (i - 4); + } else { + if (i < 4) + reg_val[1] &= ~(0x1 << i); + else + reg_val[0] &= ~(0x1 << (i - 4)); + } + } + } + } else { + for (i = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (mask & (0x01 << i)) { + if (val) { + if (i < 8) + reg_val[0] |= 0x1 << i; + else + reg_val[1] |= 0x1 << (i - 8); + } else { + if (i < 8) + reg_val[0] &= ~(0x1 << i); + else + reg_val[1] &= ~(0x1 << (i - 8)); + } + } + } + } + + aw91xxx_i2c_write_bits(aw91xxx, REG_WORK_MODE_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); +} + +static void aw91xxx_set_port_output_mode(struct aw91xxx *aw91xxx, int val) +{ + unsigned char reg_val[1] = { 0 }; + + aw91xxx_i2c_read(aw91xxx, REG_CTRL, ®_val[0]); /* p0_0 -- p0_7 */ + if (val) + reg_val[0] |= 0x01 << 4; + else + reg_val[0] &= ~(0x01 << 4); + aw91xxx_i2c_write(aw91xxx, REG_CTRL, reg_val[0]); +} + +/* val 1-> output 0->input */ +static void aw91xxx_set_port_direction_by_mask(struct aw91xxx *aw91xxx, + unsigned int mask, int val) +{ + unsigned char reg_val[2] = { 0 }; + int i = 0; + + aw91xxx_i2c_read_bits(aw91xxx, REG_CONFIG_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); + /* 0-output 1-input */ + if (aw91xxx->gpio_feature_enable) { + for (i = 0; i < AW91XXX_PORT_NUM; i++) { + if (mask & (0x01 << i)) { + if (!val) { + if (i < 4) + reg_val[1] |= 0x1 << i; + else + reg_val[0] |= 0x1 << (i - 4); + } else { + if (i < 4) + reg_val[1] &= ~(0x1 << i); + else + reg_val[0] &= ~(0x1 << (i - 4)); + } + } + } + } else { + for (i = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (mask & (0x01 << i)) { + if (!val) { + if (i < 8) + reg_val[0] |= 0x1 << i; + else + reg_val[1] |= 0x1 << (i - 8); + } else { + if (i < 8) + reg_val[0] &= ~(0x1 << i); + else + reg_val[1] &= ~(0x1 << (i - 8)); + } + } + } + } + + if (val == 0) + aw91xxx_set_port_output_mode(aw91xxx, 1); + + aw91xxx_i2c_write_bits(aw91xxx, REG_CONFIG_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); +} +#if 0 + +/* val 1-> output high 0->output low */ +static unsigned int aw91xxx_get_port_output_state_by_mask(struct aw91xxx *p_aw91xxx, + unsigned int mask, int val) +{ + unsigned char reg_val[2] = {0}; + + i2c_write_byte(p_aw91xxx, P0_OUTPUT, reg_val[0]); + i2c_write_byte(p_aw91xxx, P1_OUTPUT, reg_val[1]); + return (reg_val[0]&0x0f)|((reg_val[1]<<8)&0xFF00); +} + +/* val 1-> output high 0->output low */ +static unsigned int aw91xxx_get_port_input_state(struct aw91xxx *p_aw91xxx) +{ + unsigned char reg_val[2] = {0}; + + i2c_read_multi_byte(p_aw91xxx, P0_INPUT, reg_val, + sizeof(reg_val)/sizeof(reg_val[0])); + return reg_val[0] | (reg_val[1] << 8); +} + +#endif + +/* val 1-> output high 0->output low */ +static void aw91xxx_set_port_output_state_by_mask(struct aw91xxx *aw91xxx, + unsigned int mask, int val) +{ + unsigned char reg_val[2] = { 0 }; + int i = 0; + + aw91xxx_i2c_read_bits(aw91xxx, REG_OUTPUT_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); + if (aw91xxx->gpio_feature_enable) { + for (i = 0; i < AW91XXX_PORT_NUM; i++) { + if (mask & (0x01 << i)) { + if (val) { + if (i < 4) + reg_val[1] |= 0x1 << i; + else + reg_val[0] |= 0x1 << (i - 4); + } else { + if (i < 4) + reg_val[1] &= ~(0x1 << i); + else + reg_val[0] &= ~(0x1 << (i - 4)); + } + } + } + } else { + for (i = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (mask & (0x01 << i)) { + if (val) { + if (i < 8) + reg_val[0] |= 0x1 << i; + else + reg_val[1] |= 0x1 << (i - 8); + } else { + if (i < 8) + reg_val[0] &= ~(0x1 << i); + else + reg_val[1] &= ~(0x1 << (i - 8)); + } + } + } + } + + aw91xxx_i2c_write_bits(aw91xxx, REG_OUTPUT_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); +} + +/* val 1 -> enable 0 - > disable */ +static void aw91xxx_enbale_interrupt_by_mask(struct aw91xxx *p_aw91xxx, + unsigned int mask, + unsigned int val) +{ + unsigned char reg_val[2] = { 0 }; + int i = 0; + + aw91xxx_i2c_read_bits(p_aw91xxx, REG_INT_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); + /* 0 enable 1 disable */ + for (i = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (mask & (0x01 << i)) { + if (!val) { + if (i < 8) + reg_val[0] |= 0x1 << i; + else + reg_val[1] |= 0x1 << (i - 8); + } else { + if (i < 8) + reg_val[0] &= ~(0x1 << i); + else + reg_val[1] &= ~(0x1 << (i - 8)); + } + } + } + aw91xxx_i2c_write_bits(p_aw91xxx, REG_INT_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); +} + +/* Must be read single-byte */ +static void aw91xxx_clear_interrupt(struct aw91xxx *p_aw91xxx) +{ + unsigned char reg_val[2] = { 0 }; + + aw91xxx_i2c_read(p_aw91xxx, REG_INPUT_P0, ®_val[0]); + aw91xxx_i2c_read(p_aw91xxx, REG_INPUT_P1, ®_val[1]); +} + +static void aw91xxx_gpio_chip_init(struct aw91xxx *aw91xxx, + struct aw91xxx_gpio *p_gpio_data) +{ + int i = 0; + struct aw91xxx_singel_gpio *p_single_gpio_data = + p_gpio_data->single_gpio_data; + + aw91xxx_set_port_mode_by_mask(aw91xxx, p_gpio_data->gpio_mask, + 1); /* gpio mode */ + aw91xxx_set_port_output_mode( + aw91xxx, p_gpio_data->output_mode); /* OD or pull push mode */ + for (i = 0; i < p_gpio_data->gpio_num; i++) { + aw91xxx_set_port_direction_by_mask( + aw91xxx, 0x01 << p_single_gpio_data[i].gpio_idx, + p_single_gpio_data[i].gpio_direction); + if (p_single_gpio_data[i].gpio_direction) { /* output */ + aw91xxx_set_port_output_state_by_mask( + aw91xxx, 0x01 << p_single_gpio_data[i].gpio_idx, + p_single_gpio_data[i].state); + } + } +} + +/* echo gpio_idx dirction state > aw91xxx_gpio */ +static ssize_t aw91xxx_gpio_store(struct device *dev, + struct device_attribute *attr, + const char *buf, size_t len) +{ + unsigned int databuf[3]; + int i = 0; + struct aw91xxx *aw91xxx = dev_get_drvdata(dev); + struct aw91xxx_gpio *p_gpio_data = aw91xxx->gpio_data; + struct aw91xxx_singel_gpio *p_single_gpio_data = + p_gpio_data->single_gpio_data; + + sscanf(buf, "%d %d %d", &databuf[0], &databuf[1], &databuf[2]); + + AW_DEBUG("aw91xxx gpio cmd param: %d %d %d\n", databuf[0], databuf[1], + databuf[2]); + if (p_gpio_data->gpio_mask & (0x01 << databuf[0])) { + for (i = 0; i < p_gpio_data->gpio_num; i++) { + if (p_single_gpio_data[i].gpio_idx == databuf[0]) { + if (p_single_gpio_data[i].gpio_direction != + databuf[1]) { + p_single_gpio_data[i].gpio_direction = + databuf[1]; + aw91xxx_set_port_direction_by_mask( + aw91xxx, + 0x01 << p_single_gpio_data[i] + .gpio_idx, + p_single_gpio_data[i] + .gpio_direction); + } + if (p_single_gpio_data[i].gpio_direction == + 0x01) { /* output */ + if (p_single_gpio_data[i].state != + databuf[2]) { + p_single_gpio_data[i].state = + databuf[2]; + aw91xxx_set_port_output_state_by_mask( + aw91xxx, + 0x01 << p_single_gpio_data[i] + .gpio_idx, + p_single_gpio_data[i] + .state); + } + } + } + } + } + + return len; +} + +static ssize_t aw91xxx_gpio_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + ssize_t len = 0; + int i = 0; + struct aw91xxx *aw91xxx = dev_get_drvdata(dev); + struct aw91xxx_singel_gpio *p_single_gpio_data = + aw91xxx->gpio_data->single_gpio_data; + + len += snprintf(buf + len, PAGE_SIZE - len, + "Uasge: echo gpio_idx dirction state > aw91xxx_gpio\n"); + for (i = 0; i < aw91xxx->gpio_data->gpio_num; i++) { + len += snprintf(buf + len, PAGE_SIZE - len, + "aw91xxx gpio idx = %d, dir = %d, state = %d\n", + p_single_gpio_data[i].gpio_idx, + p_single_gpio_data[i].gpio_direction, + p_single_gpio_data[i].state); + } + + return len; +} + +static DEVICE_ATTR(aw91xxx_gpio, S_IWUSR | S_IRUGO, aw91xxx_gpio_show, + aw91xxx_gpio_store); +static struct attribute *aw91xxx_gpio_attributes[] = { + &dev_attr_aw91xxx_gpio.attr, NULL +}; + +static struct attribute_group aw91xxx_gpio_attribute_group = { + .attrs = aw91xxx_gpio_attributes +}; + +static int aw91xxx_gpio_feature_init(struct aw91xxx *aw91xxx) +{ + int ret = 0; + int i = 0; + struct device_node *gpio_node = NULL; + struct aw91xxx_gpio *p_gpio_data = NULL; + int gpio_num = 0; + + p_gpio_data = devm_kzalloc(aw91xxx->dev, sizeof(struct aw91xxx_gpio), + GFP_KERNEL); + if (p_gpio_data == NULL) { + dev_err(aw91xxx->dev, "%s: malloc memory failed\r\n", __func__); + return -ENOMEM; + } + aw91xxx->gpio_data = p_gpio_data; + + gpio_node = of_find_node_by_name(aw91xxx->dev->of_node, "aw91xxx,gpio"); + if (gpio_node == NULL) { + dev_err(aw91xxx->dev, + "%s: can't find aw91xxx,gpio return failed\r\n", + __func__); + ret = -1; + goto err_id; + } + ret = of_property_read_u32(gpio_node, "aw91xxx,gpio_mode", + &p_gpio_data->output_mode); + if (ret < 0) { + dev_err(aw91xxx->dev, "%s: no aw91xxx,gpio_mode,abort\n", + __func__); + goto err_id; + } + + gpio_num = of_get_child_count(gpio_node); + p_gpio_data->gpio_num = gpio_num; + p_gpio_data->single_gpio_data = + devm_kzalloc(aw91xxx->dev, + sizeof(struct aw91xxx_singel_gpio) * gpio_num, + GFP_KERNEL); + + if (p_gpio_data->single_gpio_data == NULL) { + dev_err(aw91xxx->dev, "%s: malloc memory failed\r\n", __func__); + ret = -ENOMEM; + goto err_id; + } + ret = aw91xxx_parse_for_single_gpio(gpio_node, aw91xxx, p_gpio_data); + if (ret) { + dev_err(aw91xxx->dev, "aw91xxx_parse_single_gpio failed\r\n"); + goto free_mem; + } + + for (i = 0; i < gpio_num; i++) + p_gpio_data->single_gpio_data[i].priv = aw91xxx; + ret = sysfs_create_group(&aw91xxx->dev->kobj, + &aw91xxx_gpio_attribute_group); + if (ret) { + dev_err(aw91xxx->dev, "gpio sysfs failed ret: %d\n", ret); + goto free_mem; + } + + aw91xxx_gpio_chip_init(aw91xxx, p_gpio_data); + + return 0; + +free_mem: + devm_kfree(aw91xxx->dev, p_gpio_data->single_gpio_data); + devm_kfree(aw91xxx->dev, aw91xxx->gpio_data); +err_id: + return ret; +} + +static void aw91xxx_gpio_free_all_resource(struct aw91xxx *aw91xxx) +{ + if (aw91xxx->gpio_feature_enable) { + devm_kfree(aw91xxx->dev, aw91xxx->gpio_data->single_gpio_data); + devm_kfree(aw91xxx->dev, aw91xxx->gpio_data); + } +} + +/********************************************************* + * + * aw91xxx key feature + * + ********************************************************/ +static int aw91xxx_parse_dt_for_key(struct aw91xxx_key *p_key_data, + struct device_node *np) +{ + int ret = 0; + int i = 0; + unsigned int val = 0; + struct aw91xxx *aw91xxx = p_key_data->priv; + + p_key_data->wake_up_enable = false; + ret = of_property_read_u32(np, "aw91xxx,wake_up_enable", &val); + if (ret) { + dev_err(aw91xxx->dev, "%s: no aw91xxx,wake_up_enable, abort\n", + __func__); + return ret; + } else { + AW_DEBUG("%s:aw91xxx,wake_up_enable provided ok, val = %d\n", + __func__, val); + if (val == 1) + p_key_data->wake_up_enable = true; + } + + ret = of_property_read_u32(np, "aw91xxx,input_port_mask", + &p_key_data->input_port_mask); + if (ret) { + dev_err(aw91xxx->dev, "%s: no aw91xxx,input_port_mask, abort\n", + __func__); + return ret; + } + + p_key_data->input_port_nums = 0; + for (i = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (p_key_data->input_port_mask & (0x01 << i)) + p_key_data->input_port_nums++; + } + + if (aw91xxx->single_key_enable) { + /* + *AW_DEBUG("aw91xxx key input input_port_mask = %d\r\n", p_key_data->input_port_nums); + */ + p_key_data->key_mask = p_key_data->input_port_mask; + AW_DEBUG("aw91xxx key input_port_mask = 0x%x, input_num = %d\n", + p_key_data->input_port_mask, + p_key_data->input_port_nums); + } + + if (aw91xxx->matrix_key_enable) { + ret = of_property_read_u32(np, "aw91xxx,output_port_mask", + &p_key_data->output_port_mask); + if (ret) { + dev_err(aw91xxx->dev, + "%s, no aw91xxx,output_port_mask, abort\n", + __func__); + return ret; + } + p_key_data->output_port_nums = 0; + for (i = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (p_key_data->output_port_mask & (0x01 << i)) + p_key_data->output_port_nums++; + } + p_key_data->key_mask = p_key_data->input_port_mask | + p_key_data->output_port_mask; + AW_DEBUG( + "aw91xxx key output_port_mask = 0x%x, output_nmu = %d\n", + p_key_data->output_port_mask, + p_key_data->output_port_nums); + } + + return 0; +} + +irqreturn_t aw91xxx_irq_func(int irq, void *key_data) +{ + struct aw91xxx_key *p_key_data = (struct aw91xxx_key *)key_data; + struct aw91xxx *p_aw91xxx = p_key_data->priv; + + AW_DEBUG("%s enter\r\n", __func__); + + disable_irq_nosync(p_key_data->priv->irq_num); + /* disable aw91xxx input interrupt */ + aw91xxx_enbale_interrupt_by_mask(p_aw91xxx, p_key_data->input_port_mask, + 0); + aw91xxx_clear_interrupt(p_aw91xxx); + schedule_delayed_work(&p_key_data->int_work, + msecs_to_jiffies(p_key_data->debounce_delay)); + return 0; +} + +static int aw91xxx_irq_register(struct aw91xxx *p_aw91xxx) +{ + int ret = 0; + struct device_node *np = p_aw91xxx->dev->of_node; + + p_aw91xxx->irq_gpio = of_get_named_gpio(np, "irq-gpio", 0); + if (p_aw91xxx->irq_gpio < 0) { + dev_err(p_aw91xxx->dev, "%s: get irq gpio failed\r\n", + __func__); + return -EINVAL; + } + ret = devm_gpio_request(p_aw91xxx->dev, p_aw91xxx->irq_gpio, + "aw91xxx irq gpio"); + if (ret) { + dev_err(p_aw91xxx->dev, + "%s: devm_gpio_request irq gpio failed\r\n", __func__); + return -EBUSY; + } + gpio_direction_input(p_aw91xxx->irq_gpio); + p_aw91xxx->irq_num = gpio_to_irq(p_aw91xxx->irq_gpio); + if (p_aw91xxx->irq_num < 0) { + ret = p_aw91xxx->irq_num; + dev_err(p_aw91xxx->dev, "%s gpio to irq failed\r\n", __func__); + goto err; + } + + AW_DEBUG("aw91xxx irq num=%d\n", p_aw91xxx->irq_num); + ret = devm_request_threaded_irq(p_aw91xxx->dev, p_aw91xxx->irq_num, + NULL, aw91xxx_irq_func, + IRQF_TRIGGER_LOW | IRQF_ONESHOT, + "aw91xxx_irq", p_aw91xxx->key_data); + if (ret < 0) { + dev_err(p_aw91xxx->dev, "%s register irq failed\r\n", __func__); + goto err; + } + /* enable_irq_wake(p_aw91xxx->irq_num); */ + device_init_wakeup(p_aw91xxx->dev, 1); + return 0; +err: + devm_gpio_free(p_aw91xxx->dev, p_aw91xxx->irq_gpio); + return ret; +} + +static int aw91xxx_input_dev_register(struct aw91xxx *p_aw91xxx) +{ + int ret = 0; + int i = 0; + struct aw91xxx_key *p_key_data = p_aw91xxx->key_data; + + p_key_data->input = input_allocate_device(); + + if (p_key_data->input == NULL) { + ret = -ENOMEM; + dev_err(p_aw91xxx->dev, "%s: failed to allocate input device\n", + __func__); + return ret; + } + p_key_data->input->name = "aw91xxx-key"; + p_key_data->input->dev.parent = p_aw91xxx->dev; + p_key_data->keymap_len = sizeof(key_map) / sizeof(KEY_STATE); + p_key_data->keymap = (KEY_STATE *)&key_map; + input_set_drvdata(p_key_data->input, p_key_data); + + __set_bit(EV_KEY, p_key_data->input->evbit); + __set_bit(EV_SYN, p_key_data->input->evbit); + for (i = 0; i < p_key_data->keymap_len; i++) { + __set_bit(p_key_data->keymap[i].key_code & KEY_MAX, + p_key_data->input->keybit); + } + + ret = input_register_device(p_key_data->input); + if (ret) { + input_free_device(p_key_data->input); + dev_err(p_aw91xxx->dev, "%s: failed to allocate input device\n", + __func__); + return ret; + } + return 0; +} + +void aw91xxx_int_work(struct work_struct *work) +{ + struct delayed_work *p_delayed_work = + container_of(work, struct delayed_work, work); + struct aw91xxx_key *p_key_data = + container_of(p_delayed_work, struct aw91xxx_key, int_work); + AW_DEBUG("%s enter, %d\r\n", __func__, __LINE__); + schedule_work(&p_key_data->key_work); +} + +/* val 1-> output high 0->output low */ +static unsigned int aw91xxx_get_port_input_state(struct aw91xxx *p_aw91xxx) +{ + unsigned char reg_val[2] = { 0 }; + + aw91xxx_i2c_read(p_aw91xxx, REG_INPUT_P0, ®_val[0]); + aw91xxx_i2c_read(p_aw91xxx, REG_INPUT_P1, ®_val[1]); + return reg_val[0] | (reg_val[1] << 8); +} + +static void aw91xxx_key_work(struct work_struct *work) +{ + int i = 0; + int j = 0; + int real_idx = 0; + int real_row = 0; + int real_col = 0; + int key_code = 0; + int key_val = 0; + int key_num = 0; + unsigned int input_val = 0; + unsigned int retry_state; + struct aw91xxx_key *p_key_data = + container_of(work, struct aw91xxx_key, key_work); + struct aw91xxx *p_aw91xxx = p_key_data->priv; + unsigned int *new_state = p_key_data->new_output_state; + unsigned int *old_state = p_key_data->old_output_state; + unsigned char reg_val[2] = { 0 }; + /* + if wake_up_enable set to 1,the key fuction can be use in suspend mode. + if wake_up_enable set to 0,the key fuction will be banned in suspend mode. +*/ + if ((!p_key_data->wake_up_enable) && (!p_aw91xxx->screen_state)) { + enable_irq(p_aw91xxx->irq_num); + aw91xxx_enbale_interrupt_by_mask( + p_aw91xxx, p_key_data->input_port_mask, 1); + aw91xxx_clear_interrupt(p_aw91xxx); + return; + } + + if (p_aw91xxx->matrix_key_enable) { + for (i = 0, real_idx = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (p_key_data->output_port_mask & (0x01 << i)) { + aw91xxx_i2c_read_bits( + p_aw91xxx, REG_CONFIG_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); + + input_val = reg_val[0] | (reg_val[1] << 8); + input_val |= p_key_data->output_port_mask; + input_val &= ~(0x01 << i); + + reg_val[0] = input_val & 0xff; + reg_val[1] = (input_val >> 8) & 0xff; + + aw91xxx_i2c_write_bits( + p_aw91xxx, REG_CONFIG_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); + + aw91xxx_i2c_read_bits( + p_aw91xxx, REG_INPUT_P0, reg_val, + sizeof(reg_val) / sizeof(reg_val[0])); + new_state[real_idx] = + (reg_val[0] | (reg_val[1] << 8)) & + p_key_data->input_port_mask; + real_idx++; + } + } + /* key state change */ + if (memcmp(&new_state[0], &old_state[0], + p_key_data->output_port_nums * + sizeof(unsigned int))) { + /* stage changed */ + for (i = 0, real_col = 0; i < AW91XXX_KEY_PORT_MAX; + i++) { + if (p_key_data->output_port_mask & + (0x01 << i)) { + if (new_state[real_col] != + old_state[real_col]) { + for (j = 0, real_row = 0; + j < AW91XXX_KEY_PORT_MAX; + j++) { + if (p_key_data + ->input_port_mask & + (0x01 << j)) { + if ((new_state[real_col] & + (0x01 + << j)) != + (old_state[real_col] & + (0x01 + << j))) { + key_code = + p_key_data + ->keymap[real_row * + p_key_data + ->output_port_nums + + real_col] + .key_code; + key_val = + (old_state[real_col] & + (0x01 + << j)) ? + 1 : + 0; /* press or release */ + AW_DEBUG( + "aw91xxx report: key_num = %d\n", + (real_row * + p_key_data + ->output_port_nums + + real_col)); + AW_DEBUG( + "aw91xxx report: key_code = %x, key_val = %d\n", + key_code, + key_val); + AW_DEBUG( + "aw91xxx real_row = %d, real_col = %d\n", + real_row, + real_col); + input_report_key( + p_key_data + ->input, + key_code, + key_val); + input_sync( + p_key_data + ->input); + } + real_row++; + } + } + } + real_col++; + } + } + } + + memcpy(&old_state[0], &new_state[0], + p_key_data->output_port_nums * sizeof(unsigned int)); + +#if 0 + /* debug info */ + for (i = 0, real_idx = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (p_key_data->output_port_mask & (0x01 << i)) { + AW_DEBUG("new-state[%d] = 0x%x, old_state[%d] = 0x%x\r\n", + real_idx, new_state[real_idx], real_idx, + old_state[real_idx]); + real_idx++; + } + } +#endif + /* all key release */ + if (!memcmp(&new_state[0], &p_key_data->def_output_state[0], + p_key_data->output_port_nums * + sizeof(unsigned int))) { + aw91xxx_set_port_direction_by_mask( + p_aw91xxx, p_key_data->output_port_mask, + 1); /* set output mode */ + aw91xxx_clear_interrupt( + p_aw91xxx); /* clear inputerrupt */ + retry_state = aw91xxx_get_port_input_state(p_aw91xxx); + if ((retry_state & p_key_data->input_port_mask) == + p_key_data->input_port_mask) { + enable_irq(p_aw91xxx->irq_num); + aw91xxx_enbale_interrupt_by_mask( + p_aw91xxx, p_key_data->input_port_mask, + 1); + AW_DEBUG("%s enter, all key release.\n", + __func__); + return; + } + } + hrtimer_start(&p_key_data->key_timer, + ktime_set(0, (1000 / HRTIMER_FRAME) * 1000), + HRTIMER_MODE_REL); + } + + if (p_aw91xxx->single_key_enable) { + p_key_data->new_input_state = + aw91xxx_get_port_input_state(p_aw91xxx); + p_key_data->new_input_state &= p_key_data->input_port_mask; + real_idx = 0; + if (p_key_data->new_input_state != + p_key_data->old_input_state) { + for (i = 0; i < AW91XXX_KEY_PORT_MAX; i++) { + if (p_key_data->input_port_mask & (0x01 << i)) { + if ((p_key_data->new_input_state & + (0x01 << i)) != + (p_key_data->old_input_state & + (0x01 << i))) { + key_code = + p_key_data + ->keymap[real_idx] + .key_code; + key_val = + (p_key_data + ->old_input_state & + 0x01 << i) ? + 1 : + 0; /* press or release */ + key_num = + aw91xxx_separate_key_data + [real_idx]; + if (key_val == 1) { + AW_DEBUG( + "%s, key%d pressed\n", + __func__, + key_num); + } else { + AW_DEBUG( + "%s, key%d release\n", + __func__, + key_num); + } + /* AW_DEBUG("%s, key_code = 0x%x, key_val = 0x%x\r\n", __func__, key_code, key_val); */ + input_report_key( + p_key_data->input, + key_code, key_val); + input_sync(p_key_data->input); + } + real_idx++; + } + } + } + /* AW_DEBUG("%s,new input state = 0x%x, old input state = 0x%x\r\n", + __func__, p_key_data->new_input_state, + p_key_data->old_input_state); + */ + p_key_data->old_input_state = p_key_data->new_input_state; + aw91xxx_clear_interrupt(p_aw91xxx); + enable_irq(p_aw91xxx->irq_num); + /* enable input interrupt */ + aw91xxx_enbale_interrupt_by_mask( + p_aw91xxx, p_key_data->input_port_mask, 1); + return; + } +} + +static enum hrtimer_restart aw91xxx_timer_func(struct hrtimer *p_hrtimer) +{ + struct aw91xxx_key *p_key_data = + container_of(p_hrtimer, struct aw91xxx_key, key_timer); + + schedule_work(&p_key_data->key_work); + return HRTIMER_NORESTART; +} + +static void aw91xxx_key_chip_init(struct aw91xxx_key *p_key_data) +{ + unsigned int all_mask = 0; + struct aw91xxx *p_aw91xxx = p_key_data->priv; + AW_DEBUG("%s enter\n", __func__); + + disable_irq_nosync(p_key_data->priv->irq_num); + aw91xxx_enbale_interrupt_by_mask(p_aw91xxx, AW91XXX_INT_MASK, + 0); /* disale P0 P1 interrupt */ + all_mask = p_key_data->input_port_mask | p_key_data->output_port_mask; + aw91xxx_set_port_mode_by_mask(p_aw91xxx, all_mask, + 1); /* set gpio mode */ + aw91xxx_set_port_direction_by_mask( + p_aw91xxx, p_key_data->input_port_mask, 0); /* input mode */ + aw91xxx_set_port_direction_by_mask( + p_aw91xxx, p_key_data->output_port_mask, 1); /* output mode */ + aw91xxx_set_port_output_mode(p_aw91xxx, + 1); /* set output port pull push mode */ + + aw91xxx_set_port_output_state_by_mask(p_aw91xxx, + p_key_data->output_port_mask, + 0); /* set output low */ + + aw91xxx_enbale_interrupt_by_mask(p_aw91xxx, p_key_data->input_port_mask, + 1); /* enable input interrupt */ + /* clear inputerrupt */ + aw91xxx_clear_interrupt(p_aw91xxx); + enable_irq(p_key_data->priv->irq_num); +} + +static void aw91xxx_key_free_all_resource(struct aw91xxx *aw91xxx) +{ + if (aw91xxx->matrix_key_enable) { + devm_kfree(aw91xxx->dev, aw91xxx->key_data->new_output_state); + devm_kfree(aw91xxx->dev, aw91xxx->key_data->old_output_state); + devm_kfree(aw91xxx->dev, aw91xxx->key_data->def_output_state); + input_unregister_device(aw91xxx->key_data->input); + input_free_device(aw91xxx->key_data->input); + devm_gpio_free(aw91xxx->dev, aw91xxx->irq_gpio); + devm_kfree(aw91xxx->dev, aw91xxx->key_data); + } +} + +static void aw91xxx_single_key_chip_init(struct aw91xxx_key *p_key_data) +{ + unsigned int all_mask = 0; + struct aw91xxx *p_aw91xxx = p_key_data->priv; + + AW_DEBUG("%s enter\n", __func__); + + disable_irq_nosync(p_key_data->priv->irq_num); + aw91xxx_enbale_interrupt_by_mask(p_aw91xxx, AW91XXX_INT_MASK, + 0); /* disale P0 P1 interrupt */ + all_mask = p_key_data->input_port_mask; + p_key_data->old_input_state = p_key_data->input_port_mask; + aw91xxx_set_port_mode_by_mask(p_aw91xxx, all_mask, + 1); /* set gpio mode */ + aw91xxx_set_port_direction_by_mask( + p_aw91xxx, p_key_data->input_port_mask, 0); /* input mode */ + aw91xxx_set_port_output_mode(p_aw91xxx, + 1); /* set output port pull push mode */ + + aw91xxx_enbale_interrupt_by_mask(p_aw91xxx, p_key_data->input_port_mask, + 1); /* enable input interrupt */ + /* clear inputerrupt */ + aw91xxx_clear_interrupt(p_aw91xxx); + enable_irq(p_key_data->priv->irq_num); +} + +static int aw91xxx_key_feature_init(struct aw91xxx *aw91xxx) +{ + int ret = 0; + int i = 0; + struct aw91xxx_key *p_aw91xxx = NULL; + struct device_node *key_node = NULL; + + AW_DEBUG("%s enter\r\n", __func__); + + p_aw91xxx = devm_kzalloc(aw91xxx->dev, sizeof(struct aw91xxx_key), + GFP_KERNEL); + if (p_aw91xxx == NULL) { + dev_err(aw91xxx->dev, "%s: malloc memory failed\n", __func__); + return -ENOMEM; + } + aw91xxx->key_data = p_aw91xxx; + p_aw91xxx->priv = aw91xxx; + key_node = of_find_node_by_name(aw91xxx->dev->of_node, "aw91xxx,key"); + if (key_node == NULL) { + dev_err(aw91xxx->dev, + "%s: can't find aw91xxx,key node return failed\n", + __func__); + ret = -EINVAL; + goto err_id; + } + ret = aw91xxx_parse_dt_for_key(p_aw91xxx, key_node); + if (ret) { + dev_err(aw91xxx->dev, + "aw91xxx_parse_dt_for_key failed, check dts\n"); + goto err_id; + } + p_aw91xxx->old_output_state = + devm_kzalloc(aw91xxx->dev, + sizeof(unsigned int) * p_aw91xxx->output_port_nums, + GFP_KERNEL); + if (p_aw91xxx->old_output_state == NULL) { + dev_err(aw91xxx->dev, + "%s:aw91xxx->old_output_state malloc memory failed\r\n", + __func__); + goto err_id; + } + p_aw91xxx->new_output_state = + devm_kzalloc(aw91xxx->dev, + sizeof(unsigned int) * p_aw91xxx->output_port_nums, + GFP_KERNEL); + if (p_aw91xxx->new_output_state == NULL) { + dev_err(aw91xxx->dev, + "%s:aw91xxx->new_output_state malloc memory failed\r\n", + __func__); + goto free_old_output; + } + + p_aw91xxx->def_output_state = + devm_kzalloc(aw91xxx->dev, + sizeof(unsigned int) * p_aw91xxx->output_port_nums, + GFP_KERNEL); + if (p_aw91xxx->def_output_state == NULL) { + dev_err(aw91xxx->dev, + "%s:aw91xxx->def_output_state malloc memory failed\r\n", + __func__); + ret = -ENOMEM; + goto free_new_output; + } + + for (i = 0; i < p_aw91xxx->output_port_nums; i++) { + p_aw91xxx->new_output_state[i] = p_aw91xxx->input_port_mask; + p_aw91xxx->old_output_state[i] = p_aw91xxx->input_port_mask; + p_aw91xxx->def_output_state[i] = p_aw91xxx->input_port_mask; + } + + ret = aw91xxx_input_dev_register(aw91xxx); + if (ret < 0) { + dev_err(aw91xxx->dev, "%s input dev register failed\r\n", + __func__); + goto free_def_output; + } + + p_aw91xxx->debounce_delay = 1; + INIT_DELAYED_WORK(&p_aw91xxx->int_work, aw91xxx_int_work); + INIT_WORK(&p_aw91xxx->key_work, aw91xxx_key_work); + hrtimer_init(&p_aw91xxx->key_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); + p_aw91xxx->key_timer.function = aw91xxx_timer_func; + ret = aw91xxx_irq_register(aw91xxx); + if (ret < 0) { + dev_err(aw91xxx->dev, "%s irq register failed\r\n", __func__); + goto input_dev; + } + + if (aw91xxx->matrix_key_enable) + aw91xxx_key_chip_init(p_aw91xxx); + + if (aw91xxx->single_key_enable) + aw91xxx_single_key_chip_init(p_aw91xxx); + return 0; +input_dev: + input_unregister_device(p_aw91xxx->input); +free_def_output: + devm_kfree(aw91xxx->dev, p_aw91xxx->def_output_state); +free_new_output: + devm_kfree(aw91xxx->dev, p_aw91xxx->new_output_state); +free_old_output: + devm_kfree(aw91xxx->dev, p_aw91xxx->old_output_state); +err_id: + devm_kfree(aw91xxx->dev, aw91xxx->key_data); + return ret; +} + +/****************************************************** + * + * i2c driver + * + ******************************************************/ +static int aw91xxx_i2c_probe(struct i2c_client *i2c, + const struct i2c_device_id *id) +{ + struct aw91xxx *aw91xxx; + struct device_node *np = i2c->dev.of_node; + int ret; + + pr_info("%s enter\n", __func__); + + if (!i2c_check_functionality(i2c->adapter, I2C_FUNC_I2C)) { + dev_err(&i2c->dev, "check_functionality failed\n"); + return -EIO; + } + + aw91xxx = devm_kzalloc(&i2c->dev, sizeof(struct aw91xxx), GFP_KERNEL); + if (aw91xxx == NULL) + return -ENOMEM; + + aw91xxx->dev = &i2c->dev; + aw91xxx->i2c = i2c; + + i2c_set_clientdata(i2c, aw91xxx); + + /* aw91xxx rst & int */ + if (np) { + ret = aw91xxx_parse_dt(&i2c->dev, aw91xxx, np); + if (ret) { + dev_err(&i2c->dev, + "%s: failed to parse device tree node\n", + __func__); + goto err; + } + } else { + aw91xxx->reset_gpio = -1; + } + + if (gpio_is_valid(aw91xxx->reset_gpio)) { + ret = devm_gpio_request_one(&i2c->dev, aw91xxx->reset_gpio, + GPIOF_OUT_INIT_LOW, "aw91xxx_rst"); + if (ret) { + dev_err(&i2c->dev, "%s: rst request failed\n", + __func__); + goto err; + } + } + + aw91xxx_pinctrl_init(aw91xxx); + aw91xxx_pinctrl_select_power_active(aw91xxx); + + /* hardware reset */ + aw91xxx_hw_reset(aw91xxx); + + /* aw91xxx chip id */ + ret = aw91xxx_read_chipid(aw91xxx); + if (ret < 0) { + dev_err(&i2c->dev, "%s: aw91xxx_read_chipid failed ret=%d\n", + __func__, ret); + goto err_free_rst; + } + + aw91xxx_identify_vendorid(aw91xxx); + + dev_set_drvdata(&i2c->dev, aw91xxx); + + if (aw91xxx->single_key_enable) { + /* single key init */ + ret = aw91xxx_key_feature_init(aw91xxx); + if (ret) { + dev_err(aw91xxx->dev, + "aw91xxx single key feature init failed \r\n"); + goto err_free_rst; + } + } + + if (aw91xxx->matrix_key_enable) { + /* key init */ + ret = aw91xxx_key_feature_init(aw91xxx); + if (ret) { + dev_err(aw91xxx->dev, + "aw91xxx key feature init failed \r\n"); + goto err_free_rst; + } + } + + if (aw91xxx->led_feature_enable) { + ret = aw91xxx_parse_led_cdev(aw91xxx, np); + if (ret < 0) { + dev_err(&i2c->dev, "%s error creating led class dev\n", + __func__); + goto free_key; + } + } + + if (aw91xxx->gpio_feature_enable) { + /* gpio init */ + ret = aw91xxx_gpio_feature_init(aw91xxx); + if (ret) { + dev_err(aw91xxx->dev, + "aw91xxx gpio feature init failed \r\n"); + goto free_key; + } + } + aw91xxx->screen_state = true; +#ifdef CONFIG_EXTRA_BACKLIGHT_NOTIFER + aw91xxx->aw_notifier.notifier_call = dsi_extra_led_notifier_callback; + ret = dsi_extra_led_notifier_register(&aw91xxx->aw_notifier); + if (ret) { + dev_err(aw91xxx->dev, "aw91xxx notifier register init failed \n"); + goto err_notifier; + } +#endif + + pr_info("%s probe completed successfully!\n", __func__); + + return 0; + +#ifdef CONFIG_EXTRA_BACKLIGHT_NOTIFER +err_notifier: + dsi_extra_led_notifier_unregister(&aw91xxx->aw_notifier); +#endif +free_key: + aw91xxx_key_free_all_resource(aw91xxx); +err_free_rst: + aw91xxx_pinctrl_select_shdn_suspend(aw91xxx); + usleep_range(100, 200); + aw91xxx_pinctrl_select_power_suspend(aw91xxx); + gpio_free(aw91xxx->reset_gpio); + gpio_free(aw91xxx->vcc_gpio); +err: + devm_kfree(&i2c->dev, aw91xxx); + return ret; +} + +static int aw91xxx_i2c_remove(struct i2c_client *i2c) +{ + struct aw91xxx *aw91xxx = i2c_get_clientdata(i2c); + + pr_info("%s enter\n", __func__); + +#ifdef CONFIG_EXTRA_BACKLIGHT_NOTIFER + dsi_extra_led_notifier_unregister(&aw91xxx->aw_notifier); +#endif + + if (gpio_is_valid(aw91xxx->reset_gpio)) + devm_gpio_free(&i2c->dev, aw91xxx->reset_gpio); + aw91xxx_gpio_free_all_resource(aw91xxx); + devm_kfree(aw91xxx->dev, aw91xxx); + + aw91xxx_pinctrl_select_shdn_suspend(aw91xxx); + usleep_range(100, 200); + aw91xxx_pinctrl_select_power_suspend(aw91xxx); + if (aw91xxx->pinctrl) { + devm_pinctrl_put(aw91xxx->pinctrl); + } + aw91xxx->pinctrl = NULL; + aw91xxx->pins_shdn_active = NULL; + aw91xxx->pins_shdn_suspend = NULL; + aw91xxx->pins_power_active = NULL; + aw91xxx->pins_power_suspend = NULL; + return 0; +} + +static const struct i2c_device_id aw91xxx_i2c_id[] = { { AW91XXX_I2C_NAME, 0 }, + {} }; +MODULE_DEVICE_TABLE(i2c, aw91xxx_i2c_id); + +static struct of_device_id aw91xxx_dt_match[] = { + { .compatible = "awinic,aw91xxx_led" }, + {}, +}; + +static int aw91xxx_pm_suspend(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct aw91xxx *aw91xxx = i2c_get_clientdata(client); + + pr_info("%s \n", __func__); + aw91xxx_pinctrl_select_shdn_suspend(aw91xxx); + usleep_range(100, 200); + aw91xxx_pinctrl_select_power_suspend(aw91xxx); + + return 0; +} + +static int aw91xxx_pm_resume(struct device *dev) +{ + struct i2c_client *client = to_i2c_client(dev); + struct aw91xxx *aw91xxx = i2c_get_clientdata(client); + + pr_info("%s \n", __func__); + aw91xxx_pinctrl_select_power_active(aw91xxx); + usleep_range(100, 200); + aw91xxx_pinctrl_select_shdn_active(aw91xxx); + mdelay(5); + aw91xxx_i2c_write(aw91xxx, REG_SWRST, 0x00); + aw91xxx_led_chip_init(aw91xxx); + aw91xxx_i2c_write(aw91xxx, REG_EN_BREATH, 0x00); + aw91xxx_i2c_write(aw91xxx, REG_FADE_TIME, 0x01); + aw91xxx_i2c_write(aw91xxx, REG_CTRL, aw91xxx->imax); + + return 0; +} + +static const struct dev_pm_ops aw91xxx_dev_pm_ops = { + .suspend = aw91xxx_pm_suspend, + .resume = aw91xxx_pm_resume, +}; + +static struct i2c_driver aw91xxx_i2c_driver = { + .driver = { + .name = AW91XXX_I2C_NAME, + .owner = THIS_MODULE, + .of_match_table = of_match_ptr(aw91xxx_dt_match), + .pm = &aw91xxx_dev_pm_ops, + }, + .probe = aw91xxx_i2c_probe, + .remove = aw91xxx_i2c_remove, + .id_table = aw91xxx_i2c_id, +}; + +static int __init aw91xxx_i2c_init(void) +{ + int ret = 0; + + pr_info("aw91xxx driver version %s\n", AW91XXX_DRIVER_VERSION); + + ret = i2c_add_driver(&aw91xxx_i2c_driver); + if (ret) { + pr_err("fail to add aw91xxx device into i2c\n"); + return ret; + } + + return 0; +} +module_init(aw91xxx_i2c_init); + +static void __exit aw91xxx_i2c_exit(void) +{ + i2c_del_driver(&aw91xxx_i2c_driver); +} +module_exit(aw91xxx_i2c_exit); + +MODULE_DESCRIPTION("AW91XXX LED Driver"); +MODULE_LICENSE("GPL v2"); diff --git a/drivers/leds/AW91XXX/leds-aw91xxx.h b/drivers/leds/AW91XXX/leds-aw91xxx.h new file mode 100644 index 000000000000..94614aac4913 --- /dev/null +++ b/drivers/leds/AW91XXX/leds-aw91xxx.h @@ -0,0 +1,133 @@ +#ifndef _AW91XXX_H_ +#define _AW91XXX_H_ + +#define AWINIC_DEBUG 1 + +#ifdef AWINIC_DEBUG +#define AW_DEBUG(fmt, args...) pr_info(fmt, ##args); +#else +#define AW_DEBUG(fmt, ...) + +#endif + +#define MAX_I2C_BUFFER_SIZE 65536 + +#define AW91XXX_ID 0x23 +#define AW91XXX_KEY_PORT_MAX (0x10) /* 16 */ +#define AW91XXX_INT_MASK (0xFFFF) + +enum AW91XXX_FADE_TIME { + AW91XXX_FADE_TIME_0000MS = 0x00, + AW91XXX_FADE_TIME_0315MS = 0X01, + AW91XXX_FADE_TIME_0630MS = 0x02, + AW91XXX_FADE_TIME_1260MS = 0x03, + AW91XXX_FADE_TIME_2520MS = 0x04, + AW91XXX_FADE_TIME_5040MS = 0x05 +}; + +enum aw91xxx_gpio_dir { + AW91XXX_GPIO_INPUT = 0, + AW91XXX_GPIO_OUTPUT = 1, +}; + +enum aw91xxx_gpio_val { + AW91XXX_GPIO_HIGH = 1, + AW91XXX_GPIO_LOW = 0, +}; + +enum aw91xxx_gpio_output_mode { + AW91XXX_OPEN_DRAIN_OUTPUT = 0, + AW91XXX_PUSH_PULL_OUTPUT = 1, +}; + +struct aw91xxx_singel_gpio { + unsigned int gpio_idx; + enum aw91xxx_gpio_dir gpio_direction; + enum aw91xxx_gpio_val state; + struct aw91xxx *priv; +}; + +struct aw91xxx_gpio { + unsigned int gpio_mask; + unsigned int gpio_num; + enum aw91xxx_gpio_output_mode output_mode; + struct aw91xxx_singel_gpio *single_gpio_data; +}; + +typedef struct { + char name[10]; + int key_code; + int key_val; +} KEY_STATE; + +unsigned int aw91xxx_separate_key_data[AW91XXX_KEY_PORT_MAX] = { +/* 0 1 2 3 */ + 1, 2, 3, 4, + 5, 6, 7, 8, + 9, 10, 11, 12, + 13, 14, 15, 16 +}; + +struct aw91xxx_key { + unsigned int key_mask; + unsigned int input_port_nums; + unsigned int output_port_nums; + unsigned int input_port_mask; + unsigned int output_port_mask; + unsigned int new_input_state; + unsigned int old_input_state; + unsigned int *new_output_state; + unsigned int *old_output_state; + unsigned int *def_output_state; + bool wake_up_enable; + struct input_dev *input; + + unsigned int debounce_delay; + struct delayed_work int_work; + struct hrtimer key_timer; + struct work_struct key_work; + KEY_STATE *keymap; + int keymap_len; + struct aw91xxx *priv; +}; + +struct aw91xxx { + struct i2c_client *i2c; + struct device *dev; + struct led_classdev cdev; + struct work_struct brightness_work; + struct delayed_work int_work; +#ifdef CONFIG_EXTRA_BACKLIGHT_NOTIFER + struct notifier_block aw_notifier; +#endif + int reset_gpio; + int irq_gpio; + int irq_num; + int vcc_gpio; + + unsigned char chipid; + unsigned char vendor_id; + + int imax; + int rise_time; + int on_time; + int fall_time; + int off_time; + + bool led_feature_enable; + bool gpio_feature_enable; + bool matrix_key_enable; + bool single_key_enable; + bool screen_state; + + struct aw91xxx_gpio *gpio_data; + struct aw91xxx_key *key_data; + + struct pinctrl *pinctrl; + struct pinctrl_state *pins_shdn_active; + struct pinctrl_state *pins_shdn_suspend; + struct pinctrl_state *pins_power_active; + struct pinctrl_state *pins_power_suspend; +}; + +#endif diff --git a/drivers/leds/Kconfig b/drivers/leds/Kconfig index e2b8820d125b..98c30f3cb806 100644 --- a/drivers/leds/Kconfig +++ b/drivers/leds/Kconfig @@ -85,6 +85,14 @@ config LEDS_AW2016 this option enables support for the AW2016 RGB LED connected through I2C. Say Y to enable support for the AW2016 LED +config LEDS_AW91XXX + tristate "LED Support for AW91XXX" + depends on LEDS_CLASS && I2C + default n + help + this option enables support for the AW91XXX RGB LED connected + through I2C. Say Y to enable support for the AW91XXX LED + config LEDS_BCM6328 tristate "LED Support for Broadcom BCM6328" depends on LEDS_CLASS diff --git a/drivers/leds/Makefile b/drivers/leds/Makefile index b306664b7932..ce3c2864a412 100644 --- a/drivers/leds/Makefile +++ b/drivers/leds/Makefile @@ -84,6 +84,7 @@ obj-$(CONFIG_LEDS_QTI_TRI_LED) += leds-qti-tri-led.o obj-$(CONFIG_LEDS_QPNP_FLASH_V2) += leds-qpnp-flash-v2.o leds-qpnp-flash-common.o obj-$(CONFIG_LEDS_QPNP_VIBRATOR_LDO) += leds-qpnp-vibrator-ldo.o obj-$(CONFIG_LEDS_QPNP_VIBRATOR) += leds-qpnp-vibrator.o +obj-$(CONFIG_LEDS_AW91XXX) += AW91XXX/ # LED SPI Drivers obj-$(CONFIG_LEDS_CR0014114) += leds-cr0014114.o diff --git a/drivers/leds/leds.h b/drivers/leds/leds.h index dbb9a361072e..971576dac469 100644 --- a/drivers/leds/leds.h +++ b/drivers/leds/leds.h @@ -23,6 +23,7 @@ static inline int led_get_brightness(struct led_classdev *led_cdev) static inline struct led_classdev *trigger_to_lcdev(struct led_trigger *trig) { +#ifdef CONFIG_LEDS_TRIGGERS struct led_classdev *led_cdev; read_lock(&trig->leddev_list_lock); @@ -34,6 +35,7 @@ static inline struct led_classdev *trigger_to_lcdev(struct led_trigger *trig) } read_unlock(&trig->leddev_list_lock); +#endif return NULL; } diff --git a/drivers/power/reset/msm-poweroff.c b/drivers/power/reset/msm-poweroff.c index c1b0799963e6..fc9cb7754b0d 100644 --- a/drivers/power/reset/msm-poweroff.c +++ b/drivers/power/reset/msm-poweroff.c @@ -47,6 +47,7 @@ #define KASLR_OFFSET_PROP "qcom,msm-imem-kaslr_offset" #define KASLR_OFFSET_BIT_MASK 0x00000000FFFFFFFF +#define BUILD_VARIANT 20 static int restart_mode; static void *restart_reason, *dload_type_addr; @@ -64,6 +65,7 @@ static void scm_disable_sdi(void); */ static int download_mode = 1; static struct kobject dload_kobj; +static char buildvariant[BUILD_VARIANT]; static int in_panic; static int dload_type = SCM_DLOAD_FULLDUMP; @@ -603,6 +605,22 @@ static void do_msm_poweroff(void) pr_err("Powering off has failed\n"); } +static int __init check_buildvariant(char *line) +{ + strlcpy(buildvariant, line, sizeof(buildvariant)); + return 1; +} + +__setup("buildvariant=", check_buildvariant); + +static inline bool is_user(void) +{ + static const char typeuser[] = "user"; + + return !strncmp(buildvariant, typeuser, sizeof(typeuser)); +} + + static int msm_restart_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; @@ -644,6 +662,10 @@ static int msm_restart_probe(struct platform_device *pdev) if (scm_is_call_available(SCM_SVC_PWR, SCM_IO_DEASSERT_PS_HOLD) > 0) scm_deassert_ps_hold_supported = true; + if (is_user()) { + download_mode = 0; + } + set_dload_mode(download_mode); if (!download_mode) scm_disable_sdi(); diff --git a/drivers/power/supply/qcom/smblite-lib.c b/drivers/power/supply/qcom/smblite-lib.c index c747f958dce8..727058960c68 100644 --- a/drivers/power/supply/qcom/smblite-lib.c +++ b/drivers/power/supply/qcom/smblite-lib.c @@ -2352,24 +2352,28 @@ static void update_sw_icl_max(struct smb_charger *chg, break; case POWER_SUPPLY_TYPE_USB_CDP: icl_ua = CDP_CURRENT_UA; + vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, icl_ua); break; case POWER_SUPPLY_TYPE_USB_DCP: icl_ua = get_rp_based_dcp_current(chg, typec_mode); + vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, icl_ua); break; case POWER_SUPPLY_TYPE_UNKNOWN: default: icl_ua = USBIN_100UA; + vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, icl_ua); break; } if (is_flashlite_active(chg) && type != POWER_SUPPLY_TYPE_USB) { - vote(chg->usb_icl_votable, FLASH_ACTIVE_VOTER, true, - icl_ua - USBIN_300UA); - smblite_lib_dbg(chg, PR_MISC, "flash_active = 1 ICL is set to %d\n", + if (icl_ua >= USBIN_400UA) { + vote(chg->usb_icl_votable, FLASH_ACTIVE_VOTER, true, icl_ua - USBIN_300UA); - vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, icl_ua); + smblite_lib_dbg(chg, PR_MISC, "flash_active = 1 ICL is set to %d\n", + icl_ua - USBIN_300UA); + vote(chg->usb_icl_votable, SW_ICL_MAX_VOTER, true, icl_ua); + } } - } static void typec_sink_insertion(struct smb_charger *chg) diff --git a/drivers/power/supply/qcom/smblite-lib.h b/drivers/power/supply/qcom/smblite-lib.h index 8c33d17753e9..538bc7e7e088 100644 --- a/drivers/power/supply/qcom/smblite-lib.h +++ b/drivers/power/supply/qcom/smblite-lib.h @@ -67,10 +67,10 @@ enum print_reason { #define USBIN_500UA 500000 #define USBIN_900UA 900000 #define CDP_CURRENT_UA 1500000 -#define DCP_CURRENT_UA 1500000 +#define DCP_CURRENT_UA 2000000 #define TYPEC_DEFAULT_CURRENT_UA 900000 #define TYPEC_MEDIUM_CURRENT_UA 1500000 -#define TYPEC_HIGH_CURRENT_UA 3000000 +#define TYPEC_HIGH_CURRENT_UA 2000000 #define ROLE_REVERSAL_DELAY_MS 500 enum smb_mode { diff --git a/drivers/soc/qcom/socinfo.c b/drivers/soc/qcom/socinfo.c index 519f0edaeb7f..b0ce04cb48b4 100644 --- a/drivers/soc/qcom/socinfo.c +++ b/drivers/soc/qcom/socinfo.c @@ -15,6 +15,7 @@ #include #include #include +#include #include @@ -35,6 +36,20 @@ #define SMEM_IMAGE_VERSION_OEM_OFFSET 95 #define SMEM_IMAGE_VERSION_PARTITION_APPS 10 +#define BOARD_ID1_GPIO (1153 + 69) //MSM BASE + GPIO69 +#define BOARD_ID2_GPIO (1153 + 70) //MSM BASE + GPIO70 +#define BOARD_ID3_GPIO (1153 + 81) //MSM BASE + GPIO81 + +#define HW_VERSION_PRT1 41 // ID1 = 1 + ID2 = 1 + ID3 = 1 +#define HW_VERSION_PRT2 42 // ID1 = 1 + ID2 = 1 + ID3 = 0 +#define HW_VERSION_HVT 43 // ID1 = 1 + ID2 = 0 + ID3 = 1 +#define HW_VERSION_EVT1 44 // ID1 = 1 + ID2 = 0 + ID3 = 0 +#define HW_VERSION_EVT2 45 // ID1 = 0 + ID2 = 1 + ID3 = 1 +#define HW_VERSION_DVT 46 // ID1 = 0 + ID2 = 1 + ID3 = 0 +#define HW_VERSION_PVT 47 // ID1 = 0 + ID2 = 0 + ID3 = 1 +#define HW_VERSION_MP 48 // ID1 = 0 + ID2 = 0 + ID3 = 0 +#define QCM_TYPE_IDP 34 + static DECLARE_RWSEM(current_image_rwsem); enum { HW_PLATFORM_UNKNOWN = 0, @@ -735,6 +750,44 @@ msm_get_hw_platform(struct device *dev, hw_platform[hw_type]); } +static ssize_t +msm_get_hw_id(struct device *dev, + struct device_attribute *attr, + char *buf) +{ + uint32_t boardtype = 0; + uint32_t boardid1; + uint32_t boardid2; + uint32_t boardid3; + + boardid1 = gpio_get_value(BOARD_ID1_GPIO); + boardid2 = gpio_get_value(BOARD_ID2_GPIO); + boardid3 = gpio_get_value(BOARD_ID3_GPIO); + + if ((boardid1 == 1) && (boardid2 == 1) && (boardid3 == 1)) { + boardtype = HW_VERSION_PRT1; + } else if ((boardid1 == 1) && (boardid2 == 1) && (boardid3 == 0)) { + boardtype = HW_VERSION_PRT2; + } else if ((boardid1 == 1) && (boardid2 == 0) && (boardid3 == 1)) { + boardtype = HW_VERSION_HVT; + } else if ((boardid1 == 1) && (boardid2 == 0) && (boardid3 == 0)) { + boardtype = HW_VERSION_EVT1; + } else if ((boardid1 == 0) && (boardid2 == 1) && (boardid3 == 1)) { + boardtype = HW_VERSION_EVT2; + } else if ((boardid1 == 0) && (boardid2 == 1) && (boardid3 == 0)) { + boardtype = HW_VERSION_DVT; + } else if ((boardid1 == 0) && (boardid2 == 0) && (boardid3 == 1)) { + boardtype = HW_VERSION_PVT; + } else if ((boardid1 == 0) && (boardid2 == 0) && (boardid3 == 0)) { + boardtype = HW_VERSION_MP; + } else { + boardtype = QCM_TYPE_IDP; + } + + return snprintf(buf, PAGE_SIZE, "%u\n", + boardtype); +} + static ssize_t msm_get_platform_version(struct device *dev, struct device_attribute *attr, @@ -1227,6 +1280,8 @@ static struct device_attribute msm_soc_attr_build_id = static struct device_attribute msm_soc_attr_hw_platform = __ATTR(hw_platform, 0444, msm_get_hw_platform, NULL); +static struct device_attribute msm_soc_attr_hw_id = + __ATTR(hw_id, 0444, msm_get_hw_id, NULL); static struct device_attribute msm_soc_attr_platform_version = __ATTR(platform_version, 0444, @@ -1560,6 +1615,7 @@ static void __init populate_soc_sysfs_files(struct device *msm_soc_device) break; } + device_create_file(msm_soc_device, &msm_soc_attr_hw_id); } static void __init soc_info_populate(struct soc_device_attribute *soc_dev_attr) diff --git a/include/linux/extra_led.h b/include/linux/extra_led.h new file mode 100644 index 000000000000..b9f8c8415dc0 --- /dev/null +++ b/include/linux/extra_led.h @@ -0,0 +1,10 @@ +#ifndef _EXTRA_LED_H +#define _EXTRA_LED_H + +#include + +extern int dsi_extra_led_notifier_register(struct notifier_block *nb); +extern int dsi_extra_led_notifier_unregister(struct notifier_block *nb); +extern int dsi_extra_led_notifer_call_chain(unsigned long value); + +#endif /* _EXTRA_LED_H */ \ No newline at end of file